diff -Nru tor-0.2.1.30/acinclude.m4 tor-0.2.2.35/acinclude.m4 --- tor-0.2.1.30/acinclude.m4 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/acinclude.m4 2011-12-15 16:26:49.000000000 +0000 @@ -1,4 +1,3 @@ -dnl $Id$ dnl Helper macros for Tor configure.in dnl Copyright (c) 2001-2004, Roger Dingledine dnl Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson @@ -122,13 +121,13 @@ # Can we link against (but not necessarily run, or find the headers for) # the binary? - AC_LINK_IFELSE(AC_LANG_PROGRAM([$5], [$6]), + AC_LINK_IFELSE([AC_LANG_PROGRAM([$5], [$6])], [linkable=yes], [linkable=no]) if test "$linkable" = yes; then tor_$1_any_linkable=yes # Okay, we can link against it. Can we find the headers? - AC_COMPILE_IFELSE(AC_LANG_PROGRAM([$4], [$6]), + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$4], [$6])], [buildable=yes], [buildable=no]) if test "$buildable" = yes; then tor_cv_library_$1_dir=$tor_trydir @@ -180,7 +179,7 @@ else LDFLAGS="$tor_tryextra $orig_LDFLAGS" fi - AC_RUN_IFELSE(AC_LANG_PROGRAM([$5], [$6]), + AC_RUN_IFELSE([AC_LANG_PROGRAM([$5], [$6])], [runnable=yes], [runnable=no]) if test "$runnable" = yes; then tor_cv_library_$1_linker_option=$tor_tryextra @@ -212,7 +211,7 @@ dnl TOR_CHECK_PROTYPE(1:functionname, 2:macroname, 2: includes) AC_DEFUN([TOR_CHECK_PROTOTYPE], [ AC_CACHE_CHECK([for declaration of $1], tor_cv_$1_declared, [ - AC_COMPILE_IFELSE(AC_LANG_PROGRAM([$3],[void *ptr= $1 ;]), + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$3],[void *ptr= $1 ;])], tor_cv_$1_declared=yes,tor_cv_$1_declared=no)]) if test x$tor_cv_$1_declared != xno ; then AC_DEFINE($2, 1, diff -Nru tor-0.2.1.30/aclocal.m4 tor-0.2.2.35/aclocal.m4 --- tor-0.2.1.30/aclocal.m4 2011-02-23 08:25:49.000000000 +0000 +++ tor-0.2.2.35/aclocal.m4 2011-12-15 17:01:53.000000000 +0000 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.10.1 -*- Autoconf -*- +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,13 +13,13 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(AC_AUTOCONF_VERSION, [2.61],, -[m4_warning([this file was generated for autoconf 2.61. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -31,10 +31,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.10' +[am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.10.1], [], +m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -48,12 +48,12 @@ # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.10.1])dnl +[AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)]) +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -110,14 +110,14 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -130,6 +130,7 @@ AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -143,14 +144,14 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 9 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -207,6 +208,16 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -224,7 +235,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -234,19 +255,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -303,57 +328,68 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -385,13 +421,13 @@ # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2008 Free Software Foundation, Inc. +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 13 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -408,7 +444,7 @@ # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.60])dnl +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl @@ -459,8 +495,8 @@ AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -468,23 +504,36 @@ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES(OBJC)], - [define([AC_PROG_OBJC], - defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl -]) -]) + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. @@ -508,7 +557,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -519,7 +568,14 @@ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -545,13 +601,13 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -560,7 +616,7 @@ [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -570,24 +626,24 @@ _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -597,14 +653,14 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 5 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -621,7 +677,14 @@ AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -659,13 +722,13 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -682,7 +745,7 @@ # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -692,14 +755,14 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -708,16 +771,29 @@ # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -770,18 +846,25 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006 Free Software Foundation, Inc. +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. +# serial 2 + # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. diff -Nru tor-0.2.1.30/AUTHORS tor-0.2.2.35/AUTHORS --- tor-0.2.1.30/AUTHORS 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/AUTHORS 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ - This file lists the authors for Tor, - a free software project to provide anonymity on the Internet. - - For more information about Tor, see https://www.torproject.org/. - - If you got this file as a part of a larger bundle, - there are probably other authors that you should be aware of. - -Main authors: -------------- - -Roger Dingledine overhauled all of the code, did -a bunch of new design work, etc. - -Nick Mathewson wrote lots of stuff too, in -particular the router and descriptor parsing, and the crypto and tls -wrappers. - -Matej Pfajfar wrote the first version of the code -(called OR) in 2001-2002. - -Contributors: -------------- - -John Bashinski contributed the initial rpm spec file. - -Christian Grothoff contributed better daemonizing -behavior. - -Steven Hazel made 'make install' do the right -thing. - -Jason Holt contributed patches to the instructions -and the man page. - -Peter Palfrader maintains everything that's -debian-specific, and has written other useful features. - -Aaron Turner contributed the first version of -the tor.sh initscripts shell script. - diff -Nru tor-0.2.1.30/ChangeLog tor-0.2.2.35/ChangeLog --- tor-0.2.1.30/ChangeLog 2011-02-23 08:25:44.000000000 +0000 +++ tor-0.2.2.35/ChangeLog 2011-12-15 19:50:27.000000000 +0000 @@ -1,3 +1,1224 @@ +Changes in version 0.2.2.35 - 2011-12-16 + Tor 0.2.2.35 fixes a critical heap-overflow security issue in Tor's + buffers code. Absolutely everybody should upgrade. + + The bug relied on an incorrect calculation when making data continuous + in one of our IO buffers, if the first chunk of the buffer was + misaligned by just the wrong amount. The miscalculation would allow an + attacker to overflow a piece of heap-allocated memory. To mount this + attack, the attacker would need to either open a SOCKS connection to + Tor's SocksPort (usually restricted to localhost), or target a Tor + instance configured to make its connections through a SOCKS proxy + (which Tor does not do by default). + + Good security practice requires that all heap-overflow bugs should be + presumed to be exploitable until proven otherwise, so we are treating + this as a potential code execution attack. Please upgrade immediately! + This bug does not affect bufferevents-based builds of Tor. Special + thanks to "Vektor" for reporting this issue to us! + + Tor 0.2.2.35 also fixes several bugs in previous versions, including + crash bugs for unusual configurations, and a long-term bug that + would that would prevent Tor from starting on Windows machines with + draconian AV software. + + With this release, we remind everyone that 0.2.0.x has reached its + formal end-of-life. Those Tor versions have many known flaws, and + nobody should be using them. You should upgrade--ideally to the + 0.2.2.x series. If you're using a Linux or BSD and its packages are + obsolete, stop using those packages and upgrade anyway. + + The Tor 0.2.1.x series is also approaching its end-of-life: it will no + longer receive support after some time in early 2012. + + o Major bugfixes: + - Fix a heap overflow bug that could occur when trying to pull + data into the first chunk of a buffer, when that chunk had + already had some data drained from it. Fixes CVE-2011-2778; + bugfix on 0.2.0.16-alpha. Reported by "Vektor". + - Initialize Libevent with the EVENT_BASE_FLAG_NOLOCK flag enabled, so + that it doesn't attempt to allocate a socketpair. This could cause + some problems on Windows systems with overzealous firewalls. Fix for + bug 4457; workaround for Libevent versions 2.0.1-alpha through + 2.0.15-stable. + - If we mark an OR connection for close based on a cell we process, + don't process any further cells on it. We already avoid further + reads on marked-for-close connections, but now we also discard the + cells we'd already read. Fixes bug 4299; bugfix on 0.2.0.10-alpha, + which was the first version where we might mark a connection for + close based on processing a cell on it. + - Correctly sanity-check that we don't underflow on a memory + allocation (and then assert) for hidden service introduction + point decryption. Bug discovered by Dan Rosenberg. Fixes bug 4410; + bugfix on 0.2.1.5-alpha. + - Fix a memory leak when we check whether a hidden service + descriptor has any usable introduction points left. Fixes bug + 4424. Bugfix on 0.2.2.25-alpha. + - Don't crash when we're running as a relay and don't have a GeoIP + file. Bugfix on 0.2.2.34; fixes bug 4340. This backports a fix + we've had in the 0.2.3.x branch already. + - When running as a client, do not print a misleading (and plain + wrong) log message that we're collecting "directory request" + statistics: clients don't collect statistics. Also don't create a + useless (because empty) stats file in the stats/ directory. Fixes + bug 4353; bugfix on 0.2.2.34. + + o Minor bugfixes: + - Detect failure to initialize Libevent. This fix provides better + detection for future instances of bug 4457. + - Avoid frequent calls to the fairly expensive cull_wedged_cpuworkers + function. This was eating up hideously large amounts of time on some + busy servers. Fixes bug 4518; bugfix on 0.0.9.8. + - Resolve an integer overflow bug in smartlist_ensure_capacity(). + Fixes bug 4230; bugfix on Tor 0.1.0.1-rc. Based on a patch by + Mansour Moufid. + - Don't warn about unused log_mutex in log.c when building with + --disable-threads using a recent GCC. Fixes bug 4437; bugfix on + 0.1.0.6-rc which introduced --disable-threads. + - When configuring, starting, or stopping an NT service, stop + immediately after the service configuration attempt has succeeded + or failed. Fixes bug 3963; bugfix on 0.2.0.7-alpha. + - When sending a NETINFO cell, include the original address + received for the other side, not its canonical address. Found + by "troll_un"; fixes bug 4349; bugfix on 0.2.0.10-alpha. + - Fix a typo in a hibernation-related log message. Fixes bug 4331; + bugfix on 0.2.2.23-alpha; found by "tmpname0901". + - Fix a memory leak in launch_direct_bridge_descriptor_fetch() that + occurred when a client tried to fetch a descriptor for a bridge + in ExcludeNodes. Fixes bug 4383; bugfix on 0.2.2.25-alpha. + - Backport fixes for a pair of compilation warnings on Windows. + Fixes bug 4521; bugfix on 0.2.2.28-beta and on 0.2.2.29-beta. + - If we had ever tried to call tor_addr_to_str on an address of + unknown type, we would have done a strdup on an uninitialized + buffer. Now we won't. Fixes bug 4529; bugfix on 0.2.1.3-alpha. + Reported by "troll_un". + - Correctly detect and handle transient lookup failures from + tor_addr_lookup. Fixes bug 4530; bugfix on 0.2.1.5-alpha. + Reported by "troll_un". + - Fix null-pointer access that could occur if TLS allocation failed. + Fixes bug 4531; bugfix on 0.2.0.20-rc. Found by "troll_un". + - Use tor_socket_t type for listener argument to accept(). Fixes bug + 4535; bugfix on 0.2.2.28-beta. Found by "troll_un". + + o Minor features: + - Add two new config options for directory authorities: + AuthDirFastGuarantee sets a bandwidth threshold for guaranteeing the + Fast flag, and AuthDirGuardBWGuarantee sets a bandwidth threshold + that is always sufficient to satisfy the bandwidth requirement for + the Guard flag. Now it will be easier for researchers to simulate + Tor networks with different values. Resolves ticket 4484. + - When Tor ignores a hidden service specified in its configuration, + include the hidden service's directory in the warning message. + Previously, we would only tell the user that some hidden service + was ignored. Bugfix on 0.0.6; fixes bug 4426. + - Update to the December 6 2011 Maxmind GeoLite Country database. + + o Packaging changes: + - Make it easier to automate expert package builds on Windows, + by removing an absolute path from makensis.exe command. + + +Changes in version 0.2.2.34 - 2011-10-26 + Tor 0.2.2.34 fixes a critical anonymity vulnerability where an attacker + can deanonymize Tor users. Everybody should upgrade. + + The attack relies on four components: 1) Clients reuse their TLS cert + when talking to different relays, so relays can recognize a user by + the identity key in her cert. 2) An attacker who knows the client's + identity key can probe each guard relay to see if that identity key + is connected to that guard relay right now. 3) A variety of active + attacks in the literature (starting from "Low-Cost Traffic Analysis + of Tor" by Murdoch and Danezis in 2005) allow a malicious website to + discover the guard relays that a Tor user visiting the website is using. + 4) Clients typically pick three guards at random, so the set of guards + for a given user could well be a unique fingerprint for her. This + release fixes components #1 and #2, which is enough to block the attack; + the other two remain as open research problems. Special thanks to + "frosty_un" for reporting the issue to us! + + Clients should upgrade so they are no longer recognizable by the TLS + certs they present. Relays should upgrade so they no longer allow a + remote attacker to probe them to test whether unpatched clients are + currently connected to them. + + This release also fixes several vulnerabilities that allow an attacker + to enumerate bridge relays. Some bridge enumeration attacks still + remain; see for example proposal 188. + + o Privacy/anonymity fixes (clients): + - Clients and bridges no longer send TLS certificate chains on + outgoing OR connections. Previously, each client or bridge would + use the same cert chain for all outgoing OR connections until + its IP address changes, which allowed any relay that the client + or bridge contacted to determine which entry guards it is using. + Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un". + - If a relay receives a CREATE_FAST cell on a TLS connection, it + no longer considers that connection as suitable for satisfying a + circuit EXTEND request. Now relays can protect clients from the + CVE-2011-2768 issue even if the clients haven't upgraded yet. + - Directory authorities no longer assign the Guard flag to relays + that haven't upgraded to the above "refuse EXTEND requests + to client connections" fix. Now directory authorities can + protect clients from the CVE-2011-2768 issue even if neither + the clients nor the relays have upgraded yet. There's a new + "GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays" config option + to let us transition smoothly, else tomorrow there would be no + guard relays. + + o Privacy/anonymity fixes (bridge enumeration): + - Bridge relays now do their directory fetches inside Tor TLS + connections, like all the other clients do, rather than connecting + directly to the DirPort like public relays do. Removes another + avenue for enumerating bridges. Fixes bug 4115; bugfix on 0.2.0.35. + - Bridges relays now build circuits for themselves in a more similar + way to how clients build them. Removes another avenue for + enumerating bridges. Fixes bug 4124; bugfix on 0.2.0.3-alpha, + when bridges were introduced. + - Bridges now refuse CREATE or CREATE_FAST cells on OR connections + that they initiated. Relays could distinguish incoming bridge + connections from client connections, creating another avenue for + enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha. + Found by "frosty_un". + + o Major bugfixes: + - Fix a crash bug when changing node restrictions while a DNS lookup + is in-progress. Fixes bug 4259; bugfix on 0.2.2.25-alpha. Bugfix + by "Tey'". + - Don't launch a useless circuit after failing to use one of a + hidden service's introduction points. Previously, we would + launch a new introduction circuit, but not set the hidden service + which that circuit was intended to connect to, so it would never + actually be used. A different piece of code would then create a + new introduction circuit correctly. Bug reported by katmagic and + found by Sebastian Hahn. Bugfix on 0.2.1.13-alpha; fixes bug 4212. + + o Minor bugfixes: + - Change an integer overflow check in the OpenBSD_Malloc code so + that GCC is less likely to eliminate it as impossible. Patch + from Mansour Moufid. Fixes bug 4059. + - When a hidden service turns an extra service-side introduction + circuit into a general-purpose circuit, free the rend_data and + intro_key fields first, so we won't leak memory if the circuit + is cannibalized for use as another service-side introduction + circuit. Bugfix on 0.2.1.7-alpha; fixes bug 4251. + - Bridges now skip DNS self-tests, to act a little more stealthily. + Fixes bug 4201; bugfix on 0.2.0.3-alpha, which first introduced + bridges. Patch by "warms0x". + - Fix internal bug-checking logic that was supposed to catch + failures in digest generation so that it will fail more robustly + if we ask for a nonexistent algorithm. Found by Coverity Scan. + Bugfix on 0.2.2.1-alpha; fixes Coverity CID 479. + - Report any failure in init_keys() calls launched because our + IP address has changed. Spotted by Coverity Scan. Bugfix on + 0.1.1.4-alpha; fixes CID 484. + + o Minor bugfixes (log messages and documentation): + - Remove a confusing dollar sign from the example fingerprint in the + man page, and also make the example fingerprint a valid one. Fixes + bug 4309; bugfix on 0.2.1.3-alpha. + - The next version of Windows will be called Windows 8, and it has + a major version of 6, minor version of 2. Correctly identify that + version instead of calling it "Very recent version". Resolves + ticket 4153; reported by funkstar. + - Downgrade log messages about circuit timeout calibration from + "notice" to "info": they don't require or suggest any human + intervention. Patch from Tom Lowenthal. Fixes bug 4063; + bugfix on 0.2.2.14-alpha. + + o Minor features: + - Turn on directory request statistics by default and include them in + extra-info descriptors. Don't break if we have no GeoIP database. + Backported from 0.2.3.1-alpha; implements ticket 3951. + - Update to the October 4 2011 Maxmind GeoLite Country database. + + +Changes in version 0.2.1.31 - 2011-10-26 + Tor 0.2.1.31 backports important security and privacy fixes for + oldstable. This release is intended only for package maintainers and + others who cannot use the 0.2.2 stable series. All others should be + using Tor 0.2.2.x or newer. + + o Security fixes (also included in 0.2.2.x): + - Replace all potentially sensitive memory comparison operations + with versions whose runtime does not depend on the data being + compared. This will help resist a class of attacks where an + adversary can use variations in timing information to learn + sensitive data. Fix for one case of bug 3122. (Safe memcmp + implementation by Robert Ransom based partially on code by DJB.) + - Fix an assert in parsing router descriptors containing IPv6 + addresses. This one took down the directory authorities when + somebody tried some experimental code. Bugfix on 0.2.1.3-alpha. + + o Privacy/anonymity fixes (also included in 0.2.2.x): + - Clients and bridges no longer send TLS certificate chains on + outgoing OR connections. Previously, each client or bridge + would use the same cert chain for all outgoing OR connections + for up to 24 hours, which allowed any relay that the client or + bridge contacted to determine which entry guards it is using. + Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by frosty_un. + - If a relay receives a CREATE_FAST cell on a TLS connection, it + no longer considers that connection as suitable for satisfying a + circuit EXTEND request. Now relays can protect clients from the + CVE-2011-2768 issue even if the clients haven't upgraded yet. + - Bridges now refuse CREATE or CREATE_FAST cells on OR connections + that they initiated. Relays could distinguish incoming bridge + connections from client connections, creating another avenue for + enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha. + Found by "frosty_un". + - When receiving a hidden service descriptor, check that it is for + the hidden service we wanted. Previously, Tor would store any + hidden service descriptors that a directory gave it, whether it + wanted them or not. This wouldn't have let an attacker impersonate + a hidden service, but it did let directories pre-seed a client + with descriptors that it didn't want. Bugfix on 0.0.6. + - Avoid linkability based on cached hidden service descriptors: forget + all hidden service descriptors cached as a client when processing a + SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6. + - Make the bridge directory authority refuse to answer directory + requests for "all" descriptors. It used to include bridge + descriptors in its answer, which was a major information leak. + Found by "piebeer". Bugfix on 0.2.0.3-alpha. + - Don't attach new streams to old rendezvous circuits after SIGNAL + NEWNYM. Previously, we would keep using an existing rendezvous + circuit if it remained open (i.e. if it were kept open by a + long-lived stream, or if a new stream were attached to it before + Tor could notice that it was old and no longer in use). Bugfix on + 0.1.1.15-rc; fixes bug 3375. + + o Minor bugfixes (also included in 0.2.2.x): + - When we restart our relay, we might get a successful connection + from the outside before we've started our reachability tests, + triggering a warning: "ORPort found reachable, but I have no + routerinfo yet. Failing to inform controller of success." This + bug was harmless unless Tor is running under a controller + like Vidalia, in which case the controller would never get a + REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha; + fixes bug 1172. + - Build correctly on OSX with zlib 1.2.4 and higher with all warnings + enabled. Fixes bug 1526. + - Remove undocumented option "-F" from tor-resolve: it hasn't done + anything since 0.2.1.16-rc. + - Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned. + None of the cases where we did this before were wrong, but by making + this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28. + - Fix a rare crash bug that could occur when a client was configured + with a large number of bridges. Fixes bug 2629; bugfix on + 0.2.1.2-alpha. Bugfix by trac user "shitlei". + - Correct the warning displayed when a rendezvous descriptor exceeds + the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by + John Brooks. + - Fix an uncommon assertion failure when running with DNSPort under + heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha. + - When warning about missing zlib development packages during compile, + give the correct package names. Bugfix on 0.2.0.1-alpha. + - Require that introduction point keys and onion keys have public + exponent 65537. Bugfix on 0.2.0.10-alpha. + - Do not crash when our configuration file becomes unreadable, for + example due to a permissions change, between when we start up + and when a controller calls SAVECONF. Fixes bug 3135; bugfix + on 0.0.9pre6. + - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option. + Fixes bug 3208. + - Always NUL-terminate the sun_path field of a sockaddr_un before + passing it to the kernel. (Not a security issue: kernels are + smart enough to reject bad sockaddr_uns.) Found by Coverity; + CID #428. Bugfix on Tor 0.2.0.3-alpha. + - Don't stack-allocate the list of supplementary GIDs when we're + about to log them. Stack-allocating NGROUPS_MAX gid_t elements + could take up to 256K, which is way too much stack. Found by + Coverity; CID #450. Bugfix on 0.2.1.7-alpha. + + o Minor bugfixes (only in 0.2.1.x): + - Resume using micro-version numbers in 0.2.1.x: our Debian packages + rely on them. Bugfix on 0.2.1.30. + - Use git revisions instead of svn revisions when generating our + micro-version numbers. Bugfix on 0.2.1.15-rc; fixes bug 2402. + + o Minor features (also included in 0.2.2.x): + - Adjust the expiration time on our SSL session certificates to + better match SSL certs seen in the wild. Resolves ticket 4014. + - Allow nameservers with IPv6 address. Resolves bug 2574. + - Update to the October 4 2011 Maxmind GeoLite Country database. + + +Changes in version 0.2.2.33 - 2011-09-13 + Tor 0.2.2.33 fixes several bugs, and includes a slight tweak to Tor's + TLS handshake that makes relays and bridges that run this new version + reachable from Iran again. + + o Major bugfixes: + - Avoid an assertion failure when reloading a configuration with + TrackExitHosts changes. Found and fixed by 'laruldan'. Fixes bug + 3923; bugfix on 0.2.2.25-alpha. + + o Minor features (security): + - Check for replays of the public-key encrypted portion of an + INTRODUCE1 cell, in addition to the current check for replays of + the g^x value. This prevents a possible class of active attacks + by an attacker who controls both an introduction point and a + rendezvous point, and who uses the malleability of AES-CTR to + alter the encrypted g^x portion of the INTRODUCE1 cell. We think + that these attacks are infeasible (requiring the attacker to send + on the order of zettabytes of altered cells in a short interval), + but we'd rather block them off in case there are any classes of + this attack that we missed. Reported by Willem Pinckaers. + + o Minor features: + - Adjust the expiration time on our SSL session certificates to + better match SSL certs seen in the wild. Resolves ticket 4014. + - Change the default required uptime for a relay to be accepted as + a HSDir (hidden service directory) from 24 hours to 25 hours. + Improves on 0.2.0.10-alpha; resolves ticket 2649. + - Add a VoteOnHidServDirectoriesV2 config option to allow directory + authorities to abstain from voting on assignment of the HSDir + consensus flag. Related to bug 2649. + - Update to the September 6 2011 Maxmind GeoLite Country database. + + o Minor bugfixes (documentation and log messages): + - Correct the man page to explain that HashedControlPassword and + CookieAuthentication can both be set, in which case either method + is sufficient to authenticate to Tor. Bugfix on 0.2.0.7-alpha, + when we decided to allow these config options to both be set. Issue + raised by bug 3898. + - Demote the 'replay detected' log message emitted when a hidden + service receives the same Diffie-Hellman public key in two different + INTRODUCE2 cells to info level. A normal Tor client can cause that + log message during its normal operation. Bugfix on 0.2.1.6-alpha; + fixes part of bug 2442. + - Demote the 'INTRODUCE2 cell is too {old,new}' log message to info + level. There is nothing that a hidden service's operator can do + to fix its clients' clocks. Bugfix on 0.2.1.6-alpha; fixes part + of bug 2442. + - Clarify a log message specifying the characters permitted in + HiddenServiceAuthorizeClient client names. Previously, the log + message said that "[A-Za-z0-9+-_]" were permitted; that could have + given the impression that every ASCII character between "+" and "_" + was permitted. Now we say "[A-Za-z0-9+_-]". Bugfix on 0.2.1.5-alpha. + + o Build fixes: + - Provide a substitute implementation of lround() for MSVC, which + apparently lacks it. Patch from Gisle Vanem. + - Clean up some code issues that prevented Tor from building on older + BSDs. Fixes bug 3894; reported by "grarpamp". + - Search for a platform-specific version of "ar" when cross-compiling. + Should fix builds on iOS. Resolves bug 3909, found by Marco Bonetti. + + +Changes in version 0.2.2.32 - 2011-08-27 + The Tor 0.2.2 release series is dedicated to the memory of Andreas + Pfitzmann (1958-2010), a pioneer in anonymity and privacy research, + a founder of the PETS community, a leader in our field, a mentor, + and a friend. He left us with these words: "I had the possibility + to contribute to this world that is not as it should be. I hope I + could help in some areas to make the world a better place, and that + I could also encourage other people to be engaged in improving the + world. Please, stay engaged. This world needs you, your love, your + initiative -- now I cannot be part of that anymore." + + Tor 0.2.2.32, the first stable release in the 0.2.2 branch, is finally + ready. More than two years in the making, this release features improved + client performance and hidden service reliability, better compatibility + for Android, correct behavior for bridges that listen on more than + one address, more extensible and flexible directory object handling, + better reporting of network statistics, improved code security, and + many many other features and bugfixes. + + +Changes in version 0.2.2.31-rc - 2011-08-17 + Tor 0.2.2.31-rc is the second and hopefully final release candidate + for the Tor 0.2.2.x series. + + o Major bugfixes: + - Remove an extra pair of quotation marks around the error + message in control-port STATUS_GENERAL BUG events. Bugfix on + 0.1.2.6-alpha; fixes bug 3732. + - If we're configured to write our ControlPorts to disk, only write + them after switching UID and creating the data directory. This way, + we don't fail when starting up with a nonexistent DataDirectory + and a ControlPortWriteToFile setting based on that directory. Fixes + bug 3747; bugfix on Tor 0.2.2.26-beta. + + o Minor features: + - Update to the August 2 2011 Maxmind GeoLite Country database. + + o Minor bugfixes: + - Allow GETINFO fingerprint to return a fingerprint even when + we have not yet built a router descriptor. Fixes bug 3577; + bugfix on 0.2.0.1-alpha. + - Write several files in text mode, on OSes that distinguish text + mode from binary mode (namely, Windows). These files are: + 'buffer-stats', 'dirreq-stats', and 'entry-stats' on relays + that collect those statistics; 'client_keys' and 'hostname' for + hidden services that use authentication; and (in the tor-gencert + utility) newly generated identity and signing keys. Previously, + we wouldn't specify text mode or binary mode, leading to an + assertion failure. Fixes bug 3607. Bugfix on 0.2.1.1-alpha (when + the DirRecordUsageByCountry option which would have triggered + the assertion failure was added), although this assertion failure + would have occurred in tor-gencert on Windows in 0.2.0.1-alpha. + - Selectively disable deprecation warnings on OS X because Lion + started deprecating the shipped copy of openssl. Fixes bug 3643. + - When unable to format an address as a string, report its value + as "???" rather than reusing the last formatted address. Bugfix + on 0.2.1.5-alpha. + + +Changes in version 0.2.2.30-rc - 2011-07-07 + Tor 0.2.2.30-rc is the first release candidate for the Tor 0.2.2.x + series. It fixes a few smaller bugs, but generally appears stable. + Please test it and let us know whether it is! + + o Minor bugfixes: + - Send a SUCCEEDED stream event to the controller when a reverse + resolve succeeded. Fixes bug 3536; bugfix on 0.0.8pre1. Issue + discovered by katmagic. + - Always NUL-terminate the sun_path field of a sockaddr_un before + passing it to the kernel. (Not a security issue: kernels are + smart enough to reject bad sockaddr_uns.) Found by Coverity; + CID #428. Bugfix on Tor 0.2.0.3-alpha. + - Don't stack-allocate the list of supplementary GIDs when we're + about to log them. Stack-allocating NGROUPS_MAX gid_t elements + could take up to 256K, which is way too much stack. Found by + Coverity; CID #450. Bugfix on 0.2.1.7-alpha. + - Add BUILDTIMEOUT_SET to the list returned by the 'GETINFO + events/names' control-port command. Bugfix on 0.2.2.9-alpha; + fixes part of bug 3465. + - Fix a memory leak when receiving a descriptor for a hidden + service we didn't ask for. Found by Coverity; CID #30. Bugfix + on 0.2.2.26-beta. + + o Minor features: + - Update to the July 1 2011 Maxmind GeoLite Country database. + + +Changes in version 0.2.2.29-beta - 2011-06-20 + Tor 0.2.2.29-beta reverts an accidental behavior change for users who + have bridge lines in their torrc but don't want to use them; gets + us closer to having the control socket feature working on Debian; + and fixes a variety of smaller bugs. + + o Major bugfixes: + - Revert the UseBridges option to its behavior before 0.2.2.28-beta. + When we changed the default behavior to "use bridges if any + are listed in the torrc", we surprised users who had bridges + in their torrc files but who didn't actually want to use them. + Partial resolution for bug 3354. + + o Privacy fixes: + - Don't attach new streams to old rendezvous circuits after SIGNAL + NEWNYM. Previously, we would keep using an existing rendezvous + circuit if it remained open (i.e. if it were kept open by a + long-lived stream, or if a new stream were attached to it before + Tor could notice that it was old and no longer in use). Bugfix on + 0.1.1.15-rc; fixes bug 3375. + + o Minor bugfixes: + - Fix a bug when using ControlSocketsGroupWritable with User. The + directory's group would be checked against the current group, not + the configured group. Patch by Jérémy Bobbio. Fixes bug 3393; + bugfix on 0.2.2.26-beta. + - Make connection_printf_to_buf()'s behaviour sane. Its callers + expect it to emit a CRLF iff the format string ends with CRLF; + it actually emitted a CRLF iff (a) the format string ended with + CRLF or (b) the resulting string was over 1023 characters long or + (c) the format string did not end with CRLF *and* the resulting + string was 1021 characters long or longer. Bugfix on 0.1.1.9-alpha; + fixes part of bug 3407. + - Make send_control_event_impl()'s behaviour sane. Its callers + expect it to always emit a CRLF at the end of the string; it + might have emitted extra control characters as well. Bugfix on + 0.1.1.9-alpha; fixes another part of bug 3407. + - Make crypto_rand_int() check the value of its input correctly. + Previously, it accepted values up to UINT_MAX, but could return a + negative number if given a value above INT_MAX+1. Found by George + Kadianakis. Fixes bug 3306; bugfix on 0.2.2pre14. + - Avoid a segfault when reading a malformed circuit build state + with more than INT_MAX entries. Found by wanoskarnet. Bugfix on + 0.2.2.4-alpha. + - When asked about a DNS record type we don't support via a + client DNSPort, reply with NOTIMPL rather than an empty + reply. Patch by intrigeri. Fixes bug 3369; bugfix on 2.0.1-alpha. + - Fix a rare memory leak during stats writing. Found by coverity. + + o Minor features: + - Update to the June 1 2011 Maxmind GeoLite Country database. + + o Code simplifications and refactoring: + - Remove some dead code as indicated by coverity. + - Remove a few dead assignments during router parsing. Found by + coverity. + - Add some forgotten return value checks during unit tests. Found + by coverity. + - Don't use 1-bit wide signed bit fields. Found by coverity. + + +Changes in version 0.2.2.28-beta - 2011-06-04 + Tor 0.2.2.28-beta makes great progress towards a new stable release: we + fixed a big bug in whether relays stay in the consensus consistently, + we moved closer to handling bridges and hidden services correctly, + and we started the process of better handling the dreaded "my Vidalia + died, and now my Tor demands a password when I try to reconnect to it" + usability issue. + + o Major bugfixes: + - Don't decide to make a new descriptor when receiving a HUP signal. + This bug has caused a lot of 0.2.2.x relays to disappear from the + consensus periodically. Fixes the most common case of triggering + bug 1810; bugfix on 0.2.2.7-alpha. + - Actually allow nameservers with IPv6 addresses. Fixes bug 2574. + - Don't try to build descriptors if "ORPort auto" is set and we + don't know our actual ORPort yet. Fix for bug 3216; bugfix on + 0.2.2.26-beta. + - Resolve a crash that occurred when setting BridgeRelay to 1 with + accounting enabled. Fixes bug 3228; bugfix on 0.2.2.18-alpha. + - Apply circuit timeouts to opened hidden-service-related circuits + based on the correct start time. Previously, we would apply the + circuit build timeout based on time since the circuit's creation; + it was supposed to be applied based on time since the circuit + entered its current state. Bugfix on 0.0.6; fixes part of bug 1297. + - Use the same circuit timeout for client-side introduction + circuits as for other four-hop circuits, rather than the timeout + for single-hop directory-fetch circuits; the shorter timeout may + have been appropriate with the static circuit build timeout in + 0.2.1.x and earlier, but caused many hidden service access attempts + to fail with the adaptive CBT introduced in 0.2.2.2-alpha. Bugfix + on 0.2.2.2-alpha; fixes another part of bug 1297. + - In ticket 2511 we fixed a case where you could use an unconfigured + bridge if you had configured it as a bridge the last time you ran + Tor. Now fix another edge case: if you had configured it as a bridge + but then switched to a different bridge via the controller, you + would still be willing to use the old one. Bugfix on 0.2.0.1-alpha; + fixes bug 3321. + + o Major features: + - Add an __OwningControllerProcess configuration option and a + TAKEOWNERSHIP control-port command. Now a Tor controller can ensure + that when it exits, Tor will shut down. Implements feature 3049. + - If "UseBridges 1" is set and no bridges are configured, Tor will + now refuse to build any circuits until some bridges are set. + If "UseBridges auto" is set, Tor will use bridges if they are + configured and we are not running as a server, but otherwise will + make circuits as usual. The new default is "auto". Patch by anonym, + so the Tails LiveCD can stop automatically revealing you as a Tor + user on startup. + + o Minor bugfixes: + - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option. + - Remove a trailing asterisk from "exit-policy/default" in the + output of the control port command "GETINFO info/names". Bugfix + on 0.1.2.5-alpha. + - Use a wide type to hold sockets when built for 64-bit Windows builds. + Fixes bug 3270. + - Warn when the user configures two HiddenServiceDir lines that point + to the same directory. Bugfix on 0.0.6 (the version introducing + HiddenServiceDir); fixes bug 3289. + - Remove dead code from rend_cache_lookup_v2_desc_as_dir. Fixes + part of bug 2748; bugfix on 0.2.0.10-alpha. + - Log malformed requests for rendezvous descriptors as protocol + warnings, not warnings. Also, use a more informative log message + in case someone sees it at log level warning without prior + info-level messages. Fixes the other part of bug 2748; bugfix + on 0.2.0.10-alpha. + - Clear the table recording the time of the last request for each + hidden service descriptor from each HS directory on SIGNAL NEWNYM. + Previously, we would clear our HS descriptor cache on SIGNAL + NEWNYM, but if we had previously retrieved a descriptor (or tried + to) from every directory responsible for it, we would refuse to + fetch it again for up to 15 minutes. Bugfix on 0.2.2.25-alpha; + fixes bug 3309. + - Fix a log message that said "bits" while displaying a value in + bytes. Found by wanoskarnet. Fixes bug 3318; bugfix on + 0.2.0.1-alpha. + - When checking for 1024-bit keys, check for 1024 bits, not 128 + bytes. This allows Tor to correctly discard keys of length 1017 + through 1023. Bugfix on 0.0.9pre5. + + o Minor features: + - Relays now log the reason for publishing a new relay descriptor, + so we have a better chance of hunting down instances of bug 1810. + Resolves ticket 3252. + - Revise most log messages that refer to nodes by nickname to + instead use the "$key=nickname at address" format. This should be + more useful, especially since nicknames are less and less likely + to be unique. Resolves ticket 3045. + - Log (at info level) when purging pieces of hidden-service-client + state because of SIGNAL NEWNYM. + + o Removed options: + - Remove undocumented option "-F" from tor-resolve: it hasn't done + anything since 0.2.1.16-rc. + + +Changes in version 0.2.2.27-beta - 2011-05-18 + Tor 0.2.2.27-beta fixes a bridge-related stability bug in the previous + release, and also adds a few more general bugfixes. + + o Major bugfixes: + - Fix a crash bug when changing bridges in a running Tor process. + Fixes bug 3213; bugfix on 0.2.2.26-beta. + - When the controller configures a new bridge, don't wait 10 to 60 + seconds before trying to fetch its descriptor. Bugfix on + 0.2.0.3-alpha; fixes bug 3198 (suggested by 2355). + + o Minor bugfixes: + - Require that onion keys have exponent 65537 in microdescriptors too. + Fixes more of bug 3207; bugfix on 0.2.2.26-beta. + - Tor used to limit HttpProxyAuthenticator values to 48 characters. + Changed the limit to 512 characters by removing base64 newlines. + Fixes bug 2752. Fix by Michael Yakubovich. + - When a client starts or stops using bridges, never use a circuit + that was built before the configuration change. This behavior could + put at risk a user who uses bridges to ensure that her traffic + only goes to the chosen addresses. Bugfix on 0.2.0.3-alpha; fixes + bug 3200. + + +Changes in version 0.2.2.26-beta - 2011-05-17 + Tor 0.2.2.26-beta fixes a variety of potential privacy problems. It + also introduces a new "socksport auto" approach that should make it + easier to run multiple Tors on the same system, and does a lot of + cleanup to get us closer to a release candidate. + + o Security/privacy fixes: + - Replace all potentially sensitive memory comparison operations + with versions whose runtime does not depend on the data being + compared. This will help resist a class of attacks where an + adversary can use variations in timing information to learn + sensitive data. Fix for one case of bug 3122. (Safe memcmp + implementation by Robert Ransom based partially on code by DJB.) + - When receiving a hidden service descriptor, check that it is for + the hidden service we wanted. Previously, Tor would store any + hidden service descriptors that a directory gave it, whether it + wanted them or not. This wouldn't have let an attacker impersonate + a hidden service, but it did let directories pre-seed a client + with descriptors that it didn't want. Bugfix on 0.0.6. + - On SIGHUP, do not clear out all TrackHostExits mappings, client + DNS cache entries, and virtual address mappings: that's what + NEWNYM is for. Fixes bug 1345; bugfix on 0.1.0.1-rc. + + o Major features: + - The options SocksPort, ControlPort, and so on now all accept a + value "auto" that opens a socket on an OS-selected port. A + new ControlPortWriteToFile option tells Tor to write its + actual control port or ports to a chosen file. If the option + ControlPortFileGroupReadable is set, the file is created as + group-readable. Now users can run two Tor clients on the same + system without needing to manually mess with parameters. Resolves + part of ticket 3076. + - Set SO_REUSEADDR on all sockets, not just listeners. This should + help busy exit nodes avoid running out of useable ports just + because all the ports have been used in the near past. Resolves + issue 2850. + + o Minor features: + - New "GETINFO net/listeners/(type)" controller command to return + a list of addresses and ports that are bound for listeners for a + given connection type. This is useful when the user has configured + "SocksPort auto" and the controller needs to know which port got + chosen. Resolves another part of ticket 3076. + - Add a new ControlSocketsGroupWritable configuration option: when + it is turned on, ControlSockets are group-writeable by the default + group of the current user. Patch by Jérémy Bobbio; implements + ticket 2972. + - Tor now refuses to create a ControlSocket in a directory that is + world-readable (or group-readable if ControlSocketsGroupWritable + is 0). This is necessary because some operating systems do not + enforce permissions on an AF_UNIX sockets. Permissions on the + directory holding the socket, however, seems to work everywhere. + - Rate-limit a warning about failures to download v2 networkstatus + documents. Resolves part of bug 1352. + - Backport code from 0.2.3.x that allows directory authorities to + clean their microdescriptor caches. Needed to resolve bug 2230. + - When an HTTPS proxy reports "403 Forbidden", we now explain + what it means rather than calling it an unexpected status code. + Closes bug 2503. Patch from Michael Yakubovich. + - Update to the May 1 2011 Maxmind GeoLite Country database. + + o Minor bugfixes: + - Authorities now clean their microdesc cache periodically and when + reading from disk initially, not only when adding new descriptors. + This prevents a bug where we could lose microdescriptors. Bugfix + on 0.2.2.6-alpha. 2230 + - Do not crash when our configuration file becomes unreadable, for + example due to a permissions change, between when we start up + and when a controller calls SAVECONF. Fixes bug 3135; bugfix + on 0.0.9pre6. + - Avoid a bug that would keep us from replacing a microdescriptor + cache on Windows. (We would try to replace the file while still + holding it open. That's fine on Unix, but Windows doesn't let us + do that.) Bugfix on 0.2.2.6-alpha; bug found by wanoskarnet. + - Add missing explanations for the authority-related torrc options + RephistTrackTime, BridgePassword, and V3AuthUseLegacyKey in the + man page. Resolves issue 2379. + - As an authority, do not upload our own vote or signature set to + ourself. It would tell us nothing new, and as of 0.2.2.24-alpha, + it would get flagged as a duplicate. Resolves bug 3026. + - Accept hidden service descriptors if we think we might be a hidden + service directory, regardless of what our consensus says. This + helps robustness, since clients and hidden services can sometimes + have a more up-to-date view of the network consensus than we do, + and if they think that the directory authorities list us a HSDir, + we might actually be one. Related to bug 2732; bugfix on + 0.2.0.10-alpha. + - When a controller changes TrackHostExits, remove mappings for + hosts that should no longer have their exits tracked. Bugfix on + 0.1.0.1-rc. + - When a controller changes VirtualAddrNetwork, remove any mappings + for hosts that were automapped to the old network. Bugfix on + 0.1.1.19-rc. + - When a controller changes one of the AutomapHosts* options, remove + any mappings for hosts that should no longer be automapped. Bugfix + on 0.2.0.1-alpha. + - Do not reset the bridge descriptor download status every time we + re-parse our configuration or get a configuration change. Fixes + bug 3019; bugfix on 0.2.0.3-alpha. + + o Minor bugfixes (code cleanup): + - When loading the microdesc journal, remember its current size. + In 0.2.2, this helps prevent the microdesc journal from growing + without limit on authorities (who are the only ones to use it in + 0.2.2). Fixes a part of bug 2230; bugfix on 0.2.2.6-alpha. + Fix posted by "cypherpunks." + - The microdesc journal is supposed to get rebuilt only if it is + at least _half_ the length of the store, not _twice_ the length + of the store. Bugfix on 0.2.2.6-alpha; fixes part of bug 2230. + - Fix a potential null-pointer dereference while computing a + consensus. Bugfix on tor-0.2.0.3-alpha, found with the help of + clang's analyzer. + - Avoid a possible null-pointer dereference when rebuilding the mdesc + cache without actually having any descriptors to cache. Bugfix on + 0.2.2.6-alpha. Issue discovered using clang's static analyzer. + - If we fail to compute the identity digest of a v3 legacy keypair, + warn, and don't use a buffer-full of junk instead. Bugfix on + 0.2.1.1-alpha; fixes bug 3106. + - Resolve an untriggerable issue in smartlist_string_num_isin(), + where if the function had ever in the future been used to check + for the presence of a too-large number, it would have given an + incorrect result. (Fortunately, we only used it for 16-bit + values.) Fixes bug 3175; bugfix on 0.1.0.1-rc. + - Require that introduction point keys and onion handshake keys + have a public exponent of 65537. Starts to fix bug 3207; bugfix + on 0.2.0.10-alpha. + + o Removed features: + - Caches no longer download and serve v2 networkstatus documents + unless FetchV2Networkstatus flag is set: these documents haven't + haven't been used by clients or relays since 0.2.0.x. Resolves + bug 3022. + + +Changes in version 0.2.2.25-alpha - 2011-04-29 + Tor 0.2.2.25-alpha fixes many bugs: hidden service clients are more + robust, routers no longer overreport their bandwidth, Win7 should crash + a little less, and NEWNYM (as used by Vidalia's "new identity" button) + now prevents hidden service-related activity from being linkable. It + provides more information to Vidalia so you can see if your bridge is + working. Also, 0.2.2.25-alpha revamps the Entry/Exit/ExcludeNodes and + StrictNodes configuration options to make them more reliable, more + understandable, and more regularly applied. If you use those options, + please see the revised documentation for them in the manual page. + + o Major bugfixes: + - Relays were publishing grossly inflated bandwidth values because + they were writing their state files wrong--now they write the + correct value. Also, resume reading bandwidth history from the + state file correctly. Fixes bug 2704; bugfix on 0.2.2.23-alpha. + - Improve hidden service robustness: When we find that we have + extended a hidden service's introduction circuit to a relay not + listed as an introduction point in the HS descriptor we currently + have, retry with an introduction point from the current + descriptor. Previously we would just give up. Fixes bugs 1024 and + 1930; bugfix on 0.2.0.10-alpha. + - Clients now stop trying to use an exit node associated with a given + destination by TrackHostExits if they fail to reach that exit node. + Fixes bug 2999. Bugfix on 0.2.0.20-rc. + - Fix crash bug on platforms where gmtime and localtime can return + NULL. Windows 7 users were running into this one. Fixes part of bug + 2077. Bugfix on all versions of Tor. Found by boboper. + + o Security and stability fixes: + - Don't double-free a parsable, but invalid, microdescriptor, even if + it is followed in the blob we're parsing by an unparsable + microdescriptor. Fixes an issue reported in a comment on bug 2954. + Bugfix on 0.2.2.6-alpha; fix by "cypherpunks". + - If the Nickname configuration option isn't given, Tor would pick a + nickname based on the local hostname as the nickname for a relay. + Because nicknames are not very important in today's Tor and the + "Unnamed" nickname has been implemented, this is now problematic + behavior: It leaks information about the hostname without being + useful at all. Fixes bug 2979; bugfix on 0.1.2.2-alpha, which + introduced the Unnamed nickname. Reported by tagnaq. + - Fix an uncommon assertion failure when running with DNSPort under + heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha. + - Avoid linkability based on cached hidden service descriptors: forget + all hidden service descriptors cached as a client when processing a + SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6. + + o Major features: + - Export GeoIP information on bridge usage to controllers even if we + have not yet been running for 24 hours. Now Vidalia bridge operators + can get more accurate and immediate feedback about their + contributions to the network. + + o Major features and bugfixes (node selection): + - Revise and reconcile the meaning of the ExitNodes, EntryNodes, + ExcludeEntryNodes, ExcludeExitNodes, ExcludeNodes, and StrictNodes + options. Previously, we had been ambiguous in describing what + counted as an "exit" node, and what operations exactly "StrictNodes + 0" would permit. This created confusion when people saw nodes built + through unexpected circuits, and made it hard to tell real bugs from + surprises. Now the intended behavior is: + . "Exit", in the context of ExitNodes and ExcludeExitNodes, means + a node that delivers user traffic outside the Tor network. + . "Entry", in the context of EntryNodes, means a node used as the + first hop of a multihop circuit. It doesn't include direct + connections to directory servers. + . "ExcludeNodes" applies to all nodes. + . "StrictNodes" changes the behavior of ExcludeNodes only. When + StrictNodes is set, Tor should avoid all nodes listed in + ExcludeNodes, even when it will make user requests fail. When + StrictNodes is *not* set, then Tor should follow ExcludeNodes + whenever it can, except when it must use an excluded node to + perform self-tests, connect to a hidden service, provide a + hidden service, fulfill a .exit request, upload directory + information, or fetch directory information. + Collectively, the changes to implement the behavior fix bug 1090. + - ExcludeNodes now takes precedence over EntryNodes and ExitNodes: if + a node is listed in both, it's treated as excluded. + - ExcludeNodes now applies to directory nodes -- as a preference if + StrictNodes is 0, or an absolute requirement if StrictNodes is 1. + Don't exclude all the directory authorities and set StrictNodes to 1 + unless you really want your Tor to break. + - ExcludeNodes and ExcludeExitNodes now override exit enclaving. + - ExcludeExitNodes now overrides .exit requests. + - We don't use bridges listed in ExcludeNodes. + - When StrictNodes is 1: + . We now apply ExcludeNodes to hidden service introduction points + and to rendezvous points selected by hidden service users. This + can make your hidden service less reliable: use it with caution! + . If we have used ExcludeNodes on ourself, do not try relay + reachability self-tests. + . If we have excluded all the directory authorities, we will not + even try to upload our descriptor if we're a relay. + . Do not honor .exit requests to an excluded node. + - Remove a misfeature that caused us to ignore the Fast/Stable flags + when ExitNodes is set. Bugfix on 0.2.2.7-alpha. + - When the set of permitted nodes changes, we now remove any mappings + introduced via TrackExitHosts to now-excluded nodes. Bugfix on + 0.1.0.1-rc. + - We never cannibalize a circuit that had excluded nodes on it, even + if StrictNodes is 0. Bugfix on 0.1.0.1-rc. + - Revert a change where we would be laxer about attaching streams to + circuits than when building the circuits. This was meant to prevent + a set of bugs where streams were never attachable, but our improved + code here should make this unnecessary. Bugfix on 0.2.2.7-alpha. + - Keep track of how many times we launch a new circuit to handle a + given stream. Too many launches could indicate an inconsistency + between our "launch a circuit to handle this stream" logic and our + "attach this stream to one of the available circuits" logic. + - Improve log messages related to excluded nodes. + + o Minor bugfixes: + - Fix a spurious warning when moving from a short month to a long + month on relays with month-based BandwidthAccounting. Bugfix on + 0.2.2.17-alpha; fixes bug 3020. + - When a client finds that an origin circuit has run out of 16-bit + stream IDs, we now mark it as unusable for new streams. Previously, + we would try to close the entire circuit. Bugfix on 0.0.6. + - Add a forgotten cast that caused a compile warning on OS X 10.6. + Bugfix on 0.2.2.24-alpha. + - Be more careful about reporting the correct error from a failed + connect() system call. Under some circumstances, it was possible to + look at an incorrect value for errno when sending the end reason. + Bugfix on 0.1.0.1-rc. + - Correctly handle an "impossible" overflow cases in connection byte + counting, where we write or read more than 4GB on an edge connection + in a single second. Bugfix on 0.1.2.8-beta. + - Correct the warning displayed when a rendezvous descriptor exceeds + the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by + John Brooks. + - Clients and hidden services now use HSDir-flagged relays for hidden + service descriptor downloads and uploads even if the relays have no + DirPort set and the client has disabled TunnelDirConns. This will + eventually allow us to give the HSDir flag to relays with no + DirPort. Fixes bug 2722; bugfix on 0.2.1.6-alpha. + - Downgrade "no current certificates known for authority" message from + Notice to Info. Fixes bug 2899; bugfix on 0.2.0.10-alpha. + - Make the SIGNAL DUMP control-port command work on FreeBSD. Fixes bug + 2917. Bugfix on 0.1.1.1-alpha. + - Only limit the lengths of single HS descriptors, even when multiple + HS descriptors are published to an HSDir relay in a single POST + operation. Fixes bug 2948; bugfix on 0.2.1.5-alpha. Found by hsdir. + - Write the current time into the LastWritten line in our state file, + rather than the time from the previous write attempt. Also, stop + trying to use a time of -1 in our log statements. Fixes bug 3039; + bugfix on 0.2.2.14-alpha. + - Be more consistent in our treatment of file system paths. "~" should + get expanded to the user's home directory in the Log config option. + Fixes bug 2971; bugfix on 0.2.0.1-alpha, which introduced the + feature for the -f and --DataDirectory options. + + o Minor features: + - Make sure every relay writes a state file at least every 12 hours. + Previously, a relay could go for weeks without writing its state + file, and on a crash could lose its bandwidth history, capacity + estimates, client country statistics, and so on. Addresses bug 3012. + - Send END_STREAM_REASON_NOROUTE in response to EHOSTUNREACH errors. + Clients before 0.2.1.27 didn't handle NOROUTE correctly, but such + clients are already deprecated because of security bugs. + - Don't allow v0 hidden service authorities to act as clients. + Required by fix for bug 3000. + - Ignore SIGNAL NEWNYM commands on relay-only Tor instances. Required + by fix for bug 3000. + - Ensure that no empty [dirreq-](read|write)-history lines are added + to an extrainfo document. Implements ticket 2497. + + o Code simplification and refactoring: + - Remove workaround code to handle directory responses from servers + that had bug 539 (they would send HTTP status 503 responses _and_ + send a body too). Since only server versions before + 0.2.0.16-alpha/0.1.2.19 were affected, there is no longer reason to + keep the workaround in place. + - Remove the old 'fuzzy time' logic. It was supposed to be used for + handling calculations where we have a known amount of clock skew and + an allowed amount of unknown skew. But we only used it in three + places, and we never adjusted the known/unknown skew values. This is + still something we might want to do someday, but if we do, we'll + want to do it differently. + - Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned. + None of the cases where we did this before were wrong, but by making + this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28. + - Use GetTempDir to find the proper temporary directory location on + Windows when generating temporary files for the unit tests. Patch by + Gisle Vanem. + + +Changes in version 0.2.2.24-alpha - 2011-04-08 + Tor 0.2.2.24-alpha fixes a variety of bugs, including a big bug that + prevented Tor clients from effectively using "multihomed" bridges, + that is, bridges that listen on multiple ports or IP addresses so users + can continue to use some of their addresses even if others get blocked. + + o Major bugfixes: + - Fix a bug where bridge users who configure the non-canonical + address of a bridge automatically switch to its canonical + address. If a bridge listens at more than one address, it should be + able to advertise those addresses independently and any non-blocked + addresses should continue to work. Bugfix on Tor 0.2.0.x. Fixes + bug 2510. + - If you configured Tor to use bridge A, and then quit and + configured Tor to use bridge B instead, it would happily continue + to use bridge A if it's still reachable. While this behavior is + a feature if your goal is connectivity, in some scenarios it's a + dangerous bug. Bugfix on Tor 0.2.0.1-alpha; fixes bug 2511. + - Directory authorities now use data collected from their own + uptime observations when choosing whether to assign the HSDir flag + to relays, instead of trusting the uptime value the relay reports in + its descriptor. This change helps prevent an attack where a small + set of nodes with frequently-changing identity keys can blackhole + a hidden service. (Only authorities need upgrade; others will be + fine once they do.) Bugfix on 0.2.0.10-alpha; fixes bug 2709. + + o Minor bugfixes: + - When we restart our relay, we might get a successful connection + from the outside before we've started our reachability tests, + triggering a warning: "ORPort found reachable, but I have no + routerinfo yet. Failing to inform controller of success." This + bug was harmless unless Tor is running under a controller + like Vidalia, in which case the controller would never get a + REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha; + fixes bug 1172. + - Make directory authorities more accurate at recording when + relays that have failed several reachability tests became + unreachable, so we can provide more accuracy at assigning Stable, + Guard, HSDir, etc flags. Bugfix on 0.2.0.6-alpha. Resolves bug 2716. + - Fix an issue that prevented static linking of libevent on + some platforms (notably Linux). Fixes bug 2698; bugfix on + versions 0.2.1.23/0.2.2.8-alpha (the versions introducing + the --with-static-libevent configure option). + - We now ask the other side of a stream (the client or the exit) + for more data on that stream when the amount of queued data on + that stream dips low enough. Previously, we wouldn't ask the + other side for more data until either it sent us more data (which + it wasn't supposed to do if it had exhausted its window!) or we + had completely flushed all our queued data. This flow control fix + should improve throughput. Fixes bug 2756; bugfix on the earliest + released versions of Tor (svn commit r152). + - Avoid a double-mark-for-free warning when failing to attach a + transparent proxy connection. (We thought we had fixed this in + 0.2.2.23-alpha, but it turns out our fix was checking the wrong + connection.) Fixes bug 2757; bugfix on 0.1.2.1-alpha (the original + bug) and 0.2.2.23-alpha (the incorrect fix). + - When warning about missing zlib development packages during compile, + give the correct package names. Bugfix on 0.2.0.1-alpha. + + o Minor features: + - Directory authorities now log the source of a rejected POSTed v3 + networkstatus vote. + - Make compilation with clang possible when using + --enable-gcc-warnings by removing two warning options that clang + hasn't implemented yet and by fixing a few warnings. Implements + ticket 2696. + - When expiring circuits, use microsecond timers rather than + one-second timers. This can avoid an unpleasant situation where a + circuit is launched near the end of one second and expired right + near the beginning of the next, and prevent fluctuations in circuit + timeout values. + - Use computed circuit-build timeouts to decide when to launch + parallel introduction circuits for hidden services. (Previously, + we would retry after 15 seconds.) + - Update to the April 1 2011 Maxmind GeoLite Country database. + + o Packaging fixes: + - Create the /var/run/tor directory on startup on OpenSUSE if it is + not already created. Patch from Andreas Stieger. Fixes bug 2573. + + o Documentation changes: + - Modernize the doxygen configuration file slightly. Fixes bug 2707. + - Resolve all doxygen warnings except those for missing documentation. + Fixes bug 2705. + - Add doxygen documentation for more functions, fields, and types. + + +Changes in version 0.2.2.23-alpha - 2011-03-08 + Tor 0.2.2.23-alpha lets relays record their bandwidth history so when + they restart they don't lose their bandwidth capacity estimate. This + release also fixes a diverse set of user-facing bugs, ranging from + relays overrunning their rate limiting to clients falsely warning about + clock skew to bridge descriptor leaks by our bridge directory authority. + + o Major bugfixes: + - Stop sending a CLOCK_SKEW controller status event whenever + we fetch directory information from a relay that has a wrong clock. + Instead, only inform the controller when it's a trusted authority + that claims our clock is wrong. Bugfix on 0.1.2.6-alpha; fixes + the rest of bug 1074. + - Fix an assert in parsing router descriptors containing IPv6 + addresses. This one took down the directory authorities when + somebody tried some experimental code. Bugfix on 0.2.1.3-alpha. + - Make the bridge directory authority refuse to answer directory + requests for "all" descriptors. It used to include bridge + descriptors in its answer, which was a major information leak. + Found by "piebeer". Bugfix on 0.2.0.3-alpha. + - If relays set RelayBandwidthBurst but not RelayBandwidthRate, + Tor would ignore their RelayBandwidthBurst setting, + potentially using more bandwidth than expected. Bugfix on + 0.2.0.1-alpha. Reported by Paul Wouters. Fixes bug 2470. + - Ignore and warn if the user mistakenly sets "PublishServerDescriptor + hidserv" in her torrc. The 'hidserv' argument never controlled + publication of hidden service descriptors. Bugfix on 0.2.0.1-alpha. + + o Major features: + - Relays now save observed peak bandwidth throughput rates to their + state file (along with total usage, which was already saved) + so that they can determine their correct estimated bandwidth on + restart. Resolves bug 1863, where Tor relays would reset their + estimated bandwidth to 0 after restarting. + - Directory authorities now take changes in router IP address and + ORPort into account when determining router stability. Previously, + if a router changed its IP or ORPort, the authorities would not + treat it as having any downtime for the purposes of stability + calculation, whereas clients would experience downtime since the + change could take a while to propagate to them. Resolves issue 1035. + - Enable Address Space Layout Randomization (ASLR) and Data Execution + Prevention (DEP) by default on Windows to make it harder for + attackers to exploit vulnerabilities. Patch from John Brooks. + + o Minor bugfixes (on 0.2.1.x and earlier): + - Fix a rare crash bug that could occur when a client was configured + with a large number of bridges. Fixes bug 2629; bugfix on + 0.2.1.2-alpha. Bugfix by trac user "shitlei". + - Avoid a double mark-for-free warning when failing to attach a + transparent proxy connection. Bugfix on 0.1.2.1-alpha. Fixes + bug 2279. + - Correctly detect failure to allocate an OpenSSL BIO. Fixes bug 2378; + found by "cypherpunks". This bug was introduced before the first + Tor release, in svn commit r110. + - Country codes aren't supported in EntryNodes until 0.2.3.x, so + don't mention them in the manpage. Fixes bug 2450; issue + spotted by keb and G-Lo. + - Fix a bug in bandwidth history state parsing that could have been + triggered if a future version of Tor ever changed the timing + granularity at which bandwidth history is measured. Bugfix on + Tor 0.1.1.11-alpha. + - When a relay decides that its DNS is too broken for it to serve + as an exit server, it advertised itself as a non-exit, but + continued to act as an exit. This could create accidental + partitioning opportunities for users. Instead, if a relay is + going to advertise reject *:* as its exit policy, it should + really act with exit policy "reject *:*". Fixes bug 2366. + Bugfix on Tor 0.1.2.5-alpha. Bugfix by user "postman" on trac. + - In the special case where you configure a public exit relay as your + bridge, Tor would be willing to use that exit relay as the last + hop in your circuit as well. Now we fail that circuit instead. + Bugfix on 0.2.0.12-alpha. Fixes bug 2403. Reported by "piebeer". + - Fix a bug with our locking implementation on Windows that couldn't + correctly detect when a file was already locked. Fixes bug 2504, + bugfix on 0.2.1.6-alpha. + - Fix IPv6-related connect() failures on some platforms (BSD, OS X). + Bugfix on 0.2.0.3-alpha; fixes first part of bug 2660. Patch by + "piebeer". + - Set target port in get_interface_address6() correctly. Bugfix + on 0.1.1.4-alpha and 0.2.0.3-alpha; fixes second part of bug 2660. + - Directory authorities are now more robust to hops back in time + when calculating router stability. Previously, if a run of uptime + or downtime appeared to be negative, the calculation could give + incorrect results. Bugfix on 0.2.0.6-alpha; noticed when fixing + bug 1035. + - Fix an assert that got triggered when using the TestingTorNetwork + configuration option and then issuing a GETINFO config-text control + command. Fixes bug 2250; bugfix on 0.2.1.2-alpha. + + o Minor bugfixes (on 0.2.2.x): + - Clients should not weight BadExit nodes as Exits in their node + selection. Similarly, directory authorities should not count BadExit + bandwidth as Exit bandwidth when computing bandwidth-weights. + Bugfix on 0.2.2.10-alpha; fixes bug 2203. + - Correctly clear our dir_read/dir_write history when there is an + error parsing any bw history value from the state file. Bugfix on + Tor 0.2.2.15-alpha. + - Resolve a bug in verifying signatures of directory objects + with digests longer than SHA1. Bugfix on 0.2.2.20-alpha. + Fixes bug 2409. Found by "piebeer". + - Bridge authorities no longer crash on SIGHUP when they try to + publish their relay descriptor to themselves. Fixes bug 2572. Bugfix + on 0.2.2.22-alpha. + + o Minor features: + - Log less aggressively about circuit timeout changes, and improve + some other circuit timeout messages. Resolves bug 2004. + - Log a little more clearly about the times at which we're no longer + accepting new connections. Resolves bug 2181. + - Reject attempts at the client side to open connections to private + IP addresses (like 127.0.0.1, 10.0.0.1, and so on) with + a randomly chosen exit node. Attempts to do so are always + ill-defined, generally prevented by exit policies, and usually + in error. This will also help to detect loops in transparent + proxy configurations. You can disable this feature by setting + "ClientRejectInternalAddresses 0" in your torrc. + - Always treat failure to allocate an RSA key as an unrecoverable + allocation error. + - Update to the March 1 2011 Maxmind GeoLite Country database. + + o Minor features (log subsystem): + - Add documentation for configuring logging at different severities in + different log domains. We've had this feature since 0.2.1.1-alpha, + but for some reason it never made it into the manpage. Fixes + bug 2215. + - Make it simpler to specify "All log domains except for A and B". + Previously you needed to say "[*,~A,~B]". Now you can just say + "[~A,~B]". + - Add a "LogMessageDomains 1" option to include the domains of log + messages along with the messages. Without this, there's no way + to use log domains without reading the source or doing a lot + of guessing. + + o Packaging changes: + - Stop shipping the Tor specs files and development proposal documents + in the tarball. They are now in a separate git repository at + git://git.torproject.org/torspec.git + + Changes in version 0.2.1.30 - 2011-02-23 Tor 0.2.1.30 fixes a variety of less critical bugs. The main other change is a slight tweak to Tor's TLS handshake that makes relays @@ -49,6 +1270,145 @@ between branches. Bugfix on 0.2.1.15-rc; fixes bug 2402. +Changes in version 0.2.2.22-alpha - 2011-01-25 + Tor 0.2.2.22-alpha fixes a few more less-critical security issues. The + main other change is a slight tweak to Tor's TLS handshake that makes + relays and bridges that run this new version reachable from Iran again. + We don't expect this tweak will win the arms race long-term, but it + will buy us a bit more time until we roll out a better solution. + + o Major bugfixes: + - Fix a bounds-checking error that could allow an attacker to + remotely crash a directory authority. Bugfix on 0.2.1.5-alpha. + Found by "piebeer". + - Don't assert when changing from bridge to relay or vice versa + via the controller. The assert happened because we didn't properly + initialize our keys in this case. Bugfix on 0.2.2.18-alpha; fixes + bug 2433. Reported by bastik. + + o Minor features: + - Adjust our TLS Diffie-Hellman parameters to match those used by + Apache's mod_ssl. + - Provide a log message stating which geoip file we're parsing + instead of just stating that we're parsing the geoip file. + Implements ticket 2432. + + o Minor bugfixes: + - Check for and reject overly long directory certificates and + directory tokens before they have a chance to hit any assertions. + Bugfix on 0.2.1.28 / 0.2.2.20-alpha. Found by "doorss". + + +Changes in version 0.2.2.21-alpha - 2011-01-15 + Tor 0.2.2.21-alpha includes all the patches from Tor 0.2.1.29, which + continues our recent code security audit work. The main fix resolves + a remote heap overflow vulnerability that can allow remote code + execution (CVE-2011-0427). Other fixes address a variety of assert + and crash bugs, most of which we think are hard to exploit remotely. + + o Major bugfixes (security), also included in 0.2.1.29: + - Fix a heap overflow bug where an adversary could cause heap + corruption. This bug probably allows remote code execution + attacks. Reported by "debuger". Fixes CVE-2011-0427. Bugfix on + 0.1.2.10-rc. + - Prevent a denial-of-service attack by disallowing any + zlib-compressed data whose compression factor is implausibly + high. Fixes part of bug 2324; reported by "doorss". + - Zero out a few more keys in memory before freeing them. Fixes + bug 2384 and part of bug 2385. These key instances found by + "cypherpunks", based on Andrew Case's report about being able + to find sensitive data in Tor's memory space if you have enough + permissions. Bugfix on 0.0.2pre9. + + o Major bugfixes (crashes), also included in 0.2.1.29: + - Prevent calls to Libevent from inside Libevent log handlers. + This had potential to cause a nasty set of crashes, especially + if running Libevent with debug logging enabled, and running + Tor with a controller watching for low-severity log messages. + Bugfix on 0.1.0.2-rc. Fixes bug 2190. + - Add a check for SIZE_T_MAX to tor_realloc() to try to avoid + underflow errors there too. Fixes the other part of bug 2324. + - Fix a bug where we would assert if we ever had a + cached-descriptors.new file (or another file read directly into + memory) of exactly SIZE_T_CEILING bytes. Fixes bug 2326; bugfix + on 0.2.1.25. Found by doorss. + - Fix some potential asserts and parsing issues with grossly + malformed router caches. Fixes bug 2352; bugfix on Tor 0.2.1.27. + Found by doorss. + + o Minor bugfixes (other), also included in 0.2.1.29: + - Fix a bug with handling misformed replies to reverse DNS lookup + requests in DNSPort. Bugfix on Tor 0.2.0.1-alpha. Related to a + bug reported by doorss. + - Fix compilation on mingw when a pthreads compatibility library + has been installed. (We don't want to use it, so we shouldn't + be including pthread.h.) Fixes bug 2313; bugfix on 0.1.0.1-rc. + - Fix a bug where we would declare that we had run out of virtual + addresses when the address space was only half-exhausted. Bugfix + on 0.1.2.1-alpha. + - Correctly handle the case where AutomapHostsOnResolve is set but + no virtual addresses are available. Fixes bug 2328; bugfix on + 0.1.2.1-alpha. Bug found by doorss. + - Correctly handle wrapping around when we run out of virtual + address space. Found by cypherpunks; bugfix on 0.2.0.5-alpha. + + o Minor features, also included in 0.2.1.29: + - Update to the January 1 2011 Maxmind GeoLite Country database. + - Introduce output size checks on all of our decryption functions. + + o Build changes, also included in 0.2.1.29: + - Tor does not build packages correctly with Automake 1.6 and earlier; + added a check to Makefile.am to make sure that we're building with + Automake 1.7 or later. + - The 0.2.1.28 tarball was missing src/common/OpenBSD_malloc_Linux.c + because we built it with a too-old version of automake. Thus that + release broke ./configure --enable-openbsd-malloc, which is popular + among really fast exit relays on Linux. + + o Major bugfixes, new in 0.2.2.21-alpha: + - Prevent crash/heap corruption when the cbtnummodes consensus + parameter is set to 0 or large values. Fixes bug 2317; bugfix + on 0.2.2.14-alpha. + + o Major features, new in 0.2.2.21-alpha: + - Introduce minimum/maximum values that clients will believe + from the consensus. Now we'll have a better chance to avoid crashes + or worse when a consensus param has a weird value. + + o Minor features, new in 0.2.2.21-alpha: + - Make sure to disable DirPort if running as a bridge. DirPorts aren't + used on bridges, and it makes bridge scanning somewhat easier. + - If writing the state file to disk fails, wait up to an hour before + retrying again, rather than trying again each second. Fixes bug + 2346; bugfix on Tor 0.1.1.3-alpha. + - Make Libevent log messages get delivered to controllers later, + and not from inside the Libevent log handler. This prevents unsafe + reentrant Libevent calls while still letting the log messages + get through. + - Detect platforms that brokenly use a signed size_t, and refuse to + build there. Found and analyzed by doorss and rransom. + - Fix a bunch of compile warnings revealed by mingw with gcc 4.5. + Resolves bug 2314. + + o Minor bugfixes, new in 0.2.2.21-alpha: + - Handle SOCKS messages longer than 128 bytes long correctly, rather + than waiting forever for them to finish. Fixes bug 2330; bugfix + on 0.2.0.16-alpha. Found by doorss. + - Add assertions to check for overflow in arguments to + base32_encode() and base32_decode(); fix a signed-unsigned + comparison there too. These bugs are not actually reachable in Tor, + but it's good to prevent future errors too. Found by doorss. + - Correctly detect failures to create DNS requests when using Libevent + versions before v2. (Before Libevent 2, we used our own evdns + implementation. Its return values for Libevent's evdns_resolve_*() + functions are not consistent with those from Libevent.) Fixes bug + 2363; bugfix on 0.2.2.6-alpha. Found by "lodger". + + o Documentation, new in 0.2.2.21-alpha: + - Document the default socks host and port (127.0.0.1:9050) for + tor-resolve. + + Changes in version 0.2.1.29 - 2011-01-15 Tor 0.2.1.29 continues our recent code security audit work. The main fix resolves a remote heap overflow vulnerability that can allow remote @@ -115,6 +1475,58 @@ Automake 1.7 or later. +Changes in version 0.2.2.20-alpha - 2010-12-17 + Tor 0.2.2.20-alpha does some code cleanup to reduce the risk of remotely + exploitable bugs. We also fix a variety of other significant bugs, + change the IP address for one of our directory authorities, and update + the minimum version that Tor relays must run to join the network. + + o Major bugfixes: + - Fix a remotely exploitable bug that could be used to crash instances + of Tor remotely by overflowing on the heap. Remote-code execution + hasn't been confirmed, but can't be ruled out. Everyone should + upgrade. Bugfix on the 0.1.1 series and later. + - Fix a bug that could break accounting on 64-bit systems with large + time_t values, making them hibernate for impossibly long intervals. + Fixes bug 2146. Bugfix on 0.0.9pre6; fix by boboper. + - Fix a logic error in directory_fetches_from_authorities() that + would cause all _non_-exits refusing single-hop-like circuits + to fetch from authorities, when we wanted to have _exits_ fetch + from authorities. Fixes more of 2097. Bugfix on 0.2.2.16-alpha; + fix by boboper. + - Fix a stream fairness bug that would cause newer streams on a given + circuit to get preference when reading bytes from the origin or + destination. Fixes bug 2210. Fix by Mashael AlSabah. This bug was + introduced before the first Tor release, in svn revision r152. + + o Directory authority changes: + - Change IP address and ports for gabelmoo (v3 directory authority). + + o Minor bugfixes: + - Avoid crashes when AccountingMax is set on clients. Fixes bug 2235. + Bugfix on 0.2.2.18-alpha. Diagnosed by boboper. + - Fix an off-by-one error in calculating some controller command + argument lengths. Fortunately, this mistake is harmless since + the controller code does redundant NUL termination too. Found by + boboper. Bugfix on 0.1.1.1-alpha. + - Do not dereference NULL if a bridge fails to build its + extra-info descriptor. Found by an anonymous commenter on + Trac. Bugfix on 0.2.2.19-alpha. + + o Minor features: + - Update to the December 1 2010 Maxmind GeoLite Country database. + - Directory authorities now reject relays running any versions of + Tor between 0.2.1.3-alpha and 0.2.1.18 inclusive; they have + known bugs that keep RELAY_EARLY cells from working on rendezvous + circuits. Followup to fix for bug 2081. + - Directory authorities now reject relays running any version of Tor + older than 0.2.0.26-rc. That version is the earliest that fetches + current directory information correctly. Fixes bug 2156. + - Report only the top 10 ports in exit-port stats in order not to + exceed the maximum extra-info descriptor length of 50 KB. Implements + task 2196. + + Changes in version 0.2.1.28 - 2010-12-17 Tor 0.2.1.28 does some code cleanup to reduce the risk of remotely exploitable bugs. We also took this opportunity to change the IP address @@ -209,6 +1621,602 @@ 0.2.1.26 really wasn't that useful anyway. +Changes in version 0.2.2.19-alpha - 2010-11-22 + Yet another OpenSSL security patch broke its compatibility with Tor: + Tor 0.2.2.19-alpha makes relays work with OpenSSL 0.9.8p and 1.0.0.b. + + o Major bugfixes: + - Resolve an incompatibility with OpenSSL 0.9.8p and OpenSSL 1.0.0b: + No longer set the tlsext_host_name extension on server SSL objects; + but continue to set it on client SSL objects. Our goal in setting + it was to imitate a browser, not a vhosting server. Fixes bug 2204; + bugfix on 0.2.1.1-alpha. + + o Minor bugfixes: + - Try harder not to exceed the maximum length of 50 KB when writing + statistics to extra-info descriptors. This bug was triggered by very + fast relays reporting exit-port, entry, and dirreq statistics. + Reported by Olaf Selke. Bugfix on 0.2.2.1-alpha. Fixes bug 2183. + - Publish a router descriptor even if generating an extra-info + descriptor fails. Previously we would not publish a router + descriptor without an extra-info descriptor; this can cause fast + exit relays collecting exit-port statistics to drop from the + consensus. Bugfix on 0.1.2.9-rc; fixes bug 2195. + + +Changes in version 0.2.2.18-alpha - 2010-11-16 + Tor 0.2.2.18-alpha fixes several crash bugs that have been nagging + us lately, makes unpublished bridge relays able to detect their IP + address, and fixes a wide variety of other bugs to get us much closer + to a stable release. + + o Major bugfixes: + - Do even more to reject (and not just ignore) annotations on + router descriptors received anywhere but from the cache. Previously + we would ignore such annotations at first, but cache them to disk + anyway. Bugfix on 0.2.0.8-alpha. Found by piebeer. + - Do not log messages to the controller while shrinking buffer + freelists. Doing so would sometimes make the controller connection + try to allocate a buffer chunk, which would mess up the internals + of the freelist and cause an assertion failure. Fixes bug 1125; + fixed by Robert Ransom. Bugfix on 0.2.0.16-alpha. + - Learn our external IP address when we're a relay or bridge, even if + we set PublishServerDescriptor to 0. Bugfix on 0.2.0.3-alpha, + where we introduced bridge relays that don't need to publish to + be useful. Fixes bug 2050. + - Maintain separate TLS contexts and certificates for incoming and + outgoing connections in bridge relays. Previously we would use the + same TLS contexts and certs for incoming and outgoing connections. + Bugfix on 0.2.0.3-alpha; addresses bug 988. + - Maintain separate identity keys for incoming and outgoing TLS + contexts in bridge relays. Previously we would use the same + identity keys for incoming and outgoing TLS contexts. Bugfix on + 0.2.0.3-alpha; addresses the other half of bug 988. + - Avoid an assertion failure when we as an authority receive a + duplicate upload of a router descriptor that we already have, + but which we previously considered an obsolete descriptor. + Fixes another case of bug 1776. Bugfix on 0.2.2.16-alpha. + - Avoid a crash bug triggered by looking at a dangling pointer while + setting the network status consensus. Found by Robert Ransom. + Bugfix on 0.2.2.17-alpha. Fixes bug 2097. + - Fix a logic error where servers that _didn't_ act as exits would + try to keep their server lists more aggressively up to date than + exits, when it was supposed to be the other way around. Bugfix + on 0.2.2.17-alpha. + + o Minor bugfixes (on Tor 0.2.1.x and earlier): + - When we're trying to guess whether we know our IP address as + a relay, we would log various ways that we failed to guess + our address, but never log that we ended up guessing it + successfully. Now add a log line to help confused and anxious + relay operators. Bugfix on 0.1.2.1-alpha; fixes bug 1534. + - Bring the logic that gathers routerinfos and assesses the + acceptability of circuits into line. This prevents a Tor OP from + getting locked in a cycle of choosing its local OR as an exit for a + path (due to a .exit request) and then rejecting the circuit because + its OR is not listed yet. It also prevents Tor clients from using an + OR running in the same instance as an exit (due to a .exit request) + if the OR does not meet the same requirements expected of an OR + running elsewhere. Fixes bug 1859; bugfix on 0.1.0.1-rc. + - Correctly describe errors that occur when generating a TLS object. + Previously we would attribute them to a failure while generating a + TLS context. Patch by Robert Ransom. Bugfix on 0.1.0.4-rc; fixes + bug 1994. + - Enforce multiplicity rules when parsing annotations. Bugfix on + 0.2.0.8-alpha. Found by piebeer. + - Fix warnings that newer versions of autoconf produced during + ./autogen.sh. These warnings appear to be harmless in our case, + but they were extremely verbose. Fixes bug 2020. + + o Minor bugfixes (on Tor 0.2.2.x): + - Enable protection of small arrays whenever we build with gcc + hardening features, not only when also building with warnings + enabled. Fixes bug 2031; bugfix on 0.2.2.14-alpha. Reported by keb. + + o Minor features: + - Make hidden services work better in private Tor networks by not + requiring any uptime to join the hidden service descriptor + DHT. Implements ticket 2088. + - Rate-limit the "your application is giving Tor only an IP address" + warning. Addresses bug 2000; bugfix on 0.0.8pre2. + - When AllowSingleHopExits is set, print a warning to explain to the + relay operator why most clients are avoiding her relay. + - Update to the November 1 2010 Maxmind GeoLite Country database. + + o Code simplifications and refactoring: + - When we fixed bug 1038 we had to put in a restriction not to send + RELAY_EARLY cells on rend circuits. This was necessary as long + as relays using Tor 0.2.1.3-alpha through 0.2.1.18-alpha were + active. Now remove this obsolete check. Resolves bug 2081. + - Some options used different conventions for uppercasing of acronyms + when comparing manpage and source. Fix those in favor of the + manpage, as it makes sense to capitalize acronyms. + - Remove the torrc.complete file. It hasn't been kept up to date + and users will have better luck checking out the manpage. + - Remove the obsolete "NoPublish" option; it has been flagged + as obsolete and has produced a warning since 0.1.1.18-rc. + - Remove everything related to building the expert bundle for OS X. + It has confused many users, doesn't work right on OS X 10.6, + and is hard to get rid of once installed. Resolves bug 1274. + + +Changes in version 0.2.2.17-alpha - 2010-09-30 + Tor 0.2.2.17-alpha introduces a feature to make it harder for clients + to use one-hop circuits (which can put the exit relays at higher risk, + plus unbalance the network); fixes a big bug in bandwidth accounting + for relays that want to limit their monthly bandwidth use; fixes a + big pile of bugs in how clients tolerate temporary network failure; + and makes our adaptive circuit build timeout feature (which improves + client performance if your network is fast while not breaking things + if your network is slow) better handle bad networks. + + o Major features: + - Exit relays now try harder to block exit attempts from unknown + relays, to make it harder for people to use them as one-hop proxies + a la tortunnel. Controlled by the refuseunknownexits consensus + parameter (currently enabled), or you can override it on your + relay with the RefuseUnknownExits torrc option. Resolves bug 1751. + + o Major bugfixes (0.2.1.x and earlier): + - Fix a bug in bandwidth accounting that could make us use twice + the intended bandwidth when our interval start changes due to + daylight saving time. Now we tolerate skew in stored vs computed + interval starts: if the start of the period changes by no more than + 50% of the period's duration, we remember bytes that we transferred + in the old period. Fixes bug 1511; bugfix on 0.0.9pre5. + - Always search the Windows system directory for system DLLs, and + nowhere else. Bugfix on 0.1.1.23; fixes bug 1954. + - When you're using bridges and your network goes away and your + bridges get marked as down, recover when you attempt a new socks + connection (if the network is back), rather than waiting up to an + hour to try fetching new descriptors for your bridges. Bugfix on + 0.2.0.3-alpha; fixes bug 1981. + + o Major bugfixes (on 0.2.2.x): + - Fix compilation on Windows. Bugfix on 0.2.2.16-alpha; related to + bug 1797. + - Fix a segfault that could happen when operating a bridge relay with + no GeoIP database set. Fixes bug 1964; bugfix on 0.2.2.15-alpha. + - The consensus bandwidth-weights (used by clients to choose fast + relays) entered an unexpected edge case in September where + Exits were much scarcer than Guards, resulting in bad weight + recommendations. Now we compute them using new constraints that + should succeed in all cases. Also alter directory authorities to + not include the bandwidth-weights line if they fail to produce + valid values. Fixes bug 1952; bugfix on 0.2.2.10-alpha. + - When weighting bridges during path selection, we used to trust + the bandwidths they provided in their descriptor, only capping them + at 10MB/s. This turned out to be problematic for two reasons: + Bridges could claim to handle a lot more traffic then they + actually would, thus making more clients pick them and have a + pretty effective DoS attack. The other issue is that new bridges + that might not have a good estimate for their bw capacity yet + would not get used at all unless no other bridges are available + to a client. Fixes bug 1912; bugfix on 0.2.2.7-alpha. + + o Major bugfixes (on the circuit build timeout feature, 0.2.2.x): + - Ignore cannibalized circuits when recording circuit build times. + This should provide for a minor performance improvement for hidden + service users using 0.2.2.14-alpha, and should remove two spurious + notice log messages. Bugfix on 0.2.2.14-alpha; fixes bug 1740. + - Simplify the logic that causes us to decide if the network is + unavailable for purposes of recording circuit build times. If we + receive no cells whatsoever for the entire duration of a circuit's + full measured lifetime, the network is probably down. Also ignore + one-hop directory fetching circuit timeouts when calculating our + circuit build times. These changes should hopefully reduce the + cases where we see ridiculous circuit build timeouts for people + with spotty wireless connections. Fixes part of bug 1772; bugfix + on 0.2.2.2-alpha. + - Prevent the circuit build timeout from becoming larger than + the maximum build time we have ever seen. Also, prevent the time + period for measurement circuits from becoming larger than twice that + value. Fixes the other part of bug 1772; bugfix on 0.2.2.2-alpha. + + o Minor features: + - When we run out of directory information such that we can't build + circuits, but then get enough that we can build circuits, log when + we actually construct a circuit, so the user has a better chance of + knowing what's going on. Fixes bug 1362. + - Be more generous with how much bandwidth we'd use up (with + accounting enabled) before entering "soft hibernation". Previously, + we'd refuse new connections and circuits once we'd used up 95% of + our allotment. Now, we use up 95% of our allotment, AND make sure + that we have no more than 500MB (or 3 hours of expected traffic, + whichever is lower) remaining before we enter soft hibernation. + - If we've configured EntryNodes and our network goes away and/or all + our entrynodes get marked down, optimistically retry them all when + a new socks application request appears. Fixes bug 1882. + - Add some more defensive programming for architectures that can't + handle unaligned integer accesses. We don't know of any actual bugs + right now, but that's the best time to fix them. Fixes bug 1943. + - Support line continuations in the torrc config file. If a line + ends with a single backslash character, the newline is ignored, and + the configuration value is treated as continuing on the next line. + Resolves bug 1929. + + o Minor bugfixes (on 0.2.1.x and earlier): + - For bandwidth accounting, calculate our expected bandwidth rate + based on the time during which we were active and not in + soft-hibernation during the last interval. Previously, we were + also considering the time spent in soft-hibernation. If this + was a long time, we would wind up underestimating our bandwidth + by a lot, and skewing our wakeup time towards the start of the + accounting interval. Fixes bug 1789. Bugfix on 0.0.9pre5. + + o Minor bugfixes (on 0.2.2.x): + - Resume generating CIRC FAILED REASON=TIMEOUT control port messages, + which were disabled by the circuit build timeout changes in + 0.2.2.14-alpha. Bugfix on 0.2.2.14-alpha; fixes bug 1739. + - Make sure we don't warn about missing bandwidth weights when + choosing bridges or other relays not in the consensus. Bugfix on + 0.2.2.10-alpha; fixes bug 1805. + - In our logs, do not double-report signatures from unrecognized + authorities both as "from unknown authority" and "not + present". Fixes bug 1956, bugfix on 0.2.2.16-alpha. + + +Changes in version 0.2.2.16-alpha - 2010-09-17 + Tor 0.2.2.16-alpha fixes a variety of old stream fairness bugs (most + evident at exit relays), and also continues to resolve all the little + bugs that have been filling up trac lately. + + o Major bugfixes (stream-level fairness): + - When receiving a circuit-level SENDME for a blocked circuit, try + to package cells fairly from all the streams that had previously + been blocked on that circuit. Previously, we had started with the + oldest stream, and allowed each stream to potentially exhaust + the circuit's package window. This gave older streams on any + given circuit priority over newer ones. Fixes bug 1937. Detected + originally by Camilo Viecco. This bug was introduced before the + first Tor release, in svn commit r152: it is the new winner of + the longest-lived bug prize. + - When the exit relay got a circuit-level sendme cell, it started + reading on the exit streams, even if had 500 cells queued in the + circuit queue already, so the circuit queue just grew and grew in + some cases. We fix this by not re-enabling reading on receipt of a + sendme cell when the cell queue is blocked. Fixes bug 1653. Bugfix + on 0.2.0.1-alpha. Detected by Mashael AlSabah. Original patch by + "yetonetime". + - Newly created streams were allowed to read cells onto circuits, + even if the circuit's cell queue was blocked and waiting to drain. + This created potential unfairness, as older streams would be + blocked, but newer streams would gladly fill the queue completely. + We add code to detect this situation and prevent any stream from + getting more than one free cell. Bugfix on 0.2.0.1-alpha. Partially + fixes bug 1298. + + o Minor features: + - Update to the September 1 2010 Maxmind GeoLite Country database. + - Warn when CookieAuthFileGroupReadable is set but CookieAuthFile is + not. This would lead to a cookie that is still not group readable. + Closes bug 1843. Suggested by katmagic. + - When logging a rate-limited warning, we now mention how many messages + got suppressed since the last warning. + - Add new "perconnbwrate" and "perconnbwburst" consensus params to + do individual connection-level rate limiting of clients. The torrc + config options with the same names trump the consensus params, if + both are present. Replaces the old "bwconnrate" and "bwconnburst" + consensus params which were broken from 0.2.2.7-alpha through + 0.2.2.14-alpha. Closes bug 1947. + - When a router changes IP address or port, authorities now launch + a new reachability test for it. Implements ticket 1899. + - Make the formerly ugly "2 unknown, 7 missing key, 0 good, 0 bad, + 2 no signature, 4 required" messages about consensus signatures + easier to read, and make sure they get logged at the same severity + as the messages explaining which keys are which. Fixes bug 1290. + - Don't warn when we have a consensus that we can't verify because + of missing certificates, unless those certificates are ones + that we have been trying and failing to download. Fixes bug 1145. + - If you configure your bridge with a known identity fingerprint, + and the bridge authority is unreachable (as it is in at least + one country now), fall back to directly requesting the descriptor + from the bridge. Finishes the feature started in 0.2.0.10-alpha; + closes bug 1138. + - When building with --enable-gcc-warnings on OpenBSD, disable + warnings in system headers. This makes --enable-gcc-warnings + pass on OpenBSD 4.8. + + o Minor bugfixes (on 0.2.1.x and earlier): + - Authorities will now attempt to download consensuses if their + own efforts to make a live consensus have failed. This change + means authorities that restart will fetch a valid consensus, and + it means authorities that didn't agree with the current consensus + will still fetch and serve it if it has enough signatures. Bugfix + on 0.2.0.9-alpha; fixes bug 1300. + - Ensure DNS requests launched by "RESOLVE" commands from the + controller respect the __LeaveStreamsUnattached setconf options. The + same goes for requests launched via DNSPort or transparent + proxying. Bugfix on 0.2.0.1-alpha; fixes bug 1525. + - Allow handshaking OR connections to take a full KeepalivePeriod + seconds to handshake. Previously, we would close them after + IDLE_OR_CONN_TIMEOUT (180) seconds, the same timeout as if they + were open. Bugfix on 0.2.1.26; fixes bug 1840. Thanks to mingw-san + for analysis help. + - Rate-limit "Failed to hand off onionskin" warnings. + - Never relay a cell for a circuit we have already destroyed. + Between marking a circuit as closeable and finally closing it, + it may have been possible for a few queued cells to get relayed, + even though they would have been immediately dropped by the next + OR in the circuit. Fixes bug 1184; bugfix on 0.2.0.1-alpha. + - Never queue a cell for a circuit that's already been marked + for close. + - Never vote for a server as "Running" if we have a descriptor for + it claiming to be hibernating, and that descriptor was published + more recently than our last contact with the server. Bugfix on + 0.2.0.3-alpha; fixes bug 911. + - Squash a compile warning on OpenBSD. Reported by Tas; fixes + bug 1848. + + o Minor bugfixes (on 0.2.2.x): + - Fix a regression introduced in 0.2.2.7-alpha that marked relays + down if a directory fetch fails and you've configured either + bridges or EntryNodes. The intent was to mark the relay as down + _unless_ you're using bridges or EntryNodes, since if you are + then you could quickly run out of entry points. + - Fix the Windows directory-listing code. A bug introduced in + 0.2.2.14-alpha could make Windows directory servers forget to load + some of their cached v2 networkstatus files. + - Really allow clients to use relays as bridges. Fixes bug 1776; + bugfix on 0.2.2.15-alpha. + - Demote a warn to info that happens when the CellStatistics option + was just enabled. Bugfix on 0.2.2.15-alpha; fixes bug 1921. + Reported by Moritz Bartl. + - On Windows, build correctly either with or without Unicode support. + This is necessary so that Tor can support fringe platforms like + Windows 98 (which has no Unicode), or Windows CE (which has no + non-Unicode). Bugfix on 0.2.2.14-alpha; fixes bug 1797. + + o Testing + - Add a unit test for cross-platform directory-listing code. + + +Changes in version 0.2.2.15-alpha - 2010-08-18 + Tor 0.2.2.15-alpha fixes a big bug in hidden service availability, + fixes a variety of other bugs that were preventing performance + experiments from moving forward, fixes several bothersome memory leaks, + and generally closes a lot of smaller bugs that have been filling up + trac lately. + + o Major bugfixes: + - Stop assigning the HSDir flag to relays that disable their + DirPort (and thus will refuse to answer directory requests). This + fix should dramatically improve the reachability of hidden services: + hidden services and hidden service clients pick six HSDir relays + to store and retrieve the hidden service descriptor, and currently + about half of the HSDir relays will refuse to work. Bugfix on + 0.2.0.10-alpha; fixes part of bug 1693. + - The PerConnBWRate and Burst config options, along with the + bwconnrate and bwconnburst consensus params, initialized each conn's + token bucket values only when the connection is established. Now we + update them if the config options change, and update them every time + we get a new consensus. Otherwise we can encounter an ugly edge + case where we initialize an OR conn to client-level bandwidth, + but then later the relay joins the consensus and we leave it + throttled. Bugfix on 0.2.2.7-alpha; fixes bug 1830. + - Fix a regression that caused Tor to rebind its ports if it receives + SIGHUP while hibernating. Bugfix in 0.1.1.6-alpha; closes bug 919. + + o Major features: + - Lower the maximum weighted-fractional-uptime cutoff to 98%. This + should give us approximately 40-50% more Guard-flagged nodes, + improving the anonymity the Tor network can provide and also + decreasing the dropoff in throughput that relays experience when + they first get the Guard flag. + - Allow enabling or disabling the *Statistics config options while + Tor is running. + + o Minor features: + - Update to the August 1 2010 Maxmind GeoLite Country database. + - Have the controller interface give a more useful message than + "Internal Error" in response to failed GETINFO requests. + - Warn when the same option is provided more than once in a torrc + file, on the command line, or in a single SETCONF statement, and + the option is one that only accepts a single line. Closes bug 1384. + - Build correctly on mingw with more recent versions of OpenSSL 0.9.8. + Patch from mingw-san. + - Add support for the country code "{??}" in torrc options like + ExcludeNodes, to indicate all routers of unknown country. Closes + bug 1094. + - Relays report the number of bytes spent on answering directory + requests in extra-info descriptors similar to {read,write}-history. + Implements enhancement 1790. + + o Minor bugfixes (on 0.2.1.x and earlier): + - Complain if PublishServerDescriptor is given multiple arguments that + include 0 or 1. This configuration will be rejected in the future. + Bugfix on 0.2.0.1-alpha; closes bug 1107. + - Disallow BridgeRelay 1 and ORPort 0 at once in the configuration. + Bugfix on 0.2.0.13-alpha; closes bug 928. + - Change "Application request when we're believed to be offline." + notice to "Application request when we haven't used client + functionality lately.", to clarify that it's not an error. Bugfix + on 0.0.9.3; fixes bug 1222. + - Fix a bug in the controller interface where "GETINFO ns/asdaskljkl" + would return "551 Internal error" rather than "552 Unrecognized key + ns/asdaskljkl". Bugfix on 0.1.2.3-alpha. + - Users can't configure a regular relay to be their bridge. It didn't + work because when Tor fetched the bridge descriptor, it found + that it already had it, and didn't realize that the purpose of the + descriptor had changed. Now we replace routers with a purpose other + than bridge with bridge descriptors when fetching them. Bugfix on + 0.1.1.9-alpha. Bug 1776 not yet fixed because now we immediately + refetch the descriptor with router purpose 'general', disabling + it as a bridge. + - Fix a rare bug in rend_fn unit tests: we would fail a test when + a randomly generated port is 0. Diagnosed by Matt Edman. Bugfix + on 0.2.0.10-alpha; fixes bug 1808. + - Exit nodes didn't recognize EHOSTUNREACH as a plausible error code, + and so sent back END_STREAM_REASON_MISC. Clients now recognize a new + stream ending reason for this case: END_STREAM_REASON_NOROUTE. + Servers can start sending this code when enough clients recognize + it. Also update the spec to reflect this new reason. Bugfix on + 0.1.0.1-rc; fixes part of bug 1793. + - Delay geoip stats collection by bridges for 6 hours, not 2 hours, + when we switch from being a public relay to a bridge. Otherwise + there will still be clients that see the relay in their consensus, + and the stats will end up wrong. Bugfix on 0.2.1.15-rc; fixes bug + 932 even more. + - Instead of giving an assertion failure on an internal mismatch + on estimated freelist size, just log a BUG warning and try later. + Mitigates but does not fix bug 1125. + - Fix an assertion failure that could occur in caches or bridge users + when using a very short voting interval on a testing network. + Diagnosed by Robert Hogan. Fixes bug 1141; bugfix on 0.2.0.8-alpha. + + o Minor bugfixes (on 0.2.2.x): + - Alter directory authorities to always consider Exit-flagged nodes + as potential Guard nodes in their votes. The actual decision to + use Exits as Guards is done in the consensus bandwidth weights. + Fixes bug 1294; bugfix on 0.2.2.10-alpha. + - When the controller is reporting the purpose of circuits that + didn't finish building before the circuit build timeout, it was + printing UNKNOWN_13. Now print EXPIRED. Bugfix on 0.2.2.14-alpha. + - Our libevent version parsing code couldn't handle versions like + 1.4.14b-stable and incorrectly warned the user about using an + old and broken version of libevent. Treat 1.4.14b-stable like + 1.4.14-stable when parsing the version. Fixes bug 1731; bugfix + on 0.2.2.1-alpha. + - Don't use substitution references like $(VAR:MOD) when + $(asciidoc_files) is empty -- make(1) on NetBSD transforms + '$(:x)' to 'x' rather than the empty string. This bites us in + doc/ when configured with --disable-asciidoc. Bugfix on + 0.2.2.9-alpha; fixes bug 1773. + - Remove a spurious hidden service server-side log notice about + "Ancient non-dirty circuits". Bugfix on 0.2.2.14-alpha; fixes + bug 1741. + - Fix compilation with --with-dmalloc set. Bugfix on 0.2.2.6-alpha; + fixes bug 1832. + - Correctly report written bytes on linked connections. Found while + implementing 1790. Bugfix on 0.2.2.4-alpha. + - Fix three memory leaks: one in circuit_build_times_parse_state(), + one in dirvote_add_signatures_to_pending_consensus(), and one every + time we parse a v3 network consensus. Bugfixes on 0.2.2.14-alpha, + 0.2.2.6-alpha, and 0.2.2.10-alpha respectively; fixes bug 1831. + + o Code simplifications and refactoring: + - Take a first step towards making or.h smaller by splitting out + function definitions for all source files in src/or/. Leave + structures and defines in or.h for now. + - Remove a bunch of unused function declarations as well as a block of + #if 0'd code from the unit tests. Closes bug 1824. + - New unit tests for exit-port history statistics; refactored exit + statistics code to be more easily tested. + - Remove the old debian/ directory from the main Tor distribution. + The official Tor-for-debian git repository lives at the URL + https://git.torproject.org/debian/tor.git + + +Changes in version 0.2.2.14-alpha - 2010-07-12 + Tor 0.2.2.14-alpha greatly improves client-side handling of + circuit build timeouts, which are used to estimate speed and improve + performance. We also move to a much better GeoIP database, port Tor to + Windows CE, introduce new compile flags that improve code security, + add an eighth v3 directory authority, and address a lot of more + minor issues. + + o Major bugfixes: + - Tor directory authorities no longer crash when started with a + cached-microdesc-consensus file in their data directory. Bugfix + on 0.2.2.6-alpha; fixes bug 1532. + - Treat an unset $HOME like an empty $HOME rather than triggering an + assert. Bugfix on 0.0.8pre1; fixes bug 1522. + - Ignore negative and large circuit build timeout values that can + happen during a suspend or hibernate. These values caused various + asserts to fire. Bugfix on 0.2.2.2-alpha; fixes bug 1245. + - Alter calculation of Pareto distribution parameter 'Xm' for + Circuit Build Timeout learning to use the weighted average of the + top N=3 modes (because we have three entry guards). Considering + multiple modes should improve the timeout calculation in some cases, + and prevent extremely high timeout values. Bugfix on 0.2.2.2-alpha; + fixes bug 1335. + - Alter calculation of Pareto distribution parameter 'Alpha' to use a + right censored distribution model. This approach improves over the + synthetic timeout generation approach that was producing insanely + high timeout values. Now we calculate build timeouts using truncated + times. Bugfix on 0.2.2.2-alpha; fixes bugs 1245 and 1335. + - Do not close circuits that are under construction when they reach + the circuit build timeout. Instead, leave them building (but do not + use them) for up until the time corresponding to the 95th percentile + on the Pareto CDF or 60 seconds, whichever is greater. This is done + to provide better data for the new Pareto model. This percentile + can be controlled by the consensus. + + o Major features: + - Move to the June 2010 Maxmind GeoLite country db (rather than the + June 2009 ip-to-country GeoIP db) for our statistics that count + how many users relays are seeing from each country. Now we have + more accurate data for many African countries. + - Port Tor to build and run correctly on Windows CE systems, using + the wcecompat library. Contributed by Valerio Lupi. + - New "--enable-gcc-hardening" ./configure flag (off by default) + to turn on gcc compile time hardening options. It ensures + that signed ints have defined behavior (-fwrapv), enables + -D_FORTIFY_SOURCE=2 (requiring -O2), adds stack smashing protection + with canaries (-fstack-protector-all), turns on ASLR protection if + supported by the kernel (-fPIE, -pie), and adds additional security + related warnings. Verified to work on Mac OS X and Debian Lenny. + - New "--enable-linker-hardening" ./configure flag (off by default) + to turn on ELF specific hardening features (relro, now). This does + not work with Mac OS X or any other non-ELF binary format. + + o New directory authorities: + - Set up maatuska (run by Linus Nordberg) as the eighth v3 directory + authority. + + o Minor features: + - New config option "WarnUnsafeSocks 0" disables the warning that + occurs whenever Tor receives a socks handshake using a version of + the socks protocol that can only provide an IP address (rather + than a hostname). Setups that do DNS locally over Tor are fine, + and we shouldn't spam the logs in that case. + - Convert the HACKING file to asciidoc, and add a few new sections + to it, explaining how we use Git, how we make changelogs, and + what should go in a patch. + - Add a TIMEOUT_RATE keyword to the BUILDTIMEOUT_SET control port + event, to give information on the current rate of circuit timeouts + over our stored history. + - Add ability to disable circuit build time learning via consensus + parameter and via a LearnCircuitBuildTimeout config option. Also + automatically disable circuit build time calculation if we are + either a AuthoritativeDirectory, or if we fail to write our state + file. Fixes bug 1296. + - More gracefully handle corrupt state files, removing asserts + in favor of saving a backup and resetting state. + - Rename the "log.h" header to "torlog.h" so as to conflict with fewer + system headers. + + o Minor bugfixes: + - Build correctly on OSX with zlib 1.2.4 and higher with all warnings + enabled. + - When a2x fails, mention that the user could disable manpages instead + of trying to fix their asciidoc installation. + - Where available, use Libevent 2.0's periodic timers so that our + once-per-second cleanup code gets called even more closely to + once per second than it would otherwise. Fixes bug 943. + - If you run a bridge that listens on multiple IP addresses, and + some user configures a bridge address that uses a different IP + address than your bridge writes in its router descriptor, and the + user doesn't specify an identity key, their Tor would discard the + descriptor because "it isn't one of our configured bridges", and + fail to bootstrap. Now believe the descriptor and bootstrap anyway. + Bugfix on 0.2.0.3-alpha. + - If OpenSSL fails to make a duplicate of a private or public key, log + an error message and try to exit cleanly. May help with debugging + if bug 1209 ever remanifests. + - Save a couple bytes in memory allocation every time we escape + certain characters in a string. Patch from Florian Zumbiehl. + - Make it explicit that we don't cannibalize one-hop circuits. This + happens in the wild, but doesn't turn out to be a problem because + we fortunately don't use those circuits. Many thanks to outofwords + for the initial analysis and to swissknife who confirmed that + two-hop circuits are actually created. + - Make directory mirrors report non-zero dirreq-v[23]-shares again. + Fixes bug 1564; bugfix on 0.2.2.9-alpha. + - Eliminate a case where a circuit build time warning was displayed + after network connectivity resumed. Bugfix on 0.2.2.2-alpha. + + Changes in version 0.2.1.26 - 2010-05-02 Tor 0.2.1.26 addresses the recent connection and memory overload problems we've been seeing on relays, especially relays with their @@ -251,6 +2259,265 @@ compete for the mutex. Bugfix on 0.2.0.1-alpha. +Changes in version 0.2.2.13-alpha - 2010-04-24 + Tor 0.2.2.13-alpha addresses the recent connection and memory overload + problems we've been seeing on relays, especially relays with their + DirPort open. If your relay has been crashing, or you turned it off + because it used too many resources, give this release a try. + + o Major bugfixes: + - Teach relays to defend themselves from connection overload. Relays + now close idle circuits early if it looks like they were intended + for directory fetches. Relays are also more aggressive about closing + TLS connections that have no circuits on them. Such circuits are + unlikely to be re-used, and tens of thousands of them were piling + up at the fast relays, causing the relays to run out of sockets + and memory. Bugfix on 0.2.0.22-rc (where clients started tunneling + their directory fetches over TLS). + + o Minor features: + - Finally get rid of the deprecated and now harmful notion of "clique + mode", where directory authorities maintain TLS connections to + every other relay. + - Directory authorities now do an immediate reachability check as soon + as they hear about a new relay. This change should slightly reduce + the time between setting up a relay and getting listed as running + in the consensus. It should also improve the time between setting + up a bridge and seeing use by bridge users. + - Directory authorities no longer launch a TLS connection to every + relay as they startup. Now that we have 2k+ descriptors cached, + the resulting network hiccup is becoming a burden. Besides, + authorities already avoid voting about Running for the first half + hour of their uptime. + + +Changes in version 0.2.2.12-alpha - 2010-04-20 + Tor 0.2.2.12-alpha fixes a critical bug in how directory authorities + handle and vote on descriptors. It was causing relays to drop out of + the consensus. + + o Major bugfixes: + - Many relays have been falling out of the consensus lately because + not enough authorities know about their descriptor for them to get + a majority of votes. When we deprecated the v2 directory protocol, + we got rid of the only way that v3 authorities can hear from each + other about other descriptors. Now authorities examine every v3 + vote for new descriptors, and fetch them from that authority. Bugfix + on 0.2.1.23. + - Fix two typos in tor_vasprintf() that broke the compile on Windows, + and a warning in or.h related to bandwidth_weight_rule_t that + prevented clean compile on OS X. Fixes bug 1363; bugfix on + 0.2.2.11-alpha. + - Fix a segfault on relays when DirReqStatistics is enabled + and 24 hours pass. Bug found by keb. Fixes bug 1365; bugfix on + 0.2.2.11-alpha. + + o Minor bugfixes: + - Demote a confusing TLS warning that relay operators might get when + someone tries to talk to their OrPort. It is neither the operator's + fault nor can they do anything about it. Fixes bug 1364; bugfix + on 0.2.0.14-alpha. + + +Changes in version 0.2.2.11-alpha - 2010-04-15 + Tor 0.2.2.11-alpha fixes yet another instance of broken OpenSSL + libraries that was causing some relays to drop out of the consensus. + + o Major bugfixes: + - Directory mirrors were fetching relay descriptors only from v2 + directory authorities, rather than v3 authorities like they should. + Only 2 v2 authorities remain (compared to 7 v3 authorities), leading + to a serious bottleneck. Bugfix on 0.2.0.9-alpha. Fixes bug 1324. + - Fix a parsing error that made every possible value of + CircPriorityHalflifeMsec get treated as "1 msec". Bugfix + on 0.2.2.7-alpha. Rename CircPriorityHalflifeMsec to + CircuitPriorityHalflifeMsec, so authorities can tell newer relays + about the option without breaking older ones. + - Fix SSL renegotiation behavior on OpenSSL versions like on Centos + that claim to be earlier than 0.9.8m, but which have in reality + backported huge swaths of 0.9.8m or 0.9.8n renegotiation + behavior. Possible fix for some cases of bug 1346. + + o Minor features: + - Experiment with a more aggressive approach to preventing clients + from making one-hop exit streams. Exit relays who want to try it + out can set "RefuseUnknownExits 1" in their torrc, and then look + for "Attempt by %s to open a stream" log messages. Let us know + how it goes! + - Add support for statically linking zlib by specifying + --enable-static-zlib, to go with our support for statically linking + openssl and libevent. Resolves bug 1358. + + o Minor bugfixes: + - Fix a segfault that happens whenever a Tor client that is using + libevent2's bufferevents gets a hup signal. Bugfix on 0.2.2.5-alpha; + fixes bug 1341. + - When we cleaned up the contrib/tor-exit-notice.html file, we left + out the first line. Fixes bug 1295. + - When building the manpage from a tarball, we required asciidoc, but + the asciidoc -> roff/html conversion was already done for the + tarball. Make 'make' complain only when we need asciidoc (either + because we're compiling directly from git, or because we altered + the asciidoc manpage in the tarball). Bugfix on 0.2.2.9-alpha. + - When none of the directory authorities vote on any params, Tor + segfaulted when trying to make the consensus from the votes. We + didn't trigger the bug in practice, because authorities do include + params in their votes. Bugfix on 0.2.2.10-alpha; fixes bug 1322. + + o Testsuite fixes: + - In the util/threads test, no longer free the test_mutex before all + worker threads have finished. Bugfix on 0.2.1.6-alpha. + - The master thread could starve the worker threads quite badly on + certain systems, causing them to run only partially in the allowed + window. This resulted in test failures. Now the master thread sleeps + occasionally for a few microseconds while the two worker-threads + compete for the mutex. Bugfix on 0.2.0.1-alpha. + + +Changes in version 0.2.2.10-alpha - 2010-03-07 + Tor 0.2.2.10-alpha fixes a regression introduced in 0.2.2.9-alpha that + could prevent relays from guessing their IP address correctly. It also + starts the groundwork for another client-side performance boost, since + currently we're not making efficient use of relays that have both the + Guard flag and the Exit flag. + + o Major bugfixes: + - Fix a regression from our patch for bug 1244 that caused relays + to guess their IP address incorrectly if they didn't set Address + in their torrc and/or their address fails to resolve. Bugfix on + 0.2.2.9-alpha; fixes bug 1269. + + o Major features (performance): + - Directory authorities now compute consensus weightings that instruct + clients how to weight relays flagged as Guard, Exit, Guard+Exit, + and no flag. Clients that use these weightings will distribute + network load more evenly across these different relay types. The + weightings are in the consensus so we can change them globally in + the future. Extra thanks to "outofwords" for finding some nasty + security bugs in the first implementation of this feature. + + o Minor features (performance): + - Always perform router selections using weighted relay bandwidth, + even if we don't need a high capacity circuit at the time. Non-fast + circuits now only differ from fast ones in that they can use relays + not marked with the Fast flag. This "feature" could turn out to + be a horrible bug; we should investigate more before it goes into + a stable release. + + o Minor features: + - Allow disabling building of the manpages. Skipping the manpage + speeds up the build considerably. + + o Minor bugfixes (on 0.2.2.x): + - Fix a memleak in the EXTENDCIRCUIT logic. Spotted by coverity. + Bugfix on 0.2.2.9-alpha. + - Disallow values larger than INT32_MAX for PerConnBWRate|Burst + config option. Bugfix on 0.2.2.7-alpha. + - Ship the asciidoc-helper file in the tarball, so that people can + build from source if they want to, and touching the .1.txt files + doesn't break the build. Bugfix on 0.2.2.9-alpha. + + o Minor bugfixes (on 0.2.1.x or earlier): + - Fix a dereference-then-NULL-check sequence when publishing + descriptors. Bugfix on 0.2.1.5-alpha. Discovered by ekir; fixes + bug 1255. + - Fix another dereference-then-NULL-check sequence. Bugfix on + 0.2.1.14-rc. Discovered by ekir; fixes bug 1256. + - Make sure we treat potentially not NUL-terminated strings correctly. + Bugfix on 0.1.1.13-alpha. Discovered by rieo; fixes bug 1257. + + o Code simplifications and refactoring: + - Fix some urls in the exit notice file and make it XHTML1.1 strict + compliant. Based on a patch from Christian Kujau. + - Don't use sed in asciidoc-helper anymore. + - Make the build process fail if asciidoc cannot be found and + building with asciidoc isn't disabled. + + +Changes in version 0.2.2.9-alpha - 2010-02-22 + Tor 0.2.2.9-alpha makes Tor work again on the latest OS X, updates the + location of a directory authority, and cleans up a bunch of small bugs. + + o Directory authority changes: + - Change IP address for dannenberg (v3 directory authority), and + remove moria2 (obsolete v1, v2 directory authority and v0 hidden + service directory authority) from the list. + + o Major bugfixes: + - Make Tor work again on the latest OS X: when deciding whether to + use strange flags to turn TLS renegotiation on, detect the OpenSSL + version at run-time, not compile time. We need to do this because + Apple doesn't update its dev-tools headers when it updates its + libraries in a security patch. + - Fix a potential buffer overflow in lookup_last_hid_serv_request() + that could happen on 32-bit platforms with 64-bit time_t. Also fix + a memory leak when requesting a hidden service descriptor we've + requested before. Fixes bug 1242, bugfix on 0.2.0.18-alpha. Found + by aakova. + - Authorities could be tricked into giving out the Exit flag to relays + that didn't allow exiting to any ports. This bug could screw + with load balancing and stats. Bugfix on 0.1.1.6-alpha; fixes bug + 1238. Bug discovered by Martin Kowalczyk. + - When freeing a session key, zero it out completely. We only zeroed + the first ptrsize bytes. Bugfix on 0.0.2pre8. Discovered and + patched by ekir. Fixes bug 1254. + + o Minor bugfixes: + - Fix static compilation by listing the openssl libraries in the right + order. Bugfix on Tor 0.2.2.8-alpha; fixes bug 1237. + - Resume handling .exit hostnames in a special way: originally we + stripped the .exit part and used the requested exit relay. In + 0.2.2.1-alpha we stopped treating them in any special way, meaning + if you use a .exit address then Tor will pass it on to the exit + relay. Now we reject the .exit stream outright, since that behavior + might be more expected by the user. Found and diagnosed by Scott + Bennett and Downie on or-talk. + - Don't spam the controller with events when we have no file + descriptors available. Bugfix on 0.2.1.5-alpha. (Rate-limiting + for log messages was already solved from bug 748.) + - Avoid a bogus overlapped memcpy in tor_addr_copy(). Reported by + "memcpyfail". + - Make the DNSPort option work with libevent 2.x. Don't alter the + behaviour for libevent 1.x. Fixes bug 1143. Found by SwissTorExit. + - Emit a GUARD DROPPED controller event for a case we missed. + - Make more fields in the controller protocol case-insensitive, since + control-spec.txt said they were. + - Refactor resolve_my_address() to not use gethostbyname() anymore. + Fixes bug 1244; bugfix on 0.0.2pre25. Reported by Mike Mestnik. + - Fix a spec conformance issue: the network-status-version token + must be the first token in a v3 consensus or vote. Discovered by + parakeep. Bugfix on 0.2.0.3-alpha. + + o Code simplifications and refactoring: + - Generate our manpage and HTML documentation using Asciidoc. This + change should make it easier to maintain the documentation, and + produce nicer HTML. + - Remove the --enable-iphone option. According to reports from Marco + Bonetti, Tor builds fine without any special tweaking on recent + iPhone SDK versions. + - Removed some unnecessary files from the source distribution. The + AUTHORS file has now been merged into the people page on the + website. The roadmaps and design doc can now be found in the + projects directory in svn. + - Enabled various circuit build timeout constants to be controlled + by consensus parameters. Also set better defaults for these + parameters based on experimentation on broadband and simulated + high latency links. + + o Minor features: + - The 'EXTENDCIRCUIT' control port command can now be used with + a circ id of 0 and no path. This feature will cause Tor to build + a new 'fast' general purpose circuit using its own path selection + algorithms. + - Added a BUILDTIMEOUT_SET controller event to describe changes + to the circuit build timeout. + - Future-proof the controller protocol a bit by ignoring keyword + arguments we do not recognize. + - Expand homedirs passed to tor-checkkey. This should silence a + coverity complaint about passing a user-supplied string into + open() without checking it. + + Changes in version 0.2.1.25 - 2010-03-16 Tor 0.2.1.25 fixes a regression introduced in 0.2.1.23 that could prevent relays from guessing their IP address correctly. It also fixes @@ -275,6 +2542,7 @@ Bugfix on 0.1.1.13-alpha. Discovered by rieo; fixes bug 1257. + Changes in version 0.2.1.24 - 2010-02-21 Tor 0.2.1.24 makes Tor work again on the latest OS X -- this time for sure! @@ -328,6 +2596,154 @@ over the behavior introduced in 0.1.2.17. +Changes in version 0.2.2.8-alpha - 2010-01-26 + Tor 0.2.2.8-alpha fixes a crash bug in 0.2.2.7-alpha that has been + causing bridge relays to disappear. If you're running a bridge, + please upgrade. + + o Major bugfixes: + - Fix a memory corruption bug on bridges that occured during the + inclusion of stats data in extra-info descriptors. Also fix the + interface for geoip_get_bridge_stats* to prevent similar bugs in + the future. Diagnosis by Tas, patch by Karsten and Sebastian. + Fixes bug 1208; bugfix on 0.2.2.7-alpha. + + o Minor bugfixes: + - Ignore OutboundBindAddress when connecting to localhost. + Connections to localhost need to come _from_ localhost, or else + local servers (like DNS and outgoing HTTP/SOCKS proxies) will often + refuse to listen. + + +Changes in version 0.2.2.7-alpha - 2010-01-19 + Tor 0.2.2.7-alpha fixes a huge client-side performance bug, as well + as laying the groundwork for further relay-side performance fixes. It + also starts cleaning up client behavior with respect to the EntryNodes, + ExitNodes, and StrictNodes config options. + + This release also rotates two directory authority keys, due to a + security breach of some of the Torproject servers. + + o Directory authority changes: + - Rotate keys (both v3 identity and relay identity) for moria1 + and gabelmoo. + + o Major features (performance): + - We were selecting our guards uniformly at random, and then weighting + which of our guards we'd use uniformly at random. This imbalance + meant that Tor clients were severely limited on throughput (and + probably latency too) by the first hop in their circuit. Now we + select guards weighted by currently advertised bandwidth. We also + automatically discard guards picked using the old algorithm. Fixes + bug 1217; bugfix on 0.2.1.3-alpha. Found by Mike Perry. + - When choosing which cells to relay first, relays can now favor + circuits that have been quiet recently, to provide lower latency + for low-volume circuits. By default, relays enable or disable this + feature based on a setting in the consensus. You can override + this default by using the new "CircuitPriorityHalflife" config + option. Design and code by Ian Goldberg, Can Tang, and Chris + Alexander. + - Add separate per-conn write limiting to go with the per-conn read + limiting. We added a global write limit in Tor 0.1.2.5-alpha, + but never per-conn write limits. + - New consensus params "bwconnrate" and "bwconnburst" to let us + rate-limit client connections as they enter the network. It's + controlled in the consensus so we can turn it on and off for + experiments. It's starting out off. Based on proposal 163. + + o Major features (relay selection options): + - Switch to a StrictNodes config option, rather than the previous + "StrictEntryNodes" / "StrictExitNodes" separation that was missing a + "StrictExcludeNodes" option. + - If EntryNodes, ExitNodes, ExcludeNodes, or ExcludeExitNodes + change during a config reload, mark and discard all our origin + circuits. This fix should address edge cases where we change the + config options and but then choose a circuit that we created before + the change. + - If EntryNodes or ExitNodes are set, be more willing to use an + unsuitable (e.g. slow or unstable) circuit. The user asked for it, + they get it. + - Make EntryNodes config option much more aggressive even when + StrictNodes is not set. Before it would prepend your requested + entrynodes to your list of guard nodes, but feel free to use others + after that. Now it chooses only from your EntryNodes if any of + those are available, and only falls back to others if a) they're + all down and b) StrictNodes is not set. + - Now we refresh your entry guards from EntryNodes at each consensus + fetch -- rather than just at startup and then they slowly rot as + the network changes. + + o Major bugfixes: + - Stop bridge directory authorities from answering dbg-stability.txt + directory queries, which would let people fetch a list of all + bridge identities they track. Bugfix on 0.2.1.6-alpha. + + o Minor features: + - Log a notice when we get a new control connection. Now it's easier + for security-conscious users to recognize when a local application + is knocking on their controller door. Suggested by bug 1196. + - New config option "CircuitStreamTimeout" to override our internal + timeout schedule for how many seconds until we detach a stream from + a circuit and try a new circuit. If your network is particularly + slow, you might want to set this to a number like 60. + - New controller command "getinfo config-text". It returns the + contents that Tor would write if you send it a SAVECONF command, + so the controller can write the file to disk itself. + - New options for SafeLogging to allow scrubbing only log messages + generated while acting as a relay. + - Ship the bridges spec file in the tarball too. + - Avoid a mad rush at the beginning of each month when each client + rotates half of its guards. Instead we spread the rotation out + throughout the month, but we still avoid leaving a precise timestamp + in the state file about when we first picked the guard. Improves + over the behavior introduced in 0.1.2.17. + + o Minor bugfixes (compiling): + - Fix compilation on OS X 10.3, which has a stub mlockall() but + hides it. Bugfix on 0.2.2.6-alpha. + - Fix compilation on Solaris by removing support for the + DisableAllSwap config option. Solaris doesn't have an rlimit for + mlockall, so we cannot use it safely. Fixes bug 1198; bugfix on + 0.2.2.6-alpha. + + o Minor bugfixes (crashes): + - Do not segfault when writing buffer stats when we haven't observed + a single circuit to report about. Found by Fabian Lanze. Bugfix on + 0.2.2.1-alpha. + - If we're in the pathological case where there's no exit bandwidth + but there is non-exit bandwidth, or no guard bandwidth but there + is non-guard bandwidth, don't crash during path selection. Bugfix + on 0.2.0.3-alpha. + - Fix an impossible-to-actually-trigger buffer overflow in relay + descriptor generation. Bugfix on 0.1.0.15. + + o Minor bugfixes (privacy): + - Fix an instance where a Tor directory mirror might accidentally + log the IP address of a misbehaving Tor client. Bugfix on + 0.1.0.1-rc. + - Don't list Windows capabilities in relay descriptors. We never made + use of them, and maybe it's a bad idea to publish them. Bugfix + on 0.1.1.8-alpha. + + o Minor bugfixes (other): + - Resolve an edge case in path weighting that could make us misweight + our relay selection. Fixes bug 1203; bugfix on 0.0.8rc1. + - Fix statistics on client numbers by country as seen by bridges that + were broken in 0.2.2.1-alpha. Also switch to reporting full 24-hour + intervals instead of variable 12-to-48-hour intervals. + - After we free an internal connection structure, overwrite it + with a different memory value than we use for overwriting a freed + internal circuit structure. Should help with debugging. Suggested + by bug 1055. + - Update our OpenSSL 0.9.8l fix so that it works with OpenSSL 0.9.8m + too. + + o Removed features: + - Remove the HSAuthorityRecordStats option that version 0 hidden + service authorities could have used to track statistics of overall + hidden service usage. + + Changes in version 0.2.1.22 - 2010-01-19 Tor 0.2.1.22 fixes a critical privacy problem in bridge directory authorities -- it would tell you its whole history of bridge descriptors @@ -371,6 +2787,69 @@ trigger assert. Fixes bug 1173. +Changes in version 0.2.2.6-alpha - 2009-11-19 + Tor 0.2.2.6-alpha lays the groundwork for many upcoming features: + support for the new lower-footprint "microdescriptor" directory design, + future-proofing our consensus format against new hash functions or + other changes, and an Android port. It also makes Tor compatible with + the upcoming OpenSSL 0.9.8l release, and fixes a variety of bugs. + + o Major features: + - Directory authorities can now create, vote on, and serve multiple + parallel formats of directory data as part of their voting process. + Partially implements Proposal 162: "Publish the consensus in + multiple flavors". + - Directory authorities can now agree on and publish small summaries + of router information that clients can use in place of regular + server descriptors. This transition will eventually allow clients + to use far less bandwidth for downloading information about the + network. Begins the implementation of Proposal 158: "Clients + download consensus + microdescriptors". + - The directory voting system is now extensible to use multiple hash + algorithms for signatures and resource selection. Newer formats + are signed with SHA256, with a possibility for moving to a better + hash algorithm in the future. + - New DisableAllSwap option. If set to 1, Tor will attempt to lock all + current and future memory pages via mlockall(). On supported + platforms (modern Linux and probably BSD but not Windows or OS X), + this should effectively disable any and all attempts to page out + memory. This option requires that you start your Tor as root -- + if you use DisableAllSwap, please consider using the User option + to properly reduce the privileges of your Tor. + - Numerous changes, bugfixes, and workarounds from Nathan Freitas + to help Tor build correctly for Android phones. + + o Major bugfixes: + - Work around a security feature in OpenSSL 0.9.8l that prevents our + handshake from working unless we explicitly tell OpenSSL that we + are using SSL renegotiation safely. We are, but OpenSSL 0.9.8l + won't work unless we say we are. + + o Minor bugfixes: + - Fix a crash bug when trying to initialize the evdns module in + Libevent 2. Bugfix on 0.2.1.16-rc. + - Stop logging at severity 'warn' when some other Tor client tries + to establish a circuit with us using weak DH keys. It's a protocol + violation, but that doesn't mean ordinary users need to hear about + it. Fixes the bug part of bug 1114. Bugfix on 0.1.0.13. + - Do not refuse to learn about authority certs and v2 networkstatus + documents that are older than the latest consensus. This bug might + have degraded client bootstrapping. Bugfix on 0.2.0.10-alpha. + Spotted and fixed by xmux. + - Fix numerous small code-flaws found by Coverity Scan Rung 3. + - If all authorities restart at once right before a consensus vote, + nobody will vote about "Running", and clients will get a consensus + with no usable relays. Instead, authorities refuse to build a + consensus if this happens. Bugfix on 0.2.0.10-alpha; fixes bug 1066. + - If your relay can't keep up with the number of incoming create + cells, it would log one warning per failure into your logs. Limit + warnings to 1 per minute. Bugfix on 0.0.2pre10; fixes bug 1042. + - Bridges now use "reject *:*" as their default exit policy. Bugfix + on 0.2.0.3-alpha; fixes bug 1113. + - Fix a memory leak on directory authorities during voting that was + introduced in 0.2.2.1-alpha. Found via valgrind. + + Changes in version 0.2.1.20 - 2009-10-15 Tor 0.2.1.20 fixes a crash bug when you're accessing many hidden services at once, prepares for more performance improvements, and @@ -446,6 +2925,262 @@ getinfo and status events until we have a better design for them. +Changes in version 0.2.2.5-alpha - 2009-10-11 + Tor 0.2.2.5-alpha fixes a few compile problems in 0.2.2.4-alpha. + + o Major bugfixes: + - Make the tarball compile again. Oops. Bugfix on 0.2.2.4-alpha. + + o New directory authorities: + - Move dizum to an alternate IP address. + + +Changes in version 0.2.2.4-alpha - 2009-10-10 + Tor 0.2.2.4-alpha fixes more crash bugs in 0.2.2.2-alpha. It also + introduces a new unit test framework, shifts directry authority + addresses around to reduce the impact from recent blocking events, + and fixes a few smaller bugs. + + o Major bugfixes: + - Fix several more asserts in the circuit_build_times code, for + example one that causes Tor to fail to start once we have + accumulated 5000 build times in the state file. Bugfixes on + 0.2.2.2-alpha; fixes bug 1108. + + o New directory authorities: + - Move moria1 and Tonga to alternate IP addresses. + + o Minor features: + - Log SSL state transitions at debug level during handshake, and + include SSL states in error messages. This may help debug future + SSL handshake issues. + - Add a new "Handshake" log domain for activities that happen + during the TLS handshake. + - Revert to the "June 3 2009" ip-to-country file. The September one + seems to have removed most US IP addresses. + - Directory authorities now reject Tor relays with versions less than + 0.1.2.14. This step cuts out four relays from the current network, + none of which are very big. + + o Minor bugfixes: + - Fix a couple of smaller issues with gathering statistics. Bugfixes + on 0.2.2.1-alpha. + - Fix two memory leaks in the error case of + circuit_build_times_parse_state(). Bugfix on 0.2.2.2-alpha. + - Don't count one-hop circuits when we're estimating how long it + takes circuits to build on average. Otherwise we'll set our circuit + build timeout lower than we should. Bugfix on 0.2.2.2-alpha. + - Directory authorities no longer change their opinion of, or vote on, + whether a router is Running, unless they have themselves been + online long enough to have some idea. Bugfix on 0.2.0.6-alpha. + Fixes bug 1023. + + o Code simplifications and refactoring: + - Revise our unit tests to use the "tinytest" framework, so we + can run tests in their own processes, have smarter setup/teardown + code, and so on. The unit test code has moved to its own + subdirectory, and has been split into multiple modules. + + +Changes in version 0.2.2.3-alpha - 2009-09-23 + Tor 0.2.2.3-alpha fixes a few crash bugs in 0.2.2.2-alpha. + + o Major bugfixes: + - Fix an overzealous assert in our new circuit build timeout code. + Bugfix on 0.2.2.2-alpha; fixes bug 1103. + + o Minor bugfixes: + - If the networkstatus consensus tells us that we should use a + negative circuit package window, ignore it. Otherwise we'll + believe it and then trigger an assert. Bugfix on 0.2.2.2-alpha. + + +Changes in version 0.2.2.2-alpha - 2009-09-21 + Tor 0.2.2.2-alpha introduces our latest performance improvement for + clients: Tor tracks the average time it takes to build a circuit, and + avoids using circuits that take too long to build. For fast connections, + this feature can cut your expected latency in half. For slow or flaky + connections, it could ruin your Tor experience. Let us know if it does! + + o Major features: + - Tor now tracks how long it takes to build client-side circuits + over time, and adapts its timeout to local network performance. + Since a circuit that takes a long time to build will also provide + bad performance, we get significant latency improvements by + discarding the slowest 20% of circuits. Specifically, Tor creates + circuits more aggressively than usual until it has enough data + points for a good timeout estimate. Implements proposal 151. + We are especially looking for reports (good and bad) from users with + both EDGE and broadband connections that can move from broadband + to EDGE and find out if the build-time data in the .tor/state gets + reset without loss of Tor usability. You should also see a notice + log message telling you that Tor has reset its timeout. + - Directory authorities can now vote on arbitary integer values as + part of the consensus process. This is designed to help set + network-wide parameters. Implements proposal 167. + - Tor now reads the "circwindow" parameter out of the consensus, + and uses that value for its circuit package window rather than the + default of 1000 cells. Begins the implementation of proposal 168. + + o Major bugfixes: + - Fix a remotely triggerable memory leak when a consensus document + contains more than one signature from the same voter. Bugfix on + 0.2.0.3-alpha. + + o Minor bugfixes: + - Fix an extremely rare infinite recursion bug that could occur if + we tried to log a message after shutting down the log subsystem. + Found by Matt Edman. Bugfix on 0.2.0.16-alpha. + - Fix parsing for memory or time units given without a space between + the number and the unit. Bugfix on 0.2.2.1-alpha; fixes bug 1076. + - A networkstatus vote must contain exactly one signature. Spec + conformance issue. Bugfix on 0.2.0.3-alpha. + - Fix an obscure bug where hidden services on 64-bit big-endian + systems might mis-read the timestamp in v3 introduce cells, and + refuse to connect back to the client. Discovered by "rotor". + Bugfix on 0.2.1.6-alpha. + - We were triggering a CLOCK_SKEW controller status event whenever + we connect via the v2 connection protocol to any relay that has + a wrong clock. Instead, we should only inform the controller when + it's a trusted authority that claims our clock is wrong. Bugfix + on 0.2.0.20-rc; starts to fix bug 1074. Reported by SwissTorExit. + - We were telling the controller about CHECKING_REACHABILITY and + REACHABILITY_FAILED status events whenever we launch a testing + circuit or notice that one has failed. Instead, only tell the + controller when we want to inform the user of overall success or + overall failure. Bugfix on 0.1.2.6-alpha. Fixes bug 1075. Reported + by SwissTorExit. + - Don't warn when we're using a circuit that ends with a node + excluded in ExcludeExitNodes, but the circuit is not used to access + the outside world. This should help fix bug 1090, but more problems + remain. Bugfix on 0.2.1.6-alpha. + - Work around a small memory leak in some versions of OpenSSL that + stopped the memory used by the hostname TLS extension from being + freed. + - Make our 'torify' script more portable; if we have only one of + 'torsocks' or 'tsocks' installed, don't complain to the user; + and explain our warning about tsocks better. + + o Minor features: + - Add a "getinfo status/accepted-server-descriptor" controller + command, which is the recommended way for controllers to learn + whether our server descriptor has been successfully received by at + least on directory authority. Un-recommend good-server-descriptor + getinfo and status events until we have a better design for them. + - Update to the "September 4 2009" ip-to-country file. + + +Changes in version 0.2.2.1-alpha - 2009-08-26 + Tor 0.2.2.1-alpha disables ".exit" address notation by default, allows + Tor clients to bootstrap on networks where only port 80 is reachable, + makes it more straightforward to support hardware crypto accelerators, + and starts the groundwork for gathering stats safely at relays. + + o Security fixes: + - Start the process of disabling ".exit" address notation, since it + can be used for a variety of esoteric application-level attacks + on users. To reenable it, set "AllowDotExit 1" in your torrc. Fix + on 0.0.9rc5. + + o New directory authorities: + - Set up urras (run by Jacob Appelbaum) as the seventh v3 directory + authority. + + o Major features: + - New AccelName and AccelDir options add support for dynamic OpenSSL + hardware crypto acceleration engines. + - Tor now supports tunneling all of its outgoing connections over + a SOCKS proxy, using the SOCKS4Proxy and/or SOCKS5Proxy + configuration options. Code by Christopher Davis. + + o Major bugfixes: + - Send circuit or stream sendme cells when our window has decreased + by 100 cells, not when it has decreased by 101 cells. Bug uncovered + by Karsten when testing the "reduce circuit window" performance + patch. Bugfix on the 54th commit on Tor -- from July 2002, + before the release of Tor 0.0.0. This is the new winner of the + oldest-bug prize. + + o New options for gathering stats safely: + - Directory mirrors that set "DirReqStatistics 1" write statistics + about directory requests to disk every 24 hours. As compared to the + --enable-geoip-stats flag in 0.2.1.x, there are a few improvements: + 1) stats are written to disk exactly every 24 hours; 2) estimated + shares of v2 and v3 requests are determined as mean values, not at + the end of a measurement period; 3) unresolved requests are listed + with country code '??'; 4) directories also measure download times. + - Exit nodes that set "ExitPortStatistics 1" write statistics on the + number of exit streams and transferred bytes per port to disk every + 24 hours. + - Relays that set "CellStatistics 1" write statistics on how long + cells spend in their circuit queues to disk every 24 hours. + - Entry nodes that set "EntryStatistics 1" write statistics on the + rough number and origins of connecting clients to disk every 24 + hours. + - Relays that write any of the above statistics to disk and set + "ExtraInfoStatistics 1" include the past 24 hours of statistics in + their extra-info documents. + + o Minor features: + - New --digests command-line switch to output the digests of the + source files Tor was built with. + - The "torify" script now uses torsocks where available. + - The memarea code now uses a sentinel value at the end of each area + to make sure nothing writes beyond the end of an area. This might + help debug some conceivable causes of bug 930. + - Time and memory units in the configuration file can now be set to + fractional units. For example, "2.5 GB" is now a valid value for + AccountingMax. + - Certain Tor clients (such as those behind check.torproject.org) may + want to fetch the consensus in an extra early manner. To enable this + a user may now set FetchDirInfoExtraEarly to 1. This also depends on + setting FetchDirInfoEarly to 1. Previous behavior will stay the same + as only certain clients who must have this information sooner should + set this option. + - Instead of adding the svn revision to the Tor version string, report + the git commit (when we're building from a git checkout). + + o Minor bugfixes: + - If any of the v3 certs we download are unparseable, we should + actually notice the failure so we don't retry indefinitely. Bugfix + on 0.2.0.x; reported by "rotator". + - If the cached cert file is unparseable, warn but don't exit. + - Fix possible segmentation fault on directory authorities. Bugfix on + 0.2.1.14-rc. + - When Tor fails to parse a descriptor of any kind, dump it to disk. + Might help diagnosing bug 1051. + + o Deprecated and removed features: + - The controller no longer accepts the old obsolete "addr-mappings/" + or "unregistered-servers-" GETINFO values. + - Hidden services no longer publish version 0 descriptors, and clients + do not request or use version 0 descriptors. However, the old hidden + service authorities still accept and serve version 0 descriptors + when contacted by older hidden services/clients. + - The EXTENDED_EVENTS and VERBOSE_NAMES controller features are now + always on; using them is necessary for correct forward-compatible + controllers. + - Remove support for .noconnect style addresses. Nobody was using + them, and they provided another avenue for detecting Tor users + via application-level web tricks. + + o Packaging changes: + - Upgrade Vidalia from 0.1.15 to 0.2.3 in the Windows and OS X + installer bundles. See + https://trac.vidalia-project.net/browser/vidalia/tags/vidalia-0.2.3/CHANGELOG + for details of what's new in Vidalia 0.2.3. + - Windows Vidalia Bundle: update Privoxy from 3.0.6 to 3.0.14-beta. + - OS X Vidalia Bundle: move to Polipo 1.0.4 with Tor specific + configuration file, rather than the old Privoxy. + - OS X Vidalia Bundle: Vidalia, Tor, and Polipo are compiled as + x86-only for better compatibility with OS X 10.6, aka Snow Leopard. + - OS X Tor Expert Bundle: Tor is compiled as x86-only for + better compatibility with OS X 10.6, aka Snow Leopard. + - OS X Vidalia Bundle: The multi-package installer is now replaced + by a simple drag and drop to the /Applications folder. This change + occurred with the upgrade to Vidalia 0.2.3. + + Changes in version 0.2.1.19 - 2009-07-28 Tor 0.2.1.19 fixes a major bug with accessing and providing hidden services on Tor 0.2.1.3-alpha through 0.2.1.18. diff -Nru tor-0.2.1.30/compile tor-0.2.2.35/compile --- tor-0.2.1.30/compile 2010-11-30 20:57:31.000000000 +0000 +++ tor-0.2.2.35/compile 1970-01-01 00:00:00.000000000 +0000 @@ -1,142 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand `-c -o'. - -scriptversion=2005-05-14.22 - -# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. -# Written by Tom Tromey . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -case $1 in - '') - echo "$0: No command. Try \`$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand `-c -o'. -Remove `-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file `INSTALL'. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "compile $scriptversion" - exit $? - ;; -esac - -ofile= -cfile= -eat= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as `compile cc -o foo foo.c'. - # So we strip `-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no `-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # `.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` - -# Create the lock directory. -# Note: use `[/.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" -# End: diff -Nru tor-0.2.1.30/config.guess tor-0.2.2.35/config.guess --- tor-0.2.1.30/config.guess 2010-11-30 20:57:31.000000000 +0000 +++ tor-0.2.2.35/config.guess 2011-12-15 16:28:48.000000000 +0000 @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 # Free Software Foundation, Inc. -timestamp='2008-01-23' +timestamp='2009-11-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,16 +27,16 @@ # the same distribution terms that you use for the rest of that program. -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` @@ -170,7 +170,7 @@ arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -324,14 +324,33 @@ case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -640,7 +659,7 @@ # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + grep -q __LP64__ then HP_ARCH="hppa2.0w" else @@ -791,12 +810,12 @@ i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - *:Interix*:[3456]*) + *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd) + authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) @@ -806,6 +825,9 @@ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -835,6 +857,20 @@ i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ @@ -857,6 +893,17 @@ frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; @@ -866,74 +913,33 @@ m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips64 - #undef mips64el + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu + padre:Linux:*:*) + echo sparc-unknown-linux-gnu exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level @@ -943,8 +949,11 @@ *) echo hppa-unknown-linux-gnu ;; esac exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux @@ -967,69 +976,6 @@ xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both @@ -1058,7 +1004,7 @@ i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1102,8 +1048,11 @@ pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 @@ -1141,6 +1090,16 @@ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; @@ -1153,7 +1112,7 @@ rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1216,6 +1175,9 @@ BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1243,6 +1205,16 @@ *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} @@ -1324,6 +1296,9 @@ i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 diff -Nru tor-0.2.1.30/config.sub tor-0.2.2.35/config.sub --- tor-0.2.1.30/config.sub 2010-11-30 20:57:31.000000000 +0000 +++ tor-0.2.2.35/config.sub 2011-12-15 16:28:48.000000000 +0000 @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 # Free Software Foundation, Inc. -timestamp='2008-01-16' +timestamp='2009-11-20' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -32,13 +32,16 @@ # Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -122,6 +125,7 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -148,10 +152,13 @@ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -249,13 +256,16 @@ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep \ + | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ - | mips64vr | mips64vrel \ + | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ @@ -268,6 +278,7 @@ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | moxie \ | mt \ | msp430 \ | nios | nios2 \ @@ -276,20 +287,22 @@ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ + | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) + | z8k | z80) basic_machine=$basic_machine-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) + m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none @@ -329,14 +342,17 @@ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ + | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ @@ -357,21 +373,22 @@ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ - | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ + | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) @@ -439,6 +456,10 @@ basic_machine=m68k-apollo os=-bsd ;; + aros) + basic_machine=i386-pc + os=-aros + ;; aux) basic_machine=m68k-apple os=-aux @@ -455,10 +476,18 @@ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; c90) basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -526,6 +555,10 @@ basic_machine=m88k-motorola os=-sysv3 ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp @@ -699,6 +732,9 @@ basic_machine=ns32k-utek os=-sysv ;; + microblaze) + basic_machine=microblaze-xilinx + ;; mingw32) basic_machine=i386-pc os=-mingw32 @@ -1128,6 +1164,10 @@ basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -1166,7 +1206,7 @@ we32k) basic_machine=we32k-att ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) @@ -1216,6 +1256,9 @@ # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; @@ -1236,10 +1279,11 @@ # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ + | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1248,7 +1292,7 @@ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ + | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ @@ -1258,7 +1302,7 @@ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1388,6 +1432,9 @@ -zvmoe) os=-zvmoe ;; + -dicos*) + os=-dicos + ;; -none) ;; *) @@ -1585,7 +1632,7 @@ -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) diff -Nru tor-0.2.1.30/configure tor-0.2.2.35/configure --- tor-0.2.1.30/configure 2011-02-23 08:25:55.000000000 +0000 +++ tor-0.2.2.35/configure 2011-12-15 17:01:54.000000000 +0000 @@ -1,60 +1,83 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61. +# Generated by GNU Autoconf 2.68. +# # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +# Foundation, Inc. +# +# # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -63,20 +86,19 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +as_myself= +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -87,354 +109,328 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE # CDPATH. -$as_unset CDPATH - +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST else - as_have_required=no + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes else - exitcode=1 - echo positional parameters were not saved. + as_have_required=no fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - case $as_dir in + as_found=: + case $as_dir in #( /*) for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi done;; esac + as_found=false done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } IFS=$as_save_IFS - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; -esac - -fi - - -: -(as_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 fi - - fi - fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} -exitcode=0 -if as_func_success; then - : +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error -if as_func_ret_success; then - : +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr else - exitcode=1 - echo as_func_ret_success failed. + as_expr=false fi -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false fi -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname else - exitcode=1 - echo positional parameters were not saved. + as_dirname=false fi -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell autoconf@gnu.org about your system, - echo including any error possibly output before this - echo message -} +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= @@ -451,8 +447,7 @@ s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the @@ -462,49 +457,40 @@ exit } - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi @@ -512,7 +498,7 @@ rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -529,12 +515,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -548,11 +534,11 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - -exec 7<&0 &1 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` @@ -567,7 +553,6 @@ subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME= @@ -575,6 +560,7 @@ PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= +PACKAGE_URL= # Factoring default headers for most tests. ac_includes_default="\ @@ -612,116 +598,159 @@ # include #endif" -ac_subst_vars='SHELL -PATH_SEPARATOR -PACKAGE_NAME -PACKAGE_TARNAME -PACKAGE_VERSION -PACKAGE_STRING -PACKAGE_BUGREPORT -exec_prefix -prefix -program_transform_name -bindir -sbindir -libexecdir -datarootdir -datadir -sysconfdir -sharedstatedir -localstatedir -includedir -oldincludedir -docdir -infodir -htmldir -dvidir -pdfdir -psdir -libdir -localedir -mandir -DEFS -ECHO_C -ECHO_N -ECHO_T -LIBS -build_alias -host_alias -target_alias -INSTALL_PROGRAM -INSTALL_SCRIPT -INSTALL_DATA -am__isrc -CYGPATH_W -PACKAGE -VERSION -ACLOCAL -AUTOCONF -AUTOMAKE -AUTOHEADER -MAKEINFO -install_sh -STRIP -INSTALL_STRIP_PROGRAM -mkdir_p -AWK -SET_MAKE -am__leading_dot -AMTAR -am__tar -am__untar -build -build_cpu -build_vendor -build_os -host -host_cpu -host_vendor -host_os -USE_OPENBSD_MALLOC_TRUE -USE_OPENBSD_MALLOC_FALSE -CC -CFLAGS -LDFLAGS -CPPFLAGS -ac_ct_CC -EXEEXT -OBJEXT -DEPDIR -am__include -am__quote -AMDEP_TRUE -AMDEP_FALSE -AMDEPBACKSLASH -CCDEPMODE -am__fastdepCC_TRUE -am__fastdepCC_FALSE -CPP -RANLIB -TORUSER -TORGROUP -BUILD_NT_SERVICES_TRUE -BUILD_NT_SERVICES_FALSE -GREP -EGREP -TOR_LIB_WS32 -TOR_LIB_GDI -TOR_CPPFLAGS_libevent -TOR_LDFLAGS_libevent -TOR_LIBEVENT_LIBS -TOR_CPPFLAGS_openssl -TOR_LDFLAGS_openssl -TOR_OPENSSL_LIBS -TOR_CPPFLAGS_zlib -TOR_LDFLAGS_zlib -LOGFACILITY -CONFDIR -BINDIR -LOCALSTATEDIR +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS LIBOBJS -LTLIBOBJS' +LOCALSTATEDIR +BINDIR +CONFDIR +LOGFACILITY +TOR_ZLIB_LIBS +TOR_LDFLAGS_zlib +TOR_CPPFLAGS_zlib +TOR_OPENSSL_LIBS +TOR_LDFLAGS_openssl +TOR_CPPFLAGS_openssl +TOR_LIBEVENT_LIBS +USE_EXTERNAL_EVDNS_FALSE +USE_EXTERNAL_EVDNS_TRUE +TOR_LDFLAGS_libevent +TOR_CPPFLAGS_libevent +TOR_LIB_GDI +TOR_LIB_WS32 +EGREP +GREP +BUILD_NT_SERVICES_FALSE +BUILD_NT_SERVICES_TRUE +TORGROUP +TORUSER +OPENSSL +SHA1SUM +USE_ASCIIDOC_FALSE +USE_ASCIIDOC_TRUE +A2X +ASCIIDOC +SED +RANLIB +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AR +USE_OPENBSD_MALLOC_FALSE +USE_OPENBSD_MALLOC_TRUE +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_buf_freelists +enable_openbsd_malloc +enable_instrument_downloads +enable_static_openssl +enable_static_libevent +enable_static_zlib +enable_transparent +enable_asciidoc +enable_threads +enable_gcc_warnings +enable_gcc_warnings_advisory +enable_gcc_hardening +enable_linker_hardening +enable_local_appdata +enable_dependency_tracking +with_tor_user +with_tor_group +with_libevent_dir +with_ssl_dir +with_openssl_dir +with_zlib_dir +enable_largefile +with_dmalloc +with_tcmalloc +with_syslog_facility +' ac_precious_vars='build_alias host_alias target_alias @@ -736,6 +765,8 @@ # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -791,8 +822,9 @@ fi case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -834,13 +866,20 @@ datarootdir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=no ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; @@ -853,13 +892,20 @@ dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` - eval enable_$ac_feature=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -1050,22 +1096,36 @@ ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=\$ac_optarg ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/[-.]/_/g'` - eval with_$ac_package=no ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -1085,26 +1145,26 @@ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac @@ -1112,23 +1172,36 @@ if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "missing argument to $ac_option" fi -# Be sure to have absolute directory names. +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1142,8 +1215,8 @@ if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1158,23 +1231,21 @@ ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - { echo "$as_me: error: Working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$0" || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X"$0" | + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1201,13 +1272,11 @@ fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1247,7 +1316,7 @@ --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files @@ -1255,9 +1324,9 @@ Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -1267,25 +1336,25 @@ For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -1306,10 +1375,9 @@ cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-debug compile with debugging info - --enable-iphone compile with iPhone support --disable-buf-freelists disable freelists for buffer RAM --enable-openbsd-malloc Use malloc code from openbsd. Linux only --enable-instrument-downloads @@ -1319,13 +1387,17 @@ --enable-static-libevent Link against a static libevent library. Requires --with-libevent-dir + --enable-static-zlib Link against a static zlib library. Requires + --with-zlib-dir --disable-transparent disable transparent proxy support + --disable-asciidoc don't use asciidoc (disables building of manpages) --disable-threads disable multi-threading support - --enable-geoip-stats enable code for directories to collect per-country - statistics --enable-gcc-warnings enable verbose warnings --enable-gcc-warnings-advisory enable verbose warnings, excluding -Werror + --enable-gcc-hardening enable compiler security checks + --enable-linker-hardening + enable linker security fixups --enable-local-appdata default to host local application data paths on Windows --disable-dependency-tracking speeds up one-time build @@ -1351,13 +1423,14 @@ LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to the package provider. _ACEOF ac_status=$? fi @@ -1365,15 +1438,17 @@ if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1409,7 +1484,7 @@ echo && $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1419,365 +1494,1054 @@ if $ac_init_version; then cat <<\_ACEOF configure -generated by GNU Autoconf 2.61 +generated by GNU Autoconf 2.68 -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was - $ $0 $@ - -_ACEOF -exec 5>>config.log +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () { -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +} # ac_fn_c_try_compile -_ASUNAME +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done -IFS=$as_save_IFS + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval -} >&5 +} # ac_fn_c_try_cpp -cat >&5 <<_ACEOF +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval -## ----------- ## -## Core tests. ## -## ----------- ## +} # ac_fn_c_try_run +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno +} # ac_fn_c_check_header_compile -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo +} # ac_fn_c_try_link - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 - if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ - if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal -done -ac_signal=0 +#ifdef __STDC__ +# include +#else +# include +#endif -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h +#undef $2 -# Predefined preprocessor variables. +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" +int +main () +{ +return $2 (); + ; + return 0; +} _ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno +} # ac_fn_c_check_func -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> _ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - +} # ac_fn_c_check_header_mongrel -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : - -# Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - set x "$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - set x "$prefix/share/config.site" "$prefix/etc/config.site" else - set x "$ac_default_prefix/share/config.site" \ - "$ac_default_prefix/etc/config.site" + eval "$3=yes" fi -shift -for ac_site_file -do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno +} # ac_fn_c_check_type +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno +} # ac_fn_c_check_member +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno +} # ac_fn_c_check_decl +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu +It was created by $as_me, which was +generated by GNU Autoconf 2.68. Invocation command line was + $ $0 $@ -am__api_version='1.10' +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do @@ -1796,9 +2560,7 @@ fi done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 -echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -1823,22 +2585,23 @@ # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1856,17 +2619,29 @@ # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + + done IFS=$as_save_IFS +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then @@ -1879,8 +2654,8 @@ INSTALL=$ac_install_sh fi fi -{ echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1890,21 +2665,34 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -1914,11 +2702,8 @@ # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -1927,52 +2712,162 @@ # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm -f conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 -echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do + for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( @@ -1984,11 +2879,12 @@ esac done done -done + done IFS=$as_save_IFS fi + test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else @@ -1996,12 +2892,11 @@ # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. - test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi -{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5 -echo "${ECHO_T}$MKDIR_P" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in @@ -2013,10 +2908,10 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -2026,43 +2921,44 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - { echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi test -n "$AWK" && break done -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; @@ -2072,12 +2968,12 @@ rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2096,9 +2992,7 @@ am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi @@ -2114,7 +3008,7 @@ # Define the identity of the package. PACKAGE=tor - VERSION=0.2.1.30 + VERSION=0.2.2.35 cat >>confdefs.h <<_ACEOF @@ -2142,112 +3036,6 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - STRIP=$ac_ct_STRIP - fi -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. @@ -2265,35 +3053,27 @@ # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 -echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} - { (exit 1); exit 1; }; } - -{ echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6; } -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 -echo "$as_me: error: invalid value of canonical build" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' @@ -2309,28 +3089,24 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6; } -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 -echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; -*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 -echo "$as_me: error: invalid value of canonical host" >&2;} - { (exit 1); exit 1; }; };; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' @@ -2357,57 +3133,41 @@ # the += operator on it in src/or/Makefile.am CPPFLAGS="$CPPFLAGS -I\${top_srcdir}/src/common" -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then - enableval=$enable_debug; if test x$enableval = xyes; then - CFLAGS="$CFLAGS -g" -fi -fi - - -#XXXX ideally, we should make this into a no-op, and detect whether we're -#compiling for the iphone by using $target. -# Check whether --enable-iphone was given. -if test "${enable_iphone+set}" = set; then - enableval=$enable_iphone; if test x$enableval = xyes ; then - tor_cv_iphone=true - CFLAGS="$CFLAGS -D__DARWIN_UNIX03 -DIPHONE" - fi -fi - - #XXXX020 We should make these enabled or not, before 0.2.0.x-final # Check whether --enable-buf-freelists was given. -if test "${enable_buf_freelists+set}" = set; then +if test "${enable_buf_freelists+set}" = set; then : enableval=$enable_buf_freelists; fi # Check whether --enable-openbsd-malloc was given. -if test "${enable_openbsd_malloc+set}" = set; then +if test "${enable_openbsd_malloc+set}" = set; then : enableval=$enable_openbsd_malloc; fi # Check whether --enable-instrument-downloads was given. -if test "${enable_instrument_downloads+set}" = set; then +if test "${enable_instrument_downloads+set}" = set; then : enableval=$enable_instrument_downloads; fi # Check whether --enable-static-openssl was given. -if test "${enable_static_openssl+set}" = set; then +if test "${enable_static_openssl+set}" = set; then : enableval=$enable_static_openssl; fi # Check whether --enable-static-libevent was given. -if test "${enable_static_libevent+set}" = set; then +if test "${enable_static_libevent+set}" = set; then : enableval=$enable_static_libevent; fi +# Check whether --enable-static-zlib was given. +if test "${enable_static_zlib+set}" = set; then : + enableval=$enable_static_zlib; +fi + if test x$enable_buf_freelists != xno; then -cat >>confdefs.h <<\_ACEOF -#define ENABLE_BUF_FREELISTS 1 -_ACEOF +$as_echo "#define ENABLE_BUF_FREELISTS 1" >>confdefs.h fi if test x$enable_openbsd_malloc = xyes; then @@ -2420,28 +3180,37 @@ if test x$enable_instrument_downloads = xyes; then -cat >>confdefs.h <<\_ACEOF -#define INSTRUMENT_DOWNLOADS 1 -_ACEOF +$as_echo "#define INSTRUMENT_DOWNLOADS 1" >>confdefs.h fi # Check whether --enable-transparent was given. -if test "${enable_transparent+set}" = set; then +if test "${enable_transparent+set}" = set; then : enableval=$enable_transparent; case "${enableval}" in yes) transparent=true ;; no) transparent=false ;; - *) { { echo "$as_me:$LINENO: error: bad value for --enable-transparent" >&5 -echo "$as_me: error: bad value for --enable-transparent" >&2;} - { (exit 1); exit 1; }; } ;; + *) as_fn_error $? "bad value for --enable-transparent" "$LINENO" 5 ;; esac else transparent=true fi +# Check whether --enable-asciidoc was given. +if test "${enable_asciidoc+set}" = set; then : + enableval=$enable_asciidoc; case "${enableval}" in + yes) asciidoc=true ;; + no) asciidoc=false ;; + *) as_fn_error $? "bad value for --disable-asciidoc" "$LINENO" 5 ;; + esac +else + asciidoc=true +fi + + + # Check whether --enable-threads was given. -if test "${enable_threads+set}" = set; then +if test "${enable_threads+set}" = set; then : enableval=$enable_threads; fi @@ -2450,9 +3219,9 @@ case $host in *-*-solaris* ) # Don't try multithreading on solaris -- cpuworkers seem to lock. - { echo "$as_me:$LINENO: You are running Solaris; Sometimes threading makes + { $as_echo "$as_me:${as_lineno-$LINENO}: You are running Solaris; Sometimes threading makes cpu workers lock up here, so I will disable threads." >&5 -echo "$as_me: You are running Solaris; Sometimes threading makes +$as_echo "$as_me: You are running Solaris; Sometimes threading makes cpu workers lock up here, so I will disable threads." >&6;} enable_threads="no";; *) @@ -2462,197 +3231,288 @@ if test "$enable_threads" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define ENABLE_THREADS 1 -_ACEOF +$as_echo "#define ENABLE_THREADS 1" >>confdefs.h fi case $host in *-*-solaris* ) -cat >>confdefs.h <<\_ACEOF -#define _REENTRANT 1 -_ACEOF +$as_echo "#define _REENTRANT 1" >>confdefs.h ;; esac -# Check whether --enable-geoip-stats was given. -if test "${enable_geoip_stats+set}" = set; then - enableval=$enable_geoip_stats; +# Check whether --enable-gcc-warnings was given. +if test "${enable_gcc_warnings+set}" = set; then : + enableval=$enable_gcc_warnings; fi +# Check whether --enable-gcc-warnings-advisory was given. +if test "${enable_gcc_warnings_advisory+set}" = set; then : + enableval=$enable_gcc_warnings_advisory; +fi -if test "$enable_geoip_stats" = "yes"; then - -cat >>confdefs.h <<\_ACEOF -#define ENABLE_GEOIP_STATS 1 -_ACEOF +# Check whether --enable-gcc-hardening was given. +if test "${enable_gcc_hardening+set}" = set; then : + enableval=$enable_gcc_hardening; if test x$enableval = xyes; then + CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2 -fstack-protector-all" + CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector" + CFLAGS="$CFLAGS --param ssp-buffer-size=1" + LDFLAGS="$LDFLAGS -pie" fi - -# Check whether --enable-gcc-warnings was given. -if test "${enable_gcc_warnings+set}" = set; then - enableval=$enable_gcc_warnings; fi -# Check whether --enable-gcc-warnings-advisory was given. -if test "${enable_gcc_warnings_advisory+set}" = set; then - enableval=$enable_gcc_warnings_advisory; + +# Check whether --enable-linker-hardening was given. +if test "${enable_linker_hardening+set}" = set; then : + enableval=$enable_linker_hardening; if test x$enableval = xyes; then + LDFLAGS="$LDFLAGS -z relro -z now" +fi fi # Check whether --enable-local-appdata was given. -if test "${enable_local_appdata+set}" = set; then +if test "${enable_local_appdata+set}" = set; then : enableval=$enable_local_appdata; fi if test "$enable_local_appdata" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define ENABLE_LOCAL_APPDATA 1 -_ACEOF +$as_echo "#define ENABLE_LOCAL_APPDATA 1" >>confdefs.h fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - if test "x$ac_ct_CC" = x; then - CC="" + if test "x$ac_ct_AR" = x; then + AR="ar" else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - CC=$ac_ct_CC + AR=$ac_ct_AR fi else - CC="$ac_cv_prog_CC" + AR="$ac_cv_prog_AR" fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2661,10 +3521,10 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2675,18 +3535,18 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then @@ -2705,11 +3565,11 @@ fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2720,10 +3580,10 @@ do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2733,25 +3593,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2764,10 +3624,10 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2777,25 +3637,25 @@ do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do + for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -2807,12 +3667,8 @@ else case $cross_compiling:$ac_tool_warned in yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2822,51 +3678,37 @@ fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO: checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compiler -V >&5") 2>&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2878,42 +3720,38 @@ } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# -# List of possible output files, starting from the most likely. -# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) -# only as a last resort. b.out is created by i960 compilers. -ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' -# -# The IRIX 6 linker writes into existing files which may not be -# executable, retaining their permissions. Remove them first so a -# subsequent execution test works. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + ac_rmfiles= for ac_file in $ac_files do case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles -if { (ac_try="$ac_link_default" +if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -2923,14 +3761,14 @@ do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -2949,78 +3787,41 @@ else ac_file='' fi - -{ echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6; } -if test -z "$ac_file"; then - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } -fi - +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -{ echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } -{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6; } - -{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } -if { (ac_try="$ac_link" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3028,37 +3829,90 @@ for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -rm -f conftest$ac_cv_exeext -{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3070,51 +3924,46 @@ } _ACEOF rm -f conftest.o conftest.obj -if { (ac_try="$ac_compile" +if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3128,54 +3977,34 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_compiler_gnu=no + ac_compiler_gnu=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3186,34 +4015,11 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3224,35 +4030,12 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_compile "$LINENO"; then : - ac_c_werror_flag=$ac_save_c_werror_flag +else + ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3263,42 +4046,18 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -3314,18 +4073,14 @@ CFLAGS= fi fi -{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 -echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3382,31 +4137,9 @@ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then + if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done @@ -3417,17 +4150,19 @@ # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) - { echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; xno) - { echo "$as_me:$LINENO: result: unsupported" >&5 -echo "${ECHO_T}unsupported" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" - { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : +fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3442,44 +4177,44 @@ am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -{ echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then +if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi @@ -3499,10 +4234,10 @@ depcc="$CC" am_compiler_list= -{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3527,6 +4262,11 @@ if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3544,7 +4284,17 @@ done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3554,19 +4304,23 @@ break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3590,8 +4344,8 @@ fi fi -{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if @@ -3610,15 +4364,15 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" @@ -3632,11 +4386,7 @@ # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -3645,13825 +4395,3717 @@ #endif Syntax error _ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; } -set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } - SET_MAKE= -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6; } -else - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&5 -echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools -whose name does not start with the host triplet. If you think this -configuration is useful to you, please write to autoconf@gnu.org." >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - -TORUSER=_tor - -# Check whether --with-tor-user was given. -if test "${with_tor_user+set}" = set; then - withval=$with_tor_user; - TORUSER=$withval - - -fi - - - -TORGROUP=_tor - -# Check whether --with-tor-group was given. -if test "${with_tor_group+set}" = set; then - withval=$with_tor_group; - TORGROUP=$withval - - -fi - - - - -{ echo "$as_me:$LINENO: checking for win32" >&5 -echo $ECHO_N "checking for win32... $ECHO_C" >&6; } - -if test "$cross_compiling" = yes; then - bwin32=cross; { echo "$as_me:$LINENO: result: cross" >&5 -echo "${ECHO_T}cross" >&6; } - -else - cat >conftest.$ac_ext <<_ACEOF - -int main(int c, char **v) { -#ifdef WIN32 -#if WIN32 - return 0; -#else - return 1; -#endif -#else - return 2; -#endif -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - bwin32=true; { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -bwin32=false; { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - -if test "$bwin32" = cross; then -{ echo "$as_me:$LINENO: checking for win32 (cross)" >&5 -echo $ECHO_N "checking for win32 (cross)... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF - -#ifdef WIN32 -int main(int c, char **v) {return 0;} -#else -#error -int main(int c, char **v) {return x(y);} -#endif - -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - bwin32=true; { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - bwin32=false; { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -if test "$bwin32" = true; then - -cat >>confdefs.h <<\_ACEOF -#define MS_WINDOWS 1 -_ACEOF - -fi - if test x$bwin32 = xtrue; then - BUILD_NT_SERVICES_TRUE= - BUILD_NT_SERVICES_FALSE='#' -else - BUILD_NT_SERVICES_TRUE='#' - BUILD_NT_SERVICES_FALSE= -fi - - -{ echo "$as_me:$LINENO: checking for MIPSpro compiler" >&5 -echo $ECHO_N "checking for MIPSpro compiler... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - -#if (defined(__sgi) && defined(_COMPILER_VERSION)) -#error - return x(y); -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - bmipspro=false; { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - bmipspro=true; { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test "$bmipspro" = true; then - CFLAGS="$CFLAGS -c99" -fi - - -{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 -echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Extract the first word of "grep ggrep" to use in msg output -if test -z "$GREP"; then -set dummy grep ggrep; ac_prog_name=$2 -if test "${ac_cv_path_GREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_path_GREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue - # Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - - $ac_path_GREP_found && break 3 - done -done - -done -IFS=$as_save_IFS - - -fi - -GREP="$ac_cv_path_GREP" -if test -z "$GREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - -else - ac_cv_path_GREP=$GREP -fi - - -fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -echo "${ECHO_T}$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - # Extract the first word of "egrep" to use in msg output -if test -z "$EGREP"; then -set dummy egrep; ac_prog_name=$2 -if test "${ac_cv_path_EGREP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_path_EGREP_found=false -# Loop through the user's path and test for each of PROGNAME-LIST -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue - # Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - ac_count=`expr $ac_count + 1` - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - - $ac_path_EGREP_found && break 3 - done -done - -done -IFS=$as_save_IFS - - -fi - -EGREP="$ac_cv_path_EGREP" -if test -z "$EGREP"; then - { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } -fi - -else - ac_cv_path_EGREP=$EGREP -fi - - - fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_header_stdc=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then - : -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -{ echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN && defined LITTLE_ENDIAN \ - && BYTE_ORDER && BIG_ENDIAN && LITTLE_ENDIAN) - bogus endian macros -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include - -int -main () -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_c_bigendian=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_c_bigendian=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } -int -main () -{ - _ascii (); _ebcdic (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then - ac_cv_c_bigendian=yes -fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_bigendian=no -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6; } -case $ac_cv_c_bigendian in - yes) - -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac - - -{ echo "$as_me:$LINENO: checking for library containing socket" >&5 -echo $ECHO_N "checking for library containing socket... $ECHO_C" >&6; } -if test "${ac_cv_search_socket+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char socket (); -int -main () -{ -return socket (); - ; - return 0; -} -_ACEOF -for ac_lib in '' socket; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_socket=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_socket+set}" = set; then - break -fi -done -if test "${ac_cv_search_socket+set}" = set; then - : -else - ac_cv_search_socket=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_socket" >&5 -echo "${ECHO_T}$ac_cv_search_socket" >&6; } -ac_res=$ac_cv_search_socket -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -{ echo "$as_me:$LINENO: checking for library containing gethostbyname" >&5 -echo $ECHO_N "checking for library containing gethostbyname... $ECHO_C" >&6; } -if test "${ac_cv_search_gethostbyname+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -for ac_lib in '' nsl; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_gethostbyname=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_gethostbyname+set}" = set; then - break -fi -done -if test "${ac_cv_search_gethostbyname+set}" = set; then - : -else - ac_cv_search_gethostbyname=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_gethostbyname" >&5 -echo "${ECHO_T}$ac_cv_search_gethostbyname" >&6; } -ac_res=$ac_cv_search_gethostbyname -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -{ echo "$as_me:$LINENO: checking for library containing dlopen" >&5 -echo $ECHO_N "checking for library containing dlopen... $ECHO_C" >&6; } -if test "${ac_cv_search_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -for ac_lib in '' dl; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_dlopen=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_dlopen+set}" = set; then - break -fi -done -if test "${ac_cv_search_dlopen+set}" = set; then - : -else - ac_cv_search_dlopen=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_dlopen" >&5 -echo "${ECHO_T}$ac_cv_search_dlopen" >&6; } -ac_res=$ac_cv_search_dlopen -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -{ echo "$as_me:$LINENO: checking for library containing inet_aton" >&5 -echo $ECHO_N "checking for library containing inet_aton... $ECHO_C" >&6; } -if test "${ac_cv_search_inet_aton+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char inet_aton (); -int -main () -{ -return inet_aton (); - ; - return 0; -} -_ACEOF -for ac_lib in '' resolv; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_inet_aton=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_inet_aton+set}" = set; then - break -fi -done -if test "${ac_cv_search_inet_aton+set}" = set; then - : -else - ac_cv_search_inet_aton=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_inet_aton" >&5 -echo "${ECHO_T}$ac_cv_search_inet_aton" >&6; } -ac_res=$ac_cv_search_inet_aton -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - - -if test "$enable_threads" = "yes"; then - { echo "$as_me:$LINENO: checking for library containing pthread_create" >&5 -echo $ECHO_N "checking for library containing pthread_create... $ECHO_C" >&6; } -if test "${ac_cv_search_pthread_create+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_create (); -int -main () -{ -return pthread_create (); - ; - return 0; -} -_ACEOF -for ac_lib in '' pthread; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_pthread_create=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_pthread_create+set}" = set; then - break -fi -done -if test "${ac_cv_search_pthread_create+set}" = set; then - : -else - ac_cv_search_pthread_create=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_pthread_create" >&5 -echo "${ECHO_T}$ac_cv_search_pthread_create" >&6; } -ac_res=$ac_cv_search_pthread_create -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - - { echo "$as_me:$LINENO: checking for library containing pthread_detach" >&5 -echo $ECHO_N "checking for library containing pthread_detach... $ECHO_C" >&6; } -if test "${ac_cv_search_pthread_detach+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char pthread_detach (); -int -main () -{ -return pthread_detach (); - ; - return 0; -} -_ACEOF -for ac_lib in '' pthread; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_search_pthread_detach=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_pthread_detach+set}" = set; then - break -fi -done -if test "${ac_cv_search_pthread_detach+set}" = set; then - : -else - ac_cv_search_pthread_detach=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_pthread_detach" >&5 -echo "${ECHO_T}$ac_cv_search_pthread_detach" >&6; } -ac_res=$ac_cv_search_pthread_detach -if test "$ac_res" != no; then - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -fi - -fi - - - - - - - - - - - - - - - - - - - - - -for ac_func in gettimeofday ftime socketpair uname inet_aton strptime getrlimit strlcat strlcpy strtoull getaddrinfo localtime_r gmtime_r memmem strtok_r writev readv flock prctl -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - -using_custom_malloc=no -if test x$enable_openbsd_malloc = xyes ; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MALLOC_GOOD_SIZE 1 -_ACEOF - - using_custom_malloc=yes -fi -if test x$tcmalloc = xyes ; then - using_custom_malloc=yes -fi -if test $using_custom_malloc = no ; then - - - -for ac_func in mallinfo malloc_good_size malloc_usable_size -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -fi - -if test "$enable_threads" = "yes"; then - -for ac_header in pthread.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_func in pthread_create -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -fi - - -if test "$bwin32" = true; then - TOR_LIB_WS32=-lws2_32 - # Some of the cargo-cults recommend -lwsock32 as well, but I don't - # think it's actually necessary. - TOR_LIB_GDI=-lgdi32 -else - TOR_LIB_WS32= - TOR_LIB_GDI= -fi - - - - -for ac_header in sys/types.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -{ echo "$as_me:$LINENO: checking for u_int64_t" >&5 -echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6; } -if test "${ac_cv_type_u_int64_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef u_int64_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_u_int64_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_u_int64_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5 -echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6; } -if test $ac_cv_type_u_int64_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define u_int64_t unsigned long long -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking for u_int32_t" >&5 -echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6; } -if test "${ac_cv_type_u_int32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef u_int32_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_u_int32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_u_int32_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5 -echo "${ECHO_T}$ac_cv_type_u_int32_t" >&6; } -if test $ac_cv_type_u_int32_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define u_int32_t unsigned long -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking for u_int16_t" >&5 -echo $ECHO_N "checking for u_int16_t... $ECHO_C" >&6; } -if test "${ac_cv_type_u_int16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef u_int16_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_u_int16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_u_int16_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_u_int16_t" >&5 -echo "${ECHO_T}$ac_cv_type_u_int16_t" >&6; } -if test $ac_cv_type_u_int16_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define u_int16_t unsigned short -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking for u_int8_t" >&5 -echo $ECHO_N "checking for u_int8_t... $ECHO_C" >&6; } -if test "${ac_cv_type_u_int8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef u_int8_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_u_int8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_u_int8_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_u_int8_t" >&5 -echo "${ECHO_T}$ac_cv_type_u_int8_t" >&6; } -if test $ac_cv_type_u_int8_t = yes; then - : -else - -cat >>confdefs.h <<_ACEOF -#define u_int8_t unsigned char -_ACEOF - -fi - - -tor_libevent_pkg_redhat="libevent" -tor_libevent_pkg_debian="libevent-dev" -tor_libevent_devpkg_redhat="libevent-devel" -tor_libevent_devpkg_debian="libevent-dev" - - -trylibeventdir="" - -# Check whether --with-libevent-dir was given. -if test "${with_libevent_dir+set}" = set; then - withval=$with_libevent_dir; - if test x$withval != xno ; then - trylibeventdir="$withval" - fi - -fi - -if test "x$trylibeventdir" = x && test "x$ALT_libevent_WITHVAL" != x ; then - trylibeventdir="$ALT_libevent_WITHVAL" -fi - -tor_saved_LIBS="$LIBS" -tor_saved_LDFLAGS="$LDFLAGS" -tor_saved_CPPFLAGS="$CPPFLAGS" -{ echo "$as_me:$LINENO: checking for libevent directory" >&5 -echo $ECHO_N "checking for libevent directory... $ECHO_C" >&6; } -if test "${tor_cv_library_libevent_dir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - tor_libevent_dir_found=no - tor_libevent_any_linkable=no - - for tor_trydir in "$trylibeventdir" "(system)" "$prefix" /usr/local /usr/pkg /opt/libevent; do - LDFLAGS="$tor_saved_LDFLAGS" - LIBS="$tor_saved_LIBS -levent $TOR_LIB_WS32" - CPPFLAGS="$tor_saved_CPPFLAGS" - - if test -z "$tor_trydir" ; then - continue; - fi - - # Skip the directory if it isn't there. - if test ! -d "$tor_trydir" && test "$tor_trydir" != "(system)"; then - continue; - fi - - # If this isn't blank, try adding the directory (or appropriate - # include/libs subdirectories) to the command line. - if test "$tor_trydir" != "(system)"; then - - if test -d "$tor_trydir/lib"; then - LDFLAGS="-L$tor_trydir/lib $LDFLAGS" - else - LDFLAGS="-L$tor_trydir $LDFLAGS" - fi - if test -d "$tor_trydir/include"; then - CPPFLAGS="-I$tor_trydir/include $CPPFLAGS" - else - CPPFLAGS="-I$tor_trydir $CPPFLAGS" - fi - - fi - - # Can we link against (but not necessarily run, or find the headers for) - # the binary? - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#ifdef WIN32 -#include -#endif -void exit(int); void *event_init(void); -int -main () -{ - -#ifdef WIN32 -{WSADATA d; WSAStartup(0x101,&d); } -#endif -event_init(); exit(0); - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - linkable=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - linkable=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - - if test "$linkable" = yes; then - tor_libevent_any_linkable=yes - # Okay, we can link against it. Can we find the headers? - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#ifdef WIN32 -#include -#endif -#include -#include -#include -#include -int -main () -{ - -#ifdef WIN32 -{WSADATA d; WSAStartup(0x101,&d); } -#endif -event_init(); exit(0); - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - buildable=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - buildable=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$buildable" = yes; then - tor_cv_library_libevent_dir=$tor_trydir - tor_libevent_dir_found=yes - break - fi - fi - done - - if test "$tor_libevent_dir_found" = no; then - if test "$tor_libevent_any_linkable" = no ; then - { echo "$as_me:$LINENO: WARNING: Could not find a linkable libevent. If you have it installed somewhere unusual, you can specify an explicit path using --with-libevent-dir" >&5 -echo "$as_me: WARNING: Could not find a linkable libevent. If you have it installed somewhere unusual, you can specify an explicit path using --with-libevent-dir" >&2;} - -h="" -if test xpkg = xdevpkg; then - h=" headers for" -fi -if test -f /etc/debian_version && test x"$tor_libevent_pkg_debian" != x; then - { echo "$as_me:$LINENO: WARNING: On Debian, you can install$h libevent using \"apt-get install $tor_libevent_pkg_debian\"" >&5 -echo "$as_me: WARNING: On Debian, you can install$h libevent using \"apt-get install $tor_libevent_pkg_debian\"" >&2;} - if test x"$tor_libevent_pkg_debian" != x"$tor_libevent_devpkg_debian"; then - { echo "$as_me:$LINENO: WARNING: You will probably need $tor_libevent_devpkg_debian too." >&5 -echo "$as_me: WARNING: You will probably need $tor_libevent_devpkg_debian too." >&2;} - fi -fi -if test -f /etc/fedora-release && test x"$tor_libevent_pkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On Fedora Core, you can install$h libevent using \"yum install $tor_libevent_pkg_redhat\"" >&5 -echo "$as_me: WARNING: On Fedora Core, you can install$h libevent using \"yum install $tor_libevent_pkg_redhat\"" >&2;} - if test x"$tor_libevent_pkg_redhat" != x"$tor_libevent_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&2;} - fi -else - if test -f /etc/redhat-release && test x"$tor_libevent_pkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On most Redhat-based systems, you can get$h libevent by installing the $tor_libevent_pkg_redhat\" RPM package" >&5 -echo "$as_me: WARNING: On most Redhat-based systems, you can get$h libevent by installing the $tor_libevent_pkg_redhat\" RPM package" >&2;} - if test x"$tor_libevent_pkg_redhat" != x"$tor_libevent_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&2;} - fi - fi -fi - - { { echo "$as_me:$LINENO: error: Missing libraries; unable to proceed." >&5 -echo "$as_me: error: Missing libraries; unable to proceed." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: WARNING: We found the libraries for libevent, but we could not find the C header files. You may need to install a devel package." >&5 -echo "$as_me: WARNING: We found the libraries for libevent, but we could not find the C header files. You may need to install a devel package." >&2;} - -h="" -if test xdevpkg = xdevpkg; then - h=" headers for" -fi -if test -f /etc/debian_version && test x"$tor_libevent_devpkg_debian" != x; then - { echo "$as_me:$LINENO: WARNING: On Debian, you can install$h libevent using \"apt-get install $tor_libevent_devpkg_debian\"" >&5 -echo "$as_me: WARNING: On Debian, you can install$h libevent using \"apt-get install $tor_libevent_devpkg_debian\"" >&2;} - if test x"$tor_libevent_devpkg_debian" != x"$tor_libevent_devpkg_debian"; then - { echo "$as_me:$LINENO: WARNING: You will probably need $tor_libevent_devpkg_debian too." >&5 -echo "$as_me: WARNING: You will probably need $tor_libevent_devpkg_debian too." >&2;} - fi -fi -if test -f /etc/fedora-release && test x"$tor_libevent_devpkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On Fedora Core, you can install$h libevent using \"yum install $tor_libevent_devpkg_redhat\"" >&5 -echo "$as_me: WARNING: On Fedora Core, you can install$h libevent using \"yum install $tor_libevent_devpkg_redhat\"" >&2;} - if test x"$tor_libevent_devpkg_redhat" != x"$tor_libevent_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&2;} - fi -else - if test -f /etc/redhat-release && test x"$tor_libevent_devpkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On most Redhat-based systems, you can get$h libevent by installing the $tor_libevent_devpkg_redhat\" RPM package" >&5 -echo "$as_me: WARNING: On most Redhat-based systems, you can get$h libevent by installing the $tor_libevent_devpkg_redhat\" RPM package" >&2;} - if test x"$tor_libevent_devpkg_redhat" != x"$tor_libevent_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&2;} - fi - fi -fi - - { { echo "$as_me:$LINENO: error: Missing headers; unable to proceed." >&5 -echo "$as_me: error: Missing headers; unable to proceed." >&2;} - { (exit 1); exit 1; }; } - fi - fi - - LDFLAGS="$tor_saved_LDFLAGS" - LIBS="$tor_saved_LIBS" - CPPFLAGS="$tor_saved_CPPFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $tor_cv_library_libevent_dir" >&5 -echo "${ECHO_T}$tor_cv_library_libevent_dir" >&6; } -LIBS="$LIBS -levent $TOR_LIB_WS32" -if test "$tor_cv_library_libevent_dir" != "(system)"; then - - if test -d "$tor_cv_library_libevent_dir/lib"; then - LDFLAGS="-L$tor_cv_library_libevent_dir/lib $LDFLAGS" - else - LDFLAGS="-L$tor_cv_library_libevent_dir $LDFLAGS" - fi - if test -d "$tor_cv_library_libevent_dir/include"; then - CPPFLAGS="-I$tor_cv_library_libevent_dir/include $CPPFLAGS" - else - CPPFLAGS="-I$tor_cv_library_libevent_dir $CPPFLAGS" - fi - -fi - - - if test x$tor_cv_library_libevent_dir = "x(system)"; then - TOR_LDFLAGS_libevent="" - TOR_CPPFLAGS_libevent="" - else - if test -d "$tor_cv_library_libevent_dir/lib"; then - TOR_LDFLAGS_libevent="-L$tor_cv_library_libevent_dir/lib" - TOR_LIBDIR_libevent="$tor_cv_library_libevent_dir/lib" - else - TOR_LDFLAGS_libevent="-L$tor_cv_library_libevent_dir" - TOR_LIBDIR_libevent="$tor_cv_library_libevent_dir" - fi - if test -d "$tor_cv_library_libevent_dir/include"; then - TOR_CPPFLAGS_libevent="-I$tor_cv_library_libevent_dir/include" - else - TOR_CPPFLAGS_libevent="-I$tor_cv_library_libevent_dir" - fi - fi - - - - -if test "$cross_compiling" != yes; then - { echo "$as_me:$LINENO: checking whether we need extra options to link libevent" >&5 -echo $ECHO_N "checking whether we need extra options to link libevent... $ECHO_C" >&6; } -if test "${tor_cv_library_libevent_linker_option+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - orig_LDFLAGS="$LDFLAGS" - runs=no - linked_with=nothing - if test -d "$tor_cv_library_libevent_dir/lib"; then - tor_trydir="$tor_cv_library_libevent_dir/lib" - else - tor_trydir="$tor_cv_library_libevent_dir" - fi - for tor_tryextra in "(none)" "-Wl,-R$tor_trydir" "-R$tor_trydir" \ - "-Wl,-rpath,$tor_trydir" ; do - if test "$tor_tryextra" = "(none)"; then - LDFLAGS="$orig_LDFLAGS" - else - LDFLAGS="$tor_tryextra $orig_LDFLAGS" - fi - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#ifdef WIN32 -#include -#endif -void exit(int); void *event_init(void); -int -main () -{ - -#ifdef WIN32 -{WSADATA d; WSAStartup(0x101,&d); } -#endif -event_init(); exit(0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - runnable=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -runnable=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - if test "$runnable" = yes; then - tor_cv_library_libevent_linker_option=$tor_tryextra - break - fi - done - - if test "$runnable" = no; then - { { echo "$as_me:$LINENO: error: Found linkable libevent in $tor_cv_library_libevent_dir, but it does not seem to run, even with -R. Maybe specify another using --with-libevent-dir}" >&5 -echo "$as_me: error: Found linkable libevent in $tor_cv_library_libevent_dir, but it does not seem to run, even with -R. Maybe specify another using --with-libevent-dir}" >&2;} - { (exit 1); exit 1; }; } - fi - LDFLAGS="$orig_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $tor_cv_library_libevent_linker_option" >&5 -echo "${ECHO_T}$tor_cv_library_libevent_linker_option" >&6; } - if test "$tor_cv_library_libevent_linker_option" != "(none)" ; then - TOR_LDFLAGS_libevent="$TOR_LDFLAGS_libevent $tor_cv_library_libevent_linker_option" - fi -fi # cross-compile - -LIBS="$tor_saved_LIBS" -LDFLAGS="$tor_saved_LDFLAGS" -CPPFLAGS="$tor_saved_CPPFLAGS" - - - -save_LIBS="$LIBS" -save_LDFLAGS="$LDFLAGS" -save_CPPFLAGS="$CPPFLAGS" -LIBS="-levent $TOR_LIB_WS32 $LIBS" -LDFLAGS="$TOR_LDFLAGS_libevent $LDFLAGS" -CPPFLAGS="$TOR_CPPFLAGS_libevent $CPPFLAGS" - - - -for ac_func in event_get_version event_get_method event_set_log_callback -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -{ echo "$as_me:$LINENO: checking for struct event.min_heap_idx" >&5 -echo $ECHO_N "checking for struct event.min_heap_idx... $ECHO_C" >&6; } -if test "${ac_cv_member_struct_event_min_heap_idx+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - - -int -main () -{ -static struct event ac_aggr; -if (ac_aggr.min_heap_idx) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_event_min_heap_idx=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - - -int -main () -{ -static struct event ac_aggr; -if (sizeof ac_aggr.min_heap_idx) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_event_min_heap_idx=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_member_struct_event_min_heap_idx=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_event_min_heap_idx" >&5 -echo "${ECHO_T}$ac_cv_member_struct_event_min_heap_idx" >&6; } -if test $ac_cv_member_struct_event_min_heap_idx = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_EVENT_MIN_HEAP_IDX 1 -_ACEOF - - -fi - - -LIBS="$save_LIBS" -LDFLAGS="$save_LDFLAGS" -CPPFLAGS="$save_CPPFLAGS" - -if test "$enable_static_libevent" = "yes"; then - if test "$tor_cv_library_libevent_dir" = "(system)"; then - { { echo "$as_me:$LINENO: error: \"You must specify an explicit --with-libevent-dir=x option when using --enable-static-libevent\"" >&5 -echo "$as_me: error: \"You must specify an explicit --with-libevent-dir=x option when using --enable-static-libevent\"" >&2;} - { (exit 1); exit 1; }; } - else - TOR_LIBEVENT_LIBS="$TOR_LIBDIR_libevent/libevent.a" - fi -else - TOR_LIBEVENT_LIBS="-levent" -fi - - - -tor_openssl_pkg_redhat="openssl" -tor_openssl_pkg_debian="libssl" -tor_openssl_devpkg_redhat="openssl-devel" -tor_openssl_devpkg_debian="libssl-dev" - -ALT_openssl_WITHVAL="" - -# Check whether --with-ssl-dir was given. -if test "${with_ssl_dir+set}" = set; then - withval=$with_ssl_dir; - if test "x$withval" != xno && test "x$withval" != "x" ; then - ALT_openssl_WITHVAL="$withval" - fi - -fi - - - -tryopenssldir="" - -# Check whether --with-openssl-dir was given. -if test "${with_openssl_dir+set}" = set; then - withval=$with_openssl_dir; - if test x$withval != xno ; then - tryopenssldir="$withval" - fi - -fi - -if test "x$tryopenssldir" = x && test "x$ALT_openssl_WITHVAL" != x ; then - tryopenssldir="$ALT_openssl_WITHVAL" -fi - -tor_saved_LIBS="$LIBS" -tor_saved_LDFLAGS="$LDFLAGS" -tor_saved_CPPFLAGS="$CPPFLAGS" -{ echo "$as_me:$LINENO: checking for openssl directory" >&5 -echo $ECHO_N "checking for openssl directory... $ECHO_C" >&6; } -if test "${tor_cv_library_openssl_dir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - tor_openssl_dir_found=no - tor_openssl_any_linkable=no - - for tor_trydir in "$tryopenssldir" "(system)" "$prefix" /usr/local /usr/pkg /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /usr/athena /opt/openssl; do - LDFLAGS="$tor_saved_LDFLAGS" - LIBS="$tor_saved_LIBS -lssl -lcrypto $TOR_LIB_GDI" - CPPFLAGS="$tor_saved_CPPFLAGS" - - if test -z "$tor_trydir" ; then - continue; - fi - - # Skip the directory if it isn't there. - if test ! -d "$tor_trydir" && test "$tor_trydir" != "(system)"; then - continue; - fi - - # If this isn't blank, try adding the directory (or appropriate - # include/libs subdirectories) to the command line. - if test "$tor_trydir" != "(system)"; then - - if test -d "$tor_trydir/lib"; then - LDFLAGS="-L$tor_trydir/lib $LDFLAGS" - else - LDFLAGS="-L$tor_trydir $LDFLAGS" - fi - if test -d "$tor_trydir/include"; then - CPPFLAGS="-I$tor_trydir/include $CPPFLAGS" - else - CPPFLAGS="-I$tor_trydir $CPPFLAGS" - fi - - fi - - # Can we link against (but not necessarily run, or find the headers for) - # the binary? - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -void RAND_add(const void *buf, int num, double entropy); -int -main () -{ -RAND_add((void*)0,0,0); exit(0); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - linkable=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - linkable=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - - if test "$linkable" = yes; then - tor_openssl_any_linkable=yes - # Okay, we can link against it. Can we find the headers? - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -RAND_add((void*)0,0,0); exit(0); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - buildable=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - buildable=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$buildable" = yes; then - tor_cv_library_openssl_dir=$tor_trydir - tor_openssl_dir_found=yes - break - fi - fi - done - - if test "$tor_openssl_dir_found" = no; then - if test "$tor_openssl_any_linkable" = no ; then - { echo "$as_me:$LINENO: WARNING: Could not find a linkable openssl. If you have it installed somewhere unusual, you can specify an explicit path using --with-openssl-dir" >&5 -echo "$as_me: WARNING: Could not find a linkable openssl. If you have it installed somewhere unusual, you can specify an explicit path using --with-openssl-dir" >&2;} - -h="" -if test xpkg = xdevpkg; then - h=" headers for" -fi -if test -f /etc/debian_version && test x"$tor_openssl_pkg_debian" != x; then - { echo "$as_me:$LINENO: WARNING: On Debian, you can install$h openssl using \"apt-get install $tor_openssl_pkg_debian\"" >&5 -echo "$as_me: WARNING: On Debian, you can install$h openssl using \"apt-get install $tor_openssl_pkg_debian\"" >&2;} - if test x"$tor_openssl_pkg_debian" != x"$tor_openssl_devpkg_debian"; then - { echo "$as_me:$LINENO: WARNING: You will probably need $tor_openssl_devpkg_debian too." >&5 -echo "$as_me: WARNING: You will probably need $tor_openssl_devpkg_debian too." >&2;} - fi -fi -if test -f /etc/fedora-release && test x"$tor_openssl_pkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On Fedora Core, you can install$h openssl using \"yum install $tor_openssl_pkg_redhat\"" >&5 -echo "$as_me: WARNING: On Fedora Core, you can install$h openssl using \"yum install $tor_openssl_pkg_redhat\"" >&2;} - if test x"$tor_openssl_pkg_redhat" != x"$tor_openssl_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&2;} - fi -else - if test -f /etc/redhat-release && test x"$tor_openssl_pkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On most Redhat-based systems, you can get$h openssl by installing the $tor_openssl_pkg_redhat\" RPM package" >&5 -echo "$as_me: WARNING: On most Redhat-based systems, you can get$h openssl by installing the $tor_openssl_pkg_redhat\" RPM package" >&2;} - if test x"$tor_openssl_pkg_redhat" != x"$tor_openssl_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&2;} - fi - fi -fi - - { { echo "$as_me:$LINENO: error: Missing libraries; unable to proceed." >&5 -echo "$as_me: error: Missing libraries; unable to proceed." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: WARNING: We found the libraries for openssl, but we could not find the C header files. You may need to install a devel package." >&5 -echo "$as_me: WARNING: We found the libraries for openssl, but we could not find the C header files. You may need to install a devel package." >&2;} - -h="" -if test xdevpkg = xdevpkg; then - h=" headers for" -fi -if test -f /etc/debian_version && test x"$tor_openssl_devpkg_debian" != x; then - { echo "$as_me:$LINENO: WARNING: On Debian, you can install$h openssl using \"apt-get install $tor_openssl_devpkg_debian\"" >&5 -echo "$as_me: WARNING: On Debian, you can install$h openssl using \"apt-get install $tor_openssl_devpkg_debian\"" >&2;} - if test x"$tor_openssl_devpkg_debian" != x"$tor_openssl_devpkg_debian"; then - { echo "$as_me:$LINENO: WARNING: You will probably need $tor_openssl_devpkg_debian too." >&5 -echo "$as_me: WARNING: You will probably need $tor_openssl_devpkg_debian too." >&2;} - fi -fi -if test -f /etc/fedora-release && test x"$tor_openssl_devpkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On Fedora Core, you can install$h openssl using \"yum install $tor_openssl_devpkg_redhat\"" >&5 -echo "$as_me: WARNING: On Fedora Core, you can install$h openssl using \"yum install $tor_openssl_devpkg_redhat\"" >&2;} - if test x"$tor_openssl_devpkg_redhat" != x"$tor_openssl_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&2;} - fi -else - if test -f /etc/redhat-release && test x"$tor_openssl_devpkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On most Redhat-based systems, you can get$h openssl by installing the $tor_openssl_devpkg_redhat\" RPM package" >&5 -echo "$as_me: WARNING: On most Redhat-based systems, you can get$h openssl by installing the $tor_openssl_devpkg_redhat\" RPM package" >&2;} - if test x"$tor_openssl_devpkg_redhat" != x"$tor_openssl_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&2;} - fi - fi -fi - - { { echo "$as_me:$LINENO: error: Missing headers; unable to proceed." >&5 -echo "$as_me: error: Missing headers; unable to proceed." >&2;} - { (exit 1); exit 1; }; } - fi - fi - - LDFLAGS="$tor_saved_LDFLAGS" - LIBS="$tor_saved_LIBS" - CPPFLAGS="$tor_saved_CPPFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $tor_cv_library_openssl_dir" >&5 -echo "${ECHO_T}$tor_cv_library_openssl_dir" >&6; } -LIBS="$LIBS -lssl -lcrypto $TOR_LIB_GDI" -if test "$tor_cv_library_openssl_dir" != "(system)"; then - - if test -d "$tor_cv_library_openssl_dir/lib"; then - LDFLAGS="-L$tor_cv_library_openssl_dir/lib $LDFLAGS" - else - LDFLAGS="-L$tor_cv_library_openssl_dir $LDFLAGS" - fi - if test -d "$tor_cv_library_openssl_dir/include"; then - CPPFLAGS="-I$tor_cv_library_openssl_dir/include $CPPFLAGS" - else - CPPFLAGS="-I$tor_cv_library_openssl_dir $CPPFLAGS" - fi - -fi - - - if test x$tor_cv_library_openssl_dir = "x(system)"; then - TOR_LDFLAGS_openssl="" - TOR_CPPFLAGS_openssl="" - else - if test -d "$tor_cv_library_openssl_dir/lib"; then - TOR_LDFLAGS_openssl="-L$tor_cv_library_openssl_dir/lib" - TOR_LIBDIR_openssl="$tor_cv_library_openssl_dir/lib" - else - TOR_LDFLAGS_openssl="-L$tor_cv_library_openssl_dir" - TOR_LIBDIR_openssl="$tor_cv_library_openssl_dir" - fi - if test -d "$tor_cv_library_openssl_dir/include"; then - TOR_CPPFLAGS_openssl="-I$tor_cv_library_openssl_dir/include" - else - TOR_CPPFLAGS_openssl="-I$tor_cv_library_openssl_dir" - fi - fi - - - - -if test "$cross_compiling" != yes; then - { echo "$as_me:$LINENO: checking whether we need extra options to link openssl" >&5 -echo $ECHO_N "checking whether we need extra options to link openssl... $ECHO_C" >&6; } -if test "${tor_cv_library_openssl_linker_option+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - orig_LDFLAGS="$LDFLAGS" - runs=no - linked_with=nothing - if test -d "$tor_cv_library_openssl_dir/lib"; then - tor_trydir="$tor_cv_library_openssl_dir/lib" - else - tor_trydir="$tor_cv_library_openssl_dir" - fi - for tor_tryextra in "(none)" "-Wl,-R$tor_trydir" "-R$tor_trydir" \ - "-Wl,-rpath,$tor_trydir" ; do - if test "$tor_tryextra" = "(none)"; then - LDFLAGS="$orig_LDFLAGS" - else - LDFLAGS="$tor_tryextra $orig_LDFLAGS" - fi - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -void RAND_add(const void *buf, int num, double entropy); -int -main () -{ -RAND_add((void*)0,0,0); exit(0); - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - runnable=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -runnable=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - if test "$runnable" = yes; then - tor_cv_library_openssl_linker_option=$tor_tryextra - break - fi - done - - if test "$runnable" = no; then - { { echo "$as_me:$LINENO: error: Found linkable openssl in $tor_cv_library_openssl_dir, but it does not seem to run, even with -R. Maybe specify another using --with-openssl-dir}" >&5 -echo "$as_me: error: Found linkable openssl in $tor_cv_library_openssl_dir, but it does not seem to run, even with -R. Maybe specify another using --with-openssl-dir}" >&2;} - { (exit 1); exit 1; }; } - fi - LDFLAGS="$orig_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $tor_cv_library_openssl_linker_option" >&5 -echo "${ECHO_T}$tor_cv_library_openssl_linker_option" >&6; } - if test "$tor_cv_library_openssl_linker_option" != "(none)" ; then - TOR_LDFLAGS_openssl="$TOR_LDFLAGS_openssl $tor_cv_library_openssl_linker_option" - fi -fi # cross-compile - -LIBS="$tor_saved_LIBS" -LDFLAGS="$tor_saved_LDFLAGS" -CPPFLAGS="$tor_saved_CPPFLAGS" - - - - -echo "tor_cv_library_openssl_dir is $tor_cv_library_openssl_dir" -if test "$enable_static_openssl" = "yes"; then - if test "$tor_cv_library_openssl_dir" = "(system)"; then - { { echo "$as_me:$LINENO: error: \"You must specify an explicit --with-openssl-dir=x option when using --enable-static-openssl\"" >&5 -echo "$as_me: error: \"You must specify an explicit --with-openssl-dir=x option when using --enable-static-openssl\"" >&2;} - { (exit 1); exit 1; }; } - else - TOR_OPENSSL_LIBS="$TOR_LIBDIR_openssl/libssl.a $TOR_LIBDIR_openssl/libcrypto.a" - fi -else - TOR_OPENSSL_LIBS="-lssl -lcrypto" -fi - - - -tor_openssl_pkg_redhat="zlib" -tor_openssl_pkg_debian="zlib1g" -tor_openssl_devpkg_redhat="zlib-devel" -tor_openssl_devpkg_debian="zlib1g-dev" - - -tryzlibdir="" - -# Check whether --with-zlib-dir was given. -if test "${with_zlib_dir+set}" = set; then - withval=$with_zlib_dir; - if test x$withval != xno ; then - tryzlibdir="$withval" - fi - -fi - -if test "x$tryzlibdir" = x && test "x$ALT_zlib_WITHVAL" != x ; then - tryzlibdir="$ALT_zlib_WITHVAL" -fi - -tor_saved_LIBS="$LIBS" -tor_saved_LDFLAGS="$LDFLAGS" -tor_saved_CPPFLAGS="$CPPFLAGS" -{ echo "$as_me:$LINENO: checking for zlib directory" >&5 -echo $ECHO_N "checking for zlib directory... $ECHO_C" >&6; } -if test "${tor_cv_library_zlib_dir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - tor_zlib_dir_found=no - tor_zlib_any_linkable=no - - for tor_trydir in "$tryzlibdir" "(system)" "$prefix" /usr/local /usr/pkg /opt/zlib; do - LDFLAGS="$tor_saved_LDFLAGS" - LIBS="$tor_saved_LIBS -lz" - CPPFLAGS="$tor_saved_CPPFLAGS" - - if test -z "$tor_trydir" ; then - continue; - fi - - # Skip the directory if it isn't there. - if test ! -d "$tor_trydir" && test "$tor_trydir" != "(system)"; then - continue; - fi - - # If this isn't blank, try adding the directory (or appropriate - # include/libs subdirectories) to the command line. - if test "$tor_trydir" != "(system)"; then - - if test -d "$tor_trydir/lib"; then - LDFLAGS="-L$tor_trydir/lib $LDFLAGS" - else - LDFLAGS="-L$tor_trydir $LDFLAGS" - fi - if test -d "$tor_trydir/include"; then - CPPFLAGS="-I$tor_trydir/include $CPPFLAGS" - else - CPPFLAGS="-I$tor_trydir $CPPFLAGS" - fi - - fi - - # Can we link against (but not necessarily run, or find the headers for) - # the binary? - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -const char * zlibVersion(void); -int -main () -{ -zlibVersion(); exit(0); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - linkable=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - linkable=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - - if test "$linkable" = yes; then - tor_zlib_any_linkable=yes - # Okay, we can link against it. Can we find the headers? - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -zlibVersion(); exit(0); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - buildable=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - buildable=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test "$buildable" = yes; then - tor_cv_library_zlib_dir=$tor_trydir - tor_zlib_dir_found=yes - break - fi - fi - done - - if test "$tor_zlib_dir_found" = no; then - if test "$tor_zlib_any_linkable" = no ; then - { echo "$as_me:$LINENO: WARNING: Could not find a linkable zlib. If you have it installed somewhere unusual, you can specify an explicit path using --with-zlib-dir" >&5 -echo "$as_me: WARNING: Could not find a linkable zlib. If you have it installed somewhere unusual, you can specify an explicit path using --with-zlib-dir" >&2;} - -h="" -if test xpkg = xdevpkg; then - h=" headers for" -fi -if test -f /etc/debian_version && test x"$tor_zlib_pkg_debian" != x; then - { echo "$as_me:$LINENO: WARNING: On Debian, you can install$h zlib using \"apt-get install $tor_zlib_pkg_debian\"" >&5 -echo "$as_me: WARNING: On Debian, you can install$h zlib using \"apt-get install $tor_zlib_pkg_debian\"" >&2;} - if test x"$tor_zlib_pkg_debian" != x"$tor_zlib_devpkg_debian"; then - { echo "$as_me:$LINENO: WARNING: You will probably need $tor_zlib_devpkg_debian too." >&5 -echo "$as_me: WARNING: You will probably need $tor_zlib_devpkg_debian too." >&2;} - fi -fi -if test -f /etc/fedora-release && test x"$tor_zlib_pkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On Fedora Core, you can install$h zlib using \"yum install $tor_zlib_pkg_redhat\"" >&5 -echo "$as_me: WARNING: On Fedora Core, you can install$h zlib using \"yum install $tor_zlib_pkg_redhat\"" >&2;} - if test x"$tor_zlib_pkg_redhat" != x"$tor_zlib_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&2;} - fi -else - if test -f /etc/redhat-release && test x"$tor_zlib_pkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On most Redhat-based systems, you can get$h zlib by installing the $tor_zlib_pkg_redhat\" RPM package" >&5 -echo "$as_me: WARNING: On most Redhat-based systems, you can get$h zlib by installing the $tor_zlib_pkg_redhat\" RPM package" >&2;} - if test x"$tor_zlib_pkg_redhat" != x"$tor_zlib_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&2;} - fi - fi -fi - - { { echo "$as_me:$LINENO: error: Missing libraries; unable to proceed." >&5 -echo "$as_me: error: Missing libraries; unable to proceed." >&2;} - { (exit 1); exit 1; }; } - else - { echo "$as_me:$LINENO: WARNING: We found the libraries for zlib, but we could not find the C header files. You may need to install a devel package." >&5 -echo "$as_me: WARNING: We found the libraries for zlib, but we could not find the C header files. You may need to install a devel package." >&2;} - -h="" -if test xdevpkg = xdevpkg; then - h=" headers for" -fi -if test -f /etc/debian_version && test x"$tor_zlib_devpkg_debian" != x; then - { echo "$as_me:$LINENO: WARNING: On Debian, you can install$h zlib using \"apt-get install $tor_zlib_devpkg_debian\"" >&5 -echo "$as_me: WARNING: On Debian, you can install$h zlib using \"apt-get install $tor_zlib_devpkg_debian\"" >&2;} - if test x"$tor_zlib_devpkg_debian" != x"$tor_zlib_devpkg_debian"; then - { echo "$as_me:$LINENO: WARNING: You will probably need $tor_zlib_devpkg_debian too." >&5 -echo "$as_me: WARNING: You will probably need $tor_zlib_devpkg_debian too." >&2;} - fi -fi -if test -f /etc/fedora-release && test x"$tor_zlib_devpkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On Fedora Core, you can install$h zlib using \"yum install $tor_zlib_devpkg_redhat\"" >&5 -echo "$as_me: WARNING: On Fedora Core, you can install$h zlib using \"yum install $tor_zlib_devpkg_redhat\"" >&2;} - if test x"$tor_zlib_devpkg_redhat" != x"$tor_zlib_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&2;} - fi -else - if test -f /etc/redhat-release && test x"$tor_zlib_devpkg_redhat" != x; then - { echo "$as_me:$LINENO: WARNING: On most Redhat-based systems, you can get$h zlib by installing the $tor_zlib_devpkg_redhat\" RPM package" >&5 -echo "$as_me: WARNING: On most Redhat-based systems, you can get$h zlib by installing the $tor_zlib_devpkg_redhat\" RPM package" >&2;} - if test x"$tor_zlib_devpkg_redhat" != x"$tor_zlib_devpkg_redhat"; then - { echo "$as_me:$LINENO: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&5 -echo "$as_me: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&2;} - fi - fi -fi - - { { echo "$as_me:$LINENO: error: Missing headers; unable to proceed." >&5 -echo "$as_me: error: Missing headers; unable to proceed." >&2;} - { (exit 1); exit 1; }; } - fi - fi - - LDFLAGS="$tor_saved_LDFLAGS" - LIBS="$tor_saved_LIBS" - CPPFLAGS="$tor_saved_CPPFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $tor_cv_library_zlib_dir" >&5 -echo "${ECHO_T}$tor_cv_library_zlib_dir" >&6; } -LIBS="$LIBS -lz" -if test "$tor_cv_library_zlib_dir" != "(system)"; then - - if test -d "$tor_cv_library_zlib_dir/lib"; then - LDFLAGS="-L$tor_cv_library_zlib_dir/lib $LDFLAGS" - else - LDFLAGS="-L$tor_cv_library_zlib_dir $LDFLAGS" - fi - if test -d "$tor_cv_library_zlib_dir/include"; then - CPPFLAGS="-I$tor_cv_library_zlib_dir/include $CPPFLAGS" - else - CPPFLAGS="-I$tor_cv_library_zlib_dir $CPPFLAGS" - fi - -fi - - - if test x$tor_cv_library_zlib_dir = "x(system)"; then - TOR_LDFLAGS_zlib="" - TOR_CPPFLAGS_zlib="" - else - if test -d "$tor_cv_library_zlib_dir/lib"; then - TOR_LDFLAGS_zlib="-L$tor_cv_library_zlib_dir/lib" - TOR_LIBDIR_zlib="$tor_cv_library_zlib_dir/lib" - else - TOR_LDFLAGS_zlib="-L$tor_cv_library_zlib_dir" - TOR_LIBDIR_zlib="$tor_cv_library_zlib_dir" - fi - if test -d "$tor_cv_library_zlib_dir/include"; then - TOR_CPPFLAGS_zlib="-I$tor_cv_library_zlib_dir/include" - else - TOR_CPPFLAGS_zlib="-I$tor_cv_library_zlib_dir" - fi - fi - - - - -if test "$cross_compiling" != yes; then - { echo "$as_me:$LINENO: checking whether we need extra options to link zlib" >&5 -echo $ECHO_N "checking whether we need extra options to link zlib... $ECHO_C" >&6; } -if test "${tor_cv_library_zlib_linker_option+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - orig_LDFLAGS="$LDFLAGS" - runs=no - linked_with=nothing - if test -d "$tor_cv_library_zlib_dir/lib"; then - tor_trydir="$tor_cv_library_zlib_dir/lib" - else - tor_trydir="$tor_cv_library_zlib_dir" - fi - for tor_tryextra in "(none)" "-Wl,-R$tor_trydir" "-R$tor_trydir" \ - "-Wl,-rpath,$tor_trydir" ; do - if test "$tor_tryextra" = "(none)"; then - LDFLAGS="$orig_LDFLAGS" - else - LDFLAGS="$tor_tryextra $orig_LDFLAGS" - fi - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -const char * zlibVersion(void); -int -main () -{ -zlibVersion(); exit(0); - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - runnable=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -runnable=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - if test "$runnable" = yes; then - tor_cv_library_zlib_linker_option=$tor_tryextra - break - fi - done - - if test "$runnable" = no; then - { { echo "$as_me:$LINENO: error: Found linkable zlib in $tor_cv_library_zlib_dir, but it does not seem to run, even with -R. Maybe specify another using --with-zlib-dir}" >&5 -echo "$as_me: error: Found linkable zlib in $tor_cv_library_zlib_dir, but it does not seem to run, even with -R. Maybe specify another using --with-zlib-dir}" >&2;} - { (exit 1); exit 1; }; } - fi - LDFLAGS="$orig_LDFLAGS" - -fi -{ echo "$as_me:$LINENO: result: $tor_cv_library_zlib_linker_option" >&5 -echo "${ECHO_T}$tor_cv_library_zlib_linker_option" >&6; } - if test "$tor_cv_library_zlib_linker_option" != "(none)" ; then - TOR_LDFLAGS_zlib="$TOR_LDFLAGS_zlib $tor_cv_library_zlib_linker_option" - fi -fi # cross-compile - -LIBS="$tor_saved_LIBS" -LDFLAGS="$tor_saved_LDFLAGS" -CPPFLAGS="$tor_saved_CPPFLAGS" - - - - -# Check whether --enable-largefile was given. -if test "${enable_largefile+set}" = set; then - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { echo "$as_me:$LINENO: checking for special C compiler options needed for large files" >&5 -echo $ECHO_N "checking for special C compiler options needed for large files... $ECHO_C" >&6; } -if test "${ac_cv_sys_largefile_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_sys_largefile_CC=no - if test "$GCC" != yes; then - ac_save_CC=$CC - while :; do - # IRIX 6.2 and later do not support large files by default, - # so use the C compiler's -n32 option if that helps. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_largefile_CC=' -n32'; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - break - done - CC=$ac_save_CC - rm -f conftest.$ac_ext - fi -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sys_largefile_CC" >&5 -echo "${ECHO_T}$ac_cv_sys_largefile_CC" >&6; } - if test "$ac_cv_sys_largefile_CC" != no; then - CC=$CC$ac_cv_sys_largefile_CC - fi - - { echo "$as_me:$LINENO: checking for _FILE_OFFSET_BITS value needed for large files" >&5 -echo $ECHO_N "checking for _FILE_OFFSET_BITS value needed for large files... $ECHO_C" >&6; } -if test "${ac_cv_sys_file_offset_bits+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_file_offset_bits=no; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_file_offset_bits=64; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_file_offset_bits=unknown - break -done -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sys_file_offset_bits" >&5 -echo "${ECHO_T}$ac_cv_sys_file_offset_bits" >&6; } -case $ac_cv_sys_file_offset_bits in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits -_ACEOF -;; -esac -rm -f conftest* - if test $ac_cv_sys_file_offset_bits = unknown; then - { echo "$as_me:$LINENO: checking for _LARGE_FILES value needed for large files" >&5 -echo $ECHO_N "checking for _LARGE_FILES value needed for large files... $ECHO_C" >&6; } -if test "${ac_cv_sys_large_files+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_large_files=no; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include - /* Check that off_t can represent 2**63 - 1 correctly. - We can't simply define LARGE_OFF_T to be 9223372036854775807, - since some C++ compilers masquerading as C compilers - incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) - int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 - && LARGE_OFF_T % 2147483647 == 1) - ? 1 : -1]; -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_large_files=1; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cv_sys_large_files=unknown - break -done -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sys_large_files" >&5 -echo "${ECHO_T}$ac_cv_sys_large_files" >&6; } -case $ac_cv_sys_large_files in #( - no | unknown) ;; - *) -cat >>confdefs.h <<_ACEOF -#define _LARGE_FILES $ac_cv_sys_large_files -_ACEOF -;; -esac -rm -f conftest* - fi -fi - - - - - - - - - - - - - -for ac_header in unistd.h string.h signal.h sys/stat.h sys/types.h fcntl.h sys/fcntl.h sys/time.h errno.h assert.h time.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -else - { echo "$as_me:$LINENO: WARNING: Some headers were not found" >&5 -echo "$as_me: WARNING: Some headers were not found" >&2;} -fi - -done - - - - - - - - - - - -for ac_header in netdb.h sys/ioctl.h sys/socket.h arpa/inet.h netinet/in.h pwd.h grp.h sys/un.h sys/uio.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - - - - - - - - - - - - - - - - - - - - - - - - - -for ac_header in stdint.h sys/types.h inttypes.h sys/param.h sys/wait.h limits.h sys/limits.h netinet/in.h arpa/inet.h machine/limits.h syslog.h sys/time.h sys/resource.h inttypes.h utime.h sys/utime.h sys/mman.h netinet/in6.h malloc.h sys/syslimits.h malloc/malloc.h linux/types.h sys/file.h malloc_np.h sys/prctl.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } - -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - { echo "$as_me:$LINENO: checking for declaration of malloc_good_size" >&5 -echo $ECHO_N "checking for declaration of malloc_good_size... $ECHO_C" >&6; } -if test "${tor_cv_malloc_good_size_declared+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_MALLOC_H -#include -#endif -#ifdef HAVE_MALLOC_MALLOC_H -#include -#endif -int -main () -{ -void *ptr= malloc_good_size ; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - tor_cv_malloc_good_size_declared=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tor_cv_malloc_good_size_declared=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $tor_cv_malloc_good_size_declared" >&5 -echo "${ECHO_T}$tor_cv_malloc_good_size_declared" >&6; } -if test x$tor_cv_malloc_good_size_declared != xno ; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_MALLOC_GOOD_SIZE_PROTOTYPE 1 -_ACEOF - -fi - - - -for ac_header in net/if.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - net_if_found=1 -else - net_if_found=0 -fi - -done - - -for ac_header in net/pfvar.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NET_IF_H -#include -#endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - net_pfvar_found=1 -else - net_pfvar_found=0 -fi - -done - - -for ac_header in linux/netfilter_ipv4.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_LINUX_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - linux_netfilter_ipv4=1 -else - linux_netfilter_ipv4=0 -fi - -done - - -if test x$transparent = xtrue ; then - transparent_ok=0 - if test x$net_if_found = x1 && test x$net_pfvar_found = x1 ; then - transparent_ok=1 - fi - if test x$linux_netfilter_ipv4 = x1 ; then - transparent_ok=1 - fi - if test x$transparent_ok = x1 ; then - -cat >>confdefs.h <<\_ACEOF -#define USE_TRANSPARENT 1 -_ACEOF - - case $host in - *-*-openbsd*) - -cat >>confdefs.h <<\_ACEOF -#define OPENBSD 1 -_ACEOF - ;; - esac - else - { echo "$as_me:$LINENO: Transparent proxy support enabled, but missing headers." >&5 -echo "$as_me: Transparent proxy support enabled, but missing headers." >&6;} - fi -fi - -{ echo "$as_me:$LINENO: checking for struct timeval.tv_sec" >&5 -echo $ECHO_N "checking for struct timeval.tv_sec... $ECHO_C" >&6; } -if test "${ac_cv_member_struct_timeval_tv_sec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif - -int -main () -{ -static struct timeval ac_aggr; -if (ac_aggr.tv_sec) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_timeval_tv_sec=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif - -int -main () -{ -static struct timeval ac_aggr; -if (sizeof ac_aggr.tv_sec) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_timeval_tv_sec=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_member_struct_timeval_tv_sec=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_timeval_tv_sec" >&5 -echo "${ECHO_T}$ac_cv_member_struct_timeval_tv_sec" >&6; } -if test $ac_cv_member_struct_timeval_tv_sec = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_TIMEVAL_TV_SEC 1 -_ACEOF - - -fi - - - -{ echo "$as_me:$LINENO: checking for int8_t" >&5 -echo $ECHO_N "checking for int8_t... $ECHO_C" >&6; } -if test "${ac_cv_type_int8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef int8_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_int8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_int8_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_int8_t" >&5 -echo "${ECHO_T}$ac_cv_type_int8_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of int8_t" >&5 -echo $ECHO_N "checking size of int8_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_int8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int8_t=$ac_lo;; -'') if test "$ac_cv_type_int8_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int8_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int8_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int8_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int8_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int8_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_int8_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int8_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int8_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int8_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int8_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int8_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT8_T $ac_cv_sizeof_int8_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for int16_t" >&5 -echo $ECHO_N "checking for int16_t... $ECHO_C" >&6; } -if test "${ac_cv_type_int16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef int16_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_int16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_int16_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5 -echo "${ECHO_T}$ac_cv_type_int16_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of int16_t" >&5 -echo $ECHO_N "checking size of int16_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_int16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int16_t=$ac_lo;; -'') if test "$ac_cv_type_int16_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int16_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int16_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int16_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int16_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int16_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_int16_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int16_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int16_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int16_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int16_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int16_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT16_T $ac_cv_sizeof_int16_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for int32_t" >&5 -echo $ECHO_N "checking for int32_t... $ECHO_C" >&6; } -if test "${ac_cv_type_int32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef int32_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_int32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_int32_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5 -echo "${ECHO_T}$ac_cv_type_int32_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of int32_t" >&5 -echo $ECHO_N "checking size of int32_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_int32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int32_t=$ac_lo;; -'') if test "$ac_cv_type_int32_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int32_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int32_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int32_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int32_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int32_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_int32_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int32_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int32_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int32_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int32_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int32_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT32_T $ac_cv_sizeof_int32_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for int64_t" >&5 -echo $ECHO_N "checking for int64_t... $ECHO_C" >&6; } -if test "${ac_cv_type_int64_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef int64_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_int64_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_int64_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5 -echo "${ECHO_T}$ac_cv_type_int64_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of int64_t" >&5 -echo $ECHO_N "checking size of int64_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_int64_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int64_t=$ac_lo;; -'') if test "$ac_cv_type_int64_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int64_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int64_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int64_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int64_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int64_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_int64_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int64_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int64_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int64_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int64_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int64_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT64_T $ac_cv_sizeof_int64_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for uint8_t" >&5 -echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6; } -if test "${ac_cv_type_uint8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef uint8_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uint8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uint8_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint8_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of uint8_t" >&5 -echo $ECHO_N "checking size of uint8_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_uint8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint8_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_uint8_t=$ac_lo;; -'') if test "$ac_cv_type_uint8_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint8_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uint8_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uint8_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint8_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_uint8_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_uint8_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint8_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uint8_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uint8_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint8_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_uint8_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UINT8_T $ac_cv_sizeof_uint8_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for uint16_t" >&5 -echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6; } -if test "${ac_cv_type_uint16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef uint16_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uint16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uint16_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint16_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of uint16_t" >&5 -echo $ECHO_N "checking size of uint16_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_uint16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint16_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_uint16_t=$ac_lo;; -'') if test "$ac_cv_type_uint16_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint16_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uint16_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uint16_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint16_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_uint16_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_uint16_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint16_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uint16_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uint16_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint16_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_uint16_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UINT16_T $ac_cv_sizeof_uint16_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for uint32_t" >&5 -echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6; } -if test "${ac_cv_type_uint32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef uint32_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uint32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uint32_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint32_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of uint32_t" >&5 -echo $ECHO_N "checking size of uint32_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_uint32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint32_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_uint32_t=$ac_lo;; -'') if test "$ac_cv_type_uint32_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint32_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uint32_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uint32_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint32_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_uint32_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_uint32_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint32_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uint32_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uint32_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint32_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_uint32_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UINT32_T $ac_cv_sizeof_uint32_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for uint64_t" >&5 -echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6; } -if test "${ac_cv_type_uint64_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef uint64_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uint64_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uint64_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint64_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of uint64_t" >&5 -echo $ECHO_N "checking size of uint64_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_uint64_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint64_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_uint64_t=$ac_lo;; -'') if test "$ac_cv_type_uint64_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint64_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uint64_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uint64_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uint64_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_uint64_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_uint64_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint64_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uint64_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uint64_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint64_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_uint64_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UINT64_T $ac_cv_sizeof_uint64_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for intptr_t" >&5 -echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6; } -if test "${ac_cv_type_intptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef intptr_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_intptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_intptr_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_intptr_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of intptr_t" >&5 -echo $ECHO_N "checking size of intptr_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_intptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef intptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef intptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef intptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef intptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef intptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_intptr_t=$ac_lo;; -'') if test "$ac_cv_type_intptr_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (intptr_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (intptr_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_intptr_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef intptr_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; +if ac_fn_c_try_cpp "$LINENO"; then : - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_intptr_t=`cat conftest.val` else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_intptr_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (intptr_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (intptr_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_intptr_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + # Broken: fails on valid input. +continue fi -rm -f conftest.val +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_intptr_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_intptr_t" >&6; } +rm -f conftest.err conftest.i conftest.$ac_ext +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + done + ac_cv_prog_CPP=$CPP -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INTPTR_T $ac_cv_sizeof_intptr_t +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error _ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : - -{ echo "$as_me:$LINENO: checking for uintptr_t" >&5 -echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6; } -if test "${ac_cv_type_uintptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -typedef uintptr_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} +#include _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uintptr_t=yes +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uintptr_t=no + # Passes both tests. +ac_preproc_ok=: +break fi +rm -f conftest.err conftest.i conftest.$ac_ext -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6; } +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of uintptr_t" >&5 -echo $ECHO_N "checking size of uintptr_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_uintptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uintptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uintptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu - ; - return 0; -} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uintptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uintptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done + +# Extract the first word of "sed", so it can be a program name with args. +set dummy sed; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_SED+:} false; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -n "$SED"; then + ac_cv_prog_SED="$SED" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_SED="sed" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - ac_lo= ac_hi= + test -z "$ac_cv_prog_SED" && ac_cv_prog_SED="/bin/false" +fi +fi +SED=$ac_cv_prog_SED +if test -n "$SED"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 +$as_echo "$SED" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +# Extract the first word of "asciidoc", so it can be a program name with args. +set dummy asciidoc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ASCIIDOC+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ASCIIDOC in + [\\/]* | ?:[\\/]*) + ac_cv_path_ASCIIDOC="$ASCIIDOC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ASCIIDOC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_ASCIIDOC" && ac_cv_path_ASCIIDOC="none" + ;; +esac +fi +ASCIIDOC=$ac_cv_path_ASCIIDOC +if test -n "$ASCIIDOC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ASCIIDOC" >&5 +$as_echo "$ASCIIDOC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uintptr_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; +# Extract the first word of "a2x", so it can be a program name with args. +set dummy a2x; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_A2X+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $A2X in + [\\/]* | ?:[\\/]*) + ac_cv_path_A2X="$A2X" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_A2X="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_A2X" && ac_cv_path_A2X="none" + ;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid +fi +A2X=$ac_cv_path_A2X +if test -n "$A2X"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $A2X" >&5 +$as_echo "$A2X" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + - ac_lo=`expr '(' $ac_mid ')' + 1` + + if test x$asciidoc = xtrue; then + USE_ASCIIDOC_TRUE= + USE_ASCIIDOC_FALSE='#' +else + USE_ASCIIDOC_TRUE='#' + USE_ASCIIDOC_FALSE= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +# Extract the first word of "sha1sum", so it can be a program name with args. +set dummy sha1sum; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SHA1SUM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SHA1SUM in + [\\/]* | ?:[\\/]*) + ac_cv_path_SHA1SUM="$SHA1SUM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SHA1SUM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi done -case $ac_lo in -?*) ac_cv_sizeof_uintptr_t=$ac_lo;; -'') if test "$ac_cv_type_uintptr_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uintptr_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uintptr_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uintptr_t=0 - fi ;; + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_SHA1SUM" && ac_cv_path_SHA1SUM="none" + ;; esac +fi +SHA1SUM=$ac_cv_path_SHA1SUM +if test -n "$SHA1SUM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHA1SUM" >&5 +$as_echo "$SHA1SUM" >&6; } else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef uintptr_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_uintptr_t=`cat conftest.val` +# Extract the first word of "openssl", so it can be a program name with args. +set dummy openssl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_OPENSSL+:} false; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + case $OPENSSL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OPENSSL="$OPENSSL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OPENSSL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -( exit $ac_status ) -if test "$ac_cv_type_uintptr_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (uintptr_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (uintptr_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_uintptr_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + test -z "$ac_cv_path_OPENSSL" && ac_cv_path_OPENSSL="none" + ;; +esac fi -rm -f conftest.val +OPENSSL=$ac_cv_path_OPENSSL +if test -n "$OPENSSL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPENSSL" >&5 +$as_echo "$OPENSSL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_uintptr_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_uintptr_t" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_UINTPTR_T $ac_cv_sizeof_uintptr_t -_ACEOF +TORUSER=_tor + +# Check whether --with-tor-user was given. +if test "${with_tor_user+set}" = set; then : + withval=$with_tor_user; + TORUSER=$withval +fi -{ echo "$as_me:$LINENO: checking for char" >&5 -echo $ECHO_N "checking for char... $ECHO_C" >&6; } -if test "${ac_cv_type_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef char ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_char=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_type_char=no -fi +TORGROUP=_tor + +# Check whether --with-tor-group was given. +if test "${with_tor_group+set}" = set; then : + withval=$with_tor_group; + TORGROUP=$withval + -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5 -echo "${ECHO_T}$ac_cv_type_char" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of char" >&5 -echo $ECHO_N "checking size of char... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for win32" >&5 +$as_echo_n "checking for win32... " >&6; } + +if test "$cross_compiling" = yes; then : + bwin32=cross; { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross" >&5 +$as_echo "cross" >&6; } + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - ; +int main(int c, char **v) { +#ifdef WIN32 +#if WIN32 return 0; +#else + return 1; +#endif +#else + return 2; +#endif } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +if ac_fn_c_try_run "$LINENO"; then : + bwin32=true; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + bwin32=false; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if test "$bwin32" = cross; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for win32 (cross)" >&5 +$as_echo_n "checking for win32 (cross)... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +#ifdef WIN32 +int main(int c, char **v) {return 0;} +#else +#error +int main(int c, char **v) {return x(y);} +#endif + _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + bwin32=true; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + bwin32=false; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +if test "$bwin32" = true; then + +$as_echo "#define MS_WINDOWS 1" >>confdefs.h + +fi + if test x$bwin32 = xtrue; then + BUILD_NT_SERVICES_TRUE= + BUILD_NT_SERVICES_FALSE='#' +else + BUILD_NT_SERVICES_TRUE='#' + BUILD_NT_SERVICES_FALSE= +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MIPSpro compiler" >&5 +$as_echo_n "checking for MIPSpro compiler... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef char ac__type_sizeof_; + int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 + +#if (defined(__sgi) && defined(_COMPILER_VERSION)) +#error + return x(y); +#endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +if ac_fn_c_try_compile "$LINENO"; then : + bmipspro=false; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + bmipspro=true; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` +if test "$bmipspro" = true; then + CFLAGS="$CFLAGS -c99" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac - ac_lo= ac_hi= + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef char ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_path_EGREP=$EGREP +fi - ac_lo=`expr '(' $ac_mid ')' + 1` + fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_char=$ac_lo;; -'') if test "$ac_cv_type_char" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (char) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_char=0 - fi ;; -esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef char ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include #include +#include +#include +#include + int main () { - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_char=`cat conftest.val` +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_char" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (char) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_char=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext + ac_cv_header_stdc=no fi -rm -f conftest.val +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5 -echo "${ECHO_T}$ac_cv_sizeof_char" >&6; } +rm -f conftest* +fi +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -cat >>confdefs.h <<_ACEOF -#define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no +fi +rm -f conftest* -{ echo "$as_me:$LINENO: checking for short" >&5 -echo $ECHO_N "checking for short... $ECHO_C" >&6; } -if test "${ac_cv_type_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -typedef short ac__type_new_; +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_short=yes +if ac_fn_c_try_run "$LINENO"; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi - ac_cv_type_short=no fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 -echo "${ECHO_T}$ac_cv_type_short" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of short" >&5 -echo $ECHO_N "checking size of short... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +fi + +done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef short ac__type_sizeof_; +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef short ac__type_sizeof_; +#include + #include + int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + ac_cv_c_bigendian=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef short ac__type_sizeof_; +#include + int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef short ac__type_sizeof_; +#include + int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 +#ifndef _BIG_ENDIAN + not big endian + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo= ac_hi= + ac_cv_c_bigendian=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef short ac__type_sizeof_; +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - +return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_short=$ac_lo;; -'') if test "$ac_cv_type_short" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (short) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_short=0 - fi ;; -esac else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default - typedef short ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include int main () { - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_short=`cat conftest.val` +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_short" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (short) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_short=0 - fi + ac_cv_c_bigendian=yes fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f conftest.val + + fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 -echo "${ECHO_T}$ac_cv_sizeof_short" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac -cat >>confdefs.h <<_ACEOF -#define SIZEOF_SHORT $ac_cv_sizeof_short + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +$as_echo_n "checking for library containing socket... " >&6; } +if ${ac_cv_search_socket+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char socket (); +int +main () +{ +return socket (); + ; + return 0; +} _ACEOF +for ac_lib in '' socket; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_socket=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_socket+:} false; then : + break +fi +done +if ${ac_cv_search_socket+:} false; then : + +else + ac_cv_search_socket=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +$as_echo "$ac_cv_search_socket" >&6; } +ac_res=$ac_cv_search_socket +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" +fi -{ echo "$as_me:$LINENO: checking for int" >&5 -echo $ECHO_N "checking for int... $ECHO_C" >&6; } -if test "${ac_cv_type_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5 +$as_echo_n "checking for library containing gethostbyname... " >&6; } +if ${ac_cv_search_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -typedef int ac__type_new_; + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); int main () { -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; +return gethostbyname (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +for ac_lib in '' nsl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gethostbyname=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_gethostbyname+:} false; then : + break +fi +done +if ${ac_cv_search_gethostbyname+:} false; then : - ac_cv_type_int=no +else + ac_cv_search_gethostbyname=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 +$as_echo "$ac_cv_search_gethostbyname" >&6; } +ac_res=$ac_cv_search_gethostbyname +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 -echo "${ECHO_T}$ac_cv_type_int" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of int" >&5 -echo $ECHO_N "checking size of int... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 +$as_echo_n "checking for library containing dlopen... " >&6; } +if ${ac_cv_search_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef int ac__type_sizeof_; + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlopen=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlopen+:} false; then : + break +fi +done +if ${ac_cv_search_dlopen+:} false; then : + +else + ac_cv_search_dlopen=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 +$as_echo "$ac_cv_search_dlopen" >&6; } +ac_res=$ac_cv_search_dlopen +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inet_aton" >&5 +$as_echo_n "checking for library containing inet_aton... " >&6; } +if ${ac_cv_search_inet_aton+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef int ac__type_sizeof_; + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inet_aton (); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - +return inet_aton (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +for ac_lib in '' resolv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_inet_aton=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_inet_aton+:} false; then : + break +fi +done +if ${ac_cv_search_inet_aton+:} false; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_search_inet_aton=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inet_aton" >&5 +$as_echo "$ac_cv_search_inet_aton" >&6; } +ac_res=$ac_cv_search_inet_aton +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if test "$enable_threads" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_create" >&5 +$as_echo_n "checking for library containing pthread_create... " >&6; } +if ${ac_cv_search_pthread_create+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef int ac__type_sizeof_; + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_create (); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - +return pthread_create (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +for ac_lib in '' pthread; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_pthread_create=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_pthread_create+:} false; then : + break +fi +done +if ${ac_cv_search_pthread_create+:} false; then : + +else + ac_cv_search_pthread_create=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_create" >&5 +$as_echo "$ac_cv_search_pthread_create" >&6; } +ac_res=$ac_cv_search_pthread_create +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_detach" >&5 +$as_echo_n "checking for library containing pthread_detach... " >&6; } +if ${ac_cv_search_pthread_detach+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef int ac__type_sizeof_; + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_detach (); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - +return pthread_detach (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +for ac_lib in '' pthread; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_pthread_detach=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_pthread_detach+:} false; then : + break +fi +done +if ${ac_cv_search_pthread_detach+:} false; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_search_pthread_detach=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_detach" >&5 +$as_echo "$ac_cv_search_pthread_detach" >&6; } +ac_res=$ac_cv_search_pthread_detach +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo= ac_hi= +for ac_func in gettimeofday ftime socketpair uname inet_aton strptime getrlimit strlcat strlcpy strtoull getaddrinfo localtime_r gmtime_r memmem strtok_r writev readv flock prctl vasprintf lround rint +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +using_custom_malloc=no +if test x$enable_openbsd_malloc = xyes ; then + +$as_echo "#define HAVE_MALLOC_GOOD_SIZE 1" >>confdefs.h + + using_custom_malloc=yes fi +if test x$tcmalloc = xyes ; then + using_custom_malloc=yes +fi +if test $using_custom_malloc = no ; then + for ac_func in mallinfo malloc_good_size malloc_usable_size +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +done -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +fi - ; - return 0; -} +if test "$enable_threads" = "yes"; then + for ac_header in pthread.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PTHREAD_H 1 _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo=`expr '(' $ac_mid ')' + 1` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done -case $ac_lo in -?*) ac_cv_sizeof_int=$ac_lo;; -'') if test "$ac_cv_type_int" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef int ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; - return 0; -} + for ac_func in pthread_create +do : + ac_fn_c_check_func "$LINENO" "pthread_create" "ac_cv_func_pthread_create" +if test "x$ac_cv_func_pthread_create" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PTHREAD_CREATE 1 _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -( exit $ac_status ) -if test "$ac_cv_type_int" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (int) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_int=0 - fi fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +done + fi -rm -f conftest.val + + +if test "$bwin32" = true; then + TOR_LIB_WS32=-lws2_32 + # Some of the cargo-cults recommend -lwsock32 as well, but I don't + # think it's actually necessary. + TOR_LIB_GDI=-lgdi32 +else + TOR_LIB_WS32= + TOR_LIB_GDI= fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_INT $ac_cv_sizeof_int +for ac_header in sys/types.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_types_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_TYPES_H 1 _ACEOF +fi + +done + + +ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "$ac_includes_default" +if test "x$ac_cv_type_u_int64_t" = xyes; then : -{ echo "$as_me:$LINENO: checking for long" >&5 -echo $ECHO_N "checking for long... $ECHO_C" >&6; } -if test "${ac_cv_type_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef long ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} + +cat >>confdefs.h <<_ACEOF +#define u_int64_t unsigned long long _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_type_long=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 -echo "${ECHO_T}$ac_cv_type_long" >&6; } +ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "$ac_includes_default" +if test "x$ac_cv_type_u_int32_t" = xyes; then : -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of long" >&5 -echo $ECHO_N "checking size of long... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define u_int32_t unsigned long _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +fi + +ac_fn_c_check_type "$LINENO" "u_int16_t" "ac_cv_type_u_int16_t" "$ac_includes_default" +if test "x$ac_cv_type_u_int16_t" = xyes; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` +cat >>confdefs.h <<_ACEOF +#define u_int16_t unsigned short +_ACEOF + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done +ac_fn_c_check_type "$LINENO" "u_int8_t" "ac_cv_type_u_int8_t" "$ac_includes_default" +if test "x$ac_cv_type_u_int8_t" = xyes; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define u_int8_t unsigned char _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +fi + + +tor_libevent_pkg_redhat="libevent" +tor_libevent_pkg_debian="libevent-dev" +tor_libevent_devpkg_redhat="libevent-devel" +tor_libevent_devpkg_debian="libevent-dev" + +STATIC_LIBEVENT_FLAGS="" +if test "$enable_static_libevent" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 +$as_echo_n "checking for library containing clock_gettime... " >&6; } +if ${ac_cv_search_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long ac__type_sizeof_; + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - +return clock_gettime (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +for ac_lib in '' rt; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_clock_gettime=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_clock_gettime+:} false; then : + break +fi +done +if ${ac_cv_search_clock_gettime+:} false; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_search_clock_gettime=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5 +$as_echo "$ac_cv_search_clock_gettime" >&6; } +ac_res=$ac_cv_search_clock_gettime +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_rt=yes +fi - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + if test "$have_rt" = yes; then + STATIC_LIBEVENT_FLAGS=" -lrt " + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo= ac_hi= +trylibeventdir="" + +# Check whether --with-libevent-dir was given. +if test "${with_libevent_dir+set}" = set; then : + withval=$with_libevent_dir; + if test x$withval != xno ; then + trylibeventdir="$withval" + fi + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if test "x$trylibeventdir" = x && test "x$ALT_libevent_WITHVAL" != x ; then + trylibeventdir="$ALT_libevent_WITHVAL" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +tor_saved_LIBS="$LIBS" +tor_saved_LDFLAGS="$LDFLAGS" +tor_saved_CPPFLAGS="$CPPFLAGS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libevent directory" >&5 +$as_echo_n "checking for libevent directory... " >&6; } +if ${tor_cv_library_libevent_dir+:} false; then : + $as_echo_n "(cached) " >&6 +else + + tor_libevent_dir_found=no + tor_libevent_any_linkable=no + + for tor_trydir in "$trylibeventdir" "(system)" "$prefix" /usr/local /usr/pkg /opt/libevent; do + LDFLAGS="$tor_saved_LDFLAGS" + LIBS="$tor_saved_LIBS -levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32" + CPPFLAGS="$tor_saved_CPPFLAGS" + + if test -z "$tor_trydir" ; then + continue; + fi + + # Skip the directory if it isn't there. + if test ! -d "$tor_trydir" && test "$tor_trydir" != "(system)"; then + continue; + fi + + # If this isn't blank, try adding the directory (or appropriate + # include/libs subdirectories) to the command line. + if test "$tor_trydir" != "(system)"; then + + if test -d "$tor_trydir/lib"; then + LDFLAGS="-L$tor_trydir/lib $LDFLAGS" + else + LDFLAGS="-L$tor_trydir $LDFLAGS" + fi + if test -d "$tor_trydir/include"; then + CPPFLAGS="-I$tor_trydir/include $CPPFLAGS" + else + CPPFLAGS="-I$tor_trydir $CPPFLAGS" + fi + + fi + + # Can we link against (but not necessarily run, or find the headers for) + # the binary? + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long ac__type_sizeof_; + +#ifdef WIN32 +#include +#endif +void exit(int); void *event_init(void); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 + +#ifdef WIN32 +{WSADATA d; WSAStartup(0x101,&d); } +#endif +event_init(); exit(0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid +if ac_fn_c_try_link "$LINENO"; then : + linkable=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` + linkable=no fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long=$ac_lo;; -'') if test "$ac_cv_type_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_long=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + if test "$linkable" = yes; then + tor_libevent_any_linkable=yes + # Okay, we can link against it. Can we find the headers? + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include + +#ifdef WIN32 +#include +#endif #include +#include +#include +#include int main () { - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; +#ifdef WIN32 +{WSADATA d; WSAStartup(0x101,&d); } +#endif +event_init(); exit(0); ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long=`cat conftest.val` +if ac_fn_c_try_compile "$LINENO"; then : + buildable=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + buildable=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "$buildable" = yes; then + tor_cv_library_libevent_dir=$tor_trydir + tor_libevent_dir_found=yes + break + fi + fi + done -( exit $ac_status ) -if test "$ac_cv_type_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_long=0 - fi + if test "$tor_libevent_dir_found" = no; then + if test "$tor_libevent_any_linkable" = no ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find a linkable libevent. If you have it installed somewhere unusual, you can specify an explicit path using --with-libevent-dir" >&5 +$as_echo "$as_me: WARNING: Could not find a linkable libevent. If you have it installed somewhere unusual, you can specify an explicit path using --with-libevent-dir" >&2;} + +h="" +if test xpkg = xdevpkg; then + h=" headers for" fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +if test -f /etc/debian_version && test x"$tor_libevent_pkg_debian" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Debian, you can install$h libevent using \"apt-get install $tor_libevent_pkg_debian\"" >&5 +$as_echo "$as_me: WARNING: On Debian, you can install$h libevent using \"apt-get install $tor_libevent_pkg_debian\"" >&2;} + if test x"$tor_libevent_pkg_debian" != x"$tor_libevent_devpkg_debian"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need $tor_libevent_devpkg_debian too." >&5 +$as_echo "$as_me: WARNING: You will probably need $tor_libevent_devpkg_debian too." >&2;} + fi fi -rm -f conftest.val +if test -f /etc/fedora-release && test x"$tor_libevent_pkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Fedora Core, you can install$h libevent using \"yum install $tor_libevent_pkg_redhat\"" >&5 +$as_echo "$as_me: WARNING: On Fedora Core, you can install$h libevent using \"yum install $tor_libevent_pkg_redhat\"" >&2;} + if test x"$tor_libevent_pkg_redhat" != x"$tor_libevent_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&2;} + fi +else + if test -f /etc/redhat-release && test x"$tor_libevent_pkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On most Redhat-based systems, you can get$h libevent by installing the $tor_libevent_pkg_redhat\" RPM package" >&5 +$as_echo "$as_me: WARNING: On most Redhat-based systems, you can get$h libevent by installing the $tor_libevent_pkg_redhat\" RPM package" >&2;} + if test x"$tor_libevent_pkg_redhat" != x"$tor_libevent_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&2;} + fi + fi +fi + + as_fn_error $? "Missing libraries; unable to proceed." "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: We found the libraries for libevent, but we could not find the C header files. You may need to install a devel package." >&5 +$as_echo "$as_me: WARNING: We found the libraries for libevent, but we could not find the C header files. You may need to install a devel package." >&2;} + +h="" +if test xdevpkg = xdevpkg; then + h=" headers for" +fi +if test -f /etc/debian_version && test x"$tor_libevent_devpkg_debian" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Debian, you can install$h libevent using \"apt-get install $tor_libevent_devpkg_debian\"" >&5 +$as_echo "$as_me: WARNING: On Debian, you can install$h libevent using \"apt-get install $tor_libevent_devpkg_debian\"" >&2;} + if test x"$tor_libevent_devpkg_debian" != x"$tor_libevent_devpkg_debian"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need $tor_libevent_devpkg_debian too." >&5 +$as_echo "$as_me: WARNING: You will probably need $tor_libevent_devpkg_debian too." >&2;} + fi +fi +if test -f /etc/fedora-release && test x"$tor_libevent_devpkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Fedora Core, you can install$h libevent using \"yum install $tor_libevent_devpkg_redhat\"" >&5 +$as_echo "$as_me: WARNING: On Fedora Core, you can install$h libevent using \"yum install $tor_libevent_devpkg_redhat\"" >&2;} + if test x"$tor_libevent_devpkg_redhat" != x"$tor_libevent_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&2;} + fi +else + if test -f /etc/redhat-release && test x"$tor_libevent_devpkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On most Redhat-based systems, you can get$h libevent by installing the $tor_libevent_devpkg_redhat\" RPM package" >&5 +$as_echo "$as_me: WARNING: On most Redhat-based systems, you can get$h libevent by installing the $tor_libevent_devpkg_redhat\" RPM package" >&2;} + if test x"$tor_libevent_devpkg_redhat" != x"$tor_libevent_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_libevent_devpkg_redhat too." >&2;} + fi + fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long" >&6; } + as_fn_error $? "Missing headers; unable to proceed." "$LINENO" 5 + fi + fi + LDFLAGS="$tor_saved_LDFLAGS" + LIBS="$tor_saved_LIBS" + CPPFLAGS="$tor_saved_CPPFLAGS" -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG $ac_cv_sizeof_long -_ACEOF +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_library_libevent_dir" >&5 +$as_echo "$tor_cv_library_libevent_dir" >&6; } +LIBS="$LIBS -levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32" +if test "$tor_cv_library_libevent_dir" != "(system)"; then + if test -d "$tor_cv_library_libevent_dir/lib"; then + LDFLAGS="-L$tor_cv_library_libevent_dir/lib $LDFLAGS" + else + LDFLAGS="-L$tor_cv_library_libevent_dir $LDFLAGS" + fi + if test -d "$tor_cv_library_libevent_dir/include"; then + CPPFLAGS="-I$tor_cv_library_libevent_dir/include $CPPFLAGS" + else + CPPFLAGS="-I$tor_cv_library_libevent_dir $CPPFLAGS" + fi -{ echo "$as_me:$LINENO: checking for long long" >&5 -echo $ECHO_N "checking for long long... $ECHO_C" >&6; } -if test "${ac_cv_type_long_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef long long ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_long_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi + + + if test x$tor_cv_library_libevent_dir = "x(system)"; then + TOR_LDFLAGS_libevent="" + TOR_CPPFLAGS_libevent="" + else + if test -d "$tor_cv_library_libevent_dir/lib"; then + TOR_LDFLAGS_libevent="-L$tor_cv_library_libevent_dir/lib" + TOR_LIBDIR_libevent="$tor_cv_library_libevent_dir/lib" + else + TOR_LDFLAGS_libevent="-L$tor_cv_library_libevent_dir" + TOR_LIBDIR_libevent="$tor_cv_library_libevent_dir" + fi + if test -d "$tor_cv_library_libevent_dir/include"; then + TOR_CPPFLAGS_libevent="-I$tor_cv_library_libevent_dir/include" + else + TOR_CPPFLAGS_libevent="-I$tor_cv_library_libevent_dir" + fi + fi - ac_cv_type_long_long=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 -echo "${ECHO_T}$ac_cv_type_long_long" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of long long" >&5 -echo $ECHO_N "checking size of long long... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_long_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +if test "$cross_compiling" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need extra options to link libevent" >&5 +$as_echo_n "checking whether we need extra options to link libevent... " >&6; } +if ${tor_cv_library_libevent_linker_option+:} false; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + orig_LDFLAGS="$LDFLAGS" + runs=no + linked_with=nothing + if test -d "$tor_cv_library_libevent_dir/lib"; then + tor_trydir="$tor_cv_library_libevent_dir/lib" + else + tor_trydir="$tor_cv_library_libevent_dir" + fi + for tor_tryextra in "(none)" "-Wl,-R$tor_trydir" "-R$tor_trydir" \ + "-Wl,-rpath,$tor_trydir" ; do + if test "$tor_tryextra" = "(none)"; then + LDFLAGS="$orig_LDFLAGS" + else + LDFLAGS="$tor_tryextra $orig_LDFLAGS" + fi + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef long long ac__type_sizeof_; + +#ifdef WIN32 +#include +#endif +void exit(int); void *event_init(void); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 + +#ifdef WIN32 +{WSADATA d; WSAStartup(0x101,&d); } +#endif +event_init(); exit(0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +if ac_fn_c_try_run "$LINENO"; then : + runnable=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + runnable=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test "$runnable" = yes; then + tor_cv_library_libevent_linker_option=$tor_tryextra + break + fi + done + + if test "$runnable" = no; then + as_fn_error $? "Found linkable libevent in $tor_cv_library_libevent_dir, but it does not seem to run, even with -R. Maybe specify another using --with-libevent-dir}" "$LINENO" 5 + fi + LDFLAGS="$orig_LDFLAGS" - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_library_libevent_linker_option" >&5 +$as_echo "$tor_cv_library_libevent_linker_option" >&6; } + if test "$tor_cv_library_libevent_linker_option" != "(none)" ; then + TOR_LDFLAGS_libevent="$TOR_LDFLAGS_libevent $tor_cv_library_libevent_linker_option" + fi +fi # cross-compile -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +LIBS="$tor_saved_LIBS" +LDFLAGS="$tor_saved_LDFLAGS" +CPPFLAGS="$tor_saved_CPPFLAGS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} +save_LIBS="$LIBS" +save_LDFLAGS="$LDFLAGS" +save_CPPFLAGS="$CPPFLAGS" +LIBS="-levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32 $LIBS" +LDFLAGS="$TOR_LDFLAGS_libevent $LDFLAGS" +CPPFLAGS="$TOR_CPPFLAGS_libevent $CPPFLAGS" +for ac_func in event_get_version event_get_version_number event_get_method event_set_log_callback evdns_set_outgoing_bind_address event_base_loopexit +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi +done -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +ac_fn_c_check_member "$LINENO" "struct event" "min_heap_idx" "ac_cv_member_struct_event_min_heap_idx" "#include + +" +if test "x$ac_cv_member_struct_event_min_heap_idx" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_EVENT_MIN_HEAP_IDX 1 +_ACEOF - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long long ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} +for ac_header in event2/event.h event2/dns.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo=`expr '(' $ac_mid ')' + 1` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done -case $ac_lo in -?*) ac_cv_sizeof_long_long=$ac_lo;; -'') if test "$ac_cv_type_long_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_long_long=0 - fi ;; -esac + + +LIBS="$save_LIBS" +LDFLAGS="$save_LDFLAGS" +CPPFLAGS="$save_CPPFLAGS" + + + if test x$ac_cv_header_event2_dns_h = xyes; then + USE_EXTERNAL_EVDNS_TRUE= + USE_EXTERNAL_EVDNS_FALSE='#' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef long long ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ + USE_EXTERNAL_EVDNS_TRUE='#' + USE_EXTERNAL_EVDNS_FALSE= +fi - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long_long=`cat conftest.val` +if test "$enable_static_libevent" = "yes"; then + if test "$tor_cv_library_libevent_dir" = "(system)"; then + as_fn_error $? "\"You must specify an explicit --with-libevent-dir=x option when using --enable-static-libevent\"" "$LINENO" 5 + else + TOR_LIBEVENT_LIBS="$TOR_LIBDIR_libevent/libevent.a $STATIC_LIBEVENT_FLAGS" + fi else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + TOR_LIBEVENT_LIBS="-levent" +fi + + + + +tor_openssl_pkg_redhat="openssl" +tor_openssl_pkg_debian="libssl" +tor_openssl_devpkg_redhat="openssl-devel" +tor_openssl_devpkg_debian="libssl-dev" + +ALT_openssl_WITHVAL="" + +# Check whether --with-ssl-dir was given. +if test "${with_ssl_dir+set}" = set; then : + withval=$with_ssl_dir; + if test "x$withval" != xno && test "x$withval" != "x" ; then + ALT_openssl_WITHVAL="$withval" + fi -( exit $ac_status ) -if test "$ac_cv_type_long_long" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long long) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_long_long=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest.val -fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF - +tryopenssldir="" -{ echo "$as_me:$LINENO: checking for __int64" >&5 -echo $ECHO_N "checking for __int64... $ECHO_C" >&6; } -if test "${ac_cv_type___int64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef __int64 ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type___int64=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# Check whether --with-openssl-dir was given. +if test "${with_openssl_dir+set}" = set; then : + withval=$with_openssl_dir; + if test x$withval != xno ; then + tryopenssldir="$withval" + fi - ac_cv_type___int64=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if test "x$tryopenssldir" = x && test "x$ALT_openssl_WITHVAL" != x ; then + tryopenssldir="$ALT_openssl_WITHVAL" fi -{ echo "$as_me:$LINENO: result: $ac_cv_type___int64" >&5 -echo "${ECHO_T}$ac_cv_type___int64" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of __int64" >&5 -echo $ECHO_N "checking size of __int64... $ECHO_C" >&6; } -if test "${ac_cv_sizeof___int64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +tor_saved_LIBS="$LIBS" +tor_saved_LDFLAGS="$LDFLAGS" +tor_saved_CPPFLAGS="$CPPFLAGS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl directory" >&5 +$as_echo_n "checking for openssl directory... " >&6; } +if ${tor_cv_library_openssl_dir+:} false; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + + tor_openssl_dir_found=no + tor_openssl_any_linkable=no + + for tor_trydir in "$tryopenssldir" "(system)" "$prefix" /usr/local /usr/pkg /usr/local/openssl /usr/lib/openssl /usr/local/ssl /usr/lib/ssl /usr/local /usr/athena /opt/openssl; do + LDFLAGS="$tor_saved_LDFLAGS" + LIBS="$tor_saved_LIBS -lssl -lcrypto $TOR_LIB_GDI" + CPPFLAGS="$tor_saved_CPPFLAGS" + + if test -z "$tor_trydir" ; then + continue; + fi + + # Skip the directory if it isn't there. + if test ! -d "$tor_trydir" && test "$tor_trydir" != "(system)"; then + continue; + fi + + # If this isn't blank, try adding the directory (or appropriate + # include/libs subdirectories) to the command line. + if test "$tor_trydir" != "(system)"; then + + if test -d "$tor_trydir/lib"; then + LDFLAGS="-L$tor_trydir/lib $LDFLAGS" + else + LDFLAGS="-L$tor_trydir $LDFLAGS" + fi + if test -d "$tor_trydir/include"; then + CPPFLAGS="-I$tor_trydir/include $CPPFLAGS" + else + CPPFLAGS="-I$tor_trydir $CPPFLAGS" + fi + + fi + + # Can we link against (but not necessarily run, or find the headers for) + # the binary? + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef __int64 ac__type_sizeof_; +void RAND_add(const void *buf, int num, double entropy); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - +RAND_add((void*)0,0,0); exit(0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + linkable=yes +else + linkable=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + if test "$linkable" = yes; then + tor_openssl_any_linkable=yes + # Okay, we can link against it. Can we find the headers? + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef __int64 ac__type_sizeof_; +#include int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - +RAND_add((void*)0,0,0); exit(0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +if ac_fn_c_try_compile "$LINENO"; then : + buildable=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + buildable=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "$buildable" = yes; then + tor_cv_library_openssl_dir=$tor_trydir + tor_openssl_dir_found=yes + break + fi + fi done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef __int64 ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 + if test "$tor_openssl_dir_found" = no; then + if test "$tor_openssl_any_linkable" = no ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find a linkable openssl. If you have it installed somewhere unusual, you can specify an explicit path using --with-openssl-dir" >&5 +$as_echo "$as_me: WARNING: Could not find a linkable openssl. If you have it installed somewhere unusual, you can specify an explicit path using --with-openssl-dir" >&2;} - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef __int64 ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 +h="" +if test xpkg = xdevpkg; then + h=" headers for" +fi +if test -f /etc/debian_version && test x"$tor_openssl_pkg_debian" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Debian, you can install$h openssl using \"apt-get install $tor_openssl_pkg_debian\"" >&5 +$as_echo "$as_me: WARNING: On Debian, you can install$h openssl using \"apt-get install $tor_openssl_pkg_debian\"" >&2;} + if test x"$tor_openssl_pkg_debian" != x"$tor_openssl_devpkg_debian"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need $tor_openssl_devpkg_debian too." >&5 +$as_echo "$as_me: WARNING: You will probably need $tor_openssl_devpkg_debian too." >&2;} + fi +fi +if test -f /etc/fedora-release && test x"$tor_openssl_pkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Fedora Core, you can install$h openssl using \"yum install $tor_openssl_pkg_redhat\"" >&5 +$as_echo "$as_me: WARNING: On Fedora Core, you can install$h openssl using \"yum install $tor_openssl_pkg_redhat\"" >&2;} + if test x"$tor_openssl_pkg_redhat" != x"$tor_openssl_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&2;} + fi +else + if test -f /etc/redhat-release && test x"$tor_openssl_pkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On most Redhat-based systems, you can get$h openssl by installing the $tor_openssl_pkg_redhat\" RPM package" >&5 +$as_echo "$as_me: WARNING: On most Redhat-based systems, you can get$h openssl by installing the $tor_openssl_pkg_redhat\" RPM package" >&2;} + if test x"$tor_openssl_pkg_redhat" != x"$tor_openssl_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&2;} + fi + fi +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break + as_fn_error $? "Missing libraries; unable to proceed." "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: We found the libraries for openssl, but we could not find the C header files. You may need to install a devel package." >&5 +$as_echo "$as_me: WARNING: We found the libraries for openssl, but we could not find the C header files. You may need to install a devel package." >&2;} + +h="" +if test xdevpkg = xdevpkg; then + h=" headers for" +fi +if test -f /etc/debian_version && test x"$tor_openssl_devpkg_debian" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Debian, you can install$h openssl using \"apt-get install $tor_openssl_devpkg_debian\"" >&5 +$as_echo "$as_me: WARNING: On Debian, you can install$h openssl using \"apt-get install $tor_openssl_devpkg_debian\"" >&2;} + if test x"$tor_openssl_devpkg_debian" != x"$tor_openssl_devpkg_debian"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need $tor_openssl_devpkg_debian too." >&5 +$as_echo "$as_me: WARNING: You will probably need $tor_openssl_devpkg_debian too." >&2;} + fi +fi +if test -f /etc/fedora-release && test x"$tor_openssl_devpkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Fedora Core, you can install$h openssl using \"yum install $tor_openssl_devpkg_redhat\"" >&5 +$as_echo "$as_me: WARNING: On Fedora Core, you can install$h openssl using \"yum install $tor_openssl_devpkg_redhat\"" >&2;} + if test x"$tor_openssl_devpkg_redhat" != x"$tor_openssl_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&2;} + fi else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -f /etc/redhat-release && test x"$tor_openssl_devpkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On most Redhat-based systems, you can get$h openssl by installing the $tor_openssl_devpkg_redhat\" RPM package" >&5 +$as_echo "$as_me: WARNING: On most Redhat-based systems, you can get$h openssl by installing the $tor_openssl_devpkg_redhat\" RPM package" >&2;} + if test x"$tor_openssl_devpkg_redhat" != x"$tor_openssl_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_openssl_devpkg_redhat too." >&2;} + fi + fi +fi + + as_fn_error $? "Missing headers; unable to proceed." "$LINENO" 5 + fi + fi + + LDFLAGS="$tor_saved_LDFLAGS" + LIBS="$tor_saved_LIBS" + CPPFLAGS="$tor_saved_CPPFLAGS" - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_library_openssl_dir" >&5 +$as_echo "$tor_cv_library_openssl_dir" >&6; } +LIBS="$LIBS -lssl -lcrypto $TOR_LIB_GDI" +if test "$tor_cv_library_openssl_dir" != "(system)"; then -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -d "$tor_cv_library_openssl_dir/lib"; then + LDFLAGS="-L$tor_cv_library_openssl_dir/lib $LDFLAGS" + else + LDFLAGS="-L$tor_cv_library_openssl_dir $LDFLAGS" + fi + if test -d "$tor_cv_library_openssl_dir/include"; then + CPPFLAGS="-I$tor_cv_library_openssl_dir/include $CPPFLAGS" + else + CPPFLAGS="-I$tor_cv_library_openssl_dir $CPPFLAGS" + fi + +fi + + + if test x$tor_cv_library_openssl_dir = "x(system)"; then + TOR_LDFLAGS_openssl="" + TOR_CPPFLAGS_openssl="" + else + if test -d "$tor_cv_library_openssl_dir/lib"; then + TOR_LDFLAGS_openssl="-L$tor_cv_library_openssl_dir/lib" + TOR_LIBDIR_openssl="$tor_cv_library_openssl_dir/lib" + else + TOR_LDFLAGS_openssl="-L$tor_cv_library_openssl_dir" + TOR_LIBDIR_openssl="$tor_cv_library_openssl_dir" + fi + if test -d "$tor_cv_library_openssl_dir/include"; then + TOR_CPPFLAGS_openssl="-I$tor_cv_library_openssl_dir/include" + else + TOR_CPPFLAGS_openssl="-I$tor_cv_library_openssl_dir" + fi + fi - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef __int64 ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid +if test "$cross_compiling" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need extra options to link openssl" >&5 +$as_echo_n "checking whether we need extra options to link openssl... " >&6; } +if ${tor_cv_library_openssl_linker_option+:} false; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof___int64=$ac_lo;; -'') if test "$ac_cv_type___int64" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (__int64) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (__int64) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } + orig_LDFLAGS="$LDFLAGS" + runs=no + linked_with=nothing + if test -d "$tor_cv_library_openssl_dir/lib"; then + tor_trydir="$tor_cv_library_openssl_dir/lib" else - ac_cv_sizeof___int64=0 - fi ;; -esac + tor_trydir="$tor_cv_library_openssl_dir" + fi + for tor_tryextra in "(none)" "-Wl,-R$tor_trydir" "-R$tor_trydir" \ + "-Wl,-rpath,$tor_trydir" ; do + if test "$tor_tryextra" = "(none)"; then + LDFLAGS="$orig_LDFLAGS" + else + LDFLAGS="$tor_tryextra $orig_LDFLAGS" + fi + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef __int64 ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include +void RAND_add(const void *buf, int num, double entropy); int main () { - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - +RAND_add((void*)0,0,0); exit(0); ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof___int64=`cat conftest.val` +if ac_fn_c_try_run "$LINENO"; then : + runnable=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type___int64" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (__int64) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (__int64) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof___int64=0 - fi + runnable=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f conftest.val + + if test "$runnable" = yes; then + tor_cv_library_openssl_linker_option=$tor_tryextra + break + fi + done + + if test "$runnable" = no; then + as_fn_error $? "Found linkable openssl in $tor_cv_library_openssl_dir, but it does not seem to run, even with -R. Maybe specify another using --with-openssl-dir}" "$LINENO" 5 + fi + LDFLAGS="$orig_LDFLAGS" + fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof___int64" >&5 -echo "${ECHO_T}$ac_cv_sizeof___int64" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_library_openssl_linker_option" >&5 +$as_echo "$tor_cv_library_openssl_linker_option" >&6; } + if test "$tor_cv_library_openssl_linker_option" != "(none)" ; then + TOR_LDFLAGS_openssl="$TOR_LDFLAGS_openssl $tor_cv_library_openssl_linker_option" + fi +fi # cross-compile +LIBS="$tor_saved_LIBS" +LDFLAGS="$tor_saved_LDFLAGS" +CPPFLAGS="$tor_saved_CPPFLAGS" -cat >>confdefs.h <<_ACEOF -#define SIZEOF___INT64 $ac_cv_sizeof___int64 -_ACEOF -{ echo "$as_me:$LINENO: checking for void *" >&5 -echo $ECHO_N "checking for void *... $ECHO_C" >&6; } -if test "${ac_cv_type_void_p+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef void * ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_void_p=yes +echo "tor_cv_library_openssl_dir is $tor_cv_library_openssl_dir" +if test "$enable_static_openssl" = "yes"; then + if test "$tor_cv_library_openssl_dir" = "(system)"; then + as_fn_error $? "\"You must specify an explicit --with-openssl-dir=x option when using --enable-static-openssl\"" "$LINENO" 5 + else + TOR_OPENSSL_LIBS="$TOR_LIBDIR_openssl/libssl.a $TOR_LIBDIR_openssl/libcrypto.a" + fi else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_void_p=no + TOR_OPENSSL_LIBS="-lssl -lcrypto" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_void_p" >&5 -echo "${ECHO_T}$ac_cv_type_void_p" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of void *" >&5 -echo $ECHO_N "checking size of void *... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_void_p+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef void * ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef void * ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +tor_zlib_pkg_redhat="zlib" +tor_zlib_pkg_debian="zlib1g" +tor_zlib_devpkg_redhat="zlib-devel" +tor_zlib_devpkg_debian="zlib1g-dev" - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi +tryzlibdir="" -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# Check whether --with-zlib-dir was given. +if test "${with_zlib_dir+set}" = set; then : + withval=$with_zlib_dir; + if test x$withval != xno ; then + tryzlibdir="$withval" + fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef void * ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef void * ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 +if test "x$tryzlibdir" = x && test "x$ALT_zlib_WITHVAL" != x ; then + tryzlibdir="$ALT_zlib_WITHVAL" +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +tor_saved_LIBS="$LIBS" +tor_saved_LDFLAGS="$LDFLAGS" +tor_saved_CPPFLAGS="$CPPFLAGS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlib directory" >&5 +$as_echo_n "checking for zlib directory... " >&6; } +if ${tor_cv_library_zlib_dir+:} false; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi + tor_zlib_dir_found=no + tor_zlib_any_linkable=no + + for tor_trydir in "$tryzlibdir" "(system)" "$prefix" /usr/local /usr/pkg /opt/zlib; do + LDFLAGS="$tor_saved_LDFLAGS" + LIBS="$tor_saved_LIBS -lz" + CPPFLAGS="$tor_saved_CPPFLAGS" -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -z "$tor_trydir" ; then + continue; + fi - ac_lo= ac_hi= -fi + # Skip the directory if it isn't there. + if test ! -d "$tor_trydir" && test "$tor_trydir" != "(system)"; then + continue; + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi + # If this isn't blank, try adding the directory (or appropriate + # include/libs subdirectories) to the command line. + if test "$tor_trydir" != "(system)"; then -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + if test -d "$tor_trydir/lib"; then + LDFLAGS="-L$tor_trydir/lib $LDFLAGS" + else + LDFLAGS="-L$tor_trydir $LDFLAGS" + fi + if test -d "$tor_trydir/include"; then + CPPFLAGS="-I$tor_trydir/include $CPPFLAGS" + else + CPPFLAGS="-I$tor_trydir $CPPFLAGS" + fi + + fi + + # Can we link against (but not necessarily run, or find the headers for) + # the binary? + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef void * ac__type_sizeof_; +const char * zlibVersion(void); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - +zlibVersion(); exit(0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid +if ac_fn_c_try_link "$LINENO"; then : + linkable=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` + linkable=no fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_void_p=$ac_lo;; -'') if test "$ac_cv_type_void_p" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (void *) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_void_p=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + if test "$linkable" = yes; then + tor_zlib_any_linkable=yes + # Okay, we can link against it. Can we find the headers? + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef void * ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include +#include int main () { - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - +zlibVersion(); exit(0); ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_void_p=`cat conftest.val` +if ac_fn_c_try_compile "$LINENO"; then : + buildable=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + buildable=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "$buildable" = yes; then + tor_cv_library_zlib_dir=$tor_trydir + tor_zlib_dir_found=yes + break + fi + fi + done -( exit $ac_status ) -if test "$ac_cv_type_void_p" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (void *) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (void *) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_void_p=0 - fi + if test "$tor_zlib_dir_found" = no; then + if test "$tor_zlib_any_linkable" = no ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not find a linkable zlib. If you have it installed somewhere unusual, you can specify an explicit path using --with-zlib-dir" >&5 +$as_echo "$as_me: WARNING: Could not find a linkable zlib. If you have it installed somewhere unusual, you can specify an explicit path using --with-zlib-dir" >&2;} + +h="" +if test xpkg = xdevpkg; then + h=" headers for" fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +if test -f /etc/debian_version && test x"$tor_zlib_pkg_debian" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Debian, you can install$h zlib using \"apt-get install $tor_zlib_pkg_debian\"" >&5 +$as_echo "$as_me: WARNING: On Debian, you can install$h zlib using \"apt-get install $tor_zlib_pkg_debian\"" >&2;} + if test x"$tor_zlib_pkg_debian" != x"$tor_zlib_devpkg_debian"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need $tor_zlib_devpkg_debian too." >&5 +$as_echo "$as_me: WARNING: You will probably need $tor_zlib_devpkg_debian too." >&2;} + fi fi -rm -f conftest.val +if test -f /etc/fedora-release && test x"$tor_zlib_pkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Fedora Core, you can install$h zlib using \"yum install $tor_zlib_pkg_redhat\"" >&5 +$as_echo "$as_me: WARNING: On Fedora Core, you can install$h zlib using \"yum install $tor_zlib_pkg_redhat\"" >&2;} + if test x"$tor_zlib_pkg_redhat" != x"$tor_zlib_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&2;} + fi +else + if test -f /etc/redhat-release && test x"$tor_zlib_pkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On most Redhat-based systems, you can get$h zlib by installing the $tor_zlib_pkg_redhat\" RPM package" >&5 +$as_echo "$as_me: WARNING: On most Redhat-based systems, you can get$h zlib by installing the $tor_zlib_pkg_redhat\" RPM package" >&2;} + if test x"$tor_zlib_pkg_redhat" != x"$tor_zlib_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&2;} + fi + fi fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_void_p" >&5 -echo "${ECHO_T}$ac_cv_sizeof_void_p" >&6; } - + as_fn_error $? "Missing libraries; unable to proceed." "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: We found the libraries for zlib, but we could not find the C header files. You may need to install a devel package." >&5 +$as_echo "$as_me: WARNING: We found the libraries for zlib, but we could not find the C header files. You may need to install a devel package." >&2;} -cat >>confdefs.h <<_ACEOF -#define SIZEOF_VOID_P $ac_cv_sizeof_void_p -_ACEOF +h="" +if test xdevpkg = xdevpkg; then + h=" headers for" +fi +if test -f /etc/debian_version && test x"$tor_zlib_devpkg_debian" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Debian, you can install$h zlib using \"apt-get install $tor_zlib_devpkg_debian\"" >&5 +$as_echo "$as_me: WARNING: On Debian, you can install$h zlib using \"apt-get install $tor_zlib_devpkg_debian\"" >&2;} + if test x"$tor_zlib_devpkg_debian" != x"$tor_zlib_devpkg_debian"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need $tor_zlib_devpkg_debian too." >&5 +$as_echo "$as_me: WARNING: You will probably need $tor_zlib_devpkg_debian too." >&2;} + fi +fi +if test -f /etc/fedora-release && test x"$tor_zlib_devpkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On Fedora Core, you can install$h zlib using \"yum install $tor_zlib_devpkg_redhat\"" >&5 +$as_echo "$as_me: WARNING: On Fedora Core, you can install$h zlib using \"yum install $tor_zlib_devpkg_redhat\"" >&2;} + if test x"$tor_zlib_devpkg_redhat" != x"$tor_zlib_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&2;} + fi +else + if test -f /etc/redhat-release && test x"$tor_zlib_devpkg_redhat" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: On most Redhat-based systems, you can get$h zlib by installing the $tor_zlib_devpkg_redhat\" RPM package" >&5 +$as_echo "$as_me: WARNING: On most Redhat-based systems, you can get$h zlib by installing the $tor_zlib_devpkg_redhat\" RPM package" >&2;} + if test x"$tor_zlib_devpkg_redhat" != x"$tor_zlib_devpkg_redhat"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&5 +$as_echo "$as_me: WARNING: You will probably need to install $tor_zlib_devpkg_redhat too." >&2;} + fi + fi +fi + as_fn_error $? "Missing headers; unable to proceed." "$LINENO" 5 + fi + fi -{ echo "$as_me:$LINENO: checking for time_t" >&5 -echo $ECHO_N "checking for time_t... $ECHO_C" >&6; } -if test "${ac_cv_type_time_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef time_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_time_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + LDFLAGS="$tor_saved_LDFLAGS" + LIBS="$tor_saved_LIBS" + CPPFLAGS="$tor_saved_CPPFLAGS" - ac_cv_type_time_t=no fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_library_zlib_dir" >&5 +$as_echo "$tor_cv_library_zlib_dir" >&6; } +LIBS="$LIBS -lz" +if test "$tor_cv_library_zlib_dir" != "(system)"; then + + if test -d "$tor_cv_library_zlib_dir/lib"; then + LDFLAGS="-L$tor_cv_library_zlib_dir/lib $LDFLAGS" + else + LDFLAGS="-L$tor_cv_library_zlib_dir $LDFLAGS" + fi + if test -d "$tor_cv_library_zlib_dir/include"; then + CPPFLAGS="-I$tor_cv_library_zlib_dir/include $CPPFLAGS" + else + CPPFLAGS="-I$tor_cv_library_zlib_dir $CPPFLAGS" + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_time_t" >&5 -echo "${ECHO_T}$ac_cv_type_time_t" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of time_t" >&5 -echo $ECHO_N "checking size of time_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_time_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + if test x$tor_cv_library_zlib_dir = "x(system)"; then + TOR_LDFLAGS_zlib="" + TOR_CPPFLAGS_zlib="" + else + if test -d "$tor_cv_library_zlib_dir/lib"; then + TOR_LDFLAGS_zlib="-L$tor_cv_library_zlib_dir/lib" + TOR_LIBDIR_zlib="$tor_cv_library_zlib_dir/lib" + else + TOR_LDFLAGS_zlib="-L$tor_cv_library_zlib_dir" + TOR_LIBDIR_zlib="$tor_cv_library_zlib_dir" + fi + if test -d "$tor_cv_library_zlib_dir/include"; then + TOR_CPPFLAGS_zlib="-I$tor_cv_library_zlib_dir/include" + else + TOR_CPPFLAGS_zlib="-I$tor_cv_library_zlib_dir" + fi + fi + + + + +if test "$cross_compiling" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need extra options to link zlib" >&5 +$as_echo_n "checking whether we need extra options to link zlib... " >&6; } +if ${tor_cv_library_zlib_linker_option+:} false; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef time_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + orig_LDFLAGS="$LDFLAGS" + runs=no + linked_with=nothing + if test -d "$tor_cv_library_zlib_dir/lib"; then + tor_trydir="$tor_cv_library_zlib_dir/lib" + else + tor_trydir="$tor_cv_library_zlib_dir" + fi + for tor_tryextra in "(none)" "-Wl,-R$tor_trydir" "-R$tor_trydir" \ + "-Wl,-rpath,$tor_trydir" ; do + if test "$tor_tryextra" = "(none)"; then + LDFLAGS="$orig_LDFLAGS" + else + LDFLAGS="$tor_tryextra $orig_LDFLAGS" + fi + if test "$cross_compiling" = yes; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run test program while cross compiling +See \`config.log' for more details" "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef time_t ac__type_sizeof_; +const char * zlibVersion(void); int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - +zlibVersion(); exit(0); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +if ac_fn_c_try_run "$LINENO"; then : + runnable=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + runnable=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test "$runnable" = yes; then + tor_cv_library_zlib_linker_option=$tor_tryextra + break + fi + done + + if test "$runnable" = no; then + as_fn_error $? "Found linkable zlib in $tor_cv_library_zlib_dir, but it does not seem to run, even with -R. Maybe specify another using --with-zlib-dir}" "$LINENO" 5 + fi + LDFLAGS="$orig_LDFLAGS" - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_library_zlib_linker_option" >&5 +$as_echo "$tor_cv_library_zlib_linker_option" >&6; } + if test "$tor_cv_library_zlib_linker_option" != "(none)" ; then + TOR_LDFLAGS_zlib="$TOR_LDFLAGS_zlib $tor_cv_library_zlib_linker_option" + fi +fi # cross-compile -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +LIBS="$tor_saved_LIBS" +LDFLAGS="$tor_saved_LDFLAGS" +CPPFLAGS="$tor_saved_CPPFLAGS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef time_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef time_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +if test "$enable_static_zlib" = "yes"; then + if test "$tor_cv_library_zlib_dir" = "(system)"; then + as_fn_error $? "\"You must specify an explicit --with-zlib-dir=x option when + using --enable-static-zlib\"" "$LINENO" 5 + else + TOR_ZLIB_LIBS="$TOR_LIBDIR_zlib/libz.a" + echo "$TOR_LIBDIR_zlib/libz.a" + fi else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + TOR_ZLIB_LIBS="-lz" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if ${ac_cv_sys_largefile_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef time_t ac__type_sizeof_; +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_lo=`expr '(' $ac_mid ')' + 1` + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_time_t=$ac_lo;; -'') if test "$ac_cv_type_time_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (time_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (time_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_time_t=0 - fi ;; -esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if ${ac_cv_sys_file_offset_bits+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef time_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; int main () { - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_time_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_time_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (time_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (time_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_time_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_time_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_time_t" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_TIME_T $ac_cv_sizeof_time_t -_ACEOF - - -{ echo "$as_me:$LINENO: checking for size_t" >&5 -echo $ECHO_N "checking for size_t... $ECHO_C" >&6; } -if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -typedef size_t ac__type_new_; +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; int main () { -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_size_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_size_t=no +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 -echo "${ECHO_T}$ac_cv_type_size_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of size_t" >&5 -echo $ECHO_N "checking size of size_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if ${ac_cv_sys_large_files+:} false; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef size_t ac__type_sizeof_; +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef size_t ac__type_sizeof_; +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break +rm -rf conftest* + fi +fi + + +for ac_header in unistd.h string.h signal.h sys/stat.h sys/types.h fcntl.h sys/fcntl.h sys/time.h errno.h assert.h time.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Some headers were not found" >&5 +$as_echo "$as_me: WARNING: Some headers were not found" >&2;} +fi + +done + + +for ac_header in netdb.h sys/ioctl.h sys/socket.h arpa/inet.h netinet/in.h pwd.h grp.h sys/un.h sys/uio.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +done - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ + + +for ac_header in stdint.h sys/types.h inttypes.h sys/param.h sys/wait.h limits.h sys/limits.h netinet/in.h arpa/inet.h machine/limits.h syslog.h sys/time.h sys/resource.h inttypes.h utime.h sys/utime.h sys/mman.h netinet/in6.h malloc.h sys/syslimits.h malloc/malloc.h linux/types.h sys/file.h malloc_np.h sys/prctl.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +fi + +done + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of malloc_good_size" >&5 +$as_echo_n "checking for declaration of malloc_good_size... " >&6; } +if ${tor_cv_malloc_good_size_declared+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef size_t ac__type_sizeof_; +#ifdef HAVE_MALLOC_H +#include +#endif +#ifdef HAVE_MALLOC_MALLOC_H +#include +#endif int main () { -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - +void *ptr= malloc_good_size ; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef size_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 +if ac_fn_c_try_compile "$LINENO"; then : + tor_cv_malloc_good_size_declared=yes +else + tor_cv_malloc_good_size_declared=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_malloc_good_size_declared" >&5 +$as_echo "$tor_cv_malloc_good_size_declared" >&6; } +if test x$tor_cv_malloc_good_size_declared != xno ; then - ; - return 0; -} +$as_echo "#define HAVE_MALLOC_GOOD_SIZE_PROTOTYPE 1" >>confdefs.h + +fi + + +for ac_header in net/if.h +do : + ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +" +if test "x$ac_cv_header_net_if_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NET_IF_H 1 _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break + net_if_found=1 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + net_if_found=0 +fi - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` +done + +for ac_header in net/pfvar.h +do : + ac_fn_c_check_header_compile "$LINENO" "net/pfvar.h" "ac_cv_header_net_pfvar_h" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NET_IF_H +#include +#endif +" +if test "x$ac_cv_header_net_pfvar_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NET_PFVAR_H 1 +_ACEOF + net_pfvar_found=1 +else + net_pfvar_found=0 fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done +done + +for ac_header in linux/netfilter_ipv4.h +do : + ac_fn_c_check_header_compile "$LINENO" "linux/netfilter_ipv4.h" "ac_cv_header_linux_netfilter_ipv4_h" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_LIMITS_H +#include +#endif +#ifdef HAVE_LINUX_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN6_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +" +if test "x$ac_cv_header_linux_netfilter_ipv4_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LINUX_NETFILTER_IPV4_H 1 +_ACEOF + linux_netfilter_ipv4=1 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + linux_netfilter_ipv4=0 +fi + +done + + +if test x$transparent = xtrue ; then + transparent_ok=0 + if test x$net_if_found = x1 && test x$net_pfvar_found = x1 ; then + transparent_ok=1 + fi + if test x$linux_netfilter_ipv4 = x1 ; then + transparent_ok=1 + fi + if test x$transparent_ok = x1 ; then + +$as_echo "#define USE_TRANSPARENT 1" >>confdefs.h + + case $host in + *-*-openbsd*) + +$as_echo "#define OPENBSD 1" >>confdefs.h + ;; + esac + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Transparent proxy support enabled, but missing headers." >&5 +$as_echo "$as_me: Transparent proxy support enabled, but missing headers." >&6;} + fi +fi + +ac_fn_c_check_member "$LINENO" "struct timeval" "tv_sec" "ac_cv_member_struct_timeval_tv_sec" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +" +if test "x$ac_cv_member_struct_timeval_tv_sec" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_TIMEVAL_TV_SEC 1 +_ACEOF + + +fi + + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int8_t" >&5 +$as_echo_n "checking size of int8_t... " >&6; } +if ${ac_cv_sizeof_int8_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int8_t))" "ac_cv_sizeof_int8_t" "$ac_includes_default"; then : - ac_lo= ac_hi= +else + if test "$ac_cv_type_int8_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int8_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int8_t=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int8_t" >&5 +$as_echo "$ac_cv_sizeof_int8_t" >&6; } -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef size_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_size_t=$ac_lo;; -'') if test "$ac_cv_type_size_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (size_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_size_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT8_T $ac_cv_sizeof_int8_t _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef size_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_size_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int16_t" >&5 +$as_echo_n "checking size of int16_t... " >&6; } +if ${ac_cv_sizeof_int16_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int16_t))" "ac_cv_sizeof_int16_t" "$ac_includes_default"; then : -( exit $ac_status ) -if test "$ac_cv_type_size_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (size_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } +else + if test "$ac_cv_type_int16_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int16_t) +See \`config.log' for more details" "$LINENO" 5; } else - ac_cv_sizeof_size_t=0 + ac_cv_sizeof_int16_t=0 fi fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val + fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_size_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_size_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int16_t" >&5 +$as_echo "$ac_cv_sizeof_int16_t" >&6; } cat >>confdefs.h <<_ACEOF -#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t +#define SIZEOF_INT16_T $ac_cv_sizeof_int16_t _ACEOF +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int32_t" >&5 +$as_echo_n "checking size of int32_t... " >&6; } +if ${ac_cv_sizeof_int32_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int32_t))" "ac_cv_sizeof_int32_t" "$ac_includes_default"; then : -{ echo "$as_me:$LINENO: checking for uint" >&5 -echo $ECHO_N "checking for uint... $ECHO_C" >&6; } -if test "${ac_cv_type_uint+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef uint ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_uint=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_uint=no + if test "$ac_cv_type_int32_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int32_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int32_t=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_uint" >&5 -echo "${ECHO_T}$ac_cv_type_uint" >&6; } -if test $ac_cv_type_uint = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int32_t" >&5 +$as_echo "$ac_cv_sizeof_int32_t" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_UINT 1 +#define SIZEOF_INT32_T $ac_cv_sizeof_int32_t _ACEOF -fi -{ echo "$as_me:$LINENO: checking for u_char" >&5 -echo $ECHO_N "checking for u_char... $ECHO_C" >&6; } -if test "${ac_cv_type_u_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef u_char ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_u_char=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int64_t" >&5 +$as_echo_n "checking size of int64_t... " >&6; } +if ${ac_cv_sizeof_int64_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int64_t))" "ac_cv_sizeof_int64_t" "$ac_includes_default"; then : - ac_cv_type_u_char=no +else + if test "$ac_cv_type_int64_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int64_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int64_t=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_u_char" >&5 -echo "${ECHO_T}$ac_cv_type_u_char" >&6; } -if test $ac_cv_type_u_char = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int64_t" >&5 +$as_echo "$ac_cv_sizeof_int64_t" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_U_CHAR 1 +#define SIZEOF_INT64_T $ac_cv_sizeof_int64_t _ACEOF -fi -{ echo "$as_me:$LINENO: checking for ssize_t" >&5 -echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6; } -if test "${ac_cv_type_ssize_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -typedef ssize_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_ssize_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint8_t" >&5 +$as_echo_n "checking size of uint8_t... " >&6; } +if ${ac_cv_sizeof_uint8_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint8_t))" "ac_cv_sizeof_uint8_t" "$ac_includes_default"; then : - ac_cv_type_ssize_t=no +else + if test "$ac_cv_type_uint8_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (uint8_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_uint8_t=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5 -echo "${ECHO_T}$ac_cv_type_ssize_t" >&6; } -if test $ac_cv_type_ssize_t = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint8_t" >&5 +$as_echo "$ac_cv_sizeof_uint8_t" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_SSIZE_T 1 +#define SIZEOF_UINT8_T $ac_cv_sizeof_uint8_t _ACEOF +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint16_t" >&5 +$as_echo_n "checking size of uint16_t... " >&6; } +if ${ac_cv_sizeof_uint16_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint16_t))" "ac_cv_sizeof_uint16_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_uint16_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (uint16_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_uint16_t=0 + fi fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint16_t" >&5 +$as_echo "$ac_cv_sizeof_uint16_t" >&6; } -{ echo "$as_me:$LINENO: checking for struct in6_addr" >&5 -echo $ECHO_N "checking for struct in6_addr... $ECHO_C" >&6; } -if test "${ac_cv_type_struct_in6_addr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif -typedef struct in6_addr ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UINT16_T $ac_cv_sizeof_uint16_t _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_struct_in6_addr=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_type_struct_in6_addr=no + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint32_t" >&5 +$as_echo_n "checking size of uint32_t... " >&6; } +if ${ac_cv_sizeof_uint32_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint32_t))" "ac_cv_sizeof_uint32_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_uint32_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (uint32_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_uint32_t=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_in6_addr" >&5 -echo "${ECHO_T}$ac_cv_type_struct_in6_addr" >&6; } -if test $ac_cv_type_struct_in6_addr = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint32_t" >&5 +$as_echo "$ac_cv_sizeof_uint32_t" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_IN6_ADDR 1 +#define SIZEOF_UINT32_T $ac_cv_sizeof_uint32_t _ACEOF -fi -{ echo "$as_me:$LINENO: checking for struct sockaddr_in6" >&5 -echo $ECHO_N "checking for struct sockaddr_in6... $ECHO_C" >&6; } -if test "${ac_cv_type_struct_sockaddr_in6+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint64_t" >&5 +$as_echo_n "checking size of uint64_t... " >&6; } +if ${ac_cv_sizeof_uint64_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint64_t))" "ac_cv_sizeof_uint64_t" "$ac_includes_default"; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif + if test "$ac_cv_type_uint64_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (uint64_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_uint64_t=0 + fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint64_t" >&5 +$as_echo "$ac_cv_sizeof_uint64_t" >&6; } -typedef struct sockaddr_in6 ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UINT64_T $ac_cv_sizeof_uint64_t _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_struct_sockaddr_in6=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_type_struct_sockaddr_in6=no + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of intptr_t" >&5 +$as_echo_n "checking size of intptr_t... " >&6; } +if ${ac_cv_sizeof_intptr_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (intptr_t))" "ac_cv_sizeof_intptr_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_intptr_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (intptr_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_intptr_t=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_struct_sockaddr_in6" >&5 -echo "${ECHO_T}$ac_cv_type_struct_sockaddr_in6" >&6; } -if test $ac_cv_type_struct_sockaddr_in6 = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_intptr_t" >&5 +$as_echo "$ac_cv_sizeof_intptr_t" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SOCKADDR_IN6 1 +#define SIZEOF_INTPTR_T $ac_cv_sizeof_intptr_t _ACEOF -fi -{ echo "$as_me:$LINENO: checking for sa_family_t" >&5 -echo $ECHO_N "checking for sa_family_t... $ECHO_C" >&6; } -if test "${ac_cv_type_sa_family_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uintptr_t" >&5 +$as_echo_n "checking size of uintptr_t... " >&6; } +if ${ac_cv_sizeof_uintptr_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uintptr_t))" "ac_cv_sizeof_uintptr_t" "$ac_includes_default"; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif + if test "$ac_cv_type_uintptr_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (uintptr_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_uintptr_t=0 + fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uintptr_t" >&5 +$as_echo "$ac_cv_sizeof_uintptr_t" >&6; } -typedef sa_family_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_UINTPTR_T $ac_cv_sizeof_uintptr_t _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_sa_family_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_type_sa_family_t=no + + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 +$as_echo_n "checking size of char... " >&6; } +if ${ac_cv_sizeof_char+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_char" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (char) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_char=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_sa_family_t" >&5 -echo "${ECHO_T}$ac_cv_type_sa_family_t" >&6; } -if test $ac_cv_type_sa_family_t = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 +$as_echo "$ac_cv_sizeof_char" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_SA_FAMILY_T 1 +#define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF -fi +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if ${ac_cv_sizeof_short+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : -{ echo "$as_me:$LINENO: checking for struct in6_addr.s6_addr32" >&5 -echo $ECHO_N "checking for struct in6_addr.s6_addr32... $ECHO_C" >&6; } -if test "${ac_cv_member_struct_in6_addr_s6_addr32+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif + if test "$ac_cv_type_short" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (short) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_short=0 + fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } -int -main () -{ -static struct in6_addr ac_aggr; -if (ac_aggr.s6_addr32) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_in6_addr_s6_addr32=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif -int -main () -{ -static struct in6_addr ac_aggr; -if (sizeof ac_aggr.s6_addr32) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_in6_addr_s6_addr32=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if ${ac_cv_sizeof_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : - ac_cv_member_struct_in6_addr_s6_addr32=no +else + if test "$ac_cv_type_int" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } + -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_in6_addr_s6_addr32" >&5 -echo "${ECHO_T}$ac_cv_member_struct_in6_addr_s6_addr32" >&6; } -if test $ac_cv_member_struct_in6_addr_s6_addr32 = yes; then cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_IN6_ADDR_S6_ADDR32 1 +#define SIZEOF_INT $ac_cv_sizeof_int _ACEOF -fi -{ echo "$as_me:$LINENO: checking for struct in6_addr.s6_addr16" >&5 -echo $ECHO_N "checking for struct in6_addr.s6_addr16... $ECHO_C" >&6; } -if test "${ac_cv_member_struct_in6_addr_s6_addr16+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if ${ac_cv_sizeof_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -int -main () -{ -static struct in6_addr ac_aggr; -if (ac_aggr.s6_addr16) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_in6_addr_s6_addr16=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif -int -main () -{ -static struct in6_addr ac_aggr; -if (sizeof ac_aggr.s6_addr16) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_in6_addr_s6_addr16=yes +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if ${ac_cv_sizeof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test "$ac_cv_type_long_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long_long=0 + fi +fi - ac_cv_member_struct_in6_addr_s6_addr16=no fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of __int64" >&5 +$as_echo_n "checking size of __int64... " >&6; } +if ${ac_cv_sizeof___int64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (__int64))" "ac_cv_sizeof___int64" "$ac_includes_default"; then : + +else + if test "$ac_cv_type___int64" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (__int64) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof___int64=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_in6_addr_s6_addr16" >&5 -echo "${ECHO_T}$ac_cv_member_struct_in6_addr_s6_addr16" >&6; } -if test $ac_cv_member_struct_in6_addr_s6_addr16 = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof___int64" >&5 +$as_echo "$ac_cv_sizeof___int64" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_IN6_ADDR_S6_ADDR16 1 +#define SIZEOF___INT64 $ac_cv_sizeof___int64 _ACEOF -fi -{ echo "$as_me:$LINENO: checking for struct sockaddr_in.sin_len" >&5 -echo $ECHO_N "checking for struct sockaddr_in.sin_len... $ECHO_C" >&6; } -if test "${ac_cv_member_struct_sockaddr_in_sin_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +$as_echo_n "checking size of void *... " >&6; } +if ${ac_cv_sizeof_void_p+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif + if test "$ac_cv_type_void_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (void *) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_void_p=0 + fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +$as_echo "$ac_cv_sizeof_void_p" >&6; } -int -main () -{ -static struct sockaddr_in ac_aggr; -if (ac_aggr.sin_len) -return 0; - ; - return 0; -} + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_sockaddr_in_sin_len=yes + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 +$as_echo_n "checking size of time_t... " >&6; } +if ${ac_cv_sizeof_time_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test "$ac_cv_type_time_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (time_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_time_t=0 + fi +fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef MS_WINDOWS -#define WIN32_WINNT 0x400 -#define _WIN32_WINNT 0x400 -#define WIN32_LEAN_AND_MEAN -#if defined(_MSC_VER) && (_MSC_VER < 1300) -#include -#else -#include -#include -#endif -#endif +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 +$as_echo "$ac_cv_sizeof_time_t" >&6; } -int -main () -{ -static struct sockaddr_in ac_aggr; -if (sizeof ac_aggr.sin_len) -return 0; - ; - return 0; -} + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_TIME_T $ac_cv_sizeof_time_t _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_sockaddr_in_sin_len=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_cv_member_struct_sockaddr_in_sin_len=no + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5 +$as_echo_n "checking size of size_t... " >&6; } +if ${ac_cv_sizeof_size_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_size_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (size_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_size_t=0 + fi fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5 +$as_echo "$ac_cv_sizeof_size_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t +_ACEOF + + + +ac_fn_c_check_type "$LINENO" "uint" "ac_cv_type_uint" "$ac_includes_default" +if test "x$ac_cv_type_uint" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_UINT 1 +_ACEOF + -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_in_sin_len" >&5 -echo "${ECHO_T}$ac_cv_member_struct_sockaddr_in_sin_len" >&6; } -if test $ac_cv_member_struct_sockaddr_in_sin_len = yes; then +ac_fn_c_check_type "$LINENO" "u_char" "ac_cv_type_u_char" "$ac_includes_default" +if test "x$ac_cv_type_u_char" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 1 +#define HAVE_U_CHAR 1 _ACEOF fi -{ echo "$as_me:$LINENO: checking for struct sockaddr_in6.sin6_len" >&5 -echo $ECHO_N "checking for struct sockaddr_in6.sin6_len... $ECHO_C" >&6; } -if test "${ac_cv_member_struct_sockaddr_in6_sin6_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SSIZE_T 1 _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H + + +fi + + +ac_fn_c_check_type "$LINENO" "struct in6_addr" "ac_cv_type_struct_in6_addr" "#ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_NETINET_IN_H @@ -17487,46 +8129,16 @@ #endif #endif +" +if test "x$ac_cv_type_struct_in6_addr" = xyes; then : -int -main () -{ -static struct sockaddr_in6 ac_aggr; -if (ac_aggr.sin6_len) -return 0; - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_IN6_ADDR 1 _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_sockaddr_in6_sin6_len=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H + +fi +ac_fn_c_check_type "$LINENO" "struct sockaddr_in6" "ac_cv_type_struct_sockaddr_in6" "#ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_NETINET_IN_H @@ -17550,1050 +8162,358 @@ #endif #endif - -int -main () -{ -static struct sockaddr_in6 ac_aggr; -if (sizeof ac_aggr.sin6_len) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_member_struct_sockaddr_in6_sin6_len=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_member_struct_sockaddr_in6_sin6_len=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_in6_sin6_len" >&5 -echo "${ECHO_T}$ac_cv_member_struct_sockaddr_in6_sin6_len" >&6; } -if test $ac_cv_member_struct_sockaddr_in6_sin6_len = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN 1 -_ACEOF - - -fi - - -{ echo "$as_me:$LINENO: checking for rlim_t" >&5 -echo $ECHO_N "checking for rlim_t... $ECHO_C" >&6; } -if test "${ac_cv_type_rlim_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_SYS_RESOURCE_H -#include -#endif - - -typedef rlim_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_rlim_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_rlim_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_rlim_t" >&5 -echo "${ECHO_T}$ac_cv_type_rlim_t" >&6; } -if test $ac_cv_type_rlim_t = yes; then +" +if test "x$ac_cv_type_struct_sockaddr_in6" = xyes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_RLIM_T 1 +#define HAVE_STRUCT_SOCKADDR_IN6 1 _ACEOF fi - - -{ echo "$as_me:$LINENO: checking whether time_t is signed" >&5 -echo $ECHO_N "checking whether time_t is signed... $ECHO_C" >&6; } -if test "${tor_cv_time_t_signed+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - -if test "$cross_compiling" = yes; then - tor_cv_time_t_signed=cross -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#ifdef HAVE_SYS_TYPES_H +ac_fn_c_check_type "$LINENO" "sa_family_t" "ac_cv_type_sa_family_t" "#ifdef HAVE_SYS_TYPES_H #include #endif -#ifdef HAVE_SYS_TIME_H -#include +#ifdef HAVE_NETINET_IN_H +#include #endif -#ifdef HAVE_TIME_H -#include +#ifdef HAVE_NETINET_IN6_H +#include #endif -int main(int c, char**v) { if (((time_t)-1)<0) return 1; else return 0; } -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - tor_cv_time_t_signed=no -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -tor_cv_time_t_signed=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - - -fi -{ echo "$as_me:$LINENO: result: $tor_cv_time_t_signed" >&5 -echo "${ECHO_T}$tor_cv_time_t_signed" >&6; } - -if test "$tor_cv_time_t_signed" = cross; then - { echo "$as_me:$LINENO: Cross compiling: assuming that time_t is signed." >&5 -echo "$as_me: Cross compiling: assuming that time_t is signed." >&6;} -fi - -if test "$tor_cv_time_t_signed" != no; then - -cat >>confdefs.h <<\_ACEOF -#define TIME_T_IS_SIGNED 1 -_ACEOF - -fi - -{ echo "$as_me:$LINENO: checking for socklen_t" >&5 -echo $ECHO_N "checking for socklen_t... $ECHO_C" >&6; } -if test "${ac_cv_type_socklen_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default #ifdef HAVE_SYS_SOCKET_H #include #endif - - -typedef socklen_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_socklen_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_socklen_t=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_socklen_t" >&5 -echo "${ECHO_T}$ac_cv_type_socklen_t" >&6; } - -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of socklen_t" >&5 -echo $ECHO_N "checking size of socklen_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_socklen_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#ifdef HAVE_SYS_SOCKET_H -#include +#ifdef MS_WINDOWS +#define WIN32_WINNT 0x400 +#define _WIN32_WINNT 0x400 +#define WIN32_LEAN_AND_MEAN +#if defined(_MSC_VER) && (_MSC_VER < 1300) +#include +#else +#include +#include #endif - - - typedef socklen_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#ifdef HAVE_SYS_SOCKET_H -#include #endif +" +if test "x$ac_cv_type_sa_family_t" = xyes; then : - typedef socklen_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_SA_FAMILY_T 1 _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default +ac_fn_c_check_member "$LINENO" "struct in6_addr" "s6_addr32" "ac_cv_member_struct_in6_addr_s6_addr32" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_NETINET_IN6_H +#include +#endif #ifdef HAVE_SYS_SOCKET_H #include #endif +#ifdef MS_WINDOWS +#define WIN32_WINNT 0x400 +#define _WIN32_WINNT 0x400 +#define WIN32_LEAN_AND_MEAN +#if defined(_MSC_VER) && (_MSC_VER < 1300) +#include +#else +#include +#include +#endif +#endif +" +if test "x$ac_cv_member_struct_in6_addr_s6_addr32" = xyes; then : - typedef socklen_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_IN6_ADDR_S6_ADDR32 1 _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default + + +fi +ac_fn_c_check_member "$LINENO" "struct in6_addr" "s6_addr16" "ac_cv_member_struct_in6_addr_s6_addr16" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_NETINET_IN6_H +#include +#endif #ifdef HAVE_SYS_SOCKET_H #include #endif +#ifdef MS_WINDOWS +#define WIN32_WINNT 0x400 +#define _WIN32_WINNT 0x400 +#define WIN32_LEAN_AND_MEAN +#if defined(_MSC_VER) && (_MSC_VER < 1300) +#include +#else +#include +#include +#endif +#endif +" +if test "x$ac_cv_member_struct_in6_addr_s6_addr16" = xyes; then : - typedef socklen_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_IN6_ADDR_S6_ADDR16 1 _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default +ac_fn_c_check_member "$LINENO" "struct sockaddr_in" "sin_len" "ac_cv_member_struct_sockaddr_in_sin_len" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_NETINET_IN6_H +#include +#endif #ifdef HAVE_SYS_SOCKET_H #include #endif +#ifdef MS_WINDOWS +#define WIN32_WINNT 0x400 +#define _WIN32_WINNT 0x400 +#define WIN32_LEAN_AND_MEAN +#if defined(_MSC_VER) && (_MSC_VER < 1300) +#include +#else +#include +#include +#endif +#endif +" +if test "x$ac_cv_member_struct_sockaddr_in_sin_len" = xyes; then : - typedef socklen_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_IN_SIN_LEN 1 _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_socklen_t=$ac_lo;; -'') if test "$ac_cv_type_socklen_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (socklen_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (socklen_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_socklen_t=0 - fi ;; -esac -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default +fi +ac_fn_c_check_member "$LINENO" "struct sockaddr_in6" "sin6_len" "ac_cv_member_struct_sockaddr_in6_sin6_len" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_NETINET_IN6_H +#include +#endif #ifdef HAVE_SYS_SOCKET_H #include #endif +#ifdef MS_WINDOWS +#define WIN32_WINNT 0x400 +#define _WIN32_WINNT 0x400 +#define WIN32_LEAN_AND_MEAN +#if defined(_MSC_VER) && (_MSC_VER < 1300) +#include +#else +#include +#include +#endif +#endif + +" +if test "x$ac_cv_member_struct_sockaddr_in6_sin6_len" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN 1 +_ACEOF - typedef socklen_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_socklen_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -if test "$ac_cv_type_socklen_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (socklen_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (socklen_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_socklen_t=0 - fi -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_socklen_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_socklen_t" >&6; } +ac_fn_c_check_type "$LINENO" "rlim_t" "ac_cv_type_rlim_t" "#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_SYS_RESOURCE_H +#include +#endif + +" +if test "x$ac_cv_type_rlim_t" = xyes; then : cat >>confdefs.h <<_ACEOF -#define SIZEOF_SOCKLEN_T $ac_cv_sizeof_socklen_t +#define HAVE_RLIM_T 1 _ACEOF +fi + -# We want to make sure that we _don't_ have a cell_t defined, like IRIX does. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time_t is signed" >&5 +$as_echo_n "checking whether time_t is signed... " >&6; } +if ${tor_cv_time_t_signed+:} false; then : + $as_echo_n "(cached) " >&6 +else -{ echo "$as_me:$LINENO: checking for cell_t" >&5 -echo $ECHO_N "checking for cell_t... $ECHO_C" >&6; } -if test "${ac_cv_type_cell_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "$cross_compiling" = yes; then : + tor_cv_time_t_signed=cross else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -typedef cell_t ac__type_new_; -int -main () -{ -if ((ac__type_new_ *) 0) - return 0; -if (sizeof (ac__type_new_)) - return 0; - ; - return 0; -} + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_TIME_H +#include +#endif +int main(int c, char**v) { if (((time_t)-1)<0) return 1; else return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_type_cell_t=yes +if ac_fn_c_try_run "$LINENO"; then : + tor_cv_time_t_signed=no else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_type_cell_t=no + tor_cv_time_t_signed=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi -{ echo "$as_me:$LINENO: result: $ac_cv_type_cell_t" >&5 -echo "${ECHO_T}$ac_cv_type_cell_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_time_t_signed" >&5 +$as_echo "$tor_cv_time_t_signed" >&6; } -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ echo "$as_me:$LINENO: checking size of cell_t" >&5 -echo $ECHO_N "checking size of cell_t... $ECHO_C" >&6; } -if test "${ac_cv_sizeof_cell_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef cell_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= 0)]; -test_array [0] = 0 +if test "$tor_cv_time_t_signed" = cross; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Cross compiling: assuming that time_t is signed." >&5 +$as_echo "$as_me: Cross compiling: assuming that time_t is signed." >&6;} +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef cell_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +if test "$tor_cv_time_t_signed" != no; then - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +$as_echo "#define TIME_T_IS_SIGNED 1" >>confdefs.h - ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether size_t is signed" >&5 +$as_echo_n "checking whether size_t is signed... " >&6; } +if ${tor_cv_size_t_signed+:} false; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef cell_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) < 0)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if test "$cross_compiling" = yes; then : + tor_cv_size_t_signed=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default - typedef cell_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) >= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} +#ifdef HAVE_SYS_TYPES_H +#include +#endif +int main(int c, char**v) { if (((size_t)-1)<0) return 1; else return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_lo=$ac_mid; break +if ac_fn_c_try_run "$LINENO"; then : + tor_cv_size_t_signed=no else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` + tor_cv_size_t_signed=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - ac_lo= ac_hi= fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_size_t_signed" >&5 +$as_echo "$tor_cv_size_t_signed" >&6; } -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if test "$tor_cv_size_t_signed" = cross; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Cross compiling: assuming that size_t is not signed." >&5 +$as_echo "$as_me: Cross compiling: assuming that size_t is not signed." >&6;} fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef cell_t ac__type_sizeof_; -int -main () -{ -static int test_array [1 - 2 * !(((long int) (sizeof (ac__type_sizeof_))) <= $ac_mid)]; -test_array [0] = 0 +if test "$tor_cv_size_t_signed" = yes; then + as_fn_error $? "You have a signed size_t; that's grossly nonconformant." "$LINENO" 5 +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_hi=$ac_mid +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of socklen_t" >&5 +$as_echo_n "checking size of socklen_t... " >&6; } +if ${ac_cv_sizeof_socklen_t+:} false; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (socklen_t))" "ac_cv_sizeof_socklen_t" "$ac_includes_default +#ifdef HAVE_SYS_SOCKET_H +#include +#endif - ac_lo=`expr '(' $ac_mid ')' + 1` -fi +"; then : -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_cell_t=$ac_lo;; -'') if test "$ac_cv_type_cell_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (cell_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (cell_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } - else - ac_cv_sizeof_cell_t=0 - fi ;; -esac else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - typedef cell_t ac__type_sizeof_; -static long int longval () { return (long int) (sizeof (ac__type_sizeof_)); } -static unsigned long int ulongval () { return (long int) (sizeof (ac__type_sizeof_)); } -#include -#include -int -main () -{ + if test "$ac_cv_type_socklen_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (socklen_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_socklen_t=0 + fi +fi - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (((long int) (sizeof (ac__type_sizeof_))) < 0) - { - long int i = longval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%ld\n", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ((long int) (sizeof (ac__type_sizeof_)))) - return 1; - fprintf (f, "%lu\n", i); - } - return ferror (f) || fclose (f) != 0; +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_socklen_t" >&5 +$as_echo "$ac_cv_sizeof_socklen_t" >&6; } - ; - return 0; -} + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SOCKLEN_T $ac_cv_sizeof_socklen_t _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_cell_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -( exit $ac_status ) -if test "$ac_cv_type_cell_t" = yes; then - { { echo "$as_me:$LINENO: error: cannot compute sizeof (cell_t) -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (cell_t) -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } + + +# We want to make sure that we _don't_ have a cell_t defined, like IRIX does. + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of cell_t" >&5 +$as_echo_n "checking size of cell_t... " >&6; } +if ${ac_cv_sizeof_cell_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (cell_t))" "ac_cv_sizeof_cell_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_cell_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (cell_t) +See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_cell_t=0 fi fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.val + fi -{ echo "$as_me:$LINENO: result: $ac_cv_sizeof_cell_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_cell_t" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_cell_t" >&5 +$as_echo "$ac_cv_sizeof_cell_t" >&6; } @@ -18604,19 +8524,15 @@ # Now make sure that NULL can be represented as zero bytes. -{ echo "$as_me:$LINENO: checking whether memset(0) sets pointers to NULL" >&5 -echo $ECHO_N "checking whether memset(0) sets pointers to NULL... $ECHO_C" >&6; } -if test "${tor_cv_null_is_zero+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memset(0) sets pointers to NULL" >&5 +$as_echo_n "checking whether memset(0) sets pointers to NULL... " >&6; } +if ${tor_cv_null_is_zero+:} false; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : tor_cv_null_is_zero=cross else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -18627,71 +8543,41 @@ int main () { char *p1,*p2; p1=NULL; memset(&p2,0,sizeof(p2)); return memcmp(&p1,&p2,sizeof(char*))?1:0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : tor_cv_null_is_zero=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -tor_cv_null_is_zero=no + tor_cv_null_is_zero=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi -{ echo "$as_me:$LINENO: result: $tor_cv_null_is_zero" >&5 -echo "${ECHO_T}$tor_cv_null_is_zero" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_null_is_zero" >&5 +$as_echo "$tor_cv_null_is_zero" >&6; } if test "$tor_cv_null_is_zero" = cross ; then # Cross-compiling; let's hope that the target isn't raving mad. - { echo "$as_me:$LINENO: Cross-compiling: we'll assume that NULL is represented as a sequence of 0-valued bytes." >&5 -echo "$as_me: Cross-compiling: we'll assume that NULL is represented as a sequence of 0-valued bytes." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Cross-compiling: we'll assume that NULL is represented as a sequence of 0-valued bytes." >&5 +$as_echo "$as_me: Cross-compiling: we'll assume that NULL is represented as a sequence of 0-valued bytes." >&6;} fi if test "$tor_cv_null_is_zero" != no; then -cat >>confdefs.h <<\_ACEOF -#define NULL_REP_IS_ZERO_BYTES 1 -_ACEOF +$as_echo "#define NULL_REP_IS_ZERO_BYTES 1" >>confdefs.h fi # And what happens when we malloc zero? -{ echo "$as_me:$LINENO: checking whether we can malloc(0) safely." >&5 -echo $ECHO_N "checking whether we can malloc(0) safely.... $ECHO_C" >&6; } -if test "${tor_cv_malloc_zero_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can malloc(0) safely." >&5 +$as_echo_n "checking whether we can malloc(0) safely.... " >&6; } +if ${tor_cv_malloc_zero_works+:} false; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : tor_cv_malloc_zero_works=cross else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -18701,304 +8587,152 @@ #endif int main () { return malloc(0)?0:1; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : tor_cv_malloc_zero_works=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -tor_cv_malloc_zero_works=no + tor_cv_malloc_zero_works=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi -{ echo "$as_me:$LINENO: result: $tor_cv_malloc_zero_works" >&5 -echo "${ECHO_T}$tor_cv_malloc_zero_works" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_malloc_zero_works" >&5 +$as_echo "$tor_cv_malloc_zero_works" >&6; } if test "$tor_cv_malloc_zero_works" = cross; then # Cross-compiling; let's hope that the target isn't raving mad. - { echo "$as_me:$LINENO: Cross-compiling: we'll assume that we need to check malloc() arguments for 0." >&5 -echo "$as_me: Cross-compiling: we'll assume that we need to check malloc() arguments for 0." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Cross-compiling: we'll assume that we need to check malloc() arguments for 0." >&5 +$as_echo "$as_me: Cross-compiling: we'll assume that we need to check malloc() arguments for 0." >&6;} fi if test "$tor_cv_malloc_zero_works" = yes; then -cat >>confdefs.h <<\_ACEOF -#define MALLOC_ZERO_WORKS 1 -_ACEOF +$as_echo "#define MALLOC_ZERO_WORKS 1" >>confdefs.h fi # whether we seem to be in a 2s-complement world. -{ echo "$as_me:$LINENO: checking whether we are using 2s-complement arithmetic" >&5 -echo $ECHO_N "checking whether we are using 2s-complement arithmetic... $ECHO_C" >&6; } -if test "${tor_cv_twos_complement+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using 2s-complement arithmetic" >&5 +$as_echo_n "checking whether we are using 2s-complement arithmetic... " >&6; } +if ${tor_cv_twos_complement+:} false; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : tor_cv_twos_complement=cross else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { int problem = ((-99) != (~99)+1); return problem ? 1 : 0; } _ACEOF -rm -f conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : tor_cv_twos_complement=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -tor_cv_twos_complement=no + tor_cv_twos_complement=no fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi - fi -{ echo "$as_me:$LINENO: result: $tor_cv_twos_complement" >&5 -echo "${ECHO_T}$tor_cv_twos_complement" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_twos_complement" >&5 +$as_echo "$tor_cv_twos_complement" >&6; } if test "$tor_cv_twos_complement" = cross ; then # Cross-compiling; let's hope that the target isn't raving mad. - { echo "$as_me:$LINENO: Cross-compiling: we'll assume that negative integers are represented with two's complement." >&5 -echo "$as_me: Cross-compiling: we'll assume that negative integers are represented with two's complement." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Cross-compiling: we'll assume that negative integers are represented with two's complement." >&5 +$as_echo "$as_me: Cross-compiling: we'll assume that negative integers are represented with two's complement." >&6;} fi if test "$tor_cv_twos_complement" != no ; then -cat >>confdefs.h <<\_ACEOF -#define USING_TWOS_COMPLEMENT 1 -_ACEOF +$as_echo "#define USING_TWOS_COMPLEMENT 1" >>confdefs.h fi -# Whether we should use the dmalloc memory allocation debugging library. -{ echo "$as_me:$LINENO: checking whether to use dmalloc (debug memory allocation library)" >&5 -echo $ECHO_N "checking whether to use dmalloc (debug memory allocation library)... $ECHO_C" >&6; } - -# Check whether --with-dmalloc was given. -if test "${with_dmalloc+set}" = set; then - withval=$with_dmalloc; if [ "$withval" = "yes" ]; then - dmalloc=1 - { echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6; } -else - dmalloc=1 - { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } -fi +# What does shifting a negative value do? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether right-shift on negative values does sign-extension" >&5 +$as_echo_n "checking whether right-shift on negative values does sign-extension... " >&6; } +if ${tor_cv_sign_extend+:} false; then : + $as_echo_n "(cached) " >&6 else - dmalloc=0; { echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; } - -fi - - -if [ $dmalloc -eq 1 ]; then - -for ac_header in dmalloc.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } + if test "$cross_compiling" = yes; then : + tor_cv_sign_extend=cross else - # Is the header compilable? -{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> +int main () { int okay = (-60 >> 8) == -1; return okay ? 0 : 1; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes +if ac_fn_c_try_run "$LINENO"; then : + tor_cv_sign_extend=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + tor_cv_sign_extend=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi - ac_header_compiler=no fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_sign_extend" >&5 +$as_echo "$tor_cv_sign_extend" >&6; } -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6; } +if test "$tor_cv_sign_extend" = cross ; then + # Cross-compiling; let's hope that the target isn't raving mad. + { $as_echo "$as_me:${as_lineno-$LINENO}: Cross-compiling: we'll assume that right-shifting negative integers causes sign-extension" >&5 +$as_echo "$as_me: Cross-compiling: we'll assume that right-shifting negative integers causes sign-extension" >&6;} +fi -# Is the header present? -{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if test "$tor_cv_sign_extend" != no ; then - ac_header_preproc=no -fi +$as_echo "#define RSHIFT_DOES_SIGN_EXTEND 1" >>confdefs.h -rm -f conftest.err conftest.$ac_ext -{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6; } +fi -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} +# Whether we should use the dmalloc memory allocation debugging library. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use dmalloc (debug memory allocation library)" >&5 +$as_echo_n "checking whether to use dmalloc (debug memory allocation library)... " >&6; } - ;; -esac -{ echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Check whether --with-dmalloc was given. +if test "${with_dmalloc+set}" = set; then : + withval=$with_dmalloc; if [ "$withval" = "yes" ]; then + dmalloc=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - eval "$as_ac_Header=\$ac_header_preproc" + dmalloc=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -ac_res=`eval echo '${'$as_ac_Header'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } +else + dmalloc=0; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + + +if [ $dmalloc -eq 1 ]; then + for ac_header in dmalloc.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "dmalloc.h" "ac_cv_header_dmalloc_h" "$ac_includes_default" +if test "x$ac_cv_header_dmalloc_h" = xyes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_DMALLOC_H 1 _ACEOF else - { { echo "$as_me:$LINENO: error: dmalloc header file not found. Do you have the development files for dmalloc installed?" >&5 -echo "$as_me: error: dmalloc header file not found. Do you have the development files for dmalloc installed?" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "dmalloc header file not found. Do you have the development files for dmalloc installed?" "$LINENO" 5 fi done - { echo "$as_me:$LINENO: checking for library containing dmalloc_malloc" >&5 -echo $ECHO_N "checking for library containing dmalloc_malloc... $ECHO_C" >&6; } -if test "${ac_cv_search_dmalloc_malloc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dmalloc_malloc" >&5 +$as_echo_n "checking for library containing dmalloc_malloc... " >&6; } +if ${ac_cv_search_dmalloc_malloc+:} false; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. @@ -19023,158 +8757,46 @@ ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then + if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dmalloc_malloc=$ac_res -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_dmalloc_malloc+set}" = set; then +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dmalloc_malloc+:} false; then : break fi done -if test "${ac_cv_search_dmalloc_malloc+set}" = set; then - : +if ${ac_cv_search_dmalloc_malloc+:} false; then : + else ac_cv_search_dmalloc_malloc=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ echo "$as_me:$LINENO: result: $ac_cv_search_dmalloc_malloc" >&5 -echo "${ECHO_T}$ac_cv_search_dmalloc_malloc" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dmalloc_malloc" >&5 +$as_echo "$ac_cv_search_dmalloc_malloc" >&6; } ac_res=$ac_cv_search_dmalloc_malloc -if test "$ac_res" != no; then +if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else - { { echo "$as_me:$LINENO: error: Libdmalloc library not found. If you enable it you better have it installed." >&5 -echo "$as_me: error: Libdmalloc library not found. If you enable it you better have it installed." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "Libdmalloc library not found. If you enable it you better have it installed." "$LINENO" 5 fi -cat >>confdefs.h <<\_ACEOF -#define USE_DMALLOC 1 -_ACEOF - - -cat >>confdefs.h <<\_ACEOF -#define DMALLOC_FUNC_CHECK 1 -_ACEOF - - - -for ac_func in dmalloc_strdup dmalloc_strndup -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif +$as_echo "#define USE_DMALLOC 1" >>confdefs.h -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi +$as_echo "#define DMALLOC_FUNC_CHECK 1" >>confdefs.h -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in dmalloc_strdup dmalloc_strndup +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -19184,7 +8806,7 @@ # Check whether --with-tcmalloc was given. -if test "${with_tcmalloc+set}" = set; then +if test "${with_tcmalloc+set}" = set; then : withval=$with_tcmalloc; tcmalloc=yes else tcmalloc=no @@ -19195,113 +8817,61 @@ LDFLAGS="-ltcmalloc $LDFLAGS" fi -# Allow user to specify an alternate syslog facility +# By default, we're going to assume we don't have mlockall() +# bionic and other platforms have various broken mlockall subsystems. +# Some systems don't have a working mlockall, some aren't linkable, +# and some have it but don't declare it. +for ac_func in mlockall +do : + ac_fn_c_check_func "$LINENO" "mlockall" "ac_cv_func_mlockall" +if test "x$ac_cv_func_mlockall" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MLOCKALL 1 +_ACEOF -# Check whether --with-syslog-facility was given. -if test "${with_syslog_facility+set}" = set; then - withval=$with_syslog_facility; syslog_facility="$withval" -else - syslog_facility="LOG_DAEMON" fi +done +ac_fn_c_check_decl "$LINENO" "mlockall" "ac_cv_have_decl_mlockall" " +#ifdef HAVE_SYS_MMAN_H +#include +#endif +" +if test "x$ac_cv_have_decl_mlockall" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi cat >>confdefs.h <<_ACEOF -#define LOGFACILITY $syslog_facility +#define HAVE_DECL_MLOCKALL $ac_have_decl _ACEOF +# Allow user to specify an alternate syslog facility -# Check if we have getresuid and getresgid - - -for ac_func in getresuid getresgid -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Check whether --with-syslog-facility was given. +if test "${with_syslog_facility+set}" = set; then : + withval=$with_syslog_facility; syslog_facility="$withval" else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func + syslog_facility="LOG_DAEMON" +fi -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$ac_func || defined __stub___$ac_func -choke me -#endif -int -main () -{ -return $ac_func (); - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define LOGFACILITY $syslog_facility _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - eval "$as_ac_var=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval echo '${'$as_ac_var'}'` - { echo "$as_me:$LINENO: result: $ac_res" >&5 -echo "${ECHO_T}$ac_res" >&6; } -if test `eval echo '${'$as_ac_var'}'` = yes; then + +# Check if we have getresuid and getresgid +for ac_func in getresuid getresgid +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -19312,99 +8882,14 @@ # (This logic is based on that in Python's configure.in) +ac_fn_c_check_func "$LINENO" "gethostbyname_r" "ac_cv_func_gethostbyname_r" +if test "x$ac_cv_func_gethostbyname_r" = xyes; then : -{ echo "$as_me:$LINENO: checking for gethostbyname_r" >&5 -echo $ECHO_N "checking for gethostbyname_r... $ECHO_C" >&6; } -if test "${ac_cv_func_gethostbyname_r+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define gethostbyname_r to an innocuous variant, in case declares gethostbyname_r. - For example, HP-UX 11i declares gettimeofday. */ -#define gethostbyname_r innocuous_gethostbyname_r - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gethostbyname_r (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gethostbyname_r - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname_r (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_gethostbyname_r || defined __stub___gethostbyname_r -choke me -#endif - -int -main () -{ -return gethostbyname_r (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && - $as_test_x conftest$ac_exeext; then - ac_cv_func_gethostbyname_r=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_gethostbyname_r=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname_r" >&5 -echo "${ECHO_T}$ac_cv_func_gethostbyname_r" >&6; } -if test $ac_cv_func_gethostbyname_r = yes; then - - { echo "$as_me:$LINENO: checking how many arguments gethostbyname_r() wants" >&5 -echo $ECHO_N "checking how many arguments gethostbyname_r() wants... $ECHO_C" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how many arguments gethostbyname_r() wants" >&5 +$as_echo_n "checking how many arguments gethostbyname_r() wants... " >&6; } OLD_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19422,46 +8907,19 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : - cat >>confdefs.h <<\_ACEOF -#define HAVE_GETHOSTBYNAME_R 1 -_ACEOF + $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define HAVE_GETHOSTBYNAME_R_6_ARG 1 -_ACEOF +$as_echo "#define HAVE_GETHOSTBYNAME_R_6_ARG 1" >>confdefs.h - { echo "$as_me:$LINENO: result: 6" >&5 -echo "${ECHO_T}6" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: 6" >&5 +$as_echo "6" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19479,46 +8937,19 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : - cat >>confdefs.h <<\_ACEOF -#define HAVE_GETHOSTBYNAME_R 1 -_ACEOF + $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define HAVE_GETHOSTBYNAME_R_5_ARG 1 -_ACEOF +$as_echo "#define HAVE_GETHOSTBYNAME_R_5_ARG 1" >>confdefs.h - { echo "$as_me:$LINENO: result: 5" >&5 -echo "${ECHO_T}5" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: 5" >&5 +$as_echo "5" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -19536,201 +8967,112 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : - cat >>confdefs.h <<\_ACEOF -#define HAVE_GETHOSTBYNAME_R 1 -_ACEOF + $as_echo "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define HAVE_GETHOSTBYNAME_R_3_ARG 1 -_ACEOF +$as_echo "#define HAVE_GETHOSTBYNAME_R_3_ARG 1" >>confdefs.h - { echo "$as_me:$LINENO: result: 3" >&5 -echo "${ECHO_T}3" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: 3" >&5 +$as_echo "3" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - { echo "$as_me:$LINENO: result: 0" >&5 -echo "${ECHO_T}0" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0" >&5 +$as_echo "0" >&6; } fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS=$OLD_CFLAGS fi -{ echo "$as_me:$LINENO: checking whether the C compiler supports __func__" >&5 -echo $ECHO_N "checking whether the C compiler supports __func__... $ECHO_C" >&6; } -if test "${tor_cv_have_func_macro+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __func__" >&5 +$as_echo_n "checking whether the C compiler supports __func__... " >&6; } +if ${tor_cv_have_func_macro+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ #include int main(int c, char **v) { puts(__func__); } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tor_cv_have_func_macro=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tor_cv_have_func_macro=no + tor_cv_have_func_macro=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $tor_cv_have_func_macro" >&5 -echo "${ECHO_T}$tor_cv_have_func_macro" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_have_func_macro" >&5 +$as_echo "$tor_cv_have_func_macro" >&6; } -{ echo "$as_me:$LINENO: checking whether the C compiler supports __FUNC__" >&5 -echo $ECHO_N "checking whether the C compiler supports __FUNC__... $ECHO_C" >&6; } -if test "${tor_cv_have_FUNC_macro+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __FUNC__" >&5 +$as_echo_n "checking whether the C compiler supports __FUNC__... " >&6; } +if ${tor_cv_have_FUNC_macro+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ #include int main(int c, char **v) { puts(__FUNC__); } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tor_cv_have_FUNC_macro=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tor_cv_have_FUNC_macro=no + tor_cv_have_FUNC_macro=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $tor_cv_have_FUNC_macro" >&5 -echo "${ECHO_T}$tor_cv_have_FUNC_macro" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_have_FUNC_macro" >&5 +$as_echo "$tor_cv_have_FUNC_macro" >&6; } -{ echo "$as_me:$LINENO: checking whether the C compiler supports __FUNCTION__" >&5 -echo $ECHO_N "checking whether the C compiler supports __FUNCTION__... $ECHO_C" >&6; } -if test "${tor_cv_have_FUNCTION_macro+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler supports __FUNCTION__" >&5 +$as_echo_n "checking whether the C compiler supports __FUNCTION__... " >&6; } +if ${tor_cv_have_FUNCTION_macro+:} false; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ #include int main(int c, char **v) { puts(__FUNCTION__); } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : tor_cv_have_FUNCTION_macro=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - tor_cv_have_FUNCTION_macro=no + tor_cv_have_FUNCTION_macro=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -{ echo "$as_me:$LINENO: result: $tor_cv_have_FUNCTION_macro" >&5 -echo "${ECHO_T}$tor_cv_have_FUNCTION_macro" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $tor_cv_have_FUNCTION_macro" >&5 +$as_echo "$tor_cv_have_FUNCTION_macro" >&6; } if test "$tor_cv_have_func_macro" = 'yes'; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_MACRO__func__ 1 -_ACEOF +$as_echo "#define HAVE_MACRO__func__ 1" >>confdefs.h fi if test "$tor_cv_have_FUNC_macro" = 'yes'; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_MACRO__FUNC__ 1 -_ACEOF +$as_echo "#define HAVE_MACRO__FUNC__ 1" >>confdefs.h fi if test "$tor_cv_have_FUNCTION_macro" = 'yes'; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_MACRO__FUNCTION__ 1 -_ACEOF +$as_echo "#define HAVE_MACRO__FUNCTION__ 1" >>confdefs.h fi @@ -19751,7 +9093,6 @@ fi - cat >>confdefs.h <<_ACEOF #define CONFDIR "$CONFDIR" _ACEOF @@ -19762,28 +9103,66 @@ LOCALSTATEDIR=`eval echo $localstatedir` +if test "$bwin32" = true; then + # Test if the linker supports the --nxcompat and --dynamicbase options + # for Windows + save_LDFLAGS="$LDFLAGS" + LDFLAGS="-Wl,--nxcompat -Wl,--dynamicbase" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker supports DllCharacteristics" >&5 +$as_echo_n "checking whether the linker supports DllCharacteristics... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + save_LDFLAGS="$save_LDFLAGS $LDFLAGS" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi + # Set CFLAGS _after_ all the above checks, since our warnings are stricter # than autoconf's macros like. if test "$GCC" = yes; then - CFLAGS="$CFLAGS -Wall -g -O2" # Disable GCC's strict aliasing checks. They are an hours-to-debug # accident waiting to happen. - CFLAGS="$CFLAGS -fno-strict-aliasing" + CFLAGS="$CFLAGS -Wall -fno-strict-aliasing" else - CFLAGS="$CFLAGS -g -O" + # Autoconf sets -g -O2 by default. Override optimization level + # for non-gcc compilers + CFLAGS="$CFLAGS -O" enable_gcc_warnings=no enable_gcc_warnings_advisory=no fi +# OS X Lion started deprecating the system openssl. Let's just disable +# all deprecation warnings on OS X. +case "$host_os" in + + darwin*) + CFLAGS="$CFLAGS -Wno-deprecated-declarations" + ;; +esac + # Add some more warnings which we use in development but not in the # released versions. (Some relevant gcc versions can't handle these.) if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xyes; then - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -19797,38 +9176,14 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : have_gcc4=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - have_gcc4=no + have_gcc4=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -19842,38 +9197,14 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : have_gcc42=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - have_gcc42=no + have_gcc42=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -19887,40 +9218,37 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : have_gcc43=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - have_gcc43=no + have_gcc43=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#if !defined(__clang__) || (__clang_major__ > 2) || (__clang_major__ == 2 && __clang_minor__ > 9) +#error +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + have_clang29orlower=yes +else + have_clang29orlower=no +fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wshorten-64-to-32" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -19931,31 +9259,11 @@ return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then +if ac_fn_c_try_compile "$LINENO"; then : have_shorten64_flag=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - have_shorten64_flag=no + have_shorten64_flag=no fi - rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$save_CFLAGS" @@ -19982,12 +9290,19 @@ if test x$have_gcc42 = xyes ; then # These warnings break gcc 4.0.2 and work on gcc 4.2 - # XXXX020 Use -fstack-protector. # XXXX020 See if any of these work with earlier versions. - CFLAGS="$CFLAGS -Waddress -Wmissing-noreturn -Wnormalized=id -Woverride-init -Wstrict-overflow=1" + CFLAGS="$CFLAGS -Waddress -Wmissing-noreturn -Wstrict-overflow=1" + # We used to use -Wstrict-overflow=5, but that breaks us heavily under 4.3. fi + if test x$have_gcc42 = xyes && test x$have_clang29orlower = xno; then + # These warnings break gcc 4.0.2 and clang, but work on gcc 4.2 + # We only disable these for clang 2.9 and lower, in case they are + # supported in later versions. + CFLAGS="$CFLAGS -Wnormalized=id -Woverride-init" + fi + if test x$have_gcc43 = xyes ; then # These warnings break gcc 4.2 and work on gcc 4.3 # XXXX020 See if any of these work with earlier versions. @@ -20006,7 +9321,7 @@ CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent $TOR_CPPFLAGS_openssl $TOR_CPPFLAGS_zlib" -ac_config_files="$ac_config_files Makefile tor.spec Doxyfile contrib/tor.sh contrib/torctl contrib/torify contrib/tor.logrotate contrib/Makefile contrib/osx/Makefile contrib/osx/TorBundleDesc.plist contrib/osx/TorBundleInfo.plist contrib/osx/TorDesc.plist contrib/osx/TorInfo.plist contrib/osx/TorStartupDesc.plist src/config/torrc.sample doc/tor.1 src/Makefile doc/Makefile doc/design-paper/Makefile src/config/Makefile src/common/Makefile src/or/Makefile src/win32/Makefile src/tools/Makefile contrib/suse/Makefile contrib/suse/tor.sh" +ac_config_files="$ac_config_files Makefile tor.spec Doxyfile contrib/tor.sh contrib/torctl contrib/torify contrib/tor.logrotate contrib/Makefile src/config/torrc.sample src/Makefile doc/Makefile src/config/Makefile src/common/Makefile src/or/Makefile src/test/Makefile src/win32/Makefile src/tools/Makefile contrib/suse/Makefile contrib/suse/tor.sh" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -20035,12 +9350,13 @@ case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 -echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( - *) $as_unset $ac_var ;; + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done @@ -20048,8 +9364,8 @@ (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" @@ -20071,13 +9387,24 @@ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && - { echo "$as_me:$LINENO: updating cache $cache_file" >&5 -echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi else - { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 -echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -20090,55 +9417,63 @@ ac_libobjs= ac_ltlibobjs= +U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`echo "$ac_i" | sed "$ac_script"` + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + if test -z "${USE_OPENBSD_MALLOC_TRUE}" && test -z "${USE_OPENBSD_MALLOC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"USE_OPENBSD_MALLOC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"USE_OPENBSD_MALLOC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"USE_OPENBSD_MALLOC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_ASCIIDOC_TRUE}" && test -z "${USE_ASCIIDOC_FALSE}"; then + as_fn_error $? "conditional \"USE_ASCIIDOC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_NT_SERVICES_TRUE}" && test -z "${BUILD_NT_SERVICES_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"BUILD_NT_SERVICES\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"BUILD_NT_SERVICES\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "conditional \"BUILD_NT_SERVICES\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +if test -z "${USE_EXTERNAL_EVDNS_TRUE}" && test -z "${USE_EXTERNAL_EVDNS_FALSE}"; then + as_fn_error $? "conditional \"USE_EXTERNAL_EVDNS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -: ${CONFIG_STATUS=./config.status} +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -20148,59 +9483,79 @@ debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else - case `(set -o) 2>/dev/null` in - *posix*) set -o posix ;; + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; esac - fi - - -# PATH needs CR -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' fi - rm -f conf$$.sh + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' fi -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi @@ -20209,20 +9564,19 @@ # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) -as_nl=' -' IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. -case $0 in +as_myself= +case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done IFS=$as_save_IFS ;; @@ -20233,32 +9587,111 @@ as_myself=$0 fi if test ! -f "$as_myself"; then - echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - { (exit 1); exit 1; } + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 fi -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - fi -done +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + -# Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr @@ -20272,13 +9705,17 @@ as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -echo X/"$0" | +$as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -20293,104 +9730,103 @@ } s/.*/./; q'` -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. Blame Lee - # E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in +case `echo -n x` in #((((( -n*) - case `echo 'x\c'` in + case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir - mkdir conf$$.dir + mkdir conf$$.dir 2>/dev/null fi -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -p'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else as_ln_s='cp -p' -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln + fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false @@ -20407,12 +9843,12 @@ as_test_x=' eval sh -c '\'' if test -d "$1"; then - test -d "$1/."; + test -d "$1/."; else - case $1 in - -*)set "./$1";; + case $1 in #( + -*)set "./$1";; esac; - case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' @@ -20427,13 +9863,19 @@ exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Save the log message, to keep $[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.61. Invocation command line was +generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -20446,7 +9888,16 @@ _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" @@ -20454,22 +9905,25 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit - -q, --quiet do not print progress messages + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -20480,16 +9934,17 @@ Configuration commands: $config_commands -Report bugs to ." +Report bugs to the package provider." _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.61, - with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" -Copyright (C) 2006 Free Software Foundation, Inc. +Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -20497,20 +9952,26 @@ srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in - --*=*) + --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; *) ac_option=$1 ac_optarg=$2 @@ -20523,34 +9984,41 @@ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - echo "$ac_cs_version"; exit ;; + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - { echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; --help | --hel | -h ) - echo "$ac_cs_usage"; exit ;; + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" + *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac @@ -20565,27 +10033,29 @@ fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - CONFIG_SHELL=$SHELL + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' export CONFIG_SHELL - exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + exec "\$@" fi _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - echo "$ac_log" + $as_echo "$ac_log" } >&5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # @@ -20593,7 +10063,7 @@ _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets @@ -20609,28 +10079,19 @@ "contrib/torify") CONFIG_FILES="$CONFIG_FILES contrib/torify" ;; "contrib/tor.logrotate") CONFIG_FILES="$CONFIG_FILES contrib/tor.logrotate" ;; "contrib/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/Makefile" ;; - "contrib/osx/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/osx/Makefile" ;; - "contrib/osx/TorBundleDesc.plist") CONFIG_FILES="$CONFIG_FILES contrib/osx/TorBundleDesc.plist" ;; - "contrib/osx/TorBundleInfo.plist") CONFIG_FILES="$CONFIG_FILES contrib/osx/TorBundleInfo.plist" ;; - "contrib/osx/TorDesc.plist") CONFIG_FILES="$CONFIG_FILES contrib/osx/TorDesc.plist" ;; - "contrib/osx/TorInfo.plist") CONFIG_FILES="$CONFIG_FILES contrib/osx/TorInfo.plist" ;; - "contrib/osx/TorStartupDesc.plist") CONFIG_FILES="$CONFIG_FILES contrib/osx/TorStartupDesc.plist" ;; "src/config/torrc.sample") CONFIG_FILES="$CONFIG_FILES src/config/torrc.sample" ;; - "doc/tor.1") CONFIG_FILES="$CONFIG_FILES doc/tor.1" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "doc/design-paper/Makefile") CONFIG_FILES="$CONFIG_FILES doc/design-paper/Makefile" ;; "src/config/Makefile") CONFIG_FILES="$CONFIG_FILES src/config/Makefile" ;; "src/common/Makefile") CONFIG_FILES="$CONFIG_FILES src/common/Makefile" ;; "src/or/Makefile") CONFIG_FILES="$CONFIG_FILES src/or/Makefile" ;; + "src/test/Makefile") CONFIG_FILES="$CONFIG_FILES src/test/Makefile" ;; "src/win32/Makefile") CONFIG_FILES="$CONFIG_FILES src/win32/Makefile" ;; "src/tools/Makefile") CONFIG_FILES="$CONFIG_FILES src/tools/Makefile" ;; "contrib/suse/Makefile") CONFIG_FILES="$CONFIG_FILES contrib/suse/Makefile" ;; "contrib/suse/tor.sh") CONFIG_FILES="$CONFIG_FILES contrib/suse/tor.sh" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done @@ -20653,261 +10114,302 @@ # after its creation but before its name has been assigned to `$tmp'. $debug || { - tmp= + tmp= ac_tmp= trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" + test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# -# Set up the sed scripts for CONFIG_FILES section. -# +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then -_ACEOF - - - -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -SHELL!$SHELL$ac_delim -PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim -PACKAGE_NAME!$PACKAGE_NAME$ac_delim -PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim -PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim -PACKAGE_STRING!$PACKAGE_STRING$ac_delim -PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim -exec_prefix!$exec_prefix$ac_delim -prefix!$prefix$ac_delim -program_transform_name!$program_transform_name$ac_delim -bindir!$bindir$ac_delim -sbindir!$sbindir$ac_delim -libexecdir!$libexecdir$ac_delim -datarootdir!$datarootdir$ac_delim -datadir!$datadir$ac_delim -sysconfdir!$sysconfdir$ac_delim -sharedstatedir!$sharedstatedir$ac_delim -localstatedir!$localstatedir$ac_delim -includedir!$includedir$ac_delim -oldincludedir!$oldincludedir$ac_delim -docdir!$docdir$ac_delim -infodir!$infodir$ac_delim -htmldir!$htmldir$ac_delim -dvidir!$dvidir$ac_delim -pdfdir!$pdfdir$ac_delim -psdir!$psdir$ac_delim -libdir!$libdir$ac_delim -localedir!$localedir$ac_delim -mandir!$mandir$ac_delim -DEFS!$DEFS$ac_delim -ECHO_C!$ECHO_C$ac_delim -ECHO_N!$ECHO_N$ac_delim -ECHO_T!$ECHO_T$ac_delim -LIBS!$LIBS$ac_delim -build_alias!$build_alias$ac_delim -host_alias!$host_alias$ac_delim -target_alias!$target_alias$ac_delim -INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim -INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim -INSTALL_DATA!$INSTALL_DATA$ac_delim -am__isrc!$am__isrc$ac_delim -CYGPATH_W!$CYGPATH_W$ac_delim -PACKAGE!$PACKAGE$ac_delim -VERSION!$VERSION$ac_delim -ACLOCAL!$ACLOCAL$ac_delim -AUTOCONF!$AUTOCONF$ac_delim -AUTOMAKE!$AUTOMAKE$ac_delim -AUTOHEADER!$AUTOHEADER$ac_delim -MAKEINFO!$MAKEINFO$ac_delim -install_sh!$install_sh$ac_delim -STRIP!$STRIP$ac_delim -INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim -mkdir_p!$mkdir_p$ac_delim -AWK!$AWK$ac_delim -SET_MAKE!$SET_MAKE$ac_delim -am__leading_dot!$am__leading_dot$ac_delim -AMTAR!$AMTAR$ac_delim -am__tar!$am__tar$ac_delim -am__untar!$am__untar$ac_delim -build!$build$ac_delim -build_cpu!$build_cpu$ac_delim -build_vendor!$build_vendor$ac_delim -build_os!$build_os$ac_delim -host!$host$ac_delim -host_cpu!$host_cpu$ac_delim -host_vendor!$host_vendor$ac_delim -host_os!$host_os$ac_delim -USE_OPENBSD_MALLOC_TRUE!$USE_OPENBSD_MALLOC_TRUE$ac_delim -USE_OPENBSD_MALLOC_FALSE!$USE_OPENBSD_MALLOC_FALSE$ac_delim -CC!$CC$ac_delim -CFLAGS!$CFLAGS$ac_delim -LDFLAGS!$LDFLAGS$ac_delim -CPPFLAGS!$CPPFLAGS$ac_delim -ac_ct_CC!$ac_ct_CC$ac_delim -EXEEXT!$EXEEXT$ac_delim -OBJEXT!$OBJEXT$ac_delim -DEPDIR!$DEPDIR$ac_delim -am__include!$am__include$ac_delim -am__quote!$am__quote$ac_delim -AMDEP_TRUE!$AMDEP_TRUE$ac_delim -AMDEP_FALSE!$AMDEP_FALSE$ac_delim -AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim -CCDEPMODE!$CCDEPMODE$ac_delim -am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim -am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim -CPP!$CPP$ac_delim -RANLIB!$RANLIB$ac_delim -TORUSER!$TORUSER$ac_delim -TORGROUP!$TORGROUP$ac_delim -BUILD_NT_SERVICES_TRUE!$BUILD_NT_SERVICES_TRUE$ac_delim -BUILD_NT_SERVICES_FALSE!$BUILD_NT_SERVICES_FALSE$ac_delim -GREP!$GREP$ac_delim -EGREP!$EGREP$ac_delim -TOR_LIB_WS32!$TOR_LIB_WS32$ac_delim -TOR_LIB_GDI!$TOR_LIB_GDI$ac_delim -TOR_CPPFLAGS_libevent!$TOR_CPPFLAGS_libevent$ac_delim -TOR_LDFLAGS_libevent!$TOR_LDFLAGS_libevent$ac_delim -_ACEOF - - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then - break - elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr fi -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -CEOF$ac_eof +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do - cat >conf$$subs.sed <<_ACEOF -TOR_LIBEVENT_LIBS!$TOR_LIBEVENT_LIBS$ac_delim -TOR_CPPFLAGS_openssl!$TOR_CPPFLAGS_openssl$ac_delim -TOR_LDFLAGS_openssl!$TOR_LDFLAGS_openssl$ac_delim -TOR_OPENSSL_LIBS!$TOR_OPENSSL_LIBS$ac_delim -TOR_CPPFLAGS_zlib!$TOR_CPPFLAGS_zlib$ac_delim -TOR_LDFLAGS_zlib!$TOR_LDFLAGS_zlib$ac_delim -LOGFACILITY!$LOGFACILITY$ac_delim -CONFDIR!$CONFDIR$ac_delim -BINDIR!$BINDIR$ac_delim -LOCALSTATEDIR!$LOCALSTATEDIR$ac_delim -LIBOBJS!$LIBOBJS$ac_delim -LTLIBOBJS!$LTLIBOBJS$ac_delim -_ACEOF + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 12; then + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done +rm -f conf$$subs.sh -ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` -if test -n "$ac_eof"; then - ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` - ac_eof=`expr $ac_eof + 1` -fi - -cat >>$CONFIG_STATUS <<_ACEOF -cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end -_ACEOF -sed ' -s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g -s/^/s,@/; s/!/@,|#_!!_#|/ -:n -t n -s/'"$ac_delim"'$/,g/; t -s/$/\\/; p -N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n -' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF -:end -s/|#_!!_#|//g -CEOF$ac_eof +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// s/^[^=]*=[ ]*$// }' fi -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" -for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 -echo "$as_me: error: Invalid tag $ac_tag." >&2;} - { (exit 1); exit 1; }; };; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -20926,7 +10428,7 @@ for ac_f do case $ac_f in - -) ac_f="$tmp/stdin";; + -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. @@ -20935,26 +10437,34 @@ [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - ac_file_inputs="$ac_file_inputs $ac_f" + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ - configure_input="Generated from "`IFS=: - echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin";; + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac @@ -20964,42 +10474,7 @@ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir="$ac_dir" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21017,20 +10492,15 @@ q } s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -21075,12 +10545,12 @@ esac _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= - -case `sed -n '/datarootdir/ { +ac_sed_dataroot=' +/datarootdir/ { p q } @@ -21088,36 +10558,37 @@ /@docdir@/p /@infodir@/p /@localedir@/p -/@mandir@/p -' $ac_file_inputs` in +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; + s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s&@configure_input@&$configure_input&;t t +s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t @@ -21128,121 +10599,51 @@ s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack -" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 -echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} - rm -f "$tmp/stdin" + rm -f "$ac_tmp/stdin" case $ac_file in - -) cat "$tmp/out"; rm -f "$tmp/out";; - *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; - esac + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # -_ACEOF - -# Transform confdefs.h into a sed script `conftest.defines', that -# substitutes the proper values into config.h.in to produce config.h. -rm -f conftest.defines conftest.tail -# First, append a space to every undef/define line, to ease matching. -echo 's/$/ /' >conftest.defines -# Then, protect against being on the right side of a sed subst, or in -# an unquoted here document, in config.status. If some macros were -# called several times there might be several #defines for the same -# symbol, which is useless. But do not sort them, since the last -# AC_DEFINE must be honored. -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where -# NAME is the cpp macro being defined, VALUE is the value it is being given. -# PARAMS is the parameter list in the macro definition--in most cases, it's -# just an empty string. -ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' -ac_dB='\\)[ (].*,\\1define\\2' -ac_dC=' ' -ac_dD=' ,' - -uniq confdefs.h | - sed -n ' - t rset - :rset - s/^[ ]*#[ ]*define[ ][ ]*// - t ok - d - :ok - s/[\\&,]/\\&/g - s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p - s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p - ' >>conftest.defines - -# Remove the space that was appended to ease matching. -# Then replace #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -# (The regexp can be short, since the line contains either #define or #undef.) -echo 's/ $// -s,^[ #]*u.*,/* & */,' >>conftest.defines - -# Break up conftest.defines: -ac_max_sed_lines=50 - -# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" -# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" -# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" -# et cetera. -ac_in='$ac_file_inputs' -ac_out='"$tmp/out1"' -ac_nxt='"$tmp/out2"' - -while : -do - # Write a here document: - cat >>$CONFIG_STATUS <<_ACEOF - # First, check the format of the line: - cat >"\$tmp/defines.sed" <<\\CEOF -/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def -/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def -b -:def -_ACEOF - sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS - ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in - sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail - grep . conftest.tail >/dev/null || break - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines conftest.tail - -echo "ac_result=$ac_in" >>$CONFIG_STATUS -cat >>$CONFIG_STATUS <<\_ACEOF if test x"$ac_file" != x-; then - echo "/* $configure_input */" >"$tmp/config.h" - cat "$ac_result" >>"$tmp/config.h" - if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - rm -f $ac_file - mv "$tmp/config.h" $ac_file + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - echo "/* $configure_input */" - cat "$ac_result" + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 fi - rm -f "$tmp/out12" -# Compute $ac_file's index in $config_headers. -_am_arg=$ac_file +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in @@ -21257,7 +10658,7 @@ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -echo X"$_am_arg" | +$as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21277,30 +10678,40 @@ s/.*/./; q'`/stamp-h$_am_stamp_count ;; - :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5 -echo "$as_me: executing $ac_file commands" >&6;} + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || -echo X"$mf" | +$as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21318,68 +10729,33 @@ q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - { as_dir=$dirpart/$fdir - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -echo X"$as_dir" | +$as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -21397,27 +10773,25 @@ q } s/.*/./; q'` - test -d "$as_dir" && break + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; esac done # for ac_tag -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -21437,7 +10811,11 @@ exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff -Nru tor-0.2.1.30/configure.in tor-0.2.2.35/configure.in --- tor-0.2.1.30/configure.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/configure.in 2011-12-15 17:00:33.000000000 +0000 @@ -1,11 +1,10 @@ -dnl $Id$ dnl Copyright (c) 2001-2004, Roger Dingledine dnl Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson dnl Copyright (c) 2007-2008, The Tor Project, Inc. dnl See LICENSE for licensing information AC_INIT -AM_INIT_AUTOMAKE(tor, 0.2.1.30) +AM_INIT_AUTOMAKE(tor, 0.2.2.35) AM_CONFIG_HEADER(orconfig.h) AC_CANONICAL_HOST @@ -20,21 +19,6 @@ # the += operator on it in src/or/Makefile.am CPPFLAGS="$CPPFLAGS -I\${top_srcdir}/src/common" -AC_ARG_ENABLE(debug, - AS_HELP_STRING(--enable-debug, compile with debugging info), -[if test x$enableval = xyes; then - CFLAGS="$CFLAGS -g" -fi]) - -#XXXX ideally, we should make this into a no-op, and detect whether we're -#compiling for the iphone by using $target. -AC_ARG_ENABLE(iphone, - AS_HELP_STRING(--enable-iphone, compile with iPhone support), - [if test x$enableval = xyes ; then - tor_cv_iphone=true - CFLAGS="$CFLAGS -D__DARWIN_UNIX03 -DIPHONE" - fi]) - #XXXX020 We should make these enabled or not, before 0.2.0.x-final AC_ARG_ENABLE(buf-freelists, AS_HELP_STRING(--disable-buf-freelists, disable freelists for buffer RAM)) @@ -46,6 +30,8 @@ AS_HELP_STRING(--enable-static-openssl, Link against a static openssl library. Requires --with-openssl-dir)) AC_ARG_ENABLE(static-libevent, AS_HELP_STRING(--enable-static-libevent, Link against a static libevent library. Requires --with-libevent-dir)) +AC_ARG_ENABLE(static-zlib, + AS_HELP_STRING(--enable-static-zlib, Link against a static zlib library. Requires --with-zlib-dir)) if test x$enable_buf_freelists != xno; then AC_DEFINE(ENABLE_BUF_FREELISTS, 1, @@ -65,6 +51,15 @@ *) AC_MSG_ERROR(bad value for --enable-transparent) ;; esac], [transparent=true]) +AC_ARG_ENABLE(asciidoc, + AS_HELP_STRING(--disable-asciidoc, don't use asciidoc (disables building of manpages)), + [case "${enableval}" in + yes) asciidoc=true ;; + no) asciidoc=false ;; + *) AC_MSG_ERROR(bad value for --disable-asciidoc) ;; + esac], [asciidoc=true]) + + AC_ARG_ENABLE(threads, AS_HELP_STRING(--disable-threads, disable multi-threading support)) @@ -90,18 +85,32 @@ ;; esac -AC_ARG_ENABLE(geoip-stats, - AS_HELP_STRING(--enable-geoip-stats, enable code for directories to collect per-country statistics)) - -if test "$enable_geoip_stats" = "yes"; then - AC_DEFINE(ENABLE_GEOIP_STATS, 1, [Defined if we try to collect per-country statistics]) -fi - AC_ARG_ENABLE(gcc-warnings, AS_HELP_STRING(--enable-gcc-warnings, enable verbose warnings)) AC_ARG_ENABLE(gcc-warnings-advisory, AS_HELP_STRING(--enable-gcc-warnings-advisory, [enable verbose warnings, excluding -Werror])) +dnl Adam shostack suggests the following for Windows: +dnl -D_FORTIFY_SOURCE=2 -fstack-protector-all +dnl Others suggest '/gs /safeseh /nxcompat /dynamicbase' for non-gcc on Windows +dnl This requires that we use gcc and that we add -O2 to the CFLAGS. +AC_ARG_ENABLE(gcc-hardening, + AS_HELP_STRING(--enable-gcc-hardening, enable compiler security checks), +[if test x$enableval = xyes; then + CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2 -fstack-protector-all" + CFLAGS="$CFLAGS -fwrapv -fPIE -Wstack-protector" + CFLAGS="$CFLAGS --param ssp-buffer-size=1" + LDFLAGS="$LDFLAGS -pie" +fi]) + +dnl Linker hardening options +dnl Currently these options are ELF specific - you can't use this with MacOSX +AC_ARG_ENABLE(linker-hardening, + AS_HELP_STRING(--enable-linker-hardening, enable linker security fixups), +[if test x$enableval = xyes; then + LDFLAGS="$LDFLAGS -z relro -z now" +fi]) + AC_ARG_ENABLE(local-appdata, AS_HELP_STRING(--enable-local-appdata, default to host local application data paths on Windows)) if test "$enable_local_appdata" = "yes"; then @@ -109,11 +118,29 @@ [Defined if we default to host local appdata paths on Windows]) fi +dnl check for the correct "ar" when cross-compiling +AN_MAKEVAR([AR], [AC_PROG_AR]) +AN_PROGRAM([ar], [AC_PROG_AR]) +AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL([AR], [ar], [ar])]) +AC_PROG_AR + AC_PROG_CC AC_PROG_CPP AC_PROG_MAKE_SET AC_PROG_RANLIB +dnl autoconf 2.59 appears not to support AC_PROG_SED +AC_CHECK_PROG([SED],[sed],[sed],[/bin/false]) + +dnl check for asciidoc and a2x +AC_PATH_PROG([ASCIIDOC], [asciidoc], none) +AC_PATH_PROG([A2X], [a2x], none) + +AM_CONDITIONAL(USE_ASCIIDOC, test x$asciidoc = xtrue) + +AC_PATH_PROG([SHA1SUM], [sha1sum], none) +AC_PATH_PROG([OPENSSL], [openssl], none) + TORUSER=_tor AC_ARG_WITH(tor-user, [ --with-tor-user=NAME Specify username for tor daemon ], @@ -135,7 +162,7 @@ dnl If WIN32 is defined and non-zero, we are building for win32 AC_MSG_CHECKING([for win32]) -AC_RUN_IFELSE([ +AC_RUN_IFELSE([AC_LANG_SOURCE([ int main(int c, char **v) { #ifdef WIN32 #if WIN32 @@ -146,7 +173,7 @@ #else return 2; #endif -}], +}])], bwin32=true; AC_MSG_RESULT([yes]), bwin32=false; AC_MSG_RESULT([no]), bwin32=cross; AC_MSG_RESULT([cross]) @@ -154,14 +181,14 @@ if test "$bwin32" = cross; then AC_MSG_CHECKING([for win32 (cross)]) -AC_COMPILE_IFELSE([ +AC_COMPILE_IFELSE([AC_LANG_SOURCE([ #ifdef WIN32 int main(int c, char **v) {return 0;} #else #error int main(int c, char **v) {return x(y);} #endif -], +])], bwin32=true; AC_MSG_RESULT([yes]), bwin32=false; AC_MSG_RESULT([no])) fi @@ -173,12 +200,12 @@ dnl Enable C99 when compiling with MIPSpro AC_MSG_CHECKING([for MIPSpro compiler]) -AC_COMPILE_IFELSE(AC_LANG_PROGRAM(, [ +AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [ #if (defined(__sgi) && defined(_COMPILER_VERSION)) #error return x(y); #endif -]), +])], bmipspro=false; AC_MSG_RESULT(no), bmipspro=true; AC_MSG_RESULT(yes)) @@ -202,7 +229,7 @@ dnl Check for functions before libevent, since libevent-1.2 apparently dnl exports strlcpy without defining it in a header. -AC_CHECK_FUNCS(gettimeofday ftime socketpair uname inet_aton strptime getrlimit strlcat strlcpy strtoull getaddrinfo localtime_r gmtime_r memmem strtok_r writev readv flock prctl) +AC_CHECK_FUNCS(gettimeofday ftime socketpair uname inet_aton strptime getrlimit strlcat strlcpy strtoull getaddrinfo localtime_r gmtime_r memmem strtok_r writev readv flock prctl vasprintf lround rint) using_custom_malloc=no if test x$enable_openbsd_malloc = xyes ; then @@ -250,7 +277,19 @@ tor_libevent_devpkg_redhat="libevent-devel" tor_libevent_devpkg_debian="libevent-dev" -TOR_SEARCH_LIBRARY(libevent, $trylibeventdir, [-levent $TOR_LIB_WS32], [ +dnl On Gnu/Linux or any place we require it, we'll add librt to the Libevent +dnl linking for static builds. +STATIC_LIBEVENT_FLAGS="" +if test "$enable_static_libevent" = "yes"; then + dnl Determine if we have clock_gettime in librt + AC_SEARCH_LIBS([clock_gettime], [rt], + [have_rt=yes]) + if test "$have_rt" = yes; then + STATIC_LIBEVENT_FLAGS=" -lrt " + fi +fi + +TOR_SEARCH_LIBRARY(libevent, $trylibeventdir, [-levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32], [ #ifdef WIN32 #include #endif @@ -273,29 +312,35 @@ save_LIBS="$LIBS" save_LDFLAGS="$LDFLAGS" save_CPPFLAGS="$CPPFLAGS" -LIBS="-levent $TOR_LIB_WS32 $LIBS" +LIBS="-levent $STATIC_LIBEVENT_FLAGS $TOR_LIB_WS32 $LIBS" LDFLAGS="$TOR_LDFLAGS_libevent $LDFLAGS" CPPFLAGS="$TOR_CPPFLAGS_libevent $CPPFLAGS" -AC_CHECK_FUNCS(event_get_version event_get_method event_set_log_callback) +AC_CHECK_FUNCS(event_get_version event_get_version_number event_get_method event_set_log_callback evdns_set_outgoing_bind_address event_base_loopexit) AC_CHECK_MEMBERS([struct event.min_heap_idx], , , [#include ]) +AC_CHECK_HEADERS(event2/event.h event2/dns.h) + LIBS="$save_LIBS" LDFLAGS="$save_LDFLAGS" CPPFLAGS="$save_CPPFLAGS" + +AM_CONDITIONAL(USE_EXTERNAL_EVDNS, test x$ac_cv_header_event2_dns_h = xyes) + if test "$enable_static_libevent" = "yes"; then if test "$tor_cv_library_libevent_dir" = "(system)"; then AC_MSG_ERROR("You must specify an explicit --with-libevent-dir=x option when using --enable-static-libevent") else - TOR_LIBEVENT_LIBS="$TOR_LIBDIR_libevent/libevent.a" + TOR_LIBEVENT_LIBS="$TOR_LIBDIR_libevent/libevent.a $STATIC_LIBEVENT_FLAGS" fi else TOR_LIBEVENT_LIBS="-levent" fi AC_SUBST(TOR_LIBEVENT_LIBS) + dnl ------------------------------------------------------ dnl Where do you live, openssl? And how do we call you? @@ -336,10 +381,10 @@ dnl ------------------------------------------------------ dnl Where do you live, zlib? And how do we call you? -tor_openssl_pkg_redhat="zlib" -tor_openssl_pkg_debian="zlib1g" -tor_openssl_devpkg_redhat="zlib-devel" -tor_openssl_devpkg_debian="zlib1g-dev" +tor_zlib_pkg_redhat="zlib" +tor_zlib_pkg_debian="zlib1g" +tor_zlib_devpkg_redhat="zlib-devel" +tor_zlib_devpkg_debian="zlib1g-dev" TOR_SEARCH_LIBRARY(zlib, $tryzlibdir, [-lz], [#include ], @@ -347,6 +392,19 @@ [zlibVersion(); exit(0);], [--with-zlib-dir], [/opt/zlib]) +if test "$enable_static_zlib" = "yes"; then + if test "$tor_cv_library_zlib_dir" = "(system)"; then + AC_MSG_ERROR("You must specify an explicit --with-zlib-dir=x option when + using --enable-static-zlib") + else + TOR_ZLIB_LIBS="$TOR_LIBDIR_zlib/libz.a" + echo "$TOR_LIBDIR_zlib/libz.a" + fi +else + TOR_ZLIB_LIBS="-lz" +fi +AC_SUBST(TOR_ZLIB_LIBS) + dnl Make sure to enable support for large off_t if available. AC_SYS_LARGEFILE @@ -525,7 +583,7 @@ ]) AC_CACHE_CHECK([whether time_t is signed], tor_cv_time_t_signed, [ -AC_RUN_IFELSE(AC_LANG_SOURCE([ +AC_RUN_IFELSE([AC_LANG_SOURCE([ #ifdef HAVE_SYS_TYPES_H #include #endif @@ -535,7 +593,7 @@ #ifdef HAVE_TIME_H #include #endif -int main(int c, char**v) { if (((time_t)-1)<0) return 1; else return 0; }]), +int main(int c, char**v) { if (((time_t)-1)<0) return 1; else return 0; }])], tor_cv_time_t_signed=no, tor_cv_time_t_signed=yes, tor_cv_time_t_signed=cross) ]) @@ -548,6 +606,23 @@ [Define to 1 iff time_t is signed]) fi +AC_CACHE_CHECK([whether size_t is signed], tor_cv_size_t_signed, [ +AC_RUN_IFELSE([AC_LANG_SOURCE([ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +int main(int c, char**v) { if (((size_t)-1)<0) return 1; else return 0; }])], + tor_cv_size_t_signed=no, tor_cv_size_t_signed=yes, tor_cv_size_t_signed=cross) +]) + +if test "$tor_cv_size_t_signed" = cross; then + AC_MSG_NOTICE([Cross compiling: assuming that size_t is not signed.]) +fi + +if test "$tor_cv_size_t_signed" = yes; then + AC_MSG_ERROR([You have a signed size_t; that's grossly nonconformant.]) +fi + AC_CHECK_SIZEOF(socklen_t, , [AC_INCLUDES_DEFAULT() #ifdef HAVE_SYS_SOCKET_H #include @@ -626,6 +701,24 @@ [Define to 1 iff we represent negative integers with two's complement]) fi +# What does shifting a negative value do? +AC_CACHE_CHECK([whether right-shift on negative values does sign-extension], tor_cv_sign_extend, +[AC_RUN_IFELSE([AC_LANG_SOURCE( +[[int main () { int okay = (-60 >> 8) == -1; return okay ? 0 : 1; }]])], + [tor_cv_sign_extend=yes], + [tor_cv_sign_extend=no], + [tor_cv_sign_extend=cross])]) + +if test "$tor_cv_sign_extend" = cross ; then + # Cross-compiling; let's hope that the target isn't raving mad. + AC_MSG_NOTICE([Cross-compiling: we'll assume that right-shifting negative integers causes sign-extension]) +fi + +if test "$tor_cv_sign_extend" != no ; then + AC_DEFINE([RSHIFT_DOES_SIGN_EXTEND], 1, + [Define to 1 iff right-shifting a negative value performs sign-extension]) +fi + # Whether we should use the dmalloc memory allocation debugging library. AC_MSG_CHECKING(whether to use dmalloc (debug memory allocation library)) AC_ARG_WITH(dmalloc, @@ -655,6 +748,16 @@ LDFLAGS="-ltcmalloc $LDFLAGS" fi +# By default, we're going to assume we don't have mlockall() +# bionic and other platforms have various broken mlockall subsystems. +# Some systems don't have a working mlockall, some aren't linkable, +# and some have it but don't declare it. +AC_CHECK_FUNCS(mlockall) +AC_CHECK_DECLS([mlockall], , , [ +#ifdef HAVE_SYS_MMAN_H +#include +#endif]) + # Allow user to specify an alternate syslog facility AC_ARG_WITH(syslog-facility, [ --with-syslog-facility=LOG syslog facility to use (default=LOG_DAEMON)], @@ -674,14 +777,14 @@ AC_MSG_CHECKING([how many arguments gethostbyname_r() wants]) OLD_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $MY_CPPFLAGS $MY_THREAD_CPPFLAGS $MY_CFLAGS" - AC_COMPILE_IFELSE(AC_LANG_PROGRAM([ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ #include ], [[ char *cp1, *cp2; struct hostent *h1, *h2; int i1, i2; (void)gethostbyname_r(cp1,h1,cp2,i1,&h2,&i2); - ]]),[ + ]])],[ AC_DEFINE(HAVE_GETHOSTBYNAME_R) AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARG, 1, [Define this if gethostbyname_r takes 6 arguments]) @@ -722,25 +825,25 @@ AC_CACHE_CHECK([whether the C compiler supports __func__], tor_cv_have_func_macro, - AC_COMPILE_IFELSE([ + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ #include -int main(int c, char **v) { puts(__func__); }], +int main(int c, char **v) { puts(__func__); }])], tor_cv_have_func_macro=yes, tor_cv_have_func_macro=no)) AC_CACHE_CHECK([whether the C compiler supports __FUNC__], tor_cv_have_FUNC_macro, - AC_COMPILE_IFELSE([ + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ #include -int main(int c, char **v) { puts(__FUNC__); }], +int main(int c, char **v) { puts(__FUNC__); }])], tor_cv_have_FUNC_macro=yes, tor_cv_have_FUNC_macro=no)) AC_CACHE_CHECK([whether the C compiler supports __FUNCTION__], tor_cv_have_FUNCTION_macro, - AC_COMPILE_IFELSE([ + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ #include -int main(int c, char **v) { puts(__FUNCTION__); }], +int main(int c, char **v) { puts(__FUNCTION__); }])], tor_cv_have_FUNCTION_macro=yes, tor_cv_have_FUNCTION_macro=no)) @@ -781,41 +884,70 @@ LOCALSTATEDIR=`eval echo $localstatedir` AC_SUBST(LOCALSTATEDIR) +if test "$bwin32" = true; then + # Test if the linker supports the --nxcompat and --dynamicbase options + # for Windows + save_LDFLAGS="$LDFLAGS" + LDFLAGS="-Wl,--nxcompat -Wl,--dynamicbase" + AC_MSG_CHECKING([whether the linker supports DllCharacteristics]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], + [AC_MSG_RESULT([yes])] + [save_LDFLAGS="$save_LDFLAGS $LDFLAGS"], + [AC_MSG_RESULT([no])] + ) + LDFLAGS="$save_LDFLAGS" +fi + # Set CFLAGS _after_ all the above checks, since our warnings are stricter # than autoconf's macros like. if test "$GCC" = yes; then - CFLAGS="$CFLAGS -Wall -g -O2" # Disable GCC's strict aliasing checks. They are an hours-to-debug # accident waiting to happen. - CFLAGS="$CFLAGS -fno-strict-aliasing" + CFLAGS="$CFLAGS -Wall -fno-strict-aliasing" else - CFLAGS="$CFLAGS -g -O" + # Autoconf sets -g -O2 by default. Override optimization level + # for non-gcc compilers + CFLAGS="$CFLAGS -O" enable_gcc_warnings=no enable_gcc_warnings_advisory=no fi +# OS X Lion started deprecating the system openssl. Let's just disable +# all deprecation warnings on OS X. +case "$host_os" in + + darwin*) + CFLAGS="$CFLAGS -Wno-deprecated-declarations" + ;; +esac + # Add some more warnings which we use in development but not in the # released versions. (Some relevant gcc versions can't handle these.) if test x$enable_gcc_warnings = xyes || test x$enable_gcc_warnings_advisory = xyes; then - AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ #if !defined(__GNUC__) || (__GNUC__ < 4) #error -#endif]), have_gcc4=yes, have_gcc4=no) +#endif])], have_gcc4=yes, have_gcc4=no) - AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2) #error -#endif]), have_gcc42=yes, have_gcc42=no) +#endif])], have_gcc42=yes, have_gcc42=no) - AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], [ + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ #if !defined(__GNUC__) || (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) #error -#endif]), have_gcc43=yes, have_gcc43=no) +#endif])], have_gcc43=yes, have_gcc43=no) + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [ +#if !defined(__clang__) || (__clang_major__ > 2) || (__clang_major__ == 2 && __clang_minor__ > 9) +#error +#endif])], have_clang29orlower=yes, have_clang29orlower=no) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wshorten-64-to-32" - AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], []), have_shorten64_flag=yes, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], have_shorten64_flag=yes, have_shorten64_flag=no) CFLAGS="$save_CFLAGS" @@ -842,13 +974,20 @@ if test x$have_gcc42 = xyes ; then # These warnings break gcc 4.0.2 and work on gcc 4.2 - # XXXX020 Use -fstack-protector. # XXXX020 See if any of these work with earlier versions. - CFLAGS="$CFLAGS -Waddress -Wmissing-noreturn -Wnormalized=id -Woverride-init -Wstrict-overflow=1" + CFLAGS="$CFLAGS -Waddress -Wmissing-noreturn -Wstrict-overflow=1" + # We used to use -Wstrict-overflow=5, but that breaks us heavily under 4.3. fi - if test x$have_gcc43 = xyes ; then + if test x$have_gcc42 = xyes && test x$have_clang29orlower = xno; then + # These warnings break gcc 4.0.2 and clang, but work on gcc 4.2 + # We only disable these for clang 2.9 and lower, in case they are + # supported in later versions. + CFLAGS="$CFLAGS -Wnormalized=id -Woverride-init" + fi + + if test x$have_gcc43 = xyes ; then # These warnings break gcc 4.2 and work on gcc 4.3 # XXXX020 See if any of these work with earlier versions. CFLAGS="$CFLAGS -Wextra -Warray-bounds" @@ -866,7 +1005,7 @@ CPPFLAGS="$CPPFLAGS $TOR_CPPFLAGS_libevent $TOR_CPPFLAGS_openssl $TOR_CPPFLAGS_zlib" -AC_CONFIG_FILES([Makefile tor.spec Doxyfile contrib/tor.sh contrib/torctl contrib/torify contrib/tor.logrotate contrib/Makefile contrib/osx/Makefile contrib/osx/TorBundleDesc.plist contrib/osx/TorBundleInfo.plist contrib/osx/TorDesc.plist contrib/osx/TorInfo.plist contrib/osx/TorStartupDesc.plist src/config/torrc.sample doc/tor.1 src/Makefile doc/Makefile doc/design-paper/Makefile src/config/Makefile src/common/Makefile src/or/Makefile src/win32/Makefile src/tools/Makefile contrib/suse/Makefile contrib/suse/tor.sh]) +AC_CONFIG_FILES([Makefile tor.spec Doxyfile contrib/tor.sh contrib/torctl contrib/torify contrib/tor.logrotate contrib/Makefile src/config/torrc.sample src/Makefile doc/Makefile src/config/Makefile src/common/Makefile src/or/Makefile src/test/Makefile src/win32/Makefile src/tools/Makefile contrib/suse/Makefile contrib/suse/tor.sh]) AC_OUTPUT if test -x /usr/bin/perl && test -x ./contrib/updateVersions.pl ; then diff -Nru tor-0.2.1.30/contrib/cross.sh tor-0.2.2.35/contrib/cross.sh --- tor-0.2.1.30/contrib/cross.sh 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/cross.sh 2011-12-15 16:26:49.000000000 +0000 @@ -1,5 +1,4 @@ #!/bin/bash -# $Id$ # Copyright 2006 Michael Mohr with modifications by Roger Dingledine # See LICENSE for licensing information. @@ -186,7 +185,7 @@ then ${HOST_TRIPLET}strip \ src/or/tor \ - src/or/test \ + src/test/test \ src/tools/tor-resolve fi diff -Nru tor-0.2.1.30/contrib/Makefile.am tor-0.2.2.35/contrib/Makefile.am --- tor-0.2.1.30/contrib/Makefile.am 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/Makefile.am 2011-12-15 16:28:37.000000000 +0000 @@ -1,12 +1,10 @@ -SUBDIRS = osx suse -DIST_SUBDIRS = osx suse +SUBDIRS = suse +DIST_SUBDIRS = suse confdir = $(sysconfdir)/tor -EXTRA_DIST = exitlist tor-tsocks.conf torify.1 tor.nsi.in tor.sh torctl rc.subr cross.sh tor-mingw.nsi.in package_nsis-mingw.sh tor.ico tor-ctrl.sh linux-tor-prio.sh tor-exit-notice.html +EXTRA_DIST = exitlist tor-tsocks.conf tor.nsi.in tor.sh torctl rc.subr cross.sh tor-mingw.nsi.in package_nsis-mingw.sh tor.ico tor-ctrl.sh linux-tor-prio.sh tor-exit-notice.html conf_DATA = tor-tsocks.conf bin_SCRIPTS = torify - -man_MANS = torify.1 diff -Nru tor-0.2.1.30/contrib/Makefile.in tor-0.2.2.35/contrib/Makefile.in --- tor-0.2.1.30/contrib/Makefile.in 2011-02-23 08:25:53.000000000 +0000 +++ tor-0.2.2.35/contrib/Makefile.in 2011-12-15 17:01:54.000000000 +0000 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,8 +18,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -45,9 +47,29 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/orconfig.h CONFIG_CLEAN_FILES = tor.sh torctl torify tor.logrotate -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ - "$(DESTDIR)$(confdir)" -binSCRIPT_INSTALL = $(INSTALL_SCRIPT) +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(confdir)" SCRIPTS = $(bin_SCRIPTS) SOURCES = DIST_SOURCES = @@ -58,24 +80,45 @@ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive -man1dir = $(mandir)/man1 -NROFF = nroff -MANS = $(man_MANS) -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -confDATA_INSTALL = $(INSTALL_DATA) DATA = $(conf_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AR = @AR@ +ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -110,15 +153,19 @@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ +OPENSSL = @OPENSSL@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ +SHA1SUM = @SHA1SUM@ SHELL = @SHELL@ STRIP = @STRIP@ TORGROUP = @TORGROUP@ @@ -133,6 +180,7 @@ TOR_LIB_GDI = @TOR_LIB_GDI@ TOR_LIB_WS32 = @TOR_LIB_WS32@ TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ +TOR_ZLIB_LIBS = @TOR_ZLIB_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -181,15 +229,15 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SUBDIRS = osx suse -DIST_SUBDIRS = osx suse +SUBDIRS = suse +DIST_SUBDIRS = suse confdir = $(sysconfdir)/tor -EXTRA_DIST = exitlist tor-tsocks.conf torify.1 tor.nsi.in tor.sh torctl rc.subr cross.sh tor-mingw.nsi.in package_nsis-mingw.sh tor.ico tor-ctrl.sh linux-tor-prio.sh tor-exit-notice.html +EXTRA_DIST = exitlist tor-tsocks.conf tor.nsi.in tor.sh torctl rc.subr cross.sh tor-mingw.nsi.in package_nsis-mingw.sh tor.ico tor-ctrl.sh linux-tor-prio.sh tor-exit-notice.html conf_DATA = tor-tsocks.conf bin_SCRIPTS = torify -man_MANS = torify.1 all: all-recursive .SUFFIXES: @@ -197,14 +245,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign contrib/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign contrib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -222,6 +270,7 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): tor.sh: $(top_builddir)/config.status $(srcdir)/tor.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ torctl: $(top_builddir)/config.status $(srcdir)/torctl.in @@ -233,84 +282,57 @@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" - @list='$(bin_SCRIPTS)'; for p in $$list; do \ + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f $$d$$p; then \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ - else :; fi; \ - done + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) - @list='$(bin_SCRIPTS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done -install-man1: $(man1_MANS) $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done -uninstall-man1: - @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files install-confDATA: $(conf_DATA) @$(NORMAL_INSTALL) test -z "$(confdir)" || $(MKDIR_P) "$(DESTDIR)$(confdir)" - @list='$(conf_DATA)'; for p in $$list; do \ + @list='$(conf_DATA)'; test -n "$(confdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(confDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(confdir)/$$f'"; \ - $(confDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(confdir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(confdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(confdir)" || exit $$?; \ done uninstall-confDATA: @$(NORMAL_UNINSTALL) - @list='$(conf_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(confdir)/$$f'"; \ - rm -f "$(DESTDIR)$(confdir)/$$f"; \ - done + @list='$(conf_DATA)'; test -n "$(confdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(confdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(confdir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -319,7 +341,7 @@ # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -336,7 +358,7 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ @@ -344,7 +366,7 @@ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -370,16 +392,16 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -387,14 +409,14 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -406,7 +428,7 @@ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -415,29 +437,34 @@ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -458,39 +485,54 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive -all-am: Makefile $(SCRIPTS) $(MANS) $(DATA) +all-am: Makefile $(SCRIPTS) $(DATA) installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(confdir)"; do \ + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(confdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive @@ -513,6 +555,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -531,26 +574,38 @@ html: html-recursive +html-am: + info: info-recursive info-am: -install-data-am: install-confDATA install-man +install-data-am: install-confDATA install-dvi: install-dvi-recursive +install-dvi-am: + install-exec-am: install-binSCRIPTS install-html: install-html-recursive +install-html-am: + install-info: install-info-recursive -install-man: install-man1 +install-info-am: + +install-man: install-pdf: install-pdf-recursive +install-pdf-am: + install-ps: install-ps-recursive +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -569,12 +624,10 @@ ps-am: -uninstall-am: uninstall-binSCRIPTS uninstall-confDATA uninstall-man +uninstall-am: uninstall-binSCRIPTS uninstall-confDATA -uninstall-man: uninstall-man1 - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ @@ -583,13 +636,13 @@ install-am install-binSCRIPTS install-confDATA install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-man1 install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-binSCRIPTS uninstall-confDATA \ - uninstall-man uninstall-man1 + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-binSCRIPTS uninstall-confDATA + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff -Nru tor-0.2.1.30/contrib/osx/addsysuser tor-0.2.2.35/contrib/osx/addsysuser --- tor-0.2.1.30/contrib/osx/addsysuser 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/addsysuser 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -#!/bin/sh -# -# Original adduser 05 Feb 2002 by Jon L. Gardner -# -# Modified for Tor installer by Nick Mathewson -# 2007-06-12 Modified for leopard by Andrew Lewman -# Copyright (c) 2007 Andrew Lewman -# - - -ROOTPROP=/ - -if [ "`whoami`" != "root" ]; then - echo "You must be root to execute this script." - exit -fi -if [ "x$3" = "x" ]; then - echo 'Usage: addsysuser "" ' - exit 0 -fi - -username=$1 -realname=$2 -homedir=$3 - -if [ -x /usr/bin/dscl ]; then - # Determine the gid of the daemon group - gid=`dscl . -read /groups/daemon gid` - if [ "x`dscl . -list /users|cut -f2 -d' '|grep $username`" != "x" ]; then - echo The account $username already exists. - exit 0 - fi - if [ -x /usr/bin/nidump ]; then - uiddef=`nidump passwd / | cut -d: -f3 | sort -n | grep -v '^[56789]..' |grep -v '^....$' | tail -n 1` - else - _tmp=/tmp/_dsexport_tmp.txt.$$ - rm -f $_tmp - dsexport $_tmp '/Local/Default' 'dsRecTypeStandard:Users' > /dev/null 2>&1 - uiddef=`cat $_tmp | sed 's/\\\://g' | cut -d: -f6 | grep '^[0-9]' | sort -n | grep -v '^[56789]..' | grep -v '^....$' | tail -n 1` - rm -f $_tmp - fi - uiddef=`echo $uiddef + 1 | bc` - dscl . -create /users/$username uid $uiddef - # home is the local path to the home directory - home=/Users/$username - echo Creating account for $username... - dscl . -create /users/$username - dscl . -create /users/$username _writers_tim_passwd $username - dscl . -create /users/$username realname $realname - dscl . -create /users/$username _writers_passwd $username - dscl . -create /users/$username gid $gid - dscl . -create /users/$username home $homedir - dscl . -create /users/$username name $username - dscl . -create /users/$username passwd '*' - dscl . -create /users/$username shell /dev/null -else - # Determine the gid of the daemon group - gid=`niutil -readprop $ROOTPROP /groups/daemon gid` - if [ "x`niutil -list $ROOTPROP /users|cut -f2 -d' '|grep $username`" != "x" ]; then - echo The account $username already exists. - exit 0 - fi - # home is the local path to the home directory - home=/Users/$username - # defhome is what goes into NetInfo - defhome="/Network/Servers/MyServer/Users" - #echo "Determining next available system uid (please be patient)..." - # Uids over 500 are for system users. - uiddef=`nidump passwd / | cut -d: -f3 | sort -n | grep -v '^[56789]..' |grep -v '^....$' | tail -n 1` - uiddef=`echo $uiddef + 1 |bc` - echo Creating account for $username... - niutil -create $ROOTPROP /users/$username - niutil -createprop $ROOTPROP /users/$username _writers_tim_passwd $username - niutil -createprop $ROOTPROP /users/$username realname $realname - niutil -createprop $ROOTPROP /users/$username _writers_passwd $username - niutil -createprop $ROOTPROP /users/$username uid $uiddef - #niutil -createprop $ROOTPROP /users/$username home_loc "afp://afp.server.com/Users/$username" - niutil -createprop $ROOTPROP /users/$username gid $gid - niutil -createprop $ROOTPROP /users/$username home $homedir - niutil -createprop $ROOTPROP /users/$username name $username - niutil -createprop $ROOTPROP /users/$username passwd '*' - niutil -createprop $ROOTPROP /users/$username shell /dev/null -fi diff -Nru tor-0.2.1.30/contrib/osx/Makefile.am tor-0.2.2.35/contrib/osx/Makefile.am --- tor-0.2.1.30/contrib/osx/Makefile.am 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -# XXX Is this define necessary, or is it redundant with the -# one from the top-level configure? -RD -confdir = $(sysconfdir)/Tor - -EXTRA_DIST = ReadMe.rtf StartupParameters.plist Tor TorBundleDesc.plist.in \ - TorBundleInfo.plist.in TorBundleWelcome.rtf TorDesc.plist.in \ - TorInfo.plist.in TorStartupDesc.plist.in TorStartupInfo.plist \ - package.sh TorPostflight addsysuser Tor_Uninstaller.applescript \ - uninstall_tor_bundle.sh package_list.txt tor_logo.gif TorPreFlight diff -Nru tor-0.2.1.30/contrib/osx/Makefile.in tor-0.2.2.35/contrib/osx/Makefile.in --- tor-0.2.1.30/contrib/osx/Makefile.in 2011-02-23 08:25:53.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,341 +0,0 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = contrib/osx -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/TorBundleDesc.plist.in \ - $(srcdir)/TorBundleInfo.plist.in $(srcdir)/TorDesc.plist.in \ - $(srcdir)/TorInfo.plist.in $(srcdir)/TorStartupDesc.plist.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/orconfig.h -CONFIG_CLEAN_FILES = TorBundleDesc.plist TorBundleInfo.plist \ - TorDesc.plist TorInfo.plist TorStartupDesc.plist -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BINDIR = @BINDIR@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CONFDIR = @CONFDIR@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LOCALSTATEDIR = @LOCALSTATEDIR@ -LOGFACILITY = @LOGFACILITY@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TORGROUP = @TORGROUP@ -TORUSER = @TORUSER@ -TOR_CPPFLAGS_libevent = @TOR_CPPFLAGS_libevent@ -TOR_CPPFLAGS_openssl = @TOR_CPPFLAGS_openssl@ -TOR_CPPFLAGS_zlib = @TOR_CPPFLAGS_zlib@ -TOR_LDFLAGS_libevent = @TOR_LDFLAGS_libevent@ -TOR_LDFLAGS_openssl = @TOR_LDFLAGS_openssl@ -TOR_LDFLAGS_zlib = @TOR_LDFLAGS_zlib@ -TOR_LIBEVENT_LIBS = @TOR_LIBEVENT_LIBS@ -TOR_LIB_GDI = @TOR_LIB_GDI@ -TOR_LIB_WS32 = @TOR_LIB_WS32@ -TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ - -# XXX Is this define necessary, or is it redundant with the -# one from the top-level configure? -RD -confdir = $(sysconfdir)/Tor -EXTRA_DIST = ReadMe.rtf StartupParameters.plist Tor TorBundleDesc.plist.in \ - TorBundleInfo.plist.in TorBundleWelcome.rtf TorDesc.plist.in \ - TorInfo.plist.in TorStartupDesc.plist.in TorStartupInfo.plist \ - package.sh TorPostflight addsysuser Tor_Uninstaller.applescript \ - uninstall_tor_bundle.sh package_list.txt tor_logo.gif TorPreFlight - -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/osx/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign contrib/osx/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -TorBundleDesc.plist: $(top_builddir)/config.status $(srcdir)/TorBundleDesc.plist.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -TorBundleInfo.plist: $(top_builddir)/config.status $(srcdir)/TorBundleInfo.plist.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -TorDesc.plist: $(top_builddir)/config.status $(srcdir)/TorDesc.plist.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -TorInfo.plist: $(top_builddir)/config.status $(srcdir)/TorInfo.plist.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -TorStartupDesc.plist: $(top_builddir)/config.status $(srcdir)/TorStartupDesc.plist.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-exec-am: - -install-html: install-html-am - -install-info: install-info-am - -install-man: - -install-pdf: install-pdf-am - -install-ps: install-ps-am - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru tor-0.2.1.30/contrib/osx/package_list.txt tor-0.2.2.35/contrib/osx/package_list.txt --- tor-0.2.1.30/contrib/osx/package_list.txt 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/package_list.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -Tor -torstartup diff -Nru tor-0.2.1.30/contrib/osx/package.sh tor-0.2.2.35/contrib/osx/package.sh --- tor-0.2.1.30/contrib/osx/package.sh 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/package.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,155 +0,0 @@ -#!/bin/sh -# $Id$ -# Copyright 2004-2005 Nick Mathewson. -# Copyright 2005-2007 Andrew Lewman -# Copyright 2008 The Tor Project, Inc. -# See LICENSE in Tor distribution for licensing information. - -# This script builds a Macintosh OS X metapackage containing 2 packages: -# - One for Tor. -# - One for Startup script for Tor. -# -# This script expects to be run from the toplevel makefile, with VERSION -# set to the latest Tor version, and Tor already built. -# - -# Read the documentation located in tor/doc/tor-osx-dmg-creation.txt on -# how to build Tor for OSX - -### -# Helpful info on OS X packaging: -# http://developer.apple.com/documentation/DeveloperTools/Conceptual/SoftwareDistribution/index.html -# man packagemaker - -# Make sure VERSION is set, so we don't name the package -# "Tor--$ARCH-Bundle.dmg" -if [ "XX$VERSION" = 'XX' ]; then - echo "VERSION not set." - exit 1 -fi - -## Determine OSX Version -# map version to name -if [ -x /usr/bin/sw_vers ]; then -# This is poor, yet functional. We don't care about the 3rd number in -# the OS version - OSVER=`/usr/bin/sw_vers | grep ProductVersion | cut -f2 | cut -d"." -f1,2` - case "$OSVER" in - "10.6") ARCH="universal";; - "10.5") ARCH="universal";; - "10.4") ARCH="universal";; - "10.3") ARCH="ppc";; - "10.2") ARCH="ppc";; - "10.1") ARCH="ppc";; - "10.0") ARCH="ppc";; - *) ARCH="unknown";; - esac -else - ARCH="unknown" -fi - -# Where will we put our temporary files? -BUILD_DIR=/tmp/tor-osx-$$ -# Path to PackageMaker app. -PACKAGEMAKER=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker - -umask 022 - -echo I might ask you for your password now, so you can sudo. - -sudo rm -rf $BUILD_DIR -mkdir $BUILD_DIR || exit 1 -for subdir in tor_packageroot tor_resources \ - torstartup_packageroot \ - torbundle_resources \ - output; do - mkdir $BUILD_DIR/$subdir -done - -### Make Tor package. - -make install DESTDIR=$BUILD_DIR/tor_packageroot -cp contrib/osx/ReadMe.rtf $BUILD_DIR/tor_resources -chmod 755 contrib/osx/TorPostflight -cp contrib/osx/TorPostflight $BUILD_DIR/tor_resources/postflight -cp contrib/osx/addsysuser $BUILD_DIR/tor_resources/addsysuser -cp contrib/osx/Tor_Uninstaller.applescript $BUILD_DIR/tor_resources/Tor_Uninstaller.applescript -cp contrib/osx/uninstall_tor_bundle.sh $BUILD_DIR/tor_resources/uninstall_tor_bundle.sh -cp contrib/osx/package_list.txt $BUILD_DIR/tor_resources/package_list.txt -cp contrib/osx/tor_logo.gif $BUILD_DIR/tor_resources/background.gif -cp src/config/geoip $BUILD_DIR/tor_resources/geoip -cat < $BUILD_DIR/tor_resources/Welcome.txt -Tor: an anonymous Internet communication system - -Tor is a system for using the internet anonymously, and allowing -others to do so. -EOF - -### Assemble documentation - -DOC=$BUILD_DIR/tor_resources/documents -mkdir $DOC -mkdir $DOC/howto -cp AUTHORS $DOC/AUTHORS.txt -groff doc/tor.1.in -T ps -m man | pstopdf -i -o $DOC/tor-reference.pdf -groff doc/tor-resolve.1 -T ps -m man | pstopdf -i -o $DOC/tor-resolve.pdf -mkdir $DOC/Advanced -cp doc/spec/*.txt $DOC/Advanced -cp doc/HACKING $DOC/Advanced/HACKING.txt -cp ChangeLog $DOC/Advanced/ChangeLog.txt - -find $BUILD_DIR/tor_packageroot -print0 |sudo xargs -0 chown root:wheel - -$PACKAGEMAKER -build \ - -p $BUILD_DIR/output/Tor.pkg \ - -f $BUILD_DIR/tor_packageroot \ - -r $BUILD_DIR/tor_resources \ - -i contrib/osx/TorInfo.plist \ - -d contrib/osx/TorDesc.plist - -### Make Startup Script package - -mkdir -p $BUILD_DIR/torstartup_packageroot/Library/StartupItems/Tor -cp contrib/osx/Tor contrib/osx/StartupParameters.plist \ - $BUILD_DIR/torstartup_packageroot/Library/StartupItems/Tor - -find $BUILD_DIR/torstartup_packageroot -print0 | sudo xargs -0 chown root:wheel - -$PACKAGEMAKER -build \ - -p $BUILD_DIR/output/torstartup.pkg \ - -f $BUILD_DIR/torstartup_packageroot \ - -i contrib/osx/TorStartupInfo.plist \ - -d contrib/osx/TorStartupDesc.plist - -### Assemble the metapackage. Packagemaker won't buld metapackages from -# the command line, so we need to do it by hand. - -MPKG=$BUILD_DIR/output/Tor-$VERSION-$ARCH-Bundle.mpkg -mkdir -p "$MPKG/Contents/Resources" -echo -n "pmkrpkg1" > "$MPKG/Contents/PkgInfo" -cp contrib/osx/ReadMe.rtf "$MPKG/Contents/Resources" -cp contrib/osx/TorBundleInfo.plist "$MPKG/Contents/Info.plist" -cp contrib/osx/TorBundleWelcome.rtf "$MPKG/Contents/Resources/Welcome.rtf" -cp contrib/osx/TorBundleDesc.plist "$MPKG/Contents/Resources/Description.plist" -cp contrib/osx/tor_logo.gif "$MPKG/Contents/Resources/background.gif" - -# Move all the subpackages into place. -mkdir $BUILD_DIR/output/.contained_packages -mv $BUILD_DIR/output/*.pkg $BUILD_DIR/OUTPUT/.contained_packages -( cd $BUILD_DIR/output/.contained_packages ) - -### Copy readmes and licenses into toplevel. -cp contrib/osx/ReadMe.rtf $BUILD_DIR/output/Tor\ ReadMe.rtf -cp LICENSE $BUILD_DIR/output/Tor\ License.txt - -### Package it all into a DMG - -find $BUILD_DIR/output -print0 | sudo xargs -0 chown root:wheel - -mv $BUILD_DIR/output "$BUILD_DIR/Tor-$VERSION-$ARCH-Bundle" -rm -f "Tor-$VERSION-$ARCH-Bundle.dmg" -USER="`whoami`" -sudo hdiutil create -format UDZO -imagekey zlib-level=9 -srcfolder "$BUILD_DIR/Tor-$VERSION-$ARCH-Bundle" "Tor-$VERSION-$ARCH-Bundle.dmg" -sudo chown "$USER" "Tor-$VERSION-$ARCH-Bundle.dmg" - -sudo rm -rf $BUILD_DIR diff -Nru tor-0.2.1.30/contrib/osx/ReadMe.rtf tor-0.2.2.35/contrib/osx/ReadMe.rtf --- tor-0.2.1.30/contrib/osx/ReadMe.rtf 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/ReadMe.rtf 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf102 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;} -{\colortbl;\red255\green255\blue255;} -\margl1440\margr1440\vieww9000\viewh9000\viewkind0 -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f0\fs24 \cf0 Tor is a toolset for a wide range of organizations and people who want to improve their safety and security on the Internet. Using Tor can help you anonymize web browsing and publishing, instant messaging, IRC, SSH, and more. Tor also provides a platform on which software developers can build new applications with built-in anonymity, safety, and privacy features.} diff -Nru tor-0.2.1.30/contrib/osx/StartupParameters.plist tor-0.2.2.35/contrib/osx/StartupParameters.plist --- tor-0.2.1.30/contrib/osx/StartupParameters.plist 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/StartupParameters.plist 1970-01-01 00:00:00.000000000 +0000 @@ -1,13 +0,0 @@ -{ - Description = "Tor"; - Provides = ("tor"); - Requires = ("Network"); - Uses = ("Network"); - OrderPreference = "Last"; - Messages = - { - start = "Starting Tor"; - stop = "Stopping Tor"; - }; -} - diff -Nru tor-0.2.1.30/contrib/osx/Tor tor-0.2.2.35/contrib/osx/Tor --- tor-0.2.1.30/contrib/osx/Tor 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/Tor 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -#!/bin/sh - -TORLOC=/Library/StartupItems/Tor/Tor.loc - -if [ -f $TORLOC ]; then - TORDIR=`cat /Library/StartupItems/Tor/Tor.loc` - if [ "x$TORDIR" = "x" -o ! -d $TORDIR -o ! -x $TORDIR/tor ]; then - TORDIR=/Library/Tor - fi -else - TORDIR=/Library/Tor -fi -TORCONF=$TORDIR/torrc -TORDATA=$TORDIR/var/lib/tor -TORPID=/var/run/Tor.pid -TORUSER=_tor -TORGROUP=daemon -TORCMD=$TORDIR/tor -TORLOG=/var/log/tor.log - -## Determine OSX Version -# map version to name -if [ -x /usr/bin/sw_vers ]; then -# This is poor, yet functional. We don't care about the 3rd number in -# the OS version - OSVER=`/usr/bin/sw_vers | grep ProductVersion | cut -f2 | cut -d"." -f1,2` - case "$OSVER" in - "10.6") ARCH="universal";; - "10.5") ARCH="universal";; - "10.4") ARCH="universal";; - "10.3") ARCH="ppc";; - "10.2") ARCH="ppc";; - "10.1") ARCH="ppc";; - "10.0") ARCH="ppc";; - esac -else - ARCH="unknown" -fi - -if [ $ARCH != "universal" ]; then - export EVENT_NOKQUEUE=1 -fi - -## -# Tor Service -## - -. /etc/rc.common - -StartService () -{ - - if [ -f $TORCMD ]; then - if pid=$(GetPID Tor); then - return 0 - else - ConsoleMessage "Starting Tor Service" -# Tentative -# Making sure it is not running (I know it is not a best approarch) - killall tor 2>/dev/null - $TORCMD -f "$TORCONF" --runasdaemon 1 --pidfile "$TORPID" --datadirectory "$TORDATA" --user "$TORUSER" --group "$TORGROUP" --log "notice file $TORLOG" & - fi - fi -} - -StopService () -{ - if pid=$(GetPID Tor); then - ConsoleMessage "Stopping Tor Service" - kill -TERM "${pid}" -# Just for sanity (sometimes necessary.) - killall tor 2>/dev/null - else - ConsoleMessage "Tor Service not responding." -# Just for sanity (sometimes necessary.) - killall tor 2>/dev/null - fi -} - -RestartService () { StopService; StartService; } - -if [ "$#" = 0 ]; then - echo "Syntax: tor {start|stop}" - exit 1 -fi - -RunService "$1" diff -Nru tor-0.2.1.30/contrib/osx/TorBundleDesc.plist.in tor-0.2.2.35/contrib/osx/TorBundleDesc.plist.in --- tor-0.2.1.30/contrib/osx/TorBundleDesc.plist.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorBundleDesc.plist.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,14 +0,0 @@ - - - - - IFPkgDescriptionDeleteWarning - - IFPkgDescriptionDescription - Bundled package of Tor @VERSION@. - IFPkgDescriptionTitle - Tor Expert Bundle - IFPkgDescriptionVersion - @VERSION@ - - diff -Nru tor-0.2.1.30/contrib/osx/TorBundleInfo.plist.in tor-0.2.2.35/contrib/osx/TorBundleInfo.plist.in --- tor-0.2.1.30/contrib/osx/TorBundleInfo.plist.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorBundleInfo.plist.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ - - - - - CFBundleName - Tor Bundle - CFBundleGetInfoString - Tor Bundle @VERSION@ - CFBundleIdentifier - org.torproject.torbundle - CFBundleShortVersionString - @VERSION@ - IFPkgFlagComponentDirectory - ../.contained_packages - IFPkgFlagPackageList - - - IFPkgFlagPackageLocation - Tor.pkg - IFPkgFlagPackageSelection - required - - - IFPkgFlagPackageLocation - torstartup.pkg - IFPkgFlagPackageSelection - selected - - - IFPkgFormatVersion - 0.10000000149011612 - - diff -Nru tor-0.2.1.30/contrib/osx/TorBundleWelcome.rtf tor-0.2.2.35/contrib/osx/TorBundleWelcome.rtf --- tor-0.2.1.30/contrib/osx/TorBundleWelcome.rtf 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorBundleWelcome.rtf 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf420 -{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 Helvetica-Oblique;\f2\fswiss\fcharset77 Helvetica-Bold; -} -{\colortbl;\red255\green255\blue255;} -\paperw11900\paperh16840\margl1440\margr1440\vieww9000\viewh9000\viewkind0 -\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural - -\f0\fs24 \cf0 Welcome to the Tor Expert installer.\ -This will install Tor in your computer.\ -\ - -\f0\b0 \ -\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural - -\f2\b \cf0 Tor -\f0\b0 is a system for using the Internet anonymously, and allowing\ -others to do so.\ -\ - For more information, please visit https://www.torproject.org/\ -\ diff -Nru tor-0.2.1.30/contrib/osx/TorDesc.plist.in tor-0.2.2.35/contrib/osx/TorDesc.plist.in --- tor-0.2.1.30/contrib/osx/TorDesc.plist.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorDesc.plist.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ - - - - - IFPkgDescriptionTitle - Tor - IFPkgDescriptionVersion - @VERSION@ - - diff -Nru tor-0.2.1.30/contrib/osx/TorInfo.plist.in tor-0.2.2.35/contrib/osx/TorInfo.plist.in --- tor-0.2.1.30/contrib/osx/TorInfo.plist.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorInfo.plist.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ - - - - - CFBundleIdentifier - Tor @VERSION@ - CFBundleGetInfoString - Tor @VERSION@ - CFBundleName - Tor - CFBundleShortVersionString - @VERSION@ - IFPkgFlagAllowBackRev - - IFPkgFlagAuthorizationAction - RootAuthorization - IFPkgFlagFollowLinks - - IFPkgFlagIsRequired - - IFPkgFlagRootVolumeOnly - - IfPkgFlagBackgroundScaling - proportional - IFPkgFlagBackgroundAlignment - bottomleft - - Binary files /tmp/kK6DfM7LYs/tor-0.2.1.30/contrib/osx/tor_logo.gif and /tmp/vhcskgnG_9/tor-0.2.2.35/contrib/osx/tor_logo.gif differ diff -Nru tor-0.2.1.30/contrib/osx/TorPostflight tor-0.2.2.35/contrib/osx/TorPostflight --- tor-0.2.1.30/contrib/osx/TorPostflight 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorPostflight 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ -#!/bin/sh -# ==================================================================== -# TorPostFlight is distributed under this license -# -# Copyright (c) 2006 Andrew Lewman -# Copyright (c) 2008 The Tor Project -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# -# * Neither the names of the copyright owners nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ====================================================================== - -# TorPostflight gets invoked after any install or upgrade. - -ADDSYSUSER=$RECEIPT_PATH/addsysuser -if [ ! -x "$ADDSYSUSER" ]; then - echo "Could not find addsysuser script." - exit 1 -fi - -TORUSER=_tor -TORGROUP=daemon -TARGET=$2/Library/Tor -TORDIR=$TARGET/var/lib/tor -LOGFILE=/var/log/tor.log - -# Check defaults for TARGET -if [ "$TARGET" == "//Library/Tor" ]; then - TARGET=/Library/Tor -fi - -# Create user $TORUSER in group daemon. If it's already there, great. -$ADDSYSUSER $TORUSER "Tor System user" $TORDIR - -# Create the tor directory, if it doesn't exist. -if [ ! -d $TORDIR ]; then - mkdir -p $TORDIR -fi -# Check its permissions. -chown $TORUSER $TORDIR -chgrp daemon $TORDIR -chmod 700 $TORDIR - -if [ ! -f $LOGFILE ]; then - touch $LOGFILE - chown $TORUSER $LOGFILE - chgrp daemon $LOGFILE - chmod 660 $LOGFILE -fi - -# Create the configuration file only if there wasn't one already. -if [ ! -f $TARGET/torrc ]; then - cp $TARGET/torrc.sample $TARGET/torrc -fi - -# Put the geoip database into the datadir -if [ ! -f $TORDIR/geoip ]; then - cp $PACKAGE_PATH/Contents/Resources/geoip $TORDIR/geoip -fi - -# Ensure symbolic links -cd /usr/bin -if [ -e /usr/bin/tor -a ! -L /usr/bin/tor ]; then - mv tor tor_old -fi -if [ -e /usr/bin/tor-resolve -a ! -L /usr/bin/tor-resolve ]; then - mv tor-resolve tor-resolve_old -fi -ln -sf $TARGET/tor . -ln -sf $TARGET/tor-resolve . - -cd /usr/share/man/man1 -MAN1=$TARGET/share/man/man1 -#ln -sf $MAN1/*.1 . - -# Copy Documentation -if [ -d $PACKAGE_PATH/Contents/Resources/documents ];then - cp -r $PACKAGE_PATH/Contents/Resources/documents $TARGET/documents -fi - -# Copy Uninstaller -if [ -f $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.applescript ]; then - cp $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.applescript $TARGET/Tor_Uninstaller.applescript - chmod 550 $TARGET/Tor_Uninstaller.applescript -fi - -if [ -f $PACKAGE_PATH/Contents/Resources/uninstall_tor_bundle.sh ]; then - cp $PACKAGE_PATH/Contents/Resources/uninstall_tor_bundle.sh $TARGET/uninstall_tor_bundle.sh - chmod 550 $TARGET/uninstall_tor_bundle.sh -fi - -if [ -f $PACKAGE_PATH/Contents/Resources/package_list.txt ]; then - cp $PACKAGE_PATH/Contents/Resources/package_list.txt $TARGET/package_list.txt -fi - -if [ -d /Library/StartupItems/Tor ]; then - rm -f /Library/StartupItems/Tor/Tor.loc - echo "$TARGET" > /Library/StartupItems/Tor/Tor.loc -fi diff -Nru tor-0.2.1.30/contrib/osx/TorPreFlight tor-0.2.2.35/contrib/osx/TorPreFlight --- tor-0.2.1.30/contrib/osx/TorPreFlight 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorPreFlight 1970-01-01 00:00:00.000000000 +0000 @@ -1,51 +0,0 @@ -#!/bin/sh -# -# =================================================================== -# -# TorPreFlight is distributed under this license: -# -# Copyright (c) 2006 Andrew Lewman -# Copyright (c) 2008 The Tor Project, Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following disclaimer -# in the documentation and/or other materials provided with the -# distribution. -# -# * Neither the names of the copyright owners nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -#=============================================================================== - -# TorPreFlight is invoked before the install begins - -# Figure out where Tor is installed -if [ -f /Library/StartupItems/Tor/Tor.loc ]; then - TORPATH=`cat /Library/StartupItems/Tor/Tor.loc` -else - TORPATH="/Library/Tor/" -fi - -# Backup all of Tor, just in case -if [ -d $TORPATH ]; then - cp $TORPATH/torrc $TORPATH/torrc.installer-saved -fi diff -Nru tor-0.2.1.30/contrib/osx/TorStartupDesc.plist.in tor-0.2.2.35/contrib/osx/TorStartupDesc.plist.in --- tor-0.2.1.30/contrib/osx/TorStartupDesc.plist.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorStartupDesc.plist.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ - - - - - IFPkgDescriptionTitle - Tor Startup Script - IFPkgDescriptionVersion - @VERSION@ - - diff -Nru tor-0.2.1.30/contrib/osx/TorStartupInfo.plist tor-0.2.2.35/contrib/osx/TorStartupInfo.plist --- tor-0.2.1.30/contrib/osx/TorStartupInfo.plist 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/TorStartupInfo.plist 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ - - - - - CFBundleIdentifier - Tor Startup Script - CFBundleGetInfoString - Tor Startup Script - CFBundleName - Tor Startup Script - CFBundleShortVersionString - 0.1 - IFPkgFlagAllowBackRev - - IFPkgFlagAuthorizationAction - RootAuthorization - IFPkgFlagRestartAction - NoRestart - IFPkgFlagFollowLinks - - IFPkgFlagIsRequired - - IFPkgFlagRootVolumeOnly - - - diff -Nru tor-0.2.1.30/contrib/osx/Tor_Uninstaller.applescript tor-0.2.2.35/contrib/osx/Tor_Uninstaller.applescript --- tor-0.2.1.30/contrib/osx/Tor_Uninstaller.applescript 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/Tor_Uninstaller.applescript 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ --- Tor Uninstaller.applescript --- Tor Uninstaller - --- =============================================================================== --- Tor Uninstaller is distributed under this license: --- --- Copyright (c) 2005 Andrew Lewman ( pgp key: 31B0974B ) --- --- Redistribution and use in source and binary forms, with or without --- modification, are permitted provided that the following conditions are --- met: --- --- * Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- * Redistributions in binary form must reproduce the above --- copyright notice, this list of conditions and the following disclaimer --- in the documentation and/or other materials provided with the --- distribution. --- --- * Neither the names of the copyright owners nor the names of its --- contributors may be used to endorse or promote products derived from --- this software without specific prior written permission. --- --- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS --- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT --- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR --- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT --- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, --- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT --- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, --- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY --- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT --- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE --- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- =============================================================================== - -on run - - -- Validate & find disk paths - set boot_disk to (path to startup disk) as string - set default_tor_path to boot_disk & "Library:Tor" - set default_privoxy_path to boot_disk & "Library:Privoxy" - set default_tor_startup_path to boot_disk & "Library:StartupItems:Tor" - set default_privoxy_startup_path to boot_disk & "Library:StartupItems:Privoxy" - set shell_script to default_tor_path & ":uninstall_tor_bundle.sh" - set doomed_path_list to {default_tor_path, default_privoxy_path, default_tor_startup_path, default_privoxy_startup_path} - - -- Display what we're removing and ask for validation - -- this is the simplest way to do this - set remove_me to display dialog "Welcome to the Tor + Privoxy Uninstaller. This program will remove:" & return & return & POSIX path of default_tor_path & return & POSIX path of default_privoxy_path & return & POSIX path of default_tor_startup_path & return & POSIX path of default_privoxy_startup_path & return & return & "If this looks correct, choose Yes. Otherwise, choose No." buttons {"Yes", "No"} default button "No" - - -- Run a shell script to do all the unix work since applescript can't see it at all - if button returned of result is "Yes" then - try - do shell script (POSIX path of shell_script) with administrator privileges - on error - display dialog "Too many errors, quitting." buttons {"Quit"} default button "Quit" with icon stop giving up after 3 - quit - end try - -- So Long and Thanks for all the Fish! - display dialog "Thank you for using tor!" buttons {"Ok"} giving up after 3 - else - display dialog "Thank you for your continued use of Tor & Privoxy" buttons {"You're welcome."} giving up after 3 - end if - -end run --- We're done \ No newline at end of file diff -Nru tor-0.2.1.30/contrib/osx/uninstall_tor_bundle.sh tor-0.2.2.35/contrib/osx/uninstall_tor_bundle.sh --- tor-0.2.1.30/contrib/osx/uninstall_tor_bundle.sh 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/osx/uninstall_tor_bundle.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,140 +0,0 @@ -#!/bin/sh -# -# not a psueber-pretty uninstall script for the Tor bundle package -# . this currently leaves ~/.tor, /var/log/tor and empty -# directories /Library/Tor, /Library/Privoxy (see comment below) -# . this relies on the fact that the startup items directories (if any) -# will be named the same as the package name (ie. Tor) -# -# -# version history -# initial version - 21 may, 2005 - loki der quaeler -# -# -# comments -# loki: because of the way the Tor package installs itself (the root directory -# is the filesystem root, as opposed to the much nicer way that privoxy -# installs itself with the privoxy home (/Library/Privoxy) as its -# install root directory), i thought it more prudent to leave empty -# directories laying around rather than try to incorrectly intuit from -# the bom contents what directories should exist and which ones could be -# deleted (ie, the Tor package has /Library listed in its bom -- -# obviously this is a Bad Thing(tm) to delete). -# + when the Tor installer is changed, this uninstaller could be modified. -# loki: /bin/ps, when run from a terminal window in osX, restricts information -# based on the width of the window. an 80 col window will stupidly cause -# the grep search for the privoxy pid to not find the pid, whereas the grep -# in a wider window succeeds. consider using killall. in the meantime, -# advise uninstall runners to drag wide their terminal window.. ugh -# - - -### this is the location of a file which contains all the actual package names -## (ie "Tor", "torstartup", ...) the list should be new-line-delimited. -PACKAGE_LIST_SRC=/Library/Tor/package_list.txt - -### this is the name of the user created in the install process of Tor -TOR_USER=_tor - -### these should be constant across all osX installs (so leave them be) -STARTUP_ITEMS_DIR=/Library/StartupItems -PKG_RCPT_BASE_DIR=/Library/Receipts -BOM_INTERMEDIATE_DIR=Contents/Resources -INFO_INTERMEDIATE_DIR=$BOM_INTERMEDIATE_DIR/English.lproj -TEMP_BOM_CONTENTS=/tmp/tor_uninst_scratch - -### make sure the script is being run as root, barf if not -if [ "`whoami`" != "root" ]; then - echo "Must be root to run the uninstall script." - exit -1 -fi - - -### check to see if tor is currently running, kill it if it is -## we grep on 'Tor/tor ' because 'tor' is too common (like in 'directory') -## -- this relies on the fact that tor has been started with command -## line arguments.. :-/ -TOR_PID=`ps -uax | grep 'Tor/tor ' | grep -v grep | awk '{print $2;}'` -if [ ${#TOR_PID} -gt 0 ]; then - echo ". Killing currently running tor process, pid is $TOR_PID" - kill -9 $TOR_PID -else - echo ". tor process appears to already be stopped" -fi - - -### check to see if privoxy is currently running, kill it if it is -PRIVOXY_PID=`ps -uax | grep privoxy | grep -v grep | awk '{print $2;}'` -if [ ${#PRIVOXY_PID} -gt 0 ]; then - echo ". Killing currently running privoxy process, pid is $PRIVOXY_PID" - kill -9 $PRIVOXY_PID -else - echo ". privoxy process appears to already be stopped" -fi - - -## grab each package name from the package list file -while read LINE; do - if [ ${#LINE} -gt 0 ]; then - PACKAGE_NAME=$LINE.pkg - PACKAGE_PATH=$PKG_RCPT_BASE_DIR/$PACKAGE_NAME - echo ". Uninstalling $PACKAGE_NAME" - if [ ! -d $PACKAGE_PATH ]; then - echo " . No receipt exists for this package -- skipping." - - continue - fi - - - ## get rid of the startup item if it exists - STARTUP_DIR=$STARTUP_ITEMS_DIR/$LINE - if [ -d $STARTUP_DIR ]; then - echo " . Deleting startup item $STARTUP_DIR" - rm -rf $STARTUP_DIR - fi - - - ## determine the root directory of the the relative paths specified in the bom - DEFAULT_LOC=`grep DefaultLocation $PACKAGE_PATH/$INFO_INTERMEDIATE_DIR/$LINE.info | awk '{print $2;}'` - if [ ${#DEFAULT_LOC} -eq 0 ]; then - echo "!! Could not find default location for $LINE package -- skipping package." - - continue - fi - - ## examine the list of installed items desribed in the bom - BOM_FILE=$PACKAGE_PATH/$BOM_INTERMEDIATE_DIR/$LINE.bom - lsbom $BOM_FILE > $TEMP_BOM_CONTENTS - while read BOM_ITEM; do - ## 3 column items describe just directories, 5 column items describe actual files - COL_COUNT=$(echo $BOM_ITEM | awk '{print NF;}') - if [ "$COL_COUNT" -eq 5 ]; then - FILE_NAME=$DEFAULT_LOC/$(echo $BOM_ITEM | awk '{print $1;}') - - echo " . Removing $FILE_NAME" - rm -rf $FILE_NAME - fi - done < $TEMP_BOM_CONTENTS - - ## remove package receipt - echo " . Removing package receipt $PACKAGE_PATH" - rm -rf $PACKAGE_PATH - fi -done < $PACKAGE_LIST_SRC - - -## nuke the user created by the install process. -echo ". Removing created user $TOR_USER" -if [ -x /usr/bin/dscl ]; then - dscl . -delete /users/$TOR_USER -else - niutil -destroy . /users/$TOR_USER -fi - -## clean up -echo ". Cleaning up" -rm -rf $TEMP_BOM_CONTENTS -rm -rf /Library/Privoxy/ /Library/StartupItems/Privoxy/ /Library/Tor/ /Library/StartupItems/Tor/ /Library/Torbutton/ /Library/Receipts/Privoxy.pkg /Library/Receipts/torbutton.pkg /Library/Receipts/Tor.pkg /Library/Receipts/Vidalia.pkg /Library/Receipts/TorStartup.pkg - -echo ". Finished" - diff -Nru tor-0.2.1.30/contrib/package_nsis-mingw.sh tor-0.2.2.35/contrib/package_nsis-mingw.sh --- tor-0.2.1.30/contrib/package_nsis-mingw.sh 2010-12-16 21:18:54.000000000 +0000 +++ tor-0.2.2.35/contrib/package_nsis-mingw.sh 2011-12-15 16:26:49.000000000 +0000 @@ -91,5 +91,5 @@ cp contrib/tor-mingw.nsi.in win_tmp/contrib/ cd win_tmp -"C:\Program Files\NSIS\makensis.exe" contrib/tor-mingw.nsi.in +makensis.exe contrib/tor-mingw.nsi.in diff -Nru tor-0.2.1.30/contrib/rc.subr tor-0.2.2.35/contrib/rc.subr --- tor-0.2.1.30/contrib/rc.subr 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/rc.subr 2011-12-15 16:26:49.000000000 +0000 @@ -1,5 +1,4 @@ #!/bin/sh -# $Id$ # $FreeBSD: ports/security/tor-devel/files/tor.in,v 1.1 2006/02/17 22:21:25 mnag Exp $ # # (rc.subr written by Peter Thoenen for Net/FreeBSD) diff -Nru tor-0.2.1.30/contrib/suse/Makefile.in tor-0.2.2.35/contrib/suse/Makefile.in --- tor-0.2.1.30/contrib/suse/Makefile.in 2011-02-23 08:25:53.000000000 +0000 +++ tor-0.2.2.35/contrib/suse/Makefile.in 2011-12-15 17:01:54.000000000 +0000 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,8 +16,9 @@ @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -42,11 +44,15 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/orconfig.h CONFIG_CLEAN_FILES = tor.sh +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AR = @AR@ +ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -81,15 +87,19 @@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ +OPENSSL = @OPENSSL@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ +SHA1SUM = @SHA1SUM@ SHELL = @SHELL@ STRIP = @STRIP@ TORGROUP = @TORGROUP@ @@ -104,6 +114,7 @@ TOR_LIB_GDI = @TOR_LIB_GDI@ TOR_LIB_WS32 = @TOR_LIB_WS32@ TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ +TOR_ZLIB_LIBS = @TOR_ZLIB_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -152,6 +163,7 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ confdir = $(sysconfdir)/tor @@ -163,14 +175,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/suse/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign contrib/suse/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign contrib/suse/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign contrib/suse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -188,6 +200,7 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): tor.sh: $(top_builddir)/config.status $(srcdir)/tor.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ tags: TAGS @@ -213,13 +226,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -247,6 +264,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -265,6 +283,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -273,18 +293,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -317,6 +347,7 @@ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru tor-0.2.1.30/contrib/suse/tor.sh tor-0.2.2.35/contrib/suse/tor.sh --- tor-0.2.1.30/contrib/suse/tor.sh 2011-02-23 08:26:28.000000000 +0000 +++ tor-0.2.2.35/contrib/suse/tor.sh 2011-12-15 17:02:07.000000000 +0000 @@ -51,6 +51,8 @@ TORGROUP=_tor export TORGROUP +TOR_DAEMON_PID_DIR="/usr/local/var/run/tor" + if [ -x /bin/su ] ; then SUPROG=/bin/su elif [ -x /sbin/su ] ; then @@ -67,6 +69,12 @@ start) echo "Starting tor daemon" + + if [ ! -d $TOR_DAEMON_PID_DIR ] ; then + mkdir -p $TOR_DAEMON_PID_DIR + chown $TORUSER:$TORGROUP $TOR_DAEMON_PID_DIR + fi + ## Start daemon with startproc(8). If this fails ## the echo return value is set appropriate. diff -Nru tor-0.2.1.30/contrib/suse/tor.sh.in tor-0.2.2.35/contrib/suse/tor.sh.in --- tor-0.2.1.30/contrib/suse/tor.sh.in 2009-05-18 23:47:00.000000000 +0000 +++ tor-0.2.2.35/contrib/suse/tor.sh.in 2011-12-15 16:26:49.000000000 +0000 @@ -51,6 +51,8 @@ TORGROUP=@TORGROUP@ export TORGROUP +TOR_DAEMON_PID_DIR="@LOCALSTATEDIR@/run/tor" + if [ -x /bin/su ] ; then SUPROG=/bin/su elif [ -x /sbin/su ] ; then @@ -67,6 +69,12 @@ start) echo "Starting tor daemon" + + if [ ! -d $TOR_DAEMON_PID_DIR ] ; then + mkdir -p $TOR_DAEMON_PID_DIR + chown $TORUSER:$TORGROUP $TOR_DAEMON_PID_DIR + fi + ## Start daemon with startproc(8). If this fails ## the echo return value is set appropriate. diff -Nru tor-0.2.1.30/contrib/torify.1 tor-0.2.2.35/contrib/torify.1 --- tor-0.2.1.30/contrib/torify.1 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/torify.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,32 +0,0 @@ -.TH torify 1 "" Jan-2009 "" -.\" manual page by Peter Palfrader -.SH NAME -.LP -torify \- wrapper for tsocks and tor - -.SH SYNOPSIS -\fBtorify\fP\ \fIapplication\fP\ [\fIapplication's\ arguments\fP] - -.SH DESCRIPTION -\fBtorify\fR is a simple wrapper that calls tsocks with a tor specific -configuration file. - -tsocks itself is a wrapper between the tsocks library and the application -that you would like to run socksified. - -Please note that since tsocks uses LD_PRELOAD, torify cannot be applied -to suid binaries. - -You should also be aware that the way tsocks currently works only TCP -connections are socksified. Be aware that this will in most circumstances -not include hostname lookups which would still be routed through your -normal system resolver to your usual resolving nameservers. The -\fBtor-resolve\fR(1) tool can be useful as a workaround in some cases. -The Tor FAQ at https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ might -have further information on this subject. - -.SH SEE ALSO -.BR tor (1), -.BR tor-resolve (1), -.BR tsocks (1), -.BR tsocks.conf (5). diff -Nru tor-0.2.1.30/contrib/torify.in tor-0.2.2.35/contrib/torify.in --- tor-0.2.1.30/contrib/torify.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/torify.in 2011-12-15 16:26:49.000000000 +0000 @@ -3,43 +3,69 @@ # Wrapper script for use of the tsocks(8) transparent socksification library # See the tsocks(1) and torify(1) manpages. -# Copyright (c) 2004, 2006 Peter Palfrader +# Copyright (c) 2004, 2006, 2009 Peter Palfrader # Modified by Jacob Appelbaum April 16th 2006 # May be distributed under the same terms as Tor itself +# taken from Debian's Developer's Reference, 6.4 +pathfind() { + OLDIFS="$IFS" + IFS=: + for p in $PATH; do + if [ -x "$p/$*" ]; then + IFS="$OLDIFS" + return 0 + fi + done + IFS="$OLDIFS" + return 1 +} -# Define and ensure we have tsocks -# XXX: what if we don't have which? -TSOCKS="`which tsocks`" -if [ ! -x "$TSOCKS" ] -then - echo "$0: Can't find tsocks in PATH. Perhaps you haven't installed it?" >&2 - exit 1 +# Check for any argument list +if [ "$#" = 0 ]; then + echo "Usage: $0 [-hv] [...]" >&2 + exit 1 fi -# Check for any argument list -if [ "$#" = 0 ] -then - echo "Usage: $0 [...]" >&2 - exit 1 +if [ "$#" = 1 ] && ( [ "$1" = "-h" ] || [ "$1" = "--help" ] ); then + echo "Usage: $0 [-hv] [...]" + exit 0 fi -if [ "$#" = 1 ] && ( [ "$1" = "-h" ] || [ "$1" = "--help" ] ) -then - echo "Usage: $0 [...]" - exit 0 + +if [ "$1" = "-v" ] || [ "$1" = "--verbose" ]; then + verbose=1 + shift 1 +else + verbose=0 fi -# Define our tsocks config file -TSOCKS_CONF_FILE="@CONFDIR@/tor-tsocks.conf" -export TSOCKS_CONF_FILE - -# Check that we've got a tsocks config file -if [ -r "$TSOCKS_CONF_FILE" ] -then - exec tsocks "$@" - echo "$0: Failed to exec tsocks $@" >&2 +if pathfind torsocks; then + ! [ "$verbose" -ge 1 ] || echo "Using torsocks as socksifier." >&2 + + exec torsocks "$@" + echo "$0: Failed to exec torsocks $@" >&2 exit 1 + +elif pathfind tsocks; then + ! [ "$verbose" -ge 1 ] || echo "Using tsocks as socksifier." >&2 + + # Define our tsocks config file + TSOCKS_CONF_FILE="/etc/tor/tor-tsocks.conf" + export TSOCKS_CONF_FILE + + # Check that we've got a tsocks config file + if [ -r "$TSOCKS_CONF_FILE" ] + then + echo "WARNING: tsocks is known to leak DNS and UDP data. If you had torsocks we would use that." >&2 + exec tsocks "$@" + echo "$0: Failed to exec tsocks $@" >&2 + exit 1 + else + echo "$0: Missing tsocks configuration file \"$TSOCKS_CONF_FILE\"." >&2 + exit 1 + fi + else - echo "$0: Missing tsocks configuration file \"$TSOCKS_CONF_FILE\"." >&2 + echo "$0: Can't find either tsocks or torsocks in your PATH. Perhaps you haven't installed either?" >&2 exit 1 fi diff -Nru tor-0.2.1.30/contrib/tor-mingw.nsi.in tor-0.2.2.35/contrib/tor-mingw.nsi.in --- tor-0.2.1.30/contrib/tor-mingw.nsi.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/tor-mingw.nsi.in 2011-12-15 17:02:07.000000000 +0000 @@ -8,8 +8,7 @@ !include "LogicLib.nsh" !include "FileFunc.nsh" !insertmacro GetParameters - -!define VERSION "0.2.1.30" +!define VERSION "0.2.2.35" !define INSTALLER "tor-${VERSION}-win32.exe" !define WEBSITE "https://www.torproject.org/" !define LICENSE "LICENSE" diff -Nru tor-0.2.1.30/contrib/tor.sh tor-0.2.2.35/contrib/tor.sh --- tor-0.2.1.30/contrib/tor.sh 2011-02-23 08:26:27.000000000 +0000 +++ tor-0.2.2.35/contrib/tor.sh 2011-12-15 17:02:07.000000000 +0000 @@ -16,6 +16,15 @@ # description: Onion Router - A low-latency anonymous proxy # +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/tor +NAME=tor +DESC="tor daemon" +TORPIDDIR=/var/run/tor +TORPID=$TORPIDDIR/tor.pid +WAITFORDAEMON=60 +ARGS="" + # Library functions if [ -f /etc/rc.d/init.d/functions ]; then . /etc/rc.d/init.d/functions @@ -23,9 +32,6 @@ . /etc/init.d/functions fi -# Increase open file descriptors a reasonable amount -ulimit -n 8192 - TORCTL=/usr/local/bin/torctl # torctl will use these environment variables @@ -44,9 +50,47 @@ SUPROG=/bin/su fi +# Raise ulimit based on number of file descriptors available (thanks, Debian) + +if [ -r /proc/sys/fs/file-max ]; then + system_max=`cat /proc/sys/fs/file-max` + if [ "$system_max" -gt "80000" ] ; then + MAX_FILEDESCRIPTORS=32768 + elif [ "$system_max" -gt "40000" ] ; then + MAX_FILEDESCRIPTORS=16384 + elif [ "$system_max" -gt "10000" ] ; then + MAX_FILEDESCRIPTORS=8192 + else + MAX_FILEDESCRIPTORS=1024 + cat << EOF + +Warning: Your system has very few filedescriptors available in total. + +Maybe you should try raising that by adding 'fs.file-max=100000' to your +/etc/sysctl.conf file. Feel free to pick any number that you deem appropriate. +Then run 'sysctl -p'. See /proc/sys/fs/file-max for the current value, and +file-nr in the same directory for how many of those are used at the moment. + +EOF + fi +else + MAX_FILEDESCRIPTORS=8192 +fi + +NICE="" + case "$1" in start) + if [ -n "$MAX_FILEDESCRIPTORS" ]; then + echo -n "Raising maximum number of filedescriptors (ulimit -n) to $MAX_FILEDESCRIPTORS" + if ulimit -n "$MAX_FILEDESCRIPTORS" ; then + echo "." + else + echo ": FAILED." + fi + fi + action $"Starting tor:" $TORCTL start RETVAL=$? ;; diff -Nru tor-0.2.1.30/contrib/tor.sh.in tor-0.2.2.35/contrib/tor.sh.in --- tor-0.2.1.30/contrib/tor.sh.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/contrib/tor.sh.in 2011-12-15 16:26:49.000000000 +0000 @@ -16,6 +16,15 @@ # description: Onion Router - A low-latency anonymous proxy # +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/tor +NAME=tor +DESC="tor daemon" +TORPIDDIR=/var/run/tor +TORPID=$TORPIDDIR/tor.pid +WAITFORDAEMON=60 +ARGS="" + # Library functions if [ -f /etc/rc.d/init.d/functions ]; then . /etc/rc.d/init.d/functions @@ -23,9 +32,6 @@ . /etc/init.d/functions fi -# Increase open file descriptors a reasonable amount -ulimit -n 8192 - TORCTL=@BINDIR@/torctl # torctl will use these environment variables @@ -44,9 +50,47 @@ SUPROG=/bin/su fi +# Raise ulimit based on number of file descriptors available (thanks, Debian) + +if [ -r /proc/sys/fs/file-max ]; then + system_max=`cat /proc/sys/fs/file-max` + if [ "$system_max" -gt "80000" ] ; then + MAX_FILEDESCRIPTORS=32768 + elif [ "$system_max" -gt "40000" ] ; then + MAX_FILEDESCRIPTORS=16384 + elif [ "$system_max" -gt "10000" ] ; then + MAX_FILEDESCRIPTORS=8192 + else + MAX_FILEDESCRIPTORS=1024 + cat << EOF + +Warning: Your system has very few filedescriptors available in total. + +Maybe you should try raising that by adding 'fs.file-max=100000' to your +/etc/sysctl.conf file. Feel free to pick any number that you deem appropriate. +Then run 'sysctl -p'. See /proc/sys/fs/file-max for the current value, and +file-nr in the same directory for how many of those are used at the moment. + +EOF + fi +else + MAX_FILEDESCRIPTORS=8192 +fi + +NICE="" + case "$1" in start) + if [ -n "$MAX_FILEDESCRIPTORS" ]; then + echo -n "Raising maximum number of filedescriptors (ulimit -n) to $MAX_FILEDESCRIPTORS" + if ulimit -n "$MAX_FILEDESCRIPTORS" ; then + echo "." + else + echo ": FAILED." + fi + fi + action $"Starting tor:" $TORCTL start RETVAL=$? ;; diff -Nru tor-0.2.1.30/debian/changelog tor-0.2.2.35/debian/changelog --- tor-0.2.1.30/debian/changelog 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/changelog 2012-01-10 03:49:41.000000000 +0000 @@ -1,34 +1,151 @@ -tor (0.2.1.30-1~ppa1~hardy1) hardy; urgency=low +tor (0.2.2.35-1~ppa1~hardy1) hardy; urgency=low - * Backport to Hardy. + * Backport to hardy. - -- Nicola Ferralis Sun, 20 Mar 2011 17:23:23 -0400 + -- Nicola Ferralis Mon, 09 Jan 2012 22:29:20 -0500 -tor (0.2.1.30-1~hardy+1) hardy-backport; urgency=low +tor (0.2.2.35-1) unstable; urgency=high - * Build for hardy. - * Conflict with libssl0.9.8 (<< 0.9.8g-4ubuntu3.1) on hardy - * Replace hardening-includes use with hardening-wrapper. + * New upstream version, fixing a heap overflow bug related to Tor's + SOCKS code (CVE-2011-2778). + * There no longer is a document called INSTALL to copy to + usr/share/docs/tor, so get rid of the lintian override. Since that was + the only one in the tor package get rid of installing overrides for the + tor package entirely - there's still one override in tor-geoipdb + (closes Tor #4576). - -- Peter Palfrader Sat, 26 Feb 2011 11:15:34 +0100 + -- Peter Palfrader Thu, 15 Dec 2011 21:04:51 +0100 -tor (0.2.1.30-1) unstable; urgency=low +tor (0.2.2.34-1) unstable; urgency=high + + * New upstream version, fixing a couple of security relevant bugs + such as guard enumeration (CVE-2011-2768) and bridge enumeration + (CVE-2011-2769) issues. For details consult the upstream changelog. + + -- Peter Palfrader Thu, 27 Oct 2011 11:48:31 +0200 + +tor (0.2.2.33-1) unstable; urgency=low + + * New upstream version. + * Make patches/06_add_compile_time_defaults build without compiler warnings: + - Correctly declare functions as having no arguments instead of not + telling the compiler which arguments it'll have. + * Suggest tor-arm (closes: #640265). + * Downgrade socat and polipo|privoxy to Suggests (closes: #640264). + + -- Peter Palfrader Wed, 14 Sep 2011 08:53:40 +0200 + +tor (0.2.2.32-1) unstable; urgency=low + + * New upstream version, upload to unstable. + + -- Peter Palfrader Mon, 29 Aug 2011 13:30:36 +0200 + +tor (0.2.2.31-rc-1) experimental; urgency=low + + * New upstream version. + + -- Peter Palfrader Sat, 20 Aug 2011 10:34:09 +0200 + +tor (0.2.2.30-rc-1) experimental; urgency=low + + * New upstream version. + + -- Peter Palfrader Wed, 13 Jul 2011 11:57:30 +0200 + +tor (0.2.2.29-beta-1) experimental; urgency=low + + * New upstream version. + * Enable Control Socket by default. It lives in /var/run/tor/ + (closes: #552556). + * The postinst script changes /var/run/tor to mode 02750 if it exists, + but the tor init script creates it with mode 02700 if it doesn't. + Change the init script to also create the directory with a group + writeable mode, the same as the postinst maintainer script, i.e. 02750. + . + This will allow users in the debian-tor group to access the control + socket (re: #552556). + + -- Peter Palfrader Thu, 23 Jun 2011 11:26:49 +0200 + +tor (0.2.2.28-beta-1) experimental; urgency=low + + * New upstream version. + + -- Peter Palfrader Sun, 05 Jun 2011 19:21:48 +0200 + +tor (0.2.2.27-beta-1) experimental; urgency=low + + * New upstream version. + + -- Peter Palfrader Wed, 18 May 2011 23:46:57 +0200 + +tor (0.2.2.26-beta-1) experimental; urgency=low + + * New upstream version. + + -- Peter Palfrader Wed, 18 May 2011 16:31:11 +0200 + +tor (0.2.2.25-alpha-1) experimental; urgency=low + + * New upstream version. + * Add Vcs-* control fields. Patch by intrigeri@boum.org + (closes: #623316). + * Update mailinglist archive URLs in package description. + Patch by intrigeri@boum.org (closes: #623318). + + -- Peter Palfrader Sun, 01 May 2011 19:48:24 +0200 + +tor (0.2.2.24-alpha-1) experimental; urgency=low + + * New upstream version. + * Forward port missing changes from the 0.2.1.x tree: + - Add ${misc:Depends} for all three binary packages because debhelper + might want to add stuff [tor 0.2.1.26-1]. + - tor.postinst: Stop calling stat(1) with its full path [tor 0.2.1.26-1]. + - No longer set ulimit -c to unlimited: + Up until now the init script (or actually /etc/default/tor) raised + the ulimit for coredumps to unlimited, so that Tor would produce + coredumps on assert errors or segfaults. Coredumps however can + leak sensitive information, like cryptographic session keys and + clients' data should the core files get into the wrong hands. As + such it seems prudent to only enable coredumps if the user or + operator explicitly asks for them, and knows what to do with them. + [tor 0.2.1.26-2] + - Also include a cron.weekly job that removes old coredumps from + /var/lib/tor. This action can be disabled in /etc/default/tor. + [tor 0.2.1.26-2] + - Make sure the cronjob does not try to access a /var/lib/tor + that has already been removed (due to for instance package removal). + Thanks to Holger and piuparts for catching this. + [tor 0.2.1.26-3] + + -- Peter Palfrader Sun, 10 Apr 2011 19:08:27 +0200 + +tor (0.2.2.23-alpha-1) experimental; urgency=low * New upstream version. * The tor specification files are no longer shipped in the tarball, so /usr/share/doc/tor/spec is no more. They can be found online at . - -- Peter Palfrader Sat, 26 Feb 2011 10:57:43 +0100 + -- Peter Palfrader Wed, 09 Mar 2011 14:40:16 +0100 + +tor (0.2.2.22-alpha-1) experimental; urgency=low -tor (0.2.1.29-1) unstable; urgency=high + * New upstream version. + + -- Peter Palfrader Wed, 26 Jan 2011 19:20:21 +0100 + +tor (0.2.2.21-alpha-1) experimental; urgency=high * New upstream version, including several security related fixes. See upstream changelog for details. Addresses CVE-2011-0427. + * Forward port patches/03_tor_manpage_in_section_8. - -- Peter Palfrader Sun, 16 Jan 2011 18:51:03 +0100 + -- Peter Palfrader Sun, 16 Jan 2011 18:40:27 +0100 -tor (0.2.1.28-1) unstable; urgency=high +tor (0.2.2.20-alpha-1) experimental; urgency=high * New upstream version. - Fix a remotely exploitable bug that could be used to crash instances @@ -45,21 +162,20 @@ * Remove /var/run/tor, recursively, on purge. We already do this for /var/lib/tor and /var/log/tor. - -- Peter Palfrader Fri, 17 Dec 2010 23:50:38 +0100 + -- Peter Palfrader Sat, 18 Dec 2010 13:35:26 +0100 -tor (0.2.1.27-1) unstable; urgency=low +tor (0.2.2.19-alpha-1) experimental; urgency=low * New upstream version. - remove debian/patches/15_tlsext_host_name (already included in new upstream version). - - remove debian/patches/16_add_maatuska (ditto). - * debian/tor.docs: Remove doc/website/stylesheet.css and doc/website/tor-* - since upstream has stopped shipping them in their tarball. - -- Peter Palfrader Mon, 29 Nov 2010 16:49:53 +0100 + -- Peter Palfrader Mon, 29 Nov 2010 13:46:10 +0100 -tor (0.2.1.26-4) unstable; urgency=high +tor (0.2.2.18-alpha-2) experimental; urgency=low + * If we overwrite src/or/micro-revision.i in during build, + clean it out in the clean target. * Add debian/patches/15_tlsext_host_name: Work around change in libssl0.9.8 (0.9.8g-15+lenny9 and 0.9.8o-3), taken from 0.2.1.27 (closes: #604198): . @@ -67,70 +183,73 @@ client SSL objects. We set it to immitate a browser, not a vhosting server. This resolves an incompatibility with openssl 0.9.8p and openssl 1.0.0b. Fixes bug 2204; bugfix on 0.2.1.1-alpha. - * Also from 0.2.1.27: Add maatuska as eighth v3 directory authority. - The directory authority servers are the trusted nodes that sign the - directory of all Tor servers. This adds an 8th authority to the - existing list, improving robustness. - * Change section from comm to net. This change was done in the - 0.2.2.x tree in experimental during 0.2.2.9 (April 2010) in response - to bug #482801. - * If we have a debian/micro-revision.i, replace the one in src/or - with our copy so that this will be the revision that ends up in - the binary. This is an informational only version string, but - it'd be kinda nice if it was (more) accurate nonetheless. - (Backported from 0.2.2.2-alpha-1 from September 2009.) - -- Peter Palfrader Sun, 21 Nov 2010 20:58:08 +0100 + -- Peter Palfrader Sun, 21 Nov 2010 23:39:32 +0100 -tor (0.2.1.26-3) unstable; urgency=low +tor (0.2.2.18-alpha-1) experimental; urgency=low - * Make sure the cronjob does not try to access a /var/lib/tor - that has already been removed (due to for instance package removal). - Thanks to Holger and piuparts for catching this. + * New upstream version. - -- Peter Palfrader Sat, 20 Nov 2010 15:15:10 +0100 + -- Peter Palfrader Tue, 16 Nov 2010 20:01:23 +0100 -tor (0.2.1.26-2) unstable; urgency=medium +tor (0.2.2.17-alpha-1) experimental; urgency=low - * No longer set ulimit -c to unlimited: - Up until now the init script (or actually /etc/default/tor) raised - the ulimit for coredumps to unlimited, so that Tor would produce - coredumps on assert errors or segfaults. Coredumps however can - leak sensitive information, like cryptographic session keys and - clients' data should the core files get into the wrong hands. As - such it seems prudent to only enable coredumps if the user or - operator explicitly asks for them, and knows what to do with them. - * Also include a cron.weekly job that removes old coredumps from - /var/lib/tor. This action can be disabled in /etc/default/tor. + * New upstream version. - -- Peter Palfrader Thu, 18 Nov 2010 12:11:33 +0100 + -- Peter Palfrader Fri, 01 Oct 2010 12:33:28 +0200 -tor (0.2.1.26-1) unstable; urgency=low +tor (0.2.2.16-alpha-1) experimental; urgency=low * New upstream version. - * Remove debian/patches/15_testuite-thread-fixes (merged upstream). - * tor.postinst: Stop calling stat(1) with its full path. - * Add ${misc:Depends} for all three binary packages because debhelper - might want to add stuff. + * Downgrade torsocks/tsocks dependency to a recommends. That tool + is not needed if you only run a relay, or if you access Tor only + using polipo or privoxy. The torify(1) wrapper that makes use + of torsocks or tsocks already handles their absense and emmits a + proper message telling the user what they are missing (closes: #595898). + * Remove suggests of mixminion which is no longer in the archive + (closes: #594207), and also of anon-proxy which appears to not + have been updated in at least two years. + * Add xul-ext-torbutton to suggests. - -- Peter Palfrader Mon, 03 May 2010 19:04:40 +0200 + -- Peter Palfrader Sat, 18 Sep 2010 19:49:23 +0200 -tor (0.2.1.25-3) unstable; urgency=low +tor (0.2.2.15-alpha-1) experimental; urgency=low + + * New upstream version. + * Forward port 06_add_compile_time_defaults. - * Minor bugfixes to make the testsuite work on our new Octeon machines: - (taken from upstream's maint-0.2.1 branch) - - Testsuite: In the util/threads test no longer free the test_mutex - before all worker threads have finished. - - Testsuite: The master thread could starve the worker threads quite - badly on certain systems, causing them to run only partially in - the allowed window. This resulted in test failures. Now the master - thread sleeps occasionally for a few microseconds while the two - worker-threads compete for the mutex. - (both in debian/patches/15_testuite-thread-fixes) + -- Peter Palfrader Sat, 21 Aug 2010 10:39:41 +0200 - -- Peter Palfrader Tue, 13 Apr 2010 00:44:39 +0200 +tor (0.2.2.14-alpha-1) experimental; urgency=low + + * New upstream version. + Among many other things: + - New config option "WarnUnsafeSocks 0" disables the warning that + occurs whenever Tor receives only an IP address instead of a + hostname. Setups that do DNS locally over Tor are fine, and we + shouldn't spam the logs in that case. (Closes: #497466) + + -- Peter Palfrader Thu, 15 Jul 2010 14:41:10 +0200 + +tor (0.2.2.13-alpha-1) experimental; urgency=low + + * New upstream version. -tor (0.2.1.25-2) unstable; urgency=low + -- Peter Palfrader Sat, 24 Apr 2010 12:12:11 +0200 + +tor (0.2.2.12-alpha-1) experimental; urgency=low + + * New upstream version. + + -- Peter Palfrader Tue, 20 Apr 2010 12:23:00 +0200 + +tor (0.2.2.11-alpha-1) experimental; urgency=low + + * New upstream version. + + -- Peter Palfrader Sat, 17 Apr 2010 21:49:19 +0200 + +tor (0.2.2.10-alpha-2) experimental; urgency=low * In /etc/default/tor also source /etc/default/tor.vidalia if it exists and if vidalia is installed. We do this so that the vidalia package @@ -138,24 +257,18 @@ not want to run Tor as a system service. The vidalia .deb can ask them that and then set run-daemon to no. - -- Peter Palfrader Sat, 03 Apr 2010 13:29:17 +0200 + -- Peter Palfrader Sat, 03 Apr 2010 15:24:11 +0200 -tor (0.2.1.25-1) unstable; urgency=low +tor (0.2.2.10-alpha-1) experimental; urgency=low * New upstream version. - - Obsoletes patches/15_enable_renegotiation_on_098k. - * Change order of recommends from privoxy | polipo to polipo | privoxy. - [change done in experimental (0.2.2.x) long ago). - - -- Peter Palfrader Wed, 17 Mar 2010 23:20:32 +0100 - -tor (0.2.1.23-2) unstable; urgency=low + * debian/rules: + - make manpage building properly depend on patch-stamp, + - Fix building in the absence of a debian/micro-revision.i file. - * Enable ssl renegotiation also on 0.9.8k (closes: #570197). + -- Peter Palfrader Tue, 09 Mar 2010 14:06:48 +0100 - -- Peter Palfrader Wed, 17 Feb 2010 10:50:12 +0100 - -tor (0.2.1.23-1) unstable; urgency=low +tor (0.2.2.9-alpha-1) experimental; urgency=low * New upstream version. - We no longer need to build-depend on a recent libssl-dev because @@ -163,42 +276,141 @@ autonegotiation at run-time rather than compile time. Good. (This also means we no longer need to conflict with newer libssls when we built against an old one on backports.) + - The manpages are now built with asciidoc. While the upstream + tarball already ships with the output of asciidoc, we instead + build the manpages during package build time so we can patch them. + + Therefore build-depend on asciidoc (>= 8.2), docbook-xml, + docbook-xsl, and xmlto. + + update 03_tor_manpage_in_section_8 to patch the .txt files now. + + Remove tor.1.in torify.1.in tor-gencert.1.in tor-resolve.1.in in + the doc directory during clean. + + And try to work around missing (and if it wasn't, broken) + build-system for the manpages. + + The torify.1 manpage gets installed by upstream, no longer need + to do it manually in debian/rules. + - The original design paper is no longer shipped with Tor. + + Remove debian/hexdump-*.pdf (which we used to work around + fig2dev bugs). + + No longer build the paper in debian/rules, and remove it from + debian/tor.docs. + + No longer build-depend on texlive-base-bin, texlive-latex-base, + texlive-fonts-recommended, transfig and ghostscript. + - Upstream tarballs no longer ship an AUTHORS file, or the website, + Removed these from debian/tor.docs. No longer shipping parts of + the website also closes: #443560. + - Also no longer distribute doc/TODO and doc/HACKING in the debian + package. + * Move from comm to section net, where it might fit slightly better + (closes: #482801). + * Ship contrib/tor-exit-notice.html in the tor package (put it into + usr/share/doc/tor; closes: #568934). + * Add stark README.polipo with the instructions from Juliusz Chroboczek. + (closes: #413730) + * 0.2.2.4-alpha failed to ship test.h so we had included it in the + debian diff. The upstream bug has long since been fixed so we should + probably stop shipping our own copy of test.h. + * Finally apply Peter Eisentraut's patch for tor's init script to support + status as an argument (closes: #526371). + + -- Peter Palfrader Sun, 28 Feb 2010 10:58:10 +0100 + +tor (0.2.2.8-alpha-1) experimental; urgency=low + + * New upstream version. - -- Peter Palfrader Sun, 14 Feb 2010 09:50:41 +0100 + -- Peter Palfrader Fri, 29 Jan 2010 23:22:35 +0100 + +tor (0.2.2.7-alpha-2) experimental; urgency=low + + * debian/rules: Minor cleanup (use a single variable for making up our + configure flags, not two). + * debian/rules: Remove logic that ignores the result of unit tests if + localhost does not resolve (or not to 127.0.0.1). This should no + longer be necessary as our build chroots have gotten a lot better. + * Depend on and enable hardening-includes for building. -tor (0.2.1.22-1) unstable; urgency=medium + -- Peter Palfrader Sun, 24 Jan 2010 13:22:26 +0100 + +tor (0.2.2.7-alpha-1) experimental; urgency=medium * New upstream version. - Rotate keys (both v3 identity and relay identity) for moria1 and gabelmoo. [and more] - -- Peter Palfrader Wed, 20 Jan 2010 18:58:12 +0100 + -- Peter Palfrader Wed, 20 Jan 2010 19:29:08 +0100 -tor (0.2.1.21-1) unstable; urgency=low +tor (0.2.2.6-alpha-1) experimental; urgency=low * New upstream version. - * Drop patches/ce0a89e2-work-with-reneg-ssl.dpatch (already in - upstream). + - Drop debian/patches/0a58567c-work-with-reneg-ssl.dpatch + (part of upstream). - -- Peter Palfrader Tue, 29 Dec 2009 14:55:32 +0100 + -- Peter Palfrader Mon, 23 Nov 2009 18:52:04 +0100 -tor (0.2.1.20-2) unstable; urgency=low +tor (0.2.2.5-alpha-1) experimental; urgency=low - * Pick ce0a89e2624471272ffc4950c5069d9b81a7f0b9 from maint-0.2.1 git tree: + * New upstream version. + * Pick 0a58567ce3418f410cf1dd0143dd3e56b4a4bd1f from master git tree: - work with libssl that has renegotiation disabled by default. - (debian/patches/ce0a89e2-work-with-reneg-ssl.dpatch) + (debian/patches/0a58567c-work-with-reneg-ssl.dpatch) * Therefore build-depend on libssl-dev >= 0.9.8k-6. If we build against earlier versions we will not work once libssl gets upgraded to a version that disabled renegotiations. + * Change order of recommends from privoxy | polipo to polipo | privoxy. + * Allegedly echo -e is a bashism. Remove it from debian/rules, we don't + need it anyways (closes: #478631). + * Change the dependency on tsocks to torsocks | tsocks (see: #554717). + + -- Peter Palfrader Sun, 15 Nov 2009 11:04:02 +0100 + +tor (0.2.2.4-alpha-1) experimental; urgency=low + + * New upstream version. + * The testsuite moved from src/or/test to src/test/test, + but let's call it using "make check" now. + * Upstream failed to ship src/test/test.h. Ship it in debian/ and + manually copy it in place during configure and clean up in clean. + Let's not use the patch system as this will most likely be rectified + by next release. + + -- Peter Palfrader Sun, 11 Oct 2009 10:38:55 +0200 + +tor (0.2.2.3-alpha-1) experimental; urgency=low + + * New upstream version. + + -- Peter Palfrader Wed, 23 Sep 2009 10:27:40 +0200 + +tor (0.2.2.2-alpha-1) experimental; urgency=low + + * New upstream version. + * The files src/common/common_sha1.i src/or/or_sha1.i get changed + during the build - they contain the checksums of the individual + files that end up in the binary. Of couse changes only end up + in the debian diff.gz after building a second time in the same + directory. So, remove those files in clean to get both a cleaner + diff.gz and idempotent builds. + * If we have a debian/micro-revision.i, replace the one in src/or + with our copy so that this will be the revision that ends up in + the binary. This is an informational only version string, but + it'd be kinda nice if it was (more) accurate nonetheless. + . + Of course this won't help if people manually patch around but + it's still preferable to claiming we are exactly upstream's source. + . + If we are building directly out of a git tree, update + debian/micro-revision.i in the clean target. - -- Peter Palfrader Sat, 14 Nov 2009 15:18:32 +0100 + -- Peter Palfrader Mon, 21 Sep 2009 14:51:20 +0200 -tor (0.2.1.20-1) unstable; urgency=low +tor (0.2.2.1-alpha-1) experimental; urgency=low * New upstream version. + * Forward port patches/03_tor_manpage_in_section_8.dpatch. + * Forward port patches/06_add_compile_time_defaults.dpatch. - -- Peter Palfrader Fri, 13 Nov 2009 19:02:47 +0100 + -- Peter Palfrader Thu, 03 Sep 2009 15:10:26 +0200 tor (0.2.1.19-1) unstable; urgency=low diff -Nru tor-0.2.1.30/debian/control tor-0.2.2.35/debian/control --- tor-0.2.1.30/debian/control 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/control 2012-01-10 03:49:41.000000000 +0000 @@ -2,16 +2,18 @@ Section: net Priority: optional Maintainer: Peter Palfrader -Build-Depends: debhelper (>= 5), libssl-dev, dpatch, zlib1g-dev, libevent-dev (>= 1.1), texlive-base-bin, texlive-latex-base, texlive-fonts-recommended, transfig, ghostscript, binutils (>= 2.14.90.0.7), hardening-wrapper +Build-Depends: debhelper (>= 5), libssl-dev, dpatch, zlib1g-dev, libevent-dev (>= 1.1), binutils (>= 2.14.90.0.7), hardening-includes, asciidoc (>= 8.2), docbook-xml, docbook-xsl, xmlto Standards-Version: 3.8.1 Homepage: https://www.torproject.org/ +Vcs-Git: git://git.torproject.org/debian/tor.git +Vcs-Browser: https://gitweb.torproject.org/debian/tor.git Package: tor Architecture: any -Depends: ${shlibs:Depends}, adduser, tsocks, ${misc:Depends} -Conflicts: libssl0.9.8 (<< 0.9.8g-4ubuntu3.1) -Recommends: polipo (>= 1) | privoxy, socat, logrotate, tor-geoipdb -Suggests: mixmaster, mixminion, anon-proxy +Depends: ${shlibs:Depends}, adduser, ${misc:Depends} +Conflicts: libssl0.9.8 (<< 0.9.8g-9) +Recommends: logrotate, tor-geoipdb, torsocks | tsocks +Suggests: mixmaster, xul-ext-torbutton, socat, tor-arm, polipo (>= 1) | privoxy Description: anonymizing overlay network for TCP Tor is a connection-based low-latency anonymous communication system which addresses many flaws in the original onion routing design. @@ -46,8 +48,8 @@ network if you really need strong anonymity. . The latest information can be found at https://www.torproject.org/, or on the - mailing lists, archived at http://archives.seul.org/or/talk/ or - http://archives.seul.org/or/announce/. + mailing lists, archived at https://lists.torproject.org/pipermail/tor-talk/ or + https://lists.torproject.org/pipermail/tor-announce/. Package: tor-dbg Architecture: any diff -Nru tor-0.2.1.30/debian/hexdump-cell-struct.pdf tor-0.2.2.35/debian/hexdump-cell-struct.pdf --- tor-0.2.1.30/debian/hexdump-cell-struct.pdf 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/hexdump-cell-struct.pdf 1970-01-01 00:00:00.000000000 +0000 @@ -1,155 +0,0 @@ -255044462d312e330a25c7ec8fa20a362030206f626a0a3c3c2f4c656e6774682037203020522f46 -696c746572202f466c6174654465636f64653e3e0a73747265616d0a789c5d90cd4ec3300cc7ef79 -0adf188795384ddae638560e48e3c09617d84a988a56a47e48686f4f9cafc114b5b17ffedbb13d02 -2f10389d7877031bd9d35ec27966b250f0c3107a5656356053c3e0ad1a2eecc0aa46444656601413 -4a7017e030594748afb488991245ce0d94ac4443fc7f3e629d9ef66678075599299991d698299991 -ea265332031d01fdd8e9ea0678366e70245234603e595808822a84ffccc056db7eea5edb47f3c5b0 -74db4127fc602b41400807d691ecede578255aa2a3dcb3c332d9e310b2a5ceb8edcf765eeeb43bfb -4da42a9368633604d6024924b9fb11bff5535651ba7d6b8352dc35f8a73cfa097893fb4df57d92d9 -51c64318312962599d4afa1214ccbd28aee1745dec1c22e8f791a35eef3d7e6b4926aff2b579f4a4 -6ec87f31f0cee8fc02f62c8fb3656e6473747265616d0a656e646f626a0a372030206f626a0a3330 -350a656e646f626a0a352030206f626a0a3c3c2f547970652f506167652f4d65646961426f78205b -302030203235342037345d0a2f506172656e742033203020520a2f5265736f75726365733c3c2f50 -726f635365745b2f504446202f546578745d0a2f457874475374617465203132203020520a2f466f -6e74203133203020520a3e3e0a2f436f6e74656e74732036203020520a3e3e0a656e646f626a0a33 -2030206f626a0a3c3c202f54797065202f5061676573202f4b696473205b0a35203020520a5d202f -436f756e7420310a3e3e0a656e646f626a0a312030206f626a0a3c3c2f54797065202f436174616c -6f67202f50616765732033203020520a3e3e0a656e646f626a0a342030206f626a0a3c3c2f547970 -652f4578744753746174652f4e616d652f52342f54522f4964656e746974792f4f504d20312f534d -20302e30323e3e0a656e646f626a0a392030206f626a0a3c3c2f547970652f466f6e744465736372 -6970746f722f466f6e744e616d652f524a464b46552b54696d65732d526f6d616e2f466f6e744242 -6f785b2d313638202d3238312031303331203932345d2f466c6167732033340a2f417363656e7420 -3932340a2f436170486569676874203637360a2f44657363656e74202d3238310a2f4974616c6963 -416e676c6520300a2f5374656d56203131310a2f4d697373696e675769647468203235300a2f5848 -6569676874203436310a2f43686172536574282f73706163652f7a65726f2f6f6e652f74776f2f66 -6f75722f666976652f7369782f65696768742f6e696e652f412f432f442f492f4c2f4d2f522f532f -542f612f622f632f652f672f692f6c2f6d2f6e2f722f732f742f79290a2f466f6e7446696c653320 -38203020523e3e0a656e646f626a0a382030206f626a0a3c3c2f537562747970652f547970653143 -2f46696c7465722f466c6174654465636f64652f4c656e677468203131203020523e3e7374726561 -6d0a789c6556695453e7bade31247b3b715a737304ac496aadf6d409ad56a8536570442b838c2a83 -040886843109210904c2f83287210408934c822032aa200e60716aab56056d0fdada5b3b1ee939eb -7e9b7efcb83b9c75effd71d7cada2b6befef7bbeef7ddfe77d9e9745d82c20582c16cfebd0bec3fb -8eaff391c488133678c9634265d6d76be9152cfa9d05f44a36de89cfff59fda7236725e151cb5e5a -ff8eedc0325af8367af11734fa16c166b17aee7eeb2a8f4d8e974446258a3e38eee5f7b775ebd6ff -df9bcdcececea2b0e4fff922721327482265a235cc1f85582a8f8d11cb1277885c99d552a9e4b428 -529a1c1b95200a0d0f17875bb7f9864ac56744fb2452496cac5c21fac0f56fa22d8e8e9b37308f2d -3b44479362c4f1f2f522892c42229324268b4265e1a2cf62c491a1a298d070b115c02d4692189f2c -daea2891fdefeea39298b0a404d17cb4a2a372679187c84b1c99240d8dffff5f0882107aec4d969d -3ee22a768b8f4cf04a9478fb1c9486c6846ddeb275dbc74ece224782d840ac220289cf08376223b1 -9ad847bc4f781307081fe223e2387188d84a6c233e248e102ec451c2955846f0083ef1576239614f -38102ce26d42c45482b06100aeb076b0ce2fe02c885bf033fb20fba6cd2a0ec1a9e2aee62ab97748 -093940bea13650f7176a174e2d122c4a5cd4bef8ddc5c54b784b3296642df91115dad2082caa8bf4 -1bcbb2ef6696f362e907c885af166b1335eaa8709f6427a00e705d74255d423a8684875555cf8a29 -0bee52918f334d5a70a7e68e91bc0be0aed5b864512a92d9dec5bd825c38b6b3116041017df4bb75 -ac595f0bff54a1be3cea312ea0efd929b9387c2ef5305e939a12946baf4281163248696aad2cac2a -36092fa1851c64e6f6adab8c2d8d03ad3dc4ab337cf328153292733a54ce47246a45146ee5d8d239 -5836435f31b36839edcbc72b34dc8eeaf494ecbccc1c83f043dc8649549259956d820a7ba835970e -1450661ca6259bb36bd28c6ac4c579768519e698d680ea48d0d88326d1431da38d4b52692113d20b -f4c5aa5275911aa844a53221ba23beff8b2b37d1eaeb42b4915e6feaa8286f2ab467ce0733ed7083 -75771ab94db3abe955fc92c2f2fc0aa05acb3481429c4f82579ad63f9bd2a02833e95fa4a9846e0a -9d27af0c3554760235dc243d28c462123c74ea00eba2703319589c5a09c3144a267f0abeb9f7a454 -7d78bfe0196928084c96a4f9a430271ed33fa2396d2c9864d3ab90233fc89da115508e879f23f28f -1b0fbfe936a545940b4b928cf2dae47ab06f6eb034de74bfbc3dd05f1919260c0896ef879d14feeb -b38d883dd45b7dae5bd0d2646969bf45d9feb9142cb33616d6af8374ed0c7bf663fa017f2e8004a7 -54dd4ea6a6a8d342ba146babe021451f631860323d2e61181044e2b8b9029c42177070a08afb6d96 -29155ca8b90f4958ad55396532fb522de4ee227523bca1e8b5242a9abbcc70d2767693769076aa47 -cebd2c40147b96606a978e141c0537539192aa8474d0146a4a02ab038c27c0199ca4477cdc8f8837 -025e001bdbb75df5fafcd08fe2df0171e0f74b13df50c9b57bdd0ec63881bd0778d785f4f80c4b7f -00c4a6d0c1d768217a7f6c5471ba57d071c62cb71ca2acc9fb0ac93a10d9cda2d723277ed09e10d9 -61f0829036d958728fa13377824213dc8c7bfab6f88e98ee93f57e10002792c5921361b16ee04c61 -c1a36d88fcf9c92d44f40bf0145acfaf983a7f610226a0496eda4acdd35d75817e71416559f6fd0c -cd45ace5bc9a7f22161f5c53757be65b438a2e701105ffeabc7df3dead0bafe057f82166cae7c6fe -af30ab1baf048a57831b55dc6786b274d84bcd74f279d27315c6be97f75224570453c7fbb6012600 -2f0adbfec9097f9967ea56a04ea79675086dd14b30a37ffcc67a38cd2ea51df8558565f995409d2d -4b0916e24212020c86c3a90cbf0c66727fa1da0c63144a223b06465a4acab2f415826a6d45a609a8 -26734d6ba7a24e122a4b740b14fe486615f82645ea8ea9ece7db6c0cdd398ba22f16b72e8307b2bf -23f7c99696e53c4c47d376fc8bbb49255332656992d12eb63cb6388e89036ddcebeae8d122be1f2d -542527ab33b3a2653a2528415199daa7a478d8cd2f363ac2c1772af8e72753cdfda3829e73351dd0 -03b74ff4ef2dc4fc123bdf82f832a886baceae1663595e695e2158724d792570017acde75a3a5bcd -5d30026d598dda0e0a1be61cf89d86e799c340fd67a72ed2734f38e67ce4d936d8586aea1f11f250 -317acdbfd5da75e95cb33aa65a501b557912c2296f59d4c9cf42effd22b0a5edf50d29f5f4e63a5d -c332b88d9c1f3055435fa22ff8bcf5d9e81d4e1a373737dd9097970df699a02f482b668a644c4a2a -8a5bb1d3cbdfd5bbe3f48b20e1787497b22601a4f6c167e4fe12a9a94125509c4d6fd48d51295c9e -07763491a5e5450595500655b98d990c40666b4b76ed8ac9bbe30f46123a3feb1662e2aebc5a7316 -5aec7bcfb55e1a6b976c6914307d0216fa0f2b9b5ecc209d954d43b36b2d7c71a1b25c761e87a112 -bb2f4ced959d2d1dcd967eb80c03ba0b716d146fb24fecd4bc61056f08b7a9b84f32cad3c08d9a73 -675a599ffaa9b525db99962cd699e0118502c89b05281d4f70d036ee5c10fd92cf9b6cad30f6a2b7 -c7433604284223558293715199eb72295b744e3f4a2fe9608d4db3919169d73588e296e715660a0c -e999e906bdd8272428253bcd9069802cc8c9cf2dcca5aee1ebdceded21b7867b9a463b05ba0a45bc -5a9f04f6119a963b4274f10dc94032da796786f58c8174a543f878930f47431af32b0b4cf96560df -344f5e0d09aefab47d5671d49bc983c519e5d67b23d21f29f8b18989727943626b5b63435b6b62a3 -4c684b5fd3d52bbae823f5685ddfb2b69748fb66396f98f69e75e22bb8d98969696ad00323e9c688 -aa08e31908816075b42c4a9a1c0a7eb063d01bd91c7b241e0d3b2b2ed3152b2081e2690e049c74d9 -e27103d9060812b9bce1761cc569e0e65b2aabcc500135d916438fa637a3172844be7af6c7b73ef7 -b0dd43e1aaf1d041b84edde8efb93dd4af8aec129c3b5315577d8c3acb9d3759fab77e16d2cfb051 -e92cc19fcb21e1e3b43427abc20e5948e722ad09bea668e3751271a121b9112fa09ab8996837676e -829b8977739ab84d88d568413640595bfedf82cd6091568df95497ba3d87011a61800a53aaac408c -547f5d659a2e62a47a4445bec8aa4c6354653ef1d6ac5b66d9fc126e457e65be11a88e72ed09e15c -1c09c7b53a8f2c26dd6966d2a328b51c6e50f44f6476819f5aacdfa79ef79f71daae69197cbfef7b -f4de37cb79afe9a3f7f96a6d6a9686714a43d5a010f991309ad5a6694aea0eb11c63a46072c3de40 -8fc43a6563537d5d43515e715ea930b72ccf08a5544b4743ef708becb8e02889371e5167848829de -eb24a55612ede031183c31d8573f3a2128f6ab55f4c179a8afeceaa1f0a6bff3419a95ae484dd0ca -d3154045c9cf0f088b48b8d5d78d960e321a6c6158b57294f5601a79587f6c0b63caa642a3d5949b -cb528284b8c41aa3c63b8f8931de4cfa16682ae02285ba4828309697969e6d1ca8e9026ab021ca5d -889961c73b2dcdcbcabe4433e995afa981db142a26db073a6b2f0135561beb24c4918cc96764781a -9845723319571053a0ab858bf6288c448bc23fdfede91fe7795c903c2669390ec120d73a79504f18 -3ff757317eaeb14aabbe835e7c87757f1a29bf67a30db3bbf85905a19ad88c133a7b590627852cc9 -2f8252a07acbd2438573d5a4f445f47364378316a0f7d05ff6fcb4f6a86764a052e06b73f172f7e8 -d4c82e6c8bd941879dfd4e359e15cc4f27ac99976c34c874003ee0c8d19295c515454505b5a53545 -e540d59769ce08ad2e1f9d919892ae49d7e6845ab3d2662677e6a794c3158afe95b4823ca51b1fb3 -d0c44b362d472bf9bae2082f5dfa29b0c7195cb413b9bd7a7df1294cd9ffe393c9f77cfc924e4708 -ce483467d46ef55976bdbf75777c05d4f498d7f65d27376edf22c4fbb0272795769847ad476beed2 -bbea58e83c33ca48510aff7dda33988bbf98f3e41c46e7f18e49b46386c407eef2b1818b0ce817eb -b4473f7fc642530fd8e820fd9c8ffcb9d550545058daf3ca2ebd54a3d06729984b89b99885f579b9 -9007b9f6594539c68e5e83ae4f80c8886b47e0036addd14f7729d5a50d3182338d89e50c8164dad4 -78f1e58427d38f5aae8e082f0dd58fc15378a4ba1430123ce8d58817d53363438eb695b6b9c482d7 -a8e80736ed35fb291f73f59e2a177f4cec3e86b9801d606bcb4703013dc1d7136e3372f0d6cb9f91 -00fd87cb37980c5618c41ec216b40ed920026d6ea67018bec87f39e28adfc60bc28fba7f74fc27b4 -e9aab1b5ce2cacaf3e57c6506ffeb8595bc6679fba3f46f2af7c9e2ee7bd420334c9a8f3efd7bafa -bf74f8d6f5f3b598f5c901c74316d9bf360978af30e19c24ddeff0e1b3fd8883964cdeff6352328c -97fe20485ecdffdaaf2912bca943a74e1ddae33ffedddd86fef1cb82e149066bcb78e4a59b0ee343 -7d77be1c08dee7253fe5251664e50064e758af80f403b44d2b0b7e44865fd9b792f8c8c674c3f2e5 -f03f9f4ea0b700ada090f326b410f3f1e22d6bf00a6cfbe81344dce8afeebb2608c3db315b84d7c7 -51e8169ae583323b3d2d5d9e10a18b046a4fd013b478acfaf3fa66614dddd98a36a0be1bda867732 -f34ba135eae6d965cd2cf805997eb1caa313df0742d511519ede624c025e0898d589175ef6be107c -35611caec2404d77d7f88d1e669a424b2914ea88dec5cb053971fce921ccc1622c0e166ddb16fc5f -281c450d21f64ba1adb28ef6ad433e75dcf6452f16b71b972c7951bb642941fc37bd8f00ed0a656e -6473747265616d0a656e646f626a0a31312030206f626a0a333531350a656e646f626a0a31322030 -206f626a0a3c3c2f52340a34203020523e3e0a656e646f626a0a31332030206f626a0a3c3c2f5231 -300a3130203020523e3e0a656e646f626a0a31302030206f626a0a3c3c2f537562747970652f5479 -7065312f42617365466f6e742f524a464b46552b54696d65732d526f6d616e2f547970652f466f6e -742f4e616d652f5231302f466f6e7444657363726970746f722039203020522f4669727374436861 -722033322f4c61737443686172203235312f5769647468735b0a3235302033333320343038203530 -30203530302038333320373738203333332033333320333333203530302035363420323530203333 -3320323530203237380a353030203530302035303020353030203530302035303020353030203530 -3020353030203530302032373820323738203536342035363420353634203434340a393231203732 -32203636372036363720373232203631312035353620373232203732322033333320333839203732 -32203631312038383920373232203732320a35353620373232203636372035353620363131203732 -32203732322039343420373232203732322036313120333333203237382033333320343639203530 -300a3333332034343420353030203434342035303020343434203333332035303020353030203237 -382032373820353030203237382037373820353030203530300a3530302035303020333333203338 -39203237382035303020353030203732322035303020353030203434342034383020323030203438 -3020353431203235300a323530203235302032353020323530203235302032353020323530203235 -3020323530203235302032353020323530203235302032353020323530203235300a323530203235 -30203235302032353020323530203235302032353020323530203235302032353020323530203235 -30203235302032353020323530203235300a32353020333333203530302035303020313637203530 -30203530302035303020353030203138302034343420353030203333332033333320353536203535 -360a3235302035303020353030203530302032353020323530203435332033353020333333203434 -3420343434203530302031303030203130303020323530203434340a323530203333332033333320 -33333320333333203333332033333320333333203333332032353020333333203333332032353020 -33333320333333203333330a31303030203235302032353020323530203235302032353020323530 -2032353020323530203235302032353020323530203235302032353020323530203235300a323530 -20383839203235302032373620323530203235302032353020323530203631312037323220383839 -20333130203235302032353020323530203235300a32353020363637203235302032353020323530 -203237382032353020323530203237382035303020373232203530305d0a3e3e0a656e646f626a0a -322030206f626a0a3c3c2f50726f6475636572284553502047686f737473637269707420372e3037 -293e3e656e646f626a0a787265660a302031340a303030303030303030302036353533352066200a -30303030303030363138203030303030206e200a30303030303035373630203030303030206e200a -30303030303030353539203030303030206e200a30303030303030363636203030303030206e200a -30303030303030343039203030303030206e200a30303030303030303135203030303030206e200a -30303030303030333930203030303030206e200a30303030303031303535203030303030206e200a -30303030303030373335203030303030206e200a30303030303034373338203030303030206e200a -30303030303034363535203030303030206e200a30303030303034363736203030303030206e200a -30303030303034373036203030303030206e200a747261696c65720a3c3c202f53697a6520313420 -2f526f6f74203120302052202f496e666f2032203020520a3e3e0a7374617274787265660a353831 -300a2525454f460a diff -Nru tor-0.2.1.30/debian/hexdump-interaction.pdf tor-0.2.2.35/debian/hexdump-interaction.pdf --- tor-0.2.1.30/debian/hexdump-interaction.pdf 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/hexdump-interaction.pdf 1970-01-01 00:00:00.000000000 +0000 @@ -1,1031 +0,0 @@ -255044462d312e330a25c7ec8fa20a362030206f626a0a3c3c2f4c656e6774682037203020522f46 -696c746572202f466c6174654465636f64653e3e0a73747265616d0a789ca5596d6f143710febebf -c2e24b938a5dfcbe36aa2af11295aaa84072522b71454a2f4792723920490508e5bfd7f6d83e7b77 -0eb15b4e22f67ae699f1e3f18cd7fb91d08e11ea7ff1efeaaaf9d83c3896e4fca6b1e453c3c865c3 -6d6f09e7cc902b6833d1514a39d93427cd2b274f09179aba518fb069a46245230c6d9a8b8649d977 -8670aa9513654ac6f626b61965be1da5d09e62362018518c01c645f3c78f64dbc84e45afad05416f -4ad8a4040efbf1a13b1874ed04187afb63323213e0621a6b96769c30cb9993b4145a9bd032269007 -02588799a04ac56e04b44764058a82e495272eea1464955e60b8957930b2236a86b227c9c79fcd91 -67ff67dcb19ee6b80bed4d6acb628df01eac2debb928c7e8beb80b8231eea2d228eeb23b2874ed04 -c5e26e3240a214b603900a2ecea2951b13c07510e5d6c4f626b5adf6ed2485f5ac0aaeebde946311 -1f8d502f9a9210a8ed881d3a8482d76e045399d8b9001337b41621ce15d3b00014da9bd896c6cb25 -29b4a754d843d29a620c3046bc01575e34ad36a8150139700803afdd0053bb809c09302b11ca3e25 -42df82442845913fb00ee41ca98a9c03da7bc2cc4b42c6019d5122042f50dcca7c8f25c249ca9ea4 -d7c46dd89efce5ff3b6bfc860d9b578a5e427b5e42649ce684e8db292132a58be481f662d261c294 -631cddb99e462f98e20f94c60931b98342d74ef06adfce0598167f69cfd35ee57ce7db29dfb97f45 -66407b31a3502b8a31c0d813885e34e53b501be7bbe410065ebb01a646f96e2ac034dea4abe84ed7 -4a2f29b943f7cd4d6cf67e599208d2e15afa8e32c5880460417bbf4fbc60a088461d6806a12432ee -706bfdf603e00229afc46b22b4db71d46db84132f53a7e264646f5dd920c5c424c549ef4551a9da3 -ec976240304258c5ab4c7b6786daac4a674c2e74be19eb9c514541c03a50468c2eaa08a8e325ce0b -c60c033aa30297fc40702bf3062b6e9394e7143623635d333296354377c5006987f261f8ae7a8022 -9e480c8f05cd0c4fa3857104b2342b915af6fd8a13398144ad4cae50cae402a55991cbb10e540065 -8b0200ea586d52bba3911a9e8c6a2fc6a895713031ac4a93946755242572415222d723d517891beb -40ba57aac8f6a08e479052b912298516a2e407825b991758119aa43cab00499b0b906fc602a47891 -e4b00e2446458bc408ea781af282b13880ce8ea6811f63dcca3c18c934cd519e4653ac2b42e672ea -9bb19c0a56941ea413cb95e045b902f5114d811b2f18a30974463534f981e056e62556432729cfa3 -89b24c136589261e2e78a208d2891ef170475420eda3899bbce9f8e0fa6ae0c718b7320f4646344d -519e451357399ab8cad1c479b108482779248a8503f53d34891c4d5ca0d194fc40702bf30a8ba649 -cab38e48b010e15c24e24da748d11445b00e9c4660e10aa47db98917b7a1c3cbd0da8f316e657e10 -4d739467d1c459a689b34c13eb0b74ac132f246ce911db4f13b3bbcb3b8bd294fc18e356e6c1c890 -a649caf36852f9c0cd553e7043ac2611a413174e1467db3d9b2eefb4144dc337fada0f04b732afb0 -03f724e539076e58079b42c9e640b2c55a946d562c98fd4610e5c88957e9d8813b06c108b2343b0c -9f898ab36ed7b48e976b5a474e04ddd918b7e31d96d93dd768c4c46bb5748f2f0dc2091847204bb3 -5a8f39f97ec5599ce42f2fe9c38b51e9be3cbee0ecef834fe5b78e6f7d7fc99f5ff0af2fe5f79302 -72689ea15f5f2629a74f05505de1534168979f0a18396f0453fe3a520b621d314a5272bd2eea2736 -7ae2483f6f3e9240394d7f5657e4f1a27970ccfc1377825dbc6de08324734b4a3bef85ee04595c35 -072f8e0961878b7f9a9609ebec50b2386b0e1e6d2e576bffd4559efcd08b72ffd0013b2702aa212d -73af147ef8deb3c5e225f9e568d175ddbd806878c7b8b4a455324874c4fdfc48692a3f6c4b5bf929 -577dd7bbb4e416d23f5f1e2c9ebc2417a7dbb39b8bd377ebe561f46737d1decd4c5b47ae3bc27b8d -4febbf6f2e6fd7b5dfadd19d62dab9d6f320f5f5cfbbb67d747442d6dbd5f5970fb797efb7c127da -e9de4a6dfc5aa92079b43cf8bc3c6cdbe393470361de7752c28735107dbe3e5f6fcf1e0620c178c7 -8d2652c5796c2eb7efc8e50d593c3f6923cefa0ce6d372d159ed3c6ba58d50c7ebcde917b2625f8f -3edf3accfbe4c531bf4f9c2fe76f3ef3e5e19d5773c9dd093f2f84bf3e5e9f5f6ec94f91839f1f1a -7a7777f843e3b892ccbdfc0986c3af9d81f3375f9c8567cb83df123e136e626e0aadd0a512c7ac84 -69584fb2ea49cbfbdacad727efb7dbf5ca4df80e9015efb424b2f6861762400ba53ea010bca7a7b7 -a7f749158111593af1112e260ec1d6b9ed19f25bb77f9dd23279afa96431629707ff6e07ebe85e2b -29736f45adcb0b00b7fabd6d4fc9eaf27af5eb539892b51dd5cced2286cf697970bdbef9f07e7be3 -621da624a4cb324cedc2ac14819dec5e5b852b61fb265e6186998478f0e92a2a3cb95e9fba693895 -4120047ca93baa84db62a6100eb23920c10f47be4b37aa9262498a459222585ba19d0541679a81e9 -287cb420af1afffb0fd8e4d476656e6473747265616d0a656e646f626a0a372030206f626a0a3138 -36350a656e646f626a0a352030206f626a0a3c3c2f547970652f506167652f4d65646961426f7820 -5b30203020343531203233365d0a2f506172656e742033203020520a2f5265736f75726365733c3c -2f50726f635365745b2f504446202f546578745d0a2f457874475374617465203136203020520a2f -466f6e74203137203020520a3e3e0a2f436f6e74656e74732036203020520a3e3e0a656e646f626a -0a332030206f626a0a3c3c202f54797065202f5061676573202f4b696473205b0a35203020520a5d -202f436f756e7420310a3e3e0a656e646f626a0a312030206f626a0a3c3c2f54797065202f436174 -616c6f67202f50616765732033203020520a3e3e0a656e646f626a0a342030206f626a0a3c3c2f54 -7970652f4578744753746174652f4e616d652f52342f54522f4964656e746974792f4f504d20312f -534d20302e30323e3e0a656e646f626a0a31322030206f626a0a3c3c2f547970652f466f6e744465 -7363726970746f722f466f6e744e616d652f54696d65732d526f6d616e2f466f6e7442426f785b2d -313638202d3238312031303331203932345d2f466c6167732033340a2f417363656e74203932340a -2f436170486569676874203637360a2f44657363656e74202d3238310a2f4974616c6963416e676c -6520300a2f5374656d56203131310a2f4d697373696e675769647468203235300a2f584865696768 -74203436310a2f466f6e7446696c6533203131203020523e3e0a656e646f626a0a31312030206f62 -6a0a3c3c2f537562747970652f5479706531432f46696c7465722f466c6174654465636f64652f4c -656e677468203134203020523e3e73747265616d0a789cac7b07581457d7ff99597667c0c424928d -a0c9aed1c4ae4114053b0856ac805244447aefb02cbbc0d2e1d23b0b2cbdf7deedbdf796821a5335 -c5b4bb64c8fbfe6759497cdfe47b9efff73c9f8fccecccdc7bceb9e7fc4ebbb34b800607088278cd -d2c3c72568c93e3f1f475fd5f562e54c42f92ea97c8fc3ac655a7e2ffe5d8ffb1e9897725e2f7f0f -08c19569ef6aaf7debdda937de7877eaea37094b1208e8804bf0293c862fe17bf815c6092e319598 -41cc26961006c41ac298d842ec242c081bc281f020020811212352881ca288a8249a884e6288384e -5c20ee101f134f8967c42fc41f248f7c8de49333c90fc825e472722db991dc4e5a90074917d29714 -93b1642a994d1693d5640bd9450e92a7c8cbe41df233f22bf267729cc3e54ce1bccd1172e6735670 -5671367276702c39f61c578e1f278413c949e464738a39d59c464e076790739a7385739733caf99a -f382f387064f434b435be35d8dd91a8b345668acd3d8ae61a17150c345c35f2342234e234b43ae51 -aed1a0d1a931a4715ae392c66d8d4f353ed778aef1abc63897cb9dca9dce9dc55dc0d5e7aee19a72 -b7732db8365c3bae33d78b1bca8de22671b3b8726e15b799dbcf3dc1bdc4bdc17dc8fd92fb03f757 -eebf7814ef4d9e2e6f366f2eef239e016f2dcf8cb79b67cd73e279f00279125e222f9d57c4abe235 -f0da7843bca3bc8bbc3bbcc7bc67bc1f799822299a7a8dd2a67429213597d2a756526ba92dd43eca -8172a23c287f2a8c9252b15426554429a86aaa9d1aa64e5157a9dbd428f525f59c5252bfd340f3e8 -69b42e2da417d01fd106f4467a33bd93b6a4ede823b407ed4f87d191743c9d4ae7d072ba82aea7db -e85e7a843e4d5fa26fd20fe847f457f4f7f4aff4b82647534bf32d4d1d4da1e65ccd259a2b34d768 -9a686ed3dca37940f390a68ba6b76690a65853a699a499a199af59aa59add9a4d9a939a0795cf39c -e655cd3b9a9f687eaef9ade60b4da5e6bfb5785aaf6bbdad35536bb6d6022d3dad555aebb5ccb4cc -b52cb46cb51cb5dcb5fcb442b5a45a715a482b5bab48ab5cab4eab55ab476b58eb94d645ad1b5af7 -b546b5bed4fa4eeb172d660a394573ca9b53a64f114cf970cae229cba7ac9e623c65eb263ffff040 -0f37f7e059f3adf61d58b068d1e2bfee2c3332329a75247cf2c92c5397200f37df5973d90fa12ede -7efe3e2ebec16b666d62477b7b7b38cd72f30ef7770f9ae5e8ecece2ac9ab6dfd1dbc56bd6660f6f -0f7f7fbfd059f3372d98a5afa7b76c097bd05f336b57888f4ba0dfe2591ebeae1ebe1ec1e1b31c7d -9d67edf67171739ce5e3e8eca22260eae3111c183e6b859e87ef9fb37779f81c09099a35e198b376 -f919cd329fb5cfc52dc4db31f0ef4fcc4202fd4c5dbc831d7dfd825d02421cbdbdfdc42ebe6e2e81 -8ece1e4eec954b50d0c4eda0101f1fc7600f3f5fb74017c76097c0899b9372f93b06067b387a3b7b -b8ba0639b938b34b75dce4e81412ece23471dce4e418e8e7eb3471dc722490558cf1c4d16de2b8cd -d92fd8d1c989d593c5cbb9c63e8e4eec5047570f8f657a7a06862f3fac58f5f2c3f295fb26e8bebc -d437507f58a6b77c9b9f9b9faf8bd7cb0746fa56811ebe6e2faf0c975938f9b18b50f3329b90e6e5 -a3557ac6ff31d1c06892e524efe5abf6bd3a417fe5ae572458a6b76292e372ab600f6fe749c90cf5 -2d8f38069afdb9c04976cb5e7e58a937c96792e172c37daf08f992bcd1f249b6ab76bd22c5323d83 -49b693fc0d975b4e0c30fb0f0daed29fe437c9d86092f1f249c6fa86bbfece586fe5cba7cb566d7b -755d4606079c3c029d427c5cbd5d4493ac5758beaade3fd5be6af9a6bf8d5d392990c1a4402b2605 -d237da3d818a4909266dbecc70fbdfc8184d8a6768603531c9ec3facb86ac5a6ffd6bcc124e31593 -8c97eb4d729a34f532a31d7fd3849ed1aaadac2527d94df25d6560fa2a2a0c26edb46292cdf265bb -dd4358550486f8783b86fca9d63f953eb96a23439bbf56b7f5efba5d65f577327aab569ab246769c -bc5c398906834934ac989467b9feee5701b16cd99fda5e66feaa27194d0a666868f59f089a34c3ca -c9a51b4c725bf1929be18ac947cb5fb25db662728cbebef97fe056cf7682ebb6ed93ec8cacd496db -f2b7a5af9a34cbca49110c26f9fc497ef9e482f5979bff038897d9fe09836daf604bcf486fcbdf0d -bdcac8e2558dac9c646f30c9feaf65feb9ba15e62a062fb9e93baaa3da7fe8cf68d996ff86a2a19e -c55f8b357b55ae9546e23f07bbfd35c6454d31e8af3b4e7f0ef39d90d97b42c96eaf2c8a8de441af -5cfa3afafb050507faf9bbb363ffbaedf6279d1055bc7451dbe2d5791384bdd9611eea672113d120 -442db55a2edf57c6bbb3bee237f1d0fd2f69c3fefa18f22a9a83d9c1816a9dbf24ae26183cc13470 -e2e8f7dff05fb96cb981be37bbd8208f0951825fe11ef8ca673f352dcfbf787b4cc815fe8a306aae -2e13f75f5db587a7cb0473e789a3179bf85c7cbdd90cece1e4a1a62a9e90dae54fed394fb863903a -f3fdc5c07be24688af079b4e4cd52733f569f3c4c9485f7d5aae3ead9838e9e9a94ecb8d8dd457ea -79067aead34b2a9b264ea6c613a74d26132713f54d93651327e3956a9aea679bd537cdd4374dd537 -37bd9ca0a669a296c578957a9efad966f54d33f54dd3976cd5b298a89762a216ded8903d6d5eb949 -bd062335cdcdea676686ea9b06eae9ea67a66a914cd49a3051cf9b58344b453dd248cd61b3fa9999 -5a21462fd7a07e66aa1670d34b91d4f38c8dd5545eaa40cd61f34b9a6a2a666ad599aa9f99aae5dc -f45224f53c63133515f5da8dd51c36ab9762a6d6a099faa6a95ac04d6a594c5e4ed8a49eae9e60ac -26bdf92577b5228dd423cdd4cf4cd5026e52cb62f2729e5a59c613a497ad7c690ef54da397b2a86f -9aaaa57e690013352363b5968c97aba7bf3487faa699faca542dc4cb659aa8f562acd68bf14bcdab -afccd457a66ab62f1766f2127c6a4d18bf54b29aca66f54d330300c833370ef775b2de6922f673b6 -d9b5c9dfc576b76980eb1eb340b7bd9b83dcf76d09f6b0d81ae269b92dd4cb6a7b98b7e3fe1d229f -2307baeb23d62e9bdbdb2059a73fafaf51ba7ef9fcfea6c80d2b160c34576c345838d85269b772d1 -506bd5c1558bdf1f6eabb6375c327ba4a3e690d1d239b38e75d63aacfee883135d7587d7e87d78f2 -f7eba798c7a73f3ff3f5d96fce7d7bfed9c517977ebda2bc3a760d6009cc065bd80da660044b610e -d8c11e3083d5f0117c007b6133ac013df810f6c116580673c102b6823ecc034bd806cb613e58c176 -58010b603fec0003580807c01c56c222b0869d6002ab6031d8c02ed8048610086e7010de83694041 -10b8833d08401b6808060f380442781b3421043cc10166011fb42014bce030bc0fefc01408036f70 -84b5301d5e0311f8c01158073af03a90100ebee004eb4117a60207c4e007ceb00166c01ba0c136d9 -11e00f2eb01166c29bc0050904802b18c3bbf016f0400ab9900c91900729100508a2211564900631 -900eb19001719009f1900509900d89900349d00837a0148eb2ad7b2194c15db6811f821ec8679bf8 -5b701e86a11314f019dc860b700cbaa0186a6114eec01518816ea882727804757011ea61005aa100 -9ec03db80ca7a1179aa0062ae163b80a27a00f9aa1023e87fb70134e423fb443093c806b700ae4d0 -02d5f0095c873330086dd0000fe153784aa440119c85e3708e40442a9146a4131944269145641339 -442e9147e4130544215144c88962a2842825144419514e5410954415514dd410b5441d514f34108d -4413d14cb410ad441bd14e74109d4417d14df410bd441fd14f0c1083c410314c8c10478963c471e2 -04719238459c26ce10678973c479e2027191b8445c26ae1057896bc475e2067193b845dc26ee1077 -897bc47de201f190f898f884f894f88c18251e118f8927c4e7c453e20be24be22be26be21be25be2 -19f19cf88ef89ef881f8917841fc44fc4cfc42fc4afc466042498c11bf130c314efc41fc8bf83709 -2441922487d420b9248fa4489ad424b5c829e46be4ebe454f20df24df22d721aa94dbe4df2c977c8 -e9a40ea94bce206792ef92ef91025248ce22df27679373c80fc80fc9b9e43c723eb9805c482e2217 -934bc8a5e447a41eb98cd42797932b48037225b98a34248dc8d5e41a722db98e5c4f6e203792c6a4 -09b9893425cdc8cde416722bb98ddc4eee20cdc99de42e7237b987dc4bee232d484bd28adc4f1e20 -ad491bd296b4230f92f6e421d2813c4c3a92474827d29974215d4937d29df4203d492fd29bf4217d -493fd29f0c2003c92032980c2143c9305244869362328294905232928c22a349191943c69271643c -9940269249643299422232954c23d3c90c3293cc22b3c91c3297cc23f3c902b2902c22e564315942 -96920ab28c2c272bc84ab28aac266bc85ab28eac271bc846b2896c265bc856b28d6c273bc84eb28b -ec267bc85eb28fec2707c84172881c2647c8a3e431f23879823c499e224f9367c8b3e439f23c7981 -bc485e222f9357c8abe435f23a7983bc49de226f9377c8bbe43df23ef9807c48aee400eb93ac63b2 -f186751d620d102d407281ac038e3670fa81c380c616d0380d5c43e0d6024f08bc32e0fd0ba8ad40 -9d067a3dd003a0a90d9a29a0351db442618a254cf91a5e3b00affd08afbbc2eb2f606a024c7d006f -2c86372ec19bc6f0662bbc351dde7286b714f0d61f302d17b43540db1cb41fc1dbefc1db23c0e703 -bf0ade5902ef7c0ad38d60fa6998fe29e858814e3be85c02dd3741f732cc3086190e3023086664c1 -8caf60a60ecc5c06330b61e6cff0ee9bf06e21bcfb00ded382f7dae0bd672070024121081e807003 -08734078176615c3fbdaf0fecf30db0666d7c39c2530e700cc390b739ec107f1f0a10e7cf80dcc25 -61ee5298eb0073cb61ee73981707f38a61de6998bf05e61f80f979b0200b1694c3c285b0d01c160e -c3c2dbb0c8041699c1a20158bc1316635842c39275b0c412967c0b4ba7c0d271f8e821e8bd067ab6 -a03704cb2a60d949d077007d5fd0cf80e502583e0a2bde8715ddb0e234182c05834360f02518fc1b -569e8295bfc0aa55b02a000c4dc030010c4f80e1bfc0683718c5c26a02560b61f57158b307d65c80 -b58eb08e0febd260dd6d58bf08d67f0d1ba261e322d8e80a1b5f80f15630e182891c3699c1a66360 -ba1d4c2bc1ec106c9e099b4fc096c3b02500b6fc0e5b3d61db7e368bc0f653b0c31776a480f94230 -6f829d52d8d908bb48d8150dbb8a60f74ad8fd0dec39017b77c3de5ad8c7a6a41760e1091637c1d2 -162cbf06abb560d50b563fc0fe723840c38138b07e1dac6560331b6c76834d1fd8ae00db5b60e704 -76bfc1c16d70f02ed8ef05fb2770a8041cf4c1a1120ecf86c3b7c1510f1cbf862399e064084edf81 -f32e70f606e73a70be0dce2fc045175c9cc1250d5cf780eb5d70ab03f7f5e0de0d1e9bc0a31b3c03 -c193016f1abc1dc0673df834816f10f8fe047e1bc0ef2bf00f017f09f83f87000b08f80d020f40d0 -2208ba0ac14b20781042fc20743e849642d80608eb06d146106d03d143103d857067083f06620f10 -8f41441448a6822403a4bb407a0a220f43e453887c0651db20aa02a2b910ad00991fc4cc81982088 -e5436c1dc49943dc1f10af01f1d1107f1fe29f40c27c48a883447d48ec86c4a39074109230243b40 -f20348fe1c528a002d01b4125037a4ae80d4f590fa3ba479425a30a47d0ee9b6907e16327643c62f -90d9075926907511b21590b31272ce41ae19e49e843c43c87b0ef9b990ff2514e841c16a28b80885 -9650f82f284a06b92ec807407e1c8a3743f14928d90e25bf42a9184abf07453628fe05656228fb1a -ca3da1bc1a2af4a122132a5e40a51b54fa42e538541d86aaf350bd05aa87a0c60a6a1ca0e633a83d -04b537a12e1aea30d413509f06f53f40831534f443a3013411d0140acdcba15904cd51d0fc3bb404 -41eb01683d0cadeed0a60f6d61d0f66f68d784762b683f04edeed0fe05749842873974f441c771e8 -380f9d07a0f31c747d0add2ed0b30c7a8e41ef52e85d09bd9f409f37f429a07f21f4c7c3000f06de -80011d18380d835e30f80b0cfe01433c187a1386fa60980fc35930721046eec0516b387a038e59c1 -717338ae80e3757062099c380a27df8193517032094e66c1a97970ea2338350ea7dbe1cc7c38f310 -ce7ac0d94e38a70de7d2e0fc4c387f13ce3f840bcbe1c2105cdc011747e1d27ab8940b97d7c2e5cd -70f9295c09852b3fc1d538b8a609d72ae1fa1cb89e02d7ff0d373ae1e64eb8f92fb8550fb70de176 -27dc790bee1c83bb5e70ef35b83708f757c3837df0e0203c38050f6de0e14df858081f0fc127c1f0 -c9cff069267c9609a3d630da078f0ce151263ce6c3e30e7872109e74c0e7e5f0d4099efac0d33af8 -623e7c711fbe3c025ffe0e5f55c2d7def0cd7bf0cd1df8b61e9e75c3f315f0fc247cb700bebb0cdf -b7c20f2be0877cf841013fcae18536bcf080176df0d326f87919fcfc047e3901bfbe01bf4e875f2f -c16f36f05b33e0a5800740690c631a30160f6319f0fb06f8fd22fc7e03985dc0dc83716b187f007f -1c863fbe827f39c0bfcec1bfade0df8f098827e0194184116ce9417a12e418c129203436121adfe2 -f4a94a8c14a24ee58f8a694f5e4cd7f657dec0267cb18b3458227677b60c3744f4569e496456ab50 -e943a19b45450f336905d32aa2eec4174a91193dbe87d26e4766528949022da2d8e9adbc216cc29d -3ae68a14d8a65bf97e1931b65fc13f942ecb73bfc3a4292feb84f118e7f1a81dccdca808bb645d11 -b655507661857505e9459985c201acc9c5725ef7a202ffec0024d54581e2d8fd29b408e750e39138 -8f8f295c8769a68e3b5599c4f8be500ec909a59f723f9f9929e13515c74424a6c427c5091732f50c -85b3e28b120b51be2e2a9567f7a6d172e68894aa492c89ce11631e93a2931e2bf7a9b3297643125d -24093617fb4803424452148f62d26499a26c718618d1c16161419e4d813d57874ee10f4e08f152e5 -e2c2a6fcbcaa745d963f922b679c242e8d62d3514eb172363f2b3d2f351fd175b9125b21934aa17d -d152eb445a82dde5947586a400b5d1b8851aeaaf286846f47095f73621e34221f348b18d6a90b39c -b2cd8c2a40c3340ea7be7138656cef2ddeb145f0908a4bb30df788b68c6039ee91dd5272eb09749f -a39c8df5f876666e41fb10adb7e3634cfd74f2e6276d85d1ae79c2ac901cbfd2f072a45b53a1a83c -6536b8cad63acced88d0c6c16f0b5a4b33ef3c5c8a39fd5dc58d6d82da2a456dc3597ac254a2f231 -52314dbb7ccc7c6c219f8911f14e2417c7a16024890ef77563b88c40c7f1ecae4741bda8421795c9 -739a53eb527514cc49117539a954f21d23c404b3428759c658e9bf9f90689dc89a55aaa0f66684e7 -a04a249757b70fe02978beceb7ccac66db520f56e3da87517884cc2385d62e4f44d129512a138f28 -a8fd5992bcc367184b5cab83e7e2ed971f94155ccad09dfafbeb4831a6a1209ef7294b5f70c6562a -6ff0c76d28641815b996451d6e56502699d222749356ee61315a5878278bc5a81dc5048ca73111ca -342e632be27d9a5018854ce8f18514fa402a328c67e74529a8f519e24af423ad9c47e18cf1416e11 -6fead847ac36da714f172e681729a63d7b81135eacc6d474edd6125635226a34a1201a19ab708f8c -23230d9354a877c14f780fd0cdf2f696b6a6b27e3484fac2bbbceb7d6afd0bb6171f2b2ccfab2aa7 -b55bab2be4eddd33b086fe19c65860c43ce53f4703096d125adbe57450ad93f90c6415eaec14ec15 -7e24761ba26da5b94d42dcadc182417b657976ae5cd0c7c3d4793bfd75fb1d96085928a006e58c06 -42b912cfe48767c86ce22322c5ba52b1478c35a219010f57281770e5cc0f5412a3c52de5e5de96cb -cf211a0b788c627c0157a27c9d62f12bab53ead711e80b5cf40507a72b0ff39977f416310266e6d7 -73f1343cedd9af5880a77ff42df3b630d28f3f7a7611f31ec33db465a3b36b5557a8d0ef58c40d56 -e1df0e5eb82950d13aa69cc1d27a8cc34639f8b98c8fe71de31653e129c92809d16eb1f90342e525 -2a21cd4eec2edb21d68da07252b3500ea2db736547848c1ee5d2e49fefc44a4e2d65b1369b79fbee -0a4c9eea281b6c11eea030a181e2e2a264d1e16181325f441b5a7e8cdfc0dce13bf78e0f1fdc2f9c -80af0a1c78808586850abe7e22deb194925814846409513112660e13aac3ccc781d1c5f12513f1a0 -28b7292d03e5a1fc541627cd226a28b948fa03f33e9ece58ea3026145a2193e925b20039aba0f4d3 -a405e81e8df753783e0e3dff794dc551169063aed1e53215d7692c2497f74dd7ee572aa3f9ca4a0a -9dcb6b571416e515657464b0b4a34454475251a23ca64c9aeb8676d2cc17d4385f29e2321b44bc5e -5414db75901edf49698bfe0992ef522cd55d2c2859484afb9486e5d8a88b4098e68c011bf0627028 -3794171f1a1115866290245d92655b6c937310192143ef9d96663b5d962286444b1b0c8eee3bb7fd -2b97ef11e6a2ef07ce7f4287971a9b6ef33144bae6c8a2ec7087e5b0f717087368bced6bac893f3c -7d2cd4a94bd0e425f7536ca75531d6a7445c8af73629a79e9b766314873c9eae2dc955bec7cf4dcd -46b9886ec9961d148ebb53dac3e84074f49e785a4c694b7042296f636a643eba48e36554ab6795ac -87c59ed65758037f88df347bbad0c221d0ca41789f8a4fb30a758fb414ebe2851bf90da7da06ee0c -6f60688663bb71d3c17d6d0d0255c4bb8e7d9b30d54628176343bedd86c3be3bd03e74b8def77478 -475c73f2791a9fe7c55e96d50736f9b4d9971f4036e860b88bc7c123fea6c88875845b0698faf6ee -590c3d02e6015ecccf7fd0d27e1e9d47557e852b6855e6eb507ed641286f6253bed842161a161214 -e82065632a93c7539a2a7fe5cac72ba9306603b786973b9c5356525e59df5f74855d4c006f7cdbf8 -afac239da7aab0a92adb49db94ff6a63cdc353aec73c0efe63cc90cf5830ef321f30f64b9af44eec -159e317feafc393bd506bf8b6761fbef7d1f599e139a5f5fd5b68875108d013410dee675c2b67109 -62a6a03d919bc30ec4048a038383dddd0f85ef47f6e850a97be38101cf1f595ba11775cf7b06e9ce -dee18a93e865f86e573e5245abcf5f28799898ae5df23326f8685354e48689acec8ddb799846bf34 -5f3875f96cfb53f41c7de1f3c0f2e496eb0cd1c6bc8768ed12a652c47b18971bc346b617cd7c6def -c6fc9ceec797233c86040facba0d100388d13ab26af5416bdfbd512b10ed14c58627353cf0bef3ca -69754165d358e78f189daefd091e57aee36b3fafb5f7c9759ec9bcb588d1609530ed8afe37674ed6 -0cf5091936705a844b4c1368318e2ea22c0b6273500fadfd89f2db68ca84f98c8f82122365b12122 -cf286fe48dfcf3c2cabcea432fa32bb4f673ac75fccea30b8d9e5b0553f16336fbce6b223e63c3cd -0555fe7f03d3bc338ac68ef222996fa9a038a0405682e84a4569659b43cdee9dfbfded0384010eb1 -6e296b6823af4f99ab3c64121db54995780be594517a743eba4be3ab782a1b178fb3854b45171e51 -e973f4058e50e9f3393e84fbf835c9252935e8013a91d75b75aea9ed3cba827aa41dfef54e7d2bea -96b05afc842911f1eec4e6c9d0267adc8c42ab62651be2d4f9696dbaa408dda695a11aac66b2b36b -f1cc0b073f58b8c786a1c2a4a969c1027515d68e7bbbef9661830e91ba18132bbfc1ebf87e3c1b06 -0e07317310edcfb3458e9971d909e9c9f9a884c6082fa53e45f2c84243ba124b827971471225d1d2 -48b15fec4116c44b7120af2e2bab568067f258f7af90942ca3ab79dabd49780e77bc8e15f5cf12ee -af024eac6ce74d6817fff01d71739493ad9cc12f4acf4d2d4074756e84839049a7904d5cdc8e2856 -7571726a4bba588e4ed338846aea1da9cdca4d90e50b8aa5f9f18588ae9297d43587967938fa069b -da0abf62a3fffe10b7c83d22dd89d2ed34be588d3d3b33eba6a11bbe9f61b3fbb5b5d3b519a5a752 -87dfb99e0a63235a5876488e8e7f9e7f6600ab5abcd478939e79adcb154fa1283c5c1c9fe0e91b19 -86c2506841547718adcd981ef0f7749db1ff81c3b7771fd4f41c1374349634a10e74e1608f713ac3 -cfd2d99f16988b8a5159736b6d4e6e4a764a3a522417a664a176d4256fac6dae93b7a211549f5029 -6da299b8f119fce6b88fe38711fd6573a4dbde0dce0c77f9defabecaecc29e11a136cec45ff3cfd6 -b50e34d6887d8a05a5ee05f6c899b6f075b7dfed78f99980f547c6ac74acebaf6030b69759ce6778 -e96bfa56ff72adb0ad64a0ebce958e2f2782ae3df32efe808d13ea48e1b0a0c1e8ec0e41a76353d8 -cda0414b9d6b6bf1eb87f1722467432d9baab278cc176367f8bd6840d4ea7dc2ae691162b868beef -874ef6ae470e045b223be450e2d6b47fd0eb078435d1b3faefba07bafb06cbcfb0316202d4e7ff03 -5bbf288370049f050d15b5265cb28685cb872ab864aae0f2eeab7079fedf7061916d183d115954c8 -5e9fc1565eb768ec8b3fa43e41259282d52c3b5d594544b972595964c53474011bdd602312be86af -f2b51727e277b9d1bce4e498b8949444a41b8f6469d1996c00ca0909c90898b9769ff5268b26a747 -76c2339ead612541c85bd7c1cbcfdac3bbb0422408ad8ea98c3c4d47f0b4cd19bd422a3b2f23ad80 -d54c5172653c4b20beae36b174e6fd4b676e8c0435ef6e133270c9af58528d6a75bb1aeb064e3778 -e8570ad445fbcc13aaa27d171b3996e167fc9e8186924e448f54bb9909195b0a6d9145ee8d5757ed -5679f139e83a8deda85f1c4facdee318b4db5e804f5309e91e5181b11611bafeb1dc082a23351d65 -22ba3727f6b070dc8bf5a4f898bdb1ec7c6f39b5374b56c0ce9f2829953fa9e2c9a3173852154ffa -c7e629f82ee96179be2dcc119ca573b5b0a1a0b9b6a946d18306516f647b403dad7dbfdbc5b066c9 -4ced7ea65ec4bb1b9b178d4cd5ba97456d54950a0dacee33230b55bab7a14ea5e118e63c171bf0c6 -ed948ff9daf7ebf273baf05b670e2fb10975741309ec03dce31725ab9285b40b5f2cc59c72bcb06b -02a1b39e73c66cf06f7c26279cd79b549054102b8fc90a4687696625e5b5cb7f13b36a1ee6e15ddf -d47dd9372ce81bbe507b0d9d42c3a24eb706bf62ffea5d74252f16bb714378f1a270692892a188f4 -f0ec4372fb9c432ca20eb2a5d73ce6f082da8da7f608af6e7ee68249f418e1b75abb5a69ec40a1b3 -05856732e9a9b8912d1f5f6b224eb326c96183f95c3696e7a5a4c70be262e263e2642e9687ed2212 -a3e3e2e350024a4a4d4e4fa68f332778ab1a0e9f1deea83ad62c88cc0f0d14cb4290aeaba4f6a210 -77fe48b12459435f7c413c64496e5295b61f5972256cd5599056989a8b74ab26429984429b64d19b -55594026a7b665c6e6a99489296b1ccaf70f0ef6f3ab08aeabafaca8af0baef465b3ddf1c8f2d056 -e5ce72bca87b5afd632cfd71baf6b0d2824df4a1bcc4e0e86831bb78b669cc712d72cdf142879183 -d8d3d7dd3bdc111d406bfa2cb0c69e5b2ec78e54bbe4466686a2205a5bb2d5c6de44dffc249e6a23 -08e6690f3730eedc0a5eaaa2a0488ed8d89ea888eb9074c576b11503f5f4e14f9f5a5e66746e0a67 -9f71ec4327e8933d1d17fa7b446ead8246afa280e23dac9baa1beee13edcae203e7f814fbde06017 -ccf0d9ba15ddcacfbf9fcd16a38d22ea7e5c7ef464729245ad53b970a382da98c5c2e8268d8fe053 -cc817f7aa26aabfe4e85d93fd1459c51f24ba445d32e8ce2cda3aa423868849fc0b38f664b7efc8c -d2becfe88b7917920a64c88666a228e497209546fb877847f920dad9aba547a8dd8f1f3273a5d450 -529104d9d34c26b576c8fa767b67716dada0b7976b4865248f94b5e51f2dd2658daa7cf082c05b58 -9b5a29edf909e97b825d22f784b3ed4466aa3c4d9e9a87742b73c5ac1bbe41a10d4981d161f13269 -ac1449902c5b5c1e5e29cd8d603bfa7071885757f0094c9ebd87670badc736fc93a9d964acfcae87 -c032568dd963c01f4fa2d0cae86843955afa15945186b45095cd734e5098872ac22b1992aee2c5e3 -f5dcf1f3bc78663db78a5785894a05d660632f9b4cd5cd2b4b8b5295651b23a35625a9fb5da3f488 -89b280d5efeda2c25155cb3022a21ea95b4c56b9ca2d724219a0aa6f84125e53925c864448962c4b -94cd670a743ec4b9f14549452897ed68f2b35bd36939632da13a92b365031fe0d7982e9db4f8f4b8 -f4d8acf0acd82c9485b20be5edf86d7c47a7fe5a5676433aad0e864645c45d36cb8f71f8ac63b01a -a49bf322ed84e3a1143a9094b44995e523e55458aa531a5bbfb4ea62730acf6276a727a625a525a5 -27e9e6c8d2e351021d13131f251049b0af9ce790eead703cca2cc1fb75ea6b6f5eb930509fa32bcf -284a63abb11c397358caeb4cc94f4452141b239546b11de5541da5219598e612e51bbb3742d72776 -a296ee538e29882f5ee03ffa384aac2ce0a31705c59fe6b1ca9188a807f1c521681ecdb0bdd69638 -97081f7fbb1dde1b9129b2adf21f0c6f8a6b57751db727e0fab10aae6d22ea613c0b57139ab94c31 -c69f18e1f598b8db7aad5350d5933b80eeab9295b443f96fb67f5ccd1aa85139c247b7f3f33f51ed -207489a84fd573c79da84351a101d2f89cea3881ac35a298ad49fc4382fd1dbb7dce60387f0bbfa5 -ea4327ac758db596846a89cb8b436224890f8af65fc604eaacc2c1e2018450a12eaac8cf1ecc666d -e520a1da130ba2cbacb245d9a2ac703dc64e673e2e4acc4bce4379baa8bc20a725831db555425526 -e7c82aacf14ce65b9d029f1c69169b6e720a0b6ad8762a4ee74b26bac835233e0be966a3ccdce22e -b665ff5ea7b4273db38c65a10e83aa18a860ed9bc5cb4f2d48659beea63c29dbb40550c84a1a699e -c05a385a4e996744e5a193b4f21bd61607c42eb2cde289fda6334a9daa69e8f3cd9fe3399f4cd7fe -5ab9eb0a5f2c8d4a90b07e1457d427c46cb43896502fa90a693bacd8c39669f79718db9a07978555 -5695975564a464a6640b9373537250365ddb54d1355ceb6b25d845314b778a630fbbd0da5f878449 -3d3c6798f7399cefeb2e3f765e9079a034b41bb5b08b6feda0998fd866c03b2126342a48ea17138a -6877bf965e61069b35badbf0eb7df444133ef6ba8218dba96afa1d45bc9349a5d1c80f45c4f947f9 -30f3c6393acc22fca5e7edd84a24d7458aa23c55d39f9f5aa46afa15226a986dfa7bf571caf8808e -9c870395679a1fe6e70fa5ebfeb9a1f0c50b8e72d9d8747e414a1eca400dc905b16cc11912ec6369 -cd9831063ad891fa1329ed2a5c16444e66e868f5be54ab825aa7dad3bb4de3dd544df9afb3ef6d3c -618a827491541ae7979280a2d1c4bed719057520559aa7f79c91e2741dbc0fefb976b938e75aa6ae -8291536a2f359413b8f11d6c2fe779a3b062ef3ee66d6cadf3197e4d51db50dc94aa2b67f4255443 -725e3ceb5851512181de09f151e19161d2321dbf9ef01654888a0ab31b525934394972a906541cd9 -78f01be6031d86c718f91c91c57926e94af08772ca2f2ab3302b5b5e58267c88dff8929995119f16 -8fe27551785ca2a7aa7650b092bc778cb8318acd55ff390ae56c7e617a8e6ad3b32637c24ec864a9 -3025b14861311528a7f6a749f251278d5b29949693979d5d5dd95bd28ae8be0a77b6d2f261bbc0e8 -e87daadc1b2ca7f6a54a4ad0051a67520dbdcda503883e5dea6f2864dc28b42f36766f1c3bc84f4e -05a4f9a44596a24e5d7c84c25acee7d6efb50ed86b25083fed516b851c909fd4d09cbe4bc5a5598b -3ca22d25aa3643d6a49c7291b8328ac33ee7e02563ebf809698e12ffd88391babeaad22d2b350365 -23ba2b37c651385e4c793ff2fc18ebbcc0249e83dfd8f0cdbc5d7bdd6cc304fb353a07db8e3d1859 -c74c6538763b8c0e1caaac164cfddd548dbddf0d55d8b315f18e26b0d8f347a1f101323fe62de62b -1d46077f939c19539192ae1b531eaf60737a5565de0915f6ca44d4e994bc989635cd463ab39856e6 -03e56b71a589133b531545d947d3d921c922ea68823cbc7d09b61a6f51c173a9720d5e31be862be7 -3dc245797598c0838a63f9b9c7f3d8fc928edfc217f93e8101debed581f58d35d5f58d01353eaaf6 -1c5397f0c94bc4e96b78f01a2704037fc4e6d9773d7e9d9103487710751676d67db740676864d1b3 -fafebc1634a48b8665cdbebdcfbed3b11b5ab0c8b9d6a5c00ee9da224fd921df45cf746cecbe5be0 -eb14e582ec74d1c102d77a471a9be106fec3cb5b8c566edfbada68dbb5cf46af5c1d65f9063fbac3 -c13f31ebf99b4b431a548df55a0a7d26aad9a8b85ba6a8419f4d5cdfad68b85e4ae753db5202e27d -c37dc325ce681fcd6c66ebe7f0e0ad6157434b83d0669a619dc9a2f8485d785d786dfc951436569f -5736cbf8b7a871436ca164ffb8ecc74c46ccdda6f613e2c5630eee536dbd6cd5e34aa982ccfc8c8c -b4d2ec920c36af95e74abc84aa5d63cfd8e08818498c34c95185d37a39b53635220f0dd1cae7140b -f1c8634ab21cfb3611e8ab6b0ff1b2e39c313be57a3ee31dca1b492892211f74d8df6ac74a8beb5e -471d1e5f6baa2ea96b2caf2c6c45cdf44d8b91b5065bb618b8e478d56e14b884bcbfcbda14add25d -7c79dfaf9f9cabbe72577071fb70c01974099dee69b829c9d7f1720a89744316e840a3fdf9beb3d5 -ed8d276a0674aabacb0a46b2e8f119f97c9f8bb20ed44f0f35b60c0cb4b8d95ab81f3672106c36e1 -9f6378ad96a7cdf61c74624b4bda6ccfa5fb971a7b9f9c62d56ec32cad18631b25c534740f6b5d39 -7345b5191333f636ffcc1fad7869056f4356d44431f7956abb6eb29c2ba698793b2d99775657ee1b -f4123607d5c55e4ca699d3935560085e4a6d535af10d72bd8e223c0ddd2ceaaf2fa7b53f292d2cc9 -ea626b08bcf547e5267e7657f1bddc73a85eb742541a1c240a0f8e902f285926988a0f4acbc7de2b -23d015ce5529ffcad8e66d3cd684f8b52b78c61542d9a87c873f9eba4d99ca636668a83fa8ac784f -597987c0e71f73947ef83d7e64a6ebbec89843489789e5e1b5d8f4e9d79df7d003dd1f56df9f6379 -20c4c955e0e521f1129b9627e8747dd7d6741dd1a3a7f7ad5a67bf7495be90d9ccece5462967b069 -f0f1af4a33fed5e6fef3e81c3de2de79c83d28d8c3ab52d496959d9a9a25c84e432895ad4fb2e263 -3dfddcac5c8553f14fd844e9cadfb867b7f18673bbefde397ffed6fd3de7d64f6cbc63e1d758c8c1 -1fb130dbea796817da4d5bb7baf4b75655b634052bdce2d9be966d5c92114a41746c7c564e735ddb -8976210e52fc2f46b32ef425eb42ef8c2de35f0faff0411b69867599558ac0bba28d61a200643871 -bd31c46773381d4d5d49adc9aa2fad2f9577aa76625817ba515a79b57c6b597825bac1fa28854e45 -74fb95fa9506646d4d55b9509d8cafccc462ee15d677d8d3264a69c8588cb37faa976acaf173d370 -fd43975bd3b58fe325f833fe5954995c15436b975f08e9dcb779c6aa7ddb8dfdc3b2ab5c053ea5e2 -6cd52b328934d4bd37e4c6fd8735dd83c2c1ee9a33e82a3a1a31e8db1856212a7050d0dac7af0f56 -b79f98f1c98e531fd93888bddc043efe928090ddf2449deedbfdcd17117db9dfc1dc4de2161828f4 -f1f1936c099aa899594f1e62556c6ce713e06a6fbac27d1e623411a3ddbee0f30fbbed6a428e7915 -14ebacb9e8d7ea7f37e86af43df403faa5f0d3da0b75171ada6e9d5111f89579ffffcbe25e7eae2a -8b2b937a7020bfd1ffd6ce6e97d316ba190969296c579f9991915978e4ecfae7c2a48c14149f5bd9 -282f6defab6fabee428574664266427c6878a8589018efefef1b10131717171b9794ac93c0fe8b4f -a4b1f69eff5b8253951d4a4b7c8a1fe02c8ef246a12834539cab3fc8b6dbc81e7987daef38e1a553 -d35952d088ca51794249ccd383a571fd680035960f5c62e7ee89fd4dd9d740a0a7b5bf357ec5c149 -d8909f7fb5a4ab7d70e0144245e54dc3856da81b7544b60557bab7eea9b442f447663b0d9d4a421a -ab4a4aaa8ae20b2425c2a8a2845c9443370d340c9f1bdabfd53ed232c852e0b743642bb34d71d0cd -dbcef7090ef2f2ad086968aaac686808ac56f55249a81ccfbda45c5746e096fb1ca5378ee07fa8dc -ebc063ae8eefe5eec02dcc9afb78cd0b8ad97a89cfc4f1701c7ec665cd87d73fe6743066fc3b430d -35ed03379fb44e6c6ae1b75d9f2f7f716428a0e240535484cec7e6b5ee751babb6e66f40f3d09c48 -43ff5d7ee63e6e9bf6d27ff9e9ad7f804185a8fd7f80018e17fd2f46b3625efcbf068d6ae9fffa8d -c01fe056fea171ed94a8944814a57b40e1d7d25cd630d4127b33eaa620ae3f7e20713006834e3cde -cdf70a09f5f1aa0c6a68a8aa6ea80f52b5afbf2f9176e229bdca438d041ac5afdf54bedec51933bd -cd5fe76e1db915d1cc7a662a7e139b7cddf6cde9b3c2e1e1abb5b7118d97e17798379805f3cc176e -0b88943766a766a666092fe36cee669ecc25a45b92ef8e740f23f7080f8ffdfbbd37b03d9179a7ed -70df606d7f8b20cba1dd7708d1df3fc21cccc746cc1cfc36b393716056321f3107184bbc82998f9d -6e8c14f63d1732eb9446fcba647950b273b29d784fc041919b6f883fa25d839b8f9d281d69e910d6 -35b59655254f34bf1f3f24f0831b1cbc4df9311f5bf38a51465a7a76c7539d986c49a82c2194cd09 -2e3c86606429c96cf84cd64dc848ca69ea8a8bec1660caf5f84e349f5eb46be3ba307176858fc0ab -32388f6d217ca551812e834177476fd51e1d110ef4979f46f7d02dd180cd8843dfbe4a46ab5cc517 -6f5470703c9bf452c569a1f1be911eba71e18962144d87158b15e5a58af2aca4c2844241646b5c07 -5bde6653d9491531e5e1b59ebad5de2551a56ca55124afa891e43b640b9db3bc0a028a63337586eb -14d97dd91d5985f9a89aae9414874ac4917e4182409fc09090a8b8449d1a0a5565d5e5376629328a -513e5d1e511c1626918445658467850af23c33bd913f1d49b9948b8a3ddbc2aaa27222102d924484 -059549876284ed710d3245647e9cce91c08878fb9843b1e22814488714455614e7662a4a04f5cd99 -9939d979b9d999ad15af78c6e97f4889ff879e812b59d7d87e363e83057ca66e525a7c666c764cae -ae4f8d6f5d72a6b83cb4341ed12acc47561fa97717de5d9a181f1fb771f1e19d2cda133212b332d2 -52333304a74f75b5dfbea8324acc6d25d930f1d58779ca7b7c779e03f366504664aa9405c19b8bde -67665a9558d53b094b03e591eda1d6cc429d16de301654c5c9934b906e076a2faaab6a6d50d4b6dc -88ccd139b0d12d700f52bd6208cafd11f7e9943acb23ab115d5daaa869f56fb05308197de67bbe6d -bfa81fdda25f9cb8f6694941725ca9ea9d13a3573d965b4da07b1c7c8c99ce37e0794694b40ac756 -508d85854d822faa19b73fce6237551523ad536a0c10e86b9cf10547b96f6c239fe1c9f68a4cac19 -58bf87e12166065a51bbbcd7a6c3e144d005d6f9de7cfc2ddbb9bf6df209433984c6b9980b6bf122 -b6bf07bcac86668e309dfcc7239bd8ae8274de65b6dcea1bfcd1d19cba32b9b0bcb831b755b5bb7f -9e0db1765708ec778583d370279ff1db86fd18ff2bd89fbdc5f8617f55dd95a43cf47f6711c6a0f6 -ffceb8c7d9be726e3376ae26ae8de2dda39c46a501ff1a738f877644475a24b345babf9cb2c8882c -422769fce963ea5966d27e2153a2daff89d999f0f271667421ba446339852a5065daf1c4741d8738 -df24d5770a96f5f2505f7a636649516f67433faa438ac82a0f857fa1ea0561b9bca4a2c7a66efd86 -bd01b66e429f23d1aef16be8cd2a65c5d6f98f96b461db7e5c5f3b0dd53c7a84177f3e5d3b0a3f57 -6af299b778b1d7929a511bfd79ebd173eda562f75441eafe1c6903a2ebcb2b1a8f5b7419335336e8 -317382d2449901c2598730f0ca98796962148ee252e29362451951a912445bb9fad80bb58fb9d406 -75b756ca07bb04da5107af354b7b670ea1fef2a6f6f2aa8a3e5442a727a72526c42644cbd852d75d -628f6c917bcef6da2a3c353513b5a6d4e9d4e2d729268789e457d5cb6263e3a3a223599a6269547c -d8cc20b1bca2aab4b099f5c74675251ec3965458f4c766ee351e133eb65955f1c5962b6fdd219456 -6c233bcee3ed61e695c4f65e2b2d3c8974b10f8fb11dff9a7b9987ddc766b35939fdb3ff5d51851f -c7b0a96c2f36e5f72bb5530b52f35191ee31519d876798cfc1e05ca3fc4d82dcdd59aa57730ce864 -af53150fde3e93c5435035dbc2fe2e416c4e0954ff71f0ea1ffedee6e2c7effc7fdd53c36c5e133e -524b5c1fc57b46394dca95fcebcc151e3a141f288d91c5c9927d935f6e4764490bd0008dbfc27b98 -2714b295441c506d5478c929ab0c591e3aa6ea1513d26253a213a3e2754531d28418948064e9924c -bf7cdfac207410d907f939fb1c9639272ea74d79f89b77983dc7783f978ff45514c4fa970a147e85 -3195289b4d6799aab71f6bd4a6c1a3ac6dec79e336ac7586797f451b3cf31ea7858d3681d86dec2c -e316f8986a2e16bb0bff5841794b23bd0513c1666c6a1ddbf499ddc17ed72def4dd77e8a7b95145f -fbfef7c75b7baecdf874d3b9790cb17aabde7685ef2f1f09b49f326014e2bd65c6c2875b3017bf76 -ffca4ff73d8699d7bf10847fc0bf7da08a6d4ae9ed870e6ddf607de6c9a58a9e338382e1fb2c2dfd -336e03a7669ce9efbe78add761f33ebf43fb5c0409490825264dd42cfb2f129d388f6f8e532eb2bd -f862f468f4111b24ffe7de9099ffceffd435fe2e11d50694e3637589b5585cc3f69c786fd5a95b78 -5fe57dd561bab6c323e5a5b1fd7c07deb2e511317b91130ace756bf0af88ca6213fc877af318eeba -a37baeb6d415d6d70b0706ea6fb1ed48514a415269537469520d3a8e1a8bda7bc7057fccd519e49d -1ffb885f125e185314572ecb8843be3443ed9c6be6115cd7f3a4eff9b17a41667a7e564e06adddf6 -087fc9dce22f5a3a67d6bae3bbaf3d7ec002f2f53beebdbb84057efcd61a57ebd9dbe66ef10a6ae8 -bcdaf279dfa0b0b0a82c97ad03f04f75aa29efaf3dbefbfae8c33fa7e4fbf1dbabdd0ebc9cd27da2 -f16973b7b0bcb6aca0124d541ff6c3044ed7b055260d4f6c6a28f0aaae2fba709f82c089ac4af7e1 -edfc9daaafbe49b6aade212429a81d6911a56ca3771b1b7731c6f7a8ec222e5eddc5cce57d85cddb -af37d41ecdd75530074445544379944896208e110b190dc69fd1c201b1c509c5aa1de9b2d29c41d5 -c654a2881a482a893839ff5bc65887f9c009afe1654bb91b18132756128fb177ca88aff0081fcfc1 -3d780ed3a30a21db940477377b1a27549104cb7a951a7504fa0ac73de79c0de1638dc2938a6bc33f -df3b8fdf4478268d8d3ec29a0c9f99a23f9799c94cbdb51ac3c99ee2eee38223cc2a86338b591c40 -e3b3788c8fc21263a263fc825c23dd10bdc1ee2e9e72baf85c798db0a4ac3abf1ed14ffa0d98b5c2 -897daf7f8807ea86e3c0493ce324de5e4628bd70157f1eaf0ccfe0fe727221af011fe2eee5f93087 -b88c2eaf71e2c25b75a16589495e283383cbd096bff13c196fee195e33f6e6e219ec73d545a3ea82 -e03102bc971fa61a378357ced29caafa02ed1ec6b74139f01bbbf0a6df6a9e72f0413cc897ae0e77 -3737b6de196485ac914ba15b6570abfbd9e01388feeac685cfbac415de8111e2206956945c2c2c90 -66c6a058daeba08fdd6ebbe357070a4f569d14d45d520ce58da4f6e9c660933f4bfcfaeac9129fcd -e6f39f10787b050717330bf8f80d0ae129855fd4def06d883c8dbe6b4d9227f54494c529120a115d -515c5a5d2d5684448527c486098f882312dd52d089cc2ac5488e22b304e5d155c1154141c12141b2 -4c71b64850669d1994b2df23559c71a4242c273c339aedf1c5e1017ec592ba82bcf4dc2a6197bc24 -a3253d757ea4a58f77f59652e635a447336fa8c0caecad527634e2b87a027d8a6f8c7294a6ca457c -661a8f1dde989a9f7551714951969f5f94558ce8829c04b6eb49488a1726c424c5a0783abc34a2ac -babcacbac3a5e1a0e3e1609700818b85d82e620e3d8b276355cfe1254ba2b7a624c65b24ecd79530 -1b650cedbff710d28d8ac9ca4e4fcbc8c81666e5a767a35cba425a14e22f12053835fb0e9eec6cbe -d52c68bc51f27115de995a98733a9bad205e53a577e6ad114275e48f8c27d9a8de9344b3fe998a39 -047e57e9f07750318cc6df8136995371976a2b88cda7136995259e73e7e716cc7bc851ae5326f131 -87f2a83b2c5f95475ff430a7cce3fc623c033cfcc39cd06174b0d8bdcbb5deaf4272d389665aa925 -a9fb07837ea125cc3bbc73ae3dd1a349f48a9627d49d82c682b6fae63a45371a422db16d516581dd -fe65cceb37689c428dcafa1d4b56d2ccb6a57cc35361d56cb37fb2a5e57a11ddca3ce77fbdb7dc1f -ed44dbdc5cd749264274823283cfccc3f3c34b633225483734324a14912f298d12e2a50b55eedbf4 -0477b098da56cec145ca837c7422a3aa6c24fb2544422a028342fe82484610622112ce4244f4cf10 -29ce684d4f5d1175c0c7b9debfc026658147ba24ddb1382c3b6c6270843820a024bc32bf34334721 -ec2e29cd684945fb1303c36ce244096224a3832a42aaaa2b2aaaf2124ae21482b091c46a74bc2d45 -9ed82356c49626e423bab2a4b4ba36a224382a2c214e24748c90247924a1eff27a1a5b7ddaa30752 -bf6d492a4eea661da02ca1e03f1d801d2c96b00e30f1e5c6f9e538b31ccb2a707af934745cf462d1 -29cc7d6e7f2aead874ed5fa2f145fc165ffba78dd786466e1cf73eb17748c8bc87b96125d27a54ad -dbd3527fb4a54e1a9e9494949020d0fe1922a26411113302cbc26b9b1465cda72c7b4c0c2d6c3659 -95f97cbc4d204b65018e686d65f4365beb2d26c33bf0d455c24b0ed55ec8993ee8e1b3dfd583d540 -4666769680655b5c945d5834a32ab4d4df3b38d8dbe29cc38327a78fde3b2a6ad878593017e7f31b -d171af017b96d8c6160f8567c00c772f6f571797ca73bb051e2d5195a881eeacafeb54352b38ecef -3b948dc165ffe39e236e8c671b8e14d6077e63abbceb2dbde7feacf2423c3cffe75eaf43f9e01fa3 -b0b4666c5a0d819ee1c267aa97e8867c4be4287675df6be1c250137b794433a33968d1ee7034e80c -3a8a7a4bda5acf9cecc034c2afd3d8510fbfcf4c172405f047fb192ee3c2b838cc323070f80d3b63 -f77ecc792c9c3a7627b23cb60117b4143761f7eaaa86f832d5b67760f5e57b38a066ba76f8a3b165 -6c0dc47067319acc5beb86ac6ff5b717b7b60a8f9f68fe043da0afb9746e17647bf13b9adc1cf605 -6e713928f472f215b3e9c62db0a6e378dda7edc784b55d75a58dacd5d63c72c45ff09d7956d64ee2 -9daa6a233ba88cd61e7954111099e93d93e1cd62a630da66c7f75deeed2f6b6d161e3bdef410dd46 -45c90509a5a571a549f5a80fd5647755323fffc1d319e2fda81ce36785a54b909466b8460cb5da3d -a8baada7ec5aed88a0fe44474b23ca446929590945910509f5b1136eabcbba2d5efabcbc30b71015 -eb96451684486212c2c305cc3c66beea6db9ac061735e037d998fb05676c0dfe907f70877b901d72 -45ee65e10d010331ed894f689ccd4b3a1f5b1fdce8d769576983ac907bd8110b9b534e653b910d3a -2cf6f0b677f035461b6846f7d162fcfab5eeda6b1d82862d6dfe17d00334dc7d0c033dee88fbf9b7 -bb0d9905cc6beee65bd61e798cd71d2b3a51562e64dd549595f13ee64d7eea67b5ddc7113dd07cc4 -42e84fb195dc6435f3bb6458b50d3f369b0d97775571e82dbc86bb93c7bcc9ace1b6f0f0eb3fe1a9 -1fa862504c7d987c8c5f3bedfc28367b72f09be9daa2dba37cb43f3a6ae247121f2a07a8cb2d3dc7 -4eb71c58b1c6e7c8f6384168726c228a41d1b9099529b476f7e7497d9b99993356861c7214c5e654 -240b922b922bc34b42906e8028d4ff7097cfe91f1e3ec6c4a99011a716a1579d6ffeae025a5bf4db -7043f3ad195f6d3b37678b7580b5af20d435e61032a3553f3be8c0819d0dedf7cbf0aab6b0b269ca -d9df4fd7fe7decb4b294affd1b7e7ffc7c187539b93a0685a0f8a4e8f86826795ca4e3b92b2afab0 -eafb59768a14ea7046603e92a38aaa335d0fea8eeb605366310f6d8b92ee8e1327eb8894d9541f5e -cb0de2ed6548ef3006d86287b73d317d448863f0875407aa951586e7476448328fd0e538329497e8 -9a2891492242dd63ccd9be9683c53ceddf2b72721482273c3c17554a0bf5e8f1a34c201f2fc7b7b8 -cc2d95c2f1c9b1697cb14b645430922051962837a84027b820302b84b5bb9b9b643b5dcfcb6f2c91 -57a2025494288fab8cd6e90e93b3d1f624aa6f28bfc7e2af5e2918c44e6c7771d1fae2c39bd3b5bf -c695ca5d7cb6d14c94213a3a39ab5e8829ea927b939940fbfe4e7b3f677191b4b4585e509886d253 -d285299929992883ceaf2ca8a82c94f80b7c283dcfc838ff605afbebc8e898b0b0194e0d7edd0d75 -450dcd822caf82a85ab6792fcaaeaca4198d113e8a4d8a8b8d13c7462545223a545c5655532ebf51 -ad6a2a957d27887ce5777c2b7ce904f55fbf5f6aff1e3fe0afb0e1da524f46b8cc1aeaef3f4d0ae4 -fdd3af9b700e853f7aca1da6988ff4b978dd3ffdd449c539e3dc7d16c18d638bf97e1b0243f7a21d -c8a3417a95f6e5a55a670729fcaaddbb448368140d1c2df895fedbb7c2c7e68e05f26d799b66ed68 -3b54b80de93296ccbbcc1cc6c15cbebdc64658ea5e1cd6e3b29811ea0cf31e62fa82eb40e455b607 -df8f67e2d9d8e1b2e4b2ff8830bc555c76a4833ebc83dfb2bdd002e9d38cc56a36bee9ec3da2183c -2c086ce57b5c8a3a893ea7b1c5a7780a9e7eb24764df37910b568f91fcc0e0e000bff290dabaca8a -dadae04a3fa11ae07ded0fcaf0ca369fb669086be09e1fa66bff36f69045381b801f52a1685b5a78 -2aadfd7dba5d1292ce3444260196b63b2c5ce7215510878655e7f68cd85cf3bf838a50796a656a57 -dab9b47255e7c35303db7ab19bb77932f366b28e434a541e6aa771321650d7515958ee5a35a6935c -1324d11249a89b6c27a2e7e0689ef66fe5b9e9a7044779783aaa8e28d0a7c7df1e9fc137f5f53565 -a66efd19ef13687f8fadafabbaa9eb0d5e2613df04fffe87ef3957fe6981d8ee9dbf2f1a5f540ad8 -d2be9940b7f1e2db1cbc9c4d4d7a3bf7ae5c737ecfe8932b97461fee3eb95218e3c91f6ab6da6811 -e86d1f282aa8881246d4c774a14ebabfaebe57c55399db82a7b7104875e4b0dab5e35b1d3a6465d1 -eb70ea647fdfc99387fa2d85a91efcd6061f37371f5f5777df86b6b686fa36366b7d241bc2b1aa70 -1d54350d3dd9fe046b7f325dfbe118e0a57c3b3367ff7de808722d133784762634a57c4f63394ffb -4bcc8fb63b3177a63df28b3ee4416bdf6d76f129b09da9b7d97ea76f89a8b6ae58519f224c29e1e6 -ffbfeaae032c8a736b4b9099b9299a3819054d58936bd424c668349658628d2576c5062aa834a94a -91b2f4267c8834294befbd89820a2288057b8d2d2a96989868884673cfe047eefdbfd942d16559ac -f91ff33c1a5876879973def39ef39df31e1a21c1e9fc33735377a03494e81dee16210eb50cb20f9c -a5fdb5a916fb5bdf5546abe7f69e59b1f2e49e82f8da93ba054b4a1cf7a3dd687b5c515e665a6256 -e641063fdecb21d330931893e020c20f8218e79916262656db2a0e65a5c13be5ba576ab8d05be945 -fb510d4a35d93c5cf0096c5108c38953f43eaff9fb402edc3f222432380ae99448bcd6db3aba983b -ba8644da88dc2cb33d5203f290cec58abcbd6516197a5e7e41815ea2f4635a6654739752e73b3505 -d3d653151f31d3b3fdd8a9f8dcdfe1bfdc383dad55f4a51a2decaaac2f0acae98bd55ae5f4f8c55a -20696991720da35bf75409376374ed4f491aa856139c277196eb9dbc1c11e3e01a9f9a1a939c9b2e -5a41195bb9da220bc6306fddf6ed05a9d5c5ba4fcc61f133f80ac23516600db318bbd0750423b821 -9fe10f5644af483616c5d9c6880b6c27e1bedac5d431e85ee89aea5f481082bdfb0844156e157625 -22d734f768cb14c6622e97bd286a15fa9ec1ccaaef2698db47e76cd075cce36cf77b1c40a7985f77 -1f3e939be2b53e53b73924378ee0cc29dcad1f7ee74f2d730a84b07c98ead618ecb603b492e061d2 -831d1a68dfbd8b7cbf7d9a7c1620ce6ab6b9dd5cc40c5b728c7862d73d477e3a5264352f52147f9a -42e1fee1de21e6b16b23d69120a5fdd537f86d4c5df916ded97f293e2644147f410b7fcd4fe4f052 -3c087f2e3d1e1a8407c142f2e73318048b6021fe1cbec4b34541461cf9ff9eb82f1e8947e39e5817 -0fc143712fd0855130167ac107f0b5a8d580d091068d0a01075ec29c109e09c7d5c416699fbda814 -2a4b40335143363da209bb841ea19c0e4643f6d29981094169f2f1928379e4f38f33a039e0341eae -3b860afa796bccd57066089ec9658487a7836edd8a36e323af7100e9c265155965e397023c7cd36a -7c0d8ccf6bc24fee5c6450388a10a6d2fed875e88a7382b66c2aade3a1b4544abdd1373ce33fb827 -8cb133f94abb73982478e461be1b49277e99760b16dfeac55ee427f18bb961f81665b7668dfd0ac4 -2cb128dc2f8283c39afad2c821d0c96b21e133be6bfc5739f65e15bf3e3b57925195e59fe5be57d7 -7d4fe0d680e29ca545f6558451edc82a3dbc7976aa4d052a41a9b1f9654c046defe8e12b2608e195 -b88b7c6e9d1771a6b78e93c8ada9411e93a6269f0bb6dcf1a6e019348442e5d35956d330a5650982 -6a7f3e0b9a16ed51551ff86777836e051f5566f8fadc63dd6515d9db3f69ea0b7fdbb846c52d846a -484dd3a8be2294c976732b423cc35106037769b710fce6222d7bba3806a130c4846df67310e1ad34 -b2f7f233dcc4d8c1c2573b248027f316aa7e8b67a61a93f6a87a8eff6ce7f8943887aa12c26b730e -1872b9bd52c03fc933f28867a8b87fde6ec9bec9a7f643f734f86f528fea2bfc37a77bb1ee8dab61 -00b708a20c28bc0a276a2d87e9434fdfde47e3f7f673987c7e1f98a6550e7f722b28b64a7ee6b71d -eafec18e25218ea59a4b37b2844a6a3e8b7301b3a73d3b9079162c4e6a71ae471d3ad7bd4e39d7a3 -e772ae9f85c8a3f4dae58e75b2f6b5b8d60760f23c959f7f92030e152293f25b2cf8de31304aab3c -022152df5bf70bf13dfe9ef42cbdd9b3ce76d2b3f8643c9b7309d762dd0523b7ed83dfa16e5caf3b -94ba1d55ea1c595c366e8d9987bdbdaea3939793eb8a7437ed948acc9462c494e69b1b59592e5ea6 -27fab4af963d84d142b3b3add0e9aca0712d1e0b86490aa7ad7cc269af74e8b495ea3aedd7423054 -7ae3a40392a10d3d5083b8debba1177bfda0d202cab09e6cdd535f35c4239e746ff6540789badc8f -cfd67aed6b71e4231d3af2c14e39f291e772e4333cc5b1378d5d88cbf4697619f64cb43d719a3eec -cd66b761cfe44611c7e9d3ec38eccd8ddb89ebf451b88edcef0f36087e7f8c64a5475eadeb0f80c5 -eae6ab4f38f9b906e2e6abc815f7625d27bc145f2f9fa0cad9c9879270fb47e3798efdaa5abd5fa1 -39fad21570a4b6074cbeb0e80ad49000ecac7e00de258789c1bc35971a12bd39dd37ce5b871d9329 -8edd60d97bb5aded6a27cf2d710ebaceb11ec2e9e546b1aba345aef35ed0bc76e0d25eeb92f9a922 -765c796e7c6a56ef5dfac57367afb59d66aa9bee9c579e18538c740a529cac4cd73b4cb5133d390e -01d93328d0ed2afdbb0518c823385c3f893c0203020dbb9e80864b1d42c32eb5e3f903fe1ac7462a -bbc96cb8124b692953496e6b422a7f963b383775b564e2d2ddb631fae479bffd653fdc1bebfc3a00 -deadde9950582cdab7b7e05774179d763d6b79c461a773dad2ca9f2bb4d7e50c5ab634c72c6a4698 -8e91fd5eef02b7ddeb74f03bdfe75b69dd1ec75d3f3888b807bd6adab76b4dd2b63b886caa5d4fa3 -d3cc9d8a23a775150072a4410a1f531a802600f2678700f29b3a00c2fedc0c217f3e1784e06fe03f -1cfbb39ace5707ee102654c29655e8c3520203cbc8bf2af032e15fb0549ffc8bfc215fd7d7d77af6 -296260e11b9599f1cbd569f3e257ab2a2ad4c139121f671ed7e4cda00b71895c610e6826f5bad5dd -70d45955d99e4cfaed6cedab137fe329b07b2e3627f39ec3c27985d4811c847f991317e23d3bf4a1 -479e9d8ac2bce773f9d00c7e19c73eeca2e679caab1d16c743796355d5856775d204e2a3aa12f497 -eba3f85de2a42a3e5e38057857020312616ca25802d48e1e681f4c3e0a5d4fc0907dbdd83faac186 -dfcc55fa23845631d88f4686082d170e504608764dbe5ac63454d0c50bb7f8466dcc5a9a66138f98 -a311945d925d86cdb60597b5f7266716a20aa67665d1545d3c9562a11ab49cb8edd4ee34db250b36 -58ac121952957057e04e83f01758aff9c4601e7c0183602e2cc79fc2177891c8a82b7c05efe30ff1 -b77838d6c6ba7870f381c13720fc3d54265925d733d390ea9969460aa3f1ad0681ff5e444bb5ccfc -1967f04fa0550a992d5a65a7b7520455b47f883ea13ddf39e9c067f8807229b31727b777ebbcca32 -2db628e441508984bee735c1d18bbb125ebd73ef23b748ed760523ad135c52904efad382916308f5 -3c3eecbebbf110254574979048db768be8afda31a38863aaa84ec81df361a7a3e71a217ab693ddbf -5caf3c26444ee535917e7cef02b02ed040db60ed364d302099c59859b3c68c3df2fda52b470fff78 -65d6913122f3aeb515cbe6cd35583e7fa1c19e830777efd92f6a8eaae71a34fe941e96bd9ee07a04 -e6aa9b9fbc38afd9785e75fdf6250a0dfac172d56713afd2532608114c794940e624e784a240e003 -d420c8de09cec23e6aed2eec3dc161cef56ee52f34fb88b80cc5de139c6662efe550407e46cdecad -d9894ed7be1c37dac3df7e2ee254878e83a56cb62aa7271f7cbc2998021b2894cf580d3f0ec35bcf -5849cd151627bd088b8571e7db2f8abe4473c514b15795c70582bd120cb9fd208da0c8b65701ef37 -f88b6a42864c0e1372cb21b1b52266e14338c9e1d5748b28a66347a29885ad4431f1e251ab68a82f -e7707fd848b18eb95b234a7f3aaa5a1f13bca03fddcac2eb1a3460a100bb2f87c4e9f13fa8db0155 -0da9c720f78806ccfa45132a01389770b183b7bf2dd279e642a7ccf2494af4220cff5358fd9cc98e -dc3d044f7c091e725e00f47649c12b1623c6772fa8f456b952f155a1f22a572bce7c2eb5629376d4 -8a33a56ac59f363ee0d8114f565107cbaba8235aaaa8839faca28e78b28aaa709c1dd25e3bf09236 -dbbd14e7f9bcb1bf9a0d7cc47724b242e3a40b7a247dbe7e87187a4bcdf0d4933543a758cff66a86 -d7cb9a6b8673d6da4e33d34d77ce294b8a2d403a4529ce96a6eb1dbeb36b664042d9ebb633010fa7 -dbbdd83f9fcbbb86c1028ebda3b4eef7931206d622e5094b927a44cbd43c13656a9e83db51f34cec -949ae79ca7d53c13d551f3dc034dca9ad6e4dae86098f41cf2e8eb9537c4f19bdc72c169fb91ed75 -c93029d329a9c7e93bbdd8c7f029df9b0bad89d8bd352fe352c5cefda812559966e9c5da44ae0b5b -c5c453ec7f5cc14ecb99f2b3f475f7409b905f880fb9498f53cd4ca3cdfbe07fa14f31638fc73006 -94ed6aadd3549017f2217fdc9057b0fb9eb7ff6d287cf53c958187fd3200de42e7d0a9a26d079802 -da7cde1ce37968309a71cb0dfa32d083cad8ae85bfa482e2c94ddc2248c40527919f862554e676ad -6e8fcd202a89ef92a4011f9e81900c38754613bc1b7b727ba84294e014bb9c49ba857f1f9644c554 -26261621a6121fa1903e42cbfc988df06d12bd2c8c24f1150cffedb75c140583e19816f6a4914590 -b75f806f404090650079d9f8e69711ef42db6262ca4298a47e3449c50fe3c170580bbfb391ca09ca -708ab162f0661ae97b7918f9931feb95441b867a450b3f66472be093505058d3e0fe204ae0a0af08 -469bc6c342b569eb3f5b0bd48c1fa3d4785f94dc39eed3b85ce907f0a84a23ac27df40e18246f2b2 -90bfdfe3c09c5f09f39b566ab5083fc15f708e8319c7f1406af79d7939b371772d5c38033653d384 -b9ca193360206530f8a0d561e8ae0585c7f166f2c6de2859038c7b1ea26019ff269ecfbfa1358bc2 -4bf1ffb460033ecbe161701646c141188a0f93cfd9c5779dc9c1578fcd1646e2ee7f6fc573f877f0 -c8b1694b7fdbad25a5f31a7cfe03a51a627c28bece1d6f0a9d410c7105ee0e5d1b4db66bc094467d -0e92a953a8d433d94ee21ce110b99cc9a0bc60b456d35d0adc9a4cb17fd320ad469aaa0113adf5d4 -bad156ae9826f7f40a052be091fc23b31eb4a7b9842775e543c98752dd1a4757973b154144995b51 -0f94ce9fcbecc55a421964720e339d8dc52ef6b6ebddad912dda10ed90ee90ee998db63317ab761d -dd5f6c3b2d57f7c07c2efd585c61780cc3c657a6e72695f5c94739e24cab4ceb5873b48219327fe1 -b70b0d53eeadd45df92bc75a5e37308d5fdcc718ad73b5b6b4b17433464bd1328949ae45ae45b16b -393a89ca724b2fe62c4d5b17ef46dece3e33cb23a7cf765492905f5c501c5f866ad1019732b342b3 -22a384e5681532f3dee0b4c1c9c1da519f302f6faf5c68d809bb776ba09b90784df33f044777a7e5 -446c43ccdd439fe1211681b6fefaa2eff798c62d450668ad8b99998181ed4c348bc16f5c1bf1d7f9 -5365a70b75cbaea503256dff5c88ff059fe3814696be8ef375a1ba6928e78475dcf4d72eb0b73073 -3447cc22f3aaabf0d6f15faf16e4b95ae688420310da22c824e9084da7e35b4950df3fef49a2d609 -58ee45008c3d7efee8c153edc71509c546b613d88e772ab065b60e6c3181697e319bc282a203d70e -ee6c47eaeb5a0081bd204575d5e4652ca4c1ab486057c1685fd3cd18c74f574e37a437419af3bfd8 -fbe0c6a7296dca6f2de15d76e81f22e28d3df962f566a214ac7ee7a19753f0c9e0ffa7ce85b45942 -b0fbd0c5a4d68b08fe5bddee2682bfab55af22f86ff52bdc45f077b5ea6504600257d5b9192da5bf -7b0f0612d275bf7355f22aa1e2f7744a41681201e21fa1bb49915932afaf204b1f9d8f2774a9c813 -f2ddb8480aa85b3f3ee890d23880b9d6b350abb6c42ac9f3696695e199ea9f15603a8c60b2167bd2 -3324222238ba4f47671cbe4181dead8b97d76b5ed2c99c1f5f2d1f737cbcc21de84f84d2d69e52d8 -542ea87c42aa611958de95ad28995fcd8f4de49c68f66b92a152bfa29b59a5e599d9b12568073a6e -5a3737cf304d6feb38c47c07d328744e127b3944a8db2eab6e2aa0d8add52d9aeeab6934cafd6bcb -efc4ebdcbcac83cd82230a5610a397545b6cb4b658bdcf7d9708b8e0527027fecf909f8634b06cf2 -a7c987cbf54261d65e0e62e8d4cdb1c149025d3db8ec33113ba4badf6c03dcc7d6373c53b75be387 -6ee55052feb314c0797fc01cae5d05fba9800196df2c5d6168bc70e32c340acdc89978c6d959bbee -9b86150254a35f4a0e1dabda9f7303dd41f086f19da98767ef1b953b9a5088653ecb5dc57ee24dde -c4035da3fd921947ca1b3b6aa55289c724597979a5a57b93f72310a19f7197703c8e79b1d2eeff9c -c50e77f9b75505ea50b71ad85b743319bed8b62ea907fcf1d797f0b650475853ca7d8e0c4f9b5e36 -f7d04e9f9842e8d668f2d4169f07e627f8d7e422bd6811fbe8507449e5d5ded003337b3063bcc1df -c342d7d5471c28481a6c421e510c7b273044cb85dc1b0372d7d947d033b1b0bca1cfc923cbbfc15a -639d678816991ea0d83f7f3e366f00d6fcdc7aa17440053dca930dcb81866c8bd603ff5a61b6f864 -22c7de7fea7ca115d208dd620a540aa6d93b6b2dc51bd6f56e19a7db18271bbad371708d4f49dc9a -9890288a8a0c090915844fe391449c0f4645202a768deb01c3eb61c4ed5e6c1968f664ad612405ef -91f87beffe805cdc43b4fe20b527a0ea846e1caea503f07b5a09145b762e522239d4e700be4aa125 -1bdd0c37313000ecb89fced98e11b12693a66d986a1f9492a2ab288f4b3b2d346e3f382ffc7df355 -94c85d1b87aa59c3e2639184ffb8582ce971a41e96d4f7622f42233f94c3279476a46ca7d99da832 -3aba32949134b98ae93d01312e02610f55f66af256d7851d4ab83f74496b8dfa55202a23a85fffcc -49725b24dffb3490336cbdb88464c97dd44b92b1fbdfe24e09c4fe83faa1873c7eb31d2afa32d7a5 -359ac81c567ee8cd5fab7d31c558437aad85d80ead6394bb716a7ae6b69450d113eb3f1f9b491fc7 -ae7248110e79a0561e06abe451d05ddd20d87aa1c9345c0bd3da5998c256295b99b21e6ab109ad2a -f8b9b78a7d8f172876b4904bfe042ef23d81eac536c13138c9850ccb1959b5e8c0ac53f29660a675 -4bf0f7459f233c13e1aeb897079ec3600d584c7562af0bcd0f834bdc2e94d15e43f1066943f10625 -0dc5d9b21d73861ed09dcf4ed4f8e9a166e324a11e17d8b22234d4c3d908b3b84a9b848f6cbbfd28 -b6ed92d06dc292d00ce7fdb8377c8641db6c96abb935629cfc24b129ae69c61badc42bd716daedbd -5b9c0f6fed15c177fc17bb6fc685085b3fff39d1154af852a5a9d82ad9698f7ce1ce4a30e1e0aefa -0b778a69a885fd5af89afa3b77d6d2af76f7244e6ab45639f563610f8160d0adb18b22b80e8f93c5 -9511b77791c8b291ff0a3ee6a44155970455b65c1e564d5ce913014b97898452b02c9a8a69766373 -1416e1d0bbd2d0aa88ab22a84ae1d822e5f149119df0dae6e844ee12e8c1f4ebb0f4f52fb1248103 -76d440949c740e823aee019e4729619da0ff9f9abe10a506f5acc1519f50cadbf76b85e67dcf97d3 -bcefa9b279df5368de478de795288db419d4dff3b206f5a7ab3da8dfd848b0a54b39e8491f8ad47b -7938cfed2c3a904ef0aebe6efa1811666934d9d373bcafcc2dc7877b4609a0d183061a6b5ec4a2b9 -8b6ccdd7e842b83a4fab6993b2c7ddad718c02e1885969803b611417e349f882af69f086bada402d -bc8c5c84bbfb787f19724d1036ca5d63f8a902273bb335ea7c8490c55dc4d9d41768d47ae3d5ebad -dd4d0461b944a3bcf5f9b6391e27dcf16a1ca66d6dbed1cb7813c3ebf327381c447fbed92c6c4586 -69a2e30eb487f9f54019bc571ae56343a8ab2d4a3cb383efb7e354a220e268fe00cc7fd18493b739 -6484d67db645560818e4bfa9106d67a0174cda01fa6084a794604e847604e7de0b9051f5df4383d6 -a1d50c49eca6186323ac0f938ca0976847d761f8bd22180963e0fd82eba2074dfd38be1f7d1dde37 -c763f048fc9ee930a1ce29f0c69266d43f04a24201f7afa981fb0d72dcbff62cb8dfa01cf76ffedd -b5733b04080816f31f4bf16f32413f27b853cce1c9709d5202518440938728073482c3b0944a300f -fc1c21a6944208dd8d2b60d89da02fa13a003a590caa3df44aa3d01af85bbd6adf2b8c55e31e73ca -82b4906efe95d78d1fdf12a164f1894481b6d1e9e9d8248404457412ab884e2f6d37fb8b2c57402c -24b6732ed8268adcab91e636ae2f2784a88c20248034f56fac9197bc1a8722091867c1c7c737487a -409e3451b5ee09ee12aa6521dd503a01856d89b7f9031b6883aeb07f2e60b35591de0f7e7f8c9230 -ec9d848a78e89593e1b73eb74f4a4a7446895d9ce91cb19e9e58e4a6bf6ec96ac478432f0a154a62 -4b3713e69814ac25c1ee623a29a83450e286cc74702f6f7a355ab7d7ad82bc558d585c33a78fa99d -abf1fa148f945cbf0c9421ca41f1b85785f328b1df00bd8956a60181ab88a9802efd0718c4678505 -24201d3c94466662b735811b83b4a50543fee4a50d893d6e931b7caaf163fe3e17bc7765f42ab418 -cd7735c3daf6c3664e9b88180b984fb1c5ea6f17b3caa36b5082f18e19f021dea00da312a925c10e -bedf01350c3ed1b629b74f370ecb8fd8772ce936c39e3a1c1b9d109725313fda2709a5c70615304d -0c7451553baa26d7fc4091f09ee24b1bbb7221e4196ea05c863a88b11662d862dcd8c17658de8166 -4f4977cbcafaf3921bdf48ecc12637ce125209ef9654c2d3d9da146b615d6da38373aedb95b54d24 -f609894482f8772c020d3c5c1b0fc57a5f7de41fb03480649a6e89f4fc2dce1128154924e9c5bbe0 -2d18a8fd1bee9bbf3cc11c89755843e4ecea651ec4b0c901c83348ba758d84b2c561e2ad8607f022 -c8d486fe30f3d8a5a46869def15d9ba7c4d793a754611db76ab1a12bd636d3b51fb6eca53da3d2d6 -cf482c3ca3b4940ca1d02cc4c5cc6628055d10812e81d36bcf05a755edc0e93519f5cfc1a99d897e -8d2bbd0f2e93888b6066114c8feb8160c1eaedd0bf1ec6fdd68b8df3e4fdf8c55cd347624a11fd7a -d3b39cff6d6aeb931164abcb26786e08f2d9e8d0dba2d03bb7e674354cd565f53d6111f46f5593a2 -d9319ee49e5f4255b1c5a9452949db511ecaf14e734a744a5c9fb820dc6eb3e366e2d0fa9765303e -0b5b7257d196c078bfdd2e8966c81459b938ae7771741307cc40cc86e0c41469f91e1dcb539c7dec -a9d5002d02b21a9d1a0f980709cfd5a9b8c0bb10c617837ea60618083d5d6f2ff97ea17d8a534672 -42425684282c656b71587611d2a9479523a330cde09126308ac25d56cc1eabb7aca4d25ad7c63947 -af72d905a4037daf3c847fc3bf46fe85b545dd1e4f817d6074139674e30da4b53e0df8b25e931f2d -3c839e94aca229ef7aaac6849dcc720f7e32adba5e4d1f22113372129320840839317b41a1e8c87f -753a655af2ae4a4222bedaa9c91f4de1a6abb3e13549d8f0ca473f9b7728f78d6ef03faf02589d0e -93939cb27a80d3d959577bb1e7604a1a37139914ba9cb2f7d7de3a3b658a34dc6a979d3e7d7979ba -498488bdb83d2223bfb6f78d6f0bc6ae7708f071d0f5f4f70af443012810f94430ecf5c0cd5a9ee4 -b17ca025a1d88bb76272b24ff4d9556ab168bc9ec74a91c9866d147bee70f99a691316d81b0b2419 -4681d109f26c1bdd6555993d87341a2d9e28caf8ba3baec65fa82ecae40454e381ad8a324ec85f12 -141b98e291aa1fcc6cd8205eb9b6cc6eefdd92ea862a11180b75990ca12e83fdc1512dee1789fb17 -40d744fe8d7d305d9666f90043f22c623a35d4b3e64c604a2756efaadb7fd2494f1727d168bc8f85 -ab557b56b0c7be1cba365cfd4b0439f42ff8adece1d3f5cd0dcd75a59cd9a99cbf2bad1c16119077 -e2037b12929239464a527c60ad2cdbd3e1bfa251fdd6e84ba132fa7bde2f468af061b888f757fa9d -7902a797678d84c02c909ed9f17785e33ad8580d73c86719348e17566dc43a518ab2e332e1cc6d90 -e2cc8d61f383cd220a56f4697de4b607962358c58033cc11cedb2c955375d6404ed685f2c76230ba -0ccbbb352e4602284f2f861971b2bc448ac855bcab30fb63d20cc89f923c85519661282ff4431f98 -8cffd50a9cdd5f2c36eb0a9c94af1778c7dd071007742f369eaf146e5cb11355df721834d1dd7dd4 -26813b5ac24df2f967928b0b8af2927e4015a8dce7ac51c9ec7d8b2423d152f4bd8f870f0313e9a7 -f7dbe3dff1c75c4244fe96045483b2bd333df7db654e44b3909ee3b435f616ceab7dc8352d778bcc -135a6153c1e807c1ef06135ebaa218664a348ed4f3ec2f9afc487e0af74b01fe00bf33c262f2942f -cde10378e77aded93322ac477ed750dcf3c2e7d09d40428f2bd236ddf1bfe1f7f13b9347e2ee9ea2 -19c0b4931d2abdebf4eb1e8d9655d68cae13d32251417a20f0c4b10838d4f662f778f2953d77c238 -ad179d40fca8ac0635c5cd4d9641908f35a38443c1f68f13f20a8a73c8c34c93add5251e6154af09 -23e0430ec46a98ff9230ef18b41b8cc0411baf69e7bcacf5bbd4056e364436c251318c84f92740ff -49420d2b08e120fcf869cb648b9ffc4ddb726bf694c0aecff60ee3ff50d52e351f25826539df455a -a62e14f6c2f3e33960956e74ef4163faf678101dda975950aa8ba7746219bc39bdd274fe86458819 -b9e6c48f8481d0cd213be18166e308fe34272c5f1de52123c6e4f2278592d440f6766762627e1048 -b43e8dd7376dc6aefc662d61a7ee55ff180f61f9f6674a83f1001ab6109a1a4bd8c94ef22cfbd4e4 -d56840d77a9843884e1fa8e6f0721a4df3729fef279bc2d7dbea17814e31a04f3f32aaf9669e91dd -dc15bac0005d431ca637ed1f62eeb1c167a1ab8eadb018784b70080a454c59848fa1c81677d583ae -4dbd499aeae73ddf87bc99a5849e2fd4e1c89bf9d13b76e5c46f43cc9e74d3a9c4a8fe9666d23b4a -21ba58065cfe0fbe11a0ab309a209713ad0cb78c5be3d64e01b79c4b2db3ad326da367c6ed8d49de -9a96ccb085e92992e2edbda1eb5707f044ddd1f827ee1edae55f2466586382566b66f52668b5b62d -5ac1f6aee04cb32392c32325bae514d075fa5f8d5bbcea0b453251225f717d0c44ff802dd783fe3b -b95385b6001407d3854c432ce971e1328cab176615cb6029b77b2cb56ccbd2e9baae6012474fdf52 -b547049b69f60ada9b145b16c24868f61e9e4f8d43669e26f6a60e1b57210b64156947a294d356a7 -fdbe98c1fdb42dd70507902cde15bad3c435c5dc6814b0d925cc20dea91015a19cf8e48cf8e458c9 -96e388490f727290f7005596ff5a031f0873ff42056e2bbf8cbb876f504a8fe2a0162f517a4877ef -5ecd67bb9479d60a5cabfceb9fd1b05c8f83fd5fe05aaa5be332d929c7bcc373f2f86e7536593dd0 -0d58510f4b6ef4629778c2097e26679c101cba9600eb7b5fe3aeb89f884df3c43d6a87fe7aa030b3 -a25c57b8aae6d30ff2034f1c7f6c911d7f5c951d7fccbdfdd942bbf57aab4450dd72fee14ab7394f -99da15d905b87bf930ec004f2707770fcb3e96c865ebc6248b6cc76382b2ed9b653f5c3f1cb56eba -6e7d30c7f6f1cc292adaf5c336e9c9c9da09930d4ca42727328c2e3df4aa503a024ad4ed6124e4e4 -7aebf9c2f88742ded83c5c68d9d170617cabe1c207f91c6b991b15b1fdc6b10e260a8f36562a3d87 -fcb2554f157940980b87713f431710a1fd68af63e99a4e6ae776dc28bb7497e595803f18d85f4e75 -7b6cd88a4d3b0bff0995d5c9e51c76e6fda9765872a582253f9ed07cb6c24f55c6a95931e1db4e74 -101f42beb9e59200182ddf945279d9917a4bfd1b73b058fdfa77fb3ed94ea45b4cbf4ec9cc132af4 -6455aa9df3a1adaaa9e7eb8576ab493ccb3d55fd3ceb11b2092d61f03602089b364df6207ee32ea1 -db565c33b6c4dbc07b4f945c2d3b28b9baeb9b0b25576b6a2b44a92a38e6abe047ccd3fc28a2237e -d48d1fd1d2ef2414f4dee387725be03d2d67ca7b92583c575ac14c68a94c296f6c3a25343611eebb -148c7e1272009327ec8e0f6b34503e148a33f05f2fdd22a59a4484cf426e4f5821a12c11e1bce5f8 -7d58aa7d0dde4ecccc89cb0bd691e0afc4744ee0563fe4863c3c1c3658fafb7938bb6f744bd2b6d9 -e15c8062506c4c784e3041c435e2483a07c5b9e71afc4a2222a6f068abd55ebeeb36e988e113096d -e3111a13162e8949125d86ee3fe3be5bfc36fb213f1de4ec1bb02e9079e5ca1fdfab52fef87fe211 -ffb8a9f57fb8a0b19044a16b79dd1eaf56127a1a133b57cb692fb6906f39b75fe6a96c55e6797dd1 -40f1d9d76a5ec7a7e32f61a2620b8fbc2a71485890f39a7465de22745d1dfa361c95f367a425b951 -d5b09a98cc4ef83709320efa010e5f07f9e0b5dae954fceddc1f891131102c049cbca76c695c330e -3715b46d9eb7c35d371a3227677208190724edce3e99700f3d12fa62636175939502d49fd85a64cb -9f86499cb2bd44bc95b255448201163fbdda085fe677a88aac3bb155017cdf2a579e4548f523de90 -9b878cec56cc659ec8877d17ba3c6b3e2c93b8fb4b9d2afd41a14a0f47e85f0df64d249cdf4fd143 -5127eba1d8c93b4ab8655bdce385c04042f39198f83d5b64acbdd23fda032d6758277c1d4f8613ca -be87a5ddcbcb3d3c043d32a1c9e217ea342a182e3bd59047aa7b35af2a5635717cadc25f7c84d332 -192b814fabe01df2abe6c32d591b366bd94e23b6417323f6bb2da94f6f9acd6f394b130ed2900323 -3d49fb5138498345cdf21ca0fb835c9f231bb6714178edafc3a08750966c510f1839dbe2d3d5a2f0 -bd210f6b6af2f3cbd36a8399bdd45f286e474a25634f79b8382023c47c4639a2e9e275162346db61 -8d203c9081b5d05fa5e8401b69bc4e1db1756b5c2e0d8da74bc17187e0b35e7f802b680a8dfbd243 -a8084171d86ba28fe007d610dfd2f45b216dfa3da368fa5d8f5c82d6073230825674fe367d4bcbce -1cc85b69a409a70e7d6070d32e0ef25bb5f0cefd4cc49af49bbd40d1c24b026311d079607d4a633b -b9871517cab28f9224abcc3a7b418271f8bacd73185c4745ccdc6a9d6e9163bacb712fda83762794 -14ecde9e79065d654077f20d4c0f9a300f7731d2854b7810e739cedc640e9a83ecb2dc6fcab219d9 -698194540a1dafdf377ec6fdfd6df3618172c6c85ee4c3a0b6c9bf1dce485ca0f95ca055c0947dc0 -829e2d0998ac16773e4c16ed2ef96ff54023897f35f9e35a3e4cd9f79aa6b63ef020fe9547955a05 -e02f10626a2984026168518614ecd0a93c05e665409775d23af16410f5620d9e01fae25ba0cf4001 -7d4b205a51426207a92c22adb33195169106b7ce0a8af96e42ccfa9f1a6900bcd972328ae360b6ea -fd1e2f68e4fe125faaaac83bd30dbae12ef2591a48161e2c7f89dfc335d7ee4a9de8ab326c6a5a43 -aff4705cefe61791eeabeb55e81ab71e31b60ef6b646dbad0e4097bab3f09ea8c97222c73aa9efa2 -bc4f73317d328928c3219c035a599966201d34bcde6227da890e2665e63023d528cd281ec73bb48b -fdcaf56b83cd82d7640597c9a7117e53641a8b6a418b00789d6ce99683b030302e2537216b47a1e8 -d2b1c47204dd1888a55f18b64fb8320ac616646f09cfd735b371b54596d2c3861df9a9d52542870b -1882d1192149a4e4f7a510feaad7e4170816c6e19f706ff8490b8f556a6ac35aeec3399ac051d7cd -7e21be213e3a61ce613e61280c85c7488ae1135e431befebe0e611d43744f27e8c61c2c413793a23 -afcdbb45b20a09b910650dd8c6b08602ee46f2fd8bb3f2466e15b1238e6cdd9778a9778d59059ea8 -6b8cc55c15c51a5fab369efffd2a8781864149292298d21574697684242c4ca29b415d43059641cb -828c2c4dc7a0e6a9d23d2d82728f0e35ee55af4397bd873ffb7b41a7b5e7ba35de55448bcd893d64 -0bb8ee116fa86aecde99a0d334038fe05a850a4150e4826f84970cf15a028e7bc701079febfa4440 -698e2604832a5122a494c21e21e9935dad50c95e0ee55c46607c50867c1bd8a1bca23a741ced702b -b1cd5e533e3ceb0b926e5dc1f11d6c14e31dbbb2f732c3c333a1cf618336dbc27820e1def4141834 -377628a868a100c995cf00c9575a20b95201c9b79af43b55d59fe775160617c377d91a9007965c31 -9e4a073dda77ee2a2a42319e5b4dc21cb465ed938c9aed93cd92a763d0dc3af73b8c028ecf356840 -7083e6f383f2cec6fe4a7add15667f484a76d21b1bd5484af0a2bf833bc389e6b462c9fd85ff8492 -6bef62ae1d167c9d3ce576f971a5821f370e91d0aa99b6184b8b60d2e9be16110221f5844f40045d -5fbb0c41539fa6bf3b65735b5a1de5c36ce9194318d7c94688d9ad1a213a0c649fd2ff70f5206c0f -91aa28cdb3d2a647f439245926ef27d341e8873ce951f813604dec1856f2ba1c0c6b077c85c28b02 -7ec52ae097f90e5f7892cab742ded7a522d2edf17402f9874ac0516830e53f17463ee0b2f474f88a -9c5fccf7a02722ab93f6b718f60e689b19c62deeb3cada557f7d9a43d2517101ca12c5a168e7d8d9 -49434b67e6fb18fbd96fb059350c7fa2fd1da61cc2970847ada368f81036ec381e58528374a2b115 -852679c8b282d6fda8d1740d0a54a31f35f67074421cca4262f3a38811fa515b7a6145f6c3ac845e -580fa117f6a2826b0a2b99c1f1c205982e7dce245b52941365321b8a92e2e30e4b8affe95449f1f1 -73951477f37d3ba19471afa6f35ad2ff86184563bb9e32f8aeeb791265ca4a136ce526982c83629d -f6a1b85d50570feea5c719ab60fe19a129e5c5092d13affe038cae09bda702cd303a25740a495031 -ffb6b4d6c156c107d24efed9c59c18f96c89cd8d4cce3e83ce3330093ec03be9591e8e4b75f1bbb0 -9243b3ec67b85bb8acb1f2591db409cfd7165a56b36f9e25bebc9afa0165cbeed426984fee538870 -9f525b0faa8b5a2664e4828042d4ef4fa2fe336b02e2ef952ed1e6375df3fd53f86d9b47dc6ed6bc -14595e4fd8a9281ee9e4fb12db133eb3cabe41faf8a41b295edd3e0a58f18baab1d0fbe472f64017 -61d362a2a0af4fb55e93dcb45ed98a65fed796bdca608557ab15c515a97c6b2d9f7ce82295f2c902 -d156a998cfdfed8bf9e00ec47cfe7e95623eb823319fbefc27dcf4752be7a0b9ccb2c2b53b0bd352 -0bf2ec134dfd7c8382fc747d03110a428c8f5f58447e56514db1e809a3e0c7f6148aacca1ea60bdd -796b51bfb42bc8b111be98d54a8e4daa217a42a6211ad58ed4da8967975a9369889e504743140f6c -faa5537cf137d93d45d74f49efea05c276c34be32e441e42d93a294e09f6764ecef6ae924fe387ea -1e287fd94ed80d72a5d99be459fdece27f07756ebef1aafd9fb26021db55255b2773b8de5ff8db55 -5865e7f9e42e3bcf8e97d979aabdb2caa57124c7c6a9b91a869f8747d7362804316071edb38f1c33 -c992cde1a9bac656e2f5f2e5edb2528facafd441e82b8d4bcd8849d9512eaa3d98921757ce2891cf -801bf02e2ee8ec3c293136415aeed52d1aea0dd14a870487934469166812533b0b9a9a70188e3cbd -8f1a97c1f14e1ba160c5421bb1843ff2a0c7c55a3de939fc347e051710d2d10ed15e347b5fa50250 -717e7e89285f42b177845584677b2fe52f71b6f6f6363629f659d9a929d959f6a9d6c27dbe644188 -ba201570d197fc63b982afdeacf9a72e1dc5b670a3e5e4550a0232a88f0351f2ab61000bff9ed529 -63fec734e912be069ac243deb4092c1f4a7b7960a12fbc25f0a957b95077a5aa85ba2a1b5720d76b -2f98d440d73c8d13f59aa7e120375def04ee438dcc313c585992b6375fd73dca71838b804c26e2cc -232278fbaf9a8fa0ebfdbcfec0d05b8342085bf0f6f3f6f5325e64a8ef1ae0e9ebe78bfcd1a6e0c0 -9040a69a12521c09fcf1bbc6997acd70be37171b12191c8d9874a9f385d06899afeff7420b8caf84 -9e16e22241fb1970a0f3caf6648645fa7b45e9c6b945f9c520264d129f95ef98646e646d3f65b9e8 -17da7ff3620753f7794e3ad0e3be4a495101b45b5a4fe85a9b277c8ffd4da9f73d9fef85ac0b13c7 -898dad5c6de5f8fe0496d88be333b2e252d24245dbc3a3c2887fb27f76dca2a2b0a57b35af60d36b -d3fbfc61392008d6c1bf9d076f1202bebf5e13a6f38bb9f5c0501d3c785cd3befd6cbb9f6742ef2d -c9a942156a1172b9090991eb2559d14948562ed0fec2f2d852150b83547ae7e339e2fff44bf6da03 -543e58e64357d05c9fd80346964341f9f57330e85c2f76f4f546f2063bf7e09d141b77bd89e5790e -8f77a2da4e259e26901d681ae012e0eae3e3817c917ba8f356d748f11677c4d8d83bd958a659ef4b -4f0d8b4e1625474b1223332333432b84dec19334bbe23ad435e568c5f31e14da159c1d1a131a1319 -168dc251b47f9c679cb724201631b9c929597956d9cbcd6dbc9d1d458eceeef6fe36feb681fae83b -061bd150081bb821b3e78f185337affee6f1a3f597e7ee1b21f25ec755e4eb4d58b8c172c506a7e8 -140f916bb67729dac6ecccca2e939ef04bf801791ad788c9cd7dc8f1abe90309b925c9b15ed609ba -71eba3bde211939a98905ab42a63eeecc5b62bd68bd6aff2310d1ac32cb1d88b4f506892a7c76421 -f2c448e8d1219e51e83c614cb996161048e2b28ce76609562db5e80862d1fd9fd7a2693cecefb99d -8960704316685f1e365efcbb7363103263bf59f322cc1d7f0ce39a0104a691bbac4738987fc83c7b -63f779ce3aae7468b064b324782bd2498d7431143575573b017cc09338dfa34d636c37c5126a0b5f -f28085507cc917de91066019fe2b62f0f05a63829b5764b8c95e6e46cedf3a44ce2b2a91f363dac5 -decf15392a1f128b4b4d4bc8c9481125c5c786e5840b15a403bef7a59729a75aa36335ced7c78248 -339c645d849b92dbc2e46f75d7173539b6d3233a8b86be786e48c0e64d9b37856cd289f00af143fe -8cb7b79f87ae9318ac859e51cb44a32afc052cd6cece3c73fcf0aeec081dc996d8cdc46d2224d8d0 -8dda16141580dc908fb79b9b07798addb4f95184441b7b58fbcc77d5b1f2d102834e66737d89bf9e -7840083d30e4694f166ca703bedd66a5f752707c9a4bc316bce18518cdd2c66f9531f597bed987d7 -501a56ee9190da3b0bba90908a6ec0c6fa22f2ece19e170703f66ac5d1ce41816813624c7d8875f2 -47893febbb98797d2f8cc444048721920a15477aad16e121b4719e6dd41ac4607a30d6c21fe3f7cf -0f87376a4b92761788bea741a32bf2f5f5f0f274deb8c1cb1a31a316fd08dd41abf2870bd595068b -4530e07ee74a624ff5367ff3427b9b37fc3c3e9561efc4feb0053e48ca8876c8ed93425297e094e0 -7c9b64533407d97b397cea65be6486acbf59ba6e3e9b707fcd673135bc04fa116caa13b21d5931f7 -3956bb600b7e8b5aab008f3468c0c0972254365a994e9900e782919d2890999826dce1d338fc864a -a3d9b24989050ebd50f02dbcdd9e197ae077cc6978a7691ca7cadc5a2ffe5154ece26515bb41ed54 -ece23b55b19bf574c52e5ead8add5ba0a7f2f1edf56d20814430b8672d8bddfc51d50704cb9b6a4a -6a6e497b6a84697a771801d61dccb457c0544ebf645fcd226ae7e6b23a99ce54dd66c395a2057afb -f15a8aad6ae9c35163965e7a76aaa47564257f8b6beef958e76be3e6a03be2fa5ae3eb236c5c8cbd -f591ce46e4166cbf99b904f59c1a2d24309396f5a11c46bbc34a24b7876a6f2b197b79774166353a -a0d3a61f45c9665d1806375b141157f8ac115bea0efa6dadf1fdfeceae0ede1b908ea08f281a099b -b926b3e6e143653b770b51fed6ec04e9870fbf59be2bf314baacd3a2c1a87bb1bd1944d9a8f55b35 -3045314d741156f03739f68e9261eb8b4f0c5b7f3c5bef30ce542666042530a0060fa0a57345b0be -06ba2b4ec32f261062da7cf03467b95e25fe50694de5cb4b35e36802c9dd5bf712b21703e03d6260 -a7b17501cc4ae47bee3b08ff3696cfd45792b7bf2bbd7ac5b5b30f5bae5e76ed14fb4b4b4f8e521d -26f0a10b4bd213f720780b9dc49f04e19e41d870a181dd4a550a1a5f9f073df80a068c8669f8d360 -d1746465b76491d04c039384d33dbd6e8daee80abfbf48231b28fe73a034d3e10b2e0c7fa105e994 -170c589eb02ed7a55cc765a77725aa46e713ebb6edde5651997a10ed4315f6db576e5f193f0b8d40 -98331e3fd2d61d0fd0263f15065f68d95141a662d33904f77a53a165f05ed185df11f4d141d76c4f -ccab9e57fd6dd66034088db399b760de42ab69682c9a9c3cb7cca0cc60b7759557b0a136ee452d42 -0ee99b7633cde231f2f140e357238fa76ae3ebcbd569ce8715aa3e3bb2b9557381b4db650c072bd5 -ef76c9a16181d0f9344ffd86171f3a8e7c888a2b923581ec2905bae68f162873879504a35a6b2937 -0b298b78c7ae4f35878c6266ea1d6b7a57c051e5ed794f88402bfac1df3c59338deed668e8550313 -76c3e53fb793a83fa3a1a14113c21acf29e9555cfe74af62d3274dfdb8cb409d29fb0bdd41670c2b -bece5918b52c6408d3b4858af92cde70bb7ea5de05cb1be82aba9479b8ea525df95fd27ed4352494 -bd8fe7e321f8dd61f8ebef74f93cbc9173c6ff5ab86800ea8fd6ee70809ef27d29cdf20dc29ce16f -3d1f2652ea6a31cc39f1a34885d60368b6883d8c95cb9dfae031d20198cc6dc2008c7067fe84cbbb -61428d46633f08e1c6626a8ae14768309a52a67fc3aad673cfa69f197e0be57ecfa56c75c5f29a6f -73bf46a3d138dbd94bc7cd59f511c2dd18bc06dec2efc37c1802efde82af4fe936e5c1462e01fe55 -bbef0f741f6d334ac13da5e163a90496d7f05d241ab0a45e931f028d5cf6c9b0f09c10624d22319d -b749e2859c9057a05780d7401cadfd0944fac56e8a45913a28212abc5078d552315d1218eeb5abdf -43bc591b6be98116ee412989f5c001558329badbe32024c02c7cd5dc712fc5d906fe31ff1e071368 -f69ae2c6fdfd6d0730417ea8dd0efc178aba4ff2fa8bfc905aae73745c99e661a7f2806cea104a37 -93f75f749765043a2d23600d1a575ee376f1eb3049ed55c1d2d9b95d0d4203e35172c9475fedf85c -7f98a1ee1ef4e6a993d2068daadffff84313baf377b9f50ee485490e595929e4850e3274b2b3235f -4b71c8c84a235fb3235fc305f8f88b9e53514c1b9328329cf82addb3a10399da8f68177bab96eefd -3f94bd6664f37040b9301c30501e6236e1eed2d69ff4c2438879f93b0e9ad5290df974e91ce95a29 -c3f285cf1687b945181ed011f4225bc94526626f27fa59f52bb5d864998425f30c1296246aad2460 -e0b10fbac877794cae878552fc1a0b0e1cf413f04bd10f65dad1e28e06b80e93db5901d295deb12b -3caa0c5d4731ff0e1e138cbfb259b6d14e15787d788cdca1bef08611b09fcc71709ca72f6aa37d5a -5023507147be0b07f385a62df545340b70ef1a7239892e7136a9261dab9d5e7c52edb48ddaaacbcc -357acbed18e8a18745f46bd971807f7c66350759ed77cf8bdc0b3cb5137b815bb7b11e6ae801871b -821e0435f4622fb7dfccfadbffa366d6cbcdcdac78130ce3d8634aefcb6165314510de3b2608efbd -2ae2248362fecb5a0e7f0c16eac83d586f77297c41720fe207b4322ef0dadaabf97e04128fc07b26 -8a9cbc0efe27d090fb141bd3110466c3f53f69b6ae95ec695bb29552235458d6f3df71ec15f57953 -380a0f8e0862b056cd311adec053b49eaea2de5349dbfc1ceccd6d1d98eb7a7d1da0172d676eaf5b -0610db3febf1a8c0baa0b806f28b343ac9b5c0ac89e202f53ce63baf789a61e99759dcf67fc0f0e3 -6ab8a6b154e8ed8c6b253b643c4b46d02a57e67c13fa6f72dfcca4e515216e26359b89346cde85d1 -57b81711eb601ebc49b30f9bed4828ebe0ff51ec2fed19207b5730c1cade6d14cf05549dd010511f -4150b5be93bae77f7446f7bc5ea5eef91fcfaf7b1ec7ffac3ecf157a3f4a0ffd53fbae8ef23a6a2d -177db92cf5b1be748afb9c6c1efe01ffc9036155345fcef1e7da882fb3066db475d97cc59c7b4d53 -04d532b56dc03fa45a98ae0f8ce94031857e79eb0ea4ac2605fafda0010f6f6be64010e78607fe85 -bb3c255350e987d689a65aad3dac864c81de92491fff32d7d4c66cc2a6790cac8139aae717a44cd5 -a1a648a1007f47c6543fb852f30dcd5e142a026dc8ea546682def9a677a9e714e6bfa392aaca1703 -b452f324f070eb810f617e3ee4121b5f89a867292fe2d8474a99d09f4a8fb3b260660d7c97a5a19a -97424f1cc321f234a64e085e8b4cd21c4b9df3ddb7fb9633105ac3e1a8644a782c676ba6f48dd5ed -f6b8a4f5f4d40ce1e93c0e4ee29604af0b9d735f7653dda437f5402bb247ee29527a4fa7350bf95f -549283e0f91684bb4e6b1ec49a2f7057b4d22378499079ba5b123a8a24055948c15f0f48f9ab7bbb -fc3542e0af7978f59376922ad8c96ac14e221576528f6a65aed86a71e7b024a7bcdd0d3dae9307ae -2fdbded930016c84f59d7abb373c30f7d1960cc9fbb76c7be79156db3b1b3cdbaeef5cf7f4faceff -7469bdbfb3c1137a269655090b3c17b65ee0d93041b6c173a4f542d1b78d294af19cfda58b5242ac -07f38f81c1f34880984ae7a5640344e3eb21ba5ec0bb127e2877926a393e3110e26cd370b9bc3d9b -2f5bd87952d0b76f1680b1e4e7b4d4aed878c258554f5959e2eb389a161613591436bea9e0b3107e -5e137e77e3cc46746e917bf2de87a1b777eebfa0d30946db29cdc6fdb3af9bfc1ac008f356d9d6cd -1357dba503669630f9e989abfe4a26ae18365e317435585a79c9d97b8884d959e0426e5dce92e65b -37b865f0aa5973801dd42422df6c357c25a3d0476bd21405cb4732067d4fc13ace786cd9849631b3 -f48e6077ea999a101ea955f53c7abc66460cd54c9feda5691341d123f55389534dab17f26775942b -ca9f45b9a255edcb01a0137936af235da1cd9a2683793a4c174ee3c1e0bcf9f105177ab1dbba8085 -37174cb1a73c1f85151c3dde1b5519d5e88732ec0f5db222cb0a6a7b9f9d51a574df404c97d60b07 -7ee8f2536a4ec1fe3ebb8a562f5a6e6024df3870cab37ad712bd09cb5c8c1718969cd617b9796bb1 -dbbba4ae2a1af9b3aff150e9b6ec335d422288f1f751cbf65bf1fea2060df84ea810bf06fe8f8ff3 -4bd424a3f03faf625825ac7a704fa96ae8b1955cf118e9be872b9e30255358f890d7eec287ab5de4 -1b1fc62adff870afcd13b8dae5564c4ee1893ebbca8c5bed7cb8e2295bfab0d1583492bfac1c714f -28415c05896e9092e8c50df7ae8c2329c49f1df2e8df3ac5a3ff7cbef985814203c2d3f62efc4e37 -3aa8361d928d4d5f69bfd274efff51a5e94a73a5c902acd4551f6e7b22d8ba4edd8abd8f7b716783 -2d9c51e0fe04917810c83f7c4ae2a0973797b3a5242e27e309d18d4e650308bf7b76c84319b07426 -a23ec72e6bc2e59b5c2976a75a1bad1bef280c505f9e74096b5f145b709e8ff9ffa40ef397b2d463 -4f4b979d53a4746d946f4858ab7f70a1a1163466361c2197ba77c2cbd1bff198f07c0238f06ea3b7 -72601b5fad2aa3286dd0382b0d202f2ab1c04ef0bbba358a6ab7727eaaa0dda1c1bf775f132272b8 -516846cec433ceceda75df34ac90ca46d2bfde80f74f9801f59108fa408556d347940336d74aa722 -0e44e72464a714a527ee242f1b40910baf8381286a4af0509de04f469b1320eef6f81d84c021af6d -3548904e90eec0bbd6c95a5043676a41d754d6821a9ebf16044e8d6ae92cb43d6184fff56c5d6556 -70f6d4177cd4286822b4d9b898aa1c593d3bb9f3957e416bb81a87290cc24010f422a99080425305 -bcab7fb6fedd9fd4a2ce5708f4c897631ea7e5e9d539597a25dbfc5c042b659b9fa57c3aa8a1f2b7 -550dc1e4e21c932113523979cf225bd657e996cd96c647f2fa312d9d8f55d2cec70245e72383bb5a -705791b3acc772a5b4c7d252e8b10c6feeb1946e89ceefab3e37df02511cfb495fa510d4cf504936 -fb618bd2fe2e4263074b1b1dfc0173b87615eca70206587eb37485a1f1c28db3d093a8d0807e2939 -74ac6a7fce0d7407c11bc677a61e9ebd6f54ee68648096f92c7715fb893779a38dc835da2f9971a4 -bcb123c9c7138f49b2f2f24a4bf726ef4720423fe32ee1781c83b7f1abd5ed71086fbd43f384d008 -dee820e11456202656f043ac1f31019481881120654660d461d708634d30c2e8b85701c3def9ddc1 -7e2bc10864e318bc2ed821d92305e5a2e8940c9484fcf0073fb88db7170f698313400b409121058a -8f3bb262ba6df789d0a55ccc7f90ab01211734614126b7001996e89f76f3d64e36d8fed50382b0ef -961cbd546574505f7406d66ae11439e34efd29356e3f627ea6a6e3f95a3bb3853cc741ba5a8d00af -5f5e9bb36aa8bf25080447c1650e4cd0ad31c1b87f3036d5f3b0325431c420820111bf8126823508 -46e00fcfe01ea9391905d592131d1d49b78ef69d391717b45c82131bdf48729636327135f03609fb -95602c6840ca081e7be5098a87f01bf727404f5fe25735c0d0bb23b6a7e66532edd607d94ae574d2 -ccc6c8d1d08781cff4f0607a42b8de5161748b7792e3dd7802de250d1c9c3849b7390f69aed3c8f1 -ef642bfcbb4f2b017b258afb8fe17dae1d96bb18d73e87e2fe435a19ec0b62791685305d080f0203 -7438df8bbd0fa53d570f6ce6acec1db5586bfa312de89948b1f785a576e77aabb532f18978b2c03b -13be131647ee6dd0d829a5429dd91f693875ac9edeb65a635d178f82c5e50b84fd91efde6bd91f39 -163e559b0c619b42de77ffaf522d33387c5e7c63ecfd5e2c0f47dc39f6cf479117cedfeb8d4eacbe -f64d06c33e3a95977bf4586fb4d7798759eebaec55f186c80299f898b8b9f8b804782117e4191590 -4a904f4694e20ec666e4e61516ed1088d2e11dc68bf4fcf15bf863d1b2051514fb27e8a47e3d64c1 -b7faf346cdc8393351e4ec7c60dcaf2bff13a063fc55cbb3e0d5ac4bc816681faa79a50bb4f12190 -2806f85b649204d2d35d5628034b61fc1c16803d071f66ef1b8c308bf097d6562e6e2a71e76d9f2b -37104c6480c3d4d5cf75d98b9ded08dca9fec936b9de20093f2cc94d48bef6d708ad93576034afc5 -11a8689f736d217f428399893537e9c488f8e818492bfaa53460b357dad23b4fb18b8ba33773546f -1a6d1561931e5c44389e7499eb4f79b27263b39edf6442b6baa9cf1c9f7305a230a6ea50c83f1266 -548b7ed084efbcb9d2b0bcb4ec9dee51dab2d953a6799a5a8d417c5c43a16fd38d2a7c560fd00e23 -46bd5518a32b892326ede062be516ed2591e6982495f78c2a4e5ad4cc4a65f61335393187414262d -eb32279fff2afbcc7128ac575c40f3016ce9a197d3647f5fbd5a0d9e5a02a227e256249ce49ab43b -5461e6735e4c68a3657ca64b3958b6ba044f0eb3b4e20c5878bd5c031c7a104686352f62d1dc45b6 -e66b74614a3b1b3094fdac39bdb3e840fa3ec4d4d74d1f23923575f34db28e6ea83acb010525b2a6 -6e9d676bea9eae6c76abdb634b1935182e9f97916b9b9fe71f0bf3325be4f3323f3f3d2f73e24531 -8656df69e983ae794dbd394d3d8153280dca835b0379f09b094d087965f12d0c0ea99ba234cf5e68 -54f1535ed62085f054a47d3fada303dc59c9a93b91cc6bbda098d1b2aca94e56dcb80033b801b4e2 -905278b55c85b79e0ebe39326f255a89566db4b5621ada917454f2937fd1f124e3d8165418546a13 -64282f1adbd4c0c3440dd845fcdf495a3adf1b14ef83ec9097bf87b718ff1b3b6ae381b0c133ce2f -5e6a99b191799bb7a0ad282a585600ac088c75fb037f04bdf022ed40dc450fbae0376934dccb6b88 -d0be7c3091fe6ab35b34ba40a8c7fd9afe51340c04c7ba5b1929555b741289210e9406e6b32d2d57 -c2728ff3fc3c7e28f73bf1cda79aa54ebca0b0dcfa3b8769f67c4278688cd0e38139f874637396d7 -8bcde6e7403ad7ba32db61fb404baab6b413a95a9bc2309bdd7cd82f864f656d0c3a2df1bba1c74f -0fbd89dbf6621fbdb228fe1d08a7b36ad2ffc89653d445e43a174b4f515f4db05f06899d3847dd98 -c42f4e82454954ce9bd7dfca8978fbedeb096fbfd3a5cbff0127fb5d850a656e6473747265616d0a -656e646f626a0a31342030206f626a0a33333936380a656e646f626a0a392030206f626a0a3c3c2f -547970652f466f6e7444657363726970746f722f466f6e744e616d652f5851414a4b482b54696d65 -732d426f6c642f466f6e7442426f785b2d313638202d3334312031303933203936305d2f466c6167 -732033340a2f417363656e74203936300a2f436170486569676874203639320a2f44657363656e74 -202d3334310a2f4974616c6963416e676c6520300a2f5374656d56203136390a2f4d697373696e67 -5769647468203235300a2f58486569676874203437330a2f43686172536574282f73706163652f6f -6e652f74776f2f412f4f2f522f622f632f652f692f6c2f732f742f77290a2f466f6e7446696c6533 -2038203020523e3e0a656e646f626a0a382030206f626a0a3c3c2f537562747970652f5479706531 -432f46696c7465722f466c6174654465636f64652f4c656e677468203135203020523e3e73747265 -616d0a789c65537b4c536714bf97c2bddf7c54a5b991466cefcc9412a6e2632ad9d04dc407883a82 -8a3a94d21628145a5b6879bf5ff209147988a0146da10a550ba8f89c3ae3127173eae26346b36c8b -9b664bf670f1dcfaf1c76eb72cfb63f9929393737ee79773cef73b34151840d1341d9cfcf14771f1 -eb2392f4393acbfcd54683d61f0d1366d1426880305b423e202fdf7cf326296836b5f148d0d463a1 -ccb260189e01edd3a0663a25a1e98256678cd15468d66764e6f1aaad89dbc32322defd2fb2282a2a -8a4f2bfc37c3afd159f419b9fc3cd1b1ea0c46538e2e37ef7d3e46441b0c7a0d9f612834655a78b5 -56abd3facbb6a90dba6c7eaddea037998c565e1513ce2f8e8c5c345f348b37e973d2f22d7ca23147 -9dcb6f3246f11bf9049d569f9ff3ff044551d28f34bacd96c43cbdcd90b668314f5173a835d45a2a -924aa296505ba9382a994aa062a8604a46d1d43471375420554adda517d10d015cc040c07349a4e4 -ace445605c604be09f8100cd525f3a7699dd103d22ac7504cbbcbe581757cf687171df0e98442cc2 -b1102343cc13e7750bca4b7655c9652633ec61655e17bba525af13f7e3ae3657dff5ee9110c8674e -461fccc0f94866c2d6b2cacc7d48e6adc3658da5a263328b25f0989968800aee25d4ff46ea83a4c2 -96d23b82fc048de16d0886e9122112682e5dbdb7340da3a549df43e81f43e3577bbaab2b5a95f62a -8cb17affce23795e8ccef63b476eadbfb4848486bd4dde218ae72a98fef8c6e0839b4a3fe5d7b0d9 -0b4b0769611ecce0343b0d85a9588b738f584f150e557beaef22b033b5df965ccc1ece1a49712461 -44662c57917964deb30898fef4f2d08b2f94a41b5671cd30e5c8e865ecc6bdc56d067b4193b12919 -95b0525f6f81c717e2117b8e85d7102b1166fbd6714447c2898a688906c2481868c417062ad1a692 -70882029cac62c0e026e93a922449d4002084bd8040880dd601807046f897dcbcbfaac1e618527df -11dcf42b287e9e29f3c00b78c2c942616e3e5b5b525b578e6b716553b11dc90c9d59792df9b32237 -242cdf7026e5b754e557396e33ce46da9cbdbb6353ce7f6f551819998744b9d8cebed603edd88edb -f675d40f945fab7063f4e3f8ade7f7b5e7546795eb8e1b5df824f2b85dc3fd0315d6a38a3e5b6761 -f71ef4b720e0cc105c39697605ff00cb201e56cd943df5ed717185b8acb5b28ba4c070c8e7bdae2e -b7ebf840cf283e8f64bf00ab1a27f10ad953f2d0cc3ca83b548263d0c42616afaeac8cae4266f8d1 -c546775476e2fb08920758d0902f8340cd4cc40bbf70b8b5a5bbb955e4e868edb1bb66fde44d9d13 -5fa2cdb62af716e96b563522297c577e1fde8cd1574129819b829a9b0fd16666d37b9add7149c874 -953c66e3ce69eede193df1ec8cc2dc69d315975ab1dc5871785409d75fb25218c47dc20ac7435848 -5ff333684506926461c6aadaab701a2217599c56539d52812c50ed6433ede587f0308a155e73a999 -99eadd9eacb1b1939eb173fa53a94a7135a57dc26a27eddbeee7986561bcf59dd5380f9797a51b3e -28d1565bcbf595671a0e5a1fd8eed6b8713beee9b00f37232729b3b023f5fb1b7b37b41684ac23ab -2cb7abfa6a7aeb0ec98df72a867097086b73b78830b385edaf6ba91dd800aa8949214e0666c0f8ef -643ce818030b85b93ddeb6b67ebbdc3f8fd3879cf4a7fe61d27c2b389268614e35f414e274347180 -c5e945367dc33fc364ed2feec5a3482a5c13f53528ccbd0ef18ee0cf4009cb216ca6ec3264f8abb7 -59980bfe5568d0c4ab83ec931b17d24e175fc17290bf7805e1a058f93391ec4a2fd2a62b13030f9f -73f47830ba35b89ecc54ca4a8822272e5e6d1abca4900a0d6253210e1aa6824a02f77c6b38622774 -d05eb6bdb9adb9b969a0c375a00b235767fe27ca098ec551b6225523b208939d6c645351377e8c84 -3bac9f04e4420230349c86508960860ccec2e4c694d7ce150f358211b5b8e0c9c35377f023f9eb95 -8f08b563972d2353a1d5daf4c60f919b19bce5755fc763d8537034e3a0b5cd287ecc9e82a4ec9dc9 -d1996af1c423519eb0549443b3d4e610d40ed8ee603c93809fecf14c9902fcb1295329ea2fd8bde9 -1d0a656e6473747265616d0a656e646f626a0a31352030206f626a0a313531380a656e646f626a0a -31362030206f626a0a3c3c2f52340a34203020523e3e0a656e646f626a0a31372030206f626a0a3c -3c2f5231300a3130203020522f5231330a3133203020523e3e0a656e646f626a0a31302030206f62 -6a0a3c3c2f537562747970652f54797065312f42617365466f6e742f5851414a4b482b54696d6573 -2d426f6c642f547970652f466f6e742f4e616d652f5231302f466f6e7444657363726970746f7220 -39203020522f4669727374436861722033322f4c61737443686172203235352f5769647468735b0a -32353020333333203535352035303020353030203130303020383333203333332033333320333333 -2035303020353730203235302035373020323530203237380a353030203530302035303020353030 -20353030203530302035303020353030203530302035303020333333203333332035373020353730 -20353730203530300a39333020373232203636372037323220373232203636372036313120373738 -20373738203338392035303020373738203636372039343420373232203737380a36313120373738 -20373232203535362036363720373232203732322031303030203732322037323220363637203333 -33203237382033333320353831203530300a33333320353030203535362034343420353536203434 -34203333332035303020353536203237382033333320353536203237382038333320353536203530 -300a3535362035353620343434203338392033333320353536203530302037323220353030203530 -302034343420333934203232302033393420353230203235300a3333332033333320333333203333 -33203333332033333320333333203333332033333320333333203333332033333320333333203235 -3020323530203235300a323738203235302032353020323530203235302032353020323530203235 -302037323220313030302032353020323530203235302032353020323530203235300a3235302033 -33332035303020353030203530302035303020323230203530302033333320373437203330302035 -3030203537302033333320373437203333330a343030203537302033303020333030203333332035 -35362035343020323530203333332033303020333330203530302037353020373530203735302035 -30300a37323220373232203732322037323220373232203732322031303030203732322036363720 -3636372036363720363637203338392033383920333839203338390a373232203732322037373820 -37373820373738203737382037373820353730203737382037323220373232203732322037323220 -37323220363131203535360a35303020353030203530302035303020353030203530302037323220 -34343420343434203434342034343420343434203237382032373820323738203237380a35303020 -35353620353030203530302035303020353030203530302035373020353030203535362035353620 -353536203535362035303020353536203530305d0a3e3e0a656e646f626a0a31332030206f626a0a -3c3c2f537562747970652f54797065312f42617365466f6e742f54696d65732d526f6d616e2f5479 -70652f466f6e742f4e616d652f5231332f466f6e7444657363726970746f72203132203020522f46 -69727374436861722033322f4c61737443686172203235352f5769647468735b0a32353020333333 -20343038203530302035303020383333203737382033333320333333203333332035303020353634 -203235302035363420323530203237380a3530302035303020353030203530302035303020353030 -20353030203530302035303020353030203237382032373820353634203536342035363420343434 -0a393231203732322036363720363637203732322036313120353536203732322037323220333333 -2033383920373232203631312038383920373232203732320a353536203732322036363720353536 -20363131203732322037323220393434203732322037323220363131203333332032373820333333 -20343639203530300a33333320343434203530302034343420353030203434342033333320353030 -20353030203237382032373820353030203237382037373820353030203530300a35303020353030 -20333333203338392032373820353030203530302037323220353030203530302034343420343830 -203230302034383020353431203235300a3333332033333320333333203333332033333320333333 -20333333203333332033333320333333203333332033333320333333203235302032353020323530 -0a323738203235302032353020323530203235302032353020323530203235302037323220383839 -2032353020323530203235302032353020323530203235300a323530203333332035303020353030 -20353030203530302032303020353030203333332037363020323736203530302035363420333333 -20373630203333330a34303020353634203330302033303020333333203530302034353320323530 -20333333203330302033313020353030203735302037353020373530203434340a37323220373232 -20373232203732322037323220373232203838392036363720363131203631312036313120363131 -203333332033333320333333203333330a3732322037323220373232203732322037323220373232 -20373232203536342037323220373232203732322037323220373232203732322035353620353030 -0a343434203434342034343420343434203434342034343420363637203434342034343420343434 -2034343420343434203237382032373820323738203237380a353030203530302035303020353030 -20353030203530302035303020353634203530302035303020353030203530302035303020353030 -20353030203530305d0a2f456e636f64696e67203138203020523e3e0a656e646f626a0a31382030 -206f626a0a3c3c2f547970652f456e636f64696e672f446966666572656e6365735b0a34352f6d69 -6e75735d3e3e0a656e646f626a0a322030206f626a0a3c3c2f50726f647563657228455350204768 -6f737473637269707420372e3037293e3e656e646f626a0a787265660a302031390a303030303030 -303030302036353533352066200a30303030303032313830203030303030206e200a303030303034 -30363934203030303030206e200a30303030303032313231203030303030206e200a303030303030 -32323238203030303030206e200a30303030303031393730203030303030206e200a303030303030 -30303135203030303030206e200a30303030303031393530203030303030206e200a303030303033 -36383536203030303030206e200a30303030303336353839203030303030206e200a303030303033 -38353533203030303030206e200a30303030303032353133203030303030206e200a303030303030 -32323937203030303030206e200a30303030303339353931203030303030206e200a303030303033 -36353637203030303030206e200a30303030303338343539203030303030206e200a303030303033 -38343830203030303030206e200a30303030303338353130203030303030206e200a303030303034 -30363336203030303030206e200a747261696c65720a3c3c202f53697a65203139202f526f6f7420 -3120302052202f496e666f2032203020520a3e3e0a7374617274787265660a34303734340a252545 -4f460a diff -Nru tor-0.2.1.30/debian/micro-revision.i tor-0.2.2.35/debian/micro-revision.i --- tor-0.2.1.30/debian/micro-revision.i 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/micro-revision.i 2012-01-10 03:49:41.000000000 +0000 @@ -1 +1 @@ -"bfd289902a471d86" +"73ff13ab3cc9570d" diff -Nru tor-0.2.1.30/debian/patches/03_tor_manpage_in_section_8.dpatch tor-0.2.2.35/debian/patches/03_tor_manpage_in_section_8.dpatch --- tor-0.2.1.30/debian/patches/03_tor_manpage_in_section_8.dpatch 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/patches/03_tor_manpage_in_section_8.dpatch 2012-01-10 03:49:41.000000000 +0000 @@ -23,23 +23,53 @@ exit 0 @DPATCH@ -diff -urNad tor-0.1.1.5/contrib/torify.1 /tmp/dpep.fOA3Mm/tor-0.1.1.5/contrib/torify.1 ---- tor-0.1.1.5/contrib/torify.1 -+++ /tmp/dpep.fOA3Mm/tor-0.1.1.5/contrib/torify.1 -@@ -18,6 +18,6 @@ - to suid binaries. - - .SH SEE ALSO --.BR tor (1), -+.BR tor (8), - .BR tor-resolve (1), - .BR tsocks (1), -diff -urNad tor-0.1.1.5/doc/tor.1.in /tmp/dpep.fOA3Mm/tor-0.1.1.5/doc/tor.1.in ---- tor-0.1.1.5/doc/tor.1.in -+++ /tmp/dpep.fOA3Mm/tor-0.1.1.5/doc/tor.1.in -@@ -1,4 +1,4 @@ --.TH TOR 1 "January 2009" "TOR" -+.TH TOR 8 "January 2009" "TOR" - .SH NAME - tor \- The second-generation onion router - .SH SYNOPSIS +diff -ur tor-0.2.2.9-alpha/doc/tor-gencert.1.txt tor-0.2.2.9-alpha.new/doc/tor-gencert.1.txt +--- tor-0.2.2.9-alpha/doc/tor-gencert.1.txt 2010-02-02 22:40:22.000000000 +0100 ++++ tor-0.2.2.9-alpha.new/doc/tor-gencert.1.txt 2010-02-27 13:47:29.655735605 +0100 +@@ -81,7 +81,7 @@ + + SEE ALSO + -------- +-**tor**(1) + ++**tor**(8) + + + See also the "dir-spec.txt" file, distributed with Tor. + +diff -ur tor-0.2.2.9-alpha/doc/tor-resolve.1.txt tor-0.2.2.9-alpha.new/doc/tor-resolve.1.txt +--- tor-0.2.2.9-alpha/doc/tor-resolve.1.txt 2010-02-02 22:40:22.000000000 +0100 ++++ tor-0.2.2.9-alpha.new/doc/tor-resolve.1.txt 2010-02-27 13:47:37.643234209 +0100 +@@ -36,10 +36,10 @@ + + SEE ALSO + -------- +-**tor**(1), **torify**(1). + ++**tor**(8), **torify**(1). + + + See doc/socks-extensions.txt in the Tor package for protocol details. + + AUTHORS + ------- +-Roger Dingledine , Nick Mathewson . ++Roger Dingledine , Nick Mathewson . +diff -ur tor-0.2.2.9-alpha/doc/tor.1.txt tor-0.2.2.9-alpha.new/doc/tor.1.txt +--- tor-0.2.2.9-alpha/doc/tor.1.txt 2010-02-22 22:22:33.000000000 +0100 ++++ tor-0.2.2.9-alpha.new/doc/tor.1.txt 2010-02-27 13:47:18.531233093 +0100 +@@ -2,7 +2,7 @@ + // See LICENSE for licensing information + // This is an asciidoc file used to generate the manpage/html reference. + // Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html +-TOR(1) ++TOR(8) + ====== + + NAME +diff -ur tor-0.2.2.9-alpha/doc/torify.1.txt tor-0.2.2.9-alpha.new/doc/torify.1.txt +--- tor-0.2.2.9-alpha/doc/torify.1.txt 2010-02-02 22:40:22.000000000 +0100 ++++ tor-0.2.2.9-alpha.new/doc/torify.1.txt 2010-02-27 13:47:52.619234342 +0100 +@@ -46,5 +46,5 @@ + + SEE ALSO + -------- +-**tor**(1), **tor-resolve**(1), **torsocks**(1), **tsocks**(1), ++**tor**(8), **tor-resolve**(1), **torsocks**(1), **tsocks**(1), + **tsocks.conf**(5). diff -Nru tor-0.2.1.30/debian/patches/06_add_compile_time_defaults.dpatch tor-0.2.2.35/debian/patches/06_add_compile_time_defaults.dpatch --- tor-0.2.1.30/debian/patches/06_add_compile_time_defaults.dpatch 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/patches/06_add_compile_time_defaults.dpatch 2012-01-10 03:49:41.000000000 +0000 @@ -23,27 +23,28 @@ exit 0 @DPATCH@ -diff -urNad tor-trunk~/src/or/config.c tor-trunk/src/or/config.c ---- tor-trunk~/src/or/config.c 2009-01-18 01:47:33.000000000 +0100 -+++ tor-trunk/src/or/config.c 2009-02-05 00:25:17.614844812 +0100 +diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' tor~/src/or/config.c tor/src/or/config.c +--- tor~/src/or/config.c 2011-06-17 22:11:35.000000000 +0200 ++++ tor/src/or/config.c 2011-06-17 22:31:19.510811846 +0200 @@ -12,6 +12,7 @@ #define CONFIG_PRIVATE #include "or.h" +#include - #ifdef MS_WINDOWS - #include - #endif -@@ -711,6 +712,8 @@ - #if defined(HAVE_EVENT_GET_VERSION) && defined(HAVE_EVENT_GET_METHOD) - static void check_libevent_version(const char *m, int server); - #endif -+static int debian_running_as_debiantor(); -+static int debian_config_fix_defaults(); + #include "circuitbuild.h" + #include "circuitlist.h" + #include "config.h" +@@ -577,6 +578,9 @@ + static void init_libevent(void); + static int opt_streq(const char *s1, const char *s2); ++static int debian_running_as_debiantor(void); ++static int debian_config_fix_defaults(void); ++ /** Magic value for or_options_t. */ #define OR_OPTIONS_MAGIC 9090909 -@@ -3917,6 +3920,9 @@ + +@@ -4086,6 +4090,9 @@ char *command_arg = NULL; char *errmsg=NULL; @@ -53,14 +54,14 @@ if (argv) { /* first time we're called. save command line args */ backup_argv = argv; backup_argc = argc; -@@ -5307,3 +5313,62 @@ +@@ -5332,3 +5339,83 @@ return 0; } +/* Checks whether we are running as the debian-tor user. + * Returns -1 on error, 2 if we are root, 1 if we are debian-tor, 0 if we are any normal user */ +static int -+debian_running_as_debiantor() ++debian_running_as_debiantor(void) +{ + struct passwd *pw = NULL; + int uid; @@ -83,7 +84,7 @@ +} + +static int -+debian_config_fix_defaults() ++debian_config_fix_defaults(void) +{ + config_var_t *var; + static int fixed = 0; @@ -114,5 +115,26 @@ + var->initvalue = tor_strdup("debian-tor"); + }; + ++ /* set up the control socket stuff */ ++ var = config_find_option(&options_format, "ControlSocket"); ++ tor_assert(var); ++ var->initvalue = tor_strdup("/var/run/tor/control"); ++ ++ var = config_find_option(&options_format, "ControlSocketsGroupWritable"); ++ tor_assert(var); ++ var->initvalue = tor_strdup("1"); ++ ++ var = config_find_option(&options_format, "CookieAuthentication"); ++ tor_assert(var); ++ var->initvalue = tor_strdup("1"); ++ ++ var = config_find_option(&options_format, "CookieAuthFileGroupReadable"); ++ tor_assert(var); ++ var->initvalue = tor_strdup("1"); ++ ++ var = config_find_option(&options_format, "CookieAuthFile"); ++ tor_assert(var); ++ var->initvalue = tor_strdup("/var/run/tor/control.authcookie"); ++ + return 0; +} diff -Nru tor-0.2.1.30/debian/README.Debian tor-0.2.2.35/debian/README.Debian --- tor-0.2.1.30/debian/README.Debian 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/README.Debian 2012-01-10 03:49:41.000000000 +0000 @@ -8,6 +8,11 @@ - default logging goes to /var/log/tor/log (instead of stdout), - DataDirectory is set to /var/lib/tor (uses $HOME/.tor upstream), - User is set to "debian-tor". +- ControlSocket is enabled at /var/run/tor/control, is made + group writable (ControlSocketsGroupWritable). Additionally + CookieAuthentication is enabled, the cookie file written to + /var/run/tor/control.authcookie (CookieAuthFile) and made + group readable (CookieAuthFileGroupReadable). If Tor is started as any other user it behaves just like upstream's. diff -Nru tor-0.2.1.30/debian/README.polipo tor-0.2.2.35/debian/README.polipo --- tor-0.2.1.30/debian/README.polipo 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/debian/README.polipo 2012-01-10 03:49:41.000000000 +0000 @@ -0,0 +1,9 @@ +Polipo is a http proxy that makes it easer to use Tor with a browser. + +In order to make polipo use Tor, add the following to /etc/polipo/config: + socksParentProxy = localhost:9050 +You should then point your browser at localhost:8123 . + +If you are concerned about cached data remaining on your disk, you +should also add + diskCacheRoot= diff -Nru tor-0.2.1.30/debian/rules tor-0.2.2.35/debian/rules --- tor-0.2.1.30/debian/rules 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/rules 2012-01-10 03:49:41.000000000 +0000 @@ -9,6 +9,11 @@ export PACKAGE=tor include /usr/share/dpatch/dpatch.make +# enable hardning options +include /usr/share/hardening-includes/hardening.make +CFLAGS += $(HARDENING_CFLAGS) +LDFLAGS += $(HARDENING_LDFLAGS) + # These are used for cross-compiling and for saving the configure script # from having to guess our platform (since we know it already) # @@ -26,8 +31,6 @@ CFLAGS ?= -Wall -g -LOCALHOST_IP ?= $(shell getent hosts localhost | awk '{print $$1}') - # Do not optimize the build with "noopt" ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 @@ -54,86 +57,81 @@ MAKEFLAGS += -j$(NUMJOBS) endif -CONF_OPTIONS = -# build against libdmalloc4 - it better be installed +# allow building against libdmalloc4 - it better be installed ifneq (,$(findstring with-dmalloc,$(DEB_BUILD_OPTIONS))) - CONF_OPTIONS += --with-dmalloc + confflags += --with-dmalloc endif # allow building with --enable-openbsd-malloc ifneq (,$(findstring enable-openbsd-malloc,$(DEB_BUILD_OPTIONS))) - CONF_OPTIONS += --enable-openbsd-malloc + confflags += --enable-openbsd-malloc endif +export LDFLAGS +export CFLAGS + +MANPAGE_INS=doc/tor.1.in doc/torify.1.in doc/tor-gencert.1.in doc/tor-resolve.1.in + configure: patch-stamp config.status: configure - @if [ "$(LOCALHOST_IP)" != "127.0.0.1" ]; then echo; echo; echo; echo; echo; echo "######################################################################"; echo "WARNING: This system does not think localhost is 127.0.0.1. Will ignore result of testsuite. Please fix your system/chroot."; echo "######################################################################"; echo; echo; echo; echo; echo "Note: 'getent hosts localhost' should return '127.0.0.1 localhost'"; echo; fi dh_testdir - CFLAGS="$(CFLAGS)" ./configure \ + ./configure \ $(confflags) \ --prefix=/usr \ --mandir=\$${prefix}/share/man \ --infodir=\$${prefix}/share/info \ --localstatedir=/var \ - --sysconfdir=/etc \ - $(CONF_OPTIONS) + --sysconfdir=/etc build: build-stamp -build-stamp: config.status + +# create the manpages here because the build-system shipped in the tarball is +# incomplete. moving foo.8 to foo.1.in is intended. +doc/%.1.in: doc/%.1.txt patch-stamp + target="$@"; base="$${target%%.1.in}"; \ + a2x -f manpage "$$base".1.txt && \ + if [ -e "$$base".1 ]; then mv "$$base".1 "$$base".1.in; \ + elif [ -e "$$base".8 ]; then mv "$$base".8 "$$base".1.in; \ + else echo >&2 "No output produced by a2px?" && exit 1; fi + +build-stamp: config.status $(MANPAGE_INS) dh_testdir ! [ -e debian/micro-revision.i ] || cp debian/micro-revision.i src/or/micro-revision.i + # Also touch all the .html files or else the build system will + # try to re-create them and fail badly + for file in $(MANPAGE_INS); do touch $${file%%.1.in}.html.in || exit 1; done $(MAKE) @echo @echo # Running unit tests @if [ "$(RUN_TEST)" != "no" ]; then \ - if [ "$(LOCALHOST_IP)" != "127.0.0.1" ]; then \ - echo; echo; echo "######################################################################"; echo "WARNING: This system does not think localhost is 127.0.0.1. Will ignore result of testsuite. Please fix your system/chroot."; echo "######################################################################"; echo; echo; \ - echo "src/or/test || true"; \ - src/or/test || true; \ - else \ - echo "src/or/test"; \ - src/or/test; \ - fi; \ + make check; \ else \ - echo -e "\n\nSkipping unittests\n\n"; \ + echo; echo; echo "Skipping unittests"; echo; \ fi @echo - - # XXX - # So, gs-gpl on s390 is broken (#457568) and fails to properly build - # .pdf files from .fig files using fig2dev. Therefore we ship them - # until this bug is fixed. - # - # of course we can always give it a try - # - # the hexdumps were built using something like - # perl -e 'while (<>) { print unpack ("H*", $_); }' interaction.pdf | fold > hexdump-interaction.pdf - # - # And it fails on a bunch of other archs too. - cd doc/design-paper; \ - fig2dev -L pdf cell-struct.fig cell-struct.pdf || \ - ( echo "** Using shipped pdf file because fig2dev failed"; \ - perl -e 'while (<>) { chomp; print pack ("H*", $$_); }' ../../debian/hexdump-cell-struct.pdf > cell-struct.pdf ); \ - fig2dev -L pdf interaction.fig interaction.pdf || \ - ( echo "** Using shipped pdf file because fig2dev failed"; \ - perl -e 'while (<>) { chomp; print pack ("H*", $$_); }' ../../debian/hexdump-interaction.pdf > interaction.pdf ); \ - # XXX ends - - make -C doc/design-paper tor-design.ps tor-design.pdf - touch build-stamp clean: unpatch dh_testdir dh_testroot rm -f build-stamp + rm -f src/common/common_sha1.i src/or/or_sha1.i + rm -f src/or/micro-revision.i [ ! -f Makefile ] || $(MAKE) distclean ! [ -e debian/micro-revision.i ] || rm -f src/or/micro-revision.i + # Normally the .deb wouldn't ship with a ../.git + if [ -d .git ] && which git >/dev/null; then \ + echo "\"`git rev-parse --short=16 HEAD`\"" > "debian/micro-revision.i" ; \ + fi + + # these get autobuilt from the .txt files, some of which we also patch + rm -f $(MANPAGE_INS) + dh_clean install: build @@ -150,11 +148,8 @@ mv $(CURDIR)/debian/tor/usr/share/man/man1/tor.1 $(CURDIR)/debian/tor/usr/share/man/man8/tor.8 install -m 755 contrib/torify $(CURDIR)/debian/tor/usr/bin - install -m 644 contrib/torify.1 $(CURDIR)/debian/tor/usr/share/man/man1 install -m 644 contrib/tor-tsocks.conf $(CURDIR)/debian/tor/etc/tor - install -m 644 debian/tor.lintian-override $(CURDIR)/debian/tor/usr/share/lintian/overrides/tor - dh_link usr/share/man/man8/tor.8 usr/share/man/man5/torrc.5 rm -f $(CURDIR)/debian/tor/usr/bin/tor-control.py @@ -203,7 +198,6 @@ # Build architecture dependant packages using the common target. binary-arch: install $(MAKE) -f debian/rules DH_OPTIONS=-s binary-common - @if [ "$(LOCALHOST_IP)" != "127.0.0.1" ]; then echo; echo; echo; echo; echo; echo "######################################################################"; echo "WARNING: This system does not think localhost is 127.0.0.1. Result of testsuite has been ignored. Please fix your system/chroot."; echo "######################################################################"; echo; echo; echo; echo; echo "Note: 'getent hosts localhost' should return '127.0.0.1 localhost'"; echo; fi binary: binary-indep binary-arch .PHONY: build clean binary-common binary-indep binary-arch binary install diff -Nru tor-0.2.1.30/debian/tor.dirs tor-0.2.2.35/debian/tor.dirs --- tor-0.2.1.30/debian/tor.dirs 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/tor.dirs 2012-01-10 03:49:41.000000000 +0000 @@ -1,6 +1,5 @@ etc/tor var/lib/tor var/log/tor -usr/share/lintian/overrides usr/bin usr/sbin diff -Nru tor-0.2.1.30/debian/tor.docs tor-0.2.2.35/debian/tor.docs --- tor-0.2.1.30/debian/tor.docs 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/tor.docs 2012-01-10 03:49:41.000000000 +0000 @@ -1,7 +1,4 @@ -AUTHORS debian/README.Debian +debian/README.polipo debian/README.privoxy -doc/HACKING -doc/TODO -doc/design-paper/tor-design.pdf -doc/design-paper/tor-design.ps +contrib/tor-exit-notice.html diff -Nru tor-0.2.1.30/debian/tor.init tor-0.2.2.35/debian/tor.init --- tor-0.2.1.30/debian/tor.init 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/tor.init 2012-01-10 03:49:41.000000000 +0000 @@ -89,7 +89,7 @@ check_torpiddir () { if test ! -d $TORPIDDIR; then #echo "There is no $TORPIDDIR directory. Creating one for you." - mkdir -m 02700 "$TORPIDDIR" + mkdir -m 02750 "$TORPIDDIR" chown debian-tor:debian-tor "$TORPIDDIR" fi @@ -182,8 +182,26 @@ sleep 1 $0 start ;; + status) + if test ! -r $(dirname $TORPID); then + echo "cannot read tor PID file" + exit 4 + fi + pid=`cat $TORPID 2>/dev/null` || true + if test ! -f $TORPID -o -z "$pid"; then + echo "tor is not running" + exit 3 + fi + if ps "$pid" >/dev/null 2>&1; then + echo "tor is running" + exit 0 + else + echo "tor is not running" + exit 1 + fi + ;; *) - echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2 + echo "Usage: $0 {start|stop|restart|reload|force-reload|status}" >&2 exit 1 ;; esac diff -Nru tor-0.2.1.30/debian/tor.lintian-override tor-0.2.2.35/debian/tor.lintian-override --- tor-0.2.1.30/debian/tor.lintian-override 2012-01-10 03:49:41.000000000 +0000 +++ tor-0.2.2.35/debian/tor.lintian-override 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -tor: package-contains-upstream-install-documentation diff -Nru tor-0.2.1.30/depcomp tor-0.2.2.35/depcomp --- tor-0.2.1.30/depcomp 2010-11-30 20:57:33.000000000 +0000 +++ tor-0.2.2.35/depcomp 2011-12-15 16:28:49.000000000 +0000 @@ -1,10 +1,10 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2007-03-29.01 +scriptversion=2009-04-28.21; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software -# Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,9 +17,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -87,6 +85,15 @@ depmode=dashmstdout fi +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what @@ -192,14 +199,14 @@ ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' -' ' ' >> $depfile - echo >> $depfile +' ' ' >> "$depfile" + echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile + >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile @@ -328,7 +335,12 @@ if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. - sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi @@ -404,7 +416,7 @@ # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift @@ -455,32 +467,39 @@ "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift - cleared=no - for arg in "$@"; do + cleared=no eat=no + for arg + do case $cleared in no) set ""; shift cleared=yes ;; esac + if test $eat = yes; then + eat=no + continue + fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done - obj_suffix="`echo $object | sed 's/^.*\././'`" + obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" @@ -500,7 +519,7 @@ # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift @@ -538,13 +557,27 @@ msvisualcpp) # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. + # always write the preprocessed file to stdout. "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + IFS=" " for arg do case "$arg" in + -o) + shift + ;; + $object) + shift + ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift @@ -557,16 +590,23 @@ ;; esac done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + none) exec "$@" ;; @@ -585,5 +625,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff -Nru tor-0.2.1.30/doc/asciidoc-helper.sh tor-0.2.2.35/doc/asciidoc-helper.sh --- tor-0.2.1.30/doc/asciidoc-helper.sh 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/asciidoc-helper.sh 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,65 @@ +#!/bin/sh + +# Copyright (c) The Tor Project, Inc. +# See LICENSE for licensing information +# Run this to generate .html.in or .1.in files from asciidoc files. +# Arguments: +# html|man asciidocpath outputfile + +set -e + +if [ $# != 3 ]; then + exit 1; +fi + +output=$3 + +if [ "$1" = "html" ]; then + input=${output%%.html.in}.1.txt + base=${output%%.html.in} + if [ "$2" != none ]; then + "$2" -d manpage -o $output $input; + else + echo "=================================="; + echo; + echo "You need asciidoc installed to be able to build the manpage."; + echo "To build without manpages, use the --disable-asciidoc argument"; + echo "when calling configure."; + echo; + echo "=================================="; + exit 1; + fi +elif [ "$1" = "man" ]; then + input=${output%%.1.in}.1.txt + base=${output%%.1.in} + + if test "$2" = none; then + echo "=================================="; + echo; + echo "You need asciidoc installed to be able to build the manpage."; + echo "To build without manpages, use the --disable-asciidoc argument"; + echo "when calling configure."; + echo; + echo "=================================="; + exit 1; + fi + if "$2" -f manpage $input; then + mv $base.1 $output; + else + cat<:80}}\001 -4 2 0 50 0 0 10 0.0000 4 135 2190 3525 1500 Relay c1{Extended, g^y2, H(K2)}\001 -4 0 0 50 0 0 10 0.0000 4 135 1845 3675 2100 Relay c2{Begin :80}\001 -4 2 0 50 0 0 10 0.0000 4 135 1410 3525 2550 Relay c1{{Connected}}\001 -4 2 0 50 0 0 10 0.0000 4 135 1290 5925 2475 Relay c2{Connected}\001 -4 0 0 50 0 0 10 0.0000 4 135 2085 1275 2925 Relay c1{{Data, "HTTP GET..."}}\001 -4 0 0 50 0 0 10 0.0000 4 135 1965 3675 3000 Relay c2{Data, "HTTP GET..."}\001 -4 1 0 50 0 0 10 0.0000 4 135 1365 4800 225 (link is TLS-encryped)\001 -4 1 0 50 0 0 10 0.0000 4 135 870 7050 225 (unencrypted)\001 -4 1 0 50 0 0 10 0.0000 4 105 780 7125 1650 cN--a circID\001 -4 2 0 50 0 0 10 0.0000 4 135 1860 3525 3600 Relay c1{{Data, (response)}}\001 -4 2 0 50 0 0 10 0.0000 4 135 645 8100 3375 (response)\001 -4 2 0 50 0 0 10 0.0000 4 135 1650 5925 3450 Relay c2{Data, (response)}\001 -4 2 0 50 0 0 10 0.0000 4 135 1545 5925 1425 Created c2, g^y2, H(K2)\001 -4 0 0 50 0 0 10 0.0000 4 135 1170 3675 1125 Create c2, E(g^x2)\001 -4 0 0 50 0 0 10 0.0000 4 135 1170 1275 450 Create c1, E(g^x1)\001 -4 2 0 50 0 0 10 0.0000 4 135 1545 3525 750 Created c1, g^y1, H(K1)\001 diff -Nru tor-0.2.1.30/doc/design-paper/latex8.bst tor-0.2.2.35/doc/design-paper/latex8.bst --- tor-0.2.1.30/doc/design-paper/latex8.bst 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/design-paper/latex8.bst 1970-01-01 00:00:00.000000000 +0000 @@ -1,1124 +0,0 @@ - -% --------------------------------------------------------------- -% -% $Id$ -% -% by Paolo.Ienne@di.epfl.ch -% - -% --------------------------------------------------------------- -% -% no guarantee is given that the format corresponds perfectly to -% IEEE 8.5" x 11" Proceedings, but most features should be ok. -% -% --------------------------------------------------------------- -% -% `latex8' from BibTeX standard bibliography style `abbrv' -% version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. -% Copyright (C) 1985, all rights reserved. -% Copying of this file is authorized only if either -% (1) you make absolutely no changes to your copy, including name, or -% (2) if you do make changes, you name it something other than -% btxbst.doc, plain.bst, unsrt.bst, alpha.bst, and abbrv.bst. -% This restriction helps ensure that all standard styles are identical. -% The file btxbst.doc has the documentation for this style. - -ENTRY - { address - author - booktitle - chapter - edition - editor - howpublished - institution - journal - key - month - note - number - organization - pages - publisher - school - series - title - type - volume - year - } - {} - { label } - -INTEGERS { output.state before.all mid.sentence after.sentence after.block } - -FUNCTION {init.state.consts} -{ #0 'before.all := - #1 'mid.sentence := - #2 'after.sentence := - #3 'after.block := -} - -STRINGS { s t } - -FUNCTION {output.nonnull} -{ 's := - output.state mid.sentence = - { ", " * write$ } - { output.state after.block = - { add.period$ write$ - newline$ - "\newblock " write$ - } - { output.state before.all = - 'write$ - { add.period$ " " * write$ } - if$ - } - if$ - mid.sentence 'output.state := - } - if$ - s -} - -FUNCTION {output} -{ duplicate$ empty$ - 'pop$ - 'output.nonnull - if$ -} - -FUNCTION {output.check} -{ 't := - duplicate$ empty$ - { pop$ "empty " t * " in " * cite$ * warning$ } - 'output.nonnull - if$ -} - -FUNCTION {output.bibitem} -{ newline$ - "\bibitem{" write$ - cite$ write$ - "}" write$ - newline$ - "" - before.all 'output.state := -} - -FUNCTION {fin.entry} -{ add.period$ - write$ - newline$ -} - -FUNCTION {new.block} -{ output.state before.all = - 'skip$ - { after.block 'output.state := } - if$ -} - -FUNCTION {new.sentence} -{ output.state after.block = - 'skip$ - { output.state before.all = - 'skip$ - { after.sentence 'output.state := } - if$ - } - if$ -} - -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} - -FUNCTION {and} -{ 'skip$ - { pop$ #0 } - if$ -} - -FUNCTION {or} -{ { pop$ #1 } - 'skip$ - if$ -} - -FUNCTION {new.block.checka} -{ empty$ - 'skip$ - 'new.block - if$ -} - -FUNCTION {new.block.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.block - if$ -} - -FUNCTION {new.sentence.checka} -{ empty$ - 'skip$ - 'new.sentence - if$ -} - -FUNCTION {new.sentence.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.sentence - if$ -} - -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ -} - -FUNCTION {emphasize} -{ duplicate$ empty$ - { pop$ "" } - { "{\em " swap$ * "}" * } - if$ -} - -INTEGERS { nameptr namesleft numnames } - -FUNCTION {format.names} -{ 's := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := - nameptr #1 > - { namesleft #1 > - { ", " * t * } - { numnames #2 > - { "," * } - 'skip$ - if$ - t "others" = - { " et~al." * } - { " and " * t * } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := - - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {format.authors} -{ author empty$ - { "" } - { author format.names } - if$ -} - -FUNCTION {format.editors} -{ editor empty$ - { "" } - { editor format.names - editor num.names$ #1 > - { ", editors" * } - { ", editor" * } - if$ - } - if$ -} - -FUNCTION {format.title} -{ title empty$ - { "" } - { title "t" change.case$ } - if$ -} - -FUNCTION {n.dashify} -{ 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := - } - { { t #1 #1 substring$ "-" = } - { "-" * - t #2 global.max$ substring$ 't := - } - while$ - } - if$ - } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - -FUNCTION {format.date} -{ year empty$ - { month empty$ - { "" } - { "there's a month but no year in " cite$ * warning$ - month - } - if$ - } - { month empty$ - 'year - { month " " * year * } - if$ - } - if$ -} - -FUNCTION {format.btitle} -{ title emphasize -} - -FUNCTION {tie.or.space.connect} -{ duplicate$ text.length$ #3 < - { "~" } - { " " } - if$ - swap$ * * -} - -FUNCTION {either.or.check} -{ empty$ - 'pop$ - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} - -FUNCTION {format.bvolume} -{ volume empty$ - { "" } - { "volume" volume tie.or.space.connect - series empty$ - 'skip$ - { " of " * series emphasize * } - if$ - "volume and number" number either.or.check - } - if$ -} - -FUNCTION {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { output.state mid.sentence = - { "number" } - { "Number" } - if$ - number tie.or.space.connect - series empty$ - { "there's a number but no series in " cite$ * warning$ } - { " in " * series * } - if$ - } - if$ - } - { "" } - if$ -} - -FUNCTION {format.edition} -{ edition empty$ - { "" } - { output.state mid.sentence = - { edition "l" change.case$ " edition" * } - { edition "t" change.case$ " edition" * } - if$ - } - if$ -} - -INTEGERS { multiresult } - -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult -} - -FUNCTION {format.pages} -{ pages empty$ - { "" } - { pages multi.page.check - { "pages" pages n.dashify tie.or.space.connect } - { "page" pages tie.or.space.connect } - if$ - } - if$ -} - -FUNCTION {format.vol.num.pages} -{ volume field.or.null - number empty$ - 'skip$ - { "(" number * ")" * * - volume empty$ - { "there's a number but no volume in " cite$ * warning$ } - 'skip$ - if$ - } - if$ - pages empty$ - 'skip$ - { duplicate$ empty$ - { pop$ format.pages } - { ":" * pages n.dashify * } - if$ - } - if$ -} - -FUNCTION {format.chapter.pages} -{ chapter empty$ - 'format.pages - { type empty$ - { "chapter" } - { type "l" change.case$ } - if$ - chapter tie.or.space.connect - pages empty$ - 'skip$ - { ", " * format.pages * } - if$ - } - if$ -} - -FUNCTION {format.in.ed.booktitle} -{ booktitle empty$ - { "" } - { editor empty$ - { "In " booktitle emphasize * } - { "In " format.editors * ", " * booktitle emphasize * } - if$ - } - if$ -} - -FUNCTION {empty.misc.check} - -{ author empty$ title empty$ howpublished empty$ - month empty$ year empty$ note empty$ - and and and and and - key empty$ not and - { "all relevant fields are empty in " cite$ * warning$ } - 'skip$ - if$ -} - -FUNCTION {format.thesis.type} -{ type empty$ - 'skip$ - { pop$ - type "t" change.case$ - } - if$ -} - -FUNCTION {format.tr.number} -{ type empty$ - { "Technical Report" } - 'type - if$ - number empty$ - { "t" change.case$ } - { number tie.or.space.connect } - if$ -} - -FUNCTION {format.article.crossref} -{ key empty$ - { journal empty$ - { "need key or journal for " cite$ * " to crossref " * crossref * - warning$ - "" - } - { "In {\em " journal * "\/}" * } - if$ - } - { "In " key * } - if$ - " \cite{" * crossref * "}" * -} - -FUNCTION {format.crossref.editor} -{ editor #1 "{vv~}{ll}" format.name$ - editor num.names$ duplicate$ - #2 > - { pop$ " et~al." * } - { #2 < - 'skip$ - { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { " et~al." * } - { " and " * editor #2 "{vv~}{ll}" format.name$ * } - if$ - } - if$ - } - if$ -} - -FUNCTION {format.book.crossref} -{ volume empty$ - { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ - "In " - } - { "Volume" volume tie.or.space.connect - " of " * - } - if$ - editor empty$ - editor field.or.null author field.or.null = - or - { key empty$ - { series empty$ - { "need editor, key, or series for " cite$ * " to crossref " * - crossref * warning$ - "" * - } - { "{\em " * series * "\/}" * } - if$ - } - { key * } - if$ - } - { format.crossref.editor * } - if$ - " \cite{" * crossref * "}" * -} - -FUNCTION {format.incoll.inproc.crossref} -{ editor empty$ - editor field.or.null author field.or.null = - or - { key empty$ - { booktitle empty$ - { "need editor, key, or booktitle for " cite$ * " to crossref " * - crossref * warning$ - "" - } - { "In {\em " booktitle * "\/}" * } - if$ - } - { "In " key * } - if$ - } - { "In " format.crossref.editor * } - if$ - " \cite{" * crossref * "}" * -} - -FUNCTION {article} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - crossref missing$ - { journal emphasize "journal" output.check - format.vol.num.pages output - format.date "year" output.check - } - { format.article.crossref output.nonnull - format.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {book} -{ output.bibitem - author empty$ - { format.editors "author and editor" output.check } - { format.authors output.nonnull - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - new.block - format.btitle "title" output.check - crossref missing$ - { format.bvolume output - new.block - format.number.series output - new.sentence - publisher "publisher" output.check - address output - } - { new.block - format.book.crossref output.nonnull - } - if$ - format.edition output - format.date "year" output.check - new.block - note output - fin.entry -} - -FUNCTION {booklet} -{ output.bibitem - format.authors output - new.block - format.title "title" output.check - howpublished address new.block.checkb - howpublished output - address output - format.date output - new.block - note output - fin.entry -} - -FUNCTION {inbook} -{ output.bibitem - author empty$ - { format.editors "author and editor" output.check } - { format.authors output.nonnull - - crossref missing$ - { "author and editor" editor either.or.check } - 'skip$ - if$ - } - if$ - new.block - format.btitle "title" output.check - crossref missing$ - { format.bvolume output - format.chapter.pages "chapter and pages" output.check - new.block - format.number.series output - new.sentence - publisher "publisher" output.check - address output - } - { format.chapter.pages "chapter and pages" output.check - new.block - format.book.crossref output.nonnull - } - if$ - format.edition output - format.date "year" output.check - new.block - note output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle "booktitle" output.check - format.bvolume output - format.number.series output - format.chapter.pages output - new.sentence - publisher "publisher" output.check - address output - format.edition output - format.date "year" output.check - } - { format.incoll.inproc.crossref output.nonnull - format.chapter.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {inproceedings} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - crossref missing$ - { format.in.ed.booktitle "booktitle" output.check - format.bvolume output - format.number.series output - format.pages output - address empty$ - { organization publisher new.sentence.checkb - organization output - publisher output - format.date "year" output.check - } - { address output.nonnull - format.date "year" output.check - new.sentence - organization output - publisher output - } - if$ - } - { format.incoll.inproc.crossref output.nonnull - format.pages output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {conference} { inproceedings } - -FUNCTION {manual} -{ output.bibitem - author empty$ - { organization empty$ - 'skip$ - { organization output.nonnull - address output - } - if$ - } - { format.authors output.nonnull } - if$ - new.block - format.btitle "title" output.check - author empty$ - { organization empty$ - { address new.block.checka - address output - } - 'skip$ - if$ - } - { organization address new.block.checkb - organization output - address output - } - if$ - format.edition output - format.date output - new.block - note output - fin.entry -} - -FUNCTION {mastersthesis} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - "Master's thesis" format.thesis.type output.nonnull - school "school" output.check - address output - format.date "year" output.check - new.block - note output - fin.entry -} - -FUNCTION {misc} -{ output.bibitem - format.authors output - title howpublished new.block.checkb - format.title output - howpublished new.block.checka - howpublished output - format.date output - new.block - note output - fin.entry - empty.misc.check -} - -FUNCTION {phdthesis} -{ output.bibitem - format.authors "author" output.check - new.block - format.btitle "title" output.check - new.block - "PhD thesis" format.thesis.type output.nonnull - school "school" output.check - address output - format.date "year" output.check - new.block - note output - fin.entry -} - -FUNCTION {proceedings} -{ output.bibitem - editor empty$ - { organization output } - { format.editors output.nonnull } - - if$ - new.block - format.btitle "title" output.check - format.bvolume output - format.number.series output - address empty$ - { editor empty$ - { publisher new.sentence.checka } - { organization publisher new.sentence.checkb - organization output - } - if$ - publisher output - format.date "year" output.check - } - { address output.nonnull - format.date "year" output.check - new.sentence - editor empty$ - 'skip$ - { organization output } - if$ - publisher output - } - if$ - new.block - note output - fin.entry -} - -FUNCTION {techreport} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - format.tr.number output.nonnull - institution "institution" output.check - address output - format.date "year" output.check - new.block - note output - fin.entry -} - -FUNCTION {unpublished} -{ output.bibitem - format.authors "author" output.check - new.block - format.title "title" output.check - new.block - note "note" output.check - format.date output - fin.entry -} - -FUNCTION {default.type} { misc } - -MACRO {jan} {"Jan."} - -MACRO {feb} {"Feb."} - -MACRO {mar} {"Mar."} - -MACRO {apr} {"Apr."} - -MACRO {may} {"May"} - -MACRO {jun} {"June"} - -MACRO {jul} {"July"} - -MACRO {aug} {"Aug."} - -MACRO {sep} {"Sept."} - -MACRO {oct} {"Oct."} - -MACRO {nov} {"Nov."} - -MACRO {dec} {"Dec."} - -MACRO {acmcs} {"ACM Comput. Surv."} - -MACRO {acta} {"Acta Inf."} - -MACRO {cacm} {"Commun. ACM"} - -MACRO {ibmjrd} {"IBM J. Res. Dev."} - -MACRO {ibmsj} {"IBM Syst.~J."} - -MACRO {ieeese} {"IEEE Trans. Softw. Eng."} - -MACRO {ieeetc} {"IEEE Trans. Comput."} - -MACRO {ieeetcad} - {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} - -MACRO {ipl} {"Inf. Process. Lett."} - -MACRO {jacm} {"J.~ACM"} - -MACRO {jcss} {"J.~Comput. Syst. Sci."} - -MACRO {scp} {"Sci. Comput. Programming"} - -MACRO {sicomp} {"SIAM J. Comput."} - -MACRO {tocs} {"ACM Trans. Comput. Syst."} - -MACRO {tods} {"ACM Trans. Database Syst."} - -MACRO {tog} {"ACM Trans. Gr."} - -MACRO {toms} {"ACM Trans. Math. Softw."} - -MACRO {toois} {"ACM Trans. Office Inf. Syst."} - -MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} - -MACRO {tcs} {"Theoretical Comput. Sci."} - -READ - -FUNCTION {sortify} -{ purify$ - "l" change.case$ -} - -INTEGERS { len } - -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ -} - -FUNCTION {sort.format.names} -{ 's := - #1 'nameptr := - "" - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { nameptr #1 > - { " " * } - 'skip$ - if$ - s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := - nameptr numnames = t "others" = and - { "et al" * } - { t sortify * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {sort.format.title} -{ 't := - "A " #2 - "An " #3 - "The " #4 t chop.word - chop.word - chop.word - sortify - #1 global.max$ substring$ -} - -FUNCTION {author.sort} -{ author empty$ - { key empty$ - { "to sort, need author or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {author.editor.sort} -{ author empty$ - { editor empty$ - { key empty$ - { "to sort, need author, editor, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {author.organization.sort} -{ author empty$ - - { organization empty$ - { key empty$ - { "to sort, need author, organization, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { "The " #4 organization chop.word sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {editor.organization.sort} -{ editor empty$ - { organization empty$ - { key empty$ - { "to sort, need editor, organization, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { "The " #4 organization chop.word sortify } - if$ - } - { editor sort.format.names } - if$ -} - -FUNCTION {presort} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.sort - { type$ "proceedings" = - 'editor.organization.sort - { type$ "manual" = - 'author.organization.sort - 'author.sort - if$ - } - if$ - } - if$ - " " - * - year field.or.null sortify - * - " " - * - title field.or.null - sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -ITERATE {presort} - -SORT - -STRINGS { longest.label } - -INTEGERS { number.label longest.label.width } - -FUNCTION {initialize.longest.label} -{ "" 'longest.label := - #1 'number.label := - #0 'longest.label.width := -} - -FUNCTION {longest.label.pass} -{ number.label int.to.str$ 'label := - number.label #1 + 'number.label := - label width$ longest.label.width > - { label 'longest.label := - label width$ 'longest.label.width := - } - 'skip$ - if$ -} - -EXECUTE {initialize.longest.label} - -ITERATE {longest.label.pass} - -FUNCTION {begin.bib} -{ preamble$ empty$ - 'skip$ - { preamble$ write$ newline$ } - if$ - "\begin{thebibliography}{" longest.label * - "}\setlength{\itemsep}{-1ex}\small" * write$ newline$ -} - -EXECUTE {begin.bib} - -EXECUTE {init.state.consts} - -ITERATE {call.type$} - -FUNCTION {end.bib} -{ newline$ - "\end{thebibliography}" write$ newline$ -} - -EXECUTE {end.bib} - -% end of file latex8.bst -% --------------------------------------------------------------- - - - diff -Nru tor-0.2.1.30/doc/design-paper/Makefile.am tor-0.2.2.35/doc/design-paper/Makefile.am --- tor-0.2.1.30/doc/design-paper/Makefile.am 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/design-paper/Makefile.am 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ - -cell-struct.eps: cell-struct.fig - fig2dev -L eps $< $@ -interaction.eps: interaction.fig - fig2dev -L eps $< $@ -cell-struct.pdf: cell-struct.fig - fig2dev -L pdf $< $@ -interaction.pdf: interaction.fig - fig2dev -L pdf $< $@ - -tor-design.ps: cell-struct.eps interaction.eps tor-design.bib tor-design.tex usenix.sty latex8.bst - latex tor-design.tex - bibtex tor-design - latex tor-design.tex - latex tor-design.tex - dvips -o $@ tor-design.dvi - -tor-design.pdf: cell-struct.pdf interaction.pdf tor-design.bib tor-design.tex usenix.sty latex8.bst - pdflatex tor-design.tex - bibtex tor-design - pdflatex tor-design.tex - pdflatex tor-design.tex - -EXTRA_DIST = cell-struct.fig interaction.fig tor-design.bib usenix.sty latex8.bst tor-design.tex - -DISTCLEANFILES = cell-struct.eps interaction.eps cell-struct.pdf interaction.pdf tor-design.aux tor-design.bbl tor-design.blg tor-design.log tor-design.dvi tor-design.ps tor-design.pdf diff -Nru tor-0.2.1.30/doc/design-paper/Makefile.in tor-0.2.2.35/doc/design-paper/Makefile.in --- tor-0.2.1.30/doc/design-paper/Makefile.in 2011-02-23 08:25:53.000000000 +0000 +++ tor-0.2.2.35/doc/design-paper/Makefile.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,342 +0,0 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = doc/design-paper -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ - $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/orconfig.h -CONFIG_CLEAN_FILES = -SOURCES = -DIST_SOURCES = -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -BINDIR = @BINDIR@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CONFDIR = @CONFDIR@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LOCALSTATEDIR = @LOCALSTATEDIR@ -LOGFACILITY = @LOGFACILITY@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -TORGROUP = @TORGROUP@ -TORUSER = @TORUSER@ -TOR_CPPFLAGS_libevent = @TOR_CPPFLAGS_libevent@ -TOR_CPPFLAGS_openssl = @TOR_CPPFLAGS_openssl@ -TOR_CPPFLAGS_zlib = @TOR_CPPFLAGS_zlib@ -TOR_LDFLAGS_libevent = @TOR_LDFLAGS_libevent@ -TOR_LDFLAGS_openssl = @TOR_LDFLAGS_openssl@ -TOR_LDFLAGS_zlib = @TOR_LDFLAGS_zlib@ -TOR_LIBEVENT_LIBS = @TOR_LIBEVENT_LIBS@ -TOR_LIB_GDI = @TOR_LIB_GDI@ -TOR_LIB_WS32 = @TOR_LIB_WS32@ -TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -EXTRA_DIST = cell-struct.fig interaction.fig tor-design.bib usenix.sty latex8.bst tor-design.tex -DISTCLEANFILES = cell-struct.eps interaction.eps cell-struct.pdf interaction.pdf tor-design.aux tor-design.bbl tor-design.blg tor-design.log tor-design.dvi tor-design.ps tor-design.pdf -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/design-paper/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/design-paper/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -tags: TAGS -TAGS: - -ctags: CTAGS -CTAGS: - - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-exec-am: - -install-html: install-html-am - -install-info: install-info-am - -install-man: - -install-pdf: install-pdf-am - -install-ps: install-ps-am - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic distclean \ - distclean-generic distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am - - -cell-struct.eps: cell-struct.fig - fig2dev -L eps $< $@ -interaction.eps: interaction.fig - fig2dev -L eps $< $@ -cell-struct.pdf: cell-struct.fig - fig2dev -L pdf $< $@ -interaction.pdf: interaction.fig - fig2dev -L pdf $< $@ - -tor-design.ps: cell-struct.eps interaction.eps tor-design.bib tor-design.tex usenix.sty latex8.bst - latex tor-design.tex - bibtex tor-design - latex tor-design.tex - latex tor-design.tex - dvips -o $@ tor-design.dvi - -tor-design.pdf: cell-struct.pdf interaction.pdf tor-design.bib tor-design.tex usenix.sty latex8.bst - pdflatex tor-design.tex - bibtex tor-design - pdflatex tor-design.tex - pdflatex tor-design.tex -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru tor-0.2.1.30/doc/design-paper/tor-design.bib tor-0.2.2.35/doc/design-paper/tor-design.bib --- tor-0.2.1.30/doc/design-paper/tor-design.bib 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/design-paper/tor-design.bib 1970-01-01 00:00:00.000000000 +0000 @@ -1,1493 +0,0 @@ -% hs-attack -@inproceedings{hs-attack, - title = {Locating Hidden Servers}, - author = {Lasse {\O}verlier and Paul Syverson}, - booktitle = {Proceedings of the 2006 IEEE Symposium on Security and Privacy}, - year = {2006}, - month = {May}, - publisher = {IEEE CS}, -} - - -@TechReport{bauer:tr2007, - author = {Kevin Bauer and Damon McCoy and Dirk Grunwald and Tadayoshi Kohno and Douglas Sicker}, - title = {Low-Resource Routing Attacks Against Anonymous Systems}, - institution = {University of Colorado at Boulder}, - year = 2007, - number = {CU-CS-1025-07} -} - -@inproceedings{bauer:wpes2007, - title = {Low-Resource Routing Attacks Against Tor}, - author = {Kevin Bauer and Damon McCoy and Dirk Grunwald and Tadayoshi Kohno and Douglas Sicker}, - booktitle = {{Proceedings of the Workshop on Privacy in the Electronic Society (WPES 2007)}}, - year = {2007}, - month = {October}, - address = {Washington, DC, USA}, -} - -% fix me -@misc{tannenbaum96, - author = "Andrew Tannenbaum", - title = "Computer Networks", - year = "1996", - publisher = "Prentice Hall, 3rd edition", -} - -@article{ meadows96, - author = "Catherine Meadows", - title = "The {NRL} Protocol Analyzer: An Overview", - journal = "Journal of Logic Programming", - volume = "26", - number = "2", - pages = "113--131", - year = "1996", -} -@inproceedings{kesdogan:pet2002, - title = {Unobservable Surfing on the World Wide Web: Is Private Information Retrieval an - alternative to the MIX based Approach?}, - author = {Dogan Kesdogan and Mark Borning and Michael Schmeink}, - booktitle = {Privacy Enhancing Technologies (PET 2002)}, - year = {2002}, - month = {April}, - editor = {Roger Dingledine and Paul Syverson}, - publisher = {Springer-Verlag, LNCS 2482}, -} - -@inproceedings{statistical-disclosure, - title = {Statistical Disclosure Attacks}, - author = {George Danezis}, - booktitle = {Security and Privacy in the Age of Uncertainty ({SEC2003})}, - organization = {{IFIP TC11}}, - year = {2003}, - month = {May}, - address = {Athens}, - pages = {421--426}, - publisher = {Kluwer}, -} - -@inproceedings{limits-open, - title = {Limits of Anonymity in Open Environments}, - author = {Dogan Kesdogan and Dakshi Agrawal and Stefan Penz}, - booktitle = {Information Hiding Workshop (IH 2002)}, - year = {2002}, - month = {October}, - editor = {Fabien Petitcolas}, - publisher = {Springer-Verlag, LNCS 2578}, -} - -@inproceedings{isdn-mixes, - title = {{ISDN-mixes: Untraceable communication with very small bandwidth overhead}}, - author = {Andreas Pfitzmann and Birgit Pfitzmann and Michael Waidner}, - booktitle = {GI/ITG Conference on Communication in Distributed Systems}, - year = {1991}, - month = {February}, - pages = {451-463}, -} - - -@Article{jerichow-jsac98, - author = {Anja Jerichow and Jan M\"{u}ller and Andreas - Pfitzmann and Birgit Pfitzmann and Michael Waidner}, - title = {Real-Time Mixes: A Bandwidth-Efficient Anonymity Protocol}, - journal = {IEEE Journal on Selected Areas in Communications}, - year = 1998, - volume = 16, - number = 4, - pages = {495--509}, - month = {May} -} - -@inproceedings{tarzan:ccs02, - title = {Tarzan: A Peer-to-Peer Anonymizing Network Layer}, - author = {Michael J. Freedman and Robert Morris}, - booktitle = {9th {ACM} {C}onference on {C}omputer and {C}ommunications - {S}ecurity ({CCS 2002})}, - year = {2002}, - month = {November}, - address = {Washington, DC}, -} - -@inproceedings{cebolla, - title = {{Cebolla: Pragmatic IP Anonymity}}, - author = {Zach Brown}, - booktitle = {Ottawa Linux Symposium}, - year = {2002}, - month = {June}, -} - -@inproceedings{eax, - author = "M. Bellare and P. Rogaway and D. Wagner", - title = {The {EAX} Mode of Operation: A Two-Pass Authenticated-Encryption Scheme Optimized for Simplicity and Efficiency}, - booktitle = {Fast Software Encryption 2004}, - month = {February}, - year = {2004}, -} - -@misc{darkside, - title = {{The Dark Side of the Web: An Open Proxy's View}}, - author = {Vivek S. Pai and Limin Wang and KyoungSoo Park and Ruoming Pang and Larry Peterson}, - note = {\newline \url{http://codeen.cs.princeton.edu/}}, -} -% note = {Submitted to HotNets-II. \url{http://codeen.cs.princeton.edu/}}, - -@Misc{anonymizer, - key = {anonymizer}, - title = {The {Anonymizer}}, - note = {\url{http://anonymizer.com/}} -} - -@Misc{privoxy, - key = {privoxy}, - title = {{Privoxy}}, - note = {\url{http://www.privoxy.org/}} -} - -@Misc{i2p, - key = {i2p}, - title = {{I2P}}, - note = {\url{http://www.i2p.net/}} -} - -@Misc{nym, - author = {Jason Holt}, - title = {nym: practical pseudonymity for anonymous networks}, - note = {Paper and source code at \url{http://www.lunkwill.org/src/nym/}} -} - -@InProceedings{nymble, - author = {Peter C. Johnson and Apu Kapadia and Patrick P. Tsang and Sean W. Smith}, - title = {Nymble: Anonymous {IP}-address Blocking}, - booktitle = {Privacy Enhancing Technologies (PET 2007)}, - year = 2007, - publisher = {Springer-Verlag, LNCS 4776} -} - -@inproceedings{anonnet, - title = {{Analysis of an Anonymity Network for Web Browsing}}, - author = {Marc Rennhard and Sandro Rafaeli and Laurent Mathy and Bernhard Plattner and - David Hutchison}, - booktitle = {{IEEE 7th Intl. Workshop on Enterprise Security (WET ICE - 2002)}}, - year = {2002}, - month = {June}, - address = {Pittsburgh, USA}, -} -% pages = {49--54}, - -@inproceedings{econymics, - title = {On the Economics of Anonymity}, - author = {Alessandro Acquisti and Roger Dingledine and Paul Syverson}, - booktitle = {Financial Cryptography}, - year = {2003}, - editor = {Rebecca N. Wright}, - publisher = {Springer-Verlag, LNCS 2742}, -} - -@inproceedings{defensive-dropping, - title = {Timing Analysis in Low-Latency Mix-Based Systems}, - author = {Brian N. Levine and Michael K. Reiter and Chenxi Wang and Matthew Wright}, - booktitle = {Financial Cryptography}, - year = {2004}, - editor = {Ari Juels}, - publisher = {Springer-Verlag, LNCS (forthcoming)}, -} - -@inproceedings{morphmix:fc04, - title = {Practical Anonymity for the Masses with MorphMix}, - author = {Marc Rennhard and Bernhard Plattner}, - booktitle = {Financial Cryptography}, - year = {2004}, - editor = {Ari Juels}, - publisher = {Springer-Verlag, LNCS (forthcoming)}, -} - -@inproceedings{eternity, - title = {The Eternity Service}, - author = {Ross Anderson}, - booktitle = {Pragocrypt '96}, - year = {1996}, -} - %note = {\url{http://www.cl.cam.ac.uk/users/rja14/eternity/eternity.html}}, - - -@inproceedings{minion-design, - title = {Mixminion: Design of a Type {III} Anonymous Remailer Protocol}, - author = {George Danezis and Roger Dingledine and Nick Mathewson}, - booktitle = {2003 IEEE Symposium on Security and Privacy}, - year = {2003}, - month = {May}, - publisher = {IEEE CS}, - pages = {2--15}, -} - %note = {\url{http://mixminion.net/minion-design.pdf}}, - -@inproceedings{ rao-pseudonymity, - author = "Josyula R. Rao and Pankaj Rohatgi", - title = "Can Pseudonymity Really Guarantee Privacy?", - booktitle = "Proceedings of the Ninth USENIX Security Symposium", - year = {2000}, - month = Aug, - publisher = {USENIX}, - pages = "85--96", -} - %note = {\url{http://www.usenix.org/publications/library/proceedings/sec2000/ -%full_papers/rao/rao.pdf}}, - -@InProceedings{pfitzmann90how, - author = "Birgit Pfitzmann and Andreas Pfitzmann", - title = "How to Break the Direct {RSA}-Implementation of {MIXes}", - booktitle = {Eurocrypt 89}, - publisher = {Springer-Verlag, LNCS 434}, - year = {1990}, - note = {\url{http://citeseer.nj.nec.com/pfitzmann90how.html}}, -} - -@Misc{tor-spec, - author = {Roger Dingledine and Nick Mathewson}, - title = {Tor Protocol Specifications}, - note = {\url{https://www.torproject.org/svn/trunk/doc/tor-spec.txt}}, -} - -@Misc{incentives-txt, - author = {Roger Dingledine and Nick Mathewson}, - title = {Tor Incentives Design Brainstorms}, - note = {\url{https://www.torproject.org/svn/trunk/doc/incentives.txt}}, -} - -@InProceedings{BM:mixencrypt, - author = {M{\"o}ller, Bodo}, - title = {Provably Secure Public-Key Encryption for Length-Preserving Chaumian Mixes}, - booktitle = {{CT-RSA} 2003}, - publisher = {Springer-Verlag, LNCS 2612}, - year = 2003, -} - -@InProceedings{back01, - author = {Adam Back and Ulf M\"oller and Anton Stiglic}, - title = {Traffic Analysis Attacks and Trade-Offs in Anonymity Providing Systems}, - booktitle = {Information Hiding (IH 2001)}, - pages = {245--257}, - year = 2001, - editor = {Ira S. Moskowitz}, - publisher = {Springer-Verlag, LNCS 2137}, -} - %note = {\newline \url{http://www.cypherspace.org/adam/pubs/traffic.pdf}}, - -@InProceedings{rackoff93cryptographic, - author = {Charles Rackoff and Daniel R. Simon}, - title = {Cryptographic Defense Against Traffic Analysis}, - booktitle = {{ACM} Symposium on Theory of Computing}, - pages = {672--681}, - year = {1993}, -} - %note = {\url{http://research.microsoft.com/crypto/dansimon/me.htm}}, - -@InProceedings{freehaven-berk, - author = {Roger Dingledine and Michael J. Freedman and David Molnar}, - title = {The Free Haven Project: Distributed Anonymous Storage Service}, - booktitle = {Designing Privacy Enhancing Technologies: Workshop - on Design Issue in Anonymity and Unobservability}, - year = 2000, - month = {July}, - editor = {H. Federrath}, - publisher = {Springer-Verlag, LNCS 2009}, -} - - @InProceedings{move-ndss05, - author = {Angelos Stavrou and Angelos D. Keromytis and Jason Nieh and Vishal Misra and Dan Rubenstein}, - title = {MOVE: An End-to-End Solution To Network Denial of Service}, - booktitle = {{ISOC Network and Distributed System Security Symposium (NDSS05)}}, - year = 2005, - month = {February}, - publisher = {Internet Society} -} - -%note = {\url{http://freehaven.net/papers.html}}, - - - - -@InProceedings{raymond00, - author = {J. F. Raymond}, - title = {{Traffic Analysis: Protocols, Attacks, Design Issues, - and Open Problems}}, - booktitle = {Designing Privacy Enhancing Technologies: Workshop - on Design Issue in Anonymity and Unobservability}, - year = 2000, - month = {July}, - pages = {10-29}, - editor = {H. Federrath}, - publisher = {Springer-Verlag, LNCS 2009}, -} - -@InProceedings{sybil, - author = "John Douceur", - title = {{The Sybil Attack}}, - booktitle = "Proceedings of the 1st International Peer To Peer Systems Workshop (IPTPS)", - month = Mar, - year = 2002, -} - - -@InCollection{price-privacy, - author = {Paul Syverson and Adam Shostack}, - editor = {L. Jean Camp and Stephen Lewis}, - title = {What Price Privacy? (and why identity theft is about neither identity nor theft)}, - booktitle = {Economics of Information Security}, - chapter = 10, - publisher = {Kluwer}, - year = 2004, - pages = {129--142} -} - - -@InProceedings{trickle02, - author = {Andrei Serjantov and Roger Dingledine and Paul Syverson}, - title = {From a Trickle to a Flood: Active Attacks on Several - Mix Types}, - booktitle = {Information Hiding (IH 2002)}, - year = {2002}, - editor = {Fabien Petitcolas}, - publisher = {Springer-Verlag, LNCS 2578}, -} - -@InProceedings{langos02, - author = {Oliver Berthold and Heinrich Langos}, - title = {Dummy Traffic Against Long Term Intersection Attacks}, - booktitle = {Privacy Enhancing Technologies (PET 2002)}, - year = {2002}, - editor = {Roger Dingledine and Paul Syverson}, - publisher = {Springer-Verlag, LNCS 2482} -} - - -@InProceedings{hintz-pet02, - author = {Andrew Hintz}, - title = {Fingerprinting Websites Using Traffic Analysis}, - booktitle = {Privacy Enhancing Technologies (PET 2002)}, - pages = {171--178}, - year = 2002, - editor = {Roger Dingledine and Paul Syverson}, - publisher = {Springer-Verlag, LNCS 2482} -} - -@InProceedings{or-discex00, - author = {Paul Syverson and Michael Reed and David Goldschlag}, - title = {{O}nion {R}outing Access Configurations}, - booktitle = {DARPA Information Survivability Conference and - Exposition (DISCEX 2000)}, - year = {2000}, - publisher = {IEEE CS Press}, - pages = {34--40}, - volume = {1}, -} - %note = {\newline \url{http://www.onion-router.net/Publications.html}}, - -@Inproceedings{or-pet00, - title = {{Towards an Analysis of Onion Routing Security}}, - author = {Paul Syverson and Gene Tsudik and Michael Reed and - Carl Landwehr}, - booktitle = {Designing Privacy Enhancing Technologies: Workshop - on Design Issue in Anonymity and Unobservability}, - year = 2000, - month = {July}, - pages = {96--114}, - editor = {H. Federrath}, - publisher = {Springer-Verlag, LNCS 2009}, -} - %note = {\url{http://www.onion-router.net/Publications/WDIAU-2000.ps.gz}}, - -@Inproceedings{freenet-pets00, - title = {Freenet: A Distributed Anonymous Information Storage - and Retrieval System}, - author = {Ian Clarke and Oskar Sandberg and Brandon Wiley and - Theodore W. Hong}, - booktitle = {Designing Privacy Enhancing Technologies: Workshop - on Design Issue in Anonymity and Unobservability}, - year = 2000, - month = {July}, - pages = {46--66}, - editor = {H. Federrath}, - publisher = {Springer-Verlag, LNCS 2009}, -} - %note = {\url{http://citeseer.nj.nec.com/clarke00freenet.html}}, - -@InProceedings{or-ih96, - author = {David M. Goldschlag and Michael G. Reed and Paul - F. Syverson}, - title = {Hiding Routing Information}, - booktitle = {Information Hiding, First International Workshop}, - pages = {137--150}, - year = 1996, - editor = {R. Anderson}, - month = {May}, - publisher = {Springer-Verlag, LNCS 1174}, -} - -@InProceedings{federrath-ih96, - author = {Hannes Federrath and Anja Jerichow and Andreas Pfitzmann}, - title = {{MIXes} in Mobile Communication Systems: Location - Management with Privacy}, - booktitle = {Information Hiding, First International Workshop}, - pages = {121--135}, - year = 1996, - editor = {R. Anderson}, - month = {May}, - publisher = {Springer-Verlag, LNCS 1174}, -} - - -@InProceedings{reed-protocols97, - author = {Michael G. Reed and Paul F. Syverson and David - M. Goldschlag}, - title = {Protocols Using Anonymous Connections: Mobile Applications}, - booktitle = {Security Protocols: 5th International Workshop}, - pages = {13--23}, - year = 1997, - editor = {Bruce Christianson and Bruno Crispo and Mark Lomas - and Michael Roe}, - month = {April}, - publisher = {Springer-Verlag, LNCS 1361} -} - - - -@Article{or-jsac98, - author = {Michael G. Reed and Paul F. Syverson and David - M. Goldschlag}, - title = {Anonymous Connections and Onion Routing}, - journal = {IEEE Journal on Selected Areas in Communications}, - year = 1998, - volume = 16, - number = 4, - pages = {482--494}, - month = {May}, -} - %note = {\url{http://www.onion-router.net/Publications/JSAC-1998.ps.gz}} - -@Misc{TLS, - author = {T. Dierks and C. Allen}, - title = {The {TLS} {P}rotocol --- {V}ersion 1.0}, - howpublished = {IETF RFC 2246}, - month = {January}, - year = {1999}, -} -%note = {\url{http://www.rfc-editor.org/rfc/rfc2246.txt}}, - -@Misc{SMTP, - author = {J. Postel}, - title = {Simple {M}ail {T}ransfer {P}rotocol}, - howpublished = {IETF RFC 2821 (also STD0010)}, - month = {April}, - year = {2001}, - note = {\url{http://www.rfc-editor.org/rfc/rfc2821.txt}}, -} - -@Misc{IMAP, - author = {M. Crispin}, - title = {Internet {M}essage {A}ccess {P}rotocol --- {V}ersion 4rev1}, - howpublished = {IETF RFC 2060}, - month = {December}, - year = {1996}, - note = {\url{http://www.rfc-editor.org/rfc/rfc2060.txt}}, -} - -@misc{pipenet, - title = {PipeNet 1.1}, - author = {Wei Dai}, - year = 1996, - month = {August}, - howpublished = {Usenet post}, - note = {\url{http://www.eskimo.com/~weidai/pipenet.txt} First mentioned - in a post to the cypherpunks list, Feb.\ 1995.}, -} - - -@Misc{POP3, - author = {J. Myers and M. Rose}, - title = {Post {O}ffice {P}rotocol --- {V}ersion 3}, - howpublished = {IETF RFC 1939 (also STD0053)}, - month = {May}, - year = {1996}, - note = {\url{http://www.rfc-editor.org/rfc/rfc1939.txt}}, -} - - -@InProceedings{shuffle, - author = {C. Andrew Neff}, - title = {A Verifiable Secret Shuffle and its Application to E-Voting}, - booktitle = {8th ACM Conference on Computer and Communications - Security (CCS-8)}, - pages = {116--125}, - year = 2001, - editor = {P. Samarati}, - month = {November}, - publisher = {ACM Press}, -} - %note = {\url{http://www.votehere.net/ada_compliant/ourtechnology/ - % technicaldocs/shuffle.pdf}}, - -@InProceedings{dolev91, - author = {Danny Dolev and Cynthia Dwork and Moni Naor}, - title = {Non-Malleable Cryptography}, - booktitle = {23rd ACM Symposium on the Theory of Computing (STOC)}, - pages = {542--552}, - year = 1991, - note = {Updated version at - \url{http://citeseer.nj.nec.com/dolev00nonmalleable.html}}, -} - -@TechReport{rsw96, - author = {Ronald L. Rivest and Adi Shamir and David A. Wagner}, - title = {Time-lock puzzles and timed-release Crypto}, - year = 1996, - type = {MIT LCS technical memo}, - number = {MIT/LCS/TR-684}, - month = {February}, - note = {\newline \url{http://citeseer.nj.nec.com/rivest96timelock.html}}, -} - -@InProceedings{web-mix, - author = {Oliver Berthold and Hannes Federrath and Stefan K\"opsell}, - title = {Web {MIX}es: A system for anonymous and unobservable - {I}nternet access}, - booktitle = {Designing Privacy Enhancing Technologies: Workshop - on Design Issue in Anonymity and Unobservability}, - editor = {H. Federrath}, - publisher = {Springer-Verlag, LNCS 2009}, - year = {2000}, -} -% pages = {115--129}, - -@InProceedings{disad-free-routes, - author = {Oliver Berthold and Andreas Pfitzmann and Ronny Standtke}, - title = {The disadvantages of free {MIX} routes and how to overcome - them}, - booktitle = {Designing Privacy Enhancing Technologies: Workshop - on Design Issue in Anonymity and Unobservability}, - pages = {30--45}, - year = 2000, - editor = {H. Federrath}, - publisher = {Springer-Verlag, LNCS 2009}, -} - %note = {\url{http://www.tik.ee.ethz.ch/~weiler/lehre/netsec/Unterlagen/anon/ - % disadvantages_berthold.pdf}}, - -@InProceedings{boneh00, - author = {Dan Boneh and Moni Naor}, - title = {Timed Commitments}, - booktitle = {Advances in Cryptology -- {CRYPTO} 2000}, - pages = {236--254}, - year = 2000, - publisher = {Springer-Verlag, LNCS 1880}, - note = {\newline \url{http://crypto.stanford.edu/~dabo/abstracts/timedcommit.html}}, -} - -@InProceedings{goldschlag98, - author = {David M. Goldschlag and Stuart G. Stubblebine}, - title = {Publicly Verifiable Lotteries: Applications of - Delaying Functions}, - booktitle = {Financial Cryptography}, - pages = {214--226}, - year = 1998, - publisher = {Springer-Verlag, LNCS 1465}, - note = {\newline \url{http://citeseer.nj.nec.com/goldschlag98publicly.html}}, -} - -@InProceedings{syverson98, - author = {Paul Syverson}, - title = {Weakly Secret Bit Commitment: Applications to - Lotteries and Fair Exchange}, - booktitle = {Computer Security Foundations Workshop (CSFW11)}, - pages = {2--13}, - year = 1998, - address = {Rockport Massachusetts}, - month = {June}, - publisher = {IEEE CS Press}, - note = {\newline \url{http://chacs.nrl.navy.mil/publications/CHACS/1998/}}, -} - -@Misc{shoup-iso, - author = {Victor Shoup}, - title = {A Proposal for an {ISO} {S}tandard for Public Key Encryption (version 2.1)}, - note = {Revised December 20, 2001. \url{http://www.shoup.net/papers/}}, -} - -@Misc{shoup-oaep, - author = {Victor Shoup}, - title = {{OAEP} Reconsidered}, - howpublished = {{IACR} e-print 2000/060}, - note = {\newline \url{http://eprint.iacr.org/2000/060/}}, -} - -@Misc{oaep-still-alive, - author = {E. Fujisaki and D. Pointcheval and T. Okamoto and J. Stern}, - title = {{RSA}-{OAEP} is Still Alive!}, - howpublished = {{IACR} e-print 2000/061}, - note = {\newline \url{http://eprint.iacr.org/2000/061/}}, -} - -@misc{echolot, - author = {Peter Palfrader}, - title = {Echolot: a pinger for anonymous remailers}, - note = {\url{http://www.palfrader.org/echolot/}}, -} - -@Misc{mixmaster-attacks, - author = {Lance Cottrell}, - title = {Mixmaster and Remailer Attacks}, - note = {\url{http://www.obscura.com/~loki/remailer/remailer-essay.html}}, -} - -@Misc{mixmaster-spec, - author = {Ulf M{\"o}ller and Lance Cottrell and Peter - Palfrader and Len Sassaman}, - title = {Mixmaster {P}rotocol --- {V}ersion 2}, - year = {2003}, - month = {July}, - howpublished = {Draft}, - note = {\url{http://www.abditum.com/mixmaster-spec.txt}}, -} - -@InProceedings{puzzles-tls, - author = "Drew Dean and Adam Stubblefield", - title = {{Using Client Puzzles to Protect TLS}}, - booktitle = "Proceedings of the 10th USENIX Security Symposium", - year = {2001}, - month = Aug, - publisher = {USENIX}, -} - -@InProceedings{breadpudding, - author = {Markus Jakobsson and Ari Juels}, - title = {Proofs of Work and Bread Pudding Protocols}, - booktitle = {Proceedings of the IFIP TC6 and TC11 Joint Working - Conference on Communications and Multimedia Security - (CMS '99)}, - year = 1999, - month = {September}, - publisher = {Kluwer} -} - -@Misc{hashcash, - author = {Adam Back}, - title = {Hash cash}, - note = {\newline \url{http://www.cypherspace.org/~adam/hashcash/}}, -} - -@InProceedings{oreilly-acc, - author = {Roger Dingledine and Michael J. Freedman and David Molnar}, - title = {Accountability}, - booktitle = {Peer-to-peer: Harnessing the Benefits of a Disruptive - Technology}, - year = {2001}, - publisher = {O'Reilly and Associates}, -} - - -@InProceedings{han, - author = {Yongfei Han}, - title = {Investigation of non-repudiation protocols}, - booktitle = {ACISP '96}, - year = 1996, - publisher = {Springer-Verlag}, -} - - -@Misc{socks5, - key = {socks5}, - title = {{SOCKS} {P}rotocol {V}ersion 5}, - howpublished= {IETF RFC 1928}, - month = {March}, - year = 1996, - note = {\url{http://www.ietf.org/rfc/rfc1928.txt}} -} - -@InProceedings{abe, - author = {Masayuki Abe}, - title = {Universally Verifiable {MIX} With Verification Work Independent of - The Number of {MIX} Servers}, - booktitle = {{EUROCRYPT} 1998}, - year = {1998}, - publisher = {Springer-Verlag, LNCS 1403}, -} - -@InProceedings{desmedt, - author = {Yvo Desmedt and Kaoru Kurosawa}, - title = {How To Break a Practical {MIX} and Design a New One}, - booktitle = {{EUROCRYPT} 2000}, - year = {2000}, - publisher = {Springer-Verlag, LNCS 1803}, - note = {\url{http://citeseer.nj.nec.com/447709.html}}, -} - -@InProceedings{mitkuro, - author = {M. Mitomo and K. Kurosawa}, - title = {{Attack for Flash MIX}}, - booktitle = {{ASIACRYPT} 2000}, - year = {2000}, - publisher = {Springer-Verlag, LNCS 1976}, - note = {\newline \url{http://citeseer.nj.nec.com/450148.html}}, -} - -@InProceedings{hybrid-mix, - author = {M. Ohkubo and M. Abe}, - title = {A {L}ength-{I}nvariant {H}ybrid {MIX}}, - booktitle = {Advances in Cryptology - {ASIACRYPT} 2000}, - year = {2000}, - publisher = {Springer-Verlag, LNCS 1976}, -} - -@InProceedings{PShuffle, - author = {Jun Furukawa and Kazue Sako}, - title = {An Efficient Scheme for Proving a Shuffle}, - editor = {Joe Kilian}, - booktitle = {CRYPTO 2001}, - year = {2001}, - publisher = {Springer-Verlag, LNCS 2139}, -} - - -@InProceedings{jakobsson-optimally, - author = "Markus Jakobsson and Ari Juels", - title = "An Optimally Robust Hybrid Mix Network (Extended Abstract)", - booktitle = {Principles of Distributed Computing - {PODC} '01}, - year = "2001", - publisher = {ACM Press}, - note = {\url{http://citeseer.nj.nec.com/492015.html}}, -} - -@InProceedings{kesdogan, - author = {D. Kesdogan and M. Egner and T. B\"uschkes}, - title = {Stop-and-Go {MIX}es Providing Probabilistic Anonymity in an Open - System}, - booktitle = {Information Hiding (IH 1998)}, - year = {1998}, - publisher = {Springer-Verlag, LNCS 1525}, -} - %note = {\url{http://www.cl.cam.ac.uk/~fapp2/ihw98/ihw98-sgmix.pdf}}, - -@InProceedings{socks4, - author = {David Koblas and Michelle R. Koblas}, - title = {{SOCKS}}, - booktitle = {UNIX Security III Symposium (1992 USENIX Security - Symposium)}, - pages = {77--83}, - year = 1992, - publisher = {USENIX}, -} - -@InProceedings{flash-mix, - author = {Markus Jakobsson}, - title = {Flash {M}ixing}, - booktitle = {Principles of Distributed Computing - {PODC} '99}, - year = {1999}, - publisher = {ACM Press}, - note = {\newline \url{http://citeseer.nj.nec.com/jakobsson99flash.html}}, -} - -@InProceedings{SK, - author = {Joe Kilian and Kazue Sako}, - title = {Receipt-Free {MIX}-Type Voting Scheme - A Practical Solution to - the Implementation of a Voting Booth}, - booktitle = {EUROCRYPT '95}, - year = {1995}, - publisher = {Springer-Verlag}, -} - -@InProceedings{OAEP, - author = {M. Bellare and P. Rogaway}, - year = {1994}, - booktitle = {EUROCRYPT '94}, - title = {Optimal {A}symmetric {E}ncryption {P}adding : How To Encrypt With - {RSA}}, - publisher = {Springer-Verlag}, - note = {\newline \url{http://www-cse.ucsd.edu/users/mihir/papers/oaep.html}}, -} -@inproceedings{babel, - title = {Mixing {E}-mail With {B}abel}, - author = {Ceki G\"ulc\"u and Gene Tsudik}, - booktitle = {{Network and Distributed Security Symposium (NDSS 96)}}, - year = 1996, - month = {February}, - pages = {2--16}, - publisher = {IEEE}, -} - %note = {\url{http://citeseer.nj.nec.com/2254.html}}, - -@Misc{rprocess, - author = {RProcess}, - title = {Selective Denial of Service Attacks}, - note = {\newline \url{http://www.eff.org/pub/Privacy/Anonymity/1999\_09\_DoS\_remail\_vuln.html}}, -} - -@Article{remailer-history, - author = {Sameer Parekh}, - title = {Prospects for Remailers}, - journal = {First Monday}, - volume = {1}, - number = {2}, - month = {August}, - year = {1996}, - note = {\url{http://www.firstmonday.dk/issues/issue2/remailers/}}, -} - -@Article{chaum-mix, - author = {David Chaum}, - title = {Untraceable electronic mail, return addresses, and digital pseudo-nyms}, - journal = {Communications of the ACM}, - year = {1981}, - volume = {4}, - number = {2}, - month = {February}, -} - %note = {\url{http://www.eskimo.com/~weidai/mix-net.txt}}, - -@InProceedings{nym-alias-net, - author = {David Mazi\`{e}res and M. Frans Kaashoek}, - title = {{The Design, Implementation and Operation of an Email - Pseudonym Server}}, - booktitle = {$5^{th}$ ACM Conference on Computer and - Communications Security (CCS'98)}, - year = 1998, - publisher = {ACM Press}, -} - %note = {\newline \url{http://www.scs.cs.nyu.edu/~dm/}}, - -@InProceedings{tangler, - author = {Marc Waldman and David Mazi\`{e}res}, - title = {Tangler: A Censorship-Resistant Publishing System - Based on Document Entanglements}, - booktitle = {$8^{th}$ ACM Conference on Computer and - Communications Security (CCS-8)}, - pages = {86--135}, - year = 2001, - publisher = {ACM Press}, -} - %note = {\url{http://www.scs.cs.nyu.edu/~dm/}} - -@misc{neochaum, - author = {Tim May}, - title = {Payment mixes for anonymity}, - howpublished = {E-mail archived at - \url{http://\newline www.inet-one.com/cypherpunks/dir.2000.02.28-2000.03.05/msg00334.html}}, -} - -@misc{helsingius, - author = {J. Helsingius}, - title = {{\tt anon.penet.fi} press release}, - note = {\newline \url{http://www.penet.fi/press-english.html}}, -} - -@InProceedings{garay97secure, - author = {J. Garay and R. Gennaro and C. Jutla and T. Rabin}, - title = {Secure distributed storage and retrieval}, - booktitle = {11th International Workshop, WDAG '97}, - pages = {275--289}, - year = {1997}, - publisher = {Springer-Verlag, LNCS 1320}, - note = {\newline \url{http://citeseer.nj.nec.com/garay97secure.html}}, -} - -@InProceedings{PIK, - author = {C. Park and K. Itoh and K. Kurosawa}, - title = {Efficient anonymous channel and all/nothing election scheme}, - booktitle = {Advances in Cryptology -- {EUROCRYPT} '93}, - pages = {248--259}, - publisher = {Springer-Verlag, LNCS 765}, -} - -@Misc{pgpfaq, - key = {PGP}, - title = {{PGP} {FAQ}}, - note = {\newline \url{http://www.faqs.org/faqs/pgp-faq/}}, -} - -@Article{riordan-schneier, - author = {James Riordan and Bruce Schneier}, - title = {A Certified E-mail Protocol with No Trusted Third Party}, - journal = {13th Annual Computer Security Applications Conference}, - month = {December}, - year = {1998}, - note = {\newline \url{http://www.counterpane.com/certified-email.html}}, -} - - -@Article{crowds-tissec, - author = {Michael K. Reiter and Aviel D. Rubin}, - title = {Crowds: Anonymity for Web Transactions}, - journal = {ACM TISSEC}, - year = 1998, - volume = 1, - number = 1, - pages = {66--92}, - month = {June}, -} - %note = {\url{http://citeseer.nj.nec.com/284739.html}} - -@Article{crowds-dimacs, - author = {Michael K. Reiter and Aviel D. Rubin}, - title = {Crowds: Anonymity for Web Transactions}, - journal = {{DIMACS} Technical Report (Revised)}, - volume = {97}, - number = {15}, - month = {August}, - year = {1997}, -} - -@Misc{advogato, - author = {Raph Levien}, - title = {Advogato's Trust Metric}, - note = {\newline \url{http://www.advogato.org/trust-metric.html}}, -} - -@InProceedings{publius, - author = {Marc Waldman and Aviel Rubin and Lorrie Cranor}, - title = {Publius: {A} robust, tamper-evident, censorship-resistant and - source-anonymous web publishing system}, - booktitle = {Proc. 9th USENIX Security Symposium}, - pages = {59--72}, - year = {2000}, - month = {August}, -} - %note = {\newline \url{http://citeseer.nj.nec.com/waldman00publius.html}}, - -@Misc{freedom-nyms, - author = {Russell Samuels}, - title = {Untraceable Nym Creation on the {F}reedom {N}etwork}, - year = {1999}, - month = {November}, - day = {21}, - note = {\newline \url{http://www.freedom.net/products/whitepapers/white11.html}}, -} - -@techreport{freedom2-arch, - title = {Freedom Systems 2.0 Architecture}, - author = {Philippe Boucher and Adam Shostack and Ian Goldberg}, - institution = {Zero Knowledge Systems, {Inc.}}, - year = {2000}, - month = {December}, - type = {White Paper}, - day = {18}, -} - -@techreport{freedom21-security, - title = {Freedom Systems 2.1 Security Issues and Analysis}, - author = {Adam Back and Ian Goldberg and Adam Shostack}, - institution = {Zero Knowledge Systems, {Inc.}}, - year = {2001}, - month = {May}, - type = {White Paper}, -} - -@inproceedings{cfs:sosp01, - title = {Wide-area cooperative storage with {CFS}}, - author = {Frank Dabek and M. Frans Kaashoek and David Karger and Robert Morris and Ion Stoica}, - booktitle = {18th {ACM} {S}ymposium on {O}perating {S}ystems {P}rinciples ({SOSP} '01)}, - year = {2001}, - month = {October}, - address = {Chateau Lake Louise, Banff, Canada}, -} - -@inproceedings{SS03, - title = {Passive Attack Analysis for Connection-Based Anonymity Systems}, - author = {Andrei Serjantov and Peter Sewell}, - booktitle = {Computer Security -- ESORICS 2003}, - publisher = {Springer-Verlag, LNCS 2808}, - year = {2003}, - month = {October}, -} - %note = {\url{http://www.cl.cam.ac.uk/users/aas23/papers_aas/conn_sys.ps}}, - -@Misc{pk-relations, - author = {M. Bellare and A. Desai and D. Pointcheval and P. Rogaway}, - title = {Relations Among Notions of Security for Public-Key Encryption - Schemes}, - howpublished = { - Extended abstract in {\em Advances in Cryptology - CRYPTO '98}, LNCS Vol. 1462. - Springer-Verlag, 1998. - Full version available from \newline \url{http://www-cse.ucsd.edu/users/mihir/}}, -} - - -@InProceedings{mix-acc, - author = {Roger Dingledine and Michael J. Freedman and David - Hopwood and David Molnar}, - title = {{A Reputation System to Increase MIX-net - Reliability}}, - booktitle = {Information Hiding (IH 2001)}, - pages = {126--141}, - year = 2001, - editor = {Ira S. Moskowitz}, - publisher = {Springer-Verlag, LNCS 2137}, -} - %note = {\url{http://www.freehaven.net/papers.html}}, - -@InProceedings{casc-rep, - author = {Roger Dingledine and Paul Syverson}, - title = {{Reliable MIX Cascade Networks through Reputation}}, - booktitle = {Financial Cryptography}, - year = 2002, - editor = {Matt Blaze}, - publisher = {Springer-Verlag, LNCS 2357}, -} - %note = {\newline \url{http://www.freehaven.net/papers.html}}, - -@InProceedings{zhou96certified, - author = {Zhou and Gollmann}, - title = {Certified Electronic Mail}, - booktitle = {{ESORICS: European Symposium on Research in Computer - Security}}, - publisher = {Springer-Verlag, LNCS 1146}, - year = {1996}, - note = {\newline \url{http://citeseer.nj.nec.com/zhou96certified.html}}, -} - -@Misc{realtime-mix, - author = {Anja Jerichow and Jan M\"uller and Andreas Pfitzmann and - Birgit Pfitzmann and Michael Waidner}, - title = {{Real-Time MIXes: A Bandwidth-Efficient Anonymity Protocol}}, - howpublished = {IEEE Journal on Selected Areas in Communications, 1998.}, - note = {\url{http://www.zurich.ibm.com/security/publications/1998.html}}, -} - -@InProceedings{danezis:pet2003, - author = {George Danezis}, - title = {Mix-networks with Restricted Routes}, - booktitle = {Privacy Enhancing Technologies (PET 2003)}, - year = 2003, - editor = {Roger Dingledine}, - publisher = {Springer-Verlag LNCS 2760} -} - -@InProceedings{gap-pets03, - author = {Krista Bennett and Christian Grothoff}, - title = {{GAP} -- practical anonymous networking}, - booktitle = {Privacy Enhancing Technologies (PET 2003)}, - year = 2003, - editor = {Roger Dingledine}, - publisher = {Springer-Verlag LNCS 2760} -} - -@Article{hordes-jcs, - author = {Brian Neal Levine and Clay Shields}, - title = {Hordes: A Multicast-Based Protocol for Anonymity}, - journal = {Journal of Computer Security}, - year = 2002, - volume = 10, - number = 3, - pages = {213--240} -} - -@TechReport{herbivore, - author = {Sharad Goel and Mark Robson and Milo Polte and Emin G\"{u}n Sirer}, - title = {Herbivore: A Scalable and Efficient Protocol for Anonymous Communication}, - institution = {Cornell University Computing and Information Science}, - year = 2003, - type = {Technical Report}, - number = {TR2003-1890}, - month = {February} -} - -@InProceedings{p5, - author = {Rob Sherwood and Bobby Bhattacharjee and Aravind Srinivasan}, - title = {$P^5$: A Protocol for Scalable Anonymous Communication}, - booktitle = {IEEE Symposium on Security and Privacy}, - pages = {58--70}, - year = 2002, - publisher = {IEEE CS} -} - -@phdthesis{ian-thesis, - title = {A Pseudonymous Communications Infrastructure for the Internet}, - author = {Ian Goldberg}, - school = {UC Berkeley}, - year = {2000}, - month = {Dec}, -} - -@Article{taz, - author = {Ian Goldberg and David Wagner}, - title = {TAZ Servers and the Rewebber Network: Enabling - Anonymous Publishing on the World Wide Web}, - journal = {First Monday}, - year = 1998, - volume = 3, - number = 4, - month = {August}, - note = {\url{http://www.firstmonday.dk/issues/issue3_4/goldberg/}} -} - -@Misc{tcp-over-tcp-is-bad, - key = {tcp-over-tcp-is-bad}, - title = {Why {TCP} Over {TCP} Is A Bad Idea}, - author = {Olaf Titz}, - note = {\url{http://sites.inka.de/sites/bigred/devel/tcp-tcp.html}} -} - -@inproceedings{wright02, - title = {An Analysis of the Degradation of Anonymous Protocols}, - author = {Matthew Wright and Micah Adler and Brian Neil Levine and Clay Shields}, - booktitle = {{Network and Distributed Security Symposium (NDSS 02)}}, - year = {2002}, - month = {February}, - publisher = {IEEE}, -} - -@inproceedings{wright03, - title = {Defending Anonymous Communication Against Passive Logging Attacks}, - author = {Matthew Wright and Micah Adler and Brian Neil Levine and Clay Shields}, - booktitle = {IEEE Symposium on Security and Privacy}, - pages= {28--41}, - year = {2003}, - month = {May}, - publisher = {IEEE CS}, -} - - -@InProceedings{attack-tor-oak05, - author = {Steven J. Murdoch and George Danezis}, - title = {Low-cost Traffic Analysis of {T}or}, - booktitle = {IEEE Symposium on Security and Privacy}, - year = 2005, - month = {May}, - publisher = {IEEE CS} -} - -@Misc{jap-backdoor, - author={{The AN.ON Project}}, - howpublished={Press release}, - year={2003}, - month={September}, - title={German Police proceeds against anonymity service}, - note={\url{http://www.datenschutzzentrum.de/material/themen/presse/anon-bka_e.htm}} -} - -@article{shsm03, - title = {Using Caching for Browsing Anonymity}, - author = {Anna Shubina and Sean Smith}, - journal = {ACM SIGEcom Exchanges}, - volume = {4}, - number = {2}, - year = {2003}, - month = {Sept}, - note = {\url{http://www.acm.org/sigs/sigecom/exchanges/volume_4_(03)/4.2-Shubina.pdf}}, -} - -@inproceedings{tor-design, - title = {Tor: The Second-Generation Onion Router}, - author = {Roger Dingledine and Nick Mathewson and Paul Syverson}, - booktitle = {Proceedings of the 13th USENIX Security Symposium}, - year = {2004}, - month = {August}, - note = {\url{https://www.torproject.org/tor-design.pdf}} -} - -@inproceedings{flow-correlation04, - title = {On Flow Correlation Attacks and Countermeasures in Mix Networks}, - author = {Ye Zhu and Xinwen Fu and Bryan Graham and Riccardo Bettati and Wei Zhao}, - booktitle = {Proceedings of Privacy Enhancing Technologies workshop (PET 2004)}, - year = {2004}, - month = {May}, - series = {LNCS}, - note = {\url{http://students.cs.tamu.edu/xinwenfu/paper/PET04.pdf}}, -} - -@InProceedings{danezis:pet2004, - author = "George Danezis", - title = "The Traffic Analysis of Continuous-Time Mixes", - booktitle= {Privacy Enhancing Technologies (PET 2004)}, - editor = {David Martin and Andrei Serjantov}, - month = {May}, - year = {2004}, - series = {LNCS}, - note = {\url{http://www.cl.cam.ac.uk/users/gd216/cmm2.pdf}}, -} - -@inproceedings{feamster:wpes2004, - title = {Location Diversity in Anonymity Networks}, - author = {Nick Feamster and Roger Dingledine}, - booktitle = {{Proceedings of the Workshop on Privacy in the Electronic Society (WPES 2004)}}, - year = {2004}, - month = {October}, - address = {Washington, DC, USA}, - note = {\url{http://freehaven.net/doc/routing-zones/routing-zones.ps}}, -} - -@inproceedings{koepsell:wpes2004, - title = {How to Achieve Blocking Resistance for Existing Systems Enabling Anonymous Web Surfing}, - author = {Stefan K\"opsell and Ulf Hilling}, - booktitle = {{Proceedings of the Workshop on Privacy in the Electronic Society (WPES 2004)}}, - year = {2004}, - month = {October}, - address = {Washington, DC, USA}, - note = {\url{http://freehaven.net/anonbib/papers/p103-koepsell.pdf}}, -} - -@inproceedings{sync-batching, - title = {Synchronous Batching: From Cascades to Free Routes}, - author = {Roger Dingledine and Vitaly Shmatikov and Paul Syverson}, - booktitle = {Proceedings of Privacy Enhancing Technologies workshop (PET 2004)}, - editor = {David Martin and Andrei Serjantov}, - year = {2004}, - month = {May}, - series = {LNCS}, - note = {\url{http://freehaven.net/doc/sync-batching/sync-batching.pdf}}, -} - -@InProceedings{e2e-traffic, - author = "Nick Mathewson and Roger Dingledine", - title = "Practical Traffic Analysis: Extending and Resisting Statistical Disclosure", - booktitle= {Privacy Enhancing Technologies (PET 2004)}, - editor = {David Martin and Andrei Serjantov}, - month = {May}, - year = {2004}, - series = {LNCS}, - note = {\url{http://freehaven.net/doc/e2e-traffic/e2e-traffic.pdf}}, -} - -@Misc{dtls, - author = {E. Rescorla and N. Modadugu}, - title = {{Datagram Transport Layer Security}}, - howpublished = {IETF Draft}, - month = {December}, - year = {2003}, - note = {\url{http://www.ietf.org/internet-drafts/draft-rescorla-dtls-02.txt}}, -} - -@InProceedings{usability-network-effect, - author={Roger Dingledine and Nick Mathewson}, - title={Anonymity Loves Company: Usability and the Network Effect}, - booktitle = {Designing Security Systems That People Can Use}, - year = {2005}, - publisher = {O'Reilly Media}, -} - -@inproceedings{usability:weis2006, - title = {Anonymity Loves Company: Usability and the Network Effect}, - author = {Roger Dingledine and Nick Mathewson}, - booktitle = {Proceedings of the Fifth Workshop on the Economics of Information Security - (WEIS 2006)}, - year = {2006}, - month = {June}, - address = {Cambridge, UK}, - bookurl = {http://weis2006.econinfosec.org/}, - note = {\url{http://freehaven.net/doc/wupss04/usability.pdf}}, -} - -@Misc{six-four, - key = {six-four}, - title = {{The Six/Four System}}, - note = {\url{http://sourceforge.net/projects/sixfour/}} -} - -@inproceedings{clayton:pet2006, - title = {Ignoring the Great Firewall of China}, - author = {Richard Clayton and Steven J. Murdoch and Robert N. M. Watson}, - booktitle = {Proceedings of the Sixth Workshop on Privacy Enhancing Technologies (PET 2006)}, - year = {2006}, - month = {June}, - address = {Cambridge, UK}, - publisher = {Springer}, - bookurl = {http://petworkshop.org/2006/}, - note = {\url{http://www.cl.cam.ac.uk/~rnc1/ignoring.pdf}}, -} - -@Misc{zuckerman-threatmodels, - key = {zuckerman-threatmodels}, - title = {We've got to adjust some of our threat models}, - author = {Ethan Zuckerman}, - note = {\url{http://www.ethanzuckerman.com/blog/?p=1019}} -} - -@Misc{cgiproxy, - key = {cgiproxy}, - title = {{CGIProxy: HTTP/FTP Proxy in a CGI Script}}, - author = {James Marshall}, - note = {\url{http://www.jmarshall.com/tools/cgiproxy/}} -} - -@Misc{circumventor, - key = {circumventor}, - title = {{How to install the Circumventor program}}, - author = {Bennett Haselton}, - note = {\url{http://www.peacefire.org/circumventor/simple-circumventor-instructions.html}} -} - -@Misc{psiphon, - key = {psiphon}, - title = {Psiphon}, - author = {Ronald Deibert et al}, - note = {\url{http://psiphon.civisec.org/}} -} - -@InProceedings{tcpstego, author = {Steven J. Murdoch and Stephen Lewis}, - title = {Embedding Covert Channels into {TCP/IP}}, - booktitle = {Information Hiding: 7th International Workshop}, - pages = {247--261}, - year = {2005}, - editor = {Mauro Barni and Jordi Herrera-Joancomart\'{\i} and -Stefan Katzenbeisser and Fernando P\'{e}rez-Gonz\'{a}lez}, - volume = {3727}, - series = {LNCS}, - address = {Barcelona, Catalonia (Spain)}, - month = {June}, - publisher = {Springer-Verlag}, - url = {http://www.cl.cam.ac.uk/~sjm217/papers/ih05coverttcp.pdf} -} - -@phdthesis{blossom-thesis, - title = {Perspective Access Networks}, - author = {Geoffrey Goodell}, - school = {Harvard University}, - year = {2006}, - month = {July}, - note = {\url{http://afs.eecs.harvard.edu/~goodell/thesis.pdf}}, -} - -@inproceedings{tap:pet2006, - title = {On the Security of the Tor Authentication Protocol}, - author = {Ian Goldberg}, - booktitle = {Proceedings of the Sixth Workshop on Privacy Enhancing Technologies (PET 2006)}, - year = {2006}, - month = {June}, - address = {Cambridge, UK}, - publisher = {Springer}, - bookurl = {http://petworkshop.org/2006/}, - note = {\url{http://www.cypherpunks.ca/~iang/pubs/torsec.pdf}}, -} - -@inproceedings{rep-anon, - title = {{Reputation in P2P Anonymity Systems}}, - author = {Roger Dingledine and Nick Mathewson and Paul Syverson}, - booktitle = {Proceedings of Workshop on Economics of Peer-to-Peer Systems}, - year = {2003}, - month = {June}, - note = {\url{http://freehaven.net/doc/econp2p03/econp2p03.pdf}}, -} - -@misc{tor-challenges, - author = {Roger Dingledine and Nick Mathewson and Paul Syverson}, - title = {Challenges in deploying low-latency anonymity}, - year = {2005}, - note = {Manuscript} -} - -@InProceedings{chaum-blind, - author = {David Chaum}, - title = {Blind Signatures for Untraceable Payments}, - booktitle = {Advances in Cryptology: Proceedings of Crypto 82}, - pages = {199--203}, - year = 1983, - editor = {D. Chaum and R.L. Rivest and A.T. Sherman}, - publisher = {Plenum Press} -} - -@Article{netauth, - author = {Geoffrey Goodell and Paul Syverson}, - title = {The Right Place at the Right Time: Examining the use of network location in authentication and abuse prevention}, - journal = {Communications of the ACM}, - year = 2007, - volume = 50, - number = 5, - pages = {113--117}, - month = {May} -} - -@misc{ip-to-country, - key = {ip-to-country}, - title = {IP-to-country database}, - note = {\url{http://ip-to-country.webhosting.info/}}, -} - -@misc{mackinnon-personal, - author = {Rebecca MacKinnon}, - title = {Private communication}, - year = {2006}, -} - -@inproceedings{pet05-bissias, - title = {Privacy Vulnerabilities in Encrypted HTTP Streams}, - author = {George Dean Bissias and Marc Liberatore and Brian Neil Levine}, - booktitle = {Proceedings of Privacy Enhancing Technologies workshop (PET 2005)}, - year = {2005}, - month = {May}, - note = {\url{http://prisms.cs.umass.edu/brian/pubs/bissias.liberatore.pet.2005.pdf}}, -} - -@InProceedings{infranet, - author = {Nick Feamster and Magdalena Balazinska and Greg Harfst and Hari Balakrishnan and David Karger}, - title = {Infranet: Circumventing Web Censorship and Surveillance}, - booktitle = {Proceedings of the 11th USENIX Security Symposium}, - year = {2002}, - month = {August}, - note = {\url{http://nms.lcs.mit.edu/~feamster/papers/usenixsec2002.pdf}}, -} - -@techreport{ ptacek98insertion, - author = "Thomas H. Ptacek and Timothy N. Newsham", - title = "Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection", - institution = "Secure Networks, Inc.", - address = "Suite 330, 1201 5th Street S.W, Calgary, Alberta, Canada, T2R-0Y6", - year = "1998", - url = "citeseer.ist.psu.edu/ptacek98insertion.html", -} - -@inproceedings{active-wardens, - author = "Gina Fisk and Mike Fisk and Christos Papadopoulos and Joshua Neil", - title = "Eliminating Steganography in Internet Traffic with Active Wardens", - booktitle = {Information Hiding Workshop (IH 2002)}, - year = {2002}, - month = {October}, - editor = {Fabien Petitcolas}, - publisher = {Springer-Verlag, LNCS 2578}, -} - -@inproceedings{clog-the-queue, - title = {Don't Clog the Queue: Circuit Clogging and Mitigation in {P2P} anonymity schemes}, - author = {Jon McLachlan and Nicholas Hopper}, - booktitle = {Proceedings of Financial Cryptography (FC '08)}, - year = {2008}, - month = {January}, -} - -@inproceedings{snader08, - title = {A Tune-up for {Tor}: Improving Security and Performance in the {Tor} Network}, - author = {Robin Snader and Nikita Borisov}, - booktitle = {Proceedings of the Network and Distributed Security Symposium - {NDSS} '08}, - year = {2008}, - month = {February}, - publisher = {Internet Society}, -} - -@inproceedings{murdoch-pet2008, - title = {Metrics for Security and Performance in Low-Latency Anonymity Networks}, - author = {Steven J. Murdoch and Robert N. M. Watson}, - booktitle = {Proceedings of the Eighth International Symposium on Privacy Enhancing Technologies (PETS 2008)}, - year = {2008}, - month = {July}, - address = {Leuven, Belgium}, - pages = {115--132}, - editor = {Nikita Borisov and Ian Goldberg}, - publisher = {Springer}, - bookurl = {http://petsymposium.org/2008/}, -} - -@inproceedings{danezis-pet2008, - title = {Bridging and Fingerprinting: Epistemic Attacks on Route Selection}, - author = {George Danezis and Paul Syverson}, - booktitle = {Proceedings of the Eighth International Symposium on Privacy Enhancing Technologies (PETS 2008)}, - year = {2008}, - month = {July}, - address = {Leuven, Belgium}, - pages = {133--150}, - editor = {Nikita Borisov and Ian Goldberg}, - publisher = {Springer}, - bookurl = {http://petsymposium.org/2008/}, -} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: "tor-design" -%%% End: diff -Nru tor-0.2.1.30/doc/design-paper/tor-design.tex tor-0.2.2.35/doc/design-paper/tor-design.tex --- tor-0.2.1.30/doc/design-paper/tor-design.tex 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/design-paper/tor-design.tex 1970-01-01 00:00:00.000000000 +0000 @@ -1,1988 +0,0 @@ -\documentclass[twocolumn]{article} -\usepackage{usenix} - -%\documentclass[times,10pt,twocolumn]{article} -%\usepackage{latex8} -%\usepackage{times} -\usepackage{url} -\usepackage{graphics} -\usepackage{amsmath} -\usepackage{epsfig} - -\pagestyle{empty} - -\renewcommand\url{\begingroup \def\UrlLeft{<}\def\UrlRight{>}\urlstyle{tt}\Url} -\newcommand\emailaddr{\begingroup \def\UrlLeft{<}\def\UrlRight{>}\urlstyle{tt}\Url} - -\newcommand{\workingnote}[1]{} % The version that hides the note. -%\newcommand{\workingnote}[1]{(**#1)} % The version that makes the note visible. - -% If an URL ends up with '%'s in it, that's because the line *in the .bib/.tex -% file* is too long, so break it there (it doesn't matter if the next line is -% indented with spaces). -DH - -%\newif\ifpdf -%\ifx\pdfoutput\undefined -% \pdffalse -%\else -% \pdfoutput=1 -% \pdftrue -%\fi - -\newenvironment{tightlist}{\begin{list}{$\bullet$}{ - \setlength{\itemsep}{0mm} - \setlength{\parsep}{0mm} - % \setlength{\labelsep}{0mm} - % \setlength{\labelwidth}{0mm} - % \setlength{\topsep}{0mm} - }}{\end{list}} - -% Cut down on whitespace above and below figures displayed at head/foot of -% page. -\setlength{\textfloatsep}{3mm} -% Cut down on whitespace above and below figures displayed in middle of page -\setlength{\intextsep}{3mm} - -\begin{document} - -%% Use dvipdfm instead. --DH -%\ifpdf -% \pdfcompresslevel=9 -% \pdfpagewidth=\the\paperwidth -% \pdfpageheight=\the\paperheight -%\fi - -\title{Tor: The Second-Generation Onion Router} %\\DRAFT VERSION} -% Putting the 'Private' back in 'Virtual Private Network' - -\author{Roger Dingledine \\ The Free Haven Project \\ arma@freehaven.net \and -Nick Mathewson \\ The Free Haven Project \\ nickm@freehaven.net \and -Paul Syverson \\ Naval Research Lab \\ syverson@itd.nrl.navy.mil} - -\maketitle -\thispagestyle{empty} - -\begin{abstract} -We present Tor, a circuit-based low-latency anonymous communication -service. This second-generation Onion Routing system addresses limitations -in the original design by adding perfect forward secrecy, congestion -control, directory servers, integrity checking, configurable exit policies, -and a practical design for location-hidden services via rendezvous -points. Tor works on the real-world -Internet, requires no special privileges or kernel modifications, requires -little synchronization or coordination between nodes, and provides a -reasonable tradeoff between anonymity, usability, and efficiency. -We briefly describe our experiences with an international network of -more than 30 nodes. % that has been running for several months. -We close with a list of open problems in anonymous communication. -\end{abstract} - -%\begin{center} -%\textbf{Keywords:} anonymity, peer-to-peer, remailer, nymserver, reply block -%\end{center} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\section{Overview} -\label{sec:intro} - -Onion Routing is a distributed overlay network designed to anonymize -TCP-based applications like web browsing, secure shell, -and instant messaging. Clients choose a path through the network and -build a \emph{circuit}, in which each node (or ``onion router'' or ``OR'') -in the path knows its predecessor and successor, but no other nodes in -the circuit. Traffic flows down the circuit in fixed-size -\emph{cells}, which are unwrapped by a symmetric key at each node -(like the layers of an onion) and relayed downstream. The -Onion Routing project published several design and analysis -papers \cite{or-ih96,or-jsac98,or-discex00,or-pet00}. While a wide area Onion -Routing network was deployed briefly, the only long-running -public implementation was a fragile -proof-of-concept that ran on a single machine. Even this simple deployment -processed connections from over sixty thousand distinct IP addresses from -all over the world at a rate of about fifty thousand per day. -But many critical design and deployment issues were never -resolved, and the design has not been updated in years. Here -we describe Tor, a protocol for asynchronous, loosely federated onion -routers that provides the following improvements over the old Onion -Routing design: - -\textbf{Perfect forward secrecy:} In the original Onion Routing design, -a single hostile node could record traffic and -later compromise successive nodes in the circuit and force them -to decrypt it. Rather than using a single multiply encrypted data -structure (an \emph{onion}) to lay each circuit, -Tor now uses an incremental or \emph{telescoping} path-building design, -where the initiator negotiates session keys with each successive hop in -the circuit. Once these keys are deleted, subsequently compromised nodes -cannot decrypt old traffic. As a side benefit, onion replay detection -is no longer necessary, and the process of building circuits is more -reliable, since the initiator knows when a hop fails and can then try -extending to a new node. - -\textbf{Separation of ``protocol cleaning'' from anonymity:} -Onion Routing originally required a separate ``application -proxy'' for each supported application protocol---most of which were -never written, so many applications were never supported. Tor uses the -standard and near-ubiquitous SOCKS~\cite{socks4} proxy interface, allowing -us to support most TCP-based programs without modification. Tor now -relies on the filtering features of privacy-enhancing -application-level proxies such as Privoxy~\cite{privoxy}, without trying -to duplicate those features itself. - -\textbf{No mixing, padding, or traffic shaping (yet):} Onion -Routing originally called for batching and reordering cells as they arrived, -assumed padding between ORs, and in -later designs added padding between onion proxies (users) and -ORs~\cite{or-ih96,or-jsac98}. Tradeoffs between padding protection -and cost were discussed, and \emph{traffic shaping} algorithms were -theorized~\cite{or-pet00} to provide good security without expensive -padding, but no concrete padding scheme was suggested. -Recent research~\cite{econymics} -and deployment experience~\cite{freedom21-security} suggest that this -level of resource use is not practical or economical; and even full -link padding is still vulnerable~\cite{defensive-dropping}. Thus, -until we have a proven and convenient design for traffic shaping or -low-latency mixing that improves anonymity against a realistic -adversary, we leave these strategies out. - -\textbf{Many TCP streams can share one circuit:} Onion Routing originally -built a separate circuit for each -application-level request, but this required -multiple public key operations for every request, and also presented -a threat to anonymity from building so many circuits; see -Section~\ref{sec:maintaining-anonymity}. Tor multiplexes multiple TCP -streams along each circuit to improve efficiency and anonymity. - -\textbf{Leaky-pipe circuit topology:} Through in-band signaling -within the circuit, Tor initiators can direct traffic to nodes partway -down the circuit. This novel approach -allows traffic to exit the circuit from the middle---possibly -frustrating traffic shape and volume attacks based on observing the end -of the circuit. (It also allows for long-range padding if -future research shows this to be worthwhile.) - -\textbf{Congestion control:} Earlier anonymity designs do not -address traffic bottlenecks. Unfortunately, typical approaches to -load balancing and flow control in overlay networks involve inter-node -control communication and global views of traffic. Tor's decentralized -congestion control uses end-to-end acks to maintain anonymity -while allowing nodes at the edges of the network to detect congestion -or flooding and send less data until the congestion subsides. - -\textbf{Directory servers:} The earlier Onion Routing design -planned to flood state information through the network---an approach -that can be unreliable and complex. % open to partitioning attacks. -Tor takes a simplified view toward distributing this -information. Certain more trusted nodes act as \emph{directory -servers}: they provide signed directories describing known -routers and their current state. Users periodically download them -via HTTP. - -\textbf{Variable exit policies:} Tor provides a consistent mechanism -for each node to advertise a policy describing the hosts -and ports to which it will connect. These exit policies are critical -in a volunteer-based distributed infrastructure, because each operator -is comfortable with allowing different types of traffic to exit -from his node. - -\textbf{End-to-end integrity checking:} The original Onion Routing -design did no integrity checking on data. Any node on the -circuit could change the contents of data cells as they passed by---for -example, to alter a connection request so it would connect -to a different webserver, or to `tag' encrypted traffic and look for -corresponding corrupted traffic at the network edges~\cite{minion-design}. -Tor hampers these attacks by verifying data integrity before it leaves -the network. - -%\textbf{Improved robustness to failed nodes:} A failed node -%in the old design meant that circuit building failed, but thanks to -%Tor's step-by-step circuit building, users notice failed nodes -%while building circuits and route around them. Additionally, liveness -%information from directories allows users to avoid unreliable nodes in -%the first place. -%% Can't really claim this, now that we've found so many variants of -%% attack on partial-circuit-building. -RD - -\textbf{Rendezvous points and hidden services:} -Tor provides an integrated mechanism for responder anonymity via -location-protected servers. Previous Onion Routing designs included -long-lived ``reply onions'' that could be used to build circuits -to a hidden server, but these reply onions did not provide forward -security, and became useless if any node in the path went down -or rotated its keys. In Tor, clients negotiate {\it rendezvous points} -to connect with hidden servers; reply onions are no longer required. - -Unlike Freedom~\cite{freedom2-arch}, Tor does not require OS kernel -patches or network stack support. This prevents us from anonymizing -non-TCP protocols, but has greatly helped our portability and -deployability. - -%Unlike Freedom~\cite{freedom2-arch}, Tor only anonymizes -%TCP-based protocols---not requiring patches (or built-in support) in an -%operating system's network stack has been valuable to Tor's -%portability and deployability. - -We have implemented all of the above features, including rendezvous -points. Our source code is -available under a free license, and Tor -%, as far as we know, is unencumbered by patents. -is not covered by the patent that affected distribution and use of -earlier versions of Onion Routing. -We have deployed a wide-area alpha network -to test the design, to get more experience with usability -and users, and to provide a research platform for experimentation. -As of this writing, the network stands at 32 nodes %in thirteen -%distinct administrative domains -spread over two continents. - -We review previous work in Section~\ref{sec:related-work}, describe -our goals and assumptions in Section~\ref{sec:assumptions}, -and then address the above list of improvements in -Sections~\ref{sec:design},~\ref{sec:rendezvous}, and~\ref{sec:other-design}. -We summarize -in Section~\ref{sec:attacks} how our design stands up to -known attacks, and talk about our early deployment experiences in -Section~\ref{sec:in-the-wild}. We conclude with a list of open problems in -Section~\ref{sec:maintaining-anonymity} and future work for the Onion -Routing project in Section~\ref{sec:conclusion}. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\section{Related work} -\label{sec:related-work} - -Modern anonymity systems date to Chaum's {\bf Mix-Net} -design~\cite{chaum-mix}. Chaum -proposed hiding the correspondence between sender and recipient by -wrapping messages in layers of public-key cryptography, and relaying them -through a path composed of ``mixes.'' Each mix in turn -decrypts, delays, and re-orders messages before relaying them -onward. -%toward their destinations. - -Subsequent relay-based anonymity designs have diverged in two -main directions. Systems like {\bf Babel}~\cite{babel}, -{\bf Mixmaster}~\cite{mixmaster-spec}, -and {\bf Mixminion}~\cite{minion-design} have tried -to maximize anonymity at the cost of introducing comparatively large and -variable latencies. Because of this decision, these \emph{high-latency} -networks resist strong global adversaries, -but introduce too much lag for interactive tasks like web browsing, -Internet chat, or SSH connections. - -Tor belongs to the second category: \emph{low-latency} designs that -try to anonymize interactive network traffic. These systems handle -a variety of bidirectional protocols. They also provide more convenient -mail delivery than the high-latency anonymous email -networks, because the remote mail server provides explicit and timely -delivery confirmation. But because these designs typically -involve many packets that must be delivered quickly, it is -difficult for them to prevent an attacker who can eavesdrop both ends of the -communication from correlating the timing and volume -of traffic entering the anonymity network with traffic leaving it~\cite{SS03}. -These -protocols are similarly vulnerable to an active adversary who introduces -timing patterns into traffic entering the network and looks -for correlated patterns among exiting traffic. -Although some work has been done to frustrate these attacks, most designs -protect primarily against traffic analysis rather than traffic -confirmation (see Section~\ref{subsec:threat-model}). - -The simplest low-latency designs are single-hop proxies such as the -{\bf Anonymizer}~\cite{anonymizer}: a single trusted server strips the -data's origin before relaying it. These designs are easy to -analyze, but users must trust the anonymizing proxy. -Concentrating the traffic to this single point increases the anonymity set -(the people a given user is hiding among), but it is vulnerable if the -adversary can observe all traffic entering and leaving the proxy. - -More complex are distributed-trust, circuit-based anonymizing systems. -In these designs, a user establishes one or more medium-term bidirectional -end-to-end circuits, and tunnels data in fixed-size cells. -Establishing circuits is computationally expensive and typically -requires public-key -cryptography, whereas relaying cells is comparatively inexpensive and -typically requires only symmetric encryption. -Because a circuit crosses several servers, and each server only knows -the adjacent servers in the circuit, no single server can link a -user to her communication partners. - -The {\bf Java Anon Proxy} (also known as JAP or Web MIXes) uses fixed shared -routes known as \emph{cascades}. As with a single-hop proxy, this -approach aggregates users into larger anonymity sets, but again an -attacker only needs to observe both ends of the cascade to bridge all -the system's traffic. The Java Anon Proxy's design -calls for padding between end users and the head of the -cascade~\cite{web-mix}. However, it is not demonstrated whether the current -implementation's padding policy improves anonymity. - -{\bf PipeNet}~\cite{back01, pipenet}, another low-latency design proposed -around the same time as Onion Routing, gave -stronger anonymity but allowed a single user to shut -down the network by not sending. Systems like {\bf ISDN -mixes}~\cite{isdn-mixes} were designed for other environments with -different assumptions. -%XXX please can we fix this sentence to something less demeaning - -In P2P designs like {\bf Tarzan}~\cite{tarzan:ccs02} and -{\bf MorphMix}~\cite{morphmix:fc04}, all participants both generate -traffic and relay traffic for others. These systems aim to conceal -whether a given peer originated a request -or just relayed it from another peer. While Tarzan and MorphMix use -layered encryption as above, {\bf Crowds}~\cite{crowds-tissec} simply assumes -an adversary who cannot observe the initiator: it uses no public-key -encryption, so any node on a circuit can read users' traffic. - -{\bf Hordes}~\cite{hordes-jcs} is based on Crowds but also uses multicast -responses to hide the initiator. {\bf Herbivore}~\cite{herbivore} and -$\mbox{\bf P}^{\mathbf 5}$~\cite{p5} go even further, requiring broadcast. -These systems are designed primarily for communication among peers, -although Herbivore users can make external connections by -requesting a peer to serve as a proxy. - -Systems like {\bf Freedom} and the original Onion Routing build circuits -all at once, using a layered ``onion'' of public-key encrypted messages, -each layer of which provides session keys and the address of the -next server in the circuit. Tor as described herein, Tarzan, MorphMix, -{\bf Cebolla}~\cite{cebolla}, and Rennhard's {\bf Anonymity Network}~\cite{anonnet} -build circuits -in stages, extending them one hop at a time. -Section~\ref{subsubsec:constructing-a-circuit} describes how this -approach enables perfect forward secrecy. - -Circuit-based designs must choose which protocol layer -to anonymize. They may intercept IP packets directly, and -relay them whole (stripping the source address) along the -circuit~\cite{freedom2-arch,tarzan:ccs02}. Like -Tor, they may accept TCP streams and relay the data in those streams, -ignoring the breakdown of that data into TCP -segments~\cite{morphmix:fc04,anonnet}. Finally, like Crowds, they may accept -application-level protocols such as HTTP and relay the application -requests themselves. -Making this protocol-layer decision requires a compromise between flexibility -and anonymity. For example, a system that understands HTTP -can strip -identifying information from requests, can take advantage of caching -to limit the number of requests that leave the network, and can batch -or encode requests to minimize the number of connections. -On the other hand, an IP-level anonymizer can handle nearly any protocol, -even ones unforeseen by its designers (though these systems require -kernel-level modifications to some operating systems, and so are more -complex and less portable). TCP-level anonymity networks like Tor present -a middle approach: they are application neutral (so long as the -application supports, or can be tunneled across, TCP), but by treating -application connections as data streams rather than raw TCP packets, -they avoid the inefficiencies of tunneling TCP over -TCP. - -Distributed-trust anonymizing systems need to prevent attackers from -adding too many servers and thus compromising user paths. -Tor relies on a small set of well-known directory servers, run by -independent parties, to decide which nodes can -join. Tarzan and MorphMix allow unknown users to run servers, and use -a limited resource (like IP addresses) to prevent an attacker from -controlling too much of the network. Crowds suggests requiring -written, notarized requests from potential crowd members. - -Anonymous communication is essential for censorship-resistant -systems like Eternity~\cite{eternity}, Free~Haven~\cite{freehaven-berk}, -Publius~\cite{publius}, and Tangler~\cite{tangler}. Tor's rendezvous -points enable connections between mutually anonymous entities; they -are a building block for location-hidden servers, which are needed by -Eternity and Free~Haven. - -% didn't include rewebbers. No clear place to put them, so I'll leave -% them out for now. -RD - -\section{Design goals and assumptions} -\label{sec:assumptions} - -\noindent{\large\bf Goals}\\ -Like other low-latency anonymity designs, Tor seeks to frustrate -attackers from linking communication partners, or from linking -multiple communications to or from a single user. Within this -main goal, however, several considerations have directed -Tor's evolution. - -\textbf{Deployability:} The design must be deployed and used in the -real world. Thus it -must not be expensive to run (for example, by requiring more bandwidth -than volunteers are willing to provide); must not place a heavy -liability burden on operators (for example, by allowing attackers to -implicate onion routers in illegal activities); and must not be -difficult or expensive to implement (for example, by requiring kernel -patches, or separate proxies for every protocol). We also cannot -require non-anonymous parties (such as websites) -to run our software. (Our rendezvous point design does not meet -this goal for non-anonymous users talking to hidden servers, -however; see Section~\ref{sec:rendezvous}.) - -\textbf{Usability:} A hard-to-use system has fewer users---and because -anonymity systems hide users among users, a system with fewer users -provides less anonymity. Usability is thus not only a convenience: -it is a security requirement~\cite{econymics,back01}. Tor should -therefore not -require modifying familiar applications; should not introduce prohibitive -delays; -and should require as few configuration decisions -as possible. Finally, Tor should be easily implementable on all common -platforms; we cannot require users to change their operating system -to be anonymous. (Tor currently runs on Win32, Linux, -Solaris, BSD-style Unix, MacOS X, and probably others.) - -\textbf{Flexibility:} The protocol must be flexible and well-specified, -so Tor can serve as a test-bed for future research. -Many of the open problems in low-latency anonymity -networks, such as generating dummy traffic or preventing Sybil -attacks~\cite{sybil}, may be solvable independently from the issues -solved by -Tor. Hopefully future systems will not need to reinvent Tor's design. -%(But note that while a flexible design benefits researchers, -%there is a danger that differing choices of extensions will make users -%distinguishable. Experiments should be run on a separate network.) - -\textbf{Simple design:} The protocol's design and security -parameters must be well-understood. Additional features impose implementation -and complexity costs; adding unproven techniques to the design threatens -deployability, readability, and ease of security analysis. Tor aims to -deploy a simple and stable system that integrates the best accepted -approaches to protecting anonymity.\\ - -\noindent{\large\bf Non-goals}\label{subsec:non-goals}\\ -In favoring simple, deployable designs, we have explicitly deferred -several possible goals, either because they are solved elsewhere, or because -they are not yet solved. - -\textbf{Not peer-to-peer:} Tarzan and MorphMix aim to scale to completely -decentralized peer-to-peer environments with thousands of short-lived -servers, many of which may be controlled by an adversary. This approach -is appealing, but still has many open -problems~\cite{tarzan:ccs02,morphmix:fc04}. - -\textbf{Not secure against end-to-end attacks:} Tor does not claim -to completely solve end-to-end timing or intersection -attacks. Some approaches, such as having users run their own onion routers, -may help; -see Section~\ref{sec:maintaining-anonymity} for more discussion. - -\textbf{No protocol normalization:} Tor does not provide \emph{protocol -normalization} like Privoxy or the Anonymizer. If senders want anonymity from -responders while using complex and variable -protocols like HTTP, Tor must be layered with a filtering proxy such -as Privoxy to hide differences between clients, and expunge protocol -features that leak identity. -Note that by this separation Tor can also provide services that -are anonymous to the network yet authenticated to the responder, like -SSH. Similarly, Tor does not integrate -tunneling for non-stream-based protocols like UDP; this must be -provided by an external service if appropriate. - -\textbf{Not steganographic:} Tor does not try to conceal who is connected -to the network. - -\subsection{Threat Model} -\label{subsec:threat-model} - -A global passive adversary is the most commonly assumed threat when -analyzing theoretical anonymity designs. But like all practical -low-latency systems, Tor does not protect against such a strong -adversary. Instead, we assume an adversary who can observe some fraction -of network traffic; who can generate, modify, delete, or delay -traffic; who can operate onion routers of his own; and who can -compromise some fraction of the onion routers. - -In low-latency anonymity systems that use layered encryption, the -adversary's typical goal is to observe both the initiator and the -responder. By observing both ends, passive attackers can confirm a -suspicion that Alice is -talking to Bob if the timing and volume patterns of the traffic on the -connection are distinct enough; active attackers can induce timing -signatures on the traffic to force distinct patterns. Rather -than focusing on these \emph{traffic confirmation} attacks, -we aim to prevent \emph{traffic -analysis} attacks, where the adversary uses traffic patterns to learn -which points in the network he should attack. - -Our adversary might try to link an initiator Alice with her -communication partners, or try to build a profile of Alice's -behavior. He might mount passive attacks by observing the network edges -and correlating traffic entering and leaving the network---by -relationships in packet timing, volume, or externally visible -user-selected -options. The adversary can also mount active attacks by compromising -routers or keys; by replaying traffic; by selectively denying service -to trustworthy routers to move users to -compromised routers, or denying service to users to see if traffic -elsewhere in the -network stops; or by introducing patterns into traffic that can later be -detected. The adversary might subvert the directory servers to give users -differing views of network state. Additionally, he can try to decrease -the network's reliability by attacking nodes or by performing antisocial -activities from reliable nodes and trying to get them taken down---making -the network unreliable flushes users to other less anonymous -systems, where they may be easier to attack. We summarize -in Section~\ref{sec:attacks} how well the Tor design defends against -each of these attacks. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\section{The Tor Design} -\label{sec:design} - -The Tor network is an overlay network; each onion router (OR) -runs as a normal -user-level process without any special privileges. -Each onion router maintains a TLS~\cite{TLS} -connection to every other onion router. -%(We discuss alternatives to this clique-topology assumption in -%Section~\ref{sec:maintaining-anonymity}.) -% A subset of the ORs also act as -%directory servers, tracking which routers are in the network; -%see Section~\ref{subsec:dirservers} for directory server details. -Each user -runs local software called an onion proxy (OP) to fetch directories, -establish circuits across the network, -and handle connections from user applications. These onion proxies accept -TCP streams and multiplex them across the circuits. The onion -router on the other side -of the circuit connects to the requested destinations -and relays data. - -Each onion router maintains a long-term identity key and a short-term -onion key. The identity -key is used to sign TLS certificates, to sign the OR's \emph{router -descriptor} (a summary of its keys, address, bandwidth, exit policy, -and so on), and (by directory servers) to sign directories. %Changing -%the identity key of a router is considered equivalent to creating a -%new router. -The onion key is used to decrypt requests -from users to set up a circuit and negotiate ephemeral keys. -The TLS protocol also establishes a short-term link key when communicating -between ORs. Short-term keys are rotated periodically and -independently, to limit the impact of key compromise. - -Section~\ref{subsec:cells} presents the fixed-size -\emph{cells} that are the unit of communication in Tor. We describe -in Section~\ref{subsec:circuits} how circuits are -built, extended, truncated, and destroyed. Section~\ref{subsec:tcp} -describes how TCP streams are routed through the network. We address -integrity checking in Section~\ref{subsec:integrity-checking}, -and resource limiting in Section~\ref{subsec:rate-limit}. -Finally, -Section~\ref{subsec:congestion} talks about congestion control and -fairness issues. - -\subsection{Cells} -\label{subsec:cells} - -Onion routers communicate with one another, and with users' OPs, via -TLS connections with ephemeral keys. Using TLS conceals the data on -the connection with perfect forward secrecy, and prevents an attacker -from modifying data on the wire or impersonating an OR. - -Traffic passes along these connections in fixed-size cells. Each cell -is 512 bytes, %(but see Section~\ref{sec:conclusion} for a discussion of -%allowing large cells and small cells on the same network), -and consists of a header and a payload. The header includes a circuit -identifier (circID) that specifies which circuit the cell refers to -(many circuits can be multiplexed over the single TLS connection), and -a command to describe what to do with the cell's payload. (Circuit -identifiers are connection-specific: each circuit has a different -circID on each OP/OR or OR/OR connection it traverses.) -Based on their command, cells are either \emph{control} cells, which are -always interpreted by the node that receives them, or \emph{relay} cells, -which carry end-to-end stream data. The control cell commands are: -\emph{padding} (currently used for keepalive, but also usable for link -padding); \emph{create} or \emph{created} (used to set up a new circuit); -and \emph{destroy} (to tear down a circuit). - -Relay cells have an additional header (the relay header) at the front -of the payload, containing a streamID (stream identifier: many streams can -be multiplexed over a circuit); an end-to-end checksum for integrity -checking; the length of the relay payload; and a relay command. -The entire contents of the relay header and the relay cell payload -are encrypted or decrypted together as the relay cell moves along the -circuit, using the 128-bit AES cipher in counter mode to generate a -cipher stream. The relay commands are: \emph{relay -data} (for data flowing down the stream), \emph{relay begin} (to open a -stream), \emph{relay end} (to close a stream cleanly), \emph{relay -teardown} (to close a broken stream), \emph{relay connected} -(to notify the OP that a relay begin has succeeded), \emph{relay -extend} and \emph{relay extended} (to extend the circuit by a hop, -and to acknowledge), \emph{relay truncate} and \emph{relay truncated} -(to tear down only part of the circuit, and to acknowledge), \emph{relay -sendme} (used for congestion control), and \emph{relay drop} (used to -implement long-range dummies). -We give a visual overview of cell structure plus the details of relay -cell structure, and then describe each of these cell types and commands -in more detail below. - -%\begin{figure}[h] -%\unitlength=1cm -%\centering -%\begin{picture}(8.0,1.5) -%\put(4,.5){\makebox(0,0)[c]{\epsfig{file=cell-struct,width=7cm}}} -%\end{picture} -%\end{figure} - -\begin{figure}[h] -\centering -\mbox{\epsfig{figure=cell-struct,width=7cm}} -\end{figure} - -\subsection{Circuits and streams} -\label{subsec:circuits} - -Onion Routing originally built one circuit for each -TCP stream. Because building a circuit can take several tenths of a -second (due to public-key cryptography and network latency), -this design imposed high costs on applications like web browsing that -open many TCP streams. - -In Tor, each circuit can be shared by many TCP streams. To avoid -delays, users construct circuits preemptively. To limit linkability -among their streams, users' OPs build a new circuit -periodically if the previous ones have been used, -and expire old used circuits that no longer have any open streams. -OPs consider rotating to a new circuit once a minute: thus -even heavy users spend negligible time -building circuits, but a limited number of requests can be linked -to each other through a given exit node. Also, because circuits are built -in the background, OPs can recover from failed circuit creation -without harming user experience.\\ - -\begin{figure}[h] -\centering -\mbox{\epsfig{figure=interaction,width=8.75cm}} -\caption{Alice builds a two-hop circuit and begins fetching a web page.} -\label{fig:interaction} -\end{figure} - -\noindent{\large\bf Constructing a circuit}\label{subsubsec:constructing-a-circuit}\\ -%\subsubsection{Constructing a circuit} -A user's OP constructs circuits incrementally, negotiating a -symmetric key with each OR on the circuit, one hop at a time. To begin -creating a new circuit, the OP (call her Alice) sends a -\emph{create} cell to the first node in her chosen path (call him Bob). -(She chooses a new -circID $C_{AB}$ not currently used on the connection from her to Bob.) -The \emph{create} cell's -payload contains the first half of the Diffie-Hellman handshake -($g^x$), encrypted to the onion key of Bob. Bob -responds with a \emph{created} cell containing $g^y$ -along with a hash of the negotiated key $K=g^{xy}$. - -Once the circuit has been established, Alice and Bob can send one -another relay cells encrypted with the negotiated -key.\footnote{Actually, the negotiated key is used to derive two - symmetric keys: one for each direction.} More detail is given in -the next section. - -To extend the circuit further, Alice sends a \emph{relay extend} cell -to Bob, specifying the address of the next OR (call her Carol), and -an encrypted $g^{x_2}$ for her. Bob copies the half-handshake into a -\emph{create} cell, and passes it to Carol to extend the circuit. -(Bob chooses a new circID $C_{BC}$ not currently used on the connection -between him and Carol. Alice never needs to know this circID; only Bob -associates $C_{AB}$ on his connection with Alice to $C_{BC}$ on -his connection with Carol.) -When Carol responds with a \emph{created} cell, Bob wraps the payload -into a \emph{relay extended} cell and passes it back to Alice. Now -the circuit is extended to Carol, and Alice and Carol share a common key -$K_2 = g^{x_2 y_2}$. - -To extend the circuit to a third node or beyond, Alice -proceeds as above, always telling the last node in the circuit to -extend one hop further. - -This circuit-level handshake protocol achieves unilateral entity -authentication (Alice knows she's handshaking with the OR, but -the OR doesn't care who is opening the circuit---Alice uses no public key -and remains anonymous) and unilateral key authentication -(Alice and the OR agree on a key, and Alice knows only the OR learns -it). It also achieves forward -secrecy and key freshness. More formally, the protocol is as follows -(where $E_{PK_{Bob}}(\cdot)$ is encryption with Bob's public key, -$H$ is a secure hash function, and $|$ is concatenation): -\begin{equation*} -\begin{aligned} -\mathrm{Alice} \rightarrow \mathrm{Bob}&: E_{PK_{Bob}}(g^x) \\ -\mathrm{Bob} \rightarrow \mathrm{Alice}&: g^y, H(K | \mathrm{``handshake"}) \\ -\end{aligned} -\end{equation*} - -\noindent In the second step, Bob proves that it was he who received $g^x$, -and who chose $y$. We use PK encryption in the first step -(rather than, say, using the first two steps of STS, which has a -signature in the second step) because a single cell is too small to -hold both a public key and a signature. Preliminary analysis with the -NRL protocol analyzer~\cite{meadows96} shows this protocol to be -secure (including perfect forward secrecy) under the -traditional Dolev-Yao model.\\ - -\noindent{\large\bf Relay cells}\\ -%\subsubsection{Relay cells} -% -Once Alice has established the circuit (so she shares keys with each -OR on the circuit), she can send relay cells. -%Recall that every relay cell has a streamID that indicates to which -%stream the cell belongs. %This streamID allows a relay cell to be -%addressed to any OR on the circuit. -Upon receiving a relay -cell, an OR looks up the corresponding circuit, and decrypts the relay -header and payload with the session key for that circuit. -If the cell is headed away from Alice the OR then checks whether the -decrypted cell has a valid digest (as an optimization, the first -two bytes of the integrity check are zero, so in most cases we can avoid -computing the hash). -%is recognized---either because it -%corresponds to an open stream at this OR for the given circuit, or because -%it is the control streamID (zero). -If valid, it accepts the relay cell and processes it as described -below. Otherwise, -the OR looks up the circID and OR for the -next step in the circuit, replaces the circID as appropriate, and -sends the decrypted relay cell to the next OR. (If the OR at the end -of the circuit receives an unrecognized relay cell, an error has -occurred, and the circuit is torn down.) - -OPs treat incoming relay cells similarly: they iteratively unwrap the -relay header and payload with the session keys shared with each -OR on the circuit, from the closest to farthest. -If at any stage the digest is valid, the cell must have -originated at the OR whose encryption has just been removed. - -To construct a relay cell addressed to a given OR, Alice assigns the -digest, and then iteratively -encrypts the cell payload (that is, the relay header and payload) with -the symmetric key of each hop up to that OR. Because the digest is -encrypted to a different value at each step, only at the targeted OR -will it have a meaningful value.\footnote{ - % Should we just say that 2^56 is itself negligible? - % Assuming 4-hop circuits with 10 streams per hop, there are 33 - % possible bad streamIDs before the last circuit. This still - % gives an error only once every 2 million terabytes (approx). -With 48 bits of digest per cell, the probability of an accidental -collision is far lower than the chance of hardware failure.} -This \emph{leaky pipe} circuit topology -allows Alice's streams to exit at different ORs on a single circuit. -Alice may choose different exit points because of their exit policies, -or to keep the ORs from knowing that two streams -originate from the same person. - -When an OR later replies to Alice with a relay cell, it -encrypts the cell's relay header and payload with the single key it -shares with Alice, and sends the cell back toward Alice along the -circuit. Subsequent ORs add further layers of encryption as they -relay the cell back to Alice. - -To tear down a circuit, Alice sends a \emph{destroy} control -cell. Each OR in the circuit receives the \emph{destroy} cell, closes -all streams on that circuit, and passes a new \emph{destroy} cell -forward. But just as circuits are built incrementally, they can also -be torn down incrementally: Alice can send a \emph{relay -truncate} cell to a single OR on a circuit. That OR then sends a -\emph{destroy} cell forward, and acknowledges with a -\emph{relay truncated} cell. Alice can then extend the circuit to -different nodes, without signaling to the intermediate nodes (or -a limited observer) that she has changed her circuit. -Similarly, if a node on the circuit goes down, the adjacent -node can send a \emph{relay truncated} cell back to Alice. Thus the -``break a node and see which circuits go down'' -attack~\cite{freedom21-security} is weakened. - -\subsection{Opening and closing streams} -\label{subsec:tcp} - -When Alice's application wants a TCP connection to a given -address and port, it asks the OP (via SOCKS) to make the -connection. The OP chooses the newest open circuit (or creates one if -needed), and chooses a suitable OR on that circuit to be the -exit node (usually the last node, but maybe others due to exit policy -conflicts; see Section~\ref{subsec:exitpolicies}.) The OP then opens -the stream by sending a \emph{relay begin} cell to the exit node, -using a new random streamID. Once the -exit node connects to the remote host, it responds -with a \emph{relay connected} cell. Upon receipt, the OP sends a -SOCKS reply to notify the application of its success. The OP -now accepts data from the application's TCP stream, packaging it into -\emph{relay data} cells and sending those cells along the circuit to -the chosen OR. - -There's a catch to using SOCKS, however---some applications pass the -alphanumeric hostname to the Tor client, while others resolve it into -an IP address first and then pass the IP address to the Tor client. If -the application does DNS resolution first, Alice thereby reveals her -destination to the remote DNS server, rather than sending the hostname -through the Tor network to be resolved at the far end. Common applications -like Mozilla and SSH have this flaw. - -With Mozilla, the flaw is easy to address: the filtering HTTP -proxy called Privoxy gives a hostname to the Tor client, so Alice's -computer never does DNS resolution. -But a portable general solution, such as is needed for -SSH, is -an open problem. Modifying or replacing the local nameserver -can be invasive, brittle, and unportable. Forcing the resolver -library to prefer TCP rather than UDP is hard, and also has -portability problems. Dynamically intercepting system calls to the -resolver library seems a promising direction. We could also provide -a tool similar to \emph{dig} to perform a private lookup through the -Tor network. Currently, we encourage the use of privacy-aware proxies -like Privoxy wherever possible. - -Closing a Tor stream is analogous to closing a TCP stream: it uses a -two-step handshake for normal operation, or a one-step handshake for -errors. If the stream closes abnormally, the adjacent node simply sends a -\emph{relay teardown} cell. If the stream closes normally, the node sends -a \emph{relay end} cell down the circuit, and the other side responds with -its own \emph{relay end} cell. Because -all relay cells use layered encryption, only the destination OR knows -that a given relay cell is a request to close a stream. This two-step -handshake allows Tor to support TCP-based applications that use half-closed -connections. -% such as broken HTTP clients that close their side of the -%stream after writing but are still willing to read. - -\subsection{Integrity checking on streams} -\label{subsec:integrity-checking} - -Because the old Onion Routing design used a stream cipher without integrity -checking, traffic was -vulnerable to a malleability attack: though the attacker could not -decrypt cells, any changes to encrypted data -would create corresponding changes to the data leaving the network. -This weakness allowed an adversary who could guess the encrypted content -to change a padding cell to a destroy -cell; change the destination address in a \emph{relay begin} cell to the -adversary's webserver; or change an FTP command from -{\tt dir} to {\tt rm~*}. (Even an external -adversary could do this, because the link encryption similarly used a -stream cipher.) - -Because Tor uses TLS on its links, external adversaries cannot modify -data. Addressing the insider malleability attack, however, is -more complex. - -We could do integrity checking of the relay cells at each hop, either -by including hashes or by using an authenticating cipher mode like -EAX~\cite{eax}, but there are some problems. First, these approaches -impose a message-expansion overhead at each hop, and so we would have to -either leak the path length or waste bytes by padding to a maximum -path length. Second, these solutions can only verify traffic coming -from Alice: ORs would not be able to produce suitable hashes for -the intermediate hops, since the ORs on a circuit do not know the -other ORs' session keys. Third, we have already accepted that our design -is vulnerable to end-to-end timing attacks; so tagging attacks performed -within the circuit provide no additional information to the attacker. - -Thus, we check integrity only at the edges of each stream. (Remember that -in our leaky-pipe circuit topology, a stream's edge could be any hop -in the circuit.) When Alice -negotiates a key with a new hop, they each initialize a SHA-1 -digest with a derivative of that key, -thus beginning with randomness that only the two of them know. -Then they each incrementally add to the SHA-1 digest the contents of -all relay cells they create, and include with each relay cell the -first four bytes of the current digest. Each also keeps a SHA-1 -digest of data received, to verify that the received hashes are correct. - -To be sure of removing or modifying a cell, the attacker must be able -to deduce the current digest state (which depends on all -traffic between Alice and Bob, starting with their negotiated key). -Attacks on SHA-1 where the adversary can incrementally add to a hash -to produce a new valid hash don't work, because all hashes are -end-to-end encrypted across the circuit. The computational overhead -of computing the digests is minimal compared to doing the AES -encryption performed at each hop of the circuit. We use only four -bytes per cell to minimize overhead; the chance that an adversary will -correctly guess a valid hash -%, plus the payload the current cell, -is -acceptably low, given that the OP or OR tear down the circuit if they -receive a bad hash. - -\subsection{Rate limiting and fairness} -\label{subsec:rate-limit} - -Volunteers are more willing to run services that can limit -their bandwidth usage. To accommodate them, Tor servers use a -token bucket approach~\cite{tannenbaum96} to -enforce a long-term average rate of incoming bytes, while still -permitting short-term bursts above the allowed bandwidth. -% Current bucket sizes are set to ten seconds' worth of traffic. - -%Further, we want to avoid starving any Tor streams. Entire circuits -%could starve if we read greedily from connections and one connection -%uses all the remaining bandwidth. We solve this by dividing the number -%of tokens in the bucket by the number of connections that want to read, -%and reading at most that number of bytes from each connection. We iterate -%this procedure until the number of tokens in the bucket is under some -%threshold (currently 10KB), at which point we greedily read from connections. - -Because the Tor protocol outputs about the same number of bytes as it -takes in, it is sufficient in practice to limit only incoming bytes. -With TCP streams, however, the correspondence is not one-to-one: -relaying a single incoming byte can require an entire 512-byte cell. -(We can't just wait for more bytes, because the local application may -be awaiting a reply.) Therefore, we treat this case as if the entire -cell size had been read, regardless of the cell's fullness. - -Further, inspired by Rennhard et al's design in~\cite{anonnet}, a -circuit's edges can heuristically distinguish interactive streams from bulk -streams by comparing the frequency with which they supply cells. We can -provide good latency for interactive streams by giving them preferential -service, while still giving good overall throughput to the bulk -streams. Such preferential treatment presents a possible end-to-end -attack, but an adversary observing both -ends of the stream can already learn this information through timing -attacks. - -\subsection{Congestion control} -\label{subsec:congestion} - -Even with bandwidth rate limiting, we still need to worry about -congestion, either accidental or intentional. If enough users choose the -same OR-to-OR connection for their circuits, that connection can become -saturated. For example, an attacker could send a large file -through the Tor network to a webserver he runs, and then -refuse to read any of the bytes at the webserver end of the -circuit. Without some congestion control mechanism, these bottlenecks -can propagate back through the entire network. We don't need to -reimplement full TCP windows (with sequence numbers, -the ability to drop cells when we're full and retransmit later, and so -on), -because TCP already guarantees in-order delivery of each -cell. -%But we need to investigate further the effects of the current -%parameters on throughput and latency, while also keeping privacy in mind; -%see Section~\ref{sec:maintaining-anonymity} for more discussion. -We describe our response below. - -\textbf{Circuit-level throttling:} -To control a circuit's bandwidth usage, each OR keeps track of two -windows. The \emph{packaging window} tracks how many relay data cells the OR is -allowed to package (from incoming TCP streams) for transmission back to the OP, -and the \emph{delivery window} tracks how many relay data cells it is willing -to deliver to TCP streams outside the network. Each window is initialized -(say, to 1000 data cells). When a data cell is packaged or delivered, -the appropriate window is decremented. When an OR has received enough -data cells (currently 100), it sends a \emph{relay sendme} cell towards the OP, -with streamID zero. When an OR receives a \emph{relay sendme} cell with -streamID zero, it increments its packaging window. Either of these cells -increments the corresponding window by 100. If the packaging window -reaches 0, the OR stops reading from TCP connections for all streams -on the corresponding circuit, and sends no more relay data cells until -receiving a \emph{relay sendme} cell. - -The OP behaves identically, except that it must track a packaging window -and a delivery window for every OR in the circuit. If a packaging window -reaches 0, it stops reading from streams destined for that OR. - -\textbf{Stream-level throttling}: -The stream-level congestion control mechanism is similar to the -circuit-level mechanism. ORs and OPs use \emph{relay sendme} cells -to implement end-to-end flow control for individual streams across -circuits. Each stream begins with a packaging window (currently 500 cells), -and increments the window by a fixed value (50) upon receiving a \emph{relay -sendme} cell. Rather than always returning a \emph{relay sendme} cell as soon -as enough cells have arrived, the stream-level congestion control also -has to check whether data has been successfully flushed onto the TCP -stream; it sends the \emph{relay sendme} cell only when the number of bytes pending -to be flushed is under some threshold (currently 10 cells' worth). - -%% Maybe omit this next paragraph. -NM -%Currently, non-data relay cells do not affect the windows. Thus we -%avoid potential deadlock issues, for example, arising because a stream -%can't send a \emph{relay sendme} cell when its packaging window is empty. - -These arbitrarily chosen parameters seem to give tolerable throughput -and delay; see Section~\ref{sec:in-the-wild}. - -\section{Rendezvous Points and hidden services} -\label{sec:rendezvous} - -Rendezvous points are a building block for \emph{location-hidden -services} (also known as \emph{responder anonymity}) in the Tor -network. Location-hidden services allow Bob to offer a TCP -service, such as a webserver, without revealing his IP address. -This type of anonymity protects against distributed DoS attacks: -attackers are forced to attack the onion routing network -because they do not know Bob's IP address. - -Our design for location-hidden servers has the following goals. -\textbf{Access-control:} Bob needs a way to filter incoming requests, -so an attacker cannot flood Bob simply by making many connections to him. -\textbf{Robustness:} Bob should be able to maintain a long-term pseudonymous -identity even in the presence of router failure. Bob's service must -not be tied to a single OR, and Bob must be able to migrate his service -across ORs. \textbf{Smear-resistance:} -A social attacker -should not be able to ``frame'' a rendezvous router by -offering an illegal or disreputable location-hidden service and -making observers believe the router created that service. -\textbf{Application-transparency:} Although we require users -to run special software to access location-hidden servers, we must not -require them to modify their applications. - -We provide location-hiding for Bob by allowing him to advertise -several onion routers (his \emph{introduction points}) as contact -points. He may do this on any robust efficient -key-value lookup system with authenticated updates, such as a -distributed hash table (DHT) like CFS~\cite{cfs:sosp01}.\footnote{ -Rather than rely on an external infrastructure, the Onion Routing network -can run the lookup service itself. Our current implementation provides a -simple lookup system on the -directory servers.} Alice, the client, chooses an OR as her -\emph{rendezvous point}. She connects to one of Bob's introduction -points, informs him of her rendezvous point, and then waits for him -to connect to the rendezvous point. This extra level of indirection -helps Bob's introduction points avoid problems associated with serving -unpopular files directly (for example, if Bob serves -material that the introduction point's community finds objectionable, -or if Bob's service tends to get attacked by network vandals). -The extra level of indirection also allows Bob to respond to some requests -and ignore others. - -\subsection{Rendezvous points in Tor} - -The following steps are -%We give an overview of the steps of a rendezvous. These are -performed on behalf of Alice and Bob by their local OPs; -application integration is described more fully below. - -\begin{tightlist} -\item Bob generates a long-term public key pair to identify his service. -\item Bob chooses some introduction points, and advertises them on - the lookup service, signing the advertisement with his public key. He - can add more later. -\item Bob builds a circuit to each of his introduction points, and tells - them to wait for requests. -\item Alice learns about Bob's service out of band (perhaps Bob told her, - or she found it on a website). She retrieves the details of Bob's - service from the lookup service. If Alice wants to access Bob's - service anonymously, she must connect to the lookup service via Tor. -\item Alice chooses an OR as the rendezvous point (RP) for her connection to - Bob's service. She builds a circuit to the RP, and gives it a - randomly chosen ``rendezvous cookie'' to recognize Bob. -\item Alice opens an anonymous stream to one of Bob's introduction - points, and gives it a message (encrypted with Bob's public key) - telling it about herself, - her RP and rendezvous cookie, and the - start of a DH - handshake. The introduction point sends the message to Bob. -\item If Bob wants to talk to Alice, he builds a circuit to Alice's - RP and sends the rendezvous cookie, the second half of the DH - handshake, and a hash of the session - key they now share. By the same argument as in - Section~\ref{subsubsec:constructing-a-circuit}, Alice knows she - shares the key only with Bob. -\item The RP connects Alice's circuit to Bob's. Note that RP can't - recognize Alice, Bob, or the data they transmit. -\item Alice sends a \emph{relay begin} cell along the circuit. It - arrives at Bob's OP, which connects to Bob's - webserver. -\item An anonymous stream has been established, and Alice and Bob - communicate as normal. -\end{tightlist} - -When establishing an introduction point, Bob provides the onion router -with the public key identifying his service. Bob signs his -messages, so others cannot usurp his introduction point -in the future. He uses the same public key to establish the other -introduction points for his service, and periodically refreshes his -entry in the lookup service. - -The message that Alice gives -the introduction point includes a hash of Bob's public key % to identify -%the service, along with -and an optional initial authorization token (the -introduction point can do prescreening, for example to block replays). Her -message to Bob may include an end-to-end authorization token so Bob -can choose whether to respond. -The authorization tokens can be used to provide selective access: -important users can get uninterrupted access. -%important users get tokens to ensure uninterrupted access. %to the -%service. -During normal situations, Bob's service might simply be offered -directly from mirrors, while Bob gives out tokens to high-priority users. If -the mirrors are knocked down, -%by distributed DoS attacks or even -%physical attack, -those users can switch to accessing Bob's service via -the Tor rendezvous system. - -Bob's introduction points are themselves subject to DoS---he must -open many introduction points or risk such an attack. -He can provide selected users with a current list or future schedule of -unadvertised introduction points; -this is most practical -if there is a stable and large group of introduction points -available. Bob could also give secret public keys -for consulting the lookup service. All of these approaches -limit exposure even when -some selected users collude in the DoS\@. - -\subsection{Integration with user applications} - -Bob configures his onion proxy to know the local IP address and port of his -service, a strategy for authorizing clients, and his public key. The onion -proxy anonymously publishes a signed statement of Bob's -public key, an expiration time, and -the current introduction points for his service onto the lookup service, -indexed -by the hash of his public key. Bob's webserver is unmodified, -and doesn't even know that it's hidden behind the Tor network. - -Alice's applications also work unchanged---her client interface -remains a SOCKS proxy. We encode all of the necessary information -into the fully qualified domain name (FQDN) Alice uses when establishing her -connection. Location-hidden services use a virtual top level domain -called {\tt .onion}: thus hostnames take the form {\tt x.y.onion} where -{\tt x} is the authorization cookie and {\tt y} encodes the hash of -the public key. Alice's onion proxy -examines addresses; if they're destined for a hidden server, it decodes -the key and starts the rendezvous as described above. - -\subsection{Previous rendezvous work} -%XXXX Should this get integrated into the earlier related work section? -NM - -Rendezvous points in low-latency anonymity systems were first -described for use in ISDN telephony~\cite{jerichow-jsac98,isdn-mixes}. -Later low-latency designs used rendezvous points for hiding location -of mobile phones and low-power location -trackers~\cite{federrath-ih96,reed-protocols97}. Rendezvous for -anonymizing low-latency -Internet connections was suggested in early Onion Routing -work~\cite{or-ih96}, but the first published design was by Ian -Goldberg~\cite{ian-thesis}. His design differs from -ours in three ways. First, Goldberg suggests that Alice should manually -hunt down a current location of the service via Gnutella; our approach -makes lookup transparent to the user, as well as faster and more robust. -Second, in Tor the client and server negotiate session keys -with Diffie-Hellman, so plaintext is not exposed even at the rendezvous -point. Third, -our design minimizes the exposure from running the -service, to encourage volunteers to offer introduction and rendezvous -services. Tor's introduction points do not output any bytes to the -clients; the rendezvous points don't know the client or the server, -and can't read the data being transmitted. The indirection scheme is -also designed to include authentication/authorization---if Alice doesn't -include the right cookie with her request for service, Bob need not even -acknowledge his existence. - -\section{Other design decisions} -\label{sec:other-design} - -\subsection{Denial of service} -\label{subsec:dos} - -Providing Tor as a public service creates many opportunities for -denial-of-service attacks against the network. While -flow control and rate limiting (discussed in -Section~\ref{subsec:congestion}) prevent users from consuming more -bandwidth than routers are willing to provide, opportunities remain for -users to -consume more network resources than their fair share, or to render the -network unusable for others. - -First of all, there are several CPU-consuming denial-of-service -attacks wherein an attacker can force an OR to perform expensive -cryptographic operations. For example, an attacker can -%\emph{create} cell full of junk bytes can force an OR to perform an RSA -%decrypt. -%Similarly, an attacker can -fake the start of a TLS handshake, forcing the OR to carry out its -(comparatively expensive) half of the handshake at no real computational -cost to the attacker. - -We have not yet implemented any defenses for these attacks, but several -approaches are possible. First, ORs can -require clients to solve a puzzle~\cite{puzzles-tls} while beginning new -TLS handshakes or accepting \emph{create} cells. So long as these -tokens are easy to verify and computationally expensive to produce, this -approach limits the attack multiplier. Additionally, ORs can limit -the rate at which they accept \emph{create} cells and TLS connections, -so that -the computational work of processing them does not drown out the -symmetric cryptography operations that keep cells -flowing. This rate limiting could, however, allow an attacker -to slow down other users when they build new circuits. - -% What about link-to-link rate limiting? - -Adversaries can also attack the Tor network's hosts and network -links. Disrupting a single circuit or link breaks all streams passing -along that part of the circuit. Users similarly lose service -when a router crashes or its operator restarts it. The current -Tor design treats such attacks as intermittent network failures, and -depends on users and applications to respond or recover as appropriate. A -future design could use an end-to-end TCP-like acknowledgment protocol, -so no streams are lost unless the entry or exit point is -disrupted. This solution would require more buffering at the network -edges, however, and the performance and anonymity implications from this -extra complexity still require investigation. - -\subsection{Exit policies and abuse} -\label{subsec:exitpolicies} - -% originally, we planned to put the "users only know the hostname, -% not the IP, but exit policies are by IP" problem here too. Not -% worth putting in the submission, but worth thinking about putting -% in sometime somehow. -RD - -Exit abuse is a serious barrier to wide-scale Tor deployment. Anonymity -presents would-be vandals and abusers with an opportunity to hide -the origins of their activities. Attackers can harm the Tor network by -implicating exit servers for their abuse. Also, applications that commonly -use IP-based authentication (such as institutional mail or webservers) -can be fooled by the fact that anonymous connections appear to originate -at the exit OR. - -We stress that Tor does not enable any new class of abuse. Spammers -and other attackers already have access to thousands of misconfigured -systems worldwide, and the Tor network is far from the easiest way -to launch attacks. -%Indeed, because of its limited -%anonymity, Tor is probably not a good way to commit crimes. -But because the -onion routers can be mistaken for the originators of the abuse, -and the volunteers who run them may not want to deal with the hassle of -explaining anonymity networks to irate administrators, we must block or limit -abuse through the Tor network. - -To mitigate abuse issues, each onion router's \emph{exit policy} -describes to which external addresses and ports the router will -connect. On one end of the spectrum are \emph{open exit} -nodes that will connect anywhere. On the other end are \emph{middleman} -nodes that only relay traffic to other Tor nodes, and \emph{private exit} -nodes that only connect to a local host or network. A private -exit can allow a client to connect to a given host or -network more securely---an external adversary cannot eavesdrop traffic -between the private exit and the final destination, and so is less sure of -Alice's destination and activities. Most onion routers in the current -network function as -\emph{restricted exits} that permit connections to the world at large, -but prevent access to certain abuse-prone addresses and services such -as SMTP. -The OR might also be able to authenticate clients to -prevent exit abuse without harming anonymity~\cite{or-discex00}. - -%The abuse issues on closed (e.g. military) networks are different -%from the abuse on open networks like the Internet. While these IP-based -%access controls are still commonplace on the Internet, on closed networks, -%nearly all participants will be honest, and end-to-end authentication -%can be assumed for important traffic. - -Many administrators use port restrictions to support only a -limited set of services, such as HTTP, SSH, or AIM. -This is not a complete solution, of course, since abuse opportunities for these -protocols are still well known. - -We have not yet encountered any abuse in the deployed network, but if -we do we should consider using proxies to clean traffic for certain -protocols as it leaves the network. For example, much abusive HTTP -behavior (such as exploiting buffer overflows or well-known script -vulnerabilities) can be detected in a straightforward manner. -Similarly, one could run automatic spam filtering software (such as -SpamAssassin) on email exiting the OR network. - -ORs may also rewrite exiting traffic to append -headers or other information indicating that the traffic has passed -through an anonymity service. This approach is commonly used -by email-only anonymity systems. ORs can also -run on servers with hostnames like {\tt anonymous} to further -alert abuse targets to the nature of the anonymous traffic. - -A mixture of open and restricted exit nodes allows the most -flexibility for volunteers running servers. But while having many -middleman nodes provides a large and robust network, -having only a few exit nodes reduces the number of points -an adversary needs to monitor for traffic analysis, and places a -greater burden on the exit nodes. This tension can be seen in the -Java Anon Proxy -cascade model, wherein only one node in each cascade needs to handle -abuse complaints---but an adversary only needs to observe the entry -and exit of a cascade to perform traffic analysis on all that -cascade's users. The hydra model (many entries, few exits) presents a -different compromise: only a few exit nodes are needed, but an -adversary needs to work harder to watch all the clients; see -Section~\ref{sec:conclusion}. - -Finally, we note that exit abuse must not be dismissed as a peripheral -issue: when a system's public image suffers, it can reduce the number -and diversity of that system's users, and thereby reduce the anonymity -of the system itself. Like usability, public perception is a -security parameter. Sadly, preventing abuse of open exit nodes is an -unsolved problem, and will probably remain an arms race for the -foreseeable future. The abuse problems faced by Princeton's CoDeeN -project~\cite{darkside} give us a glimpse of likely issues. - -\subsection{Directory Servers} -\label{subsec:dirservers} - -First-generation Onion Routing designs~\cite{freedom2-arch,or-jsac98} used -in-band network status updates: each router flooded a signed statement -to its neighbors, which propagated it onward. But anonymizing networks -have different security goals than typical link-state routing protocols. -For example, delays (accidental or intentional) -that can cause different parts of the network to have different views -of link-state and topology are not only inconvenient: they give -attackers an opportunity to exploit differences in client knowledge. -We also worry about attacks to deceive a -client about the router membership list, topology, or current network -state. Such \emph{partitioning attacks} on client knowledge help an -adversary to efficiently deploy resources -against a target~\cite{minion-design}. - -Tor uses a small group of redundant, well-known onion routers to -track changes in network topology and node state, including keys and -exit policies. Each such \emph{directory server} acts as an HTTP -server, so clients can fetch current network state -and router lists, and so other ORs can upload -state information. Onion routers periodically publish signed -statements of their state to each directory server. The directory servers -combine this information with their own views of network liveness, -and generate a signed description (a \emph{directory}) of the entire -network state. Client software is -pre-loaded with a list of the directory servers and their keys, -to bootstrap each client's view of the network. -% XXX this means that clients will be forced to upgrade as the -% XXX dirservers change or get compromised. argue that this is ok. - -When a directory server receives a signed statement for an OR, it -checks whether the OR's identity key is recognized. Directory -servers do not advertise unrecognized ORs---if they did, -an adversary could take over the network by creating many -servers~\cite{sybil}. Instead, new nodes must be approved by the -directory -server administrator before they are included. Mechanisms for automated -node approval are an area of active research, and are discussed more -in Section~\ref{sec:maintaining-anonymity}. - -Of course, a variety of attacks remain. An adversary who controls -a directory server can track clients by providing them different -information---perhaps by listing only nodes under its control, or by -informing only certain clients about a given node. Even an external -adversary can exploit differences in client knowledge: clients who use -a node listed on one directory server but not the others are vulnerable. - -Thus these directory servers must be synchronized and redundant, so -that they can agree on a common directory. Clients should only trust -this directory if it is signed by a threshold of the directory -servers. - -The directory servers in Tor are modeled after those in -Mixminion~\cite{minion-design}, but our situation is easier. First, -we make the -simplifying assumption that all participants agree on the set of -directory servers. Second, while Mixminion needs to predict node -behavior, Tor only needs a threshold consensus of the current -state of the network. Third, we assume that we can fall back to the -human administrators to discover and resolve problems when a consensus -directory cannot be reached. Since there are relatively few directory -servers (currently 3, but we expect as many as 9 as the network scales), -we can afford operations like broadcast to simplify the consensus-building -protocol. - -To avoid attacks where a router connects to all the directory servers -but refuses to relay traffic from other routers, the directory servers -must also build circuits and use them to anonymously test router -reliability~\cite{mix-acc}. Unfortunately, this defense is not yet -designed or -implemented. - -Using directory servers is simpler and more flexible than flooding. -Flooding is expensive, and complicates the analysis when we -start experimenting with non-clique network topologies. Signed -directories can be cached by other -onion routers, -so directory servers are not a performance -bottleneck when we have many users, and do not aid traffic analysis by -forcing clients to announce their existence to any -central point. - -\section{Attacks and Defenses} -\label{sec:attacks} - -Below we summarize a variety of attacks, and discuss how well our -design withstands them.\\ - -\noindent{\large\bf Passive attacks}\\ -\emph{Observing user traffic patterns.} Observing a user's connection -will not reveal her destination or data, but it will -reveal traffic patterns (both sent and received). Profiling via user -connection patterns requires further processing, because multiple -application streams may be operating simultaneously or in series over -a single circuit. - -\emph{Observing user content.} While content at the user end is encrypted, -connections to responders may not be (indeed, the responding website -itself may be hostile). While filtering content is not a primary goal -of Onion Routing, Tor can directly use Privoxy and related -filtering services to anonymize application data streams. - -\emph{Option distinguishability.} We allow clients to choose -configuration options. For example, clients concerned about request -linkability should rotate circuits more often than those concerned -about traceability. Allowing choice may attract users with different -%There is economic incentive to attract users by -%allowing this choice; -needs; but clients who are -in the minority may lose more anonymity by appearing distinct than they -gain by optimizing their behavior~\cite{econymics}. - -\emph{End-to-end timing correlation.} Tor only minimally hides -such correlations. An attacker watching patterns of -traffic at the initiator and the responder will be -able to confirm the correspondence with high probability. The -greatest protection currently available against such confirmation is to hide -the connection between the onion proxy and the first Tor node, -by running the OP on the Tor node or behind a firewall. This approach -requires an observer to separate traffic originating at the onion -router from traffic passing through it: a global observer can do this, -but it might be beyond a limited observer's capabilities. - -\emph{End-to-end size correlation.} Simple packet counting -will also be effective in confirming -endpoints of a stream. However, even without padding, we may have some -limited protection: the leaky pipe topology means different numbers -of packets may enter one end of a circuit than exit at the other. - -\emph{Website fingerprinting.} All the effective passive -attacks above are traffic confirmation attacks, -which puts them outside our design goals. There is also -a passive traffic analysis attack that is potentially effective. -Rather than searching exit connections for timing and volume -correlations, the adversary may build up a database of -``fingerprints'' containing file sizes and access patterns for -targeted websites. He can later confirm a user's connection to a given -site simply by consulting the database. This attack has -been shown to be effective against SafeWeb~\cite{hintz-pet02}. -It may be less effective against Tor, since -streams are multiplexed within the same circuit, and -fingerprinting will be limited to -the granularity of cells (currently 512 bytes). Additional -defenses could include -larger cell sizes, padding schemes to group websites -into large sets, and link -padding or long-range dummies.\footnote{Note that this fingerprinting -attack should not be confused with the much more complicated latency -attacks of~\cite{back01}, which require a fingerprint of the latencies -of all circuits through the network, combined with those from the -network edges to the target user and the responder website.}\\ - -\noindent{\large\bf Active attacks}\\ -\emph{Compromise keys.} An attacker who learns the TLS session key can -see control cells and encrypted relay cells on every circuit on that -connection; learning a circuit -session key lets him unwrap one layer of the encryption. An attacker -who learns an OR's TLS private key can impersonate that OR for the TLS -key's lifetime, but he must -also learn the onion key to decrypt \emph{create} cells (and because of -perfect forward secrecy, he cannot hijack already established circuits -without also compromising their session keys). Periodic key rotation -limits the window of opportunity for these attacks. On the other hand, -an attacker who learns a node's identity key can replace that node -indefinitely by sending new forged descriptors to the directory servers. - -\emph{Iterated compromise.} A roving adversary who can -compromise ORs (by system intrusion, legal coercion, or extralegal -coercion) could march down the circuit compromising the -nodes until he reaches the end. Unless the adversary can complete -this attack within the lifetime of the circuit, however, the ORs -will have discarded the necessary information before the attack can -be completed. (Thanks to the perfect forward secrecy of session -keys, the attacker cannot force nodes to decrypt recorded -traffic once the circuits have been closed.) Additionally, building -circuits that cross jurisdictions can make legal coercion -harder---this phenomenon is commonly called ``jurisdictional -arbitrage.'' The Java Anon Proxy project recently experienced the -need for this approach, when -a German court forced them to add a backdoor to -their nodes~\cite{jap-backdoor}. - -\emph{Run a recipient.} An adversary running a webserver -trivially learns the timing patterns of users connecting to it, and -can introduce arbitrary patterns in its responses. -End-to-end attacks become easier: if the adversary can induce -users to connect to his webserver (perhaps by advertising -content targeted to those users), he now holds one end of their -connection. There is also a danger that application -protocols and associated programs can be induced to reveal information -about the initiator. Tor depends on Privoxy and similar protocol cleaners -to solve this latter problem. - -\emph{Run an onion proxy.} It is expected that end users will -nearly always run their own local onion proxy. However, in some -settings, it may be necessary for the proxy to run -remotely---typically, in institutions that want -to monitor the activity of those connecting to the proxy. -Compromising an onion proxy compromises all future connections -through it. - -\emph{DoS non-observed nodes.} An observer who can only watch some -of the Tor network can increase the value of this traffic -by attacking non-observed nodes to shut them down, reduce -their reliability, or persuade users that they are not trustworthy. -The best defense here is robustness. - -\emph{Run a hostile OR.} In addition to being a local observer, -an isolated hostile node can create circuits through itself, or alter -traffic patterns to affect traffic at other nodes. Nonetheless, a hostile -node must be immediately adjacent to both endpoints to compromise the -anonymity of a circuit. If an adversary can -run multiple ORs, and can persuade the directory servers -that those ORs are trustworthy and independent, then occasionally -some user will choose one of those ORs for the start and another -as the end of a circuit. If an adversary -controls $m>1$ of $N$ nodes, he can correlate at most -$\left(\frac{m}{N}\right)^2$ of the traffic---although an -adversary -could still attract a disproportionately large amount of traffic -by running an OR with a permissive exit policy, or by -degrading the reliability of other routers. - -\emph{Introduce timing into messages.} This is simply a stronger -version of passive timing attacks already discussed earlier. - -\emph{Tagging attacks.} A hostile node could ``tag'' a -cell by altering it. If the -stream were, for example, an unencrypted request to a Web site, -the garbled content coming out at the appropriate time would confirm -the association. However, integrity checks on cells prevent -this attack. - -\emph{Replace contents of unauthenticated protocols.} When -relaying an unauthenticated protocol like HTTP, a hostile exit node -can impersonate the target server. Clients -should prefer protocols with end-to-end authentication. - -\emph{Replay attacks.} Some anonymity protocols are vulnerable -to replay attacks. Tor is not; replaying one side of a handshake -will result in a different negotiated session key, and so the rest -of the recorded session can't be used. - -\emph{Smear attacks.} An attacker could use the Tor network for -socially disapproved acts, to bring the -network into disrepute and get its operators to shut it down. -Exit policies reduce the possibilities for abuse, but -ultimately the network requires volunteers who can tolerate -some political heat. - -\emph{Distribute hostile code.} An attacker could trick users -into running subverted Tor software that did not, in fact, anonymize -their connections---or worse, could trick ORs into running weakened -software that provided users with less anonymity. We address this -problem (but do not solve it completely) by signing all Tor releases -with an official public key, and including an entry in the directory -that lists which versions are currently believed to be secure. To -prevent an attacker from subverting the official release itself -(through threats, bribery, or insider attacks), we provide all -releases in source code form, encourage source audits, and -frequently warn our users never to trust any software (even from -us) that comes without source.\\ - -\noindent{\large\bf Directory attacks}\\ -\emph{Destroy directory servers.} If a few directory -servers disappear, the others still decide on a valid -directory. So long as any directory servers remain in operation, -they will still broadcast their views of the network and generate a -consensus directory. (If more than half are destroyed, this -directory will not, however, have enough signatures for clients to -use it automatically; human intervention will be necessary for -clients to decide whether to trust the resulting directory.) - -\emph{Subvert a directory server.} By taking over a directory server, -an attacker can partially influence the final directory. Since ORs -are included or excluded by majority vote, the corrupt directory can -at worst cast a tie-breaking vote to decide whether to include -marginal ORs. It remains to be seen how often such marginal cases -occur in practice. - -\emph{Subvert a majority of directory servers.} An adversary who controls -more than half the directory servers can include as many compromised -ORs in the final directory as he wishes. We must ensure that directory -server operators are independent and attack-resistant. - -\emph{Encourage directory server dissent.} The directory -agreement protocol assumes that directory server operators agree on -the set of directory servers. An adversary who can persuade some -of the directory server operators to distrust one another could -split the quorum into mutually hostile camps, thus partitioning -users based on which directory they use. Tor does not address -this attack. - -\emph{Trick the directory servers into listing a hostile OR.} -Our threat model explicitly assumes directory server operators will -be able to filter out most hostile ORs. -% If this is not true, an -% attacker can flood the directory with compromised servers. - -\emph{Convince the directories that a malfunctioning OR is -working.} In the current Tor implementation, directory servers -assume that an OR is running correctly if they can start a TLS -connection to it. A hostile OR could easily subvert this test by -accepting TLS connections from ORs but ignoring all cells. Directory -servers must actively test ORs by building circuits and streams as -appropriate. The tradeoffs of a similar approach are discussed -in~\cite{mix-acc}.\\ - -\noindent{\large\bf Attacks against rendezvous points}\\ -\emph{Make many introduction requests.} An attacker could -try to deny Bob service by flooding his introduction points with -requests. Because the introduction points can block requests that -lack authorization tokens, however, Bob can restrict the volume of -requests he receives, or require a certain amount of computation for -every request he receives. - -\emph{Attack an introduction point.} An attacker could -disrupt a location-hidden service by disabling its introduction -points. But because a service's identity is attached to its public -key, the service can simply re-advertise -itself at a different introduction point. Advertisements can also be -done secretly so that only high-priority clients know the address of -Bob's introduction points or so that different clients know of different -introduction points. This forces the attacker to disable all possible -introduction points. - -\emph{Compromise an introduction point.} An attacker who controls -Bob's introduction point can flood Bob with -introduction requests, or prevent valid introduction requests from -reaching him. Bob can notice a flood, and close the circuit. To notice -blocking of valid requests, however, he should periodically test the -introduction point by sending rendezvous requests and making -sure he receives them. - -\emph{Compromise a rendezvous point.} A rendezvous -point is no more sensitive than any other OR on -a circuit, since all data passing through the rendezvous is encrypted -with a session key shared by Alice and Bob. - -\section{Early experiences: Tor in the Wild} -\label{sec:in-the-wild} - -As of mid-May 2004, the Tor network consists of 32 nodes -(24 in the US, 8 in Europe), and more are joining each week as the code -matures. (For comparison, the current remailer network -has about 40 nodes.) % We haven't asked PlanetLab to provide -%Tor nodes, since their AUP wouldn't allow exit nodes (see -%also~\cite{darkside}) and because we aim to build a long-term community of -%node operators and developers.} -Each node has at least a 768Kb/768Kb connection, and -many have 10Mb. The number of users varies (and of course, it's hard to -tell for sure), but we sometimes have several hundred users---administrators at -several companies have begun sending their entire departments' web -traffic through Tor, to block other divisions of -their company from reading their traffic. Tor users have reported using -the network for web browsing, FTP, IRC, AIM, Kazaa, SSH, and -recipient-anonymous email via rendezvous points. One user has anonymously -set up a Wiki as a hidden service, where other users anonymously publish -the addresses of their hidden services. - -Each Tor node currently processes roughly 800,000 relay -cells (a bit under half a gigabyte) per week. On average, about 80\% -of each 498-byte payload is full for cells going back to the client, -whereas about 40\% is full for cells coming from the client. (The difference -arises because most of the network's traffic is web browsing.) Interactive -traffic like SSH brings down the average a lot---once we have more -experience, and assuming we can resolve the anonymity issues, we may -partition traffic into two relay cell sizes: one to handle -bulk traffic and one for interactive traffic. - -Based in part on our restrictive default exit policy (we -reject SMTP requests) and our low profile, we have had no abuse -issues since the network was deployed in October -2003. Our slow growth rate gives us time to add features, -resolve bugs, and get a feel for what users actually want from an -anonymity system. Even though having more users would bolster our -anonymity sets, we are not eager to attract the Kazaa or warez -communities---we feel that we must build a reputation for privacy, human -rights, research, and other socially laudable activities. - -As for performance, profiling shows that Tor spends almost -all its CPU time in AES, which is fast. Current latency is attributable -to two factors. First, network latency is critical: we are -intentionally bouncing traffic around the world several times. Second, -our end-to-end congestion control algorithm focuses on protecting -volunteer servers from accidental DoS rather than on optimizing -performance. % Right now the first $500 \times 500\mbox{B}=250\mbox{KB}$ -%of the stream arrives -%quickly, and after that throughput depends on the rate that \emph{relay -%sendme} acknowledgments arrive. -To quantify these effects, we did some informal tests using a network of 4 -nodes on the same machine (a heavily loaded 1GHz Athlon). We downloaded a 60 -megabyte file from {\tt debian.org} every 30 minutes for 54 hours (108 sample -points). It arrived in about 300 seconds on average, compared to 210s for a -direct download. We ran a similar test on the production Tor network, -fetching the front page of {\tt cnn.com} (55 kilobytes): -% every 20 seconds for 8952 data points -while a direct -download consistently took about 0.3s, the performance through Tor varied. -Some downloads were as fast as 0.4s, with a median at 2.8s, and -90\% finishing within 5.3s. It seems that as the network expands, the chance -of building a slow circuit (one that includes a slow or heavily loaded node -or link) is increasing. On the other hand, as our users remain satisfied -with this increased latency, we can address our performance incrementally as we -proceed with development. %\footnote{For example, we have just begun pushing -%a pipelining patch to the production network that seems to decrease -%latency for medium-to-large files; we will present revised benchmarks -%as they become available.} - -%With the current network's topology and load, users can typically get 1-2 -%megabits sustained transfer rate, which is good enough for now. -%Indeed, the Tor -%design aims foremost to provide a security research platform; performance -%only needs to be sufficient to retain users~\cite{econymics,back01}. -%We can tweak the congestion control -%parameters to provide faster throughput at the cost of -%larger buffers at each node; adding the heuristics mentioned in -%Section~\ref{subsec:rate-limit} to favor low-volume -%streams may also help. More research remains to find the -%right balance. -% We should say _HOW MUCH_ latency there is in these cases. -NM - -%performs badly on lossy networks. may need airhook or something else as -%transport alternative? - -Although Tor's clique topology and full-visibility directories present -scaling problems, we still expect the network to support a few hundred -nodes and maybe 10,000 users before we're forced to become -more distributed. With luck, the experience we gain running the current -topology will help us choose among alternatives when the time comes. - -\section{Open Questions in Low-latency Anonymity} -\label{sec:maintaining-anonymity} - -In addition to the non-goals in -Section~\ref{subsec:non-goals}, many questions must be solved -before we can be confident of Tor's security. - -Many of these open issues are questions of balance. For example, -how often should users rotate to fresh circuits? Frequent rotation -is inefficient, expensive, and may lead to intersection attacks and -predecessor attacks~\cite{wright03}, but infrequent rotation makes the -user's traffic linkable. Besides opening fresh circuits, clients can -also exit from the middle of the circuit, -or truncate and re-extend the circuit. More analysis is -needed to determine the proper tradeoff. - -%% Duplicated by 'Better directory distribution' in section 9. -% -%A similar question surrounds timing of directory operations: how often -%should directories be updated? Clients that update infrequently receive -%an inaccurate picture of the network, but frequent updates can overload -%the directory servers. More generally, we must find more -%decentralized yet practical ways to distribute up-to-date snapshots of -%network status without introducing new attacks. - -How should we choose path lengths? If Alice always uses two hops, -then both ORs can be certain that by colluding they will learn about -Alice and Bob. In our current approach, Alice always chooses at least -three nodes unrelated to herself and her destination. -%% This point is subtle, but not IMO necessary. Anybody who thinks -%% about it will see that it's implied by the above sentence; anybody -%% who doesn't think about it is safe in his ignorance. -% -%Thus normally she chooses -%three nodes, but if she is running an OR and her destination is on an OR, -%she uses five. -Should Alice choose a random path length (e.g.~from a geometric -distribution) to foil an attacker who -uses timing to learn that he is the fifth hop and thus concludes that -both Alice and the responder are running ORs? - -Throughout this paper, we have assumed that end-to-end traffic -confirmation will immediately and automatically defeat a low-latency -anonymity system. Even high-latency anonymity systems can be -vulnerable to end-to-end traffic confirmation, if the traffic volumes -are high enough, and if users' habits are sufficiently -distinct~\cite{statistical-disclosure,limits-open}. Can anything be -done to -make low-latency systems resist these attacks as well as high-latency -systems? Tor already makes some effort to conceal the starts and ends of -streams by wrapping long-range control commands in identical-looking -relay cells. Link padding could frustrate passive observers who count -packets; long-range padding could work against observers who own the -first hop in a circuit. But more research remains to find an efficient -and practical approach. Volunteers prefer not to run constant-bandwidth -padding; but no convincing traffic shaping approach has been -specified. Recent work on long-range padding~\cite{defensive-dropping} -shows promise. One could also try to reduce correlation in packet timing -by batching and re-ordering packets, but it is unclear whether this could -improve anonymity without introducing so much latency as to render the -network unusable. - -A cascade topology may better defend against traffic confirmation by -aggregating users, and making padding and -mixing more affordable. Does the hydra topology (many input nodes, -few output nodes) work better against some adversaries? Are we going -to get a hydra anyway because most nodes will be middleman nodes? - -Common wisdom suggests that Alice should run her own OR for best -anonymity, because traffic coming from her node could plausibly have -come from elsewhere. How much mixing does this approach need? Is it -immediately beneficial because of real-world adversaries that can't -observe Alice's router, but can run routers of their own? - -To scale to many users, and to prevent an attacker from observing the -whole network, it may be necessary -to support far more servers than Tor currently anticipates. -This introduces several issues. First, if approval by a central set -of directory servers is no longer feasible, what mechanism should be used -to prevent adversaries from signing up many colluding servers? Second, -if clients can no longer have a complete picture of the network, -how can they perform discovery while preventing attackers from -manipulating or exploiting gaps in their knowledge? Third, if there -are too many servers for every server to constantly communicate with -every other, which non-clique topology should the network use? -(Restricted-route topologies promise comparable anonymity with better -scalability~\cite{danezis:pet2003}, but whatever topology we choose, we -need some way to keep attackers from manipulating their position within -it~\cite{casc-rep}.) Fourth, if no central authority is tracking -server reliability, how do we stop unreliable servers from making -the network unusable? Fifth, do clients receive so much anonymity -from running their own ORs that we should expect them all to do -so~\cite{econymics}, or do we need another incentive structure to -motivate them? Tarzan and MorphMix present possible solutions. - -% advogato, captcha - -When a Tor node goes down, all its circuits (and thus streams) must break. -Will users abandon the system because of this brittleness? How well -does the method in Section~\ref{subsec:dos} allow streams to survive -node failure? If affected users rebuild circuits immediately, how much -anonymity is lost? It seems the problem is even worse in a peer-to-peer -environment---such systems don't yet provide an incentive for peers to -stay connected when they're done retrieving content, so we would expect -a higher churn rate. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\section{Future Directions} -\label{sec:conclusion} - -Tor brings together many innovations into a unified deployable system. The -next immediate steps include: - -\emph{Scalability:} Tor's emphasis on deployability and design simplicity -has led us to adopt a clique topology, semi-centralized -directories, and a full-network-visibility model for client -knowledge. These properties will not scale past a few hundred servers. -Section~\ref{sec:maintaining-anonymity} describes some promising -approaches, but more deployment experience will be helpful in learning -the relative importance of these bottlenecks. - -\emph{Bandwidth classes:} This paper assumes that all ORs have -good bandwidth and latency. We should instead adopt the MorphMix model, -where nodes advertise their bandwidth level (DSL, T1, T3), and -Alice avoids bottlenecks by choosing nodes that match or -exceed her bandwidth. In this way DSL users can usefully join the Tor -network. - -\emph{Incentives:} Volunteers who run nodes are rewarded with publicity -and possibly better anonymity~\cite{econymics}. More nodes means increased -scalability, and more users can mean more anonymity. We need to continue -examining the incentive structures for participating in Tor. Further, -we need to explore more approaches to limiting abuse, and understand -why most people don't bother using privacy systems. - -\emph{Cover traffic:} Currently Tor omits cover traffic---its costs -in performance and bandwidth are clear but its security benefits are -not well understood. We must pursue more research on link-level cover -traffic and long-range cover traffic to determine whether some simple padding -method offers provable protection against our chosen adversary. - -%%\emph{Offer two relay cell sizes:} Traffic on the Internet tends to be -%%large for bulk transfers and small for interactive traffic. One cell -%%size cannot be optimal for both types of traffic. -% This should go in the spec and todo, but not the paper yet. -RD - -\emph{Caching at exit nodes:} Perhaps each exit node should run a -caching web proxy~\cite{shsm03}, to improve anonymity for cached pages -(Alice's request never -leaves the Tor network), to improve speed, and to reduce bandwidth cost. -On the other hand, forward security is weakened because caches -constitute a record of retrieved files. We must find the right -balance between usability and security. - -\emph{Better directory distribution:} -Clients currently download a description of -the entire network every 15 minutes. As the state grows larger -and clients more numerous, we may need a solution in which -clients receive incremental updates to directory state. -More generally, we must find more -scalable yet practical ways to distribute up-to-date snapshots of -network status without introducing new attacks. - -\emph{Further specification review:} Our public -byte-level specification~\cite{tor-spec} needs -external review. We hope that as Tor -is deployed, more people will examine its -specification. - -\emph{Multisystem interoperability:} We are currently working with the -designer of MorphMix to unify the specification and implementation of -the common elements of our two systems. So far, this seems -to be relatively straightforward. Interoperability will allow testing -and direct comparison of the two designs for trust and scalability. - -\emph{Wider-scale deployment:} The original goal of Tor was to -gain experience in deploying an anonymizing overlay network, and -learn from having actual users. We are now at a point in design -and development where we can start deploying a wider network. Once -we have many actual users, we will doubtlessly be better -able to evaluate some of our design decisions, including our -robustness/latency tradeoffs, our performance tradeoffs (including -cell size), our abuse-prevention mechanisms, and -our overall usability. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% commented out for anonymous submission -\section*{Acknowledgments} - We thank Peter Palfrader, Geoff Goodell, Adam Shostack, Joseph Sokol-Margolis, - John Bashinski, and Zack Brown - for editing and comments; - Matej Pfajfar, Andrei Serjantov, Marc Rennhard for design discussions; - Bram Cohen for congestion control discussions; - Adam Back for suggesting telescoping circuits; and - Cathy Meadows for formal analysis of the \emph{extend} protocol. - This work has been supported by ONR and DARPA. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\bibliographystyle{latex8} -\bibliography{tor-design} - -\end{document} - -% Style guide: -% U.S. spelling -% avoid contractions (it's, can't, etc.) -% prefer ``for example'' or ``such as'' to e.g. -% prefer ``that is'' to i.e. -% 'mix', 'mixes' (as noun) -% 'mix-net' -% 'mix', 'mixing' (as verb) -% 'middleman' [Not with a hyphen; the hyphen has been optional -% since Middle English.] -% 'nymserver' -% 'Cypherpunk', 'Cypherpunks', 'Cypherpunk remailer' -% 'Onion Routing design', 'onion router' [note capitalization] -% 'SOCKS' -% Try not to use \cite as a noun. -% 'Authorizating' sounds great, but it isn't a word. -% 'First, second, third', not 'Firstly, secondly, thirdly'. -% 'circuit', not 'channel' -% Typography: no space on either side of an em dash---ever. -% Hyphens are for multi-part words; en dashs imply movement or -% opposition (The Alice--Bob connection); and em dashes are -% for punctuation---like that. -% A relay cell; a control cell; a \emph{create} cell; a -% \emph{relay truncated} cell. Never ``a \emph{relay truncated}.'' -% -% 'Substitute ``Damn'' every time you're inclined to write ``very;'' your -% editor will delete it and the writing will be just as it should be.' -% -- Mark Twain diff -Nru tor-0.2.1.30/doc/design-paper/usenix.sty tor-0.2.2.35/doc/design-paper/usenix.sty --- tor-0.2.1.30/doc/design-paper/usenix.sty 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/design-paper/usenix.sty 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -% usenix-2e.sty - to be used with latex2e (the new one) for USENIX. -% To use this style file, do this: -% -% \documentclass[twocolumn]{article} -% \usepackage{usenix-2e} -% and put {\rm ....} around the author names. -% -% $Id$ -% -% The following definitions are modifications of standard article.sty -% definitions, arranged to do a better job of matching the USENIX -% guidelines. -% It will automatically select two-column mode and the Times-Roman -% font. - -% -% USENIX papers are two-column. -% Times-Roman font is nice if you can get it (requires NFSS, -% which is in latex2e. - -\if@twocolumn\else\input twocolumn.sty\fi -\usepackage{times} - -% -% USENIX wants margins of: 7/8" side, 1" bottom, and 3/4" top. -% 0.25" gutter between columns. -% Gives active areas of 6.75" x 9.25" -% -\setlength{\textheight}{9.0in} -\setlength{\columnsep}{0.25in} -%%\setlength{\textwidth}{6.75in} -\setlength{\textwidth}{7.00in} -%\setlength{\footheight}{0.0in} -\setlength{\topmargin}{-0.25in} -\setlength{\headheight}{0.0in} -\setlength{\headsep}{0.0in} -\setlength{\evensidemargin}{-0.125in} -\setlength{\oddsidemargin}{-0.125in} - -% -% Usenix wants no page numbers for submitted papers, so that they can -% number them themselves. -% -\pagestyle{empty} - -% -% Usenix titles are in 14-point bold type, with no date, and with no -% change in the empty page headers. The whol author section is 12 point -% italic--- you must use {\rm } around the actual author names to get -% them in roman. -% -\def\maketitle{\par - \begingroup - \renewcommand\thefootnote{\fnsymbol{footnote}}% - \def\@makefnmark{\hbox to\z@{$\m@th^{\@thefnmark}$\hss}}% - \long\def\@makefntext##1{\parindent 1em\noindent - \hbox to1.8em{\hss$\m@th^{\@thefnmark}$}##1}% - \if@twocolumn - \twocolumn[\@maketitle]% - \else \newpage - \global\@topnum\z@ - \@maketitle \fi\@thanks - \endgroup - \setcounter{footnote}{0}% - \let\maketitle\relax - \let\@maketitle\relax - \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax} - -\def\@maketitle{\newpage - \vbox to 2.5in{ - \vspace*{\fill} - \vskip 2em - \begin{center}% - {\Large\bf \@title \par}% - \vskip 0.375in minus 0.300in - {\large\it - \lineskip .5em - \begin{tabular}[t]{c}\@author - \end{tabular}\par}% - \end{center}% - \par - \vspace*{\fill} -% \vskip 1.5em - } -} - -% -% The abstract is preceded by a 12-pt bold centered heading -\def\abstract{\begin{center}% -{\large\bf \abstractname\vspace{-.5em}\vspace{\z@}}% -\end{center}} -\def\endabstract{} - -% -% Main section titles are 12-pt bold. Others can be same or smaller. -% -\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus-1ex minus - -.2ex}{2.3ex plus.2ex}{\reset@font\large\bf}} diff -Nru tor-0.2.1.30/doc/HACKING tor-0.2.2.35/doc/HACKING --- tor-0.2.1.30/doc/HACKING 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/HACKING 2011-12-15 16:28:37.000000000 +0000 @@ -1,41 +1,189 @@ +Hacking Tor: An Incomplete Guide +================================ -0. Useful tools. +Getting started +--------------- -0.0 The buildbot. +For full information on how Tor is supposed to work, look at the files in +https://gitweb.torproject.org/torspec.git/tree - http://tor-buildbot.freehaven.net:8010/ +For an explanation of how to change Tor's design to work differently, look at +https://gitweb.torproject.org/torspec.git/blob_plain/HEAD:/proposals/001-process.txt - - Down because nickm isn't running services at home any more. ioerror says - he will resurrect it. +For the latest version of the code, get a copy of git, and -0.1. Useful command-lines that are non-trivial to reproduce but can -help with tracking bugs or leaks. + git clone git://git.torproject.org/git/tor . -dmalloc -l ~/dmalloc.log -(run the commands it tells you) -./configure --with-dmalloc +We talk about Tor on the tor-talk mailing list. Design proposals and +discussion belong on the tor-dev mailing list. We hang around on +irc.oftc.net, with general discussion happening on #tor and development +happening on #tor-dev. + +How we use Git branches +----------------------- + +Each main development series (like 0.2.1, 0.2.2, etc) has its main work +applied to a single branch. At most one series can be the development series +at a time; all other series are maintenance series that get bug-fixes only. +The development series is built in a git branch called "master"; the +maintenance series are built in branches called "maint-0.2.0", "maint-0.2.1", +and so on. We regularly merge the active maint branches forward. + +For all series except the development series, we also have a "release" branch +(as in "release-0.2.1"). The release series is based on the corresponding +maintenance series, except that it deliberately lags the maint series for +most of its patches, so that bugfix patches are not typically included in a +maintenance release until they've been tested for a while in a development +release. Occasionally, we'll merge an urgent bugfix into the release branch +before it gets merged into maint, but that's rare. + +If you're working on a bugfix for a bug that occurs in a particular version, +base your bugfix branch on the "maint" branch for the first _actively +developed_ series that has that bug. (Right now, that's 0.2.1.) If you're +working on a new feature, base it on the master branch. + + +How we log changes +------------------ + +When you do a commit that needs a ChangeLog entry, add a new file to +the "changes" toplevel subdirectory. It should have the format of a +one-entry changelog section from the current ChangeLog file, as in + + o Major bugfixes: + - Fix a potential buffer overflow. Fixes bug 9999; bugfix on + 0.3.1.4-beta. + +To write a changes file, first categorize the change. Some common categories +are: Minor bugfixes, Major bugfixes, Minor features, Major features, Code +simplifications and refactoring. Then say what the change does. If +it's a bugfix, mention what bug it fixes and when the bug was +introduced. To find out which Git tag the change was introduced in, +you can use "git describe --contains ". + +If at all possible, try to create this file in the same commit where +you are making the change. Please give it a distinctive name that no +other branch will use for the lifetime of your change. + +When we go to make a release, we will concatenate all the entries +in changes to make a draft changelog, and clear the directory. We'll +then edit the draft changelog into a nice readable format. + +What needs a changes file?:: + A not-exhaustive list: Anything that might change user-visible + behavior. Anything that changes internals, documentation, or the build + system enough that somebody could notice. Big or interesting code + rewrites. Anything about which somebody might plausibly wonder "when + did that happen, and/or why did we do that" 6 months down the line. + +Why use changes files instead of Git commit messages?:: + Git commit messages are written for developers, not users, and they + are nigh-impossible to revise after the fact. + +Why use changes files instead of entries in the ChangeLog?:: + Having every single commit touch the ChangeLog file tended to create + zillions of merge conflicts. + +Useful tools +------------ + +These aren't strictly necessary for hacking on Tor, but they can help track +down bugs. + +The buildbot +~~~~~~~~~~~~ + +https://buildbot.vidalia-project.net/one_line_per_build + +Dmalloc +~~~~~~~ + +The dmalloc library will keep track of memory allocation, so you can find out +if we're leaking memory, doing any double-frees, or so on. + + dmalloc -l ~/dmalloc.log + (run the commands it tells you) + ./configure --with-dmalloc + +Valgrind +~~~~~~~~ valgrind --leak-check=yes --error-limit=no --show-reachable=yes src/or/tor -0.2. Running gcov for unit test coverage +(Note that if you get a zillion openssl warnings, you will also need to +pass --undef-value-errors=no to valgrind, or rebuild your openssl +with -DPURIFY.) +Running gcov for unit test coverage +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +----- make clean make CFLAGS='-g -fprofile-arcs -ftest-coverage' - ./src/or/test + ./src/test/test cd src/common; gcov *.[ch] cd ../or; gcov *.[ch] +----- - Then, look at the .gcov files. '-' before a line means that the - compiler generated no code for that line. '######' means that the - line was never reached. Lines with numbers were called that number - of times. +Then, look at the .gcov files. '-' before a line means that the +compiler generated no code for that line. '######' means that the +line was never reached. Lines with numbers were called that number +of times. + +Profiling Tor with oprofile +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The oprofile tool runs (on Linux only!) to tell you what functions Tor is +spending its CPU time in, so we can identify berformance pottlenecks. + +Here are some basic instructions + + - Build tor with debugging symbols (you probably already have, unless + you messed with CFLAGS during the build process). + - Build all the libraries you care about with debugging symbols + (probably you only care about libssl, maybe zlib and Libevent). + - Copy this tor to a new directory + - Copy all the libraries it uses to that dir too (ldd ./tor will + tell you) + - Set LD_LIBRARY_PATH to include that dir. ldd ./tor should now + show you it's using the libs in that dir + - Run that tor + - Reset oprofiles counters/start it + * "opcontrol --reset; opcontrol --start", if Nick remembers right. + - After a while, have it dump the stats on tor and all the libs + in that dir you created. + * "opcontrol --dump;" + * "opreport -l that_dir/*" + - Profit + + +Coding conventions +------------------ + +Patch checklist +~~~~~~~~~~~~~~~ + +If possible, send your patch as one of these (in descending order of +preference) + + - A git branch we can pull from + - Patches generated by git format-patch + - A unified diff + +Did you remember... + + - To build your code while configured with --enable-gcc-warnings? + - To run "make check-spaces" on your code? + - To write unit tests, as possible? + - To base your code on the appropriate branch? + - To include a file in the "changes" directory as appropriate? -1. Coding conventions +Whitespace and C conformance +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -1.0. Whitespace and C conformance +Invoke "make check-spaces" from time to time, so it can tell you about +deviations from our C whitespace style. Generally, we use: - Invoke "make check-spaces" from time to time, so it can tell you about - deviations from our C whitespace style. Generally, we use: - Unix-style line endings - K&R-style indentation - No space before newlines @@ -52,15 +200,17 @@ "puts (x)". - Function declarations at the start of the line. - We try hard to build without warnings everywhere. In particular, if you're - using gcc, you should invoke the configure script with the option - "--enable-gcc-warnings". This will give a bunch of extra warning flags to - the compiler, and help us find divergences from our preferred C style. +We try hard to build without warnings everywhere. In particular, if you're +using gcc, you should invoke the configure script with the option +"--enable-gcc-warnings". This will give a bunch of extra warning flags to +the compiler, and help us find divergences from our preferred C style. + +Getting emacs to edit Tor source properly +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -1.0.1. Getting emacs to edit Tor source properly. +Nick likes to put the following snippet in his .emacs file: - Hi, folks! Nick here. I like to put the following snippet in my .emacs - file: +----- (add-hook 'c-mode-hook (lambda () (font-lock-mode 1) @@ -80,90 +230,99 @@ (set-variable 'c-basic-offset 8) (set-variable 'tab-width 8)) )))) +----- - You'll note that it defaults to showing all trailing whitespace. The - "cond" test detects whether the file is one of a few C free software - projects that I often edit, and sets up the indentation level and tab - preferences to match what they want. +You'll note that it defaults to showing all trailing whitespace. The "cond" +test detects whether the file is one of a few C free software projects that I +often edit, and sets up the indentation level and tab preferences to match +what they want. - If you want to try this out, you'll need to change the filename regex - patterns to match where you keep your Tor files. +If you want to try this out, you'll need to change the filename regex +patterns to match where you keep your Tor files. - If you *only* use emacs to edit Tor, you could always just say: +If you use emacs for editing Tor and nothing else, you could always just say: - (add-hook 'c-mode-hook +----- + (add-hook 'c-mode-hook (lambda () (font-lock-mode 1) (set-variable 'show-trailing-whitespace t) (set-variable 'indent-tabs-mode nil) (set-variable 'c-basic-offset 2))) +----- + +There is probably a better way to do this. No, we are probably not going +to clutter the files with emacs stuff. - There is probably a better way to do this. No, we are probably not going - to clutter the files with emacs stuff. -1.1. Details +Functions to use +~~~~~~~~~~~~~~~~ - Use tor_malloc, tor_free, tor_strdup, and tor_gettimeofday instead of their - generic equivalents. (They always succeed or exit.) +We have some wrapper functions like tor_malloc, tor_free, tor_strdup, and +tor_gettimeofday; use them instead of their generic equivalents. (They +always succeed or exit.) - You can get a full list of the compatibility functions that Tor provides by - looking through src/common/util.h and src/common/compat.h. You can see the - available containers in src/common/containers.h. You should probably - familiarize yourself with these modules before you write too much code, - or else you'll wind up reinventing the wheel. +You can get a full list of the compatibility functions that Tor provides by +looking through src/common/util.h and src/common/compat.h. You can see the +available containers in src/common/containers.h. You should probably +familiarize yourself with these modules before you write too much code, or +else you'll wind up reinventing the wheel. - Use 'INLINE' instead of 'inline', so that we work properly on Windows. +Use 'INLINE' instead of 'inline', so that we work properly on Windows. -1.2. Calling and naming conventions +Calling and naming conventions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - Whenever possible, functions should return -1 on error and 0 on success. +Whenever possible, functions should return -1 on error and 0 on success. - For multi-word identifiers, use lowercase words combined with - underscores. (e.g., "multi_word_identifier"). Use ALL_CAPS for macros and - constants. +For multi-word identifiers, use lowercase words combined with +underscores. (e.g., "multi_word_identifier"). Use ALL_CAPS for macros and +constants. - Typenames should end with "_t". +Typenames should end with "_t". - Function names should be prefixed with a module name or object name. (In - general, code to manipulate an object should be a module with the same - name as the object, so it's hard to tell which convention is used.) +Function names should be prefixed with a module name or object name. (In +general, code to manipulate an object should be a module with the same name +as the object, so it's hard to tell which convention is used.) - Functions that do things should have imperative-verb names - (e.g. buffer_clear, buffer_resize); functions that return booleans should - have predicate names (e.g. buffer_is_empty, buffer_needs_resizing). +Functions that do things should have imperative-verb names +(e.g. buffer_clear, buffer_resize); functions that return booleans should +have predicate names (e.g. buffer_is_empty, buffer_needs_resizing). - If you find that you have four or more possible return code values, it's - probably time to create an enum. If you find that you are passing three or - more flags to a function, it's probably time to create a flags argument - that takes a bitfield. +If you find that you have four or more possible return code values, it's +probably time to create an enum. If you find that you are passing three or +more flags to a function, it's probably time to create a flags argument that +takes a bitfield. -1.3. What To Optimize +What To Optimize +~~~~~~~~~~~~~~~~ - Don't optimize anything if it's not in the critical path. Right now, - the critical path seems to be AES, logging, and the network itself. - Feel free to do your own profiling to determine otherwise. +Don't optimize anything if it's not in the critical path. Right now, the +critical path seems to be AES, logging, and the network itself. Feel free to +do your own profiling to determine otherwise. -1.4. Log conventions +Log conventions +~~~~~~~~~~~~~~~ - http://wiki.noreply.org/noreply/TheOnionRouter/TorFAQ#LogLevels +https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ#LogLevels - No error or warning messages should be expected during normal OR or OP - operation. +No error or warning messages should be expected during normal OR or OP +operation. - If a library function is currently called such that failure always - means ERR, then the library function should log WARN and let the caller - log ERR. +If a library function is currently called such that failure always means ERR, +then the library function should log WARN and let the caller log ERR. - [XXX Proposed convention: every message of severity INFO or higher should - either (A) be intelligible to end-users who don't know the Tor source; or - (B) somehow inform the end-users that they aren't expected to understand - the message (perhaps with a string like "internal error"). Option (A) is - to be preferred to option (B). -NM] +Every message of severity INFO or higher should either (A) be intelligible +to end-users who don't know the Tor source; or (B) somehow inform the +end-users that they aren't expected to understand the message (perhaps +with a string like "internal error"). Option (A) is to be preferred to +option (B). -1.5. Doxygen +Doxygen +~~~~~~~~ - We use the 'doxygen' utility to generate documentation from our - source code. Here's how to use it: +We use the 'doxygen' utility to generate documentation from our +source code. Here's how to use it: 1. Begin every file that should be documented with /** @@ -214,11 +373,12 @@ 6. See the Doxygen manual for more information; this summary just scratches the surface. -1.5.1. Doxygen comment conventions +Doxygen comment conventions +^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Say what functions do as a series of one or more imperative sentences, as - though you were telling somebody how to be the function. In other words, - DO NOT say: +Say what functions do as a series of one or more imperative sentences, as +though you were telling somebody how to be the function. In other words, DO +NOT say: /** The strtol function parses a number. * @@ -230,7 +390,7 @@ */ long strtol(const char *nptr, char **nptr, int base); - Instead, please DO say: +Instead, please DO say: /** Parse a number in radix base from the string nptr, * and return the result. Skip all leading whitespace. If @@ -239,66 +399,110 @@ **/ long strtol(const char *nptr, char **nptr, int base); - Doxygen comments are the contract in our abstraction-by-contract world: if - the functions that call your function rely on it doing something, then your - function should mention that it does that something in the documentation. - If you rely on a function doing something beyond what is in its - documentation, then you should watch out, or it might do something else - later. - -2. Code notes - -2.1. Dataflows - -2.1.1. How Incoming data is handled - -There are two paths for data arriving at Tor over the network: regular -TCP data, and DNS. - -2.1.1.1. TCP. - -When Tor takes information over the network, it uses the functions -read_to_buf() and read_to_buf_tls() in buffers.c. These read from a -socket or an SSL* into a buffer_t, which is an mbuf-style linkedlist -of memory chunks. - -read_to_buf() and read_to_buf_tls() are called only from -connection_read_to_buf() in connection.c. It takes a connection_t -pointer, and reads data into it over the network, up to the -connection's current bandwidth limits. It places that data into the -"inbuf" field of the connection, and then: - - Adjusts the connection's want-to-read/want-to-write status as - appropriate. - - Increments the read and written counts for the connection as - appropriate. - - Adjusts bandwidth buckets as appropriate. - -connection_read_to_buf() is called only from connection_handle_read(). -The connection_handle_read() function is called whenever libevent -decides (based on select, poll, epoll, kqueue, etc) that there is data -to read from a connection. If any data is read, -connection_handle_read() calls connection_process_inbuf() to see if -any of the data can be processed. If the connection was closed, -connection_handle_read() calls connection_reached_eof(). - -Connection_process_inbuf() and connection_reached_eof() both dispatch -based on the connection type to determine what to do with the data -that's just arrived on the connection's inbuf field. Each type of -connection has its own version of these functions. For example, -directory connections process incoming data in -connection_dir_process_inbuf(), while OR connections process incoming -data in connection_or_process_inbuf(). These -connection_*_process_inbuf() functions extract data from the -connection's inbuf field (a buffer_t), using functions from buffers.c. -Some of these accessor functions are straightforward data extractors -(like fetch_from_buf()); others do protocol-specific parsing. - - -2.1.1.2. DNS - -Tor launches (and optionally accepts) DNS requests using the code in -eventdns.c, which is a copy of libevent's evdns.c. (We don't use -libevent's version because it is not yet in the versions of libevent -all our users have.) DNS replies are read in nameserver_read(); -DNS queries are read in server_port_read(). +Doxygen comments are the contract in our abstraction-by-contract world: if +the functions that call your function rely on it doing something, then your +function should mention that it does that something in the documentation. If +you rely on a function doing something beyond what is in its documentation, +then you should watch out, or it might do something else later. + +Putting out a new release +------------------------- + +Here are the steps Roger takes when putting out a new Tor release: + +1) Use it for a while, as a client, as a relay, as a hidden service, +and as a directory authority. See if it has any obvious bugs, and +resolve those. + +1.5) As applicable, merge the maint-X branch into the release-X branch. + +2) Gather the changes/* files into a changelog entry, rewriting many +of them and reordering to focus on what users and funders would find +interesting and understandable. + + 2.1) Make sure that everything that wants a bug number has one. + 2.2) Concatenate them. + 2.3) Sort them by section. Within each section, try to make the + first entry or two and the last entry most interesting: they're + the ones that skimmers tend to read. + + 2.4) Clean them up + + Standard idioms: + "Fixes bug 9999; Bugfix on 0.3.3.3-alpha." + + One period after a space. + + Make stuff very terse + + Make sure each section name ends with a colon + + Describe the user-visible problem right away + + Mention relevant config options by name. If they're rare or unusual, + remind people what they're for + + Avoid starting lines with open-paren + + Present and imperative tense: not past. + + If a given changes stanza showed up in a different release (e.g. + maint-0.2.1), be sure to make the stanzas identical (so people can + distinguish if these are the same change). + + 2.5) Merge them in. + + 2.6) Clean everything one last time. + + 2.7) Run it through fmt to make it pretty. + +3) Compose a short release blurb to highlight the user-facing +changes. Insert said release blurb into the ChangeLog stanza. If it's +a stable release, add it to the ReleaseNotes file too. If we're adding +to a release-0.2.x branch, manually commit the changelogs to the later +git branches too. + +4) Bump the version number in configure.in and rebuild. + +5) Make dist, put the tarball up somewhere, and tell #tor about it. Wait +a while to see if anybody has problems building it. Try to get Sebastian +or somebody to try building it on Windows. + +6) Get at least two of weasel/arma/karsten to put the new version number +in their approved versions list. + +7) Sign the tarball, then sign and push the git tag: + gpg -ba + git tag -u tor-0.2.x.y-status + git push origin tag tor-0.2.x.y-status + +8) scp the tarball and its sig to the website in the dist/ directory +(i.e. /srv/www-master.torproject.org/htdocs/dist/ on vescum). Edit +include/versions.wmi to note the new version. From your website checkout, +run ./publish to build and publish the website. + +Try not to delay too much between scp'ing the tarball and running +./publish -- the website has multiple A records and your scp only sent +it to one of them. + +9) Email Erinn and weasel (cc'ing tor-assistants) that a new tarball +is up. This step should probably change to mailing more packagers. + +10) Add the version number to Trac. To do this, go to Trac, log in, +select "Admin" near the top of the screen, then select "Versions" from +the menu on the left. At the right, there will be an "Add version" +box. By convention, we enter the version in the form "Tor: +0.2.2.23-alpha" (or whatever the version is), and we select the date as +the date in the ChangeLog. + +11) Forward-port the ChangeLog. + +12) Update the topic in #tor to reflect the new version. + +12) 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. + + (We might be moving to faster announcements, but don't announce until + the website is at least updated.) diff -Nru tor-0.2.1.30/doc/Makefile.am tor-0.2.2.35/doc/Makefile.am --- tor-0.2.1.30/doc/Makefile.am 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/Makefile.am 2011-12-15 16:28:37.000000000 +0000 @@ -1,12 +1,78 @@ +# We use a two-step process to generate documentation from asciidoc files. +# +# First, we use asciidoc/a2x to process the asciidoc files into .1.in and +# .html.in files (see the asciidoc-helper.sh script). These are the same as +# the regular .1 and .html files, except that they still have some autoconf +# variables set in them. +# +# Second, we use config.status to turn .1.in files into .1 files and +# .html.in files into .html files. +# +# We do the steps in this order so that we can ship the .*.in files as +# part of the source distribution, so that people without asciidoc can +# just use the .1 and .html files. -EXTRA_DIST = HACKING \ - tor-resolve.1 tor-gencert.1 \ - tor-osx-dmg-creation.txt tor-rpm-creation.txt \ +if USE_ASCIIDOC +asciidoc_files = tor tor-gencert tor-resolve torify +html_in = $(asciidoc_files:=.html.in) +man_in = $(asciidoc_files:=.1.in) +txt_in = $(asciidoc_files:=.1.txt) +nodist_man_MANS = $(asciidoc_files:=.1) +doc_DATA = $(asciidoc_files:=.html) +else +asciidoc_files = +html_in = +man_in = +txt_in = +nodist_man_MANS = +doc_DATA = +endif + +EXTRA_DIST = HACKING asciidoc-helper.sh \ + $(html_in) $(man_in) $(txt_in) \ + tor-rpm-creation.txt \ tor-win32-mingw-creation.txt spec/README -man_MANS = tor.1 tor-resolve.1 tor-gencert.1 +docdir = @docdir@ + +asciidoc_product = $(nodist_man_MANS) $(doc_DATA) + +# Generate the html documentation from asciidoc, but don't do +# machine-specific replacements yet +$(html_in) : + $(top_srcdir)/doc/asciidoc-helper.sh html @ASCIIDOC@ $(top_srcdir)/doc/$@ + +tor.html.in : tor.1.txt +torify.html.in : torify.1.txt +tor-gencert.html.in : tor-gencert.1.txt +tor-resolve.html.in : tor-resolve.1.txt + +# Generate the manpage from asciidoc, but don't do +# machine-specific replacements yet +$(man_in) : + $(top_srcdir)/doc/asciidoc-helper.sh man @A2X@ $(top_srcdir)/doc/$@ + +tor.1.in : tor.1.txt +torify.1.in : torify.1.txt +tor-gencert.1.in : tor-gencert.1.txt +tor-resolve.1.in : tor-resolve.1.txt -SUBDIRS = design-paper +# use ../config.status to swap all machine-specific magic strings +# in the asciidoc with their replacements. +$(asciidoc_product) : + if test -e $(top_srcdir)/doc/$@.in && ! test -e ./$@.in ; then \ + cp $(top_srcdir)/doc/$@.in .; \ + fi + ../config.status --file=$@; -DIST_SUBDIRS = design-paper +tor.1 : tor.1.in +torify.1 : torify.1.in +tor-gencert.1 : tor-gencert.1.in +tor-resolve.1 : tor-resolve.1.in +tor.html : tor.html.in +torify.html : torify.html.in +tor-gencert.html : tor-gencert.html.in +tor-resolve.html : tor-resolve.html.in +CLEANFILES = $(asciidoc_product) config.log +DISTCLEANFILES = $(html_in) $(man_in) diff -Nru tor-0.2.1.30/doc/Makefile.in tor-0.2.2.35/doc/Makefile.in --- tor-0.2.1.30/doc/Makefile.in 2011-02-23 08:25:53.000000000 +0000 +++ tor-0.2.2.35/doc/Makefile.in 2011-12-15 17:01:54.000000000 +0000 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,10 +14,26 @@ # PARTICULAR PURPOSE. @SET_MAKE@ + +# We use a two-step process to generate documentation from asciidoc files. +# +# First, we use asciidoc/a2x to process the asciidoc files into .1.in and +# .html.in files (see the asciidoc-helper.sh script). These are the same as +# the regular .1 and .html files, except that they still have some autoconf +# variables set in them. +# +# Second, we use config.status to turn .1.in files into .1 files and +# .html.in files into .html files. +# +# We do the steps in this order so that we can ship the .*.in files as +# part of the source distribution, so that people without asciidoc can +# just use the .1 and .html files. + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -32,8 +49,7 @@ build_triplet = @build@ host_triplet = @host@ subdir = doc -DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/tor.1.in TODO +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in @@ -41,27 +57,42 @@ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/orconfig.h -CONFIG_CLEAN_FILES = tor.1 +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 -am__installdirs = "$(DESTDIR)$(man1dir)" +am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)" NROFF = nroff -MANS = $(man_MANS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -ETAGS = etags -CTAGS = ctags +MANS = $(nodist_man_MANS) +DATA = $(doc_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AR = @AR@ +ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -96,15 +127,19 @@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ +OPENSSL = @OPENSSL@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ +SHA1SUM = @SHA1SUM@ SHELL = @SHELL@ STRIP = @STRIP@ TORGROUP = @TORGROUP@ @@ -119,6 +154,7 @@ TOR_LIB_GDI = @TOR_LIB_GDI@ TOR_LIB_WS32 = @TOR_LIB_WS32@ TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ +TOR_ZLIB_LIBS = @TOR_ZLIB_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -167,31 +203,44 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -EXTRA_DIST = HACKING \ - tor-resolve.1 tor-gencert.1 \ - tor-osx-dmg-creation.txt tor-rpm-creation.txt \ +@USE_ASCIIDOC_FALSE@asciidoc_files = +@USE_ASCIIDOC_TRUE@asciidoc_files = tor tor-gencert tor-resolve torify +@USE_ASCIIDOC_FALSE@html_in = +@USE_ASCIIDOC_TRUE@html_in = $(asciidoc_files:=.html.in) +@USE_ASCIIDOC_FALSE@man_in = +@USE_ASCIIDOC_TRUE@man_in = $(asciidoc_files:=.1.in) +@USE_ASCIIDOC_FALSE@txt_in = +@USE_ASCIIDOC_TRUE@txt_in = $(asciidoc_files:=.1.txt) +@USE_ASCIIDOC_FALSE@nodist_man_MANS = +@USE_ASCIIDOC_TRUE@nodist_man_MANS = $(asciidoc_files:=.1) +@USE_ASCIIDOC_FALSE@doc_DATA = +@USE_ASCIIDOC_TRUE@doc_DATA = $(asciidoc_files:=.html) +EXTRA_DIST = HACKING asciidoc-helper.sh \ + $(html_in) $(man_in) $(txt_in) \ + tor-rpm-creation.txt \ tor-win32-mingw-creation.txt spec/README -man_MANS = tor.1 tor-resolve.1 tor-gencert.1 -SUBDIRS = design-paper -DIST_SUBDIRS = design-paper -all: all-recursive +asciidoc_product = $(nodist_man_MANS) $(doc_DATA) +CLEANFILES = $(asciidoc_product) config.log +DISTCLEANFILES = $(html_in) $(man_in) +all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign doc/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -209,185 +258,86 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -tor.1: $(top_builddir)/config.status $(srcdir)/tor.1.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-man1: $(man1_MANS) $(man_MANS) +$(am__aclocal_m4_deps): +install-man1: $(nodist_man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(nodist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + uninstall-man1: @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(nodist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } +install-docDATA: $(doc_DATA) + @$(NORMAL_INSTALL) + test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique +uninstall-docDATA: + @$(NORMAL_UNINSTALL) + @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(docdir)" && rm -f $$files tags: TAGS +TAGS: -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here +CTAGS: -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -403,50 +353,36 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - distdir) \ - || exit 1; \ - fi; \ - done check-am: all-am -check: check-recursive -all-am: Makefile $(MANS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(man1dir)"; do \ +check: check-am +all-am: Makefile $(MANS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -installcheck: installcheck-recursive +installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ @@ -455,86 +391,136 @@ mostlyclean-generic: clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive +clean: clean-am clean-am: clean-generic mostlyclean-am -distclean: distclean-recursive +distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-tags +distclean-am: clean-am distclean-generic -dvi: dvi-recursive +dvi: dvi-am dvi-am: -html: html-recursive +html: html-am + +html-am: -info: info-recursive +info: info-am info-am: -install-data-am: install-man +install-data-am: install-docDATA install-man + +install-dvi: install-dvi-am -install-dvi: install-dvi-recursive +install-dvi-am: install-exec-am: -install-html: install-html-recursive +install-html: install-html-am -install-info: install-info-recursive +install-html-am: + +install-info: install-info-am + +install-info-am: install-man: install-man1 -install-pdf: install-pdf-recursive +install-pdf: install-pdf-am + +install-pdf-am: -install-ps: install-ps-recursive +install-ps: install-ps-am + +install-ps-am: installcheck-am: -maintainer-clean: maintainer-clean-recursive +maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic -mostlyclean: mostlyclean-recursive +mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic -pdf: pdf-recursive +pdf: pdf-am pdf-am: -ps: ps-recursive +ps: ps-am ps-am: -uninstall-am: uninstall-man +uninstall-am: uninstall-docDATA uninstall-man uninstall-man: uninstall-man1 -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip +.MAKE: install-am install-strip -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic ctags \ - ctags-recursive distclean distclean-generic distclean-tags \ - distdir dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-man1 install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am \ + install-docDATA install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ - pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + pdf-am ps ps-am uninstall uninstall-am uninstall-docDATA \ uninstall-man uninstall-man1 + +# Generate the html documentation from asciidoc, but don't do +# machine-specific replacements yet +$(html_in) : + $(top_srcdir)/doc/asciidoc-helper.sh html @ASCIIDOC@ $(top_srcdir)/doc/$@ + +tor.html.in : tor.1.txt +torify.html.in : torify.1.txt +tor-gencert.html.in : tor-gencert.1.txt +tor-resolve.html.in : tor-resolve.1.txt + +# Generate the manpage from asciidoc, but don't do +# machine-specific replacements yet +$(man_in) : + $(top_srcdir)/doc/asciidoc-helper.sh man @A2X@ $(top_srcdir)/doc/$@ + +tor.1.in : tor.1.txt +torify.1.in : torify.1.txt +tor-gencert.1.in : tor-gencert.1.txt +tor-resolve.1.in : tor-resolve.1.txt + +# use ../config.status to swap all machine-specific magic strings +# in the asciidoc with their replacements. +$(asciidoc_product) : + if test -e $(top_srcdir)/doc/$@.in && ! test -e ./$@.in ; then \ + cp $(top_srcdir)/doc/$@.in .; \ + fi + ../config.status --file=$@; + +tor.1 : tor.1.in +torify.1 : torify.1.in +tor-gencert.1 : tor-gencert.1.in +tor-resolve.1 : tor-resolve.1.in +tor.html : tor.html.in +torify.html : torify.html.in +tor-gencert.html : tor-gencert.html.in +tor-resolve.html : tor-resolve.html.in + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru tor-0.2.1.30/doc/TODO tor-0.2.2.35/doc/TODO --- tor-0.2.1.30/doc/TODO 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/TODO 2011-12-15 16:26:49.000000000 +0000 @@ -4,8 +4,8 @@ TODO.02x is the list of items we're planning to get done in the next stable release. -TODO.external is the list of external constraints and deliverables that -we all need to keep in mind. +TODO.external lives in svn under /projects/todo/. It's the list of +external constraints and deliverables that we all need to keep in mind. TODO.future is the list of other items we plan to get to in later releases. diff -Nru tor-0.2.1.30/doc/tor.1.in tor-0.2.2.35/doc/tor.1.in --- tor-0.2.1.30/doc/tor.1.in 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/doc/tor.1.in 2011-12-15 16:32:27.000000000 +0000 @@ -1,1519 +1,1540 @@ -.TH TOR 1 "January 2009" "TOR" -.SH NAME -tor \- The second-generation onion router -.SH SYNOPSIS -.B tor -[\fIOPTION value\fR]... -.SH DESCRIPTION -.I tor -is a connection-oriented anonymizing communication -service. Users choose a source-routed path through a set of nodes, and -negotiate a "virtual circuit" through the network, in which each node -knows its predecessor and successor, but no others. Traffic flowing down -the circuit is unwrapped by a symmetric key at each node, which reveals -the downstream node. -.PP -Basically \fItor\fR provides a distributed network of servers ("onion -routers"). Users bounce their TCP streams -- web traffic, ftp, ssh, etc -- -around the routers, and recipients, observers, and even the routers -themselves have difficulty tracking the source of the stream. -.SH OPTIONS -\fB-h, -help\fP -Display a short help message and exit. -.LP -.TP -\fB-f \fR\fIFILE\fP -FILE contains further "option value" pairs. (Default: @CONFDIR@/torrc) -.LP -.TP -\fB--hash-password\fP -Generates a hashed password for control port access. -.LP -.TP -\fB--list-fingerprint\fP -Generate your keys and output your nickname and fingerprint. -.LP -.TP -\fB--verify-config\fP -Verify the configuration file is valid. -.LP -.TP -\fB--nt-service\fP -\fB--service [install|remove|start|stop]\fP -Manage the Tor Windows NT/2000/XP service. Current instructions can -be found at http://wiki.noreply.org/noreply/TheOnionRouter/TorFAQ#WinNTService -.LP -.TP -\fB--list-torrc-options\fP -List all valid options. -.LP -.TP -\fB--version\fP -Display Tor version and exit. -.LP -.TP -\fB--quiet\fP -Do not start Tor with a console log unless explicitly requested to do -so. (By default, Tor starts out logging messages at level "notice" or -higher to the console, until it has parsed its configuration.) -.LP -.TP -Other options can be specified either on the command-line (\fI--option -value\fR), or in the configuration file (\fIoption value\fR or -\fIoption "value"\fR). Options are case-insensitive. C-style escaped -characters are allowed inside quoted values. -.LP -.TP -\fBBandwidthRate \fR\fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fP -A token bucket limits the average incoming bandwidth usage on this node -to the specified number of bytes per second, and the average outgoing -bandwidth usage to that same value. (Default: 5 MB) -.LP -.TP -\fBBandwidthBurst \fR\fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fP -Limit the maximum token bucket size (also known as the burst) to the -given number of bytes in each direction. (Default: 10 MB) -.LP -.TP -\fBMaxAdvertisedBandwidth \fR\fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fP -If set, we will not advertise more than this amount of bandwidth for our -BandwidthRate. Server operators who want to reduce the number of clients -who ask to build circuits through them (since this is proportional to -advertised bandwidth rate) can thus reduce the CPU demands on their -server without impacting network performance. -.LP -.TP -\fBRelayBandwidthRate \fR\fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fP -If defined, a separate token bucket limits the average incoming bandwidth -usage for _relayed traffic_ on this node to the specified number of -bytes per second, and the average outgoing bandwidth usage to that same -value. Relayed traffic currently is calculated to include answers to directory -requests, but that may change in future versions. (Default: 0) -.LP -.TP -\fBRelayBandwidthBurst \fR\fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fP -Limit the maximum token bucket size (also known as the burst) for -_relayed traffic_ to the -given number of bytes in each direction. (Default: 0) -.LP -.TP -\fBConnLimit \fR\fINUM\fP -The minimum number of file descriptors that must be available to -the Tor process before it will start. Tor will ask the OS for as -many file descriptors as the OS will allow (you can find this -by "ulimit -H -n"). If this number is less than ConnLimit, then -Tor will refuse to start. - -You probably don't need to adjust this. It has no effect on -Windows since that platform lacks getrlimit(). (Default: 1000) -.LP -.TP -\fBConstrainedSockets \fR\fB0\fR|\fB1\fR\fP -If set, Tor will tell the kernel to attempt to shrink the buffers for all -sockets to the size specified in \fBConstrainedSockSize\fP. This is useful -for virtual servers and other environments where system level TCP -buffers may be limited. If you're on a virtual server, and you -encounter the "Error creating network -socket: No buffer space available" message, you are likely experiencing -this problem. - -The preferred solution is to have the admin increase the buffer pool for -the host itself via /proc/sys/net/ipv4/tcp_mem or equivalent facility; this -configuration option is a second-resort. - -The DirPort option should also not be used if TCP buffers are scarce. The -cached directory requests consume additional sockets which exacerbates the -problem. - -You should \fBnot\fP enable this feature unless you encounter the "no buffer -space available" issue. Reducing the TCP buffers affects window size for -the TCP stream and will reduce throughput in proportion to round trip -time on long paths. (Default: 0.) -.LP -.TP -\fBConstrainedSockSize \fR\fIN\fR \fBbytes\fR|\fBKB\fP -When \fBConstrainedSockets\fP is enabled the receive and transmit buffers for -all sockets will be set to this limit. Must be a value between 2048 -and 262144, in 1024 byte increments. Default of 8192 is recommended. -.LP -.TP -\fBControlPort \fR\fIPort\fP -If set, Tor will accept connections on this port and allow those -connections to control the Tor process using the Tor Control Protocol -(described in control-spec.txt). Note: unless you also specify one of -\fBHashedControlPassword\fP or \fBCookieAuthentication\fP, setting -this option will cause Tor to allow any process on the local host to -control it. This option is required for many Tor controllers; most use -the value of 9051. -.LP -.TP -\fBControlListenAddress \fR\fIIP\fR[:\fIPORT\fR]\fP -Bind the controller listener to this address. If you specify a port, -bind to this port rather than the one specified in ControlPort. We -strongly recommend that you leave this alone unless you know what you're -doing, since giving attackers access to your control listener is really -dangerous. (Default: 127.0.0.1) -This directive can be specified multiple times to bind to multiple -addresses/ports. -.LP -.TP -\fBControlSocket \fR\fIPath\fP -Like ControlPort, but listens on a Unix domain socket, rather than a TCP -socket. (Unix and Unix-like systems only.) -.LP -.TP -\fBHashedControlPassword \fR\fIhashed_password\fP -Don't allow any connections on the control port except when the other process -knows the password whose one-way hash is \fIhashed_password\fP. You can -compute the hash of a password by running "tor --hash-password -\fIpassword\fP". You can provide several acceptable passwords by using -more than HashedControlPassword line. -.LP -.TP -\fBCookieAuthentication \fR\fB0\fR|\fB1\fP -If this option is set to 1, don't allow any connections on the control port -except when the connecting process knows the contents of a file named -"control_auth_cookie", which Tor will create in its data directory. This -authentication method should only be used on systems with good filesystem -security. (Default: 0) -.LP -.TP -\fBCookieAuthFile \fR\fIPath\fP -If set, this option overrides the default location and file name for Tor's -cookie file. (See CookieAuthentication above.) -.LP -.TP -\fBCookieAuthFileGroupReadable \fR\fB0\fR|\fB1\fR|\fIGroupName\fP -If this option is set to 0, don't allow the filesystem group to read -the cookie file. If the option is set to 1, make the cookie file -readable by the default GID. [Making the file readable by other -groups is not yet implemented; let us know if you need this for some -reason.] (Default: 0). -.LP -.TP -\fBDataDirectory \fR\fIDIR\fP +'\" t +.\" Title: tor +.\" Author: [see the "AUTHORS" section] +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: 12/15/2011 +.\" Manual: [FIXME: manual] +.\" Source: [FIXME: source] +.\" Language: English +.\" +.TH "TOR" "1" "12/15/2011" "[FIXME: source]" "[FIXME: manual]" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +tor \- The second\-generation onion router +.SH "SYNOPSIS" +.sp +\fBtor\fR [\fIOPTION\fR \fIvalue\fR]\&... +.SH "DESCRIPTION" +.sp +\fItor\fR is a connection\-oriented anonymizing communication service\&. Users choose a source\-routed path through a set of nodes, and negotiate a "virtual circuit" through the network, in which each node knows its predecessor and successor, but no others\&. Traffic flowing down the circuit is unwrapped by a symmetric key at each node, which reveals the downstream node\&. +.sp +Basically \fItor\fR provides a distributed network of servers ("onion routers")\&. Users bounce their TCP streams \(em web traffic, ftp, ssh, etc \(em around the routers, and recipients, observers, and even the routers themselves have difficulty tracking the source of the stream\&. +.SH "OPTIONS" +.PP +\fB\-h\fR, \fB\-help\fR +.RS 4 +Display a short help message and exit\&. +.RE +.PP +\fB\-f\fR \fIFILE\fR +.RS 4 +FILE contains further "option value" pairs\&. (Default: @CONFDIR@/torrc) +.RE +.PP +\fB\-\-hash\-password\fR +.RS 4 +Generates a hashed password for control port access\&. +.RE +.PP +\fB\-\-list\-fingerprint\fR +.RS 4 +Generate your keys and output your nickname and fingerprint\&. +.RE +.PP +\fB\-\-verify\-config\fR +.RS 4 +Verify the configuration file is valid\&. +.RE +.PP +\fB\-\-nt\-service\fR +.RS 4 + +\fB\-\-service [install|remove|start|stop]\fR +Manage the Tor Windows NT/2000/XP service\&. Current instructions can be found at +https://wiki\&.torproject\&.org/noreply/TheOnionRouter/TorFAQ#WinNTService +.RE +.PP +\fB\-\-list\-torrc\-options\fR +.RS 4 +List all valid options\&. +.RE +.PP +\fB\-\-version\fR +.RS 4 +Display Tor version and exit\&. +.RE +.PP +\fB\-\-quiet\fR +.RS 4 +Do not start Tor with a console log unless explicitly requested to do so\&. (By default, Tor starts out logging messages at level "notice" or higher to the console, until it has parsed its configuration\&.) +.RE +.sp +Other options can be specified either on the command\-line (\-\-option value), or in the configuration file (option value or option "value")\&. Options are case\-insensitive\&. C\-style escaped characters are allowed inside quoted values\&. Options on the command line take precedence over options found in the configuration file, except indicated otherwise\&. To split one configuration entry into multiple lines, use a single \e before the end of the line\&. Comments can be used in such multiline entries, but they must start at the beginning of a line\&. +.PP +\fBBandwidthRate\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +A token bucket limits the average incoming bandwidth usage on this node to the specified number of bytes per second, and the average outgoing bandwidth usage to that same value\&. If you want to run a relay in the public network, this needs to be +\fIat the very least\fR +20 KB (that is, 20480 bytes)\&. (Default: 5 MB) +.RE +.PP +\fBBandwidthBurst\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +Limit the maximum token bucket size (also known as the burst) to the given number of bytes in each direction\&. (Default: 10 MB) +.RE +.PP +\fBMaxAdvertisedBandwidth\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +If set, we will not advertise more than this amount of bandwidth for our BandwidthRate\&. Server operators who want to reduce the number of clients who ask to build circuits through them (since this is proportional to advertised bandwidth rate) can thus reduce the CPU demands on their server without impacting network performance\&. +.RE +.PP +\fBRelayBandwidthRate\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +If not 0, a separate token bucket limits the average incoming bandwidth usage for _relayed traffic_ on this node to the specified number of bytes per second, and the average outgoing bandwidth usage to that same value\&. Relayed traffic currently is calculated to include answers to directory requests, but that may change in future versions\&. (Default: 0) +.RE +.PP +\fBRelayBandwidthBurst\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +If not 0, limit the maximum token bucket size (also known as the burst) for _relayed traffic_ to the given number of bytes in each direction\&. (Default: 0) +.RE +.PP +\fBPerConnBWRate\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +If set, do separate rate limiting for each connection from a non\-relay\&. You should never need to change this value, since a network\-wide value is published in the consensus and your relay will use that value\&. (Default: 0) +.RE +.PP +\fBPerConnBWBurst\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +If set, do separate rate limiting for each connection from a non\-relay\&. You should never need to change this value, since a network\-wide value is published in the consensus and your relay will use that value\&. (Default: 0) +.RE +.PP +\fBConnLimit\fR \fINUM\fR +.RS 4 +The minimum number of file descriptors that must be available to the Tor process before it will start\&. Tor will ask the OS for as many file descriptors as the OS will allow (you can find this by "ulimit \-H \-n")\&. If this number is less than ConnLimit, then Tor will refuse to start\&. + + +You probably don\(cqt need to adjust this\&. It has no effect on Windows since that platform lacks getrlimit()\&. (Default: 1000) +.RE +.PP +\fBConstrainedSockets\fR \fB0\fR|\fB1\fR +.RS 4 +If set, Tor will tell the kernel to attempt to shrink the buffers for all sockets to the size specified in +\fBConstrainedSockSize\fR\&. This is useful for virtual servers and other environments where system level TCP buffers may be limited\&. If you\(cqre on a virtual server, and you encounter the "Error creating network socket: No buffer space available" message, you are likely experiencing this problem\&. + + +The preferred solution is to have the admin increase the buffer pool for the host itself via /proc/sys/net/ipv4/tcp_mem or equivalent facility; this configuration option is a second\-resort\&. + + +The DirPort option should also not be used if TCP buffers are scarce\&. The cached directory requests consume additional sockets which exacerbates the problem\&. + + +You should +\fBnot\fR +enable this feature unless you encounter the "no buffer space available" issue\&. Reducing the TCP buffers affects window size for the TCP stream and will reduce throughput in proportion to round trip time on long paths\&. (Default: 0\&.) +.RE +.PP +\fBConstrainedSockSize\fR \fIN\fR \fBbytes\fR|\fBKB\fR +.RS 4 +When +\fBConstrainedSockets\fR +is enabled the receive and transmit buffers for all sockets will be set to this limit\&. Must be a value between 2048 and 262144, in 1024 byte increments\&. Default of 8192 is recommended\&. +.RE +.PP +\fBControlPort\fR \fIPORT\fR|\fBauto\fR +.RS 4 +If set, Tor will accept connections on this port and allow those connections to control the Tor process using the Tor Control Protocol (described in control\-spec\&.txt)\&. Note: unless you also specify one or more of +\fBHashedControlPassword\fR +or +\fBCookieAuthentication\fR, setting this option will cause Tor to allow any process on the local host to control it\&. (Setting both authentication methods means either method is sufficient to authenticate to Tor\&.) This option is required for many Tor controllers; most use the value of 9051\&. Set it to "auto" to have Tor pick a port for you\&. (Default: 0)\&. +.RE +.PP +\fBControlListenAddress\fR \fIIP\fR[:\fIPORT\fR] +.RS 4 +Bind the controller listener to this address\&. If you specify a port, bind to this port rather than the one specified in ControlPort\&. We strongly recommend that you leave this alone unless you know what you\(cqre doing, since giving attackers access to your control listener is really dangerous\&. (Default: 127\&.0\&.0\&.1) This directive can be specified multiple times to bind to multiple addresses/ports\&. +.RE +.PP +\fBControlSocket\fR \fIPath\fR +.RS 4 +Like ControlPort, but listens on a Unix domain socket, rather than a TCP socket\&. (Unix and Unix\-like systems only\&.) +.RE +.PP +\fBControlSocketsGroupWritable\fR \fB0\fR|\fB1\fR +.RS 4 +If this option is set to 0, don\(cqt allow the filesystem group to read and write unix sockets (e\&.g\&. ControlSocket)\&. If the option is set to 1, make the control socket readable and writable by the default GID\&. (Default: 0) +.RE +.PP +\fBHashedControlPassword\fR \fIhashed_password\fR +.RS 4 +Allow connections on the control port if they present the password whose one\-way hash is +\fIhashed_password\fR\&. You can compute the hash of a password by running "tor \-\-hash\-password +\fIpassword\fR"\&. You can provide several acceptable passwords by using more than one HashedControlPassword line\&. +.RE +.PP +\fBCookieAuthentication\fR \fB0\fR|\fB1\fR +.RS 4 +If this option is set to 1, allow connections on the control port when the connecting process knows the contents of a file named "control_auth_cookie", which Tor will create in its data directory\&. This authentication method should only be used on systems with good filesystem security\&. (Default: 0) +.RE +.PP +\fBCookieAuthFile\fR \fIPath\fR +.RS 4 +If set, this option overrides the default location and file name for Tor\(cqs cookie file\&. (See CookieAuthentication above\&.) +.RE +.PP +\fBCookieAuthFileGroupReadable\fR \fB0\fR|\fB1\fR|\fIGroupname\fR +.RS 4 +If this option is set to 0, don\(cqt allow the filesystem group to read the cookie file\&. If the option is set to 1, make the cookie file readable by the default GID\&. [Making the file readable by other groups is not yet implemented; let us know if you need this for some reason\&.] (Default: 0)\&. +.RE +.PP +\fBControlPortWriteToFile\fR \fIPath\fR +.RS 4 +If set, Tor writes the address and port of any control port it opens to this address\&. Usable by controllers to learn the actual control port when ControlPort is set to "auto"\&. +.RE +.PP +\fBControlPortFileGroupReadable\fR \fB0\fR|\fB1\fR +.RS 4 +If this option is set to 0, don\(cqt allow the filesystem group to read the control port file\&. If the option is set to 1, make the control port file readable by the default GID\&. (Default: 0)\&. +.RE +.PP +\fBDataDirectory\fR \fIDIR\fR +.RS 4 Store working data in DIR (Default: @LOCALSTATEDIR@/lib/tor) -.LP -.TP -\fBDirServer \fR[\fInickname\fR] [\fBflags\fR] \fIaddress\fR\fB:\fIport fingerprint\fP -Use a nonstandard authoritative directory server at the provided -address and port, with the specified key fingerprint. This option can -be repeated many times, for multiple authoritative directory -servers. Flags are separated by spaces, and determine what kind of an -authority this directory is. By default, every authority is authoritative -for current ("v2")-style directories, unless the "no-v2" flag is given. If the "v1" flags is provided, Tor will use this server as an -authority for old-style (v1) directories as well. (Only directory mirrors -care about this.) Tor will use this server as an authority for hidden -service information if the "hs" flag is set, or if the "v1" flag is set and -the "no-hs" flag is \fBnot\fP set. Tor will use this authority as a bridge -authoritative directory if the "bridge" flag is set. If a flag -"orport=\fBport\fR" is given, Tor will use the given port when opening -encrypted tunnels to the dirserver. Lastly, if a flag "v3ident=\fBfp\fR" is -given, the dirserver is a v3 directory authority whose v3 long-term -signing key has the fingerprint \fBfp\fR. - -If no \fBdirserver\fP line is given, Tor will use the default -directory servers. NOTE: this option is intended -for setting up a private Tor network with its own directory authorities. If -you use it, you will be distinguishable from other users, because you won't -believe the same authorities they do. -.LP -.TP -\fBAlternateDirAuthority \fR[\fInickname\fR] [\fBflags\fR] \fIaddress\fR\fB:\fIport fingerprint\fP -.LP -.TP -\fBAlternateHSAuthority \fR[\fInickname\fR] [\fBflags\fR] \fIaddress\fR\fB:\fIport fingerprint\fP -.LP -.TP -\fBAlternateBridgeAuthority \fR[\fInickname\fR] [\fBflags\fR] \fIaddress\fR\fB:\fIport fingerprint\fP -As DirServer, but replaces less of the default directory authorities. -Using AlternateDirAuthority replaces the default Tor directory -authorities, but leaves the hidden service authorities and bridge -authorities in place. Similarly, Using AlternateHSAuthority replaces -the default hidden service authorities, but not the directory or -bridge authorities. -.LP -.TP -\fBFetchDirInfoEarly \fR\fB0\fR|\fB1\fR\fP -If set to 1, Tor will always fetch directory information like other -directory caches, even if you don't meet the normal criteria for -fetching early. Normal users should leave it off. -(Default: 0) -.LP -.TP -\fBFetchHidServDescriptors \fR\fB0\fR|\fB1\fR\fP -If set to 0, Tor will never fetch any hidden service descriptors from -the rendezvous directories. This option is only useful if you're using -a Tor controller that handles hidden service fetches for you. -(Default: 1) -.LP -.TP -\fBFetchServerDescriptors \fR\fB0\fR|\fB1\fR\fP -If set to 0, Tor will never fetch any network status summaries or server -descriptors from the directory servers. This option is only useful if -you're using a Tor controller that handles directory fetches for you. -(Default: 1) -.LP -.TP -\fBFetchUselessDescriptors \fR\fB0\fR|\fB1\fR\fP -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) -.LP -.TP -\fBHTTPProxy\fR \fIhost\fR[:\fIport\fR]\fP -Tor will make all its directory requests through this host:port -(or host:80 if port is not specified), -rather than connecting directly to any directory servers. -.LP -.TP -\fBHTTPProxyAuthenticator\fR \fIusername:password\fP -If defined, Tor will use this username:password for Basic HTTP proxy -authentication, as in RFC 2617. This is currently the only form of -HTTP proxy authentication that Tor supports; feel free to submit a -patch if you want it to support others. -.LP -.TP -\fBHTTPSProxy\fR \fIhost\fR[:\fIport\fR]\fP -Tor will make all its OR (SSL) connections through this host:port -(or host:443 if port is not specified), via HTTP CONNECT rather than -connecting directly to servers. You may want to set \fBFascistFirewall\fR -to restrict the set of ports you might try to connect to, if your HTTPS -proxy only allows connecting to certain ports. -.LP -.TP -\fBHTTPSProxyAuthenticator\fR \fIusername:password\fP -If defined, Tor will use this username:password for Basic HTTPS proxy -authentication, as in RFC 2617. This is currently the only form of -HTTPS proxy authentication that Tor supports; feel free to submit a -patch if you want it to support others. -.LP -.TP -\fBKeepalivePeriod \fR\fINUM\fP -To keep firewalls from expiring connections, send a padding keepalive -cell every NUM seconds on open connections that are in use. If the -connection has no open circuits, it will instead be closed after NUM -seconds of idleness. (Default: 5 minutes) -.LP -.TP -\fBLog \fR\fIminSeverity\fR[-\fImaxSeverity\fR] \fBstderr\fR|\fBstdout\fR|\fBsyslog\fR\fP -Send all messages between \fIminSeverity\fR and \fImaxSeverity\fR to -the standard output stream, the standard error stream, or to the system -log. (The "syslog" value is only supported on Unix.) Recognized -severity levels are debug, info, notice, warn, and err. We advise using -"notice" in most cases, since anything more verbose may provide sensitive -information to an attacker who obtains the logs. If only one -severity level is given, all messages of that level or higher will be -sent to the listed destination. -.LP -.TP -\fBLog \fR\fIminSeverity\fR[-\fImaxSeverity\fR] \fBfile\fR \fIFILENAME\fP -As above, but send log messages to the listed filename. The "Log" -option may appear more than once in a configuration file. Messages -are sent to all the logs that match their severity level. -.LP -.TP -\fBOutboundBindAddress \fR\fIIP\fP -Make all outbound connections originate from the IP address specified. This -is only useful when you have multiple network interfaces, and you want all -of Tor's outgoing connections to use a single one. -.LP -.TP -\fBPidFile \fR\fIFILE\fP -On startup, write our PID to FILE. On clean shutdown, remove FILE. -.LP -.TP -\fBProtocolWarnings \fR\fB0\fR|\fB1\fR\fP -If 1, Tor will log with severity 'warn' various cases of other parties -not following the Tor specification. Otherwise, they are logged with -severity 'info'. (Default: 0) -.LP -.TP -\fBRunAsDaemon \fR\fB0\fR|\fB1\fR\fP -If 1, Tor forks and daemonizes to the background. This option has -no effect on Windows; instead you should use the --service command-line -option. (Default: 0) -.LP -.TP -\fBSafeLogging \fR\fB0\fR|\fB1\fP -If 1, Tor replaces potentially sensitive strings in the logs -(e.g. addresses) with the string [scrubbed]. This way logs can still be -useful, but they don't leave behind personally identifying information -about what sites a user might have visited. (Default: 1) -.LP -.TP -\fBUser \fR\fIUID\fP -On startup, setuid to this user and setgid to their primary group. -.LP -.TP -\fBHardwareAccel \fR\fB0\fR|\fB1\fP -If non-zero, try to use crypto hardware acceleration when -available. This is untested and probably buggy. (Default: 0) -.LP -.TP -\fBAvoidDiskWrites \fR\fB0\fR|\fB1\fP -If non-zero, try to write to disk less frequently than we would otherwise. -This is useful when running on flash memory or other media that support only -a limited number of writes. (Default: 0) -.LP -.TP -\fBTunnelDirConns \fR\fB0\fR|\fB1\fP -If non-zero, when a directory server we contact supports it, we will -build a one-hop circuit and make an encrypted connection via its -ORPort. (Default: 1) -.LP -.TP -\fBPreferTunneledDirConns \fR\fB0\fR|\fB1\fP -If non-zero, we will avoid directory servers that don't support tunneled -directory connections, when possible. (Default: 1) - -.SH CLIENT OPTIONS -.PP -The following options are useful only for clients (that is, if \fBSocksPort\fP is non-zero): -.LP -.TP -\fBAllowInvalidNodes\fR \fBentry\fR|\fBexit\fR|\fBmiddle\fR|\fBintroduction\fR|\fBrendezvous\fR|...\fP -If some Tor servers are obviously not working right, the directory -authorities can manually mark them as invalid, meaning that it's not -recommended you use them for entry or exit positions in your circuits. You -can opt to use them in some circuit positions, though. The default is -"middle,rendezvous", and other choices are not advised. -.LP -.TP -\fBExcludeSingleHopRelays \fR\fB0\fR|\fB1\fR\fP -This option controls whether circuits built by Tor will include relays with -the AllowSingleHopExits flag set to true. If ExcludeSingleHopRelays is set to -0, these relays will be included. Note that these relays might be at higher -risk of being seized or observed, so they are not normally included. -(Default: 1) -.LP -.TP -\fBBridge \fR\fIIP:ORPort\fR [fingerprint]\fP -When set along with UseBridges, instructs Tor to use the relay at -"IP:ORPort" as a "bridge" relaying into the Tor network. If "fingerprint" -is provided (using the same format as for DirServer), we will verify that -the relay running at that location has the right fingerprint. We also use -fingerprint to look up the bridge descriptor at the bridge authority, if -it's provided and if UpdateBridgesFromAuthority is set too. -.LP -.TP -\fBCircuitBuildTimeout \fR\fINUM\fP -Try for at most NUM seconds when building circuits. If the circuit -isn't open in that time, give up on it. -(Default: 1 minute.) -.LP -.TP -\fBCircuitIdleTimeout \fR\fINUM\fP -If we have kept a clean (never used) circuit around for NUM seconds, -then close it. This way when the Tor client is entirely idle, it can -expire all of its circuits, and then expire its TLS connections. Also, -if we end up making a circuit that is not useful for exiting any of -the requests we're receiving, it won't forever take up a slot in the -circuit list. -(Default: 1 hour.) -.LP -.TP -\fBClientOnly \fR\fB0\fR|\fB1\fR\fP -If set to 1, Tor will under no circumstances run as a server or serve -directory requests. The default -is to run as a client unless ORPort is configured. (Usually, -you don't need to set this; Tor is pretty smart at figuring out whether -you are reliable and high-bandwidth enough to be a useful server.) -(Default: 0) -.LP -.TP -\fBExcludeNodes \fR\fInode\fR,\fInode\fR,\fI...\fP -A list of identity fingerprints, nicknames, country codes and address patterns -of nodes to never use when building a circuit. (Example: ExcludeNodes -SlowServer, $ABCDEFFFFFFFFFFFFFFF, {cc}, 255.254.0.0/8) -.LP -.TP -\fBExcludeExitNodes \fR\fInode\fR,\fInode\fR,\fI...\fP -A list of identity fingerprints, nicknames, country codes and address patterns -of nodes to never use when picking an exit node. Note that any node -listed in ExcludeNodes is automatically considered to be part of this -list. -.LP -.TP -\fBEntryNodes \fR\fInode\fR,\fInode\fR,\fI...\fP -A list of identity fingerprints, nicknames, country codes and address patterns -of nodes to use for the first hop in the circuit. -These are treated only as preferences unless StrictEntryNodes (see -below) is also set. -.LP -.TP -\fBExitNodes \fR\fInode\fR,\fInode\fR,\fI...\fP -A list of identity fingerprints, nicknames, country codes and address patterns -of nodes to use for the last hop in the circuit. -These are treated only as preferences unless StrictExitNodes (see -below) is also set. -.LP -.TP -\fBStrictEntryNodes \fR\fB0\fR|\fB1\fR\fP -If 1, Tor will never use any nodes besides those listed in "EntryNodes" for -the first hop of a circuit. -.LP -.TP -\fBStrictExitNodes \fR\fB0\fR|\fB1\fR\fP -If 1, Tor will never use any nodes besides those listed in "ExitNodes" for -the last hop of a circuit. -.LP -.TP -\fBFascistFirewall \fR\fB0\fR|\fB1\fR\fP -If 1, Tor will only create outgoing connections to ORs running on ports that -your firewall allows (defaults to 80 and 443; see \fBFirewallPorts\fR). This will -allow you to run Tor as a client behind a firewall with restrictive policies, -but will not allow you to run as a server behind such a firewall. -If you prefer more fine-grained control, use ReachableAddresses instead. -.LP -.TP -\fBFirewallPorts \fR\fIPORTS\fP -A list of ports that your firewall allows you to connect to. Only -used when \fBFascistFirewall\fR is set. This option is deprecated; use -ReachableAddresses instead. (Default: 80, 443) -.LP -.TP -\fBHidServAuth \fR\fIonion-address\fR \fIauth-cookie\fP [\fIservice-name\fR] -Client authorization for a hidden service. Valid onion addresses contain 16 -characters in a-z2-7 plus ".onion", and valid auth cookies contain 22 -characters in A-Za-z0-9+/. The service name is only used for internal -purposes, e.g., for Tor controllers. This option may be used multiple times -for different hidden services. If a hidden service uses authorization and -this option is not set, the hidden service is not accessible. Hidden -services can be configured to require authorization using the -\fBHiddenServiceAuthorizeClient\fR option. -.LP -.TP -\fBReachableAddresses \fR\fIADDR\fP[\fB/\fP\fIMASK\fP][:\fIPORT\fP]...\fP -A comma-separated list of IP addresses and ports that your firewall allows you -to connect to. The format is as -for the addresses in ExitPolicy, except that "accept" is understood -unless "reject" is explicitly provided. For example, 'ReachableAddresses -99.0.0.0/8, reject 18.0.0.0/8:80, accept *:80' means that your -firewall allows connections to everything inside net 99, rejects port -80 connections to net 18, and accepts connections to port 80 otherwise. -(Default: 'accept *:*'.) -.LP -.TP -\fBReachableDirAddresses \fR\fIADDR\fP[\fB/\fP\fIMASK\fP][:\fIPORT\fP]...\fP -Like \fBReachableAddresses\fP, a list of addresses and ports. Tor will obey -these restrictions when fetching directory information, using standard HTTP -GET requests. If not set explicitly then the value of \fBReachableAddresses\fP -is used. If \fBHTTPProxy\fR is set then these connections will go through that -proxy. -.LP -.TP -\fBReachableORAddresses \fR\fIADDR\fP[\fB/\fP\fIMASK\fP][:\fIPORT\fP]...\fP -Like \fBReachableAddresses\fP, a list of addresses and ports. Tor will obey -these restrictions when connecting to Onion Routers, using TLS/SSL. If not set -explicitly then the value of \fBReachableAddresses\fP is used. If -\fBHTTPSProxy\fR is set then these connections will go through that proxy. - -The separation between \fBReachableORAddresses\fP and -\fBReachableDirAddresses\fP is only interesting when you are connecting through -proxies (see \fBHTTPProxy\fR and \fBHTTPSProxy\fR). Most proxies limit TLS -connections (which Tor uses to connect to Onion Routers) to port 443, and some -limit HTTP GET requests (which Tor uses for fetching directory information) to -port 80. -.LP -.TP -\fBLongLivedPorts \fR\fIPORTS\fP -A list of ports for services that tend to have long-running connections -(e.g. chat and interactive shells). Circuits for streams that use these -ports will contain only high-uptime nodes, to reduce the chance that a -node will go down before the stream is finished. -(Default: 21, 22, 706, 1863, 5050, 5190, 5222, 5223, 6667, 6697, 8300) -.LP -.TP +.RE +.PP +\fBDirServer\fR [\fInickname\fR] [\fBflags\fR] \fIaddress\fR:\fIport\fR \fIfingerprint\fR +.RS 4 +Use a nonstandard authoritative directory server at the provided address and port, with the specified key fingerprint\&. This option can be repeated many times, for multiple authoritative directory servers\&. Flags are separated by spaces, and determine what kind of an authority this directory is\&. By default, every authority is authoritative for current ("v2")\-style directories, unless the "no\-v2" flag is given\&. If the "v1" flags is provided, Tor will use this server as an authority for old\-style (v1) directories as well\&. (Only directory mirrors care about this\&.) Tor will use this server as an authority for hidden service information if the "hs" flag is set, or if the "v1" flag is set and the "no\-hs" flag is +\fBnot\fR +set\&. Tor will use this authority as a bridge authoritative directory if the "bridge" flag is set\&. If a flag "orport=\fBport\fR" is given, Tor will use the given port when opening encrypted tunnels to the dirserver\&. Lastly, if a flag "v3ident=\fBfp\fR" is given, the dirserver is a v3 directory authority whose v3 long\-term signing key has the fingerprint +\fBfp\fR\&. + + +If no +\fBdirserver\fR +line is given, Tor will use the default directory servers\&. NOTE: this option is intended for setting up a private Tor network with its own directory authorities\&. If you use it, you will be distinguishable from other users, because you won\(cqt believe the same authorities they do\&. +.RE +.sp +\fBAlternateDirAuthority\fR [\fInickname\fR] [\fBflags\fR] \fIaddress\fR:\fIport\fR \fIfingerprint\fR +.sp +\fBAlternateHSAuthority\fR [\fInickname\fR] [\fBflags\fR] \fIaddress\fR:\fIport\fR \fIfingerprint\fR +.PP +\fBAlternateBridgeAuthority\fR [\fInickname\fR] [\fBflags\fR] \fIaddress\fR:\fIport\fR \fI fingerprint\fR +.RS 4 +As DirServer, but replaces less of the default directory authorities\&. Using AlternateDirAuthority replaces the default Tor directory authorities, but leaves the hidden service authorities and bridge authorities in place\&. Similarly, Using AlternateHSAuthority replaces the default hidden service authorities, but not the directory or bridge authorities\&. +.RE +.PP +\fBDisableAllSwap\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 1, Tor will attempt to lock all current and future memory pages, so that memory cannot be paged out\&. Windows, OS X and Solaris are currently not supported\&. We believe that this feature works on modern Gnu/Linux distributions, and that it should work on *BSD systems (untested)\&. This option requires that you start your Tor as root, and you should use the +\fBUser\fR +option to properly reduce Tor\(cqs privileges\&. (Default: 0) +.RE +.PP +\fBFetchDirInfoEarly\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 1, Tor will always fetch directory information like other directory caches, even if you don\(cqt meet the normal criteria for fetching early\&. Normal users should leave it off\&. (Default: 0) +.RE +.PP +\fBFetchDirInfoExtraEarly\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 1, Tor will fetch directory information before other directory caches\&. It will attempt to download directory information closer to the start of the consensus period\&. Normal users should leave it off\&. (Default: 0) +.RE +.PP +\fBFetchHidServDescriptors\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 0, Tor will never fetch any hidden service descriptors from the rendezvous directories\&. This option is only useful if you\(cqre using a Tor controller that handles hidden service fetches for you\&. (Default: 1) +.RE +.PP +\fBFetchServerDescriptors\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 0, Tor will never fetch any network status summaries or server descriptors from the directory servers\&. This option is only useful if you\(cqre using a Tor controller that handles directory fetches for you\&. (Default: 1) +.RE +.PP +\fBFetchUselessDescriptors\fR \fB0\fR|\fB1\fR +.RS 4 +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\(cqre using the contributed "exitlist" script to enumerate Tor nodes that exit to certain addresses\&. (Default: 0) +.RE +.PP +\fBHTTPProxy\fR \fIhost\fR[:\fIport\fR] +.RS 4 +Tor will make all its directory requests through this host:port (or host:80 if port is not specified), rather than connecting directly to any directory servers\&. +.RE +.PP +\fBHTTPProxyAuthenticator\fR \fIusername:password\fR +.RS 4 +If defined, Tor will use this username:password for Basic HTTP proxy authentication, as in RFC 2617\&. This is currently the only form of HTTP proxy authentication that Tor supports; feel free to submit a patch if you want it to support others\&. +.RE +.PP +\fBHTTPSProxy\fR \fIhost\fR[:\fIport\fR] +.RS 4 +Tor will make all its OR (SSL) connections through this host:port (or host:443 if port is not specified), via HTTP CONNECT rather than connecting directly to servers\&. You may want to set +\fBFascistFirewall\fR +to restrict the set of ports you might try to connect to, if your HTTPS proxy only allows connecting to certain ports\&. +.RE +.PP +\fBHTTPSProxyAuthenticator\fR \fIusername:password\fR +.RS 4 +If defined, Tor will use this username:password for Basic HTTPS proxy authentication, as in RFC 2617\&. This is currently the only form of HTTPS proxy authentication that Tor supports; feel free to submit a patch if you want it to support others\&. +.RE +.PP +\fBSocks4Proxy\fR \fIhost\fR[:\fIport\fR] +.RS 4 +Tor will make all OR connections through the SOCKS 4 proxy at host:port (or host:1080 if port is not specified)\&. +.RE +.PP +\fBSocks5Proxy\fR \fIhost\fR[:\fIport\fR] +.RS 4 +Tor will make all OR connections through the SOCKS 5 proxy at host:port (or host:1080 if port is not specified)\&. +.RE +.sp +\fBSocks5ProxyUsername\fR \fIusername\fR +.PP +\fBSocks5ProxyPassword\fR \fIpassword\fR +.RS 4 +If defined, authenticate to the SOCKS 5 server using username and password in accordance to RFC 1929\&. Both username and password must be between 1 and 255 characters\&. +.RE +.PP +\fBKeepalivePeriod\fR \fINUM\fR +.RS 4 +To keep firewalls from expiring connections, send a padding keepalive cell every NUM seconds on open connections that are in use\&. If the connection has no open circuits, it will instead be closed after NUM seconds of idleness\&. (Default: 5 minutes) +.RE +.PP +\fBLog\fR \fIminSeverity\fR[\-\fImaxSeverity\fR] \fBstderr\fR|\fBstdout\fR|\fBsyslog\fR +.RS 4 +Send all messages between +\fIminSeverity\fR +and +\fImaxSeverity\fR +to the standard output stream, the standard error stream, or to the system log\&. (The "syslog" value is only supported on Unix\&.) Recognized severity levels are debug, info, notice, warn, and err\&. We advise using "notice" in most cases, since anything more verbose may provide sensitive information to an attacker who obtains the logs\&. If only one severity level is given, all messages of that level or higher will be sent to the listed destination\&. +.RE +.PP +\fBLog\fR \fIminSeverity\fR[\-\fImaxSeverity\fR] \fBfile\fR \fIFILENAME\fR +.RS 4 +As above, but send log messages to the listed filename\&. The "Log" option may appear more than once in a configuration file\&. Messages are sent to all the logs that match their severity level\&. +.RE +.sp +\fBLog\fR \fB[\fR\fIdomain\fR,\&...\fB]\fR\fIminSeverity\fR[\-\fImaxSeverity\fR] \&... \fBfile\fR \fIFILENAME\fR +.PP +\fBLog\fR \fB[\fR\fIdomain\fR,\&...\fB]\fR\fIminSeverity\fR[\-\fImaxSeverity\fR] \&... \fBstderr\fR|\fBstdout\fR|\fBsyslog\fR +.RS 4 +As above, but select messages by range of log severity +\fIand\fR +by a set of "logging domains"\&. Each logging domain corresponds to an area of functionality inside Tor\&. You can specify any number of severity ranges for a single log statement, each of them prefixed by a comma\-separated list of logging domains\&. You can prefix a domain with ~ to indicate negation, and use * to indicate "all domains"\&. If you specify a severity range without a list of domains, it matches all domains\&. + + +This is an advanced feature which is most useful for debugging one or two of Tor\(cqs subsystems at a time\&. + + +The currently recognized domains are: general, crypto, net, config, fs, protocol, mm, http, app, control, circ, rend, bug, dir, dirserv, or, edge, acct, hist, and handshake\&. Domain names are case\-insensitive\&. + + +For example, "Log [handshake]debug [~net,~mm]info notice stdout" sends to stdout: all handshake messages of any severity, all info\-and\-higher messages from domains other than networking and memory management, and all messages of severity notice or higher\&. +.RE +.PP +\fBLogMessageDomains\fR \fB0\fR|\fB1\fR +.RS 4 +If 1, Tor includes message domains with each log message\&. Every log message currently has at least one domain; most currently have exactly one\&. This doesn\(cqt affect controller log messages\&. (Default: 0) +.RE +.PP +\fBOutboundBindAddress\fR \fIIP\fR +.RS 4 +Make all outbound connections originate from the IP address specified\&. This is only useful when you have multiple network interfaces, and you want all of Tor\(cqs outgoing connections to use a single one\&. This setting will be ignored for connections to the loopback addresses (127\&.0\&.0\&.0/8 and ::1)\&. +.RE +.PP +\fBPidFile\fR \fIFILE\fR +.RS 4 +On startup, write our PID to FILE\&. On clean shutdown, remove FILE\&. +.RE +.PP +\fBProtocolWarnings\fR \fB0\fR|\fB1\fR +.RS 4 +If 1, Tor will log with severity \*(Aqwarn\*(Aq various cases of other parties not following the Tor specification\&. Otherwise, they are logged with severity \*(Aqinfo\*(Aq\&. (Default: 0) +.RE +.PP +\fBRunAsDaemon\fR \fB0\fR|\fB1\fR +.RS 4 +If 1, Tor forks and daemonizes to the background\&. This option has no effect on Windows; instead you should use the \-\-service command\-line option\&. (Default: 0) +.RE +.PP +\fBSafeLogging\fR \fB0\fR|\fB1\fR|\fBrelay\fR +.RS 4 +Tor can scrub potentially sensitive strings from log messages (e\&.g\&. addresses) by replacing them with the string [scrubbed]\&. This way logs can still be useful, but they don\(cqt leave behind personally identifying information about what sites a user might have visited\&. + + +If this option is set to 0, Tor will not perform any scrubbing, if it is set to 1, all potentially sensitive strings are replaced\&. If it is set to relay, all log messages generated when acting as a relay are sanitized, but all messages generated when acting as a client are not\&. (Default: 1) +.RE +.PP +\fBUser\fR \fIUID\fR +.RS 4 +On startup, setuid to this user and setgid to their primary group\&. +.RE +.PP +\fBHardwareAccel\fR \fB0\fR|\fB1\fR +.RS 4 +If non\-zero, try to use built\-in (static) crypto hardware acceleration when available\&. (Default: 0) +.RE +.PP +\fBAccelName\fR \fINAME\fR +.RS 4 +When using OpenSSL hardware crypto acceleration attempt to load the dynamic engine of this name\&. This must be used for any dynamic hardware engine\&. Names can be verified with the openssl engine command\&. +.RE +.PP +\fBAccelDir\fR \fIDIR\fR +.RS 4 +Specify this option if using dynamic hardware acceleration and the engine implementation library resides somewhere other than the OpenSSL default\&. +.RE +.PP +\fBAvoidDiskWrites\fR \fB0\fR|\fB1\fR +.RS 4 +If non\-zero, try to write to disk less frequently than we would otherwise\&. This is useful when running on flash memory or other media that support only a limited number of writes\&. (Default: 0) +.RE +.PP +\fBTunnelDirConns\fR \fB0\fR|\fB1\fR +.RS 4 +If non\-zero, when a directory server we contact supports it, we will build a one\-hop circuit and make an encrypted connection via its ORPort\&. (Default: 1) +.RE +.PP +\fBPreferTunneledDirConns\fR \fB0\fR|\fB1\fR +.RS 4 +If non\-zero, we will avoid directory servers that don\(cqt support tunneled directory connections, when possible\&. (Default: 1) +.RE +.PP +\fBCircuitPriorityHalflife\fR \fINUM1\fR +.RS 4 +If this value is set, we override the default algorithm for choosing which circuit\(cqs cell to deliver or relay next\&. When the value is 0, we round\-robin between the active circuits on a connection, delivering one cell from each in turn\&. When the value is positive, we prefer delivering cells from whichever connection has the lowest weighted cell count, where cells are weighted exponentially according to the supplied CircuitPriorityHalflife value (in seconds)\&. If this option is not set at all, we use the behavior recommended in the current consensus networkstatus\&. This is an advanced option; you generally shouldn\(cqt have to mess with it\&. (Default: not set\&.) +.RE +.SH "CLIENT OPTIONS" +.sp +The following options are useful only for clients (that is, if \fBSocksPort\fR is non\-zero): +.PP +\fBAllowInvalidNodes\fR \fBentry\fR|\fBexit\fR|\fBmiddle\fR|\fBintroduction\fR|\fBrendezvous\fR|\fB\&...\fR +.RS 4 +If some Tor servers are obviously not working right, the directory authorities can manually mark them as invalid, meaning that it\(cqs not recommended you use them for entry or exit positions in your circuits\&. You can opt to use them in some circuit positions, though\&. The default is "middle,rendezvous", and other choices are not advised\&. +.RE +.PP +\fBExcludeSingleHopRelays\fR \fB0\fR|\fB1\fR +.RS 4 +This option controls whether circuits built by Tor will include relays with the AllowSingleHopExits flag set to true\&. If ExcludeSingleHopRelays is set to 0, these relays will be included\&. Note that these relays might be at higher risk of being seized or observed, so they are not normally included\&. Also note that relatively few clients turn off this option, so using these relays might make your client stand out\&. (Default: 1) +.RE +.PP +\fBBridge\fR \fIIP\fR:\fIORPort\fR [fingerprint] +.RS 4 +When set along with UseBridges, instructs Tor to use the relay at "IP:ORPort" as a "bridge" relaying into the Tor network\&. If "fingerprint" is provided (using the same format as for DirServer), we will verify that the relay running at that location has the right fingerprint\&. We also use fingerprint to look up the bridge descriptor at the bridge authority, if it\(cqs provided and if UpdateBridgesFromAuthority is set too\&. +.RE +.PP +\fBLearnCircuitBuildTimeout\fR \fB0\fR|\fB1\fR +.RS 4 +If 0, CircuitBuildTimeout adaptive learning is disabled\&. (Default: 1) +.RE +.PP +\fBCircuitBuildTimeout\fR \fINUM\fR +.RS 4 +Try for at most NUM seconds when building circuits\&. If the circuit isn\(cqt open in that time, give up on it\&. If LearnCircuitBuildTimeout is 1, this value serves as the initial value to use before a timeout is learned\&. If LearnCircuitBuildTimeout is 0, this value is the only value used\&. (Default: 60 seconds\&.) +.RE +.PP +\fBCircuitIdleTimeout\fR \fINUM\fR +.RS 4 +If we have kept a clean (never used) circuit around for NUM seconds, then close it\&. This way when the Tor client is entirely idle, it can expire all of its circuits, and then expire its TLS connections\&. Also, if we end up making a circuit that is not useful for exiting any of the requests we\(cqre receiving, it won\(cqt forever take up a slot in the circuit list\&. (Default: 1 hour\&.) +.RE +.PP +\fBCircuitStreamTimeout\fR \fINUM\fR +.RS 4 +If non\-zero, this option overrides our internal timeout schedule for how many seconds until we detach a stream from a circuit and try a new circuit\&. If your network is particularly slow, you might want to set this to a number like 60\&. (Default: 0) +.RE +.PP +\fBClientOnly\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 1, Tor will under no circumstances run as a server or serve directory requests\&. The default is to run as a client unless ORPort is configured\&. (Usually, you don\(cqt need to set this; Tor is pretty smart at figuring out whether you are reliable and high\-bandwidth enough to be a useful server\&.) (Default: 0) +.RE +.PP +\fBExcludeNodes\fR \fInode\fR,\fInode\fR,\fI\&...\fR +.RS 4 +A list of identity fingerprints, nicknames, country codes and address patterns of nodes to avoid when building a circuit\&. (Example: ExcludeNodes SlowServer, ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, {cc}, 255\&.254\&.0\&.0/8) + + +By default, this option is treated as a preference that Tor is allowed to override in order to keep working\&. For example, if you try to connect to a hidden service, but you have excluded all of the hidden service\(cqs introduction points, Tor will connect to one of them anyway\&. If you do not want this behavior, set the StrictNodes option (documented below)\&. + + +Note also that if you are a relay, this (and the other node selection options below) only affects your own circuits that Tor builds for you\&. Clients can still build circuits through you to any node\&. Controllers can tell Tor to build circuits through any node\&. +.RE +.PP +\fBExcludeExitNodes\fR \fInode\fR,\fInode\fR,\fI\&...\fR +.RS 4 +A list of identity fingerprints, nicknames, country codes and address patterns of nodes to never use when picking an exit node\-\-\-that is, a node that delivers traffic for you outside the Tor network\&. Note that any node listed in ExcludeNodes is automatically considered to be part of this list too\&. See also the caveats on the "ExitNodes" option below\&. +.RE +.PP +\fBExitNodes\fR \fInode\fR,\fInode\fR,\fI\&...\fR +.RS 4 +A list of identity fingerprints, nicknames, country codes and address patterns of nodes to use as exit node\-\-\-that is, a node that delivers traffic for you outside the Tor network\&. + + +Note that if you list too few nodes here, or if you exclude too many exit nodes with ExcludeExitNodes, you can degrade functionality\&. For example, if none of the exits you list allows traffic on port 80 or 443, you won\(cqt be able to browse the web\&. + + +Note also that not every circuit is used to deliver traffic outside of the Tor network\&. It is normal to see non\-exit circuits (such as those used to connect to hidden services, those that do directory fetches, those used for relay reachability self\-tests, and so on) that end at a non\-exit node\&. To keep a node from being used entirely, see ExcludeNodes and StrictNodes\&. + + +The ExcludeNodes option overrides this option: any node listed in both ExitNodes and ExcludeNodes is treated as excluded\&. + + +The \&.exit address notation, if enabled via AllowDotExit, overrides this option\&. +.RE +.PP +\fBEntryNodes\fR \fInode\fR,\fInode\fR,\fI\&...\fR +.RS 4 +A list of identity fingerprints and nicknames of nodes to use for the first hop in your normal circuits\&. (Country codes and address patterns are not yet supported\&.) Normal circuits include all circuits except for direct connections to directory servers\&. The Bridge option overrides this option; if you have configured bridges and UseBridges is 1, the Bridges are used as your entry nodes\&. + + +The ExcludeNodes option overrides this option: any node listed in both EntryNodes and ExcludeNodes is treated as excluded\&. +.RE +.PP +\fBStrictNodes\fR \fB0\fR|\fB1\fR +.RS 4 +If StrictNodes is set to 1, Tor will treat the ExcludeNodes option as a requirement to follow for all the circuits you generate, even if doing so will break functionality for you\&. If StrictNodes is set to 0, Tor will still try to avoid nodes in the ExcludeNodes list, but it will err on the side of avoiding unexpected errors\&. Specifically, StrictNodes 0 tells Tor that it is okay to use an excluded node when it is +\fBnecessary\fR +to perform relay reachability self\-tests, connect to a hidden service, provide a hidden service to a client, fulfill a \&.exit request, upload directory information, or download directory information\&. (Default: 0) +.RE +.PP +\fBFascistFirewall\fR \fB0\fR|\fB1\fR +.RS 4 +If 1, Tor will only create outgoing connections to ORs running on ports that your firewall allows (defaults to 80 and 443; see +\fBFirewallPorts\fR)\&. This will allow you to run Tor as a client behind a firewall with restrictive policies, but will not allow you to run as a server behind such a firewall\&. If you prefer more fine\-grained control, use ReachableAddresses instead\&. +.RE +.PP +\fBFirewallPorts\fR \fIPORTS\fR +.RS 4 +A list of ports that your firewall allows you to connect to\&. Only used when +\fBFascistFirewall\fR +is set\&. This option is deprecated; use ReachableAddresses instead\&. (Default: 80, 443) +.RE +.PP +\fBHidServAuth\fR \fIonion\-address\fR \fIauth\-cookie\fR [\fIservice\-name\fR] +.RS 4 +Client authorization for a hidden service\&. Valid onion addresses contain 16 characters in a\-z2\-7 plus "\&.onion", and valid auth cookies contain 22 characters in A\-Za\-z0\-9+/\&. The service name is only used for internal purposes, e\&.g\&., for Tor controllers\&. This option may be used multiple times for different hidden services\&. If a hidden service uses authorization and this option is not set, the hidden service is not accessible\&. Hidden services can be configured to require authorization using the +\fBHiddenServiceAuthorizeClient\fR +option\&. +.RE +.PP +\fBReachableAddresses\fR \fIADDR\fR[/\fIMASK\fR][:\fIPORT\fR]\&... +.RS 4 +A comma\-separated list of IP addresses and ports that your firewall allows you to connect to\&. The format is as for the addresses in ExitPolicy, except that "accept" is understood unless "reject" is explicitly provided\&. For example, \*(AqReachableAddresses 99\&.0\&.0\&.0/8, reject 18\&.0\&.0\&.0/8:80, accept *:80\*(Aq means that your firewall allows connections to everything inside net 99, rejects port 80 connections to net 18, and accepts connections to port 80 otherwise\&. (Default: \*(Aqaccept *:*\*(Aq\&.) +.RE +.PP +\fBReachableDirAddresses\fR \fIADDR\fR[/\fIMASK\fR][:\fIPORT\fR]\&... +.RS 4 +Like +\fBReachableAddresses\fR, a list of addresses and ports\&. Tor will obey these restrictions when fetching directory information, using standard HTTP GET requests\&. If not set explicitly then the value of +\fBReachableAddresses\fR +is used\&. If +\fBHTTPProxy\fR +is set then these connections will go through that proxy\&. +.RE +.PP +\fBReachableORAddresses\fR \fIADDR\fR[/\fIMASK\fR][:\fIPORT\fR]\&... +.RS 4 +Like +\fBReachableAddresses\fR, a list of addresses and ports\&. Tor will obey these restrictions when connecting to Onion Routers, using TLS/SSL\&. If not set explicitly then the value of +\fBReachableAddresses\fR +is used\&. If +\fBHTTPSProxy\fR +is set then these connections will go through that proxy\&. + + +The separation between +\fBReachableORAddresses\fR +and +\fBReachableDirAddresses\fR +is only interesting when you are connecting through proxies (see +\fBHTTPProxy\fR +and +\fBHTTPSProxy\fR)\&. Most proxies limit TLS connections (which Tor uses to connect to Onion Routers) to port 443, and some limit HTTP GET requests (which Tor uses for fetching directory information) to port 80\&. +.RE +.PP +\fBLongLivedPorts\fR \fIPORTS\fR +.RS 4 +A list of ports for services that tend to have long\-running connections (e\&.g\&. chat and interactive shells)\&. Circuits for streams that use these ports will contain only high\-uptime nodes, to reduce the chance that a node will go down before the stream is finished\&. (Default: 21, 22, 706, 1863, 5050, 5190, 5222, 5223, 6667, 6697, 8300) +.RE +.PP \fBMapAddress\fR \fIaddress\fR \fInewaddress\fR -When a request for address arrives to Tor, it will rewrite it to -newaddress before processing it. For example, if you always want -connections to www.indymedia.org to exit via \fItorserver\fR (where -\fItorserver\fR is the nickname of the server), -use "MapAddress www.indymedia.org www.indymedia.org.torserver.exit". -.LP -.TP -\fBNewCircuitPeriod \fR\fINUM\fP -Every NUM seconds consider whether to build a new circuit. (Default: 30 seconds) -.LP -.TP -\fBMaxCircuitDirtiness \fR\fINUM\fP -Feel free to reuse a circuit that was first used at most NUM seconds ago, -but never attach a new stream to a circuit that is too old. -(Default: 10 minutes) -.LP -.TP -\fBNodeFamily \fR\fInode\fR,\fInode\fR,\fI...\fP -The Tor servers, defined by their identity fingerprints or nicknames, -constitute a "family" of similar or co-administered -servers, so never use any two of them in the same circuit. Defining a -NodeFamily is only needed when a server doesn't list the family itself -(with MyFamily). This option can be used multiple times. -.LP -.TP -\fBEnforceDistinctSubnets \fR\fB0\fR|\fB1\fR\fP -If 1, Tor will not put two servers whose IP addresses are "too -close" on the same circuit. Currently, two addresses are -"too close" if they lie in the same /16 range. (Default: 1) - -.\" \fBPathlenCoinWeight \fR\fI0.0-1.0\fP -.\" Paths are 3 hops plus a geometric distribution centered around this coinweight. -.\" Must be >=0.0 and <1.0. (Default: 0.3) NOT USED CURRENTLY -.\" .TP -.LP -.TP -\fBSocksPort \fR\fIPORT\fP -Advertise this port to listen for connections from Socks-speaking -applications. Set this to 0 if you don't want to allow application -connections. (Default: 9050) -.LP -.TP -\fBSocksListenAddress \fR\fIIP\fR[:\fIPORT\fR]\fP -Bind to this address to listen for connections from Socks-speaking -applications. (Default: 127.0.0.1) You can also specify a port -(e.g. 192.168.0.1:9100). -This directive can be specified multiple times to bind to multiple -addresses/ports. -.LP -.TP -\fBSocksPolicy \fR\fIpolicy\fR,\fIpolicy\fR,\fI...\fP -Set an entrance policy for this server, to limit who can connect to the -SocksPort and DNSPort ports. -The policies have the same form as exit policies below. -.LP -.TP -\fBSocksTimeout \fR\fINUM\fP -Let a socks connection wait NUM seconds handshaking, and NUM seconds -unattached waiting for an appropriate circuit, before we fail it. -(Default: 2 minutes.) -.LP -.TP -\fBTrackHostExits \fR\fIhost\fR,\fI.domain\fR,\fI...\fR\fP -For each value in the comma separated list, Tor will track recent connections -to hosts that match this value and attempt to -reuse the same exit node for each. If the value is prepended with a '.', it is -treated as matching an entire domain. If one of the values is just a '.', it -means match everything. This option is useful if you frequently connect to -sites that will expire all your authentication cookies (i.e. log you out) if -your IP address changes. Note that this option does have the disadvantage of -making it more clear that a given history is -associated with a single user. However, most people who would wish to observe -this will observe it through cookies or other protocol-specific means anyhow. -.LP -.TP -\fBTrackHostExitsExpire \fR\fINUM\fP -Since exit servers go up and down, it is desirable to expire the association -between host and exit server after NUM seconds. The default -is 1800 seconds (30 minutes). -.LP -.TP -\fBUpdateBridgesFromAuthority \fR\fB0\fR|\fB1\fR\fP -When set (along with UseBridges), Tor will try to fetch bridge descriptors -from the configured bridge authorities when feasible. It will fall back -to a direct request if the authority responds with a 404. (Default: 0) -.LP -.TP -\fBUseBridges \fR\fB0\fR|\fB1\fR\fP -When set, Tor will fetch descriptors for each bridge listed in the -"Bridge" config lines, and use these relays as both entry guards and -directory guards. (Default: 0) -.LP -.TP -\fBUseEntryGuards \fR\fB0\fR|\fB1\fR\fP -If this option is set to 1, we pick a few long-term entry servers, and -try to stick with them. This is desirable because -constantly changing servers increases the odds that an adversary who owns -some servers will observe a fraction of your paths. -(Defaults to 1.) -.LP -.TP -\fBNumEntryGuards \fR\fINUM\fP -If UseEntryGuards is set to 1, we will try to pick a total of NUM routers -as long-term entries for our circuits. -(Defaults to 3.) -.LP -.TP -\fBSafeSocks \fR\fB0\fR|\fB1\fR\fP -When this option is enabled, Tor will reject application connections that -use unsafe variants of the socks protocol -- ones that only provide an -IP address, meaning the application is doing a DNS resolve first. -Specifically, these are socks4 and socks5 when not doing remote DNS. -(Defaults to 0.) -.LP -.TP -\fBTestSocks \fR\fB0\fR|\fB1\fR\fP -When this option is enabled, Tor will make a notice-level log entry for -each connection to the Socks port indicating whether the request used -a safe socks protocol or an unsafe one (see above entry on SafeSocks). -This helps to determine whether an application using Tor is possibly -leaking DNS requests. -(Default: 0) -.LP -.TP -\fBVirtualAddrNetwork \fR\fIAddress\fB/\fIbits\fP -When a controller asks for a virtual (unused) address with the -MAPADDRESS command, Tor picks an unassigned address from this range. -(Default: 127.192.0.0/10) - -When providing proxy server service to a network of computers using a tool like -dns-proxy-tor, -change this address to "10.192.0.0/10" or "172.16.0.0/12". -The default \fBVirtualAddrNetwork\fP address range on a -properly configured machine will route to the loopback interface. -For local use, no change to the -default \fBVirtualAddrNetwork\fP setting is needed. -.LP -.TP -\fBAllowNonRFC953Hostnames \fR\fB0\fR|\fB1\fR\fP -When this option is disabled, Tor blocks hostnames containing illegal -characters (like @ and :) rather than sending them to an exit node to be -resolved. This helps trap accidental attempts to resolve URLs and so on. -(Default: 0) -.LP -.TP -\fBFastFirstHopPK \fR\fB0\fR|\fB1\fR\fP -When this option is disabled, Tor uses the public key step for the first -hop of creating circuits. Skipping it is generally safe since we have -already used TLS to authenticate the relay and to establish forward-secure -keys. Turning this option off makes circuit building slower. - -Note that Tor will always use the public key step for the first hop if -it's operating as a relay, and it will never use the public key step if -it doesn't yet know the onion key of the first hop. -(Default: 1) -.LP -.TP -\fBTransPort\fP \fR\fIPORT\fP -If non-zero, enables transparent proxy support on \fR\fIPORT\fP (by -convention, 9040). -.\" This is required to enable support for \fBdns-proxy-tor\fP. -.\" ControlPort must be set when using \fBTransPort\fP. -Requires OS support for transparent proxies, such as BSDs' pf or -Linux's IPTables. -If you're planning -to use Tor as a transparent proxy for a network, you'll want to examine -and change VirtualAddrNetwork from the default setting. You'll also want -to set the TransListenAddress option for the network you'd like to proxy. -(Default: 0). -.LP -.TP -\fBTransListenAddress\fP \fR\fIIP\fR[:\fIPORT\fR]\fP -Bind to this address to listen for transparent proxy connections. -(Default: 127.0.0.1). -This is useful for exporting a transparent proxy server -to an entire network. -.LP -.TP -\fBNATDPort\fP \fR\fIPORT\fP -Allow old versions of ipfw (as included in old versions of FreeBSD, -etc.) to send connections through Tor using the NATD protocol. -This option is only for people who cannot -use TransPort. -.LP -.TP -\fBNATDListenAddress\fP \fR\fIIP\fR[:\fIPORT\fR]\fP -Bind to this address to listen for NATD connections. -(Default: 127.0.0.1). -.LP -.TP -\fBAutomapHostsOnResolve\fP \fR\fB0\fR|\fB1\fR\fP -When this option is enabled, and we get a request to resolve an -address that ends with one of the suffixes in -\fBAutomapHostsSuffixes\fP, we map an unused virtual address to that -address, and return the new virtual address. This is handy for making -".onion" addresses work with applications that resolve an address and -then connect to it. -(Default: 0). -.LP -.TP -\fBAutomapHostsSuffixes\fP \fR\fISUFFIX\fR,\fISUFFIX\fR,...\fP -A comma-separated list of suffixes to use with \fBAutomapHostsOnResolve\fP. -The "." suffix is equivalent to "all addresses." -(Default: .exit,.onion). -.LP -.TP -\fBDNSPort\fP \fR\fIPORT\fP -If non-zero, Tor listens for UDP DNS requests on this port and resolves them -anonymously. -(Default: 0). -.LP -.TP -\fBDNSListenAddress\fP \fR\fIIP\fR[:\fIPORT\fR]\fP -Bind to this address to listen for DNS connections. -(Default: 127.0.0.1). -.LP -.TP -\fBClientDNSRejectInternalAddresses\fP \fR\fB0\fR|\fB1\fR\fP -If true, Tor does not believe any anonymously retrieved DNS answer that tells -it that an address resolves to an internal address (like 127.0.0.1 or -192.168.0.1). This option prevents certain browser-based attacks; don't turn -it off unless you know what you're doing. (Default: 1). -.LP -.TP -\fBDownloadExtraInfo\fP \fR\fB0\fR|\fB1\fR\fP -If true, Tor downloads and caches "extra-info" documents. These -documents contain information about servers other than the information -in their regular router descriptors. Tor does not use this information for -anything itself; to save bandwidth, leave this option turned off. -(Default: 0). -.LP -.TP -\fBFallbackNetworkstatusFile\fP \fIFILENAME\fP -If Tor doesn't have a cached networkstatus file, it starts out using -this one instead. Even if this file is out of date, Tor can still use -it to learn about directory mirrors, so it doesn't need to put load on -the authorities. (Default: None). -.LP -.TP -\fBWarnPlaintextPorts\fP \fR\fIport\fR,\fIport\fR,\fI...\fP -Tells Tor to issue a warnings whenever the user tries to make an -anonymous connection to one of these ports. This option is designed -to alert users to services that risk sending passwords in the clear. -(Default: 23,109,110,143). -.LP -.TP -\fBRejectPlaintextPorts\fP \fR\fIport\fR,\fIport\fR,\fI...\fP -Like WarnPlaintextPorts, but instead of warning about risky port uses, -Tor will instead refuse to make the connection. -(Default: None). - -.SH SERVER OPTIONS -.PP -The following options are useful only for servers (that is, if \fBORPort\fP is non-zero): -.LP -.TP -\fBAddress \fR\fIaddress\fP -The IP address or fully qualified domain name of this server (e.g. moria.mit.edu). You can -leave this unset, and Tor will guess your IP address. -.LP -.TP -\fBAllowSingleHopExits \fR\fB0\fR|\fB1\fR\fP -This option controls whether clients can use this server as a single hop -proxy. If set to 1, clients can use this server as an exit even if it is -the only hop in the circuit. (Default: 0) -.LP -.TP -\fBAssumeReachable \fR\fB0\fR|\fB1\fR\fP -This option is used when bootstrapping a new Tor network. If set to 1, -don't do self-reachability testing; just upload your server descriptor -immediately. If \fBAuthoritativeDirectory\fP is also set, this option -instructs the dirserver to bypass remote reachability testing too and -list all connected servers as running. -.LP -.TP -\fBBridgeRelay \fR\fB0\fR|\fB1\fR\fP -Sets the relay to act as a "bridge" with respect to relaying connections -from bridge users to the Tor network. Mainly it influences how the relay -will cache and serve directory information. Usually used in combination -with PublishServerDescriptor. -.LP -.TP -\fBContactInfo \fR\fIemail_address\fP -Administrative contact information for server. This line might get -picked up by spam harvesters, so you may want to obscure the fact -that it's an email address. -.LP -.TP -\fBExitPolicy \fR\fIpolicy\fR,\fIpolicy\fR,\fI...\fP -Set an exit policy for this server. Each policy is of the form -"\fBaccept\fP|\fBreject\fP \fIADDR\fP[\fB/\fP\fIMASK\fP]\fB[:\fP\fIPORT\fP]". -If \fB/\fP\fIMASK\fP is omitted then this policy just applies to the host -given. Instead of giving a host or network you can also use "\fB*\fP" to -denote the universe (0.0.0.0/0). \fIPORT\fP can be a single port number, -an interval of ports "\fIFROM_PORT\fP\fB-\fP\fITO_PORT\fP", or "\fB*\fP". -If \fIPORT\fP is omitted, that means "\fB*\fP". - -For example, "accept 18.7.22.69:*,reject 18.0.0.0/8:*,accept *:*" would -reject any traffic destined for MIT except for web.mit.edu, and -accept anything else. - -To specify all internal and link-local networks (including 0.0.0.0/8, -169.254.0.0/16, 127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8, and -172.16.0.0/12), you can use the "private" alias instead of an address. -These addresses are rejected by default (at the beginning of your -exit policy), along with your public IP address, unless you set the -ExitPolicyRejectPrivate config option -to 0. For example, once you've done that, you could allow HTTP to -127.0.0.1 and block all other connections to internal networks with -"accept 127.0.0.1:80,reject private:*", though that may also allow -connections to your own computer that are addressed to its public -(external) IP address. See RFC 1918 and RFC 3330 for more -details about internal and reserved IP address space. - -This directive can be specified multiple times so you don't have to put -it all on one line. - -Policies are considered first to last, and the first match wins. If -you want to _replace_ the default exit policy, end your exit policy with -either a reject *:* or an accept *:*. Otherwise, you're _augmenting_ -(prepending to) the default exit policy. The default exit policy is: -.PD 0 -.RS 12 -.IP "reject *:25" -.IP "reject *:119" -.IP "reject *:135-139" -.IP "reject *:445" -.IP "reject *:563" -.IP "reject *:1214" -.IP "reject *:4661-4666" -.IP "reject *:6346-6429" -.IP "reject *:6699" -.IP "reject *:6881-6999" -.IP "accept *:*" -.RE -.PD -.LP -.TP -\fBExitPolicyRejectPrivate \fR\fB0\fR|\fB1\fR\fP -Reject all private (local) networks, along with your own public IP -address, at the beginning of your exit -policy. See above entry on ExitPolicy. (Default: 1) -.LP -.TP -\fBMaxOnionsPending \fR\fINUM\fP -If you have more than this number of onionskins queued for decrypt, reject new ones. (Default: 100) -.LP -.TP -\fBMyFamily \fR\fInode\fR,\fInode\fR,\fI...\fP -Declare that this Tor server is controlled or administered by a group -or organization identical or similar to that of the other servers, defined by their identity fingerprints or nicknames. -When two servers both declare that they are in the same 'family', Tor clients -will not use them in the same circuit. (Each server only needs to list the -other servers in its family; it doesn't need to list itself, but it won't hurt.) -.LP -.TP -\fBNickname \fR\fIname\fP -Set the server's nickname to 'name'. Nicknames must be between 1 -and 19 characters inclusive, and must contain only the characters -[a-zA-Z0-9]. -.LP -.TP -\fBNumCPUs \fR\fInum\fP -How many processes to use at once for decrypting onionskins. (Default: 1) -.LP -.TP -\fBORPort \fR\fIPORT\fP -Advertise this port to listen for connections from Tor clients and servers. -.LP -.TP -\fBORListenAddress \fR\fIIP\fR[:\fIPORT\fR]\fP -Bind to this IP address to listen for connections from Tor clients and -servers. If you specify a port, bind to this port rather than the one -specified in ORPort. (Default: 0.0.0.0) -This directive can be specified multiple times to bind to multiple -addresses/ports. -.LP -.TP -\fBPublishServerDescriptor \fR\fB0\fR|\fB1\fR|\fBv1\fR|\fBv2\fR|\fBv3\fR|\fBbridge\fR, ...\fP -This option is only considered if you have an ORPort defined. You can -choose multiple arguments, separated by commas. - -If set to 0, Tor will act as a server but it will not publish its -descriptor to the directory authorities. (This is useful if you're -testing out your server, or if you're using a Tor controller that handles -directory publishing for you.) Otherwise, Tor will publish its descriptor -to all directory authorities of the type(s) specified. The value "1" is -the default, which means "publish to the appropriate authorities". -.LP -.TP -\fBShutdownWaitLength\fR \fINUM\fP -When we get a SIGINT and we're a server, we begin shutting down: we close -listeners and start refusing new circuits. After \fBNUM\fP seconds, -we exit. If we get a second SIGINT, we exit immediately. (Default: -30 seconds) -.LP -.TP -\fBAccountingMax \fR\fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fP -Never send more than the specified number of bytes in a given -accounting period, or receive more than that number in the period. -For example, with AccountingMax set to 1 GB, a server could send 900 MB -and receive 800 MB and continue running. It will only hibernate once one -of the two reaches 1 GB. -When the number of bytes is exhausted, Tor will hibernate until some -time in the next accounting period. To prevent all servers from -waking at the same time, Tor will also wait until a random point in -each period before waking up. If you have bandwidth cost issues, -enabling hibernation is preferable to setting a low bandwidth, since it -provides users with a collection of fast servers that are up some of -the time, which is more useful than a set of slow servers that are -always "available". -.LP -.TP -\fBAccountingStart \fR\fBday\fR|\fBweek\fR|\fBmonth\fR [\fIday\fR] \fIHH:MM\fR\fP -Specify how long accounting periods last. If \fBmonth\fP is given, -each accounting period runs from the time \fIHH:MM\fR on the -\fIday\fRth day of one month to the same day and time of the next. -(The day must be between 1 and 28.) If \fBweek\fP is given, each -accounting period runs from the time \fIHH:MM\fR of the \fIday\fRth -day of one week to the same day and time of the next week, with Monday -as day 1 and Sunday as day 7. If \fBday\fR is given, each accounting -period runs from the time \fIHH:MM\fR each day to the same time on the -next day. All times are local, and given in 24-hour time. (Defaults to -"month 1 0:00".) -.LP -.TP -\fBServerDNSResolvConfFile \fR\fIfilename\fP -Overrides the default DNS configuration with the configuration in -\fIfilename\fP. The file format is the same as the standard Unix -"\fBresolv.conf\fP" file (7). This option, like all other -ServerDNS options, only affects name lookups that your server does on -behalf of clients. (Defaults to use the system DNS configuration.) -.LP -.TP -\fBServerDNSAllowBrokenConfig \fR\fB0\fR|\fB1\fR\fP -If this option is false, Tor exits immediately if there are problems -parsing the system DNS configuration or connecting to nameservers. -Otherwise, Tor continues to periodically retry the system nameservers -until it eventually succeeds. -(Defaults to "1".) -.LP -.TP -\fBServerDNSSearchDomains \fR\fB0\fR|\fB1\fR\fP -If set to \fB1\fP, then we will search for addresses in the local search -domain. For example, if this system is configured to believe it is in -"example.com", and a client tries to connect to "www", the client will be -connected to "www.example.com". -This option only affects name lookups that your server does on -behalf of clients. -(Defaults to "0".) -.LP -.TP -\fBServerDNSDetectHijacking \fR\fB0\fR|\fB1\fR\fP -When this option is set to 1, we will test periodically to determine whether -our local nameservers have been configured to hijack failing DNS requests -(usually to an advertising site). If they are, we will attempt to correct -this. -This option only affects name lookups that your server does on -behalf of clients. -(Defaults to "1".) -.LP -.TP -\fBServerDNSTestAddresses \fR\fIaddress\fR,\fIaddress\fR,\fI...\fP -When we're detecting DNS hijacking, make sure that these \fIvalid\fP -addresses aren't getting redirected. If they are, then our DNS is -completely useless, and we'll reset our exit policy to "reject *:*". -This option only affects name lookups that your server does on -behalf of clients. -(Defaults to "www.google.com, www.mit.edu, www.yahoo.com, -www.slashdot.org".) -.LP -.TP -\fBServerDNSAllowNonRFC953Hostnames \fR\fB0\fR|\fB1\fR\fP -When this option is disabled, Tor does not try to resolve hostnames -containing illegal characters (like @ and :) rather than sending them to an -exit node to be resolved. This helps trap accidental attempts to resolve -URLs and so on. -This option only affects name lookups that your server does on -behalf of clients. -(Default: 0) -.LP -.TP -\fBBridgeRecordUsageByCountry \fR\fB0\fR|\fB1\fR\fP -When this option is enabled and BridgeRelay is also enabled, and we -have GeoIP data, Tor keeps a keep a per-country count of how many -client addresses have contacted it so that it can help the bridge -authority guess which countries have blocked access to it. (Default: 1) -.LP -.TP -\fBServerDNSRandomizeCase \fR\fB0\fR|\fB1\fR\fP -When this option is set, Tor sets the case of each character randomly in -outgoing DNS requests, and makes sure that the case matches in DNS replies. -This so-called "0x20 hack" helps resist some types of DNS poisoning attack. -For more information, see "Increased DNS Forgery Resistance through 0x20-Bit -Encoding". -This option only affects name lookups that your server does on -behalf of clients. -(Default: 1) -.LP -.TP -\fBGeoIPFile \fR\fIfilename\fP -A filename containing GeoIP data, for use with BridgeRecordUsageByCountry. - -.SH DIRECTORY SERVER OPTIONS -.PP -The following options are useful only for directory servers (that is, if \fBDirPort\fP is non-zero): -.LP -.TP -\fBAuthoritativeDirectory \fR\fB0\fR|\fB1\fR\fP -When this option is set to 1, Tor operates as an authoritative -directory server. Instead of caching the directory, it generates its -own list of good servers, signs it, and sends that to the clients. -Unless the clients already have you listed as a trusted directory, you -probably do not want to set this option. Please coordinate with the other -admins at tor-ops@freehaven.net if you think you should be a directory. -.LP -.TP -\fBDirPortFrontPage \fIFILENAME\fP -When this option is set, it takes an HTML file and publishes it as "/" on -the DirPort. Now relay operators can provide a disclaimer without needing -to set up a separate webserver. There's a sample disclaimer in -contrib/tor-exit-notice.html. -.LP -.TP -\fBV1AuthoritativeDirectory \fR\fB0\fR|\fB1\fR\fP -When this option is set in addition to \fBAuthoritativeDirectory\fP, Tor -generates version 1 directory and running-routers documents (for legacy -Tor clients up to 0.1.0.x). -.LP -.TP -\fBV2AuthoritativeDirectory \fR\fB0\fR|\fB1\fR\fP -When this option is set in addition to \fBAuthoritativeDirectory\fP, Tor -generates version 2 network statuses and serves descriptors, etc as -described in doc/spec/dir-spec-v2.txt (for Tor clients and servers -running 0.1.1.x and 0.1.2.x). -.LP -.TP -\fBV3AuthoritativeDirectory \fR\fB0\fR|\fB1\fR\fP -When this option is set in addition to \fBAuthoritativeDirectory\fP, Tor -generates version 3 network statuses and serves descriptors, etc as -described in doc/spec/dir-spec.txt (for Tor clients and servers -running at least 0.2.0.x). -.LP -.TP -\fBVersioningAuthoritativeDirectory \fR\fB0\fR|\fB1\fR\fP -When this option is set to 1, Tor adds information on -which versions of Tor are still believed safe for use to -the published directory. Each version 1 authority is -automatically a versioning authority; version 2 authorities -provide this service optionally. See \fBRecommendedVersions\fP, -\fBRecommendedClientVersions\fP, and \fBRecommendedServerVersions\fP. -.LP -.TP -\fBNamingAuthoritativeDirectory \fR\fB0\fR|\fB1\fR\fP -When this option is set to 1, then the server advertises that it has -opinions about nickname-to-fingerprint bindings. It will include these -opinions in its published network-status pages, by listing servers with -the flag "Named" if a correct binding between that nickname and -fingerprint has been registered with the dirserver. Naming dirservers -will refuse to accept or publish descriptors that contradict a -registered binding. See \fBapproved-routers\fP in the \fBFILES\fP -section below. -.LP -.TP -\fBHSAuthoritativeDir \fR\fB0\fR|\fB1\fR\fP -When this option is set in addition to \fBAuthoritativeDirectory\fP, Tor also -accepts and serves hidden service descriptors. (Default: 0) -.LP -.TP -\fBHSAuthorityRecordStats \fR\fB0\fR|\fB1\fR\fP -When this option is set in addition to \fBHSAuthoritativeDir\fP, Tor -periodically (every 15 minutes) writes statistics about hidden service -usage to a file \fBhsusage\fP in its data directory. (Default: 0) -.LP -.TP -\fBHidServDirectoryV2 \fR\fB0\fR|\fB1\fR\fP -When this option is set, Tor accepts and serves v2 hidden service -descriptors. Setting DirPort is not required for this, because clients -connect via the ORPort by default. (Default: 1) -.LP -.TP -\fBBridgeAuthoritativeDir \fR\fB0\fR|\fB1\fR\fP -When this option is set in addition to \fBAuthoritativeDirectory\fP, Tor -accepts and serves router descriptors, but it caches and serves the main -networkstatus documents rather than generating its own. (Default: 0) -.LP -.TP -\fBMinUptimeHidServDirectoryV2 \fR\fIN\fR \fBseconds\fR|\fBminutes\fR|\fBhours\fR|\fBdays\fR|\fBweeks\fP -Minimum uptime of a v2 hidden service directory to be accepted as such by -authoritative directories. (Default: 24 hours) -.LP -.TP -\fBDirPort \fR\fIPORT\fP -Advertise the directory service on this port. -.LP -.TP -\fBDirListenAddress \fR\fIIP\fR[:\fIPORT\fR]\fP -Bind the directory service to this address. If you specify a port, bind -to this port rather than the one specified in DirPort. (Default: 0.0.0.0) -This directive can be specified multiple times to bind to multiple -addresses/ports. -.LP -.TP -\fBDirPolicy \fR\fIpolicy\fR,\fIpolicy\fR,\fI...\fP -Set an entrance policy for this server, to limit who can connect to the -directory ports. -The policies have the same form as exit policies above. - -.SH DIRECTORY AUTHORITY SERVER OPTIONS -.PP -.LP -.TP -\fBRecommendedVersions \fR\fISTRING\fP -STRING is a comma-separated list of Tor versions currently believed -to be safe. The list is included in each directory, and nodes which -pull down the directory learn whether they need to upgrade. This -option can appear multiple times: the values from multiple lines are -spliced together. -When this is set then -\fBVersioningAuthoritativeDirectory\fP should be set too. -.LP -.TP -\fBRecommendedClientVersions \fR\fISTRING\fP -STRING is a comma-separated list of Tor versions currently believed -to be safe for clients to use. This information is included in version 2 -directories. If this is not set then the value of \fBRecommendedVersions\fR -is used. -When this is set then -\fBVersioningAuthoritativeDirectory\fP should be set too. -.LP -.TP -\fBRecommendedServerVersions \fR\fISTRING\fP -STRING is a comma-separated list of Tor versions currently believed -to be safe for servers to use. This information is included in version 2 -directories. If this is not set then the value of \fBRecommendedVersions\fR -is used. -When this is set then -\fBVersioningAuthoritativeDirectory\fP should be set too. -.LP -.TP -\fBDirAllowPrivateAddresses \fR\fB0\fR|\fB1\fR\fP -If set to 1, Tor will accept router descriptors with arbitrary "Address" -elements. Otherwise, if the address is not an IP address or is a private -IP address, it will reject the router descriptor. Defaults to 0. -.LP -.TP -\fBAuthDirBadDir \fR\fIAddressPattern\fR...\fP -Authoritative directories only. A set of address patterns for servers that -will be listed as bad directories in any network status document this authority -publishes, if \fBAuthDirListBadDirs\fR is set. -.LP -.TP -\fBAuthDirBadExit \fR\fIAddressPattern\fR...\fP -Authoritative directories only. A set of address patterns for servers that -will be listed as bad exits in any network status document this authority -publishes, if \fBAuthDirListBadExits\fR is set. -.LP -.TP -\fBAuthDirInvalid \fR\fIAddressPattern\fR...\fP -Authoritative directories only. A set of address patterns for servers that -will never be listed as "valid" in any network status document that this -authority publishes. -.LP -.TP -\fBAuthDirReject \fR\fIAddressPattern\fR...\fP -Authoritative directories only. A set of address patterns for servers that -will never be listed at all in any network status document that this -authority publishes, or accepted as an OR address in any descriptor submitted -for publication by this authority. -.LP -.TP -\fBAuthDirListBadDirs \fR\fB0\fR|\fB1\fR\fP -Authoritative directories only. If set to 1, this directory has -some opinion about which nodes are unsuitable as directory caches. (Do not -set this to 1 unless you plan to list non-functioning directories as bad; -otherwise, you are effectively voting in favor of every declared directory.) -.LP -.TP -\fBAuthDirListBadExits \fR\fB0\fR|\fB1\fR\fP -Authoritative directories only. If set to 1, this directory has -some opinion about which nodes are unsuitable as exit nodes. (Do not -set this to 1 unless you plan to list non-functioning exits as bad; -otherwise, you are effectively voting in favor of every declared exit -as an exit.) -.LP -.TP -\fBAuthDirRejectUnlisted \fR\fB0\fR|\fB1\fR\fP -Authoritative directories only. If set to 1, the directory server -rejects all uploaded server descriptors that aren't explicitly listed -in the fingerprints file. This acts as a "panic button" if we get -hit with a Sybil attack. (Default: 0) -.LP -.TP -\fBAuthDirMaxServersPerAddr\fR \fINUM\fP -Authoritative directories only. The maximum number of servers that we -will list as acceptable on a single IP address. Set this to "0" for -"no limit". (Default: 2) -.LP -.TP -\fBAuthDirMaxServersPerAuthAddr\fR \fINUM\fP -Authoritative directories only. Like AuthDirMaxServersPerAddr, but -applies to addresses shared with directory authorities. (Default: 5) -.LP -.TP -\fBV3AuthVotingInterval\fR \fR\fIN\fR \fBminutes\fR|\fBhours\fP -V3 authoritative directories only. Configures the server's preferred -voting interval. Note that voting will \fIactually\fP happen at an -interval chosen by consensus from all the authorities' preferred -intervals. This time SHOULD divide evenly into a day. (Default: 1 hour) -.LP -.TP -\fBV3AuthVoteDelay\fR \fR\fIN\fR \fBminutes\fR|\fBhours\fP -V3 authoritative directories only. Configures the server's preferred -delay between publishing its vote and assuming it has all the votes -from all the other authorities. Note that the actual time used is not -the server's preferred time, but the consensus of all preferences. -(Default: 5 minutes.) -.LP -.TP -\fBV3AuthDistDelay\fR \fR\fIN\fR \fBminutes\fR|\fBhours\fP -V3 authoritative directories only. Configures the server's preferred -delay between publishing its consensus and signature and assuming it -has all the signatures from all the other authorities. Note that the -actual time used is not the server's preferred time, but the consensus -of all preferences. (Default: 5 minutes.) -.LP -.TP -\fBV3AuthNIntervalsValid\fR \fINUM\fP -V3 authoritative directories only. Configures the number of -VotingIntervals for which each consensus should be valid for. -Choosing high numbers increases network partitioning risks; choosing -low numbers increases directory traffic. Note that the actual number -of intervals used is not the server's preferred number, but the -consensus of all preferences. Must be at least 2. (Default: 3.) - - -.SH HIDDEN SERVICE OPTIONS -.PP -The following options are used to configure a hidden service. -.LP -.TP -\fBHiddenServiceDir \fR\fIDIRECTORY\fP -Store data files for a hidden service in DIRECTORY. Every hidden -service must have a separate directory. You may use this option multiple -times to specify multiple services. -.LP -.TP -\fBHiddenServicePort \fR\fIVIRTPORT \fR[\fITARGET\fR]\fP -Configure a virtual port VIRTPORT for a hidden service. You may use this -option multiple times; each time applies to the service using the most recent -hiddenservicedir. By default, this option maps the virtual port to the -same port on 127.0.0.1. You may override the target port, address, or both -by specifying a target of addr, port, or addr:port. You may also have -multiple lines with the same VIRTPORT: when a user connects to that VIRTPORT, -one of the TARGETs from those lines will be chosen at random. -.LP -.TP -\fBPublishHidServDescriptors \fR\fB0\fR|\fB1\fR\fP -If set to 0, Tor will run any hidden services you configure, but it won't -advertise them to the rendezvous directory. This option is only useful -if you're using a Tor controller that handles hidserv publishing for you. -(Default: 1) -.LP -.TP -\fBHiddenServiceVersion \fR\fIversion\fR,\fIversion\fR,\fI...\fP -A list of rendezvous service descriptor versions to publish for the hidden -service. Possible version numbers are 0 and 2. (Default: 0, 2) -.LP -.TP -\fBHiddenServiceAuthorizeClient \fR\fIauth-type\fR \fR\fIclient-name\fR,\fIclient-name\fR,\fI...\fP -If configured, the hidden service is accessible for authorized clients -only. The auth-type can either be 'basic' for a general-purpose -authorization protocol or 'stealth' for a less scalable protocol that also -hides service activity from unauthorized clients. Only clients that are -listed here are authorized to access the hidden service. Valid client names -are 1 to 19 characters long and only use characters in A-Za-z0-9+-_ -(no spaces). If this option is set, the hidden service is not accessible -for clients without authorization any more. Generated authorization data -can be found in the hostname file. Clients need to put this authorization -data in their configuration file using \fBHidServAuth\fR. -.LP -.TP -\fBRendPostPeriod \fR\fIN\fR \fBseconds\fR|\fBminutes\fR|\fBhours\fR|\fBdays\fR|\fBweeks\fP -Every time the specified period elapses, Tor uploads any rendezvous -service descriptors to the directory servers. This information is also -uploaded whenever it changes. (Default: 20 minutes) - -.SH TESTING NETWORK OPTIONS -.PP -The following options are used for running a testing Tor network. -.LP -.TP -\fBTestingTorNetwork \fR\fB0\fR|\fB1\fR\fP -If set to 1, Tor adjusts default values of the configuration options below, -so that it is easier to set up a testing Tor network. May only be set if -non-default set of DirServers is set. Cannot be unset while Tor is running. -(Default: 0) - -.PD 0 -.RS 12 -.IP "ServerDNSAllowBrokenConfig 1" -.IP "DirAllowPrivateAddresses 1" -.IP "EnforceDistinctSubnets 0" -.IP "AssumeReachable 1" -.IP "AuthDirMaxServersPerAddr 0" -.IP "AuthDirMaxServersPerAuthAddr 0" -.IP "ClientDNSRejectInternalAddresses 0" -.IP "ExitPolicyRejectPrivate 0" -.IP "V3AuthVotingInterval 5 minutes" -.IP "V3AuthVoteDelay 20 seconds" -.IP "V3AuthDistDelay 20 seconds" -.IP "TestingV3AuthInitialVotingInterval 5 minutes" -.IP "TestingV3AuthInitialVoteDelay 20 seconds" -.IP "TestingV3AuthInitialDistDelay 20 seconds" -.IP "TestingAuthDirTimeToLearnReachability 0 minutes" -.IP "TestingEstimatedDescriptorPropagationTime 0 minutes" -.RE -.PD -.LP -.TP -\fBTestingV3AuthInitialVotingInterval\fR \fR\fIN\fR \fBminutes\fR|\fBhours\fP -Like \fBV3AuthVotingInterval\fR, but for initial voting interval before the -first consensus has been created. Changing this requires that -\fBTestingTorNetwork\fR is set. (Default: 30 minutes) -.LP -.TP -\fBTestingV3AuthInitialVoteDelay\fR \fR\fIN\fR \fBminutes\fR|\fBhours\fP -Like \fBTestingV3AuthInitialVoteDelay\fR, but for initial voting interval -before the first consensus has been created. Changing this requires that -\fBTestingTorNetwork\fR is set. (Default: 5 minutes) -.LP -.TP -\fBTestingV3AuthInitialDistDelay\fR \fR\fIN\fR \fBminutes\fR|\fBhours\fP -Like \fBTestingV3AuthInitialDistDelay\fR, but for initial voting interval -before the first consensus has been created. Changing this requires that -\fBTestingTorNetwork\fR is set. (Default: 5 minutes) -.LP -.TP -\fBTestingAuthDirTimeToLearnReachability\fR \fR\fIN\fR \fBminutes\fR|\fBhours\fP -After starting as an authority, do not make claims about whether routers are -Running until this much time has passed. -Changing this requires that\fBTestingTorNetwork\fR is set. -(Default: 30 minutes) -.LP -.TP -\fBTestingEstimatedDescriptorPropagationTime\fR \fR\fIN\fR \fBminutes\fR|\fBhours\fP -Clients try downloading router descriptors from directory caches after this -time. Changing this requires that \fBTestingTorNetwork\fR is set. -(Default: 10 minutes) +.RS 4 +When a request for address arrives to Tor, it will rewrite it to newaddress before processing it\&. For example, if you always want connections to www\&.indymedia\&.org to exit via +\fItorserver\fR +(where +\fItorserver\fR +is the nickname of the server), use "MapAddress www\&.indymedia\&.org www\&.indymedia\&.org\&.torserver\&.exit"\&. +.RE +.PP +\fBNewCircuitPeriod\fR \fINUM\fR +.RS 4 +Every NUM seconds consider whether to build a new circuit\&. (Default: 30 seconds) +.RE +.PP +\fBMaxCircuitDirtiness\fR \fINUM\fR +.RS 4 +Feel free to reuse a circuit that was first used at most NUM seconds ago, but never attach a new stream to a circuit that is too old\&. (Default: 10 minutes) +.RE +.PP +\fBNodeFamily\fR \fInode\fR,\fInode\fR,\fI\&...\fR +.RS 4 +The Tor servers, defined by their identity fingerprints or nicknames, constitute a "family" of similar or co\-administered servers, so never use any two of them in the same circuit\&. Defining a NodeFamily is only needed when a server doesn\(cqt list the family itself (with MyFamily)\&. This option can be used multiple times\&. +.RE +.PP +\fBEnforceDistinctSubnets\fR \fB0\fR|\fB1\fR +.RS 4 +If 1, Tor will not put two servers whose IP addresses are "too close" on the same circuit\&. Currently, two addresses are "too close" if they lie in the same /16 range\&. (Default: 1) +.RE +.PP +\fBSocksPort\fR \fIPORT\fR|\fBauto\fR +.RS 4 +Advertise this port to listen for connections from Socks\-speaking applications\&. Set this to 0 if you don\(cqt want to allow application connections via SOCKS\&. Set it to "auto" to have Tor pick a port for you\&. (Default: 9050) +.RE +.PP +\fBSocksListenAddress\fR \fIIP\fR[:\fIPORT\fR] +.RS 4 +Bind to this address to listen for connections from Socks\-speaking applications\&. (Default: 127\&.0\&.0\&.1) You can also specify a port (e\&.g\&. 192\&.168\&.0\&.1:9100)\&. This directive can be specified multiple times to bind to multiple addresses/ports\&. +.RE +.PP +\fBSocksPolicy\fR \fIpolicy\fR,\fIpolicy\fR,\fI\&...\fR +.RS 4 +Set an entrance policy for this server, to limit who can connect to the SocksPort and DNSPort ports\&. The policies have the same form as exit policies below\&. +.RE +.PP +\fBSocksTimeout\fR \fINUM\fR +.RS 4 +Let a socks connection wait NUM seconds handshaking, and NUM seconds unattached waiting for an appropriate circuit, before we fail it\&. (Default: 2 minutes\&.) +.RE +.PP +\fBTrackHostExits\fR \fIhost\fR,\fI\&.domain\fR,\fI\&...\fR +.RS 4 +For each value in the comma separated list, Tor will track recent connections to hosts that match this value and attempt to reuse the same exit node for each\&. If the value is prepended with a \*(Aq\&.\*(Aq, it is treated as matching an entire domain\&. If one of the values is just a \*(Aq\&.\*(Aq, it means match everything\&. This option is useful if you frequently connect to sites that will expire all your authentication cookies (i\&.e\&. log you out) if your IP address changes\&. Note that this option does have the disadvantage of making it more clear that a given history is associated with a single user\&. However, most people who would wish to observe this will observe it through cookies or other protocol\-specific means anyhow\&. +.RE +.PP +\fBTrackHostExitsExpire\fR \fINUM\fR +.RS 4 +Since exit servers go up and down, it is desirable to expire the association between host and exit server after NUM seconds\&. The default is 1800 seconds (30 minutes)\&. +.RE +.PP +\fBUpdateBridgesFromAuthority\fR \fB0\fR|\fB1\fR +.RS 4 +When set (along with UseBridges), Tor will try to fetch bridge descriptors from the configured bridge authorities when feasible\&. It will fall back to a direct request if the authority responds with a 404\&. (Default: 0) +.RE +.PP +\fBUseBridges\fR \fB0\fR|\fB1\fR +.RS 4 +When set, Tor will fetch descriptors for each bridge listed in the "Bridge" config lines, and use these relays as both entry guards and directory guards\&. (Default: 0) +.RE +.PP +\fBUseEntryGuards\fR \fB0\fR|\fB1\fR +.RS 4 +If this option is set to 1, we pick a few long\-term entry servers, and try to stick with them\&. This is desirable because constantly changing servers increases the odds that an adversary who owns some servers will observe a fraction of your paths\&. (Defaults to 1\&.) +.RE +.PP +\fBNumEntryGuards\fR \fINUM\fR +.RS 4 +If UseEntryGuards is set to 1, we will try to pick a total of NUM routers as long\-term entries for our circuits\&. (Defaults to 3\&.) +.RE +.PP +\fBSafeSocks\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, Tor will reject application connections that use unsafe variants of the socks protocol \(em ones that only provide an IP address, meaning the application is doing a DNS resolve first\&. Specifically, these are socks4 and socks5 when not doing remote DNS\&. (Defaults to 0\&.) +.RE +.PP +\fBTestSocks\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, Tor will make a notice\-level log entry for each connection to the Socks port indicating whether the request used a safe socks protocol or an unsafe one (see above entry on SafeSocks)\&. This helps to determine whether an application using Tor is possibly leaking DNS requests\&. (Default: 0) +.RE +.PP +\fBWarnUnsafeSocks\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, Tor will warn whenever a request is received that only contains an IP address instead of a hostname\&. Allowing applications to do DNS resolves themselves is usually a bad idea and can leak your location to attackers\&. (Default: 1) +.RE +.PP +\fBVirtualAddrNetwork\fR \fIAddress\fR/\fIbits\fR +.RS 4 +When Tor needs to assign a virtual (unused) address because of a MAPADDRESS command from the controller or the AutomapHostsOnResolve feature, Tor picks an unassigned address from this range\&. (Default: 127\&.192\&.0\&.0/10) -.\" UNDOCUMENTED -.\" ignoreversion -.SH SIGNALS +When providing proxy server service to a network of computers using a tool like dns\-proxy\-tor, change this address to "10\&.192\&.0\&.0/10" or "172\&.16\&.0\&.0/12"\&. The default +\fBVirtualAddrNetwork\fR +address range on a properly configured machine will route to the loopback interface\&. For local use, no change to the default VirtualAddrNetwork setting is needed\&. +.RE +.PP +\fBAllowNonRFC953Hostnames\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is disabled, Tor blocks hostnames containing illegal characters (like @ and :) rather than sending them to an exit node to be resolved\&. This helps trap accidental attempts to resolve URLs and so on\&. (Default: 0) +.RE +.PP +\fBAllowDotExit\fR \fB0\fR|\fB1\fR +.RS 4 +If enabled, we convert "www\&.google\&.com\&.foo\&.exit" addresses on the SocksPort/TransPort/NATDPort into "www\&.google\&.com" addresses that exit from the node "foo"\&. Disabled by default since attacking websites and exit relays can use it to manipulate your path selection\&. (Default: 0) +.RE +.PP +\fBFastFirstHopPK\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is disabled, Tor uses the public key step for the first hop of creating circuits\&. Skipping it is generally safe since we have already used TLS to authenticate the relay and to establish forward\-secure keys\&. Turning this option off makes circuit building slower\&. + + +Note that Tor will always use the public key step for the first hop if it\(cqs operating as a relay, and it will never use the public key step if it doesn\(cqt yet know the onion key of the first hop\&. (Default: 1) +.RE +.PP +\fBTransPort\fR \fIPORT\fR|\fBauto\fR +.RS 4 +If non\-zero, enables transparent proxy support on +\fIPORT\fR +(by convention, 9040)\&. Requires OS support for transparent proxies, such as BSDs\*(Aq pf or Linux\(cqs IPTables\&. If you\(cqre planning to use Tor as a transparent proxy for a network, you\(cqll want to examine and change VirtualAddrNetwork from the default setting\&. You\(cqll also want to set the TransListenAddress option for the network you\(cqd like to proxy\&. Set it to "auto" to have Tor pick a port for you\&. (Default: 0)\&. +.RE +.PP +\fBTransListenAddress\fR \fIIP\fR[:\fIPORT\fR] +.RS 4 +Bind to this address to listen for transparent proxy connections\&. (Default: 127\&.0\&.0\&.1)\&. This is useful for exporting a transparent proxy server to an entire network\&. +.RE +.PP +\fBNATDPort\fR \fIPORT\fR|\fBauto\fR +.RS 4 +Allow old versions of ipfw (as included in old versions of FreeBSD, etc\&.) to send connections through Tor using the NATD protocol\&. This option is only for people who cannot use TransPort\&. Set it to "auto" to have Tor pick a port for you\&. (Default: 0) +.RE +.PP +\fBNATDListenAddress\fR \fIIP\fR[:\fIPORT\fR] +.RS 4 +Bind to this address to listen for NATD connections\&. (Default: 127\&.0\&.0\&.1)\&. +.RE +.PP +\fBAutomapHostsOnResolve\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, and we get a request to resolve an address that ends with one of the suffixes in +\fBAutomapHostsSuffixes\fR, we map an unused virtual address to that address, and return the new virtual address\&. This is handy for making "\&.onion" addresses work with applications that resolve an address and then connect to it\&. (Default: 0)\&. +.RE +.PP +\fBAutomapHostsSuffixes\fR \fISUFFIX\fR,\fISUFFIX\fR,\fI\&...\fR +.RS 4 +A comma\-separated list of suffixes to use with +\fBAutomapHostsOnResolve\fR\&. The "\&." suffix is equivalent to "all addresses\&." (Default: \&.exit,\&.onion)\&. +.RE +.PP +\fBDNSPort\fR \fIPORT\fR|\fBauto\fR +.RS 4 +If non\-zero, Tor listens for UDP DNS requests on this port and resolves them anonymously\&. Set it to "auto" to have Tor pick a port for you\&. (Default: 0)\&. +.RE +.PP +\fBDNSListenAddress\fR \fIIP\fR[:\fIPORT\fR] +.RS 4 +Bind to this address to listen for DNS connections\&. (Default: 127\&.0\&.0\&.1)\&. +.RE +.PP +\fBClientDNSRejectInternalAddresses\fR \fB0\fR|\fB1\fR +.RS 4 +If true, Tor does not believe any anonymously retrieved DNS answer that tells it that an address resolves to an internal address (like 127\&.0\&.0\&.1 or 192\&.168\&.0\&.1)\&. This option prevents certain browser\-based attacks; don\(cqt turn it off unless you know what you\(cqre doing\&. (Default: 1)\&. +.RE +.PP +\fBClientRejectInternalAddresses\fR \fB0\fR|\fB1\fR +.RS 4 +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) +\fIunless a exit node is specifically requested\fR +(for example, via a \&.exit hostname, or a controller request)\&. (Default: 1)\&. +.RE +.PP +\fBDownloadExtraInfo\fR \fB0\fR|\fB1\fR +.RS 4 +If true, Tor downloads and caches "extra\-info" documents\&. These documents contain information about servers other than the information in their regular router descriptors\&. Tor does not use this information for anything itself; to save bandwidth, leave this option turned off\&. (Default: 0)\&. +.RE +.PP +\fBFallbackNetworkstatusFile\fR \fIFILENAME\fR +.RS 4 +If Tor doesn\(cqt have a cached networkstatus file, it starts out using this one instead\&. Even if this file is out of date, Tor can still use it to learn about directory mirrors, so it doesn\(cqt need to put load on the authorities\&. (Default: None)\&. +.RE +.PP +\fBWarnPlaintextPorts\fR \fIport\fR,\fIport\fR,\fI\&...\fR +.RS 4 +Tells Tor to issue a warnings whenever the user tries to make an anonymous connection to one of these ports\&. This option is designed to alert users to services that risk sending passwords in the clear\&. (Default: 23,109,110,143)\&. +.RE +.PP +\fBRejectPlaintextPorts\fR \fIport\fR,\fIport\fR,\fI\&...\fR +.RS 4 +Like WarnPlaintextPorts, but instead of warning about risky port uses, Tor will instead refuse to make the connection\&. (Default: None)\&. +.RE +.PP +\fBAllowSingleHopCircuits\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set, the attached Tor controller can use relays that have the +\fBAllowSingleHopExits\fR +option turned on to build one\-hop Tor connections\&. (Default: 0) +.RE +.SH "SERVER OPTIONS" +.sp +The following options are useful only for servers (that is, if ORPort is non\-zero): +.PP +\fBAddress\fR \fIaddress\fR +.RS 4 +The IP address or fully qualified domain name of this server (e\&.g\&. moria\&.mit\&.edu)\&. You can leave this unset, and Tor will guess your IP address\&. This IP address is the one used to tell clients and other servers where to find your Tor server; it doesn\(cqt affect the IP that your Tor client binds to\&. To bind to a different address, use the *ListenAddress and OutboundBindAddress options\&. +.RE +.PP +\fBAllowSingleHopExits\fR \fB0\fR|\fB1\fR +.RS 4 +This option controls whether clients can use this server as a single hop proxy\&. If set to 1, clients can use this server as an exit even if it is the only hop in the circuit\&. Note that most clients will refuse to use servers that set this option, since most clients have ExcludeSingleHopRelays set\&. (Default: 0) +.RE +.PP +\fBAssumeReachable\fR \fB0\fR|\fB1\fR +.RS 4 +This option is used when bootstrapping a new Tor network\&. If set to 1, don\(cqt do self\-reachability testing; just upload your server descriptor immediately\&. If +\fBAuthoritativeDirectory\fR +is also set, this option instructs the dirserver to bypass remote reachability testing too and list all connected servers as running\&. +.RE +.PP +\fBBridgeRelay\fR \fB0\fR|\fB1\fR +.RS 4 +Sets the relay to act as a "bridge" with respect to relaying connections from bridge users to the Tor network\&. It mainly causes Tor to publish a server descriptor to the bridge database, rather than publishing a relay descriptor to the public directory authorities\&. +.RE +.PP +\fBContactInfo\fR \fIemail_address\fR +.RS 4 +Administrative contact information for server\&. This line might get picked up by spam harvesters, so you may want to obscure the fact that it\(cqs an email address\&. +.RE +.PP +\fBExitPolicy\fR \fIpolicy\fR,\fIpolicy\fR,\fI\&...\fR +.RS 4 +Set an exit policy for this server\&. Each policy is of the form "\fBaccept\fR|\fBreject\fR +\fIADDR\fR[/\fIMASK\fR][:\fIPORT\fR]"\&. If /\fIMASK\fR +is omitted then this policy just applies to the host given\&. Instead of giving a host or network you can also use "*" to denote the universe (0\&.0\&.0\&.0/0)\&. +\fIPORT\fR +can be a single port number, an interval of ports "\fIFROM_PORT\fR\-\fITO_PORT\fR", or "*"\&. If +\fIPORT\fR +is omitted, that means "*"\&. + + +For example, "accept 18\&.7\&.22\&.69:*,reject 18\&.0\&.0\&.0/8:*,accept *:*" would reject any traffic destined for MIT except for web\&.mit\&.edu, and accept anything else\&. + + +To specify all internal and link\-local networks (including 0\&.0\&.0\&.0/8, 169\&.254\&.0\&.0/16, 127\&.0\&.0\&.0/8, 192\&.168\&.0\&.0/16, 10\&.0\&.0\&.0/8, and 172\&.16\&.0\&.0/12), you can use the "private" alias instead of an address\&. These addresses are rejected by default (at the beginning of your exit policy), along with your public IP address, unless you set the ExitPolicyRejectPrivate config option to 0\&. For example, once you\(cqve done that, you could allow HTTP to 127\&.0\&.0\&.1 and block all other connections to internal networks with "accept 127\&.0\&.0\&.1:80,reject private:*", though that may also allow connections to your own computer that are addressed to its public (external) IP address\&. See RFC 1918 and RFC 3330 for more details about internal and reserved IP address space\&. + + +This directive can be specified multiple times so you don\(cqt have to put it all on one line\&. + + +Policies are considered first to last, and the first match wins\&. If you want to _replace_ the default exit policy, end your exit policy with either a reject *:* or an accept *:*\&. Otherwise, you\(cqre _augmenting_ (prepending to) the default exit policy\&. The default exit policy is: + +.sp +.if n \{\ +.RS 4 +.\} +.nf +reject *:25 +reject *:119 +reject *:135\-139 +reject *:445 +reject *:563 +reject *:1214 +reject *:4661\-4666 +reject *:6346\-6429 +reject *:6699 +reject *:6881\-6999 +accept *:* +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBExitPolicyRejectPrivate\fR \fB0\fR|\fB1\fR +.RS 4 +Reject all private (local) networks, along with your own public IP address, at the beginning of your exit policy\&. See above entry on ExitPolicy\&. (Default: 1) +.RE +.PP +\fBMaxOnionsPending\fR \fINUM\fR +.RS 4 +If you have more than this number of onionskins queued for decrypt, reject new ones\&. (Default: 100) +.RE +.PP +\fBMyFamily\fR \fInode\fR,\fInode\fR,\fI\&...\fR +.RS 4 +Declare that this Tor server is controlled or administered by a group or organization identical or similar to that of the other servers, defined by their identity fingerprints or nicknames\&. When two servers both declare that they are in the same \*(Aqfamily\*(Aq, Tor clients will not use them in the same circuit\&. (Each server only needs to list the other servers in its family; it doesn\(cqt need to list itself, but it won\(cqt hurt\&.) +.RE +.PP +\fBNickname\fR \fIname\fR +.RS 4 +Set the server\(cqs nickname to \*(Aqname\*(Aq\&. Nicknames must be between 1 and 19 characters inclusive, and must contain only the characters [a\-zA\-Z0\-9]\&. +.RE +.PP +\fBNumCPUs\fR \fInum\fR +.RS 4 +How many processes to use at once for decrypting onionskins\&. (Default: 1) +.RE +.PP +\fBORPort\fR \fIPORT\fR|\fBauto\fR +.RS 4 +Advertise this port to listen for connections from Tor clients and servers\&. This option is required to be a Tor server\&. Set it to "auto" to have Tor pick a port for you\&. (Default: 0)\&. +.RE +.PP +\fBORListenAddress\fR \fIIP\fR[:\fIPORT\fR] +.RS 4 +Bind to this IP address to listen for connections from Tor clients and servers\&. If you specify a port, bind to this port rather than the one specified in ORPort\&. (Default: 0\&.0\&.0\&.0) This directive can be specified multiple times to bind to multiple addresses/ports\&. +.RE +.PP +\fBPublishServerDescriptor\fR \fB0\fR|\fB1\fR|\fBv1\fR|\fBv2\fR|\fBv3\fR|\fBbridge\fR,\fB\&...\fR +.RS 4 +This option specifies which descriptors Tor will publish when acting as a relay\&. You can choose multiple arguments, separated by commas\&. + +If this option is set to 0, Tor will not publish its descriptors to any directories\&. (This is useful if you\(cqre testing out your server, or if you\(cqre using a Tor controller that handles directory publishing for you\&.) Otherwise, Tor will publish its descriptors of all type(s) specified\&. The default is "1", which means "if running as a server, publish the appropriate descriptors to the authorities"\&. +.RE +.PP +\fBShutdownWaitLength\fR \fINUM\fR +.RS 4 +When we get a SIGINT and we\(cqre a server, we begin shutting down: we close listeners and start refusing new circuits\&. After +\fBNUM\fR +seconds, we exit\&. If we get a second SIGINT, we exit immedi\- ately\&. (Default: 30 seconds) +.RE +.PP +\fBAccountingMax\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR|\fBTB\fR +.RS 4 +Never send more than the specified number of bytes in a given accounting period, or receive more than that number in the period\&. For example, with AccountingMax set to 1 GB, a server could send 900 MB and receive 800 MB and continue running\&. It will only hibernate once one of the two reaches 1 GB\&. When the number of bytes gets low, Tor will stop accepting new connections and circuits\&. When the number of bytes is exhausted, Tor will hibernate until some time in the next accounting period\&. To prevent all servers from waking at the same time, Tor will also wait until a random point in each period before waking up\&. If you have bandwidth cost issues, enabling hibernation is preferable to setting a low bandwidth, since it provides users with a collection of fast servers that are up some of the time, which is more useful than a set of slow servers that are always "available"\&. +.RE +.PP +\fBAccountingStart\fR \fBday\fR|\fBweek\fR|\fBmonth\fR [\fIday\fR] \fIHH:MM\fR +.RS 4 +Specify how long accounting periods last\&. If +\fBmonth\fR +is given, each accounting period runs from the time +\fIHH:MM\fR +on the +\fIdayth\fR +day of one month to the same day and time of the next\&. (The day must be between 1 and 28\&.) If +\fBweek\fR +is given, each accounting period runs from the time +\fIHH:MM\fR +of the +\fIdayth\fR +day of one week to the same day and time of the next week, with Monday as day 1 and Sunday as day 7\&. If +\fBday\fR +is given, each accounting period runs from the time +\fIHH:MM\fR +each day to the same time on the next day\&. All times are local, and given in 24\-hour time\&. (Defaults to "month 1 0:00"\&.) +.RE +.PP +\fBRefuseUnknownExits\fR \fB0\fR|\fB1\fR|\fBauto\fR +.RS 4 +Prevent nodes that don\(cqt appear in the consensus from exiting using this relay\&. If the option is 1, we always block exit attempts from such nodes; if it\(cqs 0, we never do, and if the option is "auto", then we do whatever the authorities suggest in the consensus\&. (Defaults to auto\&.) +.RE +.PP +\fBServerDNSResolvConfFile\fR \fIfilename\fR +.RS 4 +Overrides the default DNS configuration with the configuration in +\fIfilename\fR\&. The file format is the same as the standard Unix "\fBresolv\&.conf\fR" file (7)\&. This option, like all other ServerDNS options, only affects name lookups that your server does on behalf of clients\&. (Defaults to use the system DNS configuration\&.) +.RE +.PP +\fBServerDNSAllowBrokenConfig\fR \fB0\fR|\fB1\fR +.RS 4 +If this option is false, Tor exits immediately if there are problems parsing the system DNS configuration or connecting to nameservers\&. Otherwise, Tor continues to periodically retry the system nameservers until it eventually succeeds\&. (Defaults to "1"\&.) +.RE +.PP +\fBServerDNSSearchDomains\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 1, then we will search for addresses in the local search domain\&. For example, if this system is configured to believe it is in "example\&.com", and a client tries to connect to "www", the client will be connected to "www\&.example\&.com"\&. This option only affects name lookups that your server does on behalf of clients\&. (Defaults to "0"\&.) +.RE +.PP +\fBServerDNSDetectHijacking\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set to 1, we will test periodically to determine whether our local nameservers have been configured to hijack failing DNS requests (usually to an advertising site)\&. If they are, we will attempt to correct this\&. This option only affects name lookups that your server does on behalf of clients\&. (Defaults to "1"\&.) +.RE +.PP +\fBServerDNSTestAddresses\fR \fIaddress\fR,\fIaddress\fR,\fI\&...\fR +.RS 4 +When we\(cqre detecting DNS hijacking, make sure that these +\fIvalid\fR +addresses aren\(cqt getting redirected\&. If they are, then our DNS is completely useless, and we\(cqll reset our exit policy to "reject +\fB:\fR"\&. This option only affects name lookups that your server does on behalf of clients\&. (Defaults to "www\&.google\&.com, www\&.mit\&.edu, www\&.yahoo\&.com, www\&.slashdot\&.org"\&.) +.RE +.PP +\fBServerDNSAllowNonRFC953Hostnames\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is disabled, Tor does not try to resolve hostnames containing illegal characters (like @ and :) rather than sending them to an exit node to be resolved\&. This helps trap accidental attempts to resolve URLs and so on\&. This option only affects name lookups that your server does on behalf of clients\&. (Default: 0) +.RE +.PP +\fBBridgeRecordUsageByCountry\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled and BridgeRelay is also enabled, and we have GeoIP data, Tor keeps a keep a per\-country count of how many client addresses have contacted it so that it can help the bridge authority guess which countries have blocked access to it\&. (Default: 1) +.RE +.PP +\fBServerDNSRandomizeCase\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set, Tor sets the case of each character randomly in outgoing DNS requests, and makes sure that the case matches in DNS replies\&. This so\-called "0x20 hack" helps resist some types of DNS poisoning attack\&. For more information, see "Increased DNS Forgery Resistance through 0x20\-Bit Encoding"\&. This option only affects name lookups that your server does on behalf of clients\&. (Default: 1) +.RE +.PP +\fBGeoIPFile\fR \fIfilename\fR +.RS 4 +A filename containing GeoIP data, for use with BridgeRecordUsageByCountry\&. +.RE +.PP +\fBCellStatistics\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, Tor writes statistics on the mean time that cells spend in circuit queues to disk every 24 hours\&. (Default: 0) +.RE +.PP +\fBDirReqStatistics\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, Tor writes statistics on the number and response time of network status requests to disk every 24 hours\&. (Default: 0) +.RE +.PP +\fBEntryStatistics\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, Tor writes statistics on the number of directly connecting clients to disk every 24 hours\&. (Default: 0) +.RE +.PP +\fBExitPortStatistics\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, Tor writes statistics on the number of relayed bytes and opened stream per exit port to disk every 24 hours\&. (Default: 0) +.RE +.PP +\fBExtraInfoStatistics\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is enabled, Tor includes previously gathered statistics in its extra\-info documents that it uploads to the directory authorities\&. (Default: 0) +.RE +.SH "DIRECTORY SERVER OPTIONS" +.sp +The following options are useful only for directory servers (that is, if DirPort is non\-zero): +.PP +\fBAuthoritativeDirectory\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set to 1, Tor operates as an authoritative directory server\&. Instead of caching the directory, it generates its own list of good servers, signs it, and sends that to the clients\&. Unless the clients already have you listed as a trusted directory, you probably do not want to set this option\&. Please coordinate with the other admins at +tor\-ops@torproject\&.org +if you think you should be a directory\&. +.RE +.PP +\fBDirPortFrontPage\fR \fIFILENAME\fR +.RS 4 +When this option is set, it takes an HTML file and publishes it as "/" on the DirPort\&. Now relay operators can provide a disclaimer without needing to set up a separate webserver\&. There\(cqs a sample disclaimer in contrib/tor\-exit\-notice\&.html\&. +.RE +.PP +\fBV1AuthoritativeDirectory\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set in addition to +\fBAuthoritativeDirectory\fR, Tor generates version 1 directory and running\-routers documents (for legacy Tor clients up to 0\&.1\&.0\&.x)\&. +.RE +.PP +\fBV2AuthoritativeDirectory\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set in addition to +\fBAuthoritativeDirectory\fR, Tor generates version 2 network statuses and serves descriptors, etc as described in doc/spec/dir\-spec\-v2\&.txt (for Tor clients and servers running 0\&.1\&.1\&.x and 0\&.1\&.2\&.x)\&. +.RE +.PP +\fBV3AuthoritativeDirectory\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set in addition to +\fBAuthoritativeDirectory\fR, Tor generates version 3 network statuses and serves descriptors, etc as described in doc/spec/dir\-spec\&.txt (for Tor clients and servers running at least 0\&.2\&.0\&.x)\&. +.RE +.PP +\fBVersioningAuthoritativeDirectory\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set to 1, Tor adds information on which versions of Tor are still believed safe for use to the published directory\&. Each version 1 authority is automatically a versioning authority; version 2 authorities provide this service optionally\&. See +\fBRecommendedVersions\fR, +\fBRecommendedClientVersions\fR, and +\fBRecommendedServerVersions\fR\&. +.RE +.PP +\fBNamingAuthoritativeDirectory\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set to 1, then the server advertises that it has opinions about nickname\-to\-fingerprint bindings\&. It will include these opinions in its published network\-status pages, by listing servers with the flag "Named" if a correct binding between that nickname and fingerprint has been registered with the dirserver\&. Naming dirservers will refuse to accept or publish descriptors that contradict a registered binding\&. See +\fBapproved\-routers\fR +in the +\fBFILES\fR +section below\&. +.RE +.PP +\fBHSAuthoritativeDir\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set in addition to +\fBAuthoritativeDirectory\fR, Tor also accepts and serves v0 hidden service descriptors, which are produced and used by Tor 0\&.2\&.1\&.x and older\&. (Default: 0) +.RE +.PP +\fBHidServDirectoryV2\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set, Tor accepts and serves v2 hidden service descriptors\&. Setting DirPort is not required for this, because clients connect via the ORPort by default\&. (Default: 1) +.RE +.PP +\fBBridgeAuthoritativeDir\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set in addition to +\fBAuthoritativeDirectory\fR, Tor accepts and serves router descriptors, but it caches and serves the main networkstatus documents rather than generating its own\&. (Default: 0) +.RE +.PP +\fBMinUptimeHidServDirectoryV2\fR \fIN\fR \fBseconds\fR|\fBminutes\fR|\fBhours\fR|\fBdays\fR|\fBweeks\fR +.RS 4 +Minimum uptime of a v2 hidden service directory to be accepted as such by authoritative directories\&. (Default: 25 hours) +.RE +.PP +\fBDirPort\fR \fIPORT\fR|\fBauto\fR +.RS 4 +If this option is nonzero, advertise the directory service on this port\&. Set it to "auto" to have Tor pick a port for you\&. (Default: 0) +.RE +.PP +\fBDirListenAddress\fR \fIIP\fR[:\fIPORT\fR] +.RS 4 +Bind the directory service to this address\&. If you specify a port, bind to this port rather than the one specified in DirPort\&. (Default: 0\&.0\&.0\&.0) This directive can be specified multiple times to bind to multiple addresses/ports\&. +.RE +.PP +\fBDirPolicy\fR \fIpolicy\fR,\fIpolicy\fR,\fI\&...\fR +.RS 4 +Set an entrance policy for this server, to limit who can connect to the directory ports\&. The policies have the same form as exit policies above\&. +.RE +.PP +\fBFetchV2Networkstatus\fR \fB0\fR|\fB1\fR +.RS 4 +If set, we try to fetch the (obsolete, unused) version 2 network status consensus documents from the directory authorities\&. No currently supported Tor version uses them\&. (Default: 0\&.) +.RE +.SH "DIRECTORY AUTHORITY SERVER OPTIONS" +.PP +\fBRecommendedVersions\fR \fISTRING\fR +.RS 4 +STRING is a comma\-separated list of Tor versions currently believed to be safe\&. The list is included in each directory, and nodes which pull down the directory learn whether they need to upgrade\&. This option can appear multiple times: the values from multiple lines are spliced together\&. When this is set then +\fBVersioningAuthoritativeDirectory\fR +should be set too\&. +.RE +.PP +\fBRecommendedClientVersions\fR \fISTRING\fR +.RS 4 +STRING is a comma\-separated list of Tor versions currently believed to be safe for clients to use\&. This information is included in version 2 directories\&. If this is not set then the value of +\fBRecommendedVersions\fR +is used\&. When this is set then +\fBVersioningAuthoritativeDirectory\fR +should be set too\&. +.RE +.PP +\fBRecommendedServerVersions\fR \fISTRING\fR +.RS 4 +STRING is a comma\-separated list of Tor versions currently believed to be safe for servers to use\&. This information is included in version 2 directories\&. If this is not set then the value of +\fBRecommendedVersions\fR +is used\&. When this is set then +\fBVersioningAuthoritativeDirectory\fR +should be set too\&. +.RE +.PP +\fBConsensusParams\fR \fISTRING\fR +.RS 4 +STRING is a space\-separated list of key=value pairs that Tor will include in the "params" line of its networkstatus vote\&. +.RE +.PP +\fBDirAllowPrivateAddresses\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 1, Tor will accept router descriptors with arbitrary "Address" elements\&. Otherwise, if the address is not an IP address or is a private IP address, it will reject the router descriptor\&. Defaults to 0\&. +.RE +.PP +\fBAuthDirBadDir\fR \fIAddressPattern\&...\fR +.RS 4 +Authoritative directories only\&. A set of address patterns for servers that will be listed as bad directories in any network status document this authority publishes, if +\fBAuthDirListBadDirs\fR +is set\&. +.RE +.PP +\fBAuthDirBadExit\fR \fIAddressPattern\&...\fR +.RS 4 +Authoritative directories only\&. A set of address patterns for servers that will be listed as bad exits in any network status document this authority publishes, if +\fBAuthDirListBadExits\fR +is set\&. +.RE +.PP +\fBAuthDirInvalid\fR \fIAddressPattern\&...\fR +.RS 4 +Authoritative directories only\&. A set of address patterns for servers that will never be listed as "valid" in any network status document that this authority publishes\&. +.RE +.PP +\fBAuthDirReject\fR \fIAddressPattern\fR\&... +.RS 4 +Authoritative directories only\&. A set of address patterns for servers that will never be listed at all in any network status document that this authority publishes, or accepted as an OR address in any descriptor submitted for publication by this authority\&. +.RE +.PP +\fBAuthDirListBadDirs\fR \fB0\fR|\fB1\fR +.RS 4 +Authoritative directories only\&. If set to 1, this directory has some opinion about which nodes are unsuitable as directory caches\&. (Do not set this to 1 unless you plan to list non\-functioning directories as bad; otherwise, you are effectively voting in favor of every declared directory\&.) +.RE +.PP +\fBAuthDirListBadExits\fR \fB0\fR|\fB1\fR +.RS 4 +Authoritative directories only\&. If set to 1, this directory has some opinion about which nodes are unsuitable as exit nodes\&. (Do not set this to 1 unless you plan to list non\-functioning exits as bad; otherwise, you are effectively voting in favor of every declared exit as an exit\&.) +.RE +.PP +\fBAuthDirRejectUnlisted\fR \fB0\fR|\fB1\fR +.RS 4 +Authoritative directories only\&. If set to 1, the directory server rejects all uploaded server descriptors that aren\(cqt explicitly listed in the fingerprints file\&. This acts as a "panic button" if we get hit with a Sybil attack\&. (Default: 0) +.RE +.PP +\fBAuthDirMaxServersPerAddr\fR \fINUM\fR +.RS 4 +Authoritative directories only\&. The maximum number of servers that we will list as acceptable on a single IP address\&. Set this to "0" for "no limit"\&. (Default: 2) +.RE +.PP +\fBAuthDirMaxServersPerAuthAddr\fR \fINUM\fR +.RS 4 +Authoritative directories only\&. Like AuthDirMaxServersPerAddr, but applies to addresses shared with directory authorities\&. (Default: 5) +.RE +.PP +\fBAuthDirFastGuarantee\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +Authoritative directories only\&. If non\-zero, always vote the Fast flag for any relay advertising this amount of capacity or more\&. (Default: 20 KB) +.RE +.PP +\fBAuthDirGuardBWGuarantee\fR \fIN\fR \fBbytes\fR|\fBKB\fR|\fBMB\fR|\fBGB\fR +.RS 4 +Authoritative directories only\&. If non\-zero, this advertised capacity or more is always sufficient to satisfy the bandwidth requirement for the Guard flag\&. (Default: 250 KB) +.RE +.PP +\fBBridgePassword\fR \fIPassword\fR +.RS 4 +If set, contains an HTTP authenticator that tells a bridge authority to serve all requested bridge information\&. Used for debugging\&. (Default: not set\&.) +.RE +.PP +\fBV3AuthVotingInterval\fR \fIN\fR \fBminutes\fR|\fBhours\fR +.RS 4 +V3 authoritative directories only\&. Configures the server\(cqs preferred voting interval\&. Note that voting will +\fIactually\fR +happen at an interval chosen by consensus from all the authorities\*(Aq preferred intervals\&. This time SHOULD divide evenly into a day\&. (Default: 1 hour) +.RE +.PP +\fBV3AuthVoteDelay\fR \fIN\fR \fBminutes\fR|\fBhours\fR +.RS 4 +V3 authoritative directories only\&. Configures the server\(cqs preferred delay between publishing its vote and assuming it has all the votes from all the other authorities\&. Note that the actual time used is not the server\(cqs preferred time, but the consensus of all preferences\&. (Default: 5 minutes\&.) +.RE +.PP +\fBV3AuthDistDelay\fR \fIN\fR \fBminutes\fR|\fBhours\fR +.RS 4 +V3 authoritative directories only\&. Configures the server\(cqs preferred delay between publishing its consensus and signature and assuming it has all the signatures from all the other authorities\&. Note that the actual time used is not the server\(cqs preferred time, but the consensus of all preferences\&. (Default: 5 minutes\&.) +.RE +.PP +\fBV3AuthNIntervalsValid\fR \fINUM\fR +.RS 4 +V3 authoritative directories only\&. Configures the number of VotingIntervals for which each consensus should be valid for\&. Choosing high numbers increases network partitioning risks; choosing low numbers increases directory traffic\&. Note that the actual number of intervals used is not the server\(cqs preferred number, but the consensus of all preferences\&. Must be at least 2\&. (Default: 3\&.) +.RE +.PP +\fBV3BandwidthsFile\fR \fIFILENAME\fR +.RS 4 +V3 authoritative directories only\&. Configures the location of the bandiwdth\-authority generated file storing information on relays\*(Aq measured bandwidth capacities\&. (Default: unset\&.) +.RE +.PP +\fBV3AuthUseLegacyKey\fR \fB0\fR|\fB1\fR +.RS 4 +If set, the directory authority will sign consensuses not only with its own signing key, but also with a "legacy" key and certificate with a different identity\&. This feature is used to migrate directory authority keys in the event of a compromise\&. (Default: 0\&.) +.RE +.PP +\fBRephistTrackTime\fR \fIN\fR \fBseconds\fR|\fBminutes\fR|\fBhours\fR|\fBdays\fR|\fBweeks\fR +.RS 4 +Tells an authority, or other node tracking node reliability and history, that fine\-grained information about nodes can be discarded when it hasn\(cqt changed for a given amount of time\&. (Default: 24 hours) +.RE +.PP +\fBVoteOnHidServDirectoriesV2\fR \fB0\fR|\fB1\fR +.RS 4 +When this option is set in addition to +\fBAuthoritativeDirectory\fR, Tor votes on whether to accept relays as hidden service directories\&. (Default: 1) +.RE +.SH "HIDDEN SERVICE OPTIONS" +.sp +The following options are used to configure a hidden service\&. +.PP +\fBHiddenServiceDir\fR \fIDIRECTORY\fR +.RS 4 +Store data files for a hidden service in DIRECTORY\&. Every hidden service must have a separate directory\&. You may use this option multiple times to specify multiple services\&. DIRECTORY must be an existing directory\&. +.RE +.PP +\fBHiddenServicePort\fR \fIVIRTPORT\fR [\fITARGET\fR] +.RS 4 +Configure a virtual port VIRTPORT for a hidden service\&. You may use this option multiple times; each time applies to the service using the most recent hiddenservicedir\&. By default, this option maps the virtual port to the same port on 127\&.0\&.0\&.1\&. You may override the target port, address, or both by specifying a target of addr, port, or addr:port\&. You may also have multiple lines with the same VIRTPORT: when a user connects to that VIRTPORT, one of the TARGETs from those lines will be chosen at random\&. +.RE +.PP +\fBPublishHidServDescriptors\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 0, Tor will run any hidden services you configure, but it won\(cqt advertise them to the rendezvous directory\&. This option is only useful if you\(cqre using a Tor controller that handles hidserv publishing for you\&. (Default: 1) +.RE +.PP +\fBHiddenServiceVersion\fR \fIversion\fR,\fIversion\fR,\fI\&...\fR +.RS 4 +A list of rendezvous service descriptor versions to publish for the hidden service\&. Currently, only version 2 is supported\&. (Default: 2) +.RE +.PP +\fBHiddenServiceAuthorizeClient\fR \fIauth\-type\fR \fIclient\-name\fR,\fIclient\-name\fR,\fI\&...\fR +.RS 4 +If configured, the hidden service is accessible for authorized clients only\&. The auth\-type can either be \*(Aqbasic\*(Aq for a general\-purpose authorization protocol or \*(Aqstealth\*(Aq for a less scalable protocol that also hides service activity from unauthorized clients\&. Only clients that are listed here are authorized to access the hidden service\&. Valid client names are 1 to 19 characters long and only use characters in A\-Za\-z0\-9+\-_ (no spaces)\&. If this option is set, the hidden service is not accessible for clients without authorization any more\&. Generated authorization data can be found in the hostname file\&. Clients need to put this authorization data in their configuration file using +\fBHidServAuth\fR\&. +.RE +.PP +\fBRendPostPeriod\fR \fIN\fR \fBseconds\fR|\fBminutes\fR|\fBhours\fR|\fBdays\fR|\fBweeks\fR +.RS 4 +Every time the specified period elapses, Tor uploads any rendezvous service descriptors to the directory servers\&. This information is also uploaded whenever it changes\&. (Default: 1 hour) +.RE +.SH "TESTING NETWORK OPTIONS" +.sp +The following options are used for running a testing Tor network\&. +.PP +\fBTestingTorNetwork\fR \fB0\fR|\fB1\fR +.RS 4 +If set to 1, Tor adjusts default values of the configuration options below, so that it is easier to set up a testing Tor network\&. May only be set if non\-default set of DirServers is set\&. Cannot be unset while Tor is running\&. (Default: 0) + +.sp +.if n \{\ +.RS 4 +.\} +.nf +ServerDNSAllowBrokenConfig 1 +DirAllowPrivateAddresses 1 +EnforceDistinctSubnets 0 +AssumeReachable 1 +AuthDirMaxServersPerAddr 0 +AuthDirMaxServersPerAuthAddr 0 +ClientDNSRejectInternalAddresses 0 +ClientRejectInternalAddresses 0 +ExitPolicyRejectPrivate 0 +V3AuthVotingInterval 5 minutes +V3AuthVoteDelay 20 seconds +V3AuthDistDelay 20 seconds +MinUptimeHidServDirectoryV2 0 seconds +TestingV3AuthInitialVotingInterval 5 minutes +TestingV3AuthInitialVoteDelay 20 seconds +TestingV3AuthInitialDistDelay 20 seconds +TestingAuthDirTimeToLearnReachability 0 minutes +TestingEstimatedDescriptorPropagationTime 0 minutes +.fi +.if n \{\ +.RE +.\} +.RE +.PP +\fBTestingV3AuthInitialVotingInterval\fR \fIN\fR \fBminutes\fR|\fBhours\fR +.RS 4 +Like V3AuthVotingInterval, but for initial voting interval before the first consensus has been created\&. Changing this requires that +\fBTestingTorNetwork\fR +is set\&. (Default: 30 minutes) +.RE +.PP +\fBTestingV3AuthInitialVoteDelay\fR \fIN\fR \fBminutes\fR|\fBhours\fR +.RS 4 +Like TestingV3AuthInitialVoteDelay, but for initial voting interval before the first consensus has been created\&. Changing this requires that +\fBTestingTorNetwork\fR +is set\&. (Default: 5 minutes) +.RE +.PP +\fBTestingV3AuthInitialDistDelay\fR \fIN\fR \fBminutes\fR|\fBhours\fR +.RS 4 +Like TestingV3AuthInitialDistDelay, but for initial voting interval before the first consensus has been created\&. Changing this requires that +\fBTestingTorNetwork\fR +is set\&. (Default: 5 minutes) +.RE +.PP +\fBTestingAuthDirTimeToLearnReachability\fR \fIN\fR \fBminutes\fR|\fBhours\fR +.RS 4 +After starting as an authority, do not make claims about whether routers are Running until this much time has passed\&. Changing this requires that +\fBTestingTorNetwork\fR +is set\&. (Default: 30 minutes) +.RE +.PP +\fBTestingEstimatedDescriptorPropagationTime\fR \fIN\fR \fBminutes\fR|\fBhours\fR +.RS 4 +Clients try downloading router descriptors from directory caches after this time\&. Changing this requires that +\fBTestingTorNetwork\fR +is set\&. (Default: 10 minutes) +.RE +.SH "SIGNALS" +.sp Tor catches the following signals: -.LP -.TP +.PP \fBSIGTERM\fR -Tor will catch this, clean up and sync to disk if necessary, and exit. -.LP -.TP +.RS 4 +Tor will catch this, clean up and sync to disk if necessary, and exit\&. +.RE +.PP \fBSIGINT\fR -Tor clients behave as with SIGTERM; but Tor servers will do a controlled -slow shutdown, closing listeners and waiting 30 seconds before exiting. -(The delay can be configured with the ShutdownWaitLength config option.) -.LP -.TP +.RS 4 +Tor clients behave as with SIGTERM; but Tor servers will do a controlled slow shutdown, closing listeners and waiting 30 seconds before exiting\&. (The delay can be configured with the ShutdownWaitLength config option\&.) +.RE +.PP \fBSIGHUP\fR -The signal instructs Tor to reload its configuration (including closing -and reopening logs), fetch a new directory, and kill and restart its -helper processes if applicable. -.LP -.TP +.RS 4 +The signal instructs Tor to reload its configuration (including closing and reopening logs), and kill and restart its helper processes if applicable\&. +.RE +.PP \fBSIGUSR1\fR -Log statistics about current connections, past connections, and -throughput. -.LP -.TP +.RS 4 +Log statistics about current connections, past connections, and throughput\&. +.RE +.PP \fBSIGUSR2\fR -Switch all logs to loglevel debug. You can go back to the old loglevels -by sending a SIGHUP. -.LP -.TP +.RS 4 +Switch all logs to loglevel debug\&. You can go back to the old loglevels by sending a SIGHUP\&. +.RE +.PP \fBSIGCHLD\fR -Tor receives this signal when one of its helper processes has exited, -so it can clean up. -.LP -.TP +.RS 4 +Tor receives this signal when one of its helper processes has exited, so it can clean up\&. +.RE +.PP \fBSIGPIPE\fR -Tor catches this signal and ignores it. -.LP -.TP +.RS 4 +Tor catches this signal and ignores it\&. +.RE +.PP \fBSIGXFSZ\fR -If this signal exists on your platform, Tor catches and ignores it. - -.SH FILES -.LP -.TP -.B @CONFDIR@/torrc -The configuration file, which contains "option value" pairs. -.LP -.TP -.B @LOCALSTATEDIR@/lib/tor/ -The tor process stores keys and other data here. -.LP -.TP -.B \fIDataDirectory\fP/cached-status/* -The most recently downloaded network status document for each authority. Each file holds one such document; the filenames are the hexadecimal identity key fingerprints of the directory authorities. -.LP -.TP -.B \fIDataDirectory\fB/cached-descriptors\fR and \fBcached-descriptors.new\fR -These files hold downloaded router statuses. Some routers may appear more than once; if so, the most recently published descriptor is used. Lines beginning with @-signs are annotations that contain more information about a given router. The ".new" file is an append-only journal; when it gets too large, all entries are merged into a new cached-routers file. -.LP -.TP -.B \fIDataDirectory\fB/cached-routers\fR and \fBcached-routers.new\fR -Obsolete versions of cached-descriptors and cached-descriptors.new. When Tor can't find the newer files, it looks here instead. -.LP -.TP -.B \fIDataDirectory\fP/state -A set of persistent key-value mappings. These are documented in the file. These include: -.PD 0 -.RS 5 -.IP "- The current entry guards and their status." -.IP "- The current bandwidth accounting values (unused so far; see below)." -.IP "- When the file was last written" -.IP "- What version of Tor generated the state file" -.IP "- A short history of bandwidth usage, as produced in the router descriptors." -.RE -.PD -.LP -.TP -.B \fIDataDirectory\fP/bw_accounting -Used to track bandwidth accounting values (when the current period starts and ends; how much has been read and written so far this period). This file is obsolete, and the data is now stored in the 'state' file as well. Only used when bandwidth accounting is enabled. -.LP -.TP -.B \fIDataDirectory\fP/hsusage -Used to track hidden service usage in terms of fetch and publish -requests to this hidden service authoritative directory. Only used when -recording of statistics is enabled. -.LP -.TP -.B \fIDataDirectory\fP/control_auth_cookie -Used for cookie authentication with the controller. Location can be -overridden by the CookieAuthFile config option. Regenerated on startup. -See control-spec.txt for details. Only used when cookie authentication -is enabled. -.LP -.TP -.B \fIDataDirectory\fP/keys/* -Only used by servers. Holds identity keys and onion keys. -.LP -.TP -.B \fIDataDirectory\fP/fingerprint -Only used by servers. Holds the fingerprint of the server's identity key. -.LP -.TP -.B \fIDataDirectory\fP/approved-routers -Only for naming authoritative directory servers (see \fBNamingAuthoritativeDirectory\fP). This file lists nickname to identity bindings. Each line lists a nickname and a fingerprint separated by whitespace. See your \fBfingerprint\fP file in the \fIDataDirectory\fP for an example line. If the nickname is \fB!reject\fP then descriptors from the given identity (fingerprint) are rejected by this server. If it is \fB!invalid\fP then descriptors are accepted but marked in the directory as not valid, that is, not recommended. -.LP -.TP -.B \fIDataDirectory\fP/router-stability -Only used by authoritative directory servers. Tracks measurements for router mean-time-between-failures so that authorities have a good idea of how to set their Stable flags. -.LP -.TP -.B \fIHiddenServiceDirectory\fP/hostname -The .onion domain name for this hidden service. -If the hidden service is restricted to authorized clients only, this file -also contains authorization data for all clients. -.LP -.TP -.B \fIHiddenServiceDirectory\fP/private_key -The private key for this hidden service. -.LP -.TP -.B \fIHiddenServiceDirectory\fP/client_keys -Authorization data for a hidden service that is only accessible by authorized -clients. -.SH SEE ALSO -.BR privoxy (1), -.BR tsocks (1), -.BR torify (1) - -.BR https://www.torproject.org/ - -.SH BUGS -Plenty, probably. Tor is still in development. Please report them. -.SH AUTHORS -Roger Dingledine , Nick Mathewson . +.RS 4 +If this signal exists on your platform, Tor catches and ignores it\&. +.RE +.SH "FILES" +.PP +\fB@CONFDIR@/torrc\fR +.RS 4 +The configuration file, which contains "option value" pairs\&. +.RE +.PP +\fB@LOCALSTATEDIR@/lib/tor/\fR +.RS 4 +The tor process stores keys and other data here\&. +.RE +.PP +\fIDataDirectory\fR\fB/cached\-status/\fR +.RS 4 +The most recently downloaded network status document for each authority\&. Each file holds one such document; the filenames are the hexadecimal identity key fingerprints of the directory authorities\&. +.RE +.PP +\fIDataDirectory\fR\fB/cached\-descriptors\fR and \fBcached\-descriptors\&.new\fR +.RS 4 +These files hold downloaded router statuses\&. Some routers may appear more than once; if so, the most recently published descriptor is used\&. Lines beginning with @\-signs are annotations that contain more information about a given router\&. The "\&.new" file is an append\-only journal; when it gets too large, all entries are merged into a new cached\-descriptors file\&. +.RE +.PP +\fIDataDirectory\fR\fB/cached\-routers\fR and \fBcached\-routers\&.new\fR +.RS 4 +Obsolete versions of cached\-descriptors and cached\-descriptors\&.new\&. When Tor can\(cqt find the newer files, it looks here instead\&. +.RE +.PP +\fIDataDirectory\fR\fB/state\fR +.RS 4 +A set of persistent key\-value mappings\&. These are documented in the file\&. These include: +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +The current entry guards and their status\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +The current bandwidth accounting values (unused so far; see below)\&. +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +When the file was last written +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +What version of Tor generated the state file +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +A short history of bandwidth usage, as produced in the router descriptors\&. +.RE +.RE +.PP +\fIDataDirectory\fR\fB/bw_accounting\fR +.RS 4 +Used to track bandwidth accounting values (when the current period starts and ends; how much has been read and written so far this period)\&. This file is obsolete, and the data is now stored in the \*(Aqstate\*(Aq file as well\&. Only used when bandwidth accounting is enabled\&. +.RE +.PP +\fIDataDirectory\fR\fB/control_auth_cookie\fR +.RS 4 +Used for cookie authentication with the controller\&. Location can be overridden by the CookieAuthFile config option\&. Regenerated on startup\&. See control\-spec\&.txt for details\&. Only used when cookie authentication is enabled\&. +.RE +.PP +\fIDataDirectory\fR\fB/keys/\fR* +.RS 4 +Only used by servers\&. Holds identity keys and onion keys\&. +.RE +.PP +\fIDataDirectory\fR\fB/fingerprint\fR +.RS 4 +Only used by servers\&. Holds the fingerprint of the server\(cqs identity key\&. +.RE +.PP +\fIDataDirectory\fR\fB/approved\-routers\fR +.RS 4 +Only for naming authoritative directory servers (see +\fBNamingAuthoritativeDirectory\fR)\&. This file lists nickname to identity bindings\&. Each line lists a nickname and a fingerprint separated by whitespace\&. See your +\fBfingerprint\fR +file in the +\fIDataDirectory\fR +for an example line\&. If the nickname is +\fB!reject\fR +then descriptors from the given identity (fingerprint) are rejected by this server\&. If it is +\fB!invalid\fR +then descriptors are accepted but marked in the directory as not valid, that is, not recommended\&. +.RE +.PP +\fIDataDirectory\fR\fB/router\-stability\fR +.RS 4 +Only used by authoritative directory servers\&. Tracks measurements for router mean\-time\-between\-failures so that authorities have a good idea of how to set their Stable flags\&. +.RE +.PP +\fIHiddenServiceDirectory\fR\fB/hostname\fR +.RS 4 +The \&.onion domain name for this hidden service\&. If the hidden service is restricted to authorized clients only, this file also contains authorization data for all clients\&. +.RE +.PP +\fIHiddenServiceDirectory\fR\fB/private_key\fR +.RS 4 +The private key for this hidden service\&. +.RE +.PP +\fIHiddenServiceDirectory\fR\fB/client_keys\fR +.RS 4 +Authorization data for a hidden service that is only accessible by authorized clients\&. +.RE +.SH "SEE ALSO" +.sp +\fBprivoxy\fR(1), \fBtsocks\fR(1), \fBtorify\fR(1) +.sp +\fBhttps://www\&.torproject\&.org/\fR +.SH "BUGS" +.sp +Plenty, probably\&. Tor is still in development\&. Please report them\&. +.SH "AUTHORS" +.sp +Roger Dingledine [arma at mit\&.edu], Nick Mathewson [nickm at alum\&.mit\&.edu]\&. diff -Nru tor-0.2.1.30/doc/tor.1.txt tor-0.2.2.35/doc/tor.1.txt --- tor-0.2.1.30/doc/tor.1.txt 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/tor.1.txt 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,1581 @@ +// Copyright (c) The Tor Project, Inc. +// See LICENSE for licensing information +// This is an asciidoc file used to generate the manpage/html reference. +// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html +TOR(1) +====== + +NAME +---- +tor - The second-generation onion router + + +SYNOPSIS +-------- +**tor** [__OPTION__ __value__]... + +DESCRIPTION +----------- +__tor__ is a connection-oriented anonymizing communication +service. Users choose a source-routed path through a set of nodes, and +negotiate a "virtual circuit" through the network, in which each node +knows its predecessor and successor, but no others. Traffic flowing down +the circuit is unwrapped by a symmetric key at each node, which reveals +the downstream node. + + +Basically __tor__ provides a distributed network of servers ("onion routers"). +Users bounce their TCP streams -- web traffic, ftp, ssh, etc -- around the +routers, and recipients, observers, and even the routers themselves have +difficulty tracking the source of the stream. + +OPTIONS +------- +**-h**, **-help**:: + Display a short help message and exit. + +**-f** __FILE__:: + FILE contains further "option value" pairs. (Default: @CONFDIR@/torrc) + +**--hash-password**:: + Generates a hashed password for control port access. + +**--list-fingerprint**:: + Generate your keys and output your nickname and fingerprint. + +**--verify-config**:: + Verify the configuration file is valid. + +**--nt-service**:: + **--service [install|remove|start|stop]** Manage the Tor Windows + NT/2000/XP service. Current instructions can be found at + https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ#WinNTService + +**--list-torrc-options**:: + List all valid options. + +**--version**:: + Display Tor version and exit. + +**--quiet**:: + Do not start Tor with a console log unless explicitly requested to do so. + (By default, Tor starts out logging messages at level "notice" or higher to + the console, until it has parsed its configuration.) + +Other options can be specified either on the command-line (--option + value), or in the configuration file (option value or option "value"). + Options are case-insensitive. C-style escaped characters are allowed inside + quoted values. Options on the command line take precedence over + options found in the configuration file, except indicated otherwise. To + split one configuration entry into multiple lines, use a single \ before + the end of the line. Comments can be used in such multiline entries, but + they must start at the beginning of a line. + +**BandwidthRate** __N__ **bytes**|**KB**|**MB**|**GB**:: + A token bucket limits the average incoming bandwidth usage on this node to + the specified number of bytes per second, and the average outgoing + bandwidth usage to that same value. If you want to run a relay in the + public network, this needs to be _at the very least_ 20 KB (that is, + 20480 bytes). (Default: 5 MB) + +**BandwidthBurst** __N__ **bytes**|**KB**|**MB**|**GB**:: + Limit the maximum token bucket size (also known as the burst) to the given + number of bytes in each direction. (Default: 10 MB) + +**MaxAdvertisedBandwidth** __N__ **bytes**|**KB**|**MB**|**GB**:: + If set, we will not advertise more than this amount of bandwidth for our + BandwidthRate. Server operators who want to reduce the number of clients + who ask to build circuits through them (since this is proportional to + advertised bandwidth rate) can thus reduce the CPU demands on their server + without impacting network performance. + +**RelayBandwidthRate** __N__ **bytes**|**KB**|**MB**|**GB**:: + If not 0, a separate token bucket limits the average incoming bandwidth + usage for \_relayed traffic_ on this node to the specified number of bytes + per second, and the average outgoing bandwidth usage to that same value. + Relayed traffic currently is calculated to include answers to directory + requests, but that may change in future versions. (Default: 0) + +**RelayBandwidthBurst** __N__ **bytes**|**KB**|**MB**|**GB**:: + If not 0, limit the maximum token bucket size (also known as the burst) for + \_relayed traffic_ to the given number of bytes in each direction. + (Default: 0) + +**PerConnBWRate** __N__ **bytes**|**KB**|**MB**|**GB**:: + If set, do separate rate limiting for each connection from a non-relay. + You should never need to change this value, since a network-wide value is + published in the consensus and your relay will use that value. (Default: 0) + +**PerConnBWBurst** __N__ **bytes**|**KB**|**MB**|**GB**:: + If set, do separate rate limiting for each connection from a non-relay. + You should never need to change this value, since a network-wide value is + published in the consensus and your relay will use that value. (Default: 0) + +**ConnLimit** __NUM__:: + The minimum number of file descriptors that must be available to the Tor + process before it will start. Tor will ask the OS for as many file + descriptors as the OS will allow (you can find this by "ulimit -H -n"). + If this number is less than ConnLimit, then Tor will refuse to start. + + + + You probably don't need to adjust this. It has no effect on Windows + since that platform lacks getrlimit(). (Default: 1000) + +**ConstrainedSockets** **0**|**1**:: + If set, Tor will tell the kernel to attempt to shrink the buffers for all + sockets to the size specified in **ConstrainedSockSize**. This is useful for + virtual servers and other environments where system level TCP buffers may + be limited. If you're on a virtual server, and you encounter the "Error + creating network socket: No buffer space available" message, you are + likely experiencing this problem. + + + + The preferred solution is to have the admin increase the buffer pool for + the host itself via /proc/sys/net/ipv4/tcp_mem or equivalent facility; + this configuration option is a second-resort. + + + + The DirPort option should also not be used if TCP buffers are scarce. The + cached directory requests consume additional sockets which exacerbates + the problem. + + + + You should **not** enable this feature unless you encounter the "no buffer + space available" issue. Reducing the TCP buffers affects window size for + the TCP stream and will reduce throughput in proportion to round trip + time on long paths. (Default: 0.) + +**ConstrainedSockSize** __N__ **bytes**|**KB**:: + When **ConstrainedSockets** is enabled the receive and transmit buffers for + all sockets will be set to this limit. Must be a value between 2048 and + 262144, in 1024 byte increments. Default of 8192 is recommended. + +**ControlPort** __PORT__|**auto**:: + If set, Tor will accept connections on this port and allow those + connections to control the Tor process using the Tor Control Protocol + (described in control-spec.txt). Note: unless you also specify one or + more of **HashedControlPassword** or **CookieAuthentication**, + setting this option will cause Tor to allow any process on the local + host to control it. (Setting both authentication methods means either + method is sufficient to authenticate to Tor.) This + option is required for many Tor controllers; most use the value of 9051. + Set it to "auto" to have Tor pick a port for you. (Default: 0). + +**ControlListenAddress** __IP__[:__PORT__]:: + Bind the controller listener to this address. If you specify a port, bind + to this port rather than the one specified in ControlPort. We strongly + recommend that you leave this alone unless you know what you're doing, + since giving attackers access to your control listener is really + dangerous. (Default: 127.0.0.1) This directive can be specified multiple + times to bind to multiple addresses/ports. + +**ControlSocket** __Path__:: + Like ControlPort, but listens on a Unix domain socket, rather than a TCP + socket. (Unix and Unix-like systems only.) + +**ControlSocketsGroupWritable** **0**|**1**:: + If this option is set to 0, don't allow the filesystem group to read and + write unix sockets (e.g. ControlSocket). If the option is set to 1, make + the control socket readable and writable by the default GID. (Default: 0) + +**HashedControlPassword** __hashed_password__:: + Allow connections on the control port if they present + the password whose one-way hash is __hashed_password__. You + can compute the hash of a password by running "tor --hash-password + __password__". You can provide several acceptable passwords by using more + than one HashedControlPassword line. + +**CookieAuthentication** **0**|**1**:: + If this option is set to 1, allow connections on the control port + when the connecting process knows the contents of a file named + "control_auth_cookie", which Tor will create in its data directory. This + authentication method should only be used on systems with good filesystem + security. (Default: 0) + +**CookieAuthFile** __Path__:: + If set, this option overrides the default location and file name + for Tor's cookie file. (See CookieAuthentication above.) + +**CookieAuthFileGroupReadable** **0**|**1**|__Groupname__:: + If this option is set to 0, don't allow the filesystem group to read the + cookie file. If the option is set to 1, make the cookie file readable by + the default GID. [Making the file readable by other groups is not yet + implemented; let us know if you need this for some reason.] (Default: 0). + +**ControlPortWriteToFile** __Path__:: + If set, Tor writes the address and port of any control port it opens to + this address. Usable by controllers to learn the actual control port + when ControlPort is set to "auto". + +**ControlPortFileGroupReadable** **0**|**1**:: + If this option is set to 0, don't allow the filesystem group to read the + control port file. If the option is set to 1, make the control port + file readable by the default GID. (Default: 0). + +**DataDirectory** __DIR__:: + Store working data in DIR (Default: @LOCALSTATEDIR@/lib/tor) + +**DirServer** [__nickname__] [**flags**] __address__:__port__ __fingerprint__:: + Use a nonstandard authoritative directory server at the provided address + and port, with the specified key fingerprint. This option can be repeated + many times, for multiple authoritative directory servers. Flags are + separated by spaces, and determine what kind of an authority this directory + is. By default, every authority is authoritative for current ("v2")-style + directories, unless the "no-v2" flag is given. If the "v1" flags is + provided, Tor will use this server as an authority for old-style (v1) + directories as well. (Only directory mirrors care about this.) Tor will + use this server as an authority for hidden service information if the "hs" + flag is set, or if the "v1" flag is set and the "no-hs" flag is **not** set. + Tor will use this authority as a bridge authoritative directory if the + "bridge" flag is set. If a flag "orport=**port**" is given, Tor will use the + given port when opening encrypted tunnels to the dirserver. Lastly, if a + flag "v3ident=**fp**" is given, the dirserver is a v3 directory authority + whose v3 long-term signing key has the fingerprint **fp**. + + + + If no **dirserver** line is given, Tor will use the default directory + servers. NOTE: this option is intended for setting up a private Tor + network with its own directory authorities. If you use it, you will be + distinguishable from other users, because you won't believe the same + authorities they do. + +**AlternateDirAuthority** [__nickname__] [**flags**] __address__:__port__ __fingerprint__ + + +**AlternateHSAuthority** [__nickname__] [**flags**] __address__:__port__ __fingerprint__ + + +**AlternateBridgeAuthority** [__nickname__] [**flags**] __address__:__port__ __ fingerprint__:: + As DirServer, but replaces less of the default directory authorities. Using + AlternateDirAuthority replaces the default Tor directory authorities, but + leaves the hidden service authorities and bridge authorities in place. + Similarly, Using AlternateHSAuthority replaces the default hidden service + authorities, but not the directory or bridge authorities. + +**DisableAllSwap** **0**|**1**:: + If set to 1, Tor will attempt to lock all current and future memory pages, + so that memory cannot be paged out. Windows, OS X and Solaris are currently + not supported. We believe that this feature works on modern Gnu/Linux + distributions, and that it should work on *BSD systems (untested). This + option requires that you start your Tor as root, and you should use the + **User** option to properly reduce Tor's privileges. (Default: 0) + +**FetchDirInfoEarly** **0**|**1**:: + If set to 1, Tor will always fetch directory information like other + directory caches, even if you don't meet the normal criteria for fetching + early. Normal users should leave it off. (Default: 0) + +**FetchDirInfoExtraEarly** **0**|**1**:: + If set to 1, Tor will fetch directory information before other directory + caches. It will attempt to download directory information closer to the + start of the consensus period. Normal users should leave it off. + (Default: 0) + +**FetchHidServDescriptors** **0**|**1**:: + If set to 0, Tor will never fetch any hidden service descriptors from the + rendezvous directories. This option is only useful if you're using a Tor + controller that handles hidden service fetches for you. (Default: 1) + +**FetchServerDescriptors** **0**|**1**:: + If set to 0, Tor will never fetch any network status summaries or server + descriptors from the directory servers. This option is only useful if + you're using a Tor controller that handles directory fetches for you. + (Default: 1) + +**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) + +**HTTPProxy** __host__[:__port__]:: + Tor will make all its directory requests through this host:port (or host:80 + if port is not specified), rather than connecting directly to any directory + servers. + +**HTTPProxyAuthenticator** __username:password__:: + If defined, Tor will use this username:password for Basic HTTP proxy + authentication, as in RFC 2617. This is currently the only form of HTTP + proxy authentication that Tor supports; feel free to submit a patch if you + want it to support others. + +**HTTPSProxy** __host__[:__port__]:: + Tor will make all its OR (SSL) connections through this host:port (or + host:443 if port is not specified), via HTTP CONNECT rather than connecting + directly to servers. You may want to set **FascistFirewall** to restrict + the set of ports you might try to connect to, if your HTTPS proxy only + allows connecting to certain ports. + +**HTTPSProxyAuthenticator** __username:password__:: + If defined, Tor will use this username:password for Basic HTTPS proxy + authentication, as in RFC 2617. This is currently the only form of HTTPS + proxy authentication that Tor supports; feel free to submit a patch if you + want it to support others. + +**Socks4Proxy** __host__[:__port__]:: + Tor will make all OR connections through the SOCKS 4 proxy at host:port + (or host:1080 if port is not specified). + +**Socks5Proxy** __host__[:__port__]:: + Tor will make all OR connections through the SOCKS 5 proxy at host:port + (or host:1080 if port is not specified). + +**Socks5ProxyUsername** __username__ + + +**Socks5ProxyPassword** __password__:: + If defined, authenticate to the SOCKS 5 server using username and password + in accordance to RFC 1929. Both username and password must be between 1 and + 255 characters. + +**KeepalivePeriod** __NUM__:: + To keep firewalls from expiring connections, send a padding keepalive cell + every NUM seconds on open connections that are in use. If the connection + has no open circuits, it will instead be closed after NUM seconds of + idleness. (Default: 5 minutes) + +**Log** __minSeverity__[-__maxSeverity__] **stderr**|**stdout**|**syslog**:: + Send all messages between __minSeverity__ and __maxSeverity__ to the standard + output stream, the standard error stream, or to the system log. (The + "syslog" value is only supported on Unix.) Recognized severity levels are + debug, info, notice, warn, and err. We advise using "notice" in most cases, + since anything more verbose may provide sensitive information to an + attacker who obtains the logs. If only one severity level is given, all + messages of that level or higher will be sent to the listed destination. + +**Log** __minSeverity__[-__maxSeverity__] **file** __FILENAME__:: + As above, but send log messages to the listed filename. The + "Log" option may appear more than once in a configuration file. + Messages are sent to all the logs that match their severity + level. + +**Log** **[**__domain__,...**]**__minSeverity__[-__maxSeverity__] ... **file** __FILENAME__ + + +**Log** **[**__domain__,...**]**__minSeverity__[-__maxSeverity__] ... **stderr**|**stdout**|**syslog**:: + As above, but select messages by range of log severity __and__ by a + set of "logging domains". Each logging domain corresponds to an area of + functionality inside Tor. You can specify any number of severity ranges + for a single log statement, each of them prefixed by a comma-separated + list of logging domains. You can prefix a domain with $$~$$ to indicate + negation, and use * to indicate "all domains". If you specify a severity + range without a list of domains, it matches all domains. + + + + This is an advanced feature which is most useful for debugging one or two + of Tor's subsystems at a time. + + + + The currently recognized domains are: general, crypto, net, config, fs, + protocol, mm, http, app, control, circ, rend, bug, dir, dirserv, or, edge, + acct, hist, and handshake. Domain names are case-insensitive. + + + + For example, "`Log [handshake]debug [~net,~mm]info notice stdout`" sends + to stdout: all handshake messages of any severity, all info-and-higher + messages from domains other than networking and memory management, and all + messages of severity notice or higher. + +**LogMessageDomains** **0**|**1**:: + If 1, Tor includes message domains with each log message. Every log + message currently has at least one domain; most currently have exactly + one. This doesn't affect controller log messages. (Default: 0) + +**OutboundBindAddress** __IP__:: + Make all outbound connections originate from the IP address specified. This + is only useful when you have multiple network interfaces, and you want all + of Tor's outgoing connections to use a single one. This setting will be + ignored for connections to the loopback addresses (127.0.0.0/8 and ::1). + +**PidFile** __FILE__:: + On startup, write our PID to FILE. On clean shutdown, remove + FILE. + +**ProtocolWarnings** **0**|**1**:: + If 1, Tor will log with severity \'warn' various cases of other parties not + following the Tor specification. Otherwise, they are logged with severity + \'info'. (Default: 0) + +**RunAsDaemon** **0**|**1**:: + If 1, Tor forks and daemonizes to the background. This option has no effect + on Windows; instead you should use the --service command-line option. + (Default: 0) + + +**SafeLogging** **0**|**1**|**relay**:: + Tor can scrub potentially sensitive strings from log messages (e.g. + addresses) by replacing them with the string [scrubbed]. This way logs can + still be useful, but they don't leave behind personally identifying + information about what sites a user might have visited. + + + + If this option is set to 0, Tor will not perform any scrubbing, if it is + set to 1, all potentially sensitive strings are replaced. If it is set to + relay, all log messages generated when acting as a relay are sanitized, but + all messages generated when acting as a client are not. (Default: 1) + +**User** __UID__:: + On startup, setuid to this user and setgid to their primary group. + +**HardwareAccel** **0**|**1**:: + If non-zero, try to use built-in (static) crypto hardware acceleration when + available. (Default: 0) + +**AccelName** __NAME__:: + When using OpenSSL hardware crypto acceleration attempt to load the dynamic + engine of this name. This must be used for any dynamic hardware engine. + Names can be verified with the openssl engine command. + +**AccelDir** __DIR__:: + Specify this option if using dynamic hardware acceleration and the engine + implementation library resides somewhere other than the OpenSSL default. + +**AvoidDiskWrites** **0**|**1**:: + If non-zero, try to write to disk less frequently than we would otherwise. + This is useful when running on flash memory or other media that support + only a limited number of writes. (Default: 0) + +**TunnelDirConns** **0**|**1**:: + If non-zero, when a directory server we contact supports it, we will build + a one-hop circuit and make an encrypted connection via its ORPort. + (Default: 1) + +**PreferTunneledDirConns** **0**|**1**:: + If non-zero, we will avoid directory servers that don't support tunneled + directory connections, when possible. (Default: 1) + +**CircuitPriorityHalflife** __NUM1__:: + If this value is set, we override the default algorithm for choosing which + circuit's cell to deliver or relay next. When the value is 0, we + round-robin between the active circuits on a connection, delivering one + cell from each in turn. When the value is positive, we prefer delivering + cells from whichever connection has the lowest weighted cell count, where + cells are weighted exponentially according to the supplied + CircuitPriorityHalflife value (in seconds). If this option is not set at + all, we use the behavior recommended in the current consensus + networkstatus. This is an advanced option; you generally shouldn't have + to mess with it. (Default: not set.) + +CLIENT OPTIONS +-------------- + +The following options are useful only for clients (that is, if +**SocksPort** is non-zero): + +**AllowInvalidNodes** **entry**|**exit**|**middle**|**introduction**|**rendezvous**|**...**:: + If some Tor servers are obviously not working right, the directory + authorities can manually mark them as invalid, meaning that it's not + recommended you use them for entry or exit positions in your circuits. You + can opt to use them in some circuit positions, though. The default is + "middle,rendezvous", and other choices are not advised. + +**ExcludeSingleHopRelays** **0**|**1**:: + This option controls whether circuits built by Tor will include relays with + the AllowSingleHopExits flag set to true. If ExcludeSingleHopRelays is set + to 0, these relays will be included. Note that these relays might be at + higher risk of being seized or observed, so they are not normally + included. Also note that relatively few clients turn off this option, + so using these relays might make your client stand out. + (Default: 1) + +**Bridge** __IP__:__ORPort__ [fingerprint]:: + When set along with UseBridges, instructs Tor to use the relay at + "IP:ORPort" as a "bridge" relaying into the Tor network. If "fingerprint" + is provided (using the same format as for DirServer), we will verify that + the relay running at that location has the right fingerprint. We also use + fingerprint to look up the bridge descriptor at the bridge authority, if + it's provided and if UpdateBridgesFromAuthority is set too. + +**LearnCircuitBuildTimeout** **0**|**1**:: + If 0, CircuitBuildTimeout adaptive learning is disabled. (Default: 1) + +**CircuitBuildTimeout** __NUM__:: + + Try for at most NUM seconds when building circuits. If the circuit isn't + open in that time, give up on it. If LearnCircuitBuildTimeout is 1, this + value serves as the initial value to use before a timeout is learned. If + LearnCircuitBuildTimeout is 0, this value is the only value used. + (Default: 60 seconds.) + +**CircuitIdleTimeout** __NUM__:: + If we have kept a clean (never used) circuit around for NUM seconds, then + close it. This way when the Tor client is entirely idle, it can expire all + of its circuits, and then expire its TLS connections. Also, if we end up + making a circuit that is not useful for exiting any of the requests we're + receiving, it won't forever take up a slot in the circuit list. (Default: 1 + hour.) + +**CircuitStreamTimeout** __NUM__:: + If non-zero, this option overrides our internal timeout schedule for how + many seconds until we detach a stream from a circuit and try a new circuit. + If your network is particularly slow, you might want to set this to a + number like 60. (Default: 0) + +**ClientOnly** **0**|**1**:: + If set to 1, Tor will under no circumstances run as a server or serve + directory requests. The default is to run as a client unless ORPort is + configured. (Usually, you don't need to set this; Tor is pretty smart at + figuring out whether you are reliable and high-bandwidth enough to be a + useful server.) (Default: 0) + +**ExcludeNodes** __node__,__node__,__...__:: + A list of identity fingerprints, nicknames, country codes and address + patterns of nodes to avoid when building a circuit. + (Example: + ExcludeNodes SlowServer, ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, \{cc}, 255.254.0.0/8) + + + + By default, this option is treated as a preference that Tor is allowed + to override in order to keep working. + For example, if you try to connect to a hidden service, + but you have excluded all of the hidden service's introduction points, + Tor will connect to one of them anyway. If you do not want this + behavior, set the StrictNodes option (documented below). + + + + Note also that if you are a relay, this (and the other node selection + options below) only affects your own circuits that Tor builds for you. + Clients can still build circuits through you to any node. Controllers + can tell Tor to build circuits through any node. + + +**ExcludeExitNodes** __node__,__node__,__...__:: + A list of identity fingerprints, nicknames, country codes and address + patterns of nodes to never use when picking an exit node---that is, a + node that delivers traffic for you outside the Tor network. Note that any + node listed in ExcludeNodes is automatically considered to be part of this + list too. See also the caveats on the "ExitNodes" option below. + + +**ExitNodes** __node__,__node__,__...__:: + A list of identity fingerprints, nicknames, country codes and address + patterns of nodes to use as exit node---that is, a + node that delivers traffic for you outside the Tor network. + + + + Note that if you list too few nodes here, or if you exclude too many exit + nodes with ExcludeExitNodes, you can degrade functionality. For example, + if none of the exits you list allows traffic on port 80 or 443, you won't + be able to browse the web. + + + + Note also that not every circuit is used to deliver traffic outside of + the Tor network. It is normal to see non-exit circuits (such as those + used to connect to hidden services, those that do directory fetches, + those used for relay reachability self-tests, and so on) that end + at a non-exit node. To + keep a node from being used entirely, see ExcludeNodes and StrictNodes. + + + + The ExcludeNodes option overrides this option: any node listed in both + ExitNodes and ExcludeNodes is treated as excluded. + + + + The .exit address notation, if enabled via AllowDotExit, overrides + this option. + +**EntryNodes** __node__,__node__,__...__:: + A list of identity fingerprints and nicknames of nodes + to use for the first hop in your normal circuits. (Country codes and + address patterns are not yet supported.) Normal circuits include all + circuits except for direct connections to directory servers. The Bridge + option overrides this option; if you have configured bridges and + UseBridges is 1, the Bridges are used as your entry nodes. + + + + The ExcludeNodes option overrides this option: any node listed in both + EntryNodes and ExcludeNodes is treated as excluded. + +**StrictNodes** **0**|**1**:: + If StrictNodes is set to 1, Tor will treat the ExcludeNodes option as a + requirement to follow for all the circuits you generate, even if doing so + will break functionality for you. If StrictNodes is set to 0, Tor will + still try to avoid nodes in the ExcludeNodes list, but it will err on the + side of avoiding unexpected errors. Specifically, StrictNodes 0 tells + Tor that it is okay to use an excluded node when it is *necessary* to + perform relay reachability self-tests, connect to + a hidden service, provide a hidden service to a client, fulfill a .exit + request, upload directory information, or download directory information. + (Default: 0) + +**FascistFirewall** **0**|**1**:: + If 1, Tor will only create outgoing connections to ORs running on ports + that your firewall allows (defaults to 80 and 443; see **FirewallPorts**). + This will allow you to run Tor as a client behind a firewall with + restrictive policies, but will not allow you to run as a server behind such + a firewall. If you prefer more fine-grained control, use + ReachableAddresses instead. + +**FirewallPorts** __PORTS__:: + A list of ports that your firewall allows you to connect to. Only used when + **FascistFirewall** is set. This option is deprecated; use ReachableAddresses + instead. (Default: 80, 443) + +**HidServAuth** __onion-address__ __auth-cookie__ [__service-name__]:: + Client authorization for a hidden service. Valid onion addresses contain 16 + characters in a-z2-7 plus ".onion", and valid auth cookies contain 22 + characters in A-Za-z0-9+/. The service name is only used for internal + purposes, e.g., for Tor controllers. This option may be used multiple times + for different hidden services. If a hidden service uses authorization and + this option is not set, the hidden service is not accessible. Hidden + services can be configured to require authorization using the + **HiddenServiceAuthorizeClient** option. + +**ReachableAddresses** __ADDR__[/__MASK__][:__PORT__]...:: + A comma-separated list of IP addresses and ports that your firewall allows + you to connect to. The format is as for the addresses in ExitPolicy, except + that "accept" is understood unless "reject" is explicitly provided. For + example, \'ReachableAddresses 99.0.0.0/8, reject 18.0.0.0/8:80, accept + \*:80' means that your firewall allows connections to everything inside net + 99, rejects port 80 connections to net 18, and accepts connections to port + 80 otherwise. (Default: \'accept \*:*'.) + +**ReachableDirAddresses** __ADDR__[/__MASK__][:__PORT__]...:: + Like **ReachableAddresses**, a list of addresses and ports. Tor will obey + these restrictions when fetching directory information, using standard HTTP + GET requests. If not set explicitly then the value of + **ReachableAddresses** is used. If **HTTPProxy** is set then these + connections will go through that proxy. + +**ReachableORAddresses** __ADDR__[/__MASK__][:__PORT__]...:: + Like **ReachableAddresses**, a list of addresses and ports. Tor will obey + these restrictions when connecting to Onion Routers, using TLS/SSL. If not + set explicitly then the value of **ReachableAddresses** is used. If + **HTTPSProxy** is set then these connections will go through that proxy. + + + + The separation between **ReachableORAddresses** and + **ReachableDirAddresses** is only interesting when you are connecting + through proxies (see **HTTPProxy** and **HTTPSProxy**). Most proxies limit + TLS connections (which Tor uses to connect to Onion Routers) to port 443, + and some limit HTTP GET requests (which Tor uses for fetching directory + information) to port 80. + +**LongLivedPorts** __PORTS__:: + A list of ports for services that tend to have long-running connections + (e.g. chat and interactive shells). Circuits for streams that use these + ports will contain only high-uptime nodes, to reduce the chance that a node + will go down before the stream is finished. (Default: 21, 22, 706, 1863, + 5050, 5190, 5222, 5223, 6667, 6697, 8300) + +**MapAddress** __address__ __newaddress__:: + When a request for address arrives to Tor, it will rewrite it to newaddress + before processing it. For example, if you always want connections to + www.indymedia.org to exit via __torserver__ (where __torserver__ is the + nickname of the server), use "MapAddress www.indymedia.org + www.indymedia.org.torserver.exit". + +**NewCircuitPeriod** __NUM__:: + Every NUM seconds consider whether to build a new circuit. (Default: 30 + seconds) + +**MaxCircuitDirtiness** __NUM__:: + Feel free to reuse a circuit that was first used at most NUM seconds ago, + but never attach a new stream to a circuit that is too old. (Default: 10 + minutes) + +**NodeFamily** __node__,__node__,__...__:: + The Tor servers, defined by their identity fingerprints or nicknames, + constitute a "family" of similar or co-administered servers, so never use + any two of them in the same circuit. Defining a NodeFamily is only needed + when a server doesn't list the family itself (with MyFamily). This option + can be used multiple times. + +**EnforceDistinctSubnets** **0**|**1**:: + If 1, Tor will not put two servers whose IP addresses are "too close" on + the same circuit. Currently, two addresses are "too close" if they lie in + the same /16 range. (Default: 1) + +**SocksPort** __PORT__|**auto**:: + Advertise this port to listen for connections from Socks-speaking + applications. Set this to 0 if you don't want to allow application + connections via SOCKS. Set it to "auto" to have Tor pick a port for + you. (Default: 9050) + +**SocksListenAddress** __IP__[:__PORT__]:: + Bind to this address to listen for connections from Socks-speaking + applications. (Default: 127.0.0.1) You can also specify a port (e.g. + 192.168.0.1:9100). This directive can be specified multiple times to bind + to multiple addresses/ports. + +**SocksPolicy** __policy__,__policy__,__...__:: + Set an entrance policy for this server, to limit who can connect to the + SocksPort and DNSPort ports. The policies have the same form as exit + policies below. + +**SocksTimeout** __NUM__:: + Let a socks connection wait NUM seconds handshaking, and NUM seconds + unattached waiting for an appropriate circuit, before we fail it. (Default: + 2 minutes.) + +**TrackHostExits** __host__,__.domain__,__...__:: + For each value in the comma separated list, Tor will track recent + connections to hosts that match this value and attempt to reuse the same + exit node for each. If the value is prepended with a \'.\', it is treated as + matching an entire domain. If one of the values is just a \'.', it means + match everything. This option is useful if you frequently connect to sites + that will expire all your authentication cookies (i.e. log you out) if + your IP address changes. Note that this option does have the disadvantage + of making it more clear that a given history is associated with a single + user. However, most people who would wish to observe this will observe it + through cookies or other protocol-specific means anyhow. + +**TrackHostExitsExpire** __NUM__:: + Since exit servers go up and down, it is desirable to expire the + association between host and exit server after NUM seconds. The default is + 1800 seconds (30 minutes). + +**UpdateBridgesFromAuthority** **0**|**1**:: + When set (along with UseBridges), Tor will try to fetch bridge descriptors + from the configured bridge authorities when feasible. It will fall back to + a direct request if the authority responds with a 404. (Default: 0) + +**UseBridges** **0**|**1**:: + When set, Tor will fetch descriptors for each bridge listed in the "Bridge" + config lines, and use these relays as both entry guards and directory + guards. (Default: 0) + +**UseEntryGuards** **0**|**1**:: + If this option is set to 1, we pick a few long-term entry servers, and try + to stick with them. This is desirable because constantly changing servers + increases the odds that an adversary who owns some servers will observe a + fraction of your paths. (Defaults to 1.) + +**NumEntryGuards** __NUM__:: + If UseEntryGuards is set to 1, we will try to pick a total of NUM routers + as long-term entries for our circuits. (Defaults to 3.) + +**SafeSocks** **0**|**1**:: + When this option is enabled, Tor will reject application connections that + use unsafe variants of the socks protocol -- ones that only provide an IP + address, meaning the application is doing a DNS resolve first. + Specifically, these are socks4 and socks5 when not doing remote DNS. + (Defaults to 0.) + +**TestSocks** **0**|**1**:: + When this option is enabled, Tor will make a notice-level log entry for + each connection to the Socks port indicating whether the request used a + safe socks protocol or an unsafe one (see above entry on SafeSocks). This + helps to determine whether an application using Tor is possibly leaking + DNS requests. (Default: 0) + +**WarnUnsafeSocks** **0**|**1**:: + When this option is enabled, Tor will warn whenever a request is + received that only contains an IP address instead of a hostname. Allowing + applications to do DNS resolves themselves is usually a bad idea and + can leak your location to attackers. (Default: 1) + +**VirtualAddrNetwork** __Address__/__bits__:: + When Tor needs to assign a virtual (unused) address because of a MAPADDRESS + command from the controller or the AutomapHostsOnResolve feature, Tor + picks an unassigned address from this range. (Default: + 127.192.0.0/10) + + + + When providing proxy server service to a network of computers using a tool + like dns-proxy-tor, change this address to "10.192.0.0/10" or + "172.16.0.0/12". The default **VirtualAddrNetwork** address range on a + properly configured machine will route to the loopback interface. For + local use, no change to the default VirtualAddrNetwork setting is needed. + +**AllowNonRFC953Hostnames** **0**|**1**:: + When this option is disabled, Tor blocks hostnames containing illegal + characters (like @ and :) rather than sending them to an exit node to be + resolved. This helps trap accidental attempts to resolve URLs and so on. + (Default: 0) + +**AllowDotExit** **0**|**1**:: + If enabled, we convert "www.google.com.foo.exit" addresses on the + SocksPort/TransPort/NATDPort into "www.google.com" addresses that exit from + the node "foo". Disabled by default since attacking websites and exit + relays can use it to manipulate your path selection. (Default: 0) + +**FastFirstHopPK** **0**|**1**:: + When this option is disabled, Tor uses the public key step for the first + hop of creating circuits. Skipping it is generally safe since we have + already used TLS to authenticate the relay and to establish forward-secure + keys. Turning this option off makes circuit building slower. + + + + Note that Tor will always use the public key step for the first hop if it's + operating as a relay, and it will never use the public key step if it + doesn't yet know the onion key of the first hop. (Default: 1) + +**TransPort** __PORT__|**auto**:: + If non-zero, enables transparent proxy support on __PORT__ (by convention, + 9040). Requires OS support for transparent proxies, such as BSDs' pf or + Linux's IPTables. If you're planning to use Tor as a transparent proxy for + a network, you'll want to examine and change VirtualAddrNetwork from the + default setting. You'll also want to set the TransListenAddress option for + the network you'd like to proxy. Set it to "auto" to have Tor pick a + port for you. (Default: 0). + +**TransListenAddress** __IP__[:__PORT__]:: + Bind to this address to listen for transparent proxy connections. (Default: + 127.0.0.1). This is useful for exporting a transparent proxy server to an + entire network. + +**NATDPort** __PORT__|**auto**:: + Allow old versions of ipfw (as included in old versions of FreeBSD, etc.) + to send connections through Tor using the NATD protocol. This option is + only for people who cannot use TransPort. Set it to "auto" to have Tor + pick a port for you. (Default: 0) + +**NATDListenAddress** __IP__[:__PORT__]:: + Bind to this address to listen for NATD connections. (Default: 127.0.0.1). + +**AutomapHostsOnResolve** **0**|**1**:: + When this option is enabled, and we get a request to resolve an address + that ends with one of the suffixes in **AutomapHostsSuffixes**, we map an + unused virtual address to that address, and return the new virtual address. + This is handy for making ".onion" addresses work with applications that + resolve an address and then connect to it. (Default: 0). + +**AutomapHostsSuffixes** __SUFFIX__,__SUFFIX__,__...__:: + A comma-separated list of suffixes to use with **AutomapHostsOnResolve**. + The "." suffix is equivalent to "all addresses." (Default: .exit,.onion). + +**DNSPort** __PORT__|**auto**:: + If non-zero, Tor listens for UDP DNS requests on this port and resolves + them anonymously. Set it to "auto" to have Tor pick a port for + you. (Default: 0). + +**DNSListenAddress** __IP__[:__PORT__]:: + Bind to this address to listen for DNS connections. (Default: 127.0.0.1). + +**ClientDNSRejectInternalAddresses** **0**|**1**:: + If true, Tor does not believe any anonymously retrieved DNS answer that + tells it that an address resolves to an internal address (like 127.0.0.1 or + 192.168.0.1). This option prevents certain browser-based attacks; don't + turn it off unless you know what you're doing. (Default: 1). + +**ClientRejectInternalAddresses** **0**|**1**:: + 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). + +**DownloadExtraInfo** **0**|**1**:: + If true, Tor downloads and caches "extra-info" documents. These documents + contain information about servers other than the information in their + regular router descriptors. Tor does not use this information for anything + itself; to save bandwidth, leave this option turned off. (Default: 0). + +**FallbackNetworkstatusFile** __FILENAME__:: + If Tor doesn't have a cached networkstatus file, it starts out using this + one instead. Even if this file is out of date, Tor can still use it to + learn about directory mirrors, so it doesn't need to put load on the + authorities. (Default: None). + +**WarnPlaintextPorts** __port__,__port__,__...__:: + Tells Tor to issue a warnings whenever the user tries to make an anonymous + connection to one of these ports. This option is designed to alert users + to services that risk sending passwords in the clear. (Default: + 23,109,110,143). + +**RejectPlaintextPorts** __port__,__port__,__...__:: + Like WarnPlaintextPorts, but instead of warning about risky port uses, Tor + will instead refuse to make the connection. (Default: None). + +**AllowSingleHopCircuits** **0**|**1**:: + When this option is set, the attached Tor controller can use relays + that have the **AllowSingleHopExits** option turned on to build + one-hop Tor connections. (Default: 0) + +SERVER OPTIONS +-------------- + +The following options are useful only for servers (that is, if ORPort +is non-zero): + +**Address** __address__:: + The IP address or fully qualified domain name of this server (e.g. + moria.mit.edu). You can leave this unset, and Tor will guess your IP + address. This IP address is the one used to tell clients and other + servers where to find your Tor server; it doesn't affect the IP that your + Tor client binds to. To bind to a different address, use the + *ListenAddress and OutboundBindAddress options. + +**AllowSingleHopExits** **0**|**1**:: + This option controls whether clients can use this server as a single hop + proxy. If set to 1, clients can use this server as an exit even if it is + the only hop in the circuit. Note that most clients will refuse to use + servers that set this option, since most clients have + ExcludeSingleHopRelays set. (Default: 0) + +**AssumeReachable** **0**|**1**:: + This option is used when bootstrapping a new Tor network. If set to 1, + don't do self-reachability testing; just upload your server descriptor + immediately. If **AuthoritativeDirectory** is also set, this option + instructs the dirserver to bypass remote reachability testing too and list + all connected servers as running. + +**BridgeRelay** **0**|**1**:: + Sets the relay to act as a "bridge" with respect to relaying connections + from bridge users to the Tor network. It mainly causes Tor to publish a + server descriptor to the bridge database, rather than publishing a relay + descriptor to the public directory authorities. + +**ContactInfo** __email_address__:: + Administrative contact information for server. This line might get picked + up by spam harvesters, so you may want to obscure the fact that it's an + email address. + +**ExitPolicy** __policy__,__policy__,__...__:: + Set an exit policy for this server. Each policy is of the form + "**accept**|**reject** __ADDR__[/__MASK__][:__PORT__]". If /__MASK__ is + omitted then this policy just applies to the host given. Instead of giving + a host or network you can also use "\*" to denote the universe (0.0.0.0/0). + __PORT__ can be a single port number, an interval of ports + "__FROM_PORT__-__TO_PORT__", or "\*". If __PORT__ is omitted, that means + "\*". + + + + For example, "accept 18.7.22.69:\*,reject 18.0.0.0/8:\*,accept \*:\*" would + reject any traffic destined for MIT except for web.mit.edu, and accept + anything else. + + + + To specify all internal and link-local networks (including 0.0.0.0/8, + 169.254.0.0/16, 127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8, and + 172.16.0.0/12), you can use the "private" alias instead of an address. + These addresses are rejected by default (at the beginning of your exit + policy), along with your public IP address, unless you set the + ExitPolicyRejectPrivate config option to 0. For example, once you've done + that, you could allow HTTP to 127.0.0.1 and block all other connections to + internal networks with "accept 127.0.0.1:80,reject private:\*", though that + may also allow connections to your own computer that are addressed to its + public (external) IP address. See RFC 1918 and RFC 3330 for more details + about internal and reserved IP address space. + + + + This directive can be specified multiple times so you don't have to put it + all on one line. + + + + Policies are considered first to last, and the first match wins. If you + want to \_replace_ the default exit policy, end your exit policy with + either a reject \*:* or an accept \*:*. Otherwise, you're \_augmenting_ + (prepending to) the default exit policy. The default exit policy is: + + + reject *:25 + reject *:119 + reject *:135-139 + reject *:445 + reject *:563 + reject *:1214 + reject *:4661-4666 + reject *:6346-6429 + reject *:6699 + reject *:6881-6999 + accept *:* + +**ExitPolicyRejectPrivate** **0**|**1**:: + Reject all private (local) networks, along with your own public IP address, + at the beginning of your exit policy. See above entry on ExitPolicy. + (Default: 1) + +**MaxOnionsPending** __NUM__:: + If you have more than this number of onionskins queued for decrypt, reject + new ones. (Default: 100) + +**MyFamily** __node__,__node__,__...__:: + Declare that this Tor server is controlled or administered by a group or + organization identical or similar to that of the other servers, defined by + their identity fingerprints or nicknames. When two servers both declare + that they are in the same \'family', Tor clients will not use them in the + same circuit. (Each server only needs to list the other servers in its + family; it doesn't need to list itself, but it won't hurt.) + +**Nickname** __name__:: + Set the server's nickname to \'name'. Nicknames must be between 1 and 19 + characters inclusive, and must contain only the characters [a-zA-Z0-9]. + +**NumCPUs** __num__:: + How many processes to use at once for decrypting onionskins. (Default: 1) + +**ORPort** __PORT__|**auto**:: + Advertise this port to listen for connections from Tor clients and + servers. This option is required to be a Tor server. + Set it to "auto" to have Tor pick a port for you. (Default: 0). + +**ORListenAddress** __IP__[:__PORT__]:: + Bind to this IP address to listen for connections from Tor clients and + servers. If you specify a port, bind to this port rather than the one + specified in ORPort. (Default: 0.0.0.0) This directive can be specified + multiple times to bind to multiple addresses/ports. + +**PublishServerDescriptor** **0**|**1**|**v1**|**v2**|**v3**|**bridge**,**...**:: + This option specifies which descriptors Tor will publish when acting as + a relay. You can + choose multiple arguments, separated by commas. + + + If this option is set to 0, Tor will not publish its + descriptors to any directories. (This is useful if you're testing + out your server, or if you're using a Tor controller that handles directory + publishing for you.) Otherwise, Tor will publish its descriptors of all + type(s) specified. The default is "1", + which means "if running as a server, publish the + appropriate descriptors to the authorities". + +**ShutdownWaitLength** __NUM__:: + When we get a SIGINT and we're a server, we begin shutting down: + we close listeners and start refusing new circuits. After **NUM** + seconds, we exit. If we get a second SIGINT, we exit immedi- + ately. (Default: 30 seconds) + + +**AccountingMax** __N__ **bytes**|**KB**|**MB**|**GB**|**TB**:: + Never send more than the specified number of bytes in a given accounting + period, or receive more than that number in the period. For example, with + AccountingMax set to 1 GB, a server could send 900 MB and receive 800 MB + and continue running. It will only hibernate once one of the two reaches 1 + GB. When the number of bytes gets low, Tor will stop accepting new + connections and circuits. When the number of bytes + is exhausted, Tor will hibernate until some + time in the next accounting period. To prevent all servers from waking at + the same time, Tor will also wait until a random point in each period + before waking up. If you have bandwidth cost issues, enabling hibernation + is preferable to setting a low bandwidth, since it provides users with a + collection of fast servers that are up some of the time, which is more + useful than a set of slow servers that are always "available". + +**AccountingStart** **day**|**week**|**month** [__day__] __HH:MM__:: + Specify how long accounting periods last. If **month** is given, each + accounting period runs from the time __HH:MM__ on the __dayth__ day of one + month to the same day and time of the next. (The day must be between 1 and + 28.) If **week** is given, each accounting period runs from the time __HH:MM__ + of the __dayth__ day of one week to the same day and time of the next week, + with Monday as day 1 and Sunday as day 7. If **day** is given, each + accounting period runs from the time __HH:MM__ each day to the same time on + the next day. All times are local, and given in 24-hour time. (Defaults to + "month 1 0:00".) + +**RefuseUnknownExits** **0**|**1**|**auto**:: + Prevent nodes that don't appear in the consensus from exiting using this + relay. If the option is 1, we always block exit attempts from such + nodes; if it's 0, we never do, and if the option is "auto", then we do + whatever the authorities suggest in the consensus. (Defaults to auto.) + +**ServerDNSResolvConfFile** __filename__:: + Overrides the default DNS configuration with the configuration in + __filename__. The file format is the same as the standard Unix + "**resolv.conf**" file (7). This option, like all other ServerDNS options, + only affects name lookups that your server does on behalf of clients. + (Defaults to use the system DNS configuration.) + +**ServerDNSAllowBrokenConfig** **0**|**1**:: + If this option is false, Tor exits immediately if there are problems + parsing the system DNS configuration or connecting to nameservers. + Otherwise, Tor continues to periodically retry the system nameservers until + it eventually succeeds. (Defaults to "1".) + +**ServerDNSSearchDomains** **0**|**1**:: + If set to 1, then we will search for addresses in the local search domain. + For example, if this system is configured to believe it is in + "example.com", and a client tries to connect to "www", the client will be + connected to "www.example.com". This option only affects name lookups that + your server does on behalf of clients. (Defaults to "0".) + +**ServerDNSDetectHijacking** **0**|**1**:: + When this option is set to 1, we will test periodically to determine + whether our local nameservers have been configured to hijack failing DNS + requests (usually to an advertising site). If they are, we will attempt to + correct this. This option only affects name lookups that your server does + on behalf of clients. (Defaults to "1".) + +**ServerDNSTestAddresses** __address__,__address__,__...__:: + When we're detecting DNS hijacking, make sure that these __valid__ addresses + aren't getting redirected. If they are, then our DNS is completely useless, + and we'll reset our exit policy to "reject *:*". This option only affects + name lookups that your server does on behalf of clients. (Defaults to + "www.google.com, www.mit.edu, www.yahoo.com, www.slashdot.org".) + +**ServerDNSAllowNonRFC953Hostnames** **0**|**1**:: + When this option is disabled, Tor does not try to resolve hostnames + containing illegal characters (like @ and :) rather than sending them to an + exit node to be resolved. This helps trap accidental attempts to resolve + URLs and so on. This option only affects name lookups that your server does + on behalf of clients. (Default: 0) + +**BridgeRecordUsageByCountry** **0**|**1**:: + When this option is enabled and BridgeRelay is also enabled, and we have + GeoIP data, Tor keeps a keep a per-country count of how many client + addresses have contacted it so that it can help the bridge authority guess + which countries have blocked access to it. (Default: 1) + +**ServerDNSRandomizeCase** **0**|**1**:: + When this option is set, Tor sets the case of each character randomly in + outgoing DNS requests, and makes sure that the case matches in DNS replies. + This so-called "0x20 hack" helps resist some types of DNS poisoning attack. + For more information, see "Increased DNS Forgery Resistance through + 0x20-Bit Encoding". This option only affects name lookups that your server + does on behalf of clients. (Default: 1) + +**GeoIPFile** __filename__:: + A filename containing GeoIP data, for use with BridgeRecordUsageByCountry. + +**CellStatistics** **0**|**1**:: + When this option is enabled, Tor writes statistics on the mean time that + cells spend in circuit queues to disk every 24 hours. (Default: 0) + +**DirReqStatistics** **0**|**1**:: + When this option is enabled, Tor writes statistics on the number and + response time of network status requests to disk every 24 hours. + (Default: 0) + +**EntryStatistics** **0**|**1**:: + When this option is enabled, Tor writes statistics on the number of + directly connecting clients to disk every 24 hours. (Default: 0) + +**ExitPortStatistics** **0**|**1**:: + When this option is enabled, Tor writes statistics on the number of relayed + bytes and opened stream per exit port to disk every 24 hours. (Default: 0) + +**ExtraInfoStatistics** **0**|**1**:: + When this option is enabled, Tor includes previously gathered statistics in + its extra-info documents that it uploads to the directory authorities. + (Default: 0) + +DIRECTORY SERVER OPTIONS +------------------------ + +The following options are useful only for directory servers (that is, +if DirPort is non-zero): + +**AuthoritativeDirectory** **0**|**1**:: + When this option is set to 1, Tor operates as an authoritative directory + server. Instead of caching the directory, it generates its own list of + good servers, signs it, and sends that to the clients. Unless the clients + already have you listed as a trusted directory, you probably do not want + to set this option. Please coordinate with the other admins at + tor-ops@torproject.org if you think you should be a directory. + +**DirPortFrontPage** __FILENAME__:: + When this option is set, it takes an HTML file and publishes it as "/" on + the DirPort. Now relay operators can provide a disclaimer without needing + to set up a separate webserver. There's a sample disclaimer in + contrib/tor-exit-notice.html. + +**V1AuthoritativeDirectory** **0**|**1**:: + When this option is set in addition to **AuthoritativeDirectory**, Tor + generates version 1 directory and running-routers documents (for legacy + Tor clients up to 0.1.0.x). + +**V2AuthoritativeDirectory** **0**|**1**:: + When this option is set in addition to **AuthoritativeDirectory**, Tor + generates version 2 network statuses and serves descriptors, etc as + described in doc/spec/dir-spec-v2.txt (for Tor clients and servers running + 0.1.1.x and 0.1.2.x). + +**V3AuthoritativeDirectory** **0**|**1**:: + When this option is set in addition to **AuthoritativeDirectory**, Tor + generates version 3 network statuses and serves descriptors, etc as + described in doc/spec/dir-spec.txt (for Tor clients and servers running at + least 0.2.0.x). + +**VersioningAuthoritativeDirectory** **0**|**1**:: + When this option is set to 1, Tor adds information on which versions of + Tor are still believed safe for use to the published directory. Each + version 1 authority is automatically a versioning authority; version 2 + authorities provide this service optionally. See **RecommendedVersions**, + **RecommendedClientVersions**, and **RecommendedServerVersions**. + +**NamingAuthoritativeDirectory** **0**|**1**:: + When this option is set to 1, then the server advertises that it has + opinions about nickname-to-fingerprint bindings. It will include these + opinions in its published network-status pages, by listing servers with + the flag "Named" if a correct binding between that nickname and fingerprint + has been registered with the dirserver. Naming dirservers will refuse to + accept or publish descriptors that contradict a registered binding. See + **approved-routers** in the **FILES** section below. + +**HSAuthoritativeDir** **0**|**1**:: + When this option is set in addition to **AuthoritativeDirectory**, Tor also + accepts and serves v0 hidden service descriptors, + which are produced and used by Tor 0.2.1.x and older. (Default: 0) + +**HidServDirectoryV2** **0**|**1**:: + When this option is set, Tor accepts and serves v2 hidden service + descriptors. Setting DirPort is not required for this, because clients + connect via the ORPort by default. (Default: 1) + +**BridgeAuthoritativeDir** **0**|**1**:: + When this option is set in addition to **AuthoritativeDirectory**, Tor + accepts and serves router descriptors, but it caches and serves the main + networkstatus documents rather than generating its own. (Default: 0) + +**MinUptimeHidServDirectoryV2** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**:: + Minimum uptime of a v2 hidden service directory to be accepted as such by + authoritative directories. (Default: 25 hours) + +**DirPort** __PORT__|**auto**:: + If this option is nonzero, advertise the directory service on this port. + Set it to "auto" to have Tor pick a port for you. (Default: 0) + +**DirListenAddress** __IP__[:__PORT__]:: + Bind the directory service to this address. If you specify a port, bind to + this port rather than the one specified in DirPort. (Default: 0.0.0.0) + This directive can be specified multiple times to bind to multiple + addresses/ports. + +**DirPolicy** __policy__,__policy__,__...__:: + Set an entrance policy for this server, to limit who can connect to the + directory ports. The policies have the same form as exit policies above. + +**FetchV2Networkstatus** **0**|**1**:: + If set, we try to fetch the (obsolete, unused) version 2 network status + consensus documents from the directory authorities. No currently + supported Tor version uses them. (Default: 0.) + + +DIRECTORY AUTHORITY SERVER OPTIONS +---------------------------------- + +**RecommendedVersions** __STRING__:: + STRING is a comma-separated list of Tor versions currently believed to be + safe. The list is included in each directory, and nodes which pull down the + directory learn whether they need to upgrade. This option can appear + multiple times: the values from multiple lines are spliced together. When + this is set then **VersioningAuthoritativeDirectory** should be set too. + +**RecommendedClientVersions** __STRING__:: + STRING is a comma-separated list of Tor versions currently believed to be + safe for clients to use. This information is included in version 2 + directories. If this is not set then the value of **RecommendedVersions** + is used. When this is set then **VersioningAuthoritativeDirectory** should + be set too. + +**RecommendedServerVersions** __STRING__:: + STRING is a comma-separated list of Tor versions currently believed to be + safe for servers to use. This information is included in version 2 + directories. If this is not set then the value of **RecommendedVersions** + is used. When this is set then **VersioningAuthoritativeDirectory** should + be set too. + +**ConsensusParams** __STRING__:: + STRING is a space-separated list of key=value pairs that Tor will include + in the "params" line of its networkstatus vote. + +**DirAllowPrivateAddresses** **0**|**1**:: + If set to 1, Tor will accept router descriptors with arbitrary "Address" + elements. Otherwise, if the address is not an IP address or is a private IP + address, it will reject the router descriptor. Defaults to 0. + +**AuthDirBadDir** __AddressPattern...__:: + Authoritative directories only. A set of address patterns for servers that + will be listed as bad directories in any network status document this + authority publishes, if **AuthDirListBadDirs** is set. + +**AuthDirBadExit** __AddressPattern...__:: + Authoritative directories only. A set of address patterns for servers that + will be listed as bad exits in any network status document this authority + publishes, if **AuthDirListBadExits** is set. + +**AuthDirInvalid** __AddressPattern...__:: + Authoritative directories only. A set of address patterns for servers that + will never be listed as "valid" in any network status document that this + authority publishes. + +**AuthDirReject** __AddressPattern__...:: + Authoritative directories only. A set of address patterns for servers that + will never be listed at all in any network status document that this + authority publishes, or accepted as an OR address in any descriptor + submitted for publication by this authority. + +**AuthDirListBadDirs** **0**|**1**:: + Authoritative directories only. If set to 1, this directory has some + opinion about which nodes are unsuitable as directory caches. (Do not set + this to 1 unless you plan to list non-functioning directories as bad; + otherwise, you are effectively voting in favor of every declared + directory.) + +**AuthDirListBadExits** **0**|**1**:: + Authoritative directories only. If set to 1, this directory has some + opinion about which nodes are unsuitable as exit nodes. (Do not set this to + 1 unless you plan to list non-functioning exits as bad; otherwise, you are + effectively voting in favor of every declared exit as an exit.) + +**AuthDirRejectUnlisted** **0**|**1**:: + Authoritative directories only. If set to 1, the directory server rejects + all uploaded server descriptors that aren't explicitly listed in the + fingerprints file. This acts as a "panic button" if we get hit with a Sybil + attack. (Default: 0) + +**AuthDirMaxServersPerAddr** __NUM__:: + Authoritative directories only. The maximum number of servers that we will + list as acceptable on a single IP address. Set this to "0" for "no limit". + (Default: 2) + +**AuthDirMaxServersPerAuthAddr** __NUM__:: + Authoritative directories only. Like AuthDirMaxServersPerAddr, but applies + to addresses shared with directory authorities. (Default: 5) + +**AuthDirFastGuarantee** __N__ **bytes**|**KB**|**MB**|**GB**:: + Authoritative directories only. If non-zero, always vote the + Fast flag for any relay advertising this amount of capacity or + more. (Default: 20 KB) + +**AuthDirGuardBWGuarantee** __N__ **bytes**|**KB**|**MB**|**GB**:: + Authoritative directories only. If non-zero, this advertised capacity + or more is always sufficient to satisfy the bandwidth requirement + for the Guard flag. (Default: 250 KB) + +**BridgePassword** __Password__:: + If set, contains an HTTP authenticator that tells a bridge authority to + serve all requested bridge information. Used for debugging. (Default: + not set.) + +**V3AuthVotingInterval** __N__ **minutes**|**hours**:: + V3 authoritative directories only. Configures the server's preferred voting + interval. Note that voting will __actually__ happen at an interval chosen + by consensus from all the authorities' preferred intervals. This time + SHOULD divide evenly into a day. (Default: 1 hour) + +**V3AuthVoteDelay** __N__ **minutes**|**hours**:: + V3 authoritative directories only. Configures the server's preferred delay + between publishing its vote and assuming it has all the votes from all the + other authorities. Note that the actual time used is not the server's + preferred time, but the consensus of all preferences. (Default: 5 minutes.) + +**V3AuthDistDelay** __N__ **minutes**|**hours**:: + V3 authoritative directories only. Configures the server's preferred delay + between publishing its consensus and signature and assuming it has all the + signatures from all the other authorities. Note that the actual time used + is not the server's preferred time, but the consensus of all preferences. + (Default: 5 minutes.) + +**V3AuthNIntervalsValid** __NUM__:: + V3 authoritative directories only. Configures the number of VotingIntervals + for which each consensus should be valid for. Choosing high numbers + increases network partitioning risks; choosing low numbers increases + directory traffic. Note that the actual number of intervals used is not the + server's preferred number, but the consensus of all preferences. Must be at + least 2. (Default: 3.) + +**V3BandwidthsFile** __FILENAME__:: + V3 authoritative directories only. Configures the location of the + bandiwdth-authority generated file storing information on relays' measured + bandwidth capacities. (Default: unset.) + +**V3AuthUseLegacyKey** **0**|**1**:: + If set, the directory authority will sign consensuses not only with its + own signing key, but also with a "legacy" key and certificate with a + different identity. This feature is used to migrate directory authority + keys in the event of a compromise. (Default: 0.) + +**RephistTrackTime** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**:: + Tells an authority, or other node tracking node reliability and history, + that fine-grained information about nodes can be discarded when it hasn't + changed for a given amount of time. (Default: 24 hours) + +**VoteOnHidServDirectoriesV2** **0**|**1**:: + When this option is set in addition to **AuthoritativeDirectory**, Tor + votes on whether to accept relays as hidden service directories. + (Default: 1) + +HIDDEN SERVICE OPTIONS +---------------------- + +The following options are used to configure a hidden service. + +**HiddenServiceDir** __DIRECTORY__:: + Store data files for a hidden service in DIRECTORY. Every hidden service + must have a separate directory. You may use this option multiple times to + specify multiple services. DIRECTORY must be an existing directory. + +**HiddenServicePort** __VIRTPORT__ [__TARGET__]:: + Configure a virtual port VIRTPORT for a hidden service. You may use this + option multiple times; each time applies to the service using the most + recent hiddenservicedir. By default, this option maps the virtual port to + the same port on 127.0.0.1. You may override the target port, address, or + both by specifying a target of addr, port, or addr:port. You may also have + multiple lines with the same VIRTPORT: when a user connects to that + VIRTPORT, one of the TARGETs from those lines will be chosen at random. + +**PublishHidServDescriptors** **0**|**1**:: + If set to 0, Tor will run any hidden services you configure, but it won't + advertise them to the rendezvous directory. This option is only useful if + you're using a Tor controller that handles hidserv publishing for you. + (Default: 1) + +**HiddenServiceVersion** __version__,__version__,__...__:: + A list of rendezvous service descriptor versions to publish for the hidden + service. Currently, only version 2 is supported. (Default: 2) + +**HiddenServiceAuthorizeClient** __auth-type__ __client-name__,__client-name__,__...__:: + If configured, the hidden service is accessible for authorized clients + only. The auth-type can either be \'basic' for a general-purpose + authorization protocol or \'stealth' for a less scalable protocol that also + hides service activity from unauthorized clients. Only clients that are + listed here are authorized to access the hidden service. Valid client names + are 1 to 19 characters long and only use characters in A-Za-z0-9+-_ (no + spaces). If this option is set, the hidden service is not accessible for + clients without authorization any more. Generated authorization data can be + found in the hostname file. Clients need to put this authorization data in + their configuration file using **HidServAuth**. + +**RendPostPeriod** __N__ **seconds**|**minutes**|**hours**|**days**|**weeks**:: + Every time the specified period elapses, Tor uploads any rendezvous + service descriptors to the directory servers. This information is also + uploaded whenever it changes. (Default: 1 hour) + +TESTING NETWORK OPTIONS +----------------------- + +The following options are used for running a testing Tor network. + +**TestingTorNetwork** **0**|**1**:: + If set to 1, Tor adjusts default values of the configuration options below, + so that it is easier to set up a testing Tor network. May only be set if + non-default set of DirServers is set. Cannot be unset while Tor is running. + (Default: 0) + + + ServerDNSAllowBrokenConfig 1 + DirAllowPrivateAddresses 1 + EnforceDistinctSubnets 0 + AssumeReachable 1 + AuthDirMaxServersPerAddr 0 + AuthDirMaxServersPerAuthAddr 0 + ClientDNSRejectInternalAddresses 0 + ClientRejectInternalAddresses 0 + ExitPolicyRejectPrivate 0 + V3AuthVotingInterval 5 minutes + V3AuthVoteDelay 20 seconds + V3AuthDistDelay 20 seconds + MinUptimeHidServDirectoryV2 0 seconds + TestingV3AuthInitialVotingInterval 5 minutes + TestingV3AuthInitialVoteDelay 20 seconds + TestingV3AuthInitialDistDelay 20 seconds + TestingAuthDirTimeToLearnReachability 0 minutes + TestingEstimatedDescriptorPropagationTime 0 minutes + +**TestingV3AuthInitialVotingInterval** __N__ **minutes**|**hours**:: + Like V3AuthVotingInterval, but for initial voting interval before the first + consensus has been created. Changing this requires that + **TestingTorNetwork** is set. (Default: 30 minutes) + +**TestingV3AuthInitialVoteDelay** __N__ **minutes**|**hours**:: + Like TestingV3AuthInitialVoteDelay, but for initial voting interval before + the first consensus has been created. Changing this requires that + **TestingTorNetwork** is set. (Default: 5 minutes) + +**TestingV3AuthInitialDistDelay** __N__ **minutes**|**hours**:: + Like TestingV3AuthInitialDistDelay, but for initial voting interval before + the first consensus has been created. Changing this requires that + **TestingTorNetwork** is set. (Default: 5 minutes) + +**TestingAuthDirTimeToLearnReachability** __N__ **minutes**|**hours**:: + After starting as an authority, do not make claims about whether routers + are Running until this much time has passed. Changing this requires + that **TestingTorNetwork** is set. (Default: 30 minutes) + +**TestingEstimatedDescriptorPropagationTime** __N__ **minutes**|**hours**:: + Clients try downloading router descriptors from directory caches after this + time. Changing this requires that **TestingTorNetwork** is set. (Default: + 10 minutes) + +SIGNALS +------- + +Tor catches the following signals: + +**SIGTERM**:: + Tor will catch this, clean up and sync to disk if necessary, and exit. + +**SIGINT**:: + Tor clients behave as with SIGTERM; but Tor servers will do a controlled + slow shutdown, closing listeners and waiting 30 seconds before exiting. + (The delay can be configured with the ShutdownWaitLength config option.) + +**SIGHUP**:: + The signal instructs Tor to reload its configuration (including closing and + reopening logs), and kill and restart its helper processes if applicable. + +**SIGUSR1**:: + Log statistics about current connections, past connections, and throughput. + +**SIGUSR2**:: + Switch all logs to loglevel debug. You can go back to the old loglevels by + sending a SIGHUP. + +**SIGCHLD**:: + Tor receives this signal when one of its helper processes has exited, so it + can clean up. + +**SIGPIPE**:: + Tor catches this signal and ignores it. + +**SIGXFSZ**:: + If this signal exists on your platform, Tor catches and ignores it. + +FILES +----- + +**@CONFDIR@/torrc**:: + The configuration file, which contains "option value" pairs. + +**@LOCALSTATEDIR@/lib/tor/**:: + The tor process stores keys and other data here. + +__DataDirectory__**/cached-status/**:: + The most recently downloaded network status document for each authority. + Each file holds one such document; the filenames are the hexadecimal + identity key fingerprints of the directory authorities. + +__DataDirectory__**/cached-descriptors** and **cached-descriptors.new**:: + These files hold downloaded router statuses. Some routers may appear more + than once; if so, the most recently published descriptor is used. Lines + beginning with @-signs are annotations that contain more information about + a given router. The ".new" file is an append-only journal; when it gets + too large, all entries are merged into a new cached-descriptors file. + +__DataDirectory__**/cached-routers** and **cached-routers.new**:: + Obsolete versions of cached-descriptors and cached-descriptors.new. When + Tor can't find the newer files, it looks here instead. + +__DataDirectory__**/state**:: + A set of persistent key-value mappings. These are documented in + the file. These include: + - The current entry guards and their status. + - The current bandwidth accounting values (unused so far; see + below). + - When the file was last written + - What version of Tor generated the state file + - A short history of bandwidth usage, as produced in the router + descriptors. + +__DataDirectory__**/bw_accounting**:: + Used to track bandwidth accounting values (when the current period starts + and ends; how much has been read and written so far this period). This file + is obsolete, and the data is now stored in the \'state' file as well. Only + used when bandwidth accounting is enabled. + +__DataDirectory__**/control_auth_cookie**:: + Used for cookie authentication with the controller. Location can be + overridden by the CookieAuthFile config option. Regenerated on startup. See + control-spec.txt for details. Only used when cookie authentication is + enabled. + +__DataDirectory__**/keys/***:: + Only used by servers. Holds identity keys and onion keys. + +__DataDirectory__**/fingerprint**:: + Only used by servers. Holds the fingerprint of the server's identity key. + +__DataDirectory__**/approved-routers**:: + Only for naming authoritative directory servers (see + **NamingAuthoritativeDirectory**). This file lists nickname to identity + bindings. Each line lists a nickname and a fingerprint separated by + whitespace. See your **fingerprint** file in the __DataDirectory__ for an + example line. If the nickname is **!reject** then descriptors from the + given identity (fingerprint) are rejected by this server. If it is + **!invalid** then descriptors are accepted but marked in the directory as + not valid, that is, not recommended. + +__DataDirectory__**/router-stability**:: + Only used by authoritative directory servers. Tracks measurements for + router mean-time-between-failures so that authorities have a good idea of + how to set their Stable flags. + +__HiddenServiceDirectory__**/hostname**:: + The .onion domain name for this hidden service. + If the hidden service is restricted to authorized clients only, this file + also contains authorization data for all clients. + +__HiddenServiceDirectory__**/private_key**:: + The private key for this hidden service. + +__HiddenServiceDirectory__**/client_keys**:: + Authorization data for a hidden service that is only accessible by + authorized clients. + +SEE ALSO +-------- +**privoxy**(1), **tsocks**(1), **torify**(1) + + +**https://www.torproject.org/** + + +BUGS +---- + +Plenty, probably. Tor is still in development. Please report them. + +AUTHORS +------- +Roger Dingledine [arma at mit.edu], Nick Mathewson [nickm at alum.mit.edu]. + diff -Nru tor-0.2.1.30/doc/tor-gencert.1 tor-0.2.2.35/doc/tor-gencert.1 --- tor-0.2.1.30/doc/tor-gencert.1 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/tor-gencert.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -.TH tor-gencert 1 "" Jan-2008 "" -.\" manual page by Nick Mathewson -.SH NAME -.LP -tor-gencert \- Generate certs and keys for Tor directory authorities - -.SH SYNOPSIS -\fBtor-gencert\fP\ [-h|--help] [-v] [-r|--reuse] [--create-identity-key] [-i \fIid_file\fP] [-c \fIcert_file\fP] [-m \fInum\fP] [-a \fIaddress\fP:\fIport\fP] - -.SH DESCRIPTION -\fBtor-gencert\fR generates certificates and private keys for use by Tor -directory authorities running the v3 Tor directory protocol, as used by Tor -0.2.0 and later. If you are not running a directory authority, you don't -need to use tor-gencert. -.PP -Every directory authority has a long term authority \fIidentity key\fP (which -is distinct from the identity key it uses as a Tor server); this key should -be kept offline in a secure location. It is used to certify shorter-lived -\fIsigning keys\fP, which are kept online and used by the directory authority -to sign votes and consensus documents. -.PP -After you use this program to generate a signing key and a certificate, copy -those files to the keys subdirectory of your Tor process, and send Tor a -SIGHUP signal. DO NOT COPY THE IDENTITY KEY. - -.SH OPTIONS -\fB-v\fP -Display verbose output. -.LP -.TP -\fB-h\fP or \fB--help\fP -Display help text and exit. -.LP -.TP -\fB-r\fP or \fB--reuse\fP -Generate a new certificate, but not a new signing key. This can be -used to change the address or lifetime associated with a given key. -.LP -.TP -\fB--create-identity-key\fP -Generate a new identity key. You should only use this option the first -time you run tor-gencert; in the future, you should use the identity -key that's already there. -.LP -.TP -\fB-i \fR\fIFILENAME\fP -Read the identity key from the specified file. If the file is not present -and --create-identity-key is provided, create the identity key in the -specified file. Default: "./authority_identity_key" -.LP -.TP -\fB-s \fR\fIFILENAME\fP -Write the signing key to the specified file. Default: -"./authority_signing_key" -.LP -.TP -\fB-c \fR\fIFILENAME\fP -Write the certificate to the specified file. -Default: "./authority_certificate" -.LP -.TP -\fB-m \fR\fINUM\fP -Number of months that the certificate should be valid. Default: 12. -.LP -.TP -\fB--passphrase-fd \fR\fIFILEDES\fP -Filedescriptor to read the file descriptor from. Ends at the first -NUL or newline. Default: read from the terminal. -.LP -.TP -\fB-a \fR\fIaddress\fR:\fIport\fP -If provided, advertise the address:port combination as this authority's -preferred directory port in its certificate. If the address is a hostname, -the hostname is resolved to an IP before it's published. - -.SH BUGS -This probably doesn't run on Windows. That's not a big issue, since we -don't really want authorities to be running on Windows anyway. - -.SH SEE ALSO -.BR tor (1) -.PP -See also the "dir-spec.txt" file, distributed with Tor. - -.SH AUTHORS -Roger Dingledine , Nick Mathewson . diff -Nru tor-0.2.1.30/doc/tor-gencert.1.in tor-0.2.2.35/doc/tor-gencert.1.in --- tor-0.2.1.30/doc/tor-gencert.1.in 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/tor-gencert.1.in 2011-12-15 16:32:24.000000000 +0000 @@ -0,0 +1,111 @@ +'\" t +.\" Title: tor-gencert +.\" Author: [see the "AUTHORS" section] +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: 12/15/2011 +.\" Manual: [FIXME: manual] +.\" Source: [FIXME: source] +.\" Language: English +.\" +.TH "TOR\-GENCERT" "1" "12/15/2011" "[FIXME: source]" "[FIXME: manual]" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +tor-gencert \- Generate certs and keys for Tor directory authorities +.SH "SYNOPSIS" +.sp +\fBtor\-gencert\fR [\-h|\-\-help] [\-v] [\-r|\-\-reuse] [\-\-create\-identity\-key] [\-i \fIid_file\fR] [\-c \fIcert_file\fR] [\-m \fInum\fR] [\-a \fIaddress\fR:\fIport\fR] +.SH "DESCRIPTION" +.sp +\fBtor\-gencert\fR generates certificates and private keys for use by Tor directory authorities running the v3 Tor directory protocol, as used by Tor 0\&.2\&.0 and later\&. If you are not running a directory authority, you don\(cqt need to use tor\-gencert\&. +.sp +Every directory authority has a long term authority \fIidentity\fR \fIkey\fR (which is distinct from the identity key it uses as a Tor server); this key should be kept offline in a secure location\&. It is used to certify shorter\-lived \fIsigning\fR \fIkeys\fR, which are kept online and used by the directory authority to sign votes and consensus documents\&. +.sp +After you use this program to generate a signing key and a certificate, copy those files to the keys subdirectory of your Tor process, and send Tor a SIGHUP signal\&. DO NOT COPY THE IDENTITY KEY\&. +.SH "OPTIONS" +.PP +\fB\-v\fR +.RS 4 +Display verbose output\&. +.RE +.PP +\fB\-h\fR or \fB\-\-help\fR +.RS 4 +Display help text and exit\&. +.RE +.PP +\fB\-r\fR or \fB\-\-reuse\fR +.RS 4 +Generate a new certificate, but not a new signing key\&. This can be used to change the address or lifetime associated with a given key\&. +.RE +.PP +\fB\-\-create\-identity\-key\fR +.RS 4 +Generate a new identity key\&. You should only use this option the first time you run tor\-gencert; in the future, you should use the identity key that\(cqs already there\&. +.RE +.PP +\fB\-i\fR \fIFILENAME\fR +.RS 4 +Read the identity key from the specified file\&. If the file is not present and \-\-create\-identity\-key is provided, create the identity key in the specified file\&. Default: "\&./authority_identity_key" +.RE +.PP +\fB\-s\fR \fIFILENAME\fR +.RS 4 +Write the signing key to the specified file\&. Default: "\&./authority_signing_key" +.RE +.PP +\fB\-c\fR \fIFILENAME\fR +.RS 4 +Write the certificate to the specified file\&. Default: "\&./authority_certificate" +.RE +.PP +\fB\-m\fR \fINUM\fR +.RS 4 +Number of months that the certificate should be valid\&. Default: 12\&. +.RE +.PP +\fB\-\-passphrase\-fd\fR \fIFILEDES\fR +.RS 4 +Filedescriptor to read the file descriptor from\&. Ends at the first NUL or newline\&. Default: read from the terminal\&. +.RE +.PP +\fB\-a\fR \fIaddress\fR:\fIport\fR +.RS 4 +If provided, advertise the address:port combination as this authority\(cqs preferred directory port in its certificate\&. If the address is a hostname, the hostname is resolved to an IP before it\(cqs published\&. +.RE +.SH "BUGS" +.sp +This probably doesn\(cqt run on Windows\&. That\(cqs not a big issue, since we don\(cqt really want authorities to be running on Windows anyway\&. +.SH "SEE ALSO" +.sp +\fBtor\fR(1) +.sp +See also the "dir\-spec\&.txt" file, distributed with Tor\&. +.SH "AUTHORS" +.sp +.if n \{\ +.RS 4 +.\} +.nf +Roger Dingledine , Nick Mathewson \&. +.fi +.if n \{\ +.RE +.\} diff -Nru tor-0.2.1.30/doc/tor-gencert.1.txt tor-0.2.2.35/doc/tor-gencert.1.txt --- tor-0.2.1.30/doc/tor-gencert.1.txt 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/tor-gencert.1.txt 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,90 @@ +// Copyright (c) The Tor Project, Inc. +// See LICENSE for licensing information +// This is an asciidoc file used to generate the manpage/html reference. +// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html +tor-gencert(1) +============== +Nick Mathewson + +NAME +---- +tor-gencert - Generate certs and keys for Tor directory authorities + +SYNOPSIS +-------- +**tor-gencert** [-h|--help] [-v] [-r|--reuse] [--create-identity-key] [-i __id_file__] [-c +__cert_file__] [-m __num__] [-a __address__:__port__] + +DESCRIPTION +----------- +**tor-gencert** generates certificates and private keys for use by Tor +directory authorities running the v3 Tor directory protocol, as used by +Tor 0.2.0 and later. If you are not running a directory authority, you +don't need to use tor-gencert. + + +Every directory authority has a long term authority __identity__ __key__ (which +is distinct from the identity key it uses as a Tor server); this key +should be kept offline in a secure location. It is used to certify +shorter-lived __signing__ __keys__, which are kept online and used by the +directory authority to sign votes and consensus documents. + + +After you use this program to generate a signing key and a certificate, +copy those files to the keys subdirectory of your Tor process, and send +Tor a SIGHUP signal. DO NOT COPY THE IDENTITY KEY. + +OPTIONS +------- +**-v**:: + Display verbose output. + +**-h** or **--help**:: + Display help text and exit. + +**-r** or **--reuse**:: + Generate a new certificate, but not a new signing key. This can be used to + change the address or lifetime associated with a given key. + +**--create-identity-key**:: + Generate a new identity key. You should only use this option the first time + you run tor-gencert; in the future, you should use the identity key that's + already there. + +**-i** __FILENAME__:: + Read the identity key from the specified file. If the file is not present + and --create-identity-key is provided, create the identity key in the + specified file. Default: "./authority_identity_key" + +**-s** __FILENAME__:: + Write the signing key to the specified file. Default: + "./authority_signing_key" + +**-c** __FILENAME__:: + Write the certificate to the specified file. Default: + "./authority_certificate" + +**-m** __NUM__:: + Number of months that the certificate should be valid. Default: 12. + +**--passphrase-fd** __FILEDES__:: + Filedescriptor to read the file descriptor from. Ends at the first NUL or + newline. Default: read from the terminal. + +**-a** __address__:__port__:: + If provided, advertise the address:port combination as this authority's + preferred directory port in its certificate. If the address is a hostname, + the hostname is resolved to an IP before it's published. + +BUGS +---- +This probably doesn't run on Windows. That's not a big issue, since we don't +really want authorities to be running on Windows anyway. + +SEE ALSO +-------- +**tor**(1) + + +See also the "dir-spec.txt" file, distributed with Tor. + +AUTHORS +------- + Roger Dingledine , Nick Mathewson . diff -Nru tor-0.2.1.30/doc/tor-gencert.html.in tor-0.2.2.35/doc/tor-gencert.html.in --- tor-0.2.1.30/doc/tor-gencert.html.in 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/tor-gencert.html.in 2011-12-15 16:32:24.000000000 +0000 @@ -0,0 +1,553 @@ + + + + + +tor-gencert(1) + + + + +

SYNOPSIS

+
+

tor-gencert [-h|--help] [-v] [-r|--reuse] [--create-identity-key] [-i id_file] [-c +cert_file] [-m num] [-a address:port]

+
+

DESCRIPTION

+
+

tor-gencert generates certificates and private keys for use by Tor +directory authorities running the v3 Tor directory protocol, as used by +Tor 0.2.0 and later. If you are not running a directory authority, you +don’t need to use tor-gencert.

+

Every directory authority has a long term authority identity key (which +is distinct from the identity key it uses as a Tor server); this key +should be kept offline in a secure location. It is used to certify +shorter-lived signing keys, which are kept online and used by the +directory authority to sign votes and consensus documents.

+

After you use this program to generate a signing key and a certificate, +copy those files to the keys subdirectory of your Tor process, and send +Tor a SIGHUP signal. DO NOT COPY THE IDENTITY KEY.

+
+

OPTIONS

+
+
+
+-v +
+
+

+ Display verbose output. +

+
+
+-h or --help +
+
+

+ Display help text and exit. +

+
+
+-r or --reuse +
+
+

+ Generate a new certificate, but not a new signing key. This can be used to + change the address or lifetime associated with a given key. +

+
+
+--create-identity-key +
+
+

+ Generate a new identity key. You should only use this option the first time + you run tor-gencert; in the future, you should use the identity key that’s + already there. +

+
+
+-i FILENAME +
+
+

+ Read the identity key from the specified file. If the file is not present + and --create-identity-key is provided, create the identity key in the + specified file. Default: "./authority_identity_key" +

+
+
+-s FILENAME +
+
+

+ Write the signing key to the specified file. Default: + "./authority_signing_key" +

+
+
+-c FILENAME +
+
+

+ Write the certificate to the specified file. Default: + "./authority_certificate" +

+
+
+-m NUM +
+
+

+ Number of months that the certificate should be valid. Default: 12. +

+
+
+--passphrase-fd FILEDES +
+
+

+ Filedescriptor to read the file descriptor from. Ends at the first NUL or + newline. Default: read from the terminal. +

+
+
+-a address:port +
+
+

+ If provided, advertise the address:port combination as this authority’s + preferred directory port in its certificate. If the address is a hostname, + the hostname is resolved to an IP before it’s published. +

+
+
+
+

BUGS

+
+

This probably doesn’t run on Windows. That’s not a big issue, since we don’t +really want authorities to be running on Windows anyway.

+
+

SEE ALSO

+
+

tor(1)

+

See also the "dir-spec.txt" file, distributed with Tor.

+
+

AUTHORS

+
+
+
+
Roger Dingledine <arma@mit.edu>, Nick Mathewson <nickm@alum.mit.edu>.
+
+
+ + + diff -Nru tor-0.2.1.30/doc/tor.html.in tor-0.2.2.35/doc/tor.html.in --- tor-0.2.1.30/doc/tor.html.in 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/tor.html.in 2011-12-15 16:32:27.000000000 +0000 @@ -0,0 +1,3157 @@ + + + + + +TOR(1) + + + + +

SYNOPSIS

+
+

tor [OPTION value]…

+
+

DESCRIPTION

+
+

tor is a connection-oriented anonymizing communication +service. Users choose a source-routed path through a set of nodes, and +negotiate a "virtual circuit" through the network, in which each node +knows its predecessor and successor, but no others. Traffic flowing down +the circuit is unwrapped by a symmetric key at each node, which reveals +the downstream node.

+

Basically tor provides a distributed network of servers ("onion routers"). +Users bounce their TCP streams — web traffic, ftp, ssh, etc — around the +routers, and recipients, observers, and even the routers themselves have +difficulty tracking the source of the stream.

+
+

OPTIONS

+
+
+
+-h, -help +
+
+

+ Display a short help message and exit. +

+
+
+-f FILE +
+
+

+ FILE contains further "option value" pairs. (Default: @CONFDIR@/torrc) +

+
+
+--hash-password +
+
+

+ Generates a hashed password for control port access. +

+
+
+--list-fingerprint +
+
+

+ Generate your keys and output your nickname and fingerprint. +

+
+
+--verify-config +
+
+

+ Verify the configuration file is valid. +

+
+
+--nt-service +
+
+

+ --service [install|remove|start|stop] Manage the Tor Windows + NT/2000/XP service. Current instructions can be found at + https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ#WinNTService +

+
+
+--list-torrc-options +
+
+

+ List all valid options. +

+
+
+--version +
+
+

+ Display Tor version and exit. +

+
+
+--quiet +
+
+

+ Do not start Tor with a console log unless explicitly requested to do so. + (By default, Tor starts out logging messages at level "notice" or higher to + the console, until it has parsed its configuration.) +

+
+
+

Other options can be specified either on the command-line (--option + value), or in the configuration file (option value or option "value"). + Options are case-insensitive. C-style escaped characters are allowed inside + quoted values. Options on the command line take precedence over + options found in the configuration file, except indicated otherwise. To + split one configuration entry into multiple lines, use a single \ before + the end of the line. Comments can be used in such multiline entries, but + they must start at the beginning of a line.

+
+
+BandwidthRate N bytes|KB|MB|GB +
+
+

+ A token bucket limits the average incoming bandwidth usage on this node to + the specified number of bytes per second, and the average outgoing + bandwidth usage to that same value. If you want to run a relay in the + public network, this needs to be at the very least 20 KB (that is, + 20480 bytes). (Default: 5 MB) +

+
+
+BandwidthBurst N bytes|KB|MB|GB +
+
+

+ Limit the maximum token bucket size (also known as the burst) to the given + number of bytes in each direction. (Default: 10 MB) +

+
+
+MaxAdvertisedBandwidth N bytes|KB|MB|GB +
+
+

+ If set, we will not advertise more than this amount of bandwidth for our + BandwidthRate. Server operators who want to reduce the number of clients + who ask to build circuits through them (since this is proportional to + advertised bandwidth rate) can thus reduce the CPU demands on their server + without impacting network performance. +

+
+
+RelayBandwidthRate N bytes|KB|MB|GB +
+
+

+ If not 0, a separate token bucket limits the average incoming bandwidth + usage for _relayed traffic_ on this node to the specified number of bytes + per second, and the average outgoing bandwidth usage to that same value. + Relayed traffic currently is calculated to include answers to directory + requests, but that may change in future versions. (Default: 0) +

+
+
+RelayBandwidthBurst N bytes|KB|MB|GB +
+
+

+ If not 0, limit the maximum token bucket size (also known as the burst) for + _relayed traffic_ to the given number of bytes in each direction. + (Default: 0) +

+
+
+PerConnBWRate N bytes|KB|MB|GB +
+
+

+ If set, do separate rate limiting for each connection from a non-relay. + You should never need to change this value, since a network-wide value is + published in the consensus and your relay will use that value. (Default: 0) +

+
+
+PerConnBWBurst N bytes|KB|MB|GB +
+
+

+ If set, do separate rate limiting for each connection from a non-relay. + You should never need to change this value, since a network-wide value is + published in the consensus and your relay will use that value. (Default: 0) +

+
+
+ConnLimit NUM +
+
+

+ The minimum number of file descriptors that must be available to the Tor + process before it will start. Tor will ask the OS for as many file + descriptors as the OS will allow (you can find this by "ulimit -H -n"). + If this number is less than ConnLimit, then Tor will refuse to start.
+
+ You probably don’t need to adjust this. It has no effect on Windows + since that platform lacks getrlimit(). (Default: 1000) +

+
+
+ConstrainedSockets 0|1 +
+
+

+ If set, Tor will tell the kernel to attempt to shrink the buffers for all + sockets to the size specified in ConstrainedSockSize. This is useful for + virtual servers and other environments where system level TCP buffers may + be limited. If you’re on a virtual server, and you encounter the "Error + creating network socket: No buffer space available" message, you are + likely experiencing this problem.
+
+ The preferred solution is to have the admin increase the buffer pool for + the host itself via /proc/sys/net/ipv4/tcp_mem or equivalent facility; + this configuration option is a second-resort.
+
+ The DirPort option should also not be used if TCP buffers are scarce. The + cached directory requests consume additional sockets which exacerbates + the problem.
+
+ You should not enable this feature unless you encounter the "no buffer + space available" issue. Reducing the TCP buffers affects window size for + the TCP stream and will reduce throughput in proportion to round trip + time on long paths. (Default: 0.) +

+
+
+ConstrainedSockSize N bytes|KB +
+
+

+ When ConstrainedSockets is enabled the receive and transmit buffers for + all sockets will be set to this limit. Must be a value between 2048 and + 262144, in 1024 byte increments. Default of 8192 is recommended. +

+
+
+ControlPort PORT|auto +
+
+

+ If set, Tor will accept connections on this port and allow those + connections to control the Tor process using the Tor Control Protocol + (described in control-spec.txt). Note: unless you also specify one or + more of HashedControlPassword or CookieAuthentication, + setting this option will cause Tor to allow any process on the local + host to control it. (Setting both authentication methods means either + method is sufficient to authenticate to Tor.) This + option is required for many Tor controllers; most use the value of 9051. + Set it to "auto" to have Tor pick a port for you. (Default: 0). +

+
+
+ControlListenAddress IP[:PORT] +
+
+

+ Bind the controller listener to this address. If you specify a port, bind + to this port rather than the one specified in ControlPort. We strongly + recommend that you leave this alone unless you know what you’re doing, + since giving attackers access to your control listener is really + dangerous. (Default: 127.0.0.1) This directive can be specified multiple + times to bind to multiple addresses/ports. +

+
+
+ControlSocket Path +
+
+

+ Like ControlPort, but listens on a Unix domain socket, rather than a TCP + socket. (Unix and Unix-like systems only.) +

+
+
+ControlSocketsGroupWritable 0|1 +
+
+

+ If this option is set to 0, don’t allow the filesystem group to read and + write unix sockets (e.g. ControlSocket). If the option is set to 1, make + the control socket readable and writable by the default GID. (Default: 0) +

+
+
+HashedControlPassword hashed_password +
+
+

+ Allow connections on the control port if they present + the password whose one-way hash is hashed_password. You + can compute the hash of a password by running "tor --hash-password + password". You can provide several acceptable passwords by using more + than one HashedControlPassword line. +

+
+
+CookieAuthentication 0|1 +
+
+

+ If this option is set to 1, allow connections on the control port + when the connecting process knows the contents of a file named + "control_auth_cookie", which Tor will create in its data directory. This + authentication method should only be used on systems with good filesystem + security. (Default: 0) +

+
+
+CookieAuthFile Path +
+
+

+ If set, this option overrides the default location and file name + for Tor’s cookie file. (See CookieAuthentication above.) +

+
+
+CookieAuthFileGroupReadable 0|1|Groupname +
+
+

+ If this option is set to 0, don’t allow the filesystem group to read the + cookie file. If the option is set to 1, make the cookie file readable by + the default GID. [Making the file readable by other groups is not yet + implemented; let us know if you need this for some reason.] (Default: 0). +

+
+
+ControlPortWriteToFile Path +
+
+

+ If set, Tor writes the address and port of any control port it opens to + this address. Usable by controllers to learn the actual control port + when ControlPort is set to "auto". +

+
+
+ControlPortFileGroupReadable 0|1 +
+
+

+ If this option is set to 0, don’t allow the filesystem group to read the + control port file. If the option is set to 1, make the control port + file readable by the default GID. (Default: 0). +

+
+
+DataDirectory DIR +
+
+

+ Store working data in DIR (Default: @LOCALSTATEDIR@/lib/tor) +

+
+
+DirServer [nickname] [flags] address:port fingerprint +
+
+

+ Use a nonstandard authoritative directory server at the provided address + and port, with the specified key fingerprint. This option can be repeated + many times, for multiple authoritative directory servers. Flags are + separated by spaces, and determine what kind of an authority this directory + is. By default, every authority is authoritative for current ("v2")-style + directories, unless the "no-v2" flag is given. If the "v1" flags is + provided, Tor will use this server as an authority for old-style (v1) + directories as well. (Only directory mirrors care about this.) Tor will + use this server as an authority for hidden service information if the "hs" + flag is set, or if the "v1" flag is set and the "no-hs" flag is not set. + Tor will use this authority as a bridge authoritative directory if the + "bridge" flag is set. If a flag "orport=port" is given, Tor will use the + given port when opening encrypted tunnels to the dirserver. Lastly, if a + flag "v3ident=fp" is given, the dirserver is a v3 directory authority + whose v3 long-term signing key has the fingerprint fp.
+
+ If no dirserver line is given, Tor will use the default directory + servers. NOTE: this option is intended for setting up a private Tor + network with its own directory authorities. If you use it, you will be + distinguishable from other users, because you won’t believe the same + authorities they do. +

+
+
+

AlternateDirAuthority [nickname] [flags] address:port fingerprint

+

AlternateHSAuthority [nickname] [flags] address:port fingerprint

+
+
+AlternateBridgeAuthority [nickname] [flags] address:port fingerprint +
+
+

+ As DirServer, but replaces less of the default directory authorities. Using + AlternateDirAuthority replaces the default Tor directory authorities, but + leaves the hidden service authorities and bridge authorities in place. + Similarly, Using AlternateHSAuthority replaces the default hidden service + authorities, but not the directory or bridge authorities. +

+
+
+DisableAllSwap 0|1 +
+
+

+ If set to 1, Tor will attempt to lock all current and future memory pages, + so that memory cannot be paged out. Windows, OS X and Solaris are currently + not supported. We believe that this feature works on modern Gnu/Linux + distributions, and that it should work on *BSD systems (untested). This + option requires that you start your Tor as root, and you should use the + User option to properly reduce Tor’s privileges. (Default: 0) +

+
+
+FetchDirInfoEarly 0|1 +
+
+

+ If set to 1, Tor will always fetch directory information like other + directory caches, even if you don’t meet the normal criteria for fetching + early. Normal users should leave it off. (Default: 0) +

+
+
+FetchDirInfoExtraEarly 0|1 +
+
+

+ If set to 1, Tor will fetch directory information before other directory + caches. It will attempt to download directory information closer to the + start of the consensus period. Normal users should leave it off. + (Default: 0) +

+
+
+FetchHidServDescriptors 0|1 +
+
+

+ If set to 0, Tor will never fetch any hidden service descriptors from the + rendezvous directories. This option is only useful if you’re using a Tor + controller that handles hidden service fetches for you. (Default: 1) +

+
+
+FetchServerDescriptors 0|1 +
+
+

+ If set to 0, Tor will never fetch any network status summaries or server + descriptors from the directory servers. This option is only useful if + you’re using a Tor controller that handles directory fetches for you. + (Default: 1) +

+
+
+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) +

+
+
+HTTPProxy host[:port] +
+
+

+ Tor will make all its directory requests through this host:port (or host:80 + if port is not specified), rather than connecting directly to any directory + servers. +

+
+
+HTTPProxyAuthenticator username:password +
+
+

+ If defined, Tor will use this username:password for Basic HTTP proxy + authentication, as in RFC 2617. This is currently the only form of HTTP + proxy authentication that Tor supports; feel free to submit a patch if you + want it to support others. +

+
+
+HTTPSProxy host[:port] +
+
+

+ Tor will make all its OR (SSL) connections through this host:port (or + host:443 if port is not specified), via HTTP CONNECT rather than connecting + directly to servers. You may want to set FascistFirewall to restrict + the set of ports you might try to connect to, if your HTTPS proxy only + allows connecting to certain ports. +

+
+
+HTTPSProxyAuthenticator username:password +
+
+

+ If defined, Tor will use this username:password for Basic HTTPS proxy + authentication, as in RFC 2617. This is currently the only form of HTTPS + proxy authentication that Tor supports; feel free to submit a patch if you + want it to support others. +

+
+
+Socks4Proxy host[:port] +
+
+

+ Tor will make all OR connections through the SOCKS 4 proxy at host:port + (or host:1080 if port is not specified). +

+
+
+Socks5Proxy host[:port] +
+
+

+ Tor will make all OR connections through the SOCKS 5 proxy at host:port + (or host:1080 if port is not specified). +

+
+
+

Socks5ProxyUsername username

+
+
+Socks5ProxyPassword password +
+
+

+ If defined, authenticate to the SOCKS 5 server using username and password + in accordance to RFC 1929. Both username and password must be between 1 and + 255 characters. +

+
+
+KeepalivePeriod NUM +
+
+

+ To keep firewalls from expiring connections, send a padding keepalive cell + every NUM seconds on open connections that are in use. If the connection + has no open circuits, it will instead be closed after NUM seconds of + idleness. (Default: 5 minutes) +

+
+
+Log minSeverity[-maxSeverity] stderr|stdout|syslog +
+
+

+ Send all messages between minSeverity and maxSeverity to the standard + output stream, the standard error stream, or to the system log. (The + "syslog" value is only supported on Unix.) Recognized severity levels are + debug, info, notice, warn, and err. We advise using "notice" in most cases, + since anything more verbose may provide sensitive information to an + attacker who obtains the logs. If only one severity level is given, all + messages of that level or higher will be sent to the listed destination. +

+
+
+Log minSeverity[-maxSeverity] file FILENAME +
+
+

+ As above, but send log messages to the listed filename. The + "Log" option may appear more than once in a configuration file. + Messages are sent to all the logs that match their severity + level. +

+
+
+

Log [domain,…]minSeverity[-maxSeverity] … file FILENAME

+
+
+Log [domain,…]minSeverity[-maxSeverity] … stderr|stdout|syslog +
+
+

+ As above, but select messages by range of log severity and by a + set of "logging domains". Each logging domain corresponds to an area of + functionality inside Tor. You can specify any number of severity ranges + for a single log statement, each of them prefixed by a comma-separated + list of logging domains. You can prefix a domain with ~ to indicate + negation, and use * to indicate "all domains". If you specify a severity + range without a list of domains, it matches all domains.
+
+ This is an advanced feature which is most useful for debugging one or two + of Tor’s subsystems at a time.
+
+ The currently recognized domains are: general, crypto, net, config, fs, + protocol, mm, http, app, control, circ, rend, bug, dir, dirserv, or, edge, + acct, hist, and handshake. Domain names are case-insensitive.
+
+ For example, "Log [handshake]debug [~net,~mm]info notice stdout" sends + to stdout: all handshake messages of any severity, all info-and-higher + messages from domains other than networking and memory management, and all + messages of severity notice or higher. +

+
+
+LogMessageDomains 0|1 +
+
+

+ If 1, Tor includes message domains with each log message. Every log + message currently has at least one domain; most currently have exactly + one. This doesn’t affect controller log messages. (Default: 0) +

+
+
+OutboundBindAddress IP +
+
+

+ Make all outbound connections originate from the IP address specified. This + is only useful when you have multiple network interfaces, and you want all + of Tor’s outgoing connections to use a single one. This setting will be + ignored for connections to the loopback addresses (127.0.0.0/8 and ::1). +

+
+
+PidFile FILE +
+
+

+ On startup, write our PID to FILE. On clean shutdown, remove + FILE. +

+
+
+ProtocolWarnings 0|1 +
+
+

+ If 1, Tor will log with severity 'warn' various cases of other parties not + following the Tor specification. Otherwise, they are logged with severity + 'info'. (Default: 0) +

+
+
+RunAsDaemon 0|1 +
+
+

+ If 1, Tor forks and daemonizes to the background. This option has no effect + on Windows; instead you should use the --service command-line option. + (Default: 0) +

+
+
+SafeLogging 0|1|relay +
+
+

+ Tor can scrub potentially sensitive strings from log messages (e.g. + addresses) by replacing them with the string [scrubbed]. This way logs can + still be useful, but they don’t leave behind personally identifying + information about what sites a user might have visited.
+
+ If this option is set to 0, Tor will not perform any scrubbing, if it is + set to 1, all potentially sensitive strings are replaced. If it is set to + relay, all log messages generated when acting as a relay are sanitized, but + all messages generated when acting as a client are not. (Default: 1) +

+
+
+User UID +
+
+

+ On startup, setuid to this user and setgid to their primary group. +

+
+
+HardwareAccel 0|1 +
+
+

+ If non-zero, try to use built-in (static) crypto hardware acceleration when + available. (Default: 0) +

+
+
+AccelName NAME +
+
+

+ When using OpenSSL hardware crypto acceleration attempt to load the dynamic + engine of this name. This must be used for any dynamic hardware engine. + Names can be verified with the openssl engine command. +

+
+
+AccelDir DIR +
+
+

+ Specify this option if using dynamic hardware acceleration and the engine + implementation library resides somewhere other than the OpenSSL default. +

+
+
+AvoidDiskWrites 0|1 +
+
+

+ If non-zero, try to write to disk less frequently than we would otherwise. + This is useful when running on flash memory or other media that support + only a limited number of writes. (Default: 0) +

+
+
+TunnelDirConns 0|1 +
+
+

+ If non-zero, when a directory server we contact supports it, we will build + a one-hop circuit and make an encrypted connection via its ORPort. + (Default: 1) +

+
+
+PreferTunneledDirConns 0|1 +
+
+

+ If non-zero, we will avoid directory servers that don’t support tunneled + directory connections, when possible. (Default: 1) +

+
+
+CircuitPriorityHalflife NUM1 +
+
+

+ If this value is set, we override the default algorithm for choosing which + circuit’s cell to deliver or relay next. When the value is 0, we + round-robin between the active circuits on a connection, delivering one + cell from each in turn. When the value is positive, we prefer delivering + cells from whichever connection has the lowest weighted cell count, where + cells are weighted exponentially according to the supplied + CircuitPriorityHalflife value (in seconds). If this option is not set at + all, we use the behavior recommended in the current consensus + networkstatus. This is an advanced option; you generally shouldn’t have + to mess with it. (Default: not set.) +

+
+
+
+

CLIENT OPTIONS

+
+

The following options are useful only for clients (that is, if +SocksPort is non-zero):

+
+
+AllowInvalidNodes entry|exit|middle|introduction|rendezvous| +
+
+

+ If some Tor servers are obviously not working right, the directory + authorities can manually mark them as invalid, meaning that it’s not + recommended you use them for entry or exit positions in your circuits. You + can opt to use them in some circuit positions, though. The default is + "middle,rendezvous", and other choices are not advised. +

+
+
+ExcludeSingleHopRelays 0|1 +
+
+

+ This option controls whether circuits built by Tor will include relays with + the AllowSingleHopExits flag set to true. If ExcludeSingleHopRelays is set + to 0, these relays will be included. Note that these relays might be at + higher risk of being seized or observed, so they are not normally + included. Also note that relatively few clients turn off this option, + so using these relays might make your client stand out. + (Default: 1) +

+
+
+Bridge IP:ORPort [fingerprint] +
+
+

+ When set along with UseBridges, instructs Tor to use the relay at + "IP:ORPort" as a "bridge" relaying into the Tor network. If "fingerprint" + is provided (using the same format as for DirServer), we will verify that + the relay running at that location has the right fingerprint. We also use + fingerprint to look up the bridge descriptor at the bridge authority, if + it’s provided and if UpdateBridgesFromAuthority is set too. +

+
+
+LearnCircuitBuildTimeout 0|1 +
+
+

+ If 0, CircuitBuildTimeout adaptive learning is disabled. (Default: 1) +

+
+
+CircuitBuildTimeout NUM +
+
+

+ Try for at most NUM seconds when building circuits. If the circuit isn’t + open in that time, give up on it. If LearnCircuitBuildTimeout is 1, this + value serves as the initial value to use before a timeout is learned. If + LearnCircuitBuildTimeout is 0, this value is the only value used. + (Default: 60 seconds.) +

+
+
+CircuitIdleTimeout NUM +
+
+

+ If we have kept a clean (never used) circuit around for NUM seconds, then + close it. This way when the Tor client is entirely idle, it can expire all + of its circuits, and then expire its TLS connections. Also, if we end up + making a circuit that is not useful for exiting any of the requests we’re + receiving, it won’t forever take up a slot in the circuit list. (Default: 1 + hour.) +

+
+
+CircuitStreamTimeout NUM +
+
+

+ If non-zero, this option overrides our internal timeout schedule for how + many seconds until we detach a stream from a circuit and try a new circuit. + If your network is particularly slow, you might want to set this to a + number like 60. (Default: 0) +

+
+
+ClientOnly 0|1 +
+
+

+ If set to 1, Tor will under no circumstances run as a server or serve + directory requests. The default is to run as a client unless ORPort is + configured. (Usually, you don’t need to set this; Tor is pretty smart at + figuring out whether you are reliable and high-bandwidth enough to be a + useful server.) (Default: 0) +

+
+
+ExcludeNodes node,node, +
+
+

+ A list of identity fingerprints, nicknames, country codes and address + patterns of nodes to avoid when building a circuit. + (Example: + ExcludeNodes SlowServer, ABCD1234CDEF5678ABCD1234CDEF5678ABCD1234, {cc}, 255.254.0.0/8)
+
+ By default, this option is treated as a preference that Tor is allowed + to override in order to keep working. + For example, if you try to connect to a hidden service, + but you have excluded all of the hidden service’s introduction points, + Tor will connect to one of them anyway. If you do not want this + behavior, set the StrictNodes option (documented below).
+
+ Note also that if you are a relay, this (and the other node selection + options below) only affects your own circuits that Tor builds for you. + Clients can still build circuits through you to any node. Controllers + can tell Tor to build circuits through any node. +

+
+
+ExcludeExitNodes node,node, +
+
+

+ A list of identity fingerprints, nicknames, country codes and address + patterns of nodes to never use when picking an exit node---that is, a + node that delivers traffic for you outside the Tor network. Note that any + node listed in ExcludeNodes is automatically considered to be part of this + list too. See also the caveats on the "ExitNodes" option below. +

+
+
+ExitNodes node,node, +
+
+

+ A list of identity fingerprints, nicknames, country codes and address + patterns of nodes to use as exit node---that is, a + node that delivers traffic for you outside the Tor network.
+
+ Note that if you list too few nodes here, or if you exclude too many exit + nodes with ExcludeExitNodes, you can degrade functionality. For example, + if none of the exits you list allows traffic on port 80 or 443, you won’t + be able to browse the web.
+
+ Note also that not every circuit is used to deliver traffic outside of + the Tor network. It is normal to see non-exit circuits (such as those + used to connect to hidden services, those that do directory fetches, + those used for relay reachability self-tests, and so on) that end + at a non-exit node. To + keep a node from being used entirely, see ExcludeNodes and StrictNodes.
+
+ The ExcludeNodes option overrides this option: any node listed in both + ExitNodes and ExcludeNodes is treated as excluded.
+
+ The .exit address notation, if enabled via AllowDotExit, overrides + this option. +

+
+
+EntryNodes node,node, +
+
+

+ A list of identity fingerprints and nicknames of nodes + to use for the first hop in your normal circuits. (Country codes and + address patterns are not yet supported.) Normal circuits include all + circuits except for direct connections to directory servers. The Bridge + option overrides this option; if you have configured bridges and + UseBridges is 1, the Bridges are used as your entry nodes.
+
+ The ExcludeNodes option overrides this option: any node listed in both + EntryNodes and ExcludeNodes is treated as excluded. +

+
+
+StrictNodes 0|1 +
+
+

+ If StrictNodes is set to 1, Tor will treat the ExcludeNodes option as a + requirement to follow for all the circuits you generate, even if doing so + will break functionality for you. If StrictNodes is set to 0, Tor will + still try to avoid nodes in the ExcludeNodes list, but it will err on the + side of avoiding unexpected errors. Specifically, StrictNodes 0 tells + Tor that it is okay to use an excluded node when it is necessary to + perform relay reachability self-tests, connect to + a hidden service, provide a hidden service to a client, fulfill a .exit + request, upload directory information, or download directory information. + (Default: 0) +

+
+
+FascistFirewall 0|1 +
+
+

+ If 1, Tor will only create outgoing connections to ORs running on ports + that your firewall allows (defaults to 80 and 443; see FirewallPorts). + This will allow you to run Tor as a client behind a firewall with + restrictive policies, but will not allow you to run as a server behind such + a firewall. If you prefer more fine-grained control, use + ReachableAddresses instead. +

+
+
+FirewallPorts PORTS +
+
+

+ A list of ports that your firewall allows you to connect to. Only used when + FascistFirewall is set. This option is deprecated; use ReachableAddresses + instead. (Default: 80, 443) +

+
+
+HidServAuth onion-address auth-cookie [service-name] +
+
+

+ Client authorization for a hidden service. Valid onion addresses contain 16 + characters in a-z2-7 plus ".onion", and valid auth cookies contain 22 + characters in A-Za-z0-9+/. The service name is only used for internal + purposes, e.g., for Tor controllers. This option may be used multiple times + for different hidden services. If a hidden service uses authorization and + this option is not set, the hidden service is not accessible. Hidden + services can be configured to require authorization using the + HiddenServiceAuthorizeClient option. +

+
+
+ReachableAddresses ADDR[/MASK][:PORT]… +
+
+

+ A comma-separated list of IP addresses and ports that your firewall allows + you to connect to. The format is as for the addresses in ExitPolicy, except + that "accept" is understood unless "reject" is explicitly provided. For + example, 'ReachableAddresses 99.0.0.0/8, reject 18.0.0.0/8:80, accept + *:80' means that your firewall allows connections to everything inside net + 99, rejects port 80 connections to net 18, and accepts connections to port + 80 otherwise. (Default: 'accept *:*'.) +

+
+
+ReachableDirAddresses ADDR[/MASK][:PORT]… +
+
+

+ Like ReachableAddresses, a list of addresses and ports. Tor will obey + these restrictions when fetching directory information, using standard HTTP + GET requests. If not set explicitly then the value of + ReachableAddresses is used. If HTTPProxy is set then these + connections will go through that proxy. +

+
+
+ReachableORAddresses ADDR[/MASK][:PORT]… +
+
+

+ Like ReachableAddresses, a list of addresses and ports. Tor will obey + these restrictions when connecting to Onion Routers, using TLS/SSL. If not + set explicitly then the value of ReachableAddresses is used. If + HTTPSProxy is set then these connections will go through that proxy.
+
+ The separation between ReachableORAddresses and + ReachableDirAddresses is only interesting when you are connecting + through proxies (see HTTPProxy and HTTPSProxy). Most proxies limit + TLS connections (which Tor uses to connect to Onion Routers) to port 443, + and some limit HTTP GET requests (which Tor uses for fetching directory + information) to port 80. +

+
+
+LongLivedPorts PORTS +
+
+

+ A list of ports for services that tend to have long-running connections + (e.g. chat and interactive shells). Circuits for streams that use these + ports will contain only high-uptime nodes, to reduce the chance that a node + will go down before the stream is finished. (Default: 21, 22, 706, 1863, + 5050, 5190, 5222, 5223, 6667, 6697, 8300) +

+
+
+MapAddress address newaddress +
+
+

+ When a request for address arrives to Tor, it will rewrite it to newaddress + before processing it. For example, if you always want connections to + www.indymedia.org to exit via torserver (where torserver is the + nickname of the server), use "MapAddress www.indymedia.org + www.indymedia.org.torserver.exit". +

+
+
+NewCircuitPeriod NUM +
+
+

+ Every NUM seconds consider whether to build a new circuit. (Default: 30 + seconds) +

+
+
+MaxCircuitDirtiness NUM +
+
+

+ Feel free to reuse a circuit that was first used at most NUM seconds ago, + but never attach a new stream to a circuit that is too old. (Default: 10 + minutes) +

+
+
+NodeFamily node,node, +
+
+

+ The Tor servers, defined by their identity fingerprints or nicknames, + constitute a "family" of similar or co-administered servers, so never use + any two of them in the same circuit. Defining a NodeFamily is only needed + when a server doesn’t list the family itself (with MyFamily). This option + can be used multiple times. +

+
+
+EnforceDistinctSubnets 0|1 +
+
+

+ If 1, Tor will not put two servers whose IP addresses are "too close" on + the same circuit. Currently, two addresses are "too close" if they lie in + the same /16 range. (Default: 1) +

+
+
+SocksPort PORT|auto +
+
+

+ Advertise this port to listen for connections from Socks-speaking + applications. Set this to 0 if you don’t want to allow application + connections via SOCKS. Set it to "auto" to have Tor pick a port for + you. (Default: 9050) +

+
+
+SocksListenAddress IP[:PORT] +
+
+

+ Bind to this address to listen for connections from Socks-speaking + applications. (Default: 127.0.0.1) You can also specify a port (e.g. + 192.168.0.1:9100). This directive can be specified multiple times to bind + to multiple addresses/ports. +

+
+
+SocksPolicy policy,policy, +
+
+

+ Set an entrance policy for this server, to limit who can connect to the + SocksPort and DNSPort ports. The policies have the same form as exit + policies below. +

+
+
+SocksTimeout NUM +
+
+

+ Let a socks connection wait NUM seconds handshaking, and NUM seconds + unattached waiting for an appropriate circuit, before we fail it. (Default: + 2 minutes.) +

+
+
+TrackHostExits host,.domain, +
+
+

+ For each value in the comma separated list, Tor will track recent + connections to hosts that match this value and attempt to reuse the same + exit node for each. If the value is prepended with a '.', it is treated as + matching an entire domain. If one of the values is just a '.', it means + match everything. This option is useful if you frequently connect to sites + that will expire all your authentication cookies (i.e. log you out) if + your IP address changes. Note that this option does have the disadvantage + of making it more clear that a given history is associated with a single + user. However, most people who would wish to observe this will observe it + through cookies or other protocol-specific means anyhow. +

+
+
+TrackHostExitsExpire NUM +
+
+

+ Since exit servers go up and down, it is desirable to expire the + association between host and exit server after NUM seconds. The default is + 1800 seconds (30 minutes). +

+
+
+UpdateBridgesFromAuthority 0|1 +
+
+

+ When set (along with UseBridges), Tor will try to fetch bridge descriptors + from the configured bridge authorities when feasible. It will fall back to + a direct request if the authority responds with a 404. (Default: 0) +

+
+
+UseBridges 0|1 +
+
+

+ When set, Tor will fetch descriptors for each bridge listed in the "Bridge" + config lines, and use these relays as both entry guards and directory + guards. (Default: 0) +

+
+
+UseEntryGuards 0|1 +
+
+

+ If this option is set to 1, we pick a few long-term entry servers, and try + to stick with them. This is desirable because constantly changing servers + increases the odds that an adversary who owns some servers will observe a + fraction of your paths. (Defaults to 1.) +

+
+
+NumEntryGuards NUM +
+
+

+ If UseEntryGuards is set to 1, we will try to pick a total of NUM routers + as long-term entries for our circuits. (Defaults to 3.) +

+
+
+SafeSocks 0|1 +
+
+

+ When this option is enabled, Tor will reject application connections that + use unsafe variants of the socks protocol — ones that only provide an IP + address, meaning the application is doing a DNS resolve first. + Specifically, these are socks4 and socks5 when not doing remote DNS. + (Defaults to 0.) +

+
+
+TestSocks 0|1 +
+
+

+ When this option is enabled, Tor will make a notice-level log entry for + each connection to the Socks port indicating whether the request used a + safe socks protocol or an unsafe one (see above entry on SafeSocks). This + helps to determine whether an application using Tor is possibly leaking + DNS requests. (Default: 0) +

+
+
+WarnUnsafeSocks 0|1 +
+
+

+ When this option is enabled, Tor will warn whenever a request is + received that only contains an IP address instead of a hostname. Allowing + applications to do DNS resolves themselves is usually a bad idea and + can leak your location to attackers. (Default: 1) +

+
+
+VirtualAddrNetwork Address/bits +
+
+

+ When Tor needs to assign a virtual (unused) address because of a MAPADDRESS + command from the controller or the AutomapHostsOnResolve feature, Tor + picks an unassigned address from this range. (Default: + 127.192.0.0/10)
+
+ When providing proxy server service to a network of computers using a tool + like dns-proxy-tor, change this address to "10.192.0.0/10" or + "172.16.0.0/12". The default VirtualAddrNetwork address range on a + properly configured machine will route to the loopback interface. For + local use, no change to the default VirtualAddrNetwork setting is needed. +

+
+
+AllowNonRFC953Hostnames 0|1 +
+
+

+ When this option is disabled, Tor blocks hostnames containing illegal + characters (like @ and :) rather than sending them to an exit node to be + resolved. This helps trap accidental attempts to resolve URLs and so on. + (Default: 0) +

+
+
+AllowDotExit 0|1 +
+
+

+ If enabled, we convert "www.google.com.foo.exit" addresses on the + SocksPort/TransPort/NATDPort into "www.google.com" addresses that exit from + the node "foo". Disabled by default since attacking websites and exit + relays can use it to manipulate your path selection. (Default: 0) +

+
+
+FastFirstHopPK 0|1 +
+
+

+ When this option is disabled, Tor uses the public key step for the first + hop of creating circuits. Skipping it is generally safe since we have + already used TLS to authenticate the relay and to establish forward-secure + keys. Turning this option off makes circuit building slower.
+
+ Note that Tor will always use the public key step for the first hop if it’s + operating as a relay, and it will never use the public key step if it + doesn’t yet know the onion key of the first hop. (Default: 1) +

+
+
+TransPort PORT|auto +
+
+

+ If non-zero, enables transparent proxy support on PORT (by convention, + 9040). Requires OS support for transparent proxies, such as BSDs' pf or + Linux’s IPTables. If you’re planning to use Tor as a transparent proxy for + a network, you’ll want to examine and change VirtualAddrNetwork from the + default setting. You’ll also want to set the TransListenAddress option for + the network you’d like to proxy. Set it to "auto" to have Tor pick a + port for you. (Default: 0). +

+
+
+TransListenAddress IP[:PORT] +
+
+

+ Bind to this address to listen for transparent proxy connections. (Default: + 127.0.0.1). This is useful for exporting a transparent proxy server to an + entire network. +

+
+
+NATDPort PORT|auto +
+
+

+ Allow old versions of ipfw (as included in old versions of FreeBSD, etc.) + to send connections through Tor using the NATD protocol. This option is + only for people who cannot use TransPort. Set it to "auto" to have Tor + pick a port for you. (Default: 0) +

+
+
+NATDListenAddress IP[:PORT] +
+
+

+ Bind to this address to listen for NATD connections. (Default: 127.0.0.1). +

+
+
+AutomapHostsOnResolve 0|1 +
+
+

+ When this option is enabled, and we get a request to resolve an address + that ends with one of the suffixes in AutomapHostsSuffixes, we map an + unused virtual address to that address, and return the new virtual address. + This is handy for making ".onion" addresses work with applications that + resolve an address and then connect to it. (Default: 0). +

+
+
+AutomapHostsSuffixes SUFFIX,SUFFIX, +
+
+

+ A comma-separated list of suffixes to use with AutomapHostsOnResolve. + The "." suffix is equivalent to "all addresses." (Default: .exit,.onion). +

+
+
+DNSPort PORT|auto +
+
+

+ If non-zero, Tor listens for UDP DNS requests on this port and resolves + them anonymously. Set it to "auto" to have Tor pick a port for + you. (Default: 0). +

+
+
+DNSListenAddress IP[:PORT] +
+
+

+ Bind to this address to listen for DNS connections. (Default: 127.0.0.1). +

+
+
+ClientDNSRejectInternalAddresses 0|1 +
+
+

+ If true, Tor does not believe any anonymously retrieved DNS answer that + tells it that an address resolves to an internal address (like 127.0.0.1 or + 192.168.0.1). This option prevents certain browser-based attacks; don’t + turn it off unless you know what you’re doing. (Default: 1). +

+
+
+ClientRejectInternalAddresses 0|1 +
+
+

+ 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). +

+
+
+DownloadExtraInfo 0|1 +
+
+

+ If true, Tor downloads and caches "extra-info" documents. These documents + contain information about servers other than the information in their + regular router descriptors. Tor does not use this information for anything + itself; to save bandwidth, leave this option turned off. (Default: 0). +

+
+
+FallbackNetworkstatusFile FILENAME +
+
+

+ If Tor doesn’t have a cached networkstatus file, it starts out using this + one instead. Even if this file is out of date, Tor can still use it to + learn about directory mirrors, so it doesn’t need to put load on the + authorities. (Default: None). +

+
+
+WarnPlaintextPorts port,port, +
+
+

+ Tells Tor to issue a warnings whenever the user tries to make an anonymous + connection to one of these ports. This option is designed to alert users + to services that risk sending passwords in the clear. (Default: + 23,109,110,143). +

+
+
+RejectPlaintextPorts port,port, +
+
+

+ Like WarnPlaintextPorts, but instead of warning about risky port uses, Tor + will instead refuse to make the connection. (Default: None). +

+
+
+AllowSingleHopCircuits 0|1 +
+
+

+ When this option is set, the attached Tor controller can use relays + that have the AllowSingleHopExits option turned on to build + one-hop Tor connections. (Default: 0) +

+
+
+
+

SERVER OPTIONS

+
+

The following options are useful only for servers (that is, if ORPort +is non-zero):

+
+
+Address address +
+
+

+ The IP address or fully qualified domain name of this server (e.g. + moria.mit.edu). You can leave this unset, and Tor will guess your IP + address. This IP address is the one used to tell clients and other + servers where to find your Tor server; it doesn’t affect the IP that your + Tor client binds to. To bind to a different address, use the + *ListenAddress and OutboundBindAddress options. +

+
+
+AllowSingleHopExits 0|1 +
+
+

+ This option controls whether clients can use this server as a single hop + proxy. If set to 1, clients can use this server as an exit even if it is + the only hop in the circuit. Note that most clients will refuse to use + servers that set this option, since most clients have + ExcludeSingleHopRelays set. (Default: 0) +

+
+
+AssumeReachable 0|1 +
+
+

+ This option is used when bootstrapping a new Tor network. If set to 1, + don’t do self-reachability testing; just upload your server descriptor + immediately. If AuthoritativeDirectory is also set, this option + instructs the dirserver to bypass remote reachability testing too and list + all connected servers as running. +

+
+
+BridgeRelay 0|1 +
+
+

+ Sets the relay to act as a "bridge" with respect to relaying connections + from bridge users to the Tor network. It mainly causes Tor to publish a + server descriptor to the bridge database, rather than publishing a relay + descriptor to the public directory authorities. +

+
+
+ContactInfo email_address +
+
+

+ Administrative contact information for server. This line might get picked + up by spam harvesters, so you may want to obscure the fact that it’s an + email address. +

+
+
+ExitPolicy policy,policy, +
+
+

+ Set an exit policy for this server. Each policy is of the form + "accept|reject ADDR[/MASK][:PORT]". If /MASK is + omitted then this policy just applies to the host given. Instead of giving + a host or network you can also use "*" to denote the universe (0.0.0.0/0). + PORT can be a single port number, an interval of ports + "FROM_PORT-TO_PORT", or "*". If PORT is omitted, that means + "*".
+
+ For example, "accept 18.7.22.69:*,reject 18.0.0.0/8:*,accept *:*" would + reject any traffic destined for MIT except for web.mit.edu, and accept + anything else.
+
+ To specify all internal and link-local networks (including 0.0.0.0/8, + 169.254.0.0/16, 127.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8, and + 172.16.0.0/12), you can use the "private" alias instead of an address. + These addresses are rejected by default (at the beginning of your exit + policy), along with your public IP address, unless you set the + ExitPolicyRejectPrivate config option to 0. For example, once you’ve done + that, you could allow HTTP to 127.0.0.1 and block all other connections to + internal networks with "accept 127.0.0.1:80,reject private:*", though that + may also allow connections to your own computer that are addressed to its + public (external) IP address. See RFC 1918 and RFC 3330 for more details + about internal and reserved IP address space.
+
+ This directive can be specified multiple times so you don’t have to put it + all on one line.
+
+ Policies are considered first to last, and the first match wins. If you + want to _replace_ the default exit policy, end your exit policy with + either a reject *:* or an accept *:*. Otherwise, you’re _augmenting_ + (prepending to) the default exit policy. The default exit policy is:
+

+
+
+
reject *:25
+reject *:119
+reject *:135-139
+reject *:445
+reject *:563
+reject *:1214
+reject *:4661-4666
+reject *:6346-6429
+reject *:6699
+reject *:6881-6999
+accept *:*
+
+
+
+ExitPolicyRejectPrivate 0|1 +
+
+

+ Reject all private (local) networks, along with your own public IP address, + at the beginning of your exit policy. See above entry on ExitPolicy. + (Default: 1) +

+
+
+MaxOnionsPending NUM +
+
+

+ If you have more than this number of onionskins queued for decrypt, reject + new ones. (Default: 100) +

+
+
+MyFamily node,node, +
+
+

+ Declare that this Tor server is controlled or administered by a group or + organization identical or similar to that of the other servers, defined by + their identity fingerprints or nicknames. When two servers both declare + that they are in the same 'family', Tor clients will not use them in the + same circuit. (Each server only needs to list the other servers in its + family; it doesn’t need to list itself, but it won’t hurt.) +

+
+
+Nickname name +
+
+

+ Set the server’s nickname to 'name'. Nicknames must be between 1 and 19 + characters inclusive, and must contain only the characters [a-zA-Z0-9]. +

+
+
+NumCPUs num +
+
+

+ How many processes to use at once for decrypting onionskins. (Default: 1) +

+
+
+ORPort PORT|auto +
+
+

+ Advertise this port to listen for connections from Tor clients and + servers. This option is required to be a Tor server. + Set it to "auto" to have Tor pick a port for you. (Default: 0). +

+
+
+ORListenAddress IP[:PORT] +
+
+

+ Bind to this IP address to listen for connections from Tor clients and + servers. If you specify a port, bind to this port rather than the one + specified in ORPort. (Default: 0.0.0.0) This directive can be specified + multiple times to bind to multiple addresses/ports. +

+
+
+PublishServerDescriptor 0|1|v1|v2|v3|bridge, +
+
+

+ This option specifies which descriptors Tor will publish when acting as + a relay. You can + choose multiple arguments, separated by commas. +
+ If this option is set to 0, Tor will not publish its + descriptors to any directories. (This is useful if you’re testing + out your server, or if you’re using a Tor controller that handles directory + publishing for you.) Otherwise, Tor will publish its descriptors of all + type(s) specified. The default is "1", + which means "if running as a server, publish the + appropriate descriptors to the authorities". +

+
+
+ShutdownWaitLength NUM +
+
+

+ When we get a SIGINT and we’re a server, we begin shutting down: + we close listeners and start refusing new circuits. After NUM + seconds, we exit. If we get a second SIGINT, we exit immedi- + ately. (Default: 30 seconds) +

+
+
+AccountingMax N bytes|KB|MB|GB|TB +
+
+

+ Never send more than the specified number of bytes in a given accounting + period, or receive more than that number in the period. For example, with + AccountingMax set to 1 GB, a server could send 900 MB and receive 800 MB + and continue running. It will only hibernate once one of the two reaches 1 + GB. When the number of bytes gets low, Tor will stop accepting new + connections and circuits. When the number of bytes + is exhausted, Tor will hibernate until some + time in the next accounting period. To prevent all servers from waking at + the same time, Tor will also wait until a random point in each period + before waking up. If you have bandwidth cost issues, enabling hibernation + is preferable to setting a low bandwidth, since it provides users with a + collection of fast servers that are up some of the time, which is more + useful than a set of slow servers that are always "available". +

+
+
+AccountingStart day|week|month [day] HH:MM +
+
+

+ Specify how long accounting periods last. If month is given, each + accounting period runs from the time HH:MM on the dayth day of one + month to the same day and time of the next. (The day must be between 1 and + 28.) If week is given, each accounting period runs from the time HH:MM + of the dayth day of one week to the same day and time of the next week, + with Monday as day 1 and Sunday as day 7. If day is given, each + accounting period runs from the time HH:MM each day to the same time on + the next day. All times are local, and given in 24-hour time. (Defaults to + "month 1 0:00".) +

+
+
+RefuseUnknownExits 0|1|auto +
+
+

+ Prevent nodes that don’t appear in the consensus from exiting using this + relay. If the option is 1, we always block exit attempts from such + nodes; if it’s 0, we never do, and if the option is "auto", then we do + whatever the authorities suggest in the consensus. (Defaults to auto.) +

+
+
+ServerDNSResolvConfFile filename +
+
+

+ Overrides the default DNS configuration with the configuration in + filename. The file format is the same as the standard Unix + "resolv.conf" file (7). This option, like all other ServerDNS options, + only affects name lookups that your server does on behalf of clients. + (Defaults to use the system DNS configuration.) +

+
+
+ServerDNSAllowBrokenConfig 0|1 +
+
+

+ If this option is false, Tor exits immediately if there are problems + parsing the system DNS configuration or connecting to nameservers. + Otherwise, Tor continues to periodically retry the system nameservers until + it eventually succeeds. (Defaults to "1".) +

+
+
+ServerDNSSearchDomains 0|1 +
+
+

+ If set to 1, then we will search for addresses in the local search domain. + For example, if this system is configured to believe it is in + "example.com", and a client tries to connect to "www", the client will be + connected to "www.example.com". This option only affects name lookups that + your server does on behalf of clients. (Defaults to "0".) +

+
+
+ServerDNSDetectHijacking 0|1 +
+
+

+ When this option is set to 1, we will test periodically to determine + whether our local nameservers have been configured to hijack failing DNS + requests (usually to an advertising site). If they are, we will attempt to + correct this. This option only affects name lookups that your server does + on behalf of clients. (Defaults to "1".) +

+
+
+ServerDNSTestAddresses address,address, +
+
+

+ When we’re detecting DNS hijacking, make sure that these valid addresses + aren’t getting redirected. If they are, then our DNS is completely useless, + and we’ll reset our exit policy to "reject :". This option only affects + name lookups that your server does on behalf of clients. (Defaults to + "www.google.com, www.mit.edu, www.yahoo.com, www.slashdot.org".) +

+
+
+ServerDNSAllowNonRFC953Hostnames 0|1 +
+
+

+ When this option is disabled, Tor does not try to resolve hostnames + containing illegal characters (like @ and :) rather than sending them to an + exit node to be resolved. This helps trap accidental attempts to resolve + URLs and so on. This option only affects name lookups that your server does + on behalf of clients. (Default: 0) +

+
+
+BridgeRecordUsageByCountry 0|1 +
+
+

+ When this option is enabled and BridgeRelay is also enabled, and we have + GeoIP data, Tor keeps a keep a per-country count of how many client + addresses have contacted it so that it can help the bridge authority guess + which countries have blocked access to it. (Default: 1) +

+
+
+ServerDNSRandomizeCase 0|1 +
+
+

+ When this option is set, Tor sets the case of each character randomly in + outgoing DNS requests, and makes sure that the case matches in DNS replies. + This so-called "0x20 hack" helps resist some types of DNS poisoning attack. + For more information, see "Increased DNS Forgery Resistance through + 0x20-Bit Encoding". This option only affects name lookups that your server + does on behalf of clients. (Default: 1) +

+
+
+GeoIPFile filename +
+
+

+ A filename containing GeoIP data, for use with BridgeRecordUsageByCountry. +

+
+
+CellStatistics 0|1 +
+
+

+ When this option is enabled, Tor writes statistics on the mean time that + cells spend in circuit queues to disk every 24 hours. (Default: 0) +

+
+
+DirReqStatistics 0|1 +
+
+

+ When this option is enabled, Tor writes statistics on the number and + response time of network status requests to disk every 24 hours. + (Default: 0) +

+
+
+EntryStatistics 0|1 +
+
+

+ When this option is enabled, Tor writes statistics on the number of + directly connecting clients to disk every 24 hours. (Default: 0) +

+
+
+ExitPortStatistics 0|1 +
+
+

+ When this option is enabled, Tor writes statistics on the number of relayed + bytes and opened stream per exit port to disk every 24 hours. (Default: 0) +

+
+
+ExtraInfoStatistics 0|1 +
+
+

+ When this option is enabled, Tor includes previously gathered statistics in + its extra-info documents that it uploads to the directory authorities. + (Default: 0) +

+
+
+
+

DIRECTORY SERVER OPTIONS

+
+

The following options are useful only for directory servers (that is, +if DirPort is non-zero):

+
+
+AuthoritativeDirectory 0|1 +
+
+

+ When this option is set to 1, Tor operates as an authoritative directory + server. Instead of caching the directory, it generates its own list of + good servers, signs it, and sends that to the clients. Unless the clients + already have you listed as a trusted directory, you probably do not want + to set this option. Please coordinate with the other admins at + tor-ops@torproject.org if you think you should be a directory. +

+
+
+DirPortFrontPage FILENAME +
+
+

+ When this option is set, it takes an HTML file and publishes it as "/" on + the DirPort. Now relay operators can provide a disclaimer without needing + to set up a separate webserver. There’s a sample disclaimer in + contrib/tor-exit-notice.html. +

+
+
+V1AuthoritativeDirectory 0|1 +
+
+

+ When this option is set in addition to AuthoritativeDirectory, Tor + generates version 1 directory and running-routers documents (for legacy + Tor clients up to 0.1.0.x). +

+
+
+V2AuthoritativeDirectory 0|1 +
+
+

+ When this option is set in addition to AuthoritativeDirectory, Tor + generates version 2 network statuses and serves descriptors, etc as + described in doc/spec/dir-spec-v2.txt (for Tor clients and servers running + 0.1.1.x and 0.1.2.x). +

+
+
+V3AuthoritativeDirectory 0|1 +
+
+

+ When this option is set in addition to AuthoritativeDirectory, Tor + generates version 3 network statuses and serves descriptors, etc as + described in doc/spec/dir-spec.txt (for Tor clients and servers running at + least 0.2.0.x). +

+
+
+VersioningAuthoritativeDirectory 0|1 +
+
+

+ When this option is set to 1, Tor adds information on which versions of + Tor are still believed safe for use to the published directory. Each + version 1 authority is automatically a versioning authority; version 2 + authorities provide this service optionally. See RecommendedVersions, + RecommendedClientVersions, and RecommendedServerVersions. +

+
+
+NamingAuthoritativeDirectory 0|1 +
+
+

+ When this option is set to 1, then the server advertises that it has + opinions about nickname-to-fingerprint bindings. It will include these + opinions in its published network-status pages, by listing servers with + the flag "Named" if a correct binding between that nickname and fingerprint + has been registered with the dirserver. Naming dirservers will refuse to + accept or publish descriptors that contradict a registered binding. See + approved-routers in the FILES section below. +

+
+
+HSAuthoritativeDir 0|1 +
+
+

+ When this option is set in addition to AuthoritativeDirectory, Tor also + accepts and serves v0 hidden service descriptors, + which are produced and used by Tor 0.2.1.x and older. (Default: 0) +

+
+
+HidServDirectoryV2 0|1 +
+
+

+ When this option is set, Tor accepts and serves v2 hidden service + descriptors. Setting DirPort is not required for this, because clients + connect via the ORPort by default. (Default: 1) +

+
+
+BridgeAuthoritativeDir 0|1 +
+
+

+ When this option is set in addition to AuthoritativeDirectory, Tor + accepts and serves router descriptors, but it caches and serves the main + networkstatus documents rather than generating its own. (Default: 0) +

+
+
+MinUptimeHidServDirectoryV2 N seconds|minutes|hours|days|weeks +
+
+

+ Minimum uptime of a v2 hidden service directory to be accepted as such by + authoritative directories. (Default: 25 hours) +

+
+
+DirPort PORT|auto +
+
+

+ If this option is nonzero, advertise the directory service on this port. + Set it to "auto" to have Tor pick a port for you. (Default: 0) +

+
+
+DirListenAddress IP[:PORT] +
+
+

+ Bind the directory service to this address. If you specify a port, bind to + this port rather than the one specified in DirPort. (Default: 0.0.0.0) + This directive can be specified multiple times to bind to multiple + addresses/ports. +

+
+
+DirPolicy policy,policy, +
+
+

+ Set an entrance policy for this server, to limit who can connect to the + directory ports. The policies have the same form as exit policies above. +

+
+
+FetchV2Networkstatus 0|1 +
+
+

+ If set, we try to fetch the (obsolete, unused) version 2 network status + consensus documents from the directory authorities. No currently + supported Tor version uses them. (Default: 0.) +

+
+
+
+

DIRECTORY AUTHORITY SERVER OPTIONS

+
+
+
+RecommendedVersions STRING +
+
+

+ STRING is a comma-separated list of Tor versions currently believed to be + safe. The list is included in each directory, and nodes which pull down the + directory learn whether they need to upgrade. This option can appear + multiple times: the values from multiple lines are spliced together. When + this is set then VersioningAuthoritativeDirectory should be set too. +

+
+
+RecommendedClientVersions STRING +
+
+

+ STRING is a comma-separated list of Tor versions currently believed to be + safe for clients to use. This information is included in version 2 + directories. If this is not set then the value of RecommendedVersions + is used. When this is set then VersioningAuthoritativeDirectory should + be set too. +

+
+
+RecommendedServerVersions STRING +
+
+

+ STRING is a comma-separated list of Tor versions currently believed to be + safe for servers to use. This information is included in version 2 + directories. If this is not set then the value of RecommendedVersions + is used. When this is set then VersioningAuthoritativeDirectory should + be set too. +

+
+
+ConsensusParams STRING +
+
+

+ STRING is a space-separated list of key=value pairs that Tor will include + in the "params" line of its networkstatus vote. +

+
+
+DirAllowPrivateAddresses 0|1 +
+
+

+ If set to 1, Tor will accept router descriptors with arbitrary "Address" + elements. Otherwise, if the address is not an IP address or is a private IP + address, it will reject the router descriptor. Defaults to 0. +

+
+
+AuthDirBadDir AddressPattern… +
+
+

+ Authoritative directories only. A set of address patterns for servers that + will be listed as bad directories in any network status document this + authority publishes, if AuthDirListBadDirs is set. +

+
+
+AuthDirBadExit AddressPattern… +
+
+

+ Authoritative directories only. A set of address patterns for servers that + will be listed as bad exits in any network status document this authority + publishes, if AuthDirListBadExits is set. +

+
+
+AuthDirInvalid AddressPattern… +
+
+

+ Authoritative directories only. A set of address patterns for servers that + will never be listed as "valid" in any network status document that this + authority publishes. +

+
+
+AuthDirReject AddressPattern… +
+
+

+ Authoritative directories only. A set of address patterns for servers that + will never be listed at all in any network status document that this + authority publishes, or accepted as an OR address in any descriptor + submitted for publication by this authority. +

+
+
+AuthDirListBadDirs 0|1 +
+
+

+ Authoritative directories only. If set to 1, this directory has some + opinion about which nodes are unsuitable as directory caches. (Do not set + this to 1 unless you plan to list non-functioning directories as bad; + otherwise, you are effectively voting in favor of every declared + directory.) +

+
+
+AuthDirListBadExits 0|1 +
+
+

+ Authoritative directories only. If set to 1, this directory has some + opinion about which nodes are unsuitable as exit nodes. (Do not set this to + 1 unless you plan to list non-functioning exits as bad; otherwise, you are + effectively voting in favor of every declared exit as an exit.) +

+
+
+AuthDirRejectUnlisted 0|1 +
+
+

+ Authoritative directories only. If set to 1, the directory server rejects + all uploaded server descriptors that aren’t explicitly listed in the + fingerprints file. This acts as a "panic button" if we get hit with a Sybil + attack. (Default: 0) +

+
+
+AuthDirMaxServersPerAddr NUM +
+
+

+ Authoritative directories only. The maximum number of servers that we will + list as acceptable on a single IP address. Set this to "0" for "no limit". + (Default: 2) +

+
+
+AuthDirMaxServersPerAuthAddr NUM +
+
+

+ Authoritative directories only. Like AuthDirMaxServersPerAddr, but applies + to addresses shared with directory authorities. (Default: 5) +

+
+
+AuthDirFastGuarantee N bytes|KB|MB|GB +
+
+

+ Authoritative directories only. If non-zero, always vote the + Fast flag for any relay advertising this amount of capacity or + more. (Default: 20 KB) +

+
+
+AuthDirGuardBWGuarantee N bytes|KB|MB|GB +
+
+

+ Authoritative directories only. If non-zero, this advertised capacity + or more is always sufficient to satisfy the bandwidth requirement + for the Guard flag. (Default: 250 KB) +

+
+
+BridgePassword Password +
+
+

+ If set, contains an HTTP authenticator that tells a bridge authority to + serve all requested bridge information. Used for debugging. (Default: + not set.) +

+
+
+V3AuthVotingInterval N minutes|hours +
+
+

+ V3 authoritative directories only. Configures the server’s preferred voting + interval. Note that voting will actually happen at an interval chosen + by consensus from all the authorities' preferred intervals. This time + SHOULD divide evenly into a day. (Default: 1 hour) +

+
+
+V3AuthVoteDelay N minutes|hours +
+
+

+ V3 authoritative directories only. Configures the server’s preferred delay + between publishing its vote and assuming it has all the votes from all the + other authorities. Note that the actual time used is not the server’s + preferred time, but the consensus of all preferences. (Default: 5 minutes.) +

+
+
+V3AuthDistDelay N minutes|hours +
+
+

+ V3 authoritative directories only. Configures the server’s preferred delay + between publishing its consensus and signature and assuming it has all the + signatures from all the other authorities. Note that the actual time used + is not the server’s preferred time, but the consensus of all preferences. + (Default: 5 minutes.) +

+
+
+V3AuthNIntervalsValid NUM +
+
+

+ V3 authoritative directories only. Configures the number of VotingIntervals + for which each consensus should be valid for. Choosing high numbers + increases network partitioning risks; choosing low numbers increases + directory traffic. Note that the actual number of intervals used is not the + server’s preferred number, but the consensus of all preferences. Must be at + least 2. (Default: 3.) +

+
+
+V3BandwidthsFile FILENAME +
+
+

+ V3 authoritative directories only. Configures the location of the + bandiwdth-authority generated file storing information on relays' measured + bandwidth capacities. (Default: unset.) +

+
+
+V3AuthUseLegacyKey 0|1 +
+
+

+ If set, the directory authority will sign consensuses not only with its + own signing key, but also with a "legacy" key and certificate with a + different identity. This feature is used to migrate directory authority + keys in the event of a compromise. (Default: 0.) +

+
+
+RephistTrackTime N seconds|minutes|hours|days|weeks +
+
+

+ Tells an authority, or other node tracking node reliability and history, + that fine-grained information about nodes can be discarded when it hasn’t + changed for a given amount of time. (Default: 24 hours) +

+
+
+VoteOnHidServDirectoriesV2 0|1 +
+
+

+ When this option is set in addition to AuthoritativeDirectory, Tor + votes on whether to accept relays as hidden service directories. + (Default: 1) +

+
+
+
+

HIDDEN SERVICE OPTIONS

+
+

The following options are used to configure a hidden service.

+
+
+HiddenServiceDir DIRECTORY +
+
+

+ Store data files for a hidden service in DIRECTORY. Every hidden service + must have a separate directory. You may use this option multiple times to + specify multiple services. DIRECTORY must be an existing directory. +

+
+
+HiddenServicePort VIRTPORT [TARGET] +
+
+

+ Configure a virtual port VIRTPORT for a hidden service. You may use this + option multiple times; each time applies to the service using the most + recent hiddenservicedir. By default, this option maps the virtual port to + the same port on 127.0.0.1. You may override the target port, address, or + both by specifying a target of addr, port, or addr:port. You may also have + multiple lines with the same VIRTPORT: when a user connects to that + VIRTPORT, one of the TARGETs from those lines will be chosen at random. +

+
+
+PublishHidServDescriptors 0|1 +
+
+

+ If set to 0, Tor will run any hidden services you configure, but it won’t + advertise them to the rendezvous directory. This option is only useful if + you’re using a Tor controller that handles hidserv publishing for you. + (Default: 1) +

+
+
+HiddenServiceVersion version,version, +
+
+

+ A list of rendezvous service descriptor versions to publish for the hidden + service. Currently, only version 2 is supported. (Default: 2) +

+
+
+HiddenServiceAuthorizeClient auth-type client-name,client-name, +
+
+

+ If configured, the hidden service is accessible for authorized clients + only. The auth-type can either be 'basic' for a general-purpose + authorization protocol or 'stealth' for a less scalable protocol that also + hides service activity from unauthorized clients. Only clients that are + listed here are authorized to access the hidden service. Valid client names + are 1 to 19 characters long and only use characters in A-Za-z0-9+-_ (no + spaces). If this option is set, the hidden service is not accessible for + clients without authorization any more. Generated authorization data can be + found in the hostname file. Clients need to put this authorization data in + their configuration file using HidServAuth. +

+
+
+RendPostPeriod N seconds|minutes|hours|days|weeks +
+
+

+ Every time the specified period elapses, Tor uploads any rendezvous + service descriptors to the directory servers. This information is also + uploaded whenever it changes. (Default: 1 hour) +

+
+
+
+

TESTING NETWORK OPTIONS

+
+

The following options are used for running a testing Tor network.

+
+
+TestingTorNetwork 0|1 +
+
+

+ If set to 1, Tor adjusts default values of the configuration options below, + so that it is easier to set up a testing Tor network. May only be set if + non-default set of DirServers is set. Cannot be unset while Tor is running. + (Default: 0)
+

+
+
+
ServerDNSAllowBrokenConfig 1
+DirAllowPrivateAddresses 1
+EnforceDistinctSubnets 0
+AssumeReachable 1
+AuthDirMaxServersPerAddr 0
+AuthDirMaxServersPerAuthAddr 0
+ClientDNSRejectInternalAddresses 0
+ClientRejectInternalAddresses 0
+ExitPolicyRejectPrivate 0
+V3AuthVotingInterval 5 minutes
+V3AuthVoteDelay 20 seconds
+V3AuthDistDelay 20 seconds
+MinUptimeHidServDirectoryV2 0 seconds
+TestingV3AuthInitialVotingInterval 5 minutes
+TestingV3AuthInitialVoteDelay 20 seconds
+TestingV3AuthInitialDistDelay 20 seconds
+TestingAuthDirTimeToLearnReachability 0 minutes
+TestingEstimatedDescriptorPropagationTime 0 minutes
+
+
+
+TestingV3AuthInitialVotingInterval N minutes|hours +
+
+

+ Like V3AuthVotingInterval, but for initial voting interval before the first + consensus has been created. Changing this requires that + TestingTorNetwork is set. (Default: 30 minutes) +

+
+
+TestingV3AuthInitialVoteDelay N minutes|hours +
+
+

+ Like TestingV3AuthInitialVoteDelay, but for initial voting interval before + the first consensus has been created. Changing this requires that + TestingTorNetwork is set. (Default: 5 minutes) +

+
+
+TestingV3AuthInitialDistDelay N minutes|hours +
+
+

+ Like TestingV3AuthInitialDistDelay, but for initial voting interval before + the first consensus has been created. Changing this requires that + TestingTorNetwork is set. (Default: 5 minutes) +

+
+
+TestingAuthDirTimeToLearnReachability N minutes|hours +
+
+

+ After starting as an authority, do not make claims about whether routers + are Running until this much time has passed. Changing this requires + that TestingTorNetwork is set. (Default: 30 minutes) +

+
+
+TestingEstimatedDescriptorPropagationTime N minutes|hours +
+
+

+ Clients try downloading router descriptors from directory caches after this + time. Changing this requires that TestingTorNetwork is set. (Default: + 10 minutes) +

+
+
+
+

SIGNALS

+
+

Tor catches the following signals:

+
+
+SIGTERM +
+
+

+ Tor will catch this, clean up and sync to disk if necessary, and exit. +

+
+
+SIGINT +
+
+

+ Tor clients behave as with SIGTERM; but Tor servers will do a controlled + slow shutdown, closing listeners and waiting 30 seconds before exiting. + (The delay can be configured with the ShutdownWaitLength config option.) +

+
+
+SIGHUP +
+
+

+ The signal instructs Tor to reload its configuration (including closing and + reopening logs), and kill and restart its helper processes if applicable. +

+
+
+SIGUSR1 +
+
+

+ Log statistics about current connections, past connections, and throughput. +

+
+
+SIGUSR2 +
+
+

+ Switch all logs to loglevel debug. You can go back to the old loglevels by + sending a SIGHUP. +

+
+
+SIGCHLD +
+
+

+ Tor receives this signal when one of its helper processes has exited, so it + can clean up. +

+
+
+SIGPIPE +
+
+

+ Tor catches this signal and ignores it. +

+
+
+SIGXFSZ +
+
+

+ If this signal exists on your platform, Tor catches and ignores it. +

+
+
+
+

FILES

+
+
+
+@CONFDIR@/torrc +
+
+

+ The configuration file, which contains "option value" pairs. +

+
+
+@LOCALSTATEDIR@/lib/tor/ +
+
+

+ The tor process stores keys and other data here. +

+
+
+DataDirectory/cached-status/ +
+
+

+ The most recently downloaded network status document for each authority. + Each file holds one such document; the filenames are the hexadecimal + identity key fingerprints of the directory authorities. +

+
+
+DataDirectory/cached-descriptors and cached-descriptors.new +
+
+

+ These files hold downloaded router statuses. Some routers may appear more + than once; if so, the most recently published descriptor is used. Lines + beginning with @-signs are annotations that contain more information about + a given router. The ".new" file is an append-only journal; when it gets + too large, all entries are merged into a new cached-descriptors file. +

+
+
+DataDirectory/cached-routers and cached-routers.new +
+
+

+ Obsolete versions of cached-descriptors and cached-descriptors.new. When + Tor can’t find the newer files, it looks here instead. +

+
+
+DataDirectory/state +
+
+

+ A set of persistent key-value mappings. These are documented in + the file. These include: +

+
    +
  • +

    +The current entry guards and their status. +

    +
  • +
  • +

    +The current bandwidth accounting values (unused so far; see + below). +

    +
  • +
  • +

    +When the file was last written +

    +
  • +
  • +

    +What version of Tor generated the state file +

    +
  • +
  • +

    +A short history of bandwidth usage, as produced in the router + descriptors. +

    +
  • +
+
+
+DataDirectory/bw_accounting +
+
+

+ Used to track bandwidth accounting values (when the current period starts + and ends; how much has been read and written so far this period). This file + is obsolete, and the data is now stored in the 'state' file as well. Only + used when bandwidth accounting is enabled. +

+
+
+DataDirectory/control_auth_cookie +
+
+

+ Used for cookie authentication with the controller. Location can be + overridden by the CookieAuthFile config option. Regenerated on startup. See + control-spec.txt for details. Only used when cookie authentication is + enabled. +

+
+
+DataDirectory/keys/* +
+
+

+ Only used by servers. Holds identity keys and onion keys. +

+
+
+DataDirectory/fingerprint +
+
+

+ Only used by servers. Holds the fingerprint of the server’s identity key. +

+
+
+DataDirectory/approved-routers +
+
+

+ Only for naming authoritative directory servers (see + NamingAuthoritativeDirectory). This file lists nickname to identity + bindings. Each line lists a nickname and a fingerprint separated by + whitespace. See your fingerprint file in the DataDirectory for an + example line. If the nickname is !reject then descriptors from the + given identity (fingerprint) are rejected by this server. If it is + !invalid then descriptors are accepted but marked in the directory as + not valid, that is, not recommended. +

+
+
+DataDirectory/router-stability +
+
+

+ Only used by authoritative directory servers. Tracks measurements for + router mean-time-between-failures so that authorities have a good idea of + how to set their Stable flags. +

+
+
+HiddenServiceDirectory/hostname +
+
+

+ The <base32-encoded-fingerprint>.onion domain name for this hidden service. + If the hidden service is restricted to authorized clients only, this file + also contains authorization data for all clients. +

+
+
+HiddenServiceDirectory/private_key +
+
+

+ The private key for this hidden service. +

+
+
+HiddenServiceDirectory/client_keys +
+
+

+ Authorization data for a hidden service that is only accessible by + authorized clients. +

+
+
+
+

SEE ALSO

+
+

privoxy(1), tsocks(1), torify(1)

+

https://www.torproject.org/

+
+

BUGS

+
+

Plenty, probably. Tor is still in development. Please report them.

+
+

AUTHORS

+
+

Roger Dingledine [arma at mit.edu], Nick Mathewson [nickm at alum.mit.edu].

+
+ + + diff -Nru tor-0.2.1.30/doc/torify.1.in tor-0.2.2.35/doc/torify.1.in --- tor-0.2.1.30/doc/torify.1.in 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/torify.1.in 2011-12-15 16:32:24.000000000 +0000 @@ -0,0 +1,53 @@ +'\" t +.\" Title: torify +.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: 12/15/2011 +.\" Manual: [FIXME: manual] +.\" Source: [FIXME: source] +.\" Language: English +.\" +.TH "TORIFY" "1" "12/15/2011" "[FIXME: source]" "[FIXME: manual]" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +torify \- wrapper for torsocks or tsocks and tor +.SH "SYNOPSIS" +.sp +\fBtorify\fR \fIapplication\fR [\fIapplication\(cqs\fR \fIarguments\fR] +.SH "DESCRIPTION" +.sp +\fBtorify\fR is a simple wrapper that attempts to find the best underlying Tor wrapper available on a system\&. It calls torsocks or tsocks with a tor specific configuration file\&. +.sp +torsocks is an improved wrapper that explictly rejects UDP, safely resolves DNS lookups and properly socksifies your TCP connections\&. +.sp +tsocks itself is a wrapper between the tsocks library and the application that you would like to run socksified\&. +.sp +Please note that since both method use LD_PRELOAD, torify cannot be applied to suid binaries\&. +.SH "WARNING" +.sp +You should also be aware that the way tsocks currently works only TCP connections are socksified\&. Be aware that this will in most circumstances not include hostname lookups which would still be routed through your normal system resolver to your usual resolving nameservers\&. The \fBtor\-resolve\fR(1) tool can be useful as a workaround in some cases\&. The Tor FAQ at https://wiki\&.torproject\&.org/noreply/TheOnionRouter/TorFAQ might have further information on this subject\&. +.sp +When used with torsocks, torify should not leak DNS requests or UDP data\&. +.sp +Both will leak ICMP data\&. +.SH "SEE ALSO" +.sp +\fBtor\fR(1), \fBtor\-resolve\fR(1), \fBtorsocks\fR(1), \fBtsocks\fR(1), \fBtsocks\&.conf\fR(5)\&. diff -Nru tor-0.2.1.30/doc/torify.1.txt tor-0.2.2.35/doc/torify.1.txt --- tor-0.2.1.30/doc/torify.1.txt 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/torify.1.txt 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,50 @@ +// Copyright (c) The Tor Project, Inc. +// See LICENSE for licensing information +// This is an asciidoc file used to generate the manpage/html reference. +// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html +torify(1) +========= +Peter Palfrader +Jacob Appelbaum + +NAME +---- +torify - wrapper for torsocks or tsocks and tor + +SYNOPSIS +-------- +**torify** __application__ [__application's__ __arguments__] + +DESCRIPTION +----------- +**torify** is a simple wrapper that attempts to find the best underlying Tor +wrapper available on a system. It calls torsocks or tsocks with a tor specific +configuration file. + + +torsocks is an improved wrapper that explictly rejects UDP, safely resolves DNS +lookups and properly socksifies your TCP connections. + + +tsocks itself is a wrapper between the tsocks library and the application that +you would like to run socksified. + + +Please note that since both method use LD_PRELOAD, torify cannot be applied to +suid binaries. + +WARNING +------- +You should also be aware that the way tsocks currently works only TCP +connections are socksified. Be aware that this will in most circumstances not +include hostname lookups which would still be routed through your normal system +resolver to your usual resolving nameservers. The **tor-resolve**(1) tool can be +useful as a workaround in some cases. The Tor FAQ at +https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ might have further +information on this subject. + + +When used with torsocks, torify should not leak DNS requests or UDP data. + + +Both will leak ICMP data. + +SEE ALSO +-------- +**tor**(1), **tor-resolve**(1), **torsocks**(1), **tsocks**(1), +**tsocks.conf**(5). diff -Nru tor-0.2.1.30/doc/torify.html.in tor-0.2.2.35/doc/torify.html.in --- tor-0.2.1.30/doc/torify.html.in 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/torify.html.in 2011-12-15 16:32:25.000000000 +0000 @@ -0,0 +1,454 @@ + + + + + +torify(1) + + + + +

SYNOPSIS

+
+

torify application [application’s arguments]

+
+

DESCRIPTION

+
+

torify is a simple wrapper that attempts to find the best underlying Tor +wrapper available on a system. It calls torsocks or tsocks with a tor specific +configuration file.

+

torsocks is an improved wrapper that explictly rejects UDP, safely resolves DNS +lookups and properly socksifies your TCP connections.

+

tsocks itself is a wrapper between the tsocks library and the application that +you would like to run socksified.

+

Please note that since both method use LD_PRELOAD, torify cannot be applied to +suid binaries.

+
+

WARNING

+
+

You should also be aware that the way tsocks currently works only TCP +connections are socksified. Be aware that this will in most circumstances not +include hostname lookups which would still be routed through your normal system +resolver to your usual resolving nameservers. The tor-resolve(1) tool can be +useful as a workaround in some cases. The Tor FAQ at +https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ might have further +information on this subject.

+

When used with torsocks, torify should not leak DNS requests or UDP data.

+

Both will leak ICMP data.

+
+

SEE ALSO

+
+

tor(1), tor-resolve(1), torsocks(1), tsocks(1), +tsocks.conf(5).

+
+ + + diff -Nru tor-0.2.1.30/doc/tor-osx-dmg-creation.txt tor-0.2.2.35/doc/tor-osx-dmg-creation.txt --- tor-0.2.1.30/doc/tor-osx-dmg-creation.txt 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/doc/tor-osx-dmg-creation.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,145 +0,0 @@ -## Instructions for building the official dmgs for OSX. -## -## The loose table of contents: -## Summary -## Single Architecture Binaries for PPC or X86, not both. -## Backwards compatible single-architecture binaries for OSX x86 10.4 from newer versions of OS X. -## Universal Binaries for OSX PPC and X86 -## Each section is delineated by ###. - -The following steps are the exact steps used to produce the "official" -OSX builds of tor. - -### Summary: -1) Compile and install a static version of the latest release of -libevent. -2) Acquire and install your preferred version of tor. Extract. -3) "make dist-osx" -4) You now have a dmg from which you can install Tor. - -### Single Architecture Binaries for PPC or X86, not both. -### This method works in all versions of OSX 10.3 through 10.6 - -## Compiling libevent ## - -1) Download the latest stable libevent from -http://www.monkey.org/~provos/libevent/ - -2) The first step of compiling libevent is to configure it as -follows: - ./configure --enable-static --disable-shared - -3) Complete the "make" and "make install". You will need to be root, -or sudo -s, to complete the "make install". - -## Compiling Tor ## - -4) Get your preferred version of the tor source from https://www.torproject.org. Extract the -tarball. - -5) In the top level, this means /path/to/tor/, not tor/contrib/osx, -do a configure with these parameters: - CONFDIR=/Library/Tor ./configure --prefix=/Library/Tor \ - --bindir=/Library/Tor --sysconfdir=/Library - -6) In same top level dir, do a "make dist-osx". There now exists a -.dmg file in the same directory. Install from this dmg. - -### Backwards compatible single-architecture binaries for OSX x86 10.4 from newer versions of OS X. - -1) Install the latest XCode updates available from http://developer.apple.com. - -## Compiling libevent ## - -2) Download latest stable libevent from -http://www.monkey.org/~provos/libevent/ - -3) The first step of compiling libevent is to configure it as -follows: -CFLAGS="-O -g -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386" \ -LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk" \ -./configure --enable-static --disable-shared --disable-dependency-tracking - -4) Complete the "make" and "make install". You will need to be root, -or sudo -s, to complete the "make install". - -5) Check for a successful universal binary of libevent.a in, by default, -/usr/local/lib by using the following command: - "file /usr/local/lib/libevent.a" - - Your output should be: -/usr/local/lib/libevent.a (for architecture i386): current ar archive random library - -6) Get your preferred version of the tor source from https://www.torproject.org/download. -Extract the tarball. - -7) In the top level, this means /path/to/tor/, not tor/contrib/osx, -do a configure with these parameters: -CFLAGS="-O -g -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386" \ -LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk" \ -CONFDIR=/Library/Tor \ -./configure --prefix=/Library/Tor --bindir=/Library/Tor \ ---sysconfdir=/Library --disable-dependency-tracking - -8) "make dist-osx" - -9) Confirm you have created a universal binary by issuing the follow command: -"file src/or/tor". Its output should be as follows: -src/or/tor (for architecture i386): Mach-O executable i386 - -10) There should exist in the top-level directory a -Tor-$VERSION-universal-Bundle.dmg - -11) Congrats. You have a backwards-compatible binary. You are now ready to install Tor. - -### Universal Binaries for OSX PPC and X86 -### This method works in OSX 10.4 (Tiger) and newer OSX versions. - -1) Install the latest XCode updates available from http://developer.apple.com. - -## Compiling libevent ## - -2) Download latest stable libevent from -http://www.monkey.org/~provos/libevent/ - -3) The first step of compiling libevent is to configure it as -follows: -CFLAGS="-O -g -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" \ -LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk" \ -./configure --enable-static --disable-shared --disable-dependency-tracking - -4) Complete the "make" and "make install". You will need to be root, -or sudo -s, to complete the "make install". - -5) Check for a successful universal binary of libevent.a in, by default, -/usr/local/lib by using the following command: - "file /usr/local/lib/libevent.a" - - Your output should be: -/usr/local/lib/libevent.a: Mach-O fat file with 2 architectures -/usr/local/lib/libevent.a (for architecture i386): current ar archive random library -/usr/local/lib/libevent.a (for architecture ppc): current ar archive - -6) Get your preferred version of the tor source from https://www.torproject.org/download. -Extract the tarball. - -7) In the top level, this means /path/to/tor/, not tor/contrib/osx, -do a configure with these parameters: -CFLAGS="-O -g -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" \ -LDFLAGS="-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk" \ -CONFDIR=/Library/Tor \ -./configure --prefix=/Library/Tor --bindir=/Library/Tor \ ---sysconfdir=/Library --disable-dependency-tracking - -8) "make dist-osx" - -9) Confirm you have created a universal binary by issuing the follow command: -"file src/or/tor". Its output should be as follows: -src/or/tor: Mach-O fat file with 2 architectures -src/or/tor (for architecture i386): Mach-O executable i386 -src/or/tor (for architecture ppc): Mach-O executable ppc - -10) There should exist in the top-level directory a -Tor-$VERSION-universal-Bundle.dmg - -11) Congrats. You have a universal binary. You are now ready to install Tor. diff -Nru tor-0.2.1.30/doc/tor-resolve.1 tor-0.2.2.35/doc/tor-resolve.1 --- tor-0.2.1.30/doc/tor-resolve.1 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/doc/tor-resolve.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -.TH tor-resolve 1 "" Aug-2004 "" -.\" manual page by Peter Palfrader -.SH NAME -.LP -tor-resolve \- resolve a hostname to an IP address via tor - -.SH SYNOPSIS -\fBtor-resolve\fP\ [-4|-5] [-v] [-x] \fIhostname\fP\ [\fIsockshost\fP[:\fIsocksport]\fP] - -.SH DESCRIPTION -\fBtor-resolve\fR is a simple script to connect to a SOCKS proxy that -knows about the SOCKS RESOLVE command, hand it a hostname, and return -an IP address. -.SH OPTIONS -\fB-v \fP -Display verbose output. -.LP -.TP -\fB-x\fP -Perform a reverse lookup: get the PTR record for an IPv4 address. -.LP -.TP -\fB-5\fP -Use the SOCKS5 protocol. (Default) -.LP -.TP -\fB-4\fP -Use the SOCKS4a protocol rather than the default SOCKS5 protocol. Doesn't -support reverse DNS. - -.SH SEE ALSO -.BR tor (1), -.BR torify (1). -.PP -See doc/socks-extensions.txt in the Tor package for protocol details. - -.SH AUTHORS -Roger Dingledine , Nick Mathewson . diff -Nru tor-0.2.1.30/doc/tor-resolve.1.in tor-0.2.2.35/doc/tor-resolve.1.in --- tor-0.2.1.30/doc/tor-resolve.1.in 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/tor-resolve.1.in 2011-12-15 16:32:24.000000000 +0000 @@ -0,0 +1,68 @@ +'\" t +.\" Title: tor-resolve +.\" Author: [see the "AUTHORS" section] +.\" Generator: DocBook XSL Stylesheets v1.76.1 +.\" Date: 12/15/2011 +.\" Manual: [FIXME: manual] +.\" Source: [FIXME: source] +.\" Language: English +.\" +.TH "TOR\-RESOLVE" "1" "12/15/2011" "[FIXME: source]" "[FIXME: manual]" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" disable hyphenation +.nh +.\" disable justification (adjust text to left margin only) +.ad l +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "NAME" +tor-resolve \- resolve a hostname to an IP address via tor +.SH "SYNOPSIS" +.sp +\fBtor\-resolve\fR [\-4|\-5] [\-v] [\-x] \fIhostname\fR [\fIsockshost\fR[:\fIsocksport\fR]] +.SH "DESCRIPTION" +.sp +\fBtor\-resolve\fR is a simple script to connect to a SOCKS proxy that knows about the SOCKS RESOLVE command, hand it a hostname, and return an IP address\&. +.sp +By default, \fBtor\-resolve\fR uses the Tor server running on 127\&.0\&.0\&.1 on SOCKS port 9050\&. If this isn\(cqt what you want, you should specify an explicit \fIsockshost\fR and/or \fIsocksport\fR on the command line\&. +.SH "OPTIONS" +.PP +\fB\-v\fR +.RS 4 +Display verbose output\&. +.RE +.PP +\fB\-x\fR +.RS 4 +Perform a reverse lookup: get the PTR record for an IPv4 address\&. +.RE +.PP +\fB\-5\fR +.RS 4 +Use the SOCKS5 protocol\&. (Default) +.RE +.PP +\fB\-4\fR +.RS 4 +Use the SOCKS4a protocol rather than the default SOCKS5 protocol\&. Doesn\(cqt support reverse DNS\&. +.RE +.SH "SEE ALSO" +.sp +\fBtor\fR(1), \fBtorify\fR(1)\&. +.sp +See doc/socks\-extensions\&.txt in the Tor package for protocol details\&. +.SH "AUTHORS" +.sp +Roger Dingledine , Nick Mathewson \&. diff -Nru tor-0.2.1.30/doc/tor-resolve.1.txt tor-0.2.2.35/doc/tor-resolve.1.txt --- tor-0.2.1.30/doc/tor-resolve.1.txt 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/tor-resolve.1.txt 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,49 @@ +// Copyright (c) The Tor Project, Inc. +// See LICENSE for licensing information +// This is an asciidoc file used to generate the manpage/html reference. +// Learn asciidoc on http://www.methods.co.nz/asciidoc/userguide.html +tor-resolve(1) +============== +Peter Palfrader + +NAME +---- +tor-resolve - resolve a hostname to an IP address via tor + +SYNOPSIS +-------- +**tor-resolve** [-4|-5] [-v] [-x] __hostname__ [__sockshost__[:__socksport__]] + +DESCRIPTION +----------- +**tor-resolve** is a simple script to connect to a SOCKS proxy that knows about +the SOCKS RESOLVE command, hand it a hostname, and return an IP address. + +By default, **tor-resolve** uses the Tor server running on 127.0.0.1 on SOCKS +port 9050. If this isn't what you want, you should specify an explicit +__sockshost__ and/or __socksport__ on the command line. + +OPTIONS +------- +**-v**:: + Display verbose output. + +**-x**:: + Perform a reverse lookup: get the PTR record for an IPv4 address. + +**-5**:: + Use the SOCKS5 protocol. (Default) + +**-4**:: + Use the SOCKS4a protocol rather than the default SOCKS5 protocol. Doesn't + support reverse DNS. + +SEE ALSO +-------- +**tor**(1), **torify**(1). + + +See doc/socks-extensions.txt in the Tor package for protocol details. + +AUTHORS +------- +Roger Dingledine , Nick Mathewson . diff -Nru tor-0.2.1.30/doc/tor-resolve.html.in tor-0.2.2.35/doc/tor-resolve.html.in --- tor-0.2.1.30/doc/tor-resolve.html.in 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/doc/tor-resolve.html.in 2011-12-15 16:32:25.000000000 +0000 @@ -0,0 +1,480 @@ + + + + + +tor-resolve(1) + + + + +

SYNOPSIS

+
+

tor-resolve [-4|-5] [-v] [-x] hostname [sockshost[:socksport]]

+
+

DESCRIPTION

+
+

tor-resolve is a simple script to connect to a SOCKS proxy that knows about +the SOCKS RESOLVE command, hand it a hostname, and return an IP address.

+

By default, tor-resolve uses the Tor server running on 127.0.0.1 on SOCKS +port 9050. If this isn’t what you want, you should specify an explicit +sockshost and/or socksport on the command line.

+
+

OPTIONS

+
+
+
+-v +
+
+

+ Display verbose output. +

+
+
+-x +
+
+

+ Perform a reverse lookup: get the PTR record for an IPv4 address. +

+
+
+-5 +
+
+

+ Use the SOCKS5 protocol. (Default) +

+
+
+-4 +
+
+

+ Use the SOCKS4a protocol rather than the default SOCKS5 protocol. Doesn’t + support reverse DNS. +

+
+
+
+

SEE ALSO

+
+

tor(1), torify(1).

+

See doc/socks-extensions.txt in the Tor package for protocol details.

+
+

AUTHORS

+
+

Roger Dingledine <arma@mit.edu>, Nick Mathewson <nickm@alum.mit.edu>.

+
+ + + diff -Nru tor-0.2.1.30/doc/tor-win32-mingw-creation.txt tor-0.2.2.35/doc/tor-win32-mingw-creation.txt --- tor-0.2.1.30/doc/tor-win32-mingw-creation.txt 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/doc/tor-win32-mingw-creation.txt 2011-12-15 16:26:49.000000000 +0000 @@ -1,3 +1,4 @@ +## ## Instructions for building Tor with MinGW (http://www.mingw.org/) ## @@ -5,21 +6,21 @@ --------------------------------------- Download mingw: -http://prdownloads.sf.net/mingw/MinGW-5.1.4.exe?download +http://prdownloads.sf.net/mingw/MinGW-5.1.6.exe?download Download msys: -http://prdownloads.sf.net/mingw/MSYS-1.0.10.exe?download +http://prdownloads.sf.net/ming/MSYS-1.0.11.exe?download + +Download msysDTK: +http://sourceforge.net/projects/mingw/files/MSYS%20Supplementary%20Tools/msysDTK-1.0.1/msysDTK-1.0.1.exe/download -Download the mingw developer tool kit: -http://prdownloads.sf.net/mingw/msysDTK-1.0.1.exe?download +Install MinGW, msysDTK, and MSYS in that order. -Download the mingw autoconf-2.59 update: -http://prdownloads.sf.net/mingw/msys-autoconf-2.59.tar.bz2?download +Make sure your PATH includes C:\MinGW\bin. You can verify this by right +clicking on "My Computer", choose "Properties", choose "Advanced", +choose "Environment Variables", select PATH. -Install mingw, msys and mingw-dtk. Extract msys-autoconf-2.59.tar.bz2 into -your mingw install location. For example, if you installed mingw into -/c/mingw/1.0/ you want to extract msys-autoconf-2.59.tar.bz2 into this -directory. +Start MSYS(rxvt). Create a directory called "tor-mingw". @@ -27,17 +28,17 @@ ---------------------------------------------- Download openssl: -http://www.openssl.org/source/openssl-0.9.8k.tar.gz +http://www.openssl.org/source/openssl-0.9.8l.tar.gz Extract openssl: Copy the openssl tarball into the "tor-mingw" directory. Type "cd tor-mingw/" -Type "tar zxf openssl-0.9.8k.tar.gz" +Type "tar zxf openssl-0.9.8l.tar.gz" (Note: There are many symlink errors because Windows doesn't support symlinks. You can ignore these errors.) Make openssl libraries: -Type "cd tor-mingw/openssl-0.9.8k/" +Type "cd tor-mingw/openssl-0.9.8l/" Type "./Configure -no-idea -no-rc5 -no-mdc2 mingw" Edit Makefile and remove the "test:" and "tests:" sections. Type "rm -rf ./test" @@ -47,16 +48,11 @@ Type "find ./ -name "*.h" -exec cp {} ../include/openssl/ \;" Type "cd .." Type "cp *.h include/openssl/" -Type "cp fips/fips.h include/openssl/" +Type "find ./fips -type f -name "*.h" -exec cp {} include/openssl/ \;" # The next steps can take up to 30 minutes to complete. Type "make" Type "make install" -Alternatively: -Download the pre-compiled openssl for win32 from -http://gnuwin32.sourceforge.net/packages/openssl.htm -Install and proceed. - Stage Three: Download, extract, compile zlib --------------------------------------------- @@ -77,13 +73,6 @@ Type "make" Type "make install" -OR - -Make zlib1.dll: -Type "cd tor-mingw/zlib-1.2.3/" -Type "./configure" -Type "make -f win32/Makefile.gcc" - Done. @@ -128,4 +117,3 @@ "./contrib/package_nsis-mingw.sh" The resulting Tor installer executable is in ./win_tmp/. - diff -Nru tor-0.2.1.30/Doxyfile.in tor-0.2.2.35/Doxyfile.in --- tor-0.2.1.30/Doxyfile.in 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/Doxyfile.in 2011-12-15 16:26:49.000000000 +0000 @@ -1,5 +1,4 @@ -# $Id$ -# Doxyfile 1.5.1 +# Doxyfile 1.5.6 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project @@ -15,6 +14,14 @@ # Project related configuration options #--------------------------------------------------------------------------- +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. @@ -47,23 +54,14 @@ # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian, -# Italian, Japanese, Japanese-en (Japanese with English messages), Korean, -# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, -# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian. +# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, +# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, +# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, +# and Ukrainian. OUTPUT_LANGUAGE = English -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). @@ -136,11 +134,19 @@ # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. @@ -154,7 +160,7 @@ # If set to NO, the detailed description appears after the member # documentation. -DETAILS_AT_TOP = NO +# DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it @@ -190,14 +196,26 @@ OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to -# include (a tag file for) the STL sources as input, then you should +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration @@ -205,6 +223,26 @@ BUILTIN_STL_SUPPORT = NO +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen to replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = NO + # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default @@ -220,6 +258,16 @@ SUBGROUPING = YES +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -254,6 +302,14 @@ EXTRACT_LOCAL_METHODS = NO +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespace are hidden. + +EXTRACT_ANON_NSPACES = NO + # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the @@ -329,6 +385,12 @@ SORT_BRIEF_DOCS = NO +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, @@ -390,9 +452,21 @@ SHOW_DIRECTORIES = NO +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + # The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output @@ -463,12 +537,20 @@ INPUT = src/common \ src/or +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.c \ *.h @@ -499,6 +581,14 @@ EXCLUDE_PATTERNS = +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). @@ -559,7 +649,7 @@ # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. @@ -572,13 +662,13 @@ STRIP_CODE_COMMENTS = YES -# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES -# If the REFERENCES_RELATION tag is set to YES (the default) +# If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. @@ -678,11 +768,44 @@ # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs for Tor" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.torproject.Tor + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = NO + # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be @@ -703,6 +826,12 @@ GENERATE_CHI = NO +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. @@ -725,12 +854,20 @@ ENUM_VALUES_PER_LINE = 4 -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to FRAME, a side panel will be generated +# containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. +# probably better off using the HTML help feature. Other possible values +# for this tag are: HIERARCHIES, which will generate the Groups, Directories, +# and Class Hiererachy pages using a tree view instead of an ordered list; +# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which +# disables this behavior completely. For backwards compatibility with previous +# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE +# respectively. GENERATE_TREEVIEW = NO @@ -740,6 +877,14 @@ TREEVIEW_WIDTH = 250 +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- @@ -1088,6 +1233,15 @@ CLASS_DIAGRAMS = YES +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. @@ -1101,6 +1255,24 @@ HAVE_DOT = NO +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the @@ -1145,19 +1317,19 @@ INCLUDED_BY_GRAPH = YES -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. CALL_GRAPH = NO -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a caller dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO @@ -1190,39 +1362,31 @@ DOTFILE_DIRS = -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. -MAX_DOT_GRAPH_HEIGHT = 1024 +DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). +# background. This is enabled by default, which results in a transparent +# background. Warning: Depending on the platform used, enabling this option +# may lead to badly anti-aliased labels on the edges of a graph (i.e. they +# become hard to read). DOT_TRANSPARENT = NO diff -Nru tor-0.2.1.30/install-sh tor-0.2.2.35/install-sh --- tor-0.2.1.30/install-sh 2010-11-30 20:57:32.000000000 +0000 +++ tor-0.2.2.35/install-sh 2011-12-15 16:28:48.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2006-12-25.00 +scriptversion=2009-04-28.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -515,5 +515,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff -Nru tor-0.2.1.30/Makefile.am tor-0.2.2.35/Makefile.am --- tor-0.2.1.30/Makefile.am 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/Makefile.am 2011-12-15 16:28:37.000000000 +0000 @@ -1,4 +1,3 @@ -# $Id$ # Copyright (c) 2001-2004, Roger Dingledine # Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson # Copyright (c) 2007-2011, The Tor Project, Inc. @@ -11,7 +10,7 @@ DIST_SUBDIRS = src doc contrib -EXTRA_DIST = INSTALL README AUTHORS LICENSE ChangeLog \ +EXTRA_DIST = INSTALL README LICENSE ChangeLog \ ReleaseNotes tor.spec tor.spec.in #install-data-local: @@ -35,39 +34,22 @@ mv $$RPM_BUILD_DIR/RPMS/* .; \ rm -rf $$RPM_BUILD_DIR -dist-osx: - @if [ "x$(prefix)" != 'x/Library/Tor' ]; then \ - echo "Configure with --prefix=/Library/Tor, please"; \ - exit 1; \ - fi; \ - if [ "x$(bindir)" != 'x/Library/Tor' ]; then \ - echo "Configure with --bindir=/Library/Tor, please"; \ - exit 1; \ - fi; \ - if [ "x$(sysconfdir)" != 'x/Library' ]; then \ - echo "Configure with --sysconfdir=/Library, please"; \ - exit 1; \ - fi; \ - if [ "x$(CONFDIR)" != 'x/Library/Tor' ]; then \ - echo "Configure with CONFDIR=/Library/Tor, please"; \ - fi - $(MAKE) all - VERSION=$(VERSION) sh ./contrib/osx/package.sh - dist: check doxygen: doxygen && cd doc/doxygen/latex && make -test: - ./src/or/test +test: all + ./src/test/test -# Avoid strlcpy.c, strlcat.c, tree.h +# Avoid strlcpy.c, strlcat.c, aes.c, OpenBSD_malloc_Linux.c, sha256.c, +# eventdns.[hc], tinytest*.[ch] check-spaces: ./contrib/checkSpace.pl -C \ src/common/*.h \ src/common/[^asO]*.c src/common/address.c \ - src/or/[^et]*.[ch] src/or/t*.c src/or/eventdns_tor.h + src/or/[^e]*.[ch] src/or/eventdns_tor.h \ + src/test/test*.[ch] src/tools/*.[ch] check-docs: ./contrib/checkOptionDocs.pl diff -Nru tor-0.2.1.30/Makefile.in tor-0.2.2.35/Makefile.in --- tor-0.2.1.30/Makefile.in 2011-02-23 08:25:54.000000000 +0000 +++ tor-0.2.2.35/Makefile.in 2011-12-15 17:01:55.000000000 +0000 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,15 @@ @SET_MAKE@ -# $Id$ # Copyright (c) 2001-2004, Roger Dingledine # Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson # Copyright (c) 2007-2011, The Tor Project, Inc. # See LICENSE for licensing information VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -41,8 +42,8 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Doxyfile.in \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/orconfig.h.in $(srcdir)/tor.spec.in \ - $(top_srcdir)/configure AUTHORS ChangeLog INSTALL compile \ - config.guess config.sub depcomp install-sh missing + $(top_srcdir)/configure ChangeLog INSTALL config.guess \ + config.sub depcomp install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.in @@ -53,6 +54,7 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = orconfig.h CONFIG_CLEAN_FILES = tor.spec Doxyfile +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ @@ -64,21 +66,52 @@ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print +A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AR = @AR@ +ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -113,15 +146,19 @@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ +OPENSSL = @OPENSSL@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ +SHA1SUM = @SHA1SUM@ SHELL = @SHELL@ STRIP = @STRIP@ TORGROUP = @TORGROUP@ @@ -136,6 +173,7 @@ TOR_LIB_GDI = @TOR_LIB_GDI@ TOR_LIB_WS32 = @TOR_LIB_WS32@ TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ +TOR_ZLIB_LIBS = @TOR_ZLIB_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -184,12 +222,13 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign 1.7 SUBDIRS = src doc contrib DIST_SUBDIRS = src doc contrib -EXTRA_DIST = INSTALL README AUTHORS LICENSE ChangeLog \ +EXTRA_DIST = INSTALL README LICENSE ChangeLog \ ReleaseNotes tor.spec tor.spec.in all: orconfig.h @@ -202,15 +241,15 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ - cd $(srcdir) && $(AUTOMAKE) --foreign \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -226,9 +265,10 @@ $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): orconfig.h: stamp-h1 @if test ! -f $@; then \ @@ -240,7 +280,7 @@ @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status orconfig.h $(srcdir)/orconfig.h.in: $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -258,7 +298,7 @@ # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -275,7 +315,7 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ @@ -283,7 +323,7 @@ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -309,16 +349,16 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -326,14 +366,14 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) orconfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -345,7 +385,7 @@ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) orconfig.h.in $(LISP) $(TAGS_FILES)'; \ @@ -354,36 +394,41 @@ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) orconfig.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ list='$(SOURCES) $(HEADERS) orconfig.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) - test -d $(distdir) || mkdir $(distdir) + test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -399,38 +444,55 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) @@ -443,6 +505,10 @@ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -466,15 +532,17 @@ distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ - bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ - unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac @@ -482,9 +550,11 @@ mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ @@ -506,13 +576,15 @@ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ + @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ @@ -554,6 +626,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -573,6 +646,8 @@ html: html-recursive +html-am: + info: info-recursive info-am: @@ -581,18 +656,28 @@ install-dvi: install-dvi-recursive +install-dvi-am: + install-exec-am: install-html: install-html-recursive +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: install-pdf: install-pdf-recursive +install-pdf-am: + install-ps: install-ps-recursive +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -615,21 +700,21 @@ uninstall-am: -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-lzma dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-generic distclean-hdr distclean-tags distcleancheck \ - distdir distuninstallcheck dvi dvi-am html html-am info \ - info-am install install-am install-data install-data-am \ - install-dvi install-dvi-am install-exec install-exec-am \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ - installdirs installdirs-am maintainer-clean \ + dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ + distclean distclean-generic distclean-hdr distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am @@ -656,39 +741,22 @@ mv $$RPM_BUILD_DIR/RPMS/* .; \ rm -rf $$RPM_BUILD_DIR -dist-osx: - @if [ "x$(prefix)" != 'x/Library/Tor' ]; then \ - echo "Configure with --prefix=/Library/Tor, please"; \ - exit 1; \ - fi; \ - if [ "x$(bindir)" != 'x/Library/Tor' ]; then \ - echo "Configure with --bindir=/Library/Tor, please"; \ - exit 1; \ - fi; \ - if [ "x$(sysconfdir)" != 'x/Library' ]; then \ - echo "Configure with --sysconfdir=/Library, please"; \ - exit 1; \ - fi; \ - if [ "x$(CONFDIR)" != 'x/Library/Tor' ]; then \ - echo "Configure with CONFDIR=/Library/Tor, please"; \ - fi - $(MAKE) all - VERSION=$(VERSION) sh ./contrib/osx/package.sh - dist: check doxygen: doxygen && cd doc/doxygen/latex && make -test: - ./src/or/test +test: all + ./src/test/test -# Avoid strlcpy.c, strlcat.c, tree.h +# Avoid strlcpy.c, strlcat.c, aes.c, OpenBSD_malloc_Linux.c, sha256.c, +# eventdns.[hc], tinytest*.[ch] check-spaces: ./contrib/checkSpace.pl -C \ src/common/*.h \ src/common/[^asO]*.c src/common/address.c \ - src/or/[^et]*.[ch] src/or/t*.c src/or/eventdns_tor.h + src/or/[^e]*.[ch] src/or/eventdns_tor.h \ + src/test/test*.[ch] src/tools/*.[ch] check-docs: ./contrib/checkOptionDocs.pl @@ -696,6 +764,7 @@ check-logs: ./contrib/checkLogs.pl \ src/*/*.[ch] | sort -n + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru tor-0.2.1.30/missing tor-0.2.2.35/missing --- tor-0.2.1.30/missing 2010-11-30 20:57:32.000000000 +0000 +++ tor-0.2.2.35/missing 2011-12-15 16:28:49.000000000 +0000 @@ -1,10 +1,10 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -scriptversion=2006-05-10.23 +scriptversion=2009-04-28.21; # UTC -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -18,9 +18,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -89,6 +87,9 @@ tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + Send bug reports to ." exit $? ;; @@ -106,15 +107,22 @@ esac +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect -# the program). +# the program). This is about non-GNU programs, so use $1 not +# $program. case $1 in - lex|yacc) + lex*|yacc*) # Not GNU programs, they don't have --version. ;; - tar) + tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 @@ -138,7 +146,7 @@ # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. -case $1 in +case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if @@ -148,7 +156,7 @@ touch aclocal.m4 ;; - autoconf) + autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the @@ -157,7 +165,7 @@ touch configure ;; - autoheader) + autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want @@ -187,7 +195,7 @@ while read f; do touch "$f"; done ;; - autom4te) + autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the @@ -210,7 +218,7 @@ fi ;; - bison|yacc) + bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package @@ -240,7 +248,7 @@ fi ;; - lex|flex) + lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package @@ -263,7 +271,7 @@ fi ;; - help2man) + help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the @@ -277,11 +285,11 @@ else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" - exit 1 + exit $? fi ;; - makeinfo) + makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file @@ -310,7 +318,7 @@ touch $file ;; - tar) + tar*) shift # We have already tried tar in the generic part. @@ -363,5 +371,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff -Nru tor-0.2.1.30/orconfig.h.in tor-0.2.2.35/orconfig.h.in --- tor-0.2.1.30/orconfig.h.in 2011-02-23 08:26:29.000000000 +0000 +++ tor-0.2.2.35/orconfig.h.in 2011-12-15 17:02:08.000000000 +0000 @@ -1,5 +1,8 @@ /* orconfig.h.in. Generated from configure.in by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* tor's configuration directory */ #undef CONFDIR @@ -9,9 +12,6 @@ /* Defined if we try to use freelists for buffer RAM chunks */ #undef ENABLE_BUF_FREELISTS -/* Defined if we try to collect per-country statistics */ -#undef ENABLE_GEOIP_STATS - /* Defined if we default to host local appdata paths on Windows */ #undef ENABLE_LOCAL_APPDATA @@ -24,6 +24,10 @@ /* Define to 1 if you have the header file. */ #undef HAVE_ASSERT_H +/* Define to 1 if you have the declaration of `mlockall', and to 0 if you + don't. */ +#undef HAVE_DECL_MLOCKALL + /* Define to 1 if you have the header file. */ #undef HAVE_DMALLOC_H @@ -36,12 +40,27 @@ /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H +/* Define to 1 if you have the `evdns_set_outgoing_bind_address' function. */ +#undef HAVE_EVDNS_SET_OUTGOING_BIND_ADDRESS + +/* Define to 1 if you have the header file. */ +#undef HAVE_EVENT2_DNS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_EVENT2_EVENT_H + +/* Define to 1 if you have the `event_base_loopexit' function. */ +#undef HAVE_EVENT_BASE_LOOPEXIT + /* Define to 1 if you have the `event_get_method' function. */ #undef HAVE_EVENT_GET_METHOD /* Define to 1 if you have the `event_get_version' function. */ #undef HAVE_EVENT_GET_VERSION +/* Define to 1 if you have the `event_get_version_number' function. */ +#undef HAVE_EVENT_GET_VERSION_NUMBER + /* Define to 1 if you have the `event_set_log_callback' function. */ #undef HAVE_EVENT_SET_LOG_CALLBACK @@ -105,6 +124,9 @@ /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R +/* Define to 1 if you have the `lround' function. */ +#undef HAVE_LROUND + /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_LIMITS_H @@ -144,6 +166,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H +/* Define to 1 if you have the `mlockall' function. */ +#undef HAVE_MLOCKALL + /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H @@ -174,6 +199,9 @@ /* Define to 1 if you have the `readv' function. */ #undef HAVE_READV +/* Define to 1 if you have the `rint' function. */ +#undef HAVE_RINT + /* Define to 1 if the system has the type `rlim_t'. */ #undef HAVE_RLIM_T @@ -216,28 +244,28 @@ /* Define to 1 if you have the `strtoull' function. */ #undef HAVE_STRTOULL -/* Define to 1 if `min_heap_idx' is member of `struct event'. */ +/* Define to 1 if `min_heap_idx' is a member of `struct event'. */ #undef HAVE_STRUCT_EVENT_MIN_HEAP_IDX /* Define to 1 if the system has the type `struct in6_addr'. */ #undef HAVE_STRUCT_IN6_ADDR -/* Define to 1 if `s6_addr16' is member of `struct in6_addr'. */ +/* Define to 1 if `s6_addr16' is a member of `struct in6_addr'. */ #undef HAVE_STRUCT_IN6_ADDR_S6_ADDR16 -/* Define to 1 if `s6_addr32' is member of `struct in6_addr'. */ +/* Define to 1 if `s6_addr32' is a member of `struct in6_addr'. */ #undef HAVE_STRUCT_IN6_ADDR_S6_ADDR32 /* Define to 1 if the system has the type `struct sockaddr_in6'. */ #undef HAVE_STRUCT_SOCKADDR_IN6 -/* Define to 1 if `sin6_len' is member of `struct sockaddr_in6'. */ +/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */ #undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN -/* Define to 1 if `sin_len' is member of `struct sockaddr_in'. */ +/* Define to 1 if `sin_len' is a member of `struct sockaddr_in'. */ #undef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN -/* Define to 1 if `tv_sec' is member of `struct timeval'. */ +/* Define to 1 if `tv_sec' is a member of `struct timeval'. */ #undef HAVE_STRUCT_TIMEVAL_TV_SEC /* Define to 1 if you have the header file. */ @@ -312,6 +340,9 @@ /* Define to 1 if the system has the type `u_char'. */ #undef HAVE_U_CHAR +/* Define to 1 if you have the `vasprintf' function. */ +#undef HAVE_VASPRINTF + /* Define to 1 if you have the `writev' function. */ #undef HAVE_WRITEV @@ -349,9 +380,15 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* Define to 1 iff right-shifting a negative value performs sign-extension */ +#undef RSHIFT_DOES_SIGN_EXTEND + /* The size of `cell_t', as computed by sizeof. */ #undef SIZEOF_CELL_T @@ -433,9 +470,17 @@ /* Version number of package */ #undef VERSION -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS diff -Nru tor-0.2.1.30/README tor-0.2.2.35/README --- tor-0.2.1.30/README 2011-02-23 08:25:39.000000000 +0000 +++ tor-0.2.2.35/README 2011-12-15 16:26:49.000000000 +0000 @@ -4,7 +4,7 @@ configure it properly. To build Tor from source: - ./configure; make; make install + ./configure && make && make install Home page: https://www.torproject.org/ @@ -19,5 +19,6 @@ https://wiki.torproject.org/noreply/TheOnionRouter/TorifyHOWTO Frequently Asked Questions: + https://www.torproject.org/faq.html https://wiki.torproject.org/noreply/TheOnionRouter/TorFAQ diff -Nru tor-0.2.1.30/ReleaseNotes tor-0.2.2.35/ReleaseNotes --- tor-0.2.1.30/ReleaseNotes 2011-02-12 10:11:43.000000000 +0000 +++ tor-0.2.2.35/ReleaseNotes 2011-12-15 18:16:02.000000000 +0000 @@ -3,6 +3,1669 @@ 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.2.35 - 2011-12-16 + Tor 0.2.2.35 fixes a critical heap-overflow security issue in Tor's + buffers code. Absolutely everybody should upgrade. + + The bug relied on an incorrect calculation when making data continuous + in one of our IO buffers, if the first chunk of the buffer was + misaligned by just the wrong amount. The miscalculation would allow an + attacker to overflow a piece of heap-allocated memory. To mount this + attack, the attacker would need to either open a SOCKS connection to + Tor's SocksPort (usually restricted to localhost), or target a Tor + instance configured to make its connections through a SOCKS proxy + (which Tor does not do by default). + + Good security practice requires that all heap-overflow bugs should be + presumed to be exploitable until proven otherwise, so we are treating + this as a potential code execution attack. Please upgrade immediately! + This bug does not affect bufferevents-based builds of Tor. Special + thanks to "Vektor" for reporting this issue to us! + + Tor 0.2.2.35 also fixes several bugs in previous versions, including + crash bugs for unusual configurations, and a long-term bug that + would that would prevent Tor from starting on Windows machines with + draconian AV software. + + With this release, we remind everyone that 0.2.0.x has reached its + formal end-of-life. Those Tor versions have many known flaws, and + nobody should be using them. You should upgrade--ideally to the + 0.2.2.x series. If you're using a Linux or BSD and its packages are + obsolete, stop using those packages and upgrade anyway. + + The Tor 0.2.1.x series is also approaching its end-of-life: it will no + longer receive support after some time in early 2012. + + o Major bugfixes: + - Fix a heap overflow bug that could occur when trying to pull + data into the first chunk of a buffer, when that chunk had + already had some data drained from it. Fixes CVE-2011-2778; + bugfix on 0.2.0.16-alpha. Reported by "Vektor". + - Initialize Libevent with the EVENT_BASE_FLAG_NOLOCK flag enabled, so + that it doesn't attempt to allocate a socketpair. This could cause + some problems on Windows systems with overzealous firewalls. Fix for + bug 4457; workaround for Libevent versions 2.0.1-alpha through + 2.0.15-stable. + - If we mark an OR connection for close based on a cell we process, + don't process any further cells on it. We already avoid further + reads on marked-for-close connections, but now we also discard the + cells we'd already read. Fixes bug 4299; bugfix on 0.2.0.10-alpha, + which was the first version where we might mark a connection for + close based on processing a cell on it. + - Correctly sanity-check that we don't underflow on a memory + allocation (and then assert) for hidden service introduction + point decryption. Bug discovered by Dan Rosenberg. Fixes bug 4410; + bugfix on 0.2.1.5-alpha. + - Fix a memory leak when we check whether a hidden service + descriptor has any usable introduction points left. Fixes bug + 4424. Bugfix on 0.2.2.25-alpha. + - Don't crash when we're running as a relay and don't have a GeoIP + file. Bugfix on 0.2.2.34; fixes bug 4340. This backports a fix + we've had in the 0.2.3.x branch already. + - When running as a client, do not print a misleading (and plain + wrong) log message that we're collecting "directory request" + statistics: clients don't collect statistics. Also don't create a + useless (because empty) stats file in the stats/ directory. Fixes + bug 4353; bugfix on 0.2.2.34. + + o Minor bugfixes: + - Detect failure to initialize Libevent. This fix provides better + detection for future instances of bug 4457. + - Avoid frequent calls to the fairly expensive cull_wedged_cpuworkers + function. This was eating up hideously large amounts of time on some + busy servers. Fixes bug 4518; bugfix on 0.0.9.8. + - Resolve an integer overflow bug in smartlist_ensure_capacity(). + Fixes bug 4230; bugfix on Tor 0.1.0.1-rc. Based on a patch by + Mansour Moufid. + - Don't warn about unused log_mutex in log.c when building with + --disable-threads using a recent GCC. Fixes bug 4437; bugfix on + 0.1.0.6-rc which introduced --disable-threads. + - When configuring, starting, or stopping an NT service, stop + immediately after the service configuration attempt has succeeded + or failed. Fixes bug 3963; bugfix on 0.2.0.7-alpha. + - When sending a NETINFO cell, include the original address + received for the other side, not its canonical address. Found + by "troll_un"; fixes bug 4349; bugfix on 0.2.0.10-alpha. + - Fix a typo in a hibernation-related log message. Fixes bug 4331; + bugfix on 0.2.2.23-alpha; found by "tmpname0901". + - Fix a memory leak in launch_direct_bridge_descriptor_fetch() that + occurred when a client tried to fetch a descriptor for a bridge + in ExcludeNodes. Fixes bug 4383; bugfix on 0.2.2.25-alpha. + - Backport fixes for a pair of compilation warnings on Windows. + Fixes bug 4521; bugfix on 0.2.2.28-beta and on 0.2.2.29-beta. + - If we had ever tried to call tor_addr_to_str on an address of + unknown type, we would have done a strdup on an uninitialized + buffer. Now we won't. Fixes bug 4529; bugfix on 0.2.1.3-alpha. + Reported by "troll_un". + - Correctly detect and handle transient lookup failures from + tor_addr_lookup. Fixes bug 4530; bugfix on 0.2.1.5-alpha. + Reported by "troll_un". + - Fix null-pointer access that could occur if TLS allocation failed. + Fixes bug 4531; bugfix on 0.2.0.20-rc. Found by "troll_un". + - Use tor_socket_t type for listener argument to accept(). Fixes bug + 4535; bugfix on 0.2.2.28-beta. Found by "troll_un". + + o Minor features: + - Add two new config options for directory authorities: + AuthDirFastGuarantee sets a bandwidth threshold for guaranteeing the + Fast flag, and AuthDirGuardBWGuarantee sets a bandwidth threshold + that is always sufficient to satisfy the bandwidth requirement for + the Guard flag. Now it will be easier for researchers to simulate + Tor networks with different values. Resolves ticket 4484. + - When Tor ignores a hidden service specified in its configuration, + include the hidden service's directory in the warning message. + Previously, we would only tell the user that some hidden service + was ignored. Bugfix on 0.0.6; fixes bug 4426. + - Update to the December 6 2011 Maxmind GeoLite Country database. + + o Packaging changes: + - Make it easier to automate expert package builds on Windows, + by removing an absolute path from makensis.exe command. + + +Changes in version 0.2.2.34 - 2011-10-26 + Tor 0.2.2.34 fixes a critical anonymity vulnerability where an attacker + can deanonymize Tor users. Everybody should upgrade. + + The attack relies on four components: 1) Clients reuse their TLS cert + when talking to different relays, so relays can recognize a user by + the identity key in her cert. 2) An attacker who knows the client's + identity key can probe each guard relay to see if that identity key + is connected to that guard relay right now. 3) A variety of active + attacks in the literature (starting from "Low-Cost Traffic Analysis + of Tor" by Murdoch and Danezis in 2005) allow a malicious website to + discover the guard relays that a Tor user visiting the website is using. + 4) Clients typically pick three guards at random, so the set of guards + for a given user could well be a unique fingerprint for her. This + release fixes components #1 and #2, which is enough to block the attack; + the other two remain as open research problems. Special thanks to + "frosty_un" for reporting the issue to us! + + Clients should upgrade so they are no longer recognizable by the TLS + certs they present. Relays should upgrade so they no longer allow a + remote attacker to probe them to test whether unpatched clients are + currently connected to them. + + This release also fixes several vulnerabilities that allow an attacker + to enumerate bridge relays. Some bridge enumeration attacks still + remain; see for example proposal 188. + + o Privacy/anonymity fixes (clients): + - Clients and bridges no longer send TLS certificate chains on + outgoing OR connections. Previously, each client or bridge would + use the same cert chain for all outgoing OR connections until + its IP address changes, which allowed any relay that the client + or bridge contacted to determine which entry guards it is using. + Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by "frosty_un". + - If a relay receives a CREATE_FAST cell on a TLS connection, it + no longer considers that connection as suitable for satisfying a + circuit EXTEND request. Now relays can protect clients from the + CVE-2011-2768 issue even if the clients haven't upgraded yet. + - Directory authorities no longer assign the Guard flag to relays + that haven't upgraded to the above "refuse EXTEND requests + to client connections" fix. Now directory authorities can + protect clients from the CVE-2011-2768 issue even if neither + the clients nor the relays have upgraded yet. There's a new + "GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays" config option + to let us transition smoothly, else tomorrow there would be no + guard relays. + + o Privacy/anonymity fixes (bridge enumeration): + - Bridge relays now do their directory fetches inside Tor TLS + connections, like all the other clients do, rather than connecting + directly to the DirPort like public relays do. Removes another + avenue for enumerating bridges. Fixes bug 4115; bugfix on 0.2.0.35. + - Bridges relays now build circuits for themselves in a more similar + way to how clients build them. Removes another avenue for + enumerating bridges. Fixes bug 4124; bugfix on 0.2.0.3-alpha, + when bridges were introduced. + - Bridges now refuse CREATE or CREATE_FAST cells on OR connections + that they initiated. Relays could distinguish incoming bridge + connections from client connections, creating another avenue for + enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha. + Found by "frosty_un". + + o Major bugfixes: + - Fix a crash bug when changing node restrictions while a DNS lookup + is in-progress. Fixes bug 4259; bugfix on 0.2.2.25-alpha. Bugfix + by "Tey'". + - Don't launch a useless circuit after failing to use one of a + hidden service's introduction points. Previously, we would + launch a new introduction circuit, but not set the hidden service + which that circuit was intended to connect to, so it would never + actually be used. A different piece of code would then create a + new introduction circuit correctly. Bug reported by katmagic and + found by Sebastian Hahn. Bugfix on 0.2.1.13-alpha; fixes bug 4212. + + o Minor bugfixes: + - Change an integer overflow check in the OpenBSD_Malloc code so + that GCC is less likely to eliminate it as impossible. Patch + from Mansour Moufid. Fixes bug 4059. + - When a hidden service turns an extra service-side introduction + circuit into a general-purpose circuit, free the rend_data and + intro_key fields first, so we won't leak memory if the circuit + is cannibalized for use as another service-side introduction + circuit. Bugfix on 0.2.1.7-alpha; fixes bug 4251. + - Bridges now skip DNS self-tests, to act a little more stealthily. + Fixes bug 4201; bugfix on 0.2.0.3-alpha, which first introduced + bridges. Patch by "warms0x". + - Fix internal bug-checking logic that was supposed to catch + failures in digest generation so that it will fail more robustly + if we ask for a nonexistent algorithm. Found by Coverity Scan. + Bugfix on 0.2.2.1-alpha; fixes Coverity CID 479. + - Report any failure in init_keys() calls launched because our + IP address has changed. Spotted by Coverity Scan. Bugfix on + 0.1.1.4-alpha; fixes CID 484. + + o Minor bugfixes (log messages and documentation): + - Remove a confusing dollar sign from the example fingerprint in the + man page, and also make the example fingerprint a valid one. Fixes + bug 4309; bugfix on 0.2.1.3-alpha. + - The next version of Windows will be called Windows 8, and it has + a major version of 6, minor version of 2. Correctly identify that + version instead of calling it "Very recent version". Resolves + ticket 4153; reported by funkstar. + - Downgrade log messages about circuit timeout calibration from + "notice" to "info": they don't require or suggest any human + intervention. Patch from Tom Lowenthal. Fixes bug 4063; + bugfix on 0.2.2.14-alpha. + + o Minor features: + - Turn on directory request statistics by default and include them in + extra-info descriptors. Don't break if we have no GeoIP database. + Backported from 0.2.3.1-alpha; implements ticket 3951. + - Update to the October 4 2011 Maxmind GeoLite Country database. + + +Changes in version 0.2.1.31 - 2011-10-26 + Tor 0.2.1.31 backports important security and privacy fixes for + oldstable. This release is intended only for package maintainers and + others who cannot use the 0.2.2 stable series. All others should be + using Tor 0.2.2.x or newer. + + o Security fixes (also included in 0.2.2.x): + - Replace all potentially sensitive memory comparison operations + with versions whose runtime does not depend on the data being + compared. This will help resist a class of attacks where an + adversary can use variations in timing information to learn + sensitive data. Fix for one case of bug 3122. (Safe memcmp + implementation by Robert Ransom based partially on code by DJB.) + - Fix an assert in parsing router descriptors containing IPv6 + addresses. This one took down the directory authorities when + somebody tried some experimental code. Bugfix on 0.2.1.3-alpha. + + o Privacy/anonymity fixes (also included in 0.2.2.x): + - Clients and bridges no longer send TLS certificate chains on + outgoing OR connections. Previously, each client or bridge + would use the same cert chain for all outgoing OR connections + for up to 24 hours, which allowed any relay that the client or + bridge contacted to determine which entry guards it is using. + Fixes CVE-2011-2768. Bugfix on 0.0.9pre5; found by frosty_un. + - If a relay receives a CREATE_FAST cell on a TLS connection, it + no longer considers that connection as suitable for satisfying a + circuit EXTEND request. Now relays can protect clients from the + CVE-2011-2768 issue even if the clients haven't upgraded yet. + - Bridges now refuse CREATE or CREATE_FAST cells on OR connections + that they initiated. Relays could distinguish incoming bridge + connections from client connections, creating another avenue for + enumerating bridges. Fixes CVE-2011-2769. Bugfix on 0.2.0.3-alpha. + Found by "frosty_un". + - When receiving a hidden service descriptor, check that it is for + the hidden service we wanted. Previously, Tor would store any + hidden service descriptors that a directory gave it, whether it + wanted them or not. This wouldn't have let an attacker impersonate + a hidden service, but it did let directories pre-seed a client + with descriptors that it didn't want. Bugfix on 0.0.6. + - Avoid linkability based on cached hidden service descriptors: forget + all hidden service descriptors cached as a client when processing a + SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6. + - Make the bridge directory authority refuse to answer directory + requests for "all" descriptors. It used to include bridge + descriptors in its answer, which was a major information leak. + Found by "piebeer". Bugfix on 0.2.0.3-alpha. + - Don't attach new streams to old rendezvous circuits after SIGNAL + NEWNYM. Previously, we would keep using an existing rendezvous + circuit if it remained open (i.e. if it were kept open by a + long-lived stream, or if a new stream were attached to it before + Tor could notice that it was old and no longer in use). Bugfix on + 0.1.1.15-rc; fixes bug 3375. + + o Minor bugfixes (also included in 0.2.2.x): + - When we restart our relay, we might get a successful connection + from the outside before we've started our reachability tests, + triggering a warning: "ORPort found reachable, but I have no + routerinfo yet. Failing to inform controller of success." This + bug was harmless unless Tor is running under a controller + like Vidalia, in which case the controller would never get a + REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha; + fixes bug 1172. + - Build correctly on OSX with zlib 1.2.4 and higher with all warnings + enabled. Fixes bug 1526. + - Remove undocumented option "-F" from tor-resolve: it hasn't done + anything since 0.2.1.16-rc. + - Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned. + None of the cases where we did this before were wrong, but by making + this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28. + - Fix a rare crash bug that could occur when a client was configured + with a large number of bridges. Fixes bug 2629; bugfix on + 0.2.1.2-alpha. Bugfix by trac user "shitlei". + - Correct the warning displayed when a rendezvous descriptor exceeds + the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by + John Brooks. + - Fix an uncommon assertion failure when running with DNSPort under + heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha. + - When warning about missing zlib development packages during compile, + give the correct package names. Bugfix on 0.2.0.1-alpha. + - Require that introduction point keys and onion keys have public + exponent 65537. Bugfix on 0.2.0.10-alpha. + - Do not crash when our configuration file becomes unreadable, for + example due to a permissions change, between when we start up + and when a controller calls SAVECONF. Fixes bug 3135; bugfix + on 0.0.9pre6. + - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option. + Fixes bug 3208. + - Always NUL-terminate the sun_path field of a sockaddr_un before + passing it to the kernel. (Not a security issue: kernels are + smart enough to reject bad sockaddr_uns.) Found by Coverity; + CID #428. Bugfix on Tor 0.2.0.3-alpha. + - Don't stack-allocate the list of supplementary GIDs when we're + about to log them. Stack-allocating NGROUPS_MAX gid_t elements + could take up to 256K, which is way too much stack. Found by + Coverity; CID #450. Bugfix on 0.2.1.7-alpha. + + o Minor bugfixes (only in 0.2.1.x): + - Resume using micro-version numbers in 0.2.1.x: our Debian packages + rely on them. Bugfix on 0.2.1.30. + - Use git revisions instead of svn revisions when generating our + micro-version numbers. Bugfix on 0.2.1.15-rc; fixes bug 2402. + + o Minor features (also included in 0.2.2.x): + - Adjust the expiration time on our SSL session certificates to + better match SSL certs seen in the wild. Resolves ticket 4014. + - Allow nameservers with IPv6 address. Resolves bug 2574. + - Update to the October 4 2011 Maxmind GeoLite Country database. + + +Changes in version 0.2.2.33 - 2011-09-13 + Tor 0.2.2.33 fixes several bugs, and includes a slight tweak to Tor's + TLS handshake that makes relays and bridges that run this new version + reachable from Iran again. + + o Major bugfixes: + - Avoid an assertion failure when reloading a configuration with + TrackExitHosts changes. Found and fixed by 'laruldan'. Fixes bug + 3923; bugfix on 0.2.2.25-alpha. + + o Minor features (security): + - Check for replays of the public-key encrypted portion of an + INTRODUCE1 cell, in addition to the current check for replays of + the g^x value. This prevents a possible class of active attacks + by an attacker who controls both an introduction point and a + rendezvous point, and who uses the malleability of AES-CTR to + alter the encrypted g^x portion of the INTRODUCE1 cell. We think + that these attacks are infeasible (requiring the attacker to send + on the order of zettabytes of altered cells in a short interval), + but we'd rather block them off in case there are any classes of + this attack that we missed. Reported by Willem Pinckaers. + + o Minor features: + - Adjust the expiration time on our SSL session certificates to + better match SSL certs seen in the wild. Resolves ticket 4014. + - Change the default required uptime for a relay to be accepted as + a HSDir (hidden service directory) from 24 hours to 25 hours. + Improves on 0.2.0.10-alpha; resolves ticket 2649. + - Add a VoteOnHidServDirectoriesV2 config option to allow directory + authorities to abstain from voting on assignment of the HSDir + consensus flag. Related to bug 2649. + - Update to the September 6 2011 Maxmind GeoLite Country database. + + o Minor bugfixes (documentation and log messages): + - Correct the man page to explain that HashedControlPassword and + CookieAuthentication can both be set, in which case either method + is sufficient to authenticate to Tor. Bugfix on 0.2.0.7-alpha, + when we decided to allow these config options to both be set. Issue + raised by bug 3898. + - Demote the 'replay detected' log message emitted when a hidden + service receives the same Diffie-Hellman public key in two different + INTRODUCE2 cells to info level. A normal Tor client can cause that + log message during its normal operation. Bugfix on 0.2.1.6-alpha; + fixes part of bug 2442. + - Demote the 'INTRODUCE2 cell is too {old,new}' log message to info + level. There is nothing that a hidden service's operator can do + to fix its clients' clocks. Bugfix on 0.2.1.6-alpha; fixes part + of bug 2442. + - Clarify a log message specifying the characters permitted in + HiddenServiceAuthorizeClient client names. Previously, the log + message said that "[A-Za-z0-9+-_]" were permitted; that could have + given the impression that every ASCII character between "+" and "_" + was permitted. Now we say "[A-Za-z0-9+_-]". Bugfix on 0.2.1.5-alpha. + + o Build fixes: + - Provide a substitute implementation of lround() for MSVC, which + apparently lacks it. Patch from Gisle Vanem. + - Clean up some code issues that prevented Tor from building on older + BSDs. Fixes bug 3894; reported by "grarpamp". + - Search for a platform-specific version of "ar" when cross-compiling. + Should fix builds on iOS. Resolves bug 3909, found by Marco Bonetti. + + +Changes in version 0.2.2.32 - 2011-08-27 + The Tor 0.2.2 release series is dedicated to the memory of Andreas + Pfitzmann (1958-2010), a pioneer in anonymity and privacy research, + a founder of the PETS community, a leader in our field, a mentor, + and a friend. He left us with these words: "I had the possibility + to contribute to this world that is not as it should be. I hope I + could help in some areas to make the world a better place, and that + I could also encourage other people to be engaged in improving the + world. Please, stay engaged. This world needs you, your love, your + initiative -- now I cannot be part of that anymore." + + Tor 0.2.2.32, the first stable release in the 0.2.2 branch, is finally + ready. More than two years in the making, this release features improved + client performance and hidden service reliability, better compatibility + for Android, correct behavior for bridges that listen on more than + one address, more extensible and flexible directory object handling, + better reporting of network statistics, improved code security, and + many many other features and bugfixes. + + o Major features (client performance): + - When choosing which cells to relay first, relays now favor circuits + that have been quiet recently, to provide lower latency for + low-volume circuits. By default, relays enable or disable this + feature based on a setting in the consensus. They can override + this default by using the new "CircuitPriorityHalflife" config + option. Design and code by Ian Goldberg, Can Tang, and Chris + Alexander. + - Directory authorities now compute consensus weightings that instruct + clients how to weight relays flagged as Guard, Exit, Guard+Exit, + and no flag. Clients use these weightings to distribute network load + more evenly across these different relay types. The weightings are + in the consensus so we can change them globally in the future. Extra + thanks to "outofwords" for finding some nasty security bugs in + the first implementation of this feature. + + o Major features (client performance, circuit build timeout): + - Tor now tracks how long it takes to build client-side circuits + over time, and adapts its timeout to local network performance. + Since a circuit that takes a long time to build will also provide + bad performance, we get significant latency improvements by + discarding the slowest 20% of circuits. Specifically, Tor creates + circuits more aggressively than usual until it has enough data + points for a good timeout estimate. Implements proposal 151. + - Circuit build timeout constants can be controlled by consensus + parameters. We set good defaults for these parameters based on + experimentation on broadband and simulated high-latency links. + - Circuit build time learning can be disabled via consensus parameter + or by the client via a LearnCircuitBuildTimeout config option. We + also automatically disable circuit build time calculation if either + AuthoritativeDirectory is set, or if we fail to write our state + file. Implements ticket 1296. + + o Major features (relays use their capacity better): + - Set SO_REUSEADDR socket option on all sockets, not just + listeners. This should help busy exit nodes avoid running out of + useable ports just because all the ports have been used in the + near past. Resolves issue 2850. + - Relays now save observed peak bandwidth throughput rates to their + state file (along with total usage, which was already saved), + so that they can determine their correct estimated bandwidth on + restart. Resolves bug 1863, where Tor relays would reset their + estimated bandwidth to 0 after restarting. + - Lower the maximum weighted-fractional-uptime cutoff to 98%. This + should give us approximately 40-50% more Guard-flagged nodes, + improving the anonymity the Tor network can provide and also + decreasing the dropoff in throughput that relays experience when + they first get the Guard flag. + - Directory authorities now take changes in router IP address and + ORPort into account when determining router stability. Previously, + if a router changed its IP or ORPort, the authorities would not + treat it as having any downtime for the purposes of stability + calculation, whereas clients would experience downtime since the + change would take a while to propagate to them. Resolves issue 1035. + - New AccelName and AccelDir options add support for dynamic OpenSSL + hardware crypto acceleration engines. + + o Major features (relays control their load better): + - Exit relays now try harder to block exit attempts from unknown + relays, to make it harder for people to use them as one-hop proxies + a la tortunnel. Controlled by the refuseunknownexits consensus + parameter (currently enabled), or you can override it on your + relay with the RefuseUnknownExits torrc option. Resolves bug 1751; + based on a variant of proposal 163. + - Add separate per-conn write limiting to go with the per-conn read + limiting. We added a global write limit in Tor 0.1.2.5-alpha, + but never per-conn write limits. + - New consensus params "bwconnrate" and "bwconnburst" to let us + rate-limit client connections as they enter the network. It's + controlled in the consensus so we can turn it on and off for + experiments. It's starting out off. Based on proposal 163. + + o Major features (controllers): + - Export GeoIP information on bridge usage to controllers even if we + have not yet been running for 24 hours. Now Vidalia bridge operators + can get more accurate and immediate feedback about their + contributions to the network. + - Add an __OwningControllerProcess configuration option and a + TAKEOWNERSHIP control-port command. Now a Tor controller can ensure + that when it exits, Tor will shut down. Implements feature 3049. + + o Major features (directory authorities): + - Directory authorities now create, vote on, and serve multiple + parallel formats of directory data as part of their voting process. + Partially implements Proposal 162: "Publish the consensus in + multiple flavors". + - Directory authorities now agree on and publish small summaries + of router information that clients can use in place of regular + server descriptors. This transition will allow Tor 0.2.3 clients + to use far less bandwidth for downloading information about the + network. Begins the implementation of Proposal 158: "Clients + download consensus + microdescriptors". + - The directory voting system is now extensible to use multiple hash + algorithms for signatures and resource selection. Newer formats + are signed with SHA256, with a possibility for moving to a better + hash algorithm in the future. + - Directory authorities can now vote on arbitary integer values as + part of the consensus process. This is designed to help set + network-wide parameters. Implements proposal 167. + + o Major features and bugfixes (node selection): + - Revise and reconcile the meaning of the ExitNodes, EntryNodes, + ExcludeEntryNodes, ExcludeExitNodes, ExcludeNodes, and Strict*Nodes + options. Previously, we had been ambiguous in describing what + counted as an "exit" node, and what operations exactly "StrictNodes + 0" would permit. This created confusion when people saw nodes built + through unexpected circuits, and made it hard to tell real bugs from + surprises. Now the intended behavior is: + . "Exit", in the context of ExitNodes and ExcludeExitNodes, means + a node that delivers user traffic outside the Tor network. + . "Entry", in the context of EntryNodes, means a node used as the + first hop of a multihop circuit. It doesn't include direct + connections to directory servers. + . "ExcludeNodes" applies to all nodes. + . "StrictNodes" changes the behavior of ExcludeNodes only. When + StrictNodes is set, Tor should avoid all nodes listed in + ExcludeNodes, even when it will make user requests fail. When + StrictNodes is *not* set, then Tor should follow ExcludeNodes + whenever it can, except when it must use an excluded node to + perform self-tests, connect to a hidden service, provide a + hidden service, fulfill a .exit request, upload directory + information, or fetch directory information. + Collectively, the changes to implement the behavior fix bug 1090. + - If EntryNodes, ExitNodes, ExcludeNodes, or ExcludeExitNodes + change during a config reload, mark and discard all our origin + circuits. This fix should address edge cases where we change the + config options and but then choose a circuit that we created before + the change. + - Make EntryNodes config option much more aggressive even when + StrictNodes is not set. Before it would prepend your requested + entrynodes to your list of guard nodes, but feel free to use others + after that. Now it chooses only from your EntryNodes if any of + those are available, and only falls back to others if a) they're + all down and b) StrictNodes is not set. + - Now we refresh your entry guards from EntryNodes at each consensus + fetch -- rather than just at startup and then they slowly rot as + the network changes. + - Add support for the country code "{??}" in torrc options like + ExcludeNodes, to indicate all routers of unknown country. Closes + bug 1094. + - ExcludeNodes now takes precedence over EntryNodes and ExitNodes: if + a node is listed in both, it's treated as excluded. + - ExcludeNodes now applies to directory nodes -- as a preference if + StrictNodes is 0, or an absolute requirement if StrictNodes is 1. + Don't exclude all the directory authorities and set StrictNodes to 1 + unless you really want your Tor to break. + - ExcludeNodes and ExcludeExitNodes now override exit enclaving. + - ExcludeExitNodes now overrides .exit requests. + - We don't use bridges listed in ExcludeNodes. + - When StrictNodes is 1: + . We now apply ExcludeNodes to hidden service introduction points + and to rendezvous points selected by hidden service users. This + can make your hidden service less reliable: use it with caution! + . If we have used ExcludeNodes on ourself, do not try relay + reachability self-tests. + . If we have excluded all the directory authorities, we will not + even try to upload our descriptor if we're a relay. + . Do not honor .exit requests to an excluded node. + - When the set of permitted nodes changes, we now remove any mappings + introduced via TrackExitHosts to now-excluded nodes. Bugfix on + 0.1.0.1-rc. + - We never cannibalize a circuit that had excluded nodes on it, even + if StrictNodes is 0. Bugfix on 0.1.0.1-rc. + - Improve log messages related to excluded nodes. + + o Major features (misc): + - Numerous changes, bugfixes, and workarounds from Nathan Freitas + to help Tor build correctly for Android phones. + - The options SocksPort, ControlPort, and so on now all accept a + value "auto" that opens a socket on an OS-selected port. A + new ControlPortWriteToFile option tells Tor to write its + actual control port or ports to a chosen file. If the option + ControlPortFileGroupReadable is set, the file is created as + group-readable. Now users can run two Tor clients on the same + system without needing to manually mess with parameters. Resolves + part of ticket 3076. + - Tor now supports tunneling all of its outgoing connections over + a SOCKS proxy, using the SOCKS4Proxy and/or SOCKS5Proxy + configuration options. Code by Christopher Davis. + + o Code security improvements: + - Replace all potentially sensitive memory comparison operations + with versions whose runtime does not depend on the data being + compared. This will help resist a class of attacks where an + adversary can use variations in timing information to learn + sensitive data. Fix for one case of bug 3122. (Safe memcmp + implementation by Robert Ransom based partially on code by DJB.) + - Enable Address Space Layout Randomization (ASLR) and Data Execution + Prevention (DEP) by default on Windows to make it harder for + attackers to exploit vulnerabilities. Patch from John Brooks. + - New "--enable-gcc-hardening" ./configure flag (off by default) + to turn on gcc compile time hardening options. It ensures + that signed ints have defined behavior (-fwrapv), enables + -D_FORTIFY_SOURCE=2 (requiring -O2), adds stack smashing protection + with canaries (-fstack-protector-all), turns on ASLR protection if + supported by the kernel (-fPIE, -pie), and adds additional security + related warnings. Verified to work on Mac OS X and Debian Lenny. + - New "--enable-linker-hardening" ./configure flag (off by default) + to turn on ELF specific hardening features (relro, now). This does + not work with Mac OS X or any other non-ELF binary format. + - Always search the Windows system directory for system DLLs, and + nowhere else. Bugfix on 0.1.1.23; fixes bug 1954. + - New DisableAllSwap option. If set to 1, Tor will attempt to lock all + current and future memory pages via mlockall(). On supported + platforms (modern Linux and probably BSD but not Windows or OS X), + this should effectively disable any and all attempts to page out + memory. This option requires that you start your Tor as root -- + if you use DisableAllSwap, please consider using the User option + to properly reduce the privileges of your Tor. + + o Major bugfixes (crashes): + - Fix crash bug on platforms where gmtime and localtime can return + NULL. Windows 7 users were running into this one. Fixes part of bug + 2077. Bugfix on all versions of Tor. Found by boboper. + - Introduce minimum/maximum values that clients will believe + from the consensus. Now we'll have a better chance to avoid crashes + or worse when a consensus param has a weird value. + - Fix a rare crash bug that could occur when a client was configured + with a large number of bridges. Fixes bug 2629; bugfix on + 0.2.1.2-alpha. Bugfix by trac user "shitlei". + - Do not crash when our configuration file becomes unreadable, for + example due to a permissions change, between when we start up + and when a controller calls SAVECONF. Fixes bug 3135; bugfix + on 0.0.9pre6. + - If we're in the pathological case where there's no exit bandwidth + but there is non-exit bandwidth, or no guard bandwidth but there + is non-guard bandwidth, don't crash during path selection. Bugfix + on 0.2.0.3-alpha. + - Fix a crash bug when trying to initialize the evdns module in + Libevent 2. Bugfix on 0.2.1.16-rc. + + o Major bugfixes (stability): + - Fix an assert in parsing router descriptors containing IPv6 + addresses. This one took down the directory authorities when + somebody tried some experimental code. Bugfix on 0.2.1.3-alpha. + - Fix an uncommon assertion failure when running with DNSPort under + heavy load. Fixes bug 2933; bugfix on 0.2.0.1-alpha. + - Treat an unset $HOME like an empty $HOME rather than triggering an + assert. Bugfix on 0.0.8pre1; fixes bug 1522. + - More gracefully handle corrupt state files, removing asserts + in favor of saving a backup and resetting state. + - Instead of giving an assertion failure on an internal mismatch + on estimated freelist size, just log a BUG warning and try later. + Mitigates but does not fix bug 1125. + - Fix an assert that got triggered when using the TestingTorNetwork + configuration option and then issuing a GETINFO config-text control + command. Fixes bug 2250; bugfix on 0.2.1.2-alpha. + - If the cached cert file is unparseable, warn but don't exit. + + o Privacy fixes (relays/bridges): + - Don't list Windows capabilities in relay descriptors. We never made + use of them, and maybe it's a bad idea to publish them. Bugfix + on 0.1.1.8-alpha. + - If the Nickname configuration option isn't given, Tor would pick a + nickname based on the local hostname as the nickname for a relay. + Because nicknames are not very important in today's Tor and the + "Unnamed" nickname has been implemented, this is now problematic + behavior: It leaks information about the hostname without being + useful at all. Fixes bug 2979; bugfix on 0.1.2.2-alpha, which + introduced the Unnamed nickname. Reported by tagnaq. + - Maintain separate TLS contexts and certificates for incoming and + outgoing connections in bridge relays. Previously we would use the + same TLS contexts and certs for incoming and outgoing connections. + Bugfix on 0.2.0.3-alpha; addresses bug 988. + - Maintain separate identity keys for incoming and outgoing TLS + contexts in bridge relays. Previously we would use the same + identity keys for incoming and outgoing TLS contexts. Bugfix on + 0.2.0.3-alpha; addresses the other half of bug 988. + - Make the bridge directory authority refuse to answer directory + requests for "all descriptors". It used to include bridge + descriptors in its answer, which was a major information leak. + Found by "piebeer". Bugfix on 0.2.0.3-alpha. + + o Privacy fixes (clients): + - When receiving a hidden service descriptor, check that it is for + the hidden service we wanted. Previously, Tor would store any + hidden service descriptors that a directory gave it, whether it + wanted them or not. This wouldn't have let an attacker impersonate + a hidden service, but it did let directories pre-seed a client + with descriptors that it didn't want. Bugfix on 0.0.6. + - Start the process of disabling ".exit" address notation, since it + can be used for a variety of esoteric application-level attacks + on users. To reenable it, set "AllowDotExit 1" in your torrc. Fix + on 0.0.9rc5. + - Reject attempts at the client side to open connections to private + IP addresses (like 127.0.0.1, 10.0.0.1, and so on) with + a randomly chosen exit node. Attempts to do so are always + ill-defined, generally prevented by exit policies, and usually + in error. This will also help to detect loops in transparent + proxy configurations. You can disable this feature by setting + "ClientRejectInternalAddresses 0" in your torrc. + - Log a notice when we get a new control connection. Now it's easier + for security-conscious users to recognize when a local application + is knocking on their controller door. Suggested by bug 1196. + + o Privacy fixes (newnym): + - Avoid linkability based on cached hidden service descriptors: forget + all hidden service descriptors cached as a client when processing a + SIGNAL NEWNYM command. Fixes bug 3000; bugfix on 0.0.6. + - On SIGHUP, do not clear out all TrackHostExits mappings, client + DNS cache entries, and virtual address mappings: that's what + NEWNYM is for. Fixes bug 1345; bugfix on 0.1.0.1-rc. + - Don't attach new streams to old rendezvous circuits after SIGNAL + NEWNYM. Previously, we would keep using an existing rendezvous + circuit if it remained open (i.e. if it were kept open by a + long-lived stream, or if a new stream were attached to it before + Tor could notice that it was old and no longer in use). Bugfix on + 0.1.1.15-rc; fixes bug 3375. + + o Major bugfixes (relay bandwidth accounting): + - Fix a bug that could break accounting on 64-bit systems with large + time_t values, making them hibernate for impossibly long intervals. + Fixes bug 2146. Bugfix on 0.0.9pre6; fix by boboper. + - Fix a bug in bandwidth accounting that could make us use twice + the intended bandwidth when our interval start changes due to + daylight saving time. Now we tolerate skew in stored vs computed + interval starts: if the start of the period changes by no more than + 50% of the period's duration, we remember bytes that we transferred + in the old period. Fixes bug 1511; bugfix on 0.0.9pre5. + + o Major bugfixes (bridges): + - Bridges now use "reject *:*" as their default exit policy. Bugfix + on 0.2.0.3-alpha. Fixes bug 1113. + - If you configure your bridge with a known identity fingerprint, + and the bridge authority is unreachable (as it is in at least + one country now), fall back to directly requesting the descriptor + from the bridge. Finishes the feature started in 0.2.0.10-alpha; + closes bug 1138. + - Fix a bug where bridge users who configure the non-canonical + address of a bridge automatically switch to its canonical + address. If a bridge listens at more than one address, it + should be able to advertise those addresses independently and + any non-blocked addresses should continue to work. Bugfix on Tor + 0.2.0.3-alpha. Fixes bug 2510. + - If you configure Tor to use bridge A, and then quit and + configure Tor to use bridge B instead (or if you change Tor + to use bridge B via the controller), it would happily continue + to use bridge A if it's still reachable. While this behavior is + a feature if your goal is connectivity, in some scenarios it's a + dangerous bug. Bugfix on Tor 0.2.0.1-alpha; fixes bug 2511. + - When the controller configures a new bridge, don't wait 10 to 60 + seconds before trying to fetch its descriptor. Bugfix on + 0.2.0.3-alpha; fixes bug 3198 (suggested by 2355). + + o Major bugfixes (directory authorities): + - Many relays have been falling out of the consensus lately because + not enough authorities know about their descriptor for them to get + a majority of votes. When we deprecated the v2 directory protocol, + we got rid of the only way that v3 authorities can hear from each + other about other descriptors. Now authorities examine every v3 + vote for new descriptors, and fetch them from that authority. Bugfix + on 0.2.1.23. + - Authorities could be tricked into giving out the Exit flag to relays + that didn't allow exiting to any ports. This bug could screw + with load balancing and stats. Bugfix on 0.1.1.6-alpha; fixes bug + 1238. Bug discovered by Martin Kowalczyk. + - If all authorities restart at once right before a consensus vote, + nobody will vote about "Running", and clients will get a consensus + with no usable relays. Instead, authorities refuse to build a + consensus if this happens. Bugfix on 0.2.0.10-alpha; fixes bug 1066. + + o Major bugfixes (stream-level fairness): + - When receiving a circuit-level SENDME for a blocked circuit, try + to package cells fairly from all the streams that had previously + been blocked on that circuit. Previously, we had started with the + oldest stream, and allowed each stream to potentially exhaust + the circuit's package window. This gave older streams on any + given circuit priority over newer ones. Fixes bug 1937. Detected + originally by Camilo Viecco. This bug was introduced before the + first Tor release, in svn commit r152: it is the new winner of + the longest-lived bug prize. + - Fix a stream fairness bug that would cause newer streams on a given + circuit to get preference when reading bytes from the origin or + destination. Fixes bug 2210. Fix by Mashael AlSabah. This bug was + introduced before the first Tor release, in svn revision r152. + - When the exit relay got a circuit-level sendme cell, it started + reading on the exit streams, even if had 500 cells queued in the + circuit queue already, so the circuit queue just grew and grew in + some cases. We fix this by not re-enabling reading on receipt of a + sendme cell when the cell queue is blocked. Fixes bug 1653. Bugfix + on 0.2.0.1-alpha. Detected by Mashael AlSabah. Original patch by + "yetonetime". + - Newly created streams were allowed to read cells onto circuits, + even if the circuit's cell queue was blocked and waiting to drain. + This created potential unfairness, as older streams would be + blocked, but newer streams would gladly fill the queue completely. + We add code to detect this situation and prevent any stream from + getting more than one free cell. Bugfix on 0.2.0.1-alpha. Partially + fixes bug 1298. + + o Major bugfixes (hidden services): + - Apply circuit timeouts to opened hidden-service-related circuits + based on the correct start time. Previously, we would apply the + circuit build timeout based on time since the circuit's creation; + it was supposed to be applied based on time since the circuit + entered its current state. Bugfix on 0.0.6; fixes part of bug 1297. + - Improve hidden service robustness: When we find that we have + extended a hidden service's introduction circuit to a relay not + listed as an introduction point in the HS descriptor we currently + have, retry with an introduction point from the current + descriptor. Previously we would just give up. Fixes bugs 1024 and + 1930; bugfix on 0.2.0.10-alpha. + - Directory authorities now use data collected from their own + uptime observations when choosing whether to assign the HSDir flag + to relays, instead of trusting the uptime value the relay reports in + its descriptor. This change helps prevent an attack where a small + set of nodes with frequently-changing identity keys can blackhole + a hidden service. (Only authorities need upgrade; others will be + fine once they do.) Bugfix on 0.2.0.10-alpha; fixes bug 2709. + - Stop assigning the HSDir flag to relays that disable their + DirPort (and thus will refuse to answer directory requests). This + fix should dramatically improve the reachability of hidden services: + hidden services and hidden service clients pick six HSDir relays + to store and retrieve the hidden service descriptor, and currently + about half of the HSDir relays will refuse to work. Bugfix on + 0.2.0.10-alpha; fixes part of bug 1693. + + o Major bugfixes (misc): + - Clients now stop trying to use an exit node associated with a given + destination by TrackHostExits if they fail to reach that exit node. + Fixes bug 2999. Bugfix on 0.2.0.20-rc. + - Fix a regression that caused Tor to rebind its ports if it receives + SIGHUP while hibernating. Bugfix in 0.1.1.6-alpha; closes bug 919. + - Remove an extra pair of quotation marks around the error + message in control-port STATUS_GENERAL BUG events. Bugfix on + 0.1.2.6-alpha; fixes bug 3732. + + o Minor features (relays): + - Ensure that no empty [dirreq-](read|write)-history lines are added + to an extrainfo document. Implements ticket 2497. + - When bandwidth accounting is enabled, be more generous with how + much bandwidth we'll use up before entering "soft hibernation". + Previously, we'd refuse new connections and circuits once we'd + used up 95% of our allotment. Now, we use up 95% of our allotment, + AND make sure that we have no more than 500MB (or 3 hours of + expected traffic, whichever is lower) remaining before we enter + soft hibernation. + - Relays now log the reason for publishing a new relay descriptor, + so we have a better chance of hunting down instances of bug 1810. + Resolves ticket 3252. + - Log a little more clearly about the times at which we're no longer + accepting new connections (e.g. due to hibernating). Resolves + bug 2181. + - When AllowSingleHopExits is set, print a warning to explain to the + relay operator why most clients are avoiding her relay. + - Send END_STREAM_REASON_NOROUTE in response to EHOSTUNREACH errors. + Clients before 0.2.1.27 didn't handle NOROUTE correctly, but such + clients are already deprecated because of security bugs. + + o Minor features (network statistics): + - Directory mirrors that set "DirReqStatistics 1" write statistics + about directory requests to disk every 24 hours. As compared to the + "--enable-geoip-stats" ./configure flag in 0.2.1.x, there are a few + improvements: 1) stats are written to disk exactly every 24 hours; + 2) estimated shares of v2 and v3 requests are determined as mean + values, not at the end of a measurement period; 3) unresolved + requests are listed with country code '??'; 4) directories also + measure download times. + - Exit nodes that set "ExitPortStatistics 1" write statistics on the + number of exit streams and transferred bytes per port to disk every + 24 hours. + - Relays that set "CellStatistics 1" write statistics on how long + cells spend in their circuit queues to disk every 24 hours. + - Entry nodes that set "EntryStatistics 1" write statistics on the + rough number and origins of connecting clients to disk every 24 + hours. + - Relays that write any of the above statistics to disk and set + "ExtraInfoStatistics 1" include the past 24 hours of statistics in + their extra-info documents. Implements proposal 166. + + o Minor features (GeoIP and statistics): + - Provide a log message stating which geoip file we're parsing + instead of just stating that we're parsing the geoip file. + Implements ticket 2432. + - Make sure every relay writes a state file at least every 12 hours. + Previously, a relay could go for weeks without writing its state + file, and on a crash could lose its bandwidth history, capacity + estimates, client country statistics, and so on. Addresses bug 3012. + - Relays report the number of bytes spent on answering directory + requests in extra-info descriptors similar to {read,write}-history. + Implements enhancement 1790. + - Report only the top 10 ports in exit-port stats in order not to + exceed the maximum extra-info descriptor length of 50 KB. Implements + task 2196. + - If writing the state file to disk fails, wait up to an hour before + retrying again, rather than trying again each second. Fixes bug + 2346; bugfix on Tor 0.1.1.3-alpha. + - Delay geoip stats collection by bridges for 6 hours, not 2 hours, + when we switch from being a public relay to a bridge. Otherwise + there will still be clients that see the relay in their consensus, + and the stats will end up wrong. Bugfix on 0.2.1.15-rc; fixes + bug 932. + - Update to the August 2 2011 Maxmind GeoLite Country database. + + o Minor features (clients): + - When expiring circuits, use microsecond timers rather than + one-second timers. This can avoid an unpleasant situation where a + circuit is launched near the end of one second and expired right + near the beginning of the next, and prevent fluctuations in circuit + timeout values. + - If we've configured EntryNodes and our network goes away and/or all + our entrynodes get marked down, optimistically retry them all when + a new socks application request appears. Fixes bug 1882. + - Always perform router selections using weighted relay bandwidth, + even if we don't need a high capacity circuit at the time. Non-fast + circuits now only differ from fast ones in that they can use relays + not marked with the Fast flag. This "feature" could turn out to + be a horrible bug; we should investigate more before it goes into + a stable release. + - When we run out of directory information such that we can't build + circuits, but then get enough that we can build circuits, log when + we actually construct a circuit, so the user has a better chance of + knowing what's going on. Fixes bug 1362. + - Log SSL state transitions at debug level during handshake, and + include SSL states in error messages. This may help debug future + SSL handshake issues. + + o Minor features (directory authorities): + - When a router changes IP address or port, authorities now launch + a new reachability test for it. Implements ticket 1899. + - Directory authorities now reject relays running any versions of + Tor between 0.2.1.3-alpha and 0.2.1.18 inclusive; they have + known bugs that keep RELAY_EARLY cells from working on rendezvous + circuits. Followup to fix for bug 2081. + - Directory authorities now reject relays running any version of Tor + older than 0.2.0.26-rc. That version is the earliest that fetches + current directory information correctly. Fixes bug 2156. + - Directory authorities now do an immediate reachability check as soon + as they hear about a new relay. This change should slightly reduce + the time between setting up a relay and getting listed as running + in the consensus. It should also improve the time between setting + up a bridge and seeing use by bridge users. + - Directory authorities no longer launch a TLS connection to every + relay as they startup. Now that we have 2k+ descriptors cached, + the resulting network hiccup is becoming a burden. Besides, + authorities already avoid voting about Running for the first half + hour of their uptime. + - Directory authorities now log the source of a rejected POSTed v3 + networkstatus vote, so we can track failures better. + - Backport code from 0.2.3.x that allows directory authorities to + clean their microdescriptor caches. Needed to resolve bug 2230. + + o Minor features (hidden services): + - Use computed circuit-build timeouts to decide when to launch + parallel introduction circuits for hidden services. (Previously, + we would retry after 15 seconds.) + - Don't allow v0 hidden service authorities to act as clients. + Required by fix for bug 3000. + - Ignore SIGNAL NEWNYM commands on relay-only Tor instances. Required + by fix for bug 3000. + - Make hidden services work better in private Tor networks by not + requiring any uptime to join the hidden service descriptor + DHT. Implements ticket 2088. + - Log (at info level) when purging pieces of hidden-service-client + state because of SIGNAL NEWNYM. + + o Minor features (controller interface): + - New "GETINFO net/listeners/(type)" controller command to return + a list of addresses and ports that are bound for listeners for a + given connection type. This is useful when the user has configured + "SocksPort auto" and the controller needs to know which port got + chosen. Resolves another part of ticket 3076. + - Have the controller interface give a more useful message than + "Internal Error" in response to failed GETINFO requests. + - Add a TIMEOUT_RATE keyword to the BUILDTIMEOUT_SET control port + event, to give information on the current rate of circuit timeouts + over our stored history. + - The 'EXTENDCIRCUIT' control port command can now be used with + a circ id of 0 and no path. This feature will cause Tor to build + a new 'fast' general purpose circuit using its own path selection + algorithms. + - Added a BUILDTIMEOUT_SET controller event to describe changes + to the circuit build timeout. + - New controller command "getinfo config-text". It returns the + contents that Tor would write if you send it a SAVECONF command, + so the controller can write the file to disk itself. + + o Minor features (controller protocol): + - Add a new ControlSocketsGroupWritable configuration option: when + it is turned on, ControlSockets are group-writeable by the default + group of the current user. Patch by Jérémy Bobbio; implements + ticket 2972. + - Tor now refuses to create a ControlSocket in a directory that is + world-readable (or group-readable if ControlSocketsGroupWritable + is 0). This is necessary because some operating systems do not + enforce permissions on an AF_UNIX sockets. Permissions on the + directory holding the socket, however, seems to work everywhere. + - Warn when CookieAuthFileGroupReadable is set but CookieAuthFile is + not. This would lead to a cookie that is still not group readable. + Closes bug 1843. Suggested by katmagic. + - Future-proof the controller protocol a bit by ignoring keyword + arguments we do not recognize. + + o Minor features (more useful logging): + - Revise most log messages that refer to nodes by nickname to + instead use the "$key=nickname at address" format. This should be + more useful, especially since nicknames are less and less likely + to be unique. Resolves ticket 3045. + - When an HTTPS proxy reports "403 Forbidden", we now explain + what it means rather than calling it an unexpected status code. + Closes bug 2503. Patch from Michael Yakubovich. + - Rate-limit a warning about failures to download v2 networkstatus + documents. Resolves part of bug 1352. + - Rate-limit the "your application is giving Tor only an IP address" + warning. Addresses bug 2000; bugfix on 0.0.8pre2. + - Rate-limit "Failed to hand off onionskin" warnings. + - When logging a rate-limited warning, we now mention how many messages + got suppressed since the last warning. + - Make the formerly ugly "2 unknown, 7 missing key, 0 good, 0 bad, + 2 no signature, 4 required" messages about consensus signatures + easier to read, and make sure they get logged at the same severity + as the messages explaining which keys are which. Fixes bug 1290. + - Don't warn when we have a consensus that we can't verify because + of missing certificates, unless those certificates are ones + that we have been trying and failing to download. Fixes bug 1145. + + o Minor features (log domains): + - Add documentation for configuring logging at different severities in + different log domains. We've had this feature since 0.2.1.1-alpha, + but for some reason it never made it into the manpage. Fixes + bug 2215. + - Make it simpler to specify "All log domains except for A and B". + Previously you needed to say "[*,~A,~B]". Now you can just say + "[~A,~B]". + - Add a "LogMessageDomains 1" option to include the domains of log + messages along with the messages. Without this, there's no way + to use log domains without reading the source or doing a lot + of guessing. + - Add a new "Handshake" log domain for activities that happen + during the TLS handshake. + + o Minor features (build process): + - Make compilation with clang possible when using + "--enable-gcc-warnings" by removing two warning options that clang + hasn't implemented yet and by fixing a few warnings. Resolves + ticket 2696. + - Detect platforms that brokenly use a signed size_t, and refuse to + build there. Found and analyzed by doorss and rransom. + - Fix a bunch of compile warnings revealed by mingw with gcc 4.5. + Resolves bug 2314. + - Add support for statically linking zlib by specifying + "--enable-static-zlib", to go with our support for statically + linking openssl and libevent. Resolves bug 1358. + - Instead of adding the svn revision to the Tor version string, report + the git commit (when we're building from a git checkout). + - Rename the "log.h" header to "torlog.h" so as to conflict with fewer + system headers. + - New --digests command-line switch to output the digests of the + source files Tor was built with. + - Generate our manpage and HTML documentation using Asciidoc. This + change should make it easier to maintain the documentation, and + produce nicer HTML. The build process fails if asciidoc cannot + be found and building with asciidoc isn't disabled (via the + "--disable-asciidoc" argument to ./configure. Skipping the manpage + speeds up the build considerably. + + o Minor features (options / torrc): + - Warn when the same option is provided more than once in a torrc + file, on the command line, or in a single SETCONF statement, and + the option is one that only accepts a single line. Closes bug 1384. + - Warn when the user configures two HiddenServiceDir lines that point + to the same directory. Bugfix on 0.0.6 (the version introducing + HiddenServiceDir); fixes bug 3289. + - Add new "perconnbwrate" and "perconnbwburst" consensus params to + do individual connection-level rate limiting of clients. The torrc + config options with the same names trump the consensus params, if + both are present. Replaces the old "bwconnrate" and "bwconnburst" + consensus params which were broken from 0.2.2.7-alpha through + 0.2.2.14-alpha. Closes bug 1947. + - New config option "WarnUnsafeSocks 0" disables the warning that + occurs whenever Tor receives a socks handshake using a version of + the socks protocol that can only provide an IP address (rather + than a hostname). Setups that do DNS locally over Tor are fine, + and we shouldn't spam the logs in that case. + - New config option "CircuitStreamTimeout" to override our internal + timeout schedule for how many seconds until we detach a stream from + a circuit and try a new circuit. If your network is particularly + slow, you might want to set this to a number like 60. + - New options for SafeLogging to allow scrubbing only log messages + generated while acting as a relay. Specify "SafeLogging relay" if + you want to ensure that only messages known to originate from + client use of the Tor process will be logged unsafely. + - Time and memory units in the configuration file can now be set to + fractional units. For example, "2.5 GB" is now a valid value for + AccountingMax. + - Support line continuations in the torrc config file. If a line + ends with a single backslash character, the newline is ignored, and + the configuration value is treated as continuing on the next line. + Resolves bug 1929. + + o Minor features (unit tests): + - Revise our unit tests to use the "tinytest" framework, so we + can run tests in their own processes, have smarter setup/teardown + code, and so on. The unit test code has moved to its own + subdirectory, and has been split into multiple modules. + - Add a unit test for cross-platform directory-listing code. + - Add some forgotten return value checks during unit tests. Found + by coverity. + - Use GetTempDir to find the proper temporary directory location on + Windows when generating temporary files for the unit tests. Patch + by Gisle Vanem. + + o Minor features (misc): + - The "torify" script now uses torsocks where available. + - Make Libevent log messages get delivered to controllers later, + and not from inside the Libevent log handler. This prevents unsafe + reentrant Libevent calls while still letting the log messages + get through. + - Certain Tor clients (such as those behind check.torproject.org) may + want to fetch the consensus in an extra early manner. To enable this + a user may now set FetchDirInfoExtraEarly to 1. This also depends on + setting FetchDirInfoEarly to 1. Previous behavior will stay the same + as only certain clients who must have this information sooner should + set this option. + - Expand homedirs passed to tor-checkkey. This should silence a + coverity complaint about passing a user-supplied string into + open() without checking it. + - Make sure to disable DirPort if running as a bridge. DirPorts aren't + used on bridges, and it makes bridge scanning somewhat easier. + - Create the /var/run/tor directory on startup on OpenSUSE if it is + not already created. Patch from Andreas Stieger. Fixes bug 2573. + + o Minor bugfixes (relays): + - When a relay decides that its DNS is too broken for it to serve + as an exit server, it advertised itself as a non-exit, but + continued to act as an exit. This could create accidental + partitioning opportunities for users. Instead, if a relay is + going to advertise reject *:* as its exit policy, it should + really act with exit policy "reject *:*". Fixes bug 2366. + Bugfix on Tor 0.1.2.5-alpha. Bugfix by user "postman" on trac. + - Publish a router descriptor even if generating an extra-info + descriptor fails. Previously we would not publish a router + descriptor without an extra-info descriptor; this can cause fast + exit relays collecting exit-port statistics to drop from the + consensus. Bugfix on 0.1.2.9-rc; fixes bug 2195. + - When we're trying to guess whether we know our IP address as + a relay, we would log various ways that we failed to guess + our address, but never log that we ended up guessing it + successfully. Now add a log line to help confused and anxious + relay operators. Bugfix on 0.1.2.1-alpha; fixes bug 1534. + - For bandwidth accounting, calculate our expected bandwidth rate + based on the time during which we were active and not in + soft-hibernation during the last interval. Previously, we were + also considering the time spent in soft-hibernation. If this + was a long time, we would wind up underestimating our bandwidth + by a lot, and skewing our wakeup time towards the start of the + accounting interval. Fixes bug 1789. Bugfix on 0.0.9pre5. + - Demote a confusing TLS warning that relay operators might get when + someone tries to talk to their ORPort. It is not the operator's + fault, nor can they do anything about it. Fixes bug 1364; bugfix + on 0.2.0.14-alpha. + - Change "Application request when we're believed to be offline." + notice to "Application request when we haven't used client + functionality lately.", to clarify that it's not an error. Bugfix + on 0.0.9.3; fixes bug 1222. + + o Minor bugfixes (bridges): + - When a client starts or stops using bridges, never use a circuit + that was built before the configuration change. This behavior could + put at risk a user who uses bridges to ensure that her traffic + only goes to the chosen addresses. Bugfix on 0.2.0.3-alpha; fixes + bug 3200. + - Do not reset the bridge descriptor download status every time we + re-parse our configuration or get a configuration change. Fixes + bug 3019; bugfix on 0.2.0.3-alpha. + - Users couldn't configure a regular relay to be their bridge. It + didn't work because when Tor fetched the bridge descriptor, it found + that it already had it, and didn't realize that the purpose of the + descriptor had changed. Now we replace routers with a purpose other + than bridge with bridge descriptors when fetching them. Bugfix on + 0.1.1.9-alpha. Fixes bug 1776. + - In the special case where you configure a public exit relay as your + bridge, Tor would be willing to use that exit relay as the last + hop in your circuit as well. Now we fail that circuit instead. + Bugfix on 0.2.0.12-alpha. Fixes bug 2403. Reported by "piebeer". + + o Minor bugfixes (clients): + - We now ask the other side of a stream (the client or the exit) + for more data on that stream when the amount of queued data on + that stream dips low enough. Previously, we wouldn't ask the + other side for more data until either it sent us more data (which + it wasn't supposed to do if it had exhausted its window!) or we + had completely flushed all our queued data. This flow control fix + should improve throughput. Fixes bug 2756; bugfix on the earliest + released versions of Tor (svn commit r152). + - When a client finds that an origin circuit has run out of 16-bit + stream IDs, we now mark it as unusable for new streams. Previously, + we would try to close the entire circuit. Bugfix on 0.0.6. + - Make it explicit that we don't cannibalize one-hop circuits. This + happens in the wild, but doesn't turn out to be a problem because + we fortunately don't use those circuits. Many thanks to outofwords + for the initial analysis and to swissknife who confirmed that + two-hop circuits are actually created. + - Resolve an edge case in path weighting that could make us misweight + our relay selection. Fixes bug 1203; bugfix on 0.0.8rc1. + - Make the DNSPort option work with libevent 2.x. Don't alter the + behaviour for libevent 1.x. Fixes bug 1143. Found by SwissTorExit. + + o Minor bugfixes (directory authorities): + - Make directory authorities more accurate at recording when + relays that have failed several reachability tests became + unreachable, so we can provide more accuracy at assigning Stable, + Guard, HSDir, etc flags. Bugfix on 0.2.0.6-alpha. Resolves bug 2716. + - Directory authorities are now more robust to hops back in time + when calculating router stability. Previously, if a run of uptime + or downtime appeared to be negative, the calculation could give + incorrect results. Bugfix on 0.2.0.6-alpha; noticed when fixing + bug 1035. + - Directory authorities will now attempt to download consensuses + if their own efforts to make a live consensus have failed. This + change means authorities that restart will fetch a valid + consensus, and it means authorities that didn't agree with the + current consensus will still fetch and serve it if it has enough + signatures. Bugfix on 0.2.0.9-alpha; fixes bug 1300. + - Never vote for a server as "Running" if we have a descriptor for + it claiming to be hibernating, and that descriptor was published + more recently than our last contact with the server. Bugfix on + 0.2.0.3-alpha; fixes bug 911. + - Directory authorities no longer change their opinion of, or vote on, + whether a router is Running, unless they have themselves been + online long enough to have some idea. Bugfix on 0.2.0.6-alpha. + Fixes bug 1023. + + o Minor bugfixes (hidden services): + - Log malformed requests for rendezvous descriptors as protocol + warnings, not warnings. Also, use a more informative log message + in case someone sees it at log level warning without prior + info-level messages. Fixes bug 2748; bugfix on 0.2.0.10-alpha. + - Accept hidden service descriptors if we think we might be a hidden + service directory, regardless of what our consensus says. This + helps robustness, since clients and hidden services can sometimes + have a more up-to-date view of the network consensus than we do, + and if they think that the directory authorities list us a HSDir, + we might actually be one. Related to bug 2732; bugfix on + 0.2.0.10-alpha. + - Correct the warning displayed when a rendezvous descriptor exceeds + the maximum size. Fixes bug 2750; bugfix on 0.2.1.5-alpha. Found by + John Brooks. + - Clients and hidden services now use HSDir-flagged relays for hidden + service descriptor downloads and uploads even if the relays have no + DirPort set and the client has disabled TunnelDirConns. This will + eventually allow us to give the HSDir flag to relays with no + DirPort. Fixes bug 2722; bugfix on 0.2.1.6-alpha. + - Only limit the lengths of single HS descriptors, even when multiple + HS descriptors are published to an HSDir relay in a single POST + operation. Fixes bug 2948; bugfix on 0.2.1.5-alpha. Found by hsdir. + + o Minor bugfixes (controllers): + - Allow GETINFO fingerprint to return a fingerprint even when + we have not yet built a router descriptor. Fixes bug 3577; + bugfix on 0.2.0.1-alpha. + - Send a SUCCEEDED stream event to the controller when a reverse + resolve succeeded. Fixes bug 3536; bugfix on 0.0.8pre1. Issue + discovered by katmagic. + - Remove a trailing asterisk from "exit-policy/default" in the + output of the control port command "GETINFO info/names". Bugfix + on 0.1.2.5-alpha. + - Make the SIGNAL DUMP controller command work on FreeBSD. Fixes bug + 2917. Bugfix on 0.1.1.1-alpha. + - When we restart our relay, we might get a successful connection + from the outside before we've started our reachability tests, + triggering a warning: "ORPort found reachable, but I have no + routerinfo yet. Failing to inform controller of success." This + bug was harmless unless Tor is running under a controller + like Vidalia, in which case the controller would never get a + REACHABILITY_SUCCEEDED status event. Bugfix on 0.1.2.6-alpha; + fixes bug 1172. + - When a controller changes TrackHostExits, remove mappings for + hosts that should no longer have their exits tracked. Bugfix on + 0.1.0.1-rc. + - When a controller changes VirtualAddrNetwork, remove any mappings + for hosts that were automapped to the old network. Bugfix on + 0.1.1.19-rc. + - When a controller changes one of the AutomapHosts* options, remove + any mappings for hosts that should no longer be automapped. Bugfix + on 0.2.0.1-alpha. + - Fix an off-by-one error in calculating some controller command + argument lengths. Fortunately, this mistake is harmless since + the controller code does redundant NUL termination too. Found by + boboper. Bugfix on 0.1.1.1-alpha. + - Fix a bug in the controller interface where "GETINFO ns/asdaskljkl" + would return "551 Internal error" rather than "552 Unrecognized key + ns/asdaskljkl". Bugfix on 0.1.2.3-alpha. + - Don't spam the controller with events when we have no file + descriptors available. Bugfix on 0.2.1.5-alpha. (Rate-limiting + for log messages was already solved from bug 748.) + - Emit a GUARD DROPPED controller event for a case we missed. + - Ensure DNS requests launched by "RESOLVE" commands from the + controller respect the __LeaveStreamsUnattached setconf options. The + same goes for requests launched via DNSPort or transparent + proxying. Bugfix on 0.2.0.1-alpha; fixes bug 1525. + + o Minor bugfixes (config options): + - Tor used to limit HttpProxyAuthenticator values to 48 characters. + Change the limit to 512 characters by removing base64 newlines. + Fixes bug 2752. Fix by Michael Yakubovich. + - Complain if PublishServerDescriptor is given multiple arguments that + include 0 or 1. This configuration will be rejected in the future. + Bugfix on 0.2.0.1-alpha; closes bug 1107. + - Disallow BridgeRelay 1 and ORPort 0 at once in the configuration. + Bugfix on 0.2.0.13-alpha; closes bug 928. + + o Minor bugfixes (log subsystem fixes): + - When unable to format an address as a string, report its value + as "???" rather than reusing the last formatted address. Bugfix + on 0.2.1.5-alpha. + - Be more consistent in our treatment of file system paths. "~" should + get expanded to the user's home directory in the Log config option. + Fixes bug 2971; bugfix on 0.2.0.1-alpha, which introduced the + feature for the -f and --DataDirectory options. + + o Minor bugfixes (memory management): + - Don't stack-allocate the list of supplementary GIDs when we're + about to log them. Stack-allocating NGROUPS_MAX gid_t elements + could take up to 256K, which is way too much stack. Found by + Coverity; CID #450. Bugfix on 0.2.1.7-alpha. + - Save a couple bytes in memory allocation every time we escape + certain characters in a string. Patch from Florian Zumbiehl. + + o Minor bugfixes (protocol correctness): + - When checking for 1024-bit keys, check for 1024 bits, not 128 + bytes. This allows Tor to correctly discard keys of length 1017 + through 1023. Bugfix on 0.0.9pre5. + - Require that introduction point keys and onion handshake keys + have a public exponent of 65537. Starts to fix bug 3207; bugfix + on 0.2.0.10-alpha. + - Handle SOCKS messages longer than 128 bytes long correctly, rather + than waiting forever for them to finish. Fixes bug 2330; bugfix + on 0.2.0.16-alpha. Found by doorss. + - Never relay a cell for a circuit we have already destroyed. + Between marking a circuit as closeable and finally closing it, + it may have been possible for a few queued cells to get relayed, + even though they would have been immediately dropped by the next + OR in the circuit. Fixes bug 1184; bugfix on 0.2.0.1-alpha. + - Never queue a cell for a circuit that's already been marked + for close. + - Fix a spec conformance issue: the network-status-version token + must be the first token in a v3 consensus or vote. Discovered by + "parakeep". Bugfix on 0.2.0.3-alpha. + - A networkstatus vote must contain exactly one signature. Spec + conformance issue. Bugfix on 0.2.0.3-alpha. + - When asked about a DNS record type we don't support via a + client DNSPort, reply with NOTIMPL rather than an empty + reply. Patch by intrigeri. Fixes bug 3369; bugfix on 2.0.1-alpha. + - Make more fields in the controller protocol case-insensitive, since + control-spec.txt said they were. + + o Minor bugfixes (log messages): + - Fix a log message that said "bits" while displaying a value in + bytes. Found by wanoskarnet. Fixes bug 3318; bugfix on + 0.2.0.1-alpha. + - Downgrade "no current certificates known for authority" message from + Notice to Info. Fixes bug 2899; bugfix on 0.2.0.10-alpha. + - Correctly describe errors that occur when generating a TLS object. + Previously we would attribute them to a failure while generating a + TLS context. Patch by Robert Ransom. Bugfix on 0.1.0.4-rc; fixes + bug 1994. + - Fix an instance where a Tor directory mirror might accidentally + log the IP address of a misbehaving Tor client. Bugfix on + 0.1.0.1-rc. + - Stop logging at severity 'warn' when some other Tor client tries + to establish a circuit with us using weak DH keys. It's a protocol + violation, but that doesn't mean ordinary users need to hear about + it. Fixes the bug part of bug 1114. Bugfix on 0.1.0.13. + - If your relay can't keep up with the number of incoming create + cells, it would log one warning per failure into your logs. Limit + warnings to 1 per minute. Bugfix on 0.0.2pre10; fixes bug 1042. + + o Minor bugfixes (build fixes): + - Fix warnings from GCC 4.6's "-Wunused-but-set-variable" option. + - When warning about missing zlib development packages during compile, + give the correct package names. Bugfix on 0.2.0.1-alpha. + - Fix warnings that newer versions of autoconf produce during + ./autogen.sh. These warnings appear to be harmless in our case, + but they were extremely verbose. Fixes bug 2020. + - Squash a compile warning on OpenBSD. Reported by Tas; fixes + bug 1848. + + o Minor bugfixes (portability): + - Write several files in text mode, on OSes that distinguish text + mode from binary mode (namely, Windows). These files are: + 'buffer-stats', 'dirreq-stats', and 'entry-stats' on relays + that collect those statistics; 'client_keys' and 'hostname' for + hidden services that use authentication; and (in the tor-gencert + utility) newly generated identity and signing keys. Previously, + we wouldn't specify text mode or binary mode, leading to an + assertion failure. Fixes bug 3607. Bugfix on 0.2.1.1-alpha (when + the DirRecordUsageByCountry option which would have triggered + the assertion failure was added), although this assertion failure + would have occurred in tor-gencert on Windows in 0.2.0.1-alpha. + - Selectively disable deprecation warnings on OS X because Lion + started deprecating the shipped copy of openssl. Fixes bug 3643. + - Use a wide type to hold sockets when built for 64-bit Windows. + Fixes bug 3270. + - Fix an issue that prevented static linking of libevent on + some platforms (notably Linux). Fixes bug 2698; bugfix on 0.2.1.23, + where we introduced the "--with-static-libevent" configure option. + - Fix a bug with our locking implementation on Windows that couldn't + correctly detect when a file was already locked. Fixes bug 2504, + bugfix on 0.2.1.6-alpha. + - Build correctly on OSX with zlib 1.2.4 and higher with all warnings + enabled. + - Fix IPv6-related connect() failures on some platforms (BSD, OS X). + Bugfix on 0.2.0.3-alpha; fixes first part of bug 2660. Patch by + "piebeer". + + o Minor bugfixes (code correctness): + - Always NUL-terminate the sun_path field of a sockaddr_un before + passing it to the kernel. (Not a security issue: kernels are + smart enough to reject bad sockaddr_uns.) Found by Coverity; + CID #428. Bugfix on Tor 0.2.0.3-alpha. + - Make connection_printf_to_buf()'s behaviour sane. Its callers + expect it to emit a CRLF iff the format string ends with CRLF; + it actually emitted a CRLF iff (a) the format string ended with + CRLF or (b) the resulting string was over 1023 characters long or + (c) the format string did not end with CRLF *and* the resulting + string was 1021 characters long or longer. Bugfix on 0.1.1.9-alpha; + fixes part of bug 3407. + - Make send_control_event_impl()'s behaviour sane. Its callers + expect it to always emit a CRLF at the end of the string; it + might have emitted extra control characters as well. Bugfix on + 0.1.1.9-alpha; fixes another part of bug 3407. + - Make crypto_rand_int() check the value of its input correctly. + Previously, it accepted values up to UINT_MAX, but could return a + negative number if given a value above INT_MAX+1. Found by George + Kadianakis. Fixes bug 3306; bugfix on 0.2.2pre14. + - Fix a potential null-pointer dereference while computing a + consensus. Bugfix on tor-0.2.0.3-alpha, found with the help of + clang's analyzer. + - If we fail to compute the identity digest of a v3 legacy keypair, + warn, and don't use a buffer-full of junk instead. Bugfix on + 0.2.1.1-alpha; fixes bug 3106. + - Resolve an untriggerable issue in smartlist_string_num_isin(), + where if the function had ever in the future been used to check + for the presence of a too-large number, it would have given an + incorrect result. (Fortunately, we only used it for 16-bit + values.) Fixes bug 3175; bugfix on 0.1.0.1-rc. + - Be more careful about reporting the correct error from a failed + connect() system call. Under some circumstances, it was possible to + look at an incorrect value for errno when sending the end reason. + Bugfix on 0.1.0.1-rc. + - Correctly handle an "impossible" overflow cases in connection byte + counting, where we write or read more than 4GB on an edge connection + in a single second. Bugfix on 0.1.2.8-beta. + - Avoid a double mark-for-free warning when failing to attach a + transparent proxy connection. Bugfix on 0.1.2.1-alpha. Fixes + bug 2279. + - Correctly detect failure to allocate an OpenSSL BIO. Fixes bug 2378; + found by "cypherpunks". This bug was introduced before the first + Tor release, in svn commit r110. + - Fix a bug in bandwidth history state parsing that could have been + triggered if a future version of Tor ever changed the timing + granularity at which bandwidth history is measured. Bugfix on + Tor 0.1.1.11-alpha. + - Add assertions to check for overflow in arguments to + base32_encode() and base32_decode(); fix a signed-unsigned + comparison there too. These bugs are not actually reachable in Tor, + but it's good to prevent future errors too. Found by doorss. + - Avoid a bogus overlapped memcpy in tor_addr_copy(). Reported by + "memcpyfail". + - Set target port in get_interface_address6() correctly. Bugfix + on 0.1.1.4-alpha and 0.2.0.3-alpha; fixes second part of bug 2660. + - Fix an impossible-to-actually-trigger buffer overflow in relay + descriptor generation. Bugfix on 0.1.0.15. + - Fix numerous small code-flaws found by Coverity Scan Rung 3. + + o Minor bugfixes (code improvements): + - After we free an internal connection structure, overwrite it + with a different memory value than we use for overwriting a freed + internal circuit structure. Should help with debugging. Suggested + by bug 1055. + - If OpenSSL fails to make a duplicate of a private or public key, log + an error message and try to exit cleanly. May help with debugging + if bug 1209 ever remanifests. + - Some options used different conventions for uppercasing of acronyms + when comparing manpage and source. Fix those in favor of the + manpage, as it makes sense to capitalize acronyms. + - Take a first step towards making or.h smaller by splitting out + function definitions for all source files in src/or/. Leave + structures and defines in or.h for now. + - Remove a few dead assignments during router parsing. Found by + coverity. + - Don't use 1-bit wide signed bit fields. Found by coverity. + - Avoid signed/unsigned comparisons by making SIZE_T_CEILING unsigned. + None of the cases where we did this before were wrong, but by making + this change we avoid warnings. Fixes bug 2475; bugfix on 0.2.1.28. + - The memarea code now uses a sentinel value at the end of each area + to make sure nothing writes beyond the end of an area. This might + help debug some conceivable causes of bug 930. + - Always treat failure to allocate an RSA key as an unrecoverable + allocation error. + - Add some more defensive programming for architectures that can't + handle unaligned integer accesses. We don't know of any actual bugs + right now, but that's the best time to fix them. Fixes bug 1943. + + o Minor bugfixes (misc): + - Fix a rare bug in rend_fn unit tests: we would fail a test when + a randomly generated port is 0. Diagnosed by Matt Edman. Bugfix + on 0.2.0.10-alpha; fixes bug 1808. + - Where available, use Libevent 2.0's periodic timers so that our + once-per-second cleanup code gets called even more closely to + once per second than it would otherwise. Fixes bug 943. + - Ignore OutboundBindAddress when connecting to localhost. + Connections to localhost need to come _from_ localhost, or else + local servers (like DNS and outgoing HTTP/SOCKS proxies) will often + refuse to listen. + - Update our OpenSSL 0.9.8l fix so that it works with OpenSSL 0.9.8m + too. + - If any of the v3 certs we download are unparseable, we should + actually notice the failure so we don't retry indefinitely. Bugfix + on 0.2.0.x; reported by "rotator". + - When Tor fails to parse a descriptor of any kind, dump it to disk. + Might help diagnosing bug 1051. + - Make our 'torify' script more portable; if we have only one of + 'torsocks' or 'tsocks' installed, don't complain to the user; + and explain our warning about tsocks better. + - Fix some urls in the exit notice file and make it XHTML1.1 strict + compliant. Based on a patch from Christian Kujau. + + o Documentation changes: + - Modernize the doxygen configuration file slightly. Fixes bug 2707. + - Resolve all doxygen warnings except those for missing documentation. + Fixes bug 2705. + - Add doxygen documentation for more functions, fields, and types. + - Convert the HACKING file to asciidoc, and add a few new sections + to it, explaining how we use Git, how we make changelogs, and + what should go in a patch. + - Document the default socks host and port (127.0.0.1:9050) for + tor-resolve. + - Removed some unnecessary files from the source distribution. The + AUTHORS file has now been merged into the people page on the + website. The roadmaps and design doc can now be found in the + projects directory in svn. + + o Deprecated and removed features (config): + - Remove the torrc.complete file. It hasn't been kept up to date + and users will have better luck checking out the manpage. + - Remove the HSAuthorityRecordStats option that version 0 hidden + service authorities could use to track statistics of overall v0 + hidden service usage. + - Remove the obsolete "NoPublish" option; it has been flagged + as obsolete and has produced a warning since 0.1.1.18-rc. + - Caches no longer download and serve v2 networkstatus documents + unless FetchV2Networkstatus flag is set: these documents haven't + haven't been used by clients or relays since 0.2.0.x. Resolves + bug 3022. + + o Deprecated and removed features (controller): + - The controller no longer accepts the old obsolete "addr-mappings/" + or "unregistered-servers-" GETINFO values. + - The EXTENDED_EVENTS and VERBOSE_NAMES controller features are now + always on; using them is necessary for correct forward-compatible + controllers. + + o Deprecated and removed features (misc): + - Hidden services no longer publish version 0 descriptors, and clients + do not request or use version 0 descriptors. However, the old hidden + service authorities still accept and serve version 0 descriptors + when contacted by older hidden services/clients. + - Remove undocumented option "-F" from tor-resolve: it hasn't done + anything since 0.2.1.16-rc. + - Remove everything related to building the expert bundle for OS X. + It has confused many users, doesn't work right on OS X 10.6, + and is hard to get rid of once installed. Resolves bug 1274. + - Remove support for .noconnect style addresses. Nobody was using + them, and they provided another avenue for detecting Tor users + via application-level web tricks. + - When we fixed bug 1038 we had to put in a restriction not to send + RELAY_EARLY cells on rend circuits. This was necessary as long + as relays using Tor 0.2.1.3-alpha through 0.2.1.18-alpha were + active. Now remove this obsolete check. Resolves bug 2081. + - Remove workaround code to handle directory responses from servers + that had bug 539 (they would send HTTP status 503 responses _and_ + send a body too). Since only server versions before + 0.2.0.16-alpha/0.1.2.19 were affected, there is no longer reason to + keep the workaround in place. + - Remove the old 'fuzzy time' logic. It was supposed to be used for + handling calculations where we have a known amount of clock skew and + an allowed amount of unknown skew. But we only used it in three + places, and we never adjusted the known/unknown skew values. This is + still something we might want to do someday, but if we do, we'll + want to do it differently. + - Remove the "--enable-iphone" option to ./configure. According to + reports from Marco Bonetti, Tor builds fine without any special + tweaking on recent iPhone SDK versions. + + +Changes in version 0.2.1.30 - 2011-02-23 + Tor 0.2.1.30 fixes a variety of less critical bugs. The main other + change is a slight tweak to Tor's TLS handshake that makes relays + and bridges that run this new version reachable from Iran again. + We don't expect this tweak will win the arms race long-term, but it + buys us time until we roll out a better solution. + + o Major bugfixes: + - Stop sending a CLOCK_SKEW controller status event whenever + we fetch directory information from a relay that has a wrong clock. + Instead, only inform the controller when it's a trusted authority + that claims our clock is wrong. Bugfix on 0.1.2.6-alpha; fixes + the rest of bug 1074. + - Fix a bounds-checking error that could allow an attacker to + remotely crash a directory authority. Bugfix on 0.2.1.5-alpha. + Found by "piebeer". + - If relays set RelayBandwidthBurst but not RelayBandwidthRate, + Tor would ignore their RelayBandwidthBurst setting, + potentially using more bandwidth than expected. Bugfix on + 0.2.0.1-alpha. Reported by Paul Wouters. Fixes bug 2470. + - Ignore and warn if the user mistakenly sets "PublishServerDescriptor + hidserv" in her torrc. The 'hidserv' argument never controlled + publication of hidden service descriptors. Bugfix on 0.2.0.1-alpha. + + o Minor features: + - Adjust our TLS Diffie-Hellman parameters to match those used by + Apache's mod_ssl. + - Update to the February 1 2011 Maxmind GeoLite Country database. + + o Minor bugfixes: + - Check for and reject overly long directory certificates and + directory tokens before they have a chance to hit any assertions. + Bugfix on 0.2.1.28. Found by "doorss". + - Bring the logic that gathers routerinfos and assesses the + acceptability of circuits into line. This prevents a Tor OP from + getting locked in a cycle of choosing its local OR as an exit for a + path (due to a .exit request) and then rejecting the circuit because + its OR is not listed yet. It also prevents Tor clients from using an + OR running in the same instance as an exit (due to a .exit request) + if the OR does not meet the same requirements expected of an OR + running elsewhere. Fixes bug 1859; bugfix on 0.1.0.1-rc. + + o Packaging changes: + - Stop shipping the Tor specs files and development proposal documents + in the tarball. They are now in a separate git repository at + git://git.torproject.org/torspec.git + - Do not include Git version tags as though they are SVN tags when + generating a tarball from inside a repository that has switched + between branches. Bugfix on 0.2.1.15-rc; fixes bug 2402. + + Changes in version 0.2.1.29 - 2011-01-15 Tor 0.2.1.29 continues our recent code security audit work. The main fix resolves a remote heap overflow vulnerability that can allow remote @@ -1921,6 +3584,8 @@ warning "-Wshorten-64-to-32" is available. - Support compilation to target iPhone; patch from cjacker huang. To build for iPhone, pass the --enable-iphone option to configure. + - Port Tor to build and run on Windows CE systems, using the wcecompat + library. Contributed by Valerio Lupi. - Detect non-ASCII platforms (if any still exist) and refuse to build there: some of our code assumes that 'A' is 65 and so on. - Clear up some MIPSPro compiler warnings. diff -Nru tor-0.2.1.30/src/common/address.c tor-0.2.2.35/src/common/address.c --- tor-0.2.1.30/src/common/address.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/address.c 2011-12-15 16:28:37.000000000 +0000 @@ -12,7 +12,7 @@ #include "compat.h" #include "util.h" #include "address.h" -#include "log.h" +#include "torlog.h" #ifdef MS_WINDOWS #include @@ -43,6 +43,9 @@ #ifdef HAVE_SYS_PARAM_H #include /* FreeBSD needs this to know what version it is */ #endif +#ifdef HAVE_SYS_UN_H +#include +#endif #include #include #include @@ -50,11 +53,13 @@ #include /** Convert the tor_addr_t in a, with port in port, into a - * socklen object in *sa_out of object size len. If not enough - * room is free, or on error, return -1. Else return the length of the - * sockaddr. */ -/* XXXX021 This returns socklen_t. socklen_t is sometimes unsigned. This - * function claims to return -1 sometimes. Problematic! */ + * sockaddr object in *sa_out of object size len. If not enough + * room is available in sa_out, or on error, return 0. On success, return + * the length of the sockaddr. + * + * Interface note: ordinarily, we return -1 for error. We can't do that here, + * since socklen_t is unsigned on some platforms. + **/ socklen_t tor_addr_to_sockaddr(const tor_addr_t *a, uint16_t port, @@ -65,7 +70,7 @@ if (family == AF_INET) { struct sockaddr_in *sin; if (len < (int)sizeof(struct sockaddr_in)) - return -1; + return 0; sin = (struct sockaddr_in *)sa_out; memset(sin, 0, sizeof(struct sockaddr_in)); #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN @@ -78,7 +83,7 @@ } else if (family == AF_INET6) { struct sockaddr_in6 *sin6; if (len < (int)sizeof(struct sockaddr_in6)) - return -1; + return 0; sin6 = (struct sockaddr_in6 *)sa_out; memset(sin6, 0, sizeof(struct sockaddr_in6)); #ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN @@ -89,7 +94,7 @@ memcpy(&sin6->sin6_addr, tor_addr_to_in6(a), sizeof(struct in6_addr)); return sizeof(struct sockaddr_in6); } else { - return -1; + return 0; } } @@ -118,6 +123,33 @@ return 0; } +/** Return a newly allocated string holding the address described in + * sa. AF_UNIX, AF_UNSPEC, AF_INET, and AF_INET6 are supported. */ +char * +tor_sockaddr_to_str(const struct sockaddr *sa) +{ + char address[TOR_ADDR_BUF_LEN]; + char *result; + tor_addr_t addr; + uint16_t port; +#ifdef HAVE_SYS_UN_H + if (sa->sa_family == AF_UNIX) { + struct sockaddr_un *s_un = (struct sockaddr_un *)sa; + tor_asprintf(&result, "unix:%s", s_un->sun_path); + return result; + } +#endif + if (sa->sa_family == AF_UNSPEC) + return tor_strdup("unspec"); + + if (tor_addr_from_sockaddr(&addr, sa, &port) < 0) + return NULL; + if (! tor_addr_to_str(address, &addr, sizeof(address), 1)) + return NULL; + tor_asprintf(&result, "%s:%d", address, (int)port); + return result; +} + /** Set address a to the unspecified address. This address belongs to * no family. */ void @@ -508,7 +540,8 @@ tor_assert(s); tor_assert(addr_out); - /* IP, [], /mask, ports */ + /** Longest possible length for an address, mask, and port-range combination. + * Includes IP, [], /mask, :, ports */ #define MAX_ADDRESS_LENGTH (TOR_ADDR_BUF_LEN+2+(1+INET_NTOA_BUF_LEN)+12+1) if (strlen(s) > MAX_ADDRESS_LENGTH) { @@ -601,7 +634,7 @@ if (family == AF_INET6 && v4map) { if (bits > 32 && bits < 96) { /* Crazy */ log_warn(LD_GENERAL, - "Bad mask bits %i for V4-mapped V6 address; rejecting.", + "Bad mask bits %d for V4-mapped V6 address; rejecting.", bits); goto err; } @@ -726,7 +759,7 @@ } /** Set dest to equal the IPv4 address in v4addr (given in - * network order. */ + * network order). */ void tor_addr_from_ipv4n(tor_addr_t *dest, uint32_t v4addr) { @@ -760,6 +793,8 @@ void tor_addr_copy(tor_addr_t *dest, const tor_addr_t *src) { + if (src == dest) + return; tor_assert(src); tor_assert(dest); memcpy(dest, src, sizeof(tor_addr_t)); @@ -786,7 +821,7 @@ * Reduce over-specific masks (>128 for ipv6, >32 for ipv4) to 128 or 32. * * The mask is interpreted relative to addr1, so that if a is - * ::ffff:1.2.3.4, and b is 3.4.5.6, + * \::ffff:1.2.3.4, and b is 3.4.5.6, * tor_addr_compare_masked(a,b,100,CMP_SEMANTIC) is the same as * -tor_addr_compare_masked(b,a,4,CMP_SEMANTIC). * @@ -798,6 +833,8 @@ tor_addr_compare_masked(const tor_addr_t *addr1, const tor_addr_t *addr2, maskbits_t mbits, tor_addr_comparison_t how) { + /** Helper: Evaluates to -1 if a is less than b, 0 if a equals b, or 1 if a + * is greater than b. May evaluate a and b more than once. */ #define TRISTATE(a,b) (((a)<(b))?-1: (((a)==(b))?0:1)) sa_family_t family1, family2, v_family1, v_family2; @@ -830,7 +867,7 @@ const uint8_t *a2 = tor_addr_to_in6_addr8(addr2); const int bytes = mbits >> 3; const int leftover_bits = mbits & 7; - if (bytes && (r = memcmp(a1, a2, bytes))) { + if (bytes && (r = tor_memcmp(a1, a2, bytes))) { return r; } else if (leftover_bits) { uint8_t b1 = a1[bytes] >> (8-leftover_bits); @@ -908,15 +945,11 @@ tor_dup_addr(const tor_addr_t *addr) { char buf[TOR_ADDR_BUF_LEN]; - tor_addr_to_str(buf, addr, sizeof(buf), 0); - return tor_strdup(buf); -} - -/** Copy the address in src to dest */ -void -tor_addr_assign(tor_addr_t *dest, const tor_addr_t *src) -{ - memcpy(dest, src, sizeof(tor_addr_t)); + if (tor_addr_to_str(buf, addr, sizeof(buf), 0)) { + return tor_strdup(buf); + } else { + return tor_strdup(""); + } } /** Return a string representing the address addr. This string is @@ -928,8 +961,10 @@ { static char buf[TOR_ADDR_BUF_LEN]; if (!addr) return ""; - tor_addr_to_str(buf, addr, sizeof(buf), 0); - return buf; + if (tor_addr_to_str(buf, addr, sizeof(buf), 0)) + return buf; + else + return "???"; } /** Convert the string in src to a tor_addr_t addr. The string @@ -999,7 +1034,7 @@ ++port; } - if (tor_addr_lookup(tmp, AF_UNSPEC, &addr) < 0) + if (tor_addr_lookup(tmp, AF_UNSPEC, &addr) != 0) goto err; tor_free(tmp); @@ -1030,27 +1065,28 @@ { int sock=-1, r=-1; struct sockaddr_storage my_addr, target_addr; - socklen_t my_addr_len; + socklen_t addr_len; tor_assert(addr); memset(addr, 0, sizeof(tor_addr_t)); memset(&target_addr, 0, sizeof(target_addr)); - my_addr_len = (socklen_t)sizeof(my_addr); - /* Use the "discard" service port */ - ((struct sockaddr_in*)&target_addr)->sin_port = 9; /* Don't worry: no packets are sent. We just need to use a real address * on the actual Internet. */ if (family == AF_INET6) { struct sockaddr_in6 *sin6 = (struct sockaddr_in6*)&target_addr; + /* Use the "discard" service port */ + sin6->sin6_port = htons(9); sock = tor_open_socket(PF_INET6,SOCK_DGRAM,IPPROTO_UDP); - my_addr_len = (socklen_t)sizeof(struct sockaddr_in6); + addr_len = (socklen_t)sizeof(struct sockaddr_in6); sin6->sin6_family = AF_INET6; S6_ADDR16(sin6->sin6_addr)[0] = htons(0x2002); /* 2002:: */ } else if (family == AF_INET) { struct sockaddr_in *sin = (struct sockaddr_in*)&target_addr; + /* Use the "discard" service port */ + sin->sin_port = htons(9); sock = tor_open_socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP); - my_addr_len = (socklen_t)sizeof(struct sockaddr_in); + addr_len = (socklen_t)sizeof(struct sockaddr_in); sin->sin_family = AF_INET; sin->sin_addr.s_addr = htonl(0x12000001); /* 18.0.0.1 */ } else { @@ -1063,14 +1099,13 @@ goto err; } - if (connect(sock,(struct sockaddr *)&target_addr, - (socklen_t)sizeof(target_addr))<0) { + if (connect(sock,(struct sockaddr *)&target_addr, addr_len) < 0) { int e = tor_socket_errno(sock); log_fn(severity, LD_NET, "connect() failed: %s", tor_socket_strerror(e)); goto err; } - if (getsockname(sock,(struct sockaddr*)&my_addr, &my_addr_len)) { + if (getsockname(sock,(struct sockaddr*)&my_addr, &addr_len)) { int e = tor_socket_errno(sock); log_fn(severity, LD_NET, "getsockname() to determine interface failed: %s", tor_socket_strerror(e)); @@ -1087,7 +1122,7 @@ /* ====== * IPv4 helpers - * XXXX022 IPv6 deprecate some of these. + * XXXX023 IPv6 deprecate some of these. */ /** Return true iff ip (in host order) is an IP reserved to localhost, diff -Nru tor-0.2.1.30/src/common/address.h tor-0.2.2.35/src/common/address.h --- tor-0.2.1.30/src/common/address.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/address.h 2011-12-15 16:28:37.000000000 +0000 @@ -44,6 +44,7 @@ int tor_addr_from_sockaddr(tor_addr_t *a, const struct sockaddr *sa, uint16_t *port_out); void tor_addr_make_unspec(tor_addr_t *a); +char *tor_sockaddr_to_str(const struct sockaddr *sa); /** Return an in6_addr* equivalent to a, or NULL if a is not * an IPv6 address. */ @@ -53,8 +54,20 @@ return a->family == AF_INET6 ? &a->addr.in6_addr : NULL; } +/** Given an IPv6 address x, yield it as an array of uint8_t. + * + * Requires that x is actually an IPv6 address. + */ #define tor_addr_to_in6_addr8(x) tor_addr_to_in6(x)->s6_addr +/** Given an IPv6 address x, yield it as an array of uint16_t. + * + * Requires that x is actually an IPv6 address. + */ #define tor_addr_to_in6_addr16(x) S6_ADDR16(*tor_addr_to_in6(x)) +/** Given an IPv6 address x, yield it as an array of uint32_t. + * + * Requires that x is actually an IPv6 address. + */ #define tor_addr_to_in6_addr32(x) S6_ADDR32(*tor_addr_to_in6(x)) /** Return an IPv4 address in network order for a, or 0 if @@ -71,7 +84,7 @@ { return ntohl(tor_addr_to_ipv4n(a)); } -/* Given an IPv6 address, return its mapped IPv4 address in host order, or +/** Given an IPv6 address, return its mapped IPv4 address in host order, or * 0 if a is not an IPv6 address. * * (Does not check whether the address is really a mapped address */ @@ -102,12 +115,17 @@ return a->family == AF_INET ? (tor_addr_to_ipv4h(a) == u) : 0; } -#define TOR_ADDR_BUF_LEN 48 /* [ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255] - */ +/** Length of a buffer that you need to allocate to be sure you can encode + * any tor_addr_t. + * + * This allows enough space for + * "[ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255]", + * plus a terminating NUL. + */ +#define TOR_ADDR_BUF_LEN 48 int tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr_out); char *tor_dup_addr(const tor_addr_t *addr) ATTR_MALLOC; -void tor_addr_assign(tor_addr_t *dest, const tor_addr_t *src); const char *fmt_addr(const tor_addr_t *addr); int get_interface_address6(int severity, sa_family_t family, tor_addr_t *addr); @@ -155,6 +173,7 @@ #define tor_addr_from_ipv4h(dest, v4addr) \ tor_addr_from_ipv4n((dest), htonl(v4addr)) void tor_addr_from_ipv6_bytes(tor_addr_t *dest, const char *bytes); +/** Set dest to the IPv4 address incoded in in. */ #define tor_addr_from_in(dest, in) \ tor_addr_from_ipv4n((dest), (in)->s_addr); void tor_addr_from_in6(tor_addr_t *dest, const struct in6_addr *in6); diff -Nru tor-0.2.1.30/src/common/aes.c tor-0.2.2.35/src/common/aes.c --- tor-0.2.1.30/src/common/aes.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/aes.c 2011-12-15 16:28:37.000000000 +0000 @@ -21,7 +21,7 @@ #include "compat.h" #include "aes.h" #include "util.h" -#include "log.h" +#include "torlog.h" /* We have 3 strategies for getting AES: Via OpenSSL's AES_encrypt function, * via OpenSSL's EVP_EncryptUpdate function, or via the built-in AES @@ -100,6 +100,9 @@ /* Figure out which AES optimizations to use. */ #ifdef USE_BUILTIN_AES +/** If this is defined, we take advantage of the fact that AES treats its + * input as a set of 4 32-bit words, so that there is no need to encode and + * decode the 128-bit counter before every block encryption */ # define USE_RIJNDAEL_COUNTER_OPTIMIZATION # if 0 && (defined(__powerpc__) || defined(__powerpc64__)) /* XXXX do more experimentation before concluding this is actually @@ -263,7 +266,8 @@ void aes_free_cipher(aes_cnt_cipher_t *cipher) { - tor_assert(cipher); + if (!cipher) + return; #ifdef USE_OPENSSL_EVP EVP_CIPHER_CTX_cleanup(&cipher->key); #endif diff -Nru tor-0.2.1.30/src/common/common_sha1.i tor-0.2.2.35/src/common/common_sha1.i --- tor-0.2.1.30/src/common/common_sha1.i 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/common_sha1.i 2011-12-15 16:32:21.000000000 +0000 @@ -0,0 +1,24 @@ +"f497ad2f1a2b80bafa3b1674fca58a7af5ae6ca7 crypto.c\n" +"00b8ee1ff0b03da6ed7537e04739badc5df75862 aes.c\n" +"1a74e7c9a221853a1865db466ee9f2d6c4e6a4d9 tortls.c\n" +"67e9165ea17a4d909b8a7a3479d65702e1005b93 torgzip.c\n" +"bc5bc85591206b5eb71600a4133d3d2bf0cb6ace address.h\n" +"938266b9016513918f1956585dc2bd895fb7ad74 torlog.h\n" +"386720ff8a2704f29b575d357201a756ab6c98bc crypto.h\n" +"8188698faa8fd7bf127ab1afe88e525e8a73778d util.h\n" +"a1c238b4db944d584bb3613b4ecf7c598ad53bbb compat.h\n" +"1ce936964826fc0f06104730da09c68533ccd083 aes.h\n" +"7ea6eb7710cd3fb695d003d4b4b8e073a3195507 torint.h\n" +"62c7be2362c462734377571cb82ee7576635ff8f tortls.h\n" +"7faeaf90301ad7d5d8db105590524a949a25dccf strlcpy.c\n" +"f009567cb0708b2bfdff242353c07a7da6f4869f strlcat.c\n" +"42a40fc0c9b0c5a784700168f681e53a809aa548 torgzip.h\n" +"de45ee91720a5ea90b6623ba0f285dfa87d49642 container.h\n" +"31abbc03f2b4c2606c82d0d13eaadcb7ab100e08 ht.h\n" +"d3227c6c5d3cfafd0adbedb676de912a1544d084 mempool.h\n" +"c33dcf8bcf25a1aafd4539f6437537eb7f1a6651 memarea.h\n" +"d5a23f5ce3f8d4dff5b41fe128b744a7ea34bbd2 ciphers.inc\n" +"7a81808709254ad77792f4799187a98176d78345 compat_libevent.h\n" +"c468b7dd93c6b1c871e74cdb70f5ec7069a5d3b5 tortls_states.h\n" +"cc4fb0ea82a6796f3a3716efa18e756ada94d3ef di_ops.h\n" +"8f2f760c49d356e9d40df04762662812f6cea78e procmon.h\n" diff -Nru tor-0.2.1.30/src/common/compat.c tor-0.2.2.35/src/common/compat.c --- tor-0.2.1.30/src/common/compat.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/compat.c 2011-12-15 16:28:37.000000000 +0000 @@ -15,6 +15,8 @@ /* This is required on rh7 to make strptime not complain. * We also need it to make memmem get defined (where available) */ +/* XXXX023 We should just use AC_USE_SYSTEM_EXTENSIONS in our autoconf, + * and get this (and other important stuff!) automatically */ #define _GNU_SOURCE #include "compat.h" @@ -88,7 +90,7 @@ #include #endif -#include "log.h" +#include "torlog.h" #include "util.h" #include "container.h" #include "address.h" @@ -170,12 +172,17 @@ tor_mmap_t * tor_mmap_file(const char *filename) { + TCHAR tfilename[MAX_PATH]= {0}; tor_mmap_t *res = tor_malloc_zero(sizeof(tor_mmap_t)); int empty = 0; res->file_handle = INVALID_HANDLE_VALUE; res->mmap_handle = NULL; - - res->file_handle = CreateFile(filename, +#ifdef UNICODE + mbstowcs(tfilename,filename,MAX_PATH); +#else + strlcpy(tfilename,filename,MAX_PATH); +#endif + res->file_handle = CreateFile(tfilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, @@ -308,11 +315,107 @@ return r; } +/** + * Portable asprintf implementation. Does a printf() into a newly malloc'd + * string. Sets *strp to this string, and returns its length (not + * including the terminating NUL character). + * + * You can treat this function as if its implementation were something like +
+     char buf[_INFINITY_];
+     tor_snprintf(buf, sizeof(buf), fmt, args);
+     *strp = tor_strdup(buf);
+     return strlen(*strp):
+   
+ * Where _INFINITY_ is an imaginary constant so big that any string can fit + * into it. + */ +int +tor_asprintf(char **strp, const char *fmt, ...) +{ + int r; + va_list args; + va_start(args, fmt); + r = tor_vasprintf(strp, fmt, args); + va_end(args); + if (!*strp || r < 0) { + log_err(LD_BUG, "Internal error in asprintf"); + tor_assert(0); + } + return r; +} + +/** + * Portable vasprintf implementation. Does a printf() into a newly malloc'd + * string. Differs from regular vasprintf in the same ways that + * tor_asprintf() differs from regular asprintf. + */ +int +tor_vasprintf(char **strp, const char *fmt, va_list args) +{ + /* use a temporary variable in case *strp is in args. */ + char *strp_tmp=NULL; +#ifdef HAVE_VASPRINTF + /* If the platform gives us one, use it. */ + int r = vasprintf(&strp_tmp, fmt, args); + if (r < 0) + *strp = NULL; + else + *strp = strp_tmp; + return r; +#elif defined(_MSC_VER) + /* On Windows, _vsnprintf won't tell us the length of the string if it + * overflows, so we need to use _vcsprintf to tell how much to allocate */ + int len, r; + char *res; + len = _vscprintf(fmt, args); + if (len < 0) { + *strp = NULL; + return -1; + } + strp_tmp = tor_malloc(len + 1); + r = _vsnprintf(strp_tmp, len+1, fmt, args); + if (r != len) { + tor_free(strp_tmp); + *strp = NULL; + return -1; + } + *strp = strp_tmp; + return len; +#else + /* Everywhere else, we have a decent vsnprintf that tells us how many + * characters we need. We give it a try on a short buffer first, since + * it might be nice to avoid the second vsnprintf call. + */ + char buf[128]; + int len, r; + va_list tmp_args; + va_copy(tmp_args, args); + len = vsnprintf(buf, sizeof(buf), fmt, tmp_args); + va_end(tmp_args); + if (len < (int)sizeof(buf)) { + *strp = tor_strdup(buf); + return len; + } + strp_tmp = tor_malloc(len+1); + r = vsnprintf(strp_tmp, len+1, fmt, args); + if (r != len) { + tor_free(strp_tmp); + *strp = NULL; + return -1; + } + *strp = strp_tmp; + return len; +#endif +} + /** Given hlen bytes at haystack and nlen bytes at * needle, return a pointer to the first occurrence of the needle * within the haystack, or NULL if there is no such occurrence. * - * Requires that nlen be greater than zero. + * This function is not timing-safe. + * + * Requires that nlen be greater than zero. */ const void * tor_memmem(const void *_haystack, size_t hlen, @@ -336,7 +439,7 @@ while ((p = memchr(p, first, end-p))) { if (p+nlen > end) return NULL; - if (!memcmp(p, needle, nlen)) + if (fast_memeq(p, needle, nlen)) return p; ++p; } @@ -399,6 +502,37 @@ 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, }; +/** Implementation of strtok_r for platforms whose coders haven't figured out + * how to write one. Hey guys! You can use this code here for free! */ +char * +tor_strtok_r_impl(char *str, const char *sep, char **lasts) +{ + char *cp, *start; + if (str) + start = cp = *lasts = str; + else if (!*lasts) + return NULL; + else + start = cp = *lasts; + + tor_assert(*sep); + if (sep[1]) { + while (*cp && !strchr(sep, *cp)) + ++cp; + } else { + tor_assert(strlen(sep) == 1); + cp = strchr(cp, *sep); + } + + if (!cp || !*cp) { + *lasts = NULL; + } else { + *cp++ = '\0'; + *lasts = cp; + } + return start; +} + #ifdef MS_WINDOWS /** Take a filename and return a pointer to its final element. This * function is called on __FILE__ to fix a MSVC nit where __FILE__ @@ -450,8 +584,8 @@ return v; } /** - * Read a 32-bit value beginning at cp. Equivalent to - * *(uint32_t*)(cp), but will not cause segfaults on platforms that forbid + * Read a 64-bit value beginning at cp. Equivalent to + * *(uint64_t*)(cp), but will not cause segfaults on platforms that forbid * unaligned memory access. */ uint64_t @@ -530,7 +664,9 @@ /** Represents a lockfile on which we hold the lock. */ struct tor_lockfile_t { + /** Name of the file */ char *filename; + /** File descriptor used to hold the file open */ int fd; }; @@ -546,7 +682,10 @@ * * (Implementation note: because we need to fall back to fcntl on some * platforms, these locks are per-process, not per-thread. If you want - * to do in-process locking, use tor_mutex_t like a normal person.) + * to do in-process locking, use tor_mutex_t like a normal person. + * On Windows, when blocking is true, the maximum time that + * is actually waited is 10 seconds, after which NULL is returned + * and locked_out is set to 1.) */ tor_lockfile_t * tor_lockfile_lock(const char *filename, int blocking, int *locked_out) @@ -566,7 +705,7 @@ #ifdef WIN32 _lseek(fd, 0, SEEK_SET); if (_locking(fd, blocking ? _LK_LOCK : _LK_NBLCK, 1) < 0) { - if (errno != EDEADLOCK) + if (errno != EACCES && errno != EDEADLOCK) log_warn(LD_FS,"Couldn't lock \"%s\": %s", filename, strerror(errno)); else *locked_out = 1; @@ -633,7 +772,8 @@ tor_free(lockfile); } -/* Some old versions of Unix didn't define constants for these values, +/** @{ */ +/** Some old versions of Unix didn't define constants for these values, * and instead expect you to say 0, 1, or 2. */ #ifndef SEEK_CUR #define SEEK_CUR 1 @@ -641,6 +781,7 @@ #ifndef SEEK_END #define SEEK_END 2 #endif +/** @} */ /** Return the position of fd with respect to the start of the file. */ off_t @@ -680,6 +821,7 @@ /** Mutex to protect open_sockets, max_socket, and n_sockets_open. */ static tor_mutex_t *socket_accounting_mutex = NULL; +/** Helper: acquire the socket accounting lock. */ static INLINE void socket_accounting_lock(void) { @@ -688,6 +830,7 @@ tor_mutex_acquire(socket_accounting_mutex); } +/** Helper: release the socket accounting lock. */ static INLINE void socket_accounting_unlock(void) { @@ -698,7 +841,7 @@ * Windows, where close()ing a socket doesn't work. Returns 0 on success, -1 * on failure. */ int -tor_close_socket(int s) +tor_close_socket(tor_socket_t s) { int r = 0; @@ -746,12 +889,15 @@ return r; } +/** @{ */ #ifdef DEBUG_SOCKET_COUNTING /** Helper: if DEBUG_SOCKET_COUNTING is enabled, remember that s is * now an open socket. */ static INLINE void -mark_socket_open(int s) +mark_socket_open(tor_socket_t s) { + /* XXXX This bitarray business will NOT work on windows: sockets aren't + small ints there. */ if (s > max_socket) { if (max_socket == -1) { open_sockets = bitarray_init_zero(s+128); @@ -770,13 +916,14 @@ #else #define mark_socket_open(s) STMT_NIL #endif +/** @} */ /** As socket(), but counts the number of open sockets. */ -int +tor_socket_t tor_open_socket(int domain, int type, int protocol) { - int s = socket(domain, type, protocol); - if (s >= 0) { + tor_socket_t s = socket(domain, type, protocol); + if (SOCKET_OK(s)) { socket_accounting_lock(); ++n_sockets_open; mark_socket_open(s); @@ -786,11 +933,11 @@ } /** As socket(), but counts the number of open sockets. */ -int -tor_accept_socket(int sockfd, struct sockaddr *addr, socklen_t *len) +tor_socket_t +tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr, socklen_t *len) { - int s = accept(sockfd, addr, len); - if (s >= 0) { + tor_socket_t s = accept(sockfd, addr, len); + if (SOCKET_OK(s)) { socket_accounting_lock(); ++n_sockets_open; mark_socket_open(s); @@ -813,7 +960,7 @@ /** Turn socket into a nonblocking socket. */ void -set_socket_nonblocking(int socket) +set_socket_nonblocking(tor_socket_t socket) { #if defined(MS_WINDOWS) unsigned long nonblocking = 1; @@ -841,7 +988,7 @@ **/ /* It would be nicer just to set errno, but that won't work for windows. */ int -tor_socketpair(int family, int type, int protocol, int fd[2]) +tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2]) { //don't use win32 socketpairs (they are always bad) #if defined(HAVE_SOCKETPAIR) && !defined(MS_WINDOWS) @@ -866,9 +1013,9 @@ * for now, and really, when localhost is down sometimes, we * have other problems too. */ - int listener = -1; - int connector = -1; - int acceptor = -1; + tor_socket_t listener = -1; + tor_socket_t connector = -1; + tor_socket_t acceptor = -1; struct sockaddr_in listen_addr; struct sockaddr_in connect_addr; int size; @@ -957,6 +1104,8 @@ #endif } +/** Number of extra file descriptors to keep in reserve beyond those that we + * tell Tor it's allowed to use. */ #define ULIMIT_BUFFER 32 /* keep 32 extra fd's beyond _ConnLimit */ /** Learn the maximum allowed number of file descriptors. (Some systems @@ -979,9 +1128,6 @@ #if defined(CYGWIN) || defined(__CYGWIN__) const char *platform = "Cygwin"; const unsigned long MAX_CONNECTIONS = 3200; -#elif defined(IPHONE) - const char *platform = "iPhone"; - const unsigned long MAX_CONNECTIONS = 9999; #elif defined(MS_WINDOWS) const char *platform = "Windows"; const unsigned long MAX_CONNECTIONS = 15000; @@ -1072,13 +1218,15 @@ static int log_credential_status(void) { +/** Log level to use when describing non-error UID/GID status. */ #define CREDENTIAL_LOG_LEVEL LOG_INFO /* Real, effective and saved UIDs */ uid_t ruid, euid, suid; /* Read, effective and saved GIDs */ gid_t rgid, egid, sgid; /* Supplementary groups */ - gid_t sup_gids[NGROUPS_MAX + 1]; + gid_t *sup_gids = NULL; + int sup_gids_size; /* Number of supplementary groups */ int ngids; @@ -1124,9 +1272,19 @@ #endif /* log supplementary groups */ - if ((ngids = getgroups(NGROUPS_MAX + 1, sup_gids)) < 0) { + sup_gids_size = 64; + sup_gids = tor_malloc(sizeof(gid_t) * 64); + while ((ngids = getgroups(sup_gids_size, sup_gids)) < 0 && + errno == EINVAL && + sup_gids_size < NGROUPS_MAX) { + sup_gids_size *= 2; + sup_gids = tor_realloc(sup_gids, sizeof(gid_t) * sup_gids_size); + } + + if (ngids < 0) { log_warn(LD_GENERAL, "Error getting supplementary GIDs: %s", strerror(errno)); + tor_free(sup_gids); return -1; } else { int i, retval = 0; @@ -1156,6 +1314,7 @@ tor_free(cp); }); smartlist_free(elts); + tor_free(sup_gids); return retval; } @@ -1322,6 +1481,45 @@ } #endif +/** Modify fname to contain the name of the directory */ +int +get_parent_directory(char *fname) +{ + char *cp; + int at_end = 1; + tor_assert(fname); +#ifdef MS_WINDOWS + /* If we start with, say, c:, then don't consider that the start of the path + */ + if (fname[0] && fname[1] == ':') { + fname += 2; + } +#endif + /* Now we want to remove all path-separators at the end of the string, + * and to remove the end of the string starting with the path separator + * before the last non-path-separator. In perl, this would be + * s#[/]*$##; s#/[^/]*$##; + * on a unixy platform. + */ + cp = fname + strlen(fname); + at_end = 1; + while (--cp > fname) { + int is_sep = (*cp == '/' +#ifdef MS_WINDOWS + || *cp == '\\' +#endif + ); + if (is_sep) { + *cp = '\0'; + if (! at_end) + return 0; + } else { + at_end = 0; + } + } + return -1; +} + /** Set *addr to the IP address (in dotted-quad notation) stored in c. * Return 1 on success, 0 if c is badly formatted. (Like inet_aton(c,addr), * but works on Windows and Solaris.) @@ -1553,6 +1751,30 @@ return -1; } +/** Initialize the insecure libc RNG. */ +void +tor_init_weak_random(unsigned seed) +{ +#ifdef MS_WINDOWS + srand(seed); +#else + srandom(seed); +#endif +} + +/** Return a randomly chosen value in the range 0..TOR_RAND_MAX. This + * entropy will not be cryptographically strong; do not rely on it + * for anything an adversary should not be able to predict. */ +long +tor_weak_random(void) +{ +#ifdef MS_WINDOWS + return rand(); +#else + return random(); +#endif +} + /** Hold the result of our call to uname. */ static char uname_result[256]; /** True iff uname_result is set. */ @@ -1578,13 +1800,15 @@ #ifdef MS_WINDOWS OSVERSIONINFOEX info; int i; - unsigned int leftover_mask; const char *plat = NULL; const char *extra = NULL; + char acsd[MAX_PATH] = {0}; static struct { unsigned major; unsigned minor; const char *version; } win_version_table[] = { - { 6, 0, "Windows \"Longhorn\"" }, + { 6, 2, "Windows 8" }, + { 6, 1, "Windows 7" }, + { 6, 0, "Windows Vista" }, { 5, 2, "Windows Server 2003" }, { 5, 1, "Windows XP" }, { 5, 0, "Windows 2000" }, @@ -1595,25 +1819,6 @@ { 3, 51, "Windows NT 3.51" }, { 0, 0, NULL } }; -#ifdef VER_SUITE_BACKOFFICE - static struct { - unsigned int mask; const char *str; - } win_mask_table[] = { - { VER_SUITE_BACKOFFICE, " {backoffice}" }, - { VER_SUITE_BLADE, " {\"blade\" (2003, web edition)}" }, - { VER_SUITE_DATACENTER, " {datacenter}" }, - { VER_SUITE_ENTERPRISE, " {enterprise}" }, - { VER_SUITE_EMBEDDEDNT, " {embedded}" }, - { VER_SUITE_PERSONAL, " {personal}" }, - { VER_SUITE_SINGLEUSERTS, - " {terminal services, single user}" }, - { VER_SUITE_SMALLBUSINESS, " {small business}" }, - { VER_SUITE_SMALLBUSINESS_RESTRICTED, - " {small business, restricted}" }, - { VER_SUITE_TERMINAL, " {terminal services}" }, - { 0, NULL }, - }; -#endif memset(&info, 0, sizeof(info)); info.dwOSVersionInfoSize = sizeof(info); if (! GetVersionEx((LPOSVERSIONINFO)&info)) { @@ -1622,14 +1827,19 @@ uname_result_is_set = 1; return uname_result; } +#ifdef UNICODE + wcstombs(acsd, info.szCSDVersion, MAX_PATH); +#else + strlcpy(acsd, info.szCSDVersion, sizeof(acsd)); +#endif if (info.dwMajorVersion == 4 && info.dwMinorVersion == 0) { if (info.dwPlatformId == VER_PLATFORM_WIN32_NT) plat = "Windows NT 4.0"; else plat = "Windows 95"; - if (info.szCSDVersion[1] == 'B') + if (acsd[1] == 'B') extra = "OSR2 (B)"; - else if (info.szCSDVersion[1] == 'C') + else if (acsd[1] == 'C') extra = "OSR2 (C)"; } else { for (i=0; win_version_table[i].major>0; ++i) { @@ -1641,29 +1851,30 @@ } } if (plat && !strcmp(plat, "Windows 98")) { - if (info.szCSDVersion[1] == 'A') + if (acsd[1] == 'A') extra = "SE (A)"; - else if (info.szCSDVersion[1] == 'B') + else if (acsd[1] == 'B') extra = "SE (B)"; } if (plat) { if (!extra) - extra = info.szCSDVersion; + extra = acsd; tor_snprintf(uname_result, sizeof(uname_result), "%s %s", plat, extra); } else { if (info.dwMajorVersion > 6 || - (info.dwMajorVersion==6 && info.dwMinorVersion>0)) + (info.dwMajorVersion==6 && info.dwMinorVersion>2)) tor_snprintf(uname_result, sizeof(uname_result), "Very recent version of Windows [major=%d,minor=%d] %s", (int)info.dwMajorVersion,(int)info.dwMinorVersion, - info.szCSDVersion); + acsd); else tor_snprintf(uname_result, sizeof(uname_result), "Unrecognized version of Windows [major=%d,minor=%d] %s", (int)info.dwMajorVersion,(int)info.dwMinorVersion, - info.szCSDVersion); + acsd); } +#if !defined (WINCE) #ifdef VER_SUITE_BACKOFFICE if (info.wProductType == VER_NT_DOMAIN_CONTROLLER) { strlcat(uname_result, " [domain controller]", sizeof(uname_result)); @@ -1672,18 +1883,7 @@ } else if (info.wProductType == VER_NT_WORKSTATION) { strlcat(uname_result, " [workstation]", sizeof(uname_result)); } - leftover_mask = info.wSuiteMask; - for (i = 0; win_mask_table[i].mask; ++i) { - if (info.wSuiteMask & win_mask_table[i].mask) { - strlcat(uname_result, win_mask_table[i].str, sizeof(uname_result)); - leftover_mask &= ~win_mask_table[i].mask; - } - } - if (leftover_mask) { - size_t len = strlen(uname_result); - tor_snprintf(uname_result+len, sizeof(uname_result)-len, - " {0x%x}", info.wSuiteMask); - } +#endif #endif #else strlcpy(uname_result, "Unknown platform", sizeof(uname_result)); @@ -1793,7 +1993,6 @@ * call _exit, not exit, from child processes. */ _exit(0); #endif - } /** Set *timeval to the current time of day. On error, log and terminate. @@ -1813,8 +2012,15 @@ uint64_t ft_64; FILETIME ft_ft; } ft; +#if defined (WINCE) + /* wince do not have GetSystemTimeAsFileTime */ + SYSTEMTIME stime; + GetSystemTime(&stime); + SystemTimeToFileTime(&stime,&ft.ft_ft); +#else /* number of 100-nsec units since Jan 1, 1601 */ GetSystemTimeAsFileTime(&ft.ft_ft); +#endif if (ft.ft_64 < EPOCH_BIAS) { log_err(LD_GENERAL,"System time is before 1970; failing."); exit(1); @@ -1846,8 +2052,87 @@ #define TIME_FNS_NEED_LOCKS #endif -#ifndef HAVE_LOCALTIME_R -#ifdef TIME_FNS_NEED_LOCKS +static struct tm * +correct_tm(int islocal, const time_t *timep, struct tm *resultbuf, + struct tm *r) +{ + const char *outcome; + + if (PREDICT_LIKELY(r)) { + if (r->tm_year > 8099) { /* We can't strftime dates after 9999 CE. */ + r->tm_year = 8099; + r->tm_mon = 11; + r->tm_mday = 31; + r->tm_yday = 365; + r->tm_hour = 23; + r->tm_min = 59; + r->tm_sec = 59; + } + return r; + } + + /* If we get here, gmtime or localtime returned NULL. It might have done + * this because of overrun or underrun, or it might have done it because of + * some other weird issue. */ + if (timep) { + if (*timep < 0) { + r = resultbuf; + r->tm_year = 70; /* 1970 CE */ + r->tm_mon = 0; + r->tm_mday = 1; + r->tm_yday = 1; + r->tm_hour = 0; + r->tm_min = 0 ; + r->tm_sec = 0; + outcome = "Rounding up to 1970"; + goto done; + } else if (*timep >= INT32_MAX) { + /* Rounding down to INT32_MAX isn't so great, but keep in mind that we + * only do it if gmtime/localtime tells us NULL. */ + r = resultbuf; + r->tm_year = 137; /* 2037 CE */ + r->tm_mon = 11; + r->tm_mday = 31; + r->tm_yday = 365; + r->tm_hour = 23; + r->tm_min = 59; + r->tm_sec = 59; + outcome = "Rounding down to 2037"; + goto done; + } + } + + /* If we get here, then gmtime/localtime failed without getting an extreme + * value for *timep */ + + tor_fragile_assert(); + r = resultbuf; + memset(resultbuf, 0, sizeof(struct tm)); + outcome="can't recover"; + done: + log_warn(LD_BUG, "%s("I64_FORMAT") failed with error %s: %s", + islocal?"localtime":"gmtime", + timep?I64_PRINTF_ARG(*timep):0, + strerror(errno), + outcome); + return r; +} + +/** @{ */ +/** As localtime_r, but defined for platforms that don't have it: + * + * Convert *timep to a struct tm in local time, and store the value in + * *result. Return the result on success, or NULL on failure. + */ +#ifdef HAVE_LOCALTIME_R +struct tm * +tor_localtime_r(const time_t *timep, struct tm *result) +{ + struct tm *r; + r = localtime_r(timep, result); + return correct_tm(1, timep, result, r); +} +#elif defined(TIME_FNS_NEED_LOCKS) struct tm * tor_localtime_r(const time_t *timep, struct tm *result) { @@ -1857,9 +2142,10 @@ tor_assert(result); tor_mutex_acquire(m); r = localtime(timep); - memcpy(result, r, sizeof(struct tm)); + if (r) + memcpy(result, r, sizeof(struct tm)); tor_mutex_release(m); - return result; + return correct_tm(1, timep, result, r); } #else struct tm * @@ -1868,14 +2154,28 @@ struct tm *r; tor_assert(result); r = localtime(timep); - memcpy(result, r, sizeof(struct tm)); - return result; + if (r) + memcpy(result, r, sizeof(struct tm)); + return correct_tm(1, timep, result, r); } #endif -#endif +/** @} */ -#ifndef HAVE_GMTIME_R -#ifdef TIME_FNS_NEED_LOCKS +/** @{ */ +/** As gmtimee_r, but defined for platforms that don't have it: + * + * Convert *timep to a struct tm in UTC, and store the value in + * *result. Return the result on success, or NULL on failure. + */ +#ifdef HAVE_GMTIME_R +struct tm * +tor_gmtime_r(const time_t *timep, struct tm *result) +{ + struct tm *r; + r = gmtime_r(timep, result); + return correct_tm(0, timep, result, r); +} +#elif defined(TIME_FNS_NEED_LOCKS) struct tm * tor_gmtime_r(const time_t *timep, struct tm *result) { @@ -1885,9 +2185,10 @@ tor_assert(result); tor_mutex_acquire(m); r = gmtime(timep); - memcpy(result, r, sizeof(struct tm)); + if (r) + memcpy(result, r, sizeof(struct tm)); tor_mutex_release(m); - return result; + return correct_tm(0, timep, result, r); } #else struct tm * @@ -1896,11 +2197,11 @@ struct tm *r; tor_assert(result); r = gmtime(timep); - memcpy(result, r, sizeof(struct tm)); - return result; + if (r) + memcpy(result, r, sizeof(struct tm)); + return correct_tm(0, timep, result, r); } #endif -#endif #if defined(USE_WIN32_THREADS) void @@ -2014,6 +2315,8 @@ void tor_mutex_free(tor_mutex_t *m) { + if (!m) + return; tor_mutex_uninit(m); tor_free(m); } @@ -2041,7 +2344,8 @@ void tor_cond_free(tor_cond_t *cond) { - tor_assert(cond); + if (!cond) + return; if (pthread_cond_destroy(&cond->cond)) { log_warn(LD_GENERAL,"Error freeing condition: %s", strerror(errno)); return; @@ -2098,7 +2402,8 @@ void tor_cond_free(tor_cond_t *cond) { - tor_assert(cond); + if (!cond) + return; DeleteCriticalSection(&cond->mutex); /* XXXX notify? */ smartlist_free(cond->events); @@ -2174,6 +2479,89 @@ } #endif +#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL && defined(RLIMIT_MEMLOCK) +/** Attempt to raise the current and max rlimit to infinity for our process. + * This only needs to be done once and can probably only be done when we have + * not already dropped privileges. + */ +static int +tor_set_max_memlock(void) +{ + /* Future consideration for Windows is probably SetProcessWorkingSetSize + * This is similar to setting the memory rlimit of RLIMIT_MEMLOCK + * http://msdn.microsoft.com/en-us/library/ms686234(VS.85).aspx + */ + + struct rlimit limit; + + /* RLIM_INFINITY is -1 on some platforms. */ + limit.rlim_cur = RLIM_INFINITY; + limit.rlim_max = RLIM_INFINITY; + + if (setrlimit(RLIMIT_MEMLOCK, &limit) == -1) { + if (errno == EPERM) { + log_warn(LD_GENERAL, "You appear to lack permissions to change memory " + "limits. Are you root?"); + } + log_warn(LD_GENERAL, "Unable to raise RLIMIT_MEMLOCK: %s", + strerror(errno)); + return -1; + } + + return 0; +} +#endif + +/** Attempt to lock all current and all future memory pages. + * This should only be called once and while we're privileged. + * Like mlockall() we return 0 when we're successful and -1 when we're not. + * Unlike mlockall() we return 1 if we've already attempted to lock memory. + */ +int +tor_mlockall(void) +{ + static int memory_lock_attempted = 0; + + if (memory_lock_attempted) { + return 1; + } + + memory_lock_attempted = 1; + + /* + * Future consideration for Windows may be VirtualLock + * VirtualLock appears to implement mlock() but not mlockall() + * + * http://msdn.microsoft.com/en-us/library/aa366895(VS.85).aspx + */ + +#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL && defined(RLIMIT_MEMLOCK) + if (tor_set_max_memlock() == 0) { + log_debug(LD_GENERAL, "RLIMIT_MEMLOCK is now set to RLIM_INFINITY."); + } + + if (mlockall(MCL_CURRENT|MCL_FUTURE) == 0) { + log_info(LD_GENERAL, "Insecure OS paging is effectively disabled."); + return 0; + } else { + if (errno == ENOSYS) { + /* Apple - it's 2009! I'm looking at you. Grrr. */ + log_notice(LD_GENERAL, "It appears that mlockall() is not available on " + "your platform."); + } else if (errno == EPERM) { + log_notice(LD_GENERAL, "It appears that you lack the permissions to " + "lock memory. Are you root?"); + } + log_notice(LD_GENERAL, "Unable to lock all current and future memory " + "pages: %s", strerror(errno)); + return -1; + } +#else + log_warn(LD_GENERAL, "Unable to lock memory pages. mlockall() unsupported?"); + return -1; +#endif +} + /** Identity of the "main" thread */ static unsigned long main_thread_id = -1; @@ -2204,11 +2592,11 @@ */ #if defined(MS_WINDOWS) int -tor_socket_errno(int sock) +tor_socket_errno(tor_socket_t sock) { int optval, optvallen=sizeof(optval); int err = WSAGetLastError(); - if (err == WSAEWOULDBLOCK && sock >= 0) { + if (err == WSAEWOULDBLOCK && SOCKET_OK(sock)) { if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (void*)&optval, &optvallen)) return err; if (optval) @@ -2325,20 +2713,26 @@ char * format_win32_error(DWORD err) { - LPVOID str = NULL; + TCHAR *str = NULL; char *result; /* Somebody once decided that this interface was better than strerror(). */ - FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &str, + (LPVOID)&str, 0, NULL); if (str) { - result = tor_strdup((char*)str); +#ifdef UNICODE + char abuf[1024] = {0}; + wcstombs(abuf,str,1024); + result = tor_strdup(abuf); +#else + result = tor_strdup(str); +#endif LocalFree(str); /* LocalFree != free() */ } else { result = tor_strdup(""); diff -Nru tor-0.2.1.30/src/common/compat.h tor-0.2.2.35/src/common/compat.h --- tor-0.2.1.30/src/common/compat.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/compat.h 2011-12-15 16:28:37.000000000 +0000 @@ -51,6 +51,22 @@ #include #endif +#if defined (WINCE) +#include +#include +#include +#include +#define snprintf _snprintf +/* this is not exported as W .... */ +#define SHGetPathFromIDListW SHGetPathFromIDList +/* wcecompat has vasprintf */ +#define HAVE_VASPRINTF +/* no service here */ +#ifdef NT_SERVICE +#undef NT_SERVICE +#endif +#endif // WINCE + #ifndef NULL_REP_IS_ZERO_BYTES #error "It seems your platform does not represent NULL as zero. We can't cope." #endif @@ -161,6 +177,10 @@ /** Expands to a syntactically valid empty statement. */ #define STMT_NIL (void)0 +/** Expands to a syntactically valid empty statement, explicitly (void)ing its + * argument. */ +#define STMT_VOID(a) while (0) { (void)(a); } + #ifdef __GNUC__ /** STMT_BEGIN and STMT_END are used to wrap blocks inside macros so that * the macro can be used as if it were a single C statement. */ @@ -177,8 +197,8 @@ /* ===== String compatibility */ #ifdef MS_WINDOWS /* Windows names string functions differently from most other platforms. */ -#define strncasecmp strnicmp -#define strcasecmp stricmp +#define strncasecmp _strnicmp +#define strcasecmp _stricmp #endif #ifndef HAVE_STRLCAT size_t strlcat(char *dst, const char *src, size_t siz) ATTR_NONNULL((1,2)); @@ -196,18 +216,26 @@ #define U64_SCANF_ARG(a) (a) /** Expands to a literal uint64_t-typed constant for the value n. */ #define U64_LITERAL(n) (n ## ui64) +#define I64_PRINTF_ARG(a) (a) +#define I64_SCANF_ARG(a) (a) +#define I64_LITERAL(n) (n ## i64) #else #define U64_PRINTF_ARG(a) ((long long unsigned int)(a)) #define U64_SCANF_ARG(a) ((long long unsigned int*)(a)) #define U64_LITERAL(n) (n ## llu) +#define I64_PRINTF_ARG(a) ((long long signed int)(a)) +#define I64_SCANF_ARG(a) ((long long signed int*)(a)) +#define I64_LITERAL(n) (n ## ll) #endif #if defined(_MSC_VER) || defined(__MINGW32__) || defined(__MINGW64__) /** The formatting string used to put a uint64_t value in a printf() or * scanf() function. See also U64_PRINTF_ARG and U64_SCANF_ARG. */ #define U64_FORMAT "%I64u" +#define I64_FORMAT "%I64d" #else #define U64_FORMAT "%llu" +#define I64_FORMAT "%lld" #endif /** Represents an mmaped file. Allocated via tor_mmap_file; freed with @@ -235,6 +263,10 @@ int tor_vsnprintf(char *str, size_t size, const char *format, va_list args) ATTR_NONNULL((1,3)); +int tor_asprintf(char **strp, const char *fmt, ...) + CHECK_PRINTF(2,3); +int tor_vasprintf(char **strp, const char *fmt, va_list args); + const void *tor_memmem(const void *haystack, size_t hlen, const void *needle, size_t nlen) ATTR_PURE ATTR_NONNULL((1,3)); static const void *tor_memstr(const void *haystack, size_t hlen, @@ -267,6 +299,13 @@ #define TOR_TOLOWER(c) (TOR_TOLOWER_TABLE[(uint8_t)c]) #define TOR_TOUPPER(c) (TOR_TOUPPER_TABLE[(uint8_t)c]) +char *tor_strtok_r_impl(char *str, const char *sep, char **lasts); +#ifdef HAVE_STRTOK_R +#define tor_strtok_r(str, sep, lasts) strtok_r(str, sep, lasts) +#else +#define tor_strtok_r(str, sep, lasts) tor_strtok_r_impl(str, sep, lasts) +#endif + #ifdef MS_WINDOWS #define _SHORT_FILE_ (tor_fix_source_file(__FILE__)) const char *tor_fix_source_file(const char *fname); @@ -277,6 +316,7 @@ /* ===== Time compatibility */ #if !defined(HAVE_GETTIMEOFDAY) && !defined(HAVE_STRUCT_TIMEVAL_TV_SEC) +/** Implementation of timeval for platforms that don't have it. */ struct timeval { time_t tv_sec; unsigned int tv_usec; @@ -285,16 +325,49 @@ void tor_gettimeofday(struct timeval *timeval); -#ifdef HAVE_LOCALTIME_R -#define tor_localtime_r localtime_r -#else struct tm *tor_localtime_r(const time_t *timep, struct tm *result); -#endif - -#ifdef HAVE_GMTIME_R -#define tor_gmtime_r gmtime_r -#else struct tm *tor_gmtime_r(const time_t *timep, struct tm *result); + +#ifndef timeradd +/** Replacement for timeradd on platforms that do not have it: sets tvout to + * the sum of tv1 and tv2. */ +#define timeradd(tv1,tv2,tvout) \ + do { \ + (tvout)->tv_sec = (tv1)->tv_sec + (tv2)->tv_sec; \ + (tvout)->tv_usec = (tv2)->tv_usec + (tv2)->tv_usec; \ + if ((tvout)->tv_usec >= 1000000) { \ + (tvout)->tv_usec -= 1000000; \ + (tvout)->tv_sec++; \ + } \ + } while (0) +#endif + +#ifndef timersub +/** Replacement for timersub on platforms that do not have it: sets tvout to + * tv1 minus tv2. */ +#define timersub(tv1,tv2,tvout) \ + do { \ + (tvout)->tv_sec = (tv1)->tv_sec - (tv2)->tv_sec; \ + (tvout)->tv_usec = (tv2)->tv_usec - (tv2)->tv_usec; \ + if ((tvout)->tv_usec < 0) { \ + (tvout)->tv_usec += 1000000; \ + (tvout)->tv_sec--; \ + } \ + } while (0) +#endif + +#ifndef timercmp +/** Replacement for timersub on platforms that do not have it: returns true + * iff the relational operator "op" makes the expression tv1 op tv2 true. + * + * Note that while this definition should work for all boolean opeators, some + * platforms' native timercmp definitions do not support >=, <=, or ==. So + * don't use those. + */ +#define timercmp(tv1,tv2,op) \ + (((tv1)->tv_sec == (tv2)->tv_sec) ? \ + ((tv1)->tv_usec op (tv2)->tv_usec) : \ + ((tv1)->tv_sec op (tv2)->tv_sec)) #endif /* ===== File compatibility */ @@ -321,17 +394,26 @@ typedef int socklen_t; #endif -int tor_close_socket(int s); -int tor_open_socket(int domain, int type, int protocol); -int tor_accept_socket(int sockfd, struct sockaddr *addr, socklen_t *len); +#ifdef MS_WINDOWS +#define tor_socket_t intptr_t +#define SOCKET_OK(s) ((unsigned)(s) != INVALID_SOCKET) +#else +#define tor_socket_t int +#define SOCKET_OK(s) ((s) >= 0) +#endif + +int tor_close_socket(tor_socket_t s); +tor_socket_t tor_open_socket(int domain, int type, int protocol); +tor_socket_t tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr, + socklen_t *len); int get_n_open_sockets(void); #define tor_socket_send(s, buf, len, flags) send(s, buf, len, flags) #define tor_socket_recv(s, buf, len, flags) recv(s, buf, len, flags) -/* Define struct in6_addr on platforms that do not have it. Generally, - * these platforms are ones without IPv6 support, but we want to have - * a working in6_addr there anyway, so we can use it to parse IPv6 +/** Implementation of struct in6_addr for platforms that do not have it. + * Generally, these platforms are ones without IPv6 support, but we want to + * have a working in6_addr there anyway, so we can use it to parse IPv6 * addresses. */ #if !defined(HAVE_STRUCT_IN6_ADDR) struct in6_addr @@ -347,9 +429,10 @@ }; #endif +/** @{ */ +/** Many BSD variants seem not to define these. */ #if defined(__APPLE__) || defined(__darwin__) || defined(__FreeBSD__) \ || defined(__NetBSD__) || defined(__OpenBSD__) -/* Many BSD variants seem not to define these. */ #ifndef s6_addr16 #define s6_addr16 __u6_addr.__u6_addr16 #endif @@ -357,12 +440,15 @@ #define s6_addr32 __u6_addr.__u6_addr32 #endif #endif +/** @} */ #ifndef HAVE_SA_FAMILY_T typedef uint16_t sa_family_t; #endif -/* Apparently, MS and Solaris don't define s6_addr16 or s6_addr32. */ +/** @{ */ +/** Apparently, MS and Solaris don't define s6_addr16 or s6_addr32; these + * macros get you a pointer to s6_addr32 or local equivalent. */ #ifdef HAVE_STRUCT_IN6_ADDR_S6_ADDR32 #define S6_ADDR32(x) ((uint32_t*)(x).s6_addr32) #else @@ -373,9 +459,10 @@ #else #define S6_ADDR16(x) ((uint16_t*)((char*)&(x).s6_addr)) #endif +/** @} */ -/* Define struct sockaddr_in6 on platforms that do not have it. See notes - * on struct in6_addr. */ +/** Implementation of struct sockaddr_in6 on platforms that do not have + * it. See notes on struct in6_addr. */ #if !defined(HAVE_STRUCT_SOCKADDR_IN6) struct sockaddr_in6 { sa_family_t sin6_family; @@ -390,8 +477,8 @@ const char *tor_inet_ntop(int af, const void *src, char *dst, size_t len); int tor_inet_pton(int af, const char *src, void *dst); int tor_lookup_hostname(const char *name, uint32_t *addr) ATTR_NONNULL((1,2)); -void set_socket_nonblocking(int socket); -int tor_socketpair(int family, int type, int protocol, int fd[2]); +void set_socket_nonblocking(tor_socket_t socket); +int tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2]); int network_init(void); /* For stupid historical reasons, windows sockets have an independent @@ -418,7 +505,7 @@ ((e) == WSAEMFILE || (e) == WSAENOBUFS) /** Return true if e is EADDRINUSE or the local equivalent. */ #define ERRNO_IS_EADDRINUSE(e) ((e) == WSAEADDRINUSE) -int tor_socket_errno(int sock); +int tor_socket_errno(tor_socket_t sock); const char *tor_socket_strerror(int e); #else #define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN) @@ -445,6 +532,11 @@ SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED = 0x08, } socks5_reply_status_t; +/* ===== Insecure rng */ +void tor_init_weak_random(unsigned seed); +long tor_weak_random(void); +#define TOR_RAND_MAX (RAND_MAX) + /* ===== OS compatibility */ const char *get_uname(void); @@ -473,6 +565,8 @@ char *get_user_homedir(const char *username); #endif +int get_parent_directory(char *fname); + int spawn_func(void (*func)(void *), void *data); void spawn_exit(void) ATTR_NORETURN; @@ -494,14 +588,20 @@ /** A generic lock structure for multithreaded builds. */ typedef struct tor_mutex_t { #if defined(USE_WIN32_THREADS) + /** Windows-only: on windows, we implement locks with CRITICAL_SECTIONS. */ CRITICAL_SECTION mutex; #elif defined(USE_PTHREADS) + /** Pthreads-only: with pthreads, we implement locks with + * pthread_mutex_t. */ pthread_mutex_t mutex; #else + /** No-threads only: Dummy variable so that tor_mutex_t takes up space. */ int _unused; #endif } tor_mutex_t; +int tor_mlockall(void); + #ifdef TOR_IS_MULTITHREADED tor_mutex_t *tor_mutex_new(void); void tor_mutex_init(tor_mutex_t *m); @@ -514,7 +614,7 @@ #else #define tor_mutex_new() ((tor_mutex_t*)tor_malloc(sizeof(int))) #define tor_mutex_init(m) STMT_NIL -#define tor_mutex_acquire(m) STMT_NIL +#define tor_mutex_acquire(m) STMT_VOID(m) #define tor_mutex_release(m) STMT_NIL #define tor_mutex_free(m) STMT_BEGIN tor_free(m); STMT_END #define tor_mutex_uninit(m) STMT_NIL @@ -536,6 +636,19 @@ #endif #endif +/** Macros for MIN/MAX. Never use these when the arguments could have + * side-effects. + * {With GCC extensions we could probably define a safer MIN/MAX. But + * depending on that safety would be dangerous, since not every platform + * has it.} + **/ +#ifndef MAX +#define MAX(a,b) ( ((a)<(b)) ? (b) : (a) ) +#endif +#ifndef MIN +#define MIN(a,b) ( ((a)>(b)) ? (b) : (a) ) +#endif + /* Platform-specific helpers. */ #ifdef MS_WINDOWS char *format_win32_error(DWORD err); diff -Nru tor-0.2.1.30/src/common/compat_libevent.c tor-0.2.2.35/src/common/compat_libevent.c --- tor-0.2.1.30/src/common/compat_libevent.c 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/compat_libevent.c 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,571 @@ +/* Copyright (c) 2009-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file compat_libevent.c + * \brief Wrappers to handle porting between different versions of libevent. + * + * In an ideal world, we'd just use Libevent 2.0 from now on. But as of June + * 2009, Libevent 2.0 is still in alpha, and we will have old versions of + * Libevent for the forseeable future. + **/ + +#include "orconfig.h" +#include "compat.h" +#include "compat_libevent.h" + +#include "util.h" +#include "torlog.h" + +#ifdef HAVE_EVENT2_EVENT_H +#include +#else +#include +#endif + +/** A number representing a version of Libevent. + + This is a 4-byte number, with the first three bytes representing the + major, minor, and patchlevel respectively of the library. The fourth + byte is unused. + + This is equivalent to the format of LIBEVENT_VERSION_NUMBER on Libevent + 2.0.1 or later. For versions of Libevent before 1.4.0, which followed the + format of "1.0, 1.0a, 1.0b", we define 1.0 to be equivalent to 1.0.0, 1.0a + to be equivalent to 1.0.1, and so on. +*/ +typedef uint32_t le_version_t; + +/** @{ */ +/** Macros: returns the number of a libevent version as a le_version_t */ +#define V(major, minor, patch) \ + (((major) << 24) | ((minor) << 16) | ((patch) << 8)) +#define V_OLD(major, minor, patch) \ + V((major), (minor), (patch)-'a'+1) +/** @} */ + +/** Represetns a version of libevent so old we can't figure out what version + * it is. */ +#define LE_OLD V(0,0,0) +/** Represents a version of libevent so weird we can't figure out what version + * it is. */ +#define LE_OTHER V(0,0,99) + +static le_version_t tor_get_libevent_version(const char **v_out); + +#ifdef HAVE_EVENT_SET_LOG_CALLBACK +/** A string which, if it appears in a libevent log, should be ignored. */ +static const char *suppress_msg = NULL; +/** Callback function passed to event_set_log() so we can intercept + * log messages from libevent. */ +static void +libevent_logging_callback(int severity, const char *msg) +{ + char buf[1024]; + size_t n; + if (suppress_msg && strstr(msg, suppress_msg)) + return; + n = strlcpy(buf, msg, sizeof(buf)); + if (n && n < sizeof(buf) && buf[n-1] == '\n') { + buf[n-1] = '\0'; + } + switch (severity) { + case _EVENT_LOG_DEBUG: + log(LOG_DEBUG, LD_NOCB|LD_NET, "Message from libevent: %s", buf); + break; + case _EVENT_LOG_MSG: + log(LOG_INFO, LD_NOCB|LD_NET, "Message from libevent: %s", buf); + break; + case _EVENT_LOG_WARN: + log(LOG_WARN, LD_NOCB|LD_GENERAL, "Warning from libevent: %s", buf); + break; + case _EVENT_LOG_ERR: + log(LOG_ERR, LD_NOCB|LD_GENERAL, "Error from libevent: %s", buf); + break; + default: + log(LOG_WARN, LD_NOCB|LD_GENERAL, "Message [%d] from libevent: %s", + severity, buf); + break; + } +} +/** Set hook to intercept log messages from libevent. */ +void +configure_libevent_logging(void) +{ + event_set_log_callback(libevent_logging_callback); +} +/** Ignore any libevent log message that contains msg. */ +void +suppress_libevent_log_msg(const char *msg) +{ + suppress_msg = msg; +} +#else +void +configure_libevent_logging(void) +{ +} +void +suppress_libevent_log_msg(const char *msg) +{ + (void)msg; +} +#endif + +#ifndef HAVE_EVENT2_EVENT_H +/** Work-alike replacement for event_new() on pre-Libevent-2.0 systems. */ +struct event * +tor_event_new(struct event_base *base, int sock, short what, + void (*cb)(int, short, void *), void *arg) +{ + struct event *e = tor_malloc_zero(sizeof(struct event)); + event_set(e, sock, what, cb, arg); + if (! base) + base = tor_libevent_get_base(); + event_base_set(base, e); + return e; +} +/** Work-alike replacement for evtimer_new() on pre-Libevent-2.0 systems. */ +struct event * +tor_evtimer_new(struct event_base *base, + void (*cb)(int, short, void *), void *arg) +{ + return tor_event_new(base, -1, 0, cb, arg); +} +/** Work-alike replacement for evsignal_new() on pre-Libevent-2.0 systems. */ +struct event * +tor_evsignal_new(struct event_base * base, int sig, + void (*cb)(int, short, void *), void *arg) +{ + return tor_event_new(base, sig, EV_SIGNAL|EV_PERSIST, cb, arg); +} +/** Work-alike replacement for event_free() on pre-Libevent-2.0 systems. */ +void +tor_event_free(struct event *ev) +{ + event_del(ev); + tor_free(ev); +} +#endif + +/** Global event base for use by the main thread. */ +struct event_base *the_event_base = NULL; + +/* This is what passes for version detection on OSX. We set + * MACOSX_KQUEUE_IS_BROKEN to true iff we're on a version of OSX before + * 10.4.0 (aka 1040). */ +#ifdef __APPLE__ +#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +#define MACOSX_KQUEUE_IS_BROKEN \ + (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1040) +#else +#define MACOSX_KQUEUE_IS_BROKEN 0 +#endif +#endif + +/** Initialize the Libevent library and set up the event base. */ +void +tor_libevent_initialize(void) +{ + tor_assert(the_event_base == NULL); + +#ifdef __APPLE__ + if (MACOSX_KQUEUE_IS_BROKEN || + tor_get_libevent_version(NULL) < V_OLD(1,1,'b')) { + setenv("EVENT_NOKQUEUE","1",1); + } +#endif + +#ifdef HAVE_EVENT2_EVENT_H + { + struct event_config *cfg = event_config_new(); + tor_assert(cfg); + + /* In 0.2.2, we don't use locking at all. Telling Libevent not to try to + * turn it on can avoid a needless socketpair() attempt. + */ + event_config_set_flag(cfg, EVENT_BASE_FLAG_NOLOCK); + + the_event_base = event_base_new_with_config(cfg); + + event_config_free(cfg); + } +#else + the_event_base = event_init(); +#endif + + if (!the_event_base) { + log_err(LD_GENERAL, "Unable to initialize Libevent: cannot continue."); + exit(1); + } + +#if defined(HAVE_EVENT_GET_VERSION) && defined(HAVE_EVENT_GET_METHOD) + /* Making this a NOTICE for now so we can link bugs to a libevent versions + * or methods better. */ + log(LOG_NOTICE, LD_GENERAL, + "Initialized libevent version %s using method %s. Good.", + event_get_version(), tor_libevent_get_method()); +#else + log(LOG_NOTICE, LD_GENERAL, + "Initialized old libevent (version 1.0b or earlier)."); + log(LOG_WARN, LD_GENERAL, + "You have a *VERY* old version of libevent. It is likely to be buggy; " + "please build Tor with a more recent version."); +#endif +} + +/** Return the current Libevent event base that we're set up to use. */ +struct event_base * +tor_libevent_get_base(void) +{ + return the_event_base; +} + +#ifndef HAVE_EVENT_BASE_LOOPEXIT +/** Replacement for event_base_loopexit on some very old versions of Libevent + * that we are not yet brave enough to deprecate. */ +int +tor_event_base_loopexit(struct event_base *base, struct timeval *tv) +{ + tor_assert(base == the_event_base); + return event_loopexit(tv); +} +#endif + +/** Return the name of the Libevent backend we're using. */ +const char * +tor_libevent_get_method(void) +{ +#ifdef HAVE_EVENT2_EVENT_H + return event_base_get_method(the_event_base); +#elif defined(HAVE_EVENT_GET_METHOD) + return event_get_method(); +#else + return ""; +#endif +} + +/** Return the le_version_t for the version of libevent specified in the + * string v. If the version is very new or uses an unrecognized + * version, format, return LE_OTHER. */ +static le_version_t +tor_decode_libevent_version(const char *v) +{ + unsigned major, minor, patchlevel; + char c, e, extra; + int fields; + + /* Try the new preferred "1.4.11-stable" format. + * Also accept "1.4.14b-stable". */ + fields = sscanf(v, "%u.%u.%u%c%c", &major, &minor, &patchlevel, &c, &e); + if (fields == 3 || + ((fields == 4 || fields == 5 ) && (c == '-' || c == '_')) || + (fields == 5 && TOR_ISALPHA(c) && (e == '-' || e == '_'))) { + return V(major,minor,patchlevel); + } + + /* Try the old "1.3e" format. */ + fields = sscanf(v, "%u.%u%c%c", &major, &minor, &c, &extra); + if (fields == 3 && TOR_ISALPHA(c)) { + return V_OLD(major, minor, c); + } else if (fields == 2) { + return V(major, minor, 0); + } + + return LE_OTHER; +} + +/** Return an integer representing the binary interface of a Libevent library. + * Two different versions with different numbers are sure not to be binary + * compatible. Two different versions with the same numbers have a decent + * chance of binary compatibility.*/ +static int +le_versions_compatibility(le_version_t v) +{ + if (v == LE_OTHER) + return 0; + if (v < V_OLD(1,0,'c')) + return 1; + else if (v < V(1,4,0)) + return 2; + else if (v < V(1,4,99)) + return 3; + else if (v < V(2,0,1)) + return 4; + else /* Everything 2.0 and later should be compatible. */ + return 5; +} + +/** Return the version number of the currently running version of Libevent. + * See le_version_t for info on the format. + */ +static le_version_t +tor_get_libevent_version(const char **v_out) +{ + const char *v; + le_version_t r; +#if defined(HAVE_EVENT_GET_VERSION_NUMBER) + v = event_get_version(); + r = event_get_version_number(); +#elif defined (HAVE_EVENT_GET_VERSION) + v = event_get_version(); + r = tor_decode_libevent_version(v); +#else + v = "pre-1.0c"; + r = LE_OLD; +#endif + if (v_out) + *v_out = v; + return r; +} + +/** Return a string representation of the version of the currently running + * version of Libevent. */ +const char * +tor_libevent_get_version_str(void) +{ +#ifdef HAVE_EVENT_GET_VERSION + return event_get_version(); +#else + return "pre-1.0c"; +#endif +} + +/** + * Compare the current Libevent method and version to a list of versions + * which are known not to work. Warn the user as appropriate. + */ +void +tor_check_libevent_version(const char *m, int server, + const char **badness_out) +{ + int buggy = 0, iffy = 0, slow = 0, thread_unsafe = 0; + le_version_t version; + const char *v = NULL; + const char *badness = NULL; + const char *sad_os = ""; + + version = tor_get_libevent_version(&v); + + /* It would be better to disable known-buggy methods rather than warning + * about them. But the problem is that with older versions of Libevent, + * it's not trivial to get them to change their methods once they're + * initialized... and with newer versions of Libevent, they aren't actually + * broken. But we should revisit this if we ever find a post-1.4 version + * of Libevent where we need to disable a given method. */ + if (!strcmp(m, "kqueue")) { + if (version < V_OLD(1,1,'b')) + buggy = 1; + } else if (!strcmp(m, "epoll")) { + if (version < V(1,1,0)) + iffy = 1; + } else if (!strcmp(m, "poll")) { + if (version < V_OLD(1,0,'e')) + buggy = 1; + if (version < V(1,1,0)) + slow = 1; + } else if (!strcmp(m, "select")) { + if (version < V(1,1,0)) + slow = 1; + } else if (!strcmp(m, "win32")) { + if (version < V_OLD(1,1,'b')) + buggy = 1; + } + + /* Libevent versions before 1.3b do very badly on operating systems with + * user-space threading implementations. */ +#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) + if (server && version < V_OLD(1,3,'b')) { + thread_unsafe = 1; + sad_os = "BSD variants"; + } +#elif defined(__APPLE__) || defined(__darwin__) + if (server && version < V_OLD(1,3,'b')) { + thread_unsafe = 1; + sad_os = "Mac OS X"; + } +#endif + + if (thread_unsafe) { + log(LOG_WARN, LD_GENERAL, + "Libevent version %s often crashes when running a Tor server with %s. " + "Please use the latest version of libevent (1.3b or later)",v,sad_os); + badness = "BROKEN"; + } else if (buggy) { + log(LOG_WARN, LD_GENERAL, + "There are serious bugs in using %s with libevent %s. " + "Please use the latest version of libevent.", m, v); + badness = "BROKEN"; + } else if (iffy) { + log(LOG_WARN, LD_GENERAL, + "There are minor bugs in using %s with libevent %s. " + "You may want to use the latest version of libevent.", m, v); + badness = "BUGGY"; + } else if (slow && server) { + log(LOG_WARN, LD_GENERAL, + "libevent %s can be very slow with %s. " + "When running a server, please use the latest version of libevent.", + v,m); + badness = "SLOW"; + } + + *badness_out = badness; +} + +#if defined(LIBEVENT_VERSION) +#define HEADER_VERSION LIBEVENT_VERSION +#elif defined(_EVENT_VERSION) +#define HEADER_VERSION _EVENT_VERSION +#endif + +/** See whether the headers we were built against differ from the library we + * linked against so much that we're likely to crash. If so, warn the + * user. */ +void +tor_check_libevent_header_compatibility(void) +{ + (void) le_versions_compatibility; + (void) tor_decode_libevent_version; + + /* In libevent versions before 2.0, it's hard to keep binary compatibility + * between upgrades, and unpleasant to detect when the version we compiled + * against is unlike the version we have linked against. Here's how. */ +#if defined(HEADER_VERSION) && defined(HAVE_EVENT_GET_VERSION) + /* We have a header-file version and a function-call version. Easy. */ + if (strcmp(HEADER_VERSION, event_get_version())) { + le_version_t v1, v2; + int compat1 = -1, compat2 = -1; + int verybad; + v1 = tor_decode_libevent_version(HEADER_VERSION); + v2 = tor_decode_libevent_version(event_get_version()); + compat1 = le_versions_compatibility(v1); + compat2 = le_versions_compatibility(v2); + + verybad = compat1 != compat2; + + log(verybad ? LOG_WARN : LOG_NOTICE, + LD_GENERAL, "We were compiled with headers from version %s " + "of Libevent, but we're using a Libevent library that says it's " + "version %s.", HEADER_VERSION, event_get_version()); + if (verybad) + log_warn(LD_GENERAL, "This will almost certainly make Tor crash."); + else + log_info(LD_GENERAL, "I think these versions are binary-compatible."); + } +#elif defined(HAVE_EVENT_GET_VERSION) + /* event_get_version but no _EVENT_VERSION. We might be in 1.4.0-beta or + earlier, where that's normal. To see whether we were compiled with an + earlier version, let's see whether the struct event defines MIN_HEAP_IDX. + */ +#ifdef HAVE_STRUCT_EVENT_MIN_HEAP_IDX + /* The header files are 1.4.0-beta or later. If the version is not + * 1.4.0-beta, we are incompatible. */ + { + if (strcmp(event_get_version(), "1.4.0-beta")) { + log_warn(LD_GENERAL, "It's a little hard to tell, but you seem to have " + "Libevent 1.4.0-beta header files, whereas you have linked " + "against Libevent %s. This will probably make Tor crash.", + event_get_version()); + } + } +#else + /* Our headers are 1.3e or earlier. If the library version is not 1.4.x or + later, we're probably fine. */ + { + const char *v = event_get_version(); + if ((v[0] == '1' && v[2] == '.' && v[3] > '3') || v[0] > '1') { + log_warn(LD_GENERAL, "It's a little hard to tell, but you seem to have " + "Libevent header file from 1.3e or earlier, whereas you have " + "linked against Libevent %s. This will probably make Tor " + "crash.", event_get_version()); + } + } +#endif + +#elif defined(HEADER_VERSION) +#warn "_EVENT_VERSION is defined but not get_event_version(): Libevent is odd." +#else + /* Your libevent is ancient. */ +#endif +} + +/* + If possible, we're going to try to use Libevent's periodic timer support, + since it does a pretty good job of making sure that periodic events get + called exactly M seconds apart, rather than starting each one exactly M + seconds after the time that the last one was run. + */ +#ifdef HAVE_EVENT2_EVENT_H +#define HAVE_PERIODIC +#define PERIODIC_FLAGS EV_PERSIST +#else +#define PERIODIC_FLAGS 0 +#endif + +/** Represents a timer that's run every N microseconds by Libevent. */ +struct periodic_timer_t { + /** Underlying event used to implement this periodic event. */ + struct event *ev; + /** The callback we'll be invoking whenever the event triggers */ + void (*cb)(struct periodic_timer_t *, void *); + /** User-supplied data for the callback */ + void *data; +#ifndef HAVE_PERIODIC + /** If Libevent doesn't know how to invoke events every N microseconds, + * we'll need to remember the timeout interval here. */ + struct timeval tv; +#endif +}; + +/** Libevent callback to implement a periodic event. */ +static void +periodic_timer_cb(evutil_socket_t fd, short what, void *arg) +{ + periodic_timer_t *timer = arg; + (void) what; + (void) fd; +#ifndef HAVE_PERIODIC + /** reschedule the event as needed. */ + event_add(timer->ev, &timer->tv); +#endif + timer->cb(timer, timer->data); +} + +/** Create and schedule a new timer that will run every tv in + * the event loop of base. When the timer fires, it will + * run the timer in cb with the user-supplied data in data. */ +periodic_timer_t * +periodic_timer_new(struct event_base *base, + const struct timeval *tv, + void (*cb)(periodic_timer_t *timer, void *data), + void *data) +{ + periodic_timer_t *timer; + tor_assert(base); + tor_assert(tv); + tor_assert(cb); + timer = tor_malloc_zero(sizeof(periodic_timer_t)); + if (!(timer->ev = tor_event_new(base, -1, PERIODIC_FLAGS, + periodic_timer_cb, timer))) { + tor_free(timer); + return NULL; + } + timer->cb = cb; + timer->data = data; +#ifndef HAVE_PERIODIC + memcpy(&timer->tv, tv, sizeof(struct timeval)); +#endif + event_add(timer->ev, (struct timeval *)tv); /*drop const for old libevent*/ + return timer; +} + +/** Stop and free a periodic timer */ +void +periodic_timer_free(periodic_timer_t *timer) +{ + if (!timer) + return; + tor_event_free(timer->ev); + tor_free(timer); +} + diff -Nru tor-0.2.1.30/src/common/compat_libevent.h tor-0.2.2.35/src/common/compat_libevent.h --- tor-0.2.1.30/src/common/compat_libevent.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/compat_libevent.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,66 @@ +/* Copyright (c) 2009, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef _TOR_COMPAT_LIBEVENT_H +#define _TOR_COMPAT_LIBEVENT_H + +#include "orconfig.h" + +struct event; +struct event_base; + +#ifdef HAVE_EVENT2_EVENT_H +#include +#elif !defined(EVUTIL_SOCKET_DEFINED) +#define EVUTIL_SOCKET_DEFINED +#define evutil_socket_t int +#endif + +void configure_libevent_logging(void); +void suppress_libevent_log_msg(const char *msg); + +#ifdef HAVE_EVENT2_EVENT_H +#define tor_event_new event_new +#define tor_evtimer_new evtimer_new +#define tor_evsignal_new evsignal_new +#define tor_event_free event_free +#define tor_evdns_add_server_port(sock, tcp, cb, data) \ + evdns_add_server_port_with_base(tor_libevent_get_base(), \ + (sock),(tcp),(cb),(data)); + +#else +struct event *tor_event_new(struct event_base * base, evutil_socket_t sock, + short what, void (*cb)(evutil_socket_t, short, void *), void *arg); +struct event *tor_evtimer_new(struct event_base * base, + void (*cb)(evutil_socket_t, short, void *), void *arg); +struct event *tor_evsignal_new(struct event_base * base, int sig, + void (*cb)(evutil_socket_t, short, void *), void *arg); +void tor_event_free(struct event *ev); +#define tor_evdns_add_server_port evdns_add_server_port +#endif + +typedef struct periodic_timer_t periodic_timer_t; + +periodic_timer_t *periodic_timer_new(struct event_base *base, + const struct timeval *tv, + void (*cb)(periodic_timer_t *timer, void *data), + void *data); +void periodic_timer_free(periodic_timer_t *); + +#ifdef HAVE_EVENT_BASE_LOOPEXIT +#define tor_event_base_loopexit event_base_loopexit +#else +struct timeval; +int tor_event_base_loopexit(struct event_base *base, struct timeval *tv); +#endif + +void tor_libevent_initialize(void); +struct event_base *tor_libevent_get_base(void); +const char *tor_libevent_get_method(void); +void tor_check_libevent_version(const char *m, int server, + const char **badness_out); +void tor_check_libevent_header_compatibility(void); +const char *tor_libevent_get_version_str(void); + +#endif + diff -Nru tor-0.2.1.30/src/common/container.c tor-0.2.2.35/src/common/container.c --- tor-0.2.1.30/src/common/container.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/container.c 2011-12-15 16:28:37.000000000 +0000 @@ -13,7 +13,7 @@ #include "compat.h" #include "util.h" -#include "log.h" +#include "torlog.h" #include "container.h" #include "crypto.h" @@ -44,7 +44,8 @@ void smartlist_free(smartlist_t *sl) { - tor_assert(sl != NULL); + if (!sl) + return; tor_free(sl->list); tor_free(sl); } @@ -61,13 +62,22 @@ static INLINE void smartlist_ensure_capacity(smartlist_t *sl, int size) { +#if SIZEOF_SIZE_T > SIZEOF_INT +#define MAX_CAPACITY (INT_MAX) +#else +#define MAX_CAPACITY (int)((SIZE_MAX / (sizeof(void*)))) +#endif if (size > sl->capacity) { - int higher = sl->capacity * 2; - while (size > higher) - higher *= 2; - tor_assert(higher > 0); /* detect overflow */ + int higher = sl->capacity; + if (PREDICT_UNLIKELY(size > MAX_CAPACITY/2)) { + tor_assert(size <= MAX_CAPACITY); + higher = MAX_CAPACITY; + } else { + while (size > higher) + higher *= 2; + } sl->capacity = higher; - sl->list = tor_realloc(sl->list, sizeof(void*)*sl->capacity); + sl->list = tor_realloc(sl->list, sizeof(void*)*((size_t)sl->capacity)); } } @@ -209,13 +219,32 @@ int smartlist_string_num_isin(const smartlist_t *sl, int num) { - char buf[16]; + char buf[32]; /* long enough for 64-bit int, and then some. */ tor_snprintf(buf,sizeof(buf),"%d", num); return smartlist_string_isin(sl, buf); } +/** Return true iff the two lists contain the same strings in the same + * order, or if they are both NULL. */ +int +smartlist_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2) +{ + if (sl1 == NULL) + return sl2 == NULL; + if (sl2 == NULL) + return 0; + if (smartlist_len(sl1) != smartlist_len(sl2)) + return 0; + SMARTLIST_FOREACH(sl1, const char *, cp1, { + const char *cp2 = smartlist_get(sl2, cp1_sl_idx); + if (strcmp(cp1, cp2)) + return 0; + }); + return 1; +} + /** Return true iff sl has some element E such that - * !memcmp(E,element,DIGEST_LEN) + * tor_memeq(E,element,DIGEST_LEN) */ int smartlist_digest_isin(const smartlist_t *sl, const char *element) @@ -223,7 +252,7 @@ int i; if (!sl) return 0; for (i=0; i < sl->num_used; i++) - if (memcmp((const char*)sl->list[i],element,DIGEST_LEN)==0) + if (tor_memeq((const char*)sl->list[i],element,DIGEST_LEN)) return 1; return 0; } @@ -318,7 +347,8 @@ /** * Split a string str along all occurrences of sep, - * adding the split strings, in order, to sl. + * appending the (newly allocated) split strings, in order, to + * sl. Return the number of strings added to sl. * * If flags&SPLIT_SKIP_SPACE is true, remove initial and * trailing space from each entry. @@ -327,7 +357,7 @@ * If flags&SPLIT_STRIP_SPACE is true, strip spaces from each * split string. * - * If max>0, divide the string into no more than max pieces. If + * If max\>0, divide the string into no more than max pieces. If * sep is NULL, split on any sequence of horizontal space. */ int @@ -459,6 +489,42 @@ (int (*)(const void *,const void*))compare); } +/** Given a smartlist sl sorted with the function compare, + * return the most frequent member in the list. Break ties in favor of + * later elements. If the list is empty, return NULL. + */ +void * +smartlist_get_most_frequent(const smartlist_t *sl, + int (*compare)(const void **a, const void **b)) +{ + const void *most_frequent = NULL; + int most_frequent_count = 0; + + const void *cur = NULL; + int i, count=0; + + if (!sl->num_used) + return NULL; + for (i = 0; i < sl->num_used; ++i) { + const void *item = sl->list[i]; + if (cur && 0 == compare(&cur, &item)) { + ++count; + } else { + if (cur && count >= most_frequent_count) { + most_frequent = cur; + most_frequent_count = count; + } + cur = item; + count = 1; + } + } + if (cur && count >= most_frequent_count) { + most_frequent = cur; + most_frequent_count = count; + } + return (void*)most_frequent; +} + /** Given a sorted smartlist sl and the comparison function used to * sort it, remove all duplicate members. If free_fn is provided, calls * free_fn on each duplicate. Otherwise, just removes them. Preserves order. @@ -550,6 +616,13 @@ smartlist_sort(sl, _compare_string_ptrs); } +/** Return the most frequent string in the sorted list sl */ +char * +smartlist_get_most_frequent_string(smartlist_t *sl) +{ + return smartlist_get_most_frequent(sl, _compare_string_ptrs); +} + /** Remove duplicate strings from a sorted list, and free them with tor_free(). */ void @@ -561,16 +634,70 @@ /* Heap-based priority queue implementation for O(lg N) insert and remove. * Recall that the heap property is that, for every index I, h[I] < * H[LEFT_CHILD[I]] and h[I] < H[RIGHT_CHILD[I]]. + * + * For us to remove items other than the topmost item, each item must store + * its own index within the heap. When calling the pqueue functions, tell + * them about the offset of the field that stores the index within the item. + * + * Example: + * + * typedef struct timer_t { + * struct timeval tv; + * int heap_index; + * } timer_t; + * + * static int compare(const void *p1, const void *p2) { + * const timer_t *t1 = p1, *t2 = p2; + * if (t1->tv.tv_sec < t2->tv.tv_sec) { + * return -1; + * } else if (t1->tv.tv_sec > t2->tv.tv_sec) { + * return 1; + * } else { + * return t1->tv.tv_usec - t2->tv_usec; + * } + * } + * + * void timer_heap_insert(smartlist_t *heap, timer_t *timer) { + * smartlist_pqueue_add(heap, compare, STRUCT_OFFSET(timer_t, heap_index), + * timer); + * } + * + * void timer_heap_pop(smartlist_t *heap) { + * return smartlist_pqueue_pop(heap, compare, + * STRUCT_OFFSET(timer_t, heap_index)); + * } */ -/* For a 1-indexed array, we would use LEFT_CHILD[x] = 2*x and RIGHT_CHILD[x] - * = 2*x + 1. But this is C, so we have to adjust a little. */ +/** @{ */ +/** Functions to manipulate heap indices to find a node's parent and children. + * + * For a 1-indexed array, we would use LEFT_CHILD[x] = 2*x and RIGHT_CHILD[x] + * = 2*x + 1. But this is C, so we have to adjust a little. */ //#define LEFT_CHILD(i) ( ((i)+1)*2 - 1) //#define RIGHT_CHILD(i) ( ((i)+1)*2 ) //#define PARENT(i) ( ((i)+1)/2 - 1) #define LEFT_CHILD(i) ( 2*(i) + 1 ) #define RIGHT_CHILD(i) ( 2*(i) + 2 ) #define PARENT(i) ( ((i)-1) / 2 ) +/** }@ */ + +/** @{ */ +/** Helper macros for heaps: Given a local variable idx_field_offset + * set to the offset of an integer index within the heap element structure, + * IDX_OF_ITEM(p) gives you the index of p, and IDXP(p) gives you a pointer to + * where p's index is stored. Given additionally a local smartlist sl, + * UPDATE_IDX(i) sets the index of the element at i to the correct + * value (that is, to i). + */ +#define IDXP(p) ((int*)STRUCT_VAR_P(p, idx_field_offset)) + +#define UPDATE_IDX(i) do { \ + void *updated = sl->list[i]; \ + *IDXP(updated) = i; \ + } while (0) + +#define IDX_OF_ITEM(p) (*IDXP(p)) +/** @} */ /** Helper. sl may have at most one violation of the heap property: * the item at idx may be greater than one or both of its children. @@ -578,6 +705,7 @@ static INLINE void smartlist_heapify(smartlist_t *sl, int (*compare)(const void *a, const void *b), + int idx_field_offset, int idx) { while (1) { @@ -600,21 +728,28 @@ void *tmp = sl->list[idx]; sl->list[idx] = sl->list[best_idx]; sl->list[best_idx] = tmp; + UPDATE_IDX(idx); + UPDATE_IDX(best_idx); idx = best_idx; } } } -/** Insert item into the heap stored in sl, where order - * is determined by compare. */ +/** Insert item into the heap stored in sl, where order is + * determined by compare and the offset of the item in the heap is + * stored in an int-typed field at position idx_field_offset within + * item. + */ void smartlist_pqueue_add(smartlist_t *sl, int (*compare)(const void *a, const void *b), + int idx_field_offset, void *item) { int idx; smartlist_add(sl,item); + UPDATE_IDX(sl->num_used-1); for (idx = sl->num_used - 1; idx; ) { int parent = PARENT(idx); @@ -622,6 +757,8 @@ void *tmp = sl->list[parent]; sl->list[parent] = sl->list[idx]; sl->list[idx] = tmp; + UPDATE_IDX(parent); + UPDATE_IDX(idx); idx = parent; } else { return; @@ -630,32 +767,63 @@ } /** Remove and return the top-priority item from the heap stored in sl, - * where order is determined by compare. sl must not be - * empty. */ + * where order is determined by compare and the item's position is + * stored at position idx_field_offset within the item. sl must + * not be empty. */ void * smartlist_pqueue_pop(smartlist_t *sl, - int (*compare)(const void *a, const void *b)) + int (*compare)(const void *a, const void *b), + int idx_field_offset) { void *top; tor_assert(sl->num_used); top = sl->list[0]; + *IDXP(top)=-1; if (--sl->num_used) { sl->list[0] = sl->list[sl->num_used]; - smartlist_heapify(sl, compare, 0); + UPDATE_IDX(0); + smartlist_heapify(sl, compare, idx_field_offset, 0); } return top; } +/** Remove the item item from the heap stored in sl, + * where order is determined by compare and the item's position is + * stored at position idx_field_offset within the item. sl must + * not be empty. */ +void +smartlist_pqueue_remove(smartlist_t *sl, + int (*compare)(const void *a, const void *b), + int idx_field_offset, + void *item) +{ + int idx = IDX_OF_ITEM(item); + tor_assert(idx >= 0); + tor_assert(sl->list[idx] == item); + --sl->num_used; + *IDXP(item) = -1; + if (idx == sl->num_used) { + return; + } else { + sl->list[idx] = sl->list[sl->num_used]; + UPDATE_IDX(idx); + smartlist_heapify(sl, compare, idx_field_offset, idx); + } +} + /** Assert that the heap property is correctly maintained by the heap stored * in sl, where order is determined by compare. */ void smartlist_pqueue_assert_ok(smartlist_t *sl, - int (*compare)(const void *a, const void *b)) + int (*compare)(const void *a, const void *b), + int idx_field_offset) { int i; - for (i = sl->num_used - 1; i > 0; --i) { - tor_assert(compare(sl->list[PARENT(i)], sl->list[i]) <= 0); + for (i = sl->num_used - 1; i >= 0; --i) { + if (i>0) + tor_assert(compare(sl->list[PARENT(i)], sl->list[i]) <= 0); + tor_assert(IDX_OF_ITEM(sl->list[i]) == i); } } @@ -663,7 +831,7 @@ static int _compare_digests(const void **_a, const void **_b) { - return memcmp((const char*)*_a, (const char*)*_b, DIGEST_LEN); + return tor_memcmp((const char*)*_a, (const char*)*_b, DIGEST_LEN); } /** Sort the list of DIGEST_LEN-byte digests into ascending order. */ @@ -681,6 +849,37 @@ smartlist_uniq(sl, _compare_digests, _tor_free); } +/** Helper: compare two DIGEST256_LEN digests. */ +static int +_compare_digests256(const void **_a, const void **_b) +{ + return tor_memcmp((const char*)*_a, (const char*)*_b, DIGEST256_LEN); +} + +/** Sort the list of DIGEST256_LEN-byte digests into ascending order. */ +void +smartlist_sort_digests256(smartlist_t *sl) +{ + smartlist_sort(sl, _compare_digests256); +} + +/** Return the most frequent member of the sorted list of DIGEST256_LEN + * digests in sl */ +char * +smartlist_get_most_frequent_digest256(smartlist_t *sl) +{ + return smartlist_get_most_frequent(sl, _compare_digests256); +} + +/** Remove duplicate 256-bit digests from a sorted list, and free them with + * tor_free(). + */ +void +smartlist_uniq_digests256(smartlist_t *sl) +{ + smartlist_uniq(sl, _compare_digests256, _tor_free); +} + /** Helper: Declare an entry type and a map type to implement a mapping using * ht.h. The map type will be called maptype. The key part of each * entry is declared using the C declaration keydecl. All functions @@ -716,7 +915,7 @@ static INLINE int digestmap_entries_eq(const digestmap_entry_t *a, const digestmap_entry_t *b) { - return !memcmp(a->key, b->key, DIGEST_LEN); + return tor_memeq(a->key, b->key, DIGEST_LEN); } /** Helper: return a hash value for a digest_map_t. */ @@ -1113,6 +1312,9 @@ strmap_free(strmap_t *map, void (*free_val)(void*)) { strmap_entry_t **ent, **next, *this; + if (!map) + return; + for (ent = HT_START(strmap_impl, &map->head); ent != NULL; ent = next) { this = *ent; next = HT_NEXT_RMV(strmap_impl, &map->head, ent); @@ -1134,6 +1336,8 @@ digestmap_free(digestmap_t *map, void (*free_val)(void*)) { digestmap_entry_t **ent, **next, *this; + if (!map) + return; for (ent = HT_START(digestmap_impl, &map->head); ent != NULL; ent = next) { this = *ent; next = HT_NEXT_RMV(digestmap_impl, &map->head, ent); @@ -1220,6 +1424,7 @@ IMPLEMENT_ORDER_FUNC(find_nth_time, time_t) IMPLEMENT_ORDER_FUNC(find_nth_double, double) IMPLEMENT_ORDER_FUNC(find_nth_uint32, uint32_t) +IMPLEMENT_ORDER_FUNC(find_nth_int32, int32_t) IMPLEMENT_ORDER_FUNC(find_nth_long, long) /** Return a newly allocated digestset_t, optimized to hold a total of @@ -1248,6 +1453,8 @@ void digestset_free(digestset_t *set) { + if (!set) + return; bitarray_free(set->ba); tor_free(set); } diff -Nru tor-0.2.1.30/src/common/container.h tor-0.2.2.35/src/common/container.h --- tor-0.2.1.30/src/common/container.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/container.h 2011-12-15 16:28:37.000000000 +0000 @@ -15,6 +15,7 @@ * and macros defined here. **/ typedef struct smartlist_t { + /** @{ */ /** list has enough capacity to store exactly capacity elements * before it needs to be resized. Only the first num_used (\<= * capacity) elements point to valid data. @@ -22,6 +23,7 @@ void **list; int num_used; int capacity; + /** @} */ } smartlist_t; smartlist_t *smartlist_create(void); @@ -40,6 +42,8 @@ int smartlist_string_isin_case(const smartlist_t *sl, const char *element) ATTR_PURE; int smartlist_string_num_isin(const smartlist_t *sl, int num) ATTR_PURE; +int smartlist_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2) + ATTR_PURE; int smartlist_digest_isin(const smartlist_t *sl, const char *element) ATTR_PURE; int smartlist_overlap(const smartlist_t *sl1, const smartlist_t *sl2) @@ -93,13 +97,22 @@ void smartlist_insert(smartlist_t *sl, int idx, void *val); void smartlist_sort(smartlist_t *sl, int (*compare)(const void **a, const void **b)); +void *smartlist_get_most_frequent(const smartlist_t *sl, + int (*compare)(const void **a, const void **b)); void smartlist_uniq(smartlist_t *sl, int (*compare)(const void **a, const void **b), void (*free_fn)(void *elt)); + void smartlist_sort_strings(smartlist_t *sl); void smartlist_sort_digests(smartlist_t *sl); +void smartlist_sort_digests256(smartlist_t *sl); + +char *smartlist_get_most_frequent_string(smartlist_t *sl); +char *smartlist_get_most_frequent_digest256(smartlist_t *sl); + void smartlist_uniq_strings(smartlist_t *sl); void smartlist_uniq_digests(smartlist_t *sl); +void smartlist_uniq_digests256(smartlist_t *sl); void *smartlist_bsearch(smartlist_t *sl, const void *key, int (*compare)(const void *key, const void **member)) ATTR_PURE; @@ -109,11 +122,18 @@ void smartlist_pqueue_add(smartlist_t *sl, int (*compare)(const void *a, const void *b), + int idx_field_offset, void *item); void *smartlist_pqueue_pop(smartlist_t *sl, - int (*compare)(const void *a, const void *b)); + int (*compare)(const void *a, const void *b), + int idx_field_offset); +void smartlist_pqueue_remove(smartlist_t *sl, + int (*compare)(const void *a, const void *b), + int idx_field_offset, + void *item); void smartlist_pqueue_assert_ok(smartlist_t *sl, - int (*compare)(const void *a, const void *b)); + int (*compare)(const void *a, const void *b), + int idx_field_offset); #define SPLIT_SKIP_SPACE 0x01 #define SPLIT_IGNORE_BLANK 0x02 @@ -241,7 +261,7 @@ * Example use: * SMARTLIST_FOREACH_JOIN(routerstatus_list, routerstatus_t *, rs, * routerinfo_list, routerinfo_t *, ri, - * memcmp(rs->identity_digest, ri->identity_digest, 20), + * tor_memcmp(rs->identity_digest, ri->identity_digest, 20), * log_info(LD_GENERAL,"No match for %s", ri->nickname)) { * log_info(LD_GENERAL, "%s matches routerstatus %p", ri->nickname, rs); * } SMARTLIST_FOREACH_JOIN_END(rs, ri); @@ -256,7 +276,7 @@ * ri = smartlist_get(routerinfo_list, ri_sl_idx); * while (rs_sl_idx < rs_sl_len) { * rs = smartlist_get(routerstatus_list, rs_sl_idx); - * rs_ri_cmp = memcmp(rs->identity_digest, ri->identity_digest, 20); + * rs_ri_cmp = tor_memcmp(rs->identity_digest, ri->identity_digest, 20); * if (rs_ri_cmp > 0) { * break; * } else if (rs_ri_cmp == 0) { @@ -579,9 +599,9 @@ /** A set of digests, implemented as a Bloom filter. */ typedef struct { - int mask; /* One less than the number of bits in ba; always one less + int mask; /**< One less than the number of bits in ba; always one less * than a power of two. */ - bitarray_t *ba; /* A bit array to implement the Bloom filter. */ + bitarray_t *ba; /**< A bit array to implement the Bloom filter. */ } digestset_t; #define BIT(n) ((n) & set->mask) @@ -627,6 +647,7 @@ int find_nth_int(int *array, int n_elements, int nth); time_t find_nth_time(time_t *array, int n_elements, int nth); double find_nth_double(double *array, int n_elements, int nth); +int32_t find_nth_int32(int32_t *array, int n_elements, int nth); uint32_t find_nth_uint32(uint32_t *array, int n_elements, int nth); long find_nth_long(long *array, int n_elements, int nth); static INLINE int @@ -649,6 +670,11 @@ { return find_nth_uint32(array, n_elements, (n_elements-1)/2); } +static INLINE int32_t +median_int32(int32_t *array, int n_elements) +{ + return find_nth_int32(array, n_elements, (n_elements-1)/2); +} static INLINE long median_long(long *array, int n_elements) { diff -Nru tor-0.2.1.30/src/common/crypto.c tor-0.2.2.35/src/common/crypto.c --- tor-0.2.1.30/src/common/crypto.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/crypto.c 2011-12-15 16:28:37.000000000 +0000 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -49,9 +50,9 @@ #define CRYPTO_PRIVATE #include "crypto.h" -#include "log.h" +#include "../common/torlog.h" #include "aes.h" -#include "util.h" +#include "../common/util.h" #include "container.h" #include "compat.h" @@ -61,6 +62,35 @@ #include +#ifdef ANDROID +/* Android's OpenSSL seems to have removed all of its Engine support. */ +#define DISABLE_ENGINES +#endif + +#if OPENSSL_VERSION_NUMBER < 0x00908000l +/** @{ */ +/** On OpenSSL versions before 0.9.8, there is no working SHA256 + * implementation, so we use Tom St Denis's nice speedy one, slightly adapted + * to our needs. These macros make it usable by us. */ +#define SHA256_CTX sha256_state +#define SHA256_Init sha256_init +#define SHA256_Update sha256_process +#define LTC_ARGCHK(x) tor_assert(x) +/** @} */ +#include "sha256.c" +#define SHA256_Final(a,b) sha256_done(b,a) + +static unsigned char * +SHA256(const unsigned char *m, size_t len, unsigned char *d) +{ + SHA256_CTX ctx; + SHA256_Init(&ctx); + SHA256_Update(&ctx, m, len); + SHA256_Final(d, &ctx); + return d; +} +#endif + /** Macro: is k a valid RSA public or private key? */ #define PUBLIC_KEY_OK(k) ((k) && (k)->key && (k)->key->n) /** Macro: is k a valid RSA private key? */ @@ -76,25 +106,26 @@ /** A public key, or a public/private key-pair. */ struct crypto_pk_env_t { - int refs; /* reference counting so we don't have to copy keys */ - RSA *key; + int refs; /**< reference count, so we don't have to copy keys */ + RSA *key; /**< The key itself */ }; /** Key and stream information for a stream cipher. */ struct crypto_cipher_env_t { - char key[CIPHER_KEY_LEN]; - aes_cnt_cipher_t *cipher; + char key[CIPHER_KEY_LEN]; /**< The raw key. */ + aes_cnt_cipher_t *cipher; /**< The key in format usable for counter-mode AES + * encryption */ }; /** A structure to hold the first half (x, g^x) of a Diffie-Hellman handshake * while we're waiting for the second.*/ struct crypto_dh_env_t { - DH *dh; + DH *dh; /**< The openssl DH object */ }; static int setup_openssl_threading(void); -static int tor_check_dh_key(BIGNUM *bn); +static int tor_check_dh_key(int severity, BIGNUM *bn); /** Return the number of bytes added by padding method padding. */ @@ -151,6 +182,7 @@ } } +#ifndef DISABLE_ENGINES /** Log any OpenSSL engines we're using at NOTICE. */ static void log_engine(const char *fn, ENGINE *e) @@ -165,37 +197,82 @@ log(LOG_INFO, LD_CRYPTO, "Using default implementation for %s", fn); } } +#endif + +#ifndef DISABLE_ENGINES +/** Try to load an engine in a shared library via fully qualified path. + */ +static ENGINE * +try_load_engine(const char *path, const char *engine) +{ + ENGINE *e = ENGINE_by_id("dynamic"); + if (e) { + if (!ENGINE_ctrl_cmd_string(e, "ID", engine, 0) || + !ENGINE_ctrl_cmd_string(e, "DIR_LOAD", "2", 0) || + !ENGINE_ctrl_cmd_string(e, "DIR_ADD", path, 0) || + !ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0)) { + ENGINE_free(e); + e = NULL; + } + } + return e; +} +#endif /** Initialize the crypto library. Return 0 on success, -1 on failure. */ int -crypto_global_init(int useAccel) +crypto_global_init(int useAccel, const char *accelName, const char *accelDir) { if (!_crypto_global_initialized) { ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); _crypto_global_initialized = 1; setup_openssl_threading(); - /* XXX the below is a bug, since we can't know if we're supposed - * to be using hardware acceleration or not. we should arrange - * for this function to be called before init_keys. But make it - * not complain loudly, at least until we make acceleration work. */ - if (useAccel < 0) { - log_info(LD_CRYPTO, "Initializing OpenSSL via tor_tls_init()."); - } if (useAccel > 0) { +#ifdef DISABLE_ENGINES + (void)accelName; + (void)accelDir; + log_warn(LD_CRYPTO, "No OpenSSL hardware acceleration support enabled."); +#else + ENGINE *e = NULL; + log_info(LD_CRYPTO, "Initializing OpenSSL engine support."); ENGINE_load_builtin_engines(); - if (!ENGINE_register_all_complete()) - return -1; + ENGINE_register_all_complete(); - /* XXXX make sure this isn't leaking. */ + if (accelName) { + if (accelDir) { + log_info(LD_CRYPTO, "Trying to load dynamic OpenSSL engine \"%s\"" + " via path \"%s\".", accelName, accelDir); + e = try_load_engine(accelName, accelDir); + } else { + log_info(LD_CRYPTO, "Initializing dynamic OpenSSL engine \"%s\"" + " acceleration support.", accelName); + e = ENGINE_by_id(accelName); + } + if (!e) { + log_warn(LD_CRYPTO, "Unable to load dynamic OpenSSL engine \"%s\".", + accelName); + } else { + log_info(LD_CRYPTO, "Loaded dynamic OpenSSL engine \"%s\".", + accelName); + } + } + if (e) { + log_info(LD_CRYPTO, "Loaded OpenSSL hardware acceleration engine," + " setting default ciphers."); + ENGINE_set_default(e, ENGINE_METHOD_ALL); + } log_engine("RSA", ENGINE_get_default_RSA()); log_engine("DH", ENGINE_get_default_DH()); log_engine("RAND", ENGINE_get_default_RAND()); log_engine("SHA1", ENGINE_get_digest_engine(NID_sha1)); log_engine("3DES", ENGINE_get_cipher_engine(NID_des_ede3_ecb)); log_engine("AES", ENGINE_get_cipher_engine(NID_aes_128_ecb)); +#endif + } else { + log_info(LD_CRYPTO, "NOT using OpenSSL engine support."); } return crypto_seed_rng(1); } @@ -217,7 +294,11 @@ EVP_cleanup(); ERR_remove_state(0); ERR_free_strings(); + +#ifndef DISABLE_ENGINES ENGINE_cleanup(); +#endif + CONF_modules_unload(1); CRYPTO_cleanup_all_ex_data(); #ifdef TOR_IS_MULTITHREADED @@ -248,18 +329,8 @@ return env; } -/** used by tortls.c: wrap the RSA from an evp_pkey in a crypto_pk_env_t. - * returns NULL if this isn't an RSA key. */ -crypto_pk_env_t * -_crypto_new_pk_env_evp_pkey(EVP_PKEY *pkey) -{ - RSA *rsa; - if (!(rsa = EVP_PKEY_get1_RSA(pkey))) - return NULL; - return _crypto_new_pk_env_rsa(rsa); -} - -/** Helper, used by tor-checkkey.c. Return the RSA from a crypto_pk_env_t. */ +/** Helper, used by tor-checkkey.c and tor-gencert.c. Return the RSA from a + * crypto_pk_env_t. */ RSA * _crypto_pk_env_get_rsa(crypto_pk_env_t *env) { @@ -311,7 +382,7 @@ RSA *rsa; rsa = RSA_new(); - if (!rsa) return NULL; + tor_assert(rsa); return _crypto_new_pk_env_rsa(rsa); } @@ -321,10 +392,12 @@ void crypto_free_pk_env(crypto_pk_env_t *env) { - tor_assert(env); + if (!env) + return; if (--env->refs > 0) return; + tor_assert(env->refs == 0); if (env->key) RSA_free(env->key); @@ -347,10 +420,7 @@ return NULL; } - if (crypto_cipher_set_key(crypto, key)) { - crypto_log_errors(LOG_WARN, "setting symmetric key"); - goto error; - } + crypto_cipher_set_key(crypto, key); if (encrypt_mode) r = crypto_cipher_encrypt_init_cipher(crypto); @@ -384,7 +454,8 @@ void crypto_free_cipher_env(crypto_cipher_env_t *env) { - tor_assert(env); + if (!env) + return; tor_assert(env->cipher); aes_free_cipher(env->cipher); @@ -394,11 +465,11 @@ /* public key crypto */ -/** Generate a new public/private keypair in env. Return 0 on - * success, -1 on failure. +/** Generate a bits-bit new public/private keypair in env. + * Return 0 on success, -1 on failure. */ int -crypto_pk_generate_key(crypto_pk_env_t *env) +crypto_pk_generate_key_with_bits(crypto_pk_env_t *env, int bits) { tor_assert(env); @@ -406,7 +477,7 @@ RSA_free(env->key); #if OPENSSL_VERSION_NUMBER < 0x00908000l /* In OpenSSL 0.9.7, RSA_generate_key is all we have. */ - env->key = RSA_generate_key(PK_BYTES*8,65537, NULL, NULL); + env->key = RSA_generate_key(bits, 65537, NULL, NULL); #else /* In OpenSSL 0.9.8, RSA_generate_key is deprecated. */ { @@ -419,7 +490,7 @@ r = RSA_new(); if (!r) goto done; - if (RSA_generate_key_ex(r, PK_BYTES*8, e, NULL) == -1) + if (RSA_generate_key_ex(r, bits, e, NULL) == -1) goto done; env->key = r; @@ -452,10 +523,12 @@ tor_assert(env); tor_assert(s); - tor_assert(len < INT_MAX && len < SIZE_T_CEILING); + tor_assert(len < INT_MAX && len < SSIZE_T_CEILING); /* Create a read-only memory BIO, backed by the string 's' */ b = BIO_new_mem_buf((char*)s, (int)len); + if (!b) + return -1; if (env->key) RSA_free(env->key); @@ -516,6 +589,8 @@ tor_assert(dest); b = BIO_new(BIO_s_mem()); /* Create a memory BIO */ + if (!b) + return -1; /* Now you can treat b as if it were a file. Just use the * PEM_*_bio_* functions instead of the non-bio variants. @@ -583,6 +658,8 @@ tor_assert(lenenv contains a public key whose public exponent + * equals 65537. + */ +int +crypto_pk_public_exponent_ok(crypto_pk_env_t *env) +{ + tor_assert(env); + tor_assert(env->key); + + return BN_is_word(env->key->e, 65537); +} + /** Compare the public-key components of a and b. Return -1 if a\b. */ @@ -688,6 +777,17 @@ return (size_t) RSA_size(env->key); } +/** Return the size of the public key modulus of env, in bits. */ +int +crypto_pk_num_bits(crypto_pk_env_t *env) +{ + tor_assert(env); + tor_assert(env->key); + tor_assert(env->key->n); + + return BN_num_bits(env->key->n); +} + /** Increase the reference count of env, and return it. */ crypto_pk_env_t * @@ -705,14 +805,25 @@ crypto_pk_copy_full(crypto_pk_env_t *env) { RSA *new_key; + int privatekey = 0; tor_assert(env); tor_assert(env->key); if (PRIVATE_KEY_OK(env)) { new_key = RSAPrivateKey_dup(env->key); + privatekey = 1; } else { new_key = RSAPublicKey_dup(env->key); } + if (!new_key) { + log_err(LD_CRYPTO, "Unable to duplicate a %s key: openssl failed.", + privatekey?"private":"public"); + crypto_log_errors(LOG_ERR, + privatekey ? "Duplicating a private key" : + "Duplicating a public key"); + tor_fragile_assert(); + return NULL; + } return _crypto_new_pk_env_rsa(new_key); } @@ -845,7 +956,7 @@ tor_free(buf); return -1; } - if (memcmp(buf, digest, DIGEST_LEN)) { + if (tor_memneq(buf, digest, DIGEST_LEN)) { log_warn(LD_CRYPTO, "Signature mismatched with digest."); tor_free(buf); return -1; @@ -1213,19 +1324,14 @@ /** Set the symmetric key for the cipher in env to the first * CIPHER_KEY_LEN bytes of key. Does not initialize the cipher. - * Return 0 on success, -1 on failure. */ -int +void crypto_cipher_set_key(crypto_cipher_env_t *env, const char *key) { tor_assert(env); tor_assert(key); - if (!env->key) - return -1; - memcpy(env->key, key, CIPHER_KEY_LEN); - return 0; } /** Generate an initialization vector for our AES-CTR cipher; store it @@ -1390,7 +1496,7 @@ /* SHA-1 */ -/** Compute the SHA1 digest of len bytes in data stored in +/** Compute the SHA1 digest of the len bytes on data stored in * m. Write the DIGEST_LEN byte result into digest. * Return 0 on success, -1 on failure. */ @@ -1402,19 +1508,97 @@ return (SHA1((const unsigned char*)m,len,(unsigned char*)digest) == NULL); } +/** Compute a 256-bit digest of len bytes in data stored in m, + * using the algorithm algorithm. Write the DIGEST_LEN256-byte result + * into digest. Return 0 on success, -1 on failure. */ +int +crypto_digest256(char *digest, const char *m, size_t len, + digest_algorithm_t algorithm) +{ + tor_assert(m); + tor_assert(digest); + tor_assert(algorithm == DIGEST_SHA256); + return (SHA256((const unsigned char*)m,len,(unsigned char*)digest) == NULL); +} + +/** Set the digests_t in ds_out to contain every digest on the + * len bytes in m that we know how to compute. Return 0 on + * success, -1 on failure. */ +int +crypto_digest_all(digests_t *ds_out, const char *m, size_t len) +{ + digest_algorithm_t i; + tor_assert(ds_out); + memset(ds_out, 0, sizeof(*ds_out)); + if (crypto_digest(ds_out->d[DIGEST_SHA1], m, len) < 0) + return -1; + for (i = DIGEST_SHA256; i < N_DIGEST_ALGORITHMS; ++i) { + if (crypto_digest256(ds_out->d[i], m, len, i) < 0) + return -1; + } + return 0; +} + +/** Return the name of an algorithm, as used in directory documents. */ +const char * +crypto_digest_algorithm_get_name(digest_algorithm_t alg) +{ + switch (alg) { + case DIGEST_SHA1: + return "sha1"; + case DIGEST_SHA256: + return "sha256"; + default: + tor_fragile_assert(); + return "??unknown_digest??"; + } +} + +/** Given the name of a digest algorithm, return its integer value, or -1 if + * the name is not recognized. */ +int +crypto_digest_algorithm_parse_name(const char *name) +{ + if (!strcmp(name, "sha1")) + return DIGEST_SHA1; + else if (!strcmp(name, "sha256")) + return DIGEST_SHA256; + else + return -1; +} + /** Intermediate information about the digest of a stream of data. */ struct crypto_digest_env_t { - SHA_CTX d; + union { + SHA_CTX sha1; /**< state for SHA1 */ + SHA256_CTX sha2; /**< state for SHA256 */ + } d; /**< State for the digest we're using. Only one member of the + * union is usable, depending on the value of algorithm. */ + digest_algorithm_t algorithm : 8; /**< Which algorithm is in use? */ }; -/** Allocate and return a new digest object. +/** Allocate and return a new digest object to compute SHA1 digests. */ crypto_digest_env_t * crypto_new_digest_env(void) { crypto_digest_env_t *r; r = tor_malloc(sizeof(crypto_digest_env_t)); - SHA1_Init(&r->d); + SHA1_Init(&r->d.sha1); + r->algorithm = DIGEST_SHA1; + return r; +} + +/** Allocate and return a new digest object to compute 256-bit digests + * using algorithm. */ +crypto_digest_env_t * +crypto_new_digest256_env(digest_algorithm_t algorithm) +{ + crypto_digest_env_t *r; + tor_assert(algorithm == DIGEST_SHA256); + r = tor_malloc(sizeof(crypto_digest_env_t)); + SHA256_Init(&r->d.sha2); + r->algorithm = algorithm; return r; } @@ -1423,6 +1607,8 @@ void crypto_free_digest_env(crypto_digest_env_t *digest) { + if (!digest) + return; memset(digest, 0, sizeof(crypto_digest_env_t)); tor_free(digest); } @@ -1435,30 +1621,55 @@ { tor_assert(digest); tor_assert(data); - /* Using the SHA1_*() calls directly means we don't support doing - * SHA1 in hardware. But so far the delay of getting the question + /* Using the SHA*_*() calls directly means we don't support doing + * SHA in hardware. But so far the delay of getting the question * to the hardware, and hearing the answer, is likely higher than * just doing it ourselves. Hashes are fast. */ - SHA1_Update(&digest->d, (void*)data, len); + switch (digest->algorithm) { + case DIGEST_SHA1: + SHA1_Update(&digest->d.sha1, (void*)data, len); + break; + case DIGEST_SHA256: + SHA256_Update(&digest->d.sha2, (void*)data, len); + break; + default: + tor_fragile_assert(); + break; + } } /** Compute the hash of the data that has been passed to the digest * object; write the first out_len bytes of the result to out. - * out_len must be \<= DIGEST_LEN. + * out_len must be \<= DIGEST256_LEN. */ void crypto_digest_get_digest(crypto_digest_env_t *digest, char *out, size_t out_len) { - unsigned char r[DIGEST_LEN]; - SHA_CTX tmpctx; + unsigned char r[DIGEST256_LEN]; + crypto_digest_env_t tmpenv; tor_assert(digest); tor_assert(out); - tor_assert(out_len <= DIGEST_LEN); - /* memcpy into a temporary ctx, since SHA1_Final clears the context */ - memcpy(&tmpctx, &digest->d, sizeof(SHA_CTX)); - SHA1_Final(r, &tmpctx); + /* memcpy into a temporary ctx, since SHA*_Final clears the context */ + memcpy(&tmpenv, digest, sizeof(crypto_digest_env_t)); + switch (digest->algorithm) { + case DIGEST_SHA1: + tor_assert(out_len <= DIGEST_LEN); + SHA1_Final(r, &tmpenv.d.sha1); + break; + case DIGEST_SHA256: + tor_assert(out_len <= DIGEST256_LEN); + SHA256_Final(r, &tmpenv.d.sha2); + break; + default: + log_warn(LD_BUG, "Called with unknown algorithm %d", digest->algorithm); + /* If fragile_assert is not enabled, then we should at least not + * leak anything. */ + memset(r, 0xff, sizeof(r)); + tor_fragile_assert(); + break; + } memcpy(out, r, out_len); memset(r, 0, sizeof(r)); } @@ -1557,6 +1768,10 @@ dh_param_g = g; } +/** Number of bits to use when choosing the x or y value in a Diffie-Hellman + * handshake. Since we exponentiate by this value, choosing a smaller one + * lets our handhake go faster. + */ #define DH_PRIVATE_KEY_BITS 320 /** Allocate and return a new DH object for a key exchange. @@ -1616,7 +1831,7 @@ crypto_log_errors(LOG_WARN, "generating DH key"); return -1; } - if (tor_check_dh_key(dh->dh->pub_key)<0) { + if (tor_check_dh_key(LOG_WARN, dh->dh->pub_key)<0) { log_warn(LD_CRYPTO, "Weird! Our own DH key was invalid. I guess once-in-" "the-universe chances really do happen. Trying again."); /* Free and clear the keys, so OpenSSL will actually try again. */ @@ -1663,7 +1878,7 @@ * See http://www.cl.cam.ac.uk/ftp/users/rja14/psandqs.ps.gz for some tips. */ static int -tor_check_dh_key(BIGNUM *bn) +tor_check_dh_key(int severity, BIGNUM *bn) { BIGNUM *x; char *s; @@ -1674,13 +1889,13 @@ init_dh_param(); BN_set_word(x, 1); if (BN_cmp(bn,x)<=0) { - log_warn(LD_CRYPTO, "DH key must be at least 2."); + log_fn(severity, LD_CRYPTO, "DH key must be at least 2."); goto err; } BN_copy(x,dh_param_p); BN_sub_word(x, 1); if (BN_cmp(bn,x)>=0) { - log_warn(LD_CRYPTO, "DH key must be at most p-2."); + log_fn(severity, LD_CRYPTO, "DH key must be at most p-2."); goto err; } BN_free(x); @@ -1688,7 +1903,7 @@ err: BN_free(x); s = BN_bn2hex(bn); - log_warn(LD_CRYPTO, "Rejecting insecure DH key [%s]", s); + log_fn(severity, LD_CRYPTO, "Rejecting insecure DH key [%s]", s); OPENSSL_free(s); return -1; } @@ -1706,7 +1921,7 @@ * where || is concatenation.) */ ssize_t -crypto_dh_compute_secret(crypto_dh_env_t *dh, +crypto_dh_compute_secret(int severity, crypto_dh_env_t *dh, const char *pubkey, size_t pubkey_len, char *secret_out, size_t secret_bytes_out) { @@ -1721,9 +1936,9 @@ if (!(pubkey_bn = BN_bin2bn((const unsigned char*)pubkey, (int)pubkey_len, NULL))) goto error; - if (tor_check_dh_key(pubkey_bn)<0) { + if (tor_check_dh_key(severity, pubkey_bn)<0) { /* Check for invalid public keys. */ - log_warn(LD_CRYPTO,"Rejected invalid g^x"); + log_fn(severity, LD_CRYPTO,"Rejected invalid g^x"); goto error; } secret_tmp_len = crypto_dh_get_bytes(dh); @@ -1799,7 +2014,8 @@ void crypto_dh_free(crypto_dh_env_t *dh) { - tor_assert(dh); + if (!dh) + return; tor_assert(dh->dh); DH_free(dh->dh); tor_free(dh); @@ -1807,15 +2023,22 @@ /* random numbers */ -/* This is how much entropy OpenSSL likes to add right now, so maybe it will +/** How many bytes of entropy we add at once. + * + * This is how much entropy OpenSSL likes to add right now, so maybe it will * work for us too. */ #define ADD_ENTROPY 32 -/* Use RAND_poll if OpenSSL is 0.9.6 release or later. (The "f" means - "release".) */ +/** True iff we should use OpenSSL's RAND_poll function to add entropy to its + * pool. + * + * Use RAND_poll if OpenSSL is 0.9.6 release or later. (The "f" means + *"release".) */ #define HAVE_RAND_POLL (OPENSSL_VERSION_NUMBER >= 0x0090600fl) -/* Versions of OpenSSL prior to 0.9.7k and 0.9.8c had a bug where RAND_poll +/** True iff it's safe to use RAND_poll after setup. + * + * Versions of OpenSSL prior to 0.9.7k and 0.9.8c had a bug where RAND_poll * would allocate an fd_set on the stack, open a new file, and try to FD_SET * that fd without checking whether it fit in the fd_set. Thus, if the * system has not just been started up, it is unsafe to call */ @@ -1824,6 +2047,15 @@ OPENSSL_VERSION_NUMBER <= 0x00907fffl) || \ (OPENSSL_VERSION_NUMBER >= 0x0090803fl)) +/** Set the seed of the weak RNG to a random value. */ +static void +seed_weak_rng(void) +{ + unsigned seed; + crypto_rand((void*)&seed, sizeof(seed)); + tor_init_weak_random(seed); +} + /** Seed OpenSSL's random number generator with bytes from the operating * system. startup should be true iff we have just started Tor and * have not yet allocated a bunch of fds. Return 0 on success, -1 on failure. @@ -1831,14 +2063,15 @@ int crypto_seed_rng(int startup) { - char buf[ADD_ENTROPY]; int rand_poll_status = 0; /* local variables */ #ifdef MS_WINDOWS + unsigned char buf[ADD_ENTROPY]; static int provider_set = 0; static HCRYPTPROV provider; #else + char buf[ADD_ENTROPY]; static const char *filenames[] = { "/dev/srandom", "/dev/urandom", "/dev/random", NULL }; @@ -1874,6 +2107,7 @@ } RAND_seed(buf, sizeof(buf)); memset(buf, 0, sizeof(buf)); + seed_weak_rng(); return 0; #else for (i = 0; filenames[i]; ++i) { @@ -1890,6 +2124,7 @@ } RAND_seed(buf, (int)sizeof(buf)); memset(buf, 0, sizeof(buf)); + seed_weak_rng(); return 0; } @@ -1914,13 +2149,14 @@ } /** Return a pseudorandom integer, chosen uniformly from the values - * between 0 and max-1. */ + * between 0 and max-1 inclusive. max must be between 1 and + * INT_MAX+1, inclusive. */ int crypto_rand_int(unsigned int max) { unsigned int val; unsigned int cutoff; - tor_assert(max < UINT_MAX); + tor_assert(max <= ((unsigned int)INT_MAX)+1); tor_assert(max > 0); /* don't div by 0 */ /* We ignore any values that are >= 'cutoff,' to avoid biasing the @@ -1957,6 +2193,26 @@ } } +/** Return a pseudorandom double d, chosen uniformly from the range + * 0.0 <= d < 1.0. + */ +double +crypto_rand_double(void) +{ + /* We just use an unsigned int here; we don't really care about getting + * more than 32 bits of resolution */ + unsigned int uint; + crypto_rand((char*)&uint, sizeof(uint)); +#if SIZEOF_INT == 4 +#define UINT_MAX_AS_DOUBLE 4294967296.0 +#elif SIZEOF_INT == 8 +#define UINT_MAX_AS_DOUBLE 1.8446744073709552e+19 +#else +#error SIZEOF_INT is neither 4 nor 8 +#endif + return ((double)uint) / UINT_MAX_AS_DOUBLE; +} + /** Generate and return a new random hostname starting with prefix, * ending with suffix, and containing no less than * min_rand_len and no more than max_rand_len random base32 @@ -2046,9 +2302,12 @@ return ret; } +/** @{ */ +/** Special values used for the base64_decode_table */ #define X 255 #define SP 64 #define PAD 65 +/** @} */ /** Internal table mapping byte values to what they represent in base64. * Numbers 0..63 are 6-bit integers. SPs are spaces, and should be * skipped. Xs are invalid and must not appear in base64. PAD indicates @@ -2217,15 +2476,54 @@ #endif } +/** Base-64 encode DIGEST256_LINE bytes from digest, remove the + * trailing = and newline characters, and store the nul-terminated result in + * the first BASE64_DIGEST256_LEN+1 bytes of d64. */ +int +digest256_to_base64(char *d64, const char *digest) +{ + char buf[256]; + base64_encode(buf, sizeof(buf), digest, DIGEST256_LEN); + buf[BASE64_DIGEST256_LEN] = '\0'; + memcpy(d64, buf, BASE64_DIGEST256_LEN+1); + return 0; +} + +/** Given a base-64 encoded, nul-terminated digest in d64 (without + * trailing newline or = characters), decode it and store the result in the + * first DIGEST256_LEN bytes at digest. */ +int +digest256_from_base64(char *digest, const char *d64) +{ +#ifdef USE_OPENSSL_BASE64 + char buf_in[BASE64_DIGEST256_LEN+3]; + char buf[256]; + if (strlen(d64) != BASE64_DIGEST256_LEN) + return -1; + memcpy(buf_in, d64, BASE64_DIGEST256_LEN); + memcpy(buf_in+BASE64_DIGEST256_LEN, "=\n\0", 3); + if (base64_decode(buf, sizeof(buf), buf_in, strlen(buf_in)) != DIGEST256_LEN) + return -1; + memcpy(digest, buf, DIGEST256_LEN); + return 0; +#else + if (base64_decode(digest, DIGEST256_LEN, d64, strlen(d64)) == DIGEST256_LEN) + return 0; + else + return -1; +#endif +} + /** Implements base32 encoding as in rfc3548. Limitation: Requires * that srclen*8 is a multiple of 5. */ void base32_encode(char *dest, size_t destlen, const char *src, size_t srclen) { - unsigned int i, bit, v, u; - size_t nbits = srclen * 8; + unsigned int i, v, u; + size_t nbits = srclen * 8, bit; + tor_assert(srclen < SIZE_T_CEILING/8); tor_assert((nbits%5) == 0); /* We need an even multiple of 5 bits. */ tor_assert((nbits/5)+1 <= destlen); /* We need enough space. */ tor_assert(destlen < SIZE_T_CEILING); @@ -2249,11 +2547,12 @@ { /* XXXX we might want to rewrite this along the lines of base64_decode, if * it ever shows up in the profile. */ - unsigned int i, j, bit; - size_t nbits; + unsigned int i; + size_t nbits, j, bit; char *tmp; nbits = srclen * 5; + tor_assert(srclen < SIZE_T_CEILING / 5); tor_assert((nbits%8) == 0); /* We need an even multiple of 8 bits. */ tor_assert((nbits/8) <= destlen); /* We need enough space. */ tor_assert(destlen < SIZE_T_CEILING); @@ -2412,6 +2711,7 @@ tor_free(v); } +/** @{ */ /** Helper: Construct mutexes, and set callbacks to help OpenSSL handle being * multithreaded. */ static int @@ -2437,4 +2737,5 @@ return 0; } #endif +/** @} */ diff -Nru tor-0.2.1.30/src/common/crypto.h tor-0.2.2.35/src/common/crypto.h --- tor-0.2.1.30/src/common/crypto.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/crypto.h 2011-12-15 16:28:37.000000000 +0000 @@ -18,6 +18,9 @@ /** Length of the output of our message digest. */ #define DIGEST_LEN 20 +/** Length of the output of our second (improved) message digests. (For now + * this is just sha256, but any it can be any other 256-byte digest). */ +#define DIGEST256_LEN 32 /** Length of our symmetric cipher's keys. */ #define CIPHER_KEY_LEN 16 /** Length of our symmetric cipher's IV. */ @@ -27,9 +30,12 @@ /** Length of our DH keys. */ #define DH_BYTES (1024/8) -/** Length of a message digest when encoded in base64 with trailing = signs - * removed. */ +/** Length of a sha1 message digest when encoded in base64 with trailing = + * signs removed. */ #define BASE64_DIGEST_LEN 27 +/** Length of a sha256 message digest when encoded in base64 with trailing = + * signs removed. */ +#define BASE64_DIGEST256_LEN 43 /** Constants used to indicate no padding for public-key encryption */ #define PK_NO_PADDING 60000 @@ -48,6 +54,26 @@ #define FINGERPRINT_LEN 49 /** Length of hex encoding of SHA1 digest, not including final NUL. */ #define HEX_DIGEST_LEN 40 +/** Length of hex encoding of SHA256 digest, not including final NUL. */ +#define HEX_DIGEST256_LEN 64 + +typedef enum { + DIGEST_SHA1 = 0, + DIGEST_SHA256 = 1, +} digest_algorithm_t; +#define N_DIGEST_ALGORITHMS (DIGEST_SHA256+1) + +/** A set of all the digests we know how to compute, taken on a single + * string. Any digests that are shorter than 256 bits are right-padded + * with 0 bits. + * + * Note that this representation wastes 12 bytes for the SHA1 case, so + * don't use it for anything where we need to allocate a whole bunch at + * once. + **/ +typedef struct { + char d[N_DIGEST_ALGORITHMS][DIGEST256_LEN]; +} digests_t; typedef struct crypto_pk_env_t crypto_pk_env_t; typedef struct crypto_cipher_env_t crypto_cipher_env_t; @@ -55,7 +81,9 @@ typedef struct crypto_dh_env_t crypto_dh_env_t; /* global state */ -int crypto_global_init(int hardwareAccel); +int crypto_global_init(int hardwareAccel, + const char *accelName, + const char *accelPath); void crypto_thread_cleanup(void); int crypto_global_cleanup(void); @@ -71,7 +99,9 @@ void crypto_free_cipher_env(crypto_cipher_env_t *env); /* public key crypto */ -int crypto_pk_generate_key(crypto_pk_env_t *env); +int crypto_pk_generate_key_with_bits(crypto_pk_env_t *env, int bits); +#define crypto_pk_generate_key(env) \ + crypto_pk_generate_key_with_bits((env), (PK_BYTES*8)) int crypto_pk_read_private_key_from_filename(crypto_pk_env_t *env, const char *keyfile); @@ -89,9 +119,11 @@ int crypto_pk_check_key(crypto_pk_env_t *env); int crypto_pk_cmp_keys(crypto_pk_env_t *a, crypto_pk_env_t *b); size_t crypto_pk_keysize(crypto_pk_env_t *env); +int crypto_pk_num_bits(crypto_pk_env_t *env); crypto_pk_env_t *crypto_pk_dup_key(crypto_pk_env_t *orig); crypto_pk_env_t *crypto_pk_copy_full(crypto_pk_env_t *orig); int crypto_pk_key_is_private(const crypto_pk_env_t *key); +int crypto_pk_public_exponent_ok(crypto_pk_env_t *env); int crypto_pk_public_encrypt(crypto_pk_env_t *env, char *to, size_t tolen, const char *from, size_t fromlen, int padding); @@ -123,7 +155,7 @@ /* symmetric crypto */ int crypto_cipher_generate_key(crypto_cipher_env_t *env); -int crypto_cipher_set_key(crypto_cipher_env_t *env, const char *key); +void crypto_cipher_set_key(crypto_cipher_env_t *env, const char *key); void crypto_cipher_generate_iv(char *iv_out); int crypto_cipher_set_iv(crypto_cipher_env_t *env, const char *iv); const char *crypto_cipher_get_key(crypto_cipher_env_t *env); @@ -143,9 +175,15 @@ char *to, size_t tolen, const char *from, size_t fromlen); -/* SHA-1 */ +/* SHA-1 and other digests. */ int crypto_digest(char *digest, const char *m, size_t len); +int crypto_digest256(char *digest, const char *m, size_t len, + digest_algorithm_t algorithm); +int crypto_digest_all(digests_t *ds_out, const char *m, size_t len); +const char *crypto_digest_algorithm_get_name(digest_algorithm_t alg); +int crypto_digest_algorithm_parse_name(const char *name); crypto_digest_env_t *crypto_new_digest_env(void); +crypto_digest_env_t *crypto_new_digest256_env(digest_algorithm_t algorithm); void crypto_free_digest_env(crypto_digest_env_t *digest); void crypto_digest_add_bytes(crypto_digest_env_t *digest, const char *data, size_t len); @@ -167,7 +205,7 @@ int crypto_dh_generate_public(crypto_dh_env_t *dh); int crypto_dh_get_public(crypto_dh_env_t *dh, char *pubkey_out, size_t pubkey_out_len); -ssize_t crypto_dh_compute_secret(crypto_dh_env_t *dh, +ssize_t crypto_dh_compute_secret(int severity, crypto_dh_env_t *dh, const char *pubkey, size_t pubkey_len, char *secret_out, size_t secret_out_len); void crypto_dh_free(crypto_dh_env_t *dh); @@ -179,6 +217,7 @@ int crypto_rand(char *to, size_t n); int crypto_rand_int(unsigned int max); uint64_t crypto_rand_uint64(uint64_t max); +double crypto_rand_double(void); char *crypto_random_hostname(int min_rand_len, int max_rand_len, const char *prefix, const char *suffix); @@ -196,6 +235,8 @@ int digest_to_base64(char *d64, const char *digest); int digest_from_base64(char *digest, const char *d64); +int digest256_to_base64(char *d64, const char *digest); +int digest256_from_base64(char *digest, const char *d64); /** Length of RFC2440-style S2K specifier: the first 8 bytes are a salt, the * 9th describes how much iteration to do. */ @@ -210,7 +251,6 @@ struct dh_st; struct rsa_st *_crypto_pk_env_get_rsa(crypto_pk_env_t *env); crypto_pk_env_t *_crypto_new_pk_env_rsa(struct rsa_st *rsa); -crypto_pk_env_t *_crypto_new_pk_env_evp_pkey(struct evp_pkey_st *pkey); struct evp_pkey_st *_crypto_pk_env_get_evp_pkey(crypto_pk_env_t *env, int private); struct dh_st *_crypto_dh_env_get_dh(crypto_dh_env_t *dh); diff -Nru tor-0.2.1.30/src/common/di_ops.c tor-0.2.2.35/src/common/di_ops.c --- tor-0.2.1.30/src/common/di_ops.c 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/di_ops.c 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,133 @@ +/* Copyright (c) 2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file di_ops.c + * \brief Functions for data-independent operations. + **/ + +#include "orconfig.h" +#include "di_ops.h" + +/** + * Timing-safe version of memcmp. As memcmp, compare the sz bytes at + * a with the sz bytes at b, and return less than 0 if + * the bytes at a lexically precede those at b, 0 if the byte + * ranges are equal, and greater than zero if the bytes at a lexically + * follow those at b. + * + * This implementation differs from memcmp in that its timing behavior is not + * data-dependent: it should return in the same amount of time regardless of + * the contents of a and b. + */ +int +tor_memcmp(const void *a, const void *b, size_t len) +{ + const uint8_t *x = a; + const uint8_t *y = b; + size_t i = len; + int retval = 0; + + /* This loop goes from the end of the arrays to the start. At the + * start of every iteration, before we decrement i, we have set + * "retval" equal to the result of memcmp(a+i,b+i,len-i). During the + * loop, we update retval by leaving it unchanged if x[i]==y[i] and + * setting it to x[i]-y[i] if x[i]!= y[i]. + * + * The following assumes we are on a system with two's-complement + * arithmetic. We check for this at configure-time with the check + * that sets USING_TWOS_COMPLEMENT. If we aren't two's complement, then + * torint.h will stop compilation with an error. + */ + while (i--) { + int v1 = x[i]; + int v2 = y[i]; + int equal_p = v1 ^ v2; + + /* The following sets bits 8 and above of equal_p to 'equal_p == + * 0', and thus to v1 == v2. (To see this, note that if v1 == + * v2, then v1^v2 == equal_p == 0, so equal_p-1 == -1, which is the + * same as ~0 on a two's-complement machine. Then note that if + * v1 != v2, then 0 < v1 ^ v2 < 256, so 0 <= equal_p - 1 < 255.) + */ + --equal_p; + + equal_p >>= 8; + /* Thanks to (sign-preserving) arithmetic shift, equal_p is now + * equal to -(v1 == v2), which is exactly what we need below. + * (Since we're assuming two's-complement arithmetic, -1 is the + * same as ~0 (all bits set).) + * + * (The result of an arithmetic shift on a negative value is + * actually implementation-defined in standard C. So how do we + * get away with assuming it? Easy. We check.) */ +#if ((-60 >> 8) != -1) +#error "According to cpp, right-shift doesn't perform sign-extension." +#endif +#ifndef RSHIFT_DOES_SIGN_EXTEND +#error "According to configure, right-shift doesn't perform sign-extension." +#endif + + /* If v1 == v2, equal_p is ~0, so this will leave retval + * unchanged; otherwise, equal_p is 0, so this will zero it. */ + retval &= equal_p; + + /* If v1 == v2, then this adds 0, and leaves retval unchanged. + * Otherwise, we just zeroed retval, so this sets it to v1 - v2. */ + retval += (v1 - v2); + + /* There. Now retval is equal to its previous value if v1 == v2, and + * equal to v1 - v2 if v1 != v2. */ + } + + return retval; +} + +/** + * Timing-safe memory comparison. Return true if the sz bytes at + * a are the same as the sz bytes at b, and 0 otherwise. + * + * This implementation differs from !memcmp(a,b,sz) in that its timing + * behavior is not data-dependent: it should return in the same amount of time + * regardless of the contents of a and b. It differs from + * !tor_memcmp(a,b,sz) by being faster. + */ +int +tor_memeq(const void *a, const void *b, size_t sz) +{ + /* Treat a and b as byte ranges. */ + const uint8_t *ba = a, *bb = b; + uint32_t any_difference = 0; + while (sz--) { + /* Set byte_diff to all of those bits that are different in *ba and *bb, + * and advance both ba and bb. */ + const uint8_t byte_diff = *ba++ ^ *bb++; + + /* Set bits in any_difference if they are set in byte_diff. */ + any_difference |= byte_diff; + } + + /* Now any_difference is 0 if there are no bits different between + * a and b, and is nonzero if there are bits different between a + * and b. Now for paranoia's sake, let's convert it to 0 or 1. + * + * (If we say "!any_difference", the compiler might get smart enough + * to optimize-out our data-independence stuff above.) + * + * To unpack: + * + * If any_difference == 0: + * any_difference - 1 == ~0 + * (any_difference - 1) >> 8 == 0x00ffffff + * 1 & ((any_difference - 1) >> 8) == 1 + * + * If any_difference != 0: + * 0 < any_difference < 256, so + * 0 < any_difference - 1 < 255 + * (any_difference - 1) >> 8 == 0 + * 1 & ((any_difference - 1) >> 8) == 0 + */ + + return 1 & ((any_difference - 1) >> 8); +} + diff -Nru tor-0.2.1.30/src/common/di_ops.h tor-0.2.2.35/src/common/di_ops.h --- tor-0.2.1.30/src/common/di_ops.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/di_ops.h 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,31 @@ +/* Copyright (c) 2003-2004, Roger Dingledine + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file di_ops.h + * \brief Headers for di_ops.c + **/ + +#ifndef TOR_DI_OPS_H +#define TOR_DI_OPS_H + +#include "orconfig.h" +#include "torint.h" + +int tor_memcmp(const void *a, const void *b, size_t sz); +int tor_memeq(const void *a, const void *b, size_t sz); +#define tor_memneq(a,b,sz) (!tor_memeq((a),(b),(sz))) + +/** Alias for the platform's memcmp() function. This function is + * not data-independent: we define this alias so that we can + * mark cases where we are deliberately using a data-dependent memcmp() + * implementation. + */ +#define fast_memcmp(a,b,c) (memcmp((a),(b),(c))) +#define fast_memeq(a,b,c) (0==memcmp((a),(b),(c))) +#define fast_memneq(a,b,c) (0!=memcmp((a),(b),(c))) + +#endif + diff -Nru tor-0.2.1.30/src/common/ht.h tor-0.2.2.35/src/common/ht.h --- tor-0.2.1.30/src/common/ht.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/ht.h 2011-12-15 16:26:49.000000000 +0000 @@ -42,6 +42,10 @@ #define HT_SIZE(head) \ ((head)->hth_n_entries) +/* Return memory usage for a hashtable (not counting the entries themselves) */ +#define HT_MEM_USAGE(head) \ + (sizeof(*head) + (head)->hth_table_length * sizeof(void*)) + #define HT_FIND(name, head, elm) name##_HT_FIND((head), (elm)) #define HT_INSERT(name, head, elm) name##_HT_INSERT((head), (elm)) #define HT_REPLACE(name, head, elm) name##_HT_REPLACE((head), (elm)) diff -Nru tor-0.2.1.30/src/common/log.c tor-0.2.2.35/src/common/log.c --- tor-0.2.1.30/src/common/log.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/log.c 2011-12-15 16:28:37.000000000 +0000 @@ -33,13 +33,15 @@ #include "compat.h" #include "util.h" #define LOG_PRIVATE -#include "log.h" +#include "torlog.h" #include "container.h" -#include - +/** @{ */ +/** The string we stick at the end of a log message when it is too long, + * and its length. */ #define TRUNCATED_STR "[...truncated]" #define TRUNCATED_STR_LEN 14 +/** @} */ /** Information for a single logfile; only used in log.c */ typedef struct logfile_t { @@ -83,7 +85,7 @@ /* All debugging messages occur in interesting places. */ return 1; case LOG_NOTICE: - case LOG_WARN: + case LOG_WARN: case LOG_ERR: /* We care about places where bugs occur. */ return (domain == LD_BUG); @@ -99,15 +101,31 @@ /** Linked list of logfile_t. */ static logfile_t *logfiles = NULL; +/** Boolean: do we report logging domains? */ +static int log_domains_are_logged = 0; + #ifdef HAVE_SYSLOG_H /** The number of open syslog log handlers that we have. When this reaches 0, * we can close our connection to the syslog facility. */ static int syslog_count = 0; #endif +/** Represents a log message that we are going to send to callback-driven + * loggers once we can do so in a non-reentrant way. */ +typedef struct pending_cb_message_t { + int severity; /**< The severity of the message */ + log_domain_mask_t domain; /**< The domain of the message */ + char *msg; /**< The content of the message */ +} pending_cb_message_t; + +/** Log messages waiting to be replayed onto callback-based logs */ +static smartlist_t *pending_cb_messages = NULL; + +/** Lock the log_mutex to prevent others from changing the logfile_t list */ #define LOCK_LOGS() STMT_BEGIN \ tor_mutex_acquire(&log_mutex); \ STMT_END +/** Unlock the log_mutex */ #define UNLOCK_LOGS() STMT_BEGIN tor_mutex_release(&log_mutex); STMT_END /** What's the lowest log level anybody cares about? Checking this lets us @@ -117,6 +135,9 @@ static void delete_log(logfile_t *victim); static void close_log(logfile_t *victim); +static char *domain_to_string(log_domain_mask_t domain, + char *buf, size_t buflen); + /** Name of the application: used to generate the message we write at the * start of each new log. */ static char *appname = NULL; @@ -208,13 +229,34 @@ size_t n; int r; char *end_of_prefix; + char *buf_end; - assert(buf_len >= 2); /* prevent integer underflow */ + assert(buf_len >= 16); /* prevent integer underflow and general stupidity */ buf_len -= 2; /* subtract 2 characters so we have room for \n\0 */ + buf_end = buf+buf_len; /* point *after* the last char we can write to */ n = _log_prefix(buf, buf_len, severity); end_of_prefix = buf+n; + if (log_domains_are_logged) { + char *cp = buf+n; + if (cp == buf_end) goto format_msg_no_room_for_domains; + *cp++ = '{'; + if (cp == buf_end) goto format_msg_no_room_for_domains; + cp = domain_to_string(domain, cp, (buf+buf_len-cp)); + if (cp == buf_end) goto format_msg_no_room_for_domains; + *cp++ = '}'; + if (cp == buf_end) goto format_msg_no_room_for_domains; + *cp++ = ' '; + if (cp == buf_end) goto format_msg_no_room_for_domains; + end_of_prefix = cp; + n = cp-buf; + format_msg_no_room_for_domains: + /* This will leave end_of_prefix and n unchanged, and thus cause + * whatever log domain string we had written to be clobbered. */ + ; + } + if (funcname && should_log_function_name(domain, severity)) { r = tor_snprintf(buf+n, buf_len-n, "%s(): ", funcname); if (r<0) @@ -263,6 +305,7 @@ int formatted = 0; logfile_t *lf; char *end_of_prefix=NULL; + int callbacks_deferred = 0; /* Call assert, not tor_assert, since tor_assert calls log on failure. */ assert(format); @@ -270,6 +313,10 @@ * interesting and hard to diagnose effects */ assert(severity >= LOG_ERR && severity <= LOG_DEBUG); LOCK_LOGS(); + + if ((! (domain & LD_NOCB)) && smartlist_len(pending_cb_messages)) + flush_pending_log_callbacks(); + lf = logfiles; while (lf) { if (! (lf->severities->masks[SEVERITY_MASK_IDX(severity)] & domain)) { @@ -280,10 +327,6 @@ lf = lf->next; continue; } - if (lf->callback && (domain & LD_NOCB)) { - lf = lf->next; - continue; - } if (lf->seems_dead) { lf = lf->next; continue; @@ -295,6 +338,7 @@ &msg_len); formatted = 1; } + if (lf->is_syslog) { #ifdef HAVE_SYSLOG_H char *m = end_of_prefix; @@ -318,7 +362,19 @@ lf = lf->next; continue; } else if (lf->callback) { - lf->callback(severity, domain, end_of_prefix); + if (domain & LD_NOCB) { + if (!callbacks_deferred && pending_cb_messages) { + pending_cb_message_t *msg = tor_malloc(sizeof(pending_cb_message_t)); + msg->severity = severity; + msg->domain = domain; + msg->msg = tor_strdup(end_of_prefix); + smartlist_add(pending_cb_messages, msg); + + callbacks_deferred = 1; + } + } else { + lf->callback(severity, domain, end_of_prefix); + } lf = lf->next; continue; } @@ -332,9 +388,12 @@ UNLOCK_LOGS(); } -/** Output a message to the log. */ +/** Output a message to the log. It gets logged to all logfiles that + * care about messages with severity in domain. The content + * is formatted printf-style based on format and extra arguments. + * */ void -_log(int severity, log_domain_mask_t domain, const char *format, ...) +tor_log(int severity, log_domain_mask_t domain, const char *format, ...) { va_list ap; if (severity > _log_global_min_severity) @@ -346,6 +405,9 @@ /** Output a message to the log, prefixed with a function name fn. */ #ifdef __GNUC__ +/** GCC-based implementation of the log_fn backend, used when we have + * variadic macros. All arguments are as for log_fn, except for + * fn, which is the name of the calling functions. */ void _log_fn(int severity, log_domain_mask_t domain, const char *fn, const char *format, ...) @@ -358,6 +420,11 @@ va_end(ap); } #else +/** @{ */ +/** Variant implementation of log_fn, log_debug, log_info,... for C compilers + * without variadic macros. In this case, the calling function sets + * _log_fn_function_name to the name of the function, then invokes the + * appropriate _log_fn, _log_debug, etc. */ const char *_log_fn_function_name=NULL; void _log_fn(int severity, log_domain_mask_t domain, const char *format, ...) @@ -426,12 +493,15 @@ va_end(ap); _log_fn_function_name = NULL; } +/** @} */ #endif /** Free all storage held by victim. */ static void log_free(logfile_t *victim) { + if (!victim) + return; tor_free(victim->severities); tor_free(victim->filename); tor_free(victim); @@ -442,9 +512,12 @@ logs_free_all(void) { logfile_t *victim, *next; + smartlist_t *messages; LOCK_LOGS(); next = logfiles; logfiles = NULL; + messages = pending_cb_messages; + pending_cb_messages = NULL; UNLOCK_LOGS(); while (next) { victim = next; @@ -454,6 +527,12 @@ } tor_free(appname); + SMARTLIST_FOREACH(messages, pending_cb_message_t *, msg, { + tor_free(msg->msg); + tor_free(msg); + }); + smartlist_free(messages); + /* We _could_ destroy the log mutex here, but that would screw up any logs * that happened between here and the end of execution. */ } @@ -539,8 +618,7 @@ * to fd. Steals a reference to severity; the caller must * not use it after calling this function. */ void -add_stream_log(const log_severity_list_t *severity, - const char *name, int fd) +add_stream_log(const log_severity_list_t *severity, const char *name, int fd) { LOCK_LOGS(); add_stream_log_impl(severity, name, fd); @@ -555,6 +633,18 @@ tor_mutex_init(&log_mutex); log_mutex_initialized = 1; } + if (pending_cb_messages == NULL) + pending_cb_messages = smartlist_create(); +} + +/** Set whether we report logging domains as a part of our log messages. + */ +void +logs_set_domain_logging(int enabled) +{ + LOCK_LOGS(); + log_domains_are_logged = enabled; + UNLOCK_LOGS(); } /** Add a log handler to receive messages during startup (before the real @@ -613,6 +703,48 @@ UNLOCK_LOGS(); } +/** If there are any log messages that were genered with LD_NOCB waiting to + * be sent to callback-based loggers, send them now. */ +void +flush_pending_log_callbacks(void) +{ + logfile_t *lf; + smartlist_t *messages, *messages_tmp; + + LOCK_LOGS(); + if (0 == smartlist_len(pending_cb_messages)) { + UNLOCK_LOGS(); + return; + } + + messages = pending_cb_messages; + pending_cb_messages = smartlist_create(); + do { + SMARTLIST_FOREACH_BEGIN(messages, pending_cb_message_t *, msg) { + const int severity = msg->severity; + const int domain = msg->domain; + for (lf = logfiles; lf; lf = lf->next) { + if (! lf->callback || lf->seems_dead || + ! (lf->severities->masks[SEVERITY_MASK_IDX(severity)] & domain)) { + continue; + } + lf->callback(severity, domain, msg->msg); + } + tor_free(msg->msg); + tor_free(msg); + } SMARTLIST_FOREACH_END(msg); + smartlist_clear(messages); + + messages_tmp = pending_cb_messages; + pending_cb_messages = messages; + messages = messages_tmp; + } while (smartlist_len(messages)); + + smartlist_free(messages); + + UNLOCK_LOGS(); +} + /** Close any log handlers added by add_temp_log() or marked by * mark_logs_temp(). */ void @@ -682,13 +814,11 @@ logfiles->needs_close = 1; lf = logfiles; _log_global_min_severity = get_min_log_level(); - UNLOCK_LOGS(); if (log_tor_version(lf, 0) < 0) { - LOCK_LOGS(); delete_log(lf); - UNLOCK_LOGS(); } + UNLOCK_LOGS(); return 0; } @@ -709,7 +839,6 @@ lf->fd = -1; lf->severities = tor_memdup(severity, sizeof(log_severity_list_t)); lf->filename = tor_strdup(""); - lf->is_syslog = 1; LOCK_LOGS(); @@ -751,7 +880,7 @@ static const char *domain_list[] = { "GENERAL", "CRYPTO", "NET", "CONFIG", "FS", "PROTOCOL", "MM", "HTTP", "APP", "CONTROL", "CIRC", "REND", "BUG", "DIR", "DIRSERV", - "OR", "EDGE", "ACCT", "HIST", NULL + "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", NULL }; /** Return a bitmask for the log domain for which domain is the name, @@ -766,18 +895,41 @@ } return 0; } -#if 0 -/** Translate a bitmask of log domains to a string, or NULL if the bitmask - * is undecodable. */ -static const char * -domain_to_string(log_domain_mask_t domain) -{ - int bit = tor_log2(domain); - if ((bit == 0 && domain == 0) || bit >= N_LOGGING_DOMAINS) - return NULL; - return domain_list[bit]; + +/** Translate a bitmask of log domains to a string. */ +static char * +domain_to_string(log_domain_mask_t domain, char *buf, size_t buflen) +{ + char *cp = buf; + char *eos = buf+buflen; + + buf[0] = '\0'; + if (! domain) + return buf; + while (1) { + const char *d; + int bit = tor_log2(domain); + size_t n; + if (bit >= N_LOGGING_DOMAINS) { + tor_snprintf(buf, buflen, "", (long)domain); + return buf+strlen(buf); + } + d = domain_list[bit]; + n = strlcpy(cp, d, eos-cp); + if (n >= buflen) { + tor_snprintf(buf, buflen, "", (long)domain); + return buf+strlen(buf); + } + cp += n; + domain &= ~(1<cfg_ptr. Advance cfg_ptr after * the end of the severityPattern. Set the value of severity_out to @@ -853,7 +1005,10 @@ smartlist_free(domains_list); if (err) return -1; - domains &= ~neg_domains; + if (domains == 0 && neg_domains) + domains = ~neg_domains; + else + domains &= ~neg_domains; cfg = eat_whitespace(closebracket+1); } else { ++got_an_unqualified_range; @@ -929,65 +1084,6 @@ UNLOCK_LOGS(); } -#ifdef HAVE_EVENT_SET_LOG_CALLBACK -/** A string which, if it appears in a libevent log, should be ignored. */ -static const char *suppress_msg = NULL; -/** Callback function passed to event_set_log() so we can intercept - * log messages from libevent. */ -static void -libevent_logging_callback(int severity, const char *msg) -{ - char buf[1024]; - size_t n; - if (suppress_msg && strstr(msg, suppress_msg)) - return; - n = strlcpy(buf, msg, sizeof(buf)); - if (n && n < sizeof(buf) && buf[n-1] == '\n') { - buf[n-1] = '\0'; - } - switch (severity) { - case _EVENT_LOG_DEBUG: - log(LOG_DEBUG, LD_NOCB|LD_NET, "Message from libevent: %s", buf); - break; - case _EVENT_LOG_MSG: - log(LOG_INFO, LD_NOCB|LD_NET, "Message from libevent: %s", buf); - break; - case _EVENT_LOG_WARN: - log(LOG_WARN, LD_NOCB|LD_GENERAL, "Warning from libevent: %s", buf); - break; - case _EVENT_LOG_ERR: - log(LOG_ERR, LD_NOCB|LD_GENERAL, "Error from libevent: %s", buf); - break; - default: - log(LOG_WARN, LD_NOCB|LD_GENERAL, "Message [%d] from libevent: %s", - severity, buf); - break; - } -} -/** Set hook to intercept log messages from libevent. */ -void -configure_libevent_logging(void) -{ - event_set_log_callback(libevent_logging_callback); -} -/** Ignore any libevent log message that contains msg. */ -void -suppress_libevent_log_msg(const char *msg) -{ - suppress_msg = msg; -} -#else -void -configure_libevent_logging(void) -{ -} -void -suppress_libevent_log_msg(const char *msg) -{ - (void)msg; -} -#endif - #if 0 static void dump_log_info(logfile_t *lf) diff -Nru tor-0.2.1.30/src/common/log.h tor-0.2.2.35/src/common/log.h --- tor-0.2.1.30/src/common/log.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/log.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -/* Copyright (c) 2001, Matej Pfajfar. - * Copyright (c) 2001-2004, Roger Dingledine. - * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. - * Copyright (c) 2007-2011, The Tor Project, Inc. */ -/* See LICENSE for licensing information */ - -/** - * \file log.h - * - * \brief Headers for log.c - **/ - -#ifndef _TOR_LOG_H - -#include "compat.h" - -#ifdef HAVE_SYSLOG_H -#include -#define LOG_WARN LOG_WARNING -#if LOG_DEBUG < LOG_ERR -#error "Your syslog.h thinks high numbers are more important. " \ - "We aren't prepared to deal with that." -#endif -#else -/* Note: Syslog's logging code refers to priorities, with 0 being the most - * important. Thus, all our comparisons needed to be reversed when we added - * syslog support. - * - * The upshot of this is that comments about log levels may be messed up: for - * "maximum severity" read "most severe" and "numerically *lowest* severity". - */ - -/** Debug-level severity: for hyper-verbose messages of no interest to - * anybody but developers. */ -#define LOG_DEBUG 7 -/** Info-level severity: for messages that appear frequently during normal - * operation. */ -#define LOG_INFO 6 -/** Notice-level severity: for messages that appear infrequently - * during normal operation; that the user will probably care about; - * and that are not errors. - */ -#define LOG_NOTICE 5 -/** Warn-level severity: for messages that only appear when something has gone - * wrong. */ -#define LOG_WARN 4 -/** Error-level severity: for messages that only appear when something has gone - * very wrong, and the Tor process can no longer proceed. */ -#define LOG_ERR 3 -#endif - -/* Logging domains */ - -/** Catch-all for miscellaneous events and fatal errors. */ -#define LD_GENERAL (1u<<0) -/** The cryptography subsystem. */ -#define LD_CRYPTO (1u<<1) -/** Networking. */ -#define LD_NET (1u<<2) -/** Parsing and acting on our configuration. */ -#define LD_CONFIG (1u<<3) -/** Reading and writing from the filesystem. */ -#define LD_FS (1u<<4) -/** Other servers' (non)compliance with the Tor protocol. */ -#define LD_PROTOCOL (1u<<5) -/** Memory management. */ -#define LD_MM (1u<<6) -/** HTTP implementation. */ -#define LD_HTTP (1u<<7) -/** Application (socks) requests. */ -#define LD_APP (1u<<8) -/** Communication via the controller protocol. */ -#define LD_CONTROL (1u<<9) -/** Building, using, and managing circuits. */ -#define LD_CIRC (1u<<10) -/** Hidden services. */ -#define LD_REND (1u<<11) -/** Internal errors in this Tor process. */ -#define LD_BUG (1u<<12) -/** Learning and using information about Tor servers. */ -#define LD_DIR (1u<<13) -/** Learning and using information about Tor servers. */ -#define LD_DIRSERV (1u<<14) -/** Onion routing protocol. */ -#define LD_OR (1u<<15) -/** Generic edge-connection functionality. */ -#define LD_EDGE (1u<<16) -#define LD_EXIT LD_EDGE -/** Bandwidth accounting. */ -#define LD_ACCT (1u<<17) -/** Router history */ -#define LD_HIST (1u<<18) - -/** Number of logging domains in the code. */ -#define N_LOGGING_DOMAINS 19 - -/** This log message is not safe to send to a callback-based logger. - * Used as a flag, not a log domain. */ -#define LD_NOCB (1u<<31) - -typedef uint32_t log_domain_mask_t; - -/** Configures which severities are logged for each logging domain for a given - * log target. */ -typedef struct log_severity_list_t { - /** For each log severity, a bitmask of which domains a given logger is - * logging. */ - log_domain_mask_t masks[LOG_DEBUG-LOG_ERR+1]; -} log_severity_list_t; - -#ifdef LOG_PRIVATE -/** Given a severity, yields an index into log_severity_list_t.masks to use - * for that severity. */ -#define SEVERITY_MASK_IDX(sev) ((sev) - LOG_ERR) -#endif - -/** Callback type used for add_callback_log. */ -typedef void (*log_callback)(int severity, uint32_t domain, const char *msg); - -void init_logging(void); -int parse_log_level(const char *level); -const char *log_level_to_string(int level); -int parse_log_severity_config(const char **cfg, - log_severity_list_t *severity_out); -void set_log_severity_config(int minSeverity, int maxSeverity, - log_severity_list_t *severity_out); -void add_stream_log(const log_severity_list_t *severity, const char *name, - int fd); -int add_file_log(const log_severity_list_t *severity, const char *filename); -#ifdef HAVE_SYSLOG_H -int add_syslog_log(const log_severity_list_t *severity); -#endif -int add_callback_log(const log_severity_list_t *severity, log_callback cb); -int get_min_log_level(void); -void switch_logs_debug(void); -void logs_free_all(void); -void add_temp_log(int min_severity); -void close_temp_logs(void); -void rollback_log_changes(void); -void mark_logs_temp(void); -void configure_libevent_logging(void); -void suppress_libevent_log_msg(const char *msg); -void change_callback_log_severity(int loglevelMin, int loglevelMax, - log_callback cb); -void log_set_application_name(const char *name); - -/* Outputs a message to stdout */ -void _log(int severity, log_domain_mask_t domain, const char *format, ...) - CHECK_PRINTF(3,4); -#define log _log /* hack it so we don't conflict with log() as much */ - -#ifdef __GNUC__ -extern int _log_global_min_severity; - -void _log_fn(int severity, log_domain_mask_t domain, - const char *funcname, const char *format, ...) - CHECK_PRINTF(4,5); -/** Log a message at level severity, using a pretty-printed version - * of the current function name. */ -#define log_fn(severity, domain, args...) \ - _log_fn(severity, domain, __PRETTY_FUNCTION__, args) -#define log_debug(domain, args...) \ - STMT_BEGIN \ - if (PREDICT_UNLIKELY(_log_global_min_severity == LOG_DEBUG)) \ - _log_fn(LOG_DEBUG, domain, __PRETTY_FUNCTION__, args); \ - STMT_END -#define log_info(domain, args...) \ - _log_fn(LOG_INFO, domain, __PRETTY_FUNCTION__, args) -#define log_notice(domain, args...) \ - _log_fn(LOG_NOTICE, domain, __PRETTY_FUNCTION__, args) -#define log_warn(domain, args...) \ - _log_fn(LOG_WARN, domain, __PRETTY_FUNCTION__, args) -#define log_err(domain, args...) \ - _log_fn(LOG_ERR, domain, __PRETTY_FUNCTION__, args) - -#else /* ! defined(__GNUC__) */ - -void _log_fn(int severity, log_domain_mask_t domain, const char *format, ...); -void _log_debug(log_domain_mask_t domain, const char *format, ...); -void _log_info(log_domain_mask_t domain, const char *format, ...); -void _log_notice(log_domain_mask_t domain, const char *format, ...); -void _log_warn(log_domain_mask_t domain, const char *format, ...); -void _log_err(log_domain_mask_t domain, const char *format, ...); - -#if defined(_MSC_VER) && _MSC_VER < 1300 -/* MSVC 6 and earlier don't have __func__, or even __LINE__. */ -#define log_fn _log_fn -#define log_debug _log_debug -#define log_info _log_info -#define log_notice _log_notice -#define log_warn _log_warn -#define log_err _log_err -#else -/* We don't have GCC's varargs macros, so use a global variable to pass the - * function name to log_fn */ -extern const char *_log_fn_function_name; -/* We abuse the comma operator here, since we can't use the standard - * do {...} while (0) trick to wrap this macro, since the macro can't take - * arguments. */ -#define log_fn (_log_fn_function_name=__func__),_log_fn -#define log_debug (_log_fn_function_name=__func__),_log_debug -#define log_info (_log_fn_function_name=__func__),_log_info -#define log_notice (_log_fn_function_name=__func__),_log_notice -#define log_warn (_log_fn_function_name=__func__),_log_warn -#define log_err (_log_fn_function_name=__func__),_log_err -#endif - -#endif /* !GNUC */ - -# define _TOR_LOG_H -#endif - diff -Nru tor-0.2.1.30/src/common/Makefile.am tor-0.2.2.35/src/common/Makefile.am --- tor-0.2.1.30/src/common/Makefile.am 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/Makefile.am 2011-12-15 16:28:37.000000000 +0000 @@ -1,5 +1,7 @@ -noinst_LIBRARIES = libor.a libor-crypto.a +noinst_LIBRARIES = libor.a libor-crypto.a libor-event.a + +EXTRA_DIST = common_sha1.i sha256.c #CFLAGS = -Wall -Wpointer-arith -O2 @@ -10,7 +12,21 @@ endif libor_a_SOURCES = address.c log.c util.c compat.c container.c mempool.c \ - memarea.c $(libor_extra_source) + memarea.c di_ops.c procmon.c util_codedigest.c $(libor_extra_source) libor_crypto_a_SOURCES = crypto.c aes.c tortls.c torgzip.c +libor_event_a_SOURCES = compat_libevent.c + +noinst_HEADERS = address.h torlog.h crypto.h util.h compat.h aes.h torint.h tortls.h strlcpy.c strlcat.c torgzip.h container.h ht.h mempool.h memarea.h ciphers.inc compat_libevent.h tortls_states.h di_ops.h procmon.h + +common_sha1.i: $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS) + if test "@SHA1SUM@" != none; then \ + @SHA1SUM@ $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS) | @SED@ -n 's/^\(.*\)$$/"\1\\n"/p' > common_sha1.i; \ + elif test "@OPENSSL@" != none; then \ + @OPENSSL@ sha1 $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS) | @SED@ -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > common_sha1.i; \ + else \ + rm common_sha1.i; \ + touch common_sha1.i; \ + fi -noinst_HEADERS = address.h log.h crypto.h test.h util.h compat.h aes.h torint.h tortls.h strlcpy.c strlcat.c torgzip.h container.h ht.h mempool.h memarea.h ciphers.inc +util_codedigest.o: common_sha1.i +crypto.o: sha256.c diff -Nru tor-0.2.1.30/src/common/Makefile.in tor-0.2.2.35/src/common/Makefile.in --- tor-0.2.1.30/src/common/Makefile.in 2011-02-23 08:25:53.000000000 +0000 +++ tor-0.2.2.35/src/common/Makefile.in 2011-12-15 17:01:54.000000000 +0000 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -17,8 +18,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -44,39 +46,51 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/orconfig.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) -AR = ar ARFLAGS = cru libor_crypto_a_AR = $(AR) $(ARFLAGS) libor_crypto_a_LIBADD = am_libor_crypto_a_OBJECTS = crypto.$(OBJEXT) aes.$(OBJEXT) \ tortls.$(OBJEXT) torgzip.$(OBJEXT) libor_crypto_a_OBJECTS = $(am_libor_crypto_a_OBJECTS) +libor_event_a_AR = $(AR) $(ARFLAGS) +libor_event_a_LIBADD = +am_libor_event_a_OBJECTS = compat_libevent.$(OBJEXT) +libor_event_a_OBJECTS = $(am_libor_event_a_OBJECTS) libor_a_AR = $(AR) $(ARFLAGS) libor_a_LIBADD = am__libor_a_SOURCES_DIST = address.c log.c util.c compat.c container.c \ - mempool.c memarea.c OpenBSD_malloc_Linux.c + mempool.c memarea.c di_ops.c procmon.c util_codedigest.c \ + OpenBSD_malloc_Linux.c @USE_OPENBSD_MALLOC_TRUE@am__objects_1 = \ @USE_OPENBSD_MALLOC_TRUE@ OpenBSD_malloc_Linux.$(OBJEXT) am_libor_a_OBJECTS = address.$(OBJEXT) log.$(OBJEXT) util.$(OBJEXT) \ compat.$(OBJEXT) container.$(OBJEXT) mempool.$(OBJEXT) \ - memarea.$(OBJEXT) $(am__objects_1) + memarea.$(OBJEXT) di_ops.$(OBJEXT) procmon.$(OBJEXT) \ + util_codedigest.$(OBJEXT) $(am__objects_1) libor_a_OBJECTS = $(am_libor_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libor_crypto_a_SOURCES) $(libor_a_SOURCES) -DIST_SOURCES = $(libor_crypto_a_SOURCES) $(am__libor_a_SOURCES_DIST) +SOURCES = $(libor_crypto_a_SOURCES) $(libor_event_a_SOURCES) \ + $(libor_a_SOURCES) +DIST_SOURCES = $(libor_crypto_a_SOURCES) $(libor_event_a_SOURCES) \ + $(am__libor_a_SOURCES_DIST) HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AR = @AR@ +ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -111,15 +125,19 @@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ +OPENSSL = @OPENSSL@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ +SHA1SUM = @SHA1SUM@ SHELL = @SHELL@ STRIP = @STRIP@ TORGROUP = @TORGROUP@ @@ -134,6 +152,7 @@ TOR_LIB_GDI = @TOR_LIB_GDI@ TOR_LIB_WS32 = @TOR_LIB_WS32@ TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ +TOR_ZLIB_LIBS = @TOR_ZLIB_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -182,18 +201,21 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -noinst_LIBRARIES = libor.a libor-crypto.a +noinst_LIBRARIES = libor.a libor-crypto.a libor-event.a +EXTRA_DIST = common_sha1.i sha256.c @USE_OPENBSD_MALLOC_FALSE@libor_extra_source = #CFLAGS = -Wall -Wpointer-arith -O2 @USE_OPENBSD_MALLOC_TRUE@libor_extra_source = OpenBSD_malloc_Linux.c libor_a_SOURCES = address.c log.c util.c compat.c container.c mempool.c \ - memarea.c $(libor_extra_source) + memarea.c di_ops.c procmon.c util_codedigest.c $(libor_extra_source) libor_crypto_a_SOURCES = crypto.c aes.c tortls.c torgzip.c -noinst_HEADERS = address.h log.h crypto.h test.h util.h compat.h aes.h torint.h tortls.h strlcpy.c strlcat.c torgzip.h container.h ht.h mempool.h memarea.h ciphers.inc +libor_event_a_SOURCES = compat_libevent.c +noinst_HEADERS = address.h torlog.h crypto.h util.h compat.h aes.h torint.h tortls.h strlcpy.c strlcat.c torgzip.h container.h ht.h mempool.h memarea.h ciphers.inc compat_libevent.h tortls_states.h di_ops.h procmon.h all: all-am .SUFFIXES: @@ -202,14 +224,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/common/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/common/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/common/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/common/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -227,6 +249,7 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) @@ -234,6 +257,10 @@ -rm -f libor-crypto.a $(libor_crypto_a_AR) libor-crypto.a $(libor_crypto_a_OBJECTS) $(libor_crypto_a_LIBADD) $(RANLIB) libor-crypto.a +libor-event.a: $(libor_event_a_OBJECTS) $(libor_event_a_DEPENDENCIES) + -rm -f libor-event.a + $(libor_event_a_AR) libor-event.a $(libor_event_a_OBJECTS) $(libor_event_a_LIBADD) + $(RANLIB) libor-event.a libor.a: $(libor_a_OBJECTS) $(libor_a_DEPENDENCIES) -rm -f libor.a $(libor_a_AR) libor.a $(libor_a_OBJECTS) $(libor_a_LIBADD) @@ -249,25 +276,29 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/address.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compat_libevent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/container.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypto.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/di_ops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memarea.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/procmon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/torgzip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tortls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util_codedigest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` @@ -277,14 +308,14 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ @@ -292,29 +323,34 @@ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -335,13 +371,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -369,6 +409,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -389,6 +430,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -397,18 +440,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -445,6 +498,20 @@ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am + +common_sha1.i: $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS) + if test "@SHA1SUM@" != none; then \ + @SHA1SUM@ $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS) | @SED@ -n 's/^\(.*\)$$/"\1\\n"/p' > common_sha1.i; \ + elif test "@OPENSSL@" != none; then \ + @OPENSSL@ sha1 $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS) | @SED@ -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > common_sha1.i; \ + else \ + rm common_sha1.i; \ + touch common_sha1.i; \ + fi + +util_codedigest.o: common_sha1.i +crypto.o: sha256.c + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru tor-0.2.1.30/src/common/memarea.c tor-0.2.2.35/src/common/memarea.c --- tor-0.2.1.30/src/common/memarea.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/memarea.c 2011-12-15 16:26:49.000000000 +0000 @@ -11,7 +11,11 @@ #include "memarea.h" #include "util.h" #include "compat.h" -#include "log.h" +#include "torlog.h" + +/** If true, we try to detect any attempts to write beyond the length of a + * memarea. */ +#define USE_SENTINELS /** All returned pointers should be aligned to the nearest multiple of this * value. */ @@ -25,13 +29,39 @@ #error "void* is neither 4 nor 8 bytes long. I don't know how to align stuff." #endif +#ifdef USE_SENTINELS +/** Magic value that we stick at the end of a memarea so we can make sure + * there are no run-off-the-end bugs. */ +#define SENTINEL_VAL 0x90806622u +/** How many bytes per area do we devote to the sentinel? */ +#define SENTINEL_LEN sizeof(uint32_t) +/** Given a mem_area_chunk_t with SENTINEL_LEN extra bytes allocated at the + * end, set those bytes. */ +#define SET_SENTINEL(chunk) \ + STMT_BEGIN \ + set_uint32( &(chunk)->u.mem[chunk->mem_size], SENTINEL_VAL ); \ + STMT_END +/** Assert that the sentinel on a memarea is set correctly. */ +#define CHECK_SENTINEL(chunk) \ + STMT_BEGIN \ + uint32_t sent_val = get_uint32(&(chunk)->u.mem[chunk->mem_size]); \ + tor_assert(sent_val == SENTINEL_VAL); \ + STMT_END +#else +#define SENTINEL_LEN 0 +#define SET_SENTINEL(chunk) STMT_NIL +#define CHECK_SENTINEL(chunk) STMT_NIL +#endif + /** Increment ptr until it is aligned to MEMAREA_ALIGN. */ static INLINE void * realign_pointer(void *ptr) { uintptr_t x = (uintptr_t)ptr; x = (x+MEMAREA_ALIGN_MASK) & ~MEMAREA_ALIGN_MASK; - tor_assert(((void*)x) >= ptr); // XXXX021 remove this once bug 930 is solved + /* Reinstate this if bug 930 ever reappears + tor_assert(((void*)x) >= ptr); + */ return (void*)x; } @@ -51,8 +81,11 @@ } u; } memarea_chunk_t; +/** How many bytes are needed for overhead before we get to the memory part + * of a chunk? */ #define CHUNK_HEADER_SIZE STRUCT_OFFSET(memarea_chunk_t, u) +/** What's the smallest that we'll allocate a chunk? */ #define CHUNK_SIZE 4096 /** A memarea_t is an allocation region for a set of small memory requests @@ -79,15 +112,20 @@ freelist = res->next_chunk; res->next_chunk = NULL; --freelist_len; + CHECK_SENTINEL(res); return res; } else { size_t chunk_size = freelist_ok ? CHUNK_SIZE : sz; - memarea_chunk_t *res = tor_malloc_roundup(&chunk_size); + memarea_chunk_t *res; + chunk_size += SENTINEL_LEN; + res = tor_malloc_roundup(&chunk_size); res->next_chunk = NULL; - res->mem_size = chunk_size - CHUNK_HEADER_SIZE; + res->mem_size = chunk_size - CHUNK_HEADER_SIZE - SENTINEL_LEN; res->next_mem = res->u.mem; - tor_assert(res->next_mem+res->mem_size == ((char*)res)+chunk_size); + tor_assert(res->next_mem+res->mem_size+SENTINEL_LEN == + ((char*)res)+chunk_size); tor_assert(realign_pointer(res->next_mem) == res->next_mem); + SET_SENTINEL(res); return res; } } @@ -95,8 +133,9 @@ /** Release chunk from a memarea, either by adding it to the freelist * or by freeing it if the freelist is already too big. */ static void -chunk_free(memarea_chunk_t *chunk) +chunk_free_unchecked(memarea_chunk_t *chunk) { + CHECK_SENTINEL(chunk); if (freelist_len < MAX_FREELIST_LEN) { ++freelist_len; chunk->next_chunk = freelist; @@ -124,7 +163,7 @@ memarea_chunk_t *chunk, *next; for (chunk = area->first; chunk; chunk = next) { next = chunk->next_chunk; - chunk_free(chunk); + chunk_free_unchecked(chunk); } area->first = NULL; /*fail fast on */ tor_free(area); @@ -140,7 +179,7 @@ if (area->first->next_chunk) { for (chunk = area->first->next_chunk; chunk; chunk = next) { next = chunk->next_chunk; - chunk_free(chunk); + chunk_free_unchecked(chunk); } area->first->next_chunk = NULL; } @@ -183,6 +222,7 @@ memarea_chunk_t *chunk = area->first; char *result; tor_assert(chunk); + CHECK_SENTINEL(chunk); tor_assert(sz < SIZE_T_CEILING); if (sz == 0) sz = 1; @@ -203,9 +243,10 @@ } result = chunk->next_mem; chunk->next_mem = chunk->next_mem + sz; - // XXXX021 remove these once bug 930 is solved. + /* Reinstate these if bug 930 ever comes back tor_assert(chunk->next_mem >= chunk->u.mem); tor_assert(chunk->next_mem <= chunk->u.mem+chunk->mem_size); + */ chunk->next_mem = realign_pointer(chunk->next_mem); return result; } @@ -261,6 +302,7 @@ size_t a = 0, u = 0; memarea_chunk_t *chunk; for (chunk = area->first; chunk; chunk = chunk->next_chunk) { + CHECK_SENTINEL(chunk); a += CHUNK_HEADER_SIZE + chunk->mem_size; tor_assert(chunk->next_mem >= chunk->u.mem); u += CHUNK_HEADER_SIZE + (chunk->next_mem - chunk->u.mem); @@ -277,6 +319,7 @@ tor_assert(area->first); for (chunk = area->first; chunk; chunk = chunk->next_chunk) { + CHECK_SENTINEL(chunk); tor_assert(chunk->next_mem >= chunk->u.mem); tor_assert(chunk->next_mem <= (char*) realign_pointer(chunk->u.mem+chunk->mem_size)); diff -Nru tor-0.2.1.30/src/common/mempool.c tor-0.2.2.35/src/common/mempool.c --- tor-0.2.1.30/src/common/mempool.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/mempool.c 2011-12-15 16:28:37.000000000 +0000 @@ -65,7 +65,7 @@ #include "orconfig.h" #include "util.h" #include "compat.h" -#include "log.h" +#include "torlog.h" #define ALLOC(x) tor_malloc(x) #define FREE(x) tor_free(x) #define ASSERT(x) tor_assert(x) diff -Nru tor-0.2.1.30/src/common/OpenBSD_malloc_Linux.c tor-0.2.2.35/src/common/OpenBSD_malloc_Linux.c --- tor-0.2.1.30/src/common/OpenBSD_malloc_Linux.c 2009-05-18 23:47:00.000000000 +0000 +++ tor-0.2.2.35/src/common/OpenBSD_malloc_Linux.c 2011-12-15 16:26:49.000000000 +0000 @@ -1236,7 +1236,7 @@ ptralloc = 1; size = malloc_pagesize; } - if ((size + malloc_pagesize) < size) { /* Check for overflow */ + if (size > SIZE_MAX - malloc_pagesize) { /* Check for overflow */ result = NULL; errno = ENOMEM; } else if (size <= malloc_maxsize) diff -Nru tor-0.2.1.30/src/common/procmon.c tor-0.2.2.35/src/common/procmon.c --- tor-0.2.1.30/src/common/procmon.c 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/procmon.c 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,336 @@ + +/** + * \file procmon.c + * \brief Process-termination monitor functions + **/ + +#include "procmon.h" + +#include "util.h" + +#ifdef HAVE_EVENT2_EVENT_H +#include +#else +#include +#endif + +#ifdef HAVE_SIGNAL_H +#include +#endif +#ifdef HAVE_ERRNO_H +#include +#endif + +#ifdef MS_WINDOWS +#include + +/* Windows does not define pid_t, but _getpid() returns an int. */ +typedef int pid_t; +#endif + +/* Define to 1 if process-termination monitors on this OS and Libevent + version must poll for process termination themselves. */ +#define PROCMON_POLLS 1 +/* Currently we need to poll in some way on all systems. */ + +#ifdef PROCMON_POLLS +static void tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2, + void *procmon_); +#endif + +/* This struct may contain pointers into the original process + * specifier string, but it should *never* contain anything which + * needs to be freed. */ +struct parsed_process_specifier_t { + pid_t pid; +}; + +/** Parse the process specifier given in process_spec into + * *ppspec. Return 0 on success; return -1 and store an error + * message into *msg on failure. The caller must not free the + * returned error message. */ +static int +parse_process_specifier(const char *process_spec, + struct parsed_process_specifier_t *ppspec, + const char **msg) +{ + long pid_l; + int pid_ok = 0; + char *pspec_next; + + /* If we're lucky, long will turn out to be large enough to hold a + * PID everywhere that Tor runs. */ + pid_l = tor_parse_long(process_spec, 0, 1, LONG_MAX, &pid_ok, &pspec_next); + + /* Reserve room in the ‘process specifier’ for additional + * (platform-specific) identifying information beyond the PID, to + * make our process-existence checks a bit less racy in a future + * version. */ + if ((*pspec_next != 0) && (*pspec_next != ' ') && (*pspec_next != ':')) { + pid_ok = 0; + } + + ppspec->pid = (pid_t)(pid_l); + if (!pid_ok || (pid_l != (long)(ppspec->pid))) { + *msg = "invalid PID"; + goto err; + } + + return 0; + err: + return -1; +} + +struct tor_process_monitor_t { + /** Log domain for warning messages. */ + log_domain_mask_t log_domain; + + /** All systems: The best we can do in general is poll for the + * process's existence by PID periodically, and hope that the kernel + * doesn't reassign the same PID to another process between our + * polls. */ + pid_t pid; + +#ifdef MS_WINDOWS + /** Windows-only: Should we poll hproc? If false, poll pid + * instead. */ + int poll_hproc; + + /** Windows-only: Get a handle to the process (if possible) and + * periodically check whether the process we have a handle to has + * ended. */ + HANDLE hproc; + /* XXX023 We can and should have Libevent watch hproc for us, + * if/when some version of Libevent 2.x can be told to do so. */ +#endif + + /* XXX023 On Linux, we can and should receive the 22nd + * (space-delimited) field (‘starttime’) of /proc/$PID/stat from the + * owning controller and store it, and poll once in a while to see + * whether it has changed -- if so, the kernel has *definitely* + * reassigned the owning controller's PID and we should exit. On + * FreeBSD, we can do the same trick using either the 8th + * space-delimited field of /proc/$PID/status on the seven FBSD + * systems whose admins have mounted procfs, or the start-time field + * of the process-information structure returned by kvmgetprocs() on + * any system. The latter is ickier. */ + /* XXX023 On FreeBSD (and possibly other kqueue systems), we can and + * should arrange to receive EVFILT_PROC NOTE_EXIT notifications for + * pid, so we don't have to do such a heavyweight poll operation in + * order to avoid the PID-reassignment race condition. (We would + * still need to poll our own kqueue periodically until some version + * of Libevent 2.x learns to receive these events for us.) */ + + /** A Libevent event structure, to either poll for the process's + * existence or receive a notification when the process ends. */ + struct event *e; + + /** A callback to be called when the process ends. */ + tor_procmon_callback_t cb; + void *cb_arg; /**< A user-specified pointer to be passed to cb. */ +}; + +/** Verify that the process specifier given in process_spec is + * syntactically valid. Return 0 on success; return -1 and store an + * error message into *msg on failure. The caller must not + * free the returned error message. */ +int +tor_validate_process_specifier(const char *process_spec, + const char **msg) +{ + struct parsed_process_specifier_t ppspec; + + tor_assert(msg != NULL); + *msg = NULL; + + return parse_process_specifier(process_spec, &ppspec, msg); +} + +#ifdef HAVE_EVENT2_EVENT_H +#define PERIODIC_TIMER_FLAGS EV_PERSIST +#else +#define PERIODIC_TIMER_FLAGS (0) +#endif + +static struct timeval poll_interval_tv = {15, 0}; +/* Note: If you port this file to plain Libevent 2, you can make + * poll_interval_tv const. It has to be non-const here because in + * libevent 1.x, event_add expects a pointer to a non-const struct + * timeval. */ + +/** Create a process-termination monitor for the process specifier + * given in process_spec. Return a newly allocated + * tor_process_monitor_t on success; return NULL and store an error + * message into *msg on failure. The caller must not free + * the returned error message. + * + * When the monitored process terminates, call + * cb(cb_arg). + */ +tor_process_monitor_t * +tor_process_monitor_new(struct event_base *base, + const char *process_spec, + log_domain_mask_t log_domain, + tor_procmon_callback_t cb, void *cb_arg, + const char **msg) +{ + tor_process_monitor_t *procmon = tor_malloc(sizeof(tor_process_monitor_t)); + struct parsed_process_specifier_t ppspec; + + tor_assert(msg != NULL); + *msg = NULL; + + if (procmon == NULL) { + *msg = "out of memory"; + goto err; + } + + procmon->log_domain = log_domain; + + if (parse_process_specifier(process_spec, &ppspec, msg)) + goto err; + + procmon->pid = ppspec.pid; + +#ifdef MS_WINDOWS + procmon->hproc = OpenProcess(PROCESS_QUERY_INFORMATION | SYNCHRONIZE, + FALSE, + procmon->pid); + + if (procmon->hproc != NULL) { + procmon->poll_hproc = 1; + log_info(procmon->log_domain, "Successfully opened handle to process %d; " + "monitoring it.", + (int)(procmon->pid)); + } else { + /* If we couldn't get a handle to the process, we'll try again the + * first time we poll. */ + log_info(procmon->log_domain, "Failed to open handle to process %d; will " + "try again later.", + (int)(procmon->pid)); + } +#endif + + procmon->cb = cb; + procmon->cb_arg = cb_arg; + +#ifdef PROCMON_POLLS + procmon->e = tor_event_new(base, -1 /* no FD */, PERIODIC_TIMER_FLAGS, + tor_process_monitor_poll_cb, procmon); + /* Note: If you port this file to plain Libevent 2, check that + * procmon->e is non-NULL. We don't need to here because + * tor_evtimer_new never returns NULL. */ + + evtimer_add(procmon->e, &poll_interval_tv); +#else +#error OOPS? +#endif + + return procmon; + err: + tor_process_monitor_free(procmon); + return NULL; +} + +#ifdef PROCMON_POLLS +/** Libevent callback to poll for the existence of the process + * monitored by procmon_. */ +static void +tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2, + void *procmon_) +{ + tor_process_monitor_t *procmon = (tor_process_monitor_t *)(procmon_); + int its_dead_jim; + + (void)unused1; (void)unused2; + + tor_assert(procmon != NULL); + +#ifdef MS_WINDOWS + if (procmon->poll_hproc) { + DWORD exit_code; + if (!GetExitCodeProcess(procmon->hproc, &exit_code)) { + char *errmsg = format_win32_error(GetLastError()); + log_warn(procmon->log_domain, "Error \"%s\" occurred while polling " + "handle for monitored process %d; assuming it's dead.", + errmsg, procmon->pid); + tor_free(errmsg); + its_dead_jim = 1; + } else { + its_dead_jim = (exit_code != STILL_ACTIVE); + } + } else { + /* All we can do is try to open the process, and look at the error + * code if it fails again. */ + procmon->hproc = OpenProcess(PROCESS_QUERY_INFORMATION | SYNCHRONIZE, + FALSE, + procmon->pid); + + if (procmon->hproc != NULL) { + log_info(procmon->log_domain, "Successfully opened handle to monitored " + "process %d.", + procmon->pid); + its_dead_jim = 0; + procmon->poll_hproc = 1; + } else { + DWORD err_code = GetLastError(); + char *errmsg = format_win32_error(err_code); + + /* When I tested OpenProcess's error codes on Windows 7, I + * received error code 5 (ERROR_ACCESS_DENIED) for PIDs of + * existing processes that I could not open and error code 87 + * (ERROR_INVALID_PARAMETER) for PIDs that were not in use. + * Since the nonexistent-process error code is sane, I'm going + * to assume that all errors other than ERROR_INVALID_PARAMETER + * mean that the process we are monitoring is still alive. */ + its_dead_jim = (err_code == ERROR_INVALID_PARAMETER); + + if (!its_dead_jim) + log_info(procmon->log_domain, "Failed to open handle to monitored " + "process %d, and error code %lu (%s) is not 'invalid " + "parameter' -- assuming the process is still alive.", + procmon->pid, + err_code, errmsg); + + tor_free(errmsg); + } + } +#else + /* Unix makes this part easy, if a bit racy. */ + its_dead_jim = kill(procmon->pid, 0); + its_dead_jim = its_dead_jim && (errno == ESRCH); +#endif + + log(its_dead_jim ? LOG_NOTICE : LOG_INFO, + procmon->log_domain, "Monitored process %d is %s.", + (int)procmon->pid, + its_dead_jim ? "dead" : "still alive"); + + if (its_dead_jim) { + procmon->cb(procmon->cb_arg); +#ifndef HAVE_EVENT2_EVENT_H + } else { + evtimer_add(procmon->e, &poll_interval_tv); +#endif + } +} +#endif + +/** Free the process-termination monitor procmon. */ +void +tor_process_monitor_free(tor_process_monitor_t *procmon) +{ + if (procmon == NULL) + return; + +#ifdef MS_WINDOWS + if (procmon->hproc != NULL) + CloseHandle(procmon->hproc); +#endif + + if (procmon->e != NULL) + tor_event_free(procmon->e); + + tor_free(procmon); +} + diff -Nru tor-0.2.1.30/src/common/procmon.h tor-0.2.2.35/src/common/procmon.h --- tor-0.2.1.30/src/common/procmon.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/procmon.h 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,30 @@ + +/** + * \file procmon.h + * \brief Headers for procmon.c + **/ + +#ifndef TOR_PROCMON_H +#define TOR_PROCMON_H + +#include "compat.h" +#include "compat_libevent.h" + +#include "torlog.h" + +typedef struct tor_process_monitor_t tor_process_monitor_t; + +typedef void (*tor_procmon_callback_t)(void *); + +int tor_validate_process_specifier(const char *process_spec, + const char **msg); +tor_process_monitor_t *tor_process_monitor_new(struct event_base *base, + const char *process_spec, + log_domain_mask_t log_domain, + tor_procmon_callback_t cb, + void *cb_arg, + const char **msg); +void tor_process_monitor_free(tor_process_monitor_t *procmon); + +#endif + diff -Nru tor-0.2.1.30/src/common/sha256.c tor-0.2.2.35/src/common/sha256.c --- tor-0.2.1.30/src/common/sha256.c 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/sha256.c 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,331 @@ +/* Copyright (c) 2009-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ +/* This SHA256 implementation is adapted from the public domain one in + LibTomCrypt, version 1.6. Tor uses it on platforms where OpenSSL doesn't + have a SHA256. */ + + +typedef struct sha256_state { + uint64_t length; + uint32_t state[8], curlen; + unsigned char buf[64]; +} sha256_state; + +#define CRYPT_OK 0 +#define CRYPT_NOP -1 +#define CRYPT_INVALID_ARG -2 + +#define LOAD32H(x,y) STMT_BEGIN x = ntohl(get_uint32((const char*)y)); STMT_END +#define STORE32H(x,y) STMT_BEGIN set_uint32((char*)y, htonl(x)); STMT_END +#define STORE64H(x,y) STMT_BEGIN \ + set_uint32((char*)y, htonl((uint32_t)((x)>>32))); \ + set_uint32(((char*)y)+4, htonl((uint32_t)((x)&0xffffffff))); \ + STMT_END +#define RORc(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL) +#ifndef MIN + #define MIN(x, y) ( ((x)<(y))?(x):(y) ) +#endif + + +/* LibTomCrypt, modular cryptographic library -- Tom St Denis + * + * LibTomCrypt is a library that provides various cryptographic + * algorithms in a highly modular and flexible manner. + * + * The library is free for all purposes without any express + * guarantee it works. + * + * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com + */ + +/** + @file sha256.c + SHA256 by Tom St Denis +*/ + + +#ifdef LTC_SMALL_CODE +/* the K array */ +static const uint32_t K[64] = { + 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL, + 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL, + 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, + 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, + 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL, + 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL, + 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, + 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, + 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL, + 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL, + 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, + 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, + 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +}; +#endif + +/* Various logical functions */ +#define Ch(x,y,z) (z ^ (x & (y ^ z))) +#define Maj(x,y,z) (((x | y) & z) | (x & y)) +#define S(x, n) RORc((x),(n)) +#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) +#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) +#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) +#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) +#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) + +/* compress 512-bits */ +#ifdef LTC_CLEAN_STACK +static int _sha256_compress(sha256_state * md, unsigned char *buf) +#else +static int sha256_compress(sha256_state * md, unsigned char *buf) +#endif +{ + uint32_t S[8], W[64], t0, t1; +#ifdef LTC_SMALL_CODE + uint32_t t; +#endif + int i; + + /* copy state into S */ + for (i = 0; i < 8; i++) { + S[i] = md->state[i]; + } + + /* copy the state into 512-bits into W[0..15] */ + for (i = 0; i < 16; i++) { + LOAD32H(W[i], buf + (4*i)); + } + + /* fill W[16..63] */ + for (i = 16; i < 64; i++) { + W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; + } + + /* Compress */ +#ifdef LTC_SMALL_CODE +#define RND(a,b,c,d,e,f,g,h,i) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + + for (i = 0; i < 64; ++i) { + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i); + t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4]; + S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t; + } +#else +#define RND(a,b,c,d,e,f,g,h,i,ki) \ + t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i]; \ + t1 = Sigma0(a) + Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; + + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x71374491); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcf); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba5); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25b); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b01); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a7); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c1); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc6); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dc); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c8); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf3); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x14292967); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a85); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b2138); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d13); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a7354); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c85); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a1); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664b); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a3); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd6990624); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e3585); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa070); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c08); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774c); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4a); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3); + RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee); + RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f); + RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814); + RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc70208); + RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa); + RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506ceb); + RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7); + RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2); + +#undef RND + +#endif + + /* feedback */ + for (i = 0; i < 8; i++) { + md->state[i] = md->state[i] + S[i]; + } + return CRYPT_OK; +} + +#ifdef LTC_CLEAN_STACK +static int sha256_compress(sha256_state * md, unsigned char *buf) +{ + int err; + err = _sha256_compress(md, buf); + burn_stack(sizeof(uint32_t) * 74); + return err; +} +#endif + +/** + Initialize the hash state + @param md The hash state you wish to initialize + @return CRYPT_OK if successful +*/ +static int sha256_init(sha256_state * md) +{ + LTC_ARGCHK(md != NULL); + + md->curlen = 0; + md->length = 0; + md->state[0] = 0x6A09E667UL; + md->state[1] = 0xBB67AE85UL; + md->state[2] = 0x3C6EF372UL; + md->state[3] = 0xA54FF53AUL; + md->state[4] = 0x510E527FUL; + md->state[5] = 0x9B05688CUL; + md->state[6] = 0x1F83D9ABUL; + md->state[7] = 0x5BE0CD19UL; + return CRYPT_OK; +} + +/** + Process a block of memory though the hash + @param md The hash state + @param in The data to hash + @param inlen The length of the data (octets) + @return CRYPT_OK if successful +*/ +static int sha256_process (sha256_state * md, const unsigned char *in, unsigned long inlen) +{ + unsigned long n; + int err; + LTC_ARGCHK(md != NULL); + LTC_ARGCHK(in != NULL); + if (md->curlen > sizeof(md->buf)) { + return CRYPT_INVALID_ARG; + } + while (inlen > 0) { + if (md->curlen == 0 && inlen >= 64) { + if ((err = sha256_compress (md, (unsigned char *)in)) != CRYPT_OK) { + return err; + } + md->length += 64 * 8; + in += 64; + inlen -= 64; + } else { + n = MIN(inlen, (64 - md->curlen)); + memcpy(md->buf + md->curlen, in, (size_t)n); + md->curlen += n; + in += n; + inlen -= n; + if (md->curlen == 64) { + if ((err = sha256_compress (md, md->buf)) != CRYPT_OK) { + return err; + } + md->length += 8*64; + md->curlen = 0; + } + } + } + return CRYPT_OK; +} + +/** + Terminate the hash to get the digest + @param md The hash state + @param out [out] The destination of the hash (32 bytes) + @return CRYPT_OK if successful +*/ +static int sha256_done(sha256_state * md, unsigned char *out) +{ + int i; + + LTC_ARGCHK(md != NULL); + LTC_ARGCHK(out != NULL); + + if (md->curlen >= sizeof(md->buf)) { + return CRYPT_INVALID_ARG; + } + + + /* increase the length of the message */ + md->length += md->curlen * 8; + + /* append the '1' bit */ + md->buf[md->curlen++] = (unsigned char)0x80; + + /* if the length is currently above 56 bytes we append zeros + * then compress. Then we can fall back to padding zeros and length + * encoding like normal. + */ + if (md->curlen > 56) { + while (md->curlen < 64) { + md->buf[md->curlen++] = (unsigned char)0; + } + sha256_compress(md, md->buf); + md->curlen = 0; + } + + /* pad upto 56 bytes of zeroes */ + while (md->curlen < 56) { + md->buf[md->curlen++] = (unsigned char)0; + } + + /* store length */ + STORE64H(md->length, md->buf+56); + sha256_compress(md, md->buf); + + /* copy output */ + for (i = 0; i < 8; i++) { + STORE32H(md->state[i], out+(4*i)); + } +#ifdef LTC_CLEAN_STACK + zeromem(md, sizeof(sha256_state)); +#endif + return CRYPT_OK; +} + +/* $Source: /cvs/libtom/libtomcrypt/src/hashes/sha2/sha256.c,v $ */ +/* $Revision: 1.9 $ */ +/* $Date: 2006/11/01 09:28:17 $ */ diff -Nru tor-0.2.1.30/src/common/test.h tor-0.2.2.35/src/common/test.h --- tor-0.2.1.30/src/common/test.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/test.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,184 +0,0 @@ -/* Copyright (c) 2001-2003, Roger Dingledine. - * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. - * Copyright (c) 2007-2011, The Tor Project, Inc. */ -/* See LICENSE for licensing information */ - -#ifndef _TOR_TEST_H -#define _TOR_TEST_H - -/** - * \file test.h - * \brief Macros used by unit tests. - */ - -#include "compat.h" - -#ifdef __GNUC__ -#define PRETTY_FUNCTION __PRETTY_FUNCTION__ -#else -#define PRETTY_FUNCTION "" -#endif - -#define test_fail_msg(msg) \ - STMT_BEGIN \ - have_failed = 1; \ - printf("\nFile %s: line %d (%s): %s", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - msg); \ - goto done; \ - STMT_END - -#define test_fail() test_fail_msg("Assertion failed.") - -#define test_assert(expr) \ - STMT_BEGIN \ - if (expr) { printf("."); fflush(stdout); } else { \ - have_failed = 1; \ - printf("\nFile %s: line %d (%s): assertion failed: (%s)\n", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - #expr); \ - goto done; \ - } STMT_END - -#define test_eq_type(tp, fmt, expr1, expr2) \ - STMT_BEGIN \ - tp _test_v1=(tp)(expr1); \ - tp _test_v2=(tp)(expr2); \ - if (_test_v1==_test_v2) { printf("."); fflush(stdout); } else { \ - have_failed = 1; \ - printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n" \ - " "fmt "!="fmt"\n", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - #expr1, #expr2, \ - _test_v1, _test_v2); \ - goto done; \ - } STMT_END - -#define test_eq(expr1, expr2) \ - test_eq_type(long, "%ld", expr1, expr2) - -#define test_eq_ptr(expr1, expr2) \ - test_eq_type(void*, "%p", expr1, expr2) - -#define test_neq_type(tp, fmt, expr1, expr2) \ - STMT_BEGIN \ - tp _test_v1=(tp)(expr1); \ - tp _test_v2=(tp)(expr2); \ - if (_test_v1!=_test_v2) { printf("."); fflush(stdout); } else { \ - have_failed = 1; \ - printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n" \ - " ("fmt" == "fmt")\n", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - #expr1, #expr2, \ - _test_v1, _test_v2); \ - goto done; \ - } STMT_END - -#define test_neq(expr1, expr2) \ - test_neq_type(long, "%ld", expr1, expr2) - -#define test_neq_ptr(expr1, expr2) \ - test_neq_type(void *, "%p", expr1, expr2) - -#define test_streq(expr1, expr2) \ - STMT_BEGIN \ - const char *_test_v1=(expr1), *_test_v2=(expr2); \ - if (!strcmp(_test_v1,_test_v2)) { printf("."); fflush(stdout); } else { \ - have_failed = 1; \ - printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n"\ - " (\"%s\" != \"%s\")\n", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - #expr1, #expr2, \ - _test_v1, _test_v2); \ - goto done; \ - } STMT_END - -#define test_strneq(expr1, expr2) \ - STMT_BEGIN \ - const char *_test_v1=(expr1), *_test_v2=(expr2); \ - if (strcmp(_test_v1,_test_v2)) { printf("."); fflush(stdout); } else { \ - have_failed = 1; \ - printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n"\ - " (\"%s\" == \"%s\")\n", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - #expr1, #expr2, \ - _test_v1, _test_v2); \ - goto done; \ - } STMT_END - -#define test_memeq(expr1, expr2, len) \ - STMT_BEGIN \ - const void *_test_v1=(expr1), *_test_v2=(expr2); \ - char *mem1, *mem2; \ - if (!memcmp(_test_v1,_test_v2,(len))) { \ - printf("."); fflush(stdout); } else { \ - have_failed = 1; \ - mem1 = tor_malloc(len*2+1); \ - mem2 = tor_malloc(len*2+1); \ - base16_encode(mem1, len*2+1, _test_v1, len); \ - base16_encode(mem2, len*2+1, _test_v2, len); \ - printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n" \ - " %s != %s\n", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - #expr1, #expr2, mem1, mem2); \ - tor_free(mem1); \ - tor_free(mem2); \ - goto done; \ - } STMT_END - -#define test_memeq_hex(expr1, hex) \ - STMT_BEGIN \ - const char *_test_v1 = (char*)(expr1); \ - const char *_test_v2 = (hex); \ - size_t _len_v2 = strlen(_test_v2); \ - char *_mem2 = tor_malloc(_len_v2/2); \ - tor_assert((_len_v2 & 1) == 0); \ - base16_decode(_mem2, _len_v2/2, _test_v2, _len_v2); \ - if (!memcmp(_mem2, _test_v1, _len_v2/2)) { \ - printf("."); fflush(stdout); } else { \ - char *_mem1 = tor_malloc(_len_v2+1); \ - base16_encode(_mem1, _len_v2+1, _test_v1, _len_v2/2); \ - printf("\nFile %s: line %d (%s): Assertion failed: (%s==%s)\n" \ - " %s != %s\n", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - #expr1, _test_v2, _mem1, _test_v2); \ - tor_free(_mem1); \ - tor_free(_mem2); \ - goto done; \ - } \ - tor_free(_mem2); \ - STMT_END - -#define test_memneq(expr1, expr2, len) \ - STMT_BEGIN \ - void *_test_v1=(expr1), *_test_v2=(expr2); \ - if (memcmp(_test_v1,_test_v2,(len))) { \ - printf("."); fflush(stdout); \ - } else { \ - have_failed = 1; \ - printf("\nFile %s: line %d (%s): Assertion failed: (%s!=%s)\n", \ - _SHORT_FILE_, \ - __LINE__, \ - PRETTY_FUNCTION, \ - #expr1, #expr2); \ - goto done; \ - } STMT_END - -#endif - diff -Nru tor-0.2.1.30/src/common/torgzip.c tor-0.2.2.35/src/common/torgzip.c --- tor-0.2.1.30/src/common/torgzip.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/torgzip.c 2011-12-15 16:28:37.000000000 +0000 @@ -13,20 +13,43 @@ #include #include #include -#ifdef _MSC_VER -#include "..\..\contrib\zlib\zlib.h" -#else -#include -#endif #include +#include "torint.h" + #ifdef HAVE_NETINET_IN_H #include #endif #include "util.h" -#include "log.h" +#include "torlog.h" #include "torgzip.h" +/* zlib 1.2.4 and 1.2.5 do some "clever" things with macros. Instead of + saying "(defined(FOO) ? FOO : 0)" they like to say "FOO-0", on the theory + that nobody will care if the compile outputs a no-such-identifier warning. + + Sorry, but we like -Werror over here, so I guess we need to define these. + I hope that zlib 1.2.6 doesn't break these too. +*/ +#ifndef _LARGEFILE64_SOURCE +#define _LARGEFILE64_SOURCE 0 +#endif +#ifndef _LFS64_LARGEFILE +#define _LFS64_LARGEFILE 0 +#endif +#ifndef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 0 +#endif +#ifndef off64_t +#define off64_t int64_t +#endif + +#ifdef _MSC_VER +#include "..\..\contrib\zlib\zlib.h" +#else +#include +#endif + /** Set to 1 if zlib is a version that supports gzip; set to 0 if it doesn't; * set to -1 if we haven't checked yet. */ static int gzip_is_supported = -1; @@ -57,6 +80,7 @@ return method == GZIP_METHOD ? 15+16 : 15; } +/** @{ */ /* These macros define the maximum allowable compression factor. Anything of * size greater than CHECK_FOR_COMPRESSION_BOMB_AFTER is not allowed to * have an uncompression factor (uncompressed size:compressed size ratio) of @@ -72,6 +96,7 @@ */ #define MAX_UNCOMPRESSION_FACTOR 25 #define CHECK_FOR_COMPRESSION_BOMB_AFTER (1024*64) +/** @} */ /** Return true if uncompressing an input of size in_size to an input * of size at least size_out looks like a compression bomb. */ @@ -198,9 +223,7 @@ deflateEnd(stream); tor_free(stream); } - if (*out) { - tor_free(*out); - } + tor_free(*out); return -1; } @@ -356,7 +379,7 @@ compress_method_t detect_compression_method(const char *in, size_t in_len) { - if (in_len > 2 && !memcmp(in, "\x1f\x8b", 2)) { + if (in_len > 2 && fast_memeq(in, "\x1f\x8b", 2)) { return GZIP_METHOD; } else if (in_len > 2 && (in[0] & 0x0f) == 8 && (ntohs(get_uint16(in)) % 31) == 0) { @@ -369,12 +392,12 @@ /** Internal state for an incremental zlib compression/decompression. The * body of this struct is not exposed. */ struct tor_zlib_state_t { - struct z_stream_s stream; - int compress; + struct z_stream_s stream; /**< The zlib stream */ + int compress; /**< True if we are compressing; false if we are inflating */ - /* Number of bytes read so far. Used to detect zlib bombs. */ + /** Number of bytes read so far. Used to detect zlib bombs. */ size_t input_so_far; - /* Number of bytes written so far. Used to detect zlib bombs. */ + /** Number of bytes written so far. Used to detect zlib bombs. */ size_t output_so_far; }; @@ -479,7 +502,8 @@ void tor_zlib_free(tor_zlib_state_t *state) { - tor_assert(state); + if (!state) + return; if (state->compress) deflateEnd(&state->stream); diff -Nru tor-0.2.1.30/src/common/torint.h tor-0.2.2.35/src/common/torint.h --- tor-0.2.1.30/src/common/torint.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/torint.h 2011-12-15 16:28:37.000000000 +0000 @@ -117,11 +117,10 @@ #ifndef INT32_MAX #define INT32_MAX 0x7fffffff #endif -#endif - #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif +#endif #if (SIZEOF_LONG == 4) #ifndef HAVE_INT32_T @@ -330,8 +329,10 @@ #endif #endif -/* Any size_t larger than this amount is likely to be an underflow. */ -#define SIZE_T_CEILING (SSIZE_T_MAX-16) +/** Any ssize_t larger than this amount is likely to be an underflow. */ +#define SSIZE_T_CEILING ((ssize_t)(SSIZE_T_MAX-16)) +/** Any size_t larger than this amount is likely to be an underflow. */ +#define SIZE_T_CEILING ((size_t)(SSIZE_T_MAX-16)) #endif /* __TORINT_H */ diff -Nru tor-0.2.1.30/src/common/torlog.h tor-0.2.2.35/src/common/torlog.h --- tor-0.2.1.30/src/common/torlog.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/torlog.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,213 @@ +/* Copyright (c) 2001, Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file torlog.h + * + * \brief Headers for log.c + **/ + +#ifndef _TOR_LOG_H + +#include "compat.h" + +#ifdef HAVE_SYSLOG_H +#include +#define LOG_WARN LOG_WARNING +#if LOG_DEBUG < LOG_ERR +#error "Your syslog.h thinks high numbers are more important. " \ + "We aren't prepared to deal with that." +#endif +#else +/* Note: Syslog's logging code refers to priorities, with 0 being the most + * important. Thus, all our comparisons needed to be reversed when we added + * syslog support. + * + * The upshot of this is that comments about log levels may be messed up: for + * "maximum severity" read "most severe" and "numerically *lowest* severity". + */ + +/** Debug-level severity: for hyper-verbose messages of no interest to + * anybody but developers. */ +#define LOG_DEBUG 7 +/** Info-level severity: for messages that appear frequently during normal + * operation. */ +#define LOG_INFO 6 +/** Notice-level severity: for messages that appear infrequently + * during normal operation; that the user will probably care about; + * and that are not errors. + */ +#define LOG_NOTICE 5 +/** Warn-level severity: for messages that only appear when something has gone + * wrong. */ +#define LOG_WARN 4 +/** Error-level severity: for messages that only appear when something has gone + * very wrong, and the Tor process can no longer proceed. */ +#define LOG_ERR 3 +#endif + +/* Logging domains */ + +/** Catch-all for miscellaneous events and fatal errors. */ +#define LD_GENERAL (1u<<0) +/** The cryptography subsystem. */ +#define LD_CRYPTO (1u<<1) +/** Networking. */ +#define LD_NET (1u<<2) +/** Parsing and acting on our configuration. */ +#define LD_CONFIG (1u<<3) +/** Reading and writing from the filesystem. */ +#define LD_FS (1u<<4) +/** Other servers' (non)compliance with the Tor protocol. */ +#define LD_PROTOCOL (1u<<5) +/** Memory management. */ +#define LD_MM (1u<<6) +/** HTTP implementation. */ +#define LD_HTTP (1u<<7) +/** Application (socks) requests. */ +#define LD_APP (1u<<8) +/** Communication via the controller protocol. */ +#define LD_CONTROL (1u<<9) +/** Building, using, and managing circuits. */ +#define LD_CIRC (1u<<10) +/** Hidden services. */ +#define LD_REND (1u<<11) +/** Internal errors in this Tor process. */ +#define LD_BUG (1u<<12) +/** Learning and using information about Tor servers. */ +#define LD_DIR (1u<<13) +/** Learning and using information about Tor servers. */ +#define LD_DIRSERV (1u<<14) +/** Onion routing protocol. */ +#define LD_OR (1u<<15) +/** Generic edge-connection functionality. */ +#define LD_EDGE (1u<<16) +#define LD_EXIT LD_EDGE +/** Bandwidth accounting. */ +#define LD_ACCT (1u<<17) +/** Router history */ +#define LD_HIST (1u<<18) +/** OR handshaking */ +#define LD_HANDSHAKE (1u<<19) +/** Number of logging domains in the code. */ +#define N_LOGGING_DOMAINS 20 + +/** This log message is not safe to send to a callback-based logger + * immediately. Used as a flag, not a log domain. */ +#define LD_NOCB (1u<<31) + +/** Mask of zero or more log domains, OR'd together. */ +typedef uint32_t log_domain_mask_t; + +/** Configures which severities are logged for each logging domain for a given + * log target. */ +typedef struct log_severity_list_t { + /** For each log severity, a bitmask of which domains a given logger is + * logging. */ + log_domain_mask_t masks[LOG_DEBUG-LOG_ERR+1]; +} log_severity_list_t; + +#ifdef LOG_PRIVATE +/** Given a severity, yields an index into log_severity_list_t.masks to use + * for that severity. */ +#define SEVERITY_MASK_IDX(sev) ((sev) - LOG_ERR) +#endif + +/** Callback type used for add_callback_log. */ +typedef void (*log_callback)(int severity, uint32_t domain, const char *msg); + +void init_logging(void); +int parse_log_level(const char *level); +const char *log_level_to_string(int level); +int parse_log_severity_config(const char **cfg, + log_severity_list_t *severity_out); +void set_log_severity_config(int minSeverity, int maxSeverity, + log_severity_list_t *severity_out); +void add_stream_log(const log_severity_list_t *severity, const char *name, + int fd); +int add_file_log(const log_severity_list_t *severity, const char *filename); +#ifdef HAVE_SYSLOG_H +int add_syslog_log(const log_severity_list_t *severity); +#endif +int add_callback_log(const log_severity_list_t *severity, log_callback cb); +void logs_set_domain_logging(int enabled); +int get_min_log_level(void); +void switch_logs_debug(void); +void logs_free_all(void); +void add_temp_log(int min_severity); +void close_temp_logs(void); +void rollback_log_changes(void); +void mark_logs_temp(void); +void change_callback_log_severity(int loglevelMin, int loglevelMax, + log_callback cb); +void flush_pending_log_callbacks(void); +void log_set_application_name(const char *name); + +void tor_log(int severity, log_domain_mask_t domain, const char *format, ...) + CHECK_PRINTF(3,4); +#define log tor_log /* hack it so we don't conflict with log() as much */ + +#ifdef __GNUC__ +extern int _log_global_min_severity; + +void _log_fn(int severity, log_domain_mask_t domain, + const char *funcname, const char *format, ...) + CHECK_PRINTF(4,5); +/** Log a message at level severity, using a pretty-printed version + * of the current function name. */ +#define log_fn(severity, domain, args...) \ + _log_fn(severity, domain, __PRETTY_FUNCTION__, args) +#define log_debug(domain, args...) \ + STMT_BEGIN \ + if (PREDICT_UNLIKELY(_log_global_min_severity == LOG_DEBUG)) \ + _log_fn(LOG_DEBUG, domain, __PRETTY_FUNCTION__, args); \ + STMT_END +#define log_info(domain, args...) \ + _log_fn(LOG_INFO, domain, __PRETTY_FUNCTION__, args) +#define log_notice(domain, args...) \ + _log_fn(LOG_NOTICE, domain, __PRETTY_FUNCTION__, args) +#define log_warn(domain, args...) \ + _log_fn(LOG_WARN, domain, __PRETTY_FUNCTION__, args) +#define log_err(domain, args...) \ + _log_fn(LOG_ERR, domain, __PRETTY_FUNCTION__, args) + +#else /* ! defined(__GNUC__) */ + +void _log_fn(int severity, log_domain_mask_t domain, const char *format, ...); +void _log_debug(log_domain_mask_t domain, const char *format, ...); +void _log_info(log_domain_mask_t domain, const char *format, ...); +void _log_notice(log_domain_mask_t domain, const char *format, ...); +void _log_warn(log_domain_mask_t domain, const char *format, ...); +void _log_err(log_domain_mask_t domain, const char *format, ...); + +#if defined(_MSC_VER) && _MSC_VER < 1300 +/* MSVC 6 and earlier don't have __func__, or even __LINE__. */ +#define log_fn _log_fn +#define log_debug _log_debug +#define log_info _log_info +#define log_notice _log_notice +#define log_warn _log_warn +#define log_err _log_err +#else +/* We don't have GCC's varargs macros, so use a global variable to pass the + * function name to log_fn */ +extern const char *_log_fn_function_name; +/* We abuse the comma operator here, since we can't use the standard + * do {...} while (0) trick to wrap this macro, since the macro can't take + * arguments. */ +#define log_fn (_log_fn_function_name=__func__),_log_fn +#define log_debug (_log_fn_function_name=__func__),_log_debug +#define log_info (_log_fn_function_name=__func__),_log_info +#define log_notice (_log_fn_function_name=__func__),_log_notice +#define log_warn (_log_fn_function_name=__func__),_log_warn +#define log_err (_log_fn_function_name=__func__),_log_err +#endif + +#endif /* !GNUC */ + +# define _TOR_LOG_H +#endif + diff -Nru tor-0.2.1.30/src/common/tortls.c tor-0.2.2.35/src/common/tortls.c --- tor-0.2.1.30/src/common/tortls.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/tortls.c 2011-12-15 16:28:37.000000000 +0000 @@ -16,6 +16,10 @@ #include "orconfig.h" +#if defined (WINCE) +#include +#endif + #include #ifdef MS_WINDOWS /*wrkard for dtls1.h >= 0.9.8m of "#include "*/ #define WIN32_WINNT 0x400 @@ -45,7 +49,7 @@ #include "crypto.h" #include "tortls.h" #include "util.h" -#include "log.h" +#include "torlog.h" #include "container.h" #include "ht.h" #include @@ -82,7 +86,9 @@ * SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION? */ static int use_unsafe_renegotiation_flag = 0; -/** Structure holding the TLS state for a single connection. */ +/** Holds a SSL_CTX object and related state used to configure TLS + * connections. + */ typedef struct tor_tls_context_t { int refcnt; SSL_CTX *ctx; @@ -184,10 +190,18 @@ const char *cname_sign, unsigned int lifetime); static void tor_tls_unblock_renegotiation(tor_tls_t *tls); - -/** Global tls context. We keep it here because nobody else needs to - * touch it. */ -static tor_tls_context_t *global_tls_context = NULL; +static int tor_tls_context_init_one(tor_tls_context_t **ppcontext, + crypto_pk_env_t *identity, + unsigned int key_lifetime, + int is_client); +static tor_tls_context_t *tor_tls_context_new(crypto_pk_env_t *identity, + unsigned int key_lifetime, + int is_client); + +/** Global TLS contexts. We keep them here because nobody else needs + * to touch them. */ +static tor_tls_context_t *server_tls_context = NULL; +static tor_tls_context_t *client_tls_context = NULL; /** True iff tor_tls_init() has been called. */ static int tls_library_is_initialized = 0; @@ -195,30 +209,51 @@ #define _TOR_TLS_SYSCALL (_MIN_TOR_TLS_ERROR_VAL - 2) #define _TOR_TLS_ZERORETURN (_MIN_TOR_TLS_ERROR_VAL - 1) +#include "tortls_states.h" + +/** Return the symbolic name of an OpenSSL state. */ +static const char * +ssl_state_to_string(int ssl_state) +{ + static char buf[40]; + int i; + for (i = 0; state_map[i].name; ++i) { + if (state_map[i].state == ssl_state) + return state_map[i].name; + } + tor_snprintf(buf, sizeof(buf), "Unknown state %d", ssl_state); + return buf; +} + /** Log all pending tls errors at level severity. Use * doing to describe our current activities. */ static void -tls_log_errors(tor_tls_t *tls, int severity, const char *doing) +tls_log_errors(tor_tls_t *tls, int severity, int domain, const char *doing) { + const char *state = NULL; + int st; unsigned long err; const char *msg, *lib, *func, *addr; addr = tls ? tls->address : NULL; + st = (tls && tls->ssl) ? tls->ssl->state : -1; while ((err = ERR_get_error()) != 0) { msg = (const char*)ERR_reason_error_string(err); lib = (const char*)ERR_lib_error_string(err); func = (const char*)ERR_func_error_string(err); + if (!state) + state = (st>=0)?ssl_state_to_string(st):"---"; if (!msg) msg = "(null)"; if (!lib) lib = "(null)"; if (!func) func = "(null)"; if (doing) { - log(severity, LD_NET, "TLS error while %s%s%s: %s (in %s:%s)", + log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)", doing, addr?" with ":"", addr?addr:"", - msg, lib, func); + msg, lib, func, state); } else { - log(severity, LD_NET, "TLS error%s%s: %s (in %s:%s)", + log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)", addr?" with ":"", addr?addr:"", - msg, lib, func); + msg, lib, func, state); } } } @@ -294,7 +329,7 @@ */ static int tor_tls_get_error(tor_tls_t *tls, int r, int extra, - const char *doing, int severity) + const char *doing, int severity, int domain) { int err = SSL_get_error(tls->ssl, r); int tor_error = TOR_TLS_ERROR_MISC; @@ -309,25 +344,28 @@ if (extra&CATCH_SYSCALL) return _TOR_TLS_SYSCALL; if (r == 0) { - log(severity, LD_NET, "TLS error: unexpected close while %s", doing); + log(severity, LD_NET, "TLS error: unexpected close while %s (%s)", + doing, ssl_state_to_string(tls->ssl->state)); tor_error = TOR_TLS_ERROR_IO; } else { int e = tor_socket_errno(tls->socket); log(severity, LD_NET, - "TLS error: (errno=%d: %s)", - doing, e, tor_socket_strerror(e)); + "TLS error: (errno=%d: %s; state=%s)", + doing, e, tor_socket_strerror(e), + ssl_state_to_string(tls->ssl->state)); tor_error = tor_errno_to_tls_error(e); } - tls_log_errors(tls, severity, doing); + tls_log_errors(tls, severity, domain, doing); return tor_error; case SSL_ERROR_ZERO_RETURN: if (extra&CATCH_ZERO) return _TOR_TLS_ZERORETURN; - log(severity, LD_NET, "TLS connection closed while %s", doing); - tls_log_errors(tls, severity, doing); + log(severity, LD_NET, "TLS connection closed while %s in state %s", + doing, ssl_state_to_string(tls->ssl->state)); + tls_log_errors(tls, severity, domain, doing); return TOR_TLS_CLOSE; default: - tls_log_errors(tls, severity, doing); + tls_log_errors(tls, severity, domain, doing); return TOR_TLS_ERROR_MISC; } } @@ -341,11 +379,10 @@ long version; SSL_library_init(); SSL_load_error_strings(); - crypto_global_init(-1); version = SSLeay(); - /* OpenSSL 0.9.8l introdeced SSL3_FLAGS_ALLOW_UNSAGE_LEGACY_RENEGOTIATION + /* OpenSSL 0.9.8l introduced SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION * here, but without thinking too hard about it: it turns out that the * flag in question needed to be set at the last minute, and that it * conflicted with an existing flag number that had already been added @@ -364,8 +401,8 @@ * leave their headers out of sync with their libraries. * * Yes, it _is_ almost as if the OpenSSL developers decided that no - * program should be allowed to use renegotiation its first passed an - * test of intelligence and determination. + * program should be allowed to use renegotiation unless it first passed + * a test of intelligence and determination. */ if (version >= 0x009080c0L && version < 0x009080d0L) { log_notice(LD_GENERAL, "OpenSSL %s looks like version 0.9.8l; " @@ -400,9 +437,15 @@ void tor_tls_free_all(void) { - if (global_tls_context) { - tor_tls_context_decref(global_tls_context); - global_tls_context = NULL; + if (server_tls_context) { + tor_tls_context_t *ctx = server_tls_context; + server_tls_context = NULL; + tor_tls_context_decref(ctx); + } + if (client_tls_context) { + tor_tls_context_t *ctx = client_tls_context; + client_tls_context = NULL; + tor_tls_context_decref(ctx); } if (!HT_EMPTY(&tlsmap_root)) { log_warn(LD_MM, "Still have entries in the tlsmap at shutdown."); @@ -511,7 +554,7 @@ x509 = NULL; } done: - tls_log_errors(NULL, LOG_WARN, "generating certificate"); + tls_log_errors(NULL, LOG_WARN, LD_NET, "generating certificate"); if (sign_pkey) EVP_PKEY_free(sign_pkey); if (pkey) @@ -528,9 +571,9 @@ (TLS1_TXT_DHE_RSA_WITH_AES_256_SHA ":" \ TLS1_TXT_DHE_RSA_WITH_AES_128_SHA ":" \ SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA) -/* Note: for setting up your own private testing network with link crypto - * disabled, set the cipher lists to your cipher list to - * SSL3_TXT_RSA_NULL_SHA. If you do this, you won't be able to communicate +/* Note: to set up your own private testing network with link crypto + * disabled, set your Tors' cipher list to + * (SSL3_TXT_RSA_NULL_SHA). If you do this, you won't be able to communicate * with any of the "real" Tors, though. */ #ifdef V2_HANDSHAKE_CLIENT @@ -589,16 +632,103 @@ ++ctx->refcnt; } -/** Create a new TLS context for use with Tor TLS handshakes. - * identity should be set to the identity key used to sign the - * certificate, and nickname set to the nickname to use. +/** Create new global client and server TLS contexts. + * + * If server_identity is NULL, this will not generate a server + * TLS context. If is_public_server is non-zero, this will use + * the same TLS context for incoming and outgoing connections, and + * ignore client_identity. */ +int +tor_tls_context_init(int is_public_server, + crypto_pk_env_t *client_identity, + crypto_pk_env_t *server_identity, + unsigned int key_lifetime) +{ + int rv1 = 0; + int rv2 = 0; + + if (is_public_server) { + tor_tls_context_t *new_ctx; + tor_tls_context_t *old_ctx; + + tor_assert(server_identity != NULL); + + rv1 = tor_tls_context_init_one(&server_tls_context, + server_identity, + key_lifetime, 0); + + if (rv1 >= 0) { + new_ctx = server_tls_context; + tor_tls_context_incref(new_ctx); + old_ctx = client_tls_context; + client_tls_context = new_ctx; + + if (old_ctx != NULL) { + tor_tls_context_decref(old_ctx); + } + } + } else { + if (server_identity != NULL) { + rv1 = tor_tls_context_init_one(&server_tls_context, + server_identity, + key_lifetime, + 0); + } else { + tor_tls_context_t *old_ctx = server_tls_context; + server_tls_context = NULL; + + if (old_ctx != NULL) { + tor_tls_context_decref(old_ctx); + } + } + + rv2 = tor_tls_context_init_one(&client_tls_context, + client_identity, + key_lifetime, + 1); + } + + return MIN(rv1, rv2); +} + +/** Create a new global TLS context. * * You can call this function multiple times. Each time you call it, * it generates new certificates; all new connections will use * the new SSL context. */ -int -tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime) +static int +tor_tls_context_init_one(tor_tls_context_t **ppcontext, + crypto_pk_env_t *identity, + unsigned int key_lifetime, + int is_client) +{ + tor_tls_context_t *new_ctx = tor_tls_context_new(identity, + key_lifetime, + is_client); + tor_tls_context_t *old_ctx = *ppcontext; + + if (new_ctx != NULL) { + *ppcontext = new_ctx; + + /* Free the old context if one existed. */ + if (old_ctx != NULL) { + /* This is safe even if there are open connections: we reference- + * count tor_tls_context_t objects. */ + tor_tls_context_decref(old_ctx); + } + } + + return ((new_ctx != NULL) ? 0 : -1); +} + +/** Create a new TLS context for use with Tor TLS handshakes. + * identity should be set to the identity key used to sign the + * certificate. + */ +static tor_tls_context_t * +tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime, + int is_client) { crypto_pk_env_t *rsa = NULL; EVP_PKEY *pkey = NULL; @@ -615,22 +745,26 @@ goto error; if (crypto_pk_generate_key(rsa)<0) goto error; - /* Create certificate signed by identity key. */ - cert = tor_tls_create_certificate(rsa, identity, nickname, nn2, - key_lifetime); - /* Create self-signed certificate for identity key. */ - idcert = tor_tls_create_certificate(identity, identity, nn2, nn2, - IDENTITY_CERT_LIFETIME); - if (!cert || !idcert) { - log(LOG_WARN, LD_CRYPTO, "Error creating certificate"); - goto error; + if (!is_client) { + /* Create certificate signed by identity key. */ + cert = tor_tls_create_certificate(rsa, identity, nickname, nn2, + key_lifetime); + /* Create self-signed certificate for identity key. */ + idcert = tor_tls_create_certificate(identity, identity, nn2, nn2, + IDENTITY_CERT_LIFETIME); + if (!cert || !idcert) { + log(LOG_WARN, LD_CRYPTO, "Error creating certificate"); + goto error; + } } result = tor_malloc_zero(sizeof(tor_tls_context_t)); result->refcnt = 1; - result->my_cert = X509_dup(cert); - result->my_id_cert = X509_dup(idcert); - result->key = crypto_pk_dup_key(rsa); + if (!is_client) { + result->my_cert = X509_dup(cert); + result->my_id_cert = X509_dup(idcert); + result->key = crypto_pk_dup_key(rsa); + } #ifdef EVERYONE_HAS_AES /* Tell OpenSSL to only use TLS1 */ @@ -662,29 +796,34 @@ #ifdef SSL_MODE_RELEASE_BUFFERS SSL_CTX_set_mode(result->ctx, SSL_MODE_RELEASE_BUFFERS); #endif - if (cert && !SSL_CTX_use_certificate(result->ctx,cert)) - goto error; - X509_free(cert); /* We just added a reference to cert. */ - cert=NULL; - if (idcert) { - X509_STORE *s = SSL_CTX_get_cert_store(result->ctx); - tor_assert(s); - X509_STORE_add_cert(s, idcert); - X509_free(idcert); /* The context now owns the reference to idcert */ - idcert = NULL; + if (! is_client) { + if (cert && !SSL_CTX_use_certificate(result->ctx,cert)) + goto error; + X509_free(cert); /* We just added a reference to cert. */ + cert=NULL; + if (idcert) { + X509_STORE *s = SSL_CTX_get_cert_store(result->ctx); + tor_assert(s); + X509_STORE_add_cert(s, idcert); + X509_free(idcert); /* The context now owns the reference to idcert */ + idcert = NULL; + } } SSL_CTX_set_session_cache_mode(result->ctx, SSL_SESS_CACHE_OFF); - tor_assert(rsa); - if (!(pkey = _crypto_pk_env_get_evp_pkey(rsa,1))) - goto error; - if (!SSL_CTX_use_PrivateKey(result->ctx, pkey)) - goto error; - EVP_PKEY_free(pkey); - pkey = NULL; - if (!SSL_CTX_check_private_key(result->ctx)) - goto error; + if (!is_client) { + tor_assert(rsa); + if (!(pkey = _crypto_pk_env_get_evp_pkey(rsa,1))) + goto error; + if (!SSL_CTX_use_PrivateKey(result->ctx, pkey)) + goto error; + EVP_PKEY_free(pkey); + pkey = NULL; + if (!SSL_CTX_check_private_key(result->ctx)) + goto error; + } { crypto_dh_env_t *dh = crypto_dh_new(DH_TYPE_TLS); + tor_assert(dh); SSL_CTX_set_tmp_dh(result->ctx, _crypto_dh_env_get_dh(dh)); crypto_dh_free(dh); } @@ -692,21 +831,15 @@ always_accept_verify_cb); /* let us realloc bufs that we're writing from */ SSL_CTX_set_mode(result->ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER); - /* Free the old context if one exists. */ - if (global_tls_context) { - /* This is safe even if there are open connections: OpenSSL does - * reference counting with SSL and SSL_CTX objects. */ - tor_tls_context_decref(global_tls_context); - } - global_tls_context = result; + if (rsa) crypto_free_pk_env(rsa); tor_free(nickname); tor_free(nn2); - return 0; + return result; error: - tls_log_errors(NULL, LOG_WARN, "creating TLS context"); + tls_log_errors(NULL, LOG_WARN, LD_NET, "creating TLS context"); tor_free(nickname); tor_free(nn2); if (pkey) @@ -719,7 +852,7 @@ X509_free(cert); if (idcert) X509_free(idcert); - return -1; + return NULL; } #ifdef V2_HANDSHAKE_SERVER @@ -734,11 +867,11 @@ /* If we reached this point, we just got a client hello. See if there is * a cipher list. */ if (!(session = SSL_get_session((SSL *)ssl))) { - log_warn(LD_NET, "No session on TLS?"); + log_info(LD_NET, "No session on TLS?"); return 0; } if (!session->ciphers) { - log_warn(LD_NET, "No ciphers on session"); + log_info(LD_NET, "No ciphers on session"); return 0; } /* Now we need to see if there are any ciphers whose presence means we're @@ -750,8 +883,7 @@ strcmp(ciphername, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA) && strcmp(ciphername, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA) && strcmp(ciphername, "(NONE)")) { - /* XXXX should be ld_debug */ - log_info(LD_NET, "Got a non-version-1 cipher called '%s'", ciphername); + log_debug(LD_NET, "Got a non-version-1 cipher called '%s'", ciphername); // return 1; goto dump_list; } @@ -767,8 +899,8 @@ smartlist_add(elts, (char*)ciphername); } s = smartlist_join_strings(elts, ":", 0, NULL); - log_info(LD_NET, "Got a non-version-1 cipher list from %s. It is: '%s'", - address, s); + log_debug(LD_NET, "Got a non-version-1 cipher list from %s. It is: '%s'", + address, s); tor_free(s); smartlist_free(elts); } @@ -899,10 +1031,12 @@ { BIO *bio = NULL; tor_tls_t *result = tor_malloc_zero(sizeof(tor_tls_t)); + tor_tls_context_t *context = isServer ? server_tls_context : + client_tls_context; - tor_assert(global_tls_context); /* make sure somebody made it first */ - if (!(result->ssl = SSL_new(global_tls_context->ctx))) { - tls_log_errors(NULL, LOG_WARN, "generating TLS context"); + tor_assert(context); /* make sure somebody made it first */ + if (!(result->ssl = SSL_new(context->ctx))) { + tls_log_errors(NULL, LOG_WARN, LD_NET, "creating SSL object"); tor_free(result); return NULL; } @@ -918,7 +1052,7 @@ if (!SSL_set_cipher_list(result->ssl, isServer ? SERVER_CIPHER_LIST : CLIENT_CIPHER_LIST)) { - tls_log_errors(NULL, LOG_WARN, "setting ciphers"); + tls_log_errors(NULL, LOG_WARN, LD_NET, "setting ciphers"); #ifdef SSL_set_tlsext_host_name SSL_set_tlsext_host_name(result->ssl, NULL); #endif @@ -931,7 +1065,7 @@ result->socket = sock; bio = BIO_new_socket(sock, BIO_NOCLOSE); if (! bio) { - tls_log_errors(NULL, LOG_WARN, "opening BIO"); + tls_log_errors(NULL, LOG_WARN, LD_NET, "opening BIO"); #ifdef SSL_set_tlsext_host_name SSL_set_tlsext_host_name(result->ssl, NULL); #endif @@ -941,8 +1075,8 @@ } HT_INSERT(tlsmap, &tlsmap_root, result); SSL_set_bio(result->ssl, bio, bio); - tor_tls_context_incref(global_tls_context); - result->context = global_tls_context; + tor_tls_context_incref(context); + result->context = context; result->state = TOR_TLS_ST_HANDSHAKE; result->isServer = isServer; result->wantwrite_n = 0; @@ -959,7 +1093,7 @@ #endif /* Not expected to get called. */ - tls_log_errors(NULL, LOG_WARN, "generating TLS context"); + tls_log_errors(NULL, LOG_WARN, LD_NET, "creating tor_tls_t object"); return result; } @@ -1038,7 +1172,9 @@ tor_tls_free(tor_tls_t *tls) { tor_tls_t *removed; - tor_assert(tls && tls->ssl); + if (!tls) + return; + tor_assert(tls->ssl); removed = HT_REMOVE(tlsmap, &tlsmap_root, tls); if (!removed) { log_warn(LD_BUG, "Freeing a TLS that was not in the ssl->tls map."); @@ -1081,7 +1217,7 @@ #endif return r; } - err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading", LOG_DEBUG); + err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading", LOG_DEBUG, LD_NET); if (err == _TOR_TLS_ZERORETURN || err == TOR_TLS_CLOSE) { log_debug(LD_NET,"read returned r=%d; TLS is closed",r); tls->state = TOR_TLS_ST_CLOSED; @@ -1117,7 +1253,7 @@ tls->wantwrite_n = 0; } r = SSL_write(tls->ssl, cp, (int)n); - err = tor_tls_get_error(tls, r, 0, "writing", LOG_INFO); + err = tor_tls_get_error(tls, r, 0, "writing", LOG_INFO, LD_NET); if (err == TOR_TLS_DONE) { return r; } @@ -1135,21 +1271,30 @@ tor_tls_handshake(tor_tls_t *tls) { int r; + int oldstate; tor_assert(tls); tor_assert(tls->ssl); tor_assert(tls->state == TOR_TLS_ST_HANDSHAKE); check_no_tls_errors(); + oldstate = tls->ssl->state; if (tls->isServer) { + log_debug(LD_HANDSHAKE, "About to call SSL_accept on %p (%s)", tls, + ssl_state_to_string(tls->ssl->state)); r = SSL_accept(tls->ssl); } else { + log_debug(LD_HANDSHAKE, "About to call SSL_connect on %p (%s)", tls, + ssl_state_to_string(tls->ssl->state)); r = SSL_connect(tls->ssl); } + if (oldstate != tls->ssl->state) + log_debug(LD_HANDSHAKE, "After call, %p was in state %s", + tls, ssl_state_to_string(tls->ssl->state)); /* We need to call this here and not earlier, since OpenSSL has a penchant * for clearing its flags when you say accept or connect. */ tor_tls_unblock_renegotiation(tls); - r = tor_tls_get_error(tls,r,0, "handshaking", LOG_INFO); + r = tor_tls_get_error(tls,r,0, "handshaking", LOG_INFO, LD_HANDSHAKE); if (ERR_peek_error() != 0) { - tls_log_errors(tls, tls->isServer ? LOG_INFO : LOG_WARN, + tls_log_errors(tls, tls->isServer ? LOG_INFO : LOG_WARN, LD_HANDSHAKE, "handshaking"); return TOR_TLS_ERROR_MISC; } @@ -1170,7 +1315,8 @@ " get set. Fixing that."); } tls->wasV2Handshake = 1; - log_debug(LD_NET, "Completed V2 TLS handshake with client; waiting " + log_debug(LD_HANDSHAKE, + "Completed V2 TLS handshake with client; waiting " "for renegotiation."); } else { tls->wasV2Handshake = 0; @@ -1182,10 +1328,13 @@ X509 *cert = SSL_get_peer_certificate(tls->ssl); STACK_OF(X509) *chain = SSL_get_peer_cert_chain(tls->ssl); int n_certs = sk_X509_num(chain); - if (n_certs > 1 || (n_certs == 1 && cert != sk_X509_value(chain, 0))) + if (n_certs > 1 || (n_certs == 1 && cert != sk_X509_value(chain, 0))) { + log_debug(LD_HANDSHAKE, "Server sent back multiple certificates; it " + "looks like a v1 handshake on %p", tls); tls->wasV2Handshake = 0; - else { - log_debug(LD_NET, "Server sent back a single certificate; looks like " + } else { + log_debug(LD_HANDSHAKE, + "Server sent back a single certificate; looks like " "a v2 handshake on %p.", tls); tls->wasV2Handshake = 1; } @@ -1193,7 +1342,7 @@ X509_free(cert); #endif if (SSL_set_cipher_list(tls->ssl, SERVER_CIPHER_LIST) == 0) { - tls_log_errors(NULL, LOG_WARN, "re-setting ciphers"); + tls_log_errors(NULL, LOG_WARN, LD_HANDSHAKE, "re-setting ciphers"); r = TOR_TLS_ERROR_MISC; } } @@ -1216,7 +1365,8 @@ if (tls->state != TOR_TLS_ST_RENEGOTIATE) { int r = SSL_renegotiate(tls->ssl); if (r <= 0) { - return tor_tls_get_error(tls, r, 0, "renegotiating", LOG_WARN); + return tor_tls_get_error(tls, r, 0, "renegotiating", LOG_WARN, + LD_HANDSHAKE); } tls->state = TOR_TLS_ST_RENEGOTIATE; } @@ -1225,7 +1375,8 @@ tls->state = TOR_TLS_ST_OPEN; return TOR_TLS_DONE; } else - return tor_tls_get_error(tls, r, 0, "renegotiating handshake", LOG_INFO); + return tor_tls_get_error(tls, r, 0, "renegotiating handshake", LOG_INFO, + LD_HANDSHAKE); } /** Shut down an open tls connection tls. When finished, returns @@ -1249,7 +1400,7 @@ r = SSL_read(tls->ssl, buf, 128); } while (r>0); err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading to shut down", - LOG_INFO); + LOG_INFO, LD_NET); if (err == _TOR_TLS_ZERORETURN) { tls->state = TOR_TLS_ST_GOTCLOSE; /* fall through... */ @@ -1265,7 +1416,7 @@ return TOR_TLS_DONE; } err = tor_tls_get_error(tls, r, CATCH_SYSCALL|CATCH_ZERO, "shutting down", - LOG_INFO); + LOG_INFO, LD_NET); if (err == _TOR_TLS_SYSCALL) { /* The underlying TCP connection closed while we were shutting down. */ tls->state = TOR_TLS_ST_CLOSED; @@ -1297,7 +1448,7 @@ { X509 *cert; cert = SSL_get_peer_certificate(tls->ssl); - tls_log_errors(tls, LOG_WARN, "getting peer certificate"); + tls_log_errors(tls, LOG_WARN, LD_HANDSHAKE, "getting peer certificate"); if (!cert) return 0; X509_free(cert); @@ -1324,7 +1475,7 @@ log_warn(LD_GENERAL, "Couldn't allocate BIO!"); goto end; } if (!(ASN1_TIME_print(bio, X509_get_notBefore(cert)))) { - tls_log_errors(NULL, LOG_WARN, "printing certificate lifetime"); + tls_log_errors(NULL, LOG_WARN, LD_NET, "printing certificate lifetime"); goto end; } BIO_get_mem_ptr(bio, &buf); @@ -1332,7 +1483,7 @@ (void)BIO_reset(bio); if (!(ASN1_TIME_print(bio, X509_get_notAfter(cert)))) { - tls_log_errors(NULL, LOG_WARN, "printing certificate lifetime"); + tls_log_errors(NULL, LOG_WARN, LD_NET, "printing certificate lifetime"); goto end; } BIO_get_mem_ptr(bio, &buf); @@ -1346,13 +1497,11 @@ end: /* Not expected to get invoked */ - tls_log_errors(NULL, LOG_WARN, "getting certificate lifetime"); + tls_log_errors(NULL, LOG_WARN, LD_NET, "getting certificate lifetime"); if (bio) BIO_free(bio); - if (s1) - tor_free(s1); - if (s2) - tor_free(s2); + tor_free(s1); + tor_free(s2); } /** Helper function: try to extract a link certificate and an identity @@ -1420,7 +1569,7 @@ if (!(id_pkey = X509_get_pubkey(id_cert)) || X509_verify(cert, id_pkey) <= 0) { log_fn(severity,LD_PROTOCOL,"X509_verify on cert and pkey returned <= 0"); - tls_log_errors(tls, severity,"verifying certificate"); + tls_log_errors(tls, severity, LD_HANDSHAKE, "verifying certificate"); goto done; } @@ -1439,7 +1588,7 @@ /* This should never get invoked, but let's make sure in case OpenSSL * acts unexpectedly. */ - tls_log_errors(tls, LOG_WARN, "finishing tor_tls_verify"); + tls_log_errors(tls, LOG_WARN, LD_HANDSHAKE, "finishing tor_tls_verify"); return r; } @@ -1478,7 +1627,7 @@ if (cert) X509_free(cert); /* Not expected to get invoked */ - tls_log_errors(tls, LOG_WARN, "checking certificate lifetime"); + tls_log_errors(tls, LOG_WARN, LD_NET, "checking certificate lifetime"); return r; } @@ -1546,7 +1695,7 @@ return; log(LOG_WARN, LD_CRYPTO, "Unhandled OpenSSL errors found at %s:%d: ", tor_fix_source_file(fname), line); - tls_log_errors(NULL, LOG_WARN, NULL); + tls_log_errors(NULL, LOG_WARN, LD_NET, NULL); } /** Return true iff the initial TLS connection at tls did not use a v2 diff -Nru tor-0.2.1.30/src/common/tortls.h tor-0.2.2.35/src/common/tortls.h --- tor-0.2.1.30/src/common/tortls.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/tortls.h 2011-12-15 16:28:37.000000000 +0000 @@ -50,7 +50,10 @@ const char *tor_tls_err_to_string(int err); void tor_tls_free_all(void); -int tor_tls_context_new(crypto_pk_env_t *rsa, unsigned int key_lifetime); +int tor_tls_context_init(int is_public_server, + crypto_pk_env_t *client_identity, + crypto_pk_env_t *server_identity, + unsigned int key_lifetime); tor_tls_t *tor_tls_new(int sock, int is_server); void tor_tls_set_logged_address(tor_tls_t *tls, const char *address); void tor_tls_set_renegotiate_callback(tor_tls_t *tls, diff -Nru tor-0.2.1.30/src/common/tortls_states.h tor-0.2.2.35/src/common/tortls_states.h --- tor-0.2.1.30/src/common/tortls_states.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/tortls_states.h 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,414 @@ +/* Copyright (c) 2003, Roger Dingledine + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/* Helper file: included only in tortls.c */ + +#ifndef _TORTLS_STATES_H +#define _TORTLS_STATES_H + +/* The main body of this file was mechanically generated with this + perl script: + + my %keys = (); + for $fn (@ARGV) { + open(F, $fn); + while () { + next unless /^#define ((?:SSL|DTLS)\w*_ST_\w*)/; + $keys{$1} = 1; + } + close(F); + } + for $k (sort keys %keys) { + print "#ifdef $k\n S($k),\n#endif\n" + } +*/ + +/** Mapping from allowed value of SSL.state to the name of C macro for that + * state. Used for debugging an openssl connection. */ +static const struct { int state; const char *name; } state_map[] = { +#define S(state) { state, #state } +#ifdef DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A + S(DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A), +#endif +#ifdef DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B + S(DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B), +#endif +#ifdef DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A + S(DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A), +#endif +#ifdef DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B + S(DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B), +#endif +#ifdef SSL23_ST_CR_SRVR_HELLO_A + S(SSL23_ST_CR_SRVR_HELLO_A), +#endif +#ifdef SSL23_ST_CR_SRVR_HELLO_B + S(SSL23_ST_CR_SRVR_HELLO_B), +#endif +#ifdef SSL23_ST_CW_CLNT_HELLO_A + S(SSL23_ST_CW_CLNT_HELLO_A), +#endif +#ifdef SSL23_ST_CW_CLNT_HELLO_B + S(SSL23_ST_CW_CLNT_HELLO_B), +#endif +#ifdef SSL23_ST_SR_CLNT_HELLO_A + S(SSL23_ST_SR_CLNT_HELLO_A), +#endif +#ifdef SSL23_ST_SR_CLNT_HELLO_B + S(SSL23_ST_SR_CLNT_HELLO_B), +#endif +#ifdef SSL2_ST_CLIENT_START_ENCRYPTION + S(SSL2_ST_CLIENT_START_ENCRYPTION), +#endif +#ifdef SSL2_ST_GET_CLIENT_FINISHED_A + S(SSL2_ST_GET_CLIENT_FINISHED_A), +#endif +#ifdef SSL2_ST_GET_CLIENT_FINISHED_B + S(SSL2_ST_GET_CLIENT_FINISHED_B), +#endif +#ifdef SSL2_ST_GET_CLIENT_HELLO_A + S(SSL2_ST_GET_CLIENT_HELLO_A), +#endif +#ifdef SSL2_ST_GET_CLIENT_HELLO_B + S(SSL2_ST_GET_CLIENT_HELLO_B), +#endif +#ifdef SSL2_ST_GET_CLIENT_HELLO_C + S(SSL2_ST_GET_CLIENT_HELLO_C), +#endif +#ifdef SSL2_ST_GET_CLIENT_MASTER_KEY_A + S(SSL2_ST_GET_CLIENT_MASTER_KEY_A), +#endif +#ifdef SSL2_ST_GET_CLIENT_MASTER_KEY_B + S(SSL2_ST_GET_CLIENT_MASTER_KEY_B), +#endif +#ifdef SSL2_ST_GET_SERVER_FINISHED_A + S(SSL2_ST_GET_SERVER_FINISHED_A), +#endif +#ifdef SSL2_ST_GET_SERVER_FINISHED_B + S(SSL2_ST_GET_SERVER_FINISHED_B), +#endif +#ifdef SSL2_ST_GET_SERVER_HELLO_A + S(SSL2_ST_GET_SERVER_HELLO_A), +#endif +#ifdef SSL2_ST_GET_SERVER_HELLO_B + S(SSL2_ST_GET_SERVER_HELLO_B), +#endif +#ifdef SSL2_ST_GET_SERVER_VERIFY_A + S(SSL2_ST_GET_SERVER_VERIFY_A), +#endif +#ifdef SSL2_ST_GET_SERVER_VERIFY_B + S(SSL2_ST_GET_SERVER_VERIFY_B), +#endif +#ifdef SSL2_ST_SEND_CLIENT_CERTIFICATE_A + S(SSL2_ST_SEND_CLIENT_CERTIFICATE_A), +#endif +#ifdef SSL2_ST_SEND_CLIENT_CERTIFICATE_B + S(SSL2_ST_SEND_CLIENT_CERTIFICATE_B), +#endif +#ifdef SSL2_ST_SEND_CLIENT_CERTIFICATE_C + S(SSL2_ST_SEND_CLIENT_CERTIFICATE_C), +#endif +#ifdef SSL2_ST_SEND_CLIENT_CERTIFICATE_D + S(SSL2_ST_SEND_CLIENT_CERTIFICATE_D), +#endif +#ifdef SSL2_ST_SEND_CLIENT_FINISHED_A + S(SSL2_ST_SEND_CLIENT_FINISHED_A), +#endif +#ifdef SSL2_ST_SEND_CLIENT_FINISHED_B + S(SSL2_ST_SEND_CLIENT_FINISHED_B), +#endif +#ifdef SSL2_ST_SEND_CLIENT_HELLO_A + S(SSL2_ST_SEND_CLIENT_HELLO_A), +#endif +#ifdef SSL2_ST_SEND_CLIENT_HELLO_B + S(SSL2_ST_SEND_CLIENT_HELLO_B), +#endif +#ifdef SSL2_ST_SEND_CLIENT_MASTER_KEY_A + S(SSL2_ST_SEND_CLIENT_MASTER_KEY_A), +#endif +#ifdef SSL2_ST_SEND_CLIENT_MASTER_KEY_B + S(SSL2_ST_SEND_CLIENT_MASTER_KEY_B), +#endif +#ifdef SSL2_ST_SEND_REQUEST_CERTIFICATE_A + S(SSL2_ST_SEND_REQUEST_CERTIFICATE_A), +#endif +#ifdef SSL2_ST_SEND_REQUEST_CERTIFICATE_B + S(SSL2_ST_SEND_REQUEST_CERTIFICATE_B), +#endif +#ifdef SSL2_ST_SEND_REQUEST_CERTIFICATE_C + S(SSL2_ST_SEND_REQUEST_CERTIFICATE_C), +#endif +#ifdef SSL2_ST_SEND_REQUEST_CERTIFICATE_D + S(SSL2_ST_SEND_REQUEST_CERTIFICATE_D), +#endif +#ifdef SSL2_ST_SEND_SERVER_FINISHED_A + S(SSL2_ST_SEND_SERVER_FINISHED_A), +#endif +#ifdef SSL2_ST_SEND_SERVER_FINISHED_B + S(SSL2_ST_SEND_SERVER_FINISHED_B), +#endif +#ifdef SSL2_ST_SEND_SERVER_HELLO_A + S(SSL2_ST_SEND_SERVER_HELLO_A), +#endif +#ifdef SSL2_ST_SEND_SERVER_HELLO_B + S(SSL2_ST_SEND_SERVER_HELLO_B), +#endif +#ifdef SSL2_ST_SEND_SERVER_VERIFY_A + S(SSL2_ST_SEND_SERVER_VERIFY_A), +#endif +#ifdef SSL2_ST_SEND_SERVER_VERIFY_B + S(SSL2_ST_SEND_SERVER_VERIFY_B), +#endif +#ifdef SSL2_ST_SEND_SERVER_VERIFY_C + S(SSL2_ST_SEND_SERVER_VERIFY_C), +#endif +#ifdef SSL2_ST_SERVER_START_ENCRYPTION + S(SSL2_ST_SERVER_START_ENCRYPTION), +#endif +#ifdef SSL2_ST_X509_GET_CLIENT_CERTIFICATE + S(SSL2_ST_X509_GET_CLIENT_CERTIFICATE), +#endif +#ifdef SSL2_ST_X509_GET_SERVER_CERTIFICATE + S(SSL2_ST_X509_GET_SERVER_CERTIFICATE), +#endif +#ifdef SSL3_ST_CR_CERT_A + S(SSL3_ST_CR_CERT_A), +#endif +#ifdef SSL3_ST_CR_CERT_B + S(SSL3_ST_CR_CERT_B), +#endif +#ifdef SSL3_ST_CR_CERT_REQ_A + S(SSL3_ST_CR_CERT_REQ_A), +#endif +#ifdef SSL3_ST_CR_CERT_REQ_B + S(SSL3_ST_CR_CERT_REQ_B), +#endif +#ifdef SSL3_ST_CR_CERT_STATUS_A + S(SSL3_ST_CR_CERT_STATUS_A), +#endif +#ifdef SSL3_ST_CR_CERT_STATUS_B + S(SSL3_ST_CR_CERT_STATUS_B), +#endif +#ifdef SSL3_ST_CR_CHANGE_A + S(SSL3_ST_CR_CHANGE_A), +#endif +#ifdef SSL3_ST_CR_CHANGE_B + S(SSL3_ST_CR_CHANGE_B), +#endif +#ifdef SSL3_ST_CR_FINISHED_A + S(SSL3_ST_CR_FINISHED_A), +#endif +#ifdef SSL3_ST_CR_FINISHED_B + S(SSL3_ST_CR_FINISHED_B), +#endif +#ifdef SSL3_ST_CR_KEY_EXCH_A + S(SSL3_ST_CR_KEY_EXCH_A), +#endif +#ifdef SSL3_ST_CR_KEY_EXCH_B + S(SSL3_ST_CR_KEY_EXCH_B), +#endif +#ifdef SSL3_ST_CR_SESSION_TICKET_A + S(SSL3_ST_CR_SESSION_TICKET_A), +#endif +#ifdef SSL3_ST_CR_SESSION_TICKET_B + S(SSL3_ST_CR_SESSION_TICKET_B), +#endif +#ifdef SSL3_ST_CR_SRVR_DONE_A + S(SSL3_ST_CR_SRVR_DONE_A), +#endif +#ifdef SSL3_ST_CR_SRVR_DONE_B + S(SSL3_ST_CR_SRVR_DONE_B), +#endif +#ifdef SSL3_ST_CR_SRVR_HELLO_A + S(SSL3_ST_CR_SRVR_HELLO_A), +#endif +#ifdef SSL3_ST_CR_SRVR_HELLO_B + S(SSL3_ST_CR_SRVR_HELLO_B), +#endif +#ifdef SSL3_ST_CW_CERT_A + S(SSL3_ST_CW_CERT_A), +#endif +#ifdef SSL3_ST_CW_CERT_B + S(SSL3_ST_CW_CERT_B), +#endif +#ifdef SSL3_ST_CW_CERT_C + S(SSL3_ST_CW_CERT_C), +#endif +#ifdef SSL3_ST_CW_CERT_D + S(SSL3_ST_CW_CERT_D), +#endif +#ifdef SSL3_ST_CW_CERT_VRFY_A + S(SSL3_ST_CW_CERT_VRFY_A), +#endif +#ifdef SSL3_ST_CW_CERT_VRFY_B + S(SSL3_ST_CW_CERT_VRFY_B), +#endif +#ifdef SSL3_ST_CW_CHANGE_A + S(SSL3_ST_CW_CHANGE_A), +#endif +#ifdef SSL3_ST_CW_CHANGE_B + S(SSL3_ST_CW_CHANGE_B), +#endif +#ifdef SSL3_ST_CW_CLNT_HELLO_A + S(SSL3_ST_CW_CLNT_HELLO_A), +#endif +#ifdef SSL3_ST_CW_CLNT_HELLO_B + S(SSL3_ST_CW_CLNT_HELLO_B), +#endif +#ifdef SSL3_ST_CW_FINISHED_A + S(SSL3_ST_CW_FINISHED_A), +#endif +#ifdef SSL3_ST_CW_FINISHED_B + S(SSL3_ST_CW_FINISHED_B), +#endif +#ifdef SSL3_ST_CW_FLUSH + S(SSL3_ST_CW_FLUSH), +#endif +#ifdef SSL3_ST_CW_KEY_EXCH_A + S(SSL3_ST_CW_KEY_EXCH_A), +#endif +#ifdef SSL3_ST_CW_KEY_EXCH_B + S(SSL3_ST_CW_KEY_EXCH_B), +#endif +#ifdef SSL3_ST_SR_CERT_A + S(SSL3_ST_SR_CERT_A), +#endif +#ifdef SSL3_ST_SR_CERT_B + S(SSL3_ST_SR_CERT_B), +#endif +#ifdef SSL3_ST_SR_CERT_VRFY_A + S(SSL3_ST_SR_CERT_VRFY_A), +#endif +#ifdef SSL3_ST_SR_CERT_VRFY_B + S(SSL3_ST_SR_CERT_VRFY_B), +#endif +#ifdef SSL3_ST_SR_CHANGE_A + S(SSL3_ST_SR_CHANGE_A), +#endif +#ifdef SSL3_ST_SR_CHANGE_B + S(SSL3_ST_SR_CHANGE_B), +#endif +#ifdef SSL3_ST_SR_CLNT_HELLO_A + S(SSL3_ST_SR_CLNT_HELLO_A), +#endif +#ifdef SSL3_ST_SR_CLNT_HELLO_B + S(SSL3_ST_SR_CLNT_HELLO_B), +#endif +#ifdef SSL3_ST_SR_CLNT_HELLO_C + S(SSL3_ST_SR_CLNT_HELLO_C), +#endif +#ifdef SSL3_ST_SR_FINISHED_A + S(SSL3_ST_SR_FINISHED_A), +#endif +#ifdef SSL3_ST_SR_FINISHED_B + S(SSL3_ST_SR_FINISHED_B), +#endif +#ifdef SSL3_ST_SR_KEY_EXCH_A + S(SSL3_ST_SR_KEY_EXCH_A), +#endif +#ifdef SSL3_ST_SR_KEY_EXCH_B + S(SSL3_ST_SR_KEY_EXCH_B), +#endif +#ifdef SSL3_ST_SW_CERT_A + S(SSL3_ST_SW_CERT_A), +#endif +#ifdef SSL3_ST_SW_CERT_B + S(SSL3_ST_SW_CERT_B), +#endif +#ifdef SSL3_ST_SW_CERT_REQ_A + S(SSL3_ST_SW_CERT_REQ_A), +#endif +#ifdef SSL3_ST_SW_CERT_REQ_B + S(SSL3_ST_SW_CERT_REQ_B), +#endif +#ifdef SSL3_ST_SW_CERT_STATUS_A + S(SSL3_ST_SW_CERT_STATUS_A), +#endif +#ifdef SSL3_ST_SW_CERT_STATUS_B + S(SSL3_ST_SW_CERT_STATUS_B), +#endif +#ifdef SSL3_ST_SW_CHANGE_A + S(SSL3_ST_SW_CHANGE_A), +#endif +#ifdef SSL3_ST_SW_CHANGE_B + S(SSL3_ST_SW_CHANGE_B), +#endif +#ifdef SSL3_ST_SW_FINISHED_A + S(SSL3_ST_SW_FINISHED_A), +#endif +#ifdef SSL3_ST_SW_FINISHED_B + S(SSL3_ST_SW_FINISHED_B), +#endif +#ifdef SSL3_ST_SW_FLUSH + S(SSL3_ST_SW_FLUSH), +#endif +#ifdef SSL3_ST_SW_HELLO_REQ_A + S(SSL3_ST_SW_HELLO_REQ_A), +#endif +#ifdef SSL3_ST_SW_HELLO_REQ_B + S(SSL3_ST_SW_HELLO_REQ_B), +#endif +#ifdef SSL3_ST_SW_HELLO_REQ_C + S(SSL3_ST_SW_HELLO_REQ_C), +#endif +#ifdef SSL3_ST_SW_KEY_EXCH_A + S(SSL3_ST_SW_KEY_EXCH_A), +#endif +#ifdef SSL3_ST_SW_KEY_EXCH_B + S(SSL3_ST_SW_KEY_EXCH_B), +#endif +#ifdef SSL3_ST_SW_SESSION_TICKET_A + S(SSL3_ST_SW_SESSION_TICKET_A), +#endif +#ifdef SSL3_ST_SW_SESSION_TICKET_B + S(SSL3_ST_SW_SESSION_TICKET_B), +#endif +#ifdef SSL3_ST_SW_SRVR_DONE_A + S(SSL3_ST_SW_SRVR_DONE_A), +#endif +#ifdef SSL3_ST_SW_SRVR_DONE_B + S(SSL3_ST_SW_SRVR_DONE_B), +#endif +#ifdef SSL3_ST_SW_SRVR_HELLO_A + S(SSL3_ST_SW_SRVR_HELLO_A), +#endif +#ifdef SSL3_ST_SW_SRVR_HELLO_B + S(SSL3_ST_SW_SRVR_HELLO_B), +#endif +#ifdef SSL_ST_ACCEPT + S(SSL_ST_ACCEPT), +#endif +#ifdef SSL_ST_BEFORE + S(SSL_ST_BEFORE), +#endif +#ifdef SSL_ST_CONNECT + S(SSL_ST_CONNECT), +#endif +#ifdef SSL_ST_INIT + S(SSL_ST_INIT), +#endif +#ifdef SSL_ST_MASK + S(SSL_ST_MASK), +#endif +#ifdef SSL_ST_OK + S(SSL_ST_OK), +#endif +#ifdef SSL_ST_READ_BODY + S(SSL_ST_READ_BODY), +#endif +#ifdef SSL_ST_READ_DONE + S(SSL_ST_READ_DONE), +#endif +#ifdef SSL_ST_READ_HEADER + S(SSL_ST_READ_HEADER), +#endif +#ifdef SSL_ST_RENEGOTIATE + S(SSL_ST_RENEGOTIATE), +#endif + { 0, NULL } +}; + +#endif + diff -Nru tor-0.2.1.30/src/common/util.c tor-0.2.2.35/src/common/util.c --- tor-0.2.1.30/src/common/util.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/util.c 2011-12-15 16:28:37.000000000 +0000 @@ -15,7 +15,8 @@ #include "orconfig.h" #include "util.h" -#include "log.h" +#include "torlog.h" +#undef log #include "crypto.h" #include "torint.h" #include "container.h" @@ -25,11 +26,18 @@ #include #include #include +#include #else #include #include +#include #endif +/* math.h needs this on Linux */ +#ifndef __USE_ISOC99 +#define __USE_ISOC99 1 +#endif +#include #include #include #include @@ -287,7 +295,7 @@ struct mallinfo mi; memset(&mi, 0, sizeof(mi)); mi = mallinfo(); - log(severity, LD_MM, + tor_log(severity, LD_MM, "mallinfo() said: arena=%d, ordblks=%d, smblks=%d, hblks=%d, " "hblkhd=%d, usmblks=%d, fsmblks=%d, uordblks=%d, fordblks=%d, " "keepcost=%d", @@ -310,6 +318,31 @@ * Math * ===== */ +/** + * Returns the natural logarithm of d base 2. We define this wrapper here so + * as to make it easier not to conflict with Tor's log() macro. + */ +double +tor_mathlog(double d) +{ + return log(d); +} + +/** Return the long integer closest to d. We define this wrapper here so + * that not all users of math.h need to use the right incancations to get + * the c99 functions. */ +long +tor_lround(double d) +{ +#if defined(HAVE_LROUND) + return lround(d); +#elif defined(HAVE_RINT) + return (long)rint(d); +#else + return (long)(d > 0 ? d + 0.5 : ceil(d - 0.5)); +#endif +} + /** Returns floor(log2(u64)). If u64 is 0, (incorrectly) returns 0. */ int tor_log2(uint64_t u64) @@ -354,6 +387,36 @@ return low; } +/** Return the lowest x such that x is at least number, and x modulo + * divisor == 0. */ +unsigned +round_to_next_multiple_of(unsigned number, unsigned divisor) +{ + number += divisor - 1; + number -= number % divisor; + return number; +} + +/** Return the lowest x such that x is at least number, and x modulo + * divisor == 0. */ +uint32_t +round_uint32_to_next_multiple_of(uint32_t number, uint32_t divisor) +{ + number += divisor - 1; + number -= number % divisor; + return number; +} + +/** Return the lowest x such that x is at least number, and x modulo + * divisor == 0. */ +uint64_t +round_uint64_to_next_multiple_of(uint64_t number, uint64_t divisor) +{ + number += divisor - 1; + number -= number % divisor; + return number; +} + /* ===== * String manipulation * ===== */ @@ -459,7 +522,7 @@ return -1; if (s1_len > s2_len) return 1; - return memcmp(s1, s2, s2_len); + return fast_memcmp(s1, s2, s2_len); } /** Compares the first strlen(s2) characters of s1 with s2. Returns as for @@ -501,17 +564,17 @@ /** Compare the value of the string prefix with the start of the * memlen-byte memory chunk at mem. Return as for strcmp. * - * [As memcmp(mem, prefix, strlen(prefix)) but returns -1 if memlen is less - * than strlen(prefix).] + * [As fast_memcmp(mem, prefix, strlen(prefix)) but returns -1 if memlen is + * less than strlen(prefix).] */ int -memcmpstart(const void *mem, size_t memlen, +fast_memcmpstart(const void *mem, size_t memlen, const char *prefix) { size_t plen = strlen(prefix); if (memlen < plen) return -1; - return memcmp(mem, prefix, plen); + return fast_memcmp(mem, prefix, plen); } /** Return a pointer to the first char of s that is not whitespace and @@ -636,6 +699,29 @@ return s; } +/** Return the first occurrence of needle in haystack that + * occurs at the start of a line (that is, at the beginning of haystack + * or immediately after a newline). Return NULL if no such string is found. + */ +const char * +find_str_at_start_of_line(const char *haystack, const char *needle) +{ + size_t needle_len = strlen(needle); + + do { + if (!strncmp(haystack, needle, needle_len)) + return haystack; + + haystack = strchr(haystack, '\n'); + if (!haystack) + return NULL; + else + ++haystack; + } while (*haystack); + + return NULL; +} + /** Return true iff the 'len' bytes at 'mem' are all zero. */ int tor_mem_is_zero(const char *mem, size_t len) @@ -644,14 +730,16 @@ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, }; while (len >= sizeof(ZERO)) { - if (memcmp(mem, ZERO, sizeof(ZERO))) + /* It's safe to use fast_memcmp here, since the very worst thing an + * attacker could learn is how many initial bytes of a secret were zero */ + if (fast_memcmp(mem, ZERO, sizeof(ZERO))) return 0; len -= sizeof(ZERO); mem += sizeof(ZERO); } /* Deal with leftover bytes. */ if (len) - return ! memcmp(mem, ZERO, len); + return fast_memeq(mem, ZERO, len); return 1; } @@ -660,7 +748,17 @@ int tor_digest_is_zero(const char *digest) { - return tor_mem_is_zero(digest, DIGEST_LEN); + static const uint8_t ZERO_DIGEST[] = { + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 + }; + return tor_memeq(digest, ZERO_DIGEST, DIGEST_LEN); +} + +/** Return true iff the DIGEST256_LEN bytes in digest are all zero. */ +int +tor_digest256_is_zero(const char *digest) +{ + return tor_mem_is_zero(digest, DIGEST256_LEN); } /* Helper: common code to check whether the result of a strtol or strtoul or @@ -683,13 +781,17 @@ if (next) *next = endptr; \ return 0 -/** Extract a long from the start of s, in the given numeric base. If - * there is unconverted data and next is provided, set *next to the - * first unconverted character. An error has occurred if no characters - * are converted; or if there are unconverted characters and next is NULL; or - * if the parsed value is not between min and max. When no error occurs, - * return the parsed value and set *ok (if provided) to 1. When an error - * occurs, return 0 and set *ok (if provided) to 0. +/** Extract a long from the start of s, in the given numeric + * base. If base is 0, s is parsed as a decimal, + * octal, or hex number in the syntax of a C integer literal. If + * there is unconverted data and next is provided, set + * *next to the first unconverted character. An error has + * occurred if no characters are converted; or if there are + * unconverted characters and next is NULL; or if the parsed + * value is not between min and max. When no error + * occurs, return the parsed value and set *ok (if provided) to + * 1. When an error occurs, return 0 and set *ok (if provided) + * to 0. */ long tor_parse_long(const char *s, int base, long min, long max, @@ -714,7 +816,18 @@ CHECK_STRTOX_RESULT(); } -/** As tor_parse_log, but return a unit64_t. Only base 10 is guaranteed to +/** As tor_parse_long(), but return a double. */ +double +tor_parse_double(const char *s, double min, double max, int *ok, char **next) +{ + char *endptr; + double r; + + r = strtod(s, &endptr); + CHECK_STRTOX_RESULT(); +} + +/** As tor_parse_long, but return a uint64_t. Only base 10 is guaranteed to * work for now. */ uint64_t tor_parse_uint64(const char *s, int base, uint64_t min, @@ -853,6 +966,9 @@ case '\\': case '\"': case '\'': + case '\r': + case '\n': + case '\t': len += 2; break; default: @@ -914,8 +1030,7 @@ escaped(const char *s) { static char *_escaped_val = NULL; - if (_escaped_val) - tor_free(_escaped_val); + tor_free(_escaped_val); if (s) _escaped_val = esc_for_log(s); @@ -1002,6 +1117,42 @@ * Time * ===== */ +/** + * Converts struct timeval to a double value. + * Preserves microsecond precision, but just barely. + * Error is approx +/- 0.1 usec when dealing with epoch values. + */ +double +tv_to_double(const struct timeval *tv) +{ + double conv = tv->tv_sec; + conv += tv->tv_usec/1000000.0; + return conv; +} + +/** + * Converts timeval to milliseconds. + */ +int64_t +tv_to_msec(const struct timeval *tv) +{ + int64_t conv = ((int64_t)tv->tv_sec)*1000L; + /* Round ghetto-style */ + conv += ((int64_t)tv->tv_usec+500)/1000L; + return conv; +} + +/** + * Converts timeval to microseconds. + */ +int64_t +tv_to_usec(const struct timeval *tv) +{ + int64_t conv = ((int64_t)tv->tv_sec)*1000000L; + conv += tv->tv_usec; + return conv; +} + /** Return the number of microseconds elapsed between *start and *end. */ long @@ -1011,7 +1162,8 @@ long secdiff = end->tv_sec - start->tv_sec; if (labs(secdiff+1) > LONG_MAX/1000000) { - log_warn(LD_GENERAL, "comparing times too far apart."); + log_warn(LD_GENERAL, "comparing times on microsecond detail too far " + "apart: %ld seconds", secdiff); return LONG_MAX; } @@ -1019,6 +1171,26 @@ return udiff; } +/** Return the number of milliseconds elapsed between *start and *end. + */ +long +tv_mdiff(const struct timeval *start, const struct timeval *end) +{ + long mdiff; + long secdiff = end->tv_sec - start->tv_sec; + + if (labs(secdiff+1) > LONG_MAX/1000) { + log_warn(LD_GENERAL, "comparing times on millisecond detail too far " + "apart: %ld seconds", secdiff); + return LONG_MAX; + } + + /* Subtract and round */ + mdiff = secdiff*1000L + + ((long)end->tv_usec - (long)start->tv_usec + 500L) / 1000L; + return mdiff; +} + /** Yield true iff y is a leap-year. */ #define IS_LEAPYEAR(y) (!(y % 4) && ((y % 100) || !(y % 400))) /** Helper: Return the number of leap-days between Jan 1, y1 and Jan 1, y2. */ @@ -1094,7 +1266,7 @@ memcpy(buf+8, MONTH_NAMES[tm.tm_mon], 3); } -/** Parse the the RFC1123 encoding of some time (in GMT) from buf, +/** Parse the RFC1123 encoding of some time (in GMT) from buf, * and store the result in *t. * * Return 0 on success, -1 on failure. @@ -1355,80 +1527,46 @@ #endif /* ===== - * Fuzzy time - * XXXX022 Use this consistently or rip most of it out. + * Rate limiting * ===== */ -/* In a perfect world, everybody would run NTP, and NTP would be perfect, so - * if we wanted to know "Is the current time before time X?" we could just say - * "time(NULL) < X". - * - * But unfortunately, many users are running Tor in an imperfect world, on - * even more imperfect computers. Hence, we need to track time oddly. We - * model the user's computer as being "skewed" from accurate time by - * -ftime_skew seconds, such that our best guess of the current time is - * time(NULL)+ftime_skew. We also assume that our measurements of time may - * have up to ftime_slop seconds of inaccuracy; IOW, our window of - * estimate for the current time is now + ftime_skew +/- ftime_slop. - */ -/** Our current estimate of our skew, such that we think the current time is - * closest to time(NULL)+ftime_skew. */ -static int ftime_skew = 0; -/** Tolerance during time comparisons, in seconds. */ -static int ftime_slop = 60; -/** Set the largest amount of sloppiness we'll allow in fuzzy time - * comparisons. */ -void -ftime_set_maximum_sloppiness(int seconds) -{ - tor_assert(seconds >= 0); - ftime_slop = seconds; -} -/** Set the amount by which we believe our system clock to differ from - * real time. */ -void -ftime_set_estimated_skew(int seconds) -{ - ftime_skew = seconds; -} -#if 0 -void -ftime_get_window(time_t now, ftime_t *ft_out) -{ - ft_out->earliest = now + ftime_skew - ftime_slop; - ft_out->latest = now + ftime_skew + ftime_slop; -} -#endif -/** Return true iff we think that now might be after when. */ -int -ftime_maybe_after(time_t now, time_t when) -{ - /* It may be after when iff the latest possible current time is after when */ - return (now + ftime_skew + ftime_slop) >= when; -} -/** Return true iff we think that now might be before when. */ -int -ftime_maybe_before(time_t now, time_t when) -{ - /* It may be before when iff the earliest possible current time is before */ - return (now + ftime_skew - ftime_slop) < when; -} -/** Return true if we think that now is definitely after when. */ -int -ftime_definitely_after(time_t now, time_t when) +/** If the rate-limiter lim is ready at now, return the number + * of calls to rate_limit_is_ready (including this one!) since the last time + * rate_limit_is_ready returned nonzero. Otherwise return 0. */ +static int +rate_limit_is_ready(ratelim_t *lim, time_t now) { - /* It is definitely after when if the earliest time it could be is still - * after when. */ - return (now + ftime_skew - ftime_slop) >= when; + if (lim->rate + lim->last_allowed <= now) { + int res = lim->n_calls_since_last_time + 1; + lim->last_allowed = now; + lim->n_calls_since_last_time = 0; + return res; + } else { + ++lim->n_calls_since_last_time; + return 0; + } } -/** Return true if we think that now is definitely before when. - */ -int -ftime_definitely_before(time_t now, time_t when) + +/** If the rate-limiter lim is ready at now, return a newly + * allocated string indicating how many messages were suppressed, suitable to + * append to a log message. Otherwise return NULL. */ +char * +rate_limit_log(ratelim_t *lim, time_t now) { - /* It is definitely before when if the latest time it could be is still - * before when. */ - return (now + ftime_skew + ftime_slop) < when; + int n; + if ((n = rate_limit_is_ready(lim, now))) { + if (n == 1) { + return tor_strdup(""); + } else { + char *cp=NULL; + tor_asprintf(&cp, + " [%d similar message(s) suppressed in last %d seconds]", + n-1, lim->rate); + return cp; + } + } else { + return NULL; + } } /* ===== @@ -1440,7 +1578,7 @@ * was returned by open(). Return the number of bytes written, or -1 * on error. Only use if fd is a blocking fd. */ ssize_t -write_all(int fd, const char *buf, size_t count, int isSocket) +write_all(tor_socket_t fd, const char *buf, size_t count, int isSocket) { size_t written = 0; ssize_t result; @@ -1450,7 +1588,7 @@ if (isSocket) result = tor_socket_send(fd, buf+written, count-written, 0); else - result = write(fd, buf+written, count-written); + result = write((int)fd, buf+written, count-written); if (result<0) return -1; written += result; @@ -1464,7 +1602,7 @@ * open(). Return the number of bytes read, or -1 on error. Only use * if fd is a blocking fd. */ ssize_t -read_all(int fd, char *buf, size_t count, int isSocket) +read_all(tor_socket_t fd, char *buf, size_t count, int isSocket) { size_t numread = 0; ssize_t result; @@ -1476,7 +1614,7 @@ if (isSocket) result = tor_socket_recv(fd, buf+numread, count-numread, 0); else - result = read(fd, buf+numread, count-numread); + result = read((int)fd, buf+numread, count-numread); if (result<0) return -1; else if (result == 0) @@ -1537,17 +1675,33 @@ return FN_ERROR; } -/** Check whether dirname exists and is private. If yes return 0. If - * it does not exist, and check==CPD_CREATE is set, try to create it +/** Check whether dirname exists and is private. If yes return 0. If + * it does not exist, and check&CPD_CREATE is set, try to create it * and return 0 on success. If it does not exist, and - * check==CPD_CHECK, and we think we can create it, return 0. Else - * return -1. */ + * check&CPD_CHECK, and we think we can create it, return 0. Else + * return -1. If CPD_GROUP_OK is set, then it's okay if the directory + * is group-readable, but in all cases we create the directory mode 0700. + * If CPD_CHECK_MODE_ONLY is set, then we don't alter the directory permissions + * if they are too permissive: we just return -1. + * When effective_user is not NULL, check permissions against the given user + * and its primary group. + */ int -check_private_dir(const char *dirname, cpd_check_t check) +check_private_dir(const char *dirname, cpd_check_t check, + const char *effective_user) { int r; struct stat st; char *f; +#ifndef MS_WINDOWS + int mask; + struct passwd *pw = NULL; + uid_t running_uid; + gid_t running_gid; +#else + (void)effective_user; +#endif + tor_assert(dirname); f = tor_strdup(dirname); clean_name_for_stat(f); @@ -1555,56 +1709,101 @@ tor_free(f); if (r) { if (errno != ENOENT) { - log(LOG_WARN, LD_FS, "Directory %s cannot be read: %s", dirname, - strerror(errno)); + log_warn(LD_FS, "Directory %s cannot be read: %s", dirname, + strerror(errno)); return -1; } - if (check == CPD_NONE) { - log(LOG_WARN, LD_FS, "Directory %s does not exist.", dirname); - return -1; - } else if (check == CPD_CREATE) { + if (check & CPD_CREATE) { log_info(LD_GENERAL, "Creating directory %s", dirname); -#ifdef MS_WINDOWS +#if defined (MS_WINDOWS) && !defined (WINCE) r = mkdir(dirname); #else r = mkdir(dirname, 0700); #endif if (r) { - log(LOG_WARN, LD_FS, "Error creating directory %s: %s", dirname, + log_warn(LD_FS, "Error creating directory %s: %s", dirname, strerror(errno)); return -1; } + } else if (!(check & CPD_CHECK)) { + log_warn(LD_FS, "Directory %s does not exist.", dirname); + return -1; } /* XXXX In the case where check==CPD_CHECK, we should look at the * parent directory a little harder. */ return 0; } if (!(st.st_mode & S_IFDIR)) { - log(LOG_WARN, LD_FS, "%s is not a directory", dirname); + log_warn(LD_FS, "%s is not a directory", dirname); return -1; } #ifndef MS_WINDOWS - if (st.st_uid != getuid()) { + if (effective_user) { + /* Look up the user and group information. + * If we have a problem, bail out. */ + pw = getpwnam(effective_user); + if (pw == NULL) { + log_warn(LD_CONFIG, "Error setting configured user: %s not found", + effective_user); + return -1; + } + running_uid = pw->pw_uid; + running_gid = pw->pw_gid; + } else { + running_uid = getuid(); + running_gid = getgid(); + } + + if (st.st_uid != running_uid) { struct passwd *pw = NULL; char *process_ownername = NULL; - pw = getpwuid(getuid()); + pw = getpwuid(running_uid); process_ownername = pw ? tor_strdup(pw->pw_name) : tor_strdup(""); pw = getpwuid(st.st_uid); - log(LOG_WARN, LD_FS, "%s is not owned by this user (%s, %d) but by " + log_warn(LD_FS, "%s is not owned by this user (%s, %d) but by " "%s (%d). Perhaps you are running Tor as the wrong user?", - dirname, process_ownername, (int)getuid(), + dirname, process_ownername, (int)running_uid, pw ? pw->pw_name : "", (int)st.st_uid); tor_free(process_ownername); return -1; } - if (st.st_mode & 0077) { - log(LOG_WARN, LD_FS, "Fixing permissions on directory %s", dirname); - if (chmod(dirname, 0700)) { - log(LOG_WARN, LD_FS, "Could not chmod directory %s: %s", dirname, + if ((check & CPD_GROUP_OK) && st.st_gid != running_gid) { + struct group *gr; + char *process_groupname = NULL; + gr = getgrgid(running_gid); + process_groupname = gr ? tor_strdup(gr->gr_name) : tor_strdup(""); + gr = getgrgid(st.st_gid); + + log_warn(LD_FS, "%s is not owned by this group (%s, %d) but by group " + "%s (%d). Are you running Tor as the wrong user?", + dirname, process_groupname, (int)running_gid, + gr ? gr->gr_name : "", (int)st.st_gid); + + tor_free(process_groupname); + return -1; + } + if (check & CPD_GROUP_OK) { + mask = 0027; + } else { + mask = 0077; + } + if (st.st_mode & mask) { + unsigned new_mode; + if (check & CPD_CHECK_MODE_ONLY) { + log_warn(LD_FS, "Permissions on directory %s are too permissive.", + dirname); + return -1; + } + log_warn(LD_FS, "Fixing permissions on directory %s", dirname); + new_mode = st.st_mode; + new_mode |= 0700; /* Owner should have rwx */ + new_mode &= ~mask; /* Clear the other bits that we didn't want set...*/ + if (chmod(dirname, new_mode)) { + log_warn(LD_FS, "Could not chmod directory %s: %s", dirname, strerror(errno)); return -1; } else { @@ -1635,12 +1834,13 @@ } /** Represents a file that we're writing to, with support for atomic commit: - * we can write into a a temporary file, and either remove the file on + * we can write into a temporary file, and either remove the file on * failure, or replace the original file on success. */ struct open_file_t { char *tempname; /**< Name of the temporary file. */ char *filename; /**< Name of the original file. */ - int rename_on_close; /**< Are we using the temporary file or not? */ + unsigned rename_on_close:1; /**< Are we using the temporary file or not? */ + unsigned binary:1; /**< Did we open in binary mode? */ int fd; /**< fd for the open file. */ FILE *stdio_file; /**< stdio wrapper for fd. */ }; @@ -1688,7 +1888,7 @@ } else { open_name = new_file->tempname = tor_malloc(tempname_len); if (tor_snprintf(new_file->tempname, tempname_len, "%s.tmp", fname)<0) { - log(LOG_WARN, LD_GENERAL, "Failed to generate filename"); + log_warn(LD_GENERAL, "Failed to generate filename"); goto err; } /* We always replace an existing temporary file if there is one. */ @@ -1696,9 +1896,12 @@ open_flags &= ~O_EXCL; new_file->rename_on_close = 1; } + if (open_flags & O_BINARY) + new_file->binary = 1; - if ((new_file->fd = open(open_name, open_flags, mode)) < 0) { - log(LOG_WARN, LD_FS, "Couldn't open \"%s\" (%s) for writing: %s", + new_file->fd = open(open_name, open_flags, mode); + if (new_file->fd < 0) { + log_warn(LD_FS, "Couldn't open \"%s\" (%s) for writing: %s", open_name, fname, strerror(errno)); goto err; } @@ -1734,7 +1937,8 @@ if (file_data->stdio_file) return file_data->stdio_file; tor_assert(file_data->fd >= 0); - if (!(file_data->stdio_file = fdopen(file_data->fd, "a"))) { + if (!(file_data->stdio_file = fdopen(file_data->fd, + file_data->binary?"ab":"a"))) { log_warn(LD_FS, "Couldn't fdopen \"%s\" [%d]: %s", file_data->filename, file_data->fd, strerror(errno)); } @@ -1834,7 +2038,7 @@ { result = write_all(fd, chunk->bytes, chunk->len, 0); if (result < 0) { - log(LOG_WARN, LD_FS, "Error writing to \"%s\": %s", fname, + log_warn(LD_FS, "Error writing to \"%s\": %s", fname, strerror(errno)); goto err; } @@ -1922,7 +2126,7 @@ int save_errno = errno; if (errno == ENOENT && (flags & RFTS_IGNORE_MISSING)) severity = LOG_INFO; - log_fn(severity, LD_FS,"Could not open \"%s\": %s ",filename, + log_fn(severity, LD_FS,"Could not open \"%s\": %s",filename, strerror(errno)); errno = save_errno; return NULL; @@ -2090,7 +2294,40 @@ const char * parse_config_line_from_str(const char *line, char **key_out, char **value_out) { + /* I believe the file format here is supposed to be: + FILE = (EMPTYLINE | LINE)* (EMPTYLASTLINE | LASTLINE)? + + EMPTYLASTLINE = SPACE* | COMMENT + EMPTYLINE = EMPTYLASTLINE NL + SPACE = ' ' | '\r' | '\t' + COMMENT = '#' NOT-NL* + NOT-NL = Any character except '\n' + NL = '\n' + + LASTLINE = SPACE* KEY SPACE* VALUES + LINE = LASTLINE NL + KEY = KEYCHAR+ + KEYCHAR = Any character except ' ', '\r', '\n', '\t', '#', "\" + + VALUES = QUOTEDVALUE | NORMALVALUE + QUOTEDVALUE = QUOTE QVITEM* QUOTE EOLSPACE? + QUOTE = '"' + QVCHAR = KEYCHAR | ESC ('n' | 't' | 'r' | '"' | ESC |'\'' | OCTAL | HEX) + ESC = "\\" + OCTAL = ODIGIT (ODIGIT ODIGIT?)? + HEX = ('x' | 'X') HEXDIGIT HEXDIGIT + ODIGIT = '0' .. '7' + HEXDIGIT = '0'..'9' | 'a' .. 'f' | 'A' .. 'F' + EOLSPACE = SPACE* COMMENT? + + NORMALVALUE = (VALCHAR | ESC ESC_IGNORE | CONTINUATION)* EOLSPACE? + VALCHAR = Any character except ESC, '#', and '\n' + ESC_IGNORE = Any character except '#' or '\n' + CONTINUATION = ESC NL ( COMMENT NL )* + */ + const char *key, *val, *cp; + int continuation = 0; tor_assert(key_out); tor_assert(value_out); @@ -2114,9 +2351,10 @@ return line; } - /* Skip until the next space. */ + /* Skip until the next space or \ followed by newline. */ key = line; - while (*line && !TOR_ISSPACE(*line) && *line != '#') + while (*line && !TOR_ISSPACE(*line) && *line != '#' && + ! (line[0] == '\\' && line[1] == '\n')) ++line; *key_out = tor_strndup(key, line-key); @@ -2127,7 +2365,7 @@ val = line; /* Find the end of the line. */ - if (*line == '\"') { + if (*line == '\"') { // XXX No continuation handling is done here if (!(line = unescape_string(line, value_out, NULL))) return NULL; while (*line == ' ' || *line == '\t') @@ -2135,18 +2373,53 @@ if (*line && *line != '#' && *line != '\n') return NULL; } else { - while (*line && *line != '\n' && *line != '#') - ++line; + /* Look for the end of the line. */ + while (*line && *line != '\n' && (*line != '#' || continuation)) { + if (*line == '\\' && line[1] == '\n') { + continuation = 1; + line += 2; + } else if (*line == '#') { + do { + ++line; + } while (*line && *line != '\n'); + if (*line == '\n') + ++line; + } else { + ++line; + } + } + if (*line == '\n') { cp = line++; } else { cp = line; } + /* Now back cp up to be the last nonspace character */ while (cp>val && TOR_ISSPACE(*(cp-1))) --cp; tor_assert(cp >= val); + + /* Now copy out and decode the value. */ *value_out = tor_strndup(val, cp-val); + if (continuation) { + char *v_out, *v_in; + v_out = v_in = *value_out; + while (*v_in) { + if (*v_in == '#') { + do { + ++v_in; + } while (*v_in && *v_in != '\n'); + if (*v_in == '\n') + ++v_in; + } else if (v_in[0] == '\\' && v_in[1] == '\n') { + v_in += 2; + } else { + *v_out++ = *v_in++; + } + } + *v_out = '\0'; + } } if (*line == '#') { @@ -2165,19 +2438,22 @@ expand_filename(const char *filename) { tor_assert(filename); +#ifdef MS_WINDOWS + return tor_strdup(filename); +#else if (*filename == '~') { - size_t len; - char *home, *result; + char *home, *result=NULL; const char *rest; if (filename[1] == '/' || filename[1] == '\0') { home = getenv("HOME"); if (!home) { log_warn(LD_CONFIG, "Couldn't find $HOME environment variable while " - "expanding \"%s\"", filename); - return NULL; + "expanding \"%s\"; defaulting to \"\".", filename); + home = tor_strdup(""); + } else { + home = tor_strdup(home); } - home = tor_strdup(home); rest = strlen(filename)>=2?(filename+2):""; } else { #ifdef HAVE_PWD_H @@ -2204,21 +2480,19 @@ if (strlen(home)>1 && !strcmpend(home,PATH_SEPARATOR)) { home[strlen(home)-1] = '\0'; } - /* Plus one for /, plus one for NUL. - * Round up to 16 in case we can't do math. */ - len = strlen(home)+strlen(rest)+16; - result = tor_malloc(len); - tor_snprintf(result,len,"%s"PATH_SEPARATOR"%s",home,rest); + tor_asprintf(&result,"%s"PATH_SEPARATOR"%s",home,rest); tor_free(home); return result; } else { return tor_strdup(filename); } +#endif } #define MAX_SCANF_WIDTH 9999 -/** DOCDOC */ +/** Helper: given an ASCII-encoded decimal digit, return its numeric value. + * NOTE: requires that its input be in-bounds. */ static int digit_to_num(char d) { @@ -2227,7 +2501,10 @@ return num; } -/** DOCDOC */ +/** Helper: Read an unsigned int from *bufp of up to width + * characters. (Handle arbitrary width if width is less than 0.) On + * success, store the result in out, advance bufp to the next + * character, and return 0. On failure, return -1. */ static int scan_unsigned(const char **bufp, unsigned *out, int width) { @@ -2254,7 +2531,9 @@ return 0; } -/** DOCDOC */ +/** Helper: copy up to width non-space characters from bufp to + * out. Make sure out is nul-terminated. Advance bufp + * to the next non-space character or the EOS. */ static int scan_string(const char **bufp, char *out, int width) { @@ -2343,7 +2622,12 @@ * and store the results in the corresponding argument fields. Differs from * sscanf in that it: Only handles %u and %Ns. Does not handle arbitrarily * long widths. %u does not consume any space. Is locale-independent. - * Returns -1 on malformed patterns. */ + * Returns -1 on malformed patterns. + * + * (As with other locale-independent functions, we need this to parse data that + * is in ASCII without worrying that the C library's locale-handling will make + * miscellaneous characters look like numbers, spaces, and so on.) + */ int tor_sscanf(const char *buf, const char *pattern, ...) { @@ -2364,20 +2648,32 @@ smartlist_t *result; #ifdef MS_WINDOWS char *pattern; + TCHAR tpattern[MAX_PATH] = {0}; + char name[MAX_PATH] = {0}; HANDLE handle; WIN32_FIND_DATA findData; size_t pattern_len = strlen(dirname)+16; pattern = tor_malloc(pattern_len); tor_snprintf(pattern, pattern_len, "%s\\*", dirname); - if (INVALID_HANDLE_VALUE == (handle = FindFirstFile(pattern, &findData))) { +#ifdef UNICODE + mbstowcs(tpattern,pattern,MAX_PATH); +#else + strlcpy(tpattern, pattern, MAX_PATH); +#endif + if (INVALID_HANDLE_VALUE == (handle = FindFirstFile(tpattern, &findData))) { tor_free(pattern); return NULL; } result = smartlist_create(); while (1) { - if (strcmp(findData.cFileName, ".") && - strcmp(findData.cFileName, "..")) { - smartlist_add(result, tor_strdup(findData.cFileName)); +#ifdef UNICODE + wcstombs(name,findData.cFileName,MAX_PATH); +#else + strlcpy(name,findData.cFileName,sizeof(name)); +#endif + if (strcmp(name, ".") && + strcmp(name, "..")) { + smartlist_add(result, tor_strdup(name)); } if (!FindNextFile(handle, &findData)) { DWORD err; @@ -2576,3 +2872,18 @@ } } +#ifdef MS_WINDOWS +HANDLE +load_windows_system_library(const TCHAR *library_name) +{ + TCHAR path[MAX_PATH]; + unsigned n; + n = GetSystemDirectory(path, MAX_PATH); + if (n == 0 || n + _tcslen(library_name) + 2 >= MAX_PATH) + return 0; + _tcscat(path, TEXT("\\")); + _tcscat(path, library_name); + return LoadLibrary(path); +} +#endif + diff -Nru tor-0.2.1.30/src/common/util_codedigest.c tor-0.2.2.35/src/common/util_codedigest.c --- tor-0.2.1.30/src/common/util_codedigest.c 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/common/util_codedigest.c 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,11 @@ + +#include "util.h" + +const char * +libor_get_digests(void) +{ + return "" +#include "common_sha1.i" + ; +} + diff -Nru tor-0.2.1.30/src/common/util.h tor-0.2.2.35/src/common/util.h --- tor-0.2.1.30/src/common/util.h 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/common/util.h 2011-12-15 16:28:37.000000000 +0000 @@ -14,6 +14,7 @@ #include "orconfig.h" #include "torint.h" #include "compat.h" +#include "di_ops.h" #include #include @@ -43,7 +44,7 @@ * stderr. */ #define tor_assert(expr) STMT_BEGIN \ if (PREDICT_UNLIKELY(!(expr))) { \ - log(LOG_ERR, LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \ + log_err(LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \ _SHORT_FILE_, __LINE__, __func__, #expr); \ fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \ _SHORT_FILE_, __LINE__, __func__, #expr); \ @@ -152,8 +153,18 @@ #define bool_neq(a,b) (!(a)!=!(b)) /* Math functions */ +double tor_mathlog(double d) ATTR_CONST; +long tor_lround(double d) ATTR_CONST; int tor_log2(uint64_t u64) ATTR_CONST; uint64_t round_to_power_of_2(uint64_t u64); +unsigned round_to_next_multiple_of(unsigned number, unsigned divisor); +uint32_t round_uint32_to_next_multiple_of(uint32_t number, uint32_t divisor); +uint64_t round_uint64_to_next_multiple_of(uint64_t number, uint64_t divisor); + +/* Compute the CEIL of a divided by b, for nonnegative a + * and positive b. Works on integer types only. Not defined if a+b can + * overflow. */ +#define CEIL_DIV(a,b) (((a)+(b)-1)/(b)) /* String manipulation */ @@ -171,14 +182,16 @@ int strcmpend(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2)); int strcasecmpend(const char *s1, const char *s2) ATTR_PURE ATTR_NONNULL((1,2)); -int memcmpstart(const void *mem, size_t memlen, - const char *prefix) ATTR_PURE; +int fast_memcmpstart(const void *mem, size_t memlen, + const char *prefix) ATTR_PURE; void tor_strstrip(char *s, const char *strip) ATTR_NONNULL((1,2)); long tor_parse_long(const char *s, int base, long min, long max, int *ok, char **next); unsigned long tor_parse_ulong(const char *s, int base, unsigned long min, unsigned long max, int *ok, char **next); +double tor_parse_double(const char *s, double min, double max, int *ok, + char **next); uint64_t tor_parse_uint64(const char *s, int base, uint64_t min, uint64_t max, int *ok, char **next); const char *hex_str(const char *from, size_t fromlen) ATTR_NONNULL((1)); @@ -188,8 +201,11 @@ const char *eat_whitespace_eos_no_nl(const char *s, const char *eos) ATTR_PURE; const char *find_whitespace(const char *s) ATTR_PURE; const char *find_whitespace_eos(const char *s, const char *eos) ATTR_PURE; +const char *find_str_at_start_of_line(const char *haystack, const char *needle) + ATTR_PURE; int tor_mem_is_zero(const char *mem, size_t len) ATTR_PURE; int tor_digest_is_zero(const char *digest) ATTR_PURE; +int tor_digest256_is_zero(const char *digest) ATTR_PURE; char *esc_for_log(const char *string) ATTR_MALLOC; const char *escaped(const char *string); struct smartlist_t; @@ -207,7 +223,11 @@ int base16_decode(char *dest, size_t destlen, const char *src, size_t srclen); /* Time helpers */ +double tv_to_double(const struct timeval *tv); +int64_t tv_to_msec(const struct timeval *tv); +int64_t tv_to_usec(const struct timeval *tv); long tv_udiff(const struct timeval *start, const struct timeval *end); +long tv_mdiff(const struct timeval *start, const struct timeval *end); time_t tor_timegm(struct tm *tm); #define RFC1123_TIME_LEN 29 void format_rfc1123_time(char *buf, time_t t); @@ -228,19 +248,36 @@ void update_approx_time(time_t now); #endif -/* Fuzzy time. */ -void ftime_set_maximum_sloppiness(int seconds); -void ftime_set_estimated_skew(int seconds); -/* typedef struct ftime_t { time_t earliest; time_t latest; } ftime_t; */ -/* void ftime_get_window(time_t now, ftime_t *ft_out); */ -int ftime_maybe_after(time_t now, time_t when); -int ftime_maybe_before(time_t now, time_t when); -int ftime_definitely_after(time_t now, time_t when); -int ftime_definitely_before(time_t now, time_t when); +/* Rate-limiter */ + +/** A ratelim_t remembers how often an event is occurring, and how often + * it's allowed to occur. Typical usage is something like: + * +
+    if (possibly_very_frequent_event()) {
+      const int INTERVAL = 300;
+      static ratelim_t warning_limit = RATELIM_INIT(INTERVAL);
+      char *m;
+      if ((m = rate_limit_log(&warning_limit, approx_time()))) {
+        log_warn(LD_GENERAL, "The event occurred!%s", m);
+        tor_free(m);
+      }
+    }
+   
+ */ +typedef struct ratelim_t { + int rate; + time_t last_allowed; + int n_calls_since_last_time; +} ratelim_t; + +#define RATELIM_INIT(r) { (r), 0, 0 } + +char *rate_limit_log(ratelim_t *lim, time_t now); /* File helpers */ -ssize_t write_all(int fd, const char *buf, size_t count, int isSocket); -ssize_t read_all(int fd, char *buf, size_t count, int isSocket); +ssize_t write_all(tor_socket_t fd, const char *buf, size_t count,int isSocket); +ssize_t read_all(tor_socket_t fd, char *buf, size_t count, int isSocket); /** Return values from file_status(); see that function's documentation * for details. */ @@ -249,8 +286,14 @@ /** Possible behaviors for check_private_dir() on encountering a nonexistent * directory; see that function's documentation for details. */ -typedef enum { CPD_NONE, CPD_CREATE, CPD_CHECK } cpd_check_t; -int check_private_dir(const char *dirname, cpd_check_t check); +typedef unsigned int cpd_check_t; +#define CPD_NONE 0 +#define CPD_CREATE 1 +#define CPD_CHECK 2 +#define CPD_GROUP_OK 4 +#define CPD_CHECK_MODE_ONLY 8 +int check_private_dir(const char *dirname, cpd_check_t check, + const char *effective_user); #define OPEN_FLAGS_REPLACE (O_WRONLY|O_CREAT|O_TRUNC) #define OPEN_FLAGS_APPEND (O_WRONLY|O_CREAT|O_APPEND) typedef struct open_file_t open_file_t; @@ -294,5 +337,11 @@ void finish_daemon(const char *desired_cwd); void write_pidfile(char *filename); +#ifdef MS_WINDOWS +HANDLE load_windows_system_library(const TCHAR *library_name); +#endif + +const char *libor_get_digests(void); + #endif diff -Nru tor-0.2.1.30/src/config/geoip tor-0.2.2.35/src/config/geoip --- tor-0.2.1.30/src/config/geoip 2011-02-21 14:59:10.000000000 +0000 +++ tor-0.2.2.35/src/config/geoip 2011-12-15 16:26:49.000000000 +0000 @@ -1,18 +1,47 @@ -# Last updated based on February 1 2011 Maxmind GeoLite Country +# Last updated based on December 6 2011 Maxmind GeoLite Country # wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip # cut -d, -f3-5 < GeoIPCountryWhois.csv|sed 's/"//g' > geoip -16777216,17301503,AU +16777216,16777471,AU +16777472,16778239,CN +16778240,16779263,AU +16779264,16781311,CN +16781312,16785407,JP +16785408,16793599,CN +16793600,16809983,JP +16809984,16842751,TH +16842752,16843007,CN +16843008,16843263,AU +16843264,16859135,CN +16859136,16875519,JP +16875520,16908287,TH +16908288,16909055,CN +16909056,16909311,AU +16909312,16941055,CN +16941056,16973823,TH +16973824,17039359,CN +17039360,17039615,AU +17039616,17072127,CN +17072128,17104895,TH +17104896,17170431,JP +17170432,17301503,IN +17301504,17367039,CN 17367040,17432575,MY +17432576,17435135,CN 17435136,17435391,AU +17435392,17465343,CN +17465344,17498111,TH 17498112,17563647,KR 17563648,17825791,CN 17825792,18087935,KR +18087936,18153471,TH 18153472,18219007,JP 18219008,18350079,IN 18350080,18874367,CN +18874368,18939903,HK 18939904,19005439,JP 19005440,19136511,TW 19136512,19202047,HK +19202048,19267583,PH 19267584,19398655,IN 19398656,19726335,AU 19726336,19791871,CN @@ -31,25 +60,39 @@ 24641536,27262975,AU 27262976,28311551,TW 28311552,28442623,KR -28442624,28573695,AU +28442624,28540927,AU +28540928,28573695,TH 28573696,28966911,CN -28966912,29032447,IN +28966912,29097983,IN 29097984,29884415,CN -29884416,29885439,AU +29884416,29949951,TW 29949952,30015487,KR 30015488,30408703,CN -30408704,33554431,KR +30408704,33488895,KR +33488896,33554431,AU 33554432,34603007,FR -34603008,34620415,EU +34603008,34604543,EU +34604544,34605055,DE +34605056,34620415,EU 34620416,34620927,SE 34620928,34621439,IT -34621440,34646527,EU +34621440,34636799,EU +34636800,34637311,DE +34637312,34646527,EU 34646528,34647551,DE -34647552,34664447,EU +34647552,34648575,EU +34648576,34649087,GR +34649088,34659327,EU +34659328,34660351,GR +34660352,34664447,EU 34664448,34668543,DE 34668544,34673663,EU 34673664,34674687,DE -34674688,34803711,EU +34674688,34733055,EU +34733056,34734079,DE +34734080,34754559,EU +34754560,34758655,GR +34758656,34803711,EU 34803712,34807807,IT 34807808,34861055,EU 34861056,34865151,DE @@ -57,7 +100,57 @@ 34866176,34867199,IT 34867200,34880511,EU 34880512,34881535,DE -34881536,35127295,EU +34881536,34910975,EU +34910976,34911231,ES +34911232,34911743,DE +34911744,34911999,AT +34912000,34912255,GB +34912256,34912511,DE +34912512,34912767,ES +34912768,34913279,DE +34913280,34928383,EU +34928384,34928639,DE +34928640,34930687,EU +34930688,34938879,DE +34938880,34947071,FR +34947072,34953215,EU +34953216,34954751,AT +34954752,34955263,NL +34955264,34959359,AT +34959360,34963455,NL +34963456,34992127,EU +34992128,34993151,NL +34993152,34993663,FR +34993664,34993919,AT +34993920,34994175,DE +34994176,34995711,FR +34995712,34995967,EU +34995968,34996223,NL +34996224,34999295,EU +34999296,35001343,GB +35001344,35002367,FR +35002368,35008511,EU +35008512,35009023,FR +35009024,35010303,EU +35010304,35010559,BE +35010560,35011583,FR +35011584,35020799,EU +35020800,35037183,GB +35037184,35054079,FR +35054080,35054591,SE +35054592,35055103,EU +35055104,35055359,ES +35055360,35055615,EU +35055616,35055871,GB +35055872,35056127,NL +35056128,35059199,EU +35059200,35059711,GB +35059712,35060735,EU +35060736,35061247,GB +35061248,35061759,FR +35061760,35090431,EU +35090432,35094527,GR +35094528,35127295,EU 35127296,35651583,GB 35651584,36700159,IT 36700160,36962303,AE @@ -66,9 +159,7 @@ 37265408,37268479,CZ 37268480,37289983,UA 37289984,37298175,RU -37298176,37355519,UA -37355520,37421055,RU -37421056,37486591,UA +37298176,37486591,UA 37486592,37748735,RU 37748736,38273023,SE 38273024,38797311,KZ @@ -126,6 +217,7 @@ 72348928,72349055,US 72349056,72349119,BM 72349120,83886079,US +83886080,88080383,EU 100663296,121195295,US 121195296,121195327,IT 121195328,134693119,US @@ -138,7 +230,9 @@ 135603200,135604223,CA 135604224,135606783,US 135606784,135607039,CA -135607040,152305663,US +135607040,135847935,US +135847936,135851263,CA +135851264,152305663,US 152305664,152338431,GB 152338432,167772159,US 184549376,201405503,US @@ -147,7 +241,9 @@ 201620304,201620311,CA 201620312,201636503,US 201636504,201636511,PR -201636512,201674095,US +201636512,201673767,US +201673768,201673775,CA +201673776,201674095,US 201674096,201674111,CA 201674112,201745663,US 201745664,201745671,PR @@ -163,9 +259,7 @@ 202385408,202385919,PR 202385920,202517983,US 202517984,202517991,PR -202517992,202621343,US -202621344,202621351,PR -202621352,202621431,US +202517992,202621431,US 202621432,202621439,PR 202621440,202621479,US 202621480,202621487,PR @@ -212,13 +306,14 @@ 203658384,203658399,US 203658400,203658415,PR 203658416,203658423,VI -203658424,203658479,US +203658424,203658431,US +203658432,203658479,VI 203658480,203658751,PR 203658752,203658831,VI -203658832,203658847,US -203658848,203658911,PR -203658912,203658927,VI -203658928,203658951,PR +203658832,203658863,US +203658864,203658879,PR +203658880,203658935,VI +203658936,203658951,PR 203658952,203658967,US 203658968,203658991,VI 203658992,203659007,PR @@ -242,9 +337,10 @@ 204047120,204047231,PR 204047232,204047247,VI 204047248,204047255,US -204047256,204047263,PR +204047256,204047263,VI 204047264,204047279,US -204047280,204047303,VI +204047280,204047295,PR +204047296,204047303,US 204047304,204047311,PR 204047312,204047335,VI 204047336,204047359,US @@ -261,11 +357,11 @@ 204047552,204047559,VI 204047560,204047567,PR 204047568,204047591,VI -204047592,204047999,PR -204048000,204048007,VI +204047592,204048007,PR 204048008,204048015,US 204048016,204048031,VI -204048032,204048055,PR +204048032,204048047,PR +204048048,204048055,VI 204048056,204048063,US 204048064,204048127,VI 204048128,204048383,PR @@ -301,20 +397,20 @@ 209845144,209845151,DE 209845152,209867103,US 209867104,209867111,CA -209867112,209868927,US -209868928,209869055,IR -209869056,209965359,US -209965360,209965367,PR -209965368,209988527,US +209867112,209988527,US 209988528,209988535,VI 209988536,210022479,US 210022480,210022487,PR 210022488,210439559,US 210439560,210439567,PR -210439568,210784255,US -210784256,210784383,BO -210784384,210784767,US -210784768,210786303,BO +210439568,210458623,US +210458624,210458631,PR +210458632,210785023,US +210785024,210785575,BO +210785576,210785583,US +210785584,210785599,BO +210785600,210785663,US +210785664,210786303,BO 210786304,210970847,US 210970848,210970855,PR 210970856,211051199,US @@ -323,9 +419,7 @@ 211126784,211126911,PR 211126912,211129607,US 211129608,211129615,PR -211129616,211313647,US -211313648,211313655,PR -211313656,211363751,US +211129616,211363751,US 211363752,211363759,PR 211363760,211368655,US 211368656,211368663,PR @@ -335,12 +429,7 @@ 211410120,211410135,PR 211410136,211536367,US 211536368,211536375,PR -211536376,211595575,US -211595576,211595583,VI -211595584,211595615,US -211595616,211595623,VI -211595624,211595639,PR -211595640,211596823,US +211536376,211596823,US 211596824,211596831,VI 211596832,211597055,US 211597056,211597071,VI @@ -395,7 +484,9 @@ 212787200,212788223,PR 212788224,212788479,US 212788480,212788607,VI -212788608,212788631,US +212788608,212788615,US +212788616,212788623,VI +212788624,212788631,US 212788632,212788647,VI 212788648,212788655,PR 212788656,212788663,VI @@ -404,23 +495,24 @@ 212788800,212788807,US 212788808,212788815,VI 212788816,212788823,PR -212788824,212788863,US +212788824,212788847,US +212788848,212788863,VI 212788864,212789007,PR 212789008,212789039,US 212789040,212789055,VI -212789056,212789063,PR +212789056,212789063,US 212789064,212789079,VI 212789080,212789087,US 212789088,212789095,VI -212789096,212789111,US -212789112,212789119,PR +212789096,212789119,US 212789120,212789127,VI 212789128,212789135,US 212789136,212789143,PR 212789144,212789151,VI 212789152,212789159,PR 212789160,212789167,US -212789168,212789191,PR +212789168,212789183,VI +212789184,212789191,PR 212789192,212789199,US 212789200,212789223,VI 212789224,212789231,US @@ -431,24 +523,22 @@ 212791456,212791479,VI 212791480,212791807,PR 212791808,212791815,US -212791816,212791839,VI -212791840,212792191,US +212791816,212792063,VI +212792064,212792191,US 212792192,212792199,PR -212792200,212792239,VI -212792240,212792263,PR -212792264,212792271,US +212792200,212792231,VI +212792232,212792239,US +212792240,212792247,PR +212792248,212792271,US 212792272,212792279,VI 212792280,212792287,US 212792288,212792319,PR 212792320,212793103,US -212793104,212793111,VI +212793104,212793111,PR 212793112,212793119,US 212793120,212793127,VI -212793128,212793135,PR -212793136,212793143,VI -212793144,212793167,US -212793168,212793175,VI -212793176,212793199,US +212793128,212793143,PR +212793144,212793199,US 212793200,212793207,VI 212793208,212793215,PR 212793216,212793311,US @@ -456,8 +546,8 @@ 212793328,212793343,US 212793344,212794367,VI 212794368,212794559,PR -212794560,212794575,US -212794576,212794583,VI +212794560,212794567,US +212794568,212794583,VI 212794584,212794599,US 212794600,212794783,PR 212794784,212794791,VI @@ -538,9 +628,12 @@ 214187808,214187815,PR 214187816,214187823,US 214187824,214187831,PR -214187832,214187887,US -214187888,214187895,PR -214187896,214188031,VI +214187832,214187839,US +214187840,214187863,PR +214187864,214187871,VI +214187872,214187887,US +214187888,214187903,PR +214187904,214188031,VI 214188032,214237247,US 214237248,214237311,PR 214237312,214249471,US @@ -552,8 +645,8 @@ 214698008,214698015,PR 214698016,214698023,US 214698024,214698031,PR -214698032,214698095,VI -214698096,214698103,PR +214698032,214698087,VI +214698088,214698103,PR 214698104,214698135,VI 214698136,214698143,PR 214698144,214698159,VI @@ -564,16 +657,17 @@ 214698272,214698279,US 214698280,214698319,VI 214698320,214698335,PR -214698336,214698343,US -214698344,214698351,VI -214698352,214698359,US +214698336,214698351,US +214698352,214698359,VI 214698360,214698367,PR -214698368,214698375,VI -214698376,214698383,US +214698368,214698383,US 214698384,214698639,PR 214698640,214698655,VI -214698656,214699231,PR -214699232,214699295,VI +214698656,214698919,PR +214698920,214698927,VI +214698928,214699231,PR +214699232,214699263,US +214699264,214699295,VI 214699296,214699303,US 214699304,214699311,VI 214699312,214699335,PR @@ -584,9 +678,13 @@ 214699472,214699487,VI 214699488,214699519,US 214699520,214699647,PR -214699648,214858655,US +214699648,214700007,US +214700008,214700015,PR +214700016,214858655,US 214858656,214858671,NL -214858672,216417663,US +214858672,215001095,US +215001096,215001103,VI +215001104,216417663,US 216417664,216417727,PR 216417728,216627287,US 216627288,216627295,PR @@ -607,16 +705,18 @@ 217028008,217046775,US 217046776,217046783,PR 217046784,234881023,US +234881024,234883071,CN 234883072,234884095,JP +234884096,234885119,CN 234885120,234889215,VN 234889216,234913791,KR 234913792,234946559,HK -234946560,234950655,JP +234946560,234947583,CN +234947584,234950655,JP 234950656,234951679,AU 234951680,234952703,HK 234952704,234954751,JP 234954752,234971135,NZ -234971136,234979327,IN 234979328,235012095,MY 235012096,235077631,AU 235077632,235143167,JP @@ -628,12 +728,12 @@ 241434624,241500159,SG 241500160,241565695,JP 241565696,241598463,IN +241598464,241599487,CN 241599488,241600511,JP 241600512,241602559,AU 241602560,241604607,MY 241604608,241605631,ID 241605632,241606655,CN -241606656,241614847,IN 241614848,241623039,JP 241623040,241627135,IN 241627136,241631231,HK @@ -650,7 +750,8 @@ 243531776,243662847,JP 243662848,243793919,CN 243793920,243859455,HK -243859456,243924991,AU +243859456,243916799,AU +243916800,243924991,JP 243924992,243990527,KR 243990528,244318207,IN 244318208,245366783,CN @@ -660,6 +761,7 @@ 247479296,247480319,CN 247480320,247482367,MY 247482368,247483391,PG +247483392,247484415,CN 247484416,247488511,KR 247488512,247496703,JP 247496704,247504895,PK @@ -685,14 +787,21 @@ 355993888,355993895,IT 355993896,368674047,US 368674048,368674303,ES -368674304,405012479,US +368674304,386924543,US +386924544,387055615,CA +387055616,387121151,PR +387121152,387164415,US +387164416,387164671,CA +387164672,387448831,US +387973120,390332415,US +402653184,405012479,US 405012480,405143551,CA 405143552,405180415,US 405180416,405184511,CA -405184512,405192703,US -405209088,405405695,US -405405696,405422079,PR +405184512,405372927,US +405372928,405422079,PR 405422080,405798911,US +405798912,405831679,CA 405831680,405843967,US 405843968,405848063,CA 405848064,405864447,PR @@ -704,7 +813,8 @@ 405979136,405995519,PR 406003712,406011903,US 406011904,406028287,BS -406028288,406126591,US +406028288,406110207,US +406110208,406142975,CA 406142976,406147071,US 406147072,406151167,CA 406159360,406175743,US @@ -723,15 +833,17 @@ 408518656,408535039,US 408535040,408551423,CA 408551424,408719359,US -408719360,408723455,VC +408719360,408723455,LC 408723456,409337855,US 409337856,409354239,CA 409370624,409731071,US 409731072,409862143,CA 409862144,410124287,US -410124288,410177751,CA -410177752,410177755,US -410177756,410178463,CA +410124288,410174779,CA +410174780,410174787,US +410174788,410178343,CA +410178344,410178347,US +410178348,410178463,CA 410178464,410178467,US 410178468,410180643,CA 410180644,410180647,US @@ -739,15 +851,13 @@ 410180696,410180703,US 410180704,410180711,CA 410180712,410180715,US -410180716,410180771,CA +410180716,410180759,CA +410180760,410180763,US +410180764,410180771,CA 410180772,410180775,US -410180776,410185355,CA -410185356,410185359,US -410185360,410185407,CA +410180776,410185407,CA 410185408,410185411,US -410185412,410185519,CA -410185520,410185523,US -410185524,410185539,CA +410185412,410185539,CA 410185540,410185543,US 410185544,410185551,CA 410185552,410185559,US @@ -757,7 +867,11 @@ 410186972,410186979,US 410186980,410186983,CA 410186984,410186999,US -410187000,410187047,CA +410187000,410187003,CA +410187004,410187007,US +410187008,410187015,CA +410187016,410187019,US +410187020,410187047,CA 410187048,410187055,US 410187056,410187175,CA 410187176,410187183,US @@ -784,10 +898,11 @@ 411779072,411828223,PR 411828224,411893759,US 411893760,411975679,CA -411975680,411992063,US -412024832,412221439,US +411975680,411979775,US +411979776,411983871,CA +411983872,412221439,US 412221440,412229631,CA -412286976,412483583,US +412254208,412483583,US 412483584,412549119,CA 412549120,412614655,US 412614656,412647423,CL @@ -796,8 +911,9 @@ 412688384,412704767,US 412704768,412708863,CA 412708864,412909567,US -412909568,412917759,CA +412909568,412942335,CA 412942336,412946431,US +412975104,413007871,CA 413007872,413908991,US 413908992,413925375,PR 413925376,415760383,US @@ -810,8 +926,7 @@ 416546816,416579583,CA 416612352,416628735,US 416628736,416636927,CA -416636928,416641023,US -416645120,416743423,US +416636928,416743423,US 416743424,416776191,CA 416776192,417202175,US 417202176,417267711,CA @@ -826,12 +941,12 @@ 417775616,417796095,CA 417796096,417800191,US 417800192,417808383,BS -417808384,417824767,CA -417824768,417857535,US +417808384,417820671,CA +417820672,417857535,US 417857536,417923071,AR 417923072,418062335,US 418062336,418070527,CA -418070528,418074623,US +418070528,418078719,US 418078720,418119679,CA 418119680,418316287,US 418316288,418320383,CA @@ -846,8 +961,8 @@ 418709504,418766847,US 418766848,418770943,CA 418770944,418775039,US -418775040,418807807,CA -418807808,419430399,US +418775040,418799615,CA +418799616,419430399,US 419430400,436207615,GB 436207616,452984831,US 452984832,452985855,JP @@ -857,7 +972,7 @@ 452988928,452997119,JP 452997120,453001215,IN 453001216,453009407,AU -453017600,453050367,JP +453009408,453017599,BD 453050368,453115903,KR 453115904,453246975,VN 453246976,453509119,IN @@ -868,6 +983,7 @@ 455258112,455262207,SG 455262208,455270399,JP 455270400,455272447,AU +455272448,455274495,CN 455274496,455278591,IN 455278592,455344127,KR 455344128,456130559,CN @@ -878,17 +994,22 @@ 456264704,456265727,JP 456265728,456269823,ID 456269824,456271871,HK +456271872,456273919,CN 456273920,456286207,AU +456286208,456294399,JP 456294400,456327167,CN 456327168,456523775,TW 456523776,456540159,SG -456540160,456548351,AU +456540160,456542207,AU +456542208,456544255,CN +456544256,456548351,AU 456548352,456553471,JP 456553472,456554495,MY 456554496,456555519,PK 456555520,456556543,JP 456556544,456560639,AU 456560640,456562687,IN +456562688,456564735,CN 456564736,456572927,IN 456572928,456589311,CN 456589312,456654847,TH @@ -898,12 +1019,12 @@ 459282432,459284479,TK 459284480,459292671,JP 459292672,459293695,NZ -459294720,459297791,JP +459293696,459297791,JP 459297792,459298815,IN -459298816,459299839,PK 459300864,459309055,SG 459309056,459325439,KR 459325440,459333631,AU +459333632,459341823,TW 459341824,459407359,IN 459407360,459456511,JP 459456512,459460607,HK @@ -911,12 +1032,12 @@ 459472896,459505663,AU 459505664,459538431,CN 459538432,459539455,AU +459539456,459540479,TH 459540480,459541503,JP 459541504,459542527,IN 459542528,459544575,HK 459544576,459545599,AU -459546624,459547647,JP -459547648,459548671,CN +459545600,459547647,JP 459548672,459550719,TH 459550720,459554815,JP 459554816,459571199,TW @@ -926,13 +1047,15 @@ 459866112,459931647,TW 459931648,459964415,IN 459964416,459980799,CN -459980800,459984895,AU +459980800,459983871,AU +459983872,459984895,CN 459984896,459986943,JP 459986944,459988991,PH 459988992,459997183,JP 459997184,460062719,IN 460062720,460128255,PH 460128256,460136447,IN +460136448,460144639,CN 460144640,460152831,PH 460152832,460154879,JP 460154880,460155903,SG @@ -997,14 +1120,19 @@ 460734464,460865535,KR 460865536,460931071,JP 460931072,460933119,AU +460933120,460935167,CN 460935168,460937215,ID -460937216,460938239,AU +460937216,460938239,NZ +460938240,460939263,JP 460939264,460940287,NZ +460940288,460941311,IN 460941312,460942335,AU +460942336,460943359,MY 460943360,460945407,AU +460945408,460947455,CN 460947456,460980223,JP 460980224,460981247,NC -460982272,460983295,JP +460981248,460983295,JP 460983296,460984319,HK 460984320,460988415,PG 460988416,460994559,JP @@ -1030,7 +1158,7 @@ 461111296,461127679,IN 461127680,461131775,PH 461131776,461135871,ID -461135872,461139967,AU +461135872,461144063,AU 461144064,461209599,KR 461209600,461225983,SG 461225984,461227007,WF @@ -1079,15 +1207,1264 @@ 468713472,469237759,TW 469237760,469499903,IN 469499904,469565439,NZ +469565440,469598207,AU +469598208,469630975,JP 469630976,469696511,TH 469696512,469712895,PK 469712896,469729279,KR 469729280,469762047,IN 469762048,520093695,US +520093696,520257535,PL +520257536,520290303,RO +520290304,520292351,TR +520292352,520294399,NL +520294400,520296447,RU +520296448,520298495,UA +520298496,520306687,SK +520306688,520308735,GB +520308736,520310783,DK +520310784,520312831,DE +520312832,520314879,MK +520314880,520318975,NL +520318976,520323071,ES +520323072,520325119,CH +520325120,520327167,FR +520327168,520329215,DE +520329216,520331263,SE +520331264,520339455,IT +520339456,520343551,UA +520343552,520355839,GB +520355840,520421375,ES +520421376,520486911,AT +520486912,520488959,NL +520488960,520489983,IT +520489984,520491007,RU +520491008,520493567,GB +520493568,520494335,FR +520494336,520494591,TR +520494592,520495103,CH +520495104,520496383,DE +520496384,520496895,TR +520496896,520497151,ES +520497152,520497407,FR +520497408,520497663,ES +520497664,520498175,FR +520498176,520498687,CH +520498688,520499711,FR +520499712,520501247,DE +520501248,520501503,IL +520501504,520501759,AE +520501760,520503295,GB +520503296,520505343,PL +520505344,520507391,GB +520507392,520511487,TR +520511488,520519679,UA +520519680,520552447,PL +520552448,520554495,NL +520554496,520556543,GB +520556544,520560639,FI +520560640,520562687,TR +520562688,520564735,PL +520564736,520566783,IE +520566784,520568831,CH +520568832,520589311,IR +520589312,520593407,IT +520593408,520595455,AM +520595456,520597503,MK +520597504,520597535,IT +520597536,520597567,DE +520597568,520597599,IT +520597600,520597631,DE +520597632,520597663,IT +520597664,520598015,DE +520598016,520598047,IT +520598048,520598079,FR +520598080,520598111,IT +520598112,520601599,DE +520601600,520609791,SI +520609792,520613887,RU +520613888,520615935,CZ +520615936,520617983,FR +520617984,520683519,RU +520683520,520749055,SY +520749056,520753151,RU +520753152,520757247,LI +520757248,520761343,GB +520761344,520763391,IT +520763392,520765439,CZ +520765440,520781823,RU +520781824,520822271,CH +520822272,520822527,DE +520822528,520822783,CH +520822784,520824831,IT +520824832,520826879,RO +520826880,520828927,QA +520828928,520830975,NL +520830976,520847359,MK +520847360,520880127,PL +520880128,520882175,AT +520882176,520884223,IT +520884224,520888319,MK +520888320,520896511,DE +520896512,520897023,BE +520897024,520897151,LU +520897152,520897791,BE +520897792,520897807,LU +520897808,520898559,BE +520898560,520902655,GB +520902656,520902784,NL +520902785,520912895,GB +520912896,520945663,UA +520945664,520947711,GB +520947712,520949759,SE +520949760,520951807,RU +520951808,520953855,IE +520953856,520962047,RU +520962048,520978431,IE +520978432,520980479,RU +520980480,520982527,IT +520982528,520984575,RU +520984576,520984831,NG +520984832,520986623,GB +520986624,520988671,PS +520988672,520990719,DE +520990720,520992767,RU +520992768,520994815,ES +520994816,521011199,BG +521011200,521057279,RO +521057280,521058303,MD +521058304,521076735,RO +521076736,521078783,ES +521078784,521080831,CZ +521080832,521082879,RU +521082880,521084927,FR +521084928,521093119,SE +521093120,521095167,DE +521095168,521097215,IT +521097216,521101311,RU +521101312,521103359,IT +521103360,521105407,GB +521105408,521107455,IS +521107456,521109503,FI +521109504,521142271,SI +521142272,521404415,DE +521404416,521535487,NL +521535488,521537535,GB +521537536,521539583,RU +521539584,521541631,BE +521541632,521543679,DE +521543680,521545727,RU +521545728,521547775,GB +521547776,521551871,AL +521551872,521553919,DE +521553920,521555967,GB +521555968,521556031,US +521556032,521558015,NL +521558016,521560063,CY +521560064,521562111,PL +521562112,521563135,DE +521563136,521564159,GB +521564160,521566207,GR +521566208,521568255,LU +521568256,521601023,PT +521601024,521666559,RU +521666560,521668607,GB +521668608,521670655,CH +521670656,521672703,HU +521672704,521674751,RU +521674752,521676799,GB +521676800,521678847,ES +521678848,521680895,NL +521680896,521682943,EE +521682944,521687039,SE +521687040,521689087,GB +521689088,521691135,BY +521691136,521693183,DE +521693184,521695231,GB +521695232,521697279,BE +521697280,521699327,ES +521699328,521701375,NO +521701376,521703423,IT +521703424,521705471,DE +521705472,521707519,ES +521707520,521709567,NL +521709568,521711615,DE +521711616,521713663,SK +521713664,521715711,HU +521715712,521717759,LV +521717760,521719807,IR +521719808,521721855,UA +521721856,521723903,GB +521723904,521725951,SA +521725952,521727999,IR +521728000,521732095,FR +521732096,521736191,GB +521736192,521738239,DK +521738240,521740287,RU +521740288,521742335,IT +521742336,521746431,DE +521746432,521748479,NL +521748480,521750527,SE +521750528,521752575,PS +521752576,521754367,FR +521754368,521754383,US +521754384,521754623,FR +521754624,521756671,IR +521756672,521758719,NL +521758720,521760767,IR +521760768,521762815,IL +521762816,521764863,CH +521764864,521766911,IR +521766912,521768959,IQ +521768960,521771007,FI +521771008,521773055,DE +521773056,521775103,GB +521775104,521777151,TR +521777152,521779199,ES +521779200,521783295,GB +521783296,521785343,RU +521785344,521787391,GB +521787392,521789439,NO +521789440,521791487,RU +521791488,521793535,IR +521793536,521795583,RU +521795584,521797631,PL +521797632,521928703,IT +521928704,521945087,RU +521945088,521953279,GB +521953280,521961471,RU +521961472,521969663,CZ +521969664,521977855,UA +521977856,521986047,RU +521986048,521994239,UA +521994240,522002431,KG +522002432,522010623,IR +522010624,522018815,AE +522018816,522027007,FR +522027008,522059775,RU +522059776,522125311,CZ +522125312,522133503,MD +522133504,522134783,NL +522134784,522134911,US +522134912,522135551,NL +522135552,522137599,IT +522137600,522141695,CH +522141696,522143743,RU +522143744,522145791,CZ +522145792,522147839,DK +522147840,522149887,ES +522149888,522158079,UA +522158080,522166271,BE +522166272,522168319,SE +522168320,522170367,RU +522170368,522174463,YE +522174464,522178559,RU +522178560,522180607,DE +522180608,522182655,KZ +522182656,522190847,CZ +522190848,522715135,FR +522715136,522717183,IR +522717184,522719231,RU +522719232,522721279,UA +522721280,522741759,RU +522741760,522743807,UA +522743808,522747903,RU +522747904,522780671,UA +522780672,522782719,RU +522782720,522784767,UA +522784768,522786815,BG +522786816,522788863,PL +522788864,522792959,RU +522792960,522795007,UA +522795008,522797055,RU +522797056,522801151,UA +522801152,522803199,PL +522803200,522805247,UA +522805248,522807295,RU +522807296,522811391,UA +522811392,522813439,RU +522813440,522815487,UA +522815488,522819583,PL +522819584,522821631,KG +522821632,522823679,RU +522823680,522827775,PL +522827776,522831871,RU +522831872,522833919,CZ +522833920,522835967,PL +522835968,522838015,UA +522838016,522840063,RU +522840064,522842111,PL +522842112,522846207,RU +522846208,522854399,PL +522854400,522858495,RU +522858496,522866687,UA +522866688,522870783,LV +522870784,522874879,RU +522874880,522878975,UA +522878976,522887167,RO +522887168,522895359,UA +522895360,522911743,RU +522911744,522960895,UA +522960896,522969087,RU +522969088,522977279,UA +522977280,522981375,RU +522981376,522985471,IT +522985472,522989567,CH +522989568,522993663,RU +522993664,522997759,AL +522997760,523001855,RU +523001856,523005951,LT +523005952,523010047,IT +523010048,523014143,IL +523014144,523018239,ES +523018240,523022335,IT +523022336,523024639,RU +523024640,523024895,GB +523024896,523025407,BZ +523025408,523025663,UA +523025664,523025919,CH +523025920,523026431,NL +523026432,523030527,TR +523030528,523034623,FR +523034624,523038719,SE +523038720,523042815,RU +523042816,523075583,NO +523075584,523108351,HR +523108352,523173887,HU +523173888,523182079,BA +523182080,523190271,IR +523190272,523192319,FI +523192320,523194367,ES +523194368,523196415,DE +523196416,523198463,AE +523198464,523202559,CZ +523202560,523223039,RU +523223040,523225087,AM +523225088,523227135,SE +523227136,523229183,RO +523229184,523231231,GB +523231232,523239423,DE 523239424,523763711,GB 523763712,524025855,IR +524025856,524287999,PL 524288000,528482303,GB -536870912,539624567,US +528482304,528490495,PL +528490496,528498687,RU +528498688,528515071,UA +528515072,528523263,RU +528523264,528531455,UA +528531456,528539647,RU +528539648,528547839,UA +528547840,528564223,RU +528564224,528580607,UA +528580608,528588799,RU +528588800,528596991,UA +528596992,528605183,RU +528605184,528613375,UA +528613376,528637951,RU +528637952,528642047,PL +528642048,528654335,RU +528654336,528656383,SK +528656384,528658431,CZ +528658432,528662527,IR +528662528,528664575,RU +528664576,528666623,BY +528666624,528668671,RU +528668672,528670719,PL +528670720,528674815,CH +528674816,528676863,RO +528676864,528678911,RU +528678912,528680959,MD +528680960,528683007,RO +528683008,528689151,UA +528689152,528691199,RO +528691200,528695295,PL +528695296,528699391,UA +528699392,528703487,RU +528703488,528715775,UA +528715776,528719871,RU +528719872,528721919,RO +528721920,528723967,PL +528723968,528726015,ES +528726016,528736255,RU +528736256,528740351,SK +528740352,528742399,IT +528742400,528744447,RU +528744448,528746495,GB +528746496,528748543,RO +528748544,528752639,CZ +528752640,528760831,RO +528760832,528762879,PL +528762880,528764927,AM +528764928,528769023,RO +528769024,528793599,RU +528793600,528795647,RO +528795648,528797695,NL +528797696,528805887,RU +528805888,528809983,RO +528809984,528812031,PL +528812032,528814079,CZ +528814080,528816127,PL +528816128,528818175,RO +528818176,528834559,UA +528834560,528836607,RO +528836608,528838655,RU +528838656,528840703,UA +528840704,528842751,RU +528842752,528859135,CH +528859136,528861183,RO +528861184,528863231,RU +528863232,528867327,KZ +528867328,528887807,RU +528887808,528891903,PL +528891904,528900095,UA +528900096,528902143,SK +528902144,528908287,UA +528908288,528926719,RU +528926720,528928767,NL +528928768,528930815,UA +528930816,528932863,CZ +528932864,528941055,RU +528941056,528943103,RO +528943104,528945151,RU +528945152,528949247,PL +528949248,528965631,RU +528965632,528982015,UA +528982016,528984063,PL +528984064,528986111,RO +528986112,528988159,UA +528988160,528990207,RO +528990208,528994303,PL +528994304,528996351,UZ +528996352,528998399,LT +528998400,529006591,RU +529006592,529268735,NL +529268736,529530879,TR +529530880,529596415,UA +529596416,529661951,TR +529661952,529727487,GE +529727488,529793023,HR +529793024,529825791,RU +529825792,529826303,UA +529826304,529826815,RU +529826816,529827839,DE +529827840,529828863,CZ +529828864,529829887,RU +529829888,529831935,NL +529831936,529832959,UA +529832960,529835007,RU +529835008,529836031,KG +529836032,529836543,UA +529836544,529837055,IL +529837056,529839103,RU +529839104,529839615,UA +529839616,529840127,CY +529840128,529842175,UA +529842176,529843199,IN +529843200,529844735,RU +529844736,529845247,UA +529845248,529846271,UZ +529846272,529848319,RU +529848320,529855487,CZ +529855488,529856511,RU +529856512,529857535,KZ +529857536,529858559,UA +529858560,529924095,NL +529924096,529989631,DE +529989632,530055167,NL +530055168,530120703,GR +530120704,530186239,CY +530186240,530251775,IL +530251776,530317311,TR +530317312,530579455,IT +530579456,530710527,NL +530710528,530841599,RU +530841600,530972671,CH +530972672,531103743,SA +531103744,531169279,IL +531169280,531177471,KZ +531177472,531179519,GB +531179520,531181567,FR +531181568,531183615,GB +531183616,531185663,NL +531185664,531193855,TR +531193856,531194303,IE +531194304,531194335,IR +531194336,531195903,IE +531195904,531197951,IT +531197952,531199999,GB +531200000,531202047,RU +531202048,531234815,CZ +531234816,531236863,IE +531236864,531238911,FR +531238912,531240959,LV +531240960,531242751,SE +531242752,531243007,DE +531243008,531245055,RU +531245056,531247103,IT +531247104,531251199,IR +531251200,531259391,SK +531259392,531261439,ES +531261440,531263487,DE +531263488,531265535,RU +531265536,531267583,GB +531267584,531275775,UA +531275776,531276799,US +531276800,531277311,GB +531277312,531277823,US +531277824,531279871,RU +531279872,531281919,CZ +531281920,531283967,RU +531283968,531292159,DE +531292160,531333119,AZ +531333120,531333599,NL +531333600,531333631,RU +531333632,531334143,NL +531334144,531334271,US +531334272,531334399,NL +531334400,531334463,US +531334464,531334527,NL +531334528,531335167,US +531335168,531337215,IT +531337216,531339263,CH +531339264,531341311,AL +531341312,531349503,KZ +531349504,531351551,RU +531351552,531355647,NL +531355648,531357695,IR +531357696,531361791,HU +531361792,531365887,CH +531365888,531366399,DE +531366400,531367935,CH +531367936,531369983,DE +531369984,531371007,CH +531371008,531371519,US +531371520,531372031,JP +531372032,531380223,CH +531380224,531398655,DE +531398656,531400703,RU +531400704,531402751,UA +531402752,531404799,LU +531404800,531406847,FI +531415040,531423231,RU +531423232,531423487,GB +531423488,531425279,NO +531425280,531425325,FR +531425326,531425327,GB +531425328,531425391,FR +531425392,531426303,GB +531426304,531426431,FR +531426432,531426559,GB +531426560,531426623,FR +531426624,531431423,GB +531431424,531496959,RO +531496960,531628031,PL +531628032,531660799,TR +531660800,531693567,BA +531693568,531695615,RU +531695616,531697663,LT +531697664,531699711,GB +531699712,531701759,CZ +531701760,531703807,NL +531703808,531705855,IT +531705856,531707903,ES +531707904,531709951,GR +531709952,531718143,RU +531718144,531720191,ES +531720192,531722239,RU +531722240,531724287,IT +531724288,531726335,DE +531726336,531759103,TR +531759104,531890175,PL +531890176,532021247,RU +532021248,532152319,PL +532152320,532168703,DE +532168704,532185087,NL +532185088,532201471,IR +532201472,532211711,RU +532211712,532212223,LU +532212224,532212479,RU +532212480,532212991,UA +532212992,532213247,GB +532213248,532221951,RU +532221952,532223999,IT +532224000,532226047,NO +532226048,532234239,GB +532234240,532242431,DK +532242432,532244479,IT +532244480,532246527,DE +532246528,532250623,BA +532250624,532283391,GB +532283392,532291583,TR +532291584,532293631,IE +532293632,532295679,IT +532295680,532297727,KG +532297728,532303871,RU +532303872,532305919,PL +532305920,532307967,NO +532307968,532310015,RU +532310016,532312063,GR +532312064,532312831,JE +532312832,532312847,GB +532312848,532312855,JE +532312856,532312895,GB +532312896,532314111,JE +532314112,532316159,DE +532316160,532324351,RU +532324352,532328447,NL +532328448,532330495,PS +532330496,532332543,CZ +532332544,532340735,PL +532340736,532341247,US +532341248,532348927,GB +532348928,532365311,PL +532365312,532373503,DE +532373504,532375551,RU +532375552,532377599,IT +532377600,532381695,DE +532381696,532414463,NL +532414464,532676607,IT +532676608,532692991,GE +532692992,532701183,CZ +532701184,532703231,GB +532703232,532703679,RU +532703680,532703743,IN +532703744,532704511,RU +532704512,532704767,IN +532704768,532705279,RU +532705280,532709375,NL +532709376,532725759,RU +532725760,532729855,SE +532729856,532731903,TR +532731904,532733951,PL +532733952,532735999,SE +532736000,532738047,RU +532738048,532738303,GB +532738304,532738559,IN +532738560,532740095,GB +532740096,532742143,KG +532742144,532746239,GB +532746240,532750335,IT +532750336,532752383,SM +532752384,532754431,BE +532754432,532756479,FR +532756480,532758527,IT +532758528,532762623,SY +532762624,532766719,UA +532766720,532768767,PL +532768768,532770815,NL +532770816,532772863,IR +532772864,532774911,RU +532774912,532779007,GB +532779008,532783103,IR +532783104,532785151,AT +532785152,532787199,GB +532787200,532789247,BE +532789248,532791295,DK +532791296,532793343,LT +532793344,532795391,SE +532795392,532797439,CH +532797440,532799487,IE +532799488,532801535,ES +532801536,532803583,DK +532803584,532805631,FR +532805632,532807679,SE +532807680,533200895,IT +533200896,533233663,TR +533233664,533250047,IE +533250048,533254143,RU +533254144,533256191,NL +533256192,533262335,RU +533262336,533264383,ES +533264384,533266431,RU +533266432,533266435,US +533266436,533266439,CN +533266440,533266443,JP +533266444,533266447,DE +533266448,533266451,FR +533266452,533266455,GB +533266456,533266459,BR +533266460,533266463,IT +533266464,533266467,CA +533266468,533266471,IN +533266472,533266475,RU +533266476,533266479,ES +533266480,533266483,AU +533266484,533266487,MX +533266488,533266491,KR +533266492,533266495,NL +533266496,533266499,TR +533266500,533266503,ID +533266504,533266507,CH +533266508,533266511,PL +533266512,533266515,BE +533266516,533266519,SE +533266520,533266523,SA +533266524,533266527,TW +533266528,533266531,SJ +533266532,533266535,AT +533266536,533266539,AR +533266540,533266543,ZA +533266544,533266547,IR +533266548,533266551,TH +533266552,533266555,DK +533266556,533266559,GR +533266560,533266563,AE +533266564,533266567,VE +533266568,533266571,CO +533266572,533266575,FI +533266576,533266579,MV +533266580,533266583,PT +533266584,533266587,HK +533266588,533266591,SG +533266592,533266595,EG +533266596,533266599,NG +533266600,533266603,IL +533266604,533266607,IE +533266608,533266611,CL +533266612,533266615,CZ +533266616,533266619,PH +533266620,533266623,PK +533266624,533266627,RO +533266628,533266631,DZ +533266632,533266635,PE +533266636,533266639,NZ +533266640,533266643,KZ +533266644,533266647,UA +533266648,533266651,KW +533266652,533266655,QA +533266656,533266687,DE +533266688,533266691,HU +533266692,533266695,BD +533266696,533266699,VN +533266700,533266703,MA +533266704,533266707,SK +533266708,533266711,AO +533266712,533266715,IQ +533266716,533266719,LY +533266720,533266723,SD +533266724,533266727,EC +533266728,533266731,HR +533266732,533266735,SY +533266736,533266739,OM +533266740,533266743,BY +533266744,533266747,LU +533266748,533266751,AZ +533266752,533266755,DO +533266756,533266759,LK +533266760,533266763,SI +533266764,533266767,FR +533266768,533266771,BG +533266772,533266775,TN +533266776,533266779,GT +533266780,533266783,UY +533266784,533266787,LB +533266788,533266791,UZ +533266792,533266795,RS +533266796,533266799,LT +533266800,533266803,MM +533266804,533266807,CR +533266808,533266811,KE +533266812,533266815,ET +533266816,533266819,YE +533266820,533266823,PA +533266824,533266827,JO +533266828,533266831,LV +533266832,533266835,CY +533266836,533266839,TZ +533266840,533266843,CI +533266844,533266847,CM +533266848,533266851,SV +533266852,533266855,BH +533266856,533266859,TT +533266860,533266863,EE +533266864,533266867,BO +533266868,533266871,GH +533266872,533266875,PY +533266876,533266879,UG +533266880,533266883,AF +533266884,533266887,BA +533266888,533266891,ZM +533266892,533266895,HN +533266896,533266899,NP +533266900,533266903,GQ +533266904,533266907,JM +533266908,533266911,IS +533266912,533266943,DE +533266944,533266947,SN +533266948,533266951,CD +533266952,533266955,GA +533266956,533266959,US +533266960,533266963,BN +533266964,533266967,CG +533266968,533266971,AL +533266972,533266975,NA +533266976,533266979,KH +533266980,533266983,GE +533266984,533266987,MK +533266988,533266991,MU +533266992,533266995,ML +533266996,533266999,AM +533267000,533267003,PG +533267004,533267007,BF +533267008,533267011,MG +533267012,533267015,MT +533267016,533267019,TD +533267020,533267023,BS +533267024,533267027,HT +533267028,533267031,BJ +533267032,533267035,NI +533267036,533267039,LS +533267040,533267043,MN +533267044,533267047,RW +533267048,533267051,NE +533267052,533267055,TJ +533267056,533267059,ZW +533267060,533267063,MD +533267064,533267067,MW +533267068,533267071,KG +533267072,533267075,GN +533267076,533267079,BB +533267080,533267083,ME +533267084,533267087,MR +533267088,533267091,SR +533267092,533267095,SZ +533267096,533267099,FJ +533267100,533267103,TG +533267104,533267107,ER +533267108,533267111,GY +533267112,533267115,CF +533267116,533267119,SL +533267120,533267123,LS +533267124,533267127,CV +533267128,533267131,BI +533267132,533267135,MV +533267136,533267139,BZ +533267140,533267143,BT +533267144,533267147,DJ +533267148,533267151,AG +533267152,533267155,GM +533267156,533267159,LC +533267160,533267163,LR +533267164,533267167,SC +533267168,533267199,DE +533267200,533267423,US +533267424,533267455,DE +533267456,533267679,CN +533267680,533267711,DE +533267712,533267935,JP +533267936,533268223,DE +533268224,533268447,FR +533268448,533268479,DE +533268480,533268703,GB +533268704,533268735,DE +533268736,533268959,BR +533268960,533268991,DE +533268992,533269215,IT +533269216,533269247,DE +533269248,533269471,CA +533269472,533269503,DE +533269504,533269727,IN +533269728,533269759,DE +533269760,533269983,ES +533269984,533270015,DE +533270016,533270239,AU +533270240,533270271,DE +533270272,533270495,KR +533270496,533270527,DE +533270528,533270751,NL +533270752,533270783,DE +533270784,533271039,DK +533271040,533271295,EE +533271296,533271551,FO +533271552,533271807,GE +533271808,533272063,FR +533272064,533272319,DE +533272320,533272575,GI +533272576,533272831,GR +533272832,533273087,GL +533273088,533273343,GG +533273344,533273599,VA +533273600,533273855,HU +533273856,533274111,IS +533274112,533274367,IR +533274368,533274623,IQ +533274624,533274879,IE +533274880,533275135,IM +533275136,533275391,IL +533275392,533275647,IT +533275648,533275903,JE +533275904,533276159,JO +533276160,533276415,KZ +533276416,533276671,KW +533276672,533276927,KG +533276928,533277183,LV +533277184,533277439,LB +533277440,533277695,LI +533277696,533277951,LT +533277952,533278207,LU +533278208,533278463,MT +533278464,533278719,MC +533278720,533278975,ME +533278976,533279231,NL +533279232,533279487,NO +533279488,533279743,OM +533279744,533279999,PS +533280000,533280255,PL +533280256,533280511,PT +533280512,533280767,RO +533280768,533281023,RU +533281024,533281279,SM +533281280,533281535,SA +533281536,533281791,RS +533281792,533282047,SK +533282048,533282303,SI +533282304,533282559,ES +533282560,533282815,SE +533282816,533283071,CH +533283072,533283327,SY +533283328,533283583,TJ +533283584,533283839,TR +533283840,533284095,TM +533284096,533284351,UA +533284352,533284607,AE +533284608,533284863,GB +533284864,533285119,UZ +533285120,533285375,YE +533285376,533285631,AX +533285632,533285887,AL +533285888,533286143,AD +533286144,533286399,AM +533286400,533286655,AT +533286656,533286911,AZ +533286912,533287167,BH +533287168,533287423,BY +533287424,533287679,BE +533287680,533287935,BA +533287936,533288191,BG +533288192,533288447,HR +533288448,533288703,CY +533288704,533288959,CZ +533288960,533289215,DK +533289216,533289471,EE +533289472,533289727,FO +533289728,533289983,GE +533289984,533290239,FR +533290240,533290495,DE +533290496,533290751,GI +533290752,533291007,GR +533291008,533291263,GL +533291264,533291519,GG +533291520,533291775,VA +533291776,533292031,HU +533292032,533292287,IS +533292288,533292543,IR +533292544,533292799,IQ +533292800,533293055,IE +533293056,533293311,IM +533293312,533293567,IL +533293568,533293823,IT +533293824,533294079,JE +533294080,533294335,JO +533294336,533294591,KZ +533294592,533294847,KW +533294848,533295103,KG +533295104,533295359,LV +533295360,533295615,LB +533295616,533295871,LI +533295872,533296127,LT +533296128,533296383,LU +533296384,533296639,MT +533296640,533296895,MC +533296896,533297151,ME +533297152,533297407,NL +533297408,533297663,NO +533297664,533297919,OM +533297920,533298175,PT +533298176,533298431,RO +533298432,533298687,RU +533298688,533298943,SM +533298944,533299199,SA +533299200,533299455,RS +533299456,533299711,SK +533299712,533299967,SI +533299968,533300223,ES +533300224,533300479,SE +533300480,533300735,CH +533300736,533300991,SY +533300992,533301247,TJ +533301248,533301503,TM +533301504,533301759,UA +533301760,533302015,AE +533302016,533302271,GB +533302272,533302527,UZ +533302528,533302783,AX +533302784,533303039,AL +533303040,533303295,AD +533303296,533303551,AM +533303552,533303807,AT +533303808,533304063,AZ +533304064,533304319,BH +533304320,533304575,BY +533304576,533304831,BE +533304832,533305087,BA +533305088,533305343,BG +533305344,533305599,HR +533305600,533305855,FR +533305856,533306111,CZ +533306112,533306367,FR +533306368,533306623,EE +533306624,533306879,FO +533306880,533307135,GE +533307136,533307391,FR +533307392,533307647,DE +533307648,533307903,GI +533307904,533308159,GR +533308160,533308415,GL +533308416,533308671,GG +533308672,533308927,VA +533308928,533309183,HU +533309184,533309439,IS +533309440,533309695,IR +533309696,533309951,IQ +533309952,533310207,IE +533310208,533310463,IM +533310464,533310719,IL +533310720,533310975,IT +533310976,533311231,JE +533311232,533311487,JO +533311488,533311743,KZ +533311744,533311999,KW +533312000,533312255,KG +533312256,533312511,LV +533312512,533312767,LB +533312768,533313023,LI +533313024,533313279,LT +533313280,533313535,LU +533313536,533313791,MT +533313792,533314047,MC +533314048,533314303,ME +533314304,533314559,NL +533314560,533314815,NO +533314816,533315071,OM +533315072,533315327,PT +533315328,533315583,RO +533315584,533315839,RU +533315840,533316095,SM +533316096,533316351,SA +533316352,533316607,RS +533316608,533316863,SK +533316864,533317119,SI +533317120,533317375,ES +533317376,533317631,SE +533317632,533317887,CH +533317888,533318143,SY +533318144,533318399,TJ +533318400,533318655,TR +533318656,533318911,TM +533318912,533319167,UA +533319168,533319423,AE +533319424,533319679,GB +533319680,533319935,UZ +533319936,533320191,YE +533320192,533320447,AX +533320448,533320703,AL +533320704,533320959,AD +533320960,533321215,AM +533321216,533321471,AT +533321472,533321727,AZ +533321728,533321983,BH +533321984,533322495,BE +533322496,533331967,FR +533331968,533397503,UA +533397504,533463039,KW +533463040,533479423,RU +533479424,533479487,DE +533479488,533479519,SE +533479520,533479551,FI +533479552,533479711,DE +533479712,533479743,SE +533479744,533479775,FI +533479776,533479807,DK +533479808,533479999,DE +533480000,533480031,DK +533480032,533480063,FI +533480064,533480095,DE +533480096,533480127,SE +533480128,533480223,DE +533480224,533480255,DK +533480256,533480287,FI +533480288,533480319,SE +533480320,533480479,DE +533480480,533480511,NO +533480512,533480543,DE +533480544,533480575,DK +533480576,533480607,SE +533480608,533480735,DE +533480736,533480767,SE +533480768,533480799,NO +533480800,533480991,DE +533480992,533481023,NO +533481024,533481055,SE +533481056,533481279,DE +533481280,533481311,NO +533481312,533481343,DE +533481344,533481375,SE +533481376,533481471,DE +533481472,533483519,NO +533483520,533485567,FR +533485568,533487615,LU +533487616,533491711,RU +533491712,533495807,DE +533495808,533503999,NL +533504000,533512191,RU +533512192,533528575,ME +533528576,533594111,GB +533594112,533659647,TR +533659648,533676031,CZ +533676032,533680127,RU +533680128,533682175,TR +533682176,533684223,ES +533684224,533692415,IT +533692416,533725183,RU +533725184,533807103,SE +533807104,533811199,LT +533811200,533815295,DE +533815296,533815296,TR +533815297,533816319,CY +533816320,533816320,TR +533816321,533817343,CY +533817344,533817344,TR +533817345,533819391,CY +533819392,533823487,DE +533823488,533823551,CD +533823552,533823552,BE +533823553,533823612,CD +533823613,533823616,BE +533823617,533823644,CD +533823645,533823648,BE +533823649,533823660,CD +533823661,533823664,BE +533823665,533823676,CD +533823677,533823680,BE +533823681,533823692,CD +533823693,533823696,BE +533823697,533823708,CD +533823709,533823712,BE +533823713,533823724,CD +533823725,533825535,BE +533825536,533831679,IS +533831680,533835775,DE +533835776,533837823,SE +533837824,533839871,DE +533839872,533856255,IS +533856256,533858303,FR +533858304,533859343,HU +533859344,533859351,SK +533859352,533860095,HU +533860096,533861375,DE +533861376,533862399,NL +533862400,533864447,GB +533864448,533888255,TR +533888256,533888511,NO +533888512,533888767,TR +533888768,533889023,RO +533889024,533891071,GB +533891072,533893119,RU +533893120,533895167,ES +533895168,533897215,TR +533897216,533899263,DE +533899264,533901311,RU +533901312,533905407,IL +533905408,533913599,RU +533913600,533915647,ES +533915648,533919743,GB +533919744,533921791,SE +533921792,533954559,RU +533954560,533962751,BG +533962752,533964799,GB +533964800,533966847,NO +533966848,533968895,DE +533968896,533970943,ES +533970944,533987327,SE +533987328,534118399,DE +534118400,534151167,KW +534151168,534157759,DE +534157760,534157823,US +534157824,534166527,DE +534166528,534166783,AU +534166784,534167039,PL +534167040,534167295,TR +534167296,534175743,DE +534175744,534179839,NL +534179840,534181887,US +534181888,534183935,DE +534183936,534249471,RO +534249472,534253567,GB +534253568,534257407,FR +534257408,534257663,PL +534257664,534259711,SE +534259712,534261759,CH +534261760,534263807,GB +534263808,534265855,PL +534265856,534282239,CY +534282240,534284287,IT +534284288,534286335,SE +534286336,534288383,LU +534288384,534290431,IT +534290432,534296575,RU +534296576,534298623,BA +534298624,534306815,HR +534306816,534308863,SE +534308864,534309943,IE +534309944,534309983,GB +534309984,534310911,IE +534310912,534315007,IT +534315008,534347775,HR +534347776,534355967,GB +534355968,534364159,GR +534364160,534366207,FI +534366208,534368255,IT +534368256,534370303,IR +534370304,534372351,AT +534372352,534374399,KW +534374400,534376447,FR +534376448,534378495,IE +534378496,534380543,FR +534380544,534511615,AE +534511616,534544383,DE +534544384,534546431,RO +534546432,534548479,DE +534548480,534550527,PL +534550528,534560767,RU +534560768,534609919,GB +534609920,534642687,ES +534642688,534646783,CZ +534646784,534648831,PL +534648832,534650879,CH +534650880,534652927,RU +534652928,534654975,AL +534654976,534659583,GB +534659584,534661119,CZ +534661120,534663167,US +534663168,534675455,ES +534675456,534691839,GB +534691840,534693887,FR +534693888,534700031,GB +534700032,534708223,JO +534708224,534740991,TR +534740992,534749183,BA +534749184,534753279,NL +534753280,534757375,PS +534757376,534761471,KZ +534761472,534765567,BA +534765568,534767615,UA +534767616,534769663,HU +534769664,534773759,IT +534773760,536870911,DE +536870912,539623999,US +539624000,539624031,NL +539624032,539624567,US 539624568,539624575,IE 539624576,539624703,US 539624704,539624735,GB @@ -1178,7 +2555,8 @@ 540813184,540813247,NL 540813248,540813287,US 540813288,540813295,DE -540813296,540813311,US +540813296,540813303,SG +540813304,540813311,US 540813312,540813567,NL 540813568,540813639,DE 540813640,540813671,TW @@ -1187,11 +2565,15 @@ 540814016,540814079,US 540814080,540814271,TW 540814272,540814279,DE -540814280,540814511,US +540814280,540814327,US +540814328,540814335,IN +540814336,540814511,US 540814512,540814519,SG 540814520,540814719,US 540814720,540814735,SG -540814736,540819455,US +540814736,540815168,US +540815169,540815182,SG +540815183,540819455,US 540819456,540823551,CA 540823552,540826671,US 540826672,540826719,CA @@ -1226,20 +2608,30 @@ 543691008,543844351,US 543844352,543844607,CH 543844608,603979775,US -603980032,603980287,AU -603981824,603983871,CN -604045312,604110847,CN +603979776,603980799,CN +603980800,603981823,NP +603981824,604110847,CN +604110848,604241919,JP 604241920,604504063,CN 604504064,605028351,JP -605028352,607125503,CN -607256576,607257599,AU -607322112,607387647,CN +605028352,606412799,CN +606412800,606413823,HK +606413824,606414335,CN +606414336,606414591,AU +606414592,606420991,CN +606420992,606437375,ID +606437376,606470143,KH +606470144,606601215,KR +606601216,607387647,CN +607387648,607649791,JP 607649792,608174079,CN 608174080,610271231,ID 610271232,618659839,CN 618659840,619708415,TW +619708416,620232703,JP +620232704,620494847,CN +620494848,620625919,NP 620625920,620691455,CN -620691456,620756991,AU 637534208,644067391,US 644067392,644067455,CA 644067456,644835071,US @@ -1249,6 +2641,20 @@ 644840448,645225471,US 645225472,645225503,CA 645225504,654311423,US +654311424,654311679,CN +654311680,654311935,AU +654311936,654376959,CN +654376960,654442495,TW +654442496,654573567,JP +654573568,654835711,KR +654835712,655359999,TW +655360000,656408575,KR +656408576,658505727,PK +658505728,660602879,CN +660602880,661651455,HK +661651456,662700031,KR +662700032,666894335,CN +666894336,671088639,ID 671088640,687865855,US 687865856,689963007,ZA 689963008,691011583,EG @@ -1312,6 +2718,7 @@ 692801536,692805631,NG 692805632,692809727,ZA 692809728,692813823,MW +692813824,692817919,ZA 692817920,692822015,KE 692822016,692826111,UG 692826112,692830207,KE @@ -1349,6 +2756,21 @@ 692916224,692918271,MG 692918272,692920319,ZA 692920320,692922367,MZ +692922368,692924415,NG +692924416,692928511,ZA +692928512,692930559,GH +692930560,692932607,UG +692932608,692934655,CM +692934656,692936703,BW +692936704,692940799,ZA +692940800,692942847,MA +692942848,692944895,GA +692944896,692946943,MZ +692946944,692948991,EG +692948992,692951039,ZM +692951040,692953087,ZA +692953088,692955135,RW +692955136,692957183,NG 692969472,692971519,TZ 692973568,692975615,MZ 692975616,692977663,EG @@ -1361,7 +2783,7 @@ 692984832,692987903,ZA 692987904,692988927,GH 692988928,692989951,ZW -692989952,692990975,BF +692989952,692991999,BF 692992000,692993023,MW 692993024,692994047,EG 692994048,692995071,TZ @@ -1402,6 +2824,43 @@ 693032960,693033983,MW 693033984,693035007,ZA 693035008,693036031,NG +693036032,693038079,ZA +693038080,693039103,ZW +693039104,693040127,GA +693040128,693041151,ZA +693041152,693042175,MW +693042176,693043199,NG +693043200,693044223,ZW +693044224,693045247,NG +693045248,693046271,KE +693046272,693047295,ZW +693047296,693049343,ZA +693050368,693051391,ZW +693051392,693052415,BW +693052416,693054463,ZA +693054464,693055487,BI +693055488,693056511,GQ +693056512,693057535,NA +693057536,693058559,ZW +693058560,693059583,SC +693059584,693060607,NG +693060608,693061631,TZ +693061632,693064703,ZA +693064704,693065727,GH +693065728,693066751,MW +693066752,693067775,ZA +693067776,693068799,GH +693068800,693069823,TZ +693069824,693071871,ZA +693071872,693072895,ZW +693072896,693073919,NG +693074944,693075967,CV +693075968,693076991,CM +693076992,693078015,ZW +693078016,693079039,BW +693079040,693080063,KE +693080064,693081087,NG +693084160,693085183,MU 693101568,693102591,KE 693102592,693103615,CD 693103616,693104639,GN @@ -1508,7 +2967,7 @@ 700342272,700350463,NA 700350464,700358655,UG 700358656,700366847,MZ -700366848,700375039,UG +700366848,700375039,MW 700375040,700376063,CM 700376064,700377087,NE 700377088,700378111,KE @@ -1530,7 +2989,7 @@ 700408832,700409855,CM 700409856,700410879,LR 700410880,700411903,NG -700411904,700412927,KE +700411904,700412927,ZA 700412928,700413951,ZM 700413952,700414975,SC 700414976,700432383,ZA @@ -1550,7 +3009,9 @@ 700588032,700588286,KM 700588287,700589567,A2 700589568,700589695,TZ -700589696,700592383,A2 +700589696,700590335,A2 +700590336,700590591,NE +700590592,700592383,A2 700592384,700592639,KE 700592640,700593151,A2 700593152,700594175,NG @@ -1599,7 +3060,9 @@ 701382656,701390847,CI 701390848,701399039,GA 701399040,701407231,EG -701407232,701415423,CA +701407232,701408511,CA +701408512,701408767,ZA +701408768,701415423,CA 701415424,701423615,ZA 701423616,701431807,NG 701431808,701439999,CI @@ -1811,24 +3274,83 @@ 703594496,704118783,ZA 704118784,704380927,MA 704380928,704643071,LY -704643328,704643583,AU -705691648,707788799,KR -707919872,707920895,AU -707985408,708050943,CN +704643072,704644095,CN +704644096,704645119,BD +704645120,704650239,CN +704650240,704651263,MY +704651264,704659455,CN +704659456,704675839,TW +704675840,704723967,CN +704723968,704724991,MY +704724992,704741375,VN +704741376,704774143,CN +704774144,704905215,HK +704905216,705167359,CN +705167360,707788799,KR +707788800,708575231,CN +708575232,708706303,SG +708706304,708751359,CN +708751360,708752383,ID +708752384,708755455,CN +708755456,708771839,AU 708771840,708837375,CN -721354752,721420287,AU +708837376,709885951,TW +709885952,710017023,CN +710017024,710082559,KR +710082560,710098943,JP +710098944,710104063,CN +710104064,710105087,PK +710105088,710934527,CN +710934528,710950911,VN +710950912,710961151,CN +710961152,710962175,TH +710962176,711065599,CN +711065600,711131135,HK +711131136,711160831,CN +711160832,711161855,BD +711161856,711163903,CN +711163904,711196671,JP +711196672,711458815,CN +711458816,711983103,IN +711983104,712507391,VN +712507392,712712191,CN +712712192,712713215,JP +712713216,712769535,CN +712769536,713031679,JP +713031680,714080255,CN +714080256,714604543,JP +714604544,714866687,MY +714866688,714874879,CN +714874880,714875903,MY +714875904,716930047,CN +716930048,716931071,JP +716931072,716963839,CN +716963840,717225983,MY +717225984,717750271,CN +717750272,717815807,HK +717815808,717848575,CN +717848576,717881343,PK +717881344,720437247,CN +720437248,720502783,AU +720502784,721420287,CN 721420288,738197503,JP 738197504,771751935,US 771751936,771817471,RU 771817472,771948543,TR 771948544,772014079,RU -772014080,772051223,DE -772051224,772051231,CH -772051232,772054815,DE +772014080,772047647,DE +772047648,772047663,IT +772047664,772050575,DE +772050576,772050583,TR +772050584,772054815,DE 772054816,772054847,ES 772054848,772057727,DE 772057728,772057735,IT -772057736,772145151,DE +772057736,772076095,DE +772076096,772076103,IT +772076104,772076127,DE +772076128,772076159,EG +772076160,772145151,DE 772145152,772210687,ES 772210688,772276223,IE 772276224,772341759,RU @@ -1864,9 +3386,13 @@ 772837376,772839423,KZ 772839424,772841471,CH 772841472,772843519,GB -772843520,772845567,IT +772843520,772844799,IT +772844800,772845311,US +772845312,772845567,IT 772845568,772847615,RU -772847616,772849663,GB +772847616,772848128,GB +772848129,772848191,JO +772848192,772849663,GB 772849664,772851711,BG 772851712,772853759,CH 772853760,772855807,GB @@ -1915,7 +3441,9 @@ 772927488,772929535,UA 772929536,772931583,RU 772931584,772933631,UA -772933632,772935679,GB +772933632,772933920,GB +772933921,772933928,IE +772933929,772935679,GB 772935680,772937727,PS 772937728,772939775,IT 772939776,772941823,BE @@ -1926,8 +3454,7 @@ 772950016,772952063,ES 772952064,772954111,GB 772954112,772958207,FR -772958208,772960255,PL -772960256,772962303,GB +772958208,772962303,GB 772962304,772966399,FR 772966400,772968447,IT 772968448,772970495,SK @@ -1941,7 +3468,10 @@ 772986880,772988927,GB 772988928,772990975,FR 772990976,772993023,IT -772993024,772995071,DE +772993024,772994559,DE +772994560,772994815,NL +772994816,772994943,US +772994944,772995071,DE 772995072,772997119,IR 772997120,772999167,BE 772999168,773001215,SI @@ -1970,7 +3500,11 @@ 773048320,773050367,LV 773050368,773052415,IE 773052416,773054463,NL -773054464,773056511,AL +773054464,773054655,AL +773054656,773054719,RS +773054720,773055487,AL +773055488,773056255,RS +773056256,773056511,AL 773056512,773058559,IT 773058560,773060607,BE 773060608,773062655,DK @@ -1978,11 +3512,19 @@ 773062912,773063167,US 773063168,773063424,TR 773063425,773063436,US -773063437,773063935,TR -773063936,773065215,US -773065216,773066751,TR +773063437,773065064,TR +773065065,773065070,US +773065071,773065088,TR +773065089,773065215,US +773065216,773065584,TR +773065585,773065590,GB +773065591,773066751,TR 773066752,773070847,AT -773070848,773074943,DE +773070848,773071231,DE +773071232,773071263,NA +773071264,773073279,DE +773073280,773073343,ES +773073344,773074943,DE 773074944,773079039,PL 773079040,773083135,RU 773083136,773087231,IT @@ -1999,24 +3541,42 @@ 773128192,773132287,DE 773132288,773134335,IT 773134336,773134847,CH -773134848,773135359,IT -773135360,773135871,CH -773135872,773136383,IT +773134848,773136383,IT 773136384,773140479,DK 773140480,773144575,CY 773144576,773148671,RU 773148672,773152767,IR -773152768,773156863,SE -773156864,773165055,FR -773165056,773168127,NL -773168128,773168383,US -773168384,773168511,NL -773168512,773168639,US -773168640,773169023,NL -773169024,773169151,US -773169152,773169375,NL -773169376,773169407,BE -773169408,773173247,NL +773152768,773153791,SE +773153792,773154815,US +773154816,773155583,SE +773155584,773155839,US +773155840,773156863,SE +773156864,773158143,FR +773158144,773158911,DE +773158912,773160447,FR +773160448,773160959,ES +773160960,773165055,FR +773165056,773166591,NL +773166592,773167207,US +773167208,773167215,NL +773167216,773167359,US +773167360,773167615,NL +773167616,773168639,US +773168640,773168671,NL +773168672,773169151,US +773169152,773171343,NL +773171344,773171359,BE +773171360,773171599,NL +773171600,773171607,BE +773171608,773171615,NL +773171616,773171647,BE +773171648,773172223,NL +773172224,773172287,BE +773172288,773172351,GB +773172352,773172479,NL +773172480,773172607,GB +773172608,773172735,BE +773172736,773173247,NL 773173248,773177343,IT 773177344,773181439,FR 773181440,773185535,PL @@ -2062,7 +3622,9 @@ 773597184,773599231,BE 773599232,773601279,GB 773601280,773603327,LV -773603328,773605375,UA +773603328,773603839,UA +773603840,773603855,HK +773603856,773605375,UA 773605376,773607423,IR 773607424,773609471,DE 773609472,773611519,RU @@ -2074,19 +3636,21 @@ 773621760,773623807,PS 773623808,773625855,SE 773625856,773627903,IS -773627904,773629951,TR +773627904,773629951,ES 773629952,773631999,FR 773632000,773634047,CY 773634048,773636095,DE 773636096,773638143,UA -773638144,773640191,GB +773638144,773640191,CH 773640192,773642239,ES 773642240,773644287,HU 773644288,773646335,RU 773646336,773648383,TR 773648384,773650431,PL 773650432,773652479,GB -773652480,773654527,SK +773652480,773653759,SK +773653760,773653775,CZ +773653776,773654527,SK 773654528,773656575,RU 773656576,773658623,PL 773658624,773660671,DE @@ -2101,19 +3665,21 @@ 773672960,773675007,SA 773675008,773677055,GB 773677056,773679103,DE -773679104,773679135,IT -773679136,773679327,A2 -773679328,773679359,IT +773679104,773679359,IT 773679360,773679423,GB -773679424,773679615,A2 -773679616,773680191,IT -773680192,773681151,A2 +773679424,773680383,IT +773680384,773680639,A2 +773680640,773681151,IT 773681152,773683199,RU -773683200,773685247,FR +773683200,773684223,FR +773684224,773684239,GB +773684240,773684255,BE +773684256,773684271,NL +773684272,773685247,FR 773685248,773687295,UA 773687296,773689343,HU 773689344,773691391,PL -773691392,773695487,RU +773691392,773693439,RU 773695488,773697535,MK 773697536,773699583,LU 773699584,773701631,CZ @@ -2124,8 +3690,7 @@ 773709824,773711871,CZ 773711872,773713919,RU 773713920,773715967,NL -773715968,773716479,EE -773716480,773716991,SE +773715968,773716991,SE 773716992,773718015,US 773718016,773720063,DE 773720064,773722111,GB @@ -2135,7 +3700,9 @@ 773730304,773732351,GB 773732352,773734399,DE 773734400,773736447,CZ -773736448,773740543,DE +773736448,773739071,DE +773739072,773739079,AT +773739080,773740543,DE 773740544,773742591,CZ 773742592,773744639,GB 773744640,773746687,ES @@ -2150,22 +3717,31 @@ 773763072,773765119,TR 773765120,773767167,NL 773767168,773769215,GB -773769216,773771263,SE +773769216,773771263,FR 773771264,773773311,DK 773773312,773775359,IT 773775360,773777407,IQ 773777408,773779455,CZ -773779456,773781503,ME -773781504,773783551,IT +773779456,773783551,IT 773783552,773785599,RU 773785600,773787647,NL 773787648,773789695,DK 773789696,773791743,RU 773791744,773793791,PL -773793792,773795839,FR +773793792,773794527,FR +773794528,773794535,GB +773794536,773794543,IT +773794544,773794551,ES +773794552,773794559,DE +773794560,773795839,FR 773795840,773797887,NL 773797888,773799935,ES -773799936,773801983,CY +773799936,773800447,GB +773800448,773800703,CY +773800704,773800959,GB +773800960,773801215,SG +773801216,773801727,US +773801728,773801983,GB 773801984,773804031,IQ 773804032,773806079,GB 773806080,773808127,BE @@ -2178,6 +3754,7 @@ 773820416,773822463,TR 773822464,773824511,RU 773824512,773826559,FR +773826560,773828607,GB 773828608,773830655,HU 773830656,773832703,NO 773832704,773834751,FR @@ -2195,16 +3772,25 @@ 773898240,773906431,PS 773906432,773922815,GB 773922816,773931007,UA -773931008,773939199,FR +773931008,773934591,DE +773934592,773939199,FR 773939200,773947391,CZ 773947392,773955583,GB 773955584,773963775,FR 773963776,773971967,ME 773971968,773980159,UA 773980160,773988351,GB -773988352,774003199,ES +773988352,774000895,ES +774000896,774001151,NL +774001152,774001663,ES +774001664,774002687,NL +774002688,774003199,ES 774003200,774003263,TR -774003264,774003711,ES +774003264,774003311,ES +774003312,774003391,TR +774003392,774003439,ES +774003440,774003455,TR +774003456,774003711,ES 774003712,774004223,BE 774004224,774004479,ES 774004480,774004511,BE @@ -2215,19 +3801,21 @@ 774029312,774037503,RO 774037504,774045695,SK 774045696,774053887,FR -774053888,774055935,DE +774053888,774055551,DE +774055552,774055679,US +774055680,774055935,DE 774055936,774057983,US -774057984,774058111,DE -774058112,774058239,BZ -774058240,774059215,DE +774057984,774058359,DE +774058360,774058367,HR +774058368,774059215,DE 774059216,774059223,ZA -774059224,774061103,DE +774059224,774060031,DE +774060032,774060047,ES +774060048,774061007,DE +774061008,774061023,CZ +774061024,774061103,DE 774061104,774061111,GI -774061112,774061567,DE -774061568,774061695,BZ -774061696,774061823,DE -774061824,774061951,BZ -774061952,774062079,DE +774061112,774062079,DE 774062080,774070271,YE 774070272,774078463,ES 774078464,774086655,BA @@ -2323,10 +3911,10 @@ 774161439,774161448,MK 774161449,774161458,PS 774161459,774161468,UZ -774161469,774161478,BD -774161479,774161488,KP +774161469,774161478,MS +774161479,774161488,US 774161489,774161498,MN -774161499,774161518,VA +774161499,774161518,US 774161519,774161528,TW 774161529,774161538,DO 774161539,774161548,PY @@ -2335,22 +3923,20 @@ 774161569,774161578,LC 774161579,774161588,VE 774161589,774161598,TC -774161599,774161608,US -774161609,774161618,LI -774161619,774161628,AE +774161599,774161628,US 774161629,774161638,PA 774161639,774161648,RU 774161649,774161658,HK 774161659,774161664,VA -774161665,774161674,CY +774161665,774161674,US 774161675,774161684,CL -774161685,774161694,NI +774161685,774161694,GR 774161695,774161704,AG 774161705,774161714,AM -774161715,774161724,IR +774161715,774161724,GB 774161725,774161734,RO 774161735,774161744,UA -774161745,774161754,NP +774161745,774161754,AU 774161755,774161764,PG 774161765,774161774,ZA 774161775,774161784,SN @@ -2373,119 +3959,133 @@ 774161905,774161909,CZ 774161910,774161914,LT 774161915,774161917,PL -774161918,774161940,VA -774161941,774161950,LI -774161951,774168575,VA +774161918,774161920,VA +774161921,774161940,GB +774161941,774161950,AU +774161951,774161955,IT +774161956,774161960,NZ +774161961,774161965,PL +774161966,774161970,NL +774161971,774161975,CA +774161976,774161980,US +774161981,774161985,GB +774161986,774161990,IQ +774161991,774161995,LT +774161996,774162000,ER +774162001,774162005,KE +774162006,774162010,DE +774162011,774162015,TN +774162016,774162020,TT +774162021,774162025,BO +774162026,774162030,CH +774162031,774162035,AU +774162036,774162040,AL +774162041,774162045,AD +774162046,774162050,HR +774162051,774162055,ME +774162056,774162060,SY +774162061,774162065,US +774162066,774162070,HT +774162071,774162075,EC +774162076,774162080,SH +774162081,774162085,ZM +774162086,774162090,KH +774162091,774162095,VN +774162096,774162100,FM +774162101,774162105,US +774162106,774162110,GB +774162111,774162115,SO +774162116,774162120,FI +774162121,774162125,DZ +774162126,774162130,MO +774162131,774162135,MR +774162136,774162140,CM +774162141,774162145,SV +774162146,774162150,HN +774162151,774162155,US +774162156,774162160,UY +774162161,774162165,LV +774162166,774162170,MD +774162171,774162173,GB +774162174,774162176,VA +774162177,774162181,LK +774162182,774162186,IE +774162187,774162196,EH +774162197,774162206,NA +774162207,774162216,CX +774162217,774162236,GB +774162237,774162246,CH +774162247,774162266,US +774162267,774162276,PT +774162277,774162286,AE +774162287,774162296,IO +774162297,774162306,GB +774162307,774162316,RE +774162317,774162326,TK +774162327,774162336,CV +774162337,774162346,AZ +774162347,774162366,US +774162367,774162376,MX +774162377,774162386,GB +774162387,774162396,ZW +774162397,774162406,SZ +774162407,774162416,SD +774162417,774162426,BF +774162427,774162432,VA +774162433,774162442,GB +774162443,774162452,BA +774162453,774162462,WS +774162463,774162472,SR +774162473,774162483,PT +774162484,774162492,CK +774162493,774162502,KI +774162503,774162512,NU +774162513,774162522,TO +774162523,774162532,CL +774162533,774162542,TF +774162543,774162552,GG +774162553,774162562,LR +774162563,774162572,MQ +774162573,774162582,YT +774162583,774162592,NC +774162593,774162602,NG +774162603,774162627,US +774162628,774162637,GB +774162638,774162642,NF +774162643,774162687,US +774162688,774162688,VA +774162689,774162748,US +774162749,774162753,PR +774162754,774162778,US +774162779,774162798,CA +774162799,774162803,BN +774162804,774162808,TM +774162809,774162813,US +774162814,774162818,IT +774162819,774162823,KZ +774162824,774162828,MV +774162829,774162833,PN +774162834,774162838,SM +774162839,774162848,GB +774162849,774162853,AU +774162854,774162858,NL +774162859,774162863,IE +774162864,774162943,VA +774162944,774163199,CH +774163200,774168575,VA 774168576,774176767,PL 774176768,774184959,IT 774184960,774193151,GB 774193152,774209535,ES 774209536,774217727,RU -774217728,774217759,GB -774217760,774217791,RU -774217792,774217823,US -774217824,774217855,GB -774217856,774217919,US -774217920,774217927,CN -774217928,774217935,LK -774217936,774218239,CN -774218240,774218495,US -774218496,774218503,SG -774218504,774218519,CN -774218520,774218527,PK -774218528,774218535,CN -774218536,774218543,IN -774218544,774218551,HR -774218552,774218559,TW -774218560,774218567,GB -774218568,774218575,TW -774218576,774218591,GB -774218592,774218599,CN -774218600,774218607,PT -774218608,774219007,GB -774219008,774219263,US -774219264,774221823,GB -774221824,774222591,CN -774222592,774222847,GB -774222848,774222863,UA -774222864,774222879,TR -774222880,774222911,GB -774222912,774223039,CN -774223040,774223071,IT -774223072,774223103,CN -774223104,774223119,UA -774223120,774223135,TR -774223136,774223151,GB -774223152,774223167,TR -774223168,774223231,CN -774223232,774223359,GB -774223360,774223375,UA -774223376,774223391,GB -774223392,774223423,TR -774223424,774223951,GB -774223952,774223959,RU -774223960,774223967,CN -774223968,774223975,RU -774223976,774223983,US -774223984,774223991,RU -774223992,774223999,PK -774224000,774224007,IT -774224008,774224039,CN -774224040,774224047,CA -774224048,774224055,CN -774224056,774224079,IN -774224080,774224127,GB -774224128,774224159,BE -774224160,774224223,US -774224224,774224255,LT -774224256,774224383,GB -774224384,774224399,UA -774224400,774224407,LT -774224408,774224415,GB -774224416,774224423,IT -774224424,774224447,GB -774224448,774224511,CN -774224512,774224767,GB -774224768,774224831,CN -774224832,774224847,UA -774224848,774224863,RU -774224864,774224999,GB -774225000,774225007,CN -774225008,774225015,PK -774225016,774225023,CN -774225024,774225055,US -774225056,774225151,RU -774225152,774225343,GB -774225344,774225351,CN -774225352,774225359,LT -774225360,774225375,UA -774225376,774225391,RU -774225392,774225407,UA -774225408,774225535,GB -774225536,774225567,CN -774225568,774225599,RU -774225600,774225615,PK -774225616,774225647,TR -774225648,774225663,UA -774225664,774225671,LK -774225672,774225679,IT -774225680,774225687,CN -774225688,774225695,GB -774225696,774225703,RU -774225704,774225711,LK -774225712,774225791,GB -774225792,774225807,UA -774225808,774225823,RU -774225824,774225855,US -774225856,774225919,IN +774217728,774225919,GB 774225920,774234111,UA 774234112,774242303,IT 774242304,774258687,RU 774258688,774266879,SA 774266880,774275071,RU -774275072,774275327,GB -774275328,774283263,IR -774283264,774291455,GB +774275072,774283007,IR +774283008,774291455,GB 774291456,774299647,NL 774299648,774307839,DE 774307840,774324223,RU @@ -2520,8 +4120,7 @@ 774750208,774782975,RU 774782976,774799359,UA 774799360,774815743,RU -774815744,774823935,NO -774823936,774832127,SE +774815744,774832127,NO 774832128,774848511,RU 774848512,774864895,BG 774864896,774881279,CZ @@ -2545,7 +4144,42 @@ 775520256,775553023,SY 775553024,775585791,EU 775585792,775618559,SY -775618560,775651327,SE +775618560,775641087,SE +775641088,775641119,FI +775641120,775641215,SE +775641216,775641279,GB +775641280,775641343,DE +775641344,775641375,FI +775641376,775641471,SE +775641472,775641535,GB +775641536,775641599,DE +775641600,775641631,FI +775641632,775641727,SE +775641728,775641791,GB +775641792,775641855,DE +775641856,775641887,FI +775641888,775641983,SE +775641984,775642047,GB +775642048,775642111,DE +775642112,775642143,FI +775642144,775642239,SE +775642240,775642303,GB +775642304,775642367,DE +775642368,775642399,FI +775642400,775642495,SE +775642496,775642559,GB +775642560,775642623,DE +775642624,775642655,FI +775642656,775642751,SE +775642752,775642815,GB +775642816,775642879,DE +775642880,775642911,FI +775642912,775643007,SE +775643008,775643071,GB +775643072,775643135,DE +775643136,775645951,SE +775645952,775646207,NO +775646208,775651327,SE 775651328,775684095,DE 775684096,775716863,PS 775716864,775749631,GB @@ -2567,10 +4201,1344 @@ 778240000,778305535,AL 778305536,778371071,IR 778371072,778436607,RU -778436608,778502143,RO +778436608,778498047,RO +778498048,778500095,NL +778500096,778502143,RO 778502144,778567679,GR 778567680,778633215,TR -778633216,778698751,FR +778633216,778638079,FR +778638080,778638335,IT +778638336,778638591,ES +778638592,778638975,FR +778638976,778639103,CZ +778639104,778639231,LT +778639232,778639359,FI +778639360,778639615,ES +778639616,778639871,PL +778639872,778640127,DE +778640128,778640383,GB +778640384,778640639,IT +778640640,778640895,PT +778640896,778641151,NL +778641152,778641407,IE +778641408,778665983,FR +778665984,778666015,BE +778666016,778666031,FR +778666032,778666047,PL +778666048,778666063,FR +778666064,778666079,IE +778666080,778666095,FR +778666096,778666099,PL +778666100,778666103,LT +778666104,778666107,GB +778666108,778666111,IE +778666112,778666119,FR +778666120,778666123,GB +778666124,778666127,FR +778666128,778666143,PL +778666144,778666151,FR +778666152,778666155,GB +778666156,778666159,ES +778666160,778666191,FR +778666192,778666239,PL +778666240,778666243,GB +778666244,778666259,FR +778666260,778666263,PL +778666264,778666271,CH +778666272,778666295,FR +778666296,778666299,ES +778666300,778666303,GB +778666304,778666367,FR +778666368,778666371,PL +778666372,778666375,GB +778666376,778666383,FR +778666384,778666391,DE +778666392,778666399,PL +778666400,778666479,FR +778666480,778666495,DE +778666496,778666751,BE +778666752,778666783,CZ +778666784,778666815,FR +778666816,778666847,GB +778666848,778666863,PT +778666864,778666871,GB +778666872,778666879,IE +778666880,778666967,FR +778666968,778666975,PL +778666976,778667007,FR +778667008,778667263,GB +778667264,778667279,FR +778667280,778667283,IE +778667284,778667287,PL +778667288,778667291,IT +778667292,778667295,CH +778667296,778667327,BE +778667328,778667331,GB +778667332,778667335,FR +778667336,778667343,ES +778667344,778667347,FR +778667348,778667351,GB +778667352,778667391,PL +778667392,778667407,FR +778667408,778667415,PL +778667416,778667423,FR +778667424,778667455,LT +778667456,778667471,DE +778667472,778667475,PL +778667476,778667479,DE +778667480,778667483,GB +778667484,778667487,NL +778667488,778667491,LT +778667492,778667495,CH +778667496,778667499,DE +778667500,778667503,GB +778667504,778667839,FR +778667840,778667855,PL +778667856,778667871,FR +778667872,778667875,ES +778667876,778667879,LT +778667880,778667887,FI +778667888,778667895,IT +778667896,778667903,IE +778667904,778667911,GB +778667912,778667915,PL +778667916,778667919,PT +778667920,778667927,NL +778667928,778667931,GB +778667932,778667935,CZ +778667936,778667943,FR +778667944,778667947,DE +778667948,778667951,IE +778667952,778667967,GB +778667968,778667999,FR +778668000,778668019,DE +778668020,778668023,ES +778668024,778668027,PT +778668028,778668319,FR +778668320,778668351,GB +778668352,778668359,FR +778668360,778668367,PL +778668368,778668371,DE +778668372,778668375,ES +778668376,778668379,GB +778668380,778668391,FR +778668392,778668395,PT +778668396,778668399,ES +778668400,778668415,FR +778668416,778668495,ES +778668496,778668499,PL +778668500,778668503,FR +778668504,778668507,ES +778668508,778668511,PT +778668512,778668527,PL +778668528,778668535,IT +778668536,778668539,DE +778668540,778668543,FR +778668544,778668559,GB +778668560,778668567,IT +778668568,778668575,PL +778668576,778668607,FR +778668608,778668615,IE +778668616,778668619,PL +778668620,778668639,FR +778668640,778668671,PL +778668672,778668703,NL +778668704,778668707,PL +778668708,778668711,ES +778668712,778668715,FR +778668716,778668719,PL +778668720,778668723,PT +778668724,778668727,PL +778668728,778668731,IE +778668732,778668735,DE +778668736,778668799,IT +778668800,778669055,FR +778669056,778669087,ES +778669088,778669103,FR +778669104,778669107,PL +778669108,778669111,GB +778669112,778669119,NL +778669120,778669151,FI +778669152,778669183,PT +778669184,778669199,FR +778669200,778669207,PL +778669208,778669211,CH +778669212,778669215,ES +778669216,778669219,CH +778669220,778669223,FI +778669224,778669231,NL +778669232,778669247,PL +778669248,778669295,FR +778669296,778669303,PL +778669304,778669439,FR +778669440,778669447,GB +778669448,778669451,PL +778669452,778669455,ES +778669456,778669471,FR +778669472,778669503,CZ +778669504,778669535,ES +778669536,778669539,PL +778669540,778669543,GB +778669544,778669547,FR +778669548,778669551,IT +778669552,778669567,PL +778669568,778669571,DE +778669572,778669575,CZ +778669576,778669579,NL +778669580,778669583,DE +778669584,778669587,ES +778669588,778669591,FR +778669592,778669599,BE +778669600,778669615,FR +778669616,778669623,GB +778669624,778669631,PL +778669632,778669663,FR +778669664,778669695,GB +778669696,778669727,PT +778669728,778669759,NL +778669760,778669767,DE +778669768,778669771,GB +778669772,778669775,PL +778669776,778669783,DE +778669784,778669787,IE +778669788,778669791,PL +778669792,778669807,DE +778669808,778669823,FR +778669824,778669855,ES +778669856,778669887,FR +778669888,778669903,PL +778669904,778669935,FR +778669936,778669943,DE +778669944,778669951,CH +778669952,778669959,NL +778669960,778669967,GB +778669968,778669983,IE +778669984,778669999,IT +778670000,778670007,PL +778670008,778670011,CZ +778670012,778670015,LT +778670016,778670019,NL +778670020,778670035,IT +778670036,778670039,GB +778670040,778670043,ES +778670044,778670079,GB +778670080,778670151,FR +778670152,778670159,CH +778670160,778670163,FR +778670164,778670171,GB +778670172,778670175,NL +778670176,778670207,GB +778670208,778670211,DE +778670212,778670215,IT +778670216,778670223,FR +778670224,778670239,PL +778670240,778670243,PT +778670244,778670247,DE +778670248,778670255,CZ +778670256,778670291,FR +778670292,778670295,NL +778670296,778670303,DE +778670304,778670335,FR +778670336,778670343,DE +778670344,778670347,CZ +778670348,778670351,PL +778670352,778670355,DE +778670356,778670359,FR +778670360,778670383,DE +778670384,778670387,PL +778670388,778670391,NL +778670392,778670395,CZ +778670396,778670399,GB +778670400,778670407,PL +778670408,778670411,DE +778670412,778670415,NL +778670416,778670431,FR +778670432,778670435,NL +778670436,778670439,ES +778670440,778670447,PL +778670448,778670455,CH +778670456,778670495,CZ +778670496,778670503,FR +778670504,778670511,ES +778670512,778670519,NL +778670520,778670523,FR +778670524,778670527,PT +778670528,778670559,FR +778670560,778670563,PL +778670564,778670567,FI +778670568,778670571,CH +778670572,778670575,FR +778670576,778670591,IT +778670592,778671103,ES +778671104,778671119,GB +778671120,778671127,IT +778671128,778671135,PT +778671136,778671167,BE +778671168,778671183,FI +778671184,778671203,FR +778671204,778671211,PL +778671212,778671231,FR +778671232,778671239,GB +778671240,778671243,PL +778671244,778671247,ES +778671248,778671263,PL +778671264,778671279,GB +778671280,778671311,FR +778671312,778671327,PT +778671328,778671331,ES +778671332,778671335,DE +778671336,778671631,FR +778671632,778671647,PL +778671648,778671807,FR +778671808,778671839,ES +778671840,778671867,FR +778671868,778671871,GB +778671872,778671875,PL +778671876,778671879,ES +778671880,778671883,NL +778671884,778671887,ES +778671888,778671903,GB +778671904,778671907,NL +778671908,778671915,FR +778671916,778671919,GB +778671920,778671935,PT +778671936,778671967,FR +778671968,778672015,ES +778672016,778672055,FR +778672056,778672063,PL +778672064,778672067,GB +778672068,778672071,FR +778672072,778672079,GB +778672080,778672095,BE +778672096,778672103,CH +778672104,778672111,NL +778672112,778672115,GB +778672116,778672119,IT +778672120,778672123,ES +778672124,778672127,CH +778672128,778672255,FR +778672256,778672319,BE +778672320,778672383,FR +778672384,778672447,PL +778672448,778672479,DE +778672480,778672511,ES +778672512,778672543,FR +778672544,778672551,ES +778672552,778672559,CH +778672560,778672563,GB +778672564,778672567,IT +778672568,778672639,FR +778672640,778672703,DE +778672704,778672767,CH +778672768,778672799,PL +778672800,778672803,FR +778672804,778672807,DE +778672808,778672811,PL +778672812,778672815,ES +778672816,778672819,LT +778672820,778672823,PL +778672824,778672831,DE +778672832,778672851,FR +778672852,778672891,PL +778672892,778672911,FR +778672912,778672919,PL +778672920,778672923,FR +778672924,778672927,ES +778672928,778672959,DE +778672960,778673071,FR +778673072,778673079,DE +778673080,778673083,ES +778673084,778673087,PT +778673088,778673119,FR +778673120,778673151,ES +778673152,778673183,FR +778673184,778673195,ES +778673196,778673199,GB +778673200,778673203,CZ +778673204,778673207,IE +778673208,778673211,DE +778673212,778673215,ES +778673216,778673247,FI +778673248,778673263,FR +778673264,778673279,IT +778673280,778673343,FR +778673344,778673359,PL +778673360,778673391,GB +778673392,778673407,FR +778673408,778673663,PL +778673664,778673711,FR +778673712,778673715,CH +778673716,778673719,NL +778673720,778673723,PT +778673724,778673727,PL +778673728,778673823,FR +778673824,778673839,ES +778673840,778673843,FR +778673844,778673855,DE +778673856,778673879,FR +778673880,778673883,CZ +778673884,778673887,FI +778673888,778673903,FR +778673904,778673907,DE +778673908,778673911,CH +778673912,778673915,FR +778673916,778673919,ES +778673920,778674175,NL +778674176,778674367,FR +778674368,778674387,DE +778674388,778674391,BE +778674392,778674395,CH +778674396,778674399,PT +778674400,778674431,FR +778674432,778674435,PL +778674436,778674439,ES +778674440,778674447,PL +778674448,778674451,IT +778674452,778674455,PL +778674456,778674459,IT +778674460,778674463,FI +778674464,778674471,CH +778674472,778674475,BE +778674476,778674479,CH +778674480,778674487,FR +778674488,778674491,CZ +778674492,778674495,PL +778674496,778674499,CZ +778674500,778674503,DE +778674504,778674507,PL +778674508,778674511,NL +778674512,778674527,FR +778674528,778674531,DE +778674532,778674535,ES +778674536,778674539,PT +778674540,778674543,PL +778674544,778674623,DE +778674624,778674635,PL +778674636,778674639,ES +778674640,778674975,FR +778674976,778674979,BE +778674980,778674983,DE +778674984,778674999,FR +778675000,778675003,FI +778675004,778675007,GB +778675008,778675039,ES +778675040,778675071,FR +778675072,778675075,DE +778675076,778675079,IT +778675080,778675087,ES +778675088,778675135,FR +778675136,778675151,GB +778675152,778675159,FR +778675160,778675163,PL +778675164,778675199,FR +778675200,778675207,ES +778675208,778675215,PL +778675216,778675219,PT +778675220,778675227,FR +778675228,778675231,NL +778675232,778675235,GB +778675236,778675243,PL +778675244,778675247,DE +778675248,778675359,FR +778675360,778675363,DE +778675364,778675367,BE +778675368,778675371,CH +778675372,778675375,CZ +778675376,778675439,FR +778675440,778675443,DE +778675444,778675447,FR +778675448,778675451,PL +778675452,778675455,DE +778675456,778675459,PL +778675460,778675463,FR +778675464,778675471,ES +778675472,778675475,BE +778675476,778675479,ES +778675480,778675483,CH +778675484,778675487,PT +778675488,778675495,PL +778675496,778675499,DE +778675500,778675503,PL +778675504,778675507,DE +778675508,778675511,GB +778675512,778675519,PL +778675520,778675551,ES +778675552,778675599,FR +778675600,778675615,GB +778675616,778675619,PL +778675620,778675623,ES +778675624,778675627,FR +778675628,778675631,PL +778675632,778675639,ES +778675640,778675647,DE +778675648,778675687,FR +778675688,778675691,ES +778675692,778675695,FR +778675696,778675711,NL +778675712,778675735,FR +778675736,778675743,GB +778675744,778675775,FR +778675776,778675779,GB +778675780,778675783,PL +778675784,778675791,LT +778675792,778675807,FR +778675808,778675811,PL +778675812,778675815,GB +778675816,778675819,PL +778675820,778675823,GB +778675824,778675831,IT +778675832,778675839,FR +778675840,778675843,FI +778675844,778675847,FR +778675848,778675855,IE +778675856,778675859,GB +778675860,778675863,IE +778675864,778675867,DE +778675868,778675871,FI +778675872,778675887,FR +778675888,778675891,ES +778675892,778675895,FR +778675896,778675903,PL +778675904,778675907,CH +778675908,778675911,CZ +778675912,778675915,NL +778675916,778675935,DE +778675936,778675943,ES +778675944,778676095,FR +778676096,778676099,DE +778676100,778676103,CZ +778676104,778676111,GB +778676112,778676127,IT +778676128,778676131,ES +778676132,778676135,CZ +778676136,778676139,DE +778676140,778676143,PL +778676144,778676159,DE +778676160,778676187,FR +778676188,778676191,BE +778676192,778676207,IT +778676208,778676211,GB +778676212,778676215,ES +778676216,778676219,FR +778676220,778676223,GB +778676224,778676415,FR +778676416,778676423,ES +778676424,778676427,PL +778676428,778676439,FR +778676440,778676443,PL +778676444,778676447,CH +778676448,778676463,FR +778676464,778676479,PL +778676480,778676543,NL +778676544,778676575,PT +778676576,778676579,FR +778676580,778676583,DE +778676584,778676587,BE +778676588,778676591,DE +778676592,778676607,FR +778676608,778676611,PL +778676612,778676615,PT +778676616,778676619,BE +778676620,778676623,FR +778676624,778676627,GB +778676628,778676631,LT +778676632,778676635,FR +778676636,778676639,DE +778676640,778676655,ES +778676656,778676687,FR +778676688,778676691,ES +778676692,778676703,PL +778676704,778676719,FR +778676720,778676723,GB +778676724,778676727,PT +778676728,778676731,PL +778676732,778676735,IT +778676736,778676743,PL +778676744,778676747,CH +778676748,778676751,CZ +778676752,778676767,ES +778676768,778676771,PL +778676772,778676775,ES +778676776,778676779,PL +778676780,778676799,FR +778676800,778676803,GB +778676804,778676807,IT +778676808,778676811,FI +778676812,778676815,IE +778676816,778676823,LT +778676824,778676827,GB +778676828,778676847,FR +778676848,778676851,NL +778676852,778676855,LT +778676856,778676859,IE +778676860,778676863,DE +778676864,778676991,PL +778676992,778676999,FR +778677000,778677007,PL +778677008,778677023,FR +778677024,778677055,DE +778677056,778677075,FR +778677076,778677079,DE +778677080,778677083,IT +778677084,778677123,DE +778677124,778677127,GB +778677128,778677131,FR +778677132,778677135,BE +778677136,778677151,FR +778677152,778677167,DE +778677168,778677175,CZ +778677176,778677183,NL +778677184,778677215,GB +778677216,778677247,PL +778677248,778677503,FR +778677504,778677507,IE +778677508,778677511,FR +778677512,778677515,IT +778677516,778677519,GB +778677520,778677523,FR +778677524,778677527,DE +778677528,778677531,BE +778677532,778677535,PT +778677536,778677543,FI +778677544,778677547,ES +778677548,778677551,FR +778677552,778677559,PL +778677560,778677567,ES +778677568,778677695,FR +778677696,778677727,PT +778677728,778677823,FR +778677824,778677839,NL +778677840,778677855,PL +778677856,778677859,ES +778677860,778677863,LT +778677864,778677871,IT +778677872,778677875,PL +778677876,778677879,GB +778677880,778677883,LT +778677884,778677887,BE +778677888,778677903,ES +778677904,778677919,FR +778677920,778677923,CH +778677924,778677927,PT +778677928,778677935,PL +778677936,778677939,FR +778677940,778677947,BE +778677948,778677951,DE +778677952,778677967,FR +778677968,778677983,GB +778677984,778677999,FR +778678000,778678003,BE +778678004,778678007,PL +778678008,778678011,GB +778678012,778678015,FR +778678016,778678019,PL +778678020,778678023,DE +778678024,778678027,ES +778678028,778678031,FR +778678032,778678039,NL +778678040,778678047,PL +778678048,778678115,FR +778678116,778678119,ES +778678120,778678127,IT +778678128,778678143,FR +778678144,778678159,GB +778678160,778678163,PL +778678164,778678167,BE +778678168,778678191,PL +778678192,778678207,FR +778678208,778678271,PL +778678272,778678783,DE +778678784,778678799,FR +778678800,778678803,PL +778678804,778678807,DE +778678808,778678815,FR +778678816,778678831,PL +778678832,778678835,FR +778678836,778678839,BE +778678840,778678847,IT +778678848,778678851,FR +778678852,778678855,ES +778678856,778678859,CZ +778678860,778678863,GB +778678864,778678871,PL +778678872,778678875,ES +778678876,778678879,NL +778678880,778678895,FR +778678896,778678903,GB +778678904,778678911,PL +778678912,778678919,FR +778678920,778678927,ES +778678928,778678943,BE +778678944,778678959,PL +778678960,778678967,FR +778678968,778678975,GB +778678976,778679007,FR +778679008,778679023,PL +778679024,778679031,GB +778679032,778679035,FR +778679036,778679055,PL +778679056,778679071,BE +778679072,778679079,GB +778679080,778679087,FR +778679088,778679095,BE +778679096,778679099,CH +778679100,778679103,IT +778679104,778679123,PL +778679124,778679127,FR +778679128,778679151,DE +778679152,778679167,FR +778679168,778679199,ES +778679200,778679215,FR +778679216,778679231,PT +778679232,778679263,ES +778679264,778679267,IT +778679268,778679271,FR +778679272,778679279,PL +778679280,778679295,PT +778679296,778679495,FR +778679496,778679519,PL +778679520,778679523,LT +778679524,778679527,PL +778679528,778679531,DE +778679532,778679535,GB +778679536,778679551,ES +778679552,778679615,FR +778679616,778679679,ES +778679680,778679695,PT +778679696,778679711,GB +778679712,778679807,FR +778679808,778679823,IT +778679824,778679839,PL +778679840,778679843,CH +778679844,778679847,DE +778679848,778679855,FR +778679856,778679871,DE +778679872,778679903,PL +778679904,778679907,ES +778679908,778679911,FR +778679912,778679915,ES +778679916,778679919,FR +778679920,778679935,GB +778679936,778680079,FR +778680080,778680087,GB +778680088,778680091,IT +778680092,778680095,PL +778680096,778680111,FR +778680112,778680127,ES +778680128,778680143,PL +778680144,778680147,FR +778680148,778680151,GB +778680152,778680155,ES +778680156,778680159,BE +778680160,778680175,PT +778680176,778680183,ES +778680184,778680191,IT +778680192,778680195,FR +778680196,778680199,DE +778680200,778680203,NL +778680204,778680207,PL +778680208,778680227,FR +778680228,778680231,IE +778680232,778680239,GB +778680240,778680255,FR +778680256,778680271,IT +778680272,778680279,BE +778680280,778680287,PL +778680288,778680319,DE +778680320,778680447,GB +778680448,778680451,PT +778680452,778680455,IE +778680456,778680471,FR +778680472,778680475,ES +778680476,778680479,IE +778680480,778680559,FR +778680560,778680575,ES +778680576,778680639,NL +778680640,778680647,DE +778680648,778680655,ES +778680656,778680679,FR +778680680,778680683,PL +778680684,778680687,DE +778680688,778680767,FR +778680768,778680831,BE +778680832,778680895,IT +778680896,778680959,CH +778680960,778681023,DE +778681024,778681087,FI +778681088,778681151,GB +778681152,778681215,PL +778681216,778681235,FR +778681236,778681239,ES +778681240,778681243,FR +778681244,778681247,GB +778681248,778681251,FR +778681252,778681255,DE +778681256,778681267,FR +778681268,778681271,PL +778681272,778681279,FR +778681280,778681295,DE +778681296,778681311,IE +778681312,778681315,NL +778681316,778681319,FR +778681320,778681327,ES +778681328,778681359,GB +778681360,778681367,ES +778681368,778681371,NL +778681372,778681375,CH +778681376,778681383,FR +778681384,778681391,DE +778681392,778681399,FR +778681400,778681403,DE +778681404,778681407,ES +778681408,778681419,GB +778681420,778681423,BE +778681424,778681431,FR +778681432,778681435,DE +778681436,778681439,ES +778681440,778681455,GB +778681456,778681459,NL +778681460,778681463,PL +778681464,778681471,ES +778681472,778681475,DE +778681476,778681479,PT +778681480,778681503,FR +778681504,778681507,GB +778681508,778681511,IT +778681512,778681515,PL +778681516,778681523,ES +778681524,778681527,FR +778681528,778681531,PL +778681532,778681535,IT +778681536,778681543,FR +778681544,778681547,GB +778681548,778681551,PT +778681552,778681583,FR +778681584,778681587,PL +778681588,778681591,FR +778681592,778681595,LT +778681596,778681599,GB +778681600,778681623,DE +778681624,778681631,FR +778681632,778681639,IT +778681640,778681643,PL +778681644,778681647,DE +778681648,778681651,FR +778681652,778681655,ES +778681656,778681667,DE +778681668,778681671,FR +778681672,778681675,GB +778681676,778681703,FR +778681704,778681707,IE +778681708,778681711,ES +778681712,778681727,FR +778681728,778682111,GB +778682112,778682115,FR +778682116,778682119,PL +778682120,778682123,CH +778682124,778682127,FR +778682128,778682143,IE +778682144,778682175,CH +778682176,778682195,IT +778682196,778682199,NL +778682200,778682203,PL +778682204,778682207,PT +778682208,778682239,FR +778682240,778682243,BE +778682244,778682247,DE +778682248,778682295,FR +778682296,778682303,PL +778682304,778682331,FR +778682332,778682335,NL +778682336,778682351,IT +778682352,778682367,GB +778682368,778690559,FR +778690560,778690591,DE +778690592,778690623,FR +778690624,778690639,PL +778690640,778690655,IT +778690656,778690687,PT +778690688,778690703,IE +778690704,778690723,FR +778690724,778690727,GB +778690728,778690751,FR +778690752,778690783,DE +778690784,778690815,FR +778690816,778690879,ES +778690880,778690927,FR +778690928,778690931,PL +778690932,778690935,ES +778690936,778690943,IT +778690944,778690959,GB +778690960,778690975,PL +778690976,778690983,PT +778690984,778690991,BE +778690992,778690999,IT +778691000,778691003,PT +778691004,778691007,GB +778691008,778691039,FR +778691040,778691043,PL +778691044,778691047,ES +778691048,778691051,PL +778691052,778691055,PT +778691056,778691063,NL +778691064,778691067,LT +778691068,778691359,FR +778691360,778691583,PT +778691584,778691615,FR +778691616,778691619,DE +778691620,778691627,NL +778691628,778691631,PL +778691632,778691743,FR +778691744,778691747,PL +778691748,778691751,ES +778691752,778691755,FI +778691756,778691759,FR +778691760,778691791,GB +778691792,778691795,DE +778691796,778691799,PL +778691800,778691803,ES +778691804,778691807,PL +778691808,778691839,ES +778691840,778691855,CH +778691856,778691975,FR +778691976,778691983,ES +778691984,778691987,BE +778691988,778691991,IT +778691992,778691999,FR +778692000,778692015,PL +778692016,778692031,IE +778692032,778692039,DE +778692040,778692063,PL +778692064,778692095,CH +778692096,778692099,PL +778692100,778692103,DE +778692104,778692107,CH +778692108,778692115,PL +778692116,778692127,FR +778692128,778692143,NL +778692144,778692191,FR +778692192,778692195,ES +778692196,778692199,CZ +778692200,778692207,ES +778692208,778692223,FR +778692224,778692255,DE +778692256,778692319,FR +778692320,778692351,IE +778692352,778692615,FR +778692616,778692619,PL +778692620,778692623,IE +778692624,778692639,NL +778692640,778692647,FR +778692648,778692651,CZ +778692652,778692671,PL +778692672,778692679,DE +778692680,778692683,ES +778692684,778692703,FR +778692704,778692719,IE +778692720,778692723,PL +778692724,778692735,FR +778692736,778692739,ES +778692740,778692743,PL +778692744,778692747,PT +778692748,778692751,ES +778692752,778692767,FR +778692768,778692783,ES +778692784,778692787,GB +778692788,778692791,DE +778692792,778692799,FR +778692800,778692807,IE +778692808,778692811,CH +778692812,778692815,DE +778692816,778692823,NL +778692824,778692831,FR +778692832,778692835,BE +778692836,778692839,PT +778692840,778692843,ES +778692844,778692847,PL +778692848,778692863,ES +778692864,778692879,IE +778692880,778692883,PL +778692884,778692887,FR +778692888,778692891,PL +778692892,778692895,GB +778692896,778692911,FR +778692912,778692927,NL +778692928,778692959,DE +778692960,778692967,FR +778692968,778692971,LT +778692972,778692975,PT +778692976,778692983,DE +778692984,778692991,FR +778692992,778693023,GB +778693024,778693027,PL +778693028,778693031,ES +778693032,778693035,FR +778693036,778693039,DE +778693040,778693055,PT +778693056,778693059,CH +778693060,778693063,PL +778693064,778693067,CZ +778693068,778693071,IT +778693072,778693075,GB +778693076,778693079,PL +778693080,778693087,FR +778693088,778693091,IE +778693092,778693095,FR +778693096,778693099,GB +778693100,778693103,ES +778693104,778693119,FR +778693120,778693135,GB +778693136,778693139,FR +778693140,778693143,PL +778693144,778693151,FR +778693152,778693155,GB +778693156,778693159,FR +778693160,778693163,BE +778693164,778693167,DE +778693168,778693171,CZ +778693172,778693183,FR +778693184,778693223,PL +778693224,778693227,FR +778693228,778693231,IT +778693232,778693235,DE +778693236,778693239,PL +778693240,778693243,ES +778693244,778693247,PL +778693248,778693279,FR +778693280,778693295,DE +778693296,778693327,FR +778693328,778693391,GB +778693392,778693427,FR +778693428,778693431,GB +778693432,778693455,FR +778693456,778693459,DE +778693460,778693511,FR +778693512,778693515,CZ +778693516,778693567,FR +778693568,778693599,BE +778693600,778693607,DE +778693608,778693611,PL +778693612,778693615,GB +778693616,778693619,FR +778693620,778693623,NL +778693624,778693631,BE +778693632,778693663,FR +778693664,778693679,NL +778693680,778693695,DE +778693696,778693759,IE +778693760,778693763,NL +778693764,778693767,ES +778693768,778693771,PL +778693772,778693775,FR +778693776,778693791,IT +778693792,778693807,FR +778693808,778693823,PL +778693824,778693839,PT +778693840,778693855,FR +778693856,778693887,DE +778693888,778693919,PT +778693920,778693927,CH +778693928,778693931,PL +778693932,778693935,DE +778693936,778693951,GB +778693952,778693967,FR +778693968,778693971,ES +778693972,778693975,PL +778693976,778693983,GB +778693984,778694015,IE +778694016,778694143,FR +778694144,778694147,DE +778694148,778694159,PL +778694160,778694163,GB +778694164,778694171,PL +778694172,778694183,FR +778694184,778694187,PL +778694188,778694191,ES +778694192,778694195,BE +778694196,778694199,PL +778694200,778694203,IT +778694204,778694291,FR +778694292,778694295,DE +778694296,778694299,FR +778694300,778694335,PL +778694336,778694351,IT +778694352,778694415,FR +778694416,778694463,IT +778694464,778694479,FR +778694480,778694511,IT +778694512,778694515,LT +778694516,778694527,ES +778694528,778694543,PL +778694544,778694555,DE +778694556,778694559,FR +778694560,778694563,PL +778694564,778694567,DE +778694568,778694571,PT +778694572,778694575,BE +778694576,778694591,PT +778694592,778694623,FR +778694624,778694627,DE +778694628,778694639,FR +778694640,778694643,PL +778694644,778694647,PT +778694648,778694655,FR +778694656,778694663,DE +778694664,778694671,PT +778694672,778694679,FR +778694680,778694687,PL +778694688,778694703,GB +778694704,778694719,FR +778694720,778694783,IT +778694784,778694815,FR +778694816,778694823,BE +778694824,778694827,FI +778694828,778694831,PL +778694832,778694839,IT +778694840,778694847,PL +778694848,778694911,FR +778694912,778694943,GB +778694944,778694959,FR +778694960,778694975,ES +778694976,778695007,GB +778695008,778695103,ES +778695104,778695167,PL +778695168,778695183,FR +778695184,778695191,GB +778695192,778695203,PL +778695204,778695207,ES +778695208,778695215,FR +778695216,778695231,DE +778695232,778695295,NL +778695296,778695327,PT +778695328,778695331,IE +778695332,778695335,GB +778695336,778695339,PL +778695340,778695343,FR +778695344,778695347,PL +778695348,778695351,ES +778695352,778695383,FR +778695384,778695399,DE +778695400,778695415,GB +778695416,778695423,IT +778695424,778695431,PT +778695432,778695439,ES +778695440,778695447,FI +778695448,778695455,NL +778695456,778695471,FR +778695472,778695475,PL +778695476,778695479,NL +778695480,778695487,FR +778695488,778695503,BE +778695504,778695519,FR +778695520,778695535,GB +778695536,778695551,FR +778695552,778695555,BE +778695556,778695559,CH +778695560,778695563,DE +778695564,778695575,PL +778695576,778695579,ES +778695580,778695583,FI +778695584,778695615,PL +778695616,778695623,DE +778695624,778695627,CZ +778695628,778695663,FR +778695664,778695679,NL +778695680,778695711,PT +778695712,778695763,FR +778695764,778695767,PL +778695768,778695775,ES +778695776,778695795,FR +778695796,778695799,ES +778695800,778695807,FR +778695808,778695823,DE +778695824,778695839,FR +778695840,778695903,DE +778695904,778695911,FI +778695912,778695919,FR +778695920,778695923,PL +778695924,778695927,CZ +778695928,778695931,FI +778695932,778695943,ES +778695944,778695951,FI +778695952,778695967,DE +778695968,778695971,ES +778695972,778695975,PL +778695976,778695983,FR +778695984,778695987,PL +778695988,778695991,FR +778695992,778695995,GB +778695996,778695999,BE +778696000,778696015,FR +778696016,778696019,PL +778696020,778696023,ES +778696024,778696027,DE +778696028,778696031,GB +778696032,778696047,FR +778696048,778696063,ES +778696064,778696099,FR +778696100,778696103,GB +778696104,778696107,FR +778696108,778696111,DE +778696112,778696127,FR +778696128,778696159,DE +778696160,778696175,GB +778696176,778696183,DE +778696184,778696187,NL +778696188,778696199,FR +778696200,778696203,IT +778696204,778696207,ES +778696208,778696211,IE +778696212,778696215,DE +778696216,778696219,IT +778696220,778696255,GB +778696256,778696263,IT +778696264,778696287,ES +778696288,778696335,DE +778696336,778696339,PL +778696340,778696343,IT +778696344,778696347,CH +778696348,778696351,PL +778696352,778696383,ES +778696384,778696415,IE +778696416,778696419,FR +778696420,778696423,NL +778696424,778696479,FR +778696480,778696495,IT +778696496,778696499,ES +778696500,778696503,FR +778696504,778696511,IT +778696512,778696543,DE +778696544,778696559,FR +778696560,778696567,DE +778696568,778696575,ES +778696576,778696591,GB +778696592,778696639,IE +778696640,778696643,ES +778696644,778696647,NL +778696648,778696655,FR +778696656,778696659,NL +778696660,778696663,CH +778696664,778696667,FI +778696668,778696671,IE +778696672,778696687,FR +778696688,778696691,BE +778696692,778696695,FI +778696696,778696699,FR +778696700,778696703,GB +778696704,778696959,FR +778696960,778696975,IT +778696976,778696979,GB +778696980,778696983,FR +778696984,778696987,ES +778696988,778696991,FR +778696992,778696995,NL +778696996,778696999,ES +778697000,778697015,FR +778697016,778697019,PL +778697020,778697023,ES +778697024,778697055,DE +778697056,778697059,GB +778697060,778697063,FR +778697064,778697067,PL +778697068,778697071,FR +778697072,778697087,IT +778697088,778697095,IE +778697096,778697099,FR +778697100,778697103,PL +778697104,778697151,IE +778697152,778697167,ES +778697168,778697171,FR +778697172,778697175,DE +778697176,778697179,PL +778697180,778697183,GB +778697184,778697215,FR +778697216,778697247,PT +778697248,778697259,FR +778697260,778697263,GB +778697264,778697271,FR +778697272,778697279,GB +778697280,778697287,IE +778697288,778697291,FR +778697292,778697295,IE +778697296,778697307,NL +778697308,778697311,GB +778697312,778697343,PL +778697344,778697375,DE +778697376,778697387,FR +778697388,778697391,ES +778697392,778697407,FR +778697408,778697415,PT +778697416,778697423,BE +778697424,778697435,FR +778697436,778697439,GB +778697440,778697455,FR +778697456,778697459,IT +778697460,778697463,CZ +778697464,778697467,NL +778697468,778697471,PL +778697472,778697679,FR +778697680,778697683,PL +778697684,778697687,FR +778697688,778697695,ES +778697696,778697727,FR +778697728,778697791,FI +778697792,778697807,ES +778697808,778697811,DE +778697812,778697815,PL +778697816,778697819,FR +778697820,778697823,IT +778697824,778697951,PT +778697952,778697955,DE +778697956,778697959,IE +778697960,778697967,ES +778697968,778697975,FR +778697976,778697979,BE +778697980,778697983,FI +778697984,778698239,NL +778698240,778698247,GB +778698248,778698251,ES +778698252,778698255,PL +778698256,778698287,FR +778698288,778698295,FI +778698296,778698303,IE +778698304,778698399,FR +778698400,778698447,IE +778698448,778698451,NL +778698452,778698455,PL +778698456,778698459,CZ +778698460,778698463,PL +778698464,778698467,NL +778698468,778698471,PL +778698472,778698479,IT +778698480,778698495,FR +778698496,778698499,IE +778698500,778698503,FR +778698504,778698511,CH +778698512,778698519,FI +778698520,778698527,FR +778698528,778698531,IT +778698532,778698535,CH +778698536,778698539,PL +778698540,778698543,FR +778698544,778698551,DE +778698552,778698559,PL +778698560,778698627,FR +778698628,778698631,IE +778698632,778698635,PL +778698636,778698639,DE +778698640,778698643,NL +778698644,778698647,PL +778698648,778698655,ES +778698656,778698667,FR +778698668,778698671,ES +778698672,778698687,IE +778698688,778698695,LT +778698696,778698703,FR +778698704,778698707,DE +778698708,778698711,ES +778698712,778698715,IE +778698716,778698719,ES +778698720,778698751,FR 778698752,778764287,TR 778764288,778829823,HU 778829824,778895359,RO @@ -2721,8 +5689,138 @@ 780697088,780697343,MK 780697344,780697599,MT 780697600,780697855,NL -780697856,780730367,FR -780730368,780795903,IE +780697856,780698111,IT +780698112,780698367,ES +780698368,780698623,DE +780698624,780698879,FR +780698880,780699135,RU +780699136,780699391,RO +780699392,780699647,BG +780699648,780699903,DK +780699904,780700159,AT +780700160,780700415,FI +780700416,780700671,GR +780700672,780700927,PL +780700928,780701183,PT +780701184,780701439,SE +780701440,780701695,CH +780701696,780701951,SA +780701952,780702207,AD +780702208,780702463,AE +780702464,780702719,AF +780702720,780702975,AG +780702976,780703231,AI +780703232,780703487,AL +780703488,780703743,AM +780703744,780703999,AO +780704000,780704255,AQ +780704256,780704511,AR +780704512,780704767,AS +780704768,780705023,AT +780705024,780705279,AU +780705280,780705535,AW +780705536,780705791,AX +780705792,780706047,AZ +780706048,780706303,BA +780706304,780706559,BB +780706560,780706815,BD +780706816,780707071,BE +780707072,780707327,BF +780707328,780707583,BG +780707584,780707839,BH +780707840,780708095,BI +780708096,780708351,BJ +780708352,780708607,BM +780708608,780708863,BN +780708864,780709119,BO +780709120,780709375,BR +780709376,780709631,BS +780709632,780709887,BT +780709888,780710143,BV +780710144,780710399,BW +780710400,780710655,BY +780710656,780710911,BZ +780710912,780711167,CA +780711168,780711423,CC +780711424,780711679,CD +780711680,780711935,CF +780711936,780712191,CG +780712192,780712447,CH +780712448,780712703,CI +780712704,780712959,CK +780712960,780713215,CL +780713216,780713471,CM +780713472,780713727,CN +780713728,780713983,CO +780713984,780714239,CR +780714240,780714495,CU +780714496,780714751,CV +780714752,780715263,CY +780715264,780715519,CZ +780715520,780715775,DE +780715776,780716031,DJ +780716032,780716287,DK +780716288,780716543,DM +780716544,780716799,DO +780716800,780717055,DZ +780717056,780717311,EC +780717312,780717567,EE +780717568,780717823,EG +780717824,780718079,EH +780718080,780718335,ER +780718336,780718591,ES +780718592,780718847,ET +780718848,780719103,FI +780719104,780719359,FJ +780719360,780719615,FK +780719616,780719871,FM +780719872,780720127,FO +780720128,780720383,FR +780720384,780720639,GA +780720640,780720895,GB +780720896,780721151,GD +780721152,780721407,GE +780721408,780721663,GF +780721664,780721919,GG +780721920,780722175,GH +780722176,780722431,GI +780722432,780722687,GL +780722688,780722943,GM +780722944,780723199,GN +780723200,780723455,GP +780723456,780723711,GQ +780723712,780723967,GR +780723968,780724223,GS +780724224,780724479,GT +780724480,780724735,GU +780724736,780724991,GW +780724992,780725247,GY +780725248,780725759,HK +780725760,780726015,HN +780726016,780726271,HR +780726272,780726527,HT +780726528,780726783,HU +780726784,780727039,ID +780727040,780727295,IE +780727296,780727551,IL +780727552,780727807,IM +780727808,780728063,IN +780728064,780728319,IO +780728320,780728575,IQ +780728576,780728831,IR +780728832,780729087,IS +780729088,780729343,IT +780729344,780729599,JE +780729600,780729855,JM +780729856,780730111,JO +780730112,780730367,JP +780730368,780779519,IE +780779520,780783615,NL +780783616,780785663,GB +780785664,780787711,DE +780787712,780791807,FR +780791808,780793855,SE +780793856,780795903,DE 780795904,780861439,RU 780861440,780926975,HU 780926976,780992511,CH @@ -2791,12 +5889,10 @@ 781711360,781713407,UA 781713408,781844479,SA 781844480,781975551,TR -781975552,782106623,GB +781975552,782106623,NO 782106624,782254079,RU 782254080,782270463,UA -782270464,782305791,RU -782305792,782306303,RO -782306304,782319615,RU +782270464,782319615,RU 782319616,782335999,ME 782336000,782352383,RU 782352384,782368767,SY @@ -2804,7 +5900,12 @@ 782385152,782401535,SE 782401536,782417919,FR 782417920,782434303,AM -782434304,782450687,SI +782434304,782449151,SI +782449152,782449407,HR +782449408,782449663,SI +782449664,782449695,BA +782449696,782449887,SI +782449888,782450687,BA 782450688,782467071,DE 782467072,782483455,RU 782483456,782499839,FI @@ -2816,25 +5917,41 @@ 782598144,782630911,DE 782630912,782647295,MD 782647296,782663679,RU -782663680,782664191,GB -782664192,782664447,DK -782664448,782664959,FR -782664960,782665471,NL -782665472,782680063,LU +782663680,782664447,GB +782664448,782664703,LU +782664704,782664704,GB +782664705,782665471,NL +782665472,782666495,US +782666496,782666751,CA +782666752,782667007,US +782667008,782667519,RU +782667520,782667775,LU +782667776,782668287,FR +782668288,782668799,RU +782668800,782669567,NL +782669568,782671871,DE +782671872,782680063,GB 782680064,782696447,RU 782696448,782712831,DE 782712832,782729215,RU +782729216,782735359,DE +782735360,782735871,CH +782735872,782745599,DE 782745600,782761983,CZ 782761984,783024127,PL +783024128,783040511,RU 783040512,783048703,UA 783048704,783056895,RU 783056896,783065087,UA 783065088,783073279,RU 783073280,783089663,UA 783089664,783106047,RU -783130624,783134719,UA +783106048,783134719,UA 783134720,783138815,RU 783138816,783142911,CZ +783142912,783147007,RU +783147008,783151103,FI +783151104,783155199,RO 783155200,783157247,PL 783157248,783159295,RU 783159296,783161343,CZ @@ -2864,25 +5981,46 @@ 783218688,783220735,RU 783220736,783222783,SK 783222784,783226879,UA +783226880,783230975,RU +783230976,783233023,PL +783233024,783235071,GB +783235072,783237119,DE +783237120,783243263,UA +783243264,783245311,CZ +783245312,783247359,RU +783247360,783251455,PL +783251456,783255551,RU +783255552,783259647,UA +783259648,783261695,RU +783261696,783263743,UA +783263744,783265791,BY +783265792,783267839,CZ +783267840,783269887,UA +783269888,783278079,RU +783278080,783282175,PL +783282176,783286271,UA 783286272,783417343,GR 783417344,783548415,BE 783548416,783679487,RU 783679488,783681535,FR 783681536,783683583,IE -783683584,783685631,DE +783683584,783685375,DE +783685376,783685631,US 783685632,783687679,RU 783687680,783689727,PT 783689728,783691775,FR 783691776,783693823,BY 783693824,783694623,GB -783694624,783694655,FR -783694656,783695871,GB +783694624,783694687,FR +783694688,783695871,GB 783695872,783697919,TR 783697920,783699967,FR 783699968,783702015,UA 783702016,783704063,IT 783704064,783706111,PL -783706112,783708159,NL +783706112,783707391,NL +783707392,783707647,US +783707648,783708159,NL 783708160,783710207,FI 783710208,783712255,NL 783712256,783714303,RU @@ -2928,7 +6066,8 @@ 783800320,783802367,LV 783802368,783804415,FR 783804416,783806463,IT -783806464,783810559,NL +783806464,783810303,NL +783810304,783810559,BE 783810560,783843327,SA 783843328,783876095,BH 783876096,783908863,UA @@ -2948,8 +6087,8 @@ 784334848,784465919,FR 784465920,784596991,SE 784596992,784728063,TR -784728064,784760831,GR -784760832,784859135,CY +784728064,784763903,GR +784763904,784859135,CY 784859136,785121279,UA 785121280,785252351,PL 785252352,785383423,AT @@ -2960,7 +6099,7 @@ 785645568,785711103,NO 785711104,785776639,SY 785776640,785842175,RO -785842176,785907711,DE +785842176,785907711,PL 785907712,785973247,BY 785973248,786038783,MK 786038784,786104319,FR @@ -3009,10 +6148,167 @@ 786638848,786640895,ES 786640896,786642943,GB 786642944,786644991,GR -786644992,786649087,SE +786644992,786645759,SE +786645760,786646015,MT +786646016,786649087,SE 786649088,786651135,FR 786651136,786655231,DE 786655232,786657279,PL +786657280,786659327,FO +786659328,786661375,UZ +786661376,786663423,DE +786663424,786665471,UA +786665472,786667519,GB +786667520,786669567,IT +786669568,786671615,RU +786671616,786673663,CZ +786673664,786675711,SK +786675712,786677759,KZ +786677760,786679807,NO +786679808,786681855,GB +786681856,786683903,RU +786683904,786685951,DE +786685952,786687999,CH +786688000,786690047,NL +786690048,786692095,PL +786692096,786694143,LB +786694144,786698239,RU +786698240,786702335,CZ +786702336,786706431,GB +786706432,786710527,NO +786710528,786714623,RU +786714624,786718719,PL +786718720,786726911,RU +786726912,786731007,FI +786731008,786735103,IL +786735104,786739199,GB +786739200,786743295,AZ +786743296,786747391,DE +786747392,786751487,SK +786751488,786755583,PL +786755584,786759679,IT +786759680,786771711,DE +786771712,786771775,AT +786771776,786771967,DE +786771968,786776063,UA +786776064,786780159,RU +786780160,786784255,IT +786784256,786788351,RU +786788352,786792447,CZ +786792448,786796543,RU +786796544,786800639,PL +786800640,786801023,US +786801024,786801151,UA +786801152,786801663,US +786801664,786804735,UA +786804736,786808831,RU +786808832,786812927,BG +786812928,786817023,RU +786817024,786821119,SK +786821120,786825215,HR +786825216,786857983,SA +786857984,786890751,SE +786890752,786892799,ES +786892800,786894847,GB +786894848,786896895,NL +786896896,786900991,IT +786900992,786905087,NL +786905088,786907135,PL +786907136,786909183,GB +786909184,786911231,CZ +786911232,786913279,NL +786913280,786915327,DE +786915328,786917375,SK +786917376,786919423,RO +786919424,786921471,GB +786921472,786923519,ES +786923520,786925567,FR +786925568,786927615,DE +786927616,786929663,FR +786929664,786931711,PL +786931712,786933759,GB +786933760,786935807,RU +786935808,786937855,DE +786937856,786939903,GB +786939904,786941951,FI +786941952,786943999,CH +786944000,786946047,RU +786946048,786948095,FR +786948096,786950143,UA +786950144,786952191,DE +786952192,786952703,NE +786952704,786952959,US +786952960,786953215,NE +786953216,786954239,US +786954240,786956287,NL +786956288,786989055,RU +786989056,786991103,PL +786991104,786995199,IT +786995200,786997247,BG +786997248,786999295,RU +786999296,787001343,ES +787001344,787003391,CH +787003392,787005439,DE +787005440,787007487,GB +787007488,787009535,RU +787009536,787011583,NL +787011584,787013631,RU +787013632,787015679,DE +787015680,787017727,UA +787017728,787019775,RU +787019776,787021823,NL +787021824,787038207,BG +787038208,787054591,GB +787054592,787070975,IT +787070976,787087359,RU +787087360,787095551,TR +787095552,787095567,EU +787095568,787095599,CH +787095600,787095807,EU +787095808,787096063,CH +787096064,787096575,EU +787096576,787098367,CH +787098368,787099647,EU +787099648,787102975,CH +787102976,787103743,EU +787103744,787111935,HR +787111936,787120127,CZ +787120128,787128319,ES +787128320,787136511,CZ +787136512,787152895,IT +787152896,787154943,BG +787154944,787156991,TR +787156992,787159039,FR +787159040,787161087,DE +787161088,787163135,SE +787163136,787165183,NL +787165184,787167231,RS +787167232,787169279,CH +787169280,787171327,RU +787171328,787173375,KG +787173376,787175423,KZ +787175424,787177471,SA +787177472,787179519,RS +787179520,787179775,CH +787179776,787183615,DE +787183616,787185663,PL +787185664,787187711,GG +787187712,787189759,IT +787189760,787191807,CH +787191808,787192319,GB +787192320,787192831,DE +787192832,787193855,EU +787193856,787195903,RU +787195904,787197951,GB +787197952,787199999,FR +787200000,787202047,RU +787202048,787206143,DE +787206144,787208191,BH +787208192,787210239,RU +787210240,787212287,GB +787212288,787214335,SE +787214336,787216383,DE +787216384,787218431,RU 787218432,787234815,GB 787234816,787251199,SE 787251200,787267583,RU @@ -3021,14 +6317,36 @@ 787300352,787316735,BG 787316736,787333119,GB 787333120,787349503,DE +787349504,787365887,BG +787365888,787382271,PL +787382272,787382527,GP +787382528,787382783,FR +787382784,787383039,GP +787383040,787383295,FR +787383296,787383551,GP +787383552,787384063,FR +787384064,787384319,GP +787384320,787386623,FR +787386624,787387391,MQ +787387392,787387647,FR +787387648,787388671,MQ +787388672,787390463,FR +787390464,787390719,MQ +787390720,787394559,FR +787394560,787395071,GF +787395072,787398655,FR +787398656,787415039,PL +787415040,787431423,BA +787431424,787447807,SE +787447808,787464191,PL +787464192,787480575,IS 787480576,787513343,SA 787513344,787546111,RS 787546112,787578879,RU 787578880,787611647,AM 787611648,787644415,RU 787644416,787677183,PL -787677184,787679231,CZ -787679232,787681279,CY +787677184,787679231,GB 787681280,787683327,IQ 787683328,787685375,NL 787685376,787687423,IT @@ -3040,15 +6358,57 @@ 787697664,787701759,DE 787701760,787703807,NL 787703808,787705855,AT +787705856,787707903,RO 787707904,787709951,DE 787709952,787724287,RU 787724288,787726335,UA 787726336,787742719,RU -787742720,787775487,NL +787742720,787758847,NL +787758848,787759871,GB +787759872,787760895,NL +787760896,787761919,DE +787761920,787762943,NL +787762944,787763967,ES +787763968,787775487,NL 787775488,787808255,DE 787808256,787841023,IR -787873792,787906559,SE -788004864,788013055,GB +787841024,787843071,RU +787843072,787845119,GR +787845120,787847167,CH +787847168,787849215,SE +787849216,787850496,TR +787850497,787850751,NL +787850752,787851263,TR +787851264,787853311,RU +787853312,787855359,DE +787855360,787857407,CH +787857408,787859455,PL +787859456,787861503,AT +787861504,787863551,IE +787863552,787865599,DE +787865600,787869695,FR +787869696,787873791,GB +787873792,787894271,SE +787894272,787896319,US +787896320,787906559,SE +787906560,787939327,GR +787939328,787972095,GB +787972096,788004863,UA +788004864,788005375,GB +788005376,788006399,BE +788006400,788006911,IT +788006912,788007423,FR +788007424,788007935,DE +788007936,788008447,US +788008448,788008959,SG +788008960,788009471,IN +788009472,788009983,ES +788009984,788010495,HK +788010496,788011007,AU +788011008,788011519,CN +788011520,788012031,AR +788012032,788012543,CA +788012544,788013055,RU 788013056,788021247,IR 788021248,788029439,SI 788029440,788045823,GB @@ -3067,6 +6427,22 @@ 788144128,788160511,RU 788160512,788168703,UA 788168704,788176895,RU +788176896,788185087,PL +788185088,788193279,NO +788193280,788201471,GB +788201472,788209663,HU +788209664,788217855,LT +788217856,788226047,RU +788226048,788234239,CY +788234240,788242431,SA +788242432,788250623,IR +788250624,788258815,KG +788258816,788259583,DE +788259584,788260095,NL +788260096,788260351,DE +788260352,788260863,NL +788260864,788266495,DE +788266496,788267007,IN 788267008,788271103,SE 788271104,788275199,DE 788275200,788279295,AL @@ -3074,7 +6450,6 @@ 788283392,788291583,GB 788291584,788295679,TR 788295680,788299775,RU -788299776,788303871,LV 788303872,788307967,IT 788307968,788312063,RU 788312064,788316159,FR @@ -3084,8 +6459,8 @@ 788328448,788332543,RU 788332544,788336639,BG 788336640,788337151,DE -788337152,788337407,GB -788337408,788340735,DE +788337152,788337663,GB +788337664,788340735,DE 788340736,788344831,ES 788344832,788353023,DE 788353024,788357119,PS @@ -3113,8 +6488,7 @@ 788426752,788428799,GB 788428800,788430847,DE 788430848,788432895,BG -788432896,788432927,FR -788432928,788434943,DE +788432896,788434943,DE 788434944,788436991,SI 788436992,788439039,IT 788439040,788441087,RU @@ -3126,8 +6500,7 @@ 788455424,788457471,FR 788457472,788459519,IT 788459520,788461567,RU -788461568,788463615,JE -788463616,788465663,GB +788461568,788465663,GB 788465664,788467711,CZ 788467712,788469759,NO 788469760,788471807,NL @@ -3149,20 +6522,28 @@ 788502528,788504575,IE 788504576,788506623,FR 788506624,788508671,CH -788508672,788510719,AT +788508672,788509215,FR +788509216,788509231,AT +788509232,788509247,FR +788509248,788509279,AT +788509280,788509631,FR +788509632,788509695,AT +788509696,788510033,FR +788510034,788510719,AT 788510720,788512767,ES 788512768,788514815,FI 788514816,788516863,FR 788516864,788518911,LT 788518912,788520959,IR -788520960,788523007,CZ +788520960,788522623,CZ +788522624,788522655,PL +788522656,788523007,CZ 788523008,788525055,KZ 788525056,788527103,IT 788527104,788529151,GB 788529152,805306367,CA 805306368,822083583,US -822083584,822084095,AU -822084608,822085631,ID +822083584,822085631,ID 822085632,822087679,AU 822087680,822089727,JP 822089728,822090751,ID @@ -3178,7 +6559,7 @@ 823132160,824180735,KR 824180736,825229311,IN 825229312,825360383,TH -825360384,825361407,AU +825360384,825361407,KR 825361408,825363455,ID 825363456,825364479,MY 825364480,825376767,KR @@ -3188,15 +6569,18 @@ 825419776,825420799,TH 825420800,825421823,MY 825421824,825425919,NZ -825425920,825491455,AU -825491456,825753599,CN +825425920,825753599,CN 825753600,826277887,KR 826277888,828375039,CN 828375040,829423615,JP 829423616,830210047,CN 830210048,830341119,MY 830341120,830406655,NP -830406656,830474239,AU +830406656,830472191,AU +830472192,830472447,CN +830472448,830472703,AU +830472704,830473215,CN +830473216,830474239,AU 830474240,830475263,SG 830475264,830476287,AU 830476288,830480383,JP @@ -3219,7 +6603,9 @@ 831389696,831512575,KR 831512576,831513599,AU 831513600,831514623,NZ -831514624,831515647,HK +831514624,831514887,HK +831514888,831514895,AU +831514896,831515647,HK 831515648,831516671,AU 831516672,831518719,JP 831518720,831519743,AU @@ -3282,20 +6668,96 @@ 838795264,838860799,AU 838860800,838999039,US 838999040,838999295,CA -838999296,839010559,US +838999296,839010175,US +839010176,839010207,CA +839010208,839010559,US 839010560,839010815,CA 839010816,839017983,US 839017984,839018239,CA 839018240,839023359,US 839023360,839023615,CA -839023616,839061503,US +839023616,839025663,US +839025664,839026175,CA +839026176,839061503,US 839061504,839061759,CA 839061760,839062271,US 839062272,839064063,CA -839064064,843055103,US +839064064,839069183,US +839069184,839074303,CA +839074304,839095807,US +839095808,839096063,CA +839096064,839101695,US +839101696,839102207,CA +839102208,839103231,US +839103232,839103487,CA +839103488,839104255,US +839104256,839104511,CA +839104512,839112191,US +839112192,839112703,CA +839112704,839113215,US +839113216,839113471,CA +839113472,840269823,US +840269824,840273919,CA +840273920,840278015,US +840278016,840282111,CA +840282112,840294399,US +840294400,840298495,CA +840298496,842530895,US +842530896,842530903,IL +842530904,842531443,US +842531444,842531447,GB +842531448,842531519,US +842531520,842531523,MX +842531524,842531603,US +842531604,842531605,ES +842531606,842531659,US +842531660,842531661,IN +842531662,842533679,US +842533680,842533683,BR +842533684,842534251,US +842534252,842534255,NO +842534256,842534335,US +842534336,842534339,ES +842534340,842535159,US +842535160,842535167,IS +842535168,842535839,US +842535840,842535847,MX +842535848,842541693,US +842541694,842541695,ZA +842541696,842541723,US +842541724,842541725,CA +842541726,842542399,US +842542400,842542407,NZ +842542408,842542415,US +842542416,842542423,NZ +842542424,842542431,JO +842542432,842565975,US +842565976,842565979,AU +842565980,842566015,US +842566016,842566019,BR +842566020,842597639,US +842597640,842597647,GT +842597648,842598703,US +842598704,842598719,CZ +842598720,842600079,US +842600080,842600087,GB +842600088,842601607,US +842601608,842601615,AR +842601616,842602423,US +842602424,842602431,IN +842602432,843055103,US 843055104,843644927,CA -843644928,844627967,US -847249408,855638015,US +843644928,844890111,US +844890112,844988415,CA +844988416,845089407,US +845089408,845089535,PR +845089536,845283327,US +845283328,845545471,CA +845545472,846442495,US +846442496,846446591,CA +846446592,846561279,US +846561280,846594047,CA +846594048,855638015,US 855638016,872415231,GB 872415232,889192447,US 889192448,905969663,DE @@ -3333,7 +6795,6 @@ 977797120,978321407,KR 978321408,978452479,JP 978452480,978583551,CN -978583552,978599935,JP 978599936,978640895,AU 978640896,978644991,NZ 978644992,978714623,JP @@ -3427,7 +6888,6 @@ 999817216,999849983,BD 999849984,999866367,KR 999866368,999882751,HK -999882752,999948287,JP 999948288,1000013823,AU 1000013824,1000079359,CN 1000079360,1000341503,JP @@ -3574,124 +7034,7 @@ 1024340520,1024344063,US 1024344064,1024352255,SG 1024352256,1024360447,AU -1024360448,1024360535,HK -1024360536,1024360543,AP -1024360544,1024361007,HK -1024361008,1024361023,AP -1024361024,1024361095,HK -1024361096,1024361103,AP -1024361104,1024361471,HK -1024361472,1024361487,TW -1024361488,1024361503,AP -1024361504,1024361567,PH -1024361568,1024361599,AP -1024361600,1024361727,PH -1024361728,1024361759,TW -1024361760,1024361775,PH -1024361776,1024361791,TW -1024361792,1024361807,PH -1024361808,1024362239,TW -1024362240,1024362287,MY -1024362288,1024362303,SG -1024362304,1024362335,MY -1024362336,1024362351,AP -1024362352,1024362399,SG -1024362400,1024362495,AP -1024362496,1024362599,MY -1024362600,1024362671,SG -1024362672,1024362687,MY -1024362688,1024362703,AP -1024362704,1024362719,MY -1024362720,1024362735,SG -1024362736,1024362751,AP -1024362752,1024362759,SG -1024362760,1024362783,MY -1024362784,1024362976,SG -1024362977,1024363007,AP -1024363008,1024363015,SG -1024363016,1024363023,AP -1024363024,1024363103,SG -1024363104,1024363111,MY -1024363112,1024363199,SG -1024363200,1024363215,MY -1024363216,1024363295,SG -1024363296,1024363319,MY -1024363320,1024363391,SG -1024363392,1024363423,MY -1024363424,1024363439,SG -1024363440,1024363447,MY -1024363448,1024363455,AP -1024363456,1024363519,SG -1024363520,1024363559,AU -1024363560,1024363567,AP -1024363568,1024363775,AU -1024363776,1024363807,AP -1024363808,1024363999,AU -1024364000,1024364015,NZ -1024364016,1024364031,AU -1024364032,1024364063,AP -1024364064,1024364079,AU -1024364080,1024364095,AP -1024364096,1024364127,AU -1024364128,1024364287,AP -1024364288,1024364511,AU -1024364512,1024364799,AP -1024364800,1024364927,MY -1024364928,1024365567,AP -1024365568,1024365823,HK -1024365824,1024366335,PH -1024366336,1024367359,AP -1024367360,1024367615,TW -1024367616,1024368127,JP -1024368128,1024368383,PH -1024368384,1024368639,AP -1024368640,1024369407,MY -1024369408,1024369663,AP -1024369664,1024369919,PH -1024369920,1024370175,TW -1024370176,1024370431,AU -1024370432,1024370687,AP -1024370688,1024371455,PH -1024371456,1024371711,JP -1024371712,1024371967,AP -1024371968,1024372223,JP -1024372224,1024372479,PH -1024372480,1024372735,HK -1024372736,1024373247,AP -1024373248,1024373503,PH -1024373504,1024373823,AP -1024373824,1024373887,TW -1024373888,1024374015,PH -1024374016,1024374847,AP -1024374848,1024374879,JP -1024374880,1024374895,AP -1024374896,1024374911,JP -1024374912,1024374935,AP -1024374936,1024374951,JP -1024374952,1024374975,AP -1024374976,1024375055,JP -1024375056,1024375167,AP -1024375168,1024375295,JP -1024375296,1024375303,AP -1024375304,1024375311,AU -1024375312,1024375375,AP -1024375376,1024375383,AU -1024375384,1024375391,AP -1024375392,1024375423,AU -1024375424,1024375439,AP -1024375440,1024375455,AU -1024375456,1024375487,AP -1024375488,1024375495,AU -1024375496,1024375679,AP -1024375680,1024375807,AU -1024375808,1024375935,TW -1024375936,1024376191,AP -1024376192,1024376319,PH -1024376320,1024376447,TW -1024376448,1024376479,AP -1024376480,1024376511,PH -1024376512,1024376703,TW -1024376704,1024376831,AP +1024360448,1024376831,JP 1024376832,1024393215,PH 1024393216,1024458751,HK 1024458752,1024491519,SG @@ -3702,15 +7045,7 @@ 1024786432,1025245183,JP 1025245184,1025277951,CN 1025277952,1025294335,PH -1025294336,1025294591,JP -1025294592,1025295103,AU -1025295104,1025295615,CN -1025295616,1025296127,AU -1025296128,1025296639,FR -1025296640,1025296895,MY -1025296896,1025297919,AU -1025297920,1025298175,NZ -1025298176,1025302527,AU +1025294336,1025302527,AU 1025302528,1025310719,VN 1025310720,1025343487,AU 1025343488,1025376255,CN @@ -3745,9 +7080,7 @@ 1030750208,1031798783,JP 1031798784,1035993087,CN 1035993088,1037565951,JP -1037565952,1037591499,TW -1037591500,1037591503,CN -1037591504,1038614527,TW +1037565952,1038614527,TW 1038614528,1039007743,CN 1039007744,1039138815,HK 1039138816,1039400959,CN @@ -3769,12 +7102,12 @@ 1040187392,1040252927,IL 1040252928,1040318463,GR 1040318464,1040383999,CH -1040384000,1040386559,SA -1040386560,1040391167,A2 -1040391168,1040392191,SA +1040384000,1040392191,SA 1040392192,1040392447,GB -1040392448,1040399359,SA -1040399360,1040400127,GB +1040392448,1040397823,SA +1040397824,1040398591,GB +1040398592,1040399871,SA +1040399872,1040400127,GB 1040400128,1040400383,SA 1040400384,1040416767,GB 1040416768,1040424959,SE @@ -3792,30 +7125,22 @@ 1040467088,1040467103,DE 1040467104,1040467135,FR 1040467136,1040467151,DE -1040467152,1040467583,EU -1040467584,1040467647,FR -1040467648,1040467759,EU -1040467760,1040467823,FR +1040467152,1040467759,EU +1040467760,1040467767,FR +1040467768,1040467775,EU +1040467776,1040467823,FR 1040467824,1040467935,EU 1040467936,1040467951,FR 1040467952,1040467967,EU 1040467968,1040468095,FR -1040468096,1040468159,EU -1040468160,1040468223,FR -1040468224,1040468231,EU +1040468096,1040468231,EU 1040468232,1040468255,FR -1040468256,1040468263,EU -1040468264,1040468287,FR -1040468288,1040468415,EU +1040468256,1040468415,EU 1040468416,1040468479,FR 1040468480,1040468607,EU 1040468608,1040468735,DE 1040468736,1040468767,NL -1040468768,1040468815,EU -1040468816,1040468831,NL -1040468832,1040468927,EU -1040468928,1040468991,NL -1040468992,1040469055,EU +1040468768,1040469055,EU 1040469056,1040469071,FR 1040469072,1040469119,EU 1040469120,1040469183,FR @@ -3823,21 +7148,29 @@ 1040469248,1040469279,FR 1040469280,1040469311,EU 1040469312,1040469343,FR -1040469344,1040469375,EU -1040469376,1040469567,FR +1040469344,1040469439,EU +1040469440,1040469471,FR +1040469472,1040469503,EU +1040469504,1040469567,FR 1040469568,1040469631,EU -1040469632,1040469887,FR -1040469888,1040469903,EU +1040469632,1040469695,FR +1040469696,1040469727,EU +1040469728,1040469759,FR +1040469760,1040469903,EU 1040469904,1040469919,FR -1040469920,1040469967,EU -1040469968,1040469999,FR +1040469920,1040469983,EU +1040469984,1040469999,FR 1040470000,1040470271,EU 1040470272,1040470335,DE 1040470336,1040470399,EU 1040470400,1040470431,DE 1040470432,1040471487,EU 1040471488,1040471519,NL -1040471520,1040474111,EU +1040471520,1040472575,EU +1040472576,1040472831,DE +1040472832,1040473071,EU +1040473072,1040473087,DE +1040473088,1040474111,EU 1040474112,1040482303,CZ 1040482304,1040515071,BE 1040515072,1040547839,GB @@ -3861,14 +7194,14 @@ 1040982632,1040982639,DE 1040982640,1040982943,A2 1040982944,1040982951,DK -1040982952,1040983807,A2 -1040983808,1040983815,NG -1040983816,1040984143,A2 -1040984144,1040984151,NG -1040984152,1040990207,A2 +1040982952,1040984199,A2 +1040984200,1040984203,TZ +1040984204,1040984215,A2 +1040984216,1040984219,TZ +1040984220,1040990207,A2 1040990208,1040994303,CY -1040994304,1040994815,RU -1040994816,1040998399,CY +1040994304,1040994559,RU +1040994560,1040998399,CY 1040998400,1041006591,EG 1041006592,1041039359,CH 1041039360,1041051647,SE @@ -3886,7 +7219,7 @@ 1041253376,1041268735,RU 1041268736,1041301503,NO 1041301504,1041367039,IE -1041367040,1041498111,GB +1041367040,1041498111,IT 1041498112,1041563647,SE 1041563648,1041596415,PL 1041596416,1041629183,NL @@ -3895,7 +7228,9 @@ 1041633120,1041694719,ES 1041694720,1041695151,FR 1041695152,1041695167,GB -1041695168,1041695647,FR +1041695168,1041695359,FR +1041695360,1041695391,GB +1041695392,1041695647,FR 1041695648,1041695679,GB 1041695680,1041695695,CH 1041695696,1041695711,FR @@ -3934,11 +7269,13 @@ 1041699768,1041699807,GB 1041699808,1041700423,FR 1041700424,1041700535,GB -1041700536,1041700551,FR -1041700552,1041700607,GB +1041700536,1041700591,FR +1041700592,1041700607,GB 1041700608,1041700983,FR 1041700984,1041700991,GB -1041700992,1041701175,FR +1041700992,1041701143,FR +1041701144,1041701151,GB +1041701152,1041701175,FR 1041701176,1041701183,GB 1041701184,1041701207,FR 1041701208,1041701222,GB @@ -3948,9 +7285,11 @@ 1041701568,1041701631,GB 1041701632,1041701647,FR 1041701648,1041701663,GB -1041701664,1041701967,FR -1041701968,1041701975,GB -1041701976,1041702167,FR +1041701664,1041701719,FR +1041701720,1041701727,GB +1041701728,1041701863,FR +1041701864,1041701871,GB +1041701872,1041702167,FR 1041702168,1041702175,GB 1041702176,1041702306,FR 1041702307,1041702311,GB @@ -3958,25 +7297,27 @@ 1041702320,1041702335,GB 1041702336,1041702351,FR 1041702352,1041702399,GB -1041702400,1041703575,FR -1041703576,1041703583,GB -1041703584,1041704119,FR +1041702400,1041702751,FR +1041702752,1041702759,GB +1041702760,1041703639,FR +1041703640,1041703647,GB +1041703648,1041704119,FR 1041704120,1041704127,GB 1041704128,1041704159,FR 1041704160,1041704175,GB -1041704176,1041704407,FR +1041704176,1041704247,FR +1041704248,1041704263,GB +1041704264,1041704319,FR +1041704320,1041704335,GB +1041704336,1041704351,FR +1041704352,1041704383,GB +1041704384,1041704407,FR 1041704408,1041704431,GB 1041704432,1041704439,FR -1041704440,1041704455,GB -1041704456,1041704479,FR -1041704480,1041704487,GB -1041704488,1041704551,FR +1041704440,1041704447,GB +1041704448,1041704551,FR 1041704552,1041704575,GB -1041704576,1041704671,FR -1041704672,1041704687,GB -1041704688,1041704751,FR -1041704752,1041704759,GB -1041704760,1041704775,FR +1041704576,1041704775,FR 1041704776,1041704783,GB 1041704784,1041704815,FR 1041704816,1041704823,GB @@ -3984,8 +7325,8 @@ 1041704848,1041704863,GB 1041704864,1041704879,FR 1041704880,1041704887,GB -1041704888,1041704943,FR -1041704944,1041704959,GB +1041704888,1041704927,FR +1041704928,1041704959,GB 1041704960,1041705231,FR 1041705232,1041705239,GB 1041705240,1041705255,FR @@ -3998,8 +7339,8 @@ 1041705392,1041705439,GB 1041705440,1041705447,FR 1041705448,1041705455,GB -1041705456,1041705471,FR -1041705472,1041705479,GB +1041705456,1041705463,FR +1041705464,1041705479,GB 1041705480,1041705487,FR 1041705488,1041705519,GB 1041705520,1041705631,FR @@ -4020,19 +7361,11 @@ 1041705904,1041705911,GB 1041705912,1041705935,FR 1041705936,1041705951,GB -1041705952,1041706087,FR -1041706088,1041706095,GB -1041706096,1041706111,FR +1041705952,1041706111,FR 1041706112,1041706143,GB 1041706144,1041706191,FR 1041706192,1041706239,GB -1041706240,1041706263,FR -1041706264,1041706271,GB -1041706272,1041706359,FR -1041706360,1041706367,GB -1041706368,1041706447,FR -1041706448,1041706463,GB -1041706464,1041706479,FR +1041706240,1041706479,FR 1041706480,1041706487,GB 1041706488,1041706791,FR 1041706792,1041706799,GB @@ -4048,15 +7381,15 @@ 1041707408,1041707415,GB 1041707416,1041707455,FR 1041707456,1041707463,GB -1041707464,1041707487,FR -1041707488,1041707495,GB +1041707464,1041707479,FR +1041707480,1041707495,GB 1041707496,1041707503,FR 1041707504,1041707519,GB 1041707520,1041707559,FR 1041707560,1041707583,GB 1041707584,1041707631,FR -1041707632,1041707639,GB -1041707640,1041707679,FR +1041707632,1041707647,GB +1041707648,1041707679,FR 1041707680,1041707687,GB 1041707688,1041707807,FR 1041707808,1041707815,GB @@ -4068,11 +7401,7 @@ 1041708000,1041708007,GB 1041708008,1041708023,FR 1041708024,1041708031,GB -1041708032,1041708327,FR -1041708328,1041708335,GB -1041708336,1041708375,FR -1041708376,1041708383,GB -1041708384,1041708415,FR +1041708032,1041708415,FR 1041708416,1041708431,GB 1041708432,1041708447,FR 1041708448,1041708487,GB @@ -4080,7 +7409,9 @@ 1041708496,1041708511,GB 1041708512,1041708687,FR 1041708688,1041708695,GB -1041708696,1041708807,FR +1041708696,1041708703,FR +1041708704,1041708735,GB +1041708736,1041708807,FR 1041708808,1041708815,GB 1041708816,1041708847,FR 1041708848,1041708855,GB @@ -4100,7 +7431,9 @@ 1041709464,1041709471,GB 1041709472,1041709479,FR 1041709480,1041709487,GB -1041709488,1041709767,FR +1041709488,1041709647,FR +1041709648,1041709695,GB +1041709696,1041709767,FR 1041709768,1041709775,GB 1041709776,1041709783,FR 1041709784,1041709791,GB @@ -4116,25 +7449,23 @@ 1041710008,1041710015,GB 1041710016,1041710047,FR 1041710048,1041710055,GB -1041710056,1041710351,FR -1041710352,1041710359,GB -1041710360,1041710391,FR +1041710056,1041710391,FR 1041710392,1041710407,GB -1041710408,1041710439,FR -1041710440,1041710455,GB +1041710408,1041710431,FR +1041710432,1041710455,GB 1041710456,1041710471,FR 1041710472,1041710487,GB 1041710488,1041710495,FR 1041710496,1041710511,GB 1041710512,1041710535,FR 1041710536,1041710543,GB -1041710544,1041710559,FR -1041710560,1041710583,GB +1041710544,1041710551,FR +1041710552,1041710583,GB 1041710584,1041710719,FR 1041710720,1041710727,GB 1041710728,1041710735,FR -1041710736,1041710743,GB -1041710744,1041710775,FR +1041710736,1041710751,GB +1041710752,1041710775,FR 1041710776,1041710783,GB 1041710784,1041711431,FR 1041711432,1041711439,GB @@ -4146,13 +7477,17 @@ 1041711584,1041711599,GB 1041711600,1041711943,FR 1041711944,1041711951,GB -1041711952,1041712423,FR -1041712424,1041712431,GB -1041712432,1041713095,FR +1041711952,1041712415,FR +1041712416,1041712423,GB +1041712424,1041712975,FR +1041712976,1041712983,GB +1041712984,1041713095,FR 1041713096,1041713103,GB 1041713104,1041713127,FR 1041713128,1041713135,GB -1041713136,1041713975,FR +1041713136,1041713943,FR +1041713944,1041713951,GB +1041713952,1041713975,FR 1041713976,1041713983,GB 1041713984,1041713991,FR 1041713992,1041714007,GB @@ -4162,37 +7497,37 @@ 1041714072,1041714079,GB 1041714080,1041714095,FR 1041714096,1041714103,GB -1041714104,1041714631,FR -1041714632,1041714687,GB -1041714688,1041714775,FR -1041714776,1041714783,GB -1041714784,1041714831,FR -1041714832,1041714847,GB +1041714104,1041714111,FR +1041714112,1041714175,GB +1041714176,1041714511,FR +1041714512,1041714519,GB +1041714520,1041714663,FR +1041714664,1041714687,GB +1041714688,1041714815,FR +1041714816,1041714847,GB 1041714848,1041714855,FR 1041714856,1041714879,GB 1041714880,1041714911,FR 1041714912,1041714919,GB -1041714920,1041714999,FR -1041715000,1041715007,GB -1041715008,1041715055,FR -1041715056,1041715071,GB -1041715072,1041715079,FR +1041714920,1041715007,FR +1041715008,1041715015,GB +1041715016,1041715079,FR 1041715080,1041715087,GB 1041715088,1041715095,FR 1041715096,1041715103,GB 1041715104,1041715119,FR -1041715120,1041715143,GB -1041715144,1041715151,FR -1041715152,1041715167,GB -1041715168,1041715183,FR -1041715184,1041715199,GB -1041715200,1041715527,FR +1041715120,1041715135,GB +1041715136,1041715159,FR +1041715160,1041715167,GB +1041715168,1041715527,FR 1041715528,1041715535,GB 1041715536,1041715583,FR 1041715584,1041715615,GB 1041715616,1041715631,FR 1041715632,1041715647,GB -1041715648,1041715767,FR +1041715648,1041715727,FR +1041715728,1041715735,GB +1041715736,1041715767,FR 1041715768,1041715791,GB 1041715792,1041715807,FR 1041715808,1041715823,GB @@ -4208,11 +7543,7 @@ 1041716048,1041716095,GB 1041716096,1041716111,FR 1041716112,1041716223,GB -1041716224,1041716231,FR -1041716232,1041716239,GB -1041716240,1041716311,FR -1041716312,1041716319,GB -1041716320,1041716439,FR +1041716224,1041716439,FR 1041716440,1041716447,GB 1041716448,1041716503,FR 1041716504,1041716511,GB @@ -4234,17 +7565,23 @@ 1041717200,1041717247,GB 1041717248,1041717503,FR 1041717504,1041717511,IT -1041717512,1041717687,FR +1041717512,1041717631,FR +1041717632,1041717639,GB +1041717640,1041717687,FR 1041717688,1041717695,GB -1041717696,1041718112,FR +1041717696,1041717711,FR +1041717712,1041717719,GB +1041717720,1041718071,FR +1041718072,1041718079,GB +1041718080,1041718112,FR 1041718113,1041718119,GB 1041718120,1041718127,FR 1041718128,1041718135,GB 1041718136,1041718151,FR 1041718152,1041718159,GB 1041718160,1041718191,FR -1041718192,1041718215,GB -1041718216,1041718231,FR +1041718192,1041718223,GB +1041718224,1041718231,FR 1041718232,1041718255,GB 1041718256,1041718343,FR 1041718344,1041718351,GB @@ -4260,7 +7597,9 @@ 1041718624,1041718639,GB 1041718640,1041718663,FR 1041718664,1041718671,GB -1041718672,1041718935,FR +1041718672,1041718895,FR +1041718896,1041718911,GB +1041718912,1041718935,FR 1041718936,1041718943,GB 1041718944,1041718975,FR 1041718976,1041718991,GB @@ -4278,11 +7617,11 @@ 1041719229,1041719231,GB 1041719232,1041719247,FR 1041719248,1041719263,GB -1041719264,1041719683,FR -1041719684,1041719687,GB -1041719688,1041719703,FR -1041719704,1041719711,GB -1041719712,1041719743,FR +1041719264,1041719567,FR +1041719568,1041719583,GB +1041719584,1041719631,FR +1041719632,1041719639,GB +1041719640,1041719743,FR 1041719744,1041719759,GB 1041719760,1041719887,FR 1041719888,1041719903,GB @@ -4290,7 +7629,13 @@ 1041719920,1041719935,GB 1041719936,1041720015,FR 1041720016,1041720031,GB -1041720032,1041720551,FR +1041720032,1041720447,FR +1041720448,1041720479,GB +1041720480,1041720487,FR +1041720488,1041720511,GB +1041720512,1041720527,FR +1041720528,1041720535,GB +1041720536,1041720551,FR 1041720552,1041720559,GB 1041720560,1041720567,FR 1041720568,1041720607,GB @@ -4298,9 +7643,15 @@ 1041720632,1041720639,GB 1041720640,1041720687,FR 1041720688,1041720703,GB -1041720704,1041721039,FR +1041720704,1041720831,FR +1041720832,1041720839,GB +1041720840,1041720903,FR +1041720904,1041720927,GB +1041720928,1041721039,FR 1041721040,1041721055,GB -1041721056,1041721391,FR +1041721056,1041721343,FR +1041721344,1041721359,GB +1041721360,1041721391,FR 1041721392,1041721407,GB 1041721408,1041721519,FR 1041721520,1041721535,GB @@ -4319,12 +7670,12 @@ 1041722384,1041722391,FR 1041722392,1041722399,GB 1041722400,1041722423,FR -1041722424,1041722431,GB -1041722432,1041722479,FR +1041722424,1041722463,GB +1041722464,1041722479,FR 1041722480,1041722503,GB 1041722504,1041722535,FR -1041722536,1041722551,GB -1041722552,1041722567,FR +1041722536,1041722559,GB +1041722560,1041722567,FR 1041722568,1041722623,GB 1041722624,1041722639,FR 1041722640,1041722655,GB @@ -4345,20 +7696,21 @@ 1041723872,1041723887,FR 1041723888,1041723903,GB 1041723904,1041724455,FR -1041724456,1041724463,GB -1041724464,1041724471,FR -1041724472,1041724479,GB -1041724480,1041724535,FR -1041724536,1041724543,GB -1041724544,1041724671,FR +1041724456,1041724471,GB +1041724472,1041724511,FR +1041724512,1041724519,GB +1041724520,1041724671,FR 1041724672,1041724927,GB -1041724928,1041725119,FR +1041724928,1041725015,FR +1041725016,1041725023,GB +1041725024,1041725119,FR 1041725120,1041725167,GB 1041725168,1041725175,FR 1041725176,1041725183,GB 1041725184,1041725191,FR -1041725192,1041725199,IT -1041725200,1041725231,GB +1041725192,1041725199,GB +1041725200,1041725207,FR +1041725208,1041725231,GB 1041725232,1041725255,FR 1041725256,1041725279,GB 1041725280,1041725375,FR @@ -4379,7 +7731,9 @@ 1041726640,1041726655,GB 1041726656,1041726671,FR 1041726672,1041726687,GB -1041726688,1041726735,FR +1041726688,1041726719,FR +1041726720,1041726727,GB +1041726728,1041726735,FR 1041726736,1041726751,GB 1041726752,1041726847,FR 1041726848,1041726855,GB @@ -4445,8 +7799,8 @@ 1041730240,1041730247,GB 1041730248,1041730639,FR 1041730640,1041730655,GB -1041730656,1041731983,FR -1041731984,1041732031,GB +1041730656,1041731975,FR +1041731976,1041732031,GB 1041732032,1041732055,FR 1041732056,1041732063,GB 1041732064,1041732103,FR @@ -4481,12 +7835,14 @@ 1041735000,1041735039,GB 1041735040,1041735055,FR 1041735056,1041735087,GB -1041735088,1041735119,FR +1041735088,1041735095,FR +1041735096,1041735103,GB +1041735104,1041735119,FR 1041735120,1041735167,GB 1041735168,1041735431,FR 1041735432,1041735495,GB -1041735496,1041735519,FR -1041735520,1041735551,GB +1041735496,1041735511,FR +1041735512,1041735551,GB 1041735552,1041735567,FR 1041735568,1041735583,GB 1041735584,1041735615,FR @@ -4494,8 +7850,8 @@ 1041735664,1041736375,FR 1041736376,1041736383,GB 1041736384,1041736423,FR -1041736424,1041736463,GB -1041736464,1041736527,FR +1041736424,1041736455,GB +1041736456,1041736527,FR 1041736528,1041736535,GB 1041736536,1041736543,FR 1041736544,1041736551,GB @@ -4515,8 +7871,8 @@ 1041737128,1041737151,GB 1041737152,1041737167,FR 1041737168,1041737183,GB -1041737184,1041737247,FR -1041737248,1041737279,GB +1041737184,1041737215,FR +1041737216,1041737279,GB 1041737280,1041737295,FR 1041737296,1041737303,GB 1041737304,1041737375,FR @@ -4527,8 +7883,12 @@ 1041737456,1041737463,GB 1041737464,1041737487,FR 1041737488,1041737495,GB -1041737496,1041737583,FR -1041737584,1041737599,GB +1041737496,1041737503,FR +1041737504,1041737511,GB +1041737512,1041737535,FR +1041737536,1041737567,GB +1041737568,1041737591,FR +1041737592,1041737599,GB 1041737600,1041737607,FR 1041737608,1041737615,GB 1041737616,1041737647,FR @@ -4551,9 +7911,7 @@ 1041738160,1041738167,GB 1041738168,1041738215,FR 1041738216,1041738223,GB -1041738224,1041738503,FR -1041738504,1041738511,GB -1041738512,1041738519,FR +1041738224,1041738519,FR 1041738520,1041738543,GB 1041738544,1041738551,FR 1041738552,1041738559,GB @@ -4563,25 +7921,23 @@ 1041738584,1041738591,GB 1041738592,1041738599,FR 1041738600,1041738615,GB -1041738616,1041738703,FR -1041738704,1041738711,GB -1041738712,1041738735,FR +1041738616,1041738663,FR +1041738664,1041738671,GB +1041738672,1041738703,FR +1041738704,1041738719,GB +1041738720,1041738735,FR 1041738736,1041738751,GB 1041738752,1041739079,FR 1041739080,1041739087,GB 1041739088,1041739167,FR -1041739168,1041739175,GB -1041739176,1041739183,FR -1041739184,1041739207,GB -1041739208,1041739215,FR -1041739216,1041739231,GB +1041739168,1041739231,GB 1041739232,1041739295,FR 1041739296,1041739299,BE 1041739300,1041739303,GB 1041739304,1041739375,FR 1041739376,1041739383,BE -1041739384,1041739391,FR -1041739392,1041739423,GB +1041739384,1041739407,FR +1041739408,1041739423,GB 1041739424,1041739463,FR 1041739464,1041739471,GB 1041739472,1041739487,FR @@ -4592,9 +7948,13 @@ 1041739744,1041739751,GB 1041739752,1041740031,FR 1041740032,1041740039,GB -1041740040,1041740135,FR +1041740040,1041740103,FR +1041740104,1041740119,GB +1041740120,1041740135,FR 1041740136,1041740143,GB -1041740144,1041740263,FR +1041740144,1041740167,FR +1041740168,1041740175,GB +1041740176,1041740263,FR 1041740264,1041740271,GB 1041740272,1041740567,FR 1041740568,1041740575,GB @@ -4606,17 +7966,19 @@ 1041740672,1041740687,GB 1041740688,1041740703,FR 1041740704,1041740719,GB -1041740720,1041741063,FR +1041740720,1041740807,FR +1041740808,1041740831,GB +1041740832,1041741063,FR 1041741064,1041741087,GB 1041741088,1041741135,FR 1041741136,1041741151,GB -1041741152,1041741239,FR -1041741240,1041741263,GB +1041741152,1041741231,FR +1041741232,1041741263,GB 1041741264,1041741279,FR 1041741280,1041741295,GB 1041741296,1041741567,FR -1041741568,1041741575,GB -1041741576,1041741607,FR +1041741568,1041741583,GB +1041741584,1041741607,FR 1041741608,1041741615,GB 1041741616,1041741631,FR 1041741632,1041741647,GB @@ -4624,7 +7986,11 @@ 1041741664,1041741679,GB 1041741680,1041741687,FR 1041741688,1041741823,GB -1041741824,1041742223,FR +1041741824,1041742087,FR +1041742088,1041742095,GB +1041742096,1041742183,FR +1041742184,1041742191,GB +1041742192,1041742223,FR 1041742224,1041742239,GB 1041742240,1041742263,FR 1041742264,1041742271,GB @@ -4660,15 +8026,17 @@ 1041743744,1041743759,GB 1041743760,1041743767,FR 1041743768,1041743775,GB -1041743776,1041743791,FR -1041743792,1041743799,GB +1041743776,1041743783,FR +1041743784,1041743799,GB 1041743800,1041743807,FR 1041743808,1041743823,GB 1041743824,1041743831,FR 1041743832,1041743847,GB 1041743848,1041743863,FR 1041743864,1041743871,GB -1041743872,1041744287,FR +1041743872,1041744263,FR +1041744264,1041744271,GB +1041744272,1041744287,FR 1041744288,1041744295,GB 1041744296,1041744311,FR 1041744312,1041744327,GB @@ -4680,11 +8048,15 @@ 1041744416,1041744447,GB 1041744448,1041744479,FR 1041744480,1041744543,GB -1041744544,1041744599,FR +1041744544,1041744575,FR +1041744576,1041744583,GB +1041744584,1041744599,FR 1041744600,1041744607,GB 1041744608,1041744623,FR 1041744624,1041744639,GB -1041744640,1041744919,FR +1041744640,1041744895,FR +1041744896,1041744911,GB +1041744912,1041744919,FR 1041744920,1041744927,GB 1041744928,1041744943,FR 1041744944,1041744951,GB @@ -4706,9 +8078,7 @@ 1041745360,1041745375,GB 1041745376,1041745399,FR 1041745400,1041745407,GB -1041745408,1041745415,FR -1041745416,1041745423,GB -1041745424,1041745447,FR +1041745408,1041745447,FR 1041745448,1041745471,GB 1041745472,1041745479,FR 1041745480,1041745487,GB @@ -4726,7 +8096,9 @@ 1041745656,1041745663,GB 1041745664,1041745751,FR 1041745752,1041745767,GB -1041745768,1041745855,FR +1041745768,1041745791,FR +1041745792,1041745799,GB +1041745800,1041745855,FR 1041745856,1041745871,GB 1041745872,1041745887,FR 1041745888,1041745959,GB @@ -4740,8 +8112,8 @@ 1041746064,1041746079,GB 1041746080,1041746111,FR 1041746112,1041746135,GB -1041746136,1041746703,FR -1041746704,1041746735,GB +1041746136,1041746711,FR +1041746712,1041746735,GB 1041746736,1041746743,FR 1041746744,1041746751,GB 1041746752,1041746799,FR @@ -4756,10 +8128,10 @@ 1041749776,1041749783,GB 1041749784,1041749807,FR 1041749808,1041749815,GB -1041749816,1041749847,FR -1041749848,1041749855,GB -1041749856,1041749967,FR -1041749968,1041749983,GB +1041749816,1041749839,FR +1041749840,1041749855,GB +1041749856,1041749959,FR +1041749960,1041749983,GB 1041749984,1041749999,FR 1041750000,1041750007,GB 1041750008,1041750527,FR @@ -4770,9 +8142,19 @@ 1041750744,1041750751,GB 1041750752,1041750775,FR 1041750776,1041750783,GB -1041750784,1041751695,FR +1041750784,1041750831,FR +1041750832,1041750839,GB +1041750840,1041751303,FR +1041751304,1041751311,GB +1041751312,1041751351,FR +1041751352,1041751359,GB +1041751360,1041751567,FR +1041751568,1041751575,GB +1041751576,1041751695,FR 1041751696,1041751719,GB -1041751720,1041751775,FR +1041751720,1041751759,FR +1041751760,1041751767,GB +1041751768,1041751775,FR 1041751776,1041751807,GB 1041751808,1041753319,FR 1041753320,1041753327,GB @@ -4806,10 +8188,10 @@ 1041755632,1041755647,GB 1041755648,1041756463,FR 1041756464,1041756471,GB -1041756472,1041756559,FR -1041756560,1041756567,GB -1041756568,1041756599,FR -1041756600,1041756607,GB +1041756472,1041756543,FR +1041756544,1041756567,GB +1041756568,1041756591,FR +1041756592,1041756607,GB 1041756608,1041756655,FR 1041756656,1041756663,GB 1041756664,1041756695,FR @@ -4878,7 +8260,9 @@ 1041959680,1042022399,DE 1042022400,1042045891,PT 1042045892,1042045895,A2 -1042045896,1042087935,PT +1042045896,1042086739,PT +1042086740,1042086743,A2 +1042086744,1042087935,PT 1042087936,1042120703,TR 1042120704,1042153471,PL 1042153472,1042284543,GB @@ -4950,31 +8334,41 @@ 1042825216,1042833407,CZ 1042833408,1042841599,GB 1042841600,1042874367,AT -1042874368,1042875399,NL +1042874368,1042875391,NL +1042875392,1042875399,GB 1042875400,1042875407,DE -1042875408,1042875903,NL -1042875904,1042876159,GB -1042876160,1042876415,NL +1042875408,1042875423,NL +1042875424,1042875455,GB +1042875456,1042875903,NL +1042875904,1042876287,GB +1042876288,1042876415,NL 1042876416,1042876479,GB -1042876480,1042876671,NL +1042876480,1042876647,NL +1042876648,1042876663,GB +1042876664,1042876671,NL 1042876672,1042876927,DE -1042876928,1042877183,NL +1042876928,1042877183,GB 1042877184,1042877951,DE -1042877952,1042880639,NL +1042877952,1042878207,NL +1042878208,1042878463,GB +1042878464,1042880639,NL 1042880640,1042880767,GB 1042880768,1042882559,NL 1042882560,1042882815,DE 1042882816,1042888703,NL 1042888704,1042888959,GB 1042888960,1042889215,NL -1042889216,1042889471,US +1042889216,1042889471,DE 1042889472,1042889983,NL -1042889984,1042890111,GB -1042890112,1042890815,NL +1042889984,1042890119,GB +1042890120,1042890127,NL +1042890128,1042890143,GB +1042890144,1042890239,NL +1042890240,1042890495,GB +1042890496,1042890751,FR +1042890752,1042890815,GB 1042890816,1042890819,FR -1042890820,1042890847,NL -1042890848,1042890879,GB -1042890880,1042890944,NL +1042890820,1042890944,NL 1042890945,1042890950,GB 1042890951,1042890959,NL 1042890960,1042890991,GB @@ -4983,17 +8377,18 @@ 1042891840,1042891871,BE 1042891872,1042892015,NL 1042892016,1042892031,DE -1042892032,1042892479,NL -1042892480,1042892543,PL -1042892544,1042892879,NL -1042892880,1042892887,DE -1042892888,1042892959,NL +1042892032,1042892287,NL +1042892288,1042892543,FR +1042892544,1042892863,NL +1042892864,1042892895,BE +1042892896,1042892959,NL 1042892960,1042892967,DE 1042892968,1042892975,PL 1042892976,1042892983,CH 1042892984,1042892991,NL 1042892992,1042893007,FR -1042893008,1042893055,NL +1042893008,1042893039,NL +1042893040,1042893055,DE 1042893056,1042893087,GB 1042893088,1042893135,NL 1042893136,1042893143,DE @@ -5006,20 +8401,28 @@ 1042894144,1042894175,SE 1042894176,1042894335,NL 1042894336,1042894355,FR -1042894356,1042894431,NL +1042894356,1042894359,NL +1042894360,1042894367,GB +1042894368,1042894399,NL +1042894400,1042894415,GB +1042894416,1042894431,NL 1042894432,1042894463,PT 1042894464,1042894559,NL 1042894560,1042894591,DE -1042894592,1042894655,FR -1042894656,1042894783,NL +1042894592,1042894783,NL 1042894784,1042894847,DE -1042894848,1042895231,NL +1042894848,1042895103,NL +1042895104,1042895231,GB 1042895232,1042895359,DE 1042895360,1042895615,NL 1042895616,1042895871,GB -1042895872,1042900479,NL +1042895872,1042896127,NL +1042896128,1042896255,GB +1042896256,1042900479,NL 1042900480,1042900735,GB -1042900736,1042939903,NL +1042900736,1042915375,NL +1042915376,1042915391,DE +1042915392,1042939903,NL 1042939904,1043070975,ES 1043070976,1043079167,CZ 1043079168,1043087359,DE @@ -5038,7 +8441,9 @@ 1043356032,1043357695,DE 1043357696,1043365887,CH 1043365888,1043398655,PT -1043398656,1043464311,GB +1043398656,1043464191,GB +1043464192,1043464287,NL +1043464288,1043464311,GB 1043464312,1043464351,NL 1043464352,1043464383,GB 1043464384,1043464799,NL @@ -5074,11 +8479,11 @@ 1043466576,1043466583,NL 1043466584,1043466607,GB 1043466608,1043466887,NL -1043466888,1043466895,GB -1043466896,1043466911,NL -1043466912,1043466927,GB +1043466888,1043466927,GB 1043466928,1043466943,NL -1043466944,1043467039,GB +1043466944,1043466991,GB +1043466992,1043467007,NL +1043467008,1043467039,GB 1043467040,1043467071,NL 1043467072,1043467087,GB 1043467088,1043467103,NL @@ -5104,8 +8509,8 @@ 1043468064,1043468127,NL 1043468128,1043468159,GB 1043468160,1043468191,NL -1043468192,1043468543,GB -1043468544,1043468575,NL +1043468192,1043468415,GB +1043468416,1043468575,NL 1043468576,1043468655,GB 1043468656,1043468663,NL 1043468664,1043468671,GB @@ -5126,8 +8531,8 @@ 1043468968,1043469023,NL 1043469024,1043469055,GB 1043469056,1043469087,NL -1043469088,1043469143,GB -1043469144,1043469159,NL +1043469088,1043469151,GB +1043469152,1043469159,NL 1043469160,1043469183,GB 1043469184,1043469199,NL 1043469200,1043469207,GB @@ -5135,21 +8540,13 @@ 1043469224,1043469231,GB 1043469232,1043469239,NL 1043469240,1043469247,GB -1043469248,1043469335,NL -1043469336,1043469343,GB -1043469344,1043469359,NL +1043469248,1043469359,NL 1043469360,1043469375,GB 1043469376,1043469399,NL -1043469400,1043469415,GB -1043469416,1043469423,NL -1043469424,1043469439,GB +1043469400,1043469439,GB 1043469440,1043469559,NL -1043469560,1043469663,GB -1043469664,1043469679,NL -1043469680,1043469695,GB -1043469696,1043469727,NL -1043469728,1043469823,GB -1043469824,1043469843,NL +1043469560,1043469567,GB +1043469568,1043469843,NL 1043469844,1043469847,GB 1043469848,1043469919,NL 1043469920,1043469939,GB @@ -5160,24 +8557,38 @@ 1043470272,1043470303,NL 1043470304,1043470335,GB 1043470336,1043470847,NL -1043470848,1043472415,GB -1043472416,1043472423,DE +1043470848,1043472383,GB +1043472384,1043472395,DE +1043472396,1043472399,GB +1043472400,1043472423,DE 1043472424,1043472431,GB -1043472432,1043472439,DE -1043472440,1043472487,GB +1043472432,1043472443,DE +1043472444,1043472467,GB +1043472468,1043472475,DE +1043472476,1043472487,GB 1043472488,1043472495,DE 1043472496,1043472503,GB -1043472504,1043472895,DE +1043472504,1043472743,DE +1043472744,1043472751,GB +1043472752,1043472895,DE 1043472896,1043473151,GB -1043473152,1043473411,DE +1043473152,1043473247,DE +1043473248,1043473255,GB +1043473256,1043473411,DE 1043473412,1043473415,GB 1043473416,1043473579,DE 1043473580,1043473583,GB -1043473584,1043474031,DE +1043473584,1043473983,DE +1043473984,1043474015,GB +1043474016,1043474031,DE 1043474032,1043474047,GB -1043474048,1043474487,DE +1043474048,1043474455,DE +1043474456,1043474463,GB +1043474464,1043474487,DE 1043474488,1043474495,GB -1043474496,1043475591,DE +1043474496,1043474499,DE +1043474500,1043474503,GB +1043474504,1043475591,DE 1043475592,1043475711,GB 1043475712,1043475887,DE 1043475888,1043475919,GB @@ -5185,7 +8596,11 @@ 1043475984,1043475991,GB 1043475992,1043476319,DE 1043476320,1043476351,GB -1043476352,1043476735,DE +1043476352,1043476543,DE +1043476544,1043476559,GB +1043476560,1043476575,DE +1043476576,1043476607,GB +1043476608,1043476735,DE 1043476736,1043476767,GB 1043476768,1043476815,DE 1043476816,1043476991,GB @@ -5193,23 +8608,114 @@ 1043477504,1043477759,GB 1043477760,1043478179,DE 1043478180,1043478271,GB -1043478272,1043478511,DE -1043478512,1043478527,GB -1043478528,1043478623,DE -1043478624,1043478639,GB -1043478640,1043478655,DE -1043478656,1043478671,GB -1043478672,1043478735,DE -1043478736,1043478751,GB -1043478752,1043478783,DE -1043478784,1043479295,GB +1043478272,1043478287,DE +1043478288,1043479295,GB 1043479296,1043479551,DE 1043479552,1043480063,GB 1043480064,1043480351,DE 1043480352,1043480359,GB 1043480360,1043480363,DE 1043480364,1043480575,GB -1043480576,1043488767,CH +1043480576,1043480687,CH +1043480688,1043480695,GB +1043480696,1043480831,CH +1043480832,1043481855,GB +1043481856,1043482007,CH +1043482008,1043482015,GB +1043482016,1043482079,CH +1043482080,1043482623,GB +1043482624,1043482647,CH +1043482648,1043482667,GB +1043482668,1043482671,CH +1043482672,1043482687,GB +1043482688,1043482719,CH +1043482720,1043482735,GB +1043482736,1043482759,CH +1043482760,1043482783,GB +1043482784,1043482791,CH +1043482792,1043482807,GB +1043482808,1043482895,CH +1043482896,1043482911,GB +1043482912,1043482951,CH +1043482952,1043482959,GB +1043482960,1043482975,CH +1043482976,1043482995,GB +1043482996,1043483039,CH +1043483040,1043483047,GB +1043483048,1043483059,CH +1043483060,1043483063,GB +1043483064,1043483103,CH +1043483104,1043483111,GB +1043483112,1043483231,CH +1043483232,1043483235,GB +1043483236,1043483279,CH +1043483280,1043483295,GB +1043483296,1043483311,CH +1043483312,1043483319,GB +1043483320,1043483327,CH +1043483328,1043483335,GB +1043483336,1043483343,CH +1043483344,1043483359,GB +1043483360,1043483391,CH +1043483392,1043483655,GB +1043483656,1043483679,CH +1043483680,1043483687,GB +1043483688,1043483759,CH +1043483760,1043483775,GB +1043483776,1043483839,CH +1043483840,1043483871,GB +1043483872,1043483911,CH +1043483912,1043484159,GB +1043484160,1043484191,CH +1043484192,1043484199,GB +1043484200,1043484215,CH +1043484216,1043484223,GB +1043484224,1043484351,CH +1043484352,1043484383,GB +1043484384,1043484431,CH +1043484432,1043484463,GB +1043484464,1043484551,CH +1043484552,1043484559,GB +1043484560,1043484575,CH +1043484576,1043484583,GB +1043484584,1043484623,CH +1043484624,1043484631,GB +1043484632,1043484671,CH +1043484672,1043484679,GB +1043484680,1043484751,CH +1043484752,1043484767,GB +1043484768,1043484799,CH +1043484800,1043484927,GB +1043484928,1043484935,CH +1043484936,1043484943,GB +1043484944,1043484959,CH +1043484960,1043484991,GB +1043484992,1043485055,CH +1043485056,1043485191,GB +1043485192,1043485195,CH +1043485196,1043485439,GB +1043485440,1043485567,CH +1043485568,1043485695,GB +1043485696,1043486239,CH +1043486240,1043486463,GB +1043486464,1043486487,CH +1043486488,1043486719,GB +1043486720,1043486723,CH +1043486724,1043486975,GB +1043486976,1043487039,CH +1043487040,1043487055,GB +1043487056,1043487103,CH +1043487104,1043487231,GB +1043487232,1043487443,CH +1043487444,1043487447,GB +1043487448,1043487455,CH +1043487456,1043487487,GB +1043487488,1043487623,CH +1043487624,1043487631,GB +1043487632,1043487679,CH +1043487680,1043487743,GB +1043487744,1043487751,CH +1043487752,1043488767,GB 1043488768,1043496959,DE 1043496960,1043497055,FR 1043497056,1043497079,GB @@ -5276,7 +8782,9 @@ 1043693184,1043693567,GB 1043693568,1043718783,DE 1043718784,1043718815,FR -1043718816,1043857407,DE +1043718816,1043719655,DE +1043719656,1043719679,CH +1043719680,1043857407,DE 1043857408,1043890175,GB 1043890176,1043890183,A2 1043890184,1043890191,NG @@ -5313,7 +8821,9 @@ 1043898624,1043898751,TZ 1043898752,1043899391,A2 1043899392,1043899647,CG -1043899648,1043910143,A2 +1043899648,1043907071,A2 +1043907072,1043907327,NG +1043907328,1043910143,A2 1043910144,1043910399,TZ 1043910400,1043912703,A2 1043912704,1043913215,ZM @@ -5324,74 +8834,505 @@ 1043917056,1043921919,A2 1043921920,1043922943,IL 1043922944,1043988479,ES -1043988480,1044013059,NL +1043988480,1043988495,BE +1043988496,1043988511,NL +1043988512,1043988519,BE +1043988520,1043988527,NL +1043988528,1043988551,BE +1043988552,1043988559,NL +1043988560,1043988575,BE +1043988576,1043988607,NL +1043988608,1043988679,BE +1043988680,1043988711,NL +1043988712,1043988719,BE +1043988720,1043988727,NL +1043988728,1043988735,BE +1043988736,1043988767,NL +1043988768,1043988775,BE +1043988776,1043988799,NL +1043988800,1043988895,BE +1043988896,1043988927,NL +1043988928,1043989119,BE +1043989120,1043989503,NL +1043989504,1043989535,BE +1043989536,1043989543,NL +1043989544,1043989567,BE +1043989568,1043989583,NL +1043989584,1043989591,BE +1043989592,1043989599,NL +1043989600,1043989639,BE +1043989640,1043989655,NL +1043989656,1043989663,BE +1043989664,1043989695,NL +1043989696,1043989751,BE +1043989752,1043990143,NL +1043990144,1043990271,BE +1043990272,1043990367,NL +1043990368,1043990535,BE +1043990536,1043990543,NL +1043990544,1043990567,BE +1043990568,1043990591,NL +1043990592,1043990615,BE +1043990616,1043990623,NL +1043990624,1043990631,BE +1043990632,1043990783,NL +1043990784,1043991055,BE +1043991056,1043991063,NL +1043991064,1043991103,BE +1043991104,1043991231,NL +1043991232,1043992063,BE +1043992064,1043992319,NL +1043992320,1043992575,BE +1043992576,1043992735,NL +1043992736,1043993599,BE +1043993600,1043993855,NL +1043993856,1043994643,BE +1043994644,1043994651,NL +1043994652,1043994655,BE +1043994656,1043994667,NL +1043994668,1043994671,BE +1043994672,1043994675,NL +1043994676,1043994679,BE +1043994680,1043994699,NL +1043994700,1043994703,BE +1043994704,1043994707,NL +1043994708,1043994711,BE +1043994712,1043994723,NL +1043994724,1043994727,BE +1043994728,1043994747,NL +1043994748,1043994755,BE +1043994756,1043994759,NL +1043994760,1043994791,BE +1043994792,1043994795,NL +1043994796,1043994811,BE +1043994812,1043994815,NL +1043994816,1043994851,BE +1043994852,1043994855,NL +1043994856,1043994863,BE +1043994864,1043994867,NL +1043994868,1043994871,BE +1043994872,1043994875,NL +1043994876,1043994879,BE +1043994880,1043994887,NL +1043994888,1043994907,BE +1043994908,1043994911,NL +1043994912,1043994931,BE +1043994932,1043994935,NL +1043994936,1043994975,BE +1043994976,1043994979,NL +1043994980,1043994995,BE +1043994996,1043995003,NL +1043995004,1043995023,BE +1043995024,1043995027,NL +1043995028,1043995043,BE +1043995044,1043995051,NL +1043995052,1043995059,BE +1043995060,1043995063,NL +1043995064,1043995103,BE +1043995104,1043995111,NL +1043995112,1043995127,BE +1043995128,1043995131,NL +1043995132,1043995135,BE +1043995136,1043995139,NL +1043995140,1043995151,BE +1043995152,1043995155,NL +1043995156,1043995183,BE +1043995184,1043995187,NL +1043995188,1043995219,BE +1043995220,1043995223,NL +1043995224,1043995279,BE +1043995280,1043995283,NL +1043995284,1043995291,BE +1043995292,1043995295,NL +1043995296,1043995303,BE +1043995304,1043995311,NL +1043995312,1043995663,BE +1043995664,1043995687,NL +1043995688,1043995695,BE +1043995696,1043995703,NL +1043995704,1043995719,BE +1043995720,1043995735,NL +1043995736,1043995767,BE +1043995768,1043995783,NL +1043995784,1043995807,BE +1043995808,1043995831,NL +1043995832,1043995863,BE +1043995864,1043995887,NL +1043995888,1043995903,BE +1043995904,1043995935,NL +1043995936,1043995943,BE +1043995944,1043995951,NL +1043995952,1043995975,BE +1043995976,1043995999,NL +1043996000,1043996015,BE +1043996016,1043996023,NL +1043996024,1043996095,BE +1043996096,1043996103,NL +1043996104,1043996111,BE +1043996112,1043996119,NL +1043996120,1043996143,BE +1043996144,1043996151,NL +1043996152,1043996159,BE +1043996160,1043996679,NL +1043996680,1043996687,BE +1043996688,1043996695,NL +1043996696,1043996703,BE +1043996704,1043996711,NL +1043996712,1043996735,BE +1043996736,1043996775,NL +1043996776,1043996791,BE +1043996792,1043996799,NL +1043996800,1043996815,BE +1043996816,1043996895,NL +1043996896,1043996927,BE +1043996928,1043997375,NL +1043997376,1043997463,BE +1043997464,1043997471,NL +1043997472,1043997519,BE +1043997520,1043997551,NL +1043997552,1043997559,BE +1043997560,1043997583,NL +1043997584,1043997615,BE +1043997616,1043997631,NL +1043997632,1043997639,BE +1043997640,1043997663,NL +1043997664,1043997687,BE +1043997688,1043997823,NL +1043997824,1043997887,BE +1043997888,1043997903,NL +1043997904,1043997919,BE +1043997920,1043997927,NL +1043997928,1043998079,BE +1043998080,1043998143,NL +1043998144,1043998151,BE +1043998152,1043998159,NL +1043998160,1043998167,BE +1043998168,1043998191,NL +1043998192,1043998195,BE +1043998196,1043998198,NL +1043998199,1043998199,BE +1043998200,1043998207,NL +1043998208,1043998463,BE +1043998464,1043998719,NL +1043998720,1043998759,BE +1043998760,1043998783,NL +1043998784,1043998799,BE +1043998800,1043998855,NL +1043998856,1043998863,BE +1043998864,1043998879,NL +1043998880,1043998887,BE +1043998888,1043998911,NL +1043998912,1043998975,BE +1043998976,1043998983,NL +1043998984,1043999039,BE +1043999040,1043999055,NL +1043999056,1043999071,BE +1043999072,1043999111,NL +1043999112,1043999119,BE +1043999120,1043999143,NL +1043999144,1043999151,BE +1043999152,1043999159,NL +1043999160,1043999207,BE +1043999208,1043999215,NL +1043999216,1043999231,BE +1043999232,1043999487,NL +1043999488,1043999751,BE +1043999752,1043999759,NL +1043999760,1043999775,BE +1043999776,1043999783,NL +1043999784,1043999791,BE +1043999792,1043999823,NL +1043999824,1043999831,BE +1043999832,1043999951,NL +1043999952,1044000031,BE +1044000032,1044000063,NL +1044000064,1044000095,BE +1044000096,1044000767,NL +1044000768,1044000831,BE +1044000832,1044000895,NL +1044000896,1044000999,BE +1044001000,1044001015,NL +1044001016,1044001271,BE +1044001272,1044001663,NL +1044001664,1044001791,BE +1044001792,1044001823,NL +1044001824,1044001839,BE +1044001840,1044001847,NL +1044001848,1044001895,BE +1044001896,1044001927,NL +1044001928,1044001935,BE +1044001936,1044001983,NL +1044001984,1044002023,BE +1044002024,1044002039,NL +1044002040,1044002063,BE +1044002064,1044002087,NL +1044002088,1044002095,BE +1044002096,1044002103,NL +1044002104,1044002135,BE +1044002136,1044002143,NL +1044002144,1044002303,BE +1044002304,1044002831,NL +1044002832,1044002855,BE +1044002856,1044002859,NL +1044002860,1044002879,BE +1044002880,1044002883,NL +1044002884,1044002891,BE +1044002892,1044002899,NL +1044002900,1044002911,BE +1044002912,1044002919,NL +1044002920,1044002931,BE +1044002932,1044002947,NL +1044002948,1044002959,BE +1044002960,1044002975,NL +1044002976,1044002983,BE +1044002984,1044002987,NL +1044002988,1044002999,BE +1044003000,1044003003,NL +1044003004,1044003019,BE +1044003020,1044003023,NL +1044003024,1044003027,BE +1044003028,1044003031,NL +1044003032,1044003071,BE +1044003072,1044003079,NL +1044003080,1044003099,BE +1044003100,1044003103,NL +1044003104,1044003115,BE +1044003116,1044003119,NL +1044003120,1044003123,BE +1044003124,1044003131,NL +1044003132,1044003147,BE +1044003148,1044003151,NL +1044003152,1044003155,BE +1044003156,1044003159,NL +1044003160,1044003167,BE +1044003168,1044003171,NL +1044003172,1044003183,BE +1044003184,1044003187,NL +1044003188,1044003211,BE +1044003212,1044003215,NL +1044003216,1044003223,BE +1044003224,1044003227,NL +1044003228,1044003235,BE +1044003236,1044003251,NL +1044003252,1044003279,BE +1044003280,1044003283,NL +1044003284,1044003291,BE +1044003292,1044003295,NL +1044003296,1044003299,BE +1044003300,1044003303,NL +1044003304,1044003311,BE +1044003312,1044003315,NL +1044003316,1044003331,BE +1044003332,1044003343,NL +1044003344,1044003359,BE +1044003360,1044003362,NL +1044003363,1044003363,BE +1044003364,1044003371,NL +1044003372,1044003379,BE +1044003380,1044003383,NL +1044003384,1044003423,BE +1044003424,1044003427,NL +1044003428,1044003459,BE +1044003460,1044003463,NL +1044003464,1044003467,BE +1044003468,1044003471,NL +1044003472,1044003483,BE +1044003484,1044003487,NL +1044003488,1044003511,BE +1044003512,1044003527,NL +1044003528,1044003539,BE +1044003540,1044003543,NL +1044003544,1044003551,BE +1044003552,1044003563,NL +1044003564,1044003579,BE +1044003580,1044003591,NL +1044003592,1044003595,BE +1044003596,1044003599,NL +1044003600,1044003619,BE +1044003620,1044003631,NL +1044003632,1044003635,BE +1044003636,1044003639,NL +1044003640,1044003647,BE +1044003648,1044003651,NL +1044003652,1044003655,BE +1044003656,1044003659,NL +1044003660,1044003663,BE +1044003664,1044003667,NL +1044003668,1044003675,BE +1044003676,1044003683,NL +1044003684,1044003687,BE +1044003688,1044003691,NL +1044003692,1044003695,BE +1044003696,1044003699,NL +1044003700,1044003723,BE +1044003724,1044003727,NL +1044003728,1044003731,BE +1044003732,1044003751,NL +1044003752,1044003755,BE +1044003756,1044003775,NL +1044003776,1044003783,BE +1044003784,1044003787,NL +1044003788,1044003807,BE +1044003808,1044003811,NL +1044003812,1044003815,BE +1044003816,1044003819,NL +1044003820,1044003823,BE +1044003824,1044003831,NL +1044003832,1044003855,BE +1044003856,1044003871,NL +1044003872,1044003879,BE +1044003880,1044003895,NL +1044003896,1044003911,BE +1044003912,1044003919,NL +1044003920,1044003927,BE +1044003928,1044003959,NL +1044003960,1044003967,BE +1044003968,1044003975,NL +1044003976,1044003983,BE +1044003984,1044003991,NL +1044003992,1044004015,BE +1044004016,1044004079,NL +1044004080,1044004095,BE +1044004096,1044004303,NL +1044004304,1044004351,BE +1044004352,1044004879,NL +1044004880,1044004903,BE +1044004904,1044004911,NL +1044004912,1044004927,BE +1044004928,1044005503,NL +1044005504,1044005639,BE +1044005640,1044005647,NL +1044005648,1044005663,BE +1044005664,1044005671,NL +1044005672,1044005679,BE +1044005680,1044005687,NL +1044005688,1044005799,BE +1044005800,1044005807,NL +1044005808,1044005823,BE +1044005824,1044005847,NL +1044005848,1044005887,BE +1044005888,1044006143,NL +1044006144,1044006911,BE +1044006912,1044006927,NL +1044006928,1044006935,BE +1044006936,1044006943,NL +1044006944,1044007007,BE +1044007008,1044007023,NL +1044007024,1044007031,BE +1044007032,1044007039,NL +1044007040,1044007047,BE +1044007048,1044007055,NL +1044007056,1044007063,BE +1044007064,1044007087,NL +1044007088,1044007119,BE +1044007120,1044007135,NL +1044007136,1044007167,BE +1044007168,1044007967,NL +1044007968,1044007983,BE +1044007984,1044007991,NL +1044007992,1044008007,BE +1044008008,1044008023,NL +1044008024,1044008031,BE +1044008032,1044008039,NL +1044008040,1044008047,BE +1044008048,1044008063,NL +1044008064,1044008095,BE +1044008096,1044008127,NL +1044008128,1044008183,BE +1044008184,1044008223,NL +1044008224,1044008239,BE +1044008240,1044008255,NL +1044008256,1044008279,BE +1044008280,1044008287,NL +1044008288,1044008319,BE +1044008320,1044008735,NL +1044008736,1044009055,BE +1044009056,1044009087,NL +1044009088,1044009183,BE +1044009184,1044009199,NL +1044009200,1044009215,BE +1044009216,1044009471,NL +1044009472,1044009487,BE +1044009488,1044009503,NL +1044009504,1044009535,BE +1044009536,1044009583,NL +1044009584,1044009599,BE +1044009600,1044009983,NL +1044009984,1044011007,BE +1044011008,1044011019,NL +1044011020,1044011023,BE +1044011024,1044011039,NL +1044011040,1044011043,BE +1044011044,1044011055,NL +1044011056,1044011059,BE +1044011060,1044011223,NL +1044011224,1044011227,BE +1044011228,1044011367,NL +1044011368,1044011371,BE +1044011372,1044011427,NL +1044011428,1044011431,BE +1044011432,1044011635,NL +1044011636,1044011639,BE +1044011640,1044011703,NL +1044011704,1044011707,BE +1044011708,1044011731,NL +1044011732,1044011735,BE +1044011736,1044011763,NL +1044011764,1044011767,BE +1044011768,1044011771,NL +1044011772,1044011775,BE +1044011776,1044011791,NL +1044011792,1044011795,BE +1044011796,1044011971,NL +1044011972,1044012031,BE +1044012032,1044012039,NL +1044012040,1044012063,BE +1044012064,1044012087,NL +1044012088,1044012095,BE +1044012096,1044012103,NL +1044012104,1044012111,BE +1044012112,1044012119,NL +1044012120,1044012135,BE +1044012136,1044012143,NL +1044012144,1044012151,BE +1044012152,1044012159,NL +1044012160,1044012167,BE +1044012168,1044012191,NL +1044012192,1044012223,BE +1044012224,1044012239,NL +1044012240,1044012255,BE +1044012256,1044013059,NL 1044013060,1044013111,BE -1044013112,1044013143,NL +1044013112,1044013119,NL +1044013120,1044013135,BE +1044013136,1044013143,NL 1044013144,1044013247,BE 1044013248,1044013263,NL 1044013264,1044013271,BE -1044013272,1044013287,NL -1044013288,1044013375,BE -1044013376,1044013567,NL -1044013568,1044013575,BE +1044013272,1044013279,NL +1044013280,1044013375,BE +1044013376,1044013439,NL +1044013440,1044013575,BE 1044013576,1044013583,NL 1044013584,1044013615,BE 1044013616,1044013623,NL -1044013624,1044013639,BE -1044013640,1044013647,NL -1044013648,1044013655,BE -1044013656,1044013663,NL -1044013664,1044013735,BE -1044013736,1044013743,NL -1044013744,1044013839,BE -1044013840,1044013847,NL -1044013848,1044013959,BE -1044013960,1044013967,NL -1044013968,1044014047,BE -1044014048,1044014055,NL -1044014056,1044014095,BE -1044014096,1044014135,NL -1044014136,1044014143,BE -1044014144,1044014207,NL -1044014208,1044014223,BE -1044014224,1044014231,NL -1044014232,1044014239,BE -1044014240,1044014247,NL -1044014248,1044014847,BE -1044014848,1044015487,NL -1044015488,1044015531,BE -1044015532,1044015543,NL -1044015544,1044015567,BE -1044015568,1044015583,NL -1044015584,1044015631,BE -1044015632,1044015647,NL -1044015648,1044015679,BE -1044015680,1044015703,NL -1044015704,1044015727,BE -1044015728,1044015743,NL -1044015744,1044015791,BE -1044015792,1044015823,NL -1044015824,1044016647,BE -1044016648,1044016655,NL -1044016656,1044016671,BE -1044016672,1044016703,NL -1044016704,1044016783,BE -1044016784,1044016799,NL -1044016800,1044017167,BE -1044017168,1044017279,NL -1044017280,1044017359,BE +1044013624,1044014111,BE +1044014112,1044014119,NL +1044014120,1044017167,BE +1044017168,1044017187,NL +1044017188,1044017191,BE +1044017192,1044017199,NL +1044017200,1044017215,BE +1044017216,1044017247,NL +1044017248,1044017359,BE 1044017360,1044017383,NL 1044017384,1044017399,BE -1044017400,1044017983,NL -1044017984,1044017999,BE -1044018000,1044018007,NL -1044018008,1044018031,BE -1044018032,1044018047,NL -1044018048,1044018175,BE -1044018176,1044019199,NL -1044019200,1044019231,BE -1044019232,1044019235,NL -1044019236,1044019279,BE +1044017400,1044017407,NL +1044017408,1044017663,BE +1044017664,1044017983,NL +1044017984,1044018039,BE +1044018040,1044018047,NL +1044018048,1044019279,BE 1044019280,1044019283,NL 1044019284,1044019291,BE 1044019292,1044019295,NL @@ -5399,125 +9340,959 @@ 1044019316,1044019323,NL 1044019324,1044019347,BE 1044019348,1044019351,NL -1044019352,1044019379,BE -1044019380,1044019399,NL +1044019352,1044019383,BE +1044019384,1044019399,NL 1044019400,1044019403,BE 1044019404,1044019407,NL 1044019408,1044019415,BE 1044019416,1044019439,NL 1044019440,1044019443,BE -1044019444,1044019475,NL -1044019476,1044019483,BE -1044019484,1044019487,NL -1044019488,1044019491,BE +1044019444,1044019471,NL +1044019472,1044019491,BE 1044019492,1044019495,NL 1044019496,1044019503,BE 1044019504,1044019507,NL -1044019508,1044019515,BE -1044019516,1044019527,NL -1044019528,1044019531,BE -1044019532,1044019539,NL -1044019540,1044019563,BE -1044019564,1044019567,NL -1044019568,1044019575,BE -1044019576,1044019583,NL -1044019584,1044019695,BE -1044019696,1044019711,NL -1044019712,1044019723,BE -1044019724,1044019731,NL -1044019732,1044019735,BE -1044019736,1044019739,NL -1044019740,1044019743,BE -1044019744,1044019747,NL -1044019748,1044019751,BE -1044019752,1044019755,NL -1044019756,1044019759,BE -1044019760,1044019771,NL -1044019772,1044019775,BE -1044019776,1044019779,NL -1044019780,1044019787,BE -1044019788,1044019799,NL -1044019800,1044019803,BE -1044019804,1044019807,NL -1044019808,1044019811,BE -1044019812,1044019827,NL -1044019828,1044019835,BE -1044019836,1044019843,NL -1044019844,1044019851,BE -1044019852,1044019859,NL -1044019860,1044019867,BE -1044019868,1044019871,NL -1044019872,1044019875,BE -1044019876,1044019887,NL -1044019888,1044019891,BE -1044019892,1044019903,NL -1044019904,1044019907,BE -1044019908,1044019911,NL -1044019912,1044019915,BE -1044019916,1044019919,NL -1044019920,1044019923,BE -1044019924,1044019931,NL -1044019932,1044019939,BE -1044019940,1044019955,NL -1044019956,1044019963,BE -1044019964,1044019979,NL -1044019980,1044019987,BE -1044019988,1044019991,NL -1044019992,1044019995,BE -1044019996,1044020003,NL -1044020004,1044020015,BE -1044020016,1044020019,NL -1044020020,1044020031,BE -1044020032,1044020035,NL -1044020036,1044020039,BE -1044020040,1044020047,NL -1044020048,1044020059,BE -1044020060,1044020071,NL -1044020072,1044020075,BE -1044020076,1044020083,NL -1044020084,1044020127,BE -1044020128,1044020131,NL -1044020132,1044020147,BE +1044019508,1044019695,BE +1044019696,1044019699,NL +1044019700,1044019819,BE +1044019820,1044019823,NL +1044019824,1044019995,BE +1044019996,1044019999,NL +1044020000,1044020147,BE 1044020148,1044020151,NL -1044020152,1044020155,BE -1044020156,1044020159,NL -1044020160,1044020163,BE -1044020164,1044020167,NL -1044020168,1044020187,BE -1044020188,1044020199,NL -1044020200,1044020203,BE -1044020204,1044020219,NL +1044020152,1044020215,BE +1044020216,1044020219,NL 1044020220,1044020255,BE 1044020256,1044020263,NL 1044020264,1044020303,BE 1044020304,1044020319,NL -1044020320,1044020351,BE -1044020352,1044020359,NL -1044020360,1044020511,BE +1044020320,1044020511,BE 1044020512,1044020551,NL 1044020552,1044020567,BE 1044020568,1044020591,NL 1044020592,1044020607,BE 1044020608,1044020671,NL 1044020672,1044020735,BE -1044020736,1044024063,NL -1044024064,1044024319,BE -1044024320,1044045823,NL -1044045824,1044045855,BE -1044045856,1044045887,NL -1044045888,1044045911,BE +1044020736,1044021759,NL +1044021760,1044021887,BE +1044021888,1044022319,NL +1044022320,1044022335,BE +1044022336,1044022351,NL +1044022352,1044022415,BE +1044022416,1044023295,NL +1044023296,1044023343,BE +1044023344,1044023359,NL +1044023360,1044023407,BE +1044023408,1044023439,NL +1044023440,1044024319,BE +1044024320,1044024447,NL +1044024448,1044024575,BE +1044024576,1044024835,NL +1044024836,1044024843,BE +1044024844,1044024847,NL +1044024848,1044024851,BE +1044024852,1044024855,NL +1044024856,1044024863,BE +1044024864,1044024867,NL +1044024868,1044024875,BE +1044024876,1044024883,NL +1044024884,1044024887,BE +1044024888,1044024891,NL +1044024892,1044024959,BE +1044024960,1044025351,NL +1044025352,1044025599,BE +1044025600,1044025855,NL +1044025856,1044025863,BE +1044025864,1044025927,NL +1044025928,1044025935,BE +1044025936,1044025967,NL +1044025968,1044025983,BE +1044025984,1044025999,NL +1044026000,1044026007,BE +1044026008,1044026023,NL +1044026024,1044026031,BE +1044026032,1044026047,NL +1044026048,1044026055,BE +1044026056,1044026079,NL +1044026080,1044026087,BE +1044026088,1044026111,NL +1044026112,1044026119,BE +1044026120,1044026151,NL +1044026152,1044026159,BE +1044026160,1044026167,NL +1044026168,1044026175,BE +1044026176,1044026183,NL +1044026184,1044026199,BE +1044026200,1044026207,NL +1044026208,1044026215,BE +1044026216,1044026247,NL +1044026248,1044026255,BE +1044026256,1044026263,NL +1044026264,1044026279,BE +1044026280,1044026327,NL +1044026328,1044026335,BE +1044026336,1044026383,NL +1044026384,1044026391,BE +1044026392,1044026399,NL +1044026400,1044026407,BE +1044026408,1044026415,NL +1044026416,1044026431,BE +1044026432,1044026447,NL +1044026448,1044026455,BE +1044026456,1044026479,NL +1044026480,1044026487,BE +1044026488,1044026519,NL +1044026520,1044026527,BE +1044026528,1044026631,NL +1044026632,1044026639,BE +1044026640,1044026647,NL +1044026648,1044026655,BE +1044026656,1044026663,NL +1044026664,1044026671,BE +1044026672,1044026679,NL +1044026680,1044026687,BE +1044026688,1044026695,NL +1044026696,1044026703,BE +1044026704,1044026727,NL +1044026728,1044026767,BE +1044026768,1044026791,NL +1044026792,1044026799,BE +1044026800,1044026815,NL +1044026816,1044026839,BE +1044026840,1044026855,NL +1044026856,1044026863,BE +1044026864,1044026895,NL +1044026896,1044027263,BE +1044027264,1044027407,NL +1044027408,1044027415,BE +1044027416,1044027423,NL +1044027424,1044027431,BE +1044027432,1044027447,NL +1044027448,1044027455,BE +1044027456,1044027471,NL +1044027472,1044027487,BE +1044027488,1044027519,NL +1044027520,1044027527,BE +1044027528,1044027535,NL +1044027536,1044027575,BE +1044027576,1044027583,NL +1044027584,1044027591,BE +1044027592,1044027639,NL +1044027640,1044027647,BE +1044027648,1044027655,NL +1044027656,1044027671,BE +1044027672,1044027687,NL +1044027688,1044027711,BE +1044027712,1044027727,NL +1044027728,1044027775,BE +1044027776,1044027839,NL +1044027840,1044027903,BE +1044027904,1044028159,NL +1044028160,1044028415,BE +1044028416,1044028671,NL +1044028672,1044028799,BE +1044028800,1044028927,NL +1044028928,1044028935,BE +1044028936,1044028943,NL +1044028944,1044028955,BE +1044028956,1044028959,NL +1044028960,1044029011,BE +1044029012,1044029015,NL +1044029016,1044029019,BE +1044029020,1044029023,NL +1044029024,1044029027,BE +1044029028,1044029031,NL +1044029032,1044029039,BE +1044029040,1044029043,NL +1044029044,1044029311,BE +1044029312,1044029441,NL +1044029442,1044029442,BE +1044029443,1044029445,NL +1044029446,1044029448,BE +1044029449,1044029451,NL +1044029452,1044029452,BE +1044029453,1044029453,NL +1044029454,1044029455,BE +1044029456,1044029463,NL +1044029464,1044029466,BE +1044029467,1044029467,NL +1044029468,1044029470,BE +1044029471,1044029479,NL +1044029480,1044029483,BE +1044029484,1044029485,NL +1044029486,1044029487,BE +1044029488,1044029488,NL +1044029489,1044029489,BE +1044029490,1044029492,NL +1044029493,1044029493,BE +1044029494,1044029494,NL +1044029495,1044029497,BE +1044029498,1044029498,NL +1044029499,1044029501,BE +1044029502,1044029502,NL +1044029503,1044029505,BE +1044029506,1044029509,NL +1044029510,1044029510,BE +1044029511,1044029511,NL +1044029512,1044029535,BE +1044029536,1044029536,NL +1044029537,1044029537,BE +1044029538,1044029538,NL +1044029539,1044029545,BE +1044029546,1044029546,NL +1044029547,1044029548,BE +1044029549,1044029549,NL +1044029550,1044029552,BE +1044029553,1044029553,NL +1044029554,1044029554,BE +1044029555,1044029556,NL +1044029557,1044029557,BE +1044029558,1044029558,NL +1044029559,1044029561,BE +1044029562,1044029567,NL +1044029568,1044029568,BE +1044029569,1044029569,NL +1044029570,1044029572,BE +1044029573,1044029575,NL +1044029576,1044029580,BE +1044029581,1044029581,NL +1044029582,1044029584,BE +1044029585,1044029585,NL +1044029586,1044029586,BE +1044029587,1044029587,NL +1044029588,1044029590,BE +1044029591,1044029595,NL +1044029596,1044029596,BE +1044029597,1044029598,NL +1044029599,1044029599,BE +1044029600,1044029600,NL +1044029601,1044029601,BE +1044029602,1044029603,NL +1044029604,1044029606,BE +1044029607,1044029608,NL +1044029609,1044029609,BE +1044029610,1044029610,NL +1044029611,1044029611,BE +1044029612,1044029612,NL +1044029613,1044029616,BE +1044029617,1044029618,NL +1044029619,1044029620,BE +1044029621,1044029622,NL +1044029623,1044029625,BE +1044029626,1044029628,NL +1044029629,1044029630,BE +1044029631,1044029631,NL +1044029632,1044029634,BE +1044029635,1044029635,NL +1044029636,1044029636,BE +1044029637,1044029638,NL +1044029639,1044029640,BE +1044029641,1044029641,NL +1044029642,1044029642,BE +1044029643,1044029647,NL +1044029648,1044029648,BE +1044029649,1044029651,NL +1044029652,1044029652,BE +1044029653,1044029659,NL +1044029660,1044029660,BE +1044029661,1044029663,NL +1044029664,1044029665,BE +1044029666,1044029667,NL +1044029668,1044029668,BE +1044029669,1044029669,NL +1044029670,1044029672,BE +1044029673,1044029676,NL +1044029677,1044029678,BE +1044029679,1044029680,NL +1044029681,1044029681,BE +1044029682,1044029682,NL +1044029683,1044029684,BE +1044029685,1044029686,NL +1044029687,1044029687,BE +1044029688,1044029693,NL +1044029694,1044029694,BE +1044029695,1044029695,NL +1044029696,1044029711,BE +1044029712,1044029719,NL +1044029720,1044029727,BE +1044029728,1044029743,NL +1044029744,1044029767,BE +1044029768,1044029775,NL +1044029776,1044029783,BE +1044029784,1044029823,NL +1044029824,1044029839,BE +1044029840,1044029871,NL +1044029872,1044029879,BE +1044029880,1044029887,NL +1044029888,1044029919,BE +1044029920,1044029951,NL +1044029952,1044029959,BE +1044029960,1044029967,NL +1044029968,1044029983,BE +1044029984,1044030015,NL +1044030016,1044030031,BE +1044030032,1044030047,NL +1044030048,1044030055,BE +1044030056,1044030063,NL +1044030064,1044030071,BE +1044030072,1044030111,NL +1044030112,1044030119,BE +1044030120,1044030127,NL +1044030128,1044030135,BE +1044030136,1044030191,NL +1044030192,1044030223,BE +1044030224,1044030231,NL +1044030232,1044030239,BE +1044030240,1044030247,NL +1044030248,1044030263,BE +1044030264,1044030279,NL +1044030280,1044030295,BE +1044030296,1044030303,NL +1044030304,1044030311,BE +1044030312,1044030335,NL +1044030336,1044030343,BE +1044030344,1044030351,NL +1044030352,1044030359,BE +1044030360,1044030375,NL +1044030376,1044030391,BE +1044030392,1044030399,NL +1044030400,1044030415,BE +1044030416,1044030439,NL +1044030440,1044030447,BE +1044030448,1044030463,NL +1044030464,1044030471,BE +1044030472,1044030487,NL +1044030488,1044030495,BE +1044030496,1044030527,NL +1044030528,1044030535,BE +1044030536,1044030583,NL +1044030584,1044030591,BE +1044030592,1044030607,NL +1044030608,1044030623,BE +1044030624,1044030639,NL +1044030640,1044030655,BE +1044030656,1044030671,NL +1044030672,1044030687,BE +1044030688,1044030703,NL +1044030704,1044030735,BE +1044030736,1044030759,NL +1044030760,1044030775,BE +1044030776,1044030799,NL +1044030800,1044030807,BE +1044030808,1044030815,NL +1044030816,1044030823,BE +1044030824,1044030831,NL +1044030832,1044030847,BE +1044030848,1044030879,NL +1044030880,1044030887,BE +1044030888,1044030895,NL +1044030896,1044030903,BE +1044030904,1044030911,NL +1044030912,1044030919,BE +1044030920,1044030927,NL +1044030928,1044030935,BE +1044030936,1044030959,NL +1044030960,1044030967,BE +1044030968,1044030975,NL +1044030976,1044030991,BE +1044030992,1044030999,NL +1044031000,1044031007,BE +1044031008,1044031039,NL +1044031040,1044031103,BE +1044031104,1044031119,NL +1044031120,1044031127,BE +1044031128,1044031151,NL +1044031152,1044031167,BE +1044031168,1044031271,NL +1044031272,1044031295,BE +1044031296,1044031319,NL +1044031320,1044031335,BE +1044031336,1044031343,NL +1044031344,1044031351,BE +1044031352,1044031359,NL +1044031360,1044031360,BE +1044031361,1044031363,NL +1044031364,1044031364,BE +1044031365,1044031367,NL +1044031368,1044031375,BE +1044031376,1044031399,NL +1044031400,1044031431,BE +1044031432,1044031439,NL +1044031440,1044031455,BE +1044031456,1044031479,NL +1044031480,1044031487,BE +1044031488,1044031489,NL +1044031490,1044031490,BE +1044031491,1044031494,NL +1044031495,1044031495,BE +1044031496,1044031496,NL +1044031497,1044031497,BE +1044031498,1044031507,NL +1044031508,1044031508,BE +1044031509,1044031509,NL +1044031510,1044031510,BE +1044031511,1044031519,NL +1044031520,1044031520,BE +1044031521,1044031523,NL +1044031524,1044031524,BE +1044031525,1044031531,NL +1044031532,1044031532,BE +1044031533,1044031533,NL +1044031534,1044031536,BE +1044031537,1044031550,NL +1044031551,1044031551,BE +1044031552,1044031552,NL +1044031553,1044031553,BE +1044031554,1044031556,NL +1044031557,1044031557,BE +1044031558,1044031558,NL +1044031559,1044031559,BE +1044031560,1044031562,NL +1044031563,1044031563,BE +1044031564,1044031566,NL +1044031567,1044031567,BE +1044031568,1044031568,NL +1044031569,1044031569,BE +1044031570,1044031571,NL +1044031572,1044031572,BE +1044031573,1044031573,NL +1044031574,1044031574,BE +1044031575,1044031579,NL +1044031580,1044031581,BE +1044031582,1044031582,NL +1044031583,1044031584,BE +1044031585,1044031592,NL +1044031593,1044031593,BE +1044031594,1044031597,NL +1044031598,1044031598,BE +1044031599,1044031599,NL +1044031600,1044031600,BE +1044031601,1044031627,NL +1044031628,1044031628,BE +1044031629,1044031629,NL +1044031630,1044031630,BE +1044031631,1044031635,NL +1044031636,1044031636,BE +1044031637,1044031640,NL +1044031641,1044031641,BE +1044031642,1044031643,NL +1044031644,1044031644,BE +1044031645,1044031651,NL +1044031652,1044031652,BE +1044031653,1044031654,NL +1044031655,1044031655,BE +1044031656,1044031656,NL +1044031657,1044031658,BE +1044031659,1044031666,NL +1044031667,1044031667,BE +1044031668,1044031668,NL +1044031669,1044031670,BE +1044031671,1044031673,NL +1044031674,1044031674,BE +1044031675,1044031675,NL +1044031676,1044031677,BE +1044031678,1044031683,NL +1044031684,1044031684,BE +1044031685,1044031687,NL +1044031688,1044031688,BE +1044031689,1044031690,NL +1044031691,1044031692,BE +1044031693,1044031698,NL +1044031699,1044031699,BE +1044031700,1044031702,NL +1044031703,1044031704,BE +1044031705,1044031709,NL +1044031710,1044031710,BE +1044031711,1044031711,NL +1044031712,1044031712,BE +1044031713,1044031714,NL +1044031715,1044031715,BE +1044031716,1044031717,NL +1044031718,1044031719,BE +1044031720,1044031721,NL +1044031722,1044031723,BE +1044031724,1044031726,NL +1044031727,1044031727,BE +1044031728,1044031751,NL +1044031752,1044031759,BE +1044031760,1044031799,NL +1044031800,1044031807,BE +1044031808,1044031815,NL +1044031816,1044031871,BE +1044031872,1044031879,NL +1044031880,1044031895,BE +1044031896,1044031927,NL +1044031928,1044031943,BE +1044031944,1044031951,NL +1044031952,1044031991,BE +1044031992,1044031999,NL +1044032000,1044032031,BE +1044032032,1044032047,NL +1044032048,1044032055,BE +1044032056,1044032071,NL +1044032072,1044032079,BE +1044032080,1044032103,NL +1044032104,1044032127,BE +1044032128,1044032143,NL +1044032144,1044032167,BE +1044032168,1044032175,NL +1044032176,1044032183,BE +1044032184,1044032191,NL +1044032192,1044032199,BE +1044032200,1044032223,NL +1044032224,1044032239,BE +1044032240,1044032263,NL +1044032264,1044032287,BE +1044032288,1044032303,NL +1044032304,1044032327,BE +1044032328,1044032375,NL +1044032376,1044032407,BE +1044032408,1044032471,NL +1044032472,1044032479,BE +1044032480,1044032527,NL +1044032528,1044032559,BE +1044032560,1044032583,NL +1044032584,1044032615,BE +1044032616,1044032639,NL +1044032640,1044032647,BE +1044032648,1044032695,NL +1044032696,1044032703,BE +1044032704,1044032719,NL +1044032720,1044032727,BE +1044032728,1044032735,NL +1044032736,1044032743,BE +1044032744,1044032775,NL +1044032776,1044032783,BE +1044032784,1044032791,NL +1044032792,1044032799,BE +1044032800,1044032815,NL +1044032816,1044032831,BE +1044032832,1044032855,NL +1044032856,1044032863,BE +1044032864,1044032887,NL +1044032888,1044032903,BE +1044032904,1044032927,NL +1044032928,1044032935,BE +1044032936,1044032943,NL +1044032944,1044032959,BE +1044032960,1044032967,NL +1044032968,1044032975,BE +1044032976,1044032991,NL +1044032992,1044032999,BE +1044033000,1044033031,NL +1044033032,1044033055,BE +1044033056,1044033071,NL +1044033072,1044033079,BE +1044033080,1044033087,NL +1044033088,1044033095,BE +1044033096,1044033111,NL +1044033112,1044033119,BE +1044033120,1044033135,NL +1044033136,1044033159,BE +1044033160,1044033207,NL +1044033208,1044033215,BE +1044033216,1044033223,NL +1044033224,1044033231,BE +1044033232,1044033335,NL +1044033336,1044033343,BE +1044033344,1044033351,NL +1044033352,1044033359,BE +1044033360,1044033375,NL +1044033376,1044033407,BE +1044033408,1044033431,NL +1044033432,1044033447,BE +1044033448,1044033527,NL +1044033528,1044033535,BE +1044033536,1044033543,NL +1044033544,1044033551,BE +1044033552,1044033575,NL +1044033576,1044033583,BE +1044033584,1044033623,NL +1044033624,1044033631,BE +1044033632,1044033655,NL +1044033656,1044033663,BE +1044033664,1044033671,NL +1044033672,1044033687,BE +1044033688,1044033719,NL +1044033720,1044033727,BE +1044033728,1044033847,NL +1044033848,1044033855,BE +1044033856,1044033895,NL +1044033896,1044033903,BE +1044033904,1044033927,NL +1044033928,1044033935,BE +1044033936,1044033991,NL +1044033992,1044033999,BE +1044034000,1044034015,NL +1044034016,1044034023,BE +1044034024,1044034031,NL +1044034032,1044034039,BE +1044034040,1044034055,NL +1044034056,1044034063,BE +1044034064,1044034095,NL +1044034096,1044034119,BE +1044034120,1044034127,NL +1044034128,1044034143,BE +1044034144,1044034207,NL +1044034208,1044034215,BE +1044034216,1044034231,NL +1044034232,1044034247,BE +1044034248,1044034263,NL +1044034264,1044034271,BE +1044034272,1044034279,NL +1044034280,1044034295,BE +1044034296,1044034303,NL +1044034304,1044034311,BE +1044034312,1044034327,NL +1044034328,1044034335,BE +1044034336,1044034375,NL +1044034376,1044034383,BE +1044034384,1044034487,NL +1044034488,1044034495,BE +1044034496,1044034511,NL +1044034512,1044034519,BE +1044034520,1044034615,NL +1044034616,1044034623,BE +1044034624,1044034663,NL +1044034664,1044034671,BE +1044034672,1044034735,NL +1044034736,1044034743,BE +1044034744,1044034751,NL +1044034752,1044034759,BE +1044034760,1044034783,NL +1044034784,1044034791,BE +1044034792,1044034847,NL +1044034848,1044034855,BE +1044034856,1044034919,NL +1044034920,1044034927,BE +1044034928,1044034975,NL +1044034976,1044034983,BE +1044034984,1044034999,NL +1044035000,1044035007,BE +1044035008,1044035031,NL +1044035032,1044035039,BE +1044035040,1044035047,NL +1044035048,1044035055,BE +1044035056,1044035063,NL +1044035064,1044035071,BE +1044035072,1044035087,NL +1044035088,1044035095,BE +1044035096,1044035143,NL +1044035144,1044035151,BE +1044035152,1044035191,NL +1044035192,1044035199,BE +1044035200,1044035223,NL +1044035224,1044035231,BE +1044035232,1044035255,NL +1044035256,1044035263,BE +1044035264,1044035287,NL +1044035288,1044035311,BE +1044035312,1044035327,NL +1044035328,1044035351,BE +1044035352,1044035367,NL +1044035368,1044035375,BE +1044035376,1044035407,NL +1044035408,1044035423,BE +1044035424,1044035447,NL +1044035448,1044035471,BE +1044035472,1044035479,NL +1044035480,1044035487,BE +1044035488,1044035495,NL +1044035496,1044035503,BE +1044035504,1044035511,NL +1044035512,1044035527,BE +1044035528,1044035535,NL +1044035536,1044035543,BE +1044035544,1044035559,NL +1044035560,1044035591,BE +1044035592,1044035607,NL +1044035608,1044035623,BE +1044035624,1044035655,NL +1044035656,1044035663,BE +1044035664,1044035671,NL +1044035672,1044035679,BE +1044035680,1044035711,NL +1044035712,1044035727,BE +1044035728,1044035751,NL +1044035752,1044035759,BE +1044035760,1044035791,NL +1044035792,1044035807,BE +1044035808,1044035831,NL +1044035832,1044035839,BE +1044035840,1044035847,NL +1044035848,1044035871,BE +1044035872,1044035887,NL +1044035888,1044035895,BE +1044035896,1044035903,NL +1044035904,1044035919,BE +1044035920,1044035935,NL +1044035936,1044035967,BE +1044035968,1044035975,NL +1044035976,1044035991,BE +1044035992,1044035999,NL +1044036000,1044036007,BE +1044036008,1044036039,NL +1044036040,1044036047,BE +1044036048,1044036079,NL +1044036080,1044036087,BE +1044036088,1044036095,NL +1044036096,1044036103,BE +1044036104,1044036111,NL +1044036112,1044036119,BE +1044036120,1044036127,NL +1044036128,1044036135,BE +1044036136,1044036143,NL +1044036144,1044036159,BE +1044036160,1044036167,NL +1044036168,1044036199,BE +1044036200,1044036223,NL +1044036224,1044036239,BE +1044036240,1044036255,NL +1044036256,1044036271,BE +1044036272,1044036295,NL +1044036296,1044036311,BE +1044036312,1044036327,NL +1044036328,1044036335,BE +1044036336,1044036399,NL +1044036400,1044036407,BE +1044036408,1044036415,NL +1044036416,1044036423,BE +1044036424,1044036439,NL +1044036440,1044036447,BE +1044036448,1044036471,NL +1044036472,1044036479,BE +1044036480,1044036503,NL +1044036504,1044036511,BE +1044036512,1044036527,NL +1044036528,1044036543,BE +1044036544,1044036559,NL +1044036560,1044036567,BE +1044036568,1044036575,NL +1044036576,1044036623,BE +1044036624,1044036647,NL +1044036648,1044036655,BE +1044036656,1044036671,NL +1044036672,1044036687,BE +1044036688,1044036759,NL +1044036760,1044036767,BE +1044036768,1044036775,NL +1044036776,1044036783,BE +1044036784,1044036791,NL +1044036792,1044036799,BE +1044036800,1044036807,NL +1044036808,1044036815,BE +1044036816,1044036863,NL +1044036864,1044036864,BE +1044036865,1044036865,NL +1044036866,1044036866,BE +1044036867,1044036890,NL +1044036891,1044036891,BE +1044036892,1044036899,NL +1044036900,1044036900,BE +1044036901,1044036907,NL +1044036908,1044036908,BE +1044036909,1044036909,NL +1044036910,1044036910,BE +1044036911,1044036927,NL +1044036928,1044036928,BE +1044036929,1044036942,NL +1044036943,1044036943,BE +1044036944,1044036948,NL +1044036949,1044036951,BE +1044036952,1044036957,NL +1044036958,1044036958,BE +1044036959,1044036967,NL +1044036968,1044036968,BE +1044036969,1044036970,NL +1044036971,1044036971,BE +1044036972,1044036976,NL +1044036977,1044036977,BE +1044036978,1044036984,NL +1044036985,1044036985,BE +1044036986,1044036990,NL +1044036991,1044036991,BE +1044036992,1044037007,NL +1044037008,1044037010,BE +1044037011,1044037014,NL +1044037015,1044037015,BE +1044037016,1044037021,NL +1044037022,1044037022,BE +1044037023,1044037023,NL +1044037024,1044037025,BE +1044037026,1044037026,NL +1044037027,1044037027,BE +1044037028,1044037037,NL +1044037038,1044037038,BE +1044037039,1044037042,NL +1044037043,1044037043,BE +1044037044,1044037047,NL +1044037048,1044037048,BE +1044037049,1044037049,NL +1044037050,1044037051,BE +1044037052,1044037056,NL +1044037057,1044037057,BE +1044037058,1044037061,NL +1044037062,1044037063,BE +1044037064,1044037065,NL +1044037066,1044037066,BE +1044037067,1044037070,NL +1044037071,1044037071,BE +1044037072,1044037074,NL +1044037075,1044037075,BE +1044037076,1044037091,NL +1044037092,1044037092,BE +1044037093,1044037098,NL +1044037099,1044037100,BE +1044037101,1044037101,NL +1044037102,1044037102,BE +1044037103,1044037106,NL +1044037107,1044037107,BE +1044037108,1044037109,NL +1044037110,1044037110,BE +1044037111,1044037143,NL +1044037144,1044037151,BE +1044037152,1044037159,NL +1044037160,1044037167,BE +1044037168,1044037191,NL +1044037192,1044037223,BE +1044037224,1044037271,NL +1044037272,1044037279,BE +1044037280,1044037287,NL +1044037288,1044037295,BE +1044037296,1044037319,NL +1044037320,1044037327,BE +1044037328,1044037667,NL +1044037668,1044037671,BE +1044037672,1044037703,NL +1044037704,1044037711,BE +1044037712,1044037735,NL +1044037736,1044037743,BE +1044037744,1044037759,NL +1044037760,1044037763,BE +1044037764,1044037775,NL +1044037776,1044037783,BE +1044037784,1044037791,NL +1044037792,1044037823,BE +1044037824,1044037831,NL +1044037832,1044037839,BE +1044037840,1044037855,NL +1044037856,1044037887,BE +1044037888,1044038143,NL +1044038144,1044038527,BE +1044038528,1044038535,NL +1044038536,1044038543,BE +1044038544,1044038559,NL +1044038560,1044038567,BE +1044038568,1044038591,NL +1044038592,1044038599,BE +1044038600,1044038607,NL +1044038608,1044038623,BE +1044038624,1044038639,NL +1044038640,1044038647,BE +1044038648,1044038671,NL +1044038672,1044038679,BE +1044038680,1044038687,NL +1044038688,1044038703,BE +1044038704,1044038783,NL +1044038784,1044038911,BE +1044038912,1044038919,NL +1044038920,1044038927,BE +1044038928,1044038935,NL +1044038936,1044038943,BE +1044038944,1044039295,NL +1044039296,1044039303,BE +1044039304,1044039311,NL +1044039312,1044039359,BE +1044039360,1044039687,NL +1044039688,1044039695,BE +1044039696,1044039751,NL +1044039752,1044039759,BE +1044039760,1044039775,NL +1044039776,1044039855,BE +1044039856,1044039951,NL +1044039952,1044039959,BE +1044039960,1044039999,NL +1044040000,1044040015,BE +1044040016,1044040063,NL +1044040064,1044040111,BE +1044040112,1044040143,NL +1044040144,1044040159,BE +1044040160,1044040191,NL +1044040192,1044040223,BE +1044040224,1044040231,NL +1044040232,1044040239,BE +1044040240,1044040255,NL +1044040256,1044040703,BE +1044040704,1044041727,NL +1044041728,1044043775,BE +1044043776,1044043783,NL +1044043784,1044043787,BE +1044043788,1044043791,NL +1044043792,1044043795,BE +1044043796,1044043799,NL +1044043800,1044043803,BE +1044043804,1044043807,NL +1044043808,1044043811,BE +1044043812,1044043823,NL +1044043824,1044043827,BE +1044043828,1044043835,NL +1044043836,1044043847,BE +1044043848,1044043851,NL +1044043852,1044043879,BE +1044043880,1044043883,NL +1044043884,1044043895,BE +1044043896,1044043903,NL +1044043904,1044043907,BE +1044043908,1044043919,NL +1044043920,1044043927,BE +1044043928,1044043931,NL +1044043932,1044043935,BE +1044043936,1044043943,NL +1044043944,1044043955,BE +1044043956,1044043971,NL +1044043972,1044043975,BE +1044043976,1044043987,NL +1044043988,1044043999,BE +1044044000,1044044003,NL +1044044004,1044044007,BE +1044044008,1044044011,NL +1044044012,1044044015,BE +1044044016,1044044019,NL +1044044020,1044044027,BE +1044044028,1044044035,NL +1044044036,1044044043,BE +1044044044,1044044051,NL +1044044052,1044044055,BE +1044044056,1044044059,NL +1044044060,1044044071,BE +1044044072,1044044083,NL +1044044084,1044044099,BE +1044044100,1044044119,NL +1044044120,1044044131,BE +1044044132,1044044135,NL +1044044136,1044044143,BE +1044044144,1044044163,NL +1044044164,1044044167,BE +1044044168,1044044171,NL +1044044172,1044044187,BE +1044044188,1044044215,NL +1044044216,1044044227,BE +1044044228,1044044243,NL +1044044244,1044044247,BE +1044044248,1044044251,NL +1044044252,1044045311,BE +1044045312,1044045695,NL +1044045696,1044045911,BE 1044045912,1044045919,NL 1044045920,1044046079,BE -1044046080,1044046239,NL +1044046080,1044046223,NL +1044046224,1044046231,BE +1044046232,1044046239,NL 1044046240,1044046319,BE 1044046320,1044046327,NL -1044046328,1044046847,BE -1044046848,1044051967,NL -1044051968,1044051987,BE +1044046328,1044051987,BE 1044051988,1044051991,NL -1044051992,1044051995,BE -1044051996,1044051999,NL -1044052000,1044052011,BE +1044051992,1044052011,BE 1044052012,1044052015,NL 1044052016,1044052031,BE 1044052032,1044052039,NL @@ -5527,48 +10302,132 @@ 1044052108,1044052111,NL 1044052112,1044052131,BE 1044052132,1044052135,NL -1044052136,1044052151,BE -1044052152,1044052155,NL -1044052156,1044052223,BE +1044052136,1044052223,BE 1044052224,1044052227,NL 1044052228,1044052255,BE 1044052256,1044052259,NL 1044052260,1044052347,BE 1044052348,1044052359,NL 1044052360,1044052363,BE -1044052364,1044052971,NL +1044052364,1044052375,NL +1044052376,1044052479,BE +1044052480,1044052483,NL +1044052484,1044052967,BE +1044052968,1044052971,NL 1044052972,1044052983,BE -1044052984,1044052999,NL -1044053000,1044053055,BE -1044053056,1044053071,NL -1044053072,1044053255,BE +1044052984,1044052987,NL +1044052988,1044053055,BE +1044053056,1044053063,NL +1044053064,1044053255,BE 1044053256,1044053263,NL -1044053264,1044053399,BE -1044053400,1044053415,NL -1044053416,1044053423,BE -1044053424,1044053431,NL -1044053432,1044053455,BE +1044053264,1044053455,BE 1044053456,1044053463,NL 1044053464,1044053503,BE -1044053504,1044106239,NL -1044106240,1044106367,BE -1044106368,1044106495,NL -1044106496,1044106751,BE -1044106752,1044106755,NL -1044106756,1044106763,BE -1044106764,1044106767,NL -1044106768,1044106771,BE +1044053504,1044059263,NL +1044059264,1044059935,BE +1044059936,1044060031,NL +1044060032,1044060063,BE +1044060064,1044061183,NL +1044061184,1044061223,BE +1044061224,1044061263,NL +1044061264,1044061271,BE +1044061272,1044061343,NL +1044061344,1044061375,BE +1044061376,1044061391,NL +1044061392,1044061399,BE +1044061400,1044061431,NL +1044061432,1044061439,BE +1044061440,1044061695,NL +1044061696,1044061703,BE +1044061704,1044061759,NL +1044061760,1044061775,BE +1044061776,1044061783,NL +1044061784,1044061799,BE +1044061800,1044061831,NL +1044061832,1044061839,BE +1044061840,1044061879,NL +1044061880,1044061895,BE +1044061896,1044061919,NL +1044061920,1044061951,BE +1044061952,1044062015,NL +1044062016,1044062047,BE +1044062048,1044062079,NL +1044062080,1044062095,BE +1044062096,1044062103,NL +1044062104,1044062135,BE +1044062136,1044062175,NL +1044062176,1044062199,BE +1044062200,1044062223,NL +1044062224,1044062239,BE +1044062240,1044062375,NL +1044062376,1044062383,BE +1044062384,1044062399,NL +1044062400,1044062415,BE +1044062416,1044062455,NL +1044062456,1044062471,BE +1044062472,1044062503,NL +1044062504,1044062527,BE +1044062528,1044062535,NL +1044062536,1044062543,BE +1044062544,1044062575,NL +1044062576,1044062583,BE +1044062584,1044062591,NL +1044062592,1044062599,BE +1044062600,1044062607,NL +1044062608,1044062623,BE +1044062624,1044062647,NL +1044062648,1044062655,BE +1044062656,1044062663,NL +1044062664,1044062671,BE +1044062672,1044063231,NL +1044063232,1044063355,BE +1044063356,1044063363,NL +1044063364,1044067327,BE +1044067328,1044068351,NL +1044068352,1044068991,BE +1044068992,1044069631,NL +1044069632,1044070399,BE +1044070400,1044076607,NL +1044076608,1044076799,BE +1044076800,1044092927,NL +1044092928,1044093183,BE +1044093184,1044094975,NL +1044094976,1044099071,BE +1044099072,1044103263,NL +1044103264,1044103423,BE +1044103424,1044103999,NL +1044104000,1044104031,BE +1044104032,1044104095,NL +1044104096,1044104159,BE +1044104160,1044104287,NL +1044104288,1044104319,BE +1044104320,1044104367,NL +1044104368,1044104383,BE +1044104384,1044104543,NL +1044104544,1044104559,BE +1044104560,1044104831,NL +1044104832,1044105023,BE +1044105024,1044105055,NL +1044105056,1044105087,BE +1044105088,1044105151,NL +1044105152,1044106771,BE 1044106772,1044106775,NL 1044106776,1044106787,BE 1044106788,1044106795,NL 1044106796,1044106807,BE -1044106808,1044117503,NL -1044117504,1044117543,BE -1044117544,1044117567,NL -1044117568,1044117847,BE -1044117848,1044117855,NL -1044117856,1044118527,BE -1044118528,1044119551,NL +1044106808,1044106815,NL +1044106816,1044107263,BE +1044107264,1044111359,NL +1044111360,1044115455,BE +1044115456,1044117503,NL +1044117504,1044117551,BE +1044117552,1044117567,NL +1044117568,1044118527,BE +1044118528,1044118783,NL +1044118784,1044118847,BE +1044118848,1044118895,NL +1044118896,1044118903,BE +1044118904,1044119551,NL 1044119552,1044152319,GB 1044152320,1044185087,IR 1044185088,1044193279,RU @@ -5620,9 +10479,7 @@ 1044332544,1044348927,RU 1044348928,1044365311,LV 1044365312,1044381695,SE -1044381696,1044384511,RU -1044384512,1044384767,KZ -1044384768,1044389887,RU +1044381696,1044389887,RU 1044389888,1044398079,FR 1044398080,1044414463,UA 1044414464,1044447231,GB @@ -5645,11 +10502,17 @@ 1044455424,1044463615,EE 1044463616,1044479999,SE 1044480000,1044488191,CH -1044488192,1044496383,SK +1044488192,1044494911,SK +1044494912,1044494943,SR +1044494944,1044496383,SK 1044496384,1044512767,EE 1044512768,1044578303,DK 1044578304,1044580607,DE -1044580608,1044586495,GB +1044580608,1044580735,GB +1044580736,1044580767,DE +1044580768,1044580863,GB +1044580864,1044581119,DE +1044581120,1044586495,GB 1044586496,1044587007,DE 1044587008,1044587519,GB 1044587520,1044587775,DE @@ -5675,8 +10538,12 @@ 1044592192,1044592255,DE 1044592256,1044592639,GB 1044592640,1044592655,DE -1044592656,1044592831,GB -1044592832,1044594431,DE +1044592656,1044592671,GB +1044592672,1044592703,DE +1044592704,1044592831,GB +1044592832,1044593151,DE +1044593152,1044593663,GB +1044593664,1044594431,DE 1044594432,1044625407,GB 1044625408,1044625463,DE 1044625464,1044625471,GB @@ -5684,29 +10551,29 @@ 1044625536,1044625663,GB 1044625664,1044625679,DE 1044625680,1044627455,GB -1044627456,1044628479,DE -1044628480,1044629503,GB +1044627456,1044628223,DE +1044628224,1044629503,GB 1044629504,1044629759,DE 1044629760,1044631551,GB -1044631552,1044631871,DE -1044631872,1044631951,GB +1044631552,1044631903,DE +1044631904,1044631951,GB 1044631952,1044631967,DE 1044631968,1044632063,GB -1044632064,1044633855,DE -1044633856,1044634111,GB -1044634112,1044634367,DE -1044634368,1044634623,GB +1044632064,1044633087,DE +1044633088,1044633343,GB +1044633344,1044633855,DE +1044633856,1044634623,GB 1044634624,1044634879,DE -1044634880,1044635135,GB -1044635136,1044635391,DE -1044635392,1044635647,GB +1044634880,1044635647,GB 1044635648,1044636159,US 1044636160,1044638207,DE 1044638208,1044638223,GB 1044638224,1044638239,DE 1044638240,1044638463,GB 1044638464,1044638719,DE -1044638720,1044639743,GB +1044638720,1044638975,GB +1044638976,1044639231,DE +1044639232,1044639743,GB 1044639744,1044642303,DE 1044642304,1044642815,GB 1044642816,1044643327,DE @@ -5795,7 +10662,9 @@ 1044930928,1044930967,BE 1044930968,1044930975,FR 1044930976,1044930979,GB -1044930980,1044931375,BE +1044930980,1044931343,BE +1044931344,1044931359,GB +1044931360,1044931375,BE 1044931376,1044931391,GB 1044931392,1044931407,BE 1044931408,1044931439,GB @@ -5807,7 +10676,9 @@ 1044931552,1044931567,GB 1044931568,1044931583,BE 1044931584,1044931623,GB -1044931624,1044931663,BE +1044931624,1044931631,BE +1044931632,1044931639,GB +1044931640,1044931663,BE 1044931664,1044931671,GB 1044931672,1044931759,BE 1044931760,1044931775,GB @@ -5844,11 +10715,9 @@ 1044932728,1044932735,BE 1044932736,1044932799,GB 1044932800,1044932831,BE -1044932832,1044932839,GB -1044932840,1044932847,BE -1044932848,1044932863,GB -1044932864,1044932939,BE -1044932940,1044932947,GB +1044932832,1044932863,GB +1044932864,1044932935,BE +1044932936,1044932947,GB 1044932948,1044932951,BE 1044932952,1044932959,GB 1044932960,1044933007,BE @@ -5869,8 +10738,8 @@ 1044933408,1044933411,GB 1044933412,1044933415,BE 1044933416,1044933439,GB -1044933440,1044933511,BE -1044933512,1044933519,GB +1044933440,1044933503,BE +1044933504,1044933519,GB 1044933520,1044933551,BE 1044933552,1044933555,GB 1044933556,1044933583,BE @@ -5891,7 +10760,11 @@ 1044933864,1044933871,GB 1044933872,1044933919,BE 1044933920,1044933935,GB -1044933936,1044934191,BE +1044933936,1044934111,BE +1044934112,1044934119,GB +1044934120,1044934151,BE +1044934152,1044934159,GB +1044934160,1044934191,BE 1044934192,1044934199,GB 1044934200,1044934239,BE 1044934240,1044934247,GB @@ -5903,7 +10776,9 @@ 1044934576,1044934583,GB 1044934584,1044934591,BE 1044934592,1044934599,GB -1044934600,1044934719,BE +1044934600,1044934607,BE +1044934608,1044934615,GB +1044934616,1044934719,BE 1044934720,1044934783,GB 1044934784,1044934815,BE 1044934816,1044934819,GB @@ -5935,31 +10810,35 @@ 1044935744,1044935751,GB 1044935752,1044935839,BE 1044935840,1044935847,GB -1044935848,1044935879,BE +1044935848,1044935851,BE +1044935852,1044935871,GB +1044935872,1044935879,BE 1044935880,1044935887,GB -1044935888,1044935903,BE -1044935904,1044936063,GB -1044936064,1044936103,BE +1044935888,1044935895,BE +1044935896,1044936095,GB +1044936096,1044936103,BE 1044936104,1044936111,GB 1044936112,1044936123,BE 1044936124,1044936151,GB 1044936152,1044936207,BE 1044936208,1044936215,GB -1044936216,1044936271,BE +1044936216,1044936231,BE +1044936232,1044936239,GB +1044936240,1044936271,BE 1044936272,1044936287,GB 1044936288,1044936303,BE 1044936304,1044936311,GB 1044936312,1044936335,BE 1044936336,1044936351,GB 1044936352,1044936439,BE -1044936440,1044936447,GB -1044936448,1044936455,BE -1044936456,1044936463,GB +1044936440,1044936463,GB 1044936464,1044936495,BE 1044936496,1044936503,GB 1044936504,1044936711,BE 1044936712,1044936719,GB -1044936720,1044937183,BE +1044936720,1044936847,BE +1044936848,1044936863,GB +1044936864,1044937183,BE 1044937184,1044937187,GB 1044937188,1044937287,BE 1044937288,1044937311,GB @@ -5967,8 +10846,8 @@ 1044937392,1044937399,GB 1044937400,1044937487,BE 1044937488,1044937503,GB -1044937504,1044937527,BE -1044937528,1044937531,GB +1044937504,1044937515,BE +1044937516,1044937531,GB 1044937532,1044937535,BE 1044937536,1044937551,GB 1044937552,1044937567,BE @@ -5982,8 +10861,8 @@ 1044937696,1044937703,BE 1044937704,1044937711,GB 1044937712,1044937747,BE -1044937748,1044937759,GB -1044937760,1044937847,BE +1044937748,1044937767,GB +1044937768,1044937847,BE 1044937848,1044937887,GB 1044937888,1044937903,BE 1044937904,1044937915,GB @@ -5995,16 +10874,20 @@ 1044938104,1044938107,GB 1044938108,1044938111,BE 1044938112,1044938143,GB -1044938144,1044938235,BE +1044938144,1044938175,BE +1044938176,1044938207,GB +1044938208,1044938235,BE 1044938236,1044938271,GB -1044938272,1044938367,BE +1044938272,1044938335,BE +1044938336,1044938343,GB +1044938344,1044938367,BE 1044938368,1044938399,GB 1044938400,1044938407,BE 1044938408,1044938415,GB 1044938416,1044938423,BE 1044938424,1044938431,GB -1044938432,1044938487,BE -1044938488,1044938511,GB +1044938432,1044938479,BE +1044938480,1044938511,GB 1044938512,1044938519,BE 1044938520,1044938523,GB 1044938524,1044938559,BE @@ -6036,8 +10919,7 @@ 1045018560,1045018623,GB 1045018624,1045018751,ES 1045018752,1045020159,GB -1045020160,1045020655,ES -1045020656,1045020671,GB +1045020160,1045020671,ES 1045020672,1045037055,NO 1045037056,1045119231,GR 1045119232,1045119743,AL @@ -6048,19 +10930,21 @@ 1045154560,1045154591,NL 1045154592,1045154623,DE 1045154624,1045154655,GB -1045154656,1045154687,DE -1045154688,1045154719,NL -1045154720,1045154751,DE +1045154656,1045154687,MA +1045154688,1045154719,US +1045154720,1045154751,RU 1045154752,1045154783,SE -1045154784,1045155071,DE +1045154784,1045154815,BR +1045154816,1045155071,DE 1045155072,1045155327,CH 1045155328,1045160959,DE 1045160960,1045160991,TR -1045160992,1045161023,DE +1045160992,1045161023,MA 1045161024,1045161055,AT -1045161056,1045161151,DE -1045161152,1045161183,PT -1045161184,1045168127,DE +1045161056,1045161087,AU +1045161088,1045161119,IN +1045161120,1045161151,SC +1045161152,1045168127,DE 1045168128,1045233663,RU 1045233664,1045241855,GB 1045241856,1045250047,IT @@ -6083,26 +10967,12 @@ 1045446656,1045446911,HU 1045446912,1045447167,SK 1045447168,1045447231,HU -1045447232,1045447239,SK -1045447240,1045447263,HU -1045447264,1045447279,SK -1045447280,1045447287,HU -1045447288,1045447295,SK +1045447232,1045447295,SK 1045447296,1045447311,HU -1045447312,1045447423,SK -1045447424,1045447431,HU -1045447432,1045447439,SK -1045447440,1045447447,HU -1045447448,1045447471,SK -1045447472,1045447551,HU -1045447552,1045448031,SK -1045448032,1045448039,HU -1045448040,1045448055,SK -1045448056,1045448063,HU -1045448064,1045448159,SK -1045448160,1045448191,HU -1045448192,1045448239,SK -1045448240,1045448263,HU +1045447312,1045447519,SK +1045447520,1045447551,HU +1045447552,1045448255,SK +1045448256,1045448263,HU 1045448264,1045448703,SK 1045448704,1045448767,HU 1045448768,1045450751,SK @@ -6125,9 +10995,7 @@ 1045461728,1045461735,ES 1045461736,1045461743,NL 1045461744,1045463039,DE -1045463040,1045467487,FI -1045467488,1045467519,AX -1045467520,1045471231,FI +1045463040,1045471231,FI 1045471232,1045479423,UA 1045479424,1045487615,SE 1045487616,1045495807,LT @@ -6138,109 +11006,88 @@ 1045716992,1045725183,RU 1045725184,1045733375,CZ 1045733376,1045741567,GB -1045741568,1045741887,SE -1045741888,1045741951,GB -1045741952,1045742015,SE -1045742016,1045742023,GB -1045742024,1045742031,SE -1045742032,1045742039,GB -1045742040,1045742063,SE -1045742064,1045742111,GB -1045742112,1045742135,SE -1045742136,1045742143,NL -1045742144,1045742151,SE -1045742152,1045742159,DK -1045742160,1045742167,SE -1045742168,1045742175,DK -1045742176,1045742239,SE -1045742240,1045742247,GB -1045742248,1045742383,SE -1045742384,1045742391,GB -1045742392,1045742495,SE -1045742496,1045742535,GB -1045742536,1045742551,SE -1045742552,1045742559,GB -1045742560,1045742763,SE -1045742764,1045742767,GB -1045742768,1045742783,SE -1045742784,1045742831,GB +1045741568,1045741823,SE +1045741824,1045741831,GB +1045741832,1045741839,BE +1045741840,1045741887,SE +1045741888,1045742039,GB +1045742040,1045742047,SE +1045742048,1045742111,GB +1045742112,1045742115,SE +1045742116,1045742175,GB +1045742176,1045742191,SE +1045742192,1045742335,GB +1045742336,1045742351,SE +1045742352,1045742367,GB +1045742368,1045742383,SE +1045742384,1045742395,GB +1045742396,1045742471,SE +1045742472,1045742479,GB +1045742480,1045742487,SE +1045742488,1045742575,GB +1045742576,1045742623,SE +1045742624,1045742751,GB +1045742752,1045742759,SE +1045742760,1045742831,GB 1045742832,1045742839,SE 1045742840,1045742847,GB -1045742848,1045743023,SE -1045743024,1045743031,GB +1045742848,1045742983,SE +1045742984,1045742991,GB +1045742992,1045743007,SE +1045743008,1045743015,FI +1045743016,1045743031,GB 1045743032,1045743039,SE -1045743040,1045743047,GB -1045743048,1045743063,NL +1045743040,1045743063,GB 1045743064,1045743095,SE -1045743096,1045743099,GB -1045743100,1045743247,SE -1045743248,1045743251,GB -1045743252,1045743295,SE -1045743296,1045743299,GB -1045743300,1045743679,SE -1045743680,1045743743,GB -1045743744,1045743803,SE -1045743804,1045743807,GB -1045743808,1045744007,SE +1045743096,1045743103,GB +1045743104,1045743231,SE +1045743232,1045743251,GB +1045743252,1045743263,SE +1045743264,1045743299,GB +1045743300,1045743623,SE +1045743624,1045743871,GB +1045743872,1045744007,SE 1045744008,1045744015,GB 1045744016,1045744031,SE -1045744032,1045744063,GB -1045744064,1045744639,SE +1045744032,1045744127,GB +1045744128,1045744639,SE 1045744640,1045744671,BE -1045744672,1045744703,SE -1045744704,1045745407,GB +1045744672,1045745407,GB 1045745408,1045745607,SE 1045745608,1045745615,FI -1045745616,1045745623,GB -1045745624,1045745655,SE -1045745656,1045745663,GB +1045745616,1045745627,SE +1045745628,1045745631,GB +1045745632,1045745647,SE +1045745648,1045745663,FI 1045745664,1045745695,SE 1045745696,1045745759,GB 1045745760,1045745768,SE 1045745769,1045745791,GB 1045745792,1045745855,SE -1045745856,1045745879,GB -1045745880,1045745951,SE -1045745952,1045745999,GB -1045746000,1045746079,SE -1045746080,1045746095,GB -1045746096,1045746163,SE -1045746164,1045746175,GB +1045745856,1045745919,GB +1045745920,1045745951,SE +1045745952,1045746175,GB 1045746176,1045746431,SE 1045746432,1045746495,GB 1045746496,1045746527,SE -1045746528,1045746543,GB -1045746544,1045746559,SE -1045746560,1045746671,GB +1045746528,1045746671,GB 1045746672,1045747071,SE 1045747072,1045747199,GB 1045747200,1045747455,SE -1045747456,1045747583,GB -1045747584,1045747615,SE -1045747616,1045747679,GB -1045747680,1045747711,SE -1045747712,1045747751,GB -1045747752,1045747775,SE -1045747776,1045747815,GB -1045747816,1045747823,SE -1045747824,1045747839,GB +1045747456,1045747759,GB +1045747760,1045747775,SE +1045747776,1045747839,GB 1045747840,1045747871,SE 1045747872,1045747919,GB 1045747920,1045747935,SE 1045747936,1045747967,GB 1045747968,1045748223,SE -1045748224,1045748239,GB -1045748240,1045748287,SE -1045748288,1045748295,GB -1045748296,1045748303,SE -1045748304,1045748319,GB +1045748224,1045748319,GB 1045748320,1045748351,SE -1045748352,1045748391,GB -1045748392,1045748395,SE -1045748396,1045748399,GB -1045748400,1045748407,SE -1045748408,1045748463,GB -1045748464,1045748735,SE +1045748352,1045748463,GB +1045748464,1045748471,SE +1045748472,1045748479,GB +1045748480,1045748735,SE 1045748736,1045749503,GB 1045749504,1045749759,SE 1045749760,1045757951,GB @@ -6266,18 +11113,18 @@ 1046225656,1046229111,NO 1046229112,1046229119,SE 1046229120,1046282239,NO -1046282240,1046283007,DE -1046283008,1046283263,BZ +1046282240,1046282623,DE +1046282624,1046282751,US +1046282752,1046283007,DE +1046283008,1046283135,BZ +1046283136,1046283263,DE 1046283264,1046283327,LU -1046283328,1046284287,DE -1046284288,1046285055,BZ +1046283328,1046285055,DE 1046285056,1046285119,HR 1046285120,1046285183,MT 1046285184,1046285247,BZ 1046285248,1046285311,BA -1046285312,1046286335,DE -1046286336,1046286399,BZ -1046286400,1046286663,DE +1046285312,1046286663,DE 1046286664,1046286671,BZ 1046286672,1046286935,DE 1046286936,1046286943,ES @@ -6316,14 +11163,12 @@ 1046317056,1046317567,ES 1046317568,1046318335,NL 1046318336,1046318591,GB -1046318592,1046320127,NL -1046320128,1046320639,GB -1046320640,1046323199,NL +1046318592,1046323199,NL 1046323200,1046327151,ES 1046327152,1046327155,FR 1046327156,1046331391,ES -1046331392,1046331455,DE -1046331456,1046331647,EU +1046331392,1046331519,DE +1046331520,1046331647,EU 1046331648,1046331679,DE 1046331680,1046331743,EU 1046331744,1046331775,DE @@ -6331,7 +11176,8 @@ 1046331840,1046331871,DE 1046331872,1046332159,EU 1046332160,1046332415,FR -1046332416,1046333439,EU +1046332416,1046332447,DE +1046332448,1046333439,EU 1046333440,1046333695,DE 1046333696,1046334719,EU 1046334720,1046334975,DE @@ -6343,11 +11189,9 @@ 1046337536,1046338047,DE 1046338048,1046339839,EU 1046339840,1046340095,FR -1046340096,1046342143,EU -1046342144,1046342655,NL -1046342656,1046343423,EU -1046343424,1046343935,NL -1046343936,1046344959,EU +1046340096,1046343423,EU +1046343424,1046343679,NL +1046343680,1046344959,EU 1046344960,1046345215,DE 1046345216,1046345327,EU 1046345328,1046345727,DE @@ -6370,7 +11214,9 @@ 1046413312,1046446079,SE 1046446080,1046479535,DE 1046479536,1046479551,GB -1046479552,1046479687,DE +1046479552,1046479583,DE +1046479584,1046479615,GB +1046479616,1046479687,DE 1046479688,1046479695,GB 1046479696,1046480047,DE 1046480048,1046480055,GB @@ -6410,8 +11256,8 @@ 1046485496,1046485503,GB 1046485504,1046486055,DE 1046486056,1046486063,GB -1046486064,1046486159,DE -1046486160,1046486175,GB +1046486064,1046486151,DE +1046486152,1046486175,GB 1046486176,1046486183,DE 1046486184,1046486191,GB 1046486192,1046486375,DE @@ -6441,7 +11287,9 @@ 1046493088,1046493095,DE 1046493096,1046493103,GB 1046493104,1046493391,DE -1046493392,1046493471,GB +1046493392,1046493399,GB +1046493400,1046493407,DE +1046493408,1046493471,GB 1046493472,1046493487,DE 1046493488,1046493511,GB 1046493512,1046493519,DE @@ -6552,7 +11400,9 @@ 1046502864,1046502911,GB 1046502912,1046504415,DE 1046504416,1046504447,GB -1046504448,1046516287,DE +1046504448,1046508543,DE +1046508544,1046511615,GB +1046511616,1046516287,DE 1046516288,1046516735,GB 1046516736,1046516751,DE 1046516752,1046516991,GB @@ -6561,7 +11411,11 @@ 1046517040,1046517087,DE 1046517088,1046517759,GB 1046517760,1046518271,DE -1046518272,1046524159,GB +1046518272,1046519167,GB +1046519168,1046519191,DE +1046519192,1046519199,GB +1046519200,1046519231,DE +1046519232,1046524159,GB 1046524160,1046524191,DE 1046524192,1046524207,GB 1046524208,1046524215,DE @@ -6635,8 +11489,8 @@ 1046535488,1046535551,DE 1046535552,1046535619,GB 1046535620,1046535623,DE -1046535624,1046535631,GB -1046535632,1046535935,DE +1046535624,1046535679,GB +1046535680,1046535935,DE 1046535936,1046536023,GB 1046536024,1046536039,DE 1046536040,1046536063,GB @@ -6657,9 +11511,7 @@ 1046536320,1046536351,DE 1046536352,1046536355,GB 1046536356,1046536359,DE -1046536360,1046536423,GB -1046536424,1046536431,DE -1046536432,1046536607,GB +1046536360,1046536607,GB 1046536608,1046536667,DE 1046536668,1046536703,GB 1046536704,1046537023,DE @@ -6686,8 +11538,8 @@ 1046541696,1046541727,GB 1046541728,1046541759,DE 1046541760,1046541767,GB -1046541768,1046541783,DE -1046541784,1046541807,GB +1046541768,1046541775,DE +1046541776,1046541807,GB 1046541808,1046543103,DE 1046543104,1046543263,GB 1046543264,1046543295,DE @@ -6711,7 +11563,9 @@ 1046757376,1046765567,IT 1046765568,1046773759,ES 1046773760,1046781951,FR -1046781952,1046798335,GB +1046781952,1046790143,GB +1046790144,1046791167,US +1046791168,1046798335,GB 1046798336,1046806527,HU 1046806528,1046814719,IT 1046814720,1046822911,SE @@ -6722,9 +11576,7 @@ 1046872064,1046872583,BE 1046872584,1046872607,EU 1046872608,1046872615,BE -1046872616,1046872655,EU -1046872656,1046872671,BE -1046872672,1046872975,EU +1046872616,1046872975,EU 1046872976,1046872999,BE 1046873000,1046873087,EU 1046873088,1046873279,BE @@ -6796,14 +11648,21 @@ 1046882304,1046884383,BE 1046884384,1046885375,EU 1046885376,1046888447,BE -1046888448,1046895103,GB -1046895104,1046896383,EU +1046888448,1046895359,GB +1046895360,1046896383,EU 1046896384,1046897663,GB 1046897664,1046898431,BE 1046898432,1046898687,EU 1046898688,1046898943,BE 1046898944,1046899167,EU 1046899168,1046904831,BE +1046904832,1046906879,SK +1046906880,1046908927,IR +1046908928,1046910975,SE +1046910976,1046913023,IT +1046913024,1046921215,NO +1046921216,1046929407,DE +1046929408,1046937599,FR 1046937600,1047003135,GR 1047003136,1047068671,DE 1047068672,1047085055,RU @@ -6819,7 +11678,9 @@ 1047265280,1047273471,NL 1047273472,1047281663,DE 1047281664,1047289855,TR -1047289856,1047298047,RS +1047289856,1047295351,RS +1047295352,1047295359,HU +1047295360,1047298047,RS 1047298048,1047300095,CH 1047300096,1047300415,GB 1047300416,1047300479,CH @@ -6843,7 +11704,9 @@ 1047340800,1047341055,NO 1047341056,1047343871,SE 1047343872,1047344127,NO -1047344128,1047346431,SE +1047344128,1047346351,SE +1047346352,1047346359,FI +1047346360,1047346431,SE 1047346432,1047346687,FI 1047346688,1047347199,SE 1047347200,1047363583,DE @@ -6856,15 +11719,11 @@ 1047527424,1047535615,BE 1047535616,1047551999,DE 1047552000,1047560191,RU -1047560192,1047561367,DE -1047561368,1047561371,CN -1047561372,1047561747,DE -1047561748,1047561751,ES -1047561752,1047561887,DE +1047560192,1047561151,DE +1047561152,1047561159,AT +1047561160,1047561887,DE 1047561888,1047561891,US -1047561892,1047563227,DE -1047563228,1047563231,CH -1047563232,1047563287,DE +1047561892,1047563287,DE 1047563288,1047563295,CH 1047563296,1047563303,DE 1047563304,1047563311,CH @@ -6889,38 +11748,43 @@ 1047563468,1047563471,CH 1047563472,1047565131,DE 1047565132,1047565135,GB -1047565136,1047566363,DE +1047565136,1047565343,DE +1047565344,1047565359,CH +1047565360,1047565503,DE +1047565504,1047565507,CZ +1047565508,1047565839,DE +1047565840,1047565887,CH +1047565888,1047566015,DE +1047566016,1047566079,CZ +1047566080,1047566363,DE 1047566364,1047566367,CH 1047566368,1047566403,DE 1047566404,1047566415,CH -1047566416,1047566443,DE +1047566416,1047566435,DE +1047566436,1047566439,CH +1047566440,1047566443,DE 1047566444,1047566447,AT -1047566448,1047566455,DE -1047566456,1047566459,CH +1047566448,1047566451,DE +1047566452,1047566459,CH 1047566460,1047566475,DE 1047566476,1047566479,CH -1047566480,1047566491,DE -1047566492,1047566499,CH +1047566480,1047566495,DE +1047566496,1047566499,CH 1047566500,1047566507,DE 1047566508,1047566511,CH 1047566512,1047566519,DE -1047566520,1047566527,CH -1047566528,1047566531,DE -1047566532,1047566539,CH +1047566520,1047566539,CH 1047566540,1047566543,DE 1047566544,1047566547,CH 1047566548,1047566559,DE 1047566560,1047566563,CH 1047566564,1047566847,DE 1047566848,1047566851,AT -1047566852,1047566867,DE -1047566868,1047566871,AT +1047566852,1047566871,DE 1047566872,1047566879,CH 1047566880,1047566891,DE 1047566892,1047566903,CH -1047566904,1047566911,DE -1047566912,1047566915,CH -1047566916,1047566947,DE +1047566904,1047566947,DE 1047566948,1047566951,AT 1047566952,1047566963,DE 1047566964,1047566967,AT @@ -6930,14 +11794,17 @@ 1047567000,1047567015,DE 1047567016,1047567019,CH 1047567020,1047567027,DE -1047567028,1047567035,CH -1047567036,1047567039,DE +1047567028,1047567031,CH +1047567032,1047567039,DE 1047567040,1047567043,AT 1047567044,1047567047,CH 1047567048,1047567063,DE 1047567064,1047567067,CH 1047567068,1047567071,BE -1047567072,1047567119,DE +1047567072,1047567075,NL +1047567076,1047567079,DE +1047567080,1047567083,NL +1047567084,1047567119,DE 1047567120,1047567127,CH 1047567128,1047567143,DE 1047567144,1047567147,CH @@ -6945,7 +11812,8 @@ 1047567152,1047567159,CH 1047567160,1047567163,DE 1047567164,1047567167,AT -1047567168,1047567211,DE +1047567168,1047567175,CH +1047567176,1047567211,DE 1047567212,1047567227,CH 1047567228,1047567239,DE 1047567240,1047567243,CH @@ -6953,17 +11821,20 @@ 1047567248,1047567255,CH 1047567256,1047567279,DE 1047567280,1047567287,CH -1047567288,1047567315,DE +1047567288,1047567307,DE +1047567308,1047567311,CH +1047567312,1047567315,DE 1047567316,1047567319,AT -1047567320,1047567359,DE -1047567360,1047567375,ES -1047567376,1047567447,DE +1047567320,1047567327,CH +1047567328,1047567447,DE 1047567448,1047567451,CH 1047567452,1047567455,AT 1047567456,1047567459,CH 1047567460,1047567463,DE -1047567464,1047567467,CH -1047567468,1047567495,DE +1047567464,1047567471,CH +1047567472,1047567475,DE +1047567476,1047567483,CH +1047567484,1047567495,DE 1047567496,1047567499,CH 1047567500,1047567535,DE 1047567536,1047567539,CH @@ -6981,9 +11852,7 @@ 1047567748,1047567751,CH 1047567752,1047567755,LU 1047567756,1047567759,CH -1047567760,1047567799,DE -1047567800,1047567803,CH -1047567804,1047567823,DE +1047567760,1047567823,DE 1047567824,1047567839,CH 1047567840,1047567847,DE 1047567848,1047567851,CH @@ -6992,21 +11861,19 @@ 1047567872,1047567875,CH 1047567876,1047567879,AT 1047567880,1047567883,CH -1047567884,1047567935,DE -1047567936,1047567939,CH +1047567884,1047567903,DE +1047567904,1047567939,CH 1047567940,1047568047,DE -1047568048,1047568059,CH -1047568060,1047568087,DE -1047568088,1047568095,CH -1047568096,1047568159,DE +1047568048,1047568051,CH +1047568052,1047568055,DE +1047568056,1047568059,CH +1047568060,1047568159,DE 1047568160,1047568163,CH 1047568164,1047568187,DE 1047568188,1047568191,CH 1047568192,1047568215,DE 1047568216,1047568219,CH -1047568220,1047568235,DE -1047568236,1047568239,CH -1047568240,1047568247,DE +1047568220,1047568247,DE 1047568248,1047568251,CH 1047568252,1047568363,DE 1047568364,1047568367,CH @@ -7028,18 +11895,19 @@ 1047740416,1047740431,US 1047740432,1047740447,DE 1047740448,1047740463,IT -1047740464,1047740543,EU +1047740464,1047740479,SE +1047740480,1047740543,EU 1047740544,1047740671,DE 1047740672,1047740927,A2 -1047740928,1047781663,EU -1047781664,1047781671,GB -1047781672,1047782695,EU +1047740928,1047782695,EU 1047782696,1047782703,GB 1047782704,1047782719,EU 1047782720,1047782751,SE 1047782752,1047782783,NO 1047782784,1047782815,FI -1047782816,1047789375,EU +1047782816,1047785471,EU +1047785472,1047788031,DE +1047788032,1047789375,EU 1047789376,1047789383,GB 1047789384,1047789407,EU 1047789408,1047789423,DE @@ -7050,9 +11918,7 @@ 1047789568,1047806031,AT 1047806032,1047806047,IT 1047806048,1047822335,AT -1047822336,1047834895,DE -1047834896,1047834903,CY -1047834904,1047838719,DE +1047822336,1047838719,DE 1047838720,1047846911,DK 1047846912,1047855103,SE 1047855104,1047863295,DE @@ -7064,7 +11930,9 @@ 1047941376,1047986175,RU 1047986176,1047997439,SE 1047997440,1047997503,NO -1047997504,1048012383,SE +1047997504,1048003503,SE +1048003504,1048003511,NO +1048003512,1048012383,SE 1048012384,1048012391,DE 1048012392,1048051711,SE 1048051712,1048117247,SA @@ -7103,22 +11971,22 @@ 1048576000,1048584191,DE 1048584192,1048592383,IL 1048592384,1048600575,IT -1048600576,1048602623,UA -1048602624,1048603135,EE -1048603136,1048604671,UA +1048600576,1048604671,UA 1048604672,1048604687,EE -1048604688,1048604743,UA -1048604744,1048604759,EE +1048604688,1048604751,UA +1048604752,1048604759,EE 1048604760,1048604927,UA -1048604928,1048604965,LT -1048604966,1048604967,UA -1048604968,1048604971,LT -1048604972,1048604975,UA -1048604976,1048605079,LT -1048605080,1048607231,UA -1048607232,1048607247,EE -1048607248,1048607487,UA -1048607488,1048607519,EE +1048604928,1048604945,LT +1048604946,1048604947,UA +1048604948,1048604991,LT +1048604992,1048605055,UA +1048605056,1048605079,LT +1048605080,1048605087,UA +1048605088,1048605095,LT +1048605096,1048605103,UA +1048605104,1048605119,LT +1048605120,1048607231,UA +1048607232,1048607519,EE 1048607520,1048607743,UA 1048607744,1048607759,EE 1048607760,1048607775,UA @@ -7228,9 +12096,7 @@ 1048852040,1048852047,DE 1048852048,1048852335,NL 1048852336,1048852343,DE -1048852344,1048852807,NL -1048852808,1048852815,DE -1048852816,1048852871,NL +1048852344,1048852871,NL 1048852872,1048852879,DE 1048852880,1048853127,NL 1048853128,1048853135,DE @@ -7370,9 +12236,7 @@ 1048869480,1048869487,DE 1048869488,1048869543,NL 1048869544,1048869551,DE -1048869552,1048869575,NL -1048869576,1048869583,DE -1048869584,1048869615,NL +1048869552,1048869615,NL 1048869616,1048869623,DE 1048869624,1048869687,NL 1048869688,1048869695,DE @@ -7574,7 +12438,9 @@ 1048887040,1048887047,DE 1048887048,1048887935,NL 1048887936,1048887999,DE -1048888000,1048891391,NL +1048888000,1048889983,NL +1048889984,1048890015,DE +1048890016,1048891391,NL 1048891392,1048891399,DE 1048891400,1048891823,NL 1048891824,1048891831,DE @@ -7823,32 +12689,24 @@ 1049001984,1049002015,DE 1049002016,1049002175,EU 1049002176,1049002239,DE -1049002240,1049002623,EU -1049002624,1049002751,DE -1049002752,1049003263,EU -1049003264,1049004291,DE -1049004292,1049004351,EU +1049002240,1049003263,EU +1049003264,1049004287,DE +1049004288,1049004351,EU 1049004352,1049004415,DE 1049004416,1049004543,EU 1049004544,1049006079,DE 1049006080,1049007103,EU 1049007104,1049007111,DE -1049007112,1049007119,EU -1049007120,1049007135,DE -1049007136,1049007359,EU +1049007112,1049007359,EU 1049007360,1049009535,DE 1049009536,1049009559,EU 1049009560,1049009567,DE 1049009568,1049009583,EU 1049009584,1049009615,DE -1049009616,1049009623,EU -1049009624,1049009631,DE -1049009632,1049009647,EU +1049009616,1049009647,EU 1049009648,1049009662,DE 1049009663,1049009663,EU -1049009664,1049011711,DE -1049011712,1049011967,EU -1049011968,1049012223,DE +1049009664,1049012223,DE 1049012224,1049012224,EU 1049012225,1049012226,DE 1049012227,1049012735,EU @@ -7867,16 +12725,18 @@ 1049017984,1049018047,GE 1049018048,1049020127,DE 1049020128,1049020135,FR -1049020136,1049026559,DE +1049020136,1049021343,DE +1049021344,1049021375,US +1049021376,1049026559,DE 1049026560,1049026815,EU 1049026816,1049031871,DE 1049031872,1049031903,EU -1049031904,1049032135,DE -1049032136,1049032167,EU +1049031904,1049032143,DE +1049032144,1049032167,EU 1049032168,1049032171,DE -1049032172,1049032175,EU -1049032176,1049032287,DE -1049032288,1049032295,EU +1049032172,1049032191,EU +1049032192,1049032291,DE +1049032292,1049032295,EU 1049032296,1049032383,DE 1049032384,1049032399,EU 1049032400,1049032623,DE @@ -7892,7 +12752,9 @@ 1049231360,1049296895,DE 1049296896,1049362431,EG 1049362432,1049362623,DE -1049362624,1049362943,GB +1049362624,1049362687,GB +1049362688,1049362815,DE +1049362816,1049362943,GB 1049362944,1049362959,DE 1049362960,1049363071,GB 1049363072,1049363135,DE @@ -7918,7 +12780,9 @@ 1049369600,1049369935,DE 1049369936,1049369983,GB 1049369984,1049370047,DE -1049370048,1049370175,GB +1049370048,1049370111,GB +1049370112,1049370143,DE +1049370144,1049370175,GB 1049370176,1049370255,DE 1049370256,1049370367,GB 1049370368,1049370623,DE @@ -7968,9 +12832,10 @@ 1049709312,1049709567,GB 1049709568,1049709823,A2 1049709824,1049710079,US -1049710080,1049710591,NL -1049710592,1049712639,GB -1049712640,1049713055,IR +1049710080,1049710335,GB +1049710336,1049710591,NL +1049710592,1049712895,GB +1049712896,1049713055,IR 1049713056,1049713087,MA 1049713088,1049713151,IR 1049713152,1049713663,NL @@ -7987,12 +12852,11 @@ 1049722880,1049731071,IS 1049731072,1049739263,FI 1049739264,1049755647,NL -1049755648,1049757599,DE -1049757600,1049757631,LU -1049757632,1049757647,DE +1049755648,1049757383,DE +1049757384,1049757391,IT +1049757392,1049757647,DE 1049757648,1049757663,CA -1049757664,1049757671,BA -1049757672,1049758063,DE +1049757664,1049758063,DE 1049758064,1049758071,PL 1049758072,1049758095,DE 1049758096,1049758103,ES @@ -8002,7 +12866,9 @@ 1049759984,1049759999,AE 1049760000,1049760639,DE 1049760640,1049760703,IT -1049760704,1049760927,DE +1049760704,1049760767,DE +1049760768,1049760775,ES +1049760776,1049760927,DE 1049760928,1049760959,DK 1049760960,1049761023,PL 1049761024,1049761791,DE @@ -8071,9 +12937,7 @@ 1049785000,1049785007,AT 1049785008,1049787135,DE 1049787136,1049787391,PL -1049787392,1049790207,DE -1049790208,1049790463,LU -1049790464,1049794559,DE +1049787392,1049794559,DE 1049794560,1049795583,CH 1049795584,1049817151,DE 1049817152,1049817159,PL @@ -8099,16 +12963,20 @@ 1050083328,1050148863,ES 1050148864,1050157055,CY 1050157056,1050173439,RU -1050173440,1050174063,IT -1050174064,1050174079,FR -1050174080,1050181631,IT +1050173440,1050178487,IT +1050178488,1050178495,ES +1050178496,1050181631,IT 1050181632,1050189823,PL 1050189824,1050198015,DE 1050198016,1050206207,RU -1050206208,1050214399,SK +1050206208,1050206999,SK +1050207000,1050207007,SR +1050207008,1050214399,SK 1050214400,1050244935,DE 1050244936,1050244943,PL -1050244944,1050320231,DE +1050244944,1050246719,DE +1050246720,1050246735,BE +1050246736,1050320231,DE 1050320232,1050320239,GB 1050320240,1050340607,DE 1050340608,1050340639,US @@ -8122,17 +12990,13 @@ 1050505248,1050505279,CA 1050505280,1050507503,DE 1050507504,1050507519,A2 -1050507520,1050515647,DE -1050515648,1050515663,DK -1050515664,1050522407,DE +1050507520,1050522407,DE 1050522408,1050522415,CH 1050522416,1050619503,DE 1050619504,1050619511,CH 1050619512,1050621407,DE 1050621408,1050621439,BE -1050621440,1050625959,DE -1050625960,1050625967,AT -1050625968,1050626559,DE +1050621440,1050626559,DE 1050626560,1050626815,GB 1050626816,1050647431,DE 1050647432,1050647439,NL @@ -8199,25 +13063,99 @@ 1051033600,1051049983,FI 1051049984,1051066367,HU 1051066368,1051084287,NL -1051084288,1051084415,BE -1051084416,1051084423,NL -1051084424,1051084655,BE -1051084656,1051084663,NL -1051084664,1051084711,BE -1051084712,1051084719,NL -1051084720,1051084727,BE -1051084728,1051084735,NL -1051084736,1051084799,BE -1051084800,1051102207,NL -1051102208,1051102463,BE -1051102464,1051102471,NL -1051102472,1051102527,BE -1051102528,1051102535,NL -1051102536,1051102559,BE -1051102560,1051102567,NL -1051102568,1051102687,BE -1051102688,1051102703,NL -1051102704,1051102879,BE +1051084288,1051084799,BE +1051084800,1051096831,NL +1051096832,1051097087,BE +1051097088,1051098111,NL +1051098112,1051099135,BE +1051099136,1051099647,NL +1051099648,1051099663,BE +1051099664,1051099671,NL +1051099672,1051099687,BE +1051099688,1051099695,NL +1051099696,1051099711,BE +1051099712,1051099727,NL +1051099728,1051099775,BE +1051099776,1051099791,NL +1051099792,1051099815,BE +1051099816,1051099823,NL +1051099824,1051099855,BE +1051099856,1051099863,NL +1051099864,1051099879,BE +1051099880,1051099887,NL +1051099888,1051099927,BE +1051099928,1051099967,NL +1051099968,1051099975,BE +1051099976,1051099983,NL +1051099984,1051100015,BE +1051100016,1051100023,NL +1051100024,1051100079,BE +1051100080,1051100095,NL +1051100096,1051100151,BE +1051100152,1051100159,NL +1051100160,1051100455,BE +1051100456,1051100463,NL +1051100464,1051100487,BE +1051100488,1051100499,NL +1051100500,1051100591,BE +1051100592,1051100607,NL +1051100608,1051100631,BE +1051100632,1051100663,NL +1051100664,1051100695,BE +1051100696,1051100703,NL +1051100704,1051100711,BE +1051100712,1051100735,NL +1051100736,1051100831,BE +1051100832,1051100839,NL +1051100840,1051100879,BE +1051100880,1051100911,NL +1051100912,1051100951,BE +1051100952,1051100967,NL +1051100968,1051101047,BE +1051101048,1051101055,NL +1051101056,1051101127,BE +1051101128,1051101151,NL +1051101152,1051101207,BE +1051101208,1051101231,NL +1051101232,1051101247,BE +1051101248,1051101279,NL +1051101280,1051101287,BE +1051101288,1051101407,NL +1051101408,1051101415,BE +1051101416,1051101431,NL +1051101432,1051101447,BE +1051101448,1051101463,NL +1051101464,1051101471,BE +1051101472,1051101591,NL +1051101592,1051101607,BE +1051101608,1051101615,NL +1051101616,1051101623,BE +1051101624,1051101631,NL +1051101632,1051101655,BE +1051101656,1051101671,NL +1051101672,1051101687,BE +1051101688,1051101719,NL +1051101720,1051101735,BE +1051101736,1051101783,NL +1051101784,1051101807,BE +1051101808,1051101823,NL +1051101824,1051101855,BE +1051101856,1051101919,NL +1051101920,1051101927,BE +1051101928,1051101959,NL +1051101960,1051101967,BE +1051101968,1051101983,NL +1051101984,1051102007,BE +1051102008,1051102055,NL +1051102056,1051102071,BE +1051102072,1051102079,NL +1051102080,1051102087,BE +1051102088,1051102095,NL +1051102096,1051102103,BE +1051102104,1051102119,NL +1051102120,1051102159,BE +1051102160,1051102207,NL +1051102208,1051102879,BE 1051102880,1051102887,NL 1051102888,1051103007,BE 1051103008,1051103015,NL @@ -8226,7 +13164,241 @@ 1051103120,1051103207,BE 1051103208,1051103215,NL 1051103216,1051103231,BE -1051103232,1051115519,NL +1051103232,1051103233,NL +1051103234,1051103247,BE +1051103248,1051103287,NL +1051103288,1051103295,BE +1051103296,1051103359,NL +1051103360,1051103367,BE +1051103368,1051103431,NL +1051103432,1051103447,BE +1051103448,1051103503,NL +1051103504,1051103519,BE +1051103520,1051103527,NL +1051103528,1051103535,BE +1051103536,1051103543,NL +1051103544,1051103567,BE +1051103568,1051103583,NL +1051103584,1051103607,BE +1051103608,1051103639,NL +1051103640,1051103647,BE +1051103648,1051103663,NL +1051103664,1051103679,BE +1051103680,1051103687,NL +1051103688,1051103703,BE +1051103704,1051103767,NL +1051103768,1051103775,BE +1051103776,1051103799,NL +1051103800,1051103815,BE +1051103816,1051103823,NL +1051103824,1051103831,BE +1051103832,1051103863,NL +1051103864,1051103871,BE +1051103872,1051103879,NL +1051103880,1051103887,BE +1051103888,1051103911,NL +1051103912,1051103927,BE +1051103928,1051103959,NL +1051103960,1051103975,BE +1051103976,1051103991,NL +1051103992,1051103999,BE +1051104000,1051104015,NL +1051104016,1051104039,BE +1051104040,1051104071,NL +1051104072,1051104079,BE +1051104080,1051104111,NL +1051104112,1051104143,BE +1051104144,1051104167,NL +1051104168,1051104183,BE +1051104184,1051104191,NL +1051104192,1051104199,BE +1051104200,1051104231,NL +1051104232,1051104255,BE +1051104256,1051104311,NL +1051104312,1051104319,BE +1051104320,1051104327,NL +1051104328,1051104335,BE +1051104336,1051104359,NL +1051104360,1051104367,BE +1051104368,1051104383,NL +1051104384,1051104399,BE +1051104400,1051104503,NL +1051104504,1051104527,BE +1051104528,1051104559,NL +1051104560,1051104567,BE +1051104568,1051104583,NL +1051104584,1051104599,BE +1051104600,1051104607,NL +1051104608,1051104631,BE +1051104632,1051104679,NL +1051104680,1051104695,BE +1051104696,1051104719,NL +1051104720,1051104727,BE +1051104728,1051104751,NL +1051104752,1051104759,BE +1051104760,1051104791,NL +1051104792,1051104799,BE +1051104800,1051104823,NL +1051104824,1051104831,BE +1051104832,1051104839,NL +1051104840,1051104863,BE +1051104864,1051104903,NL +1051104904,1051104911,BE +1051104912,1051104935,NL +1051104936,1051104943,BE +1051104944,1051104951,NL +1051104952,1051104967,BE +1051104968,1051104975,NL +1051104976,1051104983,BE +1051104984,1051104991,NL +1051104992,1051104999,BE +1051105000,1051105047,NL +1051105048,1051105055,BE +1051105056,1051105063,NL +1051105064,1051105079,BE +1051105080,1051105103,NL +1051105104,1051105119,BE +1051105120,1051105127,NL +1051105128,1051105135,BE +1051105136,1051105143,NL +1051105144,1051105151,BE +1051105152,1051105183,NL +1051105184,1051105199,BE +1051105200,1051105207,NL +1051105208,1051105223,BE +1051105224,1051105255,NL +1051105256,1051105263,BE +1051105264,1051105271,NL +1051105272,1051105279,BE +1051105280,1051105319,NL +1051105320,1051105327,BE +1051105328,1051105359,NL +1051105360,1051105383,BE +1051105384,1051105439,NL +1051105440,1051105455,BE +1051105456,1051105503,NL +1051105504,1051105511,BE +1051105512,1051105519,NL +1051105520,1051105551,BE +1051105552,1051105599,NL +1051105600,1051105607,BE +1051105608,1051105703,NL +1051105704,1051105711,BE +1051105712,1051105791,NL +1051105792,1051105799,BE +1051105800,1051105807,NL +1051105808,1051105815,BE +1051105816,1051105831,NL +1051105832,1051105839,BE +1051105840,1051105863,NL +1051105864,1051105871,BE +1051105872,1051105895,NL +1051105896,1051105903,BE +1051105904,1051105911,NL +1051105912,1051105935,BE +1051105936,1051105967,NL +1051105968,1051105983,BE +1051105984,1051105999,NL +1051106000,1051106023,BE +1051106024,1051106031,NL +1051106032,1051106039,BE +1051106040,1051106047,NL +1051106048,1051106055,BE +1051106056,1051106071,NL +1051106072,1051106079,BE +1051106080,1051106087,NL +1051106088,1051106103,BE +1051106104,1051106111,NL +1051106112,1051106119,BE +1051106120,1051106127,NL +1051106128,1051106143,BE +1051106144,1051106167,NL +1051106168,1051106175,BE +1051106176,1051106183,NL +1051106184,1051106191,BE +1051106192,1051106247,NL +1051106248,1051106271,BE +1051106272,1051106303,NL +1051106304,1051106311,BE +1051106312,1051106319,NL +1051106320,1051106327,BE +1051106328,1051106335,NL +1051106336,1051106351,BE +1051106352,1051106383,NL +1051106384,1051106399,BE +1051106400,1051106423,NL +1051106424,1051106431,BE +1051106432,1051106463,NL +1051106464,1051106471,BE +1051106472,1051106503,NL +1051106504,1051106519,BE +1051106520,1051106527,NL +1051106528,1051106535,BE +1051106536,1051106543,NL +1051106544,1051106551,BE +1051106552,1051106591,NL +1051106592,1051106599,BE +1051106600,1051106607,NL +1051106608,1051106615,BE +1051106616,1051106639,NL +1051106640,1051106655,BE +1051106656,1051106663,NL +1051106664,1051106671,BE +1051106672,1051106711,NL +1051106712,1051106719,BE +1051106720,1051106759,NL +1051106760,1051106767,BE +1051106768,1051106775,NL +1051106776,1051106783,BE +1051106784,1051106799,NL +1051106800,1051106807,BE +1051106808,1051106823,NL +1051106824,1051106831,BE +1051106832,1051106847,NL +1051106848,1051106863,BE +1051106864,1051106895,NL +1051106896,1051106911,BE +1051106912,1051106943,NL +1051106944,1051106951,BE +1051106952,1051106959,NL +1051106960,1051106967,BE +1051106968,1051106975,NL +1051106976,1051107007,BE +1051107008,1051107015,NL +1051107016,1051107039,BE +1051107040,1051107055,NL +1051107056,1051107063,BE +1051107064,1051107071,NL +1051107072,1051107095,BE +1051107096,1051107103,NL +1051107104,1051107119,BE +1051107120,1051107127,NL +1051107128,1051107135,BE +1051107136,1051107143,NL +1051107144,1051107167,BE +1051107168,1051107183,NL +1051107184,1051107215,BE +1051107216,1051107223,NL +1051107224,1051107231,BE +1051107232,1051107239,NL +1051107240,1051107247,BE +1051107248,1051107279,NL +1051107280,1051107287,BE +1051107288,1051107295,NL +1051107296,1051107303,BE +1051107304,1051107311,NL +1051107312,1051107327,BE +1051107328,1051107329,NL +1051107330,1051107359,BE +1051107360,1051107375,NL +1051107376,1051107383,BE +1051107384,1051107391,NL +1051107392,1051107407,BE +1051107408,1051107423,NL +1051107424,1051107455,BE +1051107456,1051107519,NL +1051107520,1051107839,BE +1051107840,1051115519,NL 1051115520,1051121287,BE 1051121288,1051121295,NL 1051121296,1051123711,BE @@ -8241,21 +13413,7 @@ 1051124816,1051124895,NL 1051124896,1051124911,BE 1051124912,1051125247,NL -1051125248,1051125263,BE -1051125264,1051125279,NL -1051125280,1051125327,BE -1051125328,1051125335,NL -1051125336,1051125343,BE -1051125344,1051125351,NL -1051125352,1051125375,BE -1051125376,1051125391,NL -1051125392,1051125399,BE -1051125400,1051125407,NL -1051125408,1051125575,BE -1051125576,1051125583,NL -1051125584,1051125639,BE -1051125640,1051125655,NL -1051125656,1051125759,BE +1051125248,1051125759,BE 1051125760,1051131903,NL 1051131904,1051197439,CH 1051197440,1051213823,CZ @@ -8280,39 +13438,21 @@ 1051566080,1051574271,IT 1051574272,1051574623,GB 1051574624,1051574655,GM -1051574656,1051575999,GB -1051576000,1051576015,IT -1051576016,1051577503,GB -1051577504,1051577519,NL -1051577520,1051577535,GB +1051574656,1051577535,GB 1051577536,1051577567,NL -1051577568,1051577575,BE -1051577576,1051577583,GB -1051577584,1051577587,FI -1051577588,1051577591,GB -1051577592,1051577599,NL -1051577600,1051577855,GB +1051577568,1051577855,GB 1051577856,1051578111,NL 1051578112,1051578143,GB 1051578144,1051578175,NL -1051578176,1051578239,GB -1051578240,1051578263,FR -1051578264,1051578271,GB -1051578272,1051578279,ES -1051578280,1051578287,GR -1051578288,1051578295,GB -1051578296,1051578303,PL +1051578176,1051578247,GB +1051578248,1051578255,FR +1051578256,1051578303,GB 1051578304,1051578335,NL -1051578336,1051578343,DE -1051578344,1051578351,NL -1051578352,1051578363,GB -1051578364,1051578367,DE -1051578368,1051580415,SZ -1051580416,1051584767,GB -1051584768,1051585535,MG -1051585536,1051585599,GB -1051585600,1051585663,MG -1051585664,1051590655,GB +1051578336,1051580535,GB +1051580536,1051580543,SZ +1051580544,1051584207,GB +1051584208,1051584223,BE +1051584224,1051590655,GB 1051590656,1051702527,ES 1051702528,1051702783,US 1051702784,1051721727,ES @@ -8330,13 +13470,15 @@ 1051852800,1051918335,AT 1051918336,1051919359,PL 1051919360,1051920383,AT -1051920384,1051922431,PL -1051922432,1051949823,AT +1051920384,1051920895,PL +1051920896,1051949823,AT 1051949824,1051949951,NL 1051949952,1051983871,AT 1051983872,1051986687,EU 1051986688,1051986943,DE -1051986944,1051991807,EU +1051986944,1051990015,EU +1051990016,1051991039,DE +1051991040,1051991807,EU 1051991808,1051991935,DE 1051991936,1051992063,EU 1051992064,1051994639,DE @@ -8417,7 +13559,9 @@ 1052004000,1052004671,EU 1052004672,1052004687,DE 1052004688,1052004703,EU -1052004704,1052004759,DE +1052004704,1052004735,DE +1052004736,1052004751,EU +1052004752,1052004759,DE 1052004760,1052004767,EU 1052004768,1052004783,DE 1052004784,1052004815,EU @@ -8432,9 +13576,7 @@ 1052005888,1052005911,DE 1052005912,1052006543,EU 1052006544,1052006559,DE -1052006560,1052006575,EU -1052006576,1052006607,DE -1052006608,1052007039,EU +1052006560,1052007039,EU 1052007040,1052007103,DE 1052007104,1052007431,EU 1052007432,1052007435,DE @@ -8460,13 +13602,9 @@ 1052009472,1052009487,DE 1052009488,1052009503,EU 1052009504,1052009535,DE -1052009536,1052009599,EU -1052009600,1052009607,DE -1052009608,1052010463,EU +1052009536,1052010463,EU 1052010464,1052010519,DE -1052010520,1052010527,EU -1052010528,1052010559,DE -1052010560,1052010623,EU +1052010520,1052010623,EU 1052010624,1052010655,DE 1052010656,1052010751,EU 1052010752,1052011135,DE @@ -8474,8 +13612,8 @@ 1052011264,1052012287,DE 1052012288,1052012303,EU 1052012304,1052012335,DE -1052012336,1052012375,EU -1052012376,1052012399,DE +1052012336,1052012383,EU +1052012384,1052012399,DE 1052012400,1052012543,EU 1052012544,1052013055,DE 1052013056,1052013071,EU @@ -8499,10 +13637,10 @@ 1052013964,1052014015,EU 1052014016,1052014079,DE 1052014080,1052014111,EU -1052014112,1052014303,DE -1052014304,1052014591,EU -1052014592,1052014623,DE -1052014624,1052015367,EU +1052014112,1052014239,DE +1052014240,1052014271,EU +1052014272,1052014303,DE +1052014304,1052015367,EU 1052015368,1052015375,DE 1052015376,1052015423,EU 1052015424,1052015519,DE @@ -8553,7 +13691,9 @@ 1052020736,1052022527,EU 1052022528,1052022783,DE 1052022784,1052024831,EU -1052024832,1052041279,DE +1052024832,1052041247,DE +1052041248,1052041255,EU +1052041256,1052041279,DE 1052041280,1052041295,EU 1052041296,1052041327,DE 1052041328,1052041335,EU @@ -8563,9 +13703,7 @@ 1052041600,1052041727,EU 1052041728,1052041863,DE 1052041864,1052041983,EU -1052041984,1052042047,DE -1052042048,1052042087,NL -1052042088,1052042095,DE +1052041984,1052042095,DE 1052042096,1052042143,EU 1052042144,1052042183,DE 1052042184,1052042223,EU @@ -8626,15 +13764,21 @@ 1052065792,1052082175,SE 1052082176,1052090367,DE 1052090368,1052098559,PL -1052098560,1052116991,SE +1052098560,1052099471,SE +1052099472,1052099479,NO +1052099480,1052104095,SE +1052104096,1052104127,DK +1052104128,1052116991,SE 1052116992,1052119039,RU 1052119040,1052121087,RO 1052121088,1052129279,RU 1052129280,1052131327,BE +1052131328,1052133375,UA 1052133376,1052135423,RU 1052135424,1052137471,UA 1052137472,1052139519,RU 1052139520,1052141567,DE +1052141568,1052143615,PL 1052143616,1052145663,BG 1052145664,1052147711,UA 1052147712,1052151807,RU @@ -9165,7 +14309,8 @@ 1052403456,1052403727,FR 1052403728,1052403743,NL 1052403744,1052403775,FR -1052403776,1052403839,ZA +1052403776,1052403807,ZA +1052403808,1052403839,EU 1052403840,1052403967,CH 1052403968,1052404383,FR 1052404384,1052404399,ZA @@ -9262,7 +14407,8 @@ 1052426328,1052426495,PT 1052426496,1052426511,EU 1052426512,1052426527,FR -1052426528,1052427263,EU +1052426528,1052426751,EU +1052426752,1052427263,NL 1052427264,1052427839,CH 1052427840,1052427855,GB 1052427856,1052427871,IT @@ -9454,7 +14600,9 @@ 1052507584,1052507647,EU 1052507648,1052507775,GB 1052507776,1052507903,EU -1052507904,1052596447,GB +1052507904,1052581087,GB +1052581088,1052581103,GE +1052581104,1052596447,GB 1052596448,1052596463,IT 1052596464,1052621951,GB 1052621952,1052622015,IE @@ -9493,13 +14641,17 @@ 1052876800,1052884991,NG 1052884992,1052901375,FR 1052901376,1053032447,NL -1053032448,1053097983,IT +1053032448,1053047367,IT +1053047368,1053047375,TR +1053047376,1053097983,IT 1053097984,1053106175,DE 1053106176,1053114367,GB 1053114368,1053130751,BE 1053130752,1053138943,NL 1053138944,1053147135,FI -1053147136,1053163519,SK +1053147136,1053155071,SK +1053155072,1053155599,SR +1053155600,1053163519,SK 1053163520,1053294591,DK 1053294592,1053294847,EU 1053294848,1053295103,AT @@ -9511,31 +14663,31 @@ 1053295616,1053296639,AT 1053296640,1053296927,IT 1053296928,1053296991,EU -1053296992,1053297023,IT -1053297024,1053297039,EU +1053296992,1053297027,IT +1053297028,1053297039,EU 1053297040,1053297055,IT 1053297056,1053297071,EU -1053297072,1053297087,IT -1053297088,1053297111,EU -1053297112,1053297135,IT -1053297136,1053297143,EU -1053297144,1053297151,IT -1053297152,1053298175,EU +1053297072,1053297135,IT +1053297136,1053298175,EU 1053298176,1053299199,CH 1053299200,1053299711,EU -1053299712,1053300159,GB +1053299712,1053300031,GB +1053300032,1053300095,EU +1053300096,1053300103,GB +1053300104,1053300111,EU +1053300112,1053300159,GB 1053300160,1053300223,EU 1053300224,1053300735,GB 1053300736,1053300991,CH 1053300992,1053301023,FR 1053301024,1053301039,EU -1053301040,1053301063,FR -1053301064,1053301071,EU +1053301040,1053301055,FR +1053301056,1053301071,EU 1053301072,1053301135,FR 1053301136,1053301167,EU -1053301168,1053301183,FR -1053301184,1053301199,EU -1053301200,1053301295,FR +1053301168,1053301279,FR +1053301280,1053301287,EU +1053301288,1053301295,FR 1053301296,1053301303,EU 1053301304,1053301359,FR 1053301360,1053301367,EU @@ -9562,15 +14714,15 @@ 1053305952,1053306111,EU 1053306112,1053306879,GR 1053306880,1053307903,EU -1053307904,1053307951,GB -1053307952,1053307959,EU -1053307960,1053308095,GB -1053308096,1053308159,EU -1053308160,1053308543,GB +1053307904,1053307943,GB +1053307944,1053307959,EU +1053307960,1053308543,GB 1053308544,1053308671,EU -1053308672,1053308767,GB -1053308768,1053308799,EU -1053308800,1053308863,GB +1053308672,1053308703,GB +1053308704,1053308767,EU +1053308768,1053308831,GB +1053308832,1053308839,EU +1053308840,1053308863,GB 1053308864,1053308927,EU 1053308928,1053308991,ZA 1053308992,1053309183,EU @@ -9588,19 +14740,17 @@ 1053312912,1053312927,EU 1053312928,1053312959,DK 1053312960,1053313023,EU -1053313024,1053313343,GB -1053313344,1053313439,EU -1053313440,1053313599,GB -1053313600,1053313663,EU -1053313664,1053313671,GB -1053313672,1053313679,EU -1053313680,1053313791,GB +1053313024,1053313471,GB +1053313472,1053313479,EU +1053313480,1053313791,GB 1053313792,1053313919,EU 1053313920,1053314047,GB 1053314048,1053314063,EU 1053314064,1053314079,CZ 1053314080,1053315071,EU -1053315072,1053317119,GB +1053315072,1053316719,GB +1053316720,1053316727,EU +1053316728,1053317119,GB 1053317120,1053317295,ZA 1053317296,1053317375,EU 1053317376,1053317631,GB @@ -9608,32 +14758,34 @@ 1053318144,1053318655,GB 1053318656,1053318911,FI 1053318912,1053318927,EU -1053318928,1053318951,FI -1053318952,1053318959,EE -1053318960,1053318975,EU +1053318928,1053318935,FI +1053318936,1053318943,EU +1053318944,1053318951,FI +1053318952,1053318975,EU 1053318976,1053319007,FI 1053319008,1053319167,EU 1053319168,1053320191,DE 1053320192,1053320223,EU 1053320224,1053320319,DE -1053320320,1053326335,EU +1053320320,1053320447,EU +1053320448,1053320703,DE +1053320704,1053326335,EU 1053326336,1053326399,BE 1053326400,1053326431,EU 1053326432,1053326447,GB -1053326448,1053326463,BE +1053326448,1053326455,EU +1053326456,1053326463,BE 1053326464,1053326527,EU 1053326528,1053326543,BE 1053326544,1053326559,EU -1053326560,1053326567,BE -1053326568,1053326575,EU -1053326576,1053326847,BE +1053326560,1053326847,BE 1053326848,1053327103,FI 1053327104,1053327359,DK 1053327360,1053327871,EU 1053327872,1053328383,ZA 1053328384,1053328639,EU -1053328640,1053328799,ZA -1053328800,1053328895,EU +1053328640,1053328863,ZA +1053328864,1053328895,EU 1053328896,1053329087,ZA 1053329088,1053329119,EU 1053329120,1053329135,ZA @@ -9642,8 +14794,8 @@ 1053329152,1053329183,EU 1053329184,1053329279,ZA 1053329280,1053329407,EU -1053329408,1053329439,ES -1053329440,1053329503,EU +1053329408,1053329471,ES +1053329472,1053329503,EU 1053329504,1053329527,ES 1053329528,1053329631,EU 1053329632,1053329663,ES @@ -9659,11 +14811,11 @@ 1053331712,1053331887,NL 1053331888,1053331903,EU 1053331904,1053331927,NL -1053331928,1053332223,EU -1053332224,1053332271,NL +1053331928,1053331967,EU +1053331968,1053332271,NL 1053332272,1053332319,EU -1053332320,1053332415,NL -1053332416,1053332447,EU +1053332320,1053332351,NL +1053332352,1053332447,EU 1053332448,1053332479,NL 1053332480,1053332991,EU 1053332992,1053334015,BE @@ -9680,8 +14832,8 @@ 1053337088,1053337119,ZA 1053337120,1053337127,EU 1053337128,1053337183,ZA -1053337184,1053337599,EU -1053337600,1053337631,CH +1053337184,1053337607,EU +1053337608,1053337631,CH 1053337632,1053337855,EU 1053337856,1053338111,ZA 1053338112,1053338623,FI @@ -9708,13 +14860,13 @@ 1053341576,1053341695,GB 1053341696,1053343743,EU 1053343744,1053344255,FI -1053344256,1053344511,EU -1053344512,1053344767,BG -1053344768,1053345279,EU +1053344256,1053345279,EU 1053345280,1053345375,PK 1053345376,1053345407,EU 1053345408,1053345471,PK -1053345472,1053348639,EU +1053345472,1053347839,EU +1053347840,1053348351,NL +1053348352,1053348639,EU 1053348640,1053348655,PT 1053348656,1053349119,EU 1053349120,1053349631,NL @@ -9724,23 +14876,21 @@ 1053350144,1053350335,IE 1053350336,1053350351,EU 1053350352,1053350359,IE -1053350360,1053350367,EU -1053350368,1053350391,IE +1053350360,1053350375,EU +1053350376,1053350391,IE 1053350392,1053350399,EU -1053350400,1053350479,BE -1053350480,1053350655,EU +1053350400,1053350487,BE +1053350488,1053350655,EU 1053350656,1053350911,BE 1053350912,1053351935,EU 1053351936,1053352191,IL -1053352192,1053353023,EU -1053353024,1053353031,IE -1053353032,1053353103,EU +1053352192,1053353103,EU 1053353104,1053353119,IE 1053353120,1053353135,EU 1053353136,1053353215,IE 1053353216,1053353223,GB -1053353224,1053353255,IE -1053353256,1053353263,EU +1053353224,1053353247,IE +1053353248,1053353263,EU 1053353264,1053353279,IE 1053353280,1053353983,EU 1053353984,1053354239,IL @@ -9752,7 +14902,9 @@ 1053354752,1053354831,IL 1053354832,1053354855,EU 1053354856,1053354863,IL -1053354864,1053354911,EU +1053354864,1053354871,EU +1053354872,1053354879,IL +1053354880,1053354911,EU 1053354912,1053355007,IL 1053355008,1053360127,EU 1053360128,1053364223,ES @@ -9780,7 +14932,7 @@ 1053687808,1053702635,DE 1053702636,1053702639,GB 1053702640,1053753343,DE -1053753344,1053818879,RU +1053753344,1053818879,NL 1053818880,1053819391,DE 1053819392,1053819423,EU 1053819424,1053819439,DE @@ -9799,7 +14951,9 @@ 1053824024,1053824127,EU 1053824128,1053824255,NL 1053824256,1053825023,EU -1053825024,1053826047,ES +1053825024,1053825791,ES +1053825792,1053825919,GB +1053825920,1053826047,ES 1053826048,1053826815,EU 1053826816,1053827327,DE 1053827328,1053827583,BE @@ -9845,9 +14999,7 @@ 1053851904,1053851919,FR 1053851920,1053852031,EU 1053852032,1053852047,IT -1053852048,1053852095,EU -1053852096,1053852103,DE -1053852104,1053852111,EU +1053852048,1053852111,EU 1053852112,1053852127,GB 1053852128,1053852159,DE 1053852160,1053855743,EU @@ -9936,7 +15088,9 @@ 1053896704,1053900799,DE 1053900800,1053917183,NO 1053917184,1053925375,UZ -1053925376,1053933567,SE +1053925376,1053927159,SE +1053927160,1053927167,FI +1053927168,1053933567,SE 1053933568,1053949951,CZ 1053949952,1053984415,FR 1053984416,1053984447,US @@ -9952,7 +15106,17 @@ 1054130176,1054138367,LT 1054138368,1054146559,AZ 1054146560,1054179327,RU -1054179328,1054187519,GB +1054179328,1054180351,GB +1054180352,1054181120,DE +1054181121,1054181375,GB +1054181376,1054183168,DE +1054183169,1054183423,GB +1054183424,1054185216,DE +1054185217,1054185471,GB +1054185472,1054186240,DE +1054186241,1054186495,GB +1054186496,1054187264,DE +1054187265,1054187519,GB 1054187520,1054195711,BG 1054195712,1054212095,BE 1054212096,1054212519,DE @@ -10046,15 +15210,13 @@ 1054943232,1054943487,PL 1054943488,1054949807,DE 1054949808,1054949815,ES -1054949816,1054963255,DE -1054963256,1054963263,ES -1054963264,1054969031,DE +1054949816,1054969031,DE 1054969032,1054969039,AT 1054969040,1054978815,DE 1054978816,1054979071,FR 1054979072,1055129599,DE -1055129600,1055186943,CY -1055186944,1055194623,GR +1055129600,1055187027,CY +1055187028,1055194623,GR 1055194624,1055195135,CY 1055195136,1055196159,EU 1055196160,1055197823,CH @@ -10177,8 +15339,7 @@ 1055253056,1055253087,ES 1055253088,1055256447,EU 1055256448,1055256463,ES -1055256464,1055260671,EU -1055260672,1055326207,SE +1055256464,1055326207,EU 1055326208,1055334399,RU 1055334400,1055342591,IE 1055342592,1055358975,RO @@ -10187,28 +15348,12 @@ 1055375360,1055391743,OM 1055391744,1055457279,GB 1055457280,1055465471,BE -1055465472,1055467575,FR -1055467576,1055467579,ES -1055467580,1055469055,FR -1055469056,1055469059,CH -1055469060,1055469063,DE -1055469064,1055469067,IT -1055469068,1055469071,BE -1055469072,1055471615,FR -1055471616,1055472127,BE -1055472128,1055472159,NL -1055472160,1055472383,FR -1055472384,1055472639,NL -1055472640,1055473663,FR +1055465472,1055473663,FR 1055473664,1055490047,GB 1055490048,1055522815,PL 1055522816,1055588351,NL 1055588352,1055653887,BE -1055653888,1055681055,FI -1055681056,1055681071,SE -1055681072,1055709919,FI -1055709920,1055709935,AX -1055709936,1055784959,FI +1055653888,1055784959,FI 1055784960,1055850495,NL 1055850496,1055916031,GB 1055916032,1055924223,RS @@ -10242,7 +15387,11 @@ 1056244480,1056251903,CH 1056251904,1056260095,RU 1056260096,1056276479,CZ -1056276480,1056374783,DE +1056276480,1056286511,DE +1056286512,1056286519,A2 +1056286520,1056286591,DE +1056286592,1056286655,A2 +1056286656,1056374783,DE 1056374784,1056440319,SE 1056440320,1056473087,TR 1056473088,1056505087,FI @@ -10252,9 +15401,12 @@ 1056505120,1056505343,FI 1056505344,1056505599,SE 1056505600,1056505855,FI -1056505856,1056514047,PT +1056505856,1056507015,PT +1056507016,1056507023,ES +1056507024,1056514047,PT 1056514048,1056522239,IT 1056522240,1056538623,AT +1056538624,1056546815,RU 1056546816,1056555007,NO 1056555008,1056571391,GB 1056571392,1056669695,NL @@ -10453,17 +15605,26 @@ 1064445184,1064445439,PK 1064445440,1064650751,US 1064650752,1064651775,EC -1064651776,1064973055,US +1064651776,1064769023,US +1064769024,1064769535,A2 +1064769536,1064973055,US 1064973056,1064973183,AU 1064973184,1065049471,US 1065049472,1065049535,CA -1065049536,1065517087,US +1065049536,1065389439,US +1065389440,1065389455,MY +1065389456,1065390591,US +1065390592,1065390599,MY +1065390600,1065390655,US +1065390656,1065390687,MX +1065390688,1065517087,US 1065517088,1065517119,A2 1065517120,1065519359,US 1065519360,1065519487,CA 1065519488,1065520895,US 1065520896,1065520911,CA -1065520912,1065583423,US +1065520912,1065520927,IT +1065520928,1065583423,US 1065583424,1065583439,HK 1065583440,1065611263,US 1065611264,1065615359,PR @@ -10475,50 +15636,23 @@ 1065906176,1065908223,KY 1065908224,1065926815,US 1065926816,1065926831,CA -1065926832,1066303487,US -1066336256,1066344447,US -1066352640,1066369023,JM -1066401792,1066404607,US -1066404608,1066404863,A2 -1066404864,1066475263,US -1066475264,1066475519,CA -1066475520,1066584063,US +1065926832,1066311679,US +1066311680,1066315775,CA +1066315776,1066332159,US +1066332160,1066336255,CA +1066336256,1066352639,US +1066352640,1066355711,JM +1066355712,1066355967,BB +1066355968,1066369023,JM +1066369024,1066584063,US 1066584064,1066586111,PE 1066586112,1066604927,US 1066604928,1066604959,CA -1066604960,1066627335,US -1066627336,1066627343,CA -1066627344,1066718559,US -1066718560,1066718591,PR -1066718592,1066736447,US -1066736448,1066736479,NO -1066736480,1066828095,US -1066828096,1066828127,HK -1066828128,1066828151,US -1066828152,1066828159,CN -1066828160,1066828255,US -1066828256,1066828287,HK -1066828288,1066829311,US -1066829312,1066829567,HK -1066829568,1066830079,US -1066830080,1066830111,SI -1066830112,1066830207,US -1066830208,1066830239,SG -1066830240,1066830271,US -1066830272,1066830591,SG -1066830592,1066830799,US -1066830800,1066830807,SG -1066830808,1066830815,US -1066830816,1066830847,SG -1066830848,1066831039,US -1066831040,1066831071,JP -1066831072,1066832527,US -1066832528,1066832543,CA -1066832544,1066834607,US -1066834608,1066834623,IS -1066834624,1066898783,US -1066898784,1066898815,CO -1066898816,1067473471,US +1066604960,1066606295,US +1066606296,1066606303,GB +1066606304,1066831071,US +1066831072,1066831087,JP +1066831088,1067473471,US 1067473472,1067473535,CA 1067473536,1067474751,US 1067474752,1067474767,NL @@ -10683,7 +15817,9 @@ 1071309696,1071309727,HK 1071309728,1071318783,US 1071318784,1071319039,IN -1071319040,1071362079,US +1071319040,1071321487,US +1071321488,1071321503,HK +1071321504,1071362079,US 1071362080,1071362111,HK 1071362112,1071362207,US 1071362208,1071362239,HK @@ -10691,7 +15827,17 @@ 1071472640,1071476735,CA 1071476736,1071477247,US 1071477248,1071480831,CA -1071480832,1071985631,US +1071480832,1071488447,US +1071488448,1071488479,HK +1071488480,1071599105,US +1071599106,1071599134,PH +1071599135,1071599300,US +1071599301,1071599313,PH +1071599314,1071599392,US +1071599393,1071599415,PH +1071599416,1071599477,US +1071599478,1071599490,PH +1071599491,1071985631,US 1071985632,1071985663,ML 1071985664,1072512951,US 1072512952,1072512959,CA @@ -10774,7 +15920,8 @@ 1072931584,1072931839,SY 1072931840,1072932607,CA 1072932608,1072932863,NG -1072932864,1072934399,CA +1072932864,1072933887,US +1072933888,1072934399,CA 1072934400,1072934655,US 1072934656,1072934783,CA 1072934784,1072934847,AU @@ -10804,15 +15951,13 @@ 1073022976,1073025791,HN 1073025792,1073026047,NI 1073026048,1073026303,US -1073026304,1073026431,DO -1073026432,1073027071,US +1073026304,1073026559,DO +1073026560,1073027071,PR 1073027072,1073028351,NI 1073028352,1073028607,US 1073028608,1073029119,GD 1073029120,1073031167,PR -1073031168,1073031231,US -1073031232,1073031263,AN -1073031264,1073031423,US +1073031168,1073031423,US 1073031424,1073031935,AN 1073031936,1073033215,US 1073033216,1073035263,AN @@ -10825,15 +15970,17 @@ 1073038336,1073039359,US 1073039360,1073041407,GT 1073041408,1073043455,CO -1073043456,1073045503,US +1073043456,1073043967,PR +1073043968,1073044735,US +1073044736,1073044991,PR +1073044992,1073045247,US +1073045248,1073045503,PR 1073045504,1073047551,CO 1073047552,1073049599,PR -1073049600,1073053695,BS -1073053696,1073091397,US +1073049600,1073052671,BS +1073052672,1073091397,US 1073091398,1073091407,CH -1073091408,1073092335,US -1073092336,1073092351,CA -1073092352,1073093646,US +1073091408,1073093646,US 1073093647,1073093654,PE 1073093655,1073094557,US 1073094558,1073094570,IT @@ -10987,7 +16134,9 @@ 1074229248,1074241535,CA 1074241536,1074249791,US 1074249792,1074249807,BB -1074249808,1074397439,US +1074249808,1074375935,US +1074375936,1074376191,A1 +1074376192,1074397439,US 1074397440,1074399039,CA 1074399040,1074399231,US 1074399232,1074408319,CA @@ -11009,9 +16158,7 @@ 1074675312,1074675327,NO 1074675328,1074675679,US 1074675680,1074675687,GB -1074675688,1074677759,US -1074677760,1074678271,BG -1074678272,1074680623,US +1074675688,1074680623,US 1074680624,1074680639,CA 1074680640,1074680703,US 1074680704,1074680719,IL @@ -11089,18 +16236,20 @@ 1074962432,1074970623,CA 1074970624,1075117287,US 1075117288,1075117311,IN -1075117312,1075421183,US +1075117312,1075265535,US +1075265536,1075269631,KR +1075269632,1075421183,US 1075421184,1075429375,CA 1075429376,1075478527,US 1075478528,1075479103,CA 1075479104,1075479111,GB 1075479112,1075479135,CA 1075479136,1075479151,US -1075479152,1075479567,CA -1075479568,1075479583,US -1075479584,1075479607,CA +1075479152,1075479607,CA 1075479608,1075479615,US -1075479616,1075484263,CA +1075479616,1075480415,CA +1075480416,1075480423,US +1075480424,1075484263,CA 1075484264,1075484271,US 1075484272,1075494911,CA 1075494912,1075513151,US @@ -11209,7 +16358,8 @@ 1075597168,1075597183,CA 1075597184,1075597375,US 1075597376,1075597407,CA -1075597408,1075597439,IL +1075597408,1075597423,US +1075597424,1075597439,IL 1075597440,1075597551,US 1075597552,1075597599,CA 1075597600,1075598367,US @@ -11236,9 +16386,13 @@ 1075972352,1075973887,US 1075973888,1075974143,CA 1075974144,1075975167,US -1075975168,1075975999,CA -1075976000,1075976191,US -1075976192,1075976511,CA +1075975168,1075975679,CA +1075975680,1075975815,US +1075975816,1075976175,CA +1075976176,1075976191,US +1075976192,1075976447,CA +1075976448,1075976479,US +1075976480,1075976511,CA 1075976512,1075976543,US 1075976544,1075976647,CA 1075976648,1075976655,US @@ -11264,9 +16418,9 @@ 1075982592,1075982599,US 1075982600,1075982607,NZ 1075982608,1075982655,CA -1075982656,1075982671,US -1075982672,1075982687,CA -1075982688,1075982703,US +1075982656,1075982671,MX +1075982672,1075982695,CA +1075982696,1075982703,US 1075982704,1075982751,CA 1075982752,1075982783,MX 1075982784,1075982815,US @@ -11279,46 +16433,38 @@ 1075983232,1075984383,CA 1075984384,1075984823,US 1075984824,1075984831,CA -1075984832,1075985415,US -1075985416,1075985423,CR -1075985424,1075985919,US -1075985920,1075986431,CA -1075986432,1075986687,US -1075986688,1075986943,CA -1075986944,1075987199,US -1075987200,1075987455,CA -1075987456,1075987711,US -1075987712,1075987951,CA -1075987952,1075988223,US -1075988224,1075988287,CA -1075988288,1075988319,US -1075988320,1075988479,CA -1075988480,1075988735,US -1075988736,1075988991,CA -1075988992,1075989119,US -1075989120,1075989231,CA -1075989232,1075989247,US +1075984832,1075985919,US +1075985920,1075989055,CA +1075989056,1075989119,US +1075989120,1075989247,CA 1075989248,1075989311,FI -1075989312,1075989359,CA +1075989312,1075989327,CA +1075989328,1075989335,US +1075989336,1075989359,CA 1075989360,1075989375,US 1075989376,1075989455,CA 1075989456,1075989471,US 1075989472,1075989791,CA 1075989792,1075989823,US 1075989824,1075990527,CA -1075990528,1075991551,US +1075990528,1075990727,US +1075990728,1075990735,CA +1075990736,1075991551,US 1075991552,1075991583,CA 1075991584,1075991671,US 1075991672,1075991679,CA 1075991680,1075992319,US 1075992320,1075992447,GB -1075992448,1075993087,US -1075993088,1075993103,CA -1075993104,1075995007,US +1075992448,1075994607,US +1075994608,1075994623,BE +1075994624,1075995007,CA 1075995008,1075995023,VG -1075995024,1075995047,US -1075995048,1075995055,CA -1075995056,1075995103,US +1075995024,1075995039,US +1075995040,1075995055,CA +1075995056,1075995071,US +1075995072,1075995079,MX +1075995080,1075995087,CA +1075995088,1075995103,US 1075995104,1075995263,CA 1075995264,1075995295,US 1075995296,1075995326,CA @@ -11329,9 +16475,7 @@ 1075995504,1075995519,MX 1075995520,1075995567,CA 1075995568,1075995583,CN -1075995584,1075995647,CA -1075995648,1075995903,US -1075995904,1075996671,CA +1075995584,1075996671,CA 1075996672,1075996751,US 1075996752,1075996767,CA 1075996768,1075996799,BV @@ -11373,8 +16517,8 @@ 1076004472,1076004479,CA 1076004480,1076004495,US 1076004496,1076004511,CA -1076004512,1076004559,US -1076004560,1076004591,CA +1076004512,1076004543,US +1076004544,1076004591,CA 1076004592,1076004607,US 1076004608,1076004639,CA 1076004640,1076004703,US @@ -11390,11 +16534,9 @@ 1076005248,1076005263,US 1076005264,1076005279,CA 1076005280,1076005311,US -1076005312,1076005319,CA -1076005320,1076005375,US -1076005376,1076005727,CA -1076005728,1076005759,US -1076005760,1076005887,CA +1076005312,1076005343,CA +1076005344,1076005375,US +1076005376,1076005887,CA 1076005888,1076006015,US 1076006016,1076006047,CA 1076006048,1076006079,US @@ -11410,11 +16552,9 @@ 1076007168,1076007183,US 1076007184,1076007247,CA 1076007248,1076007263,US -1076007264,1076007679,CA -1076007680,1076007935,US -1076007936,1076007967,CA -1076007968,1076007983,US -1076007984,1076008063,CA +1076007264,1076007947,CA +1076007948,1076007951,US +1076007952,1076008063,CA 1076008064,1076008191,US 1076008192,1076009631,CA 1076009632,1076009639,US @@ -11424,10 +16564,14 @@ 1076009696,1076009711,US 1076009712,1076009887,CA 1076009888,1076009919,US -1076009920,1076010687,CA -1076010688,1076010695,US -1076010696,1076011007,CA -1076011008,1076024307,US +1076009920,1076011007,CA +1076011008,1076012236,US +1076012237,1076012237,IN +1076012238,1076013094,US +1076013095,1076013095,IN +1076013096,1076018303,US +1076018304,1076018367,BR +1076018368,1076024307,US 1076024308,1076024315,CA 1076024316,1076026023,US 1076026024,1076026031,CA @@ -11438,8 +16582,8 @@ 1076026608,1076026623,SG 1076026624,1076026975,CA 1076026976,1076027031,US -1076027032,1076027263,CA -1076027264,1076027295,US +1076027032,1076027199,CA +1076027200,1076027295,US 1076027296,1076027407,CA 1076027408,1076027423,US 1076027424,1076027711,CA @@ -11448,9 +16592,7 @@ 1076027776,1076027791,US 1076027792,1076027911,CA 1076027912,1076027919,US -1076027920,1076027927,CA -1076027928,1076027935,US -1076027936,1076028143,CA +1076027920,1076028143,CA 1076028144,1076028151,US 1076028152,1076028479,CA 1076028480,1076028543,GB @@ -11462,7 +16604,11 @@ 1076029224,1076029231,DM 1076029232,1076029239,CA 1076029240,1076029247,US -1076029248,1076029415,CA +1076029248,1076029255,CA +1076029256,1076029263,US +1076029264,1076029311,CA +1076029312,1076029319,GB +1076029320,1076029415,CA 1076029416,1076029422,US 1076029423,1076029430,CA 1076029431,1076029439,US @@ -11499,7 +16645,9 @@ 1076035296,1076035327,EG 1076035328,1076035415,US 1076035416,1076035423,EG -1076035424,1076036247,US +1076035424,1076035519,US +1076035520,1076035583,IN +1076035584,1076036247,US 1076036248,1076036255,IL 1076036256,1076036351,US 1076036352,1076036605,ES @@ -11543,7 +16691,17 @@ 1076049920,1076050175,IL 1076050176,1076174847,US 1076174848,1076178943,BM -1076178944,1076183039,US +1076178944,1076179161,US +1076179162,1076179163,IN +1076179164,1076179196,US +1076179197,1076179198,IN +1076179199,1076180201,US +1076180202,1076180222,PK +1076180223,1076180795,US +1076180796,1076180799,IN +1076180800,1076181236,US +1076181237,1076181237,CA +1076181238,1076183039,US 1076183040,1076183071,IN 1076183072,1076183231,US 1076183232,1076183295,CA @@ -11559,22 +16717,16 @@ 1076184256,1076184287,BE 1076184288,1076184319,CA 1076184320,1076184575,US -1076184576,1076184639,CA -1076184640,1076184703,SG -1076184704,1076184831,CA +1076184576,1076184831,CA 1076184832,1076184895,US 1076184896,1076184927,FR -1076184928,1076184959,US -1076184960,1076184991,VE -1076184992,1076185215,US +1076184928,1076185215,US 1076185216,1076185343,CA 1076185344,1076185439,US 1076185440,1076185471,IT 1076185472,1076185503,US 1076185504,1076185535,DO -1076185536,1076185599,US -1076185600,1076185855,MY -1076185856,1076185919,US +1076185536,1076185919,US 1076185920,1076185951,CA 1076185952,1076185983,US 1076185984,1076186015,PK @@ -11616,9 +16768,7 @@ 1076190144,1076190175,BE 1076190176,1076190207,IN 1076190208,1076190463,CA -1076190464,1076190655,US -1076190656,1076190719,CA -1076190720,1076190783,US +1076190464,1076190783,US 1076190784,1076190815,CA 1076190816,1076190847,IN 1076190848,1076190913,US @@ -11630,8 +16780,7 @@ 1076192128,1076192191,CA 1076192192,1076192255,US 1076192256,1076192383,BE -1076192384,1076192639,US -1076192640,1076192767,CA +1076192384,1076192767,US 1076192768,1076192895,IN 1076192896,1076193055,US 1076193056,1076193087,AU @@ -11662,8 +16811,7 @@ 1076196416,1076196479,US 1076196480,1076196511,FR 1076196512,1076196575,AT -1076196576,1076196607,CA -1076196608,1076196641,US +1076196576,1076196641,US 1076196642,1076196671,BE 1076196672,1076196703,US 1076196704,1076196735,FR @@ -12402,9 +17550,7 @@ 1077452800,1077460991,JP 1077460992,1077469183,US 1077469184,1077477375,CA -1077477376,1077489855,US -1077489856,1077489919,GB -1077489920,1077506047,US +1077477376,1077506047,US 1077506048,1077510143,LS 1077510144,1077561327,US 1077561328,1077561343,AR @@ -12416,24 +17562,19 @@ 1077626240,1077626271,WS 1077626272,1077627167,US 1077627168,1077627199,EC -1077627200,1077628959,US -1077628960,1077628991,ES -1077628992,1077629071,US +1077627200,1077629071,US 1077629072,1077629087,CR -1077629088,1077629119,US -1077629120,1077629151,NL +1077629088,1077629151,US 1077629152,1077629183,CA 1077629184,1077629535,US 1077629536,1077629567,CA 1077629568,1077629903,US 1077629904,1077629919,AN -1077629920,1077630015,US -1077630016,1077630047,CA -1077630048,1077632159,US +1077629920,1077631167,US +1077631168,1077631231,NL +1077631232,1077632159,US 1077632160,1077632191,GB -1077632192,1077632447,US -1077632448,1077632479,NL -1077632480,1077633823,US +1077632192,1077633823,US 1077633824,1077633855,AN 1077633856,1077640799,US 1077640800,1077640831,EC @@ -12463,9 +17604,7 @@ 1077851472,1077851487,HK 1077851488,1077852671,US 1077852672,1077852927,CA -1077852928,1077853183,US -1077853184,1077853439,IT -1077853440,1077856015,US +1077852928,1077856015,US 1077856016,1077856031,IT 1077856032,1077856127,US 1077856128,1077856191,AU @@ -12484,10 +17623,8 @@ 1077859952,1077859967,US 1077859968,1077860095,IT 1077860096,1077861119,US -1077861120,1077861631,IT -1077861632,1077862911,US -1077862912,1077863167,IT -1077863168,1077863207,US +1077861120,1077861375,IT +1077861376,1077863207,US 1077863208,1077863215,NG 1077863216,1077864703,US 1077864704,1077864719,IT @@ -12592,7 +17729,9 @@ 1077936598,1077936601,CA 1077936602,1077936605,TH 1077936606,1077936609,JO -1077936610,1077936621,US +1077936610,1077936613,US +1077936614,1077936617,UY +1077936618,1077936621,US 1077936622,1077936622,AU 1077936623,1077936630,US 1077936631,1077936634,PE @@ -12602,40 +17741,308 @@ 1077936650,1077936653,CA 1077936654,1077936667,US 1077936668,1077936671,CA -1077936672,1077936679,US -1077936680,1077936683,TH -1077936684,1077936684,RO +1077936672,1077936683,US +1077936684,1077936684,HU 1077936685,1077936691,US 1077936692,1077936695,IT -1077936696,1077936699,US +1077936696,1077936699,OM 1077936700,1077936703,TH -1077936704,1077936742,US +1077936704,1077936707,RS +1077936708,1077936742,US 1077936743,1077936743,BE -1077936744,1077936747,IN -1077936748,1077936759,US -1077936760,1077936763,AU -1077936764,1077936767,US -1077936768,1077936777,AU -1077936778,1077936789,US +1077936744,1077936759,US +1077936760,1077936763,GB +1077936764,1077936767,UA +1077936768,1077936771,US +1077936772,1077936775,IT +1077936776,1077936789,US 1077936790,1077936793,NG 1077936794,1077936797,AU 1077936798,1077936801,SI -1077936802,1077936805,AU -1077936806,1077936814,US -1077936815,1077936818,BR +1077936802,1077936805,IT +1077936806,1077936818,US 1077936819,1077936822,RS -1077936823,1077936826,LV +1077936823,1077936826,TH 1077936827,1077936834,US -1077936835,1077936838,CL -1077936839,1077936842,TH -1077936843,1077936846,US +1077936835,1077936838,VE +1077936839,1077936846,US 1077936847,1077936850,PK 1077936851,1077936854,GB 1077936855,1077936859,IN -1077936860,1077936879,US +1077936860,1077936871,US +1077936872,1077936875,LV +1077936876,1077936879,CA 1077936880,1077936883,IT 1077936884,1077936887,CO -1077936888,1077938702,US +1077936888,1077936891,US +1077936892,1077936892,OM +1077936893,1077936913,US +1077936914,1077936917,ES +1077936918,1077936921,ID +1077936922,1077936945,US +1077936946,1077936949,GB +1077936950,1077936957,US +1077936958,1077936961,MA +1077936962,1077936965,TR +1077936966,1077936969,SE +1077936970,1077936981,US +1077936982,1077936985,AR +1077936986,1077936989,ES +1077936990,1077937005,US +1077937006,1077937007,CA +1077937008,1077937015,US +1077937016,1077937019,CA +1077937020,1077937023,GB +1077937024,1077937027,DE +1077937028,1077937047,US +1077937048,1077937051,BZ +1077937052,1077937067,US +1077937068,1077937071,GB +1077937072,1077937079,US +1077937080,1077937083,SE +1077937084,1077937087,US +1077937088,1077937088,BE +1077937089,1077937089,CA +1077937090,1077937093,IT +1077937094,1077937105,US +1077937106,1077937109,CA +1077937110,1077937129,US +1077937130,1077937133,CA +1077937134,1077937137,NG +1077937138,1077937145,US +1077937146,1077937149,CA +1077937150,1077937157,US +1077937158,1077937161,TR +1077937162,1077937165,NI +1077937166,1077937180,US +1077937181,1077937184,SA +1077937185,1077937196,US +1077937197,1077937200,LK +1077937201,1077937204,GB +1077937205,1077937208,AT +1077937209,1077937212,US +1077937213,1077937214,CA +1077937215,1077937222,US +1077937223,1077937226,CA +1077937227,1077937230,JM +1077937231,1077937235,US +1077937236,1077937239,JO +1077937240,1077937260,US +1077937261,1077937269,EE +1077937270,1077937273,LV +1077937274,1077937289,US +1077937290,1077937293,GF +1077937294,1077937297,US +1077937298,1077937301,GB +1077937302,1077937305,US +1077937306,1077937309,ES +1077937310,1077937335,US +1077937336,1077937349,GB +1077937350,1077937353,CA +1077937354,1077937357,US +1077937358,1077937361,CA +1077937362,1077937365,US +1077937366,1077937369,AR +1077937370,1077937394,CA +1077937395,1077937398,CN +1077937399,1077937402,MX +1077937403,1077937417,US +1077937418,1077937421,IN +1077937422,1077937429,US +1077937430,1077937433,TH +1077937434,1077937437,GB +1077937438,1077937441,CA +1077937442,1077937445,US +1077937446,1077937447,ES +1077937448,1077937449,US +1077937450,1077937453,GR +1077937454,1077937457,SA +1077937458,1077937461,GB +1077937462,1077937474,US +1077937475,1077937478,DK +1077937479,1077937482,MX +1077937483,1077937484,GB +1077937485,1077937485,LK +1077937486,1077937502,US +1077937503,1077937506,GB +1077937507,1077937510,CH +1077937511,1077937514,CR +1077937515,1077937531,US +1077937532,1077937535,IN +1077937536,1077937539,ES +1077937540,1077937547,AT +1077937548,1077937571,US +1077937572,1077937575,CY +1077937576,1077937577,GB +1077937578,1077937597,US +1077937598,1077937601,IN +1077937602,1077937609,US +1077937610,1077937613,NZ +1077937614,1077937617,US +1077937618,1077937621,IN +1077937622,1077937625,GB +1077937626,1077937629,IT +1077937630,1077937678,US +1077937679,1077937682,ZA +1077937683,1077937686,US +1077937687,1077937690,IN +1077937691,1077937702,US +1077937703,1077937706,PK +1077937707,1077937710,RS +1077937711,1077937714,AN +1077937715,1077937718,US +1077937719,1077937722,IN +1077937723,1077937726,AU +1077937727,1077937730,SG +1077937731,1077937734,US +1077937735,1077937738,BA +1077937739,1077937742,IL +1077937743,1077937750,US +1077937751,1077937754,AU +1077937755,1077937758,US +1077937759,1077937762,NL +1077937763,1077937766,US +1077937767,1077937770,RU +1077937771,1077937782,US +1077937783,1077937786,GR +1077937787,1077937790,GB +1077937791,1077937802,US +1077937803,1077937806,BE +1077937807,1077937822,US +1077937823,1077937826,GB +1077937827,1077937846,US +1077937847,1077937850,TH +1077937851,1077937854,US +1077937855,1077937862,TH +1077937863,1077937866,SA +1077937867,1077937870,GB +1077937871,1077937878,US +1077937879,1077937882,GB +1077937883,1077937886,US +1077937887,1077937890,GR +1077937891,1077937902,US +1077937903,1077937906,IN +1077937907,1077937933,US +1077937934,1077937937,IT +1077937938,1077937941,US +1077937942,1077937945,NO +1077937946,1077937949,MY +1077937950,1077937953,CL +1077937954,1077937963,US +1077937964,1077937967,NO +1077937968,1077937975,US +1077937976,1077937979,TH +1077937980,1077937983,CN +1077937984,1077938003,US +1077938004,1077938007,TH +1077938008,1077938011,US +1077938012,1077938021,GB +1077938022,1077938025,US +1077938026,1077938029,FR +1077938030,1077938033,US +1077938034,1077938037,SA +1077938038,1077938041,AU +1077938042,1077938045,US +1077938046,1077938049,RU +1077938050,1077938053,US +1077938054,1077938057,AU +1077938058,1077938073,US +1077938074,1077938077,CN +1077938078,1077938081,US +1077938082,1077938085,IN +1077938086,1077938089,US +1077938090,1077938093,CA +1077938094,1077938121,US +1077938122,1077938125,DZ +1077938126,1077938129,IN +1077938130,1077938133,ID +1077938134,1077938137,CA +1077938138,1077938141,GB +1077938142,1077938145,CA +1077938146,1077938149,US +1077938150,1077938153,IN +1077938154,1077938157,AR +1077938158,1077938185,US +1077938186,1077938189,PH +1077938190,1077938201,US +1077938202,1077938205,CA +1077938206,1077938209,AR +1077938210,1077938221,US +1077938222,1077938225,IN +1077938226,1077938258,US +1077938259,1077938262,PE +1077938263,1077938266,CA +1077938267,1077938269,GB +1077938270,1077938277,US +1077938278,1077938281,GB +1077938282,1077938283,DE +1077938284,1077938284,CH +1077938285,1077938288,CA +1077938289,1077938296,GB +1077938297,1077938301,US +1077938302,1077938305,GB +1077938306,1077938309,US +1077938310,1077938313,TH +1077938314,1077938321,US +1077938322,1077938325,GB +1077938326,1077938329,PK +1077938330,1077938333,US +1077938334,1077938337,MX +1077938338,1077938345,US +1077938346,1077938349,SA +1077938350,1077938357,US +1077938358,1077938361,ID +1077938362,1077938365,US +1077938366,1077938372,IN +1077938373,1077938376,DK +1077938377,1077938380,IL +1077938381,1077938384,LT +1077938385,1077938396,US +1077938397,1077938400,CA +1077938401,1077938404,US +1077938405,1077938408,IT +1077938409,1077938412,US +1077938413,1077938416,PT +1077938417,1077938426,US +1077938427,1077938430,SE +1077938431,1077938437,US +1077938438,1077938441,PE +1077938442,1077938445,US +1077938446,1077938446,BE +1077938447,1077938490,US +1077938491,1077938494,MT +1077938495,1077938502,US +1077938503,1077938506,ES +1077938507,1077938510,DK +1077938511,1077938529,US +1077938530,1077938533,NZ +1077938534,1077938537,CA +1077938538,1077938541,ES +1077938542,1077938545,CY +1077938546,1077938551,US +1077938552,1077938552,ES +1077938553,1077938570,US +1077938571,1077938571,NL +1077938572,1077938572,US +1077938573,1077938576,CO +1077938577,1077938580,US +1077938581,1077938584,CA +1077938585,1077938588,US +1077938589,1077938592,MX +1077938593,1077938596,US +1077938597,1077938600,DO +1077938601,1077938630,US +1077938631,1077938644,IN +1077938645,1077938648,US +1077938649,1077938652,CA +1077938653,1077938656,CN +1077938657,1077938660,RO +1077938661,1077938664,TR +1077938665,1077938668,CA +1077938669,1077938672,US +1077938673,1077938676,GB +1077938677,1077938680,IN +1077938681,1077938702,US 1077938703,1077938706,ID 1077938707,1077938734,GB 1077938735,1077938735,PK @@ -12644,19 +18051,18 @@ 1077938750,1077938750,NL 1077938751,1077938765,US 1077938766,1077938769,CN -1077938770,1077938773,US -1077938774,1077938777,GB +1077938770,1077938777,US 1077938778,1077938781,RO 1077938782,1077938785,US 1077938786,1077938789,GR 1077938790,1077938793,CA 1077938794,1077938797,IE -1077938798,1077938801,AR +1077938798,1077938801,SG 1077938802,1077938805,US 1077938806,1077938809,DK 1077938810,1077938813,HK 1077938814,1077938829,US -1077938830,1077938831,IN +1077938830,1077938831,ES 1077938832,1077938835,CA 1077938836,1077938848,US 1077938849,1077938852,IT @@ -12692,8 +18098,7 @@ 1077939061,1077939064,IE 1077939065,1077939065,TH 1077939066,1077939069,CA -1077939070,1077939074,TH -1077939075,1077939078,US +1077939070,1077939078,US 1077939079,1077939082,IN 1077939083,1077939086,CA 1077939087,1077939090,ES @@ -12713,14 +18118,16 @@ 1077939219,1077939219,NL 1077939220,1077939223,CA 1077939224,1077939228,BR -1077939229,1077939236,US -1077939237,1077939240,IN -1077939241,1077939251,US +1077939229,1077939240,US +1077939241,1077939244,NL +1077939245,1077939251,US 1077939252,1077939255,BR 1077939256,1077939259,FR 1077939260,1077939263,US 1077939264,1077939267,MY -1077939268,1077939292,US +1077939268,1077939284,US +1077939285,1077939288,ES +1077939289,1077939292,US 1077939293,1077939296,IT 1077939297,1077939300,CA 1077939301,1077939304,US @@ -12740,70 +18147,295 @@ 1077939388,1077939391,PK 1077939392,1077939395,US 1077939396,1077939399,SE -1077939400,1077939415,US +1077939400,1077939410,US +1077939411,1077939414,CN +1077939415,1077939415,US 1077939416,1077939423,BE -1077939424,1077939461,US -1077939462,1077939465,CA -1077939466,1077939725,US +1077939424,1077939439,US +1077939440,1077939443,IS +1077939444,1077939447,US +1077939448,1077939451,IN +1077939452,1077939491,US +1077939492,1077939495,GB +1077939496,1077939523,US +1077939524,1077939533,CA +1077939534,1077939557,US +1077939558,1077939561,MU +1077939562,1077939569,US +1077939570,1077939574,OM +1077939575,1077939582,US +1077939583,1077939586,GH +1077939587,1077939625,US +1077939626,1077939630,UY +1077939631,1077939634,GB +1077939635,1077939644,US +1077939645,1077939648,GR +1077939649,1077939652,IE +1077939653,1077939725,US 1077939726,1077939727,DE -1077939728,1077939735,US -1077939736,1077939739,IN -1077939740,1077939743,MY -1077939744,1077939747,CA -1077939748,1077939751,US -1077939752,1077939755,BZ -1077939756,1077939776,US -1077939777,1077939780,CA -1077939781,1077939784,GB -1077939785,1077939973,US +1077939728,1077939790,US +1077939791,1077939794,PE +1077939795,1077939823,US +1077939824,1077939827,BR +1077939828,1077939837,PT +1077939838,1077939895,US +1077939896,1077939899,GB +1077939900,1077939959,US +1077939960,1077939963,CA +1077939964,1077939973,US 1077939974,1077939977,CL 1077939978,1077939981,US 1077939982,1077939985,MU -1077939986,1077939993,US -1077939994,1077939997,CN +1077939986,1077939997,US 1077939998,1077940001,GB 1077940002,1077940005,EG -1077940006,1077940009,US -1077940010,1077940013,IN -1077940014,1077940060,US -1077940061,1077940068,GB +1077940006,1077940064,US +1077940065,1077940068,GB 1077940069,1077940072,US -1077940073,1077940076,TH -1077940077,1077940089,US -1077940090,1077940097,GB -1077940098,1077940099,DE -1077940100,1077940101,US -1077940102,1077940105,IN -1077940106,1077940109,TR -1077940110,1077940113,CA -1077940114,1077940125,US -1077940126,1077940129,LV -1077940130,1077940133,US -1077940134,1077940137,GB -1077940138,1077940146,US -1077940147,1077940150,EG -1077940151,1077940174,US -1077940175,1077940178,GB -1077940179,1077940182,US -1077940183,1077940190,CA -1077940191,1077940196,US -1077940197,1077940200,MX -1077940201,1077940205,GB -1077940206,1077940209,IT -1077940210,1077940213,US -1077940214,1077940217,MX -1077940218,1077960751,US +1077940073,1077940076,BE +1077940077,1077940133,US +1077940134,1077940137,IN +1077940138,1077940285,US +1077940286,1077940289,AU +1077940290,1077940378,US +1077940379,1077940382,PK +1077940383,1077942289,US +1077942290,1077942290,CN +1077942291,1077942310,US +1077942311,1077942314,AU +1077942315,1077942342,US +1077942343,1077942346,CN +1077942347,1077942363,US +1077942364,1077942367,AU +1077942368,1077942390,US +1077942391,1077942398,CA +1077942399,1077942411,US +1077942412,1077942415,CA +1077942416,1077942427,US +1077942428,1077942431,CA +1077942432,1077942435,SG +1077942436,1077942443,US +1077942444,1077942447,IN +1077942448,1077942456,US +1077942457,1077942461,CN +1077942462,1077942485,US +1077942486,1077942489,SG +1077942490,1077942493,US +1077942494,1077942497,MX +1077942498,1077942501,VN +1077942502,1077942505,IN +1077942506,1077942509,GB +1077942510,1077942513,AE +1077942514,1077942535,US +1077942536,1077942539,AU +1077942540,1077942543,IN +1077942544,1077942544,US +1077942545,1077942559,CN +1077942560,1077942572,US +1077942573,1077942576,CA +1077942577,1077942580,CN +1077942581,1077942600,US +1077942601,1077942604,PE +1077942605,1077942608,CO +1077942609,1077942612,JP +1077942613,1077942616,US +1077942617,1077942620,MX +1077942621,1077942624,BD +1077942625,1077942636,US +1077942637,1077942640,AU +1077942641,1077942656,US +1077942657,1077942660,CA +1077942661,1077942672,US +1077942673,1077942676,AU +1077942677,1077942718,US +1077942719,1077942722,CA +1077942723,1077942746,US +1077942747,1077942750,GB +1077942751,1077942754,MY +1077942755,1077942758,UA +1077942759,1077942762,US +1077942763,1077942766,AU +1077942767,1077942770,SG +1077942771,1077942813,US +1077942814,1077942817,OM +1077942818,1077942850,US +1077942851,1077942854,CN +1077942855,1077942858,ID +1077942859,1077942867,US +1077942868,1077942871,CA +1077942872,1077942889,US +1077942890,1077942893,ES +1077942894,1077942922,US +1077942923,1077942926,ZA +1077942927,1077942930,CA +1077942931,1077942943,US +1077942944,1077942947,CA +1077942948,1077942960,US +1077942961,1077942964,OM +1077942965,1077942972,US +1077942973,1077942976,CA +1077942977,1077942984,US +1077942985,1077942988,IN +1077942989,1077942992,NZ +1077942993,1077943024,US +1077943025,1077943028,AU +1077943029,1077943038,TH +1077943039,1077943045,US +1077943046,1077943053,FI +1077943054,1077943096,US +1077943097,1077943100,AU +1077943101,1077943104,US +1077943105,1077943108,CN +1077943109,1077943109,US +1077943110,1077943110,CN +1077943111,1077943139,US +1077943140,1077943143,IN +1077943144,1077943175,US +1077943176,1077943179,DO +1077943180,1077943183,AU +1077943184,1077943191,CA +1077943192,1077943224,US +1077943225,1077943228,MY +1077943229,1077943242,US +1077943243,1077943246,IN +1077943247,1077943247,US +1077943248,1077943251,PK +1077943252,1077943270,US +1077943271,1077943274,BD +1077943275,1077943279,US +1077943280,1077943283,CN +1077943284,1077943287,SG +1077943288,1077943291,TH +1077943292,1077943313,US +1077943314,1077943314,BE +1077943315,1077943318,CN +1077943319,1077943378,US +1077943379,1077943379,CZ +1077943380,1077943406,US +1077943407,1077943410,AU +1077943411,1077943420,US +1077943421,1077943421,CN +1077943422,1077943425,US +1077943426,1077943426,CN +1077943427,1077943430,MY +1077943431,1077943503,US +1077943504,1077943507,CA +1077943508,1077943523,US +1077943524,1077943527,AU +1077943528,1077943531,US +1077943532,1077943535,AU +1077943536,1077943539,ID +1077943540,1077943540,US +1077943541,1077943544,CA +1077943545,1077943574,US +1077943575,1077943575,BE +1077943576,1077943576,CZ +1077943577,1077943634,US +1077943635,1077943638,ZA +1077943639,1077943674,US +1077943675,1077943675,CN +1077943676,1077943789,US +1077943790,1077943790,AU +1077943791,1077943794,US +1077943795,1077943796,SG +1077943797,1077943825,US +1077943826,1077943829,HK +1077943830,1077943845,US +1077943846,1077943849,AU +1077943850,1077943853,UA +1077943854,1077943867,US +1077943868,1077943868,CN +1077943869,1077943876,US +1077943877,1077943880,CA +1077943881,1077943896,US +1077943897,1077943897,CN +1077943898,1077943901,US +1077943902,1077943905,AU +1077943906,1077943921,US +1077943922,1077943925,AU +1077943926,1077943939,US +1077943940,1077943940,BE +1077943941,1077943944,US +1077943945,1077943948,KH +1077943949,1077943964,US +1077943965,1077943968,IN +1077943969,1077943970,US +1077943971,1077943972,CN +1077943973,1077943976,PK +1077943977,1077943984,AU +1077943985,1077943992,US +1077943993,1077943996,CA +1077943997,1077944000,AR +1077944001,1077944013,US +1077944014,1077944017,IN +1077944018,1077944025,US +1077944026,1077944028,CN +1077944029,1077944058,US +1077944059,1077944062,CA +1077944063,1077944081,US +1077944082,1077944085,CA +1077944086,1077944097,US +1077944098,1077944101,AU +1077944102,1077944127,US +1077944128,1077944128,BE +1077944129,1077944136,US +1077944137,1077944137,BE +1077944138,1077944141,PL +1077944142,1077944173,US +1077944174,1077944177,CA +1077944178,1077944181,US +1077944182,1077944182,CN +1077944183,1077944186,US +1077944187,1077944190,PH +1077944191,1077944198,US +1077944199,1077944202,CA +1077944203,1077944210,CN +1077944211,1077944218,US +1077944219,1077944219,BE +1077944220,1077944223,US +1077944224,1077944227,CA +1077944228,1077944231,US +1077944232,1077944235,JP +1077944236,1077944243,US +1077944244,1077944247,AU +1077944248,1077944255,US +1077944256,1077944259,TH +1077944260,1077944263,PY +1077944264,1077944271,US +1077944272,1077944275,CA +1077944276,1077944279,US +1077944280,1077944283,TH +1077944284,1077944284,US +1077944285,1077944286,RO +1077944287,1077944295,US +1077944296,1077944299,CZ +1077944300,1077944308,US +1077944309,1077944312,CN +1077944313,1077944316,US +1077944317,1077944317,CZ +1077944318,1077960703,US +1077960704,1077960711,CA +1077960712,1077960727,US +1077960728,1077960735,SE +1077960736,1077960751,US 1077960752,1077960759,CA -1077960760,1077960943,US -1077960944,1077960951,CO -1077960952,1077965855,US +1077960760,1077960775,US +1077960776,1077960783,FR +1077960784,1077965855,US 1077965856,1077965887,BA -1077965888,1077968831,US +1077965888,1077965911,US +1077965912,1077965919,CA +1077965920,1077968831,US 1077968832,1077968839,CA 1077968840,1077977087,US 1077977088,1077985279,CA 1077985280,1077993471,US -1077993472,1078001663,CA +1077993472,1077993727,CA +1077993728,1077993983,GB +1077993984,1077994751,US +1077994752,1077995007,CA +1077995008,1077997055,US +1077997056,1078001663,CA 1078001664,1078067199,US 1078067200,1078071295,BS 1078071296,1078075391,CA @@ -12861,9 +18493,14 @@ 1078283648,1078283679,US 1078283680,1078283687,CA 1078283688,1078283695,US -1078283696,1078283751,CA +1078283696,1078283735,CA +1078283736,1078283743,US +1078283744,1078283751,CA 1078283752,1078283775,US -1078283776,1078284031,CA +1078283776,1078283999,CA +1078284000,1078284007,US +1078284008,1078284015,CA +1078284016,1078284031,US 1078284032,1078284159,BS 1078284160,1078284255,CA 1078284256,1078284351,US @@ -12889,16 +18526,16 @@ 1078285280,1078285287,MX 1078285288,1078285295,US 1078285296,1078285303,CA -1078285304,1078285567,US -1078285568,1078285639,CA +1078285304,1078285311,US +1078285312,1078285639,CA 1078285640,1078285647,US 1078285648,1078285655,CA 1078285656,1078285663,US 1078285664,1078285695,CA 1078285696,1078285703,MX 1078285704,1078285711,US -1078285712,1078285919,CA -1078285920,1078285943,US +1078285712,1078285935,CA +1078285936,1078285943,US 1078285944,1078285951,CA 1078285952,1078286015,US 1078286016,1078286047,CA @@ -12939,9 +18576,7 @@ 1078287328,1078287343,US 1078287344,1078287759,CA 1078287760,1078287767,US -1078287768,1078287775,CA -1078287776,1078287807,US -1078287808,1078287839,CA +1078287768,1078287839,CA 1078287840,1078287863,US 1078287864,1078288383,CA 1078288384,1078309695,US @@ -13010,7 +18645,9 @@ 1078436720,1078436727,JP 1078436728,1078436767,US 1078436768,1078436799,GB -1078436800,1078437471,US +1078436800,1078437263,US +1078437264,1078437271,CA +1078437272,1078437471,US 1078437472,1078437479,JP 1078437480,1078437503,US 1078437504,1078437567,IT @@ -13077,9 +18714,7 @@ 1078621696,1078621951,IN 1078621952,1078651055,US 1078651056,1078651071,CA -1078651072,1078653695,US -1078653696,1078653727,CZ -1078653728,1078654431,US +1078651072,1078654431,US 1078654432,1078654439,AU 1078654440,1078660799,US 1078660800,1078660831,CN @@ -13201,9 +18836,7 @@ 1078798688,1078798703,AU 1078798704,1078798911,US 1078798912,1078798927,IT -1078798928,1078799039,US -1078799040,1078799055,IT -1078799056,1078799071,US +1078798928,1078799071,US 1078799072,1078799087,CA 1078799088,1078799263,US 1078799264,1078799295,MX @@ -13258,7 +18891,9 @@ 1079323312,1079323327,US 1079323328,1079323415,CA 1079323416,1079323423,US -1079323424,1079323583,CA +1079323424,1079323447,CA +1079323448,1079323455,US +1079323456,1079323583,CA 1079323584,1079323599,US 1079323600,1079323615,CA 1079323616,1079323647,US @@ -13295,20 +18930,18 @@ 1079355360,1079355367,CA 1079355368,1079355967,US 1079355968,1079355991,CA -1079355992,1079356663,US -1079356664,1079356671,CA -1079356672,1079377919,US +1079355992,1079377919,US 1079377920,1079378943,CA -1079378944,1079379711,US +1079378944,1079379199,US +1079379200,1079379455,CA +1079379456,1079379711,US 1079379712,1079380927,CA 1079380928,1079380991,US 1079380992,1079381567,CA 1079381568,1079381599,US 1079381600,1079381631,WS 1079381632,1079381759,CA -1079381760,1079382015,US -1079382016,1079382527,CA -1079382528,1079383039,US +1079381760,1079383039,US 1079383040,1079383295,VG 1079383296,1079383807,US 1079383808,1079384063,MH @@ -13318,9 +18951,7 @@ 1079385088,1079385343,US 1079385344,1079385471,CA 1079385472,1079385599,US -1079385600,1079385855,CA -1079385856,1079386111,SZ -1079386112,1079386623,CA +1079385600,1079386623,CA 1079386624,1079386879,SG 1079386880,1079387135,EG 1079387136,1079387903,US @@ -13352,7 +18983,9 @@ 1079396096,1079396351,CA 1079396352,1079397375,MP 1079397376,1079397631,MH -1079397632,1079399583,CA +1079397632,1079397887,CA +1079397888,1079398399,US +1079398400,1079399583,CA 1079399584,1079399599,US 1079399600,1079400447,CA 1079400448,1079400511,FR @@ -13362,7 +18995,9 @@ 1079400768,1079400831,US 1079400832,1079401215,CA 1079401216,1079401471,US -1079401472,1079403775,CA +1079401472,1079403263,CA +1079403264,1079403519,US +1079403520,1079403775,CA 1079403776,1079403807,US 1079403808,1079403903,CA 1079403904,1079403935,US @@ -13385,22 +19020,28 @@ 1079408448,1079408639,CA 1079408640,1079408895,US 1079408896,1079409407,PK -1079409408,1079409919,LR +1079409408,1079409919,US 1079409920,1079410687,CA 1079410688,1079410943,US 1079410944,1079411199,CA 1079411200,1079411455,US 1079411456,1079411711,PK -1079411712,1079413311,CA +1079411712,1079412735,CA +1079412736,1079413247,US +1079413248,1079413311,CA 1079413312,1079413343,US -1079413344,1079414783,CA -1079414784,1079415039,US +1079413344,1079413535,CA +1079413536,1079413567,US +1079413568,1079414271,CA +1079414272,1079415039,US 1079415040,1079415295,HN 1079415296,1079415807,CA 1079415808,1079416319,US 1079416320,1079421951,CA 1079421952,1079422207,US -1079422208,1079425023,CA +1079422208,1079422239,CA +1079422240,1079422271,US +1079422272,1079425023,CA 1079425024,1079425279,US 1079425280,1079425535,CA 1079425536,1079425551,US @@ -13437,8 +19078,7 @@ 1079585392,1079585407,IN 1079585408,1079623679,US 1079623680,1079627775,PR -1079627776,1079648255,US -1079656448,1079664639,US +1079627776,1079664639,US 1079664640,1079668735,CA 1079668736,1079827871,US 1079827872,1079827887,RU @@ -13446,7 +19086,9 @@ 1079857888,1079857903,NZ 1079857904,1079861247,US 1079861248,1079865343,CA -1079865344,1079944295,US +1079865344,1079943999,US +1079944000,1079944031,AU +1079944032,1079944295,US 1079944296,1079944303,IL 1079944304,1079946271,US 1079946272,1079946303,IE @@ -13616,9 +19258,7 @@ 1081037312,1081037567,CA 1081037568,1081038335,US 1081038336,1081040895,CA -1081040896,1081085951,US -1081085952,1081086207,VI -1081086208,1081122559,US +1081040896,1081122559,US 1081122560,1081122815,VI 1081122816,1081212927,US 1081212928,1081278463,CA @@ -13630,7 +19270,9 @@ 1081368744,1081368767,CO 1081368768,1081369119,US 1081369120,1081369151,CO -1081369152,1081369599,US +1081369152,1081369183,US +1081369184,1081369215,CO +1081369216,1081369599,US 1081369600,1081370111,CO 1081370112,1081377079,US 1081377080,1081377087,VE @@ -13686,17 +19328,15 @@ 1081397760,1081398783,CL 1081398784,1081399295,US 1081399296,1081401343,CL -1081401344,1081401375,AR -1081401376,1081401383,US -1081401384,1081401391,AR +1081401344,1081401391,AR 1081401392,1081401415,US 1081401416,1081401471,AR 1081401472,1081401567,US 1081401568,1081401599,AR 1081401600,1081401615,US 1081401616,1081401735,AR -1081401736,1081401751,US -1081401752,1081401775,AR +1081401736,1081401743,US +1081401744,1081401775,AR 1081401776,1081401791,US 1081401792,1081401807,AR 1081401808,1081401815,US @@ -13779,9 +19419,31 @@ 1081479168,1081483247,CA 1081483248,1081483255,US 1081483256,1081483263,CA -1081483264,1081487359,US -1081487360,1081491455,A2 -1081491456,1081565183,US +1081483264,1081487367,US +1081487368,1081487375,A2 +1081487376,1081487407,US +1081487408,1081487519,A2 +1081487520,1081487583,US +1081487584,1081487871,A2 +1081487872,1081487979,US +1081487980,1081487991,A2 +1081487992,1081488111,US +1081488112,1081488119,A2 +1081488120,1081488123,US +1081488124,1081488135,A2 +1081488136,1081488159,US +1081488160,1081488167,A2 +1081488168,1081488295,US +1081488296,1081488303,A2 +1081488304,1081488335,US +1081488336,1081488343,A2 +1081488344,1081488351,US +1081488352,1081488383,A2 +1081488384,1081489671,US +1081489672,1081489679,A2 +1081489680,1081489687,US +1081489688,1081489919,A2 +1081489920,1081565183,US 1081565184,1081573375,CA 1081573376,1081581615,US 1081581616,1081581623,JP @@ -13880,7 +19542,19 @@ 1081589112,1081589759,US 1081589760,1081593855,BB 1081593856,1081597951,CA -1081597952,1081609823,US +1081597952,1081608191,US +1081608192,1081608207,CA +1081608208,1081608223,US +1081608224,1081608231,CA +1081608232,1081608319,US +1081608320,1081608327,CA +1081608328,1081608335,US +1081608336,1081608343,CA +1081608344,1081608503,US +1081608504,1081608511,CA +1081608512,1081608575,US +1081608576,1081608583,CA +1081608584,1081609823,US 1081609824,1081609831,LK 1081609832,1081609887,US 1081609888,1081609919,IN @@ -13904,13 +19578,26 @@ 1081612016,1081612023,IN 1081612024,1081612159,US 1081612160,1081612191,IN -1081612192,1081612663,US +1081612192,1081612655,US +1081612656,1081612663,CA 1081612664,1081612671,IN -1081612672,1081616831,US +1081612672,1081613351,US +1081613352,1081613359,CA +1081613360,1081613399,US +1081613400,1081613407,CA +1081613408,1081613447,US +1081613448,1081613455,CA +1081613456,1081613543,US +1081613544,1081613551,CA +1081613552,1081616831,US 1081616832,1081616839,GB 1081616840,1081618951,US 1081618952,1081618959,GB -1081618960,1081803287,US +1081618960,1081619775,US +1081619776,1081619791,CA +1081619792,1081625775,US +1081625776,1081625783,CA +1081625784,1081803287,US 1081803288,1081803295,PR 1081803296,1081803895,US 1081803896,1081803903,PR @@ -13928,11 +19615,7 @@ 1081912576,1081912639,DE 1081912640,1081927135,US 1081927136,1081927143,GB -1081927144,1081955327,US -1081955328,1081955583,CA -1081955584,1081955839,US -1081955840,1081956095,CA -1081956096,1081966871,US +1081927144,1081966871,US 1081966872,1081966879,AS 1081966880,1082091263,US 1082091264,1082091271,CN @@ -13954,7 +19637,21 @@ 1082344785,1082344786,HN 1082344787,1082345733,US 1082345734,1082345737,CA -1082345738,1082348319,US +1082345738,1082346510,US +1082346511,1082346514,IN +1082346515,1082347740,US +1082347741,1082347744,IN +1082347745,1082347760,US +1082347761,1082347763,MX +1082347764,1082347882,US +1082347883,1082347886,IN +1082347887,1082347892,US +1082347893,1082347896,IN +1082347897,1082348005,US +1082348006,1082348009,IN +1082348010,1082348115,US +1082348116,1082348123,CA +1082348124,1082348319,US 1082348320,1082348327,GB 1082348328,1082348335,US 1082348336,1082348351,GB @@ -13982,8 +19679,7 @@ 1082349776,1082349783,IT 1082349784,1082349807,US 1082349808,1082349815,GB -1082349816,1082349823,RU -1082349824,1082350655,US +1082349816,1082350655,US 1082350656,1082350671,IT 1082350672,1082350911,US 1082350912,1082350943,RU @@ -13993,14 +19689,20 @@ 1082434240,1082434255,IN 1082434256,1082621987,US 1082621988,1082621991,ME -1082621992,1082683391,US +1082621992,1082679807,US 1082683392,1082687487,CA -1082687488,1082885311,US +1082687488,1082788447,US +1082788448,1082788455,SG +1082788456,1082788767,US +1082788768,1082788799,SG +1082788800,1082885311,US 1082885312,1082885343,CA 1082885344,1082885855,US 1082885856,1082885887,CA 1082885888,1082945535,US -1082945536,1082949631,CA +1082945536,1082948943,CA +1082948944,1082948959,US +1082948960,1082949631,CA 1082949632,1082952703,US 1082952704,1082952959,CA 1082952960,1082982399,US @@ -14011,7 +19713,9 @@ 1083263744,1083263999,GB 1083264000,1083264447,US 1083264448,1083264463,GB -1083264464,1083396095,US +1083264464,1083265023,US +1083265024,1083265279,CA +1083265280,1083396095,US 1083396096,1083400191,BM 1083400192,1083417727,US 1083417728,1083417791,CA @@ -14170,13 +19874,11 @@ 1086023288,1086023295,NZ 1086023296,1086023335,US 1086023336,1086023343,RO -1086023344,1086027391,US +1086023344,1086025447,US +1086025448,1086025455,CA +1086025456,1086027391,US 1086027392,1086027407,IT -1086027408,1086027423,US -1086027424,1086027455,VN -1086027456,1086028031,US -1086028032,1086028287,PA -1086028288,1086028663,US +1086027408,1086028663,US 1086028664,1086028671,BR 1086028672,1086028751,US 1086028752,1086028759,BR @@ -14184,7 +19886,9 @@ 1086029728,1086029743,CA 1086029744,1086309887,US 1086309888,1086310143,AU -1086310144,1086358143,US +1086310144,1086317823,US +1086317824,1086318079,CA +1086318080,1086358143,US 1086358144,1086358271,PA 1086358272,1086359231,US 1086359232,1086359295,IL @@ -14198,9 +19902,15 @@ 1086910336,1086910463,LB 1086910464,1086922751,US 1086922752,1086923343,CA -1086923344,1086923359,US -1086923360,1086930943,CA -1086930944,1086955519,US +1086923344,1086923351,US +1086923352,1086930943,CA +1086930944,1086941831,US +1086941832,1086941835,CA +1086941836,1086942079,US +1086942080,1086942087,CA +1086942088,1086942975,US +1086942976,1086943231,CA +1086943232,1086955519,US 1086955520,1086971903,CA 1086971904,1087008767,US 1087008768,1087009279,CY @@ -14213,7 +19923,7 @@ 1087420160,1087440895,US 1087440896,1087442943,PR 1087442944,1087444223,US -1087444224,1087444479,CY +1087444224,1087444479,GB 1087444480,1087495519,US 1087495520,1087495535,TW 1087495536,1087496703,US @@ -14316,9 +20026,7 @@ 1088101024,1088101031,PR 1088101032,1088108351,US 1088108352,1088108359,PR -1088108360,1088117199,US -1088117200,1088117207,PR -1088117208,1088120527,US +1088108360,1088120527,US 1088120528,1088120535,PR 1088120536,1088146151,US 1088146152,1088146159,PR @@ -14439,7 +20147,18 @@ 1089265664,1089265919,GB 1089265920,1089266431,US 1089266432,1089266943,GB -1089266944,1089306623,US +1089266944,1089282059,US +1089282060,1089282063,CA +1089282064,1089282075,US +1089282076,1089282079,CA +1089282080,1089282095,US +1089282096,1089282099,CA +1089282100,1089282687,US +1089282688,1089282703,A1 +1089282704,1089282711,CA +1089282712,1089285439,US +1089285440,1089285455,A1 +1089285456,1089306623,US 1089306624,1089339391,PR 1089339392,1089393295,US 1089393296,1089393407,CA @@ -14524,7 +20243,9 @@ 1089970176,1089974271,PR 1089974272,1090146303,US 1090146304,1090150399,CA -1090150400,1090207743,US +1090150400,1090172495,US +1090172496,1090172511,GB +1090172512,1090207743,US 1090207744,1090215935,CA 1090215936,1090355199,US 1090355200,1090356327,CA @@ -14639,11 +20360,7 @@ 1091695214,1091695223,CA 1091695224,1091695283,US 1091695284,1091695293,CA -1091695294,1091695487,US -1091695488,1091695551,SA -1091695552,1091797263,US -1091797264,1091797279,IT -1091797280,1091797855,US +1091695294,1091797855,US 1091797856,1091797871,IT 1091797872,1091798639,US 1091798640,1091798647,CN @@ -14655,19 +20372,13 @@ 1091800320,1091800327,JP 1091800328,1091802111,US 1091802112,1091802367,CA -1091802368,1091802831,US -1091802832,1091802847,CN -1091802848,1091802863,US -1091802864,1091802871,HK -1091802872,1091803135,US +1091802368,1091803135,US 1091803136,1091803391,CN 1091803392,1091803711,US 1091803712,1091803775,TH 1091803776,1091803871,US 1091803872,1091803903,NL -1091803904,1091804263,US -1091804264,1091804271,BM -1091804272,1091806719,US +1091803904,1091806719,US 1091806720,1091806847,IT 1091806848,1091807231,US 1091807232,1091807487,CA @@ -14710,9 +20421,9 @@ 1093054080,1093054095,GB 1093054096,1093054127,US 1093054128,1093054143,FR -1093054144,1093054175,US -1093054176,1093054191,CA -1093054192,1093055487,US +1093054144,1093054287,US +1093054288,1093054303,GB +1093054304,1093055487,US 1093055488,1093055871,AR 1093055872,1093056095,US 1093056096,1093056127,SY @@ -14720,16 +20431,14 @@ 1093056144,1093056159,SY 1093056160,1093056167,US 1093056168,1093056175,RO -1093056176,1093056319,US -1093056320,1093056335,CA -1093056336,1093056447,US +1093056176,1093056447,US 1093056448,1093056463,FR 1093056464,1093056479,CA 1093056480,1093056511,US 1093056512,1093056519,GB 1093056520,1093056591,US -1093056592,1093056607,CA -1093056608,1093056959,US +1093056592,1093056599,CA +1093056600,1093056959,US 1093056960,1093056975,SA 1093056976,1093057103,US 1093057104,1093057119,JP @@ -14767,8 +20476,8 @@ 1093110272,1093110527,US 1093110528,1093110783,CA 1093110784,1093110815,US -1093110816,1093110831,CA -1093110832,1093110911,US +1093110816,1093110847,CA +1093110848,1093110911,US 1093110912,1093110927,CA 1093110928,1093110935,US 1093110936,1093111039,CA @@ -14798,15 +20507,23 @@ 1093113128,1093113135,CA 1093113136,1093113151,US 1093113152,1093113183,CA -1093113184,1093113407,US +1093113184,1093113375,US +1093113376,1093113379,CA +1093113380,1093113407,US 1093113408,1093113423,CA -1093113424,1093113503,US -1093113504,1093113519,CA -1093113520,1093113727,US +1093113424,1093113479,US +1093113480,1093113487,CA +1093113488,1093113503,US +1093113504,1093113535,CA +1093113536,1093113639,US +1093113640,1093113647,CA +1093113648,1093113727,US 1093113728,1093113743,CA 1093113744,1093113759,US -1093113760,1093113775,CA -1093113776,1093114623,US +1093113760,1093113783,CA +1093113784,1093113791,US +1093113792,1093113823,CA +1093113824,1093114623,US 1093114624,1093114679,CA 1093114680,1093114703,US 1093114704,1093114711,CA @@ -14818,7 +20535,8 @@ 1093114864,1093115839,CA 1093115840,1093115903,US 1093115904,1093116927,CA -1093116928,1093117439,US +1093116928,1093117183,HK +1093117184,1093117439,US 1093117440,1093117455,CA 1093117456,1093117503,US 1093117504,1093117519,CA @@ -14830,7 +20548,8 @@ 1093117616,1093117631,CA 1093117632,1093117647,VG 1093117648,1093118207,CA -1093118208,1093118479,US +1093118208,1093118463,HK +1093118464,1093118479,US 1093118480,1093118495,CA 1093118496,1093118527,US 1093118528,1093118531,CA @@ -14878,8 +20597,8 @@ 1093122592,1093122655,CA 1093122656,1093122671,US 1093122672,1093122687,CA -1093122688,1093122727,US -1093122728,1093122767,CA +1093122688,1093122719,US +1093122720,1093122767,CA 1093122768,1093122783,US 1093122784,1093122791,CA 1093122792,1093122799,US @@ -14918,7 +20637,9 @@ 1093126544,1093126591,CA 1093126592,1093126607,US 1093126608,1093126639,CA -1093126640,1093126801,US +1093126640,1093126767,US +1093126768,1093126783,CA +1093126784,1093126801,US 1093126802,1093126809,CA 1093126810,1093126823,US 1093126824,1093126831,CA @@ -14949,9 +20670,7 @@ 1093131248,1093131263,CA 1093131264,1093131391,US 1093131392,1093131487,CA -1093131488,1093131775,US -1093131776,1093132287,CA -1093132288,1093132351,US +1093131488,1093132351,US 1093132352,1093132799,CA 1093132800,1093133055,US 1093133056,1093133311,CA @@ -15001,12 +20720,9 @@ 1093723648,1093724415,BB 1093724416,1093725183,VC 1093725184,1093730303,BB -1093730304,1093730559,US -1093730560,1093730815,HK +1093730304,1093730815,US 1093730816,1093731071,A1 -1093731072,1093732095,US -1093732096,1093732351,GB -1093732352,1093733887,US +1093731072,1093733887,US 1093733888,1093734143,A1 1093734144,1093737247,US 1093737248,1093737263,AE @@ -15014,10 +20730,10 @@ 1093737424,1093737431,GB 1093737432,1093740095,US 1093740096,1093740159,JP -1093740160,1093740167,US -1093740168,1093740191,CN -1093740192,1093740223,US -1093740224,1093740239,CN +1093740160,1093740183,US +1093740184,1093740191,CN +1093740192,1093740231,US +1093740232,1093740239,CN 1093740240,1093740247,US 1093740248,1093740255,HK 1093740256,1093740271,US @@ -15039,9 +20755,7 @@ 1093746880,1093746943,DE 1093746944,1093748799,US 1093748800,1093748863,CN -1093748864,1093753111,US -1093753112,1093753119,CN -1093753120,1094549687,US +1093748864,1094549687,US 1094549688,1094549695,CA 1094549696,1094549783,US 1094549784,1094549791,AU @@ -15546,9 +21260,9 @@ 1096890880,1096891135,GB 1096891136,1096925183,US 1096925184,1096941567,CA -1096941568,1096942679,US -1096942680,1096942687,IE -1096942688,1096950551,US +1096941568,1096947471,US +1096947472,1096947479,MY +1096947480,1096950551,US 1096950552,1096950559,CA 1096950560,1096952455,US 1096952456,1096952463,GB @@ -15568,17 +21282,21 @@ 1096959600,1096959607,GB 1096959608,1096960767,US 1096960768,1096960895,GB -1096960896,1096961023,US -1096961024,1096961151,GB -1096961152,1096964263,US +1096960896,1096964263,US 1096964264,1096964271,IN -1096964272,1096968127,US +1096964272,1096966303,US +1096966304,1096966311,IN +1096966312,1096968127,US 1096968128,1096968159,CA 1096968160,1096968191,US 1096968192,1096968319,GB -1096968320,1096968447,US -1096968448,1096968575,GB -1096968576,1097057623,US +1096968320,1096969071,US +1096969072,1096969079,CA +1096969080,1096969471,US +1096969472,1096969479,IN +1096969480,1097056559,US +1097056560,1097056575,SE +1097056576,1097057623,US 1097057624,1097057631,IT 1097057632,1097057655,US 1097057656,1097057663,NZ @@ -15616,11 +21334,9 @@ 1097731456,1097736191,CA 1097736192,1097768959,US 1097768960,1097777151,CA -1097777152,1097800959,US -1097800960,1097800991,CY -1097800992,1097801183,US -1097801184,1097801215,DE -1097801216,1097830399,US +1097777152,1097797631,US +1097797632,1097797887,DE +1097797888,1097830399,US 1097830400,1097834495,CA 1097834496,1097896191,US 1097896192,1097896711,VI @@ -15837,9 +21553,7 @@ 1102011888,1102011903,AU 1102011904,1102012799,US 1102012800,1102012927,IN -1102012928,1102012975,US -1102012976,1102012991,RU -1102012992,1102013167,US +1102012928,1102013167,US 1102013168,1102013183,VE 1102013184,1102014207,US 1102014208,1102014335,IN @@ -15848,14 +21562,15 @@ 1102016256,1102016287,AR 1102016288,1102016351,US 1102016352,1102016383,MY -1102016384,1102018431,US +1102016384,1102017087,US +1102017088,1102017119,DM +1102017120,1102018431,US 1102018432,1102018495,TZ 1102018496,1102019583,US 1102019584,1102019711,IN 1102019712,1102389247,US 1102389248,1102393343,CA -1102393344,1102397439,US -1102413824,1102446591,US +1102393344,1102446591,US 1102446592,1102448383,HN 1102448384,1102449151,US 1102449152,1102449407,SV @@ -15865,7 +21580,14 @@ 1102488124,1102488163,IN 1102488164,1102488284,US 1102488285,1102488315,IN -1102488316,1102494332,US +1102488316,1102494223,US +1102494224,1102494227,AU +1102494228,1102494262,US +1102494263,1102494279,AU +1102494280,1102494292,US +1102494293,1102494297,GB +1102494298,1102494301,CA +1102494302,1102494332,US 1102494333,1102494378,AU 1102494379,1102495519,US 1102495520,1102495527,AU @@ -16001,7 +21723,9 @@ 1106349600,1106349607,UM 1106349608,1106428959,US 1106428960,1106428975,UM -1106428976,1106443623,US +1106428976,1106441615,US +1106441616,1106441623,A2 +1106441624,1106443623,US 1106443624,1106443631,CA 1106443632,1106469695,US 1106469696,1106469759,CO @@ -16023,9 +21747,7 @@ 1106605696,1106605703,DE 1106605704,1106685047,US 1106685048,1106685055,CA -1106685056,1106740991,US -1106740992,1106741247,CR -1106741248,1106758655,US +1106685056,1106758655,US 1106758656,1106759167,EC 1106759168,1106759679,CO 1106759680,1106767871,US @@ -16048,15 +21770,15 @@ 1107288064,1107292159,CA 1107292160,1107701759,US 1107701760,1107705855,CA -1107705856,1107800063,US -1107800064,1107800319,CA -1107800320,1107801367,US +1107705856,1107801367,US 1107801368,1107801375,CA 1107801376,1107808842,US 1107808843,1107808846,PE 1107808847,1107808877,US 1107808878,1107808881,PE -1107808882,1107820543,US +1107808882,1107809850,US +1107809851,1107809851,CA +1107809852,1107820543,US 1107820544,1107853311,ZA 1107853312,1107895039,US 1107895040,1107895807,GB @@ -16103,8 +21825,8 @@ 1108055424,1108055439,US 1108055440,1108055455,CA 1108055456,1108055471,US -1108055472,1108055487,CA -1108055488,1108055551,US +1108055472,1108055519,CA +1108055520,1108055551,US 1108055552,1108055903,CA 1108055904,1108055919,US 1108055920,1108055967,CA @@ -16151,11 +21873,11 @@ 1108057784,1108066303,CA 1108066304,1108492287,US 1108492288,1108500479,ZA -1108500480,1108502303,US -1108502304,1108502311,PR -1108502312,1108525055,US +1108500480,1108525055,US 1108525056,1108541439,CA -1108541440,1109245981,US +1108541440,1108862271,US +1108862272,1108862335,LT +1108862336,1109245981,US 1109245982,1109245993,GB 1109245994,1109246021,US 1109246022,1109246029,AU @@ -16430,8 +22152,8 @@ 1110700032,1110704127,CA 1110704128,1110863871,US 1110863872,1110865919,JM -1110865920,1110867200,KY -1110867201,1110867967,JM +1110865920,1110867455,KY +1110867456,1110867967,JM 1110867968,1110870791,US 1110870792,1110870799,HK 1110870800,1110870815,US @@ -16442,7 +22164,9 @@ 1110887424,1110887679,IE 1110887680,1110929407,US 1110929408,1110933503,BM -1110933504,1111195647,US +1110933504,1110940751,US +1110940752,1110940767,A1 +1110940768,1111195647,US 1111195648,1111212031,CA 1111212032,1111228415,US 1111228416,1111244799,AR @@ -16456,15 +22180,25 @@ 1112357376,1112357503,CA 1112357504,1112360959,US 1112360960,1112361023,CA -1112361024,1112369343,US -1112369344,1112369375,AU -1112369376,1112432639,US +1112361024,1112432639,US 1112432640,1112433147,CA 1112433148,1112433151,US 1112433152,1112440831,CA 1112440832,1112530943,US 1112530944,1112539135,CA -1112539136,1113212479,US +1112539136,1112900711,US +1112900712,1112900719,MV +1112900720,1112901623,US +1112901624,1112901631,EG +1112901632,1112901759,US +1112901760,1112901767,EG +1112901768,1112903711,US +1112903712,1112903719,TR +1112903720,1112906431,US +1112906432,1112906439,GB +1112906440,1112907919,US +1112907920,1112907935,EG +1112907936,1113212479,US 1113212480,1113212495,CA 1113212496,1113591807,US 1113591808,1113595903,CA @@ -16533,14 +22267,19 @@ 1114170112,1114505215,US 1114505216,1114507263,CA 1114507264,1114507295,US -1114507296,1114507423,CA +1114507296,1114507327,CA +1114507328,1114507391,US +1114507392,1114507423,CA 1114507424,1114507431,GB -1114507432,1114511359,CA +1114507432,1114508287,CA +1114508288,1114508799,US +1114508800,1114511359,CA 1114511360,1114511871,US 1114511872,1114513407,CA 1114513408,1114515455,SA 1114515456,1114517503,US -1114517504,1114520063,CA +1114517504,1114519551,CA +1114519552,1114520063,US 1114520064,1114520319,PH 1114520320,1114520575,US 1114520576,1114520831,PH @@ -16552,9 +22291,7 @@ 1114533376,1114533887,ZA 1114533888,1114537983,AO 1114537984,1114550271,CA -1114550272,1114627071,US -1114627072,1114628095,NZ -1114628096,1114653951,US +1114550272,1114653951,US 1114653952,1114653983,MO 1114653984,1114657927,US 1114657928,1114657935,LA @@ -16568,10 +22305,11 @@ 1114875392,1114876159,CA 1114876160,1114876447,US 1114876448,1114876463,CA -1114876464,1114876479,US +1114876464,1114876479,AD 1114876480,1114876543,CA 1114876544,1114876575,GB -1114876576,1114876927,US +1114876576,1114876911,US +1114876912,1114876927,AD 1114876928,1114877183,CA 1114877184,1114877439,CY 1114877440,1114877695,US @@ -16589,11 +22327,15 @@ 1114880096,1114880383,US 1114880384,1114880399,CY 1114880400,1114880407,GB -1114880408,1114881343,US -1114881344,1114881407,CY +1114880408,1114881279,US +1114881280,1114881407,CY 1114881408,1114881471,US 1114881472,1114881535,CY -1114881536,1114930175,US +1114881536,1114928863,US +1114928864,1114928871,GB +1114928872,1114929071,US +1114929072,1114929087,RU +1114929088,1114930175,US 1114930176,1114930303,GB 1114930304,1114966815,US 1114966816,1114966831,GB @@ -16603,13 +22345,9 @@ 1115111936,1115112063,PR 1115112064,1115112079,US 1115112080,1115112087,ES -1115112088,1115112159,US -1115112160,1115112191,SV -1115112192,1115112575,US +1115112088,1115112575,US 1115112576,1115112607,IN -1115112608,1115113167,US -1115113168,1115113175,SV -1115113176,1115113471,US +1115112608,1115113471,US 1115113472,1115114495,HN 1115114496,1115114751,MX 1115114752,1115115007,GT @@ -16677,9 +22415,7 @@ 1115698432,1115698687,DO 1115698688,1115698783,US 1115698784,1115698791,CO -1115698792,1115698983,US -1115698984,1115698991,CO -1115698992,1115699903,US +1115698792,1115699903,US 1115699904,1115699911,CA 1115699912,1115699919,US 1115699920,1115699927,CA @@ -16689,7 +22425,9 @@ 1115700736,1115700743,CA 1115700744,1115705343,US 1115705344,1115709439,CA -1115709440,1115783167,US +1115709440,1115779215,US +1115779216,1115779223,CA +1115779224,1115783167,US 1115783168,1115784599,CA 1115784600,1115784607,US 1115784608,1115791359,CA @@ -16707,9 +22445,17 @@ 1116027136,1116027903,A2 1116027904,1116041791,US 1116041792,1116041807,CA -1116041808,1116158463,US +1116041808,1116154575,US +1116154576,1116154591,AE +1116154592,1116158271,US +1116158272,1116158335,CA +1116158336,1116158463,US 1116158464,1116158495,AU -1116158496,1116168191,US +1116158496,1116158623,US +1116158624,1116158719,CA +1116158720,1116159519,US +1116159520,1116159535,BR +1116159536,1116168191,US 1116168192,1116169311,CA 1116169312,1116169327,US 1116169328,1116175103,CA @@ -16741,9 +22487,7 @@ 1116214160,1116214167,PR 1116214168,1116217151,US 1116217152,1116217159,PR -1116217160,1116217439,US -1116217440,1116217447,PR -1116217448,1116218527,US +1116217160,1116218527,US 1116218528,1116218535,PR 1116218536,1116220231,US 1116220232,1116220239,PR @@ -16909,25 +22653,23 @@ 1117142272,1117142527,CA 1117142528,1117163023,US 1117163024,1117163031,CA -1117163032,1117169503,US +1117163032,1117167855,US +1117167856,1117167871,GB +1117167872,1117169503,US 1117169504,1117169535,CA -1117169536,1117178287,US +1117169536,1117171071,US +1117171072,1117171103,CA +1117171104,1117178287,US 1117178288,1117178303,GB -1117178304,1117182271,US -1117182272,1117182335,CA -1117182336,1117189951,US +1117178304,1117189951,US 1117189952,1117190015,KR -1117190016,1117195903,US -1117195904,1117195911,IL -1117195912,1117195991,US +1117190016,1117195991,US 1117195992,1117195999,A2 1117196000,1117198591,US 1117198592,1117198847,CA -1117198848,1117206599,US -1117206600,1117206623,FR -1117206624,1117253247,US -1117253248,1117253255,IL -1117253256,1117274111,US +1117198848,1117221823,US +1117221824,1117221831,GB +1117221832,1117274111,US 1117274112,1117282303,CA 1117282304,1117299615,US 1117299616,1117299623,GB @@ -16939,7 +22681,9 @@ 1117409344,1117409351,GB 1117409352,1117409783,US 1117409784,1117409791,GB -1117409792,1117411071,US +1117409792,1117410239,US +1117410240,1117410303,GB +1117410304,1117411071,US 1117411072,1117411087,PL 1117411088,1117412863,US 1117412864,1117412991,CA @@ -16978,9 +22722,7 @@ 1117814824,1117814831,CN 1117814832,1117815295,US 1117815296,1117815551,CN -1117815552,1117816831,US -1117816832,1117816959,CN -1117816960,1117817919,US +1117815552,1117817919,US 1117817920,1117817983,CA 1117817984,1117818495,US 1117818496,1117818623,IT @@ -16997,9 +22739,7 @@ 1117829376,1117829631,GR 1117829632,1117831359,US 1117831360,1117831423,A2 -1117831424,1117832191,US -1117832192,1117832447,IT -1117832448,1117978623,US +1117831424,1117978623,US 1117978624,1117979503,CA 1117979504,1117979519,US 1117979520,1117982639,CA @@ -17079,8 +22819,8 @@ 1118133632,1118133695,US 1118133696,1118133759,IN 1118133760,1118133887,CA -1118133888,1118134783,US -1118134784,1118134879,CA +1118133888,1118134815,US +1118134816,1118134879,CA 1118134880,1118134911,US 1118134912,1118134975,CA 1118134976,1118135007,US @@ -17089,13 +22829,9 @@ 1118135568,1118135583,CA 1118135584,1118135615,US 1118135616,1118135631,TZ -1118135632,1118135647,US -1118135648,1118135663,CA -1118135664,1118135807,US +1118135632,1118135807,US 1118135808,1118136191,CA -1118136192,1118136319,US -1118136320,1118136351,CA -1118136352,1118136831,US +1118136192,1118136831,US 1118136832,1118136863,IN 1118136864,1118136895,BE 1118136896,1118136927,US @@ -17135,7 +22871,9 @@ 1118151464,1118151471,CR 1118151472,1118151631,US 1118151632,1118151647,MX -1118151648,1118151791,US +1118151648,1118151759,US +1118151760,1118151775,ES +1118151776,1118151791,US 1118151792,1118151795,BR 1118151796,1118152015,US 1118152016,1118152031,CO @@ -17184,7 +22922,9 @@ 1118156320,1118156335,PE 1118156336,1118156399,US 1118156400,1118156415,VE -1118156416,1118156607,US +1118156416,1118156543,US +1118156544,1118156559,UY +1118156560,1118156607,US 1118156608,1118156623,ES 1118156624,1118156703,US 1118156704,1118156719,DK @@ -17225,15 +22965,23 @@ 1118476896,1118477535,CA 1118477536,1118477543,US 1118477544,1118478335,CA -1118478336,1118502911,US -1118507008,1118511103,US +1118478336,1118511103,US 1118511104,1118519295,CA 1118519296,1118527487,US 1118527488,1118531583,CA 1118531584,1118535679,US 1118535680,1118539775,CA 1118539776,1118543871,US -1118568448,1118789783,US +1118543872,1118547967,CA +1118547968,1118563839,US +1118563840,1118564351,BZ +1118564352,1118564607,US +1118564608,1118564639,NO +1118564640,1118564655,US +1118564656,1118564671,IN +1118564672,1118564895,US +1118564896,1118564927,AU +1118564928,1118789783,US 1118789784,1118789791,BB 1118789792,1118790351,US 1118790352,1118790367,GB @@ -17253,7 +23001,9 @@ 1118793824,1118793839,CA 1118793840,1118793935,US 1118793936,1118793951,ES -1118793952,1118794287,US +1118793952,1118793967,US +1118793968,1118793983,HT +1118793984,1118794287,US 1118794288,1118794303,BR 1118794304,1118794799,US 1118794800,1118794815,PR @@ -17266,7 +23016,7 @@ 1118795808,1118795895,US 1118795896,1118795903,CY 1118795904,1118796543,US -1118796544,1118796799,CY +1118796544,1118796799,GB 1118796800,1118797063,US 1118797064,1118797071,CR 1118797072,1118961663,US @@ -17419,7 +23169,7 @@ 1118970112,1118970119,KE 1118970120,1118970239,A2 1118970240,1118970367,NG -1118970368,1118970623,GY +1118970368,1118970623,GB 1118970624,1118970751,SA 1118970752,1118970879,GY 1118970880,1118971520,SR @@ -17427,7 +23177,7 @@ 1118971648,1118971903,GY 1118971904,1118972159,A2 1118972160,1118972415,VE -1118972416,1118972671,EC +1118972416,1118972671,GB 1118972672,1118972927,SA 1118972928,1118972943,NI 1118972944,1118972959,VE @@ -17450,7 +23200,7 @@ 1118973160,1118973167,NI 1118973168,1118973183,A2 1118973184,1118973439,VE -1118973440,1118973695,GY +1118973440,1118973695,US 1118973696,1118973951,NG 1118973952,1118974015,GY 1118974016,1118974047,A2 @@ -17504,8 +23254,8 @@ 1118977552,1118977575,A2 1118977576,1118977583,SA 1118977584,1118977631,A2 -1118977632,1118977663,NG -1118977664,1118977839,A2 +1118977632,1118977639,US +1118977640,1118977839,A2 1118977840,1118977847,LB 1118977848,1118977879,A2 1118977880,1118977887,NI @@ -17604,7 +23354,9 @@ 1118983424,1118983679,NI 1118983680,1118983743,TZ 1118983744,1118983759,VE -1118983760,1118983871,A2 +1118983760,1118983807,A2 +1118983808,1118983839,NG +1118983840,1118983871,A2 1118983872,1118983879,TZ 1118983880,1118983919,US 1118983920,1118984447,A2 @@ -17625,7 +23377,7 @@ 1118984896,1118984943,SA 1118984944,1118984951,LB 1118984952,1118984959,SA -1118984960,1118985215,VE +1118984960,1118985215,LB 1118985216,1118985983,A2 1118985984,1118986111,NG 1118986112,1118986239,A2 @@ -17686,7 +23438,9 @@ 1119168024,1119168031,CA 1119168032,1119168183,US 1119168184,1119168191,CA -1119168192,1119168687,US +1119168192,1119168351,US +1119168352,1119168359,AF +1119168360,1119168687,US 1119168688,1119168695,CA 1119168696,1119168799,US 1119168800,1119168807,MX @@ -17706,7 +23460,9 @@ 1119171208,1119171215,CA 1119171216,1119171383,US 1119171384,1119171391,CA -1119171392,1119172895,US +1119171392,1119172199,US +1119172200,1119172207,CA +1119172208,1119172895,US 1119172896,1119172991,MX 1119172992,1119173007,US 1119173008,1119173095,MX @@ -17807,9 +23563,7 @@ 1120151696,1120151711,TW 1120151712,1120152159,CA 1120152160,1120152191,US -1120152192,1120152319,CA -1120152320,1120152575,US -1120152576,1120153599,CA +1120152192,1120153599,CA 1120153600,1120272383,US 1120272384,1120280575,CA 1120280576,1120280831,US @@ -17868,11 +23622,19 @@ 1120315136,1120315391,US 1120315392,1120321535,CA 1120321536,1120346111,US -1120346112,1120350207,CA +1120346112,1120347039,CA +1120347040,1120347055,US +1120347056,1120347135,CA +1120347136,1120347391,US +1120347392,1120347527,CA +1120347528,1120347535,US +1120347536,1120347591,CA +1120347592,1120347607,US +1120347608,1120350207,CA 1120350208,1120370687,US -1120370688,1120371487,CA -1120371488,1120371503,US -1120371504,1120371511,CA +1120370688,1120371199,CA +1120371200,1120371455,US +1120371456,1120371511,CA 1120371512,1120371519,US 1120371520,1120371647,CA 1120371648,1120371651,US @@ -17896,11 +23658,9 @@ 1120374512,1120374783,US 1120374784,1120375243,CA 1120375244,1120375263,US -1120375264,1120375359,CA -1120375360,1120375551,US -1120375552,1120376063,CA -1120376064,1120376079,US -1120376080,1120376095,CA +1120375264,1120375423,CA +1120375424,1120375551,US +1120375552,1120376095,CA 1120376096,1120376127,US 1120376128,1120376223,CA 1120376224,1120376239,US @@ -17910,8 +23670,8 @@ 1120376304,1120376327,CA 1120376328,1120376383,US 1120376384,1120376447,CA -1120376448,1120376479,US -1120376480,1120376494,CA +1120376448,1120376455,US +1120376456,1120376494,CA 1120376495,1120376559,US 1120376560,1120376647,CA 1120376648,1120376671,US @@ -17939,7 +23699,11 @@ 1120380032,1120380095,CA 1120380096,1120380127,US 1120380128,1120380131,CA -1120380132,1120380415,US +1120380132,1120380223,US +1120380224,1120380239,CA +1120380240,1120380263,US +1120380264,1120380271,CA +1120380272,1120380415,US 1120380416,1120380431,VG 1120380432,1120380447,CA 1120380448,1120380479,US @@ -17947,9 +23711,7 @@ 1120380640,1120380655,US 1120380656,1120380659,CA 1120380660,1120380663,US -1120380664,1120380671,CA -1120380672,1120380927,US -1120380928,1120381055,CA +1120380664,1120381055,CA 1120381056,1120381071,US 1120381072,1120381087,PA 1120381088,1120381095,US @@ -17983,9 +23745,9 @@ 1120385184,1120385535,CA 1120385536,1120386559,US 1120386560,1120386815,CA -1120386816,1120485759,US -1120485760,1120485887,CA -1120485888,1120486079,US +1120386816,1120485503,US +1120485504,1120485631,IN +1120485632,1120486079,US 1120486080,1120486143,IN 1120486144,1120486399,US 1120486400,1120486911,CA @@ -18058,9 +23820,7 @@ 1120498144,1120498303,CA 1120498304,1120498943,US 1120498944,1120499199,CA -1120499200,1120499487,US -1120499488,1120499519,CA -1120499520,1120499583,US +1120499200,1120499583,US 1120499584,1120499615,FR 1120499616,1120499647,IN 1120499648,1120500639,US @@ -18101,41 +23861,56 @@ 1120743424,1120743679,KN 1120743680,1120744447,US 1120744448,1120744703,KN -1120744704,1120854015,US +1120744704,1120826367,US +1120826368,1120826623,CA +1120826624,1120846431,US +1120846432,1120846463,CA +1120846464,1120854015,US 1120854016,1120862207,CA 1120862208,1120870399,US 1120874496,1120874503,A2 1120874504,1120874511,US 1120874512,1120874519,A2 -1120874520,1120874527,US -1120874528,1120874631,A2 +1120874520,1120874543,US +1120874544,1120874563,A2 +1120874564,1120874575,US +1120874576,1120874587,A2 +1120874588,1120874591,US +1120874592,1120874631,A2 1120874632,1120874639,US -1120874640,1120874655,A2 -1120874656,1120874703,US +1120874640,1120874651,A2 +1120874652,1120874703,US 1120874704,1120874719,CA 1120874720,1120874727,A2 -1120874728,1120874751,US -1120874752,1120874783,A2 -1120874784,1120874815,US -1120874816,1120874855,A2 -1120874856,1120874871,US -1120874872,1120874911,A2 +1120874728,1120874763,US +1120874764,1120874767,A2 +1120874768,1120874775,US +1120874776,1120874779,A2 +1120874780,1120874815,US +1120874816,1120874831,A2 +1120874832,1120874839,US +1120874840,1120874847,A2 +1120874848,1120874879,US +1120874880,1120874887,A2 +1120874888,1120874895,US +1120874896,1120874911,A2 1120874912,1120874935,US 1120874936,1120874943,A2 1120874944,1120874959,CA -1120874960,1120874967,A2 -1120874968,1120874975,US -1120874976,1120874983,A2 -1120874984,1120875007,US -1120875008,1120875263,A2 -1120875264,1120876287,US +1120874960,1120874979,US +1120874980,1120874983,A2 +1120874984,1120876287,US 1120876288,1120876543,A2 1120876544,1120876567,JO 1120876568,1120876575,A2 1120876576,1120876591,JO 1120876592,1120876599,A2 1120876600,1120876607,JO -1120876608,1120876799,A2 +1120876608,1120876615,A2 +1120876616,1120876623,US +1120876624,1120876655,A2 +1120876656,1120876671,US +1120876672,1120876799,A2 1120876800,1120878359,US 1120878360,1120878591,A2 1120878592,1120886783,US @@ -18145,10 +23920,8 @@ 1120894976,1120911359,US 1120911360,1120914415,CA 1120914416,1120914431,AT -1120914432,1120914687,CA -1120914688,1120914719,AG -1120914720,1120918623,CA -1120918624,1120918639,US +1120914432,1120918623,CA +1120918624,1120918639,NA 1120918640,1120919551,CA 1120919552,1121005567,US 1121005568,1121009663,CA @@ -18185,15 +23958,17 @@ 1121247544,1121247551,CA 1121247552,1121247559,VG 1121247560,1121247567,CA -1121247568,1121247583,PA +1121247568,1121247583,MT 1121247584,1121247591,CY 1121247592,1121247615,CA -1121247616,1121247631,PA +1121247616,1121247631,BZ 1121247632,1121247639,AW 1121247640,1121247647,VG 1121247648,1121247663,US 1121247664,1121247695,BZ -1121247696,1121247743,CA +1121247696,1121247711,CA +1121247712,1121247719,AN +1121247720,1121247743,CA 1121247744,1121247775,BZ 1121247776,1121247823,CA 1121247824,1121247855,AG @@ -18207,7 +23982,7 @@ 1121248064,1121248079,AG 1121248080,1121248095,CA 1121248096,1121248111,AG -1121248112,1121248127,CA +1121248112,1121248127,AN 1121248128,1121248135,MT 1121248136,1121248159,CA 1121248160,1121248255,AG @@ -18233,9 +24008,11 @@ 1121248912,1121248919,BZ 1121248920,1121248959,VG 1121248960,1121248983,CA -1121248984,1121248991,AW +1121248984,1121248991,MT 1121248992,1121249023,VG -1121249024,1121249375,CA +1121249024,1121249279,CA +1121249280,1121249343,MT +1121249344,1121249375,CA 1121249376,1121249383,VG 1121249384,1121249407,CA 1121249408,1121249439,AG @@ -18274,52 +24051,55 @@ 1121251048,1121251055,AW 1121251056,1121251071,CA 1121251072,1121251079,GB -1121251080,1121251087,CY -1121251088,1121251103,CA +1121251080,1121251087,CA +1121251088,1121251095,CY +1121251096,1121251103,CA 1121251104,1121251119,BZ 1121251120,1121251135,CA 1121251136,1121251167,AG 1121251168,1121251199,VG 1121251200,1121251263,AW -1121251264,1121251271,CA -1121251272,1121251279,KN -1121251280,1121251295,CA -1121251296,1121251311,IM -1121251312,1121251583,CA +1121251264,1121251279,CA +1121251280,1121251287,BZ +1121251288,1121251311,IM +1121251312,1121251327,BZ +1121251328,1121251583,CA 1121251584,1121251591,BZ -1121251592,1121251607,CA +1121251592,1121251599,MT +1121251600,1121251607,CA 1121251608,1121251615,BZ 1121251616,1121251647,NL -1121251648,1121251663,CA +1121251648,1121251655,BZ +1121251656,1121251663,CA 1121251664,1121251671,MT 1121251672,1121251679,CA 1121251680,1121251687,AG -1121251688,1121251775,BZ -1121251776,1121251791,CA +1121251688,1121251791,BZ 1121251792,1121251807,VG 1121251808,1121251831,CA 1121251832,1121251839,VG 1121251840,1121251847,BZ 1121251848,1121251855,PA -1121251856,1121251871,CA +1121251856,1121251863,AN +1121251864,1121251871,BZ 1121251872,1121251887,VG 1121251888,1121251895,CY 1121251896,1121251903,CA 1121251904,1121251935,AG 1121251936,1121251943,CY -1121251944,1121251951,PA +1121251944,1121251951,MT 1121251952,1121251967,GB -1121251968,1121251983,PA +1121251968,1121251983,MT 1121251984,1121251991,CA 1121251992,1121251999,AG 1121252000,1121252063,CA 1121252064,1121252359,AG 1121252360,1121252367,ZA -1121252368,1121252375,CA -1121252376,1121252383,PA +1121252368,1121252375,GG +1121252376,1121252383,MT 1121252384,1121252391,CR -1121252392,1121252399,CA -1121252400,1121252415,PA +1121252392,1121252399,GG +1121252400,1121252415,MT 1121252416,1121252479,GI 1121252480,1121252607,CR 1121252608,1121252671,AW @@ -18629,9 +24409,9 @@ 1121483760,1121483775,FR 1121483776,1121654863,US 1121654864,1121654879,IN -1121654880,1121655071,US -1121655072,1121655103,RU -1121655104,1121655231,US +1121654880,1121654975,US +1121654976,1121654991,FR +1121654992,1121655231,US 1121655232,1121655263,AR 1121655264,1121655439,US 1121655440,1121655447,IN @@ -18649,8 +24429,8 @@ 1121717432,1121717439,JP 1121717440,1121717759,US 1121717760,1121718015,IT -1121718016,1121721695,US -1121721696,1121721727,CN +1121718016,1121721703,US +1121721704,1121721727,CN 1121721728,1121878015,US 1121878016,1121910783,CA 1121910784,1122074623,US @@ -18659,13 +24439,21 @@ 1122088192,1122091007,CA 1122091008,1122092623,US 1122092624,1122092631,CA -1122092632,1122092695,US -1122092696,1122092703,CA -1122092704,1122092799,US +1122092632,1122092687,US +1122092688,1122092695,GB +1122092696,1122092799,US 1122092800,1122093055,CA 1122093056,1122093807,US 1122093808,1122093815,HK -1122093816,1122103471,US +1122093816,1122101127,US +1122101128,1122101135,SE +1122101136,1122101375,US +1122101376,1122101383,CO +1122101384,1122101431,US +1122101432,1122101439,SG +1122101440,1122101471,US +1122101472,1122101479,VE +1122101480,1122103471,US 1122103472,1122103479,BE 1122103480,1122125996,US 1122125997,1122126004,GB @@ -18722,9 +24510,7 @@ 1122493440,1122494207,PR 1122494208,1122495231,US 1122495232,1122495999,PR -1122496000,1122497407,US -1122497408,1122497471,SV -1122497472,1122497535,US +1122496000,1122497535,US 1122497536,1122498047,PR 1122498048,1122498559,US 1122498560,1122498815,PR @@ -18752,13 +24538,7 @@ 1122667072,1122667135,CH 1122667136,1122759247,US 1122759248,1122759263,CA -1122759264,1123057663,US -1123057664,1123061759,CA -1123061760,1123063807,US -1123063808,1123069951,CA -1123069952,1123071999,US -1123072000,1123074047,CA -1123074048,1123123199,US +1122759264,1123123199,US 1123123200,1123127295,CA 1123127296,1123165247,US 1123165248,1123165311,CA @@ -18775,16 +24555,24 @@ 1123582272,1123582399,US 1123582400,1123582431,DE 1123582432,1123582463,CA -1123582464,1123583455,US -1123583456,1123583519,CY +1123582464,1123583487,US +1123583488,1123583519,CY 1123583520,1123584351,US 1123584352,1123584383,DE 1123584384,1123588063,US 1123588064,1123588095,CY -1123588096,1123590143,US +1123588096,1123589631,US +1123589632,1123589887,DE +1123589888,1123590143,US 1123590144,1123598335,VI 1123598336,1123651583,US -1123651584,1123655679,JM +1123651584,1123651839,JM +1123651840,1123652095,BB +1123652096,1123653119,JM +1123653120,1123653375,BB +1123653376,1123653631,JM +1123653632,1123654655,KY +1123654656,1123655679,JM 1123655680,1123663871,US 1123663872,1123667967,SV 1123667968,1123670015,PR @@ -18878,9 +24666,7 @@ 1125095296,1125095327,AU 1125095328,1125096959,US 1125096960,1125097087,AR -1125097088,1125097119,US -1125097120,1125097151,TH -1125097152,1125097215,US +1125097088,1125097215,US 1125097216,1125097279,AU 1125097280,1125097343,BR 1125097344,1125097407,US @@ -18972,11 +24758,18 @@ 1125120512,1125120767,US 1125120768,1125120799,UY 1125120800,1125120831,IL -1125120832,1125120847,TH -1125120848,1125120863,US +1125120832,1125120863,US 1125120864,1125120895,GB 1125120896,1125121023,RO -1125121024,1125454111,US +1125121024,1125396483,US +1125396484,1125396491,LK +1125396492,1125396999,US +1125397000,1125397007,ES +1125397008,1125398466,US +1125398467,1125398468,LK +1125398469,1125454007,US +1125454008,1125454015,GB +1125454016,1125454111,US 1125454112,1125454119,ES 1125454120,1125454143,US 1125454144,1125454151,GB @@ -19014,7 +24807,8 @@ 1125454544,1125454555,ES 1125454556,1125454587,US 1125454588,1125454591,CA -1125454592,1125455359,US +1125454592,1125454847,A2 +1125454848,1125455359,US 1125455360,1125455363,CA 1125455364,1125455367,US 1125455368,1125455371,GB @@ -19038,7 +24832,7 @@ 1125455516,1125455519,CA 1125455520,1125455523,ES 1125455524,1125455527,US -1125455528,1125455531,ES +1125455528,1125455531,GB 1125455532,1125455535,NO 1125455536,1125455543,US 1125455544,1125455547,ES @@ -19050,9 +24844,12 @@ 1125455568,1125455571,US 1125455572,1125455575,NO 1125455576,1125455579,AN -1125455580,1125456131,US +1125455580,1125455615,US +1125455616,1125455871,A2 +1125455872,1125456131,US 1125456132,1125456135,NO -1125456136,1125456151,US +1125456136,1125456139,A2 +1125456140,1125456151,US 1125456152,1125456155,NL 1125456156,1125456163,US 1125456164,1125456167,NO @@ -19076,13 +24873,14 @@ 1125456420,1125474303,US 1125474304,1125478399,CA 1125478400,1125479199,US -1125479200,1125479231,BR -1125479232,1125493127,US +1125479200,1125479255,BR +1125479256,1125493127,US 1125493128,1125493135,CA 1125493136,1125498879,US 1125498880,1125508095,CA 1125508096,1125508351,PA -1125508352,1125514495,CA +1125508352,1125514239,CA +1125514240,1125514495,CY 1125514496,1125514751,US 1125514752,1125515263,CA 1125515264,1125531647,US @@ -19109,10 +24907,24 @@ 1125541184,1125541215,KY 1125541216,1125541223,CA 1125541224,1125541231,US -1125541232,1125543543,CA +1125541232,1125541391,CA +1125541392,1125541407,US +1125541408,1125541487,CA +1125541488,1125541503,US +1125541504,1125541543,CA +1125541544,1125541551,CN +1125541552,1125541807,CA +1125541808,1125541815,US +1125541816,1125541951,CA +1125541952,1125541959,BM +1125541960,1125543543,CA 1125543544,1125543551,US -1125543552,1125543935,CA -1125543936,1125545983,US +1125543552,1125543687,CA +1125543688,1125543695,US +1125543696,1125543887,CA +1125543888,1125543903,US +1125543904,1125543919,CA +1125543920,1125545983,US 1125548032,1125548291,CA 1125548292,1125548351,US 1125548352,1125550079,CA @@ -19120,21 +24932,31 @@ 1125550336,1125552127,CA 1125552128,1125572607,US 1125572608,1125576703,CA -1125576704,1125613567,US +1125576704,1125595695,US +1125595696,1125595711,NG +1125595712,1125596343,US +1125596344,1125596351,NO +1125596352,1125596479,US +1125596480,1125596503,GB +1125596504,1125613567,US 1125613568,1125617663,CA 1125617664,1125623295,US 1125623296,1125623551,IN -1125623552,1125626111,US -1125626112,1125626367,IN -1125626368,1125626623,US -1125626624,1125626879,IN -1125626880,1125628671,US +1125623552,1125628671,US 1125628672,1125628703,NZ -1125628704,1125642674,US +1125628704,1125641790,US +1125641791,1125641792,CA +1125641793,1125642185,US +1125642186,1125642189,CA +1125642190,1125642301,US +1125642302,1125642303,IN +1125642304,1125642674,US 1125642675,1125642694,BO -1125642695,1126009343,US -1126009344,1126009599,AR -1126009600,1126504223,US +1125642695,1125644770,US +1125644771,1125644771,PK +1125644772,1125645449,US +1125645450,1125645453,CA +1125645454,1126504223,US 1126504224,1126504231,PR 1126504232,1126551767,US 1126551768,1126551775,PR @@ -19224,9 +25046,7 @@ 1128641536,1128792063,CA 1128792064,1128818687,US 1128818688,1128818719,CA -1128818720,1130536959,US -1130536960,1130539007,GU -1130539008,1131440135,US +1128818720,1131440135,US 1131440136,1131440143,PR 1131440144,1131949295,US 1131949296,1131949303,PR @@ -19242,7 +25062,9 @@ 1132910112,1132910143,AU 1132910144,1132947431,US 1132947432,1132947439,CA -1132947440,1133785375,US +1132947440,1132954319,US +1132954320,1132954335,IS +1132954336,1133785375,US 1133785376,1133785383,NE 1133785384,1133785391,US 1133785392,1133785407,GB @@ -19250,9 +25072,11 @@ 1133785472,1133785503,GB 1133785504,1133785567,US 1133785568,1133785599,BE -1133785600,1134029055,US -1134029056,1134029567,A2 -1134029568,1134444543,US +1133785600,1134029311,US +1134029312,1134029567,A2 +1134029568,1134440447,US +1134440448,1134443520,CN +1134443521,1134444543,US 1134444544,1134448639,CA 1134448640,1134545919,US 1134545920,1134545951,BH @@ -19999,7 +25823,9 @@ 1137278976,1137283071,CA 1137283072,1137287167,US 1137287168,1137295359,CA -1137295360,1137369087,US +1137295360,1137341063,US +1137341064,1137341064,GB +1137341065,1137369087,US 1137369088,1137369519,CA 1137369520,1137369535,US 1137369536,1137370111,CA @@ -20011,7 +25837,9 @@ 1137376384,1137376463,CA 1137376464,1137376479,US 1137376480,1137376511,CA -1137376512,1137377311,US +1137376512,1137376639,US +1137376640,1137376703,CA +1137376704,1137377311,US 1137377312,1137377327,DE 1137377328,1137383455,US 1137383456,1137383471,DE @@ -20024,7 +25852,9 @@ 1137524736,1137541119,CA 1137541120,1137623039,US 1137623040,1137639423,PR -1137639424,1137704967,US +1137639424,1137692671,US +1137692672,1137696767,A1 +1137696768,1137704967,US 1137704968,1137705287,CA 1137705288,1137705295,US 1137705296,1137705383,CA @@ -20154,16 +25984,16 @@ 1137711280,1137711287,NL 1137711288,1137711295,US 1137711296,1137711303,NL -1137711304,1137711343,US -1137711344,1137711367,CA +1137711304,1137711335,US +1137711336,1137711367,CA 1137711368,1137711375,US 1137711376,1137711399,CA 1137711400,1137711407,US 1137711408,1137711439,CA 1137711440,1137711455,US 1137711456,1137711471,CA -1137711472,1137711479,US -1137711480,1137711503,CA +1137711472,1137711487,US +1137711488,1137711503,CA 1137711504,1137711511,US 1137711512,1137711559,CA 1137711560,1137711567,US @@ -20188,8 +26018,10 @@ 1137712120,1137712127,CA 1137712128,1137712135,US 1137712136,1137712151,CA -1137712152,1137712207,US -1137712208,1137712223,CA +1137712152,1137712183,US +1137712184,1137712191,CA +1137712192,1137712215,US +1137712216,1137712223,CA 1137712224,1137712239,US 1137712240,1137712255,CA 1137712256,1137712263,US @@ -20198,8 +26030,8 @@ 1137712288,1137712295,CA 1137712296,1137712327,US 1137712328,1137712343,CA -1137712344,1137712351,US -1137712352,1137712383,CA +1137712344,1137712359,US +1137712360,1137712383,CA 1137712384,1137712671,US 1137712672,1137712687,CA 1137712688,1137712711,US @@ -20207,8 +26039,8 @@ 1137712720,1137712759,US 1137712760,1137712767,CA 1137712768,1137712919,US -1137712920,1137712935,CA -1137712936,1137712959,US +1137712920,1137712927,CA +1137712928,1137712959,US 1137712960,1137712975,CA 1137712976,1137713015,US 1137713016,1137713023,CA @@ -20216,7 +26048,9 @@ 1137713072,1137713087,CA 1137713088,1137713103,US 1137713104,1137713111,CA -1137713112,1137724495,US +1137713112,1137713127,US +1137713128,1137713135,CA +1137713136,1137724495,US 1137724496,1137724511,CA 1137724512,1137724543,US 1137724544,1137724575,CA @@ -20240,7 +26074,9 @@ 1137785856,1137786111,HU 1137786112,1137795071,US 1137795072,1137799167,A2 -1137799168,1137840127,US +1137799168,1137803519,US +1137803520,1137803775,CA +1137803776,1137840127,US 1137840128,1137840383,CA 1137840384,1137843711,US 1137843712,1137843775,NO @@ -20296,14 +26132,18 @@ 1137928064,1137928191,PA 1137928192,1137928255,CA 1137928256,1137928319,BZ -1137928320,1137930143,CA +1137928320,1137929727,CA +1137929728,1137929983,IE +1137929984,1137930143,CA 1137930144,1137930159,MT 1137930160,1137934335,CA 1137934336,1137946145,US 1137946146,1137946153,DE 1137946154,1137946585,US 1137946586,1137946593,NO -1137946594,1137953023,US +1137946594,1137950975,US +1137950976,1137951231,CA +1137951232,1137953023,US 1137953024,1137954815,CA 1137954816,1137963007,US 1137963008,1137967103,VI @@ -20315,7 +26155,9 @@ 1138000096,1138001519,US 1138001520,1138001535,CA 1138001536,1138049023,US -1138049024,1138061311,CA +1138049024,1138053631,CA +1138053632,1138053887,US +1138053888,1138061311,CA 1138061312,1138163711,US 1138163712,1138163967,CA 1138163968,1138163975,MA @@ -20353,8 +26195,8 @@ 1138164824,1138164831,CA 1138164832,1138164839,PH 1138164840,1138164863,CA -1138164864,1138165247,US -1138165248,1138165311,CA +1138164864,1138164991,US +1138164992,1138165311,CA 1138165312,1138165319,US 1138165320,1138165431,CA 1138165432,1138165439,LB @@ -20426,12 +26268,18 @@ 1138271088,1138271103,TN 1138271104,1138337167,US 1138337168,1138337183,GB -1138337184,1138417663,US +1138337184,1138337199,US +1138337200,1138337207,SG +1138337208,1138417663,US 1138417664,1138417695,CA 1138417696,1138417727,DE -1138417728,1138421759,US +1138417728,1138419711,US +1138419712,1138419967,DE +1138419968,1138421759,US 1138421760,1138421791,DE -1138421792,1138450959,US +1138421792,1138422271,US +1138422272,1138422527,DE +1138422528,1138450959,US 1138450960,1138450967,JM 1138450968,1138450991,US 1138450992,1138450999,MX @@ -20480,8 +26328,7 @@ 1138454528,1138454543,BR 1138454544,1138454591,US 1138454592,1138454599,CA -1138454600,1138458111,US -1138458112,1138458127,BR +1138454600,1138458127,US 1138458128,1138458143,AU 1138458144,1138458159,IN 1138458160,1138458239,US @@ -20504,10 +26351,7 @@ 1138508608,1138508671,ID 1138508672,1138508735,US 1138508736,1138508767,CR -1138508768,1138508799,US -1138508800,1138509311,PA -1138509312,1138509631,US -1138509632,1138509823,PA +1138508768,1138509823,US 1138509824,1138510847,IN 1138510848,1138510879,CA 1138510880,1138510911,US @@ -20521,9 +26365,13 @@ 1138512640,1138512671,ID 1138512672,1138512895,US 1138512896,1138512927,ID -1138512928,1138548735,US -1138548736,1138556927,CA -1138556928,1138593791,US +1138512928,1138544895,US +1138544896,1138545151,GB +1138545152,1138548991,US +1138548992,1138549247,CA +1138549248,1138553087,US +1138553088,1138553343,CA +1138553344,1138593791,US 1138593792,1138597887,CA 1138597888,1138600447,US 1138600448,1138600703,BE @@ -20539,17 +26387,27 @@ 1138655459,1138655486,CA 1138655487,1138655503,US 1138655504,1138655521,MX -1138655522,1138655609,US +1138655522,1138655581,US +1138655582,1138655583,MX +1138655584,1138655587,US +1138655588,1138655589,MX +1138655590,1138655609,US 1138655610,1138655617,MX -1138655618,1138655695,US +1138655618,1138655629,US +1138655630,1138655637,EG +1138655638,1138655695,US 1138655696,1138655703,MX 1138655704,1138655715,US 1138655716,1138655723,GB -1138655724,1138655841,US +1138655724,1138655817,US +1138655818,1138655825,MX +1138655826,1138655841,US 1138655842,1138655849,CN 1138655850,1138655899,US 1138655900,1138655911,MX -1138655912,1138656077,US +1138655912,1138656025,US +1138656026,1138656033,MX +1138656034,1138656077,US 1138656078,1138656093,MX 1138656094,1138656141,US 1138656142,1138656173,GB @@ -20559,18 +26417,20 @@ 1138656207,1138656222,US 1138656223,1138656230,EG 1138656231,1138656597,US -1138656598,1138656605,EG -1138656606,1138656661,US +1138656598,1138656613,EG +1138656614,1138656661,US 1138656662,1138656669,MA 1138656670,1138656745,US 1138656746,1138656753,AE -1138656754,1138657123,US +1138656754,1138656909,US +1138656910,1138656917,IN +1138656918,1138657101,US +1138657102,1138657109,IN +1138657110,1138657123,US 1138657124,1138657131,EG 1138657132,1138657173,US 1138657174,1138657181,EG -1138657182,1138657197,US -1138657198,1138657205,EG -1138657206,1138657206,US +1138657182,1138657206,US 1138657207,1138657214,EG 1138657215,1138657222,IN 1138657223,1138657235,US @@ -20586,8 +26446,9 @@ 1138657781,1138658057,US 1138658058,1138658123,GB 1138658124,1138658131,US -1138658132,1138658157,EG -1138658158,1138658175,US +1138658132,1138658163,EG +1138658164,1138658167,US +1138658168,1138658175,EG 1138658176,1138658302,GB 1138658303,1138658431,US 1138658432,1138658496,PK @@ -20595,24 +26456,30 @@ 1138658498,1138658525,PK 1138658526,1138659081,US 1138659082,1138659207,ES -1138659208,1138659369,US +1138659208,1138659307,US +1138659308,1138659315,EG +1138659316,1138659369,US 1138659370,1138659401,GB 1138659402,1138659465,US 1138659466,1138659497,GB 1138659498,1138659593,US 1138659594,1138659609,LK 1138659610,1138659642,GB -1138659643,1138659673,US +1138659643,1138659650,ID +1138659651,1138659673,US 1138659674,1138659681,MA -1138659682,1138659705,US +1138659682,1138659697,US +1138659698,1138659705,ID 1138659706,1138659713,CA 1138659714,1138659723,US 1138659724,1138659731,ID -1138659732,1138659789,US +1138659732,1138659781,US +1138659782,1138659789,NZ 1138659790,1138659797,ID 1138659798,1138659805,US 1138659806,1138659813,ID -1138659814,1138659823,US +1138659814,1138659821,LK +1138659822,1138659823,US 1138659824,1138659831,ID 1138659832,1138659849,US 1138659850,1138659857,MA @@ -20623,7 +26490,9 @@ 1138659984,1138659999,EG 1138660000,1138660035,US 1138660036,1138660043,IN -1138660044,1138660105,US +1138660044,1138660050,US +1138660051,1138660058,PH +1138660059,1138660105,US 1138660106,1138660137,GB 1138660138,1138660169,US 1138660170,1138660177,MA @@ -20634,8 +26503,7 @@ 1138660218,1138660225,IN 1138660226,1138660233,US 1138660234,1138660241,EG -1138660242,1138660242,US -1138660243,1138660270,CA +1138660242,1138660270,US 1138660271,1138660310,GB 1138660311,1138660311,US 1138660312,1138660333,GB @@ -20655,13 +26523,12 @@ 1138660806,1138660821,EG 1138660822,1138660873,US 1138660874,1138660881,EG -1138660882,1138660889,US -1138660890,1138660897,EG -1138660898,1138660921,US +1138660882,1138660921,US 1138660922,1138660929,EG 1138660930,1138660958,US 1138660959,1138660966,MA -1138660967,1138660982,US +1138660967,1138660974,VE +1138660975,1138660982,US 1138660983,1138660990,EG 1138660991,1138661002,US 1138661003,1138661010,LK @@ -20681,7 +26548,7 @@ 1138661308,1138661417,US 1138661418,1138661425,LK 1138661426,1138661457,US -1138661458,1138661465,IN +1138661458,1138661465,EG 1138661466,1138661521,US 1138661522,1138661529,EG 1138661530,1138661553,US @@ -20694,23 +26561,29 @@ 1138661670,1138661677,IN 1138661678,1138661713,US 1138661714,1138661721,EG -1138661722,1138661769,US +1138661722,1138661729,US +1138661730,1138661737,ID +1138661738,1138661761,US +1138661762,1138661769,ID 1138661770,1138661777,MA 1138661778,1138661821,US 1138661822,1138661829,MA 1138661830,1138661913,US 1138661914,1138661954,EG -1138661955,1138661985,US -1138661986,1138661993,EG -1138661994,1138662057,US -1138662058,1138662107,EG +1138661955,1138662057,US +1138662058,1138662089,EG +1138662090,1138662097,ID +1138662098,1138662105,US +1138662106,1138662107,EG 1138662108,1138662169,US 1138662170,1138662233,EG 1138662234,1138662273,US 1138662274,1138662309,EG 1138662310,1138662333,US 1138662334,1138662353,GB -1138662354,1138662409,US +1138662354,1138662369,US +1138662370,1138662393,GB +1138662394,1138662409,US 1138662410,1138662473,EG 1138662474,1138662505,GB 1138662506,1138662537,US @@ -20723,10 +26596,8 @@ 1138662794,1138662801,ID 1138662802,1138662841,US 1138662842,1138662849,GB -1138662850,1138662966,US -1138662967,1138662982,EG -1138662983,1138663037,US -1138663038,1138663166,GB +1138662850,1138663021,US +1138663022,1138663166,GB 1138663167,1138712575,US 1138712576,1138713583,CA 1138713584,1138713599,MY @@ -20766,7 +26637,13 @@ 1138950144,1139146751,US 1139146752,1139154943,GT 1139154944,1139167231,JM -1139167232,1139179519,US +1139167232,1139167743,US +1139167744,1139168895,PR +1139168896,1139169279,US +1139169280,1139170047,PR +1139170048,1139171327,US +1139171328,1139175423,GT +1139175424,1139179519,US 1139179520,1139188223,CA 1139188224,1139188479,GB 1139188480,1139188735,CA @@ -20797,9 +26674,7 @@ 1142204104,1142204111,PR 1142204112,1142204327,US 1142204328,1142204335,PR -1142204336,1145053455,US -1145053456,1145053471,NG -1145053472,1145056703,US +1142204336,1145056703,US 1145056704,1145056719,CO 1145056720,1145188351,US 1145188352,1145192447,CA @@ -20807,21 +26682,29 @@ 1145249792,1145257983,CA 1145257984,1145259007,US 1145259008,1145259071,IN -1145259072,1145259263,US +1145259072,1145259247,US +1145259248,1145259251,AE +1145259252,1145259263,US 1145259264,1145259327,IN -1145259328,1145260031,US +1145259328,1145259423,US +1145259424,1145259455,AE +1145259456,1145260031,US 1145260032,1145260095,IN -1145260096,1145261055,US +1145260096,1145260623,US +1145260624,1145260631,IN +1145260632,1145260751,US +1145260752,1145260767,AE +1145260768,1145261055,US 1145261056,1145261119,IN 1145261120,1145261311,US 1145261312,1145261375,IN -1145261376,1145307135,US +1145261376,1145261407,US +1145261408,1145261439,AE +1145261440,1145261647,US +1145261648,1145261663,AE +1145261664,1145307135,US 1145307136,1145311231,CA -1145311232,1145315559,US -1145315560,1145315567,GB -1145315568,1145331711,US -1145331712,1145331967,DK -1145331968,1145333031,US +1145311232,1145333031,US 1145333032,1145333039,IT 1145333040,1145333191,US 1145333192,1145333199,CN @@ -20832,19 +26715,16 @@ 1145333248,1145333327,US 1145333328,1145333343,CN 1145333344,1145333351,US -1145333352,1145333367,CN +1145333352,1145333359,CN +1145333360,1145333367,US 1145333368,1145333375,PA 1145333376,1145333503,BD 1145333504,1145333863,US 1145333864,1145333871,EG 1145333872,1145333879,US 1145333880,1145333903,CN -1145333904,1145333911,US -1145333912,1145333919,CN -1145333920,1145334055,US -1145334056,1145334063,CN -1145334064,1145334143,US -1145334144,1145334167,CN +1145333904,1145334151,US +1145334152,1145334167,CN 1145334168,1145334175,US 1145334176,1145334223,CN 1145334224,1145334231,US @@ -20852,17 +26732,19 @@ 1145334240,1145335103,US 1145335104,1145335135,NL 1145335136,1145335167,US -1145335168,1145335199,CN -1145335200,1145335215,US -1145335216,1145335231,CN -1145335232,1145376767,US +1145335168,1145335183,CN +1145335184,1145335215,US +1145335216,1145335223,CN +1145335224,1145376767,US 1145376768,1145380863,CA 1145380864,1145405439,US 1145405440,1145413631,CA 1145413632,1145421823,US 1145421824,1145430015,CA 1145430016,1145475071,US -1145475072,1145479167,CA +1145475072,1145476887,CA +1145476888,1145476895,US +1145476896,1145479167,CA 1145479168,1145483583,US 1145483584,1145483591,VG 1145483592,1145484031,US @@ -20871,7 +26753,9 @@ 1145503744,1145520127,CA 1145520128,1145552895,US 1145552896,1145556991,CA -1145556992,1150043135,US +1145556992,1145567839,US +1145567840,1145567871,CN +1145567872,1150043135,US 1150043136,1150044159,VA 1150044160,1150046207,US 1150046208,1150050303,JP @@ -20917,13 +26801,22 @@ 1151896088,1151896127,CA 1151896128,1151896191,US 1151896192,1151896319,CA -1151896320,1151943999,US +1151896320,1151896575,US +1151896576,1151896831,CA +1151896832,1151943999,US 1151944000,1151944063,HK 1151944064,1151945759,US 1151945760,1151945791,IE 1151945792,1152073727,US 1152073728,1152077823,CA -1152077824,1152581631,US +1152077824,1152081919,US +1152081920,1152082175,AU +1152082176,1152082303,IN +1152082304,1152082431,US +1152082432,1152082687,AU +1152082688,1152084735,US +1152084736,1152084991,IN +1152084992,1152581631,US 1152581632,1152614399,CA 1152614400,1152778239,US 1152778240,1152843775,CA @@ -20940,15 +26833,17 @@ 1156130016,1156130303,CA 1156130304,1156131327,US 1156131328,1156131583,CA -1156131584,1156259839,US -1156259840,1156265983,CA +1156131584,1156263935,US +1156263936,1156265983,CA 1156265984,1156296703,US 1156296704,1156300799,CA 1156300800,1157670431,US 1157670432,1157670463,CA 1157670464,1157713663,US 1157713664,1157713791,CA -1157713792,1157755247,US +1157713792,1157753087,US +1157753088,1157753343,GB +1157753344,1157755247,US 1157755248,1157755263,GR 1157755264,1157758207,US 1157758208,1157758463,RU @@ -21233,11 +27128,13 @@ 1158732877,1158732884,GB 1158732885,1158736241,US 1158736242,1158736249,IN -1158736250,1158741290,US -1158741291,1158741298,CA -1158741299,1158774783,US -1158774784,1158791167,CA -1158791168,1158799359,BM +1158736250,1158774783,US +1158774784,1158776947,CA +1158776948,1158776951,US +1158776952,1158791167,CA +1158791168,1158794239,BM +1158794240,1158794495,US +1158794496,1158799359,BM 1158799360,1158807551,CA 1158807552,1158940823,US 1158940824,1158940831,ES @@ -21257,9 +27154,7 @@ 1158942272,1158942279,IE 1158942280,1158942311,US 1158942312,1158942319,CA -1158942320,1158943271,US -1158943272,1158943279,TH -1158943280,1158943423,US +1158942320,1158943423,US 1158943424,1158943431,PK 1158943432,1158943535,US 1158943536,1158943543,CA @@ -21284,7 +27179,9 @@ 1158945096,1158945103,TH 1158945104,1158945111,RU 1158945112,1158945119,CA -1158945120,1158945271,US +1158945120,1158945127,US +1158945128,1158945135,MX +1158945136,1158945271,US 1158945272,1158945287,CA 1158945288,1158945319,US 1158945320,1158945335,CA @@ -21321,7 +27218,9 @@ 1158946640,1158946647,IL 1158946648,1158946711,US 1158946712,1158946719,HK -1158946720,1158947087,US +1158946720,1158946771,US +1158946772,1158946772,MX +1158946773,1158947087,US 1158947088,1158947095,ZA 1158947096,1158947391,US 1158947392,1158947399,CA @@ -21354,9 +27253,9 @@ 1158949288,1158949295,CA 1158949296,1158949407,US 1158949408,1158949415,ZA -1158949416,1158949775,US -1158949776,1158949783,GB -1158949784,1158950319,US +1158949416,1158950105,US +1158950106,1158950107,CA +1158950108,1158950319,US 1158950320,1158950327,CA 1158950328,1158950335,US 1158950336,1158950351,CA @@ -21379,20 +27278,28 @@ 1158951552,1158951559,NL 1158951560,1158951575,US 1158951576,1158951583,CA -1158951584,1158951743,US +1158951584,1158951627,US +1158951628,1158951631,CA +1158951632,1158951743,US 1158951744,1158951751,IN 1158951752,1158951839,US 1158951840,1158951855,CA -1158951856,1158952743,US +1158951856,1158952711,US +1158952712,1158952719,IN +1158952720,1158952743,US 1158952744,1158952751,FI 1158952752,1158952815,US 1158952816,1158952823,CA 1158952824,1158952895,US 1158952896,1158952903,IL -1158952904,1158954815,US +1158952904,1158953503,US +1158953504,1158953511,NL +1158953512,1158954815,US 1158954816,1158954823,GB 1158954824,1158954831,CA -1158954832,1158955039,US +1158954832,1158955015,US +1158955016,1158955023,CA +1158955024,1158955039,US 1158955040,1158955047,GB 1158955048,1158956063,US 1158956064,1158956079,NL @@ -21405,22 +27312,25 @@ 1158957472,1158957647,US 1158957648,1158957655,AU 1158957656,1158957663,PE -1158957664,1158957695,US -1158957696,1158957703,TH -1158957704,1158958295,US +1158957664,1158957801,US +1158957802,1158957803,NL +1158957804,1158958295,US 1158958296,1158958303,AG 1158958304,1158958311,ES 1158958312,1158958367,US 1158958368,1158958375,CA 1158958376,1158958591,US 1158958592,1158958599,ZA -1158958600,1158958671,US +1158958600,1158958607,IL +1158958608,1158958671,US 1158958672,1158958679,SA 1158958680,1158958719,US 1158958720,1158958751,CA 1158958752,1158959031,US 1158959032,1158959039,CA -1158959040,1158959135,US +1158959040,1158959079,US +1158959080,1158959081,BG +1158959082,1158959135,US 1158959136,1158959151,BD 1158959152,1158959679,US 1158959680,1158959687,CR @@ -21442,9 +27352,9 @@ 1158961256,1158961263,ES 1158961264,1158961775,US 1158961776,1158961783,CA -1158961784,1158961823,US -1158961824,1158961855,BD -1158961856,1158962175,US +1158961784,1158962023,US +1158962024,1158962027,IL +1158962028,1158962175,US 1158962176,1158962183,GB 1158962184,1158962287,US 1158962288,1158962295,ZA @@ -21452,7 +27362,9 @@ 1158962592,1158962607,GB 1158962608,1158962615,US 1158962616,1158962623,GB -1158962624,1158963271,US +1158962624,1158962671,US +1158962672,1158962675,IN +1158962676,1158963271,US 1158963272,1158963279,IE 1158963280,1158963335,US 1158963336,1158963343,SE @@ -21464,7 +27376,9 @@ 1158963728,1158963735,GB 1158963736,1158964103,US 1158964104,1158964111,IN -1158964112,1158964255,US +1158964112,1158964189,US +1158964190,1158964191,CA +1158964192,1158964255,US 1158964256,1158964263,IN 1158964264,1158964287,US 1158964288,1158964319,CA @@ -21507,7 +27421,9 @@ 1158966888,1158966895,EG 1158966896,1158966911,US 1158966912,1158966919,MX -1158966920,1158966991,US +1158966920,1158966959,US +1158966960,1158966967,MX +1158966968,1158966991,US 1158966992,1158966999,CA 1158967000,1158967263,US 1158967264,1158967279,TH @@ -21568,9 +27484,12 @@ 1159262492,1159262727,US 1159262728,1159262731,DE 1159262732,1159262735,RU -1159262736,1159262743,US -1159262744,1159262747,RU -1159262748,1159266935,US +1159262736,1159262739,US +1159262740,1159262743,DE +1159262744,1159262751,RU +1159262752,1159262967,US +1159262968,1159262975,RU +1159262976,1159266935,US 1159266936,1159266943,PR 1159266944,1159269119,US 1159269120,1159269375,AR @@ -21578,15 +27497,15 @@ 1159274496,1159274751,GB 1159274752,1159276799,US 1159276800,1159277055,A2 -1159277056,1159281151,US -1159281152,1159281407,HK -1159281408,1159281679,US +1159277056,1159281679,US 1159281680,1159281695,HK 1159281696,1159281727,US 1159281728,1159281743,HK 1159281744,1159281919,US -1159281920,1159282175,HK -1159282176,1159292807,US +1159281920,1159282175,GB +1159282176,1159290655,US +1159290656,1159290687,CA +1159290688,1159292807,US 1159292808,1159292815,AU 1159292816,1159293343,US 1159293344,1159293359,KR @@ -21600,9 +27519,7 @@ 1159314080,1159314087,TR 1159314088,1159314367,US 1159314368,1159314383,BR -1159314384,1159314687,US -1159314688,1159314703,MX -1159314704,1159314943,US +1159314384,1159314943,US 1159314944,1159315199,CR 1159315200,1159318015,US 1159318016,1159318047,GB @@ -21612,12 +27529,7 @@ 1159348224,1159356415,CA 1159356416,1159421951,US 1159421952,1159430143,CA -1159430144,1159438335,US -1159438720,1159438847,US -1159440384,1159440511,US -1159441024,1159441151,US -1159441344,1159441375,CA -1159442432,1159480439,US +1159430144,1159480439,US 1159480440,1159480447,CA 1159480448,1159481167,US 1159481168,1159481183,VG @@ -21652,7 +27564,9 @@ 1159517120,1159517151,CA 1159517152,1159517183,US 1159517184,1159517327,CA -1159517328,1159517439,US +1159517328,1159517343,US +1159517344,1159517359,CA +1159517360,1159517439,US 1159517440,1159517599,CA 1159517600,1159517631,US 1159517632,1159517663,CA @@ -21677,9 +27591,7 @@ 1159521824,1159521855,US 1159521856,1159522031,CA 1159522032,1159522047,US -1159522048,1159522063,CA -1159522064,1159522071,US -1159522072,1159522095,CA +1159522048,1159522095,CA 1159522096,1159522111,US 1159522112,1159522143,CA 1159522144,1159522167,US @@ -21696,9 +27608,7 @@ 1159525376,1159526399,CA 1159526400,1159527935,US 1159527936,1159528191,CA -1159528192,1159530671,US -1159530672,1159530679,MO -1159530680,1159532103,US +1159528192,1159532103,US 1159532104,1159532111,MO 1159532112,1159560207,US 1159560208,1159560215,MO @@ -21706,8 +27616,8 @@ 1159643440,1159643455,TR 1159643456,1159643471,JP 1159643472,1159656487,US -1159656488,1159656511,BR -1159656512,1159657023,US +1159656488,1159656495,BR +1159656496,1159657023,US 1159657024,1159657039,AU 1159657040,1159657071,US 1159657072,1159657087,NZ @@ -21715,7 +27625,9 @@ 1159659064,1159659079,IN 1159659080,1159668479,US 1159668480,1159668735,CA -1159668736,1159694591,US +1159668736,1159673471,US +1159673472,1159673503,CA +1159673504,1159694591,US 1159694592,1159694847,CA 1159694848,1159700479,US 1159700480,1159725055,CA @@ -21735,8 +27647,7 @@ 1159997584,1159997591,BB 1159997592,1159997623,US 1159997624,1159997631,SC -1159997632,1159997639,GB -1159997640,1159998575,US +1159997632,1159998575,US 1159998576,1159998583,UG 1159998584,1159998703,US 1159998704,1159998711,RS @@ -21814,7 +27725,8 @@ 1160406480,1160406487,A2 1160406488,1160408095,US 1160408096,1160408111,GD -1160408112,1160408319,US +1160408112,1160408127,ES +1160408128,1160408319,US 1160408320,1160408575,CA 1160408576,1160409423,US 1160409424,1160409439,PT @@ -21879,10 +27791,25 @@ 1160437696,1160437759,IN 1160437760,1160486911,US 1160486912,1160487423,AU -1160487424,1160503295,US +1160487424,1160496615,US +1160496616,1160496623,CA +1160496624,1160503295,US 1160503296,1160503871,A2 1160503872,1160503903,US -1160503904,1160507391,A2 +1160503904,1160504159,A2 +1160504160,1160504175,US +1160504176,1160504191,A2 +1160504192,1160504207,AU +1160504208,1160504287,A2 +1160504288,1160504303,US +1160504304,1160504319,A2 +1160504320,1160504383,US +1160504384,1160504511,A2 +1160504512,1160504543,NP +1160504544,1160504575,AF +1160504576,1160505343,A2 +1160505344,1160505855,AU +1160505856,1160507391,A2 1160507392,1160542207,US 1160542208,1160542239,LB 1160542240,1160543327,US @@ -21897,7 +27824,23 @@ 1160563200,1160563711,MP 1160563712,1160609791,US 1160609792,1160610815,MX -1160610816,1160667135,US +1160610816,1160660111,US +1160660112,1160660119,GB +1160660120,1160661639,US +1160661640,1160661647,GB +1160661648,1160662487,US +1160662488,1160662495,GB +1160662496,1160662743,US +1160662744,1160662751,GB +1160662752,1160663679,US +1160663680,1160663711,HK +1160663712,1160665623,US +1160665624,1160665631,GB +1160665632,1160665807,US +1160665808,1160665815,GB +1160665816,1160667087,US +1160667088,1160667095,GB +1160667096,1160667135,US 1160667136,1160675327,CA 1160675328,1160677015,US 1160677016,1160677023,AR @@ -22033,11 +27976,16 @@ 1160921088,1160925183,AG 1160925184,1160938879,US 1160938880,1160938887,NL -1160938888,1160941463,US +1160938888,1160938895,US +1160938896,1160938911,CY +1160938912,1160941463,US 1160941464,1160941471,RU -1160941472,1160941535,US +1160941472,1160941503,US +1160941504,1160941519,CY +1160941520,1160941535,US 1160941536,1160941567,CA 1160941568,1160945663,US +1160945664,1160953855,CA 1160953856,1160973439,US 1160973440,1160973503,MX 1160973504,1160973863,US @@ -22079,6 +28027,7 @@ 1161314160,1161363455,US 1161363456,1161367551,CA 1161367552,1161416703,US +1161416704,1161420799,CA 1161420800,1161421151,AG 1161421152,1161421167,MS 1161421168,1161421311,AG @@ -22120,103 +28069,149 @@ 1161586688,1161586943,PA 1161586944,1161617407,US 1161617408,1161625599,CA -1161625600,1161627695,US -1161627696,1161627703,AR -1161627704,1161627727,US +1161625600,1161627663,US +1161627664,1161627679,SE +1161627680,1161627687,US +1161627688,1161627695,SI +1161627696,1161627703,US +1161627704,1161627711,DE +1161627712,1161627727,US 1161627728,1161627743,AR -1161627744,1161627759,US +1161627744,1161627751,US +1161627752,1161627759,PL 1161627760,1161627775,GB -1161627776,1161627791,US -1161627792,1161627799,AZ -1161627800,1161627807,US -1161627808,1161627815,HR +1161627776,1161627783,US +1161627784,1161627791,GB +1161627792,1161627807,US +1161627808,1161627815,SI 1161627816,1161627823,US 1161627824,1161627831,AU 1161627832,1161627839,US -1161627840,1161627863,AR -1161627864,1161627871,US -1161627872,1161627879,GB +1161627840,1161627847,AR +1161627848,1161627855,US +1161627856,1161627863,AR +1161627864,1161627871,CA +1161627872,1161627879,SI 1161627880,1161627895,US -1161627896,1161627903,AZ +1161627896,1161627903,CA 1161627904,1161628447,US 1161628448,1161628455,NL -1161628456,1161628479,US +1161628456,1161628463,GB +1161628464,1161628479,US 1161628480,1161628487,GB -1161628488,1161628607,US +1161628488,1161628519,US +1161628520,1161628527,PL +1161628528,1161628607,US 1161628608,1161628639,AR 1161628640,1161628647,IN -1161628648,1161628655,CA -1161628656,1161628663,US +1161628648,1161628663,US 1161628664,1161628671,AR -1161628672,1161629223,US +1161628672,1161629199,US +1161629200,1161629215,SI +1161629216,1161629223,US 1161629224,1161629231,GB -1161629232,1161629239,AZ -1161629240,1161629327,US -1161629328,1161629335,RO -1161629336,1161629343,NL -1161629344,1161629391,US -1161629392,1161629399,RU -1161629400,1161629519,US +1161629232,1161629239,US +1161629240,1161629247,PL +1161629248,1161629263,US +1161629264,1161629271,PL +1161629272,1161629343,US +1161629344,1161629375,FI +1161629376,1161629383,CA +1161629384,1161629391,AR +1161629392,1161629399,GB +1161629400,1161629407,IL +1161629408,1161629415,GB +1161629416,1161629423,SI +1161629424,1161629431,US +1161629432,1161629439,MY +1161629440,1161629519,US 1161629520,1161629527,GB 1161629528,1161629535,MY -1161629536,1161629551,GB -1161629552,1161629695,US +1161629536,1161629583,US +1161629584,1161629599,GB +1161629600,1161629607,PL +1161629608,1161629615,US +1161629616,1161629631,GB +1161629632,1161629663,US +1161629664,1161629671,AU +1161629672,1161629695,US 1161629696,1161629951,PL -1161629952,1161630335,US -1161630336,1161630343,PL -1161630344,1161630399,US -1161630400,1161630431,GB -1161630432,1161630727,US -1161630728,1161630735,EG -1161630736,1161630743,AU +1161629952,1161630223,US +1161630224,1161630231,NL +1161630232,1161630247,US +1161630248,1161630255,HR +1161630256,1161630263,NL +1161630264,1161630271,AR +1161630272,1161630335,US +1161630336,1161630343,AR +1161630344,1161630351,IL +1161630352,1161630367,US +1161630368,1161630375,GB +1161630376,1161630383,US +1161630384,1161630391,AR +1161630392,1161630431,GB +1161630432,1161630439,US +1161630440,1161630447,HR +1161630448,1161630455,US +1161630456,1161630463,NL +1161630464,1161630727,US +1161630728,1161630735,PL +1161630736,1161630743,US 1161630744,1161630751,GB 1161630752,1161630767,US 1161630768,1161630775,IL -1161630776,1161630791,US -1161630792,1161630799,AR -1161630800,1161630823,US -1161630824,1161630831,AR -1161630832,1161630855,US -1161630856,1161630863,DE -1161630864,1161630911,US +1161630776,1161630807,US +1161630808,1161630815,BG +1161630816,1161630823,US +1161630824,1161630831,GB +1161630832,1161630895,US +1161630896,1161630903,DK +1161630904,1161630911,US 1161630912,1161630919,KW 1161630920,1161630927,US 1161630928,1161630935,GB -1161630936,1161630967,US -1161630968,1161630975,IL +1161630936,1161630943,SI +1161630944,1161630951,US +1161630952,1161630959,TR +1161630960,1161630967,US +1161630968,1161630975,CZ 1161630976,1161630983,US 1161630984,1161630991,CA 1161630992,1161630999,US 1161631000,1161631007,AU -1161631008,1161631015,IL -1161631016,1161631039,US +1161631008,1161631039,US 1161631040,1161631047,GB -1161631048,1161631079,US -1161631080,1161631087,AR -1161631088,1161631127,US +1161631048,1161631055,IN +1161631056,1161631079,US +1161631080,1161631087,SI +1161631088,1161631103,US +1161631104,1161631111,KW +1161631112,1161631127,US 1161631128,1161631135,BG 1161631136,1161631159,US 1161631160,1161631167,CA 1161631168,1161631183,US 1161631184,1161631199,GB -1161631200,1161631215,AR +1161631200,1161631207,US +1161631208,1161631215,AR 1161631216,1161631223,GB -1161631224,1161631471,US +1161631224,1161631431,US +1161631432,1161631439,KW +1161631440,1161631471,US 1161631472,1161631479,AR -1161631480,1161631487,US -1161631488,1161631495,AR +1161631480,1161631495,US 1161631496,1161631503,CA 1161631504,1161631511,US 1161631512,1161631519,BG -1161631520,1161631535,US +1161631520,1161631535,GB 1161631536,1161631543,AR 1161631544,1161631551,BR 1161631552,1161631591,US 1161631592,1161631599,BR -1161631600,1161631631,US +1161631600,1161631623,US +1161631624,1161631631,KW 1161631632,1161631639,BR -1161631640,1161631647,US -1161631648,1161631655,AU +1161631640,1161631655,US 1161631656,1161631663,AR 1161631664,1161631703,US 1161631704,1161631711,NL @@ -22224,50 +28219,76 @@ 1161632520,1161632527,BG 1161632528,1161632551,US 1161632552,1161632559,BR -1161632560,1161632631,US +1161632560,1161632575,GB +1161632576,1161632631,US 1161632632,1161632639,GB 1161632640,1161632655,US 1161632656,1161632663,GB -1161632664,1161632719,US +1161632664,1161632687,US +1161632688,1161632703,GB +1161632704,1161632719,US 1161632720,1161632735,GB -1161632736,1161633023,US +1161632736,1161632943,US +1161632944,1161632959,CA +1161632960,1161633023,US 1161633024,1161633055,CA 1161633056,1161633215,US 1161633216,1161633231,EE -1161633232,1161634063,US +1161633232,1161633239,US +1161633240,1161633247,AU +1161633248,1161633263,US +1161633264,1161633271,PL +1161633272,1161633543,US +1161633544,1161633551,AR +1161633552,1161633559,US +1161633560,1161633567,IL +1161633568,1161633583,PL +1161633584,1161633631,US +1161633632,1161633639,CA +1161633640,1161634055,US +1161634056,1161634063,IN 1161634064,1161634071,CA 1161634072,1161634127,US 1161634128,1161634135,AR -1161634136,1161634199,US +1161634136,1161634143,PH +1161634144,1161634175,US +1161634176,1161634191,PL +1161634192,1161634199,US 1161634200,1161634207,NZ -1161634208,1161634239,US +1161634208,1161634223,US +1161634224,1161634231,VN +1161634232,1161634239,US 1161634240,1161634247,GB -1161634248,1161634271,US -1161634272,1161634287,CH -1161634288,1161634335,US -1161634336,1161634352,PL -1161634353,1161634495,US +1161634248,1161634335,US +1161634336,1161634351,PL +1161634352,1161634495,US 1161634496,1161634503,GB -1161634504,1161634943,US +1161634504,1161634519,US +1161634520,1161634527,BG +1161634528,1161634543,GB +1161634544,1161634815,US +1161634816,1161634831,PL +1161634832,1161634943,US 1161634944,1161634959,PL -1161634960,1161634975,US -1161634976,1161635007,PL -1161635008,1161635855,US +1161634960,1161635007,US +1161635008,1161635071,KW +1161635072,1161635855,US 1161635856,1161635871,BE -1161635872,1161636063,US -1161636064,1161636095,IL +1161635872,1161635887,PL +1161635888,1161636095,US 1161636096,1161636127,GB 1161636128,1161636159,US 1161636160,1161636223,IL -1161636224,1161636415,US -1161636416,1161636447,PL -1161636448,1161636463,US +1161636224,1161636463,US 1161636464,1161636471,EG 1161636472,1161636495,US 1161636496,1161636503,CA -1161636504,1161637159,US +1161636504,1161637135,US +1161637136,1161637143,CA +1161637144,1161637159,US 1161637160,1161637167,NZ -1161637168,1161637199,US +1161637168,1161637175,GB +1161637176,1161637199,US 1161637200,1161637207,GB 1161637208,1161637215,US 1161637216,1161637223,PL @@ -22275,7 +28296,9 @@ 1161637296,1161637303,AR 1161637304,1161637343,US 1161637344,1161637351,RU -1161637352,1161637671,US +1161637352,1161637655,US +1161637656,1161637663,IL +1161637664,1161637671,US 1161637672,1161637679,IL 1161637680,1161637695,AR 1161637696,1161637775,US @@ -22286,7 +28309,11 @@ 1161638968,1161638975,GB 1161638976,1161638991,US 1161638992,1161638999,PL -1161639000,1161639063,US +1161639000,1161639007,US +1161639008,1161639023,BG +1161639024,1161639039,US +1161639040,1161639047,CA +1161639048,1161639063,US 1161639064,1161639071,PL 1161639072,1161639087,US 1161639088,1161639095,CA @@ -22301,30 +28328,42 @@ 1161639520,1161639527,PL 1161639528,1161639575,US 1161639576,1161639583,BG -1161639584,1161639703,US +1161639584,1161639687,US +1161639688,1161639695,KW +1161639696,1161639703,US 1161639704,1161639711,BZ -1161639712,1161639719,PL -1161639720,1161639727,US +1161639712,1161639727,US 1161639728,1161639743,GB 1161639744,1161639831,US 1161639832,1161639839,AR -1161639840,1161639887,US +1161639840,1161639879,US +1161639880,1161639887,NL 1161639888,1161639895,AT 1161639896,1161639959,US 1161639960,1161639967,GB -1161639968,1161640023,US +1161639968,1161639991,US +1161639992,1161639999,HR +1161640000,1161640015,US +1161640016,1161640023,PL 1161640024,1161640031,AR 1161640032,1161640095,US 1161640096,1161640127,AR 1161640128,1161640767,US -1161640768,1161640791,GB +1161640768,1161640783,RO +1161640784,1161640791,GB 1161640792,1161640847,US 1161640848,1161640863,PL -1161640864,1161641887,US +1161640864,1161640895,AR +1161640896,1161641375,US +1161641376,1161641383,KW +1161641384,1161641463,US +1161641464,1161641471,IN +1161641472,1161641887,US 1161641888,1161641911,KW 1161641912,1161641919,US 1161641920,1161641983,PL -1161641984,1161642007,US +1161641984,1161641999,US +1161642000,1161642007,IN 1161642008,1161642015,NL 1161642016,1161642039,GB 1161642040,1161642175,US @@ -22350,59 +28389,96 @@ 1161647104,1161647119,PL 1161647120,1161647135,GB 1161647136,1161647167,PL -1161647168,1161650175,US +1161647168,1161649407,US +1161649408,1161649663,AR +1161649664,1161650175,US 1161650176,1161650183,HR -1161650184,1161650191,IL +1161650184,1161650191,AR 1161650192,1161650199,US 1161650200,1161650207,BG -1161650208,1161650303,US +1161650208,1161650215,US +1161650216,1161650223,FI +1161650224,1161650239,CA +1161650240,1161650303,US 1161650304,1161650311,NL 1161650312,1161650327,US -1161650328,1161650335,AR -1161650336,1161650359,US -1161650360,1161650367,RO -1161650368,1161650687,US -1161650688,1161650695,AR -1161650696,1161650703,BR -1161650704,1161650823,US +1161650328,1161650343,AR +1161650344,1161650359,US +1161650360,1161650367,IL +1161650368,1161650375,ES +1161650376,1161650391,US +1161650392,1161650399,CA +1161650400,1161650415,US +1161650416,1161650423,PL +1161650424,1161650799,US +1161650800,1161650815,SI +1161650816,1161650823,US 1161650824,1161650831,AU 1161650832,1161650847,US 1161650848,1161650863,AR -1161650864,1161650927,US -1161650928,1161650935,HR -1161650936,1161651055,US +1161650864,1161650879,US +1161650880,1161650895,GB +1161650896,1161650927,US +1161650928,1161650935,SI +1161650936,1161650943,US +1161650944,1161650951,SI +1161650952,1161650967,US +1161650968,1161650975,SI +1161650976,1161651055,US 1161651056,1161651071,PL -1161651072,1161651103,US +1161651072,1161651079,SI +1161651080,1161651095,US +1161651096,1161651103,HR 1161651104,1161651135,GB -1161651136,1161651487,US +1161651136,1161651143,BG +1161651144,1161651183,US +1161651184,1161651199,GB +1161651200,1161651487,US 1161651488,1161651503,GB -1161651504,1161651535,US +1161651504,1161651511,US +1161651512,1161651519,GB +1161651520,1161651535,CA 1161651536,1161651543,PL -1161651544,1161651599,US -1161651600,1161651607,AR +1161651544,1161651575,US +1161651576,1161651583,CA +1161651584,1161651599,US +1161651600,1161651607,RS 1161651608,1161651647,US 1161651648,1161651711,PL -1161651712,1161651775,US +1161651712,1161651743,US +1161651744,1161651775,GB 1161651776,1161651807,AR -1161651808,1161651967,US +1161651808,1161651839,US +1161651840,1161651855,MY +1161651856,1161651967,US 1161651968,1161651975,CH 1161651976,1161652007,US 1161652008,1161652015,GB 1161652016,1161652095,US 1161652096,1161652103,CY -1161652104,1161652127,US -1161652128,1161652135,AR -1161652136,1161652143,US +1161652104,1161652143,US 1161652144,1161652151,GB -1161652152,1161653023,US +1161652152,1161652991,US +1161652992,1161653023,CA 1161653024,1161653055,AR -1161653056,1161653503,US +1161653056,1161653087,US +1161653088,1161653119,PL +1161653120,1161653503,US 1161653504,1161653759,CA 1161653760,1161653791,US 1161653792,1161653799,SI 1161653800,1161653831,US -1161653832,1161653839,HR -1161653840,1161657615,US +1161653832,1161653839,SI +1161653840,1161653847,US +1161653848,1161653855,SI +1161653856,1161653887,US +1161653888,1161653951,SE +1161653952,1161654239,US +1161654240,1161654247,GB +1161654248,1161654263,US +1161654264,1161654271,SI +1161654272,1161657607,US +1161657608,1161657615,NE 1161657616,1161657623,CA 1161657624,1161657679,US 1161657680,1161657695,PL @@ -22427,14 +28503,19 @@ 1161791322,1161791330,CA 1161791331,1161791381,US 1161791382,1161791386,CA -1161791387,1161795979,US +1161791387,1161794468,US +1161794469,1161794472,ZA +1161794473,1161794649,US +1161794650,1161794654,ZA +1161794655,1161795979,US 1161795980,1161795983,CA 1161795984,1161818111,US 1161818112,1161822207,CA -1161822208,1161832799,US -1161832800,1161832831,ZA -1161832832,1161832863,DE -1161832864,1161833855,US +1161822208,1161832767,US +1161832768,1161832831,BR +1161832832,1161833759,US +1161833760,1161833791,TR +1161833792,1161833855,US 1161833856,1161833887,FR 1161833888,1161833919,US 1161833920,1161833951,UA @@ -22444,7 +28525,8 @@ 1161835342,1161835353,GR 1161835354,1161836031,US 1161836032,1161836063,CA -1161836064,1161836159,US +1161836064,1161836095,JP +1161836096,1161836159,US 1161836160,1161836191,BR 1161836192,1161836287,US 1161836288,1161836319,RS @@ -22452,7 +28534,7 @@ 1161836384,1161836415,CY 1161836416,1161836447,BR 1161836448,1161836479,US -1161836480,1161836511,UA +1161836480,1161836511,GB 1161836512,1161837567,US 1161837568,1161837823,JP 1161837824,1161838548,US @@ -22487,7 +28569,13 @@ 1161891528,1161891535,CA 1161891536,1161891543,US 1161891544,1161891551,CA -1161891552,1161901647,US +1161891552,1161898989,US +1161898990,1161898990,A1 +1161898991,1161900863,US +1161900864,1161900895,A1 +1161900896,1161901023,US +1161901024,1161901055,A1 +1161901056,1161901647,US 1161901648,1161901655,VN 1161901656,1161925631,US 1161925632,1161925887,EC @@ -22535,7 +28623,7 @@ 1162383072,1162393759,US 1162393760,1162393767,IN 1162393768,1162394463,US -1162394464,1162394471,IE +1162394464,1162394471,GB 1162394472,1162401519,US 1162401520,1162401527,IN 1162401528,1162408455,US @@ -22558,7 +28646,9 @@ 1162461184,1162461695,BB 1162461696,1162462207,GD 1162462208,1162462975,BB -1162462976,1162463999,VC +1162462976,1162463054,VC +1162463055,1162463055,BB +1162463056,1162463999,VC 1162464000,1162465279,BB 1162465280,1162465535,GD 1162465536,1162470911,BB @@ -22581,7 +28671,8 @@ 1162811648,1162812159,US 1162812160,1162812415,DO 1162812416,1162813439,BS -1162813440,1162821631,US +1162813440,1162817535,AN +1162817536,1162821631,GT 1162821632,1162823679,PR 1162823680,1162825727,GT 1162825728,1162827775,US @@ -22591,18 +28682,28 @@ 1162836224,1162836735,AN 1162836736,1162836991,US 1162836992,1162838015,BS -1162838016,1162870783,US +1162838016,1162840063,PR +1162840064,1162853375,US +1162853376,1162854399,PR +1162854400,1162858495,JM +1162858496,1162862591,HN +1162862592,1162870783,US 1162870784,1162871295,BB 1162871296,1162879999,LC 1162880000,1162882559,DM 1162882560,1162883839,GD 1162883840,1162887167,BB -1162887168,1162925983,US +1162887168,1162895359,US +1162895360,1162899455,A1 +1162899456,1162925983,US 1162925984,1162926015,AU 1162926016,1162926071,US 1162926072,1162926079,AU 1162926080,1163395071,US -1163395072,1163395839,A2 +1163395072,1163395823,A2 +1163395824,1163395827,NP +1163395828,1163395831,AF +1163395832,1163395839,A2 1163395840,1163395847,BD 1163395848,1163395855,ID 1163395856,1163395863,BD @@ -22666,17 +28767,21 @@ 1163397576,1163397583,BD 1163397584,1163397663,A2 1163397664,1163397695,BD -1163397696,1163397855,A2 +1163397696,1163397791,A2 +1163397792,1163397807,AF +1163397808,1163397855,A2 1163397856,1163397887,US 1163397888,1163398143,NP 1163398144,1163398239,A2 1163398240,1163398303,BD 1163398304,1163398367,A2 -1163398368,1163399039,BD +1163398368,1163398399,BD +1163398400,1163398655,US +1163398656,1163399039,BD 1163399040,1163399103,A2 1163399104,1163399295,BD 1163399296,1163399679,A2 -1163399680,1163399807,BD +1163399680,1163399807,US 1163399808,1163399935,A2 1163399936,1163400063,US 1163400064,1163400447,A2 @@ -22718,29 +28823,26 @@ 1163403264,1163407359,US 1163407360,1163411455,CA 1163411456,1163468799,US -1163468800,1163472895,PR -1163472896,1163526143,US -1163526144,1163526463,CA -1163526464,1163526911,US -1163526912,1163527007,CA -1163527008,1163527023,US +1163468800,1163469055,PR +1163469056,1163469311,US +1163469312,1163472895,PR +1163472896,1163477695,US +1163477696,1163477727,JP +1163477728,1163478047,US +1163478048,1163478063,JP +1163478064,1163526143,US +1163526144,1163526471,CA +1163526472,1163526655,US +1163526656,1163527023,CA 1163527024,1163527039,BV 1163527040,1163527059,CA 1163527060,1163527071,US 1163527072,1163527103,CA 1163527104,1163527135,US -1163527136,1163527143,CA -1163527144,1163527151,US -1163527152,1163527167,CA -1163527168,1163527743,US -1163527744,1163527775,CA -1163527776,1163527791,US -1163527792,1163528191,CA -1163528192,1163528703,US -1163528704,1163529215,CA +1163527136,1163529215,CA 1163529216,1163530239,US -1163530240,1163530399,CA -1163530400,1163530431,US +1163530240,1163530415,CA +1163530416,1163530431,US 1163530432,1163530639,CA 1163530640,1163530655,US 1163530656,1163530839,CA @@ -22753,20 +28855,21 @@ 1163530960,1163530967,US 1163530968,1163533023,CA 1163533024,1163533055,US -1163533056,1163533511,CA -1163533512,1163533519,US -1163533520,1163533551,CA +1163533056,1163533551,CA 1163533552,1163533567,PA 1163533568,1163533695,CA 1163533696,1163533727,US -1163533728,1163533791,CA +1163533728,1163533759,CA +1163533760,1163533791,AU 1163533792,1163533807,US -1163533808,1163533823,CA -1163533824,1163534015,US +1163533808,1163533951,CA +1163533952,1163534015,US 1163534016,1163534031,CA 1163534032,1163534047,US 1163534048,1163534063,CA -1163534064,1163534143,US +1163534064,1163534071,US +1163534072,1163534079,MX +1163534080,1163534143,US 1163534144,1163534175,CA 1163534176,1163534255,US 1163534256,1163534311,CA @@ -22791,30 +28894,25 @@ 1163542848,1163542855,US 1163542856,1163542919,CA 1163542920,1163542927,US -1163542928,1163542975,CA -1163542976,1163543007,US -1163543008,1163543687,CA +1163542928,1163543687,CA 1163543688,1163543695,FI -1163543696,1163543839,CA -1163543840,1163543847,US +1163543696,1163543823,CA +1163543824,1163543847,US 1163543848,1163543983,CA 1163543984,1163543991,US 1163543992,1163544319,CA 1163544320,1163544327,US -1163544328,1163544383,CA +1163544328,1163544335,GB +1163544336,1163544383,CA 1163544384,1163544423,US 1163544424,1163544575,CA 1163544576,1163544607,US -1163544608,1163544671,CA -1163544672,1163544687,US -1163544688,1163544751,CA +1163544608,1163544751,CA 1163544752,1163544759,SG 1163544760,1163544783,CA 1163544784,1163544799,US -1163544800,1163545215,CA -1163545216,1163545247,FI -1163545248,1163545279,CA -1163545280,1163545303,US +1163544800,1163545295,CA +1163545296,1163545303,US 1163545304,1163545311,CA 1163545312,1163545343,BV 1163545344,1163545351,US @@ -22824,68 +28922,51 @@ 1163545472,1163545599,US 1163545600,1163545631,CA 1163545632,1163545663,GB -1163545664,1163545903,CA +1163545664,1163545695,CA +1163545696,1163545727,US +1163545728,1163545903,CA 1163545904,1163545911,US 1163545912,1163545983,CA 1163545984,1163546015,US 1163546016,1163546039,CA 1163546040,1163546047,NZ -1163546048,1163546079,CA -1163546080,1163546111,US -1163546112,1163546119,CA +1163546048,1163546119,CA 1163546120,1163546127,US 1163546128,1163546135,CA -1163546136,1163546175,US -1163546176,1163546199,CA -1163546200,1163546239,US -1163546240,1163546367,CA -1163546368,1163546375,US -1163546376,1163546391,CA -1163546392,1163546423,US +1163546136,1163546143,US +1163546144,1163546199,CA +1163546200,1163546207,US +1163546208,1163546399,CA +1163546400,1163546423,US 1163546424,1163546447,CA 1163546448,1163546455,US 1163546456,1163546527,CA 1163546528,1163546535,US -1163546536,1163546543,CA -1163546544,1163546559,US +1163546536,1163546551,CA +1163546552,1163546559,US 1163546560,1163547455,CA 1163547456,1163547463,US 1163547464,1163547487,CA 1163547488,1163547519,US -1163547520,1163547527,CA -1163547528,1163547539,US -1163547540,1163547551,CA -1163547552,1163547567,US +1163547520,1163547535,CA +1163547536,1163547539,US +1163547540,1163547567,CA 1163547568,1163547583,VG -1163547584,1163547647,CA -1163547648,1163547903,US -1163547904,1163547951,CA -1163547952,1163547999,US -1163548000,1163549007,CA -1163549008,1163549023,US -1163549024,1163549183,CA -1163549184,1163549695,US -1163549696,1163550239,CA -1163550240,1163550255,US -1163550256,1163550271,CA -1163550272,1163550303,US -1163550304,1163550335,CA +1163547584,1163547951,CA +1163547952,1163547983,US +1163547984,1163550335,CA 1163550336,1163550351,US 1163550352,1163550367,CA 1163550368,1163550375,US 1163550376,1163550383,CA 1163550384,1163550399,US -1163550400,1163550591,CA -1163550592,1163550655,US -1163550656,1163550783,CA +1163550400,1163550783,CA 1163550784,1163550815,US 1163550816,1163551071,CA 1163551072,1163551087,US 1163551088,1163551423,CA 1163551424,1163551439,US -1163551440,1163551455,CA -1163551456,1163551487,US -1163551488,1163551623,CA +1163551440,1163551623,CA 1163551624,1163551631,CN 1163551632,1163551663,CA 1163551664,1163551679,US @@ -22899,7 +28980,9 @@ 1163552576,1163552607,PA 1163552608,1163552679,CA 1163552680,1163552687,US -1163552688,1163553855,CA +1163552688,1163552695,CA +1163552696,1163552703,US +1163552704,1163553855,CA 1163553856,1163553871,US 1163553872,1163553919,CA 1163553920,1163553935,BV @@ -22921,9 +29004,7 @@ 1163558029,1163560191,US 1163560192,1163560447,CA 1163560448,1163560959,US -1163560960,1163561727,CA -1163561728,1163561983,FI -1163561984,1163562063,CA +1163560960,1163562063,CA 1163562064,1163562079,US 1163562080,1163562119,CA 1163562120,1163562127,SG @@ -22933,8 +29014,8 @@ 1163562232,1163562239,US 1163562240,1163563007,CA 1163563008,1163564031,US -1163564032,1163564799,CA -1163564800,1163566047,US +1163564032,1163565055,CA +1163565056,1163566047,US 1163566048,1163566079,CA 1163566080,1163567103,US 1163567104,1163568127,CA @@ -22943,9 +29024,7 @@ 1163570496,1163571199,US 1163571200,1163571983,CA 1163571984,1163571999,US -1163572000,1163572031,CA -1163572032,1163572063,BE -1163572064,1163572175,CA +1163572000,1163572175,CA 1163572176,1163572183,US 1163572184,1163572687,CA 1163572688,1163572703,US @@ -22961,15 +29040,15 @@ 1163576704,1163576799,US 1163576800,1163576959,CA 1163576960,1163576991,US -1163576992,1163577087,CA -1163577088,1163577151,US -1163577152,1163577327,CA +1163576992,1163577327,CA 1163577328,1163577375,US 1163577376,1163577407,CA 1163577408,1163577423,US 1163577424,1163577439,CA -1163577440,1163577871,US -1163577872,1163577919,CA +1163577440,1163577471,US +1163577472,1163577503,CA +1163577504,1163577863,US +1163577864,1163577919,CA 1163577920,1163577951,US 1163577952,1163578111,CA 1163578112,1163578191,US @@ -22977,9 +29056,7 @@ 1163578240,1163578255,US 1163578256,1163578271,CA 1163578272,1163578287,US -1163578288,1163578335,CA -1163578336,1163578351,US -1163578352,1163578711,CA +1163578288,1163578711,CA 1163578712,1163578715,US 1163578716,1163579119,CA 1163579120,1163579127,US @@ -23005,17 +29082,19 @@ 1163582160,1163582167,FI 1163582168,1163582183,CA 1163582184,1163582191,US -1163582192,1163583487,CA -1163583488,1163585855,US -1163585856,1163585887,CA -1163585888,1163585889,US +1163582192,1163583231,CA +1163583232,1163585199,US +1163585200,1163585215,CA +1163585216,1163585855,US +1163585856,1163585871,CA +1163585872,1163585889,US 1163585890,1163585905,GB 1163585906,1163586740,US 1163586741,1163586743,CA 1163586744,1163586744,NL 1163586745,1163586745,GB -1163586746,1163587839,US -1163587840,1163588095,CA +1163586746,1163587583,US +1163587584,1163588095,CA 1163588096,1163588111,US 1163588112,1163588159,CA 1163588160,1163588199,US @@ -23024,12 +29103,14 @@ 1163588216,1163588223,US 1163588224,1163588607,CA 1163588608,1163588608,US -1163588609,1163588655,CA -1163588656,1163588671,US -1163588672,1163588703,CA -1163588704,1163588711,US -1163588712,1163588727,CA -1163588728,1163588863,US +1163588609,1163588695,CA +1163588696,1163588703,US +1163588704,1163588727,CA +1163588728,1163588799,US +1163588800,1163588815,CA +1163588816,1163588831,US +1163588832,1163588847,CA +1163588848,1163588863,US 1163588864,1163589631,CA 1163589632,1163870575,US 1163870576,1163870583,CN @@ -23037,18 +29118,40 @@ 1163876472,1163876479,PA 1163876480,1163878399,US 1163878400,1163878407,CN -1163878408,1167321959,US +1163878408,1167319111,US +1167319112,1167319119,ZA +1167319120,1167319255,US +1167319256,1167319263,CA +1167319264,1167319359,US +1167319360,1167319367,CA +1167319368,1167320071,US +1167320072,1167320079,CA +1167320080,1167321447,US +1167321448,1167321455,CA +1167321456,1167321959,US 1167321960,1167321967,GB -1167321968,1167322695,US +1167321968,1167322255,US +1167322256,1167322263,CA +1167322264,1167322695,US 1167322696,1167322703,IN -1167322704,1167323799,US -1167323800,1167323807,IN -1167323808,1167323823,US +1167322704,1167323543,US +1167323544,1167323551,CA +1167323552,1167323823,US 1167323824,1167323831,IN -1167323832,1167325935,US +1167323832,1167324047,US +1167324048,1167324055,CA +1167324056,1167324287,US +1167324288,1167324295,GB +1167324296,1167324311,US +1167324312,1167324319,CA +1167324320,1167325727,US +1167325728,1167325735,CA +1167325736,1167325935,US 1167325936,1167325951,CA 1167325952,1167326207,US -1167326208,1167326271,IN +1167326208,1167326231,IN +1167326232,1167326239,CA +1167326240,1167326271,IN 1167326272,1167326303,US 1167326304,1167326335,IN 1167326336,1167326367,SI @@ -23058,7 +29161,9 @@ 1167326440,1167326447,IN 1167326448,1167326983,US 1167326984,1167326991,IN -1167326992,1167327111,US +1167326992,1167327023,US +1167327024,1167327031,CA +1167327032,1167327111,US 1167327112,1167327119,IN 1167327120,1167327207,US 1167327208,1167327215,IN @@ -23072,7 +29177,9 @@ 1168138240,1168146431,JM 1168146432,1168211967,US 1168211968,1168220159,CA -1168220160,1168318719,US +1168220160,1168281599,US +1168281600,1168281855,EG +1168281856,1168318719,US 1168318720,1168318975,CA 1168318976,1168321535,US 1168321536,1168321791,CA @@ -23090,7 +29197,9 @@ 1168394512,1168394751,CA 1168394752,1168420863,US 1168420864,1168424959,CA -1168424960,1168474111,US +1168424960,1168453631,US +1168453632,1168457727,A1 +1168457728,1168474111,US 1168474112,1168506879,CA 1168508928,1168510975,US 1168510976,1168515071,CA @@ -23112,8 +29221,7 @@ 1168936960,1168949247,CA 1168949248,1168949503,US 1168949504,1168949759,CA -1168949760,1168949791,US -1168949792,1168949823,BB +1168949760,1168949823,US 1168949824,1168949855,CA 1168949856,1168950271,US 1168950272,1168951823,CA @@ -23127,9 +29235,13 @@ 1168952888,1168952895,CA 1168952896,1168952959,US 1168952960,1168953343,CA -1168953344,1168954075,US +1168953344,1168954015,US +1168954016,1168954047,IN +1168954048,1168954075,US 1168954076,1168954079,CA -1168954080,1168955647,US +1168954080,1168954623,US +1168954624,1168954687,IN +1168954688,1168955647,US 1168955648,1168956159,CA 1168956160,1168957439,US 1168957440,1168958047,CA @@ -23144,12 +29256,15 @@ 1168958212,1168958215,CA 1168958216,1168958223,US 1168958224,1168958231,SG -1168958232,1168958423,CA +1168958232,1168958239,US +1168958240,1168958303,CA +1168958304,1168958335,US +1168958336,1168958423,CA 1168958424,1168958463,US 1168958464,1168958479,CA 1168958480,1168958495,US -1168958496,1168958527,FR -1168958528,1168960543,US +1168958496,1168958559,IN +1168958560,1168960543,US 1168960544,1168960591,CA 1168960592,1168960607,US 1168960608,1168960623,CA @@ -23219,96 +29334,196 @@ 1170457664,1170458063,US 1170458064,1170458079,DE 1170458080,1170461055,US -1170461056,1170461439,CO -1170461440,1170461695,US +1170461056,1170461695,CO 1170461696,1170462719,IL -1170462720,1170472959,US +1170462720,1170465791,US +1170465792,1170466047,CY +1170466048,1170466767,US +1170466768,1170466783,MQ +1170466784,1170466815,US +1170466816,1170467839,IL +1170467840,1170468351,DO +1170468352,1170469055,US +1170469056,1170469071,VG +1170469072,1170470911,US +1170470912,1170471167,ES +1170471168,1170471375,US +1170471376,1170471391,UY +1170471392,1170471903,US +1170471904,1170471919,BE +1170471920,1170472703,US +1170472704,1170472959,VG 1170472960,1170481151,CA 1170481152,1170489343,US 1170489344,1170497535,CA 1170497536,1170505727,US 1170505728,1170522111,CA -1170522112,1170539329,US +1170522112,1170538495,US +1170538496,1170538751,KH +1170538752,1170539329,US 1170539330,1170539330,CN -1170539331,1170539331,US +1170539331,1170539331,TR 1170539332,1170539332,CA -1170539333,1170539393,US -1170539394,1170539394,TR -1170539395,1170539399,US -1170539400,1170539400,TR -1170539401,1170539416,US -1170539417,1170539417,TR -1170539418,1170539463,US -1170539464,1170539464,CN -1170539465,1170539466,US -1170539467,1170539467,IE -1170539468,1170539523,US -1170539524,1170539524,IE -1170539525,1170539586,US -1170539587,1170539587,FR -1170539588,1170539590,US +1170539333,1170539333,RO +1170539334,1170539460,US +1170539461,1170539461,PK +1170539462,1170539522,US +1170539523,1170539523,AU +1170539524,1170539586,US +1170539587,1170539587,SC +1170539588,1170539589,US +1170539590,1170539590,SA 1170539591,1170539591,CN -1170539592,1170539592,US -1170539593,1170539593,CN -1170539594,1170539652,US +1170539592,1170539592,AU +1170539593,1170539652,US 1170539653,1170539653,GB -1170539654,1170539714,US +1170539654,1170539712,US +1170539713,1170539713,CN +1170539714,1170539714,US 1170539715,1170539715,PK 1170539716,1170539776,US -1170539777,1170539777,FR -1170539778,1170539778,US -1170539779,1170539779,FR -1170539780,1170539969,US +1170539777,1170539777,SC +1170539778,1170539778,CN +1170539779,1170539779,SC +1170539780,1170539780,US +1170539781,1170539781,PR +1170539782,1170539841,US +1170539842,1170539842,BD +1170539843,1170539843,MY +1170539844,1170539910,US +1170539911,1170539911,KH +1170539912,1170539969,US 1170539970,1170539970,KH -1170539971,1170540038,US +1170539971,1170540036,US +1170540037,1170540037,TR +1170540038,1170540038,US 1170540039,1170540039,PH -1170540040,1170540097,US -1170540098,1170540098,TR -1170540099,1170540104,US -1170540105,1170540105,PK -1170540106,1170540231,US +1170540040,1170540096,US +1170540097,1170540098,TR +1170540099,1170540105,US +1170540106,1170540106,CN +1170540107,1170540163,US +1170540164,1170540164,RO +1170540165,1170540230,US +1170540231,1170540231,KR 1170540232,1170540232,CN -1170540233,1170540289,US -1170540290,1170540290,CN -1170540291,1170544199,US +1170540233,1170540288,US +1170540289,1170540290,CN +1170540291,1170540291,US +1170540292,1170540292,TR +1170540293,1170540294,US +1170540295,1170540295,CN +1170540296,1170540353,US +1170540354,1170540354,CN +1170540355,1170540359,US +1170540360,1170540360,CN +1170540361,1170540361,CA +1170540362,1170540369,US +1170540370,1170540370,CN +1170540371,1170540371,US +1170540372,1170540372,CN +1170540373,1170540416,US +1170540417,1170540417,CN +1170540418,1170540428,US +1170540429,1170540429,TR +1170540430,1170540480,US +1170540481,1170540481,TR +1170540482,1170540486,US +1170540487,1170540487,TR +1170540488,1170540491,US +1170540492,1170540494,TR +1170540495,1170540496,US +1170540497,1170540497,CZ +1170540498,1170540503,US +1170540504,1170540504,BD +1170540505,1170540608,US +1170540609,1170540609,CN +1170540610,1170540616,US +1170540617,1170540617,TR +1170540618,1170542863,US +1170542864,1170542871,CN +1170542872,1170543747,US +1170543748,1170543751,PR +1170543752,1170544127,US +1170544128,1170544191,CN +1170544192,1170544195,US +1170544196,1170544199,BD 1170544200,1170544207,TR -1170544208,1170544255,US -1170544256,1170544383,IN +1170544208,1170544239,US +1170544240,1170544247,CN +1170544248,1170544251,US +1170544252,1170544255,CN +1170544256,1170544383,PK 1170544384,1170544387,US 1170544388,1170544391,BD -1170544392,1170544431,US +1170544392,1170544395,TR +1170544396,1170544431,US 1170544432,1170544439,CN 1170544440,1170544443,AU -1170544444,1170544511,US -1170544512,1170544575,SE -1170544576,1170544639,US -1170544640,1170544767,MY -1170544768,1170547455,US -1170547456,1170547711,CA -1170547712,1170553087,US +1170544444,1170544807,US +1170544808,1170544815,CN +1170544816,1170544831,US +1170544832,1170544959,CN +1170544960,1170544983,US +1170544984,1170544987,CN +1170544988,1170544991,US +1170544992,1170545023,SC +1170545024,1170545055,US +1170545056,1170545087,CN +1170545088,1170545407,US +1170545408,1170545439,TR +1170545440,1170545471,SC +1170545472,1170545595,US +1170545596,1170545599,CN +1170545600,1170552607,US +1170552608,1170552611,CN +1170552612,1170552959,US +1170552960,1170553023,CN +1170553024,1170553087,US 1170553088,1170553151,GB -1170553152,1170553215,FR -1170553216,1170553343,PK -1170553344,1170553407,CN -1170553408,1170553431,US +1170553152,1170553279,US +1170553280,1170553407,CN +1170553408,1170553423,US +1170553424,1170553427,CN +1170553428,1170553431,US 1170553432,1170553435,TR -1170553436,1170553439,CA -1170553440,1170553471,US +1170553436,1170553439,US +1170553440,1170553471,TR 1170553472,1170553535,PK -1170553536,1170553599,CN -1170553600,1170553855,US +1170553536,1170553599,US +1170553600,1170553603,TR +1170553604,1170553615,US +1170553616,1170553619,SA +1170553620,1170553623,TR +1170553624,1170553627,US +1170553628,1170553631,TR +1170553632,1170553635,US +1170553636,1170553643,SA +1170553644,1170553651,US +1170553652,1170553655,TR +1170553656,1170553659,BD +1170553660,1170553663,US +1170553664,1170553667,SA +1170553668,1170553675,US +1170553676,1170553679,SC +1170553680,1170553683,US +1170553684,1170553687,CN +1170553688,1170553855,US 1170553856,1170553983,MY -1170553984,1170554367,US +1170553984,1170554047,CN +1170554048,1170554367,US 1170554368,1170554431,CN 1170554432,1170554463,US 1170554464,1170554479,CN 1170554480,1170554483,TR 1170554484,1170554487,BD 1170554488,1170554495,CN -1170554496,1170554559,US -1170554560,1170554623,CN -1170554624,1170573375,US -1170573376,1170573439,RU +1170554496,1170554683,US +1170554684,1170554687,TR +1170554688,1170573375,US +1170573376,1170573391,RU +1170573392,1170573392,US +1170573393,1170573439,RU 1170573440,1175977983,US 1175977984,1176068167,CA 1176068168,1176068175,US @@ -23318,14 +29533,16 @@ 1176069008,1176069023,US 1176069024,1176101023,CA 1176101024,1176101039,US -1176101040,1176101063,CA -1176101064,1176101071,US -1176101072,1176108551,CA +1176101040,1176108551,CA 1176108552,1176108559,US 1176108560,1176502271,CA 1176502272,1176512151,US 1176512152,1176512159,GB -1176512160,1176513879,US +1176512160,1176512703,US +1176512704,1176512711,ZA +1176512712,1176513479,US +1176513480,1176513487,CA +1176513488,1176513879,US 1176513880,1176513887,GB 1176513888,1176514271,US 1176514272,1176514303,IN @@ -23352,18 +29569,35 @@ 1176620488,1176620511,US 1176620512,1176620743,CA 1176620744,1176620783,US -1176620784,1176620967,CA +1176620784,1176620863,CA +1176620864,1176620879,US +1176620880,1176620967,CA 1176620968,1176620975,US 1176620976,1176620991,CA 1176620992,1176620999,US -1176621000,1176623359,CA +1176621000,1176621599,CA +1176621600,1176621631,US +1176621632,1176621695,CA +1176621696,1176621727,US +1176621728,1176621759,CA +1176621760,1176621823,US +1176621824,1176621871,CA +1176621872,1176621887,US +1176621888,1176622047,CA +1176622048,1176622079,US +1176622080,1176622335,GB +1176622336,1176622431,CA +1176622432,1176622455,US +1176622456,1176622559,CA +1176622560,1176622591,US +1176622592,1176623359,CA 1176623360,1176623487,US 1176623488,1176623567,CA 1176623568,1176623583,US 1176623584,1176623615,CA 1176623616,1176623871,US -1176623872,1176629287,CA -1176629288,1176629295,US +1176623872,1176629279,CA +1176629280,1176629295,US 1176629296,1176629303,CA 1176629304,1176629311,US 1176629312,1176629343,CA @@ -23371,13 +29605,14 @@ 1176629376,1176629439,GI 1176629440,1176629455,CA 1176629456,1176629463,GI -1176629464,1176629471,CA -1176629472,1176629503,US +1176629464,1176629503,US 1176629504,1176629519,CA 1176629520,1176629535,NZ 1176629536,1176629631,CA 1176629632,1176629727,US -1176629728,1176631295,CA +1176629728,1176630527,CA +1176630528,1176631039,US +1176631040,1176631295,CA 1176631296,1176631551,NL 1176631552,1176662015,US 1176662016,1176666111,CA @@ -23389,21 +29624,59 @@ 1176682624,1176682631,JM 1176682632,1176682639,GB 1176682640,1176682687,TR -1176682688,1176684383,US +1176682688,1176683047,US +1176683048,1176683055,BR +1176683056,1176683135,US +1176683136,1176683143,HK +1176683144,1176683311,US +1176683312,1176683319,RO +1176683320,1176683607,US +1176683608,1176683615,PE +1176683616,1176683663,US +1176683664,1176683671,PE +1176683672,1176684383,US 1176684384,1176684399,DE -1176684400,1176686591,US -1176686592,1176686599,PK -1176686600,1176686623,US +1176684400,1176686623,US 1176686624,1176686631,IL 1176686632,1176686719,US 1176686720,1176686751,CA 1176686752,1176686847,US 1176686848,1176687103,AN -1176687104,1176687887,US +1176687104,1176687519,US +1176687520,1176687551,JP +1176687552,1176687775,US +1176687776,1176687807,MX +1176687808,1176687839,US +1176687840,1176687871,GB +1176687872,1176687887,US 1176687888,1176687895,AU 1176687896,1176687903,US 1176687904,1176687911,MX -1176687912,1176689023,US +1176687912,1176688383,US +1176688384,1176688391,GB +1176688392,1176688399,US +1176688400,1176688407,CA +1176688408,1176688439,US +1176688440,1176688447,CZ +1176688448,1176688471,US +1176688472,1176688479,RU +1176688480,1176688487,US +1176688488,1176688495,AU +1176688496,1176688503,BG +1176688504,1176688511,SG +1176688512,1176688567,US +1176688568,1176688575,DE +1176688576,1176688631,US +1176688632,1176688639,TR +1176688640,1176688767,US +1176688768,1176688799,NZ +1176688800,1176688831,CN +1176688832,1176688863,US +1176688864,1176688895,GB +1176688896,1176688927,US +1176688928,1176688959,GB +1176688960,1176688991,NL +1176688992,1176689023,US 1176689024,1176689055,CA 1176689056,1176689087,MY 1176689088,1176689183,US @@ -23437,9 +29710,14 @@ 1176690432,1176690463,US 1176690464,1176690495,DO 1176690496,1176690527,CA -1176690528,1176690559,US +1176690528,1176690535,FR +1176690536,1176690543,US +1176690544,1176690551,RU +1176690552,1176690559,US 1176690560,1176690591,IN -1176690592,1176690815,US +1176690592,1176690791,US +1176690792,1176690799,CA +1176690800,1176690815,US 1176690816,1176690847,BR 1176690848,1176691007,US 1176691008,1176691039,ES @@ -23476,9 +29754,12 @@ 1176692352,1176692383,CA 1176692384,1176692415,US 1176692416,1176692447,ID -1176692448,1176692583,US +1176692448,1176692575,US +1176692576,1176692583,TR 1176692584,1176692591,RO -1176692592,1176692639,US +1176692592,1176692599,FR +1176692600,1176692607,SE +1176692608,1176692639,US 1176692640,1176692671,GR 1176692672,1176692703,DE 1176692704,1176692735,GB @@ -23489,7 +29770,11 @@ 1176692928,1176692959,GB 1176692960,1176692991,US 1176692992,1176693023,CN -1176693024,1176693215,US +1176693024,1176693063,US +1176693064,1176693071,AU +1176693072,1176693079,US +1176693080,1176693087,GB +1176693088,1176693215,US 1176693216,1176693247,FI 1176693248,1176693567,US 1176693568,1176693599,GB @@ -23520,21 +29805,59 @@ 1176694656,1176694943,US 1176694944,1176694975,GB 1176694976,1176695007,CA -1176695008,1176695295,US +1176695008,1176695231,US +1176695232,1176695263,DE +1176695264,1176695295,US 1176695296,1176695303,TR 1176695304,1176695327,US 1176695328,1176695335,CA -1176695336,1176696447,US +1176695336,1176695359,US +1176695360,1176695391,JP +1176695392,1176695487,US +1176695488,1176695519,AU +1176695520,1176695551,FR +1176695552,1176695583,CA +1176695584,1176695615,US +1176695616,1176695647,HR +1176695648,1176695655,GB +1176695656,1176695663,US +1176695664,1176695671,HR +1176695672,1176695807,US +1176695808,1176695839,VN +1176695840,1176695967,US +1176695968,1176695999,CA +1176696000,1176696031,US +1176696032,1176696063,CY +1176696064,1176696447,US 1176696448,1176696463,CA -1176696464,1176697223,US +1176696464,1176697015,US +1176697016,1176697023,TR +1176697024,1176697159,US +1176697160,1176697167,AT +1176697168,1176697223,US 1176697224,1176697231,FR 1176697232,1176697239,US 1176697240,1176697247,IL -1176697248,1176698615,US +1176697248,1176697407,US +1176697408,1176697415,IL +1176697416,1176697423,US +1176697424,1176697439,CA +1176697440,1176697815,US +1176697816,1176697823,DE +1176697824,1176697951,US +1176697952,1176697959,CA +1176697960,1176697967,DE +1176697968,1176697975,US +1176697976,1176697983,AU +1176697984,1176698535,US +1176698536,1176698543,CA +1176698544,1176698615,US 1176698616,1176698623,DZ 1176698624,1176698727,US 1176698728,1176698735,NL -1176698736,1176702975,US +1176698736,1176698847,US +1176698848,1176698855,GB +1176698856,1176702975,US 1176702976,1176707071,CA 1176707072,1176731647,US 1176731648,1176735743,PR @@ -23546,12 +29869,23 @@ 1176764416,1176768511,PM 1176768512,1176770751,US 1176770752,1176770783,AE -1176770784,1176770831,US +1176770784,1176770799,US +1176770800,1176770803,KR +1176770804,1176770811,US +1176770812,1176770815,CA +1176770816,1176770831,US 1176770832,1176770847,BR 1176770848,1176770851,BM -1176770852,1176771895,US +1176770852,1176770919,US +1176770920,1176770927,BR +1176770928,1176770935,DO +1176770936,1176771327,US +1176771328,1176771583,KR +1176771584,1176771895,US 1176771896,1176771903,AE -1176771904,1176776703,US +1176771904,1176772079,US +1176772080,1176772095,DO +1176772096,1176776703,US 1176776704,1176780799,CA 1176780800,1176895487,US 1176895488,1176896519,CA @@ -23566,7 +29900,9 @@ 1176908224,1176908231,MX 1176908232,1176909671,CA 1176909672,1176909679,US -1176909680,1176925007,CA +1176909680,1176917831,CA +1176917832,1176917839,AU +1176917840,1176925007,CA 1176925008,1176925015,NG 1176925016,1176928255,CA 1176928256,1176997375,US @@ -23577,10 +29913,8 @@ 1177053696,1177053951,GB 1177053952,1177059327,US 1177059328,1177061375,CA -1177061376,1177062399,US -1177062400,1177074943,CA -1177074944,1177075199,US -1177075200,1177075455,CA +1177061376,1177062143,US +1177062144,1177075455,CA 1177075456,1177164255,US 1177164256,1177164263,CA 1177164264,1177164415,US @@ -23591,7 +29925,13 @@ 1177164928,1177164943,CA 1177164944,1177165311,US 1177165312,1177165823,CA -1177165824,1177175199,US +1177165824,1177167743,US +1177167744,1177167751,LB +1177167752,1177167839,US +1177167840,1177167847,IL +1177167848,1177168223,US +1177168224,1177168231,IE +1177168232,1177175199,US 1177175200,1177175231,CZ 1177175232,1177182527,US 1177182528,1177182591,CA @@ -23607,7 +29947,9 @@ 1178000920,1178075135,CA 1178075136,1178599423,US 1178599424,1179910143,CA -1179910144,1189130447,US +1179910144,1180113919,US +1180113920,1180114431,AE +1180114432,1189130447,US 1189130448,1189130463,IN 1189130464,1190170111,US 1190170112,1190170127,UY @@ -23619,6 +29961,10 @@ 1192296448,1192361983,CA 1192361984,1192427519,US 1192427520,1192460287,CA +1192464384,1192468479,US +1192468480,1192476671,CA +1192476672,1192488959,US +1192488960,1192493055,CA 1192493056,1207975935,US 1207975936,1207980031,CA 1207980032,1208008703,US @@ -23629,7 +29975,9 @@ 1208050944,1208051199,CA 1208051200,1208054271,US 1208054272,1208054527,CA -1208054528,1208074239,US +1208054528,1208056111,US +1208056112,1208056127,CN +1208056128,1208074239,US 1208074240,1208078527,CA 1208078528,1208078591,US 1208078592,1208079103,CA @@ -23701,7 +30049,9 @@ 1208194290,1208194291,GB 1208194292,1208194511,US 1208194512,1208194513,CA -1208194514,1208195359,US +1208194514,1208194519,US +1208194520,1208194521,AU +1208194522,1208195359,US 1208195360,1208195375,MY 1208195376,1208195391,US 1208195392,1208195399,IN @@ -23727,7 +30077,9 @@ 1208196608,1208196615,CA 1208196616,1208196703,US 1208196704,1208196719,CA -1208196720,1208197023,US +1208196720,1208196951,US +1208196952,1208196959,ZA +1208196960,1208197023,US 1208197024,1208197031,CR 1208197032,1208197135,US 1208197136,1208197167,MY @@ -23872,7 +30224,9 @@ 1208205984,1208205991,GB 1208205992,1208206439,US 1208206440,1208206463,CA -1208206464,1208207183,US +1208206464,1208207095,US +1208207096,1208207097,IN +1208207098,1208207183,US 1208207184,1208207191,AU 1208207192,1208207303,US 1208207304,1208207311,ZA @@ -23939,7 +30293,9 @@ 1208213088,1208213103,NG 1208213104,1208213383,US 1208213384,1208213391,CA -1208213392,1208215935,US +1208213392,1208215351,US +1208215352,1208215359,PR +1208215360,1208215935,US 1208215936,1208215951,GB 1208215952,1208216367,US 1208216368,1208216375,CA @@ -24004,66 +30360,115 @@ 1208338176,1208516607,US 1208516608,1208516623,MX 1208516624,1208516639,US -1208516640,1208516671,CN -1208516672,1208516735,TR +1208516640,1208516671,TR +1208516672,1208516735,US 1208516736,1208516799,ID 1208516800,1208516855,US 1208516856,1208516859,CN -1208516860,1208517001,US +1208516860,1208516955,US +1208516956,1208516959,CN +1208516960,1208516999,US +1208517000,1208517000,TR +1208517001,1208517001,US 1208517002,1208517002,CN -1208517003,1208517009,US -1208517010,1208517011,CN -1208517012,1208517017,US +1208517003,1208517010,US +1208517011,1208517011,TR +1208517012,1208517012,GB +1208517013,1208517017,US 1208517018,1208517018,GB -1208517019,1208517019,US -1208517020,1208517020,FR -1208517021,1208517119,US +1208517019,1208517119,US 1208517120,1208517375,KH -1208517376,1208517631,US +1208517376,1208517471,US +1208517472,1208517487,CN +1208517488,1208517503,US +1208517504,1208517567,CN +1208517568,1208517631,US 1208517632,1208517887,KH -1208517888,1208518143,US -1208518144,1208518207,MY +1208517888,1208518015,TR +1208518016,1208518079,CN +1208518080,1208518143,US +1208518144,1208518207,CN 1208518208,1208518243,US 1208518244,1208518244,CN 1208518245,1208518246,US 1208518247,1208518247,KH -1208518248,1208518263,US +1208518248,1208518261,US +1208518262,1208518262,TR +1208518263,1208518263,CN 1208518264,1208518264,GB -1208518265,1208518271,US -1208518272,1208518287,GB -1208518288,1208518291,US -1208518292,1208518295,CN -1208518296,1208518335,US +1208518265,1208518299,US +1208518300,1208518303,BD +1208518304,1208518335,US 1208518336,1208518399,TR -1208518400,1208519167,US +1208518400,1208518655,ID +1208518656,1208519167,US 1208519168,1208519423,CN 1208519424,1208519551,US -1208519552,1208519679,TR -1208519680,1208521983,US +1208519552,1208519567,CN +1208519568,1208519679,US +1208519680,1208519935,GB +1208519936,1208521983,US 1208521984,1208522239,CN -1208522240,1208523775,US -1208523776,1208523903,GB -1208523904,1208523991,US +1208522240,1208522271,US +1208522272,1208522303,TR +1208522304,1208522319,US +1208522320,1208522335,TR +1208522336,1208522367,US +1208522368,1208522431,CN +1208522432,1208523975,US +1208523976,1208523983,CN +1208523984,1208523991,US 1208523992,1208523995,TR -1208523996,1208524063,US +1208523996,1208523999,US +1208524000,1208524031,TR +1208524032,1208524055,US +1208524056,1208524059,CN +1208524060,1208524063,US 1208524064,1208524079,CN -1208524080,1208524159,US +1208524080,1208524083,US +1208524084,1208524087,KR +1208524088,1208524091,US +1208524092,1208524095,TR +1208524096,1208524159,US 1208524160,1208524223,ID -1208524224,1208524287,US +1208524224,1208524227,SC +1208524228,1208524231,BD +1208524232,1208524287,US 1208524288,1208524351,PK 1208524352,1208524415,CN -1208524416,1208525823,US -1208525824,1208526079,CA -1208526080,1208527615,US -1208527616,1208527871,CA -1208527872,1208528127,VN -1208528128,1208528895,US -1208528896,1208529151,CA -1208529152,1208529919,US -1208529920,1208530175,CN -1208530176,1208531967,US -1208531968,1208532223,CA -1208532224,1208586364,US +1208524416,1208524863,US +1208524864,1208524927,PK +1208524928,1208525311,US +1208525312,1208525343,CN +1208525344,1208525375,TR +1208525376,1208525823,US +1208525824,1208526079,KH +1208526080,1208526335,US +1208526336,1208526591,CN +1208526592,1208526607,TR +1208526608,1208526719,US +1208526720,1208526735,BD +1208526736,1208526815,US +1208526816,1208526847,CN +1208526848,1208526935,US +1208526936,1208526943,BD +1208526944,1208527871,US +1208527872,1208527887,VN +1208527888,1208527903,US +1208527904,1208528015,VN +1208528016,1208528031,SC +1208528032,1208528127,VN +1208528128,1208531007,US +1208531008,1208531071,CN +1208531072,1208531455,US +1208531456,1208531583,CN +1208531584,1208531711,US +1208531712,1208531967,PK +1208531968,1208531995,US +1208531996,1208531999,GB +1208532000,1208532287,US +1208532288,1208532351,PK +1208532352,1208586364,US 1208586365,1208586372,MA 1208586373,1208586419,US 1208586420,1208586427,AE @@ -24071,7 +30476,9 @@ 1208586448,1208586455,TR 1208586456,1208586526,US 1208586527,1208586536,TR -1208586537,1208586589,US +1208586537,1208586573,US +1208586574,1208586581,MX +1208586582,1208586589,LK 1208586590,1208586597,NZ 1208586598,1208586662,US 1208586663,1208586670,GB @@ -24088,14 +30495,16 @@ 1208586957,1208586957,US 1208586958,1208586973,GB 1208586974,1208586976,US -1208586977,1208586992,GB +1208586977,1208586980,GB +1208586981,1208586988,US +1208586989,1208586992,GB 1208586993,1208587025,US 1208587026,1208587033,NZ 1208587034,1208587045,US 1208587046,1208587053,IN -1208587054,1208587075,US -1208587076,1208587083,EG -1208587084,1208587169,US +1208587054,1208587087,US +1208587088,1208587095,LK +1208587096,1208587169,US 1208587170,1208587177,MX 1208587178,1208587187,US 1208587188,1208587195,EG @@ -24107,9 +30516,7 @@ 1208587334,1208587341,CA 1208587342,1208587345,US 1208587346,1208587353,GB -1208587354,1208587359,US -1208587360,1208587377,GB -1208587378,1208587378,US +1208587354,1208587378,US 1208587379,1208587386,GE 1208587387,1208587394,US 1208587395,1208587402,EG @@ -24117,13 +30524,17 @@ 1208587419,1208587426,TR 1208587427,1208587427,US 1208587428,1208587443,GB -1208587444,1208587479,US +1208587444,1208587450,US +1208587451,1208587458,IN +1208587459,1208587479,US 1208587480,1208587487,LK 1208587488,1208587488,US 1208587489,1208587504,GB 1208587505,1208587507,US 1208587508,1208587515,CN -1208587516,1208587629,US +1208587516,1208587553,US +1208587554,1208587561,ID +1208587562,1208587629,US 1208587630,1208587637,MA 1208587638,1208587663,US 1208587664,1208587671,CN @@ -24134,7 +30545,9 @@ 1208587729,1208587736,CA 1208587737,1208587737,US 1208587738,1208587759,CN -1208587760,1208587873,US +1208587760,1208587765,US +1208587766,1208587773,VE +1208587774,1208587873,US 1208587874,1208587881,PK 1208587882,1208587944,US 1208587945,1208587976,GB @@ -24146,31 +30559,48 @@ 1208588104,1208588111,MA 1208588112,1208588211,US 1208588212,1208588219,CA -1208588220,1208588427,US +1208588220,1208588408,US +1208588409,1208588416,PE +1208588417,1208588427,US 1208588428,1208588435,MO 1208588436,1208588463,US 1208588464,1208588476,AU 1208588477,1208588591,US 1208588592,1208588599,IN -1208588600,1208588728,US +1208588600,1208588706,US +1208588707,1208588707,PE +1208588708,1208588711,US +1208588712,1208588714,PE +1208588715,1208588728,US 1208588729,1208588760,GB 1208588761,1208588771,US 1208588772,1208588779,GB -1208588780,1208588953,US +1208588780,1208588853,US +1208588854,1208588861,IN +1208588862,1208588869,PE +1208588870,1208588953,US 1208588954,1208588961,TR 1208588962,1208588972,US 1208588973,1208588985,GB 1208588986,1208588989,US 1208588990,1208589000,GB -1208589001,1208589065,US +1208589001,1208589043,US +1208589044,1208589051,BH +1208589052,1208589065,US 1208589066,1208589081,CA -1208589082,1208589156,US +1208589082,1208589111,US +1208589112,1208589119,VE +1208589120,1208589156,US 1208589157,1208589165,GB 1208589166,1208589174,US 1208589175,1208589186,CA -1208589187,1208589321,US +1208589187,1208589299,US +1208589300,1208589307,LK +1208589308,1208589321,US 1208589322,1208589329,CA -1208589330,1208589379,US +1208589330,1208589341,US +1208589342,1208589349,ID +1208589350,1208589379,US 1208589380,1208589387,EG 1208589388,1208589577,US 1208589578,1208589585,GB @@ -24178,13 +30608,19 @@ 1208589640,1208589651,TR 1208589652,1208589857,US 1208589858,1208589865,MA -1208589866,1208589894,US -1208589895,1208589904,GB -1208589905,1208589970,US +1208589866,1208589901,US +1208589902,1208589913,EG +1208589914,1208589915,US +1208589916,1208589917,EG +1208589918,1208589970,US 1208589971,1208590002,GB 1208590003,1208590004,US 1208590005,1208590014,GB -1208590015,1208590061,US +1208590015,1208590031,US +1208590032,1208590033,EG +1208590034,1208590041,US +1208590042,1208590055,EG +1208590056,1208590061,US 1208590062,1208590071,CN 1208590072,1208590091,US 1208590092,1208590108,GB @@ -24306,9 +30742,7 @@ 1208832392,1208832407,CN 1208832408,1208832455,US 1208832456,1208832463,CN -1208832464,1208832543,US -1208832544,1208832551,RS -1208832552,1208832567,US +1208832464,1208832567,US 1208832568,1208832575,CN 1208832576,1208832583,US 1208832584,1208832591,CN @@ -24317,16 +30751,13 @@ 1208832608,1208832623,IT 1208832624,1208832631,NZ 1208832632,1208832639,CN -1208832640,1208832703,IN -1208832704,1208832711,US +1208832640,1208832711,US 1208832712,1208832719,CN 1208832720,1208832775,US 1208832776,1208832783,CA 1208832784,1208833023,US 1208833024,1208833031,PR -1208833032,1208833439,US -1208833440,1208833471,GB -1208833472,1208834415,US +1208833032,1208834415,US 1208834416,1208834423,TK 1208834424,1208834967,US 1208834968,1208834975,ID @@ -24363,206 +30794,396 @@ 1209190852,1209190883,CA 1209190884,1209190911,US 1209190912,1209191167,MX -1209191168,1209270543,US -1209270544,1209270547,CN -1209270548,1209270579,US +1209191168,1209270579,US 1209270580,1209270583,ID -1209270584,1209270759,US -1209270760,1209270763,CA -1209270764,1209270859,US -1209270860,1209270863,CA -1209270864,1209271067,US +1209270584,1209270607,US +1209270608,1209270611,KR +1209270612,1209270615,CN +1209270616,1209271067,US 1209271068,1209271071,VN -1209271072,1209271111,US -1209271112,1209271115,CA -1209271116,1209271207,US -1209271208,1209271211,FR -1209271212,1209271371,US +1209271072,1209271083,US +1209271084,1209271087,BR +1209271088,1209271127,US +1209271128,1209271131,SA +1209271132,1209271191,US +1209271192,1209271195,RO +1209271196,1209271207,US +1209271208,1209271211,SC +1209271212,1209271215,US +1209271216,1209271219,IN +1209271220,1209271367,US +1209271368,1209271371,TR 1209271372,1209271375,PE 1209271376,1209271435,US 1209271436,1209271439,CN -1209271440,1209271463,US -1209271464,1209271467,IN -1209271468,1209271491,US -1209271492,1209271499,CA +1209271440,1209271451,US +1209271452,1209271455,CN +1209271456,1209271463,US +1209271464,1209271467,PK +1209271468,1209271487,US +1209271488,1209271495,CN +1209271496,1209271499,CA 1209271500,1209271503,MX -1209271504,1209271527,US -1209271528,1209271531,CA -1209271532,1209271579,US +1209271504,1209271511,US +1209271512,1209271515,CN +1209271516,1209271519,US +1209271520,1209271523,RO +1209271524,1209271543,US +1209271544,1209271551,CN +1209271552,1209271567,US +1209271568,1209271571,PL +1209271572,1209271579,US 1209271580,1209271583,BD 1209271584,1209271607,US 1209271608,1209271611,KH -1209271612,1209271639,US -1209271640,1209271643,CZ -1209271644,1209271691,US +1209271612,1209271615,CA +1209271616,1209271639,US +1209271640,1209271643,CA +1209271644,1209271659,US +1209271660,1209271663,PK +1209271664,1209271691,US 1209271692,1209271695,CA -1209271696,1209271791,US -1209271792,1209271795,GB -1209271796,1209271871,US -1209271872,1209271875,TR -1209271876,1209271967,US +1209271696,1209271703,US +1209271704,1209271707,CN +1209271708,1209271719,US +1209271720,1209271723,CN +1209271724,1209271727,US +1209271728,1209271731,PK +1209271732,1209271735,CN +1209271736,1209271767,US +1209271768,1209271771,RO +1209271772,1209271783,US +1209271784,1209271787,RO +1209271788,1209271827,US +1209271828,1209271831,CN +1209271832,1209271839,US +1209271840,1209271843,CN +1209271844,1209271847,US +1209271848,1209271855,IN +1209271856,1209271867,US +1209271868,1209271871,BR +1209271872,1209271923,US +1209271924,1209271927,CA +1209271928,1209271935,US +1209271936,1209271939,BD +1209271940,1209271951,US +1209271952,1209271955,KH +1209271956,1209271963,US +1209271964,1209271967,TR 1209271968,1209271971,VN 1209271972,1209271975,TR 1209271976,1209271979,CA -1209271980,1209271995,US -1209271996,1209271999,FR -1209272000,1209272015,US -1209272016,1209272019,GB -1209272020,1209272031,US -1209272032,1209272035,GB -1209272036,1209272127,US +1209271980,1209271983,ZA +1209271984,1209271995,US +1209271996,1209271999,SC +1209272000,1209272007,TR +1209272008,1209272011,PL +1209272012,1209272127,US 1209272128,1209272159,CN -1209272160,1209272383,US -1209272384,1209272399,CA +1209272160,1209272175,US +1209272176,1209272191,BR +1209272192,1209272255,US +1209272256,1209272287,CN +1209272288,1209272383,US +1209272384,1209272399,CN 1209272400,1209272407,US 1209272408,1209272415,PE 1209272416,1209272447,US 1209272448,1209272479,KH -1209272480,1209272511,US +1209272480,1209272495,CN +1209272496,1209272511,US 1209272512,1209272575,CN 1209272576,1209272583,US 1209272584,1209272591,PH -1209272592,1209272655,US +1209272592,1209272607,US +1209272608,1209272623,TR +1209272624,1209272655,US 1209272656,1209272671,TR -1209272672,1209272895,US +1209272672,1209272719,US +1209272720,1209272735,PR +1209272736,1209272767,CN +1209272768,1209272895,US 1209272896,1209272959,CN -1209272960,1209273215,US -1209273216,1209273279,CN -1209273280,1209273555,US +1209272960,1209273023,BR +1209273024,1209273055,US +1209273056,1209273071,TR +1209273072,1209273079,US +1209273080,1209273083,SC +1209273084,1209273119,US +1209273120,1209273135,BR +1209273136,1209273151,TR +1209273152,1209273207,US +1209273208,1209273215,CA +1209273216,1209273279,US +1209273280,1209273311,BR +1209273312,1209273359,US +1209273360,1209273407,TR +1209273408,1209273471,CZ +1209273472,1209273555,US 1209273556,1209273559,CA 1209273560,1209273647,US 1209273648,1209273655,CN -1209273656,1209273663,US +1209273656,1209273663,AU 1209273664,1209273671,BD -1209273672,1209273991,US -1209273992,1209273999,FR -1209274000,1209274031,US -1209274032,1209274039,TR -1209274040,1209274115,US +1209273672,1209273675,US +1209273676,1209273679,GB +1209273680,1209273991,US +1209273992,1209273999,SC +1209274000,1209274023,US +1209274024,1209274031,RO +1209274032,1209274039,CZ +1209274040,1209274047,US +1209274048,1209274111,CN +1209274112,1209274115,US 1209274116,1209274119,CZ 1209274120,1209274135,US -1209274136,1209274151,TR -1209274152,1209274175,US -1209274176,1209274239,FR -1209274240,1209274303,US -1209274304,1209274367,CN -1209274368,1209274607,US -1209274608,1209274623,FR -1209274624,1209274751,CN -1209274752,1209274815,US +1209274136,1209274143,TR +1209274144,1209274175,US +1209274176,1209274239,SC +1209274240,1209274495,US +1209274496,1209274527,CN +1209274528,1209274543,US +1209274544,1209274559,TR +1209274560,1209274607,US +1209274608,1209274623,SC +1209274624,1209274815,US 1209274816,1209274879,CA -1209274880,1209274911,CZ +1209274880,1209274911,CN 1209274912,1209274927,US 1209274928,1209274943,TR 1209274944,1209274959,US 1209274960,1209274967,PH -1209274968,1209275071,US +1209274968,1209275039,US +1209275040,1209275071,BD 1209275072,1209275135,GB -1209275136,1209275863,US -1209275864,1209275871,FR +1209275136,1209275647,US +1209275648,1209275679,SC +1209275680,1209275695,TR +1209275696,1209275791,US +1209275792,1209275799,TR +1209275800,1209275823,US +1209275824,1209275827,CN +1209275828,1209275863,US +1209275864,1209275871,SC 1209275872,1209275906,US 1209275907,1209275908,KH -1209275909,1209275910,US -1209275911,1209275911,MY -1209275912,1209275924,US -1209275925,1209275925,CN -1209275926,1209275928,US +1209275909,1209275913,US +1209275914,1209275914,KH +1209275915,1209275917,US +1209275918,1209275918,KH +1209275919,1209275924,US +1209275925,1209275925,TR +1209275926,1209275927,US +1209275928,1209275928,CN 1209275929,1209275929,MY 1209275930,1209275930,US 1209275931,1209275931,AU 1209275932,1209275932,CN -1209275933,1209276351,US +1209275933,1209275935,US +1209275936,1209275951,RO +1209275952,1209275999,US +1209276000,1209276031,MY +1209276032,1209276063,BR +1209276064,1209276351,US 1209276352,1209276415,CN -1209276416,1209276799,US -1209276800,1209276807,BD -1209276808,1209276815,FR -1209276816,1209276903,US +1209276416,1209276591,US +1209276592,1209276607,RO +1209276608,1209276671,US +1209276672,1209276703,CN +1209276704,1209276803,US +1209276804,1209276807,BD +1209276808,1209276903,US 1209276904,1209276911,CN 1209276912,1209276927,TR 1209276928,1209277087,US -1209277088,1209277095,FR +1209277088,1209277095,SC 1209277096,1209277103,US 1209277104,1209277119,TR -1209277120,1209277135,US -1209277136,1209277143,FR -1209277144,1209277155,US +1209277120,1209277135,RO +1209277136,1209277143,US +1209277144,1209277147,TR +1209277148,1209277154,US +1209277155,1209277155,TR 1209277156,1209277156,SE -1209277157,1209277159,US +1209277157,1209277157,US +1209277158,1209277158,IN +1209277159,1209277159,US 1209277160,1209277160,CN -1209277161,1209277177,US -1209277178,1209277178,FR -1209277179,1209277575,US +1209277161,1209277161,SC +1209277162,1209277163,US +1209277164,1209277165,SC +1209277166,1209277166,GB +1209277167,1209277167,CN +1209277168,1209277168,AU +1209277169,1209277171,US +1209277172,1209277172,AU +1209277173,1209277215,US +1209277216,1209277231,BR +1209277232,1209277247,US +1209277248,1209277263,BR +1209277264,1209277279,US +1209277280,1209277283,CA +1209277284,1209277287,US +1209277288,1209277295,BD +1209277296,1209277375,US +1209277376,1209277379,PL +1209277380,1209277399,US +1209277400,1209277419,CN +1209277420,1209277575,US 1209277576,1209277583,BD -1209277584,1209278207,US -1209278208,1209278463,IE -1209278464,1209278911,US +1209277584,1209277599,TR +1209277600,1209277695,US +1209277696,1209277951,KH +1209277952,1209278083,US +1209278084,1209278087,CN +1209278088,1209278095,AU +1209278096,1209278111,US +1209278112,1209278143,TR +1209278144,1209278155,US +1209278156,1209278159,SC +1209278160,1209278207,US +1209278208,1209278463,KH +1209278464,1209278495,US +1209278496,1209278511,TR +1209278512,1209278523,US +1209278524,1209278527,CN +1209278528,1209278591,US +1209278592,1209278719,CN +1209278720,1209278795,US +1209278796,1209278799,CN +1209278800,1209278815,US +1209278816,1209278823,CN +1209278824,1209278827,US +1209278828,1209278831,CN +1209278832,1209278839,US +1209278840,1209278847,CN +1209278848,1209278911,US 1209278912,1209278919,TR 1209278920,1209278975,US -1209278976,1209279103,CA +1209278976,1209279091,CA +1209279092,1209279095,BD +1209279096,1209279103,CA 1209279104,1209279119,US 1209279120,1209279135,CA -1209279136,1209279167,US +1209279136,1209279139,US +1209279140,1209279143,PL +1209279144,1209279167,US 1209279168,1209279231,VN -1209279232,1209279615,US +1209279232,1209279295,BR +1209279296,1209279583,US +1209279584,1209279599,BD +1209279600,1209279615,US 1209279616,1209279743,GB 1209279744,1209279871,US 1209279872,1209279935,MY -1209279936,1209280191,US -1209280192,1209280255,VN -1209280256,1209280495,US -1209280496,1209280511,CA -1209280512,1209280575,US -1209280576,1209280607,FR -1209280608,1209280619,US -1209280620,1209280623,GB -1209280624,1209280639,CN -1209280640,1209280959,US -1209280960,1209280975,GB -1209280976,1209281247,US +1209279936,1209279951,GB +1209279952,1209279967,US +1209279968,1209279999,CN +1209280000,1209280015,TR +1209280016,1209280027,US +1209280028,1209280031,SA +1209280032,1209280047,IN +1209280048,1209280191,US +1209280192,1209280255,ID +1209280256,1209280319,SC +1209280320,1209280419,US +1209280420,1209280423,CN +1209280424,1209280439,US +1209280440,1209280447,CN +1209280448,1209280463,IN +1209280464,1209280495,US +1209280496,1209280511,CN +1209280512,1209280515,US +1209280516,1209280519,TR +1209280520,1209280527,AU +1209280528,1209280535,US +1209280536,1209280543,BD +1209280544,1209280575,US +1209280576,1209280607,SC +1209280608,1209280895,US +1209280896,1209280959,BR +1209280960,1209281151,US +1209281152,1209281231,CN +1209281232,1209281247,US 1209281248,1209281279,CA 1209281280,1209281535,KH -1209281536,1209281983,US -1209281984,1209282047,TR -1209282048,1209282583,US -1209282584,1209282591,GB -1209282592,1209283479,US -1209283480,1209283487,GB -1209283488,1209283535,US -1209283536,1209283543,GB -1209283544,1209283587,US -1209283588,1209283591,CN -1209283592,1209283695,US -1209283696,1209283703,GB -1209283704,1209283751,US +1209281536,1209281791,IN +1209281792,1209281863,US +1209281864,1209281871,SC +1209281872,1209281927,US +1209281928,1209281935,IN +1209281936,1209282063,US +1209282064,1209282067,SA +1209282068,1209282111,US +1209282112,1209282143,SC +1209282144,1209282159,US +1209282160,1209282175,CN +1209282176,1209282559,US +1209282560,1209282623,CN +1209282624,1209283487,US +1209283488,1209283503,TR +1209283504,1209283543,US +1209283544,1209283547,SA +1209283548,1209283567,US +1209283568,1209283575,CN +1209283576,1209283583,US +1209283584,1209283587,SA +1209283588,1209283599,US +1209283600,1209283607,IN +1209283608,1209283679,US +1209283680,1209283683,CZ +1209283684,1209283751,US 1209283752,1209283759,BD -1209283760,1209283807,US -1209283808,1209283839,CA -1209283840,1209283871,US -1209283872,1209283875,TR -1209283876,1209283967,US -1209283968,1209284095,GB -1209284096,1209284223,US -1209284224,1209284351,IE -1209284352,1209284759,US -1209284760,1209284767,FR -1209284768,1209284799,US -1209284800,1209284815,TR -1209284816,1209284831,CN +1209283760,1209283775,US +1209283776,1209283807,ZA +1209283808,1209283839,MY +1209283840,1209283887,US +1209283888,1209283903,BR +1209283904,1209283915,US +1209283916,1209283919,KR +1209283920,1209284095,US +1209284096,1209284127,CA +1209284128,1209284159,US +1209284160,1209284223,TR +1209284224,1209284351,CN +1209284352,1209284391,US +1209284392,1209284399,RO +1209284400,1209284415,TR +1209284416,1209284431,US +1209284432,1209284447,TR +1209284448,1209284607,US +1209284608,1209284671,TR +1209284672,1209284735,CN +1209284736,1209284759,US +1209284760,1209284767,SC +1209284768,1209284799,MY +1209284800,1209284831,TR 1209284832,1209284855,US -1209284856,1209284863,TR -1209284864,1209284999,US +1209284856,1209284863,CN +1209284864,1209284993,US +1209284994,1209284994,TR +1209284995,1209284997,US +1209284998,1209284998,CN +1209284999,1209284999,US 1209285000,1209285000,CA -1209285001,1209285003,US -1209285004,1209285004,CA -1209285005,1209285017,US +1209285001,1209285002,US +1209285003,1209285004,CN +1209285005,1209285009,US +1209285010,1209285010,CA +1209285011,1209285011,US +1209285012,1209285012,TR +1209285013,1209285017,US 1209285018,1209285018,CA 1209285019,1209285021,US 1209285022,1209285022,CA 1209285023,1209285063,US 1209285064,1209285071,TR -1209285072,1209285183,US +1209285072,1209285151,US +1209285152,1209285183,RO 1209285184,1209285247,TR -1209285248,1209347839,US +1209285248,1209286143,US +1209286144,1209286399,KH +1209286400,1209347839,US 1209347840,1209348095,GB 1209348096,1209357215,US 1209357216,1209357231,SI @@ -24589,9 +31210,7 @@ 1209860448,1209860479,BE 1209860480,1209860575,US 1209860576,1209860607,IN -1209860608,1209860863,US -1209860864,1209860895,CY -1209860896,1209860927,US +1209860608,1209860927,US 1209860928,1209860959,AU 1209860960,1209861119,US 1209861120,1209861375,CA @@ -24630,7 +31249,11 @@ 1209877935,1209877938,PK 1209877939,1209879554,US 1209879555,1209879558,PE -1209879559,1209884671,US +1209879559,1209880125,US +1209880126,1209880126,CA +1209880127,1209882516,US +1209882517,1209882517,CA +1209882518,1209884671,US 1209884672,1209884679,IT 1209884680,1209884687,ES 1209884688,1209884823,US @@ -24649,7 +31272,9 @@ 1209893520,1209904959,US 1209904960,1209904975,GB 1209904976,1209917439,US -1209917440,1209925631,CA +1209917440,1209918367,CA +1209918368,1209918399,US +1209918400,1209925631,CA 1209925632,1210057039,US 1210057040,1210057047,JM 1210057048,1210057055,US @@ -24660,7 +31285,9 @@ 1210057568,1210057583,NG 1210057584,1210057615,US 1210057616,1210057623,CA -1210057624,1210057879,US +1210057624,1210057639,US +1210057640,1210057647,GB +1210057648,1210057879,US 1210057880,1210057887,IL 1210057888,1210057895,US 1210057896,1210057903,MX @@ -24723,7 +31350,9 @@ 1210062928,1210062935,AU 1210062936,1210062975,US 1210062976,1210062983,CR -1210062984,1210064311,US +1210062984,1210064067,US +1210064068,1210064071,CA +1210064072,1210064311,US 1210064312,1210064319,IE 1210064320,1210064527,US 1210064528,1210064535,AU @@ -24806,9 +31435,7 @@ 1210070504,1210070511,CA 1210070512,1210070631,US 1210070632,1210070639,MX -1210070640,1210070703,US -1210070704,1210070711,GB -1210070712,1210070799,US +1210070640,1210070799,US 1210070800,1210070807,AU 1210070808,1210070863,US 1210070864,1210070871,BH @@ -24853,7 +31480,9 @@ 1210081336,1210081343,CR 1210081344,1210081559,US 1210081560,1210081567,PK -1210081568,1210081823,US +1210081568,1210081599,US +1210081600,1210081615,AU +1210081616,1210081823,US 1210081824,1210081831,MX 1210081832,1210081839,US 1210081840,1210081847,MX @@ -24926,7 +31555,9 @@ 1210090368,1210090375,JM 1210090376,1210090383,US 1210090384,1210090399,CA -1210090400,1210090623,US +1210090400,1210090439,US +1210090440,1210090443,FR +1210090444,1210090623,US 1210090624,1210090639,BD 1210090640,1210090767,US 1210090768,1210090783,BD @@ -24979,7 +31610,11 @@ 1210093672,1210093679,AU 1210093680,1210093751,US 1210093752,1210093759,AU -1210093760,1210093847,US +1210093760,1210093771,US +1210093772,1210093775,HU +1210093776,1210093815,US +1210093816,1210093817,JE +1210093818,1210093847,US 1210093848,1210093855,AU 1210093856,1210094175,US 1210094176,1210094183,TT @@ -25076,18 +31711,24 @@ 1210100632,1210100639,NZ 1210100640,1210101023,US 1210101024,1210101039,GB -1210101040,1210101263,US +1210101040,1210101191,US +1210101192,1210101195,CA +1210101196,1210101263,US 1210101264,1210101279,MY 1210101280,1210101311,US 1210101312,1210101319,IE 1210101320,1210101327,IL -1210101328,1210101559,US +1210101328,1210101519,US +1210101520,1210101527,IL +1210101528,1210101559,US 1210101560,1210101567,AU 1210101568,1210101727,US 1210101728,1210101743,GB 1210101744,1210101879,US 1210101880,1210101887,CA -1210101888,1210102399,US +1210101888,1210102287,US +1210102288,1210102295,IL +1210102296,1210102399,US 1210102400,1210102407,AU 1210102408,1210102815,US 1210102816,1210102823,CA @@ -25238,7 +31879,9 @@ 1210117888,1210117895,TH 1210117896,1210118023,US 1210118024,1210118031,GB -1210118032,1210118191,US +1210118032,1210118089,US +1210118090,1210118091,IN +1210118092,1210118191,US 1210118192,1210118199,NZ 1210118200,1210118239,US 1210118240,1210118255,TH @@ -25322,7 +31965,8 @@ 1211035664,1211035711,US 1211035712,1211035775,CA 1211035776,1211035791,US -1211035792,1211035823,CR +1211035792,1211035807,CR +1211035808,1211035823,US 1211035824,1211035839,CH 1211035840,1211036031,US 1211036032,1211036095,EC @@ -25332,7 +31976,10 @@ 1211036736,1211036751,GT 1211036752,1211036991,US 1211036992,1211037055,BR -1211037056,1211037519,US +1211037056,1211037135,US +1211037136,1211037151,GB +1211037152,1211037183,DO +1211037184,1211037519,US 1211037520,1211037535,UY 1211037536,1211037679,US 1211037680,1211037695,AR @@ -25344,20 +31991,24 @@ 1211038064,1211038079,TT 1211038080,1211038719,US 1211038720,1211038975,CY -1211038976,1211039087,US +1211038976,1211039007,US +1211039008,1211039023,VG +1211039024,1211039087,US 1211039088,1211039103,RU 1211039104,1211039503,US 1211039504,1211039519,A2 -1211039520,1211039551,US -1211039552,1211039567,BM -1211039568,1211039679,US +1211039520,1211039647,US +1211039648,1211039663,AR +1211039664,1211039679,US 1211039680,1211039695,BR 1211039696,1211236351,US 1211236352,1211269119,PR 1211269120,1211303935,US 1211303936,1211304159,CA -1211304160,1211304191,US -1211304192,1211304319,CA +1211304160,1211304223,US +1211304224,1211304255,CA +1211304256,1211304287,US +1211304288,1211304319,CA 1211304320,1211304351,NL 1211304352,1211304703,CA 1211304704,1211304767,GB @@ -25367,8 +32018,8 @@ 1211305984,1211306111,NL 1211306112,1211306751,US 1211306752,1211306879,CA -1211306880,1211308159,US -1211308160,1211308175,CA +1211306880,1211308167,US +1211308168,1211308175,CA 1211308176,1211308191,BV 1211308192,1211308543,CA 1211308544,1211308559,KN @@ -25385,9 +32036,25 @@ 1211308752,1211308767,CA 1211308768,1211308783,US 1211308784,1211310079,CA -1211310080,1211313219,US +1211310080,1211310404,US +1211310405,1211310405,IN +1211310406,1211310951,US +1211310952,1211310952,IN +1211310953,1211311378,US +1211311379,1211311379,IN +1211311380,1211311394,US +1211311395,1211311395,IN +1211311396,1211311883,US +1211311884,1211311884,IN +1211311885,1211311963,US +1211311964,1211311964,IN +1211311965,1211312569,US +1211312570,1211312570,IN +1211312571,1211313219,US 1211313220,1211313231,IN -1211313232,1211313431,US +1211313232,1211313311,US +1211313312,1211313315,IN +1211313316,1211313431,US 1211313432,1211313439,IN 1211313440,1211313567,US 1211313568,1211313579,IN @@ -25413,8 +32080,7 @@ 1211333120,1211333631,VC 1211333632,1211333887,GD 1211333888,1211334655,VG -1211334656,1211367423,US -1211367424,1211367487,EE +1211334656,1211367487,US 1211367488,1211367495,GB 1211367496,1211367503,US 1211367504,1211367519,CH @@ -25453,13 +32119,17 @@ 1211394064,1211394079,ES 1211394080,1211394751,US 1211394752,1211395071,IT -1211395072,1211407293,US +1211395072,1211404421,US +1211404422,1211404422,CA +1211404423,1211407293,US 1211407294,1211407333,MX 1211407334,1211413247,US 1211413248,1211413503,CA 1211413504,1211419489,US 1211419490,1211419497,CA -1211419498,1211432959,US +1211419498,1211421739,US +1211421740,1211421740,CA +1211421741,1211432959,US 1211432960,1211473919,CA 1211473920,1211596799,US 1211596800,1211613183,CA @@ -25584,7 +32254,15 @@ 1244848128,1244852223,CA 1244852224,1244864511,US 1244864512,1244872703,CA -1244872704,1245183999,US +1244872704,1244996655,US +1244996656,1244996663,CH +1244996664,1245144575,US +1245144576,1245144831,CH +1245144832,1245168215,US +1245168216,1245168219,CH +1245168220,1245173215,US +1245173216,1245173223,CH +1245173224,1245183999,US 1245184000,1245446143,CA 1245446144,1246864899,US 1246864900,1246864958,EG @@ -25622,14 +32300,109 @@ 1247070816,1247070831,CA 1247070832,1247072719,US 1247072720,1247072735,NL -1247072736,1248864255,US +1247072736,1247481855,US +1247481856,1247481863,CN +1247481864,1247481871,CO +1247481872,1247481879,TR +1247481880,1247481887,US +1247481888,1247481903,CN +1247481904,1247481911,BO +1247481912,1247481927,CN +1247481928,1247481951,US +1247481952,1247481967,CN +1247481968,1247481983,US +1247481984,1247482015,GB +1247482016,1247482047,CN +1247482048,1247482063,CA +1247482064,1247482071,BO +1247482072,1247482079,US +1247482080,1247482175,CN +1247482176,1247482239,US +1247482240,1247482255,GB +1247482256,1247482319,CN +1247482320,1247482335,US +1247482336,1247482351,CN +1247482352,1247482367,US +1247482368,1247482383,GB +1247482384,1247482543,CN +1247482544,1247482551,US +1247482552,1247482559,CN +1247482560,1247482567,US +1247482568,1247482583,CN +1247482584,1247482607,US +1247482608,1247482623,CN +1247482624,1247482687,US +1247482688,1247482751,CA +1247482752,1247482815,US +1247482816,1247482879,CN +1247482880,1247482927,US +1247482928,1247482951,BO +1247482952,1247482967,US +1247482968,1247482975,CN +1247482976,1247483015,US +1247483016,1247483039,CN +1247483040,1247483047,CA +1247483048,1247483079,US +1247483080,1247483095,CN +1247483096,1247483111,US +1247483112,1247483119,CN +1247483120,1247483647,US +1247483648,1247483951,CN +1247483952,1247483967,US +1247483968,1247484031,CN +1247484032,1247484047,US +1247484048,1247484287,CN +1247484288,1247484319,US +1247484320,1247484543,CN +1247484544,1247484551,US +1247484552,1247484559,CN +1247484560,1247484567,US +1247484568,1247484671,CN +1247484672,1247484927,US +1247484928,1247485191,CN +1247485192,1247485231,US +1247485232,1247485263,CN +1247485264,1247485439,US +1247485440,1247485471,CN +1247485472,1247485479,US +1247485480,1247485503,CN +1247485504,1247485511,US +1247485512,1247485543,CN +1247485544,1247485615,US +1247485616,1247485623,CN +1247485624,1247485631,US +1247485632,1247485639,CN +1247485640,1247485647,US +1247485648,1247485951,CN +1247485952,1248864255,US 1248864256,1248866303,CA 1248866304,1248885759,US 1248885760,1248886783,CA -1248886784,1248899071,US +1248886784,1248887871,US +1248887872,1248887903,GB +1248887904,1248887935,US +1248887936,1248887943,CA +1248887944,1248888055,US +1248888056,1248888063,BR +1248888064,1248888631,US +1248888632,1248888639,CA +1248888640,1248888671,US +1248888672,1248888679,GB +1248888680,1248888687,BO +1248888688,1248888703,US +1248888704,1248888711,BR +1248888712,1248897263,US +1248897264,1248897271,FR +1248897272,1248899071,US 1248899072,1248900095,CA -1248900096,1248913407,US -1248913408,1248915455,GP +1248900096,1248902143,US +1248902144,1248903167,CA +1248903168,1248903695,US +1248903696,1248903711,ZA +1248903712,1248903775,US +1248903776,1248903791,FR +1248903792,1248913407,US +1248913408,1248915455,MF 1248915456,1248919551,US 1248919552,1248920575,CA 1248920576,1248921599,US @@ -25648,31 +32421,47 @@ 1249010688,1249011711,CA 1249011712,1249019903,US 1249019904,1249020927,CA -1249020928,1249027135,US +1249020928,1249026423,US +1249026424,1249026431,CA +1249026432,1249026455,US +1249026456,1249026463,ES +1249026464,1249026703,US +1249026704,1249026711,ZA +1249026712,1249026719,CA +1249026720,1249026767,US +1249026768,1249026775,CA +1249026776,1249026783,MX +1249026784,1249027127,US +1249027128,1249027135,ZA 1249027136,1249027143,AU 1249027144,1249027175,US 1249027176,1249027183,IN -1249027184,1249027391,US +1249027184,1249027271,US +1249027272,1249027279,GB +1249027280,1249027391,US 1249027392,1249027407,PH -1249027408,1249027463,US -1249027464,1249027471,CA -1249027472,1249027503,US +1249027408,1249027503,US 1249027504,1249027519,CA 1249027520,1249027551,US 1249027552,1249027559,CA 1249027560,1249027647,US -1249027648,1249027655,AU -1249027656,1249027823,US +1249027648,1249027655,GB +1249027656,1249027719,US +1249027720,1249027727,GR +1249027728,1249027823,US 1249027824,1249027839,CA -1249027840,1249027887,US -1249027888,1249027895,EG -1249027896,1249027919,US +1249027840,1249027895,US +1249027896,1249027903,PL +1249027904,1249027919,US 1249027920,1249027935,AU 1249027936,1249029119,US 1249029120,1249030143,CA 1249030144,1249036287,US 1249036288,1249037311,TC -1249037312,1249040383,CA +1249037312,1249037343,US +1249037344,1249037359,CA +1249037360,1249038335,US +1249038336,1249040383,CA 1249040384,1249046527,US 1249046528,1249047551,BM 1249047552,1249050623,US @@ -25684,10 +32473,10 @@ 1249092608,1249099775,US 1249099776,1249101823,CA 1249101824,1249102847,PR -1249102848,1249103871,CA +1249102848,1249103103,US +1249103104,1249103871,CA 1249103872,1249103887,TW -1249103888,1249103903,PH -1249103904,1249103951,US +1249103888,1249103951,US 1249103952,1249103967,TW 1249103968,1249104095,US 1249104096,1249104111,TW @@ -25701,9 +32490,7 @@ 1249105120,1249105127,AR 1249105128,1249105135,US 1249105136,1249105143,CH -1249105144,1249105183,US -1249105184,1249105191,ZA -1249105192,1249105279,US +1249105144,1249105279,US 1249105280,1249105295,CA 1249105296,1249105367,US 1249105368,1249105375,ES @@ -25729,7 +32516,9 @@ 1249180032,1249180095,TW 1249180096,1249191935,US 1249191936,1249193983,CA -1249193984,1249203199,US +1249193984,1249195007,US +1249195008,1249196031,CA +1249196032,1249203199,US 1249203200,1249204223,GD 1249204224,1249210367,US 1249210368,1249212415,KY @@ -25737,12 +32526,60 @@ 1249217536,1249218559,CA 1249218560,1249221887,US 1249221888,1249222655,RO -1249222656,1249236991,US +1249222656,1249227007,US +1249227008,1249227071,CY +1249227072,1249227135,VG +1249227136,1249227167,US +1249227168,1249227199,VG +1249227200,1249227263,HK +1249227264,1249227519,VG +1249227520,1249228031,US +1249228032,1249228063,CZ +1249228064,1249228095,US +1249228096,1249228223,UA +1249228224,1249228239,CZ +1249228240,1249228287,US +1249228288,1249228351,SC +1249228352,1249229007,US +1249229008,1249229008,CA +1249229009,1249229087,US +1249229088,1249229095,CA +1249229096,1249229216,US +1249229217,1249229217,CA +1249229218,1249229289,US +1249229290,1249229291,CA +1249229292,1249229591,US +1249229592,1249229599,ES +1249229600,1249236991,US 1249236992,1249239039,KY 1249239040,1249245183,US 1249245184,1249247231,CA -1249247232,1249256447,US -1249256448,1249257471,CA +1249247232,1249253583,US +1249253584,1249253591,VA +1249253592,1249256447,US +1249256448,1249256500,CA +1249256501,1249256542,GB +1249256543,1249256713,CA +1249256714,1249256773,US +1249256774,1249256835,CA +1249256836,1249256836,US +1249256837,1249256839,CA +1249256840,1249256868,US +1249256869,1249256988,CA +1249256989,1249256998,US +1249256999,1249256999,CA +1249257000,1249257009,LB +1249257010,1249257017,CA +1249257018,1249257042,US +1249257043,1249257052,CA +1249257053,1249257062,US +1249257063,1249257121,CA +1249257122,1249257131,LB +1249257132,1249257348,CA +1249257349,1249257412,US +1249257413,1249257437,CA +1249257438,1249257470,US +1249257471,1249257471,CA 1249257472,1249260543,US 1249260544,1249261567,CA 1249261568,1249272831,US @@ -25751,11 +32588,19 @@ 1249310720,1249311743,CA 1249311744,1249312767,US 1249312768,1249313791,CA -1249313792,1249335295,US +1249313792,1249324799,US +1249324800,1249325055,IN +1249325056,1249335295,US 1249335296,1249337343,CA 1249337344,1249359871,US 1249359872,1249361919,CA -1249361920,1249384447,US +1249361920,1249381503,US +1249381504,1249381519,DE +1249381520,1249381759,US +1249381760,1249381775,DE +1249381776,1249382287,US +1249382288,1249382303,DE +1249382304,1249384447,US 1249384448,1249386495,PR 1249386496,1249391615,US 1249391616,1249392639,CA @@ -25773,7 +32618,9 @@ 1249440280,1249440287,FR 1249440288,1249452031,US 1249452032,1249453055,CA -1249453056,1249474559,US +1249453056,1249460671,US +1249460672,1249460687,CA +1249460688,1249474559,US 1249474560,1249475583,CA 1249475584,1249484799,US 1249484800,1249486847,CA @@ -25787,19 +32634,31 @@ 1249531904,1249533951,GD 1249533952,1249542143,US 1249542144,1249544191,CA -1249544192,1249562623,US +1249544192,1249550367,US +1249550368,1249550375,HK +1249550376,1249562623,US 1249562624,1249564671,CA 1249564672,1249568319,US 1249568320,1249568327,NL 1249568328,1249571839,US 1249571840,1249572863,CA 1249572864,1249577087,US -1249577088,1249577983,CA +1249577088,1249577232,CA +1249577233,1249577343,US +1249577344,1249577403,CA +1249577404,1249577468,US +1249577469,1249577480,CA +1249577481,1249577545,US +1249577546,1249577730,CA +1249577731,1249577794,US +1249577795,1249577983,CA 1249577984,1249592319,US 1249592320,1249593343,CA 1249593344,1249598463,US 1249598464,1249599487,CA -1249599488,1249690677,US +1249599488,1249637887,US +1249637888,1249638143,CA +1249638144,1249690677,US 1249690678,1249690686,GB 1249690687,1249690783,US 1249690784,1249690815,AU @@ -25870,17 +32729,19 @@ 1254604192,1254604199,IE 1254604200,1254621183,US 1254621184,1254629375,CA -1254629376,1254704383,US +1254629376,1254688511,US +1254688512,1254688543,CA +1254688544,1254690495,US +1254690496,1254690503,CA +1254690504,1254704383,US 1254704384,1254704639,PH 1254704640,1254704903,US 1254704904,1254704911,PH -1254704912,1254708927,US -1254708928,1254708959,SG -1254708960,1254713359,US +1254704912,1254713359,US 1254713360,1254713407,CA -1254713408,1254725119,US -1254725120,1254725151,GB -1254725152,1254924687,US +1254713408,1254752191,US +1254752192,1254752207,CH +1254752208,1254924687,US 1254924688,1254924703,RO 1254924704,1254948927,US 1254948928,1254948935,SG @@ -25888,12 +32749,12 @@ 1254948960,1254948975,CA 1254948976,1254949247,US 1254949248,1254949279,IN -1254949280,1254950671,US +1254949280,1254950199,US +1254950200,1254950207,IL +1254950208,1254950671,US 1254950672,1254950679,RU 1254950680,1254950687,CA -1254950688,1254950719,US -1254950720,1254950727,SG -1254950728,1254950751,US +1254950688,1254950751,US 1254950752,1254950759,IL 1254950760,1254950767,US 1254950768,1254950775,GR @@ -25956,9 +32817,7 @@ 1254953616,1254953623,GB 1254953624,1254953639,US 1254953640,1254953647,TW -1254953648,1254953671,US -1254953672,1254953679,MT -1254953680,1254953687,US +1254953648,1254953687,US 1254953688,1254953703,CA 1254953704,1254953743,US 1254953744,1254953751,IN @@ -25988,7 +32847,9 @@ 1254954664,1254954671,GB 1254954672,1254954887,US 1254954888,1254954895,IL -1254954896,1254955599,US +1254954896,1254955103,US +1254955104,1254955111,GB +1254955112,1254955599,US 1254955600,1254955607,GB 1254955608,1254955735,US 1254955736,1254955743,GB @@ -26001,10 +32862,12 @@ 1254957064,1254957071,MX 1254957072,1254957239,US 1254957240,1254957247,GB -1254957248,1254957263,MT -1254957264,1254957287,US +1254957248,1254957255,MT +1254957256,1254957287,US 1254957288,1254957295,IN -1254957296,1254957375,US +1254957296,1254957311,US +1254957312,1254957327,CA +1254957328,1254957375,US 1254957376,1254957391,CA 1254957392,1254957407,US 1254957408,1254957423,IN @@ -26071,9 +32934,7 @@ 1254960936,1254960943,IN 1254960944,1254960967,US 1254960968,1254960975,IN -1254960976,1254961279,US -1254961280,1254961295,GB -1254961296,1254961567,US +1254960976,1254961567,US 1254961568,1254961599,BD 1254961600,1254961743,US 1254961744,1254961751,ZA @@ -26117,7 +32978,9 @@ 1254964344,1254964351,PR 1254964352,1254964391,US 1254964392,1254964399,AU -1254964400,1254964799,US +1254964400,1254964639,US +1254964640,1254964671,AU +1254964672,1254964799,US 1254964800,1254964815,CA 1254964816,1254964927,US 1254964928,1254964943,CA @@ -26164,9 +33027,7 @@ 1254966928,1254966943,FR 1254966944,1254966975,US 1254966976,1254966991,IL -1254966992,1254967007,US -1254967008,1254967023,AE -1254967024,1254967079,US +1254966992,1254967079,US 1254967080,1254967087,PH 1254967088,1254967127,US 1254967128,1254967143,BM @@ -26256,7 +33117,8 @@ 1254970336,1254970343,CH 1254970344,1254970527,US 1254970528,1254970543,GB -1254970544,1254970607,US +1254970544,1254970591,US +1254970592,1254970607,PH 1254970608,1254970623,GH 1254970624,1254970631,MX 1254970632,1254970903,US @@ -26416,22 +33278,15 @@ 1255042752,1255042783,CA 1255042784,1255047167,US 1255047168,1255055359,CA -1255055360,1255055487,US -1255055488,1255055503,CA -1255055504,1255056063,US -1255056064,1255056095,NL -1255056096,1255057887,US +1255055360,1255057887,US 1255057888,1255057919,NL 1255057920,1255058671,US 1255058672,1255058687,GB -1255058688,1255059151,US -1255059152,1255059167,GB -1255059168,1255059327,US +1255058688,1255059327,US 1255059328,1255059343,NL 1255059344,1255059359,US -1255059360,1255059407,CA -1255059408,1255059423,AR -1255059424,1255060159,US +1255059360,1255059391,CA +1255059392,1255060159,US 1255060160,1255060191,NL 1255060192,1255060607,US 1255060608,1255060623,AN @@ -26447,21 +33302,29 @@ 1255061984,1255062015,CA 1255062016,1255062463,US 1255062464,1255062527,PA -1255062528,1255062591,US -1255062592,1255062607,CA -1255062608,1255062847,US +1255062528,1255062847,US 1255062848,1255062863,CA 1255062864,1255063551,US 1255063552,1255071743,PR 1255071744,1255210495,US 1255210496,1255211007,DE -1255211008,1255276543,US +1255211008,1255264511,US +1255264512,1255264767,SG +1255264768,1255265279,US +1255265280,1255266303,SG +1255266304,1255274047,US +1255274048,1255274079,GB +1255274080,1255274495,US +1255274496,1255274751,SG +1255274752,1255276543,US 1255276544,1255342079,CA -1255342080,1255369055,US -1255369056,1255369087,DE -1255369088,1255373759,US -1255373760,1255373791,DE -1255373792,1255489535,US +1255342080,1255367167,US +1255367168,1255367423,DE +1255367424,1255372287,US +1255372288,1255372543,PA +1255372544,1255372799,US +1255372800,1255373055,DE +1255373056,1255489535,US 1255489536,1255505919,PR 1255505920,1255514111,US 1255514112,1255522303,CA @@ -26471,19 +33334,27 @@ 1255669760,1255735295,CA 1255735296,1255746799,US 1255746800,1255746815,BB -1255746816,1255750239,US +1255746816,1255749247,US +1255749248,1255749311,CH +1255749312,1255750239,US 1255750240,1255750271,AU -1255750272,1255753215,US -1255753216,1255753471,GB -1255753472,1255768063,US +1255750272,1255756799,US +1255756800,1255756815,CA +1255756816,1255768063,US 1255768064,1255768575,CA 1255768576,1255770367,US 1255770368,1255770623,CA -1255770624,1255780351,US -1255780352,1255782399,CA -1255782400,1255796743,US -1255796744,1255796751,GB -1255796752,1255972863,US +1255770624,1255776431,US +1255776432,1255776439,LB +1255776440,1255784959,US +1255784960,1255784967,BE +1255784968,1255788511,US +1255788512,1255788543,BE +1255788544,1255792127,US +1255792128,1255792383,IL +1255792384,1255792767,US +1255792768,1255792895,IL +1255792896,1255972863,US 1255972864,1255981055,CA 1255981056,1256001535,US 1256001536,1256005631,CA @@ -26497,9 +33368,13 @@ 1256079360,1256087551,KY 1256087552,1256098559,US 1256098560,1256098815,CA -1256098816,1263264305,US +1256098816,1263263999,US +1263264000,1263264127,CA +1263264128,1263264305,US 1263264306,1263264321,PK -1263264322,1263266623,US +1263264322,1263264511,US +1263264512,1263264767,CA +1263264768,1263266623,US 1263266624,1263266655,CA 1263266656,1263267327,US 1263267328,1263267583,CA @@ -26511,9 +33386,7 @@ 1263268276,1263268340,CA 1263268341,1263268343,US 1263268344,1263268351,CA -1263268352,1263268607,US -1263268608,1263268672,CA -1263268673,1263268769,US +1263268352,1263268769,US 1263268770,1263268863,CA 1263268864,1263270143,US 1263270144,1263270159,CA @@ -26521,15 +33394,46 @@ 1263271424,1263271679,CA 1263271680,1264717823,US 1264717824,1264718335,CA -1264718336,1264736255,US +1264718336,1264718591,US +1264718592,1264718599,GB +1264718600,1264718719,US +1264718720,1264718847,CA +1264718848,1264719103,US +1264719104,1264719359,CA +1264719360,1264733759,US +1264733760,1264733823,IL +1264733824,1264736255,US 1264736256,1264737279,DO 1264737280,1264738175,US 1264738176,1264738207,IL 1264738208,1264762879,US -1264762880,1264766975,CA -1264766976,1264980735,US +1264762880,1264763391,CA +1264763392,1264763647,IE +1264763648,1264764927,CA +1264764928,1264764959,US +1264764960,1264766975,CA +1264766976,1264978623,US +1264978624,1264978639,CA +1264978640,1264980735,US 1264980736,1264980743,CA -1264980744,1266107759,US +1264980744,1264982847,US +1264982848,1264982855,CA +1264982856,1264982895,US +1264982896,1264982903,AF +1264982904,1264983031,US +1264983032,1264983039,AU +1264983040,1264984575,US +1264984576,1264984583,VE +1264984584,1264984703,US +1264984704,1264984711,CA +1264984712,1264984719,US +1264984720,1264984735,IN +1264984736,1264984751,US +1264984752,1264984767,IN +1264984768,1264984791,US +1264984792,1264984799,CA +1264984800,1264984807,AF +1264984808,1266107759,US 1266107760,1266107775,UM 1266107776,1266147327,US 1266147328,1266155519,CA @@ -26561,7 +33465,13 @@ 1275607072,1275607087,PL 1275607088,1275607407,US 1275607408,1275607423,PL -1275607424,1275621375,US +1275607424,1275608319,US +1275608320,1275608335,PL +1275608336,1275608575,US +1275608576,1275608591,PL +1275608592,1275608831,US +1275608832,1275608847,PL +1275608848,1275621375,US 1275621376,1275625471,CA 1275625472,1275658239,US 1275658240,1275658495,GB @@ -26900,7 +33810,13 @@ 1275920080,1275920095,CA 1275920096,1279262719,US 1279262720,1279787007,CA -1279787008,1279848447,US +1279787008,1279828567,US +1279828568,1279828575,CA +1279828576,1279828615,US +1279828616,1279828623,CA +1279828624,1279829711,US +1279829712,1279829759,FR +1279829760,1279848447,US 1279848448,1279852543,PR 1279852544,1279921919,US 1279921920,1279922047,IE @@ -26927,17 +33843,23 @@ 1279953056,1279953087,US 1279953088,1279953671,CA 1279953672,1279953679,US -1279953680,1279953951,CA +1279953680,1279953759,CA +1279953760,1279953791,GB +1279953792,1279953951,CA 1279953952,1279953967,US -1279953968,1279954095,CA +1279953968,1279954015,CA +1279954016,1279954047,US +1279954048,1279954095,CA 1279954096,1279954119,US 1279954120,1279954303,CA 1279954304,1279954431,US 1279954432,1279954527,CA -1279954528,1279954559,US -1279954560,1279954623,CA -1279954624,1279954687,FI -1279954688,1279954783,CA +1279954528,1279954543,US +1279954544,1279954623,CA +1279954624,1279954655,FI +1279954656,1279954719,CA +1279954720,1279954727,US +1279954728,1279954783,CA 1279954784,1279954839,US 1279954840,1279954879,CA 1279954880,1279954911,US @@ -26952,7 +33874,8 @@ 1279956032,1279956047,CR 1279956048,1279956059,US 1279956060,1279956063,MX -1279956064,1279956079,US +1279956064,1279956071,US +1279956072,1279956079,CA 1279956080,1279956095,CR 1279956096,1279956239,US 1279956240,1279956255,CA @@ -26966,13 +33889,21 @@ 1279957120,1279957128,IN 1279957129,1279957135,US 1279957136,1279957151,IN -1279957152,1279957231,US +1279957152,1279957172,US +1279957173,1279957173,IN +1279957174,1279957174,US +1279957175,1279957175,IN +1279957176,1279957179,US +1279957180,1279957180,IN +1279957181,1279957184,US +1279957185,1279957185,IN +1279957186,1279957231,US 1279957232,1279957243,IN -1279957244,1279957375,US +1279957244,1279957252,US +1279957253,1279957253,IN +1279957254,1279957375,US 1279957376,1279957383,IN -1279957384,1279957407,US -1279957408,1279957427,IN -1279957428,1279957431,US +1279957384,1279957431,US 1279957432,1279957439,IN 1279957440,1279957631,US 1279957632,1279957651,IN @@ -26980,7 +33911,9 @@ 1279957656,1279957674,IN 1279957675,1279958020,US 1279958021,1279958030,IN -1279958031,1279958399,US +1279958031,1279958305,US +1279958306,1279958306,IN +1279958307,1279958399,US 1279958400,1279958495,IN 1279958496,1279959551,US 1279959552,1279959807,CA @@ -26995,16 +33928,22 @@ 1279960528,1279960535,US 1279960536,1279960559,CA 1279960560,1279960567,MX -1279960568,1279962175,US +1279960568,1279961087,US +1279961088,1279961343,IN +1279961344,1279962175,US 1279962176,1279962207,CA 1279962208,1279962223,US 1279962224,1279962239,CA -1279962240,1279962895,US +1279962240,1279962783,US +1279962784,1279962791,CN +1279962792,1279962895,US 1279962896,1279962911,CA 1279962912,1279962927,CN 1279962928,1279962943,US 1279962944,1279962975,CN -1279962976,1279963935,US +1279962976,1279963135,US +1279963136,1279963391,IN +1279963392,1279963935,US 1279963936,1279963967,CA 1279963968,1279965183,US 1279965184,1279966207,CA @@ -27012,16 +33951,17 @@ 1279967232,1279971327,CA 1279971328,1279971583,US 1279971584,1279972095,CA -1279972096,1279973951,US +1279972096,1279973887,US +1279973888,1279973951,IN 1279973952,1279973967,CA -1279973968,1279974175,US +1279973968,1279973983,US +1279973984,1279974015,IN +1279974016,1279974175,US 1279974176,1279974207,CN 1279974208,1279974271,CA 1279974272,1279974391,US 1279974392,1279974399,CA -1279974400,1279974527,US -1279974528,1279974655,CA -1279974656,1279974783,US +1279974400,1279974783,US 1279974784,1279974799,EG 1279974800,1279974815,CA 1279974816,1279975263,US @@ -27058,7 +33998,9 @@ 1279979008,1279979263,IN 1279979264,1279979327,US 1279979328,1279979391,IN -1279979392,1279979559,US +1279979392,1279979424,US +1279979425,1279979425,IN +1279979426,1279979559,US 1279979560,1279979575,CA 1279979576,1279979583,US 1279979584,1279980063,CA @@ -27066,7 +34008,9 @@ 1279980072,1279980079,BV 1279980080,1279980127,CA 1279980128,1279980135,US -1279980136,1279981567,CA +1279980136,1279980159,CA +1279980160,1279980287,US +1279980288,1279981567,CA 1279981568,1279981823,US 1279981824,1279981855,VG 1279981856,1279982778,US @@ -27075,9 +34019,7 @@ 1279983048,1279983072,IN 1279983073,1279983079,US 1279983080,1279983087,IN -1279983088,1279983519,US -1279983520,1279983532,IN -1279983533,1279999999,US +1279983088,1279999999,US 1280000000,1280032767,CA 1280032768,1280040959,US 1280040960,1280043527,CA @@ -27291,13 +34233,14 @@ 1296236800,1296237055,GB 1296237056,1296237311,FR 1296237312,1296237567,US -1296237568,1296237823,NL +1296237568,1296237823,FR 1296237824,1296238079,ES 1296238080,1296238591,DE 1296238592,1296239103,NL 1296239104,1296239231,FR 1296239232,1296239359,NL -1296239360,1296240127,FR +1296239360,1296239615,DE +1296239616,1296240127,FR 1296240128,1296241151,BE 1296241152,1296241407,IT 1296241408,1296242175,NL @@ -27320,15 +34263,17 @@ 1296247808,1296247871,US 1296247872,1296247999,FR 1296248000,1296248063,IE -1296248064,1296248127,FR -1296248128,1296248255,IE +1296248064,1296248191,FR +1296248192,1296248255,IE 1296248256,1296248318,BE 1296248319,1296248319,FR 1296248320,1296248383,BE 1296248384,1296248447,IT 1296248448,1296248575,US 1296248576,1296248703,IE -1296248704,1296249855,FR +1296248704,1296248959,FR +1296248960,1296249024,DE +1296249025,1296249855,FR 1296249856,1296249887,US 1296249888,1296249951,FR 1296249952,1296250015,DE @@ -27337,13 +34282,15 @@ 1296250080,1296250111,IL 1296250112,1296250143,IE 1296250144,1296250175,GB -1296250176,1296250207,BE +1296250176,1296250207,FR 1296250208,1296250239,ES 1296250240,1296250271,BE 1296250272,1296250303,DE 1296250304,1296250335,FR 1296250336,1296250367,ES -1296250368,1296251103,FR +1296250368,1296251039,FR +1296251040,1296251071,US +1296251072,1296251103,NL 1296251104,1296251135,ES 1296251136,1296251167,GB 1296251168,1296251199,HR @@ -27352,9 +34299,14 @@ 1296251328,1296251359,IE 1296251360,1296251391,DE 1296251392,1296251775,NL -1296251776,1296252047,FR -1296252048,1296252055,DE -1296252056,1296252063,BE +1296251776,1296251903,DE +1296251904,1296251919,IR +1296251920,1296251935,BE +1296251936,1296251967,US +1296251968,1296252015,NL +1296252016,1296252039,US +1296252040,1296252055,DE +1296252056,1296252063,US 1296252064,1296252079,IT 1296252080,1296252087,IE 1296252088,1296252095,FR @@ -27371,15 +34323,16 @@ 1296252256,1296252271,GB 1296252272,1296252303,FR 1296252304,1296252319,IL -1296252320,1296252367,FR +1296252320,1296252335,GB +1296252336,1296252367,FR 1296252368,1296252383,DE -1296252384,1296252415,IE +1296252384,1296252399,RO +1296252400,1296252415,IE 1296252416,1296252671,FR 1296252672,1296252679,GB 1296252680,1296252687,FR 1296252688,1296252695,NL -1296252696,1296252703,IE -1296252704,1296252711,DE +1296252696,1296252711,DE 1296252712,1296252719,FR 1296252720,1296252727,BE 1296252728,1296252735,IL @@ -27392,8 +34345,7 @@ 1296252840,1296252847,DE 1296252848,1296252855,GB 1296252856,1296252871,IE -1296252872,1296252879,BE -1296252880,1296252887,DE +1296252872,1296252887,DE 1296252888,1296252895,IE 1296252896,1296252911,BE 1296252912,1296252919,GB @@ -27407,13 +34359,13 @@ 1296258048,1296258303,TW 1296258304,1296259071,NL 1296259072,1296259583,US -1296259584,1296259839,FR +1296259584,1296259839,DE 1296259840,1296260351,NL 1296260352,1296260607,US -1296260608,1296260863,DE -1296260864,1296262143,FR -1296262144,1296262655,US -1296262656,1296262911,CA +1296260608,1296262143,DE +1296262144,1296262399,FR +1296262400,1296262655,US +1296262656,1296262911,FR 1296262912,1296263935,US 1296263936,1296263943,FR 1296263944,1296263999,US @@ -27432,8 +34384,8 @@ 1296264240,1296264271,FR 1296264272,1296264303,US 1296264304,1296264319,CA -1296264320,1296264399,US -1296264400,1296264447,FR +1296264320,1296264383,US +1296264384,1296264447,FR 1296264448,1296264543,US 1296264544,1296264639,CA 1296264640,1296264671,US @@ -27443,8 +34395,10 @@ 1296265088,1296265151,CA 1296265152,1296265215,FR 1296265216,1296265727,US -1296265728,1296265983,FR -1296265984,1296267263,US +1296265728,1296266239,FR +1296266240,1296266751,US +1296266752,1296267007,FR +1296267008,1296267263,US 1296267264,1296267519,FR 1296267520,1296267775,CA 1296267776,1296268031,US @@ -27458,41 +34412,35 @@ 1296367616,1296400383,GR 1296400384,1296433151,BH 1296433152,1296465919,BG -1296465920,1296466239,NG -1296466240,1296466303,NO +1296465920,1296466303,NO 1296466304,1296466335,BF -1296466336,1296466367,NO -1296466368,1296466383,AO -1296466384,1296466399,NO +1296466336,1296466399,NO 1296466400,1296466415,AO 1296466416,1296466431,NG -1296466432,1296466439,TZ -1296466440,1296466495,NO +1296466432,1296466447,TZ +1296466448,1296466495,NO 1296466496,1296466543,GN 1296466544,1296466559,NO -1296466560,1296466583,NG -1296466584,1296466639,NO +1296466560,1296466575,NG +1296466576,1296466623,NO +1296466624,1296466631,MR +1296466632,1296466639,NO 1296466640,1296466655,NG 1296466656,1296466671,BJ 1296466672,1296466687,NO 1296466688,1296466719,BJ -1296466720,1296466751,NO -1296466752,1296466759,ML +1296466720,1296466759,NO 1296466760,1296466767,SL 1296466768,1296466775,BF -1296466776,1296466783,GN -1296466784,1296467711,NO -1296467712,1296467967,NG -1296467968,1296468479,NO -1296468480,1296469247,NG -1296469248,1296472351,NO -1296472352,1296472383,NG +1296466776,1296468991,NO +1296468992,1296469247,NG +1296469248,1296472383,NO 1296472384,1296472415,BI 1296472416,1296473087,NO 1296473088,1296474623,LT 1296474624,1296476159,US -1296476160,1296480255,LT -1296480256,1296482303,NO +1296476160,1296479743,LT +1296479744,1296482303,NO 1296482304,1296498687,LT 1296498688,1296531455,BG 1296531456,1296564223,MT @@ -27531,6 +34479,7 @@ 1296613376,1296615423,IT 1296615424,1296617471,GB 1296617472,1296619519,ES +1296619520,1296621567,DE 1296621568,1296623615,SE 1296623616,1296625663,BE 1296625664,1296629759,RU @@ -27584,9 +34533,7 @@ 1296678152,1296678159,A2 1296678160,1296678215,NG 1296678216,1296678223,A2 -1296678224,1296678319,NG -1296678320,1296678327,A2 -1296678328,1296678351,NG +1296678224,1296678351,NG 1296678352,1296678367,A2 1296678368,1296678415,NG 1296678416,1296678431,A2 @@ -27599,7 +34546,10 @@ 1296678792,1296678831,NG 1296678832,1296678839,A2 1296678840,1296678911,NG -1296678912,1296680959,SA +1296678912,1296680191,SA +1296680192,1296680447,AE +1296680448,1296680703,KW +1296680704,1296680959,SA 1296680960,1296683007,ES 1296683008,1296685055,IE 1296685056,1296687103,TR @@ -27615,9 +34565,7 @@ 1296701440,1296703487,RU 1296703488,1296705535,BY 1296705536,1296707583,GE -1296707584,1296708039,NL -1296708040,1296708047,AE -1296708048,1296709631,NL +1296707584,1296709631,NL 1296709632,1296711679,CY 1296711680,1296713727,KZ 1296713728,1296715775,RU @@ -27644,7 +34592,7 @@ 1296754688,1296756735,DE 1296756736,1296758783,FR 1296758784,1296760831,RS -1296760832,1296762879,GB +1296760832,1296764927,RU 1296764928,1296769023,AT 1296769024,1296771071,TR 1296771072,1296773119,LT @@ -27657,7 +34605,7 @@ 1296785408,1296787455,IE 1296787456,1296789503,GB 1296789504,1296791551,CH -1296791552,1296793599,NL +1296791552,1296793599,GB 1296793600,1296795647,RU 1296795648,1296795903,NL 1296795904,1296797695,GB @@ -27666,7 +34614,7 @@ 1296801792,1296803839,DK 1296803840,1296805887,RU 1296805888,1296807935,ES -1296807936,1296812031,GB +1296807936,1296809983,GB 1296812032,1296814079,DE 1296814080,1296816127,NO 1296816128,1296818175,TR @@ -27685,9 +34633,7 @@ 1296957440,1296973823,BG 1296973824,1296990207,CZ 1296990208,1297006591,BG -1297006592,1297022207,BA -1297022208,1297022463,MD -1297022464,1297022975,BA +1297006592,1297022975,BA 1297022976,1297026815,LT 1297026816,1297026847,FR 1297026848,1297026879,LT @@ -27758,7 +34704,9 @@ 1297867584,1297867647,SC 1297867648,1297867687,RU 1297867688,1297867695,CY -1297867696,1297867855,RU +1297867696,1297867743,RU +1297867744,1297867775,AQ +1297867776,1297867855,RU 1297867856,1297867871,MK 1297867872,1297867879,ES 1297867880,1297868799,RU @@ -27835,7 +34783,7 @@ 1298110464,1298112511,ES 1298112512,1298114559,IE 1298114560,1298116607,IT -1298116608,1298118655,RU +1298116608,1298118655,GB 1298118656,1298120703,AM 1298120704,1298122751,CZ 1298122752,1298124799,RU @@ -27843,7 +34791,23 @@ 1298126848,1298127615,SA 1298127616,1298128127,IR 1298128128,1298128895,SA -1298128896,1298130943,FR +1298128896,1298129156,NL +1298129157,1298129166,ES +1298129167,1298129193,NL +1298129194,1298129197,ES +1298129198,1298129248,NL +1298129249,1298129252,ES +1298129253,1298129738,NL +1298129739,1298129739,IT +1298129740,1298129744,NL +1298129745,1298129745,US +1298129746,1298129751,NL +1298129752,1298129755,US +1298129756,1298129788,NL +1298129789,1298129792,IT +1298129793,1298130180,NL +1298130181,1298130426,TR +1298130427,1298130943,NL 1298130944,1298132991,BG 1298132992,1298135039,FI 1298135040,1298137087,NL @@ -27861,7 +34825,11 @@ 1298841600,1298857983,RU 1298857984,1298874367,SE 1298874368,1298907135,GB -1298907136,1298923519,IE +1298907136,1298915199,IE +1298915200,1298915215,CA +1298915216,1298918655,IE +1298918656,1298918663,US +1298918664,1298923519,IE 1298923520,1298939903,IT 1298939904,1298956287,RU 1298956288,1298972671,GB @@ -27888,15 +34856,15 @@ 1299016960,1299017215,NL 1299017216,1299017727,RU 1299017728,1299021823,BE -1299021824,1299024559,CH +1299021824,1299023879,CH +1299023880,1299023887,DE +1299023888,1299024559,CH 1299024560,1299024575,DE 1299024576,1299026111,CH 1299026112,1299026127,ES 1299026128,1299026251,CH 1299026252,1299026263,PT -1299026264,1299032063,CH -1299032064,1299032319,NL -1299032320,1299038207,CH +1299026264,1299038207,CH 1299038208,1299054591,FI 1299054592,1299070975,SE 1299070976,1299075071,SA @@ -27921,10 +34889,18 @@ 1305477120,1305739263,ES 1305739264,1306001407,DK 1306001408,1306132479,RU -1306132480,1306263551,SE +1306132480,1306198015,SE +1306198016,1306206207,LV +1306206208,1306214399,HR +1306214400,1306222591,LT +1306222592,1306230783,HR +1306230784,1306238975,LT +1306238976,1306263551,SE 1306263552,1306271743,KE 1306271744,1306279935,RU -1306279936,1306286079,IT +1306279936,1306285775,IT +1306285776,1306285783,US +1306285784,1306286079,IT 1306286080,1306287103,CH 1306287104,1306287615,IT 1306287616,1306287903,CH @@ -27934,7 +34910,10 @@ 1306311144,1306311151,CH 1306311152,1306312703,RU 1306312704,1306320895,UZ -1306320896,1306329087,DE +1306320896,1306323199,DE +1306323200,1306323263,NL +1306323264,1306323295,GB +1306323296,1306329087,DE 1306329088,1306337279,BA 1306337280,1306345471,HU 1306345472,1306353663,LT @@ -27983,7 +34962,7 @@ 1307238400,1307246591,SK 1307246592,1307254783,KG 1307254784,1307255551,NL -1307255552,1307255807,GR +1307255552,1307255807,GB 1307255808,1307262975,NL 1307262976,1307271167,AT 1307271168,1307279359,MD @@ -28068,8 +35047,7 @@ 1307662368,1307664383,BE 1307664384,1307668479,NO 1307668480,1307672575,ES -1307672576,1307674623,SE -1307674624,1307676671,DK +1307672576,1307676671,DK 1307676672,1307680767,RU 1307680768,1307684863,LV 1307684864,1307688959,GB @@ -28079,6 +35057,7 @@ 1307701248,1307709439,RU 1307709440,1307713535,AL 1307713536,1307717631,IT +1307717632,1307721727,GE 1307721728,1307725823,AT 1307725824,1307729919,CZ 1307729920,1307734015,RU @@ -28093,15 +35072,14 @@ 1307756288,1307756431,GB 1307756432,1307756447,FR 1307756448,1307756543,GB -1307756544,1307756847,FR -1307756848,1307756863,US +1307756544,1307756863,FR 1307756864,1307756903,GB 1307756904,1307756911,US 1307756912,1307757063,GB 1307757064,1307757071,US 1307757072,1307757183,GB -1307757184,1307757247,US -1307757248,1307758591,GB +1307757184,1307757279,US +1307757280,1307758591,GB 1307758592,1307762687,SM 1307762688,1307766783,PL 1307766784,1307770879,GB @@ -28114,8 +35092,16 @@ 1307803648,1307807743,DK 1307807744,1307811839,SE 1307811840,1307815935,NL -1307815936,1307819791,BE -1307819792,1307820031,EU +1307815936,1307816191,EU +1307816192,1307816447,GB +1307816448,1307818239,EU +1307818240,1307818495,GB +1307818496,1307818751,DE +1307818752,1307819007,ES +1307819008,1307819263,DE +1307819264,1307819519,NL +1307819520,1307819775,BE +1307819776,1307820031,IT 1307820032,1307824127,ES 1307824128,1307828223,HU 1307828224,1307830128,NL @@ -28164,10 +35150,8 @@ 1307901952,1307906047,JO 1307906048,1307906599,CH 1307906600,1307906607,DK -1307906608,1307906943,CH -1307906944,1307907071,IM -1307907072,1307907199,CH -1307907200,1307907327,IM +1307906608,1307907263,CH +1307907264,1307907327,IM 1307907328,1307910143,CH 1307910144,1307914239,DE 1307914240,1307918335,NL @@ -28187,7 +35171,12 @@ 1307979776,1307981823,ZW 1307981824,1307982847,ZA 1307982848,1307983359,ZW -1307983360,1307983871,GB +1307983360,1307983423,ZA +1307983424,1307983487,BW +1307983488,1307983551,ZM +1307983552,1307983615,MZ +1307983616,1307983743,ZA +1307983744,1307983871,ZM 1307983872,1307987967,LB 1307987968,1307992063,FR 1307992064,1307996159,RU @@ -28203,34 +35192,35 @@ 1308033280,1308033535,FR 1308033536,1308033791,DE 1308033792,1308034047,IT -1308034048,1308034559,DE +1308034048,1308034559,GB 1308034560,1308034815,CZ 1308034816,1308035327,DE 1308035328,1308035583,GB 1308035584,1308035839,AE 1308035840,1308036095,GB -1308036096,1308037119,DE +1308036096,1308036351,SE +1308036352,1308036607,BE +1308036608,1308036863,ES +1308036864,1308037119,FR 1308037120,1308041215,UA 1308041216,1308049407,RU 1308049408,1308053503,DK -1308053504,1308057599,RU 1308057600,1308061695,GR 1308061696,1308069887,RU 1308069888,1308073983,NO 1308073984,1308078079,RU -1308078080,1308078263,NL -1308078264,1308078267,SE -1308078268,1308078879,NL +1308078080,1308078879,NL 1308078880,1308078911,FR -1308078912,1308080127,NL +1308078912,1308079807,NL +1308079808,1308079823,SC +1308079824,1308080127,NL 1308080128,1308082175,RU 1308082176,1308084223,GB 1308084224,1308086271,RS 1308086272,1308088319,RU 1308088320,1308090367,UA 1308090368,1308092415,SK -1308092416,1308094463,RU -1308094464,1308096511,KW +1308092416,1308096511,RU 1308096512,1308098559,RS 1308098560,1308360703,NL 1308360704,1308622847,PL @@ -28253,7 +35243,9 @@ 1310214144,1310216191,UA 1310216192,1310218239,IT 1310218240,1310220287,NO -1310220288,1310222335,NL +1310220288,1310221311,NL +1310221312,1310221567,MK +1310221568,1310222335,NL 1310222336,1310224383,RS 1310224384,1310226431,GB 1310226432,1310228479,BE @@ -28496,20 +35488,26 @@ 1311256576,1311258623,FR 1311258624,1311262719,GB 1311262720,1311262975,FR -1311262976,1311263247,CH -1311263248,1311263263,FR -1311263264,1311263359,CH +1311262976,1311263359,CH 1311263360,1311263375,FR 1311263376,1311263407,CH 1311263408,1311263423,BE 1311263424,1311263615,CH -1311263616,1311264767,FR +1311263616,1311263679,FR +1311263680,1311263871,CH +1311263872,1311263999,FR +1311264000,1311264119,CH +1311264120,1311264127,FR +1311264128,1311264191,CH +1311264192,1311264767,FR 1311264768,1311266815,RU 1311266816,1311268863,FR 1311268864,1311270911,BE 1311270912,1311272959,RU 1311272960,1311275007,GB -1311275008,1311277055,FR +1311275008,1311276671,FR +1311276672,1311276703,RU +1311276704,1311277055,FR 1311277056,1311279103,IT 1311279104,1311280127,BG 1311280128,1311280383,MK @@ -28530,11 +35528,7 @@ 1311311824,1311311824,JE 1311311825,1311311871,GB 1311311872,1311315967,CZ -1311315968,1311316423,PL -1311316424,1311316439,GB -1311316440,1311316447,PL -1311316448,1311316455,HR -1311316456,1311318015,PL +1311315968,1311318015,PL 1311318016,1311320063,RU 1311320064,1311322111,FR 1311322112,1311324159,IT @@ -28575,7 +35569,7 @@ 1311367888,1311367895,DE 1311367896,1311367903,NG 1311367904,1311367927,A2 -1311367928,1311367935,IR +1311367928,1311367935,DE 1311367936,1311367967,BJ 1311367968,1311367999,ET 1311368000,1311368015,A2 @@ -28604,15 +35598,19 @@ 1311374352,1311375359,FR 1311375360,1311506431,DE 1311506432,1311637503,CZ -1311637504,1311707655,DE +1311637504,1311676023,DE +1311676024,1311676031,IT +1311676032,1311707655,DE 1311707656,1311707663,NL -1311707664,1311756823,DE -1311756824,1311756831,ES -1311756832,1311757439,DE +1311707664,1311755407,DE +1311755408,1311755415,IT +1311755416,1311757439,DE 1311757440,1311757447,ES 1311757448,1311757463,DE 1311757464,1311757471,ES -1311757472,1312292863,DE +1311757472,1311767311,DE +1311767312,1311767319,IT +1311767320,1312292863,DE 1312292864,1312817151,LT 1312817152,1313865727,SE 1313865728,1313931263,CZ @@ -28693,9 +35691,7 @@ 1315771936,1315771951,NA 1315771952,1315771959,UA 1315771960,1315771967,NA -1315771968,1315771975,UA -1315771976,1315771983,NA -1315771984,1315772031,UA +1315771968,1315772031,UA 1315772032,1315772039,NA 1315772040,1315772167,UA 1315772168,1315772175,NA @@ -28763,9 +35759,15 @@ 1315774264,1315774423,UA 1315774424,1315774431,NA 1315774432,1315774463,UA -1315774464,1315782655,RU +1315774464,1315778559,RU +1315778560,1315780607,AZ +1315780608,1315780863,DE +1315780864,1315781119,PL +1315781120,1315782655,DE 1315782656,1315786751,AM -1315786752,1315790847,FR +1315786752,1315790592,FR +1315790593,1315790593,IT +1315790594,1315790847,FR 1315790848,1315794943,RS 1315794944,1315803135,RU 1315803136,1315807231,KZ @@ -28795,24 +35797,7 @@ 1315885056,1315889151,CZ 1315889152,1315893247,DE 1315893248,1315897343,RU -1315897344,1315897855,IR -1315897856,1315897863,AE -1315897864,1315897879,IR -1315897880,1315897887,AE -1315897888,1315897951,IR -1315897952,1315897991,AE -1315897992,1315897999,IR -1315898000,1315898015,AE -1315898016,1315898031,IR -1315898032,1315898111,AE -1315898112,1315900671,IR -1315900672,1315900735,AE -1315900736,1315900799,IR -1315900800,1315900927,AE -1315900928,1315901223,IR -1315901224,1315901247,AE -1315901248,1315901279,IR -1315901280,1315901439,AE +1315897344,1315901439,IR 1315901440,1315905535,UA 1315905536,1315907583,BA 1315907584,1315908095,SI @@ -28822,7 +35807,11 @@ 1315917824,1315921919,RU 1315921920,1315926015,TR 1315926016,1315930111,CZ -1315930112,1315934207,DE +1315930112,1315930623,DE +1315930624,1315930879,LB +1315930880,1315931135,DE +1315931136,1315931391,LB +1315931392,1315934207,DE 1315934208,1315938303,RU 1315938304,1315942399,DK 1315942400,1315946495,UA @@ -28834,23 +35823,29 @@ 1317011456,1317044223,BG 1317044224,1317076991,CZ 1317076992,1317109759,BE -1317109760,1317113855,GB +1317109760,1317113103,GB +1317113104,1317113119,IE +1317113120,1317113855,GB 1317113856,1317114111,US -1317114112,1317115135,GB -1317115136,1317115391,IE -1317115392,1317118207,GB +1317114112,1317118207,GB 1317118208,1317118463,IN -1317118464,1317119103,GB -1317119104,1317119167,IT -1317119168,1317126399,GB +1317118464,1317122303,GB +1317122304,1317122559,RU +1317122560,1317126399,GB 1317126400,1317126655,US 1317126656,1317129279,GB 1317129280,1317129343,CA 1317129344,1317129471,GB 1317129472,1317129727,IT -1317129728,1317135615,GB +1317129728,1317133055,GB +1317133056,1317133183,LV +1317133184,1317135615,GB 1317135616,1317135871,DE -1317135872,1317137663,GB +1317135872,1317136895,GB +1317136896,1317137151,EE +1317137152,1317137183,GB +1317137184,1317137215,CH +1317137216,1317137663,GB 1317137664,1317137919,SE 1317137920,1317140095,GB 1317140096,1317140223,US @@ -28889,8 +35884,12 @@ 1317642864,1317642879,GB 1317642880,1317642975,IE 1317642976,1317642991,GB -1317642992,1317645407,IE -1317645408,1317645823,GB +1317642992,1317643023,IE +1317643024,1317643039,GB +1317643040,1317645407,IE +1317645408,1317645423,GB +1317645424,1317645471,IE +1317645472,1317645823,GB 1317645824,1317646895,IE 1317646896,1317646911,GB 1317646912,1317646991,IE @@ -28906,10 +35905,10 @@ 1317650096,1317650135,IE 1317650136,1317650143,GB 1317650144,1317650431,IE -1317650432,1317666815,RU -1317666816,1317666823,IQ +1317650432,1317666815,PT +1317666816,1317666823,A2 1317666824,1317666831,CD -1317666832,1317666839,NG +1317666832,1317666839,A2 1317666840,1317666855,GH 1317666856,1317666863,A2 1317666864,1317666871,GH @@ -28926,7 +35925,7 @@ 1317667048,1317667055,A2 1317667056,1317667063,LR 1317667064,1317667103,A2 -1317667104,1317667111,NG +1317667104,1317667111,UG 1317667112,1317667135,A2 1317667136,1317667143,AO 1317667144,1317667151,A2 @@ -28934,13 +35933,15 @@ 1317667160,1317667167,AO 1317667168,1317667175,NG 1317667176,1317667191,A2 -1317667192,1317667231,NG +1317667192,1317667207,NG +1317667208,1317667215,A2 +1317667216,1317667231,NG 1317667232,1317667239,A2 1317667240,1317667247,NG 1317667248,1317667263,A2 1317667264,1317667271,GB -1317667272,1317667279,A2 -1317667280,1317667295,NG +1317667272,1317667287,A2 +1317667288,1317667295,NG 1317667296,1317667311,A2 1317667312,1317667335,NG 1317667336,1317667343,A2 @@ -28948,8 +35949,7 @@ 1317667352,1317667359,AO 1317667360,1317667367,A2 1317667368,1317667375,NG -1317667376,1317667407,A2 -1317667408,1317667423,NG +1317667376,1317667423,A2 1317667424,1317667431,TD 1317667432,1317667439,GH 1317667440,1317667455,A2 @@ -28959,22 +35959,21 @@ 1317667496,1317667503,NG 1317667504,1317667551,A2 1317667552,1317667567,NG -1317667568,1317667711,A2 -1317667712,1317667719,NG -1317667720,1317667735,A2 +1317667568,1317667735,A2 1317667736,1317667743,NG 1317667744,1317667751,A2 1317667752,1317667759,NG 1317667760,1317667767,FR 1317667768,1317667775,ZA 1317667776,1317667783,US -1317667784,1317667799,NG +1317667784,1317667791,AO +1317667792,1317667799,NG 1317667800,1317667807,A2 -1317667808,1317667823,NG -1317667824,1317668095,A2 +1317667808,1317667815,NG +1317667816,1317667824,UG +1317667825,1317668095,A2 1317668096,1317668103,GH -1317668104,1317668111,ZM -1317668112,1317668143,A2 +1317668104,1317668143,A2 1317668144,1317668151,AO 1317668152,1317668167,NG 1317668168,1317668183,A2 @@ -28984,15 +35983,12 @@ 1317668208,1317668215,LR 1317668216,1317668223,A2 1317668224,1317668239,NG -1317668240,1317668247,A2 -1317668248,1317668255,NG -1317668256,1317668271,A2 +1317668240,1317668271,A2 1317668272,1317668279,SL 1317668280,1317668303,A2 -1317668304,1317668311,NG +1317668304,1317668311,UG 1317668312,1317668319,IQ -1317668320,1317668343,A2 -1317668344,1317668351,AO +1317668320,1317668351,A2 1317668352,1317668359,NG 1317668360,1317668367,SL 1317668368,1317668391,A2 @@ -29001,11 +35997,11 @@ 1317668408,1317668415,GH 1317668416,1317668447,NG 1317668448,1317668455,SL -1317668456,1317668463,NG +1317668456,1317668463,A2 1317668464,1317668471,AO 1317668472,1317668479,NG 1317668480,1317668487,A2 -1317668488,1317668495,NG +1317668488,1317668495,UG 1317668496,1317668503,GH 1317668504,1317668511,CD 1317668512,1317668519,IQ @@ -29017,39 +36013,36 @@ 1317668560,1317668575,NG 1317668576,1317668583,A2 1317668584,1317668591,LR -1317668592,1317668599,NG +1317668592,1317668599,UG 1317668600,1317668615,A2 -1317668616,1317668623,NG +1317668616,1317668623,UG 1317668624,1317668631,IQ 1317668632,1317668639,A2 1317668640,1317668655,NG 1317668656,1317668671,A2 -1317668672,1317668703,NG +1317668672,1317668687,NG +1317668688,1317668695,A2 +1317668696,1317668703,NG 1317668704,1317668727,A2 1317668728,1317668735,NG 1317668736,1317668767,A2 1317668768,1317668775,LR -1317668776,1317668791,NG +1317668776,1317668783,A2 +1317668784,1317668791,NG 1317668792,1317668807,A2 1317668808,1317668815,NG -1317668816,1317668831,A2 -1317668832,1317668839,NG -1317668840,1317668847,A2 +1317668816,1317668847,A2 1317668848,1317668855,NG 1317668856,1317668863,A2 1317668864,1317668871,LR -1317668872,1317668911,A2 -1317668912,1317668919,NG -1317668920,1317668935,A2 -1317668936,1317668943,NG -1317668944,1317668959,A2 -1317668960,1317668983,NG -1317668984,1317668999,A2 +1317668872,1317668959,A2 +1317668960,1317668991,UG +1317668992,1317668999,A2 1317669000,1317669007,CD 1317669008,1317669015,NG 1317669016,1317669055,A2 -1317669056,1317669079,NG -1317669080,1317669095,A2 +1317669056,1317669063,NG +1317669064,1317669095,A2 1317669096,1317669103,NG 1317669104,1317669111,A2 1317669112,1317669119,NG @@ -29063,16 +36056,10 @@ 1317669960,1317669983,A2 1317669984,1317669991,LR 1317669992,1317669999,NG -1317670000,1317670007,A2 -1317670008,1317670015,NG -1317670016,1317670071,A2 -1317670072,1317670079,NG -1317670080,1317670087,A2 -1317670088,1317670103,NG -1317670104,1317670111,A2 -1317670112,1317670119,NG -1317670120,1317670127,A2 -1317670128,1317670143,NG +1317670000,1317670063,A2 +1317670064,1317670103,NG +1317670104,1317670135,A2 +1317670136,1317670143,NG 1317670144,1317670175,SL 1317670176,1317670215,A2 1317670216,1317670223,NG @@ -29089,13 +36076,16 @@ 1317670480,1317670511,A2 1317670512,1317670519,CI 1317670520,1317670543,NG -1317670544,1317670551,IQ -1317670552,1317670567,NG +1317670544,1317670551,A2 +1317670552,1317670559,UG +1317670560,1317670567,NG 1317670568,1317670575,A2 1317670576,1317670583,NG 1317670584,1317670591,GH 1317670592,1317670607,A2 -1317670608,1317670639,NG +1317670608,1317670615,NG +1317670616,1317670631,UG +1317670632,1317670639,NG 1317670640,1317670647,A2 1317670648,1317670655,NG 1317670656,1317670663,AO @@ -29105,8 +36095,7 @@ 1317670712,1317670719,GH 1317670720,1317670727,A2 1317670728,1317670735,GH -1317670736,1317670759,A2 -1317670760,1317670767,NG +1317670736,1317670767,A2 1317670768,1317670775,GH 1317670776,1317670783,A2 1317670784,1317670791,GH @@ -29119,16 +36108,17 @@ 1317670864,1317670879,A2 1317670880,1317670887,NG 1317670888,1317670896,A2 -1317670897,1317670911,NG -1317670912,1317671175,A2 +1317670897,1317670903,NG +1317670904,1317671175,A2 1317671176,1317671191,NG -1317671192,1317671231,A2 -1317671232,1317671239,NG +1317671192,1317671239,A2 1317671240,1317671247,CI -1317671248,1317671255,NG +1317671248,1317671255,A2 1317671256,1317671263,CI -1317671264,1317671287,A2 -1317671288,1317671303,NG +1317671264,1317671279,A2 +1317671280,1317671287,NG +1317671288,1317671295,A2 +1317671296,1317671303,NG 1317671304,1317671319,A2 1317671320,1317671327,NG 1317671328,1317671335,A2 @@ -29142,46 +36132,47 @@ 1317671400,1317671407,IQ 1317671408,1317671415,UG 1317671416,1317671439,A2 -1317671440,1317671463,NG -1317671464,1317671471,A2 -1317671472,1317671487,NG +1317671440,1317671447,ZW +1317671448,1317671487,NG 1317671488,1317671527,A2 -1317671528,1317671543,NG -1317671544,1317671551,GH +1317671528,1317671535,NG +1317671536,1317671543,LR +1317671544,1317671551,A2 1317671552,1317671567,NG 1317671568,1317671583,A2 1317671584,1317671591,NG 1317671592,1317671607,A2 1317671608,1317671615,GH 1317671616,1317671647,A2 -1317671648,1317671679,NG +1317671648,1317671671,NG +1317671672,1317671679,AO 1317671680,1317671687,LR 1317671688,1317671719,A2 1317671720,1317671727,NG 1317671728,1317671759,A2 -1317671760,1317671767,IQ +1317671760,1317671767,AO 1317671768,1317671783,A2 1317671784,1317671807,NG 1317671808,1317671823,CI 1317671824,1317671831,NG 1317671832,1317671847,A2 -1317671848,1317671863,NG +1317671848,1317671855,NG +1317671856,1317671863,UG 1317671864,1317671887,A2 1317671888,1317671895,NG -1317671896,1317671903,CM +1317671896,1317671903,A2 1317671904,1317671911,NG 1317671912,1317671919,AO 1317671920,1317671927,NG 1317671928,1317671935,A2 1317671936,1317672447,GA -1317672448,1317672463,A2 +1317672448,1317672455,A2 +1317672456,1317672463,GA 1317672464,1317672471,NG 1317672472,1317672479,A2 1317672480,1317672487,ZM 1317672488,1317672503,NG -1317672504,1317672543,A2 -1317672544,1317672551,CD -1317672552,1317672583,A2 +1317672504,1317672583,A2 1317672584,1317672591,CD 1317672592,1317672615,A2 1317672616,1317672623,NG @@ -29190,25 +36181,25 @@ 1317672664,1317672671,A2 1317672672,1317672679,NG 1317672680,1317672727,A2 -1317672728,1317672735,NG +1317672728,1317672735,UG 1317672736,1317672743,LR 1317672744,1317672759,A2 1317672760,1317672767,NG 1317672768,1317672815,A2 1317672816,1317672823,BW -1317672824,1317672831,NG -1317672832,1317672839,A2 +1317672824,1317672839,A2 1317672840,1317672847,NG 1317672848,1317672863,A2 1317672864,1317672871,NG -1317672872,1317672879,A2 -1317672880,1317672895,NG -1317672896,1317672903,A2 +1317672872,1317672903,A2 1317672904,1317672919,CI 1317672920,1317672927,GH -1317672928,1317672951,NG -1317672952,1317672959,A2 -1317672960,1317673247,NG +1317672928,1317672935,A2 +1317672936,1317672943,NG +1317672944,1317672959,A2 +1317672960,1317673231,NG +1317673232,1317673239,A2 +1317673240,1317673247,NG 1317673248,1317673263,A2 1317673264,1317673271,UG 1317673272,1317673279,A2 @@ -29231,18 +36222,17 @@ 1317673480,1317673495,A2 1317673496,1317673527,NG 1317673528,1317673535,A2 -1317673536,1317673551,NG -1317673552,1317673559,A2 -1317673560,1317673575,NG +1317673536,1317673551,ZW +1317673552,1317673567,A2 +1317673568,1317673575,NG 1317673576,1317673583,CD -1317673584,1317673599,A2 -1317673600,1317673615,NG +1317673584,1317673607,A2 +1317673608,1317673615,NG 1317673616,1317673623,A2 1317673624,1317673631,NG 1317673632,1317673639,A2 1317673640,1317673647,AO -1317673648,1317673671,A2 -1317673672,1317673679,CM +1317673648,1317673679,A2 1317673680,1317673687,IQ 1317673688,1317673695,A2 1317673696,1317673703,NG @@ -29262,10 +36252,9 @@ 1317673920,1317673927,CI 1317673928,1317673943,NG 1317673944,1317673951,AO -1317673952,1317673959,A2 -1317673960,1317673967,NG -1317673968,1317673983,A2 -1317673984,1317674239,NG +1317673952,1317673967,NG +1317673968,1317673975,A2 +1317673976,1317674239,NG 1317674240,1317674271,A2 1317674272,1317674279,NG 1317674280,1317674287,A2 @@ -29278,21 +36267,21 @@ 1317674384,1317674399,NG 1317674400,1317674415,A2 1317674416,1317674423,AO -1317674424,1317674431,NG +1317674424,1317674431,UG 1317674432,1317674439,A2 1317674440,1317674440,AO 1317674441,1317674447,A2 1317674448,1317674455,AO 1317674456,1317674471,NG 1317674472,1317674487,A2 -1317674488,1317674495,NG +1317674488,1317674495,UG 1317674496,1317674527,A2 1317674528,1317674535,NG 1317674536,1317674543,IQ 1317674544,1317674567,NG 1317674568,1317674607,A2 1317674608,1317674615,NG -1317674616,1317674623,IQ +1317674616,1317674623,A2 1317674624,1317674631,NG 1317674632,1317674639,A2 1317674640,1317674647,NG @@ -29306,7 +36295,9 @@ 1317674744,1317674751,IQ 1317674752,1317674759,NG 1317674760,1317674767,A2 -1317674768,1317674791,NG +1317674768,1317674775,NG +1317674776,1317674783,A2 +1317674784,1317674791,NG 1317674792,1317674799,A2 1317674800,1317674807,NG 1317674808,1317674823,A2 @@ -29323,37 +36314,24 @@ 1317674952,1317674959,NG 1317674960,1317674967,GH 1317674968,1317674983,NG -1317674984,1317674999,A2 -1317675000,1317675007,NG -1317675008,1317675031,A2 -1317675032,1317675047,NG -1317675048,1317675055,A2 +1317674984,1317675031,A2 +1317675032,1317675039,NG +1317675040,1317675055,A2 1317675056,1317675063,NG 1317675064,1317675071,AO 1317675072,1317675095,NG -1317675096,1317675103,A2 -1317675104,1317675111,CD -1317675112,1317675183,A2 -1317675184,1317675199,CM +1317675096,1317675199,A2 1317675200,1317675215,NG -1317675216,1317675231,A2 -1317675232,1317675239,LR -1317675240,1317675247,A2 +1317675216,1317675247,A2 1317675248,1317675255,AO 1317675256,1317675271,A2 1317675272,1317675279,NG -1317675280,1317675287,CM -1317675288,1317675295,A2 +1317675280,1317675295,A2 1317675296,1317675319,NG -1317675320,1317675343,CM -1317675344,1317675351,A2 +1317675320,1317675351,A2 1317675352,1317675359,IQ 1317675360,1317675367,NG -1317675368,1317675375,A2 -1317675376,1317675383,CM -1317675384,1317675407,A2 -1317675408,1317675415,NG -1317675416,1317675423,A2 +1317675368,1317675423,A2 1317675424,1317675439,NG 1317675440,1317675447,A2 1317675448,1317675455,NG @@ -29364,12 +36342,11 @@ 1317675488,1317675503,A2 1317675504,1317675511,NG 1317675512,1317675535,A2 -1317675536,1317675543,NG +1317675536,1317675543,UG 1317675544,1317675551,IQ 1317675552,1317675559,NG 1317675560,1317675567,NA -1317675568,1317675583,A2 -1317675584,1317675591,LR +1317675568,1317675591,A2 1317675592,1317675607,NG 1317675608,1317675623,A2 1317675624,1317675639,NG @@ -29386,39 +36363,43 @@ 1317675744,1317675751,GH 1317675752,1317675759,NG 1317675760,1317675775,GH -1317675776,1317675783,NG -1317675784,1317675799,A2 -1317675800,1317675807,NG -1317675808,1317675815,A2 -1317675816,1317675839,NG -1317675840,1317675855,A2 +1317675776,1317675791,A2 +1317675792,1317675799,CD +1317675800,1317675807,GB +1317675808,1317675815,NG +1317675816,1317675823,A2 +1317675824,1317675839,NG +1317675840,1317675847,A2 +1317675848,1317675855,TD 1317675856,1317675863,NG 1317675864,1317675887,A2 1317675888,1317675895,CD -1317675896,1317675911,A2 -1317675912,1317675927,NG -1317675928,1317675943,A2 -1317675944,1317675951,GB -1317675952,1317675975,NG -1317675976,1317675983,A2 -1317675984,1317675991,LR +1317675896,1317675903,A2 +1317675904,1317675911,UG +1317675912,1317675919,NG +1317675920,1317675927,UG +1317675928,1317675935,LR +1317675936,1317675951,A2 +1317675952,1317675959,NG +1317675960,1317675967,A2 +1317675968,1317675975,NG +1317675976,1317675991,A2 1317675992,1317675999,NG -1317676000,1317676007,GN +1317676000,1317676007,A2 1317676008,1317676015,GH 1317676016,1317676023,SD 1317676024,1317676031,GQ 1317676032,1317676039,NG -1317676040,1317676047,CD -1317676048,1317676063,A2 -1317676064,1317676071,CM -1317676072,1317676079,A2 +1317676040,1317676055,A2 +1317676056,1317676063,NG +1317676064,1317676071,GH +1317676072,1317676079,NG 1317676080,1317676087,AO 1317676088,1317676095,NG -1317676096,1317676103,A2 +1317676096,1317676103,CM 1317676104,1317676111,NG 1317676112,1317676119,CM -1317676120,1317676127,A2 -1317676128,1317676135,NG +1317676120,1317676135,A2 1317676136,1317676143,CM 1317676144,1317676151,NG 1317676152,1317676159,CM @@ -29426,15 +36407,18 @@ 1317676168,1317676175,ML 1317676176,1317676191,A2 1317676192,1317676207,SD -1317676208,1317676223,A2 -1317676224,1317676231,AO +1317676208,1317676215,A2 +1317676216,1317676223,NG +1317676224,1317676231,GH 1317676232,1317676239,NG 1317676240,1317676247,SD 1317676248,1317676255,NG 1317676256,1317676263,CD 1317676264,1317676271,NG -1317676272,1317676287,A2 -1317676288,1317676551,LR +1317676272,1317676279,A2 +1317676280,1317676287,NG +1317676288,1317676543,LR +1317676544,1317676551,NG 1317676552,1317676559,AO 1317676560,1317676567,NG 1317676568,1317676575,LR @@ -29442,18 +36426,16 @@ 1317676584,1317676591,NG 1317676592,1317676599,AO 1317676600,1317676607,UG -1317676608,1317676615,NG -1317676616,1317676639,A2 -1317676640,1317676647,LR +1317676608,1317676631,A2 +1317676632,1317676639,NG +1317676640,1317676647,CD 1317676648,1317676655,A2 1317676656,1317676671,NG 1317676672,1317676687,A2 1317676688,1317676695,LR 1317676696,1317676711,A2 1317676712,1317676719,NG -1317676720,1317676727,GQ -1317676728,1317676751,A2 -1317676752,1317676759,ML +1317676720,1317676759,A2 1317676760,1317676767,LR 1317676768,1317676775,A2 1317676776,1317676783,UG @@ -29465,33 +36447,37 @@ 1317676848,1317676855,NG 1317676856,1317676863,A2 1317676864,1317676871,TG -1317676872,1317676911,A2 -1317676912,1317676919,NG -1317676920,1317676943,A2 +1317676872,1317676879,NG +1317676880,1317676903,A2 +1317676904,1317676911,NG +1317676912,1317676919,A2 +1317676920,1317676927,NG +1317676928,1317676943,A2 1317676944,1317676951,CM 1317676952,1317676983,A2 -1317676984,1317676991,NG -1317676992,1317676999,LR +1317676984,1317676999,NG 1317677000,1317677007,IQ -1317677008,1317677015,CD -1317677016,1317677047,A2 +1317677008,1317677023,A2 +1317677024,1317677039,NG +1317677040,1317677047,A2 1317677048,1317677055,NG 1317677056,1317677063,UG -1317677064,1317677071,A2 +1317677064,1317677071,TD 1317677072,1317677079,NG -1317677080,1317677087,SD +1317677080,1317677087,UG 1317677088,1317677095,A2 1317677096,1317677103,BF -1317677104,1317677143,A2 -1317677144,1317677151,SD -1317677152,1317677191,A2 +1317677104,1317677127,A2 +1317677128,1317677135,NG +1317677136,1317677191,A2 1317677192,1317677199,SD 1317677200,1317677215,NG 1317677216,1317677231,A2 1317677232,1317677239,UG 1317677240,1317677247,A2 1317677248,1317677271,NG -1317677272,1317677303,A2 +1317677272,1317677279,FR +1317677280,1317677303,A2 1317677304,1317677311,NG 1317677312,1317677319,CD 1317677320,1317677327,AO @@ -29499,26 +36485,23 @@ 1317677336,1317677343,A2 1317677344,1317677351,NG 1317677352,1317677367,CD -1317677368,1317677375,NG -1317677376,1317677399,A2 +1317677368,1317677391,NG +1317677392,1317677399,A2 1317677400,1317677407,NG 1317677408,1317677415,CD -1317677416,1317677423,A2 +1317677416,1317677423,LR 1317677424,1317677431,CD 1317677432,1317677439,LR 1317677440,1317677447,NG 1317677448,1317677455,CD 1317677456,1317677463,AO -1317677464,1317677471,A2 +1317677464,1317677471,GQ 1317677472,1317677479,NG 1317677480,1317677487,AO -1317677488,1317677495,A2 -1317677496,1317677511,NG -1317677512,1317677519,CD -1317677520,1317677527,NG +1317677488,1317677495,CD +1317677496,1317677527,NG 1317677528,1317677535,GQ -1317677536,1317677543,A2 -1317677544,1317677551,CD +1317677536,1317677551,CD 1317677552,1317677559,A2 1317677560,1317677567,NG 1317677568,1317677663,A2 @@ -29529,92 +36512,112 @@ 1317677840,1317677847,LR 1317677848,1317677855,NG 1317677856,1317677863,BF -1317677864,1317677871,CM -1317677872,1317677895,A2 +1317677864,1317677895,A2 1317677896,1317677903,GN 1317677904,1317678007,A2 1317678008,1317678015,NG 1317678016,1317678047,A2 1317678048,1317678055,IQ -1317678056,1317678079,A2 -1317678080,1317678095,NG +1317678056,1317678087,A2 +1317678088,1317678095,NG 1317678096,1317678103,GQ -1317678104,1317678111,BE -1317678112,1317678143,A2 +1317678104,1317678111,NG +1317678112,1317678127,A2 +1317678128,1317678135,SD +1317678136,1317678143,NG 1317678144,1317678151,CD 1317678152,1317678159,NG 1317678160,1317678167,GQ 1317678168,1317678175,NG -1317678176,1317678199,A2 +1317678176,1317678183,GR +1317678184,1317678191,NG +1317678192,1317678199,A2 1317678200,1317678207,CD -1317678208,1317678215,NG -1317678216,1317678231,A2 +1317678208,1317678223,A2 +1317678224,1317678231,NG 1317678232,1317678239,BF -1317678240,1317678279,A2 -1317678280,1317678287,NG -1317678288,1317678319,A2 +1317678240,1317678247,CD +1317678248,1317678255,A2 +1317678256,1317678263,CD +1317678264,1317678271,A2 +1317678272,1317678287,NG +1317678288,1317678295,GR +1317678296,1317678311,A2 +1317678312,1317678319,SD 1317678320,1317678327,NG 1317678328,1317678335,A2 -1317678336,1317678343,NG +1317678336,1317678343,AO 1317678344,1317678351,A2 1317678352,1317678359,CD 1317678360,1317678367,NG 1317678368,1317678375,CD 1317678376,1317678383,NG 1317678384,1317678391,GL -1317678392,1317678423,A2 -1317678424,1317678431,NG +1317678392,1317678399,A2 +1317678400,1317678407,ML +1317678408,1317678415,A2 +1317678416,1317678431,NG 1317678432,1317678439,A2 1317678440,1317678447,CD 1317678448,1317678455,A2 1317678456,1317678463,CD -1317678464,1317678471,NG -1317678472,1317678479,AO -1317678480,1317678487,A2 -1317678488,1317678495,NG -1317678496,1317678519,A2 -1317678520,1317678527,NG -1317678528,1317678543,A2 -1317678544,1317678551,CD -1317678552,1317679615,A2 +1317678464,1317678479,A2 +1317678480,1317678487,CD +1317678488,1317678495,ML +1317678496,1317678535,A2 +1317678536,1317678551,CD +1317678552,1317678559,ML +1317678560,1317678567,NG +1317678568,1317678575,CD +1317678576,1317678583,NG +1317678584,1317678591,AO +1317678592,1317679047,A2 +1317679048,1317679055,NG +1317679056,1317679615,A2 1317679616,1317679631,AO -1317679632,1317679639,A2 +1317679632,1317679639,NG 1317679640,1317679647,ZW -1317679648,1317679663,A2 +1317679648,1317679655,CD +1317679656,1317679663,NG 1317679664,1317679671,AO -1317679672,1317679679,A2 -1317679680,1317679687,NG +1317679672,1317679687,NG 1317679688,1317679695,A2 1317679696,1317679703,LU -1317679704,1317679711,A2 -1317679712,1317679719,NG +1317679704,1317679719,NG 1317679720,1317679727,A2 1317679728,1317679735,GN -1317679736,1317679743,A2 +1317679736,1317679743,NG 1317679744,1317679751,AO 1317679752,1317679767,NG 1317679768,1317679775,A2 1317679776,1317679799,NG -1317679800,1317679831,A2 -1317679832,1317679839,CD +1317679800,1317679807,A2 +1317679808,1317679815,AO +1317679816,1317679831,NG +1317679832,1317679839,A2 1317679840,1317679847,NG -1317679848,1317683199,A2 +1317679848,1317679863,A2 +1317679864,1317679871,NG +1317679872,1317681159,A2 +1317681160,1317681167,NG +1317681168,1317681175,A2 +1317681176,1317681191,NG +1317681192,1317681279,A2 +1317681280,1317681287,NG +1317681288,1317681927,A2 +1317681928,1317681931,NG +1317681932,1317683199,A2 1317683200,1317683839,DE 1317683840,1317683855,CH 1317683856,1317683863,DE 1317683864,1317683871,FR 1317683872,1317685503,DE 1317685504,1317685631,BE -1317685632,1317686271,DE -1317686272,1317686287,NL -1317686288,1317686335,DE -1317686336,1317686399,NL -1317686400,1317695743,DE -1317695744,1317695999,CH -1317696000,1317698559,DE +1317685632,1317686303,DE +1317686304,1317686319,NL +1317686320,1317698559,DE 1317698560,1317698687,NL -1317698688,1317699071,DE -1317699072,1317699583,CN +1317698688,1317699583,DE 1317699584,1317715967,RU 1317715968,1317732351,SA 1317732352,1317748735,HU @@ -29622,9 +36625,9 @@ 1317765120,1317781503,GE 1317781504,1317814271,RU 1317814272,1317830655,DE -1317830656,1317831807,NL -1317831808,1317831935,CA -1317831936,1317832191,NL +1317830656,1317831839,NL +1317831840,1317831871,CA +1317831872,1317832191,NL 1317832192,1317832447,GB 1317832448,1317832511,CY 1317832512,1317832575,NL @@ -29645,7 +36648,10 @@ 1317836864,1317836927,CY 1317836928,1317836991,NL 1317836992,1317837007,GB -1317837008,1317838943,NL +1317837008,1317837023,RU +1317837024,1317837567,NL +1317837568,1317837823,US +1317837824,1317838943,NL 1317838944,1317838959,GB 1317838960,1317838975,NL 1317838976,1317839103,GI @@ -29657,7 +36663,8 @@ 1317841408,1317841439,SC 1317841440,1317841471,MT 1317841472,1317841535,CY -1317841536,1317841599,NL +1317841536,1317841567,HK +1317841568,1317841599,NL 1317841600,1317841663,GI 1317841664,1317841727,HK 1317841728,1317841855,CY @@ -29668,10 +36675,14 @@ 1317843136,1317843199,CY 1317843200,1317843391,US 1317843392,1317843423,NL -1317843424,1317843455,PA +1317843424,1317843455,PR 1317843456,1317843519,NL 1317843520,1317843583,GI -1317843584,1317847039,NL +1317843584,1317843647,US +1317843648,1317843839,NL +1317843840,1317843967,SC +1317843968,1317844223,MY +1317844224,1317847039,NL 1317847040,1317863423,RU 1317863424,1317879807,GB 1317879808,1317896191,SK @@ -29680,18 +36691,24 @@ 1317928960,1317945343,BG 1317945344,1317965047,AT 1317965048,1317965055,DE -1317965056,1317978111,AT +1317965056,1317977407,AT +1317977408,1317977415,MT +1317977416,1317978111,AT 1317978112,1317994495,RU -1317994496,1317996031,NL -1317996032,1317996095,DE +1317994496,1317995007,NL +1317995008,1317996095,DE 1317996096,1317996287,NL -1317996288,1317997567,DE -1317997568,1317998591,NL -1317998592,1318000383,DE +1317996288,1317998207,DE +1317998208,1317998335,NL +1317998336,1318000383,DE 1318000384,1318000447,NL -1318000448,1318002175,DE +1318000448,1318001791,DE +1318001792,1318001919,NL +1318001920,1318002175,DE 1318002176,1318002431,NL -1318002432,1318005631,DE +1318002432,1318003711,DE +1318003712,1318003967,NL +1318003968,1318005631,DE 1318005632,1318005759,NL 1318005760,1318006271,DE 1318006272,1318006783,NL @@ -29699,22 +36716,13 @@ 1318008000,1318008031,NL 1318008032,1318009423,DE 1318009424,1318009471,NL -1318009472,1318010495,DE -1318010496,1318010879,NL +1318009472,1318010511,DE +1318010512,1318010879,NL 1318010880,1318027263,DK 1318027264,1318043647,IE 1318043648,1318584319,GB 1318584320,1318592511,PL -1318592512,1318596863,NL -1318596864,1318597375,US -1318597376,1318598143,NL -1318598144,1318598399,SE -1318598400,1318598655,FR -1318598656,1318599167,DE -1318599168,1318599679,NL -1318599680,1318599935,GB -1318599936,1318600191,DE -1318600192,1318600703,NL +1318592512,1318600703,NL 1318600704,1318608895,AT 1318608896,1318617087,IT 1318617088,1318625279,FR @@ -29733,18 +36741,20 @@ 1318707776,1318707783,GB 1318707784,1318708511,FR 1318708512,1318708519,GB -1318708520,1318708523,FR -1318708524,1318708527,GB -1318708528,1318708599,FR +1318708520,1318708599,FR 1318708600,1318708607,GB -1318708608,1318708639,FR -1318708640,1318708731,GB -1318708732,1318708735,FR +1318708608,1318708623,FR +1318708624,1318708627,GB +1318708628,1318708639,FR +1318708640,1318708647,GB +1318708648,1318708735,FR 1318708736,1318708991,GB 1318708992,1318711647,FR 1318711648,1318711663,IT -1318711664,1318713855,FR -1318713856,1318714111,CH +1318711664,1318712983,FR +1318712984,1318712991,GB +1318712992,1318713855,FR +1318713856,1318714111,GB 1318714112,1318715390,FR 1318715391,1318715391,GB 1318715392,1318723583,BG @@ -29769,8 +36779,8 @@ 1318871040,1318879231,DK 1318879232,1318887423,CZ 1318887424,1318895615,PL -1318895616,1318899711,SE -1318899712,1318903807,DK +1318895616,1318897663,SE +1318897664,1318903807,DK 1318903808,1318911999,RU 1318912000,1318920191,MK 1318920192,1318928383,IR @@ -29778,9 +36788,10 @@ 1318936576,1318944767,DK 1318944768,1318956287,CZ 1318956288,1318957055,PL -1318957056,1318958847,CZ -1318958848,1318961151,PL -1318961152,1318969343,NL +1318957056,1318958079,CZ +1318958080,1318960895,PL +1318960896,1318961151,CZ +1318961152,1318969343,GB 1318969344,1318977535,RU 1318977536,1318985727,LT 1318985728,1319001087,GB @@ -29800,19 +36811,14 @@ 1319043072,1319051263,FR 1319051264,1319059455,UA 1319059456,1319067647,PL -1319067648,1319069776,DE -1319069777,1319069823,CN -1319069824,1319070217,DE -1319070218,1319070254,CN -1319070255,1319070271,GB +1319067648,1319070271,DE 1319070272,1319070335,PT 1319070336,1319070463,RU 1319070464,1319070975,DE 1319070976,1319071103,PL 1319071104,1319071231,RU 1319071232,1319071487,PL -1319071488,1319072767,DE -1319072768,1319073023,IT +1319071488,1319073023,DE 1319073024,1319073279,TR 1319073280,1319074303,DE 1319074304,1319074559,HK @@ -29823,8 +36829,7 @@ 1319075200,1319075327,RU 1319075328,1319075455,DE 1319075456,1319075583,RU -1319075584,1319075664,DE -1319075665,1319075711,CN +1319075584,1319075711,DE 1319075712,1319075839,RU 1319075840,1319084031,BG 1319084032,1319092223,KW @@ -29839,7 +36844,9 @@ 1331757056,1331822591,IE 1331822592,1331824639,IT 1331824640,1331826687,RU -1331826688,1331828735,FR +1331826688,1331828607,FR +1331828608,1331828615,BE +1331828616,1331828735,FR 1331828736,1331830783,LT 1331830784,1331831335,GB 1331831336,1331831343,IE @@ -29848,13 +36855,12 @@ 1331832832,1331834879,IT 1331834880,1331836927,BY 1331836928,1331838975,FR -1331838976,1331841023,GR +1331838976,1331841023,ES 1331841024,1331843071,CZ 1331843072,1331845119,GB 1331845120,1331847167,RU 1331847168,1331849215,FR 1331849216,1331851263,RU -1331851264,1331853311,AL 1331853312,1331855359,AE 1331855360,1331857407,TR 1331857408,1331859455,RU @@ -29867,7 +36873,7 @@ 1331873792,1331879935,RU 1331879936,1331881983,DE 1331881984,1331883007,GB -1331883008,1331883263,SE +1331883008,1331883263,SL 1331883264,1331886079,GB 1331886080,1331888127,RU 1331888128,1331890175,SE @@ -29895,25 +36901,49 @@ 1331931136,1331933183,SE 1331933184,1331935231,TR 1331935232,1331937279,NL -1331937280,1331937535,GB +1331937280,1331937407,PL +1331937408,1331937471,GB +1331937472,1331937519,NG +1331937520,1331937535,LB 1331937536,1331937567,SM -1331937568,1331937583,US +1331937568,1331937575,NG +1331937576,1331937583,GB 1331937584,1331937599,ZA -1331937600,1331938111,GB +1331937600,1331937663,GB +1331937664,1331937727,DE +1331937728,1331938111,GB 1331938112,1331938127,AE 1331938128,1331938135,SA -1331938136,1331938191,GB +1331938136,1331938143,AE +1331938144,1331938151,GB +1331938152,1331938159,PL +1331938160,1331938167,GB +1331938168,1331938175,KW +1331938176,1331938191,GB 1331938192,1331938207,AE -1331938208,1331938375,GB +1331938208,1331938271,GB +1331938272,1331938303,QA +1331938304,1331938319,GB +1331938320,1331938335,AE +1331938336,1331938375,GB 1331938376,1331938383,AE 1331938384,1331938399,IE -1331938400,1331938823,GB +1331938400,1331938815,GB +1331938816,1331938823,NG 1331938824,1331938831,US 1331938832,1331938839,NG 1331938840,1331938847,IE -1331938848,1331938879,GB -1331938880,1331938895,NG -1331938896,1331939327,GB +1331938848,1331938871,GB +1331938872,1331938895,NG +1331938896,1331938911,GB +1331938912,1331938927,NG +1331938928,1331938935,RU +1331938936,1331938943,NG +1331938944,1331938967,US +1331938968,1331938983,GB +1331938984,1331938999,NG +1331939000,1331939007,QA +1331939008,1331939327,GB 1331939328,1331941375,BE 1331941376,1331943423,ES 1331943424,1331945471,RU @@ -29940,7 +36970,10 @@ 1332412416,1332477951,GR 1332477952,1332609023,ES 1332609024,1332613119,PL -1332613120,1332629503,UA +1332613120,1332617215,UA +1332617216,1332621311,CZ +1332621312,1332625407,UA +1332625408,1332629503,RU 1332629504,1332633599,DE 1332633600,1332637695,UA 1332637696,1332641791,BG @@ -30063,16 +37096,19 @@ 1334645248,1334647807,IQ 1334647808,1334648063,LB 1334648064,1334648319,IQ -1334648320,1334648831,A2 -1334648832,1334650959,GB -1334650960,1334650975,NL -1334650976,1334651391,GB -1334651392,1334651647,NL +1334648320,1334648575,DE +1334648576,1334648831,A2 +1334648832,1334651455,GB +1334651456,1334651615,NL +1334651616,1334651631,GB +1334651632,1334651647,NL 1334651648,1334651903,FR 1334651904,1334652159,DE 1334652160,1334652543,GB 1334652544,1334652559,NL -1334652560,1334652927,GB +1334652560,1334652863,GB +1334652864,1334652895,FR +1334652896,1334652927,GB 1334652928,1334661119,RU 1334661120,1334665215,CH 1334665216,1334669311,NO @@ -30101,9 +37137,21 @@ 1334710272,1334714367,RU 1334714368,1334718463,DE 1334718464,1334722559,KZ -1334722560,1334726655,NL +1334722560,1334725631,NL +1334725632,1334726143,SE +1334726144,1334726655,NL 1334726656,1334729983,RU -1334729984,1334730431,KZ +1334729984,1334730027,KZ +1334730028,1334730031,RU +1334730032,1334730043,KZ +1334730044,1334730047,RU +1334730048,1334730055,KZ +1334730056,1334730063,RU +1334730064,1334730107,KZ +1334730108,1334730111,RU +1334730112,1334730135,KZ +1334730136,1334730239,RU +1334730240,1334730431,KZ 1334730432,1334730439,RU 1334730440,1334730443,KZ 1334730444,1334730447,RU @@ -30116,10 +37164,8 @@ 1334730544,1334730579,KZ 1334730580,1334730583,RU 1334730584,1334730667,KZ -1334730668,1334730687,RU -1334730688,1334730699,KZ -1334730700,1334730703,RU -1334730704,1334730743,KZ +1334730668,1334730671,RU +1334730672,1334730743,KZ 1334730744,1334734847,RU 1334734848,1334738943,LT 1334738944,1334743039,CH @@ -30189,7 +37235,7 @@ 1336614912,1336616959,GB 1336616960,1336619007,ES 1336619008,1336621055,AL -1336621056,1336623103,IT +1336621056,1336623103,DE 1336623104,1336625151,BE 1336625152,1336625823,IE 1336625824,1336625839,GB @@ -30236,11 +37282,15 @@ 1336852480,1336868863,FR 1336868864,1336885247,RU 1336885248,1336901631,RS -1336901632,1336911103,IR +1336901632,1336910528,IR +1336910529,1336910560,SE +1336910561,1336911103,IR 1336911104,1336911359,SE 1336911360,1336911749,IR 1336911750,1336911759,AE -1336911760,1336918015,IR +1336911760,1336911853,IR +1336911854,1336911869,CA +1336911870,1336918015,IR 1336918016,1336934399,PL 1336934400,1337458687,IL 1337458688,1337982975,PL @@ -30272,7 +37322,9 @@ 1343017984,1343018367,RE 1343018368,1343025151,FR 1343025152,1343025663,RE -1343025664,1343217663,FR +1343025664,1343025819,FR +1343025820,1343025820,LU +1343025821,1343217663,FR 1343217664,1343218687,MU 1343218688,1343219711,FR 1343219712,1343219967,KR @@ -30333,10 +37385,7 @@ 1346431744,1346431999,KZ 1346432000,1346433023,FR 1346433024,1346439167,NL -1346439168,1346440447,ES -1346440448,1346440463,NL -1346440464,1346440479,ES -1346440480,1346441215,NL +1346439168,1346441215,ES 1346441216,1346445311,RU 1346445312,1346449407,DE 1346449408,1346453503,NO @@ -30356,16 +37405,14 @@ 1346500640,1346500735,IM 1346500736,1346500767,GB 1346500768,1346500863,IM -1346500864,1346501119,GB -1346501120,1346501135,IM -1346501136,1346501231,GB +1346500864,1346501135,GB +1346501136,1346501151,IM +1346501152,1346501231,GB 1346501232,1346501247,IM 1346501248,1346501343,GB 1346501344,1346501375,IM 1346501376,1346501695,GB -1346501696,1346501727,IM -1346501728,1346501743,GB -1346501744,1346501759,IM +1346501696,1346501759,IM 1346501760,1346501795,GB 1346501796,1346501799,IM 1346501800,1346501807,GB @@ -30384,7 +37431,9 @@ 1346502656,1346510847,DE 1346510848,1346519039,AT 1346519040,1346527231,RU -1346527232,1346531327,DE +1346527232,1346528607,DE +1346528608,1346528623,CH +1346528624,1346531327,DE 1346531328,1346535423,ES 1346535424,1346537335,BE 1346537336,1346537343,GB @@ -30397,17 +37446,24 @@ 1346538016,1346538031,CH 1346538032,1346538143,BE 1346538144,1346538175,HR -1346538176,1346539519,BE +1346538176,1346538239,BE +1346538240,1346538303,AT +1346538304,1346539519,BE 1346539520,1346543615,RU 1346543616,1346547711,FI 1346547712,1346551807,IR 1346551808,1346555903,DE 1346555904,1346559999,IT -1346560000,1346563071,LI +1346560000,1346561535,LI +1346561536,1346561599,CH +1346561600,1346563071,LI 1346563072,1346563327,CH 1346563328,1346564095,LI 1346564096,1346568191,EE -1346568192,1346572287,SE +1346568192,1346571199,SE +1346571200,1346571207,SK +1346571208,1346571775,SE +1346571776,1346572287,A1 1346572288,1346576383,DE 1346576384,1346580479,DK 1346580480,1346584575,RU @@ -30438,21 +37494,44 @@ 1346686976,1346691071,GB 1346691072,1346695167,PL 1346695168,1346699263,RU -1346699264,1346700575,GB +1346699264,1346699839,GB +1346699840,1346699871,HK +1346699872,1346699875,GB +1346699876,1346699879,IL +1346699880,1346699887,US +1346699888,1346700575,GB 1346700576,1346700591,VG 1346700592,1346700607,GB -1346700608,1346700623,US -1346700624,1346700847,GB +1346700608,1346700639,US +1346700640,1346700847,GB 1346700848,1346700855,US 1346700856,1346701183,GB 1346701184,1346701215,GR -1346701216,1346703871,GB +1346701216,1346703431,GB +1346703432,1346703435,US +1346703436,1346703483,GB +1346703484,1346703487,US +1346703488,1346703503,GB +1346703504,1346703511,US +1346703512,1346703567,GB +1346703568,1346703571,US +1346703572,1346703603,GB +1346703604,1346703607,US +1346703608,1346703871,GB 1346703872,1346704127,LI -1346704128,1346704479,GB +1346704128,1346704383,GB +1346704384,1346704447,US +1346704448,1346704479,GB 1346704480,1346704511,US -1346704512,1346704639,GB +1346704512,1346704575,GB +1346704576,1346704639,US 1346704640,1346704767,LI -1346704768,1346707455,GB +1346704768,1346704895,US +1346704896,1346705247,GB +1346705248,1346705279,US +1346705280,1346705407,GB +1346705408,1346705535,US +1346705536,1346707455,GB 1346707456,1346711551,DE 1346711552,1346715647,AZ 1346715648,1346723839,NL @@ -30474,7 +37553,9 @@ 1346793472,1346797567,IT 1346797568,1346801663,IL 1346801664,1346805759,SE -1346805760,1346818047,DE +1346805760,1346806031,DE +1346806032,1346806047,CH +1346806048,1346818047,DE 1346818048,1346822143,FR 1346822144,1346826239,RU 1346826240,1346830335,RS @@ -30522,21 +37603,7 @@ 1347010560,1347014655,RU 1347014656,1347018751,GG 1347018752,1347022847,IT -1347022848,1347024911,AT -1347024912,1347024927,GB -1347024928,1347024959,AT -1347024960,1347025071,GB -1347025072,1347025079,FR -1347025080,1347025087,GB -1347025088,1347025103,AT -1347025104,1347025111,FR -1347025112,1347025119,GB -1347025120,1347025151,AT -1347025152,1347025215,US -1347025216,1347025279,GB -1347025280,1347025343,ES -1347025344,1347025407,DE -1347025408,1347026943,AT +1347022848,1347026943,AT 1347026944,1347035135,GB 1347035136,1347039231,CZ 1347039232,1347043327,RO @@ -30551,12 +37618,14 @@ 1347092480,1347096575,IR 1347096576,1347100671,SE 1347100672,1347108863,AT -1347108864,1347112959,GB +1347108864,1347111423,GB +1347111424,1347111455,US +1347111456,1347112959,GB 1347112960,1347117055,RU 1347117056,1347121151,FI 1347121152,1347125247,CH 1347125248,1347129343,RU -1347129344,1347133439,GB +1347129344,1347133439,FR 1347133440,1347141631,EG 1347141632,1347145727,CH 1347145728,1347146239,GB @@ -30569,7 +37638,9 @@ 1347148288,1347148543,GB 1347148544,1347148799,IN 1347148800,1347149055,NO -1347149056,1347149823,IN +1347149056,1347149311,GB +1347149312,1347149567,DE +1347149568,1347149823,IN 1347149824,1347153919,HU 1347153920,1347158015,AT 1347158016,1347162111,CH @@ -30591,7 +37662,7 @@ 1347210936,1347211111,GB 1347211112,1347211119,IE 1347211120,1347215359,GB -1347215360,1347219455,RU +1347215360,1347223551,RU 1347223552,1347223807,EG 1347223808,1347224063,HK 1347224064,1347224183,US @@ -30608,7 +37679,9 @@ 1347229312,1347229343,AT 1347229344,1347229895,DE 1347229896,1347229903,GR -1347229904,1347231071,DE +1347229904,1347230975,DE +1347230976,1347230983,ES +1347230984,1347231071,DE 1347231072,1347231087,AT 1347231088,1347231095,GR 1347231096,1347231743,DE @@ -30620,8 +37693,8 @@ 1347244032,1347245311,GB 1347245312,1347245567,US 1347245568,1347247359,GB -1347247360,1347247871,RU -1347247872,1347248127,US +1347247360,1347247839,RU +1347247840,1347248127,US 1347248128,1347248863,SE 1347248864,1347248864,FI 1347248865,1347249343,SE @@ -30637,7 +37710,9 @@ 1347250784,1347252223,SE 1347252224,1347255903,HU 1347255904,1347255919,SC -1347255920,1347256319,HU +1347255920,1347256271,HU +1347256272,1347256287,SC +1347256288,1347256319,HU 1347256320,1347260415,FO 1347260416,1347264511,MK 1347264512,1347268607,RU @@ -30645,7 +37720,9 @@ 1347272704,1347276799,MT 1347276800,1347278831,DE 1347278832,1347278847,BR -1347278848,1347280895,DE +1347278848,1347280543,DE +1347280544,1347280575,MY +1347280576,1347280895,DE 1347280896,1347284991,FR 1347284992,1347286271,GB 1347286272,1347286335,BN @@ -30731,16 +37808,13 @@ 1347309840,1347309855,CH 1347309856,1347313663,DE 1347313664,1347321855,RU -1347321856,1347323775,KW -1347323776,1347323903,IR -1347323904,1347325951,KW +1347321856,1347325695,KW +1347325696,1347325951,IQ 1347325952,1347327231,CZ 1347327232,1347327487,SK 1347327488,1347327743,CZ 1347327744,1347327999,SK -1347328000,1347329535,CZ -1347329536,1347329599,SK -1347329600,1347330047,CZ +1347328000,1347330047,CZ 1347330048,1347338239,DE 1347338240,1347342335,RU 1347342336,1347346431,SE @@ -30753,11 +37827,17 @@ 1347371008,1347375103,RU 1347375104,1347379199,GB 1347379200,1347383295,NL -1347383296,1347386751,EE +1347383296,1347384111,EE +1347384112,1347384115,FI +1347384116,1347386751,EE 1347386752,1347386815,MY -1347386816,1347387215,EE -1347387216,1347387219,DE -1347387220,1347387391,EE +1347386816,1347387011,EE +1347387012,1347387015,DE +1347387016,1347387215,EE +1347387216,1347387219,NZ +1347387220,1347387224,EE +1347387225,1347387228,DE +1347387229,1347387391,EE 1347387392,1347391487,GB 1347391488,1347395583,LB 1347395584,1347399679,SE @@ -30772,7 +37852,9 @@ 1347420792,1347420799,US 1347420800,1347420831,DK 1347420832,1347420847,US -1347420848,1347420991,DK +1347420848,1347420887,DK +1347420888,1347420895,PT +1347420896,1347420991,DK 1347420992,1347421007,CH 1347421008,1347423775,DK 1347423776,1347423807,NO @@ -30787,11 +37869,7 @@ 1347440640,1347444735,ES 1347444736,1347452927,RU 1347452928,1347461119,BG -1347461120,1347461671,AL -1347461672,1347461679,RS -1347461680,1347462023,AL -1347462024,1347462031,RS -1347462032,1347462579,AL +1347461120,1347462579,AL 1347462580,1347462583,RS 1347462584,1347462591,AL 1347462592,1347462607,RS @@ -30814,8 +37892,7 @@ 1347505408,1347505663,DE 1347505664,1347506175,ES 1347506176,1347506431,GB -1347506432,1347510271,FR -1347510272,1347518463,ES +1347506432,1347518463,ES 1347518464,1347522559,AT 1347522560,1347526655,LB 1347526656,1347527967,FI @@ -30875,17 +37952,7 @@ 1347694592,1347706879,GB 1347706880,1347710975,IT 1347710976,1347715071,RU -1347715072,1347715519,ES -1347715520,1347715527,SA -1347715528,1347716151,ES -1347716152,1347716159,LB -1347716160,1347716207,ES -1347716208,1347716223,CY -1347716224,1347719711,ES -1347719712,1347719719,SO -1347719720,1347722495,ES -1347722496,1347722751,LB -1347722752,1347723263,ES +1347715072,1347723263,ES 1347723264,1347727359,GB 1347727360,1347731455,UA 1347731456,1347739647,DE @@ -30904,7 +37971,7 @@ 1347754936,1347754943,RS 1347754944,1347754951,CY 1347754952,1347754959,TN -1347754960,1347754967,MA +1347754960,1347754967,CY 1347754968,1347754983,GR 1347754984,1347754991,CY 1347754992,1347755112,GR @@ -30920,9 +37987,7 @@ 1347756032,1347760127,NL 1347760128,1347764223,HU 1347764224,1347772415,GB -1347772416,1347775953,MT -1347775954,1347775954,GB -1347775955,1347776511,MT +1347772416,1347776511,MT 1347776512,1347780607,SE 1347780608,1347784703,NL 1347784704,1347788799,RU @@ -30945,13 +38010,16 @@ 1347837952,1347846143,RO 1347846144,1347850239,NO 1347850240,1347854335,IT -1347854336,1347854871,DE +1347854336,1347854847,EU +1347854848,1347854871,DE 1347854872,1347854879,EU 1347854880,1347854887,DE 1347854888,1347854911,EU -1347854912,1347855071,DE -1347855072,1347855079,EU -1347855080,1347855103,DE +1347854912,1347855023,DE +1347855024,1347855039,EU +1347855040,1347855071,DE +1347855072,1347855087,EU +1347855088,1347855103,DE 1347855104,1347855359,CH 1347855360,1347855935,DE 1347855936,1347855943,EU @@ -30963,13 +38031,17 @@ 1347856064,1347856079,EU 1347856080,1347856087,DE 1347856088,1347856095,EU -1347856096,1347856239,DE +1347856096,1347856127,DE +1347856128,1347856191,EU +1347856192,1347856239,DE 1347856240,1347856255,EU 1347856256,1347856383,DE -1347856384,1347856391,EU -1347856392,1347856431,DE -1347856432,1347856447,EU -1347856448,1347856639,DE +1347856384,1347856399,EU +1347856400,1347856423,DE +1347856424,1347856447,EU +1347856448,1347856591,DE +1347856592,1347856607,EU +1347856608,1347856639,DE 1347856640,1347856895,AT 1347856896,1347858495,DE 1347858496,1347858503,EU @@ -30979,17 +38051,23 @@ 1347858576,1347858623,EU 1347858624,1347858631,DE 1347858632,1347858639,EU -1347858640,1347859351,DE +1347858640,1347858751,DE +1347858752,1347858815,EU +1347858816,1347859335,DE +1347859336,1347859343,EU +1347859344,1347859351,DE 1347859352,1347859359,EU 1347859360,1347859383,DE -1347859384,1347859407,EU -1347859408,1347859439,DE -1347859440,1347859455,EU +1347859384,1347859391,EU +1347859392,1347859423,DE +1347859424,1347859455,EU 1347859456,1347860863,DE 1347860864,1347860879,EU 1347860880,1347860895,DE 1347860896,1347860911,EU -1347860912,1347861395,DE +1347860912,1347861383,DE +1347861384,1347861391,EU +1347861392,1347861395,DE 1347861396,1347861399,EU 1347861400,1347861471,DE 1347861472,1347861503,EU @@ -30998,7 +38076,9 @@ 1347861800,1347861823,DE 1347861824,1347861943,EU 1347861944,1347861951,DE -1347861952,1347862111,EU +1347861952,1347862007,EU +1347862008,1347862015,CH +1347862016,1347862111,EU 1347862112,1347862143,DE 1347862144,1347862303,EU 1347862304,1347862431,DE @@ -31020,7 +38100,11 @@ 1347919872,1347923967,DE 1347923968,1347928063,CZ 1347928064,1347932159,RU -1347932160,1347936255,SK +1347932160,1347932639,SK +1347932640,1347932655,PL +1347932656,1347932663,SK +1347932664,1347932667,PL +1347932668,1347936255,SK 1347936256,1347940351,FR 1347940352,1347944447,BA 1347944448,1347948543,DZ @@ -31030,9 +38114,7 @@ 1347960832,1347964927,DE 1347964928,1347969023,IT 1347969024,1347977215,SE -1347977216,1347977599,A2 -1347977600,1347977607,NG -1347977608,1347978007,A2 +1347977216,1347978007,A2 1347978008,1347978015,NG 1347978016,1347978031,A2 1347978032,1347978039,NG @@ -31040,12 +38122,10 @@ 1347978192,1347978199,NG 1347978200,1347978263,A2 1347978264,1347978271,NG -1347978272,1347978287,A2 -1347978288,1347978295,NG -1347978296,1347978303,A2 -1347978304,1347978327,NG -1347978328,1347978343,A2 -1347978344,1347978359,NG +1347978272,1347978319,A2 +1347978320,1347978327,NG +1347978328,1347978351,A2 +1347978352,1347978359,NG 1347978360,1347978375,A2 1347978376,1347978407,NG 1347978408,1347978447,A2 @@ -31054,9 +38134,7 @@ 1347978632,1347978647,NG 1347978648,1347978727,A2 1347978728,1347978735,NG -1347978736,1347978775,A2 -1347978776,1347978783,NG -1347978784,1347978847,A2 +1347978736,1347978847,A2 1347978848,1347978855,NG 1347978856,1347978935,A2 1347978936,1347978943,NG @@ -31070,28 +38148,19 @@ 1347979232,1347979247,NG 1347979248,1347979375,A2 1347979376,1347979399,NG -1347979400,1347979567,A2 -1347979568,1347979575,NG -1347979576,1347979583,A2 +1347979400,1347979583,A2 1347979584,1347979591,NG 1347979592,1347979743,A2 1347979744,1347979751,NG 1347979752,1347980111,A2 1347980112,1347980127,GN -1347980128,1347980167,A2 -1347980168,1347980175,NG -1347980176,1347980223,A2 -1347980224,1347980271,NG +1347980128,1347980271,A2 1347980272,1347980279,DK -1347980280,1347980543,A2 -1347980544,1347980559,DK -1347980560,1347981007,A2 +1347980280,1347981007,A2 1347981008,1347981015,NG 1347981016,1347981023,A2 1347981024,1347981031,NG -1347981032,1347981239,A2 -1347981240,1347981247,NG -1347981248,1347981255,A2 +1347981032,1347981255,A2 1347981256,1347981263,DK 1347981264,1347981927,A2 1347981928,1347981935,NG @@ -31118,8 +38187,8 @@ 1347984216,1347984415,A2 1347984416,1347984423,NG 1347984424,1347984719,A2 -1347984720,1347984735,NG -1347984736,1347984879,A2 +1347984720,1347984727,NG +1347984728,1347984879,A2 1347984880,1347984895,NG 1347984896,1347984959,A2 1347984960,1347984991,NG @@ -31190,8 +38259,8 @@ 1348219360,1348219391,DE 1348219392,1348219647,US 1348219648,1348219903,DE -1348219904,1348220415,LB -1348220416,1348220687,DE +1348219904,1348219967,CA +1348219968,1348220687,DE 1348220688,1348220703,SA 1348220704,1348220711,DE 1348220712,1348220735,SA @@ -31346,9 +38415,13 @@ 1352038696,1352038699,US 1352038700,1352041471,DE 1352041472,1352041727,US -1352041728,1352139671,DE +1352041728,1352058431,DE +1352058432,1352058495,US +1352058496,1352139671,DE 1352139672,1352139679,IT -1352139680,1352144519,DE +1352139680,1352141311,DE +1352141312,1352141567,NL +1352141568,1352144519,DE 1352144520,1352144527,IT 1352144528,1352144535,US 1352144536,1352147007,DE @@ -31373,18 +38446,28 @@ 1352149428,1352149451,FR 1352149452,1352149455,DE 1352149456,1352149487,FR -1352149488,1352277535,DE +1352149488,1352149743,DE +1352149744,1352149751,AT +1352149752,1352149783,DE +1352149784,1352149791,SE +1352149792,1352149807,DE +1352149808,1352149823,SE +1352149824,1352149855,DE +1352149856,1352149871,SE +1352149872,1352277535,DE 1352277536,1352277567,IT -1352277568,1352287399,DE -1352287400,1352287407,NL -1352287408,1352402791,DE +1352277568,1352304639,DE +1352304640,1352304895,CH +1352304896,1352402791,DE 1352402792,1352402799,BE 1352402800,1352404599,DE 1352404600,1352404607,NL 1352404608,1352445687,DE 1352445688,1352445703,NL 1352445704,1352663039,DE -1352663040,1353187327,DK +1352663040,1353182591,DK +1353182592,1353182599,DE +1353182600,1353187327,DK 1353187328,1353252991,GB 1353252992,1353253023,FR 1353253024,1353253663,GB @@ -31401,14 +38484,18 @@ 1353257984,1353258247,SE 1353258248,1353258255,GB 1353258256,1353258263,SE -1353258264,1353258271,DK +1353258264,1353258271,NO 1353258272,1353258303,SE 1353258304,1353258367,FI -1353258368,1353258415,SE +1353258368,1353258391,SE +1353258392,1353258399,GB +1353258400,1353258415,SE 1353258416,1353258423,DK 1353258424,1353258495,SE 1353258496,1353258503,GB -1353258504,1353258639,SE +1353258504,1353258519,SE +1353258520,1353258559,GB +1353258560,1353258639,SE 1353258640,1353258783,GB 1353258784,1353258807,SE 1353258808,1353259271,GB @@ -31423,8 +38510,16 @@ 1353266960,1353266975,IE 1353266976,1353267455,GB 1353267456,1353268223,IE -1353268224,1353268479,GB -1353268480,1353269247,BE +1353268224,1353268487,GB +1353268488,1353268599,BE +1353268600,1353268607,GB +1353268608,1353268687,BE +1353268688,1353268695,GB +1353268696,1353269007,BE +1353269008,1353269015,GB +1353269016,1353269223,BE +1353269224,1353269231,FR +1353269232,1353269247,BE 1353269248,1353270527,GB 1353270528,1353270783,IE 1353270784,1353271295,GB @@ -31432,12 +38527,15 @@ 1353271424,1353271815,GB 1353271816,1353271831,ES 1353271832,1353271839,GB -1353271840,1353272031,ES -1353272032,1353272039,FR +1353271840,1353271911,ES +1353271912,1353271919,GB +1353271920,1353272039,ES 1353272040,1353272047,GB 1353272048,1353272055,ES -1353272056,1353272063,GB -1353272064,1353272245,ES +1353272056,1353272071,GB +1353272072,1353272191,ES +1353272192,1353272207,GB +1353272208,1353272245,ES 1353272246,1353272247,GB 1353272248,1353272691,ES 1353272692,1353272695,GB @@ -31452,8 +38550,8 @@ 1353274368,1353274759,ES 1353274760,1353274767,GB 1353274768,1353274791,ES -1353274792,1353274799,GB -1353274800,1353274895,ES +1353274792,1353274807,GB +1353274808,1353274895,ES 1353274896,1353274911,GB 1353274912,1353275007,ES 1353275008,1353275015,GB @@ -31464,24 +38562,30 @@ 1353279744,1353279751,GB 1353279752,1353279759,IT 1353279760,1353279763,GB -1353279764,1353280119,IT -1353280120,1353280127,GB +1353279764,1353280111,IT +1353280112,1353280127,GB 1353280128,1353280143,IT 1353280144,1353280151,GB -1353280152,1353280663,IT -1353280664,1353280671,GB -1353280672,1353281023,IT +1353280152,1353280287,IT +1353280288,1353280295,GB +1353280296,1353280463,IT +1353280464,1353280479,GB +1353280480,1353280567,IT +1353280568,1353280575,GB +1353280576,1353281023,IT 1353281024,1353281535,BE 1353281536,1353282047,GB -1353282048,1353282559,IT +1353282048,1353282103,IT +1353282104,1353282111,GB +1353282112,1353282159,IT +1353282160,1353282167,GB +1353282168,1353282215,IT +1353282216,1353282223,GB +1353282224,1353282559,IT 1353282560,1353283071,GB 1353283072,1353283327,IT -1353283328,1353287327,GB -1353287328,1353287359,IE -1353287360,1353287679,GB -1353287680,1353287935,IE -1353287936,1353287943,GB -1353287944,1353288031,IE +1353283328,1353287679,GB +1353287680,1353288031,IE 1353288032,1353288063,GB 1353288064,1353288151,IE 1353288152,1353288159,GB @@ -31506,12 +38610,12 @@ 1353288896,1353288959,IE 1353288960,1353288975,GB 1353288976,1353288991,IE -1353288992,1353289087,GB -1353289088,1353289247,IE -1353289248,1353289255,GB -1353289256,1353289279,IE -1353289280,1353289295,GB -1353289296,1353289359,IE +1353288992,1353288999,GB +1353289000,1353289023,IE +1353289024,1353289031,NL +1353289032,1353289047,IE +1353289048,1353289087,GB +1353289088,1353289359,IE 1353289360,1353289367,GB 1353289368,1353289391,IE 1353289392,1353289407,GB @@ -31526,7 +38630,9 @@ 1353290928,1353290935,IE 1353290936,1353293351,GB 1353293352,1353293355,IT -1353293356,1353297151,GB +1353293356,1353295471,GB +1353295472,1353295479,IE +1353295480,1353297151,GB 1353297152,1353297183,IE 1353297184,1353298687,GB 1353298688,1353298695,SE @@ -31537,18 +38643,27 @@ 1353298752,1353298815,SE 1353298816,1353298831,PT 1353298832,1353298839,SE -1353298840,1353298879,GB -1353298880,1353298881,SE +1353298840,1353298847,IE +1353298848,1353298863,SE +1353298864,1353298871,GB +1353298872,1353298881,SE 1353298882,1353298887,GB -1353298888,1353299647,SE +1353298888,1353299503,SE +1353299504,1353299511,GB +1353299512,1353299647,SE 1353299648,1353299839,GB 1353299840,1353299847,SE 1353299848,1353299863,GB -1353299864,1353300079,SE -1353300080,1353300095,PT -1353300096,1353300103,GB +1353299864,1353299919,SE +1353299920,1353299927,GB +1353299928,1353299951,SE +1353299952,1353299967,GB +1353299968,1353300095,SE +1353300096,1353300103,CH 1353300104,1353300111,SE -1353300112,1353300175,GB +1353300112,1353300119,FI +1353300120,1353300127,SE +1353300128,1353300175,GB 1353300176,1353300191,SE 1353300192,1353300239,GB 1353300240,1353300247,SE @@ -31556,7 +38671,11 @@ 1353300280,1353300735,SE 1353300736,1353301095,GB 1353301096,1353301103,US -1353301104,1353306111,GB +1353301104,1353304335,GB +1353304336,1353304351,DE +1353304352,1353305679,GB +1353305680,1353305687,US +1353305688,1353306111,GB 1353306112,1353306623,ES 1353306624,1353306687,GB 1353306688,1353306735,BE @@ -31565,24 +38684,26 @@ 1353307136,1353307143,IT 1353307144,1353308159,GB 1353308160,1353309183,FR -1353309184,1353310463,GB +1353309184,1353310303,GB +1353310304,1353310335,IE +1353310336,1353310463,GB 1353310464,1353310479,ES 1353310480,1353310487,GB 1353310488,1353310599,ES 1353310600,1353310607,DE 1353310608,1353310719,ES -1353310720,1353311175,IT +1353310720,1353311135,IT +1353311136,1353311143,GB +1353311144,1353311175,IT 1353311176,1353311183,ES -1353311184,1353311214,IT -1353311215,1353311215,GB -1353311216,1353311231,IT +1353311184,1353311231,IT 1353311232,1353312255,GB 1353312256,1353312767,CH -1353312768,1353312815,IT -1353312816,1353312823,GB -1353312824,1353313111,IT -1353313112,1353313119,GB -1353313120,1353313191,IT +1353312768,1353312879,IT +1353312880,1353312887,GB +1353312888,1353312999,IT +1353313000,1353313007,GB +1353313008,1353313191,IT 1353313192,1353313199,GB 1353313200,1353313279,IT 1353313280,1353313791,IE @@ -31631,7 +38752,15 @@ 1353956864,1353968639,IL 1353968640,1353968895,A2 1353968896,1353970431,IL -1353970432,1353970687,A2 +1353970432,1353970543,A2 +1353970544,1353970547,IL +1353970548,1353970571,A2 +1353970572,1353970575,IL +1353970576,1353970579,A2 +1353970580,1353970587,IL +1353970588,1353970623,A2 +1353970624,1353970639,IL +1353970640,1353970687,A2 1353970688,1353973759,IL 1353973760,1354235903,IT 1354235904,1354301439,KW @@ -31642,17 +38771,20 @@ 1354563584,1354629119,GB 1354629120,1354662143,DE 1354662144,1354662151,AT -1354662152,1354662463,DE +1354662152,1354662191,DE +1354662192,1354662207,CY +1354662208,1354662463,DE 1354662464,1354662527,AT -1354662528,1354662591,ES -1354662592,1354664743,DE -1354664744,1354664751,IT +1354662528,1354662943,DE +1354662944,1354662975,AT +1354662976,1354664743,DE +1354664744,1354664751,AT 1354664752,1354664759,DE 1354664760,1354664767,IT -1354664768,1354665215,DE -1354665216,1354665247,ES -1354665248,1354665943,DE -1354665944,1354665951,IT +1354664768,1354665923,DE +1354665924,1354665927,AT +1354665928,1354665943,DE +1354665944,1354665951,AT 1354665952,1354666639,DE 1354666640,1354666650,FI 1354666651,1354666687,DE @@ -31759,7 +38891,8 @@ 1357250560,1357316095,IL 1357316096,1357316607,ES 1357316608,1357317119,LU -1357317120,1357317631,EU +1357317120,1357317375,GB +1357317376,1357317631,EU 1357317632,1357318143,LY 1357318144,1357320191,QA 1357320192,1357320703,FR @@ -31770,12 +38903,11 @@ 1357321008,1357321015,GB 1357321016,1357321023,DK 1357321024,1357321087,KE -1357321088,1357321215,EU +1357321088,1357321215,HK 1357321216,1357321471,GB -1357321472,1357321503,ES -1357321504,1357321727,EU +1357321472,1357321727,ES 1357321728,1357321983,CY -1357321984,1357322239,SO +1357321984,1357322239,GB 1357322240,1357322751,DE 1357322752,1357323263,BH 1357323264,1357323519,ES @@ -31799,7 +38931,7 @@ 1357334016,1357334271,TZ 1357334272,1357334527,CA 1357334528,1357335039,FR -1357335040,1357335295,LB +1357335040,1357335295,GB 1357335296,1357335551,FR 1357335552,1357335807,GB 1357335808,1357336063,KE @@ -31814,9 +38946,10 @@ 1357339648,1357339903,DZ 1357339904,1357340159,GB 1357340160,1357340415,DE -1357340416,1357340671,LB -1357340672,1357342719,GB -1357342720,1357348863,EU +1357340416,1357342719,GB +1357342720,1357344767,EU +1357344768,1357346815,CA +1357346816,1357348863,EU 1357348864,1357349119,DE 1357349120,1357349375,LU 1357349376,1357349887,GB @@ -31825,7 +38958,8 @@ 1357350912,1357351167,GB 1357351168,1357351423,PL 1357351424,1357352959,GB -1357352960,1357355007,EU +1357352960,1357353983,CA +1357353984,1357355007,EU 1357355008,1357355263,NL 1357355264,1357355775,FR 1357355776,1357356031,GB @@ -31838,9 +38972,17 @@ 1357358592,1357358847,DE 1357358848,1357359103,PL 1357359104,1357359999,ES -1357360000,1357360127,EU -1357360128,1357360255,GB -1357360256,1357360383,EU +1357360000,1357360015,GB +1357360016,1357360023,IT +1357360024,1357360031,BE +1357360032,1357360271,GB +1357360272,1357360279,FR +1357360280,1357360287,GB +1357360288,1357360319,IN +1357360320,1357360335,GB +1357360336,1357360343,BE +1357360344,1357360351,LU +1357360352,1357360383,GB 1357360384,1357360639,ES 1357360640,1357360895,GB 1357360896,1357361151,DE @@ -31857,14 +38999,19 @@ 1357366528,1357366591,BE 1357366592,1357366655,FR 1357366656,1357366719,PT -1357366720,1357366783,EU +1357366720,1357366783,GB 1357366784,1357366799,MD 1357366800,1357366815,ES 1357366816,1357366847,FR 1357366848,1357366863,GB 1357366864,1357366879,ES -1357366880,1357367039,EU -1357367040,1357367295,GB +1357366880,1357366911,EU +1357366912,1357366927,GB +1357366928,1357366943,EU +1357366944,1357366959,GB +1357366960,1357366967,BE +1357366968,1357366975,FR +1357366976,1357367295,GB 1357367296,1357367551,FR 1357367552,1357367807,EU 1357367808,1357368063,GB @@ -31883,14 +39030,14 @@ 1357372928,1357373183,AM 1357373184,1357373439,GB 1357373440,1357381631,EU -1357381632,1357391615,NO +1357381632,1357386143,NO +1357386144,1357386147,DK +1357386148,1357391615,NO 1357391616,1357391871,SE 1357391872,1357414399,NO 1357414400,1357447167,LV 1357447168,1357479935,IE -1357479936,1357483007,LV -1357483008,1357483263,RU -1357483264,1357512703,LV +1357479936,1357512703,LV 1357512704,1357545471,RU 1357545472,1357578239,GB 1357578240,1357611007,EE @@ -31935,7 +39082,8 @@ 1357876344,1357876383,EU 1357876384,1357876391,RU 1357876392,1357876399,PL -1357876400,1357876415,EU +1357876400,1357876407,DE +1357876408,1357876415,GB 1357876416,1357876479,PL 1357876480,1357876495,SE 1357876496,1357876543,EU @@ -31944,7 +39092,15 @@ 1357876928,1357877335,DE 1357877336,1357877343,EU 1357877344,1357877759,DE -1357877760,1357878783,EU +1357877760,1357878271,EU +1357878272,1357878335,CH +1357878336,1357878399,CZ +1357878400,1357878463,NL +1357878464,1357878527,NO +1357878528,1357878591,AT +1357878592,1357878655,PL +1357878656,1357878719,DE +1357878720,1357878783,NL 1357878784,1357879807,DE 1357879808,1357879871,RU 1357879872,1357879935,DE @@ -31959,43 +39115,50 @@ 1357881088,1357881343,DE 1357881344,1357883391,FR 1357883392,1357883407,ES -1357883408,1357883423,EU -1357883424,1357883519,FR +1357883408,1357883455,EU +1357883456,1357883519,FR 1357883520,1357883535,EU -1357883536,1357883551,FR -1357883552,1357883583,EU -1357883584,1357883727,FR -1357883728,1357883759,EU +1357883536,1357883543,FR +1357883544,1357883583,EU +1357883584,1357883711,FR +1357883712,1357883719,EU +1357883720,1357883727,FR +1357883728,1357883743,DE +1357883744,1357883759,IT 1357883760,1357883775,FR -1357883776,1357883839,EU -1357883840,1357883903,FR -1357883904,1357883999,EU +1357883776,1357883807,RU +1357883808,1357883839,GB +1357883840,1357883999,EU 1357884000,1357884031,FR 1357884032,1357884095,RU -1357884096,1357884415,EU +1357884096,1357884159,SE +1357884160,1357884415,GB 1357884416,1357884423,FR 1357884424,1357884427,BE -1357884428,1357884431,EU +1357884428,1357884431,DE 1357884432,1357884439,US 1357884440,1357884447,FR -1357884448,1357884511,EU +1357884448,1357884495,EU +1357884496,1357884511,DE 1357884512,1357884927,FR 1357884928,1357884935,EU 1357884936,1357884943,GB 1357884944,1357884959,FR 1357884960,1357884991,RU -1357884992,1357885183,FR -1357885184,1357885215,EU +1357884992,1357885055,EU +1357885056,1357885119,FR +1357885120,1357885183,EU +1357885184,1357885191,SE +1357885192,1357885199,ES +1357885200,1357885215,EU 1357885216,1357885247,ES 1357885248,1357885439,DE 1357885440,1357885695,FR 1357885696,1357885951,DE -1357885952,1357886463,FR +1357885952,1357886463,EU 1357886464,1357887487,US 1357887488,1357888511,FR -1357888512,1357888703,DE -1357888704,1357888767,EU -1357888768,1357889023,DE +1357888512,1357889023,DE 1357889024,1357889535,GB 1357889536,1357890815,PL 1357890816,1357890827,NL @@ -32006,15 +39169,26 @@ 1357890944,1357891327,NL 1357891328,1357891391,EU 1357891392,1357891399,NL -1357891400,1357891455,EU +1357891400,1357891423,EU +1357891424,1357891455,DE 1357891456,1357891583,SE 1357891584,1357891647,EU 1357891648,1357891679,NL 1357891680,1357891711,GB -1357891712,1357891839,EU +1357891712,1357891839,SE 1357891840,1357892095,GB -1357892096,1357892223,IE -1357892224,1357892351,EU +1357892096,1357892111,DE +1357892112,1357892127,ES +1357892128,1357892143,FR +1357892144,1357892159,IT +1357892160,1357892175,GB +1357892176,1357892183,AR +1357892184,1357892191,AU +1357892192,1357892199,BR +1357892200,1357892207,NL +1357892208,1357892215,SE +1357892216,1357892223,US +1357892224,1357892351,FR 1357892352,1357893119,NL 1357893120,1357893375,SE 1357893376,1357893407,EU @@ -32022,31 +39196,53 @@ 1357893440,1357893471,IT 1357893472,1357893503,PL 1357893504,1357893631,DE -1357893632,1357897855,EU +1357893632,1357894911,EU +1357894912,1357895423,FR +1357895424,1357897215,EU +1357897216,1357897279,SE +1357897280,1357897343,EU +1357897344,1357897375,HU +1357897376,1357897439,EU +1357897440,1357897487,DE +1357897488,1357897535,EU +1357897536,1357897543,CZ +1357897544,1357897551,SE +1357897552,1357897719,EU +1357897720,1357897727,DE +1357897728,1357897855,EU 1357897856,1357898495,DE 1357898496,1357898751,EU -1357898752,1357899019,DE -1357899020,1357899023,EU +1357898752,1357899015,DE +1357899016,1357899019,EU +1357899020,1357899023,NL 1357899024,1357899039,DE 1357899040,1357899047,EU 1357899048,1357899063,DE 1357899064,1357899071,EU 1357899072,1357899199,DE -1357899200,1357899279,EU +1357899200,1357899263,EU +1357899264,1357899267,DE +1357899268,1357899275,FR +1357899276,1357899279,NL 1357899280,1357899287,RU -1357899288,1357899327,EU -1357899328,1357899391,PL -1357899392,1357899551,EU +1357899288,1357899295,EU +1357899296,1357899311,DE +1357899312,1357899527,EU +1357899528,1357899535,BR +1357899536,1357899543,CZ +1357899544,1357899551,EU 1357899552,1357899567,AT 1357899568,1357899647,EU 1357899648,1357899775,GB 1357899776,1357900287,DE -1357900288,1357900351,EU +1357900288,1357900319,EU +1357900320,1357900327,FR +1357900328,1357900351,EU 1357900352,1357900415,CH 1357900416,1357900543,SE 1357900544,1357900799,NL 1357900800,1357901823,DE -1357901824,1357902335,ES +1357901824,1357902335,EU 1357902336,1357902847,PL 1357902848,1357903359,GB 1357903360,1357903615,DE @@ -32054,7 +39250,8 @@ 1357903872,1357904383,EU 1357904384,1357904895,DE 1357904896,1357905407,GB -1357905408,1357905919,EU +1357905408,1357905663,SE +1357905664,1357905919,NL 1357905920,1357910015,LT 1357910016,1357914111,GR 1357914112,1357922303,RU @@ -32090,7 +39287,9 @@ 1357989384,1357989647,GB 1357989648,1357989655,FR 1357989656,1357989663,GB -1357989664,1357989703,FR +1357989664,1357989671,FR +1357989672,1357989679,BE +1357989680,1357989703,FR 1357989704,1357989711,GB 1357989712,1357989727,FR 1357989728,1357989743,GB @@ -32099,7 +39298,8 @@ 1357989784,1357989791,GB 1357989792,1357989807,FR 1357989808,1357989823,GB -1357989824,1357989839,FR +1357989824,1357989831,NL +1357989832,1357989839,FR 1357989840,1357989847,GB 1357989848,1357989887,FR 1357989888,1357991679,GB @@ -32124,7 +39324,7 @@ 1358008320,1358012415,BH 1358012416,1358016511,IT 1358016512,1358020607,GE -1358020608,1358024703,DE +1358020608,1358028799,DE 1358028800,1358032895,IT 1358032896,1358036991,GE 1358036992,1358041087,IR @@ -32179,41 +39379,57 @@ 1358223360,1358223631,GB 1358223632,1358223663,DE 1358223664,1358223671,GB -1358223672,1358223719,DE -1358223720,1358223775,GB -1358223776,1358223843,DE +1358223672,1358223687,DE +1358223688,1358223695,GB +1358223696,1358223719,DE +1358223720,1358223815,GB +1358223816,1358223843,DE 1358223844,1358223871,GB 1358223872,1358223887,NL -1358223888,1358223911,DE +1358223888,1358223895,DE +1358223896,1358223903,NL +1358223904,1358223911,DE 1358223912,1358223927,NL -1358223928,1358223975,DE +1358223928,1358223935,DE +1358223936,1358223939,NL +1358223940,1358223975,DE 1358223976,1358223991,NL 1358223992,1358223999,DE -1358224000,1358224079,NL -1358224080,1358224511,DE +1358224000,1358224087,NL +1358224088,1358224511,DE 1358224512,1358224519,BE 1358224520,1358224611,DE 1358224612,1358224651,BE 1358224652,1358224655,DE -1358224656,1358224719,BE -1358224720,1358224959,DE -1358224960,1358225127,IT -1358225128,1358225407,DE +1358224656,1358224727,BE +1358224728,1358224959,DE +1358224960,1358225023,IT +1358225024,1358225031,DE +1358225032,1358225127,IT +1358225128,1358225135,DE +1358225136,1358225183,IT +1358225184,1358225191,DE +1358225192,1358225207,IT +1358225208,1358225407,DE 1358225408,1358229503,RU -1358229504,1358229631,DE -1358229632,1358229639,LU -1358229640,1358230111,DE +1358229504,1358230111,DE 1358230112,1358230115,AT 1358230116,1358230383,DE 1358230384,1358230391,TR 1358230392,1358230399,CH 1358230400,1358232863,DE -1358232864,1358232879,IT -1358232880,1358232903,DE +1358232864,1358232867,IT +1358232868,1358232903,DE 1358232904,1358232911,CH 1358232912,1358233599,DE 1358233600,1358237695,ES -1358237696,1358241791,FR +1358237696,1358239231,FR +1358239232,1358239487,CH +1358239488,1358239743,FR +1358239744,1358239999,CH +1358240000,1358240255,FR +1358240256,1358240319,CH +1358240320,1358241791,FR 1358241792,1358241823,BE 1358241824,1358241951,FR 1358241952,1358241983,BE @@ -32362,8 +39578,28 @@ 1358475264,1358479359,GB 1358479360,1358483455,LI 1358483456,1358487551,FR -1358487552,1358491647,SE -1358491648,1358495743,FI +1358487552,1358487689,SE +1358487690,1358487691,RU +1358487692,1358487693,RO +1358487694,1358487695,PL +1358487696,1358487697,HU +1358487698,1358487699,BG +1358487700,1358487701,ES +1358487702,1358487711,SE +1358487712,1358487727,US +1358487728,1358487999,FR +1358488000,1358488191,SE +1358488192,1358488223,GB +1358488224,1358488239,US +1358488240,1358488255,FR +1358488256,1358488447,SE +1358488448,1358488479,GB +1358488480,1358488495,US +1358488496,1358488511,FR +1358488512,1358491647,SE +1358491648,1358493823,FI +1358493824,1358493887,AX +1358493888,1358495743,FI 1358495744,1358499839,PL 1358499840,1358503935,KZ 1358503936,1358508031,IT @@ -32391,8 +39627,8 @@ 1358602240,1358622719,RU 1358622720,1358626815,SK 1358626816,1358630911,A2 -1358630912,1358634495,US -1358634496,1358635007,GB +1358630912,1358632959,US +1358632960,1358635007,GB 1358635008,1358639103,TR 1358639104,1358643199,RU 1358643200,1358647295,ES @@ -32401,16 +39637,18 @@ 1358655488,1358667775,RU 1358667776,1358668067,PT 1358668068,1358668071,GB -1358668072,1358668271,PT +1358668072,1358668119,PT +1358668120,1358668127,GB +1358668128,1358668271,PT 1358668272,1358668279,ES -1358668280,1358668359,PT +1358668280,1358668287,PT +1358668288,1358668319,GB +1358668320,1358668359,PT 1358668360,1358668367,GB 1358668368,1358668463,PT 1358668464,1358668479,ES 1358668480,1358668495,GB -1358668496,1358668551,PT -1358668552,1358668575,GB -1358668576,1358668799,PT +1358668496,1358668799,PT 1358668800,1358668807,GB 1358668808,1358668927,PT 1358668928,1358668959,ES @@ -32418,23 +39656,29 @@ 1358669352,1358669359,GB 1358669360,1358669463,PT 1358669464,1358669471,GB -1358669472,1358669503,PT -1358669504,1358669519,GB -1358669520,1358669543,PT +1358669472,1358669543,PT 1358669544,1358669551,GB -1358669552,1358669975,PT +1358669552,1358669823,PT +1358669824,1358669855,GB +1358669856,1358669975,PT 1358669976,1358669983,GB 1358669984,1358670015,PT 1358670016,1358670023,GB 1358670024,1358670183,PT 1358670184,1358670191,GB -1358670192,1358671415,PT +1358670192,1358670943,PT +1358670944,1358670951,FR +1358670952,1358671047,PT +1358671048,1358671055,ES +1358671056,1358671415,PT 1358671416,1358671423,GB 1358671424,1358671431,PT 1358671432,1358671439,GB 1358671440,1358671839,PT 1358671840,1358671855,ES -1358671856,1358671967,PT +1358671856,1358671871,PT +1358671872,1358671903,GB +1358671904,1358671967,PT 1358671968,1358671983,GB 1358671984,1358672479,PT 1358672480,1358672511,GB @@ -32442,13 +39686,13 @@ 1358672688,1358672703,GB 1358672704,1358673535,PT 1358673536,1358673567,US -1358673568,1358673663,PT +1358673568,1358673599,GB +1358673600,1358673663,PT 1358673664,1358675967,GB -1358675968,1358676735,SE -1358676736,1358677759,DK +1358675968,1358677247,SE +1358677248,1358677759,DK 1358677760,1358679295,SE -1358679296,1358679807,DK -1358679808,1358680063,SE +1358679296,1358680063,DK 1358680064,1358688255,RU 1358688256,1358692351,CZ 1358692352,1358696447,PL @@ -32470,7 +39714,9 @@ 1358734344,1358734347,NL 1358734348,1358734715,SE 1358734716,1358734719,NL -1358734720,1358734975,SE +1358734720,1358734727,SE +1358734728,1358734731,US +1358734732,1358734975,SE 1358734976,1358734979,NL 1358734980,1358735139,SE 1358735140,1358735143,NL @@ -32482,7 +39728,9 @@ 1358735712,1358735715,FR 1358735716,1358735743,SE 1358735744,1358735751,FR -1358735752,1358736927,SE +1358735752,1358736071,SE +1358736072,1358736075,US +1358736076,1358736927,SE 1358736928,1358736943,NL 1358736944,1358737383,SE 1358737384,1358737387,NL @@ -32505,14 +39753,15 @@ 1358740176,1358740335,SE 1358740336,1358740351,GB 1358740352,1358740671,SE -1358740672,1358740687,GB +1358740672,1358740675,PL +1358740676,1358740679,BG +1358740680,1358740683,BR +1358740684,1358740687,TR 1358740688,1358740883,SE 1358740884,1358740887,NL 1358740888,1358740927,SE 1358740928,1358740943,DK -1358740944,1358741055,SE -1358741056,1358741071,GB -1358741072,1358741503,SE +1358740944,1358741503,SE 1358741504,1358745599,IT 1358745600,1358749695,SE 1358749696,1358753791,IT @@ -32553,8 +39802,10 @@ 1358861312,1358861823,DE 1358861824,1358862335,FR 1358862336,1358862847,US -1358862848,1358863359,DK -1358863360,1358864383,US +1358862848,1358863103,DK +1358863104,1358863359,CH +1358863360,1358863871,US +1358863872,1358864383,GB 1358864384,1358864399,CH 1358864400,1358864407,IN 1358864408,1358864535,CH @@ -32564,7 +39815,18 @@ 1358876672,1358880767,LV 1358880768,1358884863,GB 1358884864,1358888959,SE -1358888960,1358893055,DE +1358888960,1358889599,DE +1358889600,1358889631,IN +1358889632,1358890591,DE +1358890592,1358890623,IT +1358890624,1358890943,DE +1358890944,1358890975,GB +1358890976,1358891007,IT +1358891008,1358891647,DE +1358891648,1358891711,IT +1358891712,1358892191,DE +1358892192,1358892223,IT +1358892224,1358893055,DE 1358893056,1358897151,RU 1358897152,1358898175,A2 1358898176,1358898239,CA @@ -32601,28 +39863,23 @@ 1358899392,1358899407,A2 1358899408,1358899415,DE 1358899416,1358899423,CD -1358899424,1358899431,US -1358899432,1358899455,NG +1358899424,1358899439,A2 +1358899440,1358899455,NG 1358899456,1358899463,A2 1358899464,1358899471,US 1358899472,1358899479,SV -1358899480,1358899583,A2 -1358899584,1358899591,IN -1358899592,1358899599,NG +1358899480,1358899599,A2 1358899600,1358899607,LK 1358899608,1358899615,A2 1358899616,1358899631,NG 1358899632,1358899647,NP -1358899648,1358899654,NG -1358899655,1358899983,A2 +1358899648,1358899983,A2 1358899984,1358899991,KY 1358899992,1358900767,A2 1358900768,1358900783,BI 1358900784,1358900959,A2 1358900960,1358900975,SL -1358900976,1358901543,A2 -1358901544,1358901551,DE -1358901552,1358901807,A2 +1358900976,1358901807,A2 1358901808,1358901815,CD 1358901816,1358901935,A2 1358901936,1358901951,NG @@ -32649,8 +39906,7 @@ 1358903968,1358903983,CA 1358903984,1358903999,NG 1358904000,1358904032,ZA -1358904033,1358904063,NG -1358904064,1358904071,A2 +1358904033,1358904071,A2 1358904072,1358904095,US 1358904096,1358904103,A2 1358904104,1358904119,US @@ -32662,8 +39918,8 @@ 1358904168,1358904175,US 1358904176,1358904191,A2 1358904192,1358904199,NG -1358904200,1358904262,US -1358904263,1358904295,A2 +1358904200,1358904255,US +1358904256,1358904295,A2 1358904296,1358904311,NG 1358904312,1358904551,A2 1358904552,1358904559,IL @@ -32689,7 +39945,8 @@ 1358905232,1358905247,GN 1358905248,1358905279,US 1358905280,1358905295,A2 -1358905296,1358905311,LR +1358905296,1358905303,LR +1358905304,1358905311,A2 1358905312,1358905327,US 1358905328,1358905343,A2 1358905344,1358909439,UA @@ -32712,18 +39969,19 @@ 1359003648,1359020031,CZ 1359020032,1359036415,FR 1359036416,1359052799,GB -1359052800,1359069183,SE -1359069184,1359101951,RU +1359052800,1359101951,RU 1359101952,1359118335,GB -1359118336,1359118655,DE -1359118656,1359118719,NL +1359118336,1359118591,DE +1359118592,1359118719,NL 1359118720,1359118815,DE 1359118816,1359118831,NL 1359118832,1359120383,DE 1359120384,1359121407,DK 1359121408,1359123583,DE 1359123584,1359123711,SE -1359123712,1359134303,DE +1359123712,1359133311,DE +1359133312,1359133439,AT +1359133440,1359134303,DE 1359134304,1359134319,NL 1359134320,1359134719,DE 1359134720,1359150079,CZ @@ -32782,8 +40040,8 @@ 1359467488,1359467495,DE 1359467496,1359467647,US 1359467648,1359467775,DE -1359467776,1359467815,US -1359467816,1359467903,DE +1359467776,1359467855,US +1359467856,1359467903,DE 1359467904,1359468063,US 1359468064,1359468575,DE 1359468576,1359468583,SG @@ -32793,7 +40051,8 @@ 1359468672,1359468695,SG 1359468696,1359468711,DE 1359468712,1359468751,SG -1359468752,1359468863,DE +1359468752,1359468759,AU +1359468760,1359468863,DE 1359468864,1359468879,SG 1359468880,1359468927,DE 1359468928,1359469055,SG @@ -32862,7 +40121,8 @@ 1360056320,1360060415,SA 1360060416,1360064511,LT 1360064512,1360068607,GE -1360068608,1360076799,RU +1360068608,1360072703,RU +1360072704,1360076799,CH 1360076800,1360084991,NL 1360084992,1360089087,GB 1360089088,1360093183,AZ @@ -32930,24 +40190,30 @@ 1360257024,1360259447,DK 1360259448,1360259451,US 1360259452,1360265215,DK -1360265216,1360269311,GB +1360265216,1360265983,NL +1360265984,1360267007,GB +1360267008,1360268031,SE +1360268032,1360268287,FR +1360268288,1360269311,GB 1360269312,1360273407,KG 1360273408,1360281599,GB -1360281600,1360282751,NL +1360281600,1360281727,NL +1360281728,1360281855,ES +1360281856,1360282111,NL +1360282112,1360282239,ES +1360282240,1360282751,NL 1360282752,1360282783,GB -1360282784,1360285695,NL +1360282784,1360285183,NL +1360285184,1360285335,ES +1360285336,1360285343,NL +1360285344,1360285375,ES +1360285376,1360285695,NL 1360285696,1360289791,DE 1360289792,1360293887,RU 1360293888,1360302079,DE 1360302080,1360306175,EE 1360306176,1360310271,RU -1360310272,1360312319,GG -1360312320,1360312575,GB -1360312576,1360312831,GG -1360312832,1360313087,GB -1360313088,1360313343,GG -1360313344,1360313599,GB -1360313600,1360314367,GG +1360310272,1360314367,JE 1360314368,1360318463,RU 1360318464,1360322559,FR 1360322560,1360326655,FI @@ -32986,9 +40252,7 @@ 1360441344,1360445439,HU 1360445440,1360453631,RU 1360453632,1360457727,DE -1360457728,1360459103,FI -1360459104,1360459135,IL -1360459136,1360461823,FI +1360457728,1360461823,FI 1360461824,1360465919,RU 1360465920,1360470015,UA 1360470016,1360474111,FR @@ -33025,12 +40289,15 @@ 1360621568,1360625663,ES 1360625664,1360626687,DE 1360626688,1360627199,LB -1360627200,1360627455,DE -1360627456,1360627743,LB +1360627200,1360627455,A2 +1360627456,1360627520,IQ +1360627521,1360627711,DE +1360627712,1360627743,LB 1360627744,1360627967,DE 1360627968,1360628095,IQ 1360628096,1360628223,LU -1360628224,1360628735,LB +1360628224,1360628479,A2 +1360628480,1360628735,LB 1360628736,1360628991,IQ 1360628992,1360629055,TR 1360629056,1360629247,DE @@ -33062,7 +40329,9 @@ 1360736256,1360740351,RU 1360740352,1360743679,GB 1360743680,1360743935,FR -1360743936,1360752639,GB +1360743936,1360749759,GB +1360749760,1360749791,IM +1360749792,1360752639,GB 1360752640,1360756735,DE 1360756736,1360760831,IT 1360760832,1360764927,RU @@ -33107,17 +40376,15 @@ 1360891648,1360891903,RU 1360891904,1360892427,CH 1360892428,1360892431,IT -1360892432,1360892479,CH -1360892480,1360892487,FR -1360892488,1360892495,CH -1360892496,1360892502,GB -1360892503,1360892763,CH -1360892764,1360892767,IT -1360892768,1360892795,CH -1360892796,1360892799,IT +1360892432,1360892487,CH +1360892488,1360892495,IT +1360892496,1360892751,CH +1360892752,1360892767,IT +1360892768,1360892791,CH +1360892792,1360892799,IT 1360892800,1360892807,CH -1360892808,1360892823,IT -1360892824,1360892927,CH +1360892808,1360892815,MR +1360892816,1360892927,CH 1360892928,1360893183,IT 1360893184,1360893191,CH 1360893192,1360893199,IT @@ -33129,17 +40396,13 @@ 1360894976,1360894983,IT 1360894984,1360895999,CH 1360896000,1360900095,QA -1360900096,1360904335,IT -1360904336,1360904343,GB -1360904344,1360905039,IT +1360900096,1360905039,IT 1360905040,1360905055,GB 1360905056,1360905391,IT 1360905392,1360905407,GB 1360905408,1360906687,IT 1360906688,1360906719,GB -1360906720,1360907679,IT -1360907680,1360907711,GB -1360907712,1360909391,IT +1360906720,1360909391,IT 1360909392,1360909407,GB 1360909408,1360910495,IT 1360910496,1360910511,GB @@ -33158,29 +40421,14 @@ 1360957440,1360961535,DE 1360961536,1360965631,UA 1360965632,1360977919,RU -1360977920,1360987391,CZ -1360987392,1360987455,GB -1360987456,1360987535,CZ -1360987536,1360987927,GB -1360987928,1360987935,CZ +1360977920,1360986111,CZ +1360986112,1360987935,GB 1360987936,1360987983,SK -1360987984,1360987999,CZ -1360988000,1360988039,GB -1360988040,1360988047,CZ -1360988048,1360988055,GB +1360987984,1360988055,GB 1360988056,1360988063,SK -1360988064,1360988079,CZ -1360988080,1360989951,GB -1360989952,1360990079,CZ -1360990080,1360990207,GB +1360988064,1360990207,GB 1360990208,1360990463,CZ -1360990464,1360990719,GB -1360990720,1360990975,CZ -1360990976,1360991487,GB -1360991488,1360991743,CZ -1360991744,1360991999,GB -1360992000,1360992255,SK -1360992256,1360994303,GB +1360990464,1360994303,GB 1360994304,1360998399,CZ 1360998400,1361002495,FI 1361002496,1361006591,GB @@ -33344,7 +40592,7 @@ 1361036596,1361036599,GI 1361036600,1361036607,IQ 1361036608,1361036611,GI -1361036612,1361036615,IQ +1361036612,1361036615,NL 1361036616,1361036623,GB 1361036624,1361036631,IQ 1361036632,1361036635,GR @@ -33522,7 +40770,7 @@ 1361038320,1361038335,US 1361038336,1361039359,NL 1361039360,1361043455,PL -1361043456,1361051647,NO +1361043456,1361051647,IR 1361051648,1362100223,ES 1362100224,1362395135,FR 1362395136,1362395183,CH @@ -33538,11 +40786,7 @@ 1362397440,1362397503,US 1362397504,1362398463,FR 1362398464,1362398719,DE -1362398720,1362399231,FR -1362399232,1362399263,GB -1362399264,1362399487,FR -1362399488,1362400767,GB -1362400768,1362403583,FR +1362398720,1362403583,FR 1362403584,1362405887,DZ 1362405888,1362406143,FR 1362406144,1362407167,SV @@ -33569,13 +40813,580 @@ 1362426624,1362426879,FR 1362426880,1362427903,MQ 1362427904,1362755583,FR -1362755584,1362886409,NL +1362755584,1362759695,NL +1362759696,1362759703,BE +1362759704,1362759711,NL +1362759712,1362759727,BE +1362759728,1362759735,NL +1362759736,1362759759,BE +1362759760,1362759775,NL +1362759776,1362759791,BE +1362759792,1362759815,NL +1362759816,1362759847,BE +1362759848,1362759863,NL +1362759864,1362759879,BE +1362759880,1362759895,NL +1362759896,1362759903,BE +1362759904,1362759919,NL +1362759920,1362759927,BE +1362759928,1362759943,NL +1362759944,1362759967,BE +1362759968,1362759983,NL +1362759984,1362759999,BE +1362760000,1362760007,NL +1362760008,1362760031,BE +1362760032,1362760039,NL +1362760040,1362760047,BE +1362760048,1362760055,NL +1362760056,1362760087,BE +1362760088,1362760111,NL +1362760112,1362760119,BE +1362760120,1362760167,NL +1362760168,1362760191,BE +1362760192,1362760215,NL +1362760216,1362760223,BE +1362760224,1362760239,NL +1362760240,1362760271,BE +1362760272,1362760279,NL +1362760280,1362760287,BE +1362760288,1362760303,NL +1362760304,1362760351,BE +1362760352,1362760375,NL +1362760376,1362760383,BE +1362760384,1362760391,NL +1362760392,1362760399,BE +1362760400,1362760423,NL +1362760424,1362760439,BE +1362760440,1362760447,NL +1362760448,1362760455,BE +1362760456,1362760471,NL +1362760472,1362760479,BE +1362760480,1362760503,NL +1362760504,1362760511,BE +1362760512,1362760519,NL +1362760520,1362760535,BE +1362760536,1362760559,NL +1362760560,1362760567,BE +1362760568,1362760575,NL +1362760576,1362760591,BE +1362760592,1362760615,NL +1362760616,1362760639,BE +1362760640,1362760647,NL +1362760648,1362760663,BE +1362760664,1362760671,NL +1362760672,1362760679,BE +1362760680,1362760687,NL +1362760688,1362760703,BE +1362760704,1362760711,NL +1362760712,1362760719,BE +1362760720,1362760735,NL +1362760736,1362760751,BE +1362760752,1362760783,NL +1362760784,1362760799,BE +1362760800,1362760831,NL +1362760832,1362760839,BE +1362760840,1362760863,NL +1362760864,1362760879,BE +1362760880,1362760887,NL +1362760888,1362760903,BE +1362760904,1362760919,NL +1362760920,1362760927,BE +1362760928,1362760967,NL +1362760968,1362760983,BE +1362760984,1362761007,NL +1362761008,1362761023,BE +1362761024,1362761031,NL +1362761032,1362761063,BE +1362761064,1362761103,NL +1362761104,1362761111,BE +1362761112,1362761119,NL +1362761120,1362761127,BE +1362761128,1362761159,NL +1362761160,1362761167,BE +1362761168,1362761175,NL +1362761176,1362761199,BE +1362761200,1362761207,NL +1362761208,1362761215,BE +1362761216,1362761247,NL +1362761248,1362761255,BE +1362761256,1362761279,NL +1362761280,1362761287,BE +1362761288,1362761303,NL +1362761304,1362761311,BE +1362761312,1362761319,NL +1362761320,1362761327,BE +1362761328,1362761407,NL +1362761408,1362761415,BE +1362761416,1362761463,NL +1362761464,1362761471,BE +1362761472,1362761519,NL +1362761520,1362761535,BE +1362761536,1362761559,NL +1362761560,1362761567,BE +1362761568,1362761583,NL +1362761584,1362761591,BE +1362761592,1362761607,NL +1362761608,1362761623,BE +1362761624,1362761631,NL +1362761632,1362761647,BE +1362761648,1362761663,NL +1362761664,1362761679,BE +1362761680,1362761687,NL +1362761688,1362761695,BE +1362761696,1362761719,NL +1362761720,1362761727,BE +1362761728,1362761743,NL +1362761744,1362761767,BE +1362761768,1362761879,NL +1362761880,1362761887,BE +1362761888,1362761959,NL +1362761960,1362761967,BE +1362761968,1362761983,NL +1362761984,1362761999,BE +1362762000,1362762007,NL +1362762008,1362762015,BE +1362762016,1362762031,NL +1362762032,1362762039,BE +1362762040,1362762047,NL +1362762048,1362762063,BE +1362762064,1362762071,NL +1362762072,1362762079,BE +1362762080,1362762095,NL +1362762096,1362762127,BE +1362762128,1362762135,NL +1362762136,1362762143,BE +1362762144,1362762151,NL +1362762152,1362762159,BE +1362762160,1362762183,NL +1362762184,1362762199,BE +1362762200,1362762207,NL +1362762208,1362762215,BE +1362762216,1362762231,NL +1362762232,1362762255,BE +1362762256,1362762263,NL +1362762264,1362762271,BE +1362762272,1362762279,NL +1362762280,1362762287,BE +1362762288,1362762335,NL +1362762336,1362762343,BE +1362762344,1362762351,NL +1362762352,1362762359,BE +1362762360,1362762431,NL +1362762432,1362762439,BE +1362762440,1362762447,NL +1362762448,1362762455,BE +1362762456,1362762495,NL +1362762496,1362762527,BE +1362762528,1362762535,NL +1362762536,1362762567,BE +1362762568,1362762583,NL +1362762584,1362762599,BE +1362762600,1362762647,NL +1362762648,1362762655,BE +1362762656,1362762719,NL +1362762720,1362762727,BE +1362762728,1362762791,NL +1362762792,1362762807,BE +1362762808,1362762863,NL +1362762864,1362762879,BE +1362762880,1362762903,NL +1362762904,1362762911,BE +1362762912,1362762951,NL +1362762952,1362762983,BE +1362762984,1362762991,NL +1362762992,1362763031,BE +1362763032,1362763047,NL +1362763048,1362763055,BE +1362763056,1362763079,NL +1362763080,1362763087,BE +1362763088,1362763103,NL +1362763104,1362763119,BE +1362763120,1362763143,NL +1362763144,1362763151,BE +1362763152,1362763159,NL +1362763160,1362763175,BE +1362763176,1362763183,NL +1362763184,1362763191,BE +1362763192,1362763223,NL +1362763224,1362763231,BE +1362763232,1362763287,NL +1362763288,1362763295,BE +1362763296,1362763303,NL +1362763304,1362763311,BE +1362763312,1362763335,NL +1362763336,1362763343,BE +1362763344,1362763367,NL +1362763368,1362763375,BE +1362763376,1362763383,NL +1362763384,1362763415,BE +1362763416,1362763423,NL +1362763424,1362763439,BE +1362763440,1362763455,NL +1362763456,1362763463,BE +1362763464,1362763471,NL +1362763472,1362763479,BE +1362763480,1362763503,NL +1362763504,1362763519,BE +1362763520,1362763535,NL +1362763536,1362763543,BE +1362763544,1362763599,NL +1362763600,1362763615,BE +1362763616,1362763623,NL +1362763624,1362763631,BE +1362763632,1362763679,NL +1362763680,1362763687,BE +1362763688,1362763695,NL +1362763696,1362763703,BE +1362763704,1362763743,NL +1362763744,1362763751,BE +1362763752,1362763775,NL +1362763776,1362763783,BE +1362763784,1362763799,NL +1362763800,1362763815,BE +1362763816,1362763903,NL +1362763904,1362763927,BE +1362763928,1362763967,NL +1362763968,1362763975,BE +1362763976,1362763991,NL +1362763992,1362763999,BE +1362764000,1362764023,NL +1362764024,1362764031,BE +1362764032,1362764039,NL +1362764040,1362764047,BE +1362764048,1362764063,NL +1362764064,1362764087,BE +1362764088,1362764103,NL +1362764104,1362764111,BE +1362764112,1362764135,NL +1362764136,1362764143,BE +1362764144,1362764159,NL +1362764160,1362764167,BE +1362764168,1362764175,NL +1362764176,1362764183,BE +1362764184,1362764199,NL +1362764200,1362764207,BE +1362764208,1362764255,NL +1362764256,1362764263,BE +1362764264,1362764311,NL +1362764312,1362764327,BE +1362764328,1362764335,NL +1362764336,1362764351,BE +1362764352,1362764367,NL +1362764368,1362764375,BE +1362764376,1362764383,NL +1362764384,1362764391,BE +1362764392,1362764407,NL +1362764408,1362764415,BE +1362764416,1362764431,NL +1362764432,1362764439,BE +1362764440,1362764495,NL +1362764496,1362764527,BE +1362764528,1362764535,NL +1362764536,1362764543,BE +1362764544,1362764551,NL +1362764552,1362764559,BE +1362764560,1362764567,NL +1362764568,1362764575,BE +1362764576,1362764607,NL +1362764608,1362764615,BE +1362764616,1362764623,NL +1362764624,1362764639,BE +1362764640,1362764655,NL +1362764656,1362764679,BE +1362764680,1362764695,NL +1362764696,1362764703,BE +1362764704,1362764711,NL +1362764712,1362764735,BE +1362764736,1362764743,NL +1362764744,1362764751,BE +1362764752,1362764759,NL +1362764760,1362764775,BE +1362764776,1362764791,NL +1362764792,1362764807,BE +1362764808,1362764823,NL +1362764824,1362764831,BE +1362764832,1362764847,NL +1362764848,1362764855,BE +1362764856,1362764871,NL +1362764872,1362764887,BE +1362764888,1362764895,NL +1362764896,1362764911,BE +1362764912,1362764927,NL +1362764928,1362764935,BE +1362764936,1362764975,NL +1362764976,1362764991,BE +1362764992,1362764999,NL +1362765000,1362765015,BE +1362765016,1362765023,NL +1362765024,1362765047,BE +1362765048,1362765063,NL +1362765064,1362765071,BE +1362765072,1362765079,NL +1362765080,1362765087,BE +1362765088,1362765095,NL +1362765096,1362765127,BE +1362765128,1362765135,NL +1362765136,1362765151,BE +1362765152,1362765175,NL +1362765176,1362765191,BE +1362765192,1362765199,NL +1362765200,1362765215,BE +1362765216,1362765239,NL +1362765240,1362765247,BE +1362765248,1362765255,NL +1362765256,1362765263,BE +1362765264,1362765311,NL +1362765312,1362765319,BE +1362765320,1362765327,NL +1362765328,1362765343,BE +1362765344,1362765375,NL +1362765376,1362765407,BE +1362765408,1362765415,NL +1362765416,1362765423,BE +1362765424,1362765447,NL +1362765448,1362765455,BE +1362765456,1362765463,NL +1362765464,1362765471,BE +1362765472,1362765495,NL +1362765496,1362765511,BE +1362765512,1362765519,NL +1362765520,1362765535,BE +1362765536,1362765551,NL +1362765552,1362765559,BE +1362765560,1362765575,NL +1362765576,1362765599,BE +1362765600,1362765607,NL +1362765608,1362765615,BE +1362765616,1362765639,NL +1362765640,1362765647,BE +1362765648,1362765703,NL +1362765704,1362765711,BE +1362765712,1362765727,NL +1362765728,1362765735,BE +1362765736,1362765783,NL +1362765784,1362765791,BE +1362765792,1362765799,NL +1362765800,1362765807,BE +1362765808,1362765823,NL +1362765824,1362765839,BE +1362765840,1362765919,NL +1362765920,1362765943,BE +1362765944,1362765959,NL +1362765960,1362765967,BE +1362765968,1362765991,NL +1362765992,1362765999,BE +1362766000,1362766007,NL +1362766008,1362766015,BE +1362766016,1362766031,NL +1362766032,1362766071,BE +1362766072,1362766095,NL +1362766096,1362766119,BE +1362766120,1362766127,NL +1362766128,1362766143,BE +1362766144,1362766151,NL +1362766152,1362766159,BE +1362766160,1362766175,NL +1362766176,1362766183,BE +1362766184,1362766191,NL +1362766192,1362766207,BE +1362766208,1362766215,NL +1362766216,1362766231,BE +1362766232,1362766247,NL +1362766248,1362766255,BE +1362766256,1362766279,NL +1362766280,1362766287,BE +1362766288,1362766319,NL +1362766320,1362766335,BE +1362766336,1362766351,NL +1362766352,1362766359,BE +1362766360,1362766375,NL +1362766376,1362766383,BE +1362766384,1362766415,NL +1362766416,1362766447,BE +1362766448,1362766479,NL +1362766480,1362766487,BE +1362766488,1362766503,NL +1362766504,1362766511,BE +1362766512,1362766527,NL +1362766528,1362766535,BE +1362766536,1362766551,NL +1362766552,1362766591,BE +1362766592,1362766599,NL +1362766600,1362766615,BE +1362766616,1362766623,NL +1362766624,1362766639,BE +1362766640,1362766647,NL +1362766648,1362766663,BE +1362766664,1362766671,NL +1362766672,1362766679,BE +1362766680,1362766703,NL +1362766704,1362766711,BE +1362766712,1362766727,NL +1362766728,1362766743,BE +1362766744,1362766759,NL +1362766760,1362766767,BE +1362766768,1362766831,NL +1362766832,1362766847,BE +1362766848,1362766863,NL +1362766864,1362766871,BE +1362766872,1362766879,NL +1362766880,1362766887,BE +1362766888,1362766895,NL +1362766896,1362766903,BE +1362766904,1362766911,NL +1362766912,1362766919,BE +1362766920,1362766927,NL +1362766928,1362766935,BE +1362766936,1362766943,NL +1362766944,1362766959,BE +1362766960,1362766967,NL +1362766968,1362766983,BE +1362766984,1362766999,NL +1362767000,1362767031,BE +1362767032,1362767039,NL +1362767040,1362767063,BE +1362767064,1362767095,NL +1362767096,1362767103,BE +1362767104,1362767111,NL +1362767112,1362767127,BE +1362767128,1362767135,NL +1362767136,1362767143,BE +1362767144,1362767199,NL +1362767200,1362767207,BE +1362767208,1362767223,NL +1362767224,1362767231,BE +1362767232,1362767239,NL +1362767240,1362767255,BE +1362767256,1362767303,NL +1362767304,1362767319,BE +1362767320,1362767327,NL +1362767328,1362767335,BE +1362767336,1362767343,NL +1362767344,1362767367,BE +1362767368,1362767375,NL +1362767376,1362767383,BE +1362767384,1362767407,NL +1362767408,1362767423,BE +1362767424,1362767447,NL +1362767448,1362767463,BE +1362767464,1362767479,NL +1362767480,1362767495,BE +1362767496,1362767527,NL +1362767528,1362767535,BE +1362767536,1362767559,NL +1362767560,1362767575,BE +1362767576,1362767607,NL +1362767608,1362767639,BE +1362767640,1362767647,NL +1362767648,1362767663,BE +1362767664,1362767671,NL +1362767672,1362767679,BE +1362767680,1362767695,NL +1362767696,1362767711,BE +1362767712,1362767719,NL +1362767720,1362767759,BE +1362767760,1362767767,NL +1362767768,1362767775,BE +1362767776,1362767783,NL +1362767784,1362767807,BE +1362767808,1362767815,NL +1362767816,1362767839,BE +1362767840,1362767863,NL +1362767864,1362767871,BE +1362767872,1362817047,NL +1362817048,1362817063,BE +1362817064,1362817071,NL +1362817072,1362817087,BE +1362817088,1362817103,NL +1362817104,1362817119,BE +1362817120,1362817151,NL +1362817152,1362817215,BE +1362817216,1362817271,NL +1362817272,1362817279,BE +1362817280,1362817311,NL +1362817312,1362817343,BE +1362817344,1362817359,NL +1362817360,1362817367,BE +1362817368,1362817563,NL +1362817564,1362817583,BE +1362817584,1362817743,NL +1362817744,1362817791,BE +1362817792,1362837503,NL +1362837504,1362845695,BE +1362845696,1362870271,NL +1362870272,1362872319,BE +1362872320,1362872335,NL +1362872336,1362872343,BE +1362872344,1362872351,NL +1362872352,1362873855,BE +1362873856,1362873859,NL +1362873860,1362874367,BE +1362874368,1362874375,NL +1362874376,1362875903,BE +1362875904,1362875907,NL +1362875908,1362876423,BE +1362876424,1362876431,NL +1362876432,1362876439,BE +1362876440,1362876463,NL +1362876464,1362876471,BE +1362876472,1362876535,NL +1362876536,1362876543,BE +1362876544,1362876583,NL +1362876584,1362876607,BE +1362876608,1362876639,NL +1362876640,1362877963,BE +1362877964,1362877979,NL +1362877980,1362877983,BE +1362877984,1362877999,NL +1362878000,1362878003,BE +1362878004,1362878015,NL +1362878016,1362878463,BE +1362878464,1362878471,NL +1362878472,1362879999,BE +1362880000,1362880003,NL +1362880004,1362880527,BE +1362880528,1362880727,NL +1362880728,1362880735,BE +1362880736,1362880743,NL +1362880744,1362880751,BE +1362880752,1362880783,NL +1362880784,1362880799,BE +1362880800,1362880895,NL +1362880896,1362880959,BE +1362880960,1362880967,NL +1362880968,1362880975,BE +1362880976,1362880999,NL +1362881000,1362881007,BE +1362881008,1362881023,NL +1362881024,1362881055,BE +1362881056,1362881087,NL +1362881088,1362881103,BE +1362881104,1362881111,NL +1362881112,1362882047,BE +1362882048,1362882051,NL +1362882052,1362882055,BE +1362882056,1362882067,NL +1362882068,1362882071,BE +1362882072,1362882143,NL +1362882144,1362882155,BE +1362882156,1362882207,NL +1362882208,1362882211,BE +1362882212,1362882219,NL +1362882220,1362882223,BE +1362882224,1362882231,NL +1362882232,1362884095,BE +1362884096,1362884099,NL +1362884100,1362885119,BE +1362885120,1362886399,NL +1362886400,1362886400,BE +1362886401,1362886409,NL 1362886410,1362886413,BE 1362886414,1362886416,NL 1362886417,1362886419,BE 1362886420,1362886421,NL 1362886422,1362886422,BE -1362886423,1362886655,NL +1362886423,1362886423,NL +1362886424,1362886655,BE 1362886656,1363017727,ES 1363017728,1363148799,CH 1363148800,1363410943,FR @@ -33593,7 +41404,9 @@ 1364526592,1364528639,GB 1364528640,1364528895,UA 1364528896,1364530175,GB -1364530176,1364540671,NL +1364530176,1364531455,NL +1364531456,1364531711,IT +1364531712,1364540671,NL 1364540672,1364540927,US 1364540928,1364577023,NL 1364577024,1364577279,GB @@ -33701,7 +41514,8 @@ 1364971520,1364975615,CZ 1364975616,1364979711,BJ 1364979712,1364982783,GB -1364982784,1364983551,CH +1364982784,1364983295,CH +1364983296,1364983551,US 1364983552,1364983807,GB 1364983808,1364991999,DE 1364992000,1364996095,IT @@ -33718,7 +41532,19 @@ 1365004064,1365004287,GB 1365004288,1365008383,FR 1365008384,1365012479,CH -1365012480,1365016575,FR +1365012480,1365012735,FR +1365012736,1365013503,US +1365013504,1365013631,FR +1365013632,1365015551,US +1365015552,1365015839,FR +1365015840,1365015919,US +1365015920,1365015927,DE +1365015928,1365015935,ES +1365015936,1365016063,US +1365016064,1365016079,FR +1365016080,1365016095,US +1365016096,1365016111,FR +1365016112,1365016575,US 1365016576,1365020671,ES 1365020672,1365024767,CZ 1365024768,1365027839,DE @@ -33818,17 +41644,15 @@ 1365103744,1365103775,ES 1365103776,1365103791,GB 1365103792,1365103871,ES -1365103872,1365104135,GB -1365104136,1365104199,ES +1365103872,1365104127,GB +1365104128,1365104199,ES 1365104200,1365104207,GB 1365104208,1365106687,ES 1365106688,1365110783,GB 1365110784,1365114879,FR 1365114880,1365118975,BA 1365118976,1365127167,RU -1365127168,1365127427,AT -1365127428,1365127431,TR -1365127432,1365130271,AT +1365127168,1365130271,AT 1365130272,1365130303,IT 1365130304,1365130495,AT 1365130496,1365131007,IT @@ -33851,7 +41675,8 @@ 1365204992,1365209087,CZ 1365209088,1365213183,BE 1365213184,1365217279,RU -1365217280,1365217567,GB +1365217280,1365217551,GB +1365217552,1365217567,US 1365217568,1365217575,PT 1365217576,1365217591,GB 1365217592,1365217599,EG @@ -33874,14 +41699,13 @@ 1365217872,1365217879,BD 1365217880,1365217919,US 1365217920,1365217927,DK -1365217928,1365217967,BD -1365217968,1365217975,GB +1365217928,1365217951,BD +1365217952,1365217975,GB 1365217976,1365217983,US 1365217984,1365217991,DK 1365217992,1365218023,US 1365218024,1365218031,DK -1365218032,1365218039,CA -1365218040,1365218303,US +1365218032,1365218303,US 1365218304,1365218311,CA 1365218312,1365218319,AR 1365218320,1365218327,ZA @@ -33924,7 +41748,7 @@ 1365219104,1365219111,SA 1365219112,1365219119,GB 1365219120,1365219135,US -1365219136,1365219143,SA +1365219136,1365219143,GB 1365219144,1365219159,US 1365219160,1365219167,CA 1365219168,1365219183,ES @@ -34003,8 +41827,7 @@ 1365220424,1365220431,GB 1365220432,1365220435,JO 1365220436,1365220439,US -1365220440,1365220471,GB -1365220472,1365220479,US +1365220440,1365220479,GB 1365220480,1365220487,AU 1365220488,1365220523,US 1365220524,1365220527,GB @@ -34075,6 +41898,21 @@ 1369559040,1369563135,RU 1369563136,1369567231,PL 1369567232,1369571327,BG +1369571328,1369587711,RU +1369587712,1369591807,UA +1369636864,1369638911,IR +1369638912,1369640959,PL +1369640960,1369655295,RU +1369655296,1369657343,LV +1369657344,1369659391,RU +1369659392,1369661439,UA +1369661440,1369665535,RU +1369665536,1369669631,RO +1369669632,1369677823,UA +1369677824,1369686015,RU +1369686016,1369690111,PL +1369690112,1369694207,UA +1369694208,1369702399,RU 1369702400,1369833471,BE 1369833472,1369964543,NO 1369964544,1369997311,GB @@ -34083,7 +41921,9 @@ 1370062848,1370095615,DE 1370095616,1370128383,GB 1370128384,1370161151,SE -1370161152,1370187775,NL +1370161152,1370170367,NL +1370170368,1370170399,US +1370170400,1370187775,NL 1370187776,1370188031,GR 1370188032,1370193919,NL 1370193920,1370226687,GB @@ -34133,7 +41973,8 @@ 1371799552,1371865087,RO 1371865088,1371930623,FI 1371930624,1371996159,LV -1371996160,1371997183,A2 +1371996160,1371996415,NG +1371996416,1371997183,A2 1371997184,1371997439,KE 1371997440,1371998207,NG 1371998208,1371998463,CD @@ -34241,7 +42082,11 @@ 1372147712,1372151807,BE 1372151808,1372152823,DE 1372152824,1372152831,GB -1372152832,1372159999,DE +1372152832,1372156063,DE +1372156064,1372156095,GB +1372156096,1372156719,DE +1372156720,1372156735,GB +1372156736,1372159999,DE 1372160000,1372164095,GB 1372164096,1372166863,DE 1372166864,1372166879,US @@ -34262,10 +42107,8 @@ 1372589824,1372618751,IT 1372618752,1372651519,GB 1372651520,1372684287,FI -1372684288,1372684415,DE -1372684416,1372684543,EU -1372684544,1372685567,DE -1372685568,1372685655,EU +1372684288,1372685631,DE +1372685632,1372685655,EU 1372685656,1372685663,DE 1372685664,1372685695,EU 1372685696,1372685823,DE @@ -34304,8 +42147,8 @@ 1372694784,1372694815,DE 1372694816,1372694831,EU 1372694832,1372695039,DE -1372695040,1372695167,EU -1372695168,1372695423,DE +1372695040,1372695295,EU +1372695296,1372695423,DE 1372695424,1372695551,EU 1372695552,1372695807,CZ 1372695808,1372696007,DK @@ -34318,7 +42161,9 @@ 1372697280,1372697343,EU 1372697344,1372698471,DE 1372698472,1372698559,EU -1372698560,1372700159,DE +1372698560,1372699135,DE +1372699136,1372699391,EU +1372699392,1372700159,DE 1372700160,1372700415,SE 1372700416,1372700671,EU 1372700672,1372702463,DE @@ -34329,21 +42174,15 @@ 1372702992,1372703271,EU 1372703272,1372703323,DE 1372703324,1372703327,EU -1372703328,1372703407,DE -1372703408,1372703423,EU +1372703328,1372703391,DE +1372703392,1372703423,EU 1372703424,1372703487,DE -1372703488,1372703743,EU -1372703744,1372713327,DE -1372713328,1372713343,EU -1372713344,1372713375,DE -1372713376,1372713471,EU -1372713472,1372714239,DE -1372714240,1372714495,EU -1372714496,1372717055,DE +1372703488,1372704767,EU +1372704768,1372717055,DE 1372717056,1372749823,PL 1372749824,1372782591,DE 1372782592,1372815359,RU -1372815360,1372848127,SE +1372815360,1372848127,KZ 1372848128,1373110271,TR 1373110272,1373175807,SE 1373175808,1373241343,AT @@ -34392,7 +42231,9 @@ 1382039056,1382039071,DE 1382039072,1382039175,SE 1382039176,1382039191,GB -1382039192,1382039551,SE +1382039192,1382039271,SE +1382039272,1382039275,GB +1382039276,1382039551,SE 1382039552,1382055935,DE 1382055936,1382072319,FR 1382072320,1382088703,RU @@ -34400,9 +42241,7 @@ 1382091312,1382091327,MC 1382091328,1382091375,FR 1382091376,1382091391,MC -1382091392,1382091775,FR -1382091776,1382092031,MC -1382092032,1382092367,FR +1382091392,1382092367,FR 1382092368,1382092399,MC 1382092400,1382092815,FR 1382092816,1382092831,MC @@ -34442,21 +42281,24 @@ 1382177984,1382178303,LI 1382178304,1382179247,DE 1382179248,1382179279,GB -1382179280,1382182327,DE -1382182328,1382182335,GB -1382182336,1382182547,DE +1382179280,1382182547,DE 1382182548,1382182551,CH -1382182552,1382182799,DE +1382182552,1382182655,DE +1382182656,1382182687,US +1382182688,1382182799,DE 1382182800,1382182831,GB 1382182832,1382182895,DE 1382182896,1382182911,GB 1382182912,1382183167,LI -1382183168,1382187007,DE +1382183168,1382183423,CH +1382183424,1382183935,LI +1382183936,1382185031,DE +1382185032,1382185039,SK +1382185040,1382187007,DE 1382187008,1382191871,ES 1382191872,1382192127,VE 1382192128,1382203391,ES -1382203392,1382204479,NL -1382204480,1382205439,GB +1382203392,1382205439,GB 1382205440,1382205695,EU 1382205696,1382205951,DE 1382205952,1382207743,EU @@ -34469,37 +42311,21 @@ 1382211072,1382211199,DE 1382211200,1382211583,EU 1382211584,1382211711,FR -1382211712,1382211839,EU -1382211840,1382212095,FR -1382212096,1382212223,EU +1382211712,1382212223,EU 1382212224,1382212239,FR 1382212240,1382212607,EU 1382212608,1382212863,FR 1382212864,1382213631,EU -1382213632,1382214079,NL -1382214080,1382214111,GB -1382214112,1382214879,NL -1382214880,1382214895,GB -1382214896,1382216831,NL -1382216832,1382216895,GB -1382216896,1382216959,NL -1382216960,1382217215,GB -1382217216,1382218399,NL -1382218400,1382218447,GB -1382218448,1382218455,NL -1382218456,1382218495,GB -1382218496,1382218623,NL -1382218624,1382218751,GB -1382218752,1382218815,NL -1382218816,1382218911,GB -1382218912,1382218959,NL -1382218960,1382218991,GB -1382218992,1382219775,NL -1382219776,1382221615,SE -1382221616,1382221623,FI -1382221624,1382221655,SE -1382221656,1382221659,FI -1382221660,1382223327,SE +1382213632,1382215679,GB +1382215680,1382216447,NL +1382216448,1382217727,GB +1382217728,1382217983,NL +1382217984,1382219007,GB +1382219008,1382219519,NL +1382219520,1382219775,GB +1382219776,1382222847,SE +1382222848,1382222911,FI +1382222912,1382223327,SE 1382223328,1382223359,FI 1382223360,1382223551,SE 1382223552,1382223615,NO @@ -34515,17 +42341,14 @@ 1382229504,1382229511,NO 1382229512,1382232575,SE 1382232576,1382232639,NO -1382232640,1382232703,DK -1382232704,1382233279,SE +1382232640,1382233279,SE 1382233280,1382233343,NO 1382233344,1382233407,SE 1382233408,1382233423,NO 1382233424,1382252543,SE 1382252544,1382268927,CZ 1382268928,1382285311,IR -1382285312,1382301391,CZ -1382301392,1382301407,SK -1382301408,1382301695,CZ +1382285312,1382301695,CZ 1382301696,1382318079,SE 1382318080,1382334463,RU 1382334464,1382350847,DE @@ -34559,15 +42382,28 @@ 1383096448,1383096575,FR 1383096576,1383096831,GB 1383096832,1383096863,FR -1383096864,1383097087,GB +1383096864,1383096959,GB +1383096960,1383097087,FR 1383097088,1383097343,ES 1383097344,1383098111,GB 1383098112,1383098367,DE -1383098368,1383099391,GB -1383099392,1383099903,DE -1383099904,1383100095,FR -1383100096,1383100159,GB -1383100160,1383100415,FR +1383098368,1383098879,GB +1383098880,1383099159,DE +1383099160,1383099163,BE +1383099164,1383099167,NL +1383099168,1383099171,IT +1383099172,1383099175,RU +1383099176,1383099179,GB +1383099180,1383099183,DE +1383099184,1383099199,GB +1383099200,1383099231,DE +1383099232,1383099391,GB +1383099392,1383099679,DE +1383099680,1383099687,GB +1383099688,1383099695,DE +1383099696,1383099711,GB +1383099712,1383099903,DE +1383099904,1383100415,FR 1383100416,1383100831,GB 1383100832,1383100847,IE 1383100848,1383100879,GB @@ -34581,7 +42417,9 @@ 1383104024,1383104255,GB 1383104256,1383104511,FR 1383104512,1383112703,JE -1383112704,1383120895,GE +1383112704,1383114751,LB +1383114752,1383116799,GB +1383116800,1383120895,RU 1383120896,1383129031,IT 1383129032,1383129039,ES 1383129040,1383129087,IT @@ -34666,7 +42504,9 @@ 1383440384,1383448575,RU 1383448576,1383456767,RS 1383456768,1383464959,UA -1383464960,1383473151,US +1383464960,1383469055,BA +1383469056,1383471103,UA +1383471104,1383473151,SE 1383473152,1383481343,DE 1383481344,1383481599,GB 1383481600,1383481615,US @@ -34678,9 +42518,7 @@ 1383481776,1383481791,SA 1383481792,1383482367,GB 1383482368,1383482879,NL -1383482880,1383483375,GB -1383483376,1383483383,US -1383483384,1383483887,GB +1383482880,1383483887,GB 1383483888,1383483903,JP 1383483904,1383485375,GB 1383485376,1383485407,US @@ -34707,16 +42545,13 @@ 1383596032,1384120319,FR 1384120320,1384153087,NG 1384153088,1384185855,FI -1384185856,1384189055,DE -1384189056,1384189183,CH +1384185856,1384189183,DE 1384189184,1384189439,AT 1384189440,1384190463,DE 1384190464,1384190719,NL 1384190720,1384190975,DE 1384190976,1384191231,DK -1384191232,1384191359,DE -1384191360,1384191423,AT -1384191424,1384191999,DE +1384191232,1384191999,DE 1384192000,1384192191,NL 1384192192,1384192255,DE 1384192256,1384192511,NL @@ -34724,12 +42559,9 @@ 1384192576,1384192639,SE 1384192640,1384192767,DE 1384192768,1384193023,BG -1384193024,1384194047,NL -1384194048,1384194191,DE +1384193024,1384194191,DE 1384194192,1384194207,AT -1384194208,1384194271,DE -1384194272,1384194303,NL -1384194304,1384194559,DE +1384194208,1384194559,DE 1384194560,1384194815,NL 1384194816,1384195711,DE 1384195712,1384195743,NL @@ -34772,9 +42604,7 @@ 1384742912,1384759295,RU 1384759296,1384775679,SY 1384775680,1384792063,RU -1384792064,1384792575,FR -1384792576,1384792607,CH -1384792608,1384792623,FR +1384792064,1384792623,FR 1384792624,1384792639,BE 1384792640,1384793679,FR 1384793680,1384793695,BE @@ -34784,21 +42614,11 @@ 1384794128,1384794143,CH 1384794144,1384794271,FR 1384794272,1384794287,CH -1384794288,1384794815,FR -1384794816,1384794847,BE -1384794848,1384794879,FR -1384794880,1384795135,CH -1384795136,1384795279,FR +1384794288,1384795279,FR 1384795280,1384795327,BE -1384795328,1384796351,FR -1384796352,1384796415,IT -1384796416,1384799807,FR +1384795328,1384799807,FR 1384799808,1384799871,CH -1384799872,1384801023,FR -1384801024,1384801087,SM -1384801088,1384802495,FR -1384802496,1384802559,IT -1384802560,1384808447,FR +1384799872,1384808447,FR 1384808448,1384808479,BE 1384808480,1384808735,EU 1384808736,1384808799,BE @@ -34907,8 +42727,8 @@ 1385275392,1385283583,IT 1385283584,1385285631,DE 1385285632,1385287679,GB -1385287680,1385289727,IS -1385289728,1385291775,NO +1385287680,1385291648,IS +1385291649,1385291775,GB 1385291776,1385299967,TR 1385299968,1385308159,BG 1385308160,1385309439,BE @@ -34936,7 +42756,7 @@ 1385480192,1385488383,NL 1385488384,1385496575,GB 1385496576,1385504767,SI -1385504768,1385512959,GB +1385504768,1385512959,IT 1385512960,1385521151,DE 1385521152,1385529343,AT 1385529344,1385537535,RU @@ -34955,7 +42775,9 @@ 1385559296,1385560831,DE 1385560832,1385561087,SK 1385561088,1385562111,DE -1385562112,1385563135,ES +1385562112,1385562367,ES +1385562368,1385562623,EU +1385562624,1385563135,ES 1385563136,1385563391,IE 1385563392,1385563647,EU 1385563648,1385563935,IE @@ -34965,16 +42787,15 @@ 1385564104,1385564111,IE 1385564112,1385564159,EU 1385564160,1385564231,HU -1385564232,1385564383,EU +1385564232,1385564239,AT +1385564240,1385564383,EU 1385564384,1385564671,HU 1385564672,1385565183,EU 1385565184,1385565439,ES 1385565440,1385566207,EU 1385566208,1385566399,FR 1385566400,1385566431,EU -1385566432,1385566447,FR -1385566448,1385566455,EU -1385566456,1385566847,FR +1385566432,1385566847,FR 1385566848,1385566927,EU 1385566928,1385566935,FR 1385566936,1385566959,EU @@ -34985,8 +42806,8 @@ 1385567088,1385567103,FR 1385567104,1385567135,EU 1385567136,1385567155,FR -1385567156,1385567167,EU -1385567168,1385567215,FR +1385567156,1385567159,EU +1385567160,1385567215,FR 1385567216,1385567223,EU 1385567224,1385567227,FR 1385567228,1385567231,EU @@ -34995,8 +42816,7 @@ 1385568768,1385569279,EU 1385569280,1385569407,FR 1385569408,1385569487,CZ -1385569488,1385569503,FR -1385569504,1385569791,EU +1385569488,1385569791,EU 1385569792,1385570303,FR 1385570304,1385578495,HU 1385578496,1385586687,TR @@ -35063,7 +42883,15 @@ 1387790336,1388314623,IT 1388314624,1388322815,AT 1388322816,1388331007,SI -1388331008,1388339199,NL +1388331008,1388338175,NL +1388338176,1388338178,FR +1388338179,1388338180,GB +1388338181,1388338182,DE +1388338183,1388338186,NL +1388338187,1388338188,IT +1388338189,1388338190,NL +1388338191,1388338192,PL +1388338193,1388339199,NL 1388339200,1388347391,GB 1388347392,1388363775,DK 1388363776,1388371967,DE @@ -35074,17 +42902,15 @@ 1388388944,1388388951,NG 1388388952,1388388959,IT 1388388960,1388388967,NG -1388388968,1388389151,IT -1388389152,1388389167,NG -1388389168,1388389447,IT -1388389448,1388389455,NG -1388389456,1388389567,IT +1388388968,1388389567,IT 1388389568,1388389631,NG -1388389632,1388389927,IT -1388389928,1388390015,NG +1388389632,1388389943,IT +1388389944,1388390015,NG 1388390016,1388390143,IT 1388390144,1388394495,NG -1388394496,1388396543,IT +1388394496,1388396031,IT +1388396032,1388396287,NG +1388396288,1388396543,IT 1388396544,1388404735,LV 1388404736,1388412927,UA 1388412928,1388421119,RU @@ -35102,13 +42928,11 @@ 1388519424,1388527615,NL 1388527616,1388535807,DE 1388535808,1388543999,GB -1388544000,1388546191,IE -1388546192,1388546201,GB -1388546202,1388547583,IE -1388547584,1388547839,GB -1388547840,1388547871,IE -1388547872,1388547903,GB -1388547904,1388547935,IE +1388544000,1388546066,IE +1388546067,1388546069,GB +1388546070,1388546159,IE +1388546160,1388546167,GB +1388546168,1388547935,IE 1388547936,1388547951,GB 1388547952,1388552191,IE 1388552192,1388560383,GB @@ -35136,9 +42960,7 @@ 1388587616,1388587631,EU 1388587632,1388588415,GB 1388588416,1388588543,EU -1388588544,1388588575,US -1388588576,1388588783,EU -1388588784,1388588799,US +1388588544,1388588799,US 1388588800,1388589823,GB 1388589824,1388590079,EU 1388590080,1388590127,FR @@ -35180,9 +43002,7 @@ 1388679168,1388679423,FR 1388679424,1388679455,DE 1388679456,1388679679,EU -1388679680,1388680703,DE -1388680704,1388680959,EU -1388680960,1388682239,DE +1388679680,1388682239,DE 1388682240,1388682751,EU 1388682752,1388683263,DE 1388683264,1388689639,CH @@ -35190,16 +43010,22 @@ 1388689648,1388691455,CH 1388691456,1388699647,NL 1388699648,1388707839,SE -1388707840,1388708863,RU -1388708864,1388709119,LT -1388709120,1388712191,RU +1388707840,1388708095,RU +1388708096,1388708607,LB +1388708608,1388709119,LT +1388709120,1388709375,IQ +1388709376,1388709887,RU +1388709888,1388710911,LB +1388710912,1388711167,IQ +1388711168,1388711679,RU +1388711680,1388711935,IQ +1388711936,1388712191,RU 1388712192,1388712703,LT 1388712704,1388713215,LB -1388713216,1388713727,RU +1388713216,1388713471,SE +1388713472,1388713727,RU 1388713728,1388713983,LT -1388713984,1388714239,LB -1388714240,1388714495,LT -1388714496,1388714751,RU +1388713984,1388714751,RU 1388714752,1388715007,IQ 1388715008,1388715519,LT 1388715520,1388715775,LV @@ -35207,42 +43033,32 @@ 1388716032,1388724223,ES 1388724224,1388728600,DE 1388728601,1388728608,CZ -1388728609,1388728640,DE -1388728641,1388728673,AT -1388728674,1388728734,DE -1388728735,1388728762,AT -1388728763,1388728783,DE -1388728784,1388728799,AT -1388728800,1388728815,DE -1388728816,1388728820,AT -1388728821,1388729208,DE -1388729209,1388729240,AT -1388729241,1388729280,DE -1388729281,1388729296,AT -1388729297,1388729304,DE -1388729305,1388729320,AT -1388729321,1388729856,DE -1388729857,1388729888,AT -1388729889,1388731136,DE -1388731137,1388731391,AT -1388731392,1388732415,DE +1388728609,1388732415,DE 1388732416,1388740607,ES 1388740608,1388740623,GB -1388740624,1388740719,IE +1388740624,1388740703,IE +1388740704,1388740707,GB +1388740708,1388740719,IE 1388740720,1388740735,GB -1388740736,1388741375,IE +1388740736,1388740847,IE +1388740848,1388740863,GB +1388740864,1388741375,IE 1388741376,1388741443,GB 1388741444,1388741535,IE -1388741536,1388741631,GB +1388741536,1388741551,GB +1388741552,1388741559,IE +1388741560,1388741599,GB +1388741600,1388741615,IE +1388741616,1388741631,GB 1388741632,1388741659,IE 1388741660,1388741723,GB 1388741724,1388741745,IE 1388741746,1388741747,GB 1388741748,1388741751,IE 1388741752,1388741759,GB -1388741760,1388741775,IE -1388741776,1388741787,GB -1388741788,1388741799,IE +1388741760,1388741787,IE +1388741788,1388741791,GB +1388741792,1388741799,IE 1388741800,1388741800,GB 1388741801,1388741807,IE 1388741808,1388741815,GB @@ -35254,7 +43070,9 @@ 1388742020,1388742023,GB 1388742024,1388742024,IE 1388742025,1388742031,GB -1388742032,1388742655,IE +1388742032,1388742067,IE +1388742068,1388742079,GB +1388742080,1388742655,IE 1388742656,1388742719,GB 1388742720,1388742731,IE 1388742732,1388742735,IR @@ -35262,19 +43080,27 @@ 1388742784,1388742847,GB 1388742848,1388743023,IE 1388743024,1388743035,GB -1388743036,1388743043,IE -1388743044,1388743055,GB +1388743036,1388743047,IE +1388743048,1388743055,GB 1388743056,1388743087,IE 1388743088,1388743099,GB 1388743100,1388743343,IE 1388743344,1388743351,GB -1388743352,1388743443,IE +1388743352,1388743359,IE +1388743360,1388743375,GB +1388743376,1388743443,IE 1388743444,1388743451,GB 1388743452,1388743555,IE -1388743556,1388743567,GB -1388743568,1388743919,IE +1388743556,1388743559,GB +1388743560,1388743571,IE +1388743572,1388743582,GB +1388743583,1388743603,IE +1388743604,1388743607,GB +1388743608,1388743919,IE 1388743920,1388743935,GB -1388743936,1388744087,IE +1388743936,1388744047,IE +1388744048,1388744055,GB +1388744056,1388744087,IE 1388744088,1388744095,GB 1388744096,1388744117,IE 1388744118,1388744127,GB @@ -35288,53 +43114,47 @@ 1388745500,1388745503,GB 1388745504,1388745559,IE 1388745560,1388745563,GB -1388745564,1388745651,IE -1388745652,1388745663,GB -1388745664,1388745683,IE -1388745684,1388745727,GB +1388745564,1388745671,IE +1388745672,1388745687,GB +1388745688,1388745726,IE +1388745727,1388745727,GB 1388745728,1388745911,IE -1388745912,1388745919,GB -1388745920,1388745927,IE +1388745912,1388745915,GB +1388745916,1388745927,IE 1388745928,1388745931,GB 1388745932,1388746155,IE 1388746156,1388746159,GB -1388746160,1388746175,IE -1388746176,1388746239,GB -1388746240,1388746659,IE +1388746160,1388746187,IE +1388746188,1388746191,GB +1388746192,1388746659,IE 1388746660,1388746671,GB 1388746672,1388746675,IE 1388746676,1388746695,GB 1388746696,1388746703,IE -1388746704,1388746719,GB -1388746720,1388746895,IE -1388746896,1388746903,GB -1388746904,1388746959,IE -1388746960,1388746975,GB -1388746976,1388747083,IE -1388747084,1388747087,GB -1388747088,1388747551,IE -1388747552,1388747555,GB -1388747556,1388747575,IE -1388747576,1388747647,GB -1388747648,1388747671,IE -1388747672,1388747675,GB -1388747676,1388747783,IE +1388746704,1388746711,GB +1388746712,1388746851,IE +1388746852,1388746863,GB +1388746864,1388746967,IE +1388746968,1388746975,GB +1388746976,1388747543,IE +1388747544,1388747547,GB +1388747548,1388747575,IE +1388747576,1388747599,GB +1388747600,1388747627,IE +1388747628,1388747647,GB +1388747648,1388747783,IE 1388747784,1388747791,GB -1388747792,1388747835,IE -1388747836,1388747839,GB -1388747840,1388747859,IE +1388747792,1388747859,IE 1388747860,1388747875,GB -1388747876,1388747891,IE -1388747892,1388747895,GB -1388747896,1388747983,IE +1388747876,1388747983,IE 1388747984,1388747987,GB -1388747988,1388747999,IE -1388748000,1388748031,GB +1388747988,1388748030,IE +1388748031,1388748031,GB 1388748032,1388748223,IE 1388748224,1388748255,GB 1388748256,1388748287,IE -1388748288,1388748295,GB -1388748296,1388748349,IE +1388748288,1388748319,GB +1388748320,1388748349,IE 1388748350,1388748351,GB 1388748352,1388748799,IE 1388748800,1388756991,RU @@ -35342,15 +43162,23 @@ 1388765184,1388773375,GB 1388773376,1388781567,NO 1388781568,1388789759,ES -1388789760,1388791519,NL -1388791520,1388791527,GB -1388791528,1388797951,NL +1388789760,1388794943,NL +1388794944,1388794959,GB +1388794960,1388795343,NL +1388795344,1388795359,GB +1388795360,1388796559,NL +1388796560,1388796575,GB +1388796576,1388796679,NL +1388796680,1388796687,GB +1388796688,1388796783,NL +1388796784,1388796799,GB +1388796800,1388797951,NL 1388797952,1388806143,RU 1388806144,1388807679,DE 1388807680,1388807711,BZ 1388807712,1388808255,DE -1388808256,1388808283,BZ -1388808284,1388814335,DE +1388808256,1388808287,BZ +1388808288,1388814335,DE 1388814336,1388815103,AX 1388815104,1388815231,FI 1388815232,1388818687,AX @@ -35374,68 +43202,56 @@ 1389166592,1389199359,PS 1389199360,1389199615,A2 1389199616,1389199647,IR -1389199648,1389203391,A2 -1389203392,1389203455,IR -1389203456,1389203487,IQ -1389203488,1389203519,A2 -1389203520,1389203551,IQ +1389199648,1389200383,A2 +1389200384,1389200639,AE +1389200640,1389201919,A2 +1389201920,1389202175,AF +1389202176,1389203551,A2 1389203552,1389203567,LB -1389203568,1389203583,A2 -1389203584,1389203615,IQ -1389203616,1389203743,A2 +1389203568,1389203743,A2 1389203744,1389203775,IQ 1389203776,1389203967,A2 1389203968,1389203999,LY 1389204000,1389204223,A2 1389204224,1389204255,IQ -1389204256,1389204287,A2 -1389204288,1389204303,SA -1389204304,1389204799,A2 +1389204256,1389204799,A2 1389204800,1389204863,IQ 1389204864,1389204879,A2 1389204880,1389204895,IQ -1389204896,1389205631,A2 -1389205632,1389205759,IR +1389204896,1389205247,A2 +1389205248,1389205503,AF +1389205504,1389205631,A2 +1389205632,1389205759,DE 1389205760,1389205791,A2 -1389205792,1389205935,IR -1389205936,1389205999,A2 -1389206000,1389206015,IR -1389206016,1389206047,IQ -1389206048,1389206143,A2 +1389205792,1389205919,IR +1389205920,1389206143,A2 1389206144,1389206175,LY 1389206176,1389206271,A2 1389206272,1389206656,IR -1389206657,1389206719,A2 -1389206720,1389207039,IR -1389207040,1389207295,LB -1389207296,1389207359,A2 -1389207360,1389207391,SA +1389206657,1389206783,A2 +1389206784,1389207039,DE +1389207040,1389207391,A2 1389207392,1389207423,IR 1389207424,1389207487,DE 1389207488,1389207519,A2 1389207520,1389207551,IR -1389207552,1389209087,A2 -1389209088,1389209343,IR -1389209344,1389209887,A2 +1389207552,1389209887,A2 1389209888,1389209903,IQ -1389209904,1389210127,A2 -1389210128,1389210207,IQ -1389210208,1389210223,A2 -1389210224,1389210255,IR -1389210256,1389210271,A2 +1389209904,1389210143,A2 +1389210144,1389210207,IQ +1389210208,1389210271,A2 1389210272,1389210303,IQ -1389210304,1389210335,IR -1389210336,1389210623,A2 +1389210304,1389210623,A2 1389210624,1389210655,IQ -1389210656,1389210687,IR +1389210656,1389210687,A2 1389210688,1389210719,IQ 1389210720,1389210767,A2 1389210768,1389210783,IQ 1389210784,1389210815,A2 -1389210816,1389210879,IQ -1389210880,1389211135,A2 -1389211136,1389211183,IQ -1389211184,1389211199,A2 +1389210816,1389210863,IQ +1389210864,1389211135,A2 +1389211136,1389211151,IQ +1389211152,1389211199,A2 1389211200,1389211263,IQ 1389211264,1389211343,A2 1389211344,1389211359,LY @@ -35447,108 +43263,46 @@ 1389211520,1389211535,IQ 1389211536,1389211567,A2 1389211568,1389211647,IQ -1389211648,1389211719,A2 -1389211720,1389211727,IR -1389211728,1389212159,A2 +1389211648,1389212159,A2 1389212160,1389212415,KW 1389212416,1389212671,A2 1389212672,1389212767,IQ 1389212768,1389212927,A2 1389212928,1389212991,IR -1389212992,1389213055,A2 -1389213056,1389213087,IR +1389212992,1389213087,A2 1389213088,1389213119,IQ -1389213120,1389213183,A2 -1389213184,1389213199,IQ -1389213200,1389213207,A2 +1389213120,1389213207,A2 1389213208,1389213215,LY 1389213216,1389213311,A2 1389213312,1389213343,LY 1389213344,1389214719,A2 1389214720,1389215743,LY 1389215744,1389217791,AF -1389217792,1389218303,A2 +1389217792,1389218047,A2 +1389218048,1389218303,AE 1389218304,1389219839,AF -1389219840,1389220095,A2 -1389220096,1389220143,SA -1389220144,1389220191,A2 +1389219840,1389220191,A2 1389220192,1389220207,IQ -1389220208,1389220223,IR -1389220224,1389220479,A2 -1389220480,1389220495,IQ -1389220496,1389220575,A2 -1389220576,1389220591,IQ -1389220592,1389220607,A2 -1389220608,1389220639,SA -1389220640,1389220671,A2 -1389220672,1389220687,IQ -1389220688,1389220703,SA -1389220704,1389220735,A2 -1389220736,1389220751,IQ -1389220752,1389220767,SA -1389220768,1389220895,A2 -1389220896,1389220927,SA -1389220928,1389220959,A2 -1389220960,1389220975,IQ -1389220976,1389221119,A2 -1389221120,1389221631,LY -1389221632,1389221887,A2 -1389221888,1389222399,SA -1389222400,1389222495,A2 +1389220208,1389220911,A2 +1389220912,1389220927,SA +1389220928,1389222495,A2 1389222496,1389222511,SA 1389222512,1389222543,A2 1389222544,1389222559,LY 1389222560,1389222591,SA -1389222592,1389222607,IQ -1389222608,1389222687,A2 -1389222688,1389222703,IR -1389222704,1389222719,SA -1389222720,1389222751,IQ -1389222752,1389222799,A2 -1389222800,1389222815,SA -1389222816,1389222847,A2 -1389222848,1389222879,SA -1389222880,1389222911,A2 -1389222912,1389223167,SA -1389223168,1389223175,LY -1389223176,1389223183,A2 -1389223184,1389223215,SA -1389223216,1389223231,A2 -1389223232,1389223263,SA -1389223264,1389223327,IQ -1389223328,1389223423,A2 -1389223424,1389223471,SA -1389223472,1389223487,IQ -1389223488,1389223519,LY -1389223520,1389223679,A2 +1389222592,1389223679,A2 1389223680,1389224191,DE -1389224192,1389224447,SA -1389224448,1389224511,IR -1389224512,1389224543,A2 -1389224544,1389224559,IR -1389224560,1389224575,SA -1389224576,1389225215,A2 -1389225216,1389225471,SA -1389225472,1389225535,A2 -1389225536,1389225599,IQ +1389224192,1389225583,A2 +1389225584,1389225599,IQ 1389225600,1389225983,A2 1389225984,1389226239,AE 1389226240,1389226495,A2 1389226496,1389227775,AE 1389227776,1389227791,IQ -1389227792,1389227839,A2 -1389227840,1389227855,SA -1389227856,1389228031,A2 -1389228032,1389228047,IQ -1389228048,1389228063,A2 -1389228064,1389228079,IQ -1389228080,1389228303,A2 -1389228304,1389228319,IQ -1389228320,1389228351,A2 +1389227792,1389228351,A2 1389228352,1389228415,AE 1389228416,1389228479,LB -1389228480,1389228799,A2 -1389228800,1389229055,LY +1389228480,1389229055,A2 1389229056,1389231615,AE 1389231616,1389231871,A2 1389231872,1389232127,SA @@ -35589,7 +43343,7 @@ 1389265592,1389265598,CG 1389265599,1389265599,A2 1389265600,1389265639,US -1389265640,1389265663,SO +1389265640,1389265663,A2 1389265664,1389265791,ZA 1389265792,1389265807,A2 1389265808,1389265823,CA @@ -35628,8 +43382,8 @@ 1389269160,1389269183,A2 1389269184,1389269215,NG 1389269216,1389269247,A2 -1389269248,1389269376,NG -1389269377,1389269759,A2 +1389269248,1389269375,NG +1389269376,1389269759,A2 1389269760,1389269887,CD 1389269888,1389270015,A2 1389270016,1389270079,CD @@ -35643,8 +43397,7 @@ 1389272064,1389272191,NO 1389272192,1389272223,GB 1389272224,1389272319,A2 -1389272320,1389272447,AE -1389272448,1389272575,GB +1389272320,1389272575,AE 1389272576,1389272831,A2 1389272832,1389272959,ZA 1389272960,1389273087,FR @@ -35653,8 +43406,7 @@ 1389273600,1389273855,MG 1389273856,1389274111,NG 1389274112,1389274367,A2 -1389274368,1389274383,US -1389274384,1389274399,SA +1389274368,1389274399,US 1389274400,1389274431,GH 1389274432,1389274494,US 1389274495,1389274495,A2 @@ -35681,13 +43433,10 @@ 1389277952,1389278207,A2 1389278208,1389278463,SN 1389278464,1389278719,MX -1389278720,1389278847,DE -1389278848,1389278975,NG -1389278976,1389279103,MX -1389279104,1389279231,NG +1389278720,1389278975,DE +1389278976,1389279231,MX 1389279232,1389279487,US -1389279488,1389279615,TZ -1389279616,1389279743,NG +1389279488,1389279743,TZ 1389279744,1389279999,LR 1389280000,1389280255,CI 1389280256,1389280511,A2 @@ -35702,38 +43451,33 @@ 1389283328,1389283583,LR 1389283584,1389283711,A2 1389283712,1389283839,ZA -1389283840,1389284351,A2 -1389284352,1389286399,TZ -1389286400,1389287423,A2 +1389283840,1389287423,A2 1389287424,1389287551,US 1389287552,1389287679,A2 1389287680,1389287935,DK 1389287936,1389288447,US 1389288448,1389289471,GN -1389289472,1389290495,GB +1389289472,1389290495,NO 1389290496,1389290751,US 1389290752,1389291007,FR 1389291008,1389291519,A2 -1389291520,1389291855,US -1389291856,1389292031,A2 +1389291520,1389292031,US 1389292032,1389292799,GH 1389292800,1389293055,MG 1389293056,1389293311,US 1389293312,1389293567,KE 1389293568,1389294335,A2 -1389294336,1389294719,US +1389294336,1389294591,US +1389294592,1389294719,A2 1389294720,1389294847,IQ 1389294848,1389295615,US -1389295616,1389295887,ZA -1389295888,1389295935,A2 -1389295936,1389295967,SN -1389295968,1389295999,A2 -1389296000,1389296063,US +1389295616,1389295871,ZA +1389295872,1389296063,US 1389296064,1389296383,A2 1389296384,1389296447,AD 1389296448,1389296639,A2 -1389296640,1389297408,US -1389297409,1389297663,A2 +1389296640,1389297151,TZ +1389297152,1389297663,A2 1389297664,1389330431,UA 1389330432,1389363199,DE 1389363200,1389379583,CZ @@ -35771,16 +43515,32 @@ 1389555264,1389555327,AT 1389555328,1389556751,DE 1389556752,1389556759,CH -1389556760,1389559039,DE -1389559040,1389559103,CH -1389559104,1389559743,DE +1389556760,1389559743,DE 1389559744,1389559807,CH -1389559808,1389562879,DE -1389562880,1389563135,IT +1389559808,1389561343,DE +1389561344,1389561599,IT +1389561600,1389562367,DE +1389562368,1389563135,IT 1389563136,1389563391,DE 1389563392,1389563647,IT -1389563648,1389576191,DE +1389563648,1389563903,US +1389563904,1389564159,IT +1389564160,1389564415,DE +1389564416,1389564671,US +1389564672,1389565183,DE +1389565184,1389565439,US +1389565440,1389565695,IT +1389565696,1389565951,US +1389565952,1389566207,IT +1389566208,1389566719,DE +1389566720,1389566975,US +1389566976,1389568767,DE +1389568768,1389569023,IT +1389569024,1389569279,DE +1389569280,1389569535,US +1389569536,1389576191,DE 1389576192,1389592575,GB +1389592576,1389608959,GE 1389608960,1389625343,DK 1389625344,1389641727,DE 1389641728,1389658111,JO @@ -35790,16 +43550,17 @@ 1389707264,1389723647,IT 1389723648,1389756415,ES 1389756416,1389772799,SE -1389772800,1389779455,SI -1389779456,1389780991,RS +1389772800,1389778431,SI +1389778432,1389778943,CA +1389778944,1389780735,RS +1389780736,1389780991,SI 1389780992,1389782527,HR 1389782528,1389782543,SI 1389782544,1389782559,HR 1389782560,1389783039,SI -1389783040,1389784063,BA -1389784064,1389785087,SI -1389785088,1389785855,MK -1389785856,1389788671,SI +1389783040,1389785087,BA +1389785088,1389787135,MK +1389787136,1389788671,SI 1389788672,1389789183,RS 1389789184,1389805567,PL 1389805568,1389821951,US @@ -35860,6 +43621,7 @@ 1398886400,1398888447,CH 1398888448,1398890495,GB 1398890496,1398892543,DK +1398892544,1398894591,RU 1398894592,1398896639,DE 1398896640,1398898687,CH 1398898688,1398931455,ES @@ -35879,7 +43641,7 @@ 1398972416,1398972671,IE 1398972672,1398973695,NL 1398973696,1398973951,AT -1398973952,1398974207,IE +1398973952,1398974207,US 1398974208,1398979327,NL 1398979328,1398979583,US 1398979584,1398979839,GB @@ -35912,18 +43674,18 @@ 1399848960,1400111103,FR 1400111104,1400373247,NL 1400373248,1400705279,DE -1400705280,1400706047,EU -1400706048,1400707071,DE -1400707072,1400709119,EU -1400709120,1400710143,DE -1400710144,1400710399,EU +1400705280,1400705791,EU +1400705792,1400707071,DE +1400707072,1400708095,EU +1400708096,1400708863,DE +1400708864,1400709120,EU +1400709121,1400710142,DE +1400710143,1400710399,EU 1400710400,1400712191,DE 1400712192,1400712447,EU 1400712448,1400712703,DE 1400712704,1400712959,EU -1400712960,1400716287,DE -1400716288,1400717311,EU -1400717312,1400718335,DE +1400712960,1400718335,DE 1400718336,1400718847,EU 1400718848,1400721407,DE 1400721408,1400721919,EU @@ -35947,7 +43709,9 @@ 1401264128,1401264903,DE 1401264904,1401265151,EU 1401265152,1401265919,DE -1401265920,1401266175,EU +1401265920,1401265951,EU +1401265952,1401265983,DE +1401265984,1401266175,EU 1401266176,1401273599,DE 1401273600,1401273727,EU 1401273728,1401274367,DE @@ -36032,8 +43796,15 @@ 1401544704,1401546751,GB 1401546752,1401548799,IT 1401548800,1401550847,FR -1401550848,1401551103,JE -1401551104,1401552895,GB +1401550848,1401550879,GB +1401550880,1401550911,JE +1401550912,1401550935,GB +1401550936,1401550975,JE +1401550976,1401550983,GB +1401550984,1401551015,JE +1401551016,1401551023,GB +1401551024,1401551071,JE +1401551072,1401552895,GB 1401552896,1401554943,NL 1401554944,1401556991,IE 1401556992,1401563135,GB @@ -36049,50 +43820,112 @@ 1401667584,1401683967,IT 1401683968,1401684067,SE 1401684068,1401684071,NO -1401684072,1401684479,SE +1401684072,1401684075,DE +1401684076,1401684479,SE 1401684480,1401684511,DK -1401684512,1401684543,SE +1401684512,1401684515,DE +1401684516,1401684543,SE 1401684544,1401684607,DK 1401684608,1401684671,SE 1401684672,1401684703,DK 1401684704,1401684731,SE 1401684732,1401684735,DK 1401684736,1401684755,NO -1401684756,1401684767,SE +1401684756,1401684759,SE +1401684760,1401684763,DE +1401684764,1401684767,SE 1401684768,1401684895,NO -1401684896,1401686015,SE +1401684896,1401684995,SE +1401684996,1401684999,DE +1401685000,1401686015,SE 1401686016,1401686059,GB -1401686060,1401686063,SE +1401686060,1401686063,DE 1401686064,1401686143,GB 1401686144,1401686223,SE 1401686224,1401686271,GB 1401686272,1401686287,NL -1401686288,1401686335,SE +1401686288,1401686291,DE +1401686292,1401686335,SE 1401686336,1401686399,NL 1401686400,1401686911,SE 1401686912,1401686927,DE -1401686928,1401691519,SE +1401686928,1401686943,SE +1401686944,1401686947,DE +1401686948,1401691519,SE 1401691520,1401691535,DE 1401691536,1401695263,SE 1401695264,1401695267,GB -1401695268,1401697815,SE +1401695268,1401695271,SE +1401695272,1401695275,GB +1401695276,1401695279,DE +1401695280,1401697815,SE 1401697816,1401697823,DE 1401697824,1401698223,SE 1401698224,1401698227,GB -1401698228,1401708543,SE +1401698228,1401698231,DE +1401698232,1401703951,SE +1401703952,1401703955,DE +1401703956,1401704511,SE +1401704512,1401704515,DE +1401704516,1401705983,SE +1401705984,1401705987,DE +1401705988,1401708287,SE +1401708288,1401708543,DE 1401708544,1401709055,FR 1401709056,1401709311,SE 1401709312,1401709567,GB -1401709568,1401714047,SE +1401709568,1401711615,SE +1401711616,1401711647,GB +1401711648,1401711679,DE +1401711680,1401711711,NL +1401711712,1401711743,ES +1401711744,1401711775,DK +1401711776,1401711807,IT +1401711808,1401711839,US +1401711840,1401711871,NL +1401711872,1401711903,GB +1401711904,1401711935,DE +1401711936,1401711967,NL +1401711968,1401711999,ES +1401712000,1401712031,DK +1401712032,1401712063,CH +1401712064,1401712095,FR +1401712096,1401712127,NL +1401712128,1401712159,GB +1401712160,1401712191,DE +1401712192,1401712223,SE +1401712224,1401712255,ES +1401712256,1401712287,DK +1401712288,1401712319,SE +1401712320,1401712351,IT +1401712352,1401712383,DE +1401712384,1401712415,GB +1401712416,1401712447,DE +1401712448,1401712479,NL +1401712480,1401712511,ES +1401712512,1401712543,SE +1401712544,1401712575,US +1401712576,1401712607,GB +1401712608,1401712639,NL +1401712640,1401712895,SE +1401712896,1401713151,DE +1401713152,1401714047,SE 1401714048,1401714063,FR -1401714064,1401715455,SE +1401714064,1401715403,SE +1401715404,1401715407,DE +1401715408,1401715455,SE 1401715456,1401715459,US 1401715460,1401717759,SE 1401717760,1401718015,NL 1401718016,1401719935,SE 1401719936,1401719951,DK 1401719952,1401719955,GB -1401719956,1401727743,SE +1401719956,1401719959,SE +1401719960,1401719963,GB +1401719964,1401719967,DE +1401719968,1401726783,SE +1401726784,1401726787,DE +1401726788,1401727743,SE 1401727744,1401727999,GB 1401728000,1401728335,SE 1401728336,1401728351,NL @@ -36124,34 +43957,42 @@ 1401745936,1401745959,SE 1401745960,1401745967,US 1401745968,1401745971,MY -1401745972,1401745983,SE +1401745972,1401745975,NL +1401745976,1401745983,SE 1401745984,1401745999,NL 1401746000,1401746015,ES 1401746016,1401746019,GB -1401746020,1401746175,SE +1401746020,1401746023,SE +1401746024,1401746027,DE +1401746028,1401746175,SE 1401746176,1401746191,DK 1401746192,1401746215,SE -1401746216,1401746223,GB +1401746216,1401746223,BG 1401746224,1401746239,SE 1401746240,1401746255,NL 1401746256,1401746271,ES 1401746272,1401746279,GB 1401746280,1401746283,SE 1401746284,1401746287,US -1401746288,1401746431,SE +1401746288,1401746291,DE +1401746292,1401746431,SE 1401746432,1401746447,NL 1401746448,1401746467,SE 1401746468,1401746471,NL -1401746472,1401746487,GB +1401746472,1401746479,US +1401746480,1401746487,GB 1401746488,1401746495,SE 1401746496,1401746511,NL 1401746512,1401746527,ES -1401746528,1401746623,SE +1401746528,1401746531,DE +1401746532,1401746623,SE 1401746624,1401746639,DE 1401746640,1401746655,SE 1401746656,1401746687,IE 1401746688,1401746703,NO -1401746704,1401746751,SE +1401746704,1401746719,SE +1401746720,1401746723,DE +1401746724,1401746751,SE 1401746752,1401746767,NL 1401746768,1401746783,ES 1401746784,1401746879,SE @@ -36161,22 +44002,27 @@ 1401746960,1401747007,SE 1401747008,1401747023,NL 1401747024,1401747039,ES -1401747040,1401747135,SE +1401747040,1401747043,DE +1401747044,1401747135,SE 1401747136,1401747151,DE 1401747152,1401747199,SE 1401747200,1401747215,IT 1401747216,1401747235,SE 1401747236,1401747239,US -1401747240,1401747279,SE -1401747280,1401747295,ES -1401747296,1401747391,SE +1401747240,1401747243,DE +1401747244,1401747247,SE +1401747248,1401747263,ES +1401747264,1401747391,SE 1401747392,1401747407,DE 1401747408,1401747423,GB -1401747424,1401747487,SE +1401747424,1401747439,ES +1401747440,1401747487,SE 1401747488,1401747495,DK 1401747496,1401747499,SE 1401747500,1401747503,GB -1401747504,1401747647,SE +1401747504,1401747583,SE +1401747584,1401747587,DE +1401747588,1401747647,SE 1401747648,1401747663,DE 1401747664,1401747711,SE 1401747712,1401747967,FR @@ -36246,7 +44092,7 @@ 1401927680,1401929727,NL 1401929728,1401931775,RU 1401931776,1401933823,UA -1401933824,1401935871,PL +1401933824,1401935871,DE 1401935872,1401937919,FI 1401937920,1401939967,GB 1401939968,1401942015,UA @@ -36256,12 +44102,14 @@ 1401962496,1401978879,PL 1401978880,1401995263,PT 1401995264,1402011647,CH -1402011648,1402028031,SE +1402011648,1402018815,SE +1402018816,1402019327,FI +1402019328,1402027823,SE +1402027824,1402027831,GB +1402027832,1402028031,SE 1402028032,1402044415,FR 1402044416,1402060799,PL -1402060800,1402068159,FI -1402068160,1402068175,AX -1402068176,1402077183,FI +1402060800,1402077183,FI 1402077184,1402093567,GB 1402093568,1402109951,RU 1402109952,1402142719,FI @@ -36273,9 +44121,7 @@ 1402224640,1402241023,BG 1402241024,1402257407,GB 1402257408,1402273791,FI -1402273792,1402277119,RU -1402277120,1402277375,MD -1402277376,1402277631,KG +1402273792,1402277631,RU 1402277632,1402277887,TJ 1402277888,1402290175,RU 1402290176,1402306559,NL @@ -36333,7 +44179,9 @@ 1403445248,1403461631,RU 1403461632,1403464663,FR 1403464664,1403464671,BE -1403464672,1403469423,FR +1403464672,1403465727,FR +1403465728,1403465743,GB +1403465744,1403469423,FR 1403469424,1403469431,US 1403469432,1403469823,FR 1403469824,1403486207,RU @@ -36343,73 +44191,97 @@ 1403510784,1403518975,CZ 1403518976,1403535359,CY 1403535360,1403551743,PL -1403551744,1403568127,SK -1403568128,1403580159,SE +1403551744,1403556503,SK +1403556504,1403556511,SR +1403556512,1403568127,SK +1403568128,1403573247,SE +1403573248,1403573503,ES +1403573504,1403574783,SE +1403574784,1403575039,IT +1403575040,1403576063,SE +1403576064,1403576319,DE +1403576320,1403578879,SE +1403578880,1403579135,DK +1403579136,1403580159,SE 1403580160,1403580415,GB -1403580416,1403584511,SE +1403580416,1403581951,SE +1403581952,1403582207,US +1403582208,1403584511,SE 1403584512,1403600895,DE 1403600896,1403601519,FR 1403601520,1403601535,MC 1403601536,1403617279,FR 1403617280,1403633663,DE 1403633664,1403650047,RU -1403650048,1403655935,DE +1403650048,1403651647,A2 +1403651648,1403651663,DE +1403651664,1403651727,A2 +1403651728,1403651743,DE +1403651744,1403651807,A2 +1403651808,1403651831,DE +1403651832,1403651839,A2 +1403651840,1403652095,DE +1403652096,1403652319,A2 +1403652320,1403652351,DE +1403652352,1403655935,A2 1403655936,1403655943,IR -1403655944,1403656703,DE +1403655944,1403656703,A2 1403656704,1403656959,IR -1403656960,1403658495,DE +1403656960,1403658495,A2 1403658496,1403658527,IR 1403658528,1403658559,KW -1403658560,1403658847,DE +1403658560,1403658847,A2 1403658848,1403658879,IR -1403658880,1403658911,DE +1403658880,1403658911,A2 1403658912,1403658975,IR -1403658976,1403660735,DE +1403658976,1403660735,A2 1403660736,1403660799,IR -1403660800,1403661183,DE +1403660800,1403661183,A2 1403661184,1403661215,IR 1403661216,1403661279,AE 1403661280,1403661310,IR -1403661311,1403661631,DE +1403661311,1403661631,A2 1403661632,1403661663,IR -1403661664,1403661727,DE +1403661664,1403661727,A2 1403661728,1403661759,IR -1403661760,1403661887,DE +1403661760,1403661887,A2 1403661888,1403661919,IR -1403661920,1403661951,DE +1403661920,1403661951,A2 1403661952,1403661983,IR -1403661984,1403662015,DE +1403661984,1403662015,A2 1403662016,1403662047,IR -1403662048,1403662111,DE +1403662048,1403662111,A2 1403662112,1403662143,IR -1403662144,1403662175,DE +1403662144,1403662175,A2 1403662176,1403662207,AE -1403662208,1403662271,DE +1403662208,1403662271,A2 1403662272,1403662303,AE -1403662304,1403662495,DE +1403662304,1403662495,A2 1403662496,1403662527,IR -1403662528,1403662655,DE +1403662528,1403662655,A2 1403662656,1403662687,IR -1403662688,1403662815,DE +1403662688,1403662815,A2 1403662816,1403662911,IR -1403662912,1403662943,DE +1403662912,1403662943,A2 1403662944,1403662975,AE 1403662976,1403663039,IR -1403663040,1403663135,DE +1403663040,1403663135,A2 1403663136,1403663199,AE -1403663200,1403663359,DE +1403663200,1403663359,A2 1403663360,1403663487,IR -1403663488,1403663511,DE +1403663488,1403663511,A2 1403663512,1403663519,IR -1403663520,1403663527,DE +1403663520,1403663527,A2 1403663528,1403663535,IQ -1403663536,1403663567,DE +1403663536,1403663567,A2 1403663568,1403663575,AE -1403663576,1403663589,DE +1403663576,1403663589,A2 1403663590,1403663590,IR -1403663591,1403664919,DE +1403663591,1403664919,A2 1403664920,1403664927,TZ -1403664928,1403666431,DE +1403664928,1403665151,A2 +1403665152,1403665183,DE +1403665184,1403666431,A2 1403666432,1403682815,GB 1403682816,1403688959,A2 1403688960,1403692031,GB @@ -36435,9 +44307,8 @@ 1403994112,1404010495,AT 1404010496,1404026879,PL 1404026880,1404043263,ES -1404043264,1404045311,EE -1404045312,1404051455,SE -1404051456,1404059647,KZ +1404043264,1404051455,EE +1404051456,1404059647,HR 1404059648,1404076031,NO 1404076032,1404084223,DE 1404084224,1404092415,NO @@ -36460,9 +44331,7 @@ 1404197888,1404198911,LT 1404198912,1404200959,SE 1404200960,1404203007,NL -1404203008,1404204800,HR -1404204801,1404205055,SE -1404205056,1404207103,HR +1404203008,1404207103,HR 1404207104,1404210175,NO 1404210176,1404212223,LV 1404212224,1404215295,SE @@ -36494,7 +44363,8 @@ 1404420096,1404436479,RU 1404436480,1404575743,SE 1404575744,1404583935,HR -1404583936,1404645375,SE +1404583936,1404600319,KZ +1404600320,1404645375,SE 1404645376,1404645887,HR 1404645888,1404764159,SE 1404764160,1404768511,NL @@ -36509,7 +44379,10 @@ 1404803072,1404804095,LV 1404804096,1404805119,SE 1404805120,1404813311,AT -1404813312,1404829695,SE +1404813312,1404815871,EE +1404815872,1404816383,LT +1404816384,1404821503,NL +1404821504,1404829695,SE 1404829696,1404870655,RU 1404870656,1404872703,LT 1404872704,1404874751,SE @@ -36520,7 +44393,10 @@ 1404928000,1404944383,SE 1404944384,1404952575,DE 1404952576,1404960767,NL -1404960768,1405050879,SE +1404960768,1405026303,SE +1405026304,1405042687,NO +1405042688,1405048831,SE +1405048832,1405050879,HR 1405050880,1405059071,AT 1405059072,1405063167,SE 1405063168,1405067263,NO @@ -36559,7 +44435,9 @@ 1406716928,1406717439,AT 1406717440,1406717695,NL 1406717696,1406717951,DE -1406717952,1406719487,GB +1406717952,1406718015,GB +1406718016,1406718019,AT +1406718020,1406719487,GB 1406719488,1406719743,AT 1406719744,1406719999,GB 1406720000,1406721023,AT @@ -36600,7 +44478,38 @@ 1406763008,1406771199,BE 1406771200,1406779391,GB 1406779392,1406787583,RU -1406787584,1406795775,ES +1406787584,1406787679,GB +1406787680,1406787695,ES +1406787696,1406787935,GB +1406787936,1406787967,ES +1406787968,1406788055,GB +1406788056,1406788351,ES +1406788352,1406788479,BG +1406788480,1406788607,ES +1406788608,1406788711,GB +1406788712,1406789119,ES +1406789120,1406789135,GB +1406789136,1406789183,ES +1406789184,1406789247,GB +1406789248,1406789375,ES +1406789376,1406789503,RO +1406789504,1406789631,ES +1406789632,1406789887,FR +1406789888,1406790015,HU +1406790016,1406790143,ES +1406790144,1406790151,GB +1406790152,1406790159,ES +1406790160,1406790175,GB +1406790176,1406790207,ES +1406790208,1406790471,GB +1406790472,1406790479,ES +1406790480,1406790487,GB +1406790488,1406790495,ES +1406790496,1406791087,GB +1406791088,1406791423,ES +1406791424,1406791455,GB +1406791456,1406794751,ES +1406794752,1406795775,NL 1406795776,1406803967,GB 1406803968,1406812159,DE 1406812160,1406820351,SE @@ -36622,15 +44531,18 @@ 1406935040,1406951423,RU 1406951424,1406959615,PL 1406959616,1406964287,DE -1406964288,1406964319,NL -1406964320,1406964327,DE -1406964328,1406964351,NL +1406964288,1406964351,NL 1406964352,1406964735,DE 1406964736,1406964927,US 1406964928,1406967295,DE 1406967296,1406967327,GB 1406967328,1406967343,NL -1406967344,1406967807,DE +1406967344,1406967399,GB +1406967400,1406967407,DE +1406967408,1406967423,GB +1406967424,1406967551,DE +1406967552,1406967615,GB +1406967616,1406967807,DE 1406967808,1406975999,RU 1406976000,1406984191,IE 1406984192,1407000575,RU @@ -36655,11 +44567,21 @@ 1407123456,1407131647,SE 1407131648,1407139839,NL 1407139840,1407148031,DE -1407148032,1407152263,GB +1407148032,1407148295,GB +1407148296,1407148303,SE +1407148304,1407149695,GB +1407149696,1407149759,CY +1407149760,1407149791,SE +1407149792,1407151615,GB +1407151616,1407151871,SE +1407151872,1407152259,GB +1407152260,1407152263,IE 1407152264,1407152287,US 1407152288,1407152903,GB 1407152904,1407152927,NL -1407152928,1407154711,GB +1407152928,1407154623,GB +1407154624,1407154631,SE +1407154632,1407154711,GB 1407154712,1407154719,SE 1407154720,1407156223,GB 1407156224,1407164415,LV @@ -36678,8 +44600,7 @@ 1407516728,1407516735,NG 1407516736,1407516743,UG 1407516744,1407516751,LR -1407516752,1407516759,SL -1407516760,1407516767,A2 +1407516752,1407516767,A2 1407516768,1407516775,AO 1407516776,1407516783,A2 1407516784,1407516791,NG @@ -36693,13 +44614,31 @@ 1407516880,1407516895,NG 1407516896,1407516911,A2 1407516912,1407516927,NG -1407516928,1407517183,ZW +1407516928,1407516935,A2 +1407516936,1407516951,NG +1407516952,1407516959,A2 +1407516960,1407516967,NG +1407516968,1407516975,A2 +1407516976,1407516983,GN +1407516984,1407516991,KE +1407516992,1407516999,CD +1407517000,1407517023,A2 +1407517024,1407517031,GQ +1407517032,1407517039,NG +1407517040,1407517047,A2 +1407517048,1407517055,GQ +1407517056,1407517135,A2 +1407517136,1407517143,NG +1407517144,1407517151,A2 +1407517152,1407517159,CD +1407517160,1407517167,ML +1407517168,1407517175,A2 +1407517176,1407517183,NG 1407517184,1407517311,GB 1407517312,1407517383,A2 1407517384,1407517391,CD -1407517392,1407517415,A2 -1407517416,1407517423,NG -1407517424,1407517431,ZW +1407517392,1407517423,A2 +1407517424,1407517431,US 1407517432,1407517439,NG 1407517440,1407517695,A2 1407517696,1407517887,NG @@ -36708,8 +44647,8 @@ 1407517952,1407518015,SL 1407518016,1407518031,ZA 1407518032,1407518039,A2 -1407518040,1407518047,CD -1407518048,1407518063,NG +1407518040,1407518055,CD +1407518056,1407518063,NG 1407518064,1407518079,A2 1407518080,1407518111,LR 1407518112,1407518127,NG @@ -36722,10 +44661,9 @@ 1407518176,1407518183,A2 1407518184,1407518199,NG 1407518200,1407518207,AE -1407518208,1407518215,ZW -1407518216,1407518239,A2 -1407518240,1407518247,NG -1407518248,1407518255,A2 +1407518208,1407518215,LR +1407518216,1407518231,A2 +1407518232,1407518255,NG 1407518256,1407518263,CD 1407518264,1407518269,GH 1407518270,1407518335,A2 @@ -36734,10 +44672,8 @@ 1407518352,1407518359,A2 1407518360,1407518367,NG 1407518368,1407518375,ZA -1407518376,1407518383,CD -1407518384,1407518391,A2 -1407518392,1407518399,CD -1407518400,1407518831,A2 +1407518376,1407518383,AO +1407518384,1407518831,A2 1407518832,1407518847,NG 1407518848,1407518911,FR 1407518912,1407518943,NG @@ -36764,7 +44700,7 @@ 1407519160,1407519167,AO 1407519168,1407519175,A2 1407519176,1407519183,SL -1407519184,1407519191,NG +1407519184,1407519191,A2 1407519192,1407519199,CD 1407519200,1407519207,A2 1407519208,1407519215,TG @@ -36775,47 +44711,55 @@ 1407519752,1407519759,NG 1407519760,1407519767,CD 1407519768,1407519775,GN -1407519776,1407519783,A2 -1407519784,1407519791,IQ +1407519776,1407519783,CG +1407519784,1407519791,A2 1407519792,1407519799,NG 1407519800,1407519815,A2 1407519816,1407519823,NG 1407519824,1407519831,A2 1407519832,1407519839,SD -1407519840,1407519847,A2 +1407519840,1407519847,ML 1407519848,1407519855,NG 1407519856,1407519863,GN 1407519864,1407519871,NG 1407519872,1407519879,IL -1407519880,1407519895,NG -1407519896,1407519903,GN +1407519880,1407519887,NG +1407519888,1407519895,CD +1407519896,1407519903,A2 1407519904,1407519911,NG -1407519912,1407519919,GN -1407519920,1407519959,A2 -1407519960,1407519983,NG -1407519984,1407519991,A2 -1407519992,1407519999,NG -1407520000,1407520007,CD -1407520008,1407520023,NG +1407519912,1407519943,A2 +1407519944,1407519959,CD +1407519960,1407519967,GB +1407519968,1407519983,NG +1407519984,1407519991,SD +1407519992,1407520007,NG +1407520008,1407520015,A2 +1407520016,1407520023,NG 1407520024,1407520031,A2 1407520032,1407520039,GN -1407520040,1407520071,A2 +1407520040,1407520047,A2 +1407520048,1407520055,GB +1407520056,1407520071,A2 1407520072,1407520079,CM 1407520080,1407520087,NG -1407520088,1407520103,GN +1407520088,1407520103,A2 1407520104,1407520111,SD -1407520112,1407520119,GN +1407520112,1407520119,A2 1407520120,1407520127,NE -1407520128,1407520151,GN +1407520128,1407520135,GN +1407520136,1407520143,CD +1407520144,1407520151,GN 1407520152,1407520152,A2 1407520153,1407520159,GN 1407520160,1407520167,IL 1407520168,1407520175,GN 1407520176,1407520207,A2 1407520208,1407520215,NG -1407520216,1407520223,NE +1407520216,1407520223,CD 1407520224,1407520231,SD -1407520232,1407520271,A2 +1407520232,1407520239,A2 +1407520240,1407520247,NE +1407520248,1407520271,A2 1407520272,1407520279,NG 1407520280,1407520311,A2 1407520312,1407520327,NG @@ -36830,8 +44774,8 @@ 1407520424,1407520439,A2 1407520440,1407520447,CD 1407520448,1407520463,NG -1407520464,1407520519,A2 -1407520520,1407520527,CD +1407520464,1407520511,A2 +1407520512,1407520527,CD 1407520528,1407520543,NG 1407520544,1407520551,A2 1407520552,1407520559,NG @@ -36842,9 +44786,8 @@ 1407520600,1407520607,A2 1407520608,1407520615,AO 1407520616,1407520623,A2 -1407520624,1407520631,NG -1407520632,1407520639,A2 -1407520640,1407520655,NG +1407520624,1407520647,NG +1407520648,1407520655,ML 1407520656,1407520663,GA 1407520664,1407520687,A2 1407520688,1407520695,NG @@ -36853,32 +44796,33 @@ 1407520720,1407520735,A2 1407520736,1407520743,LR 1407520744,1407520751,NG -1407520752,1407520759,A2 +1407520752,1407520759,BF 1407520760,1407520767,CD -1407520768,1407520775,ZW -1407520776,1407520783,CD +1407520768,1407520775,TZ +1407520776,1407520783,A2 1407520784,1407520791,SD 1407520792,1407520799,ZA 1407520800,1407520807,A2 -1407520808,1407520815,CI -1407520816,1407520823,GQ +1407520808,1407520815,MU +1407520816,1407520823,ZW 1407520824,1407520831,CI 1407520832,1407520839,SO 1407520840,1407520847,A2 1407520848,1407520855,ZM 1407520856,1407520863,A2 1407520864,1407520871,TZ -1407520872,1407520879,CD -1407520880,1407520895,A2 +1407520872,1407520887,CD +1407520888,1407520895,TZ 1407520896,1407520903,AO 1407520904,1407520911,NG 1407520912,1407520919,ZW 1407520920,1407520927,IQ 1407520928,1407520935,A2 1407520936,1407520943,CD -1407520944,1407520951,A2 +1407520944,1407520951,TZ 1407520952,1407520959,ZM -1407520960,1407520975,A2 +1407520960,1407520967,NG +1407520968,1407520975,A2 1407520976,1407520991,ZM 1407520992,1407520999,IQ 1407521000,1407521023,CD @@ -36887,7 +44831,7 @@ 1407521048,1407521055,NG 1407521056,1407521063,KE 1407521064,1407521071,NG -1407521072,1407521079,A2 +1407521072,1407521079,TZ 1407521080,1407521087,UG 1407521088,1407521095,NG 1407521096,1407521103,A2 @@ -36895,7 +44839,7 @@ 1407521112,1407521119,SL 1407521120,1407521127,A2 1407521128,1407521135,NG -1407521136,1407521143,CD +1407521136,1407521143,A2 1407521144,1407521151,ZM 1407521152,1407521159,NG 1407521160,1407521167,ZW @@ -36904,33 +44848,37 @@ 1407521184,1407521199,CD 1407521200,1407521207,A2 1407521208,1407521215,IQ -1407521216,1407521223,A2 +1407521216,1407521223,MU 1407521224,1407521231,TZ 1407521232,1407521239,LR 1407521240,1407521247,A2 1407521248,1407521279,GH 1407521280,1407521415,A2 1407521416,1407521423,LR -1407521424,1407521543,A2 -1407521544,1407521567,NG -1407521568,1407521575,A2 -1407521576,1407521709,NG -1407521710,1407522319,A2 +1407521424,1407521535,A2 +1407521536,1407521709,NG +1407521710,1407521711,A2 +1407521712,1407521727,NG +1407521728,1407521735,A2 +1407521736,1407521751,NG +1407521752,1407521759,A2 +1407521760,1407521767,NG +1407521768,1407521783,A2 +1407521784,1407521791,NG +1407521792,1407522319,A2 1407522320,1407522327,TG 1407522328,1407522335,A2 1407522336,1407522351,SO 1407522352,1407522359,CD -1407522360,1407522367,FR -1407522368,1407522383,GQ -1407522384,1407522391,A2 +1407522360,1407522367,A2 +1407522368,1407522375,GQ +1407522376,1407522391,A2 1407522392,1407522407,NG 1407522408,1407522415,ZW -1407522416,1407522423,NG +1407522416,1407522423,SD 1407522424,1407522431,A2 -1407522432,1407522439,IQ -1407522440,1407522440,NG -1407522441,1407522447,A2 -1407522448,1407522455,UG +1407522432,1407522439,ZM +1407522440,1407522455,UG 1407522456,1407522463,ML 1407522464,1407522471,A2 1407522472,1407522479,LR @@ -36940,24 +44888,23 @@ 1407522504,1407522511,ZW 1407522512,1407522527,A2 1407522528,1407522535,ZM -1407522536,1407522551,NG -1407522552,1407522559,UG +1407522536,1407522543,NG +1407522544,1407522559,UG 1407522560,1407522567,MZ 1407522568,1407522575,NG 1407522576,1407522583,A2 1407522584,1407522591,GL -1407522592,1407522599,A2 +1407522592,1407522599,UG 1407522600,1407522607,ZM -1407522608,1407522615,A2 -1407522616,1407522631,NG +1407522608,1407522615,AO +1407522616,1407522631,A2 1407522632,1407522639,MW 1407522640,1407522647,GQ 1407522648,1407522655,NG -1407522656,1407522663,CI -1407522664,1407522671,A2 +1407522656,1407522671,A2 1407522672,1407522679,ZM -1407522680,1407522687,IQ -1407522688,1407522695,NG +1407522680,1407522687,SD +1407522688,1407522695,A2 1407522696,1407522703,GL 1407522704,1407522711,NG 1407522712,1407522719,BJ @@ -36967,25 +44914,42 @@ 1407522744,1407522751,NG 1407522752,1407522767,ZM 1407522768,1407522775,A2 -1407522776,1407522791,NG +1407522776,1407522783,TD +1407522784,1407522791,ZW 1407522792,1407522799,A2 -1407522800,1407522807,ZM +1407522800,1407522807,NG 1407522808,1407522815,A2 1407522816,1407522823,CD 1407522824,1407522831,NG 1407522832,1407522839,MZ -1407522840,1407522871,A2 +1407522840,1407522847,NG +1407522848,1407522855,TZ +1407522856,1407522863,ZW +1407522864,1407522871,TZ 1407522872,1407522879,IQ -1407522880,1407522903,A2 +1407522880,1407522887,MU +1407522888,1407522895,A2 +1407522896,1407522903,UG 1407522904,1407522911,KE 1407522912,1407522919,CG -1407522920,1407522991,A2 +1407522920,1407522927,A2 +1407522928,1407522935,GR +1407522936,1407522951,A2 +1407522952,1407522967,ZW +1407522968,1407522975,MU +1407522976,1407522983,CD +1407522984,1407522991,A2 1407522992,1407522999,CD -1407523000,1407523007,A2 -1407523008,1407523015,NG +1407523000,1407523015,A2 1407523016,1407523023,KE -1407523024,1407523079,A2 -1407523080,1407523088,NG +1407523024,1407523031,MU +1407523032,1407523047,A2 +1407523048,1407523055,NG +1407523056,1407523063,MU +1407523064,1407523071,A2 +1407523072,1407523079,CD +1407523080,1407523087,A2 +1407523088,1407523088,NG 1407523089,1407523103,A2 1407523104,1407523111,UG 1407523112,1407523119,ZW @@ -36994,48 +44958,68 @@ 1407523136,1407523143,BJ 1407523144,1407523159,A2 1407523160,1407523167,LR -1407523168,1407523183,UG +1407523168,1407523175,A2 +1407523176,1407523183,UG 1407523184,1407523191,NG -1407523192,1407523199,A2 -1407523200,1407523207,NG -1407523208,1407523215,A2 +1407523192,1407523207,A2 +1407523208,1407523215,SD 1407523216,1407523223,BI 1407523224,1407523247,AO -1407523248,1407523263,A2 -1407523264,1407523279,NG -1407523280,1407523287,MZ +1407523248,1407523255,A2 +1407523256,1407523263,NG +1407523264,1407523271,A2 +1407523272,1407523279,US +1407523280,1407523287,ZW 1407523288,1407523295,NG -1407523296,1407523303,A2 +1407523296,1407523303,GR 1407523304,1407523311,NG 1407523312,1407523327,BJ 1407523328,1407523335,MW 1407523336,1407523351,A2 1407523352,1407523359,LU -1407523360,1407523367,ZW -1407523368,1407523391,A2 -1407523392,1407523455,ZW -1407523456,1407523519,MW +1407523360,1407523455,A2 +1407523456,1407523487,MW +1407523488,1407523495,LR +1407523496,1407523519,MW 1407523520,1407523535,A2 -1407523536,1407523551,NG +1407523536,1407523543,SO +1407523544,1407523551,NG 1407523552,1407523559,CM 1407523560,1407523567,KE -1407523568,1407523839,A2 -1407523840,1407524351,MW +1407523568,1407523583,A2 +1407523584,1407523591,IQ +1407523592,1407523607,A2 +1407523608,1407523615,IQ +1407523616,1407523623,A2 +1407523624,1407523655,IQ +1407523656,1407523663,A2 +1407523664,1407523719,IQ +1407523720,1407523743,A2 +1407523744,1407523751,IQ +1407523752,1407523791,A2 +1407523792,1407523799,IQ +1407523800,1407523807,SY +1407523808,1407523831,A2 +1407523832,1407523839,IQ +1407523840,1407524351,A2 1407524352,1407524607,GB 1407524608,1407524615,ZW -1407524616,1407524623,CM -1407524624,1407524631,A2 +1407524616,1407524623,CD +1407524624,1407524631,ZA 1407524632,1407524639,NG -1407524640,1407524647,A2 +1407524640,1407524647,KE 1407524648,1407524655,CD -1407524656,1407524663,NG -1407524664,1407524679,A2 +1407524656,1407524663,ZW +1407524664,1407524671,CD +1407524672,1407524679,A2 1407524680,1407524687,LR 1407524688,1407524703,MZ -1407524704,1407524727,A2 +1407524704,1407524711,A2 +1407524712,1407524719,ZW +1407524720,1407524727,A2 1407524728,1407524735,NG 1407524736,1407524743,A2 -1407524744,1407524751,NG +1407524744,1407524751,ZW 1407524752,1407524759,A2 1407524760,1407524767,CM 1407524768,1407524775,BW @@ -37046,37 +45030,41 @@ 1407524840,1407524847,LR 1407524848,1407524855,A2 1407524856,1407524863,CD -1407524864,1407524895,A2 +1407524864,1407524879,A2 +1407524880,1407524887,ZW +1407524888,1407524895,TZ 1407524896,1407524903,LR -1407524904,1407524911,NG -1407524912,1407524935,A2 +1407524904,1407524911,A2 +1407524912,1407524919,ZW +1407524920,1407524927,ZA +1407524928,1407524935,A2 1407524936,1407524943,GR -1407524944,1407524951,A2 -1407524952,1407524959,CM +1407524944,1407524951,ZW +1407524952,1407524959,UG 1407524960,1407524967,TZ 1407524968,1407524975,NG -1407524976,1407524983,A2 +1407524976,1407524983,CD 1407524984,1407524991,ZA 1407524992,1407524999,TZ 1407525000,1407525007,A2 1407525008,1407525015,TZ -1407525016,1407525023,BI +1407525016,1407525023,UG 1407525024,1407525031,NG -1407525032,1407525039,A2 +1407525032,1407525039,IL 1407525040,1407525047,ZA 1407525048,1407525055,NG 1407525056,1407525063,ZA -1407525064,1407525071,A2 -1407525072,1407525079,NG +1407525064,1407525071,SO +1407525072,1407525079,CD 1407525080,1407525087,A2 1407525088,1407525095,MW -1407525096,1407525103,A2 +1407525096,1407525103,ZW 1407525104,1407525111,NG 1407525112,1407525119,ZA -1407525120,1407525127,NG +1407525120,1407525127,A2 1407525128,1407525135,SD 1407525136,1407525143,CD -1407525144,1407525151,A2 +1407525144,1407525151,TZ 1407525152,1407525167,CD 1407525168,1407525175,A2 1407525176,1407525183,CD @@ -37095,21 +45083,45 @@ 1407525384,1407525391,CD 1407525392,1407525399,A2 1407525400,1407525407,KE -1407525408,1407525471,A2 +1407525408,1407525415,UG +1407525416,1407525423,A2 +1407525424,1407525431,UG +1407525432,1407525471,A2 1407525472,1407525479,UG -1407525480,1407525543,A2 +1407525480,1407525487,CD +1407525488,1407525503,A2 +1407525504,1407525511,UG +1407525512,1407525543,A2 1407525544,1407525551,KE -1407525552,1407525583,A2 -1407525584,1407525591,GL -1407525592,1407526711,A2 +1407525552,1407525559,VG +1407525560,1407525567,A2 +1407525568,1407525575,CD +1407525576,1407525583,LR +1407525584,1407525607,A2 +1407525608,1407525615,CD +1407525616,1407525623,A2 +1407525624,1407525631,SO +1407525632,1407525639,A2 +1407525640,1407525679,IQ +1407525680,1407525695,A2 +1407525696,1407525703,IQ +1407525704,1407525719,A2 +1407525720,1407525727,IQ +1407525728,1407525751,A2 +1407525752,1407525759,IQ +1407525760,1407525775,A2 +1407525776,1407525783,IQ +1407525784,1407526711,A2 1407526712,1407526719,GN -1407526720,1407529023,A2 -1407529024,1407529087,NG -1407529088,1407529103,A2 -1407529104,1407529111,NG -1407529112,1407529143,A2 -1407529144,1407529151,ZW -1407529152,1407529183,A2 +1407526720,1407528959,A2 +1407528960,1407528991,SO +1407528992,1407529023,A2 +1407529024,1407529087,US +1407529088,1407529095,SO +1407529096,1407529103,A2 +1407529104,1407529111,SO +1407529112,1407529175,A2 +1407529176,1407529183,SO 1407529184,1407529191,NG 1407529192,1407529207,A2 1407529208,1407529215,NG @@ -37117,31 +45129,30 @@ 1407531008,1407531519,NG 1407531520,1407531551,CD 1407531552,1407531559,SD -1407531560,1407531567,NG +1407531560,1407531567,A2 1407531568,1407531575,CD -1407531576,1407531583,A2 +1407531576,1407531583,GQ 1407531584,1407531591,CD 1407531592,1407531599,A2 -1407531600,1407531607,NG -1407531608,1407531631,CD +1407531600,1407531607,LY +1407531608,1407531615,CD +1407531616,1407531623,A2 +1407531624,1407531631,CD 1407531632,1407531639,ZM 1407531640,1407531647,CD -1407531648,1407531655,A2 -1407531656,1407531663,CD +1407531648,1407531663,A2 1407531664,1407531671,MZ 1407531672,1407531687,CD -1407531688,1407531695,A2 -1407531696,1407531703,CD -1407531704,1407531711,IQ -1407531712,1407531719,A2 -1407531720,1407531735,CD +1407531688,1407531703,A2 +1407531704,1407531711,SD +1407531712,1407531735,CD 1407531736,1407531743,ZW 1407531744,1407531751,A2 1407531752,1407531759,GQ 1407531760,1407531767,ZW 1407531768,1407531775,SD 1407531776,1407532543,A2 -1407532544,1407532551,UG +1407532544,1407532551,SO 1407532552,1407532559,AO 1407532560,1407532583,A2 1407532584,1407532591,ZW @@ -37157,13 +45168,13 @@ 1407533056,1407533311,NG 1407533312,1407533327,AO 1407533328,1407533343,A2 -1407533344,1407533359,NG -1407533360,1407533375,A2 +1407533344,1407533375,NG 1407533376,1407533407,CD 1407533408,1407533423,A2 1407533424,1407533567,GH 1407533568,1407533583,NG -1407533584,1407533607,A2 +1407533584,1407533591,NE +1407533592,1407533607,A2 1407533608,1407533631,NG 1407533632,1407533679,A2 1407533680,1407533695,NG @@ -37173,18 +45184,20 @@ 1407533728,1407533735,A2 1407533736,1407533743,GN 1407533744,1407533751,NG -1407533752,1407533759,A2 +1407533752,1407533759,SL 1407533760,1407533767,NG 1407533768,1407533775,A2 1407533776,1407533783,NG 1407533784,1407533815,A2 1407533816,1407533823,NG -1407533824,1407534079,A2 +1407533824,1407533831,LR +1407533832,1407533919,A2 +1407533920,1407533927,BF +1407533928,1407534079,A2 1407534080,1407534335,AE -1407534336,1407534343,CM -1407534344,1407534359,A2 +1407534336,1407534359,A2 1407534360,1407534383,NG -1407534384,1407534391,A2 +1407534384,1407534391,GR 1407534392,1407534399,AO 1407534400,1407534407,NG 1407534408,1407534415,CI @@ -37207,27 +45220,26 @@ 1407535616,1407535623,CD 1407535624,1407535631,A2 1407535632,1407535639,SD -1407535640,1407535647,A2 +1407535640,1407535647,CD 1407535648,1407535655,NG -1407535656,1407535663,GB -1407535664,1407535671,A2 +1407535656,1407535671,A2 1407535672,1407535679,SD 1407535680,1407535687,GN 1407535688,1407535695,A2 1407535696,1407535703,GN -1407535704,1407535711,A2 +1407535704,1407535711,CD 1407535712,1407535719,GB 1407535720,1407535735,A2 1407535736,1407535743,NG -1407535744,1407535775,A2 -1407535776,1407535783,GN -1407535784,1407535815,A2 +1407535744,1407535751,A2 +1407535752,1407535759,GB +1407535760,1407535799,A2 +1407535800,1407535807,NG +1407535808,1407535815,A2 1407535816,1407535823,NG -1407535824,1407535831,A2 -1407535832,1407535839,GB -1407535840,1407535847,NG -1407535848,1407535855,A2 -1407535856,1407535863,NG +1407535824,1407535847,A2 +1407535848,1407535855,CD +1407535856,1407535863,GB 1407535864,1407536127,A2 1407536128,1407536639,GA 1407536640,1407536895,CD @@ -37251,29 +45263,29 @@ 1407537112,1407537119,LR 1407537120,1407537135,A2 1407537136,1407537143,NG -1407537144,1407537183,A2 +1407537144,1407537151,A2 +1407537152,1407537159,UG +1407537160,1407537183,A2 1407537184,1407537191,NG 1407537192,1407537207,A2 1407537208,1407537215,BE -1407537216,1407537231,A2 -1407537232,1407537255,NG +1407537216,1407537239,A2 +1407537240,1407537255,NG 1407537256,1407537263,A2 -1407537264,1407537271,NG -1407537272,1407537287,A2 -1407537288,1407537295,NG -1407537296,1407537303,UG -1407537304,1407537319,A2 +1407537264,1407537279,CM +1407537280,1407537287,A2 +1407537288,1407537303,UG +1407537304,1407537311,LR +1407537312,1407537319,A2 1407537320,1407537327,NG -1407537328,1407537335,A2 -1407537336,1407537351,NG -1407537352,1407537367,A2 +1407537328,1407537343,A2 +1407537344,1407537359,NG +1407537360,1407537367,A2 1407537368,1407537383,NG -1407537384,1407537399,A2 -1407537400,1407537407,BF -1407537408,1407537415,A2 -1407537416,1407537423,GH -1407537424,1407537431,A2 -1407537432,1407537455,NG +1407537384,1407537431,A2 +1407537432,1407537439,NG +1407537440,1407537447,LR +1407537448,1407537455,UG 1407537456,1407537463,AO 1407537464,1407537479,A2 1407537480,1407537487,CM @@ -37282,14 +45294,12 @@ 1407537512,1407537519,LR 1407537520,1407537543,A2 1407537544,1407537551,AO -1407537552,1407537559,A2 -1407537560,1407537567,NG -1407537568,1407537575,A2 -1407537576,1407537599,NG -1407537600,1407537607,A2 +1407537552,1407537575,A2 +1407537576,1407537591,NG +1407537592,1407537607,A2 1407537608,1407537615,CM -1407537616,1407537623,A2 -1407537624,1407537639,NG +1407537616,1407537631,A2 +1407537632,1407537639,NG 1407537640,1407537679,A2 1407537680,1407537687,IQ 1407537688,1407537703,A2 @@ -37300,8 +45310,7 @@ 1407537856,1407537863,NG 1407537864,1407537871,TG 1407537872,1407537879,IQ -1407537880,1407537895,A2 -1407537896,1407537903,IQ +1407537880,1407537903,A2 1407537904,1407537911,TG 1407537912,1407537927,A2 1407537928,1407537935,SL @@ -37312,32 +45321,31 @@ 1407537968,1407537975,NG 1407537976,1407537983,A2 1407537984,1407537991,NG -1407537992,1407537999,IQ +1407537992,1407537999,A2 1407538000,1407538023,NG 1407538024,1407538031,A2 1407538032,1407538039,NG 1407538040,1407538047,CD 1407538048,1407538055,NG -1407538056,1407538071,LU +1407538056,1407538063,A2 +1407538064,1407538071,LU 1407538072,1407538079,A2 1407538080,1407538087,LR 1407538088,1407538095,AO -1407538096,1407538103,CD -1407538104,1407538111,A2 +1407538096,1407538111,A2 1407538112,1407538119,LR 1407538120,1407538127,NG 1407538128,1407538143,A2 1407538144,1407538151,GN 1407538152,1407538167,A2 1407538168,1407538175,IQ -1407538176,1407538207,A2 -1407538208,1407538223,NG -1407538224,1407538263,A2 -1407538264,1407538271,NG +1407538176,1407538199,A2 +1407538200,1407538271,NG 1407538272,1407538279,CO -1407538280,1407538295,A2 +1407538280,1407538287,A2 +1407538288,1407538295,NG 1407538296,1407538303,AO -1407538304,1407538311,A2 +1407538304,1407538311,NG 1407538312,1407538319,CD 1407538320,1407538327,A2 1407538328,1407538335,CD @@ -37347,16 +45355,16 @@ 1407538384,1407538391,CM 1407538392,1407538407,A2 1407538408,1407538415,NG -1407538416,1407538439,A2 +1407538416,1407538423,A2 +1407538424,1407538431,NG +1407538432,1407538439,A2 1407538440,1407538447,NG 1407538448,1407538463,A2 1407538464,1407538471,ZM 1407538472,1407538479,NG 1407538480,1407538663,A2 1407538664,1407538679,NG -1407538680,1407538751,A2 -1407538752,1407538783,NG -1407538784,1407538863,A2 +1407538680,1407538863,A2 1407538864,1407538879,GE 1407538880,1407538887,A2 1407538888,1407538895,NG @@ -37384,13 +45392,31 @@ 1407539200,1407539455,GE 1407539456,1407539711,A2 1407539712,1407539719,BE -1407539720,1407539751,A2 +1407539720,1407539727,A2 +1407539728,1407539735,GR +1407539736,1407539743,NG +1407539744,1407539751,A2 1407539752,1407539759,NG -1407539760,1407539831,A2 -1407539832,1407539839,NG -1407539840,1407539935,A2 -1407539936,1407539943,CM -1407539944,1407539967,A2 +1407539760,1407539767,A2 +1407539768,1407539775,GR +1407539776,1407539783,A2 +1407539784,1407539791,GR +1407539792,1407539799,NG +1407539800,1407539823,A2 +1407539824,1407539831,NG +1407539832,1407539855,A2 +1407539856,1407539863,CD +1407539864,1407539879,NG +1407539880,1407539887,A2 +1407539888,1407539895,NG +1407539896,1407539903,CD +1407539904,1407539911,A2 +1407539912,1407539927,NG +1407539928,1407539935,A2 +1407539936,1407539943,GN +1407539944,1407539951,CD +1407539952,1407539959,LR +1407539960,1407539967,A2 1407539968,1407539975,CD 1407539976,1407540055,A2 1407540056,1407540063,NG @@ -37404,7 +45430,68 @@ 1407540160,1407540167,CD 1407540168,1407540199,A2 1407540200,1407540215,CD -1407540216,1407541471,A2 +1407540216,1407540223,A2 +1407540224,1407540231,AO +1407540232,1407540247,NG +1407540248,1407540255,A2 +1407540256,1407540263,CD +1407540264,1407540271,A2 +1407540272,1407540279,LR +1407540280,1407540287,NG +1407540288,1407540295,CD +1407540296,1407540303,NG +1407540304,1407540311,AO +1407540312,1407540319,A2 +1407540320,1407540327,CD +1407540328,1407540343,A2 +1407540344,1407540351,CF +1407540352,1407540359,TD +1407540360,1407540367,A2 +1407540368,1407540375,LR +1407540376,1407540383,A2 +1407540384,1407540391,NG +1407540392,1407540415,A2 +1407540416,1407540423,NG +1407540424,1407540431,A2 +1407540432,1407540439,CI +1407540440,1407540447,A2 +1407540448,1407540455,LR +1407540456,1407540463,A2 +1407540464,1407540471,MU +1407540472,1407540479,A2 +1407540480,1407540487,CM +1407540488,1407540495,A2 +1407540496,1407540503,NG +1407540504,1407540551,A2 +1407540552,1407540559,NG +1407540560,1407540567,CD +1407540568,1407540591,A2 +1407540592,1407540599,GN +1407540600,1407540607,A2 +1407540608,1407540615,CD +1407540616,1407540623,SD +1407540624,1407540655,A2 +1407540656,1407540663,CD +1407540664,1407540695,A2 +1407540696,1407540703,NG +1407540704,1407540767,A2 +1407540768,1407540775,NG +1407540776,1407540991,A2 +1407540992,1407540999,CD +1407541000,1407541023,A2 +1407541024,1407541031,LR +1407541032,1407541039,NG +1407541040,1407541047,A2 +1407541048,1407541055,NG +1407541056,1407541063,A2 +1407541064,1407541071,NG +1407541072,1407541095,A2 +1407541096,1407541103,GQ +1407541104,1407541175,A2 +1407541176,1407541183,NG +1407541184,1407541191,A2 +1407541192,1407541199,NG +1407541200,1407541471,A2 1407541472,1407541495,NG 1407541496,1407541535,A2 1407541536,1407541543,CM @@ -37441,8 +45528,8 @@ 1407542768,1407542775,GA 1407542776,1407542791,A2 1407542792,1407542799,NG -1407542800,1407542831,A2 -1407542832,1407542863,NG +1407542800,1407542847,A2 +1407542848,1407542863,NG 1407542864,1407542903,A2 1407542904,1407542911,CD 1407542912,1407543039,AT @@ -37454,27 +45541,47 @@ 1407543256,1407543263,NG 1407543264,1407543279,A2 1407543280,1407543287,NG -1407543288,1407546367,A2 +1407543288,1407545855,A2 +1407545856,1407545863,CI +1407545864,1407545871,A2 +1407545872,1407545879,CD +1407545880,1407545887,A2 +1407545888,1407545895,NG +1407545896,1407545903,CD +1407545904,1407545911,A2 +1407545912,1407545927,NG +1407545928,1407545935,A2 +1407545936,1407545943,ZA +1407545944,1407545951,A2 +1407545952,1407545959,BJ +1407545960,1407545967,A2 +1407545968,1407545975,GQ +1407545976,1407545991,A2 +1407545992,1407545999,GN +1407546000,1407546007,CF +1407546008,1407546023,A2 +1407546024,1407546047,NG +1407546048,1407546055,A2 +1407546056,1407546063,NG +1407546064,1407546071,ML +1407546072,1407546367,A2 1407546368,1407546495,AE -1407546496,1407546799,A2 -1407546800,1407546815,GH -1407546816,1407546863,A2 +1407546496,1407546863,A2 1407546864,1407546879,LR -1407546880,1407547135,ZW -1407547136,1407547143,A2 +1407546880,1407547143,A2 1407547144,1407547151,GH 1407547152,1407547167,A2 1407547168,1407547175,NG 1407547176,1407547183,GH -1407547184,1407547199,NG +1407547184,1407547191,UG +1407547192,1407547199,NG 1407547200,1407547207,AO 1407547208,1407547215,TD 1407547216,1407547239,A2 1407547240,1407547255,SL 1407547256,1407547263,A2 1407547264,1407547271,SL -1407547272,1407547279,NG -1407547280,1407547303,A2 +1407547272,1407547303,A2 1407547304,1407547311,SL 1407547312,1407547327,NG 1407547328,1407547335,A2 @@ -37497,15 +45604,44 @@ 1407548128,1407548143,CM 1407548144,1407548151,A2 1407548152,1407548415,NG -1407548416,1407548543,GE +1407548416,1407548443,GE +1407548444,1407548447,NE +1407548448,1407548543,GE 1407548544,1407548711,A2 1407548712,1407548719,CD -1407548720,1407549183,A2 -1407549184,1407549439,GE +1407548720,1407548767,A2 +1407548768,1407548775,CD +1407548776,1407548927,A2 +1407548928,1407548959,NG +1407548960,1407548967,A2 +1407548968,1407548975,CM +1407548976,1407548983,A2 +1407548984,1407548991,CD +1407548992,1407549039,A2 +1407549040,1407549047,NG +1407549048,1407549055,A2 +1407549056,1407549063,NG +1407549064,1407549071,GA +1407549072,1407549079,NG +1407549080,1407549087,A2 +1407549088,1407549095,LR +1407549096,1407549119,A2 +1407549120,1407549127,LR +1407549128,1407549143,A2 +1407549144,1407549159,LR +1407549160,1407549167,A2 +1407549168,1407549183,NG +1407549184,1407549439,A2 1407549440,1407582207,RU 1407582208,1407614975,PL 1407614976,1407680511,ES -1407680512,1407681535,GB +1407680512,1407680695,FR +1407680696,1407680703,GB +1407680704,1407680831,FR +1407680832,1407681023,GB +1407681024,1407681291,ES +1407681292,1407681295,GB +1407681296,1407681535,ES 1407681536,1407681639,FR 1407681640,1407681983,GB 1407681984,1407681999,ES @@ -37515,15 +45651,21 @@ 1407682880,1407682911,FI 1407682912,1407687423,GB 1407687424,1407687679,ES -1407687680,1407695215,GB +1407687680,1407693159,GB +1407693160,1407693167,ES +1407693168,1407695215,GB 1407695216,1407695223,ES -1407695224,1407700271,GB +1407695224,1407696487,GB +1407696488,1407696495,AU +1407696496,1407700271,GB 1407700272,1407700287,DE 1407700288,1407702015,GB 1407702016,1407702271,FR 1407702272,1407702783,GB 1407702784,1407702911,FR -1407702912,1407703039,GB +1407702912,1407702927,GB +1407702928,1407702975,FR +1407702976,1407703039,GB 1407703040,1407703455,FR 1407703456,1407703535,GB 1407703536,1407703871,FR @@ -37537,17 +45679,15 @@ 1407704384,1407704447,FR 1407704448,1407705207,GB 1407705208,1407705215,ES -1407705216,1407705247,GB -1407705248,1407705279,ES -1407705280,1407705599,GB +1407705216,1407705599,GB 1407705600,1407705727,FR 1407705728,1407705759,GB 1407705760,1407705791,FR 1407705792,1407706367,GB 1407706368,1407706423,FR 1407706424,1407706431,GB -1407706432,1407706463,FR -1407706464,1407707703,GB +1407706432,1407706559,FR +1407706560,1407707703,GB 1407707704,1407707839,CH 1407707840,1407707903,GB 1407707904,1407707935,CH @@ -37564,12 +45704,24 @@ 1407712224,1407712767,GB 1407712768,1407712831,DE 1407712832,1407712887,GB -1407712888,1407713279,DE +1407712888,1407712911,DE +1407712912,1407712919,GB +1407712920,1407712959,DE +1407712960,1407712975,GB +1407712976,1407713239,DE +1407713240,1407713247,GB +1407713248,1407713279,DE 1407713280,1407778815,NL 1407778816,1407844351,SE 1407844352,1407909887,RU 1407909888,1407975423,GR -1407975424,1408040959,DE +1407975424,1408013647,DE +1408013648,1408013655,A2 +1408013656,1408015312,DE +1408015313,1408015313,A2 +1408015314,1408035046,DE +1408035047,1408035047,A2 +1408035048,1408040959,DE 1408040960,1408106495,RU 1408106496,1408172031,PL 1408172032,1408237567,RU @@ -37578,9 +45730,17 @@ 1408303104,1408335871,LV 1408335872,1408336879,SE 1408336880,1408336887,FI -1408336888,1408340047,SE +1408336888,1408337695,SE +1408337696,1408337703,DK +1408337704,1408338807,SE +1408338808,1408338815,DK +1408338816,1408338959,SE +1408338960,1408338967,NO +1408338968,1408340047,SE 1408340048,1408340055,NO -1408340056,1408360935,SE +1408340056,1408353815,SE +1408353816,1408353823,DK +1408353824,1408360935,SE 1408360936,1408360943,DK 1408360944,1408368639,SE 1408368640,1408376831,NO @@ -37635,36 +45795,35 @@ 1409548288,1409810431,FR 1409810432,1409941503,GB 1409941504,1410007039,PL -1410007040,1410007551,DE +1410007040,1410007551,A2 1410007552,1410007807,IR -1410007808,1410008575,DE +1410007808,1410008575,A2 1410008576,1410008607,AE -1410008608,1410008831,DE +1410008608,1410008831,A2 1410008832,1410008911,US -1410008912,1410009343,DE +1410008912,1410009343,A2 1410009344,1410009479,US -1410009480,1410009487,DE +1410009480,1410009487,A2 1410009488,1410009535,GI -1410009536,1410010367,DE -1410010368,1410010399,IR +1410009536,1410010399,A2 1410010400,1410010431,LY -1410010432,1410010543,DE +1410010432,1410010543,A2 1410010544,1410010575,LY -1410010576,1410010599,DE +1410010576,1410010599,A2 1410010600,1410010607,IR 1410010608,1410010623,LY -1410010624,1410010687,DE +1410010624,1410010639,DE +1410010640,1410010687,A2 1410010688,1410010703,IR -1410010704,1410010719,DE +1410010704,1410010719,A2 1410010720,1410010751,LY -1410010752,1410010823,DE +1410010752,1410010823,A2 1410010824,1410010831,IR -1410010832,1410010879,DE +1410010832,1410010879,A2 1410010880,1410011135,IR -1410011136,1410012159,DE -1410012160,1410012415,IQ -1410012416,1410012447,AF -1410012448,1410013183,DE +1410011136,1410011647,DE +1410011648,1410012671,A2 +1410012672,1410013183,DE 1410013184,1410013439,ES 1410013440,1410013471,IR 1410013472,1410013535,AE @@ -37675,35 +45834,35 @@ 1410013696,1410013727,KW 1410013728,1410013759,AE 1410013760,1410013791,IR -1410013792,1410013823,DE +1410013792,1410013823,A2 1410013824,1410013887,AF -1410013888,1410013919,DE +1410013888,1410013919,A2 1410013920,1410013951,KW 1410013952,1410013983,AE 1410013984,1410014015,IR 1410014016,1410014047,KW 1410014048,1410014079,AE -1410014080,1410014207,DE +1410014080,1410014207,A2 1410014208,1410014239,AE 1410014240,1410014335,IR 1410014336,1410014399,AE 1410014400,1410014463,ES 1410014464,1410014495,KW 1410014496,1410014591,IR -1410014592,1410014885,DE +1410014592,1410014885,A2 1410014886,1410014886,ES -1410014887,1410014895,DE +1410014887,1410014895,A2 1410014896,1410014927,IR 1410014928,1410014935,PA 1410014936,1410014943,IR 1410014944,1410014951,AE -1410014952,1410014966,DE +1410014952,1410014966,A2 1410014967,1410014967,IR -1410014968,1410014968,DE +1410014968,1410014968,A2 1410014969,1410014969,IR -1410014970,1410014972,DE +1410014970,1410014972,A2 1410014973,1410014974,AE -1410014975,1410015007,DE +1410014975,1410015007,A2 1410015008,1410015103,IR 1410015104,1410015135,ES 1410015136,1410015263,IR @@ -37719,137 +45878,130 @@ 1410016384,1410016415,IR 1410016416,1410016447,PA 1410016448,1410016543,IR -1410016544,1410016575,DE +1410016544,1410016575,A2 1410016576,1410016607,AE 1410016608,1410016639,PA 1410016640,1410016671,IR 1410016672,1410016703,PA -1410016704,1410016767,DE +1410016704,1410016767,A2 1410016768,1410016831,IR 1410016832,1410016863,AE 1410016864,1410016895,IR 1410016896,1410017023,AE 1410017024,1410017055,PA 1410017056,1410017119,IR -1410017120,1410017279,DE +1410017120,1410017279,A2 1410017280,1410017407,IR -1410017408,1410017791,DE +1410017408,1410017791,A2 1410017792,1410018047,IR -1410018048,1410018303,DE +1410018048,1410018303,A2 1410018304,1410018559,AE -1410018560,1410018591,DE +1410018560,1410018591,A2 1410018592,1410018607,IR 1410018608,1410018623,LY -1410018624,1410020103,DE +1410018624,1410020103,A2 1410020104,1410020111,US -1410020112,1410020351,DE -1410020352,1410020863,US -1410020864,1410021375,DE +1410020112,1410021375,A2 1410021376,1410021407,IR -1410021408,1410021631,DE +1410021408,1410021631,A2 1410021632,1410021663,IR -1410021664,1410021791,DE +1410021664,1410021791,A2 1410021792,1410021823,IR -1410021824,1410022527,DE +1410021824,1410022527,A2 1410022528,1410022591,AE 1410022592,1410022655,IR -1410022656,1410022911,DE +1410022656,1410022911,A2 1410022912,1410023423,IR -1410023424,1410024287,DE +1410023424,1410024287,A2 1410024288,1410024319,IR -1410024320,1410024447,DE +1410024320,1410024447,A2 1410024448,1410025087,IR -1410025088,1410025215,DE +1410025088,1410025215,A2 1410025216,1410025247,ES -1410025248,1410025279,DE +1410025248,1410025279,A2 1410025280,1410025311,AE 1410025312,1410025343,ES 1410025344,1410025407,IR 1410025408,1410025439,AE -1410025440,1410025503,DE +1410025440,1410025503,A2 1410025504,1410025519,AE 1410025520,1410025535,IR 1410025536,1410025567,ES -1410025568,1410025599,DE +1410025568,1410025599,A2 1410025600,1410025727,IR 1410025728,1410025759,AE -1410025760,1410025791,DE +1410025760,1410025791,A2 1410025792,1410025823,AE 1410025824,1410025855,IR -1410025856,1410025983,DE +1410025856,1410025983,A2 1410025984,1410026015,IR 1410026016,1410026047,AE 1410026048,1410026111,ES -1410026112,1410026143,DE +1410026112,1410026143,A2 1410026144,1410026175,IR 1410026176,1410026207,AE 1410026208,1410026239,IR 1410026240,1410026367,AE 1410026368,1410026431,IR -1410026432,1410026463,DE +1410026432,1410026463,A2 1410026464,1410026751,IR 1410026752,1410026815,CA -1410026816,1410026847,DE +1410026816,1410026847,A2 1410026848,1410026911,IR -1410026912,1410026943,DE +1410026912,1410026943,A2 1410026944,1410027006,IR -1410027007,1410027007,DE +1410027007,1410027007,A2 1410027008,1410027263,KW 1410027264,1410027519,AF -1410027520,1410027711,DE +1410027520,1410027711,A2 1410027712,1410027775,IR -1410027776,1410028799,DE +1410027776,1410028799,A2 1410028800,1410028831,IR -1410028832,1410035327,DE +1410028832,1410035327,A2 1410035328,1410035343,IR -1410035344,1410035983,DE +1410035344,1410035983,A2 1410035984,1410035999,PA -1410036000,1410036031,DE +1410036000,1410036031,A2 1410036032,1410036063,PA -1410036064,1410036111,DE +1410036064,1410036111,A2 1410036112,1410036127,PA -1410036128,1410036191,DE +1410036128,1410036191,A2 1410036192,1410036207,PA -1410036208,1410036735,DE +1410036208,1410036735,A2 1410036736,1410036751,PA -1410036752,1410036991,DE +1410036752,1410036991,A2 1410036992,1410037247,LB -1410037248,1410037759,DE +1410037248,1410037759,A2 1410037760,1410038015,US -1410038016,1410039807,DE -1410039808,1410041855,AE -1410041856,1410042815,DE +1410038016,1410042815,A2 1410042816,1410042831,US -1410042832,1410043903,DE -1410043904,1410044415,JO -1410044416,1410044927,DE -1410044928,1410045183,VG -1410045184,1410045439,DE +1410042832,1410045183,A2 +1410045184,1410045439,IQ 1410045440,1410045695,LB -1410045696,1410072319,DE +1410045696,1410071815,A2 +1410071816,1410071839,DE +1410071840,1410072319,A2 1410072320,1410072575,AE 1410072576,1410203647,GB 1410203648,1410204439,FR 1410204440,1410204455,IT 1410204456,1410204479,FR 1410204480,1410204495,PT -1410204496,1410206543,FR -1410206544,1410206551,ES -1410206552,1410212863,FR +1410204496,1410212863,FR 1410212864,1410213119,GB -1410213120,1410221663,FR -1410221664,1410221671,GB -1410221672,1410234839,FR +1410213120,1410234839,FR 1410234840,1410234847,A2 -1410234848,1410250551,FR -1410250552,1410250559,GB -1410250560,1410261007,FR +1410234848,1410258527,FR +1410258528,1410258535,ES +1410258536,1410261007,FR 1410261008,1410261015,GB 1410261016,1410261663,FR 1410261664,1410261671,GB 1410261672,1410262023,FR 1410262024,1410262031,BE -1410262032,1410262799,FR +1410262032,1410262391,FR +1410262392,1410262399,GB +1410262400,1410262799,FR 1410262800,1410262815,DE 1410262816,1410266303,FR 1410266304,1410266311,IE @@ -37858,7 +46010,9 @@ 1410267056,1410267071,GB 1410267072,1410267087,IT 1410267088,1410269183,FR -1410269184,1410318335,LT +1410269184,1410278399,LT +1410278400,1410278655,LV +1410278656,1410318335,LT 1410318336,1410319359,LV 1410319360,1410334719,LT 1410334720,1410341887,ES @@ -37902,12 +46056,9 @@ 1410514944,1410523135,GB 1410523136,1410531327,PT 1410531328,1410539519,DE -1410539520,1410542591,GB -1410542592,1410543103,IE -1410543104,1410544415,GB +1410539520,1410544415,GB 1410544416,1410544431,DE -1410544432,1410544447,FR -1410544448,1410547711,GB +1410544432,1410547711,GB 1410547712,1410555903,CZ 1410555904,1410564095,GB 1410564096,1410572287,SE @@ -37918,11 +46069,13 @@ 1410573440,1410573695,DE 1410573696,1410573711,RU 1410573712,1410573759,DE -1410573760,1410573775,BA +1410573760,1410573775,RU 1410573776,1410573799,DE 1410573800,1410573815,IT 1410573816,1410573823,RU -1410573824,1410574527,DE +1410573824,1410574511,DE +1410574512,1410574519,CH +1410574520,1410574527,DE 1410574528,1410574543,IT 1410574544,1410574559,DE 1410574560,1410574575,RU @@ -37930,7 +46083,11 @@ 1410574584,1410574591,RU 1410574592,1410574719,DE 1410574720,1410574727,RU -1410574728,1410575103,DE +1410574728,1410574847,DE +1410574848,1410574975,BR +1410574976,1410575071,DE +1410575072,1410575087,IT +1410575088,1410575103,RU 1410575104,1410575111,US 1410575112,1410575119,IT 1410575120,1410575135,DE @@ -37951,10 +46108,10 @@ 1410575840,1410575855,IT 1410575856,1410575871,DE 1410575872,1410575999,DK -1410576000,1410576063,DE -1410576064,1410576127,IT -1410576128,1410576255,DE -1410576256,1410576383,IT +1410576000,1410576255,DE +1410576256,1410576319,IT +1410576320,1410576351,DE +1410576352,1410576383,IT 1410576384,1410588671,DE 1410588672,1410596863,GB 1410596864,1410605055,ES @@ -37976,7 +46133,186 @@ 1410711552,1410719743,BG 1410719744,1410727935,RU 1410727936,1410736127,BG -1410736128,1410744319,RS +1410736128,1410736128,RS +1410736129,1410736382,AL +1410736383,1410736384,RS +1410736385,1410736638,AL +1410736639,1410736640,RS +1410736641,1410736894,AL +1410736895,1410736896,RS +1410736897,1410736911,AL +1410736912,1410736928,RS +1410736929,1410736991,AL +1410736992,1410737415,RS +1410737416,1410737423,AL +1410737424,1410737431,RS +1410737432,1410737439,AL +1410737440,1410737664,RS +1410737665,1410737918,AL +1410737919,1410737920,RS +1410737921,1410738174,AL +1410738175,1410738175,RS +1410738176,1410738215,AL +1410738216,1410738223,RS +1410738224,1410738247,AL +1410738248,1410738263,RS +1410738264,1410738271,AL +1410738272,1410738279,RS +1410738280,1410738295,AL +1410738296,1410738304,RS +1410738305,1410738310,AL +1410738311,1410738320,RS +1410738321,1410738326,AL +1410738327,1410738328,RS +1410738329,1410738334,AL +1410738335,1410738351,RS +1410738352,1410738359,AL +1410738360,1410738384,RS +1410738385,1410738390,AL +1410738391,1410738439,RS +1410738440,1410738447,AL +1410738448,1410738703,RS +1410738704,1410738718,AL +1410738719,1410738720,RS +1410738721,1410738734,AL +1410738735,1410738752,RS +1410738753,1410738766,AL +1410738767,1410738768,RS +1410738769,1410738782,AL +1410738783,1410738800,RS +1410738801,1410738814,AL +1410738815,1410738816,RS +1410738817,1410738830,AL +1410738831,1410738832,RS +1410738833,1410738846,AL +1410738847,1410738864,RS +1410738865,1410738878,AL +1410738879,1410738896,RS +1410738897,1410738902,AL +1410738903,1410738912,RS +1410738913,1410738927,AL +1410738928,1410739200,RS +1410739201,1410739326,AL +1410739327,1410739328,RS +1410739329,1410739390,AL +1410739391,1410739472,RS +1410739473,1410739486,AL +1410739487,1410739520,RS +1410739521,1410739534,AL +1410739535,1410739543,RS +1410739544,1410739550,AL +1410739551,1410739568,RS +1410739569,1410739582,AL +1410739583,1410739616,RS +1410739617,1410739630,AL +1410739631,1410739696,RS +1410739697,1410739710,AL +1410739711,1410739712,RS +1410739713,1410739719,AL +1410739720,1410739720,RS +1410739721,1410739727,AL +1410739728,1410739728,RS +1410739729,1410739734,AL +1410739735,1410739736,RS +1410739737,1410739742,AL +1410739743,1410739744,RS +1410739745,1410739750,AL +1410739751,1410739752,RS +1410739753,1410739759,AL +1410739760,1410739776,RS +1410739777,1410739783,AL +1410739784,1410739791,RS +1410739792,1410739799,AL +1410739800,1410739807,RS +1410739808,1410739879,AL +1410739880,1410739887,RS +1410739888,1410739919,AL +1410739920,1410739927,RS +1410739928,1410739951,AL +1410739952,1410739967,RS +1410739968,1410739995,AL +1410739996,1410739999,RS +1410740000,1410740003,AL +1410740004,1410740007,RS +1410740008,1410740043,AL +1410740044,1410740047,RS +1410740048,1410740075,AL +1410740076,1410740079,RS +1410740080,1410740122,AL +1410740123,1410740123,RS +1410740124,1410740135,AL +1410740136,1410740139,RS +1410740140,1410740171,AL +1410740172,1410740175,RS +1410740176,1410740238,AL +1410740239,1410740239,RS +1410740240,1410740335,AL +1410740336,1410740343,RS +1410740344,1410740415,AL +1410740416,1410740423,RS +1410740424,1410740471,AL +1410740472,1410740479,RS +1410740480,1410740507,AL +1410740508,1410740511,RS +1410740512,1410740515,AL +1410740516,1410740519,RS +1410740520,1410740643,AL +1410740644,1410740647,RS +1410740648,1410740675,AL +1410740676,1410740679,RS +1410740680,1410740734,AL +1410740735,1410740735,RS +1410740736,1410740759,AL +1410740760,1410740767,RS +1410740768,1410740871,AL +1410740872,1410740879,RS +1410740880,1410740911,AL +1410740912,1410740919,RS +1410740920,1410740931,AL +1410740932,1410740991,RS +1410740992,1410741303,AL +1410741304,1410741304,RS +1410741305,1410741311,AL +1410741312,1410741327,RS +1410741328,1410741343,AL +1410741344,1410741351,RS +1410741352,1410741387,AL +1410741388,1410741391,RS +1410741392,1410741419,AL +1410741420,1410741423,RS +1410741424,1410741427,AL +1410741428,1410741431,RS +1410741432,1410741463,AL +1410741464,1410741471,RS +1410741472,1410741479,AL +1410741480,1410741483,RS +1410741484,1410742279,AL +1410742280,1410742319,RS +1410742320,1410742351,AL +1410742352,1410742359,RS +1410742360,1410742415,AL +1410742416,1410742527,RS +1410742528,1410742907,AL +1410742908,1410742911,RS +1410742912,1410742923,AL +1410742924,1410742927,RS +1410742928,1410742931,AL +1410742932,1410742939,RS +1410742940,1410742943,AL +1410742944,1410742947,RS +1410742948,1410742952,AL +1410742953,1410742955,RS +1410742956,1410742959,AL +1410742960,1410742971,RS +1410742972,1410742975,AL +1410742976,1410742983,RS +1410742984,1410742987,AL +1410742988,1410742991,RS +1410742992,1410742996,AL +1410742997,1410743039,RS +1410743040,1410743935,AL +1410743936,1410743999,RS +1410744000,1410744319,AL 1410744320,1410744575,FR 1410744576,1410744831,A2 1410744832,1410745223,FR @@ -37990,15 +46326,19 @@ 1410748416,1410752511,DE 1410752512,1410752703,AQ 1410752704,1410752763,DE -1410752764,1410752785,AQ -1410752786,1410752799,DE +1410752764,1410752791,AQ +1410752792,1410752799,DE 1410752800,1410752827,AQ -1410752828,1410753023,DE +1410752828,1410752831,DE +1410752832,1410752835,AQ +1410752836,1410753023,DE 1410753024,1410753031,AQ -1410753032,1410753055,BS +1410753032,1410753047,DE +1410753048,1410753055,BS 1410753056,1410753143,AQ 1410753144,1410753151,SC -1410753152,1410753159,DE +1410753152,1410753155,AQ +1410753156,1410753159,DE 1410753160,1410753167,AQ 1410753168,1410753303,DE 1410753304,1410753327,AQ @@ -38008,30 +46348,32 @@ 1410753352,1410753367,AQ 1410753368,1410753391,DE 1410753392,1410753399,NL -1410753400,1410754831,AQ -1410754832,1410754855,DE +1410753400,1410754559,AQ +1410754560,1410754591,US +1410754592,1410754623,AQ +1410754624,1410754631,CN +1410754632,1410754831,AQ +1410754832,1410754835,DE +1410754836,1410754839,AQ +1410754840,1410754855,DE 1410754856,1410754859,AQ 1410754860,1410754867,DE 1410754868,1410754871,AQ -1410754872,1410755063,DE -1410755064,1410755067,AQ +1410754872,1410755059,DE +1410755060,1410755067,AQ 1410755068,1410755071,DE 1410755072,1410755327,AQ -1410755328,1410756607,DE -1410756608,1410756735,AQ -1410756736,1410756863,DE -1410756864,1410757119,AQ -1410757120,1410758655,DE -1410758656,1410760191,AQ -1410760192,1410760455,DE -1410760456,1410760471,AQ -1410760472,1410760479,SC -1410760480,1410760487,DE +1410755328,1410755583,DE +1410755584,1410759679,AQ +1410759680,1410760191,US +1410760192,1410760447,DE +1410760448,1410760455,CN +1410760456,1410760463,BS +1410760464,1410760471,AQ +1410760472,1410760487,DE 1410760488,1410760503,AQ -1410760504,1410760683,DE -1410760684,1410760687,AQ -1410760688,1410760699,DE -1410760700,1410760703,AQ +1410760504,1410760575,DE +1410760576,1410760703,AQ 1410760704,1410768895,RU 1410768896,1410777087,GB 1410777088,1410785279,RU @@ -38143,27 +46485,35 @@ 1411919872,1411923967,DE 1411923968,1411940351,BG 1411940352,1411973119,PL -1411973120,1411999743,SI -1411999744,1411999759,BA -1411999760,1411999767,SI -1411999768,1411999783,BA -1411999784,1411999791,SI -1411999792,1411999799,BA -1411999800,1411999807,SI +1411973120,1411999751,SI +1411999752,1411999791,BA +1411999792,1411999807,SI 1411999808,1411999847,BA 1411999848,1411999871,SI -1411999872,1412000767,BA +1411999872,1411999895,BA +1411999896,1411999903,SI +1411999904,1411999911,BA +1411999912,1411999919,SI +1411999920,1411999927,BA +1411999928,1411999935,SI +1411999936,1411999943,BA +1411999944,1411999951,SI +1411999952,1411999959,BA +1411999960,1411999967,SI +1411999968,1412000767,BA 1412000768,1412000783,SI 1412000784,1412000791,BA 1412000792,1412000863,SI 1412000864,1412000879,BA -1412000880,1412000903,SI -1412000904,1412000911,BA +1412000880,1412000895,SI +1412000896,1412000911,BA 1412000912,1412000943,SI -1412000944,1412000951,BA -1412000952,1412000959,SI -1412000960,1412000991,BA -1412000992,1412001311,SI +1412000944,1412000959,BA +1412000960,1412000967,SI +1412000968,1412000999,BA +1412001000,1412001007,SI +1412001008,1412001015,BA +1412001016,1412001311,SI 1412001312,1412001319,DE 1412001320,1412001807,SI 1412001808,1412001855,RO @@ -38174,16 +46524,18 @@ 1412002784,1412002815,SI 1412002816,1412002847,BA 1412002848,1412002863,SI -1412002864,1412002911,BA +1412002864,1412002895,BA +1412002896,1412002903,SI +1412002904,1412002911,BA 1412002912,1412002919,SI -1412002920,1412003007,BA -1412003008,1412003023,SI +1412002920,1412003015,BA +1412003016,1412003023,SI 1412003024,1412003039,BA 1412003040,1412003055,SI 1412003056,1412003119,BA 1412003120,1412003135,SI -1412003136,1412003143,BA -1412003144,1412003199,SI +1412003136,1412003151,BA +1412003152,1412003199,SI 1412003200,1412003215,BA 1412003216,1412003223,SI 1412003224,1412003231,BA @@ -38192,13 +46544,13 @@ 1412003264,1412003271,SI 1412003272,1412003303,BA 1412003304,1412003327,SI -1412003328,1412003343,BA -1412003344,1412003359,SI -1412003360,1412003375,BA -1412003376,1412003391,SI -1412003392,1412003407,BA -1412003408,1412003423,SI -1412003424,1412003527,BA +1412003328,1412003335,BA +1412003336,1412003343,SI +1412003344,1412003351,BA +1412003352,1412003375,SI +1412003376,1412003383,BA +1412003384,1412003391,SI +1412003392,1412003527,BA 1412003528,1412003535,SI 1412003536,1412003551,BA 1412003552,1412003583,SI @@ -38206,8 +46558,8 @@ 1412003600,1412003623,SI 1412003624,1412003631,BA 1412003632,1412003639,SI -1412003640,1412003839,BA -1412003840,1412003855,SI +1412003640,1412003647,BA +1412003648,1412003855,SI 1412003856,1412003903,BG 1412003904,1412003935,SI 1412003936,1412004351,BG @@ -38247,9 +46599,9 @@ 1412677632,1412685823,RU 1412685824,1412686239,IE 1412686240,1412686335,BB -1412686336,1412686591,IE -1412686592,1412686847,GB -1412686848,1412690191,IE +1412686336,1412689315,IE +1412689316,1412689343,GB +1412689344,1412690191,IE 1412690192,1412690199,GB 1412690200,1412694015,IE 1412694016,1412710399,EE @@ -38294,23 +46646,41 @@ 1421869056,1422393343,BE 1422393344,1422393599,DE 1422393600,1422393855,IT -1422393856,1422399103,DE +1422393856,1422398719,DE +1422398720,1422398783,IT +1422398784,1422399103,DE 1422399104,1422399135,IT -1422399136,1422399999,DE +1422399136,1422399231,DE +1422399232,1422399487,US +1422399488,1422399999,DE 1422400000,1422400255,IT 1422400256,1422400511,DE 1422400512,1422400767,BR -1422400768,1422406399,DE +1422400768,1422403839,DE +1422403840,1422403903,IT +1422403904,1422403935,SE +1422403936,1422406399,DE 1422406400,1422406463,GB -1422406464,1422452495,DE -1422452496,1422452503,CA -1422452504,1422462207,DE -1422462208,1422462463,TR -1422462464,1422468671,DE +1422406464,1422410367,DE +1422410368,1422410495,IT +1422410496,1422445055,DE +1422445056,1422446079,IT +1422446080,1422451551,DE +1422451552,1422451583,SE +1422451584,1422452271,DE +1422452272,1422452275,RU +1422452276,1422468207,DE +1422468208,1422468223,IT +1422468224,1422468671,DE 1422468672,1422468735,IT -1422468736,1422479615,DE +1422468736,1422469839,DE +1422469840,1422469847,RO +1422469848,1422476863,DE +1422476864,1422476895,GB +1422476896,1422479615,DE 1422479616,1422479871,BE 1422479872,1422491647,DE +1422491648,1422508031,RU 1422508032,1422512127,BG 1422512128,1422516223,PL 1422516224,1422520319,BY @@ -38326,15 +46696,12 @@ 1422761984,1422770175,PL 1422770176,1422786559,GR 1422786560,1422852095,HU -1422852096,1422853119,FR -1422853120,1422853631,EU -1422853632,1422853919,FR -1422853920,1422854143,EU -1422854144,1422854151,FR -1422854152,1422856383,EU +1422852096,1422856383,EU 1422856384,1422856447,FR 1422856448,1422856703,EU -1422856704,1422857151,FR +1422856704,1422856959,FR +1422856960,1422857087,EU +1422857088,1422857151,FR 1422857152,1422857183,EU 1422857184,1422857855,FR 1422857856,1422857919,EU @@ -38343,7 +46710,9 @@ 1422858240,1422858623,FR 1422858624,1422909439,EU 1422909440,1422909695,NL -1422909696,1422917375,EU +1422909696,1422911231,EU +1422911232,1422911487,NL +1422911488,1422917375,EU 1422917376,1422917631,GB 1422917632,1423441919,NO 1423441920,1423704063,SE @@ -38357,7 +46726,10 @@ 1424556032,1424588799,EG 1424588800,1424588839,DE 1424588840,1424588847,GB -1424588848,1424588959,DE +1424588848,1424588863,DE +1424588864,1424588927,US +1424588928,1424588951,DE +1424588952,1424588959,GB 1424588960,1424588963,IT 1424588964,1424589311,DE 1424589312,1424589567,FR @@ -38374,9 +46746,7 @@ 1424591464,1424591471,GB 1424591472,1424591551,SE 1424591552,1424591615,CZ -1424591616,1424591839,GB -1424591840,1424591871,ZA -1424591872,1424592639,GB +1424591616,1424592639,GB 1424592640,1424593151,FR 1424593152,1424593407,NL 1424593408,1424593663,DE @@ -38392,19 +46762,17 @@ 1424594112,1424594175,FR 1424594176,1424594431,GB 1424594432,1424594519,IE -1424594520,1424595455,GB +1424594520,1424594527,GB +1424594528,1424594535,IE +1424594536,1424595455,GB 1424595456,1424595527,IT 1424595528,1424595535,GB 1424595536,1424595575,IT -1424595576,1424595583,ES +1424595576,1424595583,GB 1424595584,1424595819,IT 1424595820,1424595823,GB -1424595824,1424595831,IT -1424595832,1424595839,GB -1424595840,1424596479,IT -1424596480,1424596563,FR -1424596564,1424596567,GB -1424596568,1424596991,FR +1424595824,1424596479,IT +1424596480,1424596991,FR 1424596992,1424597255,CZ 1424597256,1424597263,GB 1424597264,1424597311,CZ @@ -38412,22 +46780,24 @@ 1424597344,1424597351,CH 1424597352,1424597375,GB 1424597376,1424597391,CZ -1424597392,1424597503,GB +1424597392,1424597407,GB +1424597408,1424597431,CZ +1424597432,1424597503,GB 1424597504,1424597759,FR 1424597760,1424598015,IT 1424598016,1424599039,GB 1424599040,1424599279,DK 1424599280,1424599295,GB 1424599296,1424599551,DK -1424599552,1424599839,HU -1424599840,1424599847,GB -1424599848,1424599855,HU +1424599552,1424599855,HU 1424599856,1424599871,GB 1424599872,1424599875,HU 1424599876,1424599879,GB 1424599880,1424599887,HU 1424599888,1424599903,GB -1424599904,1424599951,HU +1424599904,1424599935,HU +1424599936,1424599943,GB +1424599944,1424599951,HU 1424599952,1424599999,GB 1424600000,1424600031,HU 1424600032,1424600063,GB @@ -38436,31 +46806,35 @@ 1424600576,1424600831,FR 1424600832,1424601087,BE 1424601088,1424601343,GB -1424601344,1424601599,ES +1424601344,1424601351,ES +1424601352,1424601599,GB 1424601600,1424601855,CH 1424601856,1424602111,GB 1424602112,1424602623,DE -1424602624,1424602879,GB +1424602624,1424602735,GB +1424602736,1424602743,IT +1424602744,1424602879,GB 1424602880,1424602911,US 1424602912,1424602927,FR -1424602928,1424603007,US +1424602928,1424602935,GB +1424602936,1424603007,US 1424603008,1424603023,GB -1424603024,1424603055,US -1424603056,1424603063,NL -1424603064,1424603087,US +1424603024,1424603087,US 1424603088,1424603095,GB 1424603096,1424603135,US 1424603136,1424603391,SK 1424603392,1424603647,DE 1424603648,1424603903,GB -1424603904,1424604067,ES -1424604068,1424604071,GB -1424604072,1424604159,ES +1424603904,1424604039,ES +1424604040,1424604047,GB +1424604048,1424604159,ES 1424604160,1424604543,NL 1424604544,1424604671,GB 1424604672,1424604799,NL 1424604800,1424604927,GB -1424604928,1424605119,NL +1424604928,1424604959,NL +1424604960,1424604967,GB +1424604968,1424605119,NL 1424605120,1424605135,GB 1424605136,1424605183,NL 1424605184,1424605439,GB @@ -38473,15 +46847,12 @@ 1424605632,1424605695,BG 1424605696,1424605951,NL 1424605952,1424605959,CH -1424605960,1424606023,AT -1424606024,1424606199,GB -1424606200,1424606207,AT -1424606208,1424606455,GB -1424606456,1424606463,AT -1424606464,1424606711,GB -1424606712,1424606719,AT -1424606720,1424606967,GB -1424606968,1424606975,AT +1424605960,1424605967,AT +1424605968,1424605983,GB +1424605984,1424606023,AT +1424606024,1424606207,GB +1424606208,1424606719,IT +1424606720,1424606975,NL 1424606976,1424607167,GB 1424607168,1424607199,SK 1424607200,1424607215,GB @@ -38493,25 +46864,35 @@ 1424608084,1424608087,GB 1424608088,1424608127,FR 1424608128,1424608279,GB -1424608280,1424608383,FR +1424608280,1424608319,FR +1424608320,1424608327,GB +1424608328,1424608383,FR 1424608384,1424608399,ES 1424608400,1424608511,FR -1424608512,1424608687,ES -1424608688,1424608695,GB -1424608696,1424609023,ES -1424609024,1424609259,DE -1424609260,1424609271,GB +1424608512,1424608559,ES +1424608560,1424608567,GB +1424608568,1424608687,ES +1424608688,1424608691,GB +1424608692,1424609023,ES +1424609024,1424609255,DE +1424609256,1424609271,GB 1424609272,1424609279,DE 1424609280,1424609395,CH 1424609396,1424609399,GB -1424609400,1424609791,CH +1424609400,1424609535,CH +1424609536,1424609543,GB +1424609544,1424609743,CH +1424609744,1424609759,GB +1424609760,1424609791,CH 1424609792,1424610303,GB 1424610304,1424610559,TZ 1424610560,1424610815,PL 1424610816,1424611071,FR 1424611072,1424611135,BE 1424611136,1424611151,GB -1424611152,1424611327,BE +1424611152,1424611271,BE +1424611272,1424611279,LU +1424611280,1424611327,BE 1424611328,1424611583,PL 1424611584,1424612095,GB 1424612096,1424612231,CZ @@ -38523,14 +46904,16 @@ 1424612864,1424613119,FR 1424613120,1424613375,GB 1424613376,1424613631,ES -1424613632,1424614127,IT +1424613632,1424614087,IT +1424614088,1424614095,GB +1424614096,1424614127,IT 1424614128,1424614135,GB 1424614136,1424614143,IT 1424614144,1424614399,GB 1424614400,1424614415,FR -1424614416,1424614559,IT -1424614560,1424614591,GB -1424614592,1424614655,IT +1424614416,1424614503,IT +1424614504,1424614511,GB +1424614512,1424614655,IT 1424614656,1424614911,FR 1424614912,1424615167,RO 1424615168,1424615679,GB @@ -38539,10 +46922,12 @@ 1424615808,1424615935,IT 1424615936,1424616191,FR 1424616192,1424616447,IT -1424616448,1424616483,ES +1424616448,1424616479,GB +1424616480,1424616483,ES 1424616484,1424616487,GB -1424616488,1424616607,ES -1424616608,1424616615,PT +1424616488,1424616503,ES +1424616504,1424616511,GB +1424616512,1424616615,ES 1424616616,1424616623,GB 1424616624,1424616655,ES 1424616656,1424616659,GB @@ -38550,33 +46935,36 @@ 1424616696,1424616703,GB 1424616704,1424616959,US 1424616960,1424617215,FR -1424617216,1424617351,IT +1424617216,1424617231,IT +1424617232,1424617247,GB +1424617248,1424617351,IT 1424617352,1424617391,GB 1424617392,1424617395,IT 1424617396,1424617399,GB 1424617400,1424617407,IT 1424617408,1424617423,ES -1424617424,1424617431,GB -1424617432,1424617439,ES -1424617440,1424617463,IT +1424617424,1424617439,GB +1424617440,1424617447,IT +1424617448,1424617455,GB +1424617456,1424617463,IT 1424617464,1424617471,GB 1424617472,1424617727,US -1424617728,1424617983,IT -1424617984,1424618015,GB -1424618016,1424618239,IT +1424617728,1424618031,IT +1424618032,1424618047,GB +1424618048,1424618191,IT +1424618192,1424618207,GB +1424618208,1424618239,IT 1424618240,1424618495,NL 1424618496,1424618751,GB -1424618752,1424619007,FR +1424618752,1424618927,FR +1424618928,1424618943,IT +1424618944,1424619007,FR 1424619008,1424619775,IT 1424619776,1424619807,BE -1424619808,1424619815,GB -1424619816,1424619823,BE -1424619824,1424619839,GB +1424619808,1424619839,GB 1424619840,1424619915,BE 1424619916,1424619919,GB -1424619920,1424619951,BE -1424619952,1424619967,GB -1424619968,1424620031,BE +1424619920,1424620031,BE 1424620032,1424621055,GB 1424621056,1424621567,IT 1424621568,1424625663,PL @@ -38649,6 +47037,7 @@ 1424850944,1424883711,LV 1424883712,1424916479,DK 1424916480,1424949247,BG +1424949248,1424982015,RO 1424982016,1425014783,FI 1425014784,1425031167,LT 1425031168,1425047551,FI @@ -38671,16 +47060,15 @@ 1425326080,1425342463,SE 1425342464,1425358847,NL 1425358848,1425375231,SK -1425375232,1425391615,DE +1425375232,1425377339,DE +1425377340,1425377340,A2 +1425377341,1425391615,DE 1425391616,1425407999,LV 1425408000,1425424383,NL -1425424384,1425424543,A2 -1425424544,1425424639,DE -1425424640,1425424895,IR +1425424384,1425424463,A2 +1425424464,1425424895,DE 1425424896,1425425151,NE -1425425152,1425425663,DE -1425425664,1425425919,NE -1425425920,1425426303,DE +1425425152,1425426303,DE 1425426304,1425426319,IR 1425426320,1425426343,DE 1425426344,1425426352,IR @@ -38711,9 +47099,7 @@ 1425448960,1425451007,CZ 1425451008,1425457855,GB 1425457856,1425457919,US -1425457920,1425458271,GB -1425458272,1425458303,US -1425458304,1425459199,GB +1425457920,1425459199,GB 1425459200,1425460735,IM 1425460736,1425460767,GB 1425460768,1425460863,IM @@ -38726,15 +47112,28 @@ 1425467136,1425467391,ES 1425467392,1425469439,CH 1425469440,1425471487,DK -1425471488,1425473535,DE -1425473536,1425474047,GB -1425474048,1425474559,RO -1425474560,1425475583,GB -1425475584,1425478143,RO -1425478144,1425478655,GB -1425478656,1425484799,RO -1425484800,1425485311,GB -1425485312,1425506303,RO +1425471488,1425471791,DE +1425471792,1425471799,CH +1425471800,1425471815,DE +1425471816,1425471823,CH +1425471824,1425471831,GB +1425471832,1425471863,DE +1425471864,1425471871,GB +1425471872,1425471887,IT +1425471888,1425471895,GB +1425471896,1425471919,DE +1425471920,1425471943,GB +1425471944,1425471967,DE +1425471968,1425471975,CH +1425471976,1425472007,DE +1425472008,1425472011,GB +1425472012,1425472015,ES +1425472016,1425472035,DE +1425472036,1425472039,GB +1425472040,1425473535,DE +1425473536,1425485311,RO +1425485312,1425485823,AE +1425485824,1425506303,RO 1425506304,1425522687,NO 1425522688,1425539071,IT 1425539072,1425801215,FI @@ -38747,7 +47146,9 @@ 1425899520,1425915903,IT 1425915904,1425932287,FI 1425932288,1425948671,GR -1425948672,1425965055,DE +1425948672,1425949183,DE +1425949184,1425949191,NL +1425949192,1425965055,DE 1425965056,1425965100,ES 1425965101,1425965112,FR 1425965113,1425965116,ZA @@ -38999,45 +47400,36 @@ 1426731008,1426735103,HR 1426735104,1426751487,BE 1426751488,1426767871,FR -1426767872,1426784255,DE +1426767872,1426778991,DE +1426778992,1426778999,IT +1426779000,1426781655,DE +1426781656,1426781663,IT +1426781664,1426784255,DE 1426784256,1426800639,SE 1426800640,1426817023,PL 1426817024,1426833407,BG 1426833408,1426849791,SE -1426849792,1426850303,NL -1426850304,1426850335,SE -1426850336,1426850367,GB -1426850368,1426850463,NL -1426850464,1426850495,GB -1426850496,1426851519,NL +1426849792,1426851519,NL 1426851520,1426851583,PA -1426851584,1426851839,NL -1426851840,1426852095,SE -1426852096,1426852352,NL +1426851584,1426852352,NL 1426852353,1426852359,RU 1426852360,1426852367,SE 1426852368,1426852375,NL 1426852376,1426852383,US -1426852384,1426852543,GB -1426852544,1426856447,NL -1426856448,1426856703,ES -1426856704,1426857472,NL +1426852384,1426857472,NL 1426857473,1426857500,ES -1426857501,1426859263,NL -1426859264,1426859519,RU -1426859520,1426864511,NL +1426857501,1426864511,NL 1426864512,1426864639,PA -1426864640,1426864895,FR -1426864896,1426865663,NL -1426865664,1426865919,BE -1426865920,1426866175,ES +1426864640,1426866175,NL 1426866176,1426882559,GB 1426882560,1426898943,FR 1426898944,1426915327,RU 1426915328,1426931711,AT 1426931712,1426948095,CZ 1426948096,1426964479,DE -1426964480,1426967455,GB +1426964480,1426967287,GB +1426967288,1426967295,ES +1426967296,1426967455,GB 1426967456,1426967463,ES 1426967464,1426967567,GB 1426967568,1426967575,ES @@ -39047,11 +47439,13 @@ 1426968344,1426968351,ES 1426968352,1426968591,GB 1426968592,1426968600,ES -1426968601,1426968791,GB -1426968792,1426968800,ES +1426968601,1426968799,GB +1426968800,1426968800,ES 1426968801,1426969135,GB 1426969136,1426969151,ES -1426969152,1426972319,GB +1426969152,1426971855,GB +1426971856,1426971859,ES +1426971860,1426972319,GB 1426972320,1426972326,FR 1426972327,1426973335,GB 1426973336,1426973343,ES @@ -39077,11 +47471,7 @@ 1427032736,1427032743,AT 1427032744,1427032959,DE 1427032960,1427032967,NL -1427032968,1427033247,DE -1427033248,1427033263,MZ -1427033264,1427033287,DE -1427033288,1427033295,SE -1427033296,1427035391,DE +1427032968,1427035391,DE 1427035392,1427035519,GB 1427035520,1427046399,DE 1427046400,1427062783,IR @@ -39111,71 +47501,112 @@ 1427668992,1427701759,SE 1427701760,1427723391,DE 1427723392,1427723519,LI -1427723520,1427728479,DE +1427723520,1427728383,DE +1427728384,1427728415,BR +1427728416,1427728447,RU +1427728448,1427728479,DE 1427728480,1427728511,CY 1427728512,1427728543,BR -1427728544,1427728671,DE +1427728544,1427728575,DE +1427728576,1427728639,BR +1427728640,1427728671,CY 1427728672,1427728703,TR -1427728704,1427728799,DE +1427728704,1427728735,RU +1427728736,1427728799,DE 1427728800,1427728831,RU 1427728832,1427728895,CY -1427728896,1427728927,DE -1427728928,1427728959,IL +1427728896,1427728927,RU +1427728928,1427728959,US 1427728960,1427728991,RU -1427728992,1427729055,DE +1427728992,1427729023,LT +1427729024,1427729055,GB 1427729056,1427729087,CA 1427729088,1427729119,DE -1427729120,1427729151,RO -1427729152,1427729311,DE +1427729120,1427729151,BR +1427729152,1427729215,DE +1427729216,1427729279,IN +1427729280,1427729311,DE 1427729312,1427729343,GR 1427729344,1427742719,DE 1427742720,1427742751,IO -1427742752,1427742879,DE -1427742880,1427742911,TR -1427742912,1427743039,DE -1427743040,1427743071,BG -1427743072,1427743231,DE +1427742752,1427742911,DE +1427742912,1427742943,US +1427742944,1427742975,BR +1427742976,1427743007,RU +1427743008,1427743039,US +1427743040,1427743071,BR +1427743072,1427743103,CY +1427743104,1427743135,BR +1427743136,1427743167,IN +1427743168,1427743199,RU +1427743200,1427743231,TR 1427743232,1427743263,GR -1427743264,1427743327,DE +1427743264,1427743295,DE +1427743296,1427743327,BR 1427743328,1427743359,NL -1427743360,1427743391,DE -1427743392,1427743423,BR -1427743424,1427743455,DE +1427743360,1427743423,BR +1427743424,1427743455,US 1427743456,1427743487,CY -1427743488,1427743583,DE +1427743488,1427743519,DE +1427743520,1427743551,BR +1427743552,1427743583,DE 1427743584,1427743615,LV 1427743616,1427743647,DK -1427743648,1427743775,DE +1427743648,1427743679,BR +1427743680,1427743711,RU +1427743712,1427743743,DE +1427743744,1427743775,MA 1427743776,1427743807,ZA -1427743808,1427743839,DE +1427743808,1427743839,BR 1427743840,1427743871,RU -1427743872,1427743935,DE +1427743872,1427743903,DE +1427743904,1427743935,US 1427743936,1427743967,RU -1427743968,1427744127,DE +1427743968,1427743999,US +1427744000,1427744031,AT +1427744032,1427744063,RU +1427744064,1427744095,DE +1427744096,1427744127,MA 1427744128,1427744159,PL -1427744160,1427744191,RU -1427744192,1427744255,DE +1427744160,1427744223,RU +1427744224,1427744255,DE 1427744256,1427744287,US 1427744288,1427744319,TR -1427744320,1427744351,DE +1427744320,1427744351,IN 1427744352,1427744383,UA -1427744384,1427744639,DE +1427744384,1427744415,PL +1427744416,1427744447,UA +1427744448,1427744479,US +1427744480,1427744511,DE +1427744512,1427744543,US +1427744544,1427744575,DE +1427744576,1427744607,PL +1427744608,1427744639,MA 1427744640,1427744671,TR 1427744672,1427744703,DE -1427744704,1427744735,CA -1427744736,1427744767,DK -1427744768,1427744863,DE +1427744704,1427744735,BR +1427744736,1427744767,DE +1427744768,1427744799,BR +1427744800,1427744831,DE +1427744832,1427744863,AU 1427744864,1427744927,TR -1427744928,1427744991,DE +1427744928,1427744959,HU +1427744960,1427744991,RU 1427744992,1427745023,DK -1427745024,1427745087,DE -1427745088,1427745119,RU +1427745024,1427745055,BM +1427745056,1427745087,US +1427745088,1427745119,MA 1427745120,1427745151,DE 1427745152,1427745183,RO 1427745184,1427745215,CH -1427745216,1427745247,DE -1427745248,1427745279,TR -1427745280,1427745503,DE +1427745216,1427745247,US +1427745248,1427745279,DE +1427745280,1427745311,MA +1427745312,1427745343,TH +1427745344,1427745375,RU +1427745376,1427745407,BR +1427745408,1427745471,US +1427745472,1427745503,RO 1427745504,1427745535,RU 1427745536,1427745567,CN 1427745568,1427745599,RU @@ -39183,83 +47614,127 @@ 1427745632,1427745663,BM 1427745664,1427745695,CY 1427745696,1427745727,US -1427745728,1427745791,DE -1427745792,1427745823,GB +1427745728,1427745759,DE +1427745760,1427745791,LT +1427745792,1427745823,FR 1427745824,1427745855,US -1427745856,1427746079,DE +1427745856,1427745887,BR +1427745888,1427745919,IN +1427745920,1427745951,ES +1427745952,1427745983,IN +1427745984,1427746015,DE +1427746016,1427746047,US +1427746048,1427746079,SE 1427746080,1427746111,GB 1427746112,1427746143,DE 1427746144,1427746175,GR 1427746176,1427746239,DE -1427746240,1427746271,NL -1427746272,1427746367,DE -1427746368,1427746399,SE -1427746400,1427747839,DE +1427746240,1427746271,US +1427746272,1427746463,DE +1427746464,1427746495,MA +1427746496,1427747839,DE 1427747840,1427747871,FI -1427747872,1427747967,DE -1427747968,1427747999,BG -1427748000,1427748063,DE -1427748064,1427748095,NL -1427748096,1427748479,DE -1427748480,1427748511,TR -1427748512,1427748543,DE -1427748544,1427748575,MX -1427748576,1427748799,DE -1427748800,1427748831,US -1427748832,1427749503,DE -1427749504,1427749535,UA -1427749536,1427749567,DE +1427747872,1427747903,BR +1427747904,1427747935,CY +1427747936,1427747967,US +1427747968,1427747999,AU +1427748000,1427748031,BR +1427748032,1427748063,DE +1427748064,1427748095,US +1427748096,1427748127,BR +1427748128,1427748159,DE +1427748160,1427748191,GB +1427748192,1427748255,DE +1427748256,1427748287,US +1427748288,1427748351,DE +1427748352,1427748383,BR +1427748384,1427748447,DE +1427748448,1427748479,RU +1427748480,1427748543,MA +1427748544,1427748575,DE +1427748576,1427748607,BR +1427748608,1427748639,HU +1427748640,1427748671,GB +1427748672,1427748735,DE +1427748736,1427748799,BR +1427748800,1427748863,MA +1427748864,1427749471,DE +1427749472,1427749503,BR +1427749504,1427749535,DE +1427749536,1427749567,MA 1427749568,1427749599,CY -1427749600,1427749631,NL -1427749632,1427749663,US -1427749664,1427749887,DE +1427749600,1427749631,AU +1427749632,1427749663,RU +1427749664,1427749695,DE +1427749696,1427749727,BR +1427749728,1427749759,DE +1427749760,1427749791,BR +1427749792,1427749855,DE +1427749856,1427749887,RU 1427749888,1427749919,BR -1427749920,1427749951,DE -1427749952,1427749983,RU +1427749920,1427749951,US +1427749952,1427749983,BR 1427749984,1427750079,DE 1427750080,1427750111,BG -1427750112,1427750239,DE -1427750240,1427750271,NL -1427750272,1427750303,DE -1427750304,1427750335,GB -1427750336,1427751167,DE +1427750112,1427750175,DE +1427750176,1427750207,TR +1427750208,1427750239,DE +1427750240,1427750271,US +1427750272,1427750303,GR +1427750304,1427750335,FR +1427750336,1427750367,US +1427750368,1427751167,DE 1427751168,1427751423,NL -1427751424,1427759935,DE +1427751424,1427759903,DE +1427759904,1427759935,MA 1427759936,1427759967,HR -1427759968,1427760191,DE -1427760192,1427760223,TR -1427760224,1427760255,US +1427759968,1427759999,DE +1427760000,1427760031,BR +1427760032,1427760127,US +1427760128,1427760159,DE +1427760160,1427760191,PL +1427760192,1427760255,US 1427760256,1427760319,BR 1427760320,1427760351,TR 1427760352,1427760383,RU -1427760384,1427760415,TR -1427760416,1427760575,DE +1427760384,1427760415,IN +1427760416,1427760447,US +1427760448,1427760575,DE 1427760576,1427760607,CH -1427760608,1427760799,DE -1427760800,1427760831,NL -1427760832,1427760959,DE +1427760608,1427760671,DE +1427760672,1427760703,BR +1427760704,1427760735,DE +1427760736,1427760767,BR +1427760768,1427760799,DE +1427760800,1427760831,US +1427760832,1427760863,DE +1427760864,1427760895,US +1427760896,1427760959,DE 1427760960,1427760991,CZ 1427760992,1427761023,BG 1427761024,1427761055,HR 1427761056,1427761087,CL 1427761088,1427761119,CH -1427761120,1427761183,DE -1427761184,1427761215,IT -1427761216,1427761247,DE -1427761248,1427761279,BR +1427761120,1427761151,TR +1427761152,1427761183,AU +1427761184,1427761215,DE +1427761216,1427761247,TR +1427761248,1427761279,US 1427761280,1427761311,RU -1427761312,1427761375,DE +1427761312,1427761343,UA +1427761344,1427761375,CY 1427761376,1427761407,TW -1427761408,1427761503,DE +1427761408,1427761439,RU +1427761440,1427761471,US +1427761472,1427761503,IN 1427761504,1427761535,PL 1427761536,1427761567,US 1427761568,1427761599,RU 1427761600,1427761631,EG -1427761632,1427767295,DE +1427761632,1427761663,TR +1427761664,1427767295,DE 1427767296,1427800063,BE -1427800064,1427823615,RU -1427823616,1427824639,KG -1427824640,1427832831,RU +1427800064,1427832831,RU 1427832832,1427865599,BE 1427865600,1427898367,DK 1427898368,1427914751,RU @@ -39274,14 +47749,12 @@ 1428045824,1428062207,MK 1428062208,1428078591,SE 1428078592,1428094975,RU -1428094976,1428096031,AT -1428096032,1428096039,CH -1428096040,1428103167,AT +1428094976,1428103167,AT 1428103168,1428111359,GB 1428111360,1428119551,A2 1428119552,1428121599,LV 1428121600,1428123647,FR -1428125696,1428126975,RU +1428123648,1428126975,RU 1428126976,1428127231,TR 1428127232,1428127743,RU 1428127744,1428129791,ES @@ -39294,24 +47767,21 @@ 1428142080,1428143263,DE 1428143264,1428143279,CH 1428143280,1428144127,DE -1428144128,1428147111,FR -1428147112,1428147119,GB -1428147120,1428147595,FR -1428147596,1428147711,GB -1428147712,1428147855,FR +1428144128,1428147343,FR +1428147344,1428147351,GB +1428147352,1428147599,FR +1428147600,1428147615,GB +1428147616,1428147855,FR 1428147856,1428147871,US -1428147872,1428148039,FR -1428148040,1428148047,GB -1428148048,1428148175,FR +1428147872,1428148175,FR 1428148176,1428148191,CH -1428148192,1428150735,FR -1428150736,1428150751,GB -1428150752,1428151007,FR -1428151008,1428151039,GB -1428151040,1428151231,FR +1428148192,1428150487,FR +1428150488,1428150495,GB +1428150496,1428150663,FR +1428150664,1428150671,GB +1428150672,1428151231,FR 1428151232,1428151295,CH -1428151296,1428152127,FR -1428152128,1428152319,GB +1428151296,1428152319,FR 1428152320,1428160511,PL 1428160512,1429209087,IT 1429209088,1430257663,ES @@ -39345,9 +47815,7 @@ 1431865632,1431865647,ES 1431865648,1431865663,PT 1431865664,1431865679,ES -1431865680,1431865711,PT -1431865712,1431865719,ES -1431865720,1431866447,PT +1431865680,1431866447,PT 1431866448,1431866455,NL 1431866456,1431866479,PT 1431866480,1431866495,ES @@ -39369,7 +47837,9 @@ 1431979480,1431979487,GB 1431979488,1431980151,NL 1431980152,1431980159,US -1431980160,1431980719,NL +1431980160,1431980687,NL +1431980688,1431980695,DE +1431980696,1431980719,NL 1431980720,1431980727,SA 1431980728,1431986175,NL 1431986176,1431994367,RU @@ -39391,8 +47861,55 @@ 1432100864,1432109055,CZ 1432109056,1432117247,GB 1432117248,1432125439,CY -1432125440,1432131583,NL -1432131584,1432133631,PH +1432125440,1432131607,NL +1432131608,1432131615,PH +1432131616,1432131679,NL +1432131680,1432131695,PH +1432131696,1432131711,NL +1432131712,1432131727,PH +1432131728,1432131743,NL +1432131744,1432131759,PH +1432131760,1432131775,NL +1432131776,1432131783,PH +1432131784,1432131887,NL +1432131888,1432131903,PH +1432131904,1432131919,NL +1432131920,1432131935,PH +1432131936,1432131951,NL +1432131952,1432131967,PH +1432131968,1432131999,NL +1432132000,1432132031,PH +1432132032,1432132271,NL +1432132272,1432132287,PH +1432132288,1432132303,NL +1432132304,1432132319,PH +1432132320,1432132351,NL +1432132352,1432132495,PH +1432132496,1432132511,NL +1432132512,1432132559,PH +1432132560,1432132639,NL +1432132640,1432132655,PH +1432132656,1432132671,NL +1432132672,1432132687,PH +1432132688,1432132815,NL +1432132816,1432132831,PH +1432132832,1432132895,NL +1432132896,1432132911,PH +1432132912,1432132927,NL +1432132928,1432132943,PH +1432132944,1432133039,NL +1432133040,1432133055,PH +1432133056,1432133151,NL +1432133152,1432133167,PH +1432133168,1432133199,NL +1432133200,1432133215,PH +1432133216,1432133327,NL +1432133328,1432133343,PH +1432133344,1432133455,NL +1432133456,1432133503,PH +1432133504,1432133543,NL +1432133544,1432133551,PH +1432133552,1432133631,NL 1432133632,1432150015,GB 1432150016,1432158207,BA 1432158208,1432159311,DE @@ -39425,9 +47942,7 @@ 1432322048,1432338431,RU 1432338432,1432346623,FR 1432346624,1433403391,TR -1433403392,1433406239,ES -1433406240,1433406271,US -1433406272,1433406431,ES +1433403392,1433406431,ES 1433406432,1433406447,US 1433406448,1433407487,ES 1433407488,1433410047,NL @@ -39437,7 +47952,9 @@ 1433411328,1433411343,ES 1433411344,1433411375,TR 1433411376,1433411407,US -1433411408,1433411455,TR +1433411408,1433411423,TR +1433411424,1433411439,ES +1433411440,1433411455,TR 1433411456,1433411519,US 1433411520,1433411583,ES 1433411584,1433419775,RU @@ -39468,7 +47985,8 @@ 1433602320,1433608191,DE 1433608192,1433608959,GB 1433608960,1433609215,DE -1433609216,1433609727,GB +1433609216,1433609471,ZA +1433609472,1433609727,GB 1433609728,1433610239,CH 1433610240,1433612287,US 1433612288,1433614335,GB @@ -39497,7 +48015,15 @@ 1433772032,1433788415,SE 1433788416,1433796607,UZ 1433796608,1433804799,GB -1433804800,1433812991,FR +1433804800,1433806591,FR +1433806592,1433806623,GB +1433806624,1433806655,BE +1433806656,1433806687,IT +1433806688,1433806719,NL +1433806720,1433806751,DE +1433806752,1433806783,ES +1433806784,1433806815,CH +1433806816,1433812991,FR 1433812992,1433821183,BG 1433821184,1433829375,GE 1433829376,1433833471,RU @@ -39520,24 +48046,32 @@ 1433856000,1433858047,GB 1433858048,1433860095,ES 1433860096,1433862143,DE -1433862144,1433862751,CH +1433862144,1433862467,CH +1433862468,1433862471,US +1433862472,1433862519,CH +1433862520,1433862527,NL +1433862528,1433862559,CH +1433862560,1433862575,GB +1433862576,1433862751,CH 1433862752,1433862783,MC 1433862784,1433862975,CH 1433862976,1433862991,GB 1433862992,1433863055,CH 1433863056,1433863071,GB -1433863072,1433863423,CH +1433863072,1433863095,CH +1433863096,1433863119,US +1433863120,1433863423,CH 1433863424,1433863487,US 1433863488,1433864191,CH 1433864192,1433866239,HU -1433866240,1433867263,NL +1433866240,1433866751,NL +1433866752,1433867007,GB +1433867008,1433867263,NL 1433867264,1433867295,GB 1433867296,1433867519,NL 1433867520,1433867647,GB 1433867648,1433867775,NL -1433867776,1433867903,GB -1433867904,1433868031,NL -1433868032,1433870335,GB +1433867776,1433870335,GB 1433870336,1433872383,TR 1433872384,1433874431,IT 1433874432,1433876479,NL @@ -39581,8 +48115,9 @@ 1434583040,1434615807,BG 1434615808,1434648575,IL 1434648576,1434681343,FI -1434681344,1434681855,DE -1434681856,1434682111,MY +1434681344,1434681983,DE +1434681984,1434682015,CY +1434682016,1434682111,NL 1434682112,1434682303,DE 1434682304,1434682367,NL 1434682368,1434683119,DE @@ -39591,32 +48126,49 @@ 1434683328,1434683391,MY 1434683392,1434685759,DE 1434685760,1434685951,NL -1434685952,1434686207,DE -1434686208,1434687231,NL +1434685952,1434686975,DE +1434686976,1434687231,NL 1434687232,1434687359,DE 1434687360,1434687487,NL -1434687488,1434688207,DE +1434687488,1434687647,DE +1434687648,1434687679,NL +1434687680,1434688031,DE +1434688032,1434688063,NL +1434688064,1434688095,DE +1434688096,1434688127,NL +1434688128,1434688143,DE +1434688144,1434688151,NL +1434688152,1434688207,DE 1434688208,1434688223,NL 1434688224,1434689887,DE 1434689888,1434689919,NL -1434689920,1434692607,DE +1434689920,1434689951,DE +1434689952,1434690015,NL +1434690016,1434692607,DE 1434692608,1434692671,NL -1434692672,1434693119,DE -1434693120,1434693375,NL -1434693376,1434694655,DE +1434692672,1434694655,DE 1434694656,1434694719,NL -1434694720,1434702463,DE +1434694720,1434696447,DE +1434696448,1434696703,NL +1434696704,1434698879,DE +1434698880,1434699007,NL +1434699008,1434702463,DE 1434702464,1434702591,NL 1434702592,1434702655,DE 1434702656,1434702671,NL -1434702672,1434705727,DE +1434702672,1434702783,DE +1434702784,1434702911,NL +1434702912,1434702975,DE +1434702976,1434703039,NL +1434703040,1434705727,DE 1434705728,1434705919,NL -1434705920,1434712063,DE +1434705920,1434710015,DE +1434710016,1434710527,NL +1434710528,1434712063,DE 1434712064,1434712319,NL 1434712320,1434712959,DE 1434712960,1434712975,NL -1434712976,1434713855,DE -1434713856,1434714111,NL +1434712976,1434714111,DE 1434714112,1434746879,AZ 1434746880,1434779647,CZ 1434779648,1434812415,GB @@ -39669,7 +48221,11 @@ 1436471680,1436471743,BE 1436471744,1436471807,BR 1436471808,1436473343,BE -1436473344,1436475391,RO +1436473344,1436473599,RO +1436473600,1436473855,IT +1436473856,1436474111,RO +1436474112,1436474367,IT +1436474368,1436475391,RO 1436475392,1436477439,AT 1436477440,1436479487,CH 1436479488,1436481535,RU @@ -39708,7 +48264,9 @@ 1436536832,1436538879,GB 1436538880,1436540927,JO 1436540928,1436542975,RU -1436542976,1436545023,NL +1436542976,1436544203,NL +1436544204,1436544207,HK +1436544208,1436545023,NL 1436545024,1436547071,DE 1436547072,1436549119,GB 1436549120,1436811263,CZ @@ -39754,15 +48312,21 @@ 1438810112,1438826495,SE 1438826496,1438842879,FI 1438842880,1438859263,SE -1438859264,1438861823,DE +1438859264,1438860287,DE +1438860288,1438860415,US +1438860416,1438861823,DE 1438861824,1438862079,CH -1438862080,1438869591,DE +1438862080,1438868295,DE +1438868296,1438868303,LT +1438868304,1438869591,DE 1438869592,1438869595,RU 1438869596,1438869647,DE 1438869648,1438869651,LV 1438869652,1438869655,US 1438869656,1438869663,UA -1438869664,1438873119,DE +1438869664,1438870783,DE +1438870784,1438871039,GB +1438871040,1438873119,DE 1438873120,1438873127,PA 1438873128,1438873671,DE 1438873672,1438873679,PA @@ -39778,18 +48342,17 @@ 1438874800,1438874855,PA 1438874856,1438874863,DE 1438874864,1438874879,PA -1438874880,1438875223,DE -1438875224,1438875255,GB -1438875256,1438875257,CH -1438875258,1438875647,DE +1438874880,1438875647,DE 1438875648,1438876159,RU 1438876160,1438876415,LT 1438876416,1438876927,RU 1438876928,1438877183,IQ 1438877184,1438877439,LT -1438877440,1438877695,LB +1438877440,1438877695,RU 1438877696,1438877951,LT -1438877952,1438878975,LB +1438877952,1438878207,LB +1438878208,1438878463,IQ +1438878464,1438878975,LB 1438878976,1438879231,IQ 1438879232,1438880767,RU 1438880768,1438881791,LB @@ -39805,19 +48368,18 @@ 1438890240,1438890495,RU 1438890496,1438890751,IQ 1438890752,1438892031,RU -1438892032,1438892287,US -1438892288,1438900223,IS -1438900224,1438900479,AQ -1438900480,1438904319,IS -1438904320,1438904575,CH -1438904576,1438908415,IS +1438892032,1438895359,CH +1438895360,1438900223,IS +1438900224,1438908415,AQ 1438908416,1438924799,GR 1438924800,1438941183,NO 1438941184,1438957567,BG 1438957568,1438973951,EE 1438973952,1438994175,DE 1438994176,1438994431,SE -1438994432,1438994619,DE +1438994432,1438994551,DE +1438994552,1438994559,GB +1438994560,1438994619,DE 1438994620,1438994623,SE 1438994624,1438994751,DE 1438994752,1438994759,GB @@ -39826,21 +48388,17 @@ 1438995040,1438995047,GB 1438995048,1438995067,DE 1438995068,1438995071,SE -1438995072,1438995647,DE -1438995648,1438995711,GB -1438995712,1438998781,DE -1438998782,1438998783,CH -1438998784,1438999098,DE -1438999099,1438999103,CH -1438999104,1438999261,DE -1438999262,1438999295,NL -1438999296,1438999475,DE -1438999476,1438999487,PT -1438999488,1438999517,DE -1438999518,1438999518,CH -1438999519,1438999533,DE -1438999534,1438999534,CH -1438999535,1438999551,DE +1438995072,1438995399,DE +1438995400,1438995407,GB +1438995408,1438995647,DE +1438995648,1438995655,GB +1438995656,1438998697,DE +1438998698,1438998730,NL +1438998731,1438999167,DE +1438999168,1438999248,NL +1438999249,1438999252,DE +1438999253,1438999295,NL +1438999296,1438999551,DE 1438999552,1438999807,GB 1438999808,1439000575,DE 1439000576,1439000831,NL @@ -39878,68 +48436,42 @@ 1439367168,1439375359,NL 1439375360,1439383551,DE 1439383552,1439432703,NL -1439432704,1439440383,RO -1439440384,1439440895,GB -1439440896,1439446527,RO -1439446528,1439447039,GB -1439447040,1439449087,RO -1439449088,1439449855,GB -1439449856,1439451135,RO -1439451136,1439451647,GB -1439451648,1439457279,RO -1439457280,1439457791,GB -1439457792,1439462911,RO -1439462912,1439463167,GB -1439463168,1439463679,RO -1439463680,1439463935,GB -1439463936,1439464447,RO -1439464448,1439464703,GB -1439464704,1439466495,RO -1439466496,1439467007,GB -1439467008,1439482367,RO -1439482368,1439482879,GB -1439482880,1439498239,RO -1439498240,1439503103,DE -1439503104,1439504127,GB -1439504128,1439504383,DE -1439504384,1439514623,GB +1439432704,1439498239,RO +1439498240,1439507199,DE +1439507200,1439507455,GB +1439507456,1439513599,DE +1439513600,1439514623,GB 1439514624,1439516671,IT -1439516672,1439517439,DE -1439517440,1439517695,GB -1439517696,1439518207,DE +1439516672,1439518207,DE 1439518208,1439518719,IT -1439518720,1439520767,GB -1439520768,1439522815,DE -1439522816,1439528959,GB -1439528960,1439529215,DE -1439529216,1439529471,GB -1439529472,1439529599,DE -1439529600,1439529983,GB +1439518720,1439527935,DE +1439527936,1439528959,GB +1439528960,1439529983,DE 1439529984,1439530239,EG -1439530240,1439535103,DE -1439535104,1439538175,IT +1439530240,1439530495,GB +1439530496,1439534079,DE +1439534080,1439535103,GB +1439535104,1439536127,IT +1439536128,1439537151,GB +1439537152,1439538175,IT 1439538176,1439538687,GB 1439538688,1439539199,IT -1439539200,1439549439,DE +1439539200,1439543295,DE +1439543296,1439549439,GB 1439549440,1439551487,IT -1439551488,1439555839,DE -1439555840,1439556095,GB +1439551488,1439556095,DE 1439556096,1439556607,IT -1439556608,1439557119,DE -1439557120,1439557375,GB -1439557376,1439557887,DE -1439557888,1439558143,GB +1439556608,1439558143,DE 1439558144,1439558911,IT -1439558912,1439559423,GB -1439559424,1439560191,DE +1439558912,1439560191,DE 1439560192,1439560447,IT -1439560448,1439560703,GB +1439560448,1439560703,DE 1439560704,1439561215,IT 1439561216,1439561727,DE 1439561728,1439562239,GB 1439562240,1439562751,IE -1439562752,1439562879,DE -1439562880,1439563263,GB +1439562752,1439563007,DE +1439563008,1439563263,GB 1439563264,1439563775,DE 1439563776,1439629311,LT 1439629312,1439694847,CZ @@ -39970,7 +48502,9 @@ 1441300480,1441308671,LT 1441308672,1441316863,SE 1441316864,1441325055,MT -1441325056,1441333247,PL +1441325056,1441325759,PL +1441325760,1441325775,US +1441325776,1441333247,PL 1441333248,1441349631,DE 1441349632,1441357823,RU 1441357824,1441366015,AT @@ -39980,11 +48514,11 @@ 1441384512,1441384543,US 1441384544,1441384591,FR 1441384592,1441384599,AU -1441384600,1441384607,FR -1441384608,1441384639,CN -1441384640,1441386111,FR +1441384600,1441386111,FR 1441386112,1441386239,IL -1441386240,1441388671,FR +1441386240,1441387519,FR +1441387520,1441387647,US +1441387648,1441388671,FR 1441388672,1441388799,CA 1441388800,1441389055,FR 1441389056,1441389119,IE @@ -39992,7 +48526,11 @@ 1441389224,1441389231,LU 1441389232,1441389567,FR 1441389568,1441389599,LU -1441389600,1441390591,FR +1441389600,1441389967,FR +1441389968,1441389983,CA +1441389984,1441390383,FR +1441390384,1441390399,CA +1441390400,1441390591,FR 1441390592,1441398783,DK 1441398784,1441415167,RU 1441415168,1441423359,GB @@ -40020,15 +48558,17 @@ 1441543584,1441543599,HR 1441543600,1441544063,DE 1441544064,1441544127,TR -1441544128,1441544143,DE -1441544144,1441544159,CH -1441544160,1441545535,DE +1441544128,1441545535,DE 1441545536,1441545599,AT 1441545600,1441546239,DE 1441546240,1441554431,DK 1441554432,1441554687,GB 1441554688,1441554943,NL -1441554944,1441557759,GB +1441554944,1441555199,GB +1441555200,1441555455,DE +1441555456,1441556735,GB +1441556736,1441556991,DE +1441556992,1441557759,GB 1441557760,1441558015,NL 1441558016,1441562623,GB 1441562624,1441564671,IQ @@ -40037,7 +48577,9 @@ 1441570816,1441579007,RU 1441579008,1441582975,DE 1441582976,1441583103,US -1441583104,1441587199,DE +1441583104,1441586431,DE +1441586432,1441586687,US +1441586688,1441587199,DE 1441587200,1441594879,AT 1441594880,1441595135,DE 1441595136,1441603583,AT @@ -40104,7 +48646,8 @@ 1442807808,1442811903,BG 1442811904,1442815999,AT 1442816000,1442820095,BG -1442820096,1442824191,PL +1442820096,1442822143,UA +1442822144,1442824191,RU 1442824192,1442828287,BE 1442828288,1442832383,NL 1442832384,1442836479,GB @@ -40177,7 +48720,9 @@ 1446576128,1446608895,IR 1446608896,1446641663,BY 1446641664,1446674431,SI -1446674432,1446694543,DK +1446674432,1446678407,DK +1446678408,1446678411,US +1446678412,1446694543,DK 1446694544,1446694559,SE 1446694560,1446694591,DK 1446694592,1446694607,NO @@ -40188,9 +48733,17 @@ 1446707176,1446707179,NO 1446707180,1446707183,FI 1446707184,1446707199,DK -1446707200,1446710687,AT -1446710688,1446710703,ES -1446710704,1446736503,AT +1446707200,1446710799,AT +1446710800,1446710815,MT +1446710816,1446710887,AT +1446710888,1446710895,MT +1446710896,1446710903,AT +1446710904,1446710911,MT +1446710912,1446712783,AT +1446712784,1446712791,DE +1446712792,1446716399,AT +1446716400,1446716407,MT +1446716408,1446736503,AT 1446736504,1446736511,US 1446736512,1446739967,AT 1446739968,1446772735,RU @@ -40202,751 +48755,578 @@ 1446871040,1446903807,CZ 1446903808,1446904063,A2 1446904064,1446904071,CY -1446904072,1446904079,IQ -1446904080,1446904095,BH +1446904072,1446904079,LY +1446904080,1446904087,AF +1446904088,1446904095,BF 1446904096,1446904103,SD -1446904104,1446904111,SA -1446904112,1446904119,LY -1446904120,1446904127,SD -1446904128,1446904135,SA -1446904136,1446904143,IQ +1446904104,1446904111,IQ +1446904112,1446904119,GN +1446904120,1446904127,IQ +1446904128,1446904135,A2 +1446904136,1446904143,LY 1446904144,1446904151,ER -1446904152,1446904159,IR -1446904160,1446904167,ES -1446904168,1446904175,IQ -1446904176,1446904183,A2 -1446904184,1446904191,IQ -1446904192,1446904215,A2 -1446904216,1446904223,IQ -1446904224,1446904231,LY -1446904232,1446904247,A2 +1446904152,1446904231,A2 +1446904232,1446904239,IQ +1446904240,1446904247,A2 1446904248,1446904255,AF 1446904256,1446904263,CY -1446904264,1446904279,A2 -1446904280,1446904287,IQ -1446904288,1446904295,AF -1446904296,1446904303,IQ -1446904304,1446904311,A2 -1446904312,1446904319,AF +1446904264,1446904319,A2 1446904320,1446904335,AE 1446904336,1446904351,A2 1446904352,1446904367,AE -1446904368,1446904527,A2 -1446904528,1446904543,ZM -1446904544,1446904575,A2 +1446904368,1446904383,IQ +1446904384,1446904399,A2 +1446904400,1446904415,IQ +1446904416,1446904575,A2 1446904576,1446904591,SD -1446904592,1446904599,NG +1446904592,1446904599,AF 1446904600,1446904607,A2 1446904608,1446904623,SD -1446904624,1446904631,IQ -1446904632,1446904751,A2 +1446904624,1446904639,A2 +1446904640,1446904679,IQ +1446904680,1446904751,A2 1446904752,1446904759,NG 1446904760,1446904799,A2 1446904800,1446904807,SD -1446904808,1446904815,A2 -1446904816,1446904823,ZM -1446904824,1446904831,A2 -1446904832,1446904839,IQ -1446904840,1446904843,A2 +1446904808,1446904831,A2 +1446904832,1446904835,LY +1446904836,1446904843,IQ 1446904844,1446904847,CG -1446904848,1446904851,A2 -1446904852,1446904859,IQ -1446904860,1446904871,A2 -1446904872,1446904875,IQ -1446904876,1446904879,ZM -1446904880,1446904887,IQ -1446904888,1446904895,A2 -1446904896,1446904907,IQ -1446904908,1446904915,A2 -1446904916,1446904919,ZM -1446904920,1446904927,IQ -1446904928,1446904931,A2 -1446904932,1446904935,ZM -1446904936,1446904939,LY -1446904940,1446904947,IQ -1446904948,1446904951,A2 +1446904848,1446904851,AF +1446904852,1446904855,LY +1446904856,1446904859,IQ +1446904860,1446904867,LY +1446904868,1446904871,IQ +1446904872,1446904879,A2 +1446904880,1446904883,IQ +1446904884,1446904887,AF +1446904888,1446904895,IQ +1446904896,1446904899,LY +1446904900,1446904903,A2 +1446904904,1446904907,AF +1446904908,1446904919,A2 +1446904920,1446904923,LY +1446904924,1446904927,AF +1446904928,1446904931,TD +1446904932,1446904935,A2 +1446904936,1446904939,AO +1446904940,1446904943,LY +1446904944,1446904947,IQ +1446904948,1446904951,LY 1446904952,1446904955,AF 1446904956,1446904959,A2 1446904960,1446904963,IQ -1446904964,1446904975,A2 +1446904964,1446904967,TD +1446904968,1446904971,A2 +1446904972,1446904975,LY 1446904976,1446904979,CG -1446904980,1446904987,IQ -1446904988,1446904991,A2 -1446904992,1446905007,IQ -1446905008,1446905011,CG -1446905012,1446905015,A2 +1446904980,1446904983,TG +1446904984,1446904991,LY +1446904992,1446904995,IQ +1446904996,1446905003,A2 +1446905004,1446905007,NG +1446905008,1446905011,A2 +1446905012,1446905015,AF 1446905016,1446905019,NG 1446905020,1446905023,LY -1446905024,1446905031,IQ -1446905032,1446905035,A2 +1446905024,1446905027,A2 +1446905028,1446905031,IQ +1446905032,1446905035,LY 1446905036,1446905039,IQ 1446905040,1446905043,AF -1446905044,1446905051,IQ -1446905052,1446905055,LY -1446905056,1446905063,IQ -1446905064,1446905067,NG -1446905068,1446905071,IQ -1446905072,1446905083,A2 +1446905044,1446905047,IQ +1446905048,1446905051,LY +1446905052,1446905059,IQ +1446905060,1446905067,NG +1446905068,1446905071,A2 +1446905072,1446905075,NG +1446905076,1446905083,A2 1446905084,1446905095,AF -1446905096,1446905103,BJ -1446905104,1446905107,IQ -1446905108,1446905111,A2 -1446905112,1446905115,BJ -1446905116,1446905119,A2 -1446905120,1446905123,GN +1446905096,1446905099,LY +1446905100,1446905103,IQ +1446905104,1446905111,LY +1446905112,1446905115,NG +1446905116,1446905119,SD +1446905120,1446905123,A2 1446905124,1446905127,AF -1446905128,1446905135,A2 -1446905136,1446905143,IQ -1446905144,1446905147,A2 -1446905148,1446905151,LY -1446905152,1446905155,AF -1446905156,1446905167,IQ -1446905168,1446905171,A2 -1446905172,1446905175,IQ +1446905128,1446905131,IQ +1446905132,1446905139,LY +1446905140,1446905147,IQ +1446905148,1446905151,A2 +1446905152,1446905159,IQ +1446905160,1446905163,A2 +1446905164,1446905171,LY +1446905172,1446905175,A2 1446905176,1446905179,AF -1446905180,1446905191,LY -1446905192,1446905195,A2 +1446905180,1446905183,LY +1446905184,1446905191,A2 +1446905192,1446905195,LY 1446905196,1446905199,AF -1446905200,1446905203,NG +1446905200,1446905203,A2 1446905204,1446905207,AF 1446905208,1446905211,ER -1446905212,1446905215,IQ -1446905216,1446905223,A2 -1446905224,1446905227,IQ +1446905212,1446905215,AF +1446905216,1446905219,LY +1446905220,1446905223,IQ +1446905224,1446905227,LY 1446905228,1446905235,NG -1446905236,1446905251,A2 -1446905252,1446905255,IQ +1446905236,1446905239,A2 +1446905240,1446905243,IQ +1446905244,1446905247,AF +1446905248,1446905251,A2 +1446905252,1446905255,LY 1446905256,1446905259,A2 1446905260,1446905263,IQ -1446905264,1446905267,LY -1446905268,1446905271,NG -1446905272,1446905275,IQ -1446905276,1446905279,A2 -1446905280,1446905283,IQ -1446905284,1446905287,A2 -1446905288,1446905295,IQ -1446905296,1446905303,ZM +1446905264,1446905271,A2 +1446905272,1446905287,IQ +1446905288,1446905295,LY +1446905296,1446905303,IQ 1446905304,1446905307,CF -1446905308,1446905315,A2 +1446905308,1446905311,IQ +1446905312,1446905315,EG 1446905316,1446905319,NG -1446905320,1446905323,A2 -1446905324,1446905327,IQ -1446905328,1446905331,A2 -1446905332,1446905339,IQ -1446905340,1446905343,A2 -1446905344,1446905351,LY -1446905352,1446905367,A2 -1446905368,1446905375,LY -1446905376,1446905383,A2 +1446905320,1446905331,IQ +1446905332,1446905335,NG +1446905336,1446905343,IQ +1446905344,1446905351,NG +1446905352,1446905383,A2 1446905384,1446905391,SD 1446905392,1446905583,A2 1446905584,1446905591,AF -1446905592,1446905599,A2 -1446905600,1446905603,ZM -1446905604,1446905615,IQ +1446905592,1446905611,A2 +1446905612,1446905615,IQ 1446905616,1446905619,A2 -1446905620,1446905623,ZM +1446905620,1446905623,TD 1446905624,1446905627,A2 -1446905628,1446905631,AF -1446905632,1446905635,LY +1446905628,1446905631,IQ +1446905632,1446905635,A2 1446905636,1446905639,IQ 1446905640,1446905643,A2 -1446905644,1446905655,IQ +1446905644,1446905647,IQ +1446905648,1446905651,A2 +1446905652,1446905655,IQ 1446905656,1446905659,AF 1446905660,1446905663,ER 1446905664,1446905667,LY -1446905668,1446905671,A2 -1446905672,1446905675,AF -1446905676,1446905679,LY -1446905680,1446905683,ZM -1446905684,1446905691,A2 -1446905692,1446905695,ZM -1446905696,1446905699,LY -1446905700,1446905703,ZM -1446905704,1446905719,A2 +1446905668,1446905675,AF +1446905676,1446905683,LY +1446905684,1446905687,A2 +1446905688,1446905691,CF +1446905692,1446905703,A2 +1446905704,1446905707,IQ +1446905708,1446905715,A2 +1446905716,1446905719,IQ 1446905720,1446905723,AF 1446905724,1446905727,A2 1446905728,1446905731,IQ 1446905732,1446905735,AF -1446905736,1446905743,A2 -1446905744,1446905747,LY -1446905748,1446905751,A2 -1446905752,1446905755,IQ -1446905756,1446905759,A2 +1446905736,1446905739,IQ +1446905740,1446905743,A2 +1446905744,1446905759,LY 1446905760,1446905763,ML -1446905764,1446905767,LY -1446905768,1446905779,A2 -1446905780,1446905783,LY -1446905784,1446905787,A2 -1446905788,1446905791,LY +1446905764,1446905767,A2 +1446905768,1446905775,IQ +1446905776,1446905791,A2 1446905792,1446905795,TD -1446905796,1446905803,A2 -1446905804,1446905807,IQ -1446905808,1446905815,A2 -1446905816,1446905823,LY -1446905824,1446905827,A2 -1446905828,1446905831,LY +1446905796,1446905799,A2 +1446905800,1446905803,IQ +1446905804,1446905815,A2 +1446905816,1446905819,LY +1446905820,1446905823,IQ +1446905824,1446905831,A2 1446905832,1446905835,NG -1446905836,1446905839,A2 -1446905840,1446905843,IQ -1446905844,1446905847,A2 -1446905848,1446905851,IQ +1446905836,1446905839,IQ +1446905840,1446905851,A2 1446905852,1446905855,AF -1446905856,1446905856,A2 -1446905857,1446905863,LY +1446905856,1446905863,LY 1446905864,1446905871,SD 1446905872,1446905911,A2 -1446905912,1446905943,SD -1446905944,1446906023,A2 +1446905912,1446905927,SD +1446905928,1446905935,A2 +1446905936,1446905943,SD +1446905944,1446905959,A2 +1446905960,1446905967,AF +1446905968,1446906023,A2 1446906024,1446906031,SD -1446906032,1446906039,A2 -1446906040,1446906047,SD -1446906048,1446906071,A2 +1446906032,1446906071,A2 1446906072,1446906079,CY -1446906080,1446906115,A2 -1446906116,1446906119,ZM -1446906120,1446906123,SD +1446906080,1446906111,A2 +1446906112,1446906119,IQ +1446906120,1446906123,A2 1446906124,1446906131,IQ -1446906132,1446906135,LY -1446906136,1446906139,IQ -1446906140,1446906143,A2 -1446906144,1446906151,ZM -1446906152,1446906167,AF -1446906168,1446906171,A2 +1446906132,1446906135,SD +1446906136,1446906151,A2 +1446906152,1446906159,AF +1446906160,1446906167,A2 +1446906168,1446906171,IQ 1446906172,1446906179,AF -1446906180,1446906187,A2 -1446906188,1446906191,AF -1446906192,1446906195,A2 -1446906196,1446906203,IQ -1446906204,1446906211,A2 +1446906180,1446906211,A2 1446906212,1446906215,AF -1446906216,1446906219,A2 +1446906216,1446906219,IQ 1446906220,1446906223,BG -1446906224,1446906231,IQ +1446906224,1446906231,A2 1446906232,1446906239,AF 1446906240,1446906243,IQ -1446906244,1446906247,A2 -1446906248,1446906259,IQ +1446906244,1446906251,A2 +1446906252,1446906255,IQ +1446906256,1446906259,A2 1446906260,1446906263,AF -1446906264,1446906283,A2 -1446906284,1446906303,IQ -1446906304,1446906307,ZM -1446906308,1446906311,A2 -1446906312,1446906327,IQ -1446906328,1446906331,A2 -1446906332,1446906335,IQ -1446906336,1446906339,ZM -1446906340,1446906343,A2 +1446906264,1446906287,A2 +1446906288,1446906295,IQ +1446906296,1446906299,A2 +1446906300,1446906303,LY +1446906304,1446906327,A2 +1446906328,1446906331,IQ +1446906332,1446906343,A2 1446906344,1446906347,NG -1446906348,1446906351,ZM -1446906352,1446906359,A2 +1446906348,1446906359,A2 1446906360,1446906363,SD -1446906364,1446906367,IQ -1446906368,1446906391,A2 +1446906364,1446906391,A2 1446906392,1446906399,CY -1446906400,1446906567,A2 -1446906568,1446906591,KW -1446906592,1446906599,IQ -1446906600,1446906615,KW -1446906616,1446906623,A2 -1446906624,1446906631,LY -1446906632,1446906639,A2 -1446906640,1446906655,LY -1446906656,1446906663,NG -1446906664,1446906863,A2 -1446906864,1446906871,ZM -1446906872,1446906879,A2 -1446906880,1446906883,IQ +1446906400,1446906883,A2 1446906884,1446906887,AF -1446906888,1446906891,IQ +1446906888,1446906891,LY 1446906892,1446906895,A2 -1446906896,1446906899,IQ -1446906900,1446906907,A2 -1446906908,1446906919,IQ +1446906896,1446906899,GN +1446906900,1446906915,A2 +1446906916,1446906919,AF 1446906920,1446906923,A2 1446906924,1446906927,IQ 1446906928,1446906931,SA -1446906932,1446906935,IQ -1446906936,1446906943,LY +1446906932,1446906939,A2 +1446906940,1446906943,LY 1446906944,1446906947,IQ -1446906948,1446906951,A2 -1446906952,1446906955,IQ -1446906956,1446906963,A2 -1446906964,1446906967,AF -1446906968,1446906971,A2 -1446906972,1446906983,IQ +1446906948,1446906967,A2 +1446906968,1446906971,LY +1446906972,1446906975,A2 +1446906976,1446906979,IQ +1446906980,1446906983,LY 1446906984,1446906987,NG -1446906988,1446906995,IQ +1446906988,1446906991,A2 +1446906992,1446906995,IQ 1446906996,1446906999,AF -1446907000,1446907007,A2 +1446907000,1446907003,LY +1446907004,1446907007,A2 1446907008,1446907011,AF -1446907012,1446907015,IQ -1446907016,1446907019,ZM -1446907020,1446907023,AF -1446907024,1446907027,IQ -1446907028,1446907031,ZM -1446907032,1446907039,A2 -1446907040,1446907043,ZM +1446907012,1446907019,A2 +1446907020,1446907023,LY +1446907024,1446907031,A2 +1446907032,1446907035,LY +1446907036,1446907039,IQ +1446907040,1446907043,A2 1446907044,1446907047,CG -1446907048,1446907055,IQ -1446907056,1446907067,A2 +1446907048,1446907051,IQ +1446907052,1446907067,A2 1446907068,1446907071,AF -1446907072,1446907075,A2 -1446907076,1446907079,IQ +1446907072,1446907075,IQ +1446907076,1446907079,A2 1446907080,1446907083,AF -1446907084,1446907087,IQ -1446907088,1446907091,LY -1446907092,1446907095,IQ +1446907084,1446907095,A2 1446907096,1446907099,NG -1446907100,1446907103,IQ -1446907104,1446907123,A2 -1446907124,1446907131,IQ +1446907100,1446907111,A2 +1446907112,1446907115,IQ +1446907116,1446907119,LY +1446907120,1446907131,A2 1446907132,1446907135,AF -1446907136,1446907147,A2 +1446907136,1446907143,A2 +1446907144,1446907147,AF 1446907148,1446907151,IQ -1446907152,1446907155,A2 -1446907156,1446907159,LY -1446907160,1446907163,AF -1446907164,1446907167,IQ -1446907168,1446907171,LY +1446907152,1446907159,A2 +1446907160,1446907163,IQ +1446907164,1446907171,A2 1446907172,1446907175,IQ -1446907176,1446907187,LY +1446907176,1446907187,A2 1446907188,1446907191,CG -1446907192,1446907199,IQ -1446907200,1446907203,A2 -1446907204,1446907207,IQ -1446907208,1446907211,A2 +1446907192,1446907195,A2 +1446907196,1446907199,LY +1446907200,1446907211,A2 1446907212,1446907215,IQ -1446907216,1446907223,A2 -1446907224,1446907227,ZM -1446907228,1446907231,A2 +1446907216,1446907219,A2 +1446907220,1446907223,BJ +1446907224,1446907231,A2 1446907232,1446907243,IQ -1446907244,1446907247,NG -1446907248,1446907255,A2 -1446907256,1446907259,GA -1446907260,1446907279,IQ +1446907244,1446907251,A2 +1446907252,1446907259,IQ +1446907260,1446907263,A2 +1446907264,1446907271,IQ +1446907272,1446907279,A2 1446907280,1446907283,GA 1446907284,1446907287,A2 1446907288,1446907291,AF -1446907292,1446907303,A2 -1446907304,1446907307,IQ +1446907292,1446907307,A2 1446907308,1446907311,AF 1446907312,1446907315,A2 1446907316,1446907319,IQ 1446907320,1446907323,AF -1446907324,1446907327,A2 -1446907328,1446907331,IQ -1446907332,1446907335,A2 -1446907336,1446907339,IQ -1446907340,1446907347,LY -1446907348,1446907355,ZM -1446907356,1446907371,A2 +1446907324,1446907355,A2 +1446907356,1446907359,IQ +1446907360,1446907367,A2 +1446907368,1446907368,IQ +1446907369,1446907371,A2 1446907372,1446907375,AF -1446907376,1446907379,ZM -1446907380,1446907383,IQ +1446907376,1446907383,A2 1446907384,1446907387,CI -1446907388,1446907391,A2 -1446907392,1446907395,AF +1446907388,1446907395,A2 1446907396,1446907399,IQ 1446907400,1446907403,A2 1446907404,1446907407,IQ -1446907408,1446907411,A2 -1446907412,1446907419,IQ -1446907420,1446907423,A2 -1446907424,1446907427,ZM -1446907428,1446907439,A2 +1446907408,1446907415,A2 +1446907416,1446907423,IQ +1446907424,1446907431,A2 +1446907432,1446907435,IQ +1446907436,1446907439,A2 1446907440,1446907443,AF -1446907444,1446907451,A2 -1446907452,1446907463,IQ -1446907464,1446907475,A2 -1446907476,1446907479,LY -1446907480,1446907483,A2 -1446907484,1446907487,IQ -1446907488,1446907491,A2 +1446907444,1446907447,IQ +1446907448,1446907487,A2 +1446907488,1446907491,IQ 1446907492,1446907495,TD -1446907496,1446907503,IQ -1446907504,1446907507,LY -1446907508,1446907511,IQ -1446907512,1446907523,A2 -1446907524,1446907527,LY -1446907528,1446907531,A2 -1446907532,1446907539,IQ -1446907540,1446907543,LY -1446907544,1446907547,IQ +1446907496,1446907519,A2 +1446907520,1446907523,LY +1446907524,1446907531,A2 +1446907532,1446907535,CI +1446907536,1446907543,A2 +1446907544,1446907547,LY 1446907548,1446907551,A2 -1446907552,1446907559,IQ -1446907560,1446907571,A2 +1446907552,1446907555,LY +1446907556,1446907559,A2 +1446907560,1446907563,AF +1446907564,1446907571,A2 1446907572,1446907575,AF -1446907576,1446907579,A2 -1446907580,1446907583,GH -1446907584,1446907615,A2 +1446907576,1446907579,IQ +1446907580,1446907583,A2 +1446907584,1446907587,IQ +1446907588,1446907595,A2 +1446907596,1446907599,IQ +1446907600,1446907611,A2 +1446907612,1446907615,IQ 1446907616,1446907619,TD -1446907620,1446907631,A2 -1446907632,1446907635,LY -1446907636,1446907647,IQ -1446907648,1446907659,A2 -1446907660,1446907663,ZM +1446907620,1446907635,A2 +1446907636,1446907639,IQ +1446907640,1446907663,A2 1446907664,1446907667,NG -1446907668,1446907671,A2 -1446907672,1446907675,IQ -1446907676,1446907679,LY -1446907680,1446907691,A2 +1446907668,1446907671,IQ +1446907672,1446907679,A2 +1446907680,1446907683,LY +1446907684,1446907687,IQ +1446907688,1446907691,A2 1446907692,1446907695,IQ -1446907696,1446907699,LY -1446907700,1446907703,IQ -1446907704,1446907715,A2 +1446907696,1446907711,A2 +1446907712,1446907715,IQ 1446907716,1446907719,AF -1446907720,1446907723,A2 -1446907724,1446907731,IQ -1446907732,1446907735,LY -1446907736,1446907739,A2 -1446907740,1446907743,IQ -1446907744,1446907747,A2 -1446907748,1446907755,AF -1446907756,1446907759,A2 -1446907760,1446907763,IQ -1446907764,1446907767,A2 -1446907768,1446907771,IQ -1446907772,1446907775,A2 -1446907776,1446907779,LY -1446907780,1446907783,IQ -1446907784,1446907787,A2 +1446907720,1446907735,A2 +1446907736,1446907739,IQ +1446907740,1446907743,A2 +1446907744,1446907747,IQ +1446907748,1446907751,A2 +1446907752,1446907755,AF +1446907756,1446907767,A2 +1446907768,1446907775,IQ +1446907776,1446907787,A2 1446907788,1446907791,IQ -1446907792,1446907799,A2 -1446907800,1446907803,ZM -1446907804,1446907807,IQ -1446907808,1446907823,A2 -1446907824,1446907827,LY -1446907828,1446907831,A2 -1446907832,1446907839,LY -1446907840,1446907855,A2 +1446907792,1446907811,A2 +1446907812,1446907819,IQ +1446907820,1446907823,AF +1446907824,1446907827,A2 +1446907828,1446907831,TD +1446907832,1446907855,A2 1446907856,1446907859,AF -1446907860,1446907863,A2 -1446907864,1446907871,LY -1446907872,1446907875,A2 -1446907876,1446907883,IQ -1446907884,1446907887,A2 -1446907888,1446907891,SD +1446907860,1446907871,A2 +1446907872,1446907875,IQ +1446907876,1446907891,A2 1446907892,1446907895,AF -1446907896,1446907899,IQ -1446907900,1446907903,LY -1446907904,1446907911,IQ -1446907912,1446907919,A2 -1446907920,1446907927,LY -1446907928,1446908103,A2 -1446908104,1446908111,NG -1446908112,1446908143,A2 +1446907896,1446907899,A2 +1446907900,1446907903,EG +1446907904,1446907911,A2 +1446907912,1446907919,SD +1446907920,1446908143,A2 1446908144,1446908151,AE 1446908152,1446908159,SD 1446908160,1446908163,AF -1446908164,1446908167,A2 -1446908168,1446908175,IQ -1446908176,1446908187,A2 +1446908164,1446908187,A2 1446908188,1446908191,GH -1446908192,1446908235,A2 -1446908236,1446908243,IQ -1446908244,1446908247,A2 +1446908192,1446908195,A2 +1446908196,1446908199,IQ +1446908200,1446908211,A2 +1446908212,1446908215,SD +1446908216,1446908231,A2 +1446908232,1446908235,LY +1446908236,1446908247,A2 1446908248,1446908251,AF -1446908252,1446908255,A2 -1446908256,1446908259,SZ -1446908260,1446908267,A2 +1446908252,1446908259,A2 +1446908260,1446908263,IQ +1446908264,1446908267,A2 1446908268,1446908271,AF -1446908272,1446908275,LY -1446908276,1446908279,A2 -1446908280,1446908283,IQ +1446908272,1446908275,A2 +1446908276,1446908279,LY +1446908280,1446908283,A2 1446908284,1446908287,AF 1446908288,1446908299,A2 1446908300,1446908303,IQ -1446908304,1446908307,AF -1446908308,1446908311,A2 -1446908312,1446908315,LY -1446908316,1446908323,A2 -1446908324,1446908327,ZM -1446908328,1446908331,A2 +1446908304,1446908331,A2 1446908332,1446908335,NG -1446908336,1446908359,A2 +1446908336,1446908343,A2 +1446908344,1446908347,IQ +1446908348,1446908351,TD +1446908352,1446908355,IQ +1446908356,1446908359,A2 1446908360,1446908363,LY -1446908364,1446908367,A2 -1446908368,1446908371,IQ -1446908372,1446908383,A2 -1446908384,1446908391,IQ -1446908392,1446908419,A2 -1446908420,1446908423,IQ -1446908424,1446908427,A2 -1446908428,1446908431,IQ -1446908432,1446908435,A2 +1446908364,1446908379,A2 +1446908380,1446908383,IQ +1446908384,1446908387,A2 +1446908388,1446908391,IQ +1446908392,1446908423,A2 +1446908424,1446908427,AF +1446908428,1446908435,A2 1446908436,1446908443,AF -1446908444,1446908447,A2 -1446908448,1446908451,ZM -1446908452,1446908455,A2 +1446908444,1446908455,A2 1446908456,1446908459,LB 1446908460,1446908479,A2 1446908480,1446908483,IQ -1446908484,1446908487,A2 -1446908488,1446908491,IQ -1446908492,1446908515,A2 -1446908516,1446908519,IQ -1446908520,1446908531,A2 -1446908532,1446908535,IQ -1446908536,1446908539,A2 -1446908540,1446908543,ZM -1446908544,1446908591,A2 -1446908592,1446908595,IQ -1446908596,1446908599,A2 -1446908600,1446908603,ZM +1446908484,1446908603,A2 1446908604,1446908607,CG 1446908608,1446908631,A2 1446908632,1446908635,IQ -1446908636,1446908651,A2 -1446908652,1446908663,IQ -1446908664,1446908683,A2 +1446908636,1446908655,A2 +1446908656,1446908659,IQ +1446908660,1446908663,A2 +1446908664,1446908667,IQ +1446908668,1446908683,A2 1446908684,1446908687,SD 1446908688,1446908691,IQ -1446908692,1446908707,A2 -1446908708,1446908711,IQ -1446908712,1446908715,A2 -1446908716,1446908719,CM -1446908720,1446908727,A2 -1446908728,1446908731,AF -1446908732,1446908735,A2 -1446908736,1446908739,IQ -1446908740,1446908743,A2 -1446908744,1446908747,GN -1446908748,1446908751,A2 -1446908752,1446908759,IQ -1446908760,1446908775,A2 -1446908776,1446908779,IQ -1446908780,1446908787,A2 +1446908692,1446908755,A2 +1446908756,1446908759,IQ +1446908760,1446908787,A2 1446908788,1446908791,NG -1446908792,1446908811,A2 -1446908812,1446908815,IQ -1446908816,1446908835,A2 -1446908836,1446908843,IQ -1446908844,1446908855,A2 -1446908856,1446908859,ZM -1446908860,1446908863,A2 +1446908792,1446908863,A2 1446908864,1446908871,AF 1446908872,1446908875,A2 1446908876,1446908879,AF -1446908880,1446908907,A2 -1446908908,1446908911,IQ -1446908912,1446908919,A2 +1446908880,1446908919,A2 1446908920,1446908923,IQ 1446908924,1446908927,A2 1446908928,1446908931,IQ -1446908932,1446908935,ZM -1446908936,1446908951,A2 -1446908952,1446908955,IQ -1446908956,1446908959,LY -1446908960,1446908971,A2 +1446908932,1446908971,A2 1446908972,1446908975,AF 1446908976,1446908979,GA 1446908980,1446908983,AF -1446908984,1446908987,LY -1446908988,1446908999,A2 -1446909000,1446909003,IQ -1446909004,1446909007,LY -1446909008,1446909019,IQ -1446909020,1446909083,A2 +1446908984,1446908991,A2 +1446908992,1446908995,IQ +1446908996,1446909007,A2 +1446909008,1446909011,IQ +1446909012,1446909083,A2 1446909084,1446909087,CG -1446909088,1446909091,IQ -1446909092,1446909095,A2 +1446909088,1446909095,A2 1446909096,1446909099,TD 1446909100,1446909111,A2 1446909112,1446909115,IQ 1446909116,1446909163,A2 1446909164,1446909167,IQ -1446909168,1446909171,A2 -1446909172,1446909173,IQ -1446909174,1446909195,A2 -1446909196,1446909199,IQ -1446909200,1446909203,A2 +1446909168,1446909187,A2 +1446909188,1446909191,IQ +1446909192,1446909203,A2 1446909204,1446909207,IQ -1446909208,1446909211,LY -1446909212,1446909215,A2 -1446909216,1446909219,LY -1446909220,1446909223,IQ -1446909224,1446909271,A2 -1446909272,1446909275,IQ -1446909276,1446909295,A2 +1446909208,1446909239,A2 +1446909240,1446909243,LY +1446909244,1446909295,A2 1446909296,1446909299,IQ -1446909300,1446909303,A2 -1446909304,1446909319,IQ -1446909320,1446909327,A2 -1446909328,1446909331,IQ -1446909332,1446909335,A2 -1446909336,1446909339,GH -1446909340,1446909351,A2 -1446909352,1446909359,IQ -1446909360,1446909363,A2 +1446909300,1446909363,A2 1446909364,1446909367,IQ -1446909368,1446909391,A2 -1446909392,1446909395,ZM -1446909396,1446909399,NG -1446909400,1446909423,A2 +1446909368,1446909399,A2 +1446909400,1446909403,AF +1446909404,1446909423,A2 1446909424,1446909435,AF -1446909436,1446909443,A2 +1446909436,1446909443,IQ 1446909444,1446909447,NG -1446909448,1446909471,A2 -1446909472,1446909475,IQ -1446909476,1446909491,A2 -1446909492,1446909495,IQ -1446909496,1446909499,A2 -1446909500,1446909507,IQ -1446909508,1446909519,A2 +1446909448,1446909499,A2 +1446909500,1446909503,IQ +1446909504,1446909507,LY +1446909508,1446909511,IQ +1446909512,1446909515,A2 +1446909516,1446909519,EG 1446909520,1446909523,CG -1446909524,1446909539,A2 -1446909540,1446909543,IQ -1446909544,1446909555,A2 -1446909556,1446909559,IQ -1446909560,1446909563,A2 -1446909564,1446909567,NG -1446909568,1446909575,A2 +1446909524,1446909527,A2 +1446909528,1446909531,EG +1446909532,1446909535,A2 +1446909536,1446909539,AF +1446909540,1446909547,IQ +1446909548,1446909575,A2 1446909576,1446909579,AF 1446909580,1446909599,A2 1446909600,1446909603,AF -1446909604,1446909615,A2 -1446909616,1446909623,IQ -1446909624,1446909647,A2 -1446909648,1446909651,NG -1446909652,1446909655,A2 -1446909656,1446909659,AF -1446909660,1446909667,A2 -1446909668,1446909671,IQ -1446909672,1446909683,A2 -1446909684,1446909687,IQ +1446909604,1446909639,A2 +1446909640,1446909643,NG +1446909644,1446909687,A2 1446909688,1446909691,AF -1446909692,1446909699,A2 -1446909700,1446909703,IQ -1446909704,1446909731,A2 -1446909732,1446909735,IQ -1446909736,1446909739,ZM +1446909692,1446909739,A2 1446909740,1446909743,AF -1446909744,1446909755,A2 -1446909756,1446909763,ZM -1446909764,1446909787,A2 -1446909788,1446909791,IQ -1446909792,1446909803,A2 +1446909744,1446909803,A2 1446909804,1446909807,AF 1446909808,1446909815,A2 1446909816,1446909819,AF 1446909820,1446909827,IQ -1446909828,1446909851,A2 -1446909852,1446909855,LY -1446909856,1446909859,A2 -1446909860,1446909863,IQ -1446909864,1446909867,A2 -1446909868,1446909871,LY -1446909872,1446909879,A2 -1446909880,1446909883,LY -1446909884,1446909887,A2 -1446909888,1446909891,LY -1446909892,1446909907,A2 -1446909908,1446909911,IQ -1446909912,1446909955,A2 -1446909956,1446909959,IQ -1446909960,1446909967,A2 +1446909828,1446909967,A2 1446909968,1446909971,LY -1446909972,1446909975,A2 -1446909976,1446909991,LY -1446909992,1446909999,IQ +1446909972,1446909999,A2 1446910000,1446910003,AF -1446910004,1446910011,A2 -1446910012,1446910015,IQ -1446910016,1446910019,A2 -1446910020,1446910027,IQ -1446910028,1446910031,A2 -1446910032,1446910035,LY -1446910036,1446910039,A2 -1446910040,1446910043,IQ -1446910044,1446910055,A2 +1446910004,1446910019,A2 +1446910020,1446910023,IQ +1446910024,1446910035,A2 +1446910036,1446910039,NG +1446910040,1446910055,A2 1446910056,1446910059,ZM -1446910060,1446910063,IQ -1446910064,1446910071,A2 -1446910072,1446910075,IQ -1446910076,1446910083,A2 -1446910084,1446910095,IQ -1446910096,1446910103,A2 -1446910104,1446910107,IQ -1446910108,1446910111,A2 -1446910112,1446910115,IQ -1446910116,1446910119,A2 -1446910120,1446910123,IQ -1446910124,1446910159,A2 -1446910160,1446910163,ZM +1446910060,1446910111,A2 +1446910112,1446910115,NG +1446910116,1446910139,A2 +1446910140,1446910143,NG +1446910144,1446910163,A2 1446910164,1446910167,NG -1446910168,1446910175,A2 -1446910176,1446910179,ZM -1446910180,1446910191,IQ +1446910168,1446910187,A2 +1446910188,1446910191,IQ 1446910192,1446910195,A2 1446910196,1446910199,AF -1446910200,1446910203,A2 -1446910204,1446910207,ZM -1446910208,1446910211,A2 -1446910212,1446910220,IQ -1446910221,1446910223,A2 +1446910200,1446910215,A2 +1446910216,1446910219,IQ +1446910220,1446910223,A2 1446910224,1446910227,IQ -1446910228,1446910231,A2 -1446910232,1446910239,IQ -1446910240,1446910247,A2 -1446910248,1446910251,LY +1446910228,1446910251,A2 1446910252,1446910255,IQ -1446910256,1446910263,A2 -1446910264,1446910267,IQ -1446910268,1446910271,AF -1446910272,1446910275,A2 +1446910256,1446910275,A2 1446910276,1446910279,IQ 1446910280,1446910283,A2 -1446910284,1446910291,IQ -1446910292,1446910295,A2 -1446910296,1446910307,IQ +1446910284,1446910287,IQ +1446910288,1446910303,A2 +1446910304,1446910307,IQ 1446910308,1446910311,AF -1446910312,1446910323,A2 -1446910324,1446910327,IQ -1446910328,1446910331,A2 -1446910332,1446910335,IQ +1446910312,1446910335,A2 1446910336,1446910339,AF -1446910340,1446910343,IQ -1446910344,1446910347,LY +1446910340,1446910347,A2 1446910348,1446910351,GA -1446910352,1446910355,A2 -1446910356,1446910359,IQ -1446910360,1446910363,AF -1446910364,1446910371,A2 -1446910372,1446910379,AF -1446910380,1446910427,A2 -1446910428,1446910431,IQ -1446910432,1446910439,A2 -1446910440,1446910443,IQ -1446910444,1446910455,A2 -1446910456,1446910459,IQ -1446910460,1446910463,A2 -1446910464,1446910479,LY -1446910480,1446910495,A2 +1446910352,1446910359,A2 +1446910360,1446910363,IQ +1446910364,1446910375,A2 +1446910376,1446910379,AF +1446910380,1446910459,A2 +1446910460,1446910463,LY +1446910464,1446910471,A2 +1446910472,1446910479,LY +1446910480,1446910487,EG +1446910488,1446910495,A2 1446910496,1446910503,NG -1446910504,1446910527,A2 -1446910528,1446910535,AF -1446910536,1446910599,A2 -1446910600,1446910615,NG -1446910616,1446910623,A2 -1446910624,1446910631,AF -1446910632,1446910695,A2 +1446910504,1446910599,A2 +1446910600,1446910607,NG +1446910608,1446910623,A2 +1446910624,1446910639,AF +1446910640,1446910695,A2 1446910696,1446910711,SD -1446910712,1446910719,AE -1446910720,1446910723,A2 -1446910724,1446910727,IQ +1446910712,1446910727,A2 1446910728,1446910731,AF 1446910732,1446910739,A2 1446910740,1446910747,AF -1446910748,1446910751,A2 -1446910752,1446910755,LY -1446910756,1446910767,IQ -1446910768,1446910771,A2 -1446910772,1446910775,AF -1446910776,1446910779,IQ -1446910780,1446910787,A2 -1446910788,1446910791,IQ -1446910792,1446910799,A2 +1446910748,1446910767,A2 +1446910768,1446910775,AF +1446910776,1446910791,A2 +1446910792,1446910795,LY +1446910796,1446910799,A2 1446910800,1446910807,IQ 1446910808,1446910815,A2 1446910816,1446910819,IQ @@ -40955,264 +49335,200 @@ 1446910836,1446910839,AF 1446910840,1446910843,A2 1446910844,1446910847,NG -1446910848,1446910855,IQ -1446910856,1446910883,A2 -1446910884,1446910887,IQ -1446910888,1446910899,A2 -1446910900,1446910903,IQ -1446910904,1446910907,A2 -1446910908,1446910911,IQ -1446910912,1446910927,A2 -1446910928,1446910931,NG -1446910932,1446910935,A2 -1446910936,1446910943,IQ -1446910944,1446910947,A2 -1446910948,1446910955,IQ +1446910848,1446910851,IQ +1446910852,1446910887,A2 +1446910888,1446910891,LY +1446910892,1446910911,A2 +1446910912,1446910915,IQ +1446910916,1446910919,A2 +1446910920,1446910923,AF +1446910924,1446910931,A2 +1446910932,1446910939,IQ +1446910940,1446910951,A2 +1446910952,1446910955,IQ 1446910956,1446910963,A2 1446910964,1446910967,AF -1446910968,1446910971,IQ +1446910968,1446910971,A2 1446910972,1446910975,AF 1446910976,1446910979,IQ -1446910980,1446910991,AF -1446910992,1446910999,IQ +1446910980,1446910983,A2 +1446910984,1446910991,AF +1446910992,1446910995,A2 +1446910996,1446910999,IQ 1446911000,1446911003,A2 1446911004,1446911007,IQ -1446911008,1446911011,LY -1446911012,1446911015,A2 +1446911008,1446911015,A2 1446911016,1446911023,IQ 1446911024,1446911027,LY -1446911028,1446911035,AF -1446911036,1446911039,LY -1446911040,1446911043,A2 -1446911044,1446911047,IQ -1446911048,1446911051,LY -1446911052,1446911055,AF -1446911056,1446911059,A2 -1446911060,1446911067,IQ -1446911068,1446911075,A2 -1446911076,1446911079,IQ -1446911080,1446911087,LY -1446911088,1446911091,A2 -1446911092,1446911095,IQ +1446911028,1446911031,AF +1446911032,1446911083,A2 +1446911084,1446911087,LY +1446911088,1446911095,A2 1446911096,1446911099,NG -1446911100,1446911103,IQ -1446911104,1446911111,SD -1446911112,1446911115,A2 -1446911116,1446911135,SD -1446911136,1446911143,A2 +1446911100,1446911111,A2 +1446911112,1446911115,SD +1446911116,1446911123,A2 +1446911124,1446911143,LY 1446911144,1446911147,TD 1446911148,1446911163,A2 1446911164,1446911171,IQ -1446911172,1446911175,A2 -1446911176,1446911179,IQ -1446911180,1446911191,A2 -1446911192,1446911203,IQ -1446911204,1446911207,A2 -1446911208,1446911219,IQ -1446911220,1446911223,A2 +1446911172,1446911207,A2 +1446911208,1446911215,IQ +1446911216,1446911223,A2 1446911224,1446911227,AF -1446911228,1446911231,LY -1446911232,1446911239,IQ -1446911240,1446911243,A2 -1446911244,1446911247,LY -1446911248,1446911251,A2 -1446911252,1446911255,IQ -1446911256,1446911259,A2 +1446911228,1446911235,A2 +1446911236,1446911239,IQ +1446911240,1446911255,A2 +1446911256,1446911259,LY 1446911260,1446911263,AF 1446911264,1446911267,IQ 1446911268,1446911271,AF -1446911272,1446911283,A2 -1446911284,1446911287,IQ -1446911288,1446911291,LY -1446911292,1446911295,IQ -1446911296,1446911299,GH -1446911300,1446911303,IQ -1446911304,1446911311,A2 -1446911312,1446911315,LY -1446911316,1446911319,IQ -1446911320,1446911323,A2 -1446911324,1446911327,IQ -1446911328,1446911331,NG -1446911332,1446911335,ZM -1446911336,1446911339,IQ -1446911340,1446911343,AF -1446911344,1446911347,A2 +1446911272,1446911303,A2 +1446911304,1446911307,IQ +1446911308,1446911319,A2 +1446911320,1446911323,AF +1446911324,1446911343,A2 +1446911344,1446911347,IQ 1446911348,1446911351,LY -1446911352,1446911355,IQ -1446911356,1446911359,A2 -1446911360,1446911363,IQ -1446911364,1446911367,A2 -1446911368,1446911371,LY -1446911372,1446911375,A2 -1446911376,1446911379,LY -1446911380,1446911387,A2 -1446911388,1446911395,LY -1446911396,1446911399,A2 -1446911400,1446911403,LY +1446911352,1446911363,A2 +1446911364,1446911367,LY +1446911368,1446911395,A2 +1446911396,1446911399,AF +1446911400,1446911403,A2 1446911404,1446911407,AF -1446911408,1446911415,A2 -1446911416,1446911423,IQ +1446911408,1446911411,LY +1446911412,1446911423,A2 1446911424,1446911427,AF 1446911428,1446911435,A2 1446911436,1446911439,SD -1446911440,1446911447,A2 -1446911448,1446911459,IQ -1446911460,1446911463,A2 -1446911464,1446911467,IQ -1446911468,1446911475,A2 +1446911440,1446911443,A2 +1446911444,1446911447,IQ +1446911448,1446911459,A2 +1446911460,1446911463,LY +1446911464,1446911475,A2 1446911476,1446911479,ER 1446911480,1446911483,CG -1446911484,1446911503,A2 -1446911504,1446911507,IQ -1446911508,1446911515,A2 -1446911516,1446911523,IQ -1446911524,1446911527,A2 -1446911528,1446911531,IQ -1446911532,1446911539,A2 -1446911540,1446911543,IQ +1446911484,1446911487,A2 +1446911488,1446911491,LY +1446911492,1446911507,A2 +1446911508,1446911511,AF +1446911512,1446911515,EG +1446911516,1446911535,A2 +1446911536,1446911539,SD +1446911540,1446911543,LY 1446911544,1446911547,AF -1446911548,1446911551,LY -1446911552,1446911559,AF -1446911560,1446911567,A2 +1446911548,1446911559,A2 +1446911560,1446911563,LY +1446911564,1446911567,A2 1446911568,1446911571,IQ -1446911572,1446911575,LY -1446911576,1446911579,IQ -1446911580,1446911587,A2 -1446911588,1446911591,IQ -1446911592,1446911595,A2 -1446911596,1446911597,LY -1446911598,1446911615,A2 +1446911572,1446911579,A2 +1446911580,1446911583,CG +1446911584,1446911587,A2 +1446911588,1446911591,LY +1446911592,1446911595,AF +1446911596,1446911599,A2 +1446911600,1446911603,LY +1446911604,1446911615,A2 1446911616,1446911619,LY -1446911620,1446911623,GH +1446911620,1446911623,A2 1446911624,1446911627,IQ 1446911628,1446911631,AF -1446911632,1446911635,A2 -1446911636,1446911639,IQ -1446911640,1446911647,A2 -1446911648,1446911651,ZM -1446911652,1446911655,A2 -1446911656,1446911659,IQ -1446911660,1446911671,A2 -1446911672,1446911675,LY -1446911676,1446911679,IQ +1446911632,1446911635,IQ +1446911636,1446911679,A2 1446911680,1446911683,SD -1446911684,1446911687,A2 -1446911688,1446911691,LY -1446911692,1446911695,AF +1446911684,1446911691,A2 +1446911692,1446911695,LY 1446911696,1446911699,A2 -1446911700,1446911707,LY -1446911708,1446911711,IQ -1446911712,1446911715,LY -1446911716,1446911719,IQ -1446911720,1446911723,LY -1446911724,1446911727,IQ -1446911728,1446911739,LY -1446911740,1446911747,A2 -1446911748,1446911751,IQ -1446911752,1446911759,LY -1446911760,1446911763,IQ -1446911764,1446911767,A2 -1446911768,1446911771,AF -1446911772,1446911779,IQ +1446911700,1446911701,LY +1446911702,1446911739,A2 +1446911740,1446911743,LY +1446911744,1446911751,IQ +1446911752,1446911763,A2 +1446911764,1446911767,LY +1446911768,1446911771,A2 +1446911772,1446911775,AF +1446911776,1446911779,A2 1446911780,1446911783,AF -1446911784,1446911787,LY +1446911784,1446911787,A2 1446911788,1446911791,AF -1446911792,1446911795,LY -1446911796,1446911803,A2 -1446911804,1446911811,LY -1446911812,1446911815,IQ -1446911816,1446911819,LY -1446911820,1446911827,IQ -1446911828,1446911835,A2 +1446911792,1446911795,A2 +1446911796,1446911799,IQ +1446911800,1446911803,NG +1446911804,1446911819,A2 +1446911820,1446911823,IQ +1446911824,1446911827,A2 +1446911828,1446911831,IQ +1446911832,1446911835,A2 1446911836,1446911843,IQ 1446911844,1446911847,A2 -1446911848,1446911851,IQ -1446911852,1446911855,A2 +1446911848,1446911855,IQ 1446911856,1446911859,AF -1446911860,1446911863,A2 -1446911864,1446911867,IQ +1446911860,1446911867,A2 1446911868,1446911871,LY -1446911872,1446911879,A2 -1446911880,1446911883,IQ -1446911884,1446911887,NG -1446911888,1446911891,IQ -1446911892,1446911895,A2 -1446911896,1446911899,IQ -1446911900,1446911903,A2 +1446911872,1446911875,AF +1446911876,1446911903,A2 1446911904,1446911907,AF -1446911908,1446911911,IQ -1446911912,1446911923,A2 -1446911924,1446911927,IQ -1446911928,1446911935,A2 -1446911936,1446911939,IQ -1446911940,1446911943,A2 -1446911944,1446911955,IQ -1446911956,1446911959,A2 -1446911960,1446911967,IQ -1446911968,1446911975,A2 -1446911976,1446911987,IQ -1446911988,1446911991,AF -1446911992,1446911995,A2 -1446911996,1446911999,IQ -1446912000,1446912003,BJ +1446911908,1446911947,A2 +1446911948,1446911951,IQ +1446911952,1446911955,A2 +1446911956,1446911959,IQ +1446911960,1446911963,A2 +1446911964,1446911967,IQ +1446911968,1446911987,A2 +1446911988,1446911995,AF +1446911996,1446912003,A2 1446912004,1446912007,AF -1446912008,1446912011,IQ -1446912012,1446912015,A2 -1446912016,1446912019,BJ -1446912020,1446912023,ZM -1446912024,1446912027,A2 +1446912008,1446912011,A2 +1446912012,1446912015,IQ +1446912016,1446912027,A2 1446912028,1446912031,AF -1446912032,1446912035,IQ +1446912032,1446912035,A2 1446912036,1446912039,AF -1446912040,1446912047,A2 -1446912048,1446912051,IQ +1446912040,1446912043,IQ +1446912044,1446912047,CG +1446912048,1446912051,AF 1446912052,1446912055,ER 1446912056,1446912059,A2 1446912060,1446912063,NG 1446912064,1446912067,AF -1446912068,1446912071,IQ -1446912072,1446912075,AE +1446912068,1446912071,A2 +1446912072,1446912075,IQ 1446912076,1446912079,A2 1446912080,1446912083,IQ -1446912084,1446912087,A2 -1446912088,1446912091,IQ -1446912092,1446912095,LY -1446912096,1446912099,AF -1446912100,1446912107,IQ -1446912108,1446912111,A2 -1446912112,1446912115,IQ +1446912084,1446912087,AF +1446912088,1446912095,A2 +1446912096,1446912103,AF +1446912104,1446912115,A2 1446912116,1446912119,LY -1446912120,1446912123,A2 -1446912124,1446912127,LY -1446912128,1446912139,A2 -1446912140,1446912143,IQ -1446912144,1446912147,AF -1446912148,1446912151,IQ -1446912152,1446912163,A2 +1446912120,1446912151,A2 +1446912152,1446912155,CF +1446912156,1446912163,A2 1446912164,1446912167,IQ -1446912168,1446912179,A2 -1446912180,1446912183,ZM +1446912168,1446912183,A2 1446912184,1446912187,AF -1446912188,1446912195,IQ -1446912196,1446912211,A2 -1446912212,1446912219,IQ -1446912220,1446912223,LY -1446912224,1446912235,IQ -1446912236,1446912243,A2 -1446912244,1446912247,IQ +1446912188,1446912191,IQ +1446912192,1446912195,A2 +1446912196,1446912203,IQ +1446912204,1446912215,A2 +1446912216,1446912219,IQ +1446912220,1446912239,A2 +1446912240,1446912247,IQ 1446912248,1446912251,AF -1446912252,1446912255,A2 +1446912252,1446912255,IQ 1446912256,1446912263,AF 1446912264,1446912295,IQ -1446912296,1446912303,AF -1446912304,1446912319,A2 +1446912296,1446912311,AF +1446912312,1446912319,A2 1446912320,1446912335,IQ 1446912336,1446912343,KW 1446912344,1446912367,IQ 1446912368,1446912375,A2 1446912376,1446912391,AF 1446912392,1446912399,GA -1446912400,1446920191,A2 +1446912400,1446912415,AF +1446912416,1446912423,A2 +1446912424,1446912431,AF +1446912432,1446920191,A2 1446920192,1446936575,RU 1446936576,1446952959,NO 1446952960,1446969343,QA @@ -41231,54 +49547,7 @@ 1449459712,1449525247,HU 1449525248,1449590783,RU 1449590784,1449656319,DE -1449656320,1449657087,GB -1449657088,1449658623,RO -1449658624,1449659135,GB -1449659136,1449660415,RO -1449660416,1449662463,GB -1449662464,1449676799,RO -1449676800,1449678847,GB -1449678848,1449685759,RO -1449685760,1449686271,GB -1449686272,1449686527,RO -1449686528,1449687039,GB -1449687040,1449687295,RO -1449687296,1449688063,GB -1449688064,1449690111,RO -1449690112,1449690623,GB -1449690624,1449705471,RO -1449705472,1449705727,GB -1449705728,1449706239,RO -1449706240,1449706495,GB -1449706496,1449707519,RO -1449707520,1449709567,GB -1449709568,1449710591,RO -1449710592,1449711103,GB -1449711104,1449711359,RO -1449711360,1449711615,GB -1449711616,1449717759,RO -1449717760,1449718783,GB -1449718784,1449767423,RO -1449767424,1449767679,GB -1449767680,1449773055,RO -1449773056,1449774079,GB -1449774080,1449776383,RO -1449776384,1449776639,GB -1449776640,1449779967,RO -1449779968,1449780223,GB -1449780224,1449780735,RO -1449780736,1449780991,GB -1449780992,1449783807,RO -1449783808,1449784319,GB -1449784320,1449785343,RO -1449785344,1449786367,GB -1449786368,1449787391,RO -1449787392,1449790207,GB -1449790208,1449790719,RO -1449790720,1449791487,GB -1449791488,1449795327,RO -1449795328,1449795583,GB -1449795584,1449808639,RO +1449656320,1449808639,RO 1449808640,1449808895,UA 1449808896,1449840639,RO 1449840640,1449852927,MD @@ -41303,10 +49572,15 @@ 1450090496,1450106879,RU 1450106880,1450115071,SK 1450115072,1450123263,RU -1450123264,1450131455,AT +1450123264,1450125231,AT +1450125232,1450125239,DE +1450125240,1450125247,US +1450125248,1450131455,AT 1450131456,1450139647,UA 1450139648,1450147839,PL -1450147840,1450156031,RU +1450147840,1450151935,CH +1450151936,1450153983,IQ +1450153984,1450156031,DE 1450156032,1450164223,GB 1450164224,1450166271,SA 1450166272,1450168319,PL @@ -41331,7 +49605,11 @@ 1464074240,1464336383,IL 1464336384,1464467455,DK 1464467456,1464598527,GB -1464598528,1464860671,DE +1464598528,1464602623,RU +1464602624,1464606719,GB +1464606720,1464614911,KZ +1464614912,1464664063,UA +1464664064,1464860671,DE 1464860672,1465384959,GB 1465384960,1465647103,FR 1465647104,1465909247,FI @@ -41363,7 +49641,9 @@ 1466265600,1466269695,HU 1466269696,1466302463,SA 1466302464,1466335231,GB -1466335232,1466367631,CH +1466335232,1466367119,CH +1466367120,1466367127,GR +1466367128,1466367631,CH 1466367632,1466367639,AT 1466367640,1466367999,CH 1466368000,1466400767,PT @@ -41376,8 +49656,7 @@ 1466592256,1466592511,FR 1466592512,1466592767,GB 1466592768,1466592895,FR -1466592896,1466593023,DE -1466593024,1466593279,GB +1466592896,1466593279,GB 1466593280,1466604799,DE 1466604800,1466605055,ES 1466605056,1466606847,DE @@ -41408,19 +49687,16 @@ 1467301888,1467318271,GB 1467318272,1467334655,RU 1467334656,1467340959,GB -1467340960,1467340991,TR +1467340960,1467340991,US 1467340992,1467344639,GB 1467344640,1467344895,ZA -1467344896,1467347903,GB -1467347904,1467347935,SE -1467347936,1467351039,GB +1467344896,1467351039,GB 1467351040,1467367423,NO 1467367424,1467367615,DE 1467367616,1467367647,SE 1467367648,1467367679,DE 1467367680,1467367695,IT -1467367696,1467367807,DE -1467367808,1467367871,CZ +1467367696,1467367871,DE 1467367872,1467367903,SE 1467367904,1467367935,DE 1467367936,1467368191,SI @@ -41429,16 +49705,17 @@ 1467368448,1467368703,DK 1467368704,1467369519,DE 1467369520,1467369535,RU -1467369536,1467369599,DE -1467369600,1467369663,IT -1467369664,1467369727,AT -1467369728,1467369759,DE +1467369536,1467369647,DE +1467369648,1467369663,CH +1467369664,1467369759,DE 1467369760,1467369791,HR 1467369792,1467369855,SE 1467369856,1467369871,RU 1467369872,1467369887,DE 1467369888,1467369903,RU -1467369904,1467383807,DE +1467369904,1467369919,DE +1467369920,1467369951,SG +1467369952,1467383807,DE 1467383808,1467400191,BG 1467400192,1467416575,RU 1467416576,1467432959,PL @@ -41451,26 +49728,21 @@ 1467465800,1467465807,AT 1467465808,1467465823,NL 1467465824,1467465855,AT -1467465856,1467466015,NL +1467465856,1467465983,DE +1467465984,1467466015,NL 1467466016,1467466023,DE 1467466024,1467466031,AT 1467466032,1467466111,NL 1467466112,1467466143,DE 1467466144,1467466175,NL -1467466176,1467466191,DE -1467466192,1467466207,NL -1467466208,1467466215,DE +1467466176,1467466215,DE 1467466216,1467466223,VG 1467466224,1467466239,NL 1467466240,1467466271,DE 1467466272,1467466495,NL 1467466496,1467467071,DE 1467467072,1467467103,CH -1467467104,1467467903,DE -1467467904,1467468031,CH -1467468032,1467468111,DE -1467468112,1467468119,BR -1467468120,1467473919,DE +1467467104,1467473919,DE 1467473920,1467482111,RU 1467482112,1467613183,BG 1467613184,1467744255,DE @@ -41487,7 +49759,11 @@ 1472259256,1472264799,IE 1472264800,1472264807,GB 1472264808,1472266239,IE -1472266240,1472331775,DE +1472266240,1472314335,DE +1472314336,1472314343,A2 +1472314344,1472330699,DE +1472330700,1472330700,A2 +1472330701,1472331775,DE 1472331776,1472397311,GB 1472397312,1472462847,NL 1472462848,1472528383,PT @@ -41521,7 +49797,9 @@ 1474944536,1474953215,NL 1474953216,1474966473,DE 1474966474,1474966474,A2 -1474966475,1475018751,DE +1474966475,1474968895,DE +1474968896,1474968903,A2 +1474968904,1475018751,DE 1475018752,1475084287,ES 1475084288,1475086335,NL 1475086336,1475092479,RU @@ -41533,16 +49811,13 @@ 1475102208,1475102719,GB 1475102720,1475104767,FR 1475104768,1475106815,RU -1475106816,1475108863,GB 1475108864,1475110911,NL 1475110912,1475112959,DE 1475112960,1475115007,AT 1475115008,1475117055,KW 1475117056,1475119103,GB 1475119104,1475121151,BH -1475121152,1475121919,GB -1475121920,1475122175,US -1475122176,1475123199,GB +1475121152,1475123199,GB 1475123200,1475125247,FI 1475125248,1475127295,IT 1475127296,1475129343,FI @@ -41550,7 +49825,8 @@ 1475131392,1475133439,RU 1475133440,1475135487,CZ 1475135488,1475137535,CH -1475137536,1475139583,SE +1475137536,1475139583,GB +1475139584,1475141631,ES 1475141632,1475143679,FI 1475143680,1475145727,JO 1475145728,1475147775,ES @@ -41578,8 +49854,11 @@ 1475181536,1475181551,NL 1475181552,1475181855,DE 1475181856,1475181887,LU -1475181888,1475184639,DE +1475181888,1475182079,DE +1475182080,1475182335,RO +1475182336,1475184639,DE 1475184640,1475186687,RU +1475186688,1475188735,GB 1475188736,1475190783,SE 1475190784,1475192831,GB 1475192832,1475194879,CH @@ -41621,19 +49900,15 @@ 1475208192,1475209215,AE 1475209216,1475211263,UZ 1475211264,1475213311,DE -1475213312,1475214335,FR -1475214336,1475214399,GB -1475214400,1475214847,FR -1475214848,1475214975,GB -1475214976,1475215103,FR -1475215104,1475215167,GB -1475215168,1475215359,FR +1475213312,1475215359,FR 1475215360,1475223551,IT 1475223552,1475229695,NO 1475229696,1475229759,SE 1475229760,1475229951,NO -1475229952,1475230111,SE -1475230112,1475233791,NO +1475229952,1475230223,SE +1475230224,1475230271,NO +1475230272,1475230303,SE +1475230304,1475233791,NO 1475233792,1475234303,GB 1475234304,1475234559,IE 1475234560,1475235839,GB @@ -41643,12 +49918,11 @@ 1475241984,1475242239,MC 1475242240,1475243775,FR 1475243776,1475244031,MC -1475244032,1475245055,DE -1475245056,1475245183,IE +1475244032,1475244287,DE +1475244288,1475244543,SD +1475244544,1475245183,DE 1475245184,1475245311,SD -1475245312,1475245567,DE -1475245568,1475246078,SA -1475246079,1475246079,DE +1475245312,1475246079,DE 1475246080,1475248127,CH 1475248128,1475250175,JO 1475250176,1475252223,DE @@ -41693,6 +49967,7 @@ 1475287040,1475291135,RU 1475291136,1475293183,PL 1475293184,1475295231,GB +1475295232,1475297279,SK 1475297280,1475299327,DK 1475299328,1475301375,PL 1475301376,1475303423,LT @@ -41701,7 +49976,8 @@ 1475307520,1475309567,RU 1475309568,1475311615,LT 1475311616,1475313663,FI -1475313664,1475317759,DE +1475313664,1475315711,DE +1475315712,1475317759,US 1475317760,1475319807,RU 1475319808,1475321855,BG 1475321856,1475323903,RO @@ -41719,9 +49995,9 @@ 1475362816,1475379199,FR 1475379200,1475395583,RU 1475395584,1475411967,LU -1475411968,1475412471,IT -1475412472,1475412479,ES -1475412480,1475417975,IT +1475411968,1475412383,IT +1475412384,1475412391,ES +1475412392,1475417975,IT 1475417976,1475417983,A2 1475417984,1475428351,IT 1475428352,1475444735,SE @@ -41731,13 +50007,17 @@ 1475493888,1475510271,RU 1475510272,1475543039,GB 1475543040,1475559423,RO -1475559424,1475575807,GR +1475559424,1475562751,GR +1475562752,1475563007,BG +1475563008,1475571711,GR +1475571712,1475572735,BG +1475572736,1475575807,GR 1475575808,1475592191,AT 1475592192,1475608575,GB 1475608576,1475624959,RU 1475624960,1475627519,JE -1475627520,1475627662,GB -1475627663,1475627663,JE +1475627520,1475627655,GB +1475627656,1475627663,JE 1475627664,1475627688,GB 1475627689,1475627695,JE 1475627696,1475627775,GB @@ -41756,15 +50036,13 @@ 1475636400,1475636415,JE 1475636416,1475636431,GB 1475636432,1475636447,JE -1475636448,1475637479,GB -1475637480,1475637487,JE -1475637488,1475637503,GB +1475636448,1475636479,GB +1475636480,1475636735,JE +1475636736,1475637503,GB 1475637504,1475638783,JE 1475638784,1475639182,GB 1475639183,1475639183,JE -1475639184,1475639199,GB -1475639200,1475639207,JE -1475639208,1475639216,GB +1475639184,1475639216,GB 1475639217,1475639223,JE 1475639224,1475639263,GB 1475639264,1475639271,BB @@ -41777,31 +50055,65 @@ 1475639528,1475639543,JE 1475639544,1475639595,GB 1475639596,1475639599,JE -1475639600,1475639727,GB -1475639728,1475639735,JE -1475639736,1475639775,GB -1475639776,1475639783,JE -1475639784,1475639807,GB +1475639600,1475639807,GB 1475639808,1475641343,JE 1475641344,1475657727,UA -1475657728,1475664263,SK -1475664264,1475664271,UA -1475664272,1475674111,SK +1475657728,1475674111,SK 1475674112,1475690495,DE 1475690496,1475706879,CH 1475706880,1475723263,RU 1475723264,1475725311,CY 1475725312,1475725951,RU -1475725952,1475726591,GB -1475726592,1475726719,RU -1475726720,1475727103,GB +1475725952,1475726207,GB +1475726208,1475726335,RU +1475726336,1475726463,GB +1475726464,1475726527,RU +1475726528,1475726591,GB +1475726592,1475726847,RU +1475726848,1475727103,GB 1475727104,1475727167,RU 1475727168,1475727343,GB 1475727344,1475727359,RU 1475727360,1475727391,FI -1475727392,1475729407,GB +1475727392,1475727615,GB +1475727616,1475727623,FI +1475727624,1475727631,GB +1475727632,1475727639,FI +1475727640,1475727807,GB +1475727808,1475727871,FI +1475727872,1475729087,GB +1475729088,1475729103,DE +1475729104,1475729151,GB +1475729152,1475729215,AT +1475729216,1475729407,GB 1475729408,1475731455,UA -1475731456,1475739647,GB +1475731456,1475732479,GB +1475732480,1475732991,RU +1475732992,1475734783,GB +1475734784,1475734911,UA +1475734912,1475735295,GB +1475735296,1475735551,UA +1475735552,1475735807,US +1475735808,1475735999,RU +1475736000,1475736063,GB +1475736064,1475736127,LV +1475736128,1475736191,EE +1475736192,1475736255,GB +1475736256,1475736319,HU +1475736320,1475736447,RU +1475736448,1475736575,UA +1475736576,1475736831,RU +1475736832,1475736959,GB +1475736960,1475737023,FR +1475737024,1475737087,PL +1475737088,1475737151,NL +1475737152,1475737215,CZ +1475737216,1475737279,DE +1475737280,1475737343,AT +1475737344,1475737599,UA +1475737600,1475737855,FI +1475737856,1475738111,SE +1475738112,1475739647,RU 1475739648,1475756031,BG 1475756032,1475772415,GB 1475772416,1475788799,LV @@ -41811,7 +50123,8 @@ 1475837952,1475846143,GB 1475846144,1475854335,IR 1475854336,1475862527,AT -1475862528,1475866623,IT +1475862528,1475864575,FR +1475864576,1475866623,IT 1475866624,1475868671,GB 1475868672,1475870719,BG 1475870720,1475878911,NO @@ -41907,7 +50220,10 @@ 1476304896,1476313087,BG 1476313088,1476315135,FI 1476315136,1476316159,US -1476316160,1476321279,FI +1476316160,1476316671,SG +1476316672,1476317183,FI +1476317184,1476321151,DE +1476321152,1476321279,FI 1476321280,1476329471,MC 1476329472,1476337663,RU 1476337664,1476345855,NL @@ -41935,7 +50251,9 @@ 1481711616,1481719807,RU 1481719808,1481727999,CZ 1481728000,1481736191,IE -1481736192,1481744383,GG +1481736192,1481741823,GG +1481741824,1481742079,GB +1481742080,1481744383,GG 1481744384,1481752575,IT 1481752576,1481760767,RU 1481760768,1481768959,UA @@ -42085,21 +50403,10 @@ 1486317568,1486320383,RU 1486320384,1486320639,US 1486320640,1486321663,RU -1486321664,1486321823,EU -1486321824,1486321855,US -1486321856,1486321887,NL -1486321888,1486321919,US -1486321920,1486323199,EU -1486323200,1486323215,US -1486323216,1486323231,NL -1486323232,1486323239,GB -1486323240,1486323447,EU -1486323448,1486323455,GB -1486323456,1486323711,EU +1486321664,1486323711,NL 1486323712,1486325759,GB -1486325760,1486327807,SA +1486325760,1486327807,PL 1486327808,1486329855,CH -1486329856,1486331903,FR 1486331904,1486333951,NO 1486333952,1486335999,SE 1486336000,1486338047,KZ @@ -42124,7 +50431,11 @@ 1489240064,1489305599,EE 1489305600,1489338367,GR 1489338368,1489371135,BE -1489371136,1489402239,DE +1489371136,1489389391,DE +1489389392,1489389399,IT +1489389400,1489392767,DE +1489392768,1489392775,IT +1489392776,1489402239,DE 1489402240,1489402367,TR 1489402368,1489404767,DE 1489404768,1489404775,IT @@ -42149,7 +50460,9 @@ 1489638656,1489638911,FR 1489638912,1489640703,IT 1489640704,1489640959,FR -1489640960,1489642495,IT +1489640960,1489641727,IT +1489641728,1489641983,HK +1489641984,1489642495,IT 1489642496,1489642751,FR 1489642752,1489644543,IT 1489644544,1489645055,A2 @@ -42163,8 +50476,122 @@ 1489650688,1489651199,A2 1489651200,1489653759,IT 1489653760,1489657855,A2 -1489657856,1489661951,IT -1489661952,1489662719,A2 +1489657856,1489659919,IT +1489659920,1489659935,FR +1489659936,1489659951,DE +1489659952,1489659967,CY +1489659968,1489659983,FI +1489659984,1489659999,GR +1489660000,1489660015,IE +1489660016,1489660031,ES +1489660032,1489660047,PL +1489660048,1489660063,GB +1489660064,1489660079,AD +1489660080,1489660095,AE +1489660096,1489660111,AL +1489660112,1489660127,AM +1489660128,1489660143,AT +1489660144,1489660159,BA +1489660160,1489660175,BE +1489660176,1489660191,BG +1489660192,1489660207,BH +1489660208,1489660223,BY +1489660224,1489660239,CH +1489660240,1489660255,CZ +1489660256,1489660271,DK +1489660272,1489660287,DZ +1489660288,1489660303,EE +1489660304,1489660319,EG +1489660320,1489660335,HR +1489660336,1489660351,HU +1489660352,1489660367,KW +1489660368,1489660383,LI +1489660384,1489660399,LT +1489660400,1489660415,LU +1489660416,1489660431,LV +1489660432,1489660447,LY +1489660448,1489660463,MA +1489660464,1489660479,MC +1489660480,1489660495,MD +1489660496,1489660511,ME +1489660512,1489660527,MK +1489660528,1489660543,MT +1489660544,1489660559,NL +1489660560,1489660575,NO +1489660576,1489660591,OM +1489660592,1489660607,PT +1489660608,1489660623,QA +1489660624,1489660639,RO +1489660640,1489660655,RS +1489660656,1489660671,RU +1489660672,1489660687,SA +1489660688,1489660703,SE +1489660704,1489660719,SI +1489660720,1489660735,SK +1489660736,1489660751,SM +1489660752,1489660767,TN +1489660768,1489660783,TR +1489660784,1489660799,UA +1489660800,1489660815,VA +1489660816,1489660927,A2 +1489660928,1489660943,IT +1489660944,1489660959,FR +1489660960,1489660975,DE +1489660976,1489660991,CY +1489660992,1489661007,FI +1489661008,1489661023,GR +1489661024,1489661039,IE +1489661040,1489661055,ES +1489661056,1489661071,PL +1489661072,1489661087,GB +1489661088,1489661103,AD +1489661104,1489661119,AE +1489661120,1489661135,AL +1489661136,1489661151,AM +1489661152,1489661167,AT +1489661168,1489661183,BA +1489661184,1489661199,BE +1489661200,1489661215,BG +1489661216,1489661231,BH +1489661232,1489661247,BY +1489661248,1489661263,CH +1489661264,1489661279,CZ +1489661280,1489661295,DK +1489661296,1489661311,DZ +1489661312,1489661327,EE +1489661328,1489661343,EG +1489661344,1489661359,HR +1489661360,1489661375,HU +1489661376,1489661391,KW +1489661392,1489661407,LI +1489661408,1489661423,LT +1489661424,1489661439,LU +1489661440,1489661455,LV +1489661456,1489661471,LY +1489661472,1489661487,MA +1489661488,1489661503,MC +1489661504,1489661519,MD +1489661520,1489661535,ME +1489661536,1489661551,MK +1489661552,1489661567,MT +1489661568,1489661583,NL +1489661584,1489661599,NO +1489661600,1489661615,OM +1489661616,1489661631,PT +1489661632,1489661647,QA +1489661648,1489661663,RO +1489661664,1489661679,RS +1489661680,1489661695,RU +1489661696,1489661711,SA +1489661712,1489661727,SE +1489661728,1489661743,SI +1489661744,1489661759,SK +1489661760,1489661775,SM +1489661776,1489661791,TN +1489661792,1489661807,TR +1489661808,1489661823,UA +1489661824,1489661839,VA +1489661840,1489662719,A2 1489662720,1489662975,ZA 1489662976,1489663487,FR 1489663488,1489663999,ES @@ -42177,16 +50604,26 @@ 1489731584,1489764351,BG 1489764352,1489797119,RU 1489797120,1489829887,KZ -1489829888,1489862655,DE +1489829888,1489855495,DE +1489855496,1489855503,CH +1489855504,1489855519,RU +1489855520,1489855543,DE +1489855544,1489855551,PL +1489855552,1489855583,DE +1489855584,1489855615,RU +1489855616,1489855999,DE +1489856000,1489856031,PL +1489856032,1489856063,RU +1489856064,1489862655,DE 1489862656,1489928191,RU 1489928192,1489960959,SE 1489960960,1489993727,HR 1489993728,1490026495,LU 1490026496,1490028543,US 1490028544,1490029055,UA -1490029056,1490040847,NL -1490040848,1490041855,UA -1490041856,1490042879,NL +1490029056,1490040855,NL +1490040856,1490040863,UA +1490040864,1490042879,NL 1490042880,1490049879,CZ 1490049880,1490049887,AT 1490049888,1490049919,CZ @@ -42215,8 +50652,8 @@ 1490196864,1490196895,ES 1490196896,1490196927,HU 1490196928,1490196959,IT -1490196960,1490197247,IE -1490197248,1490206719,GB +1490196960,1490197503,IE +1490197504,1490206719,GB 1490206720,1490223103,GE 1490223104,1490255871,GB 1490255872,1490272255,NL @@ -42244,7 +50681,11 @@ 1490518016,1490534399,RU 1490534400,1490550783,DE 1490550784,1490616319,LT -1490616320,1490681855,DE +1490616320,1490680643,DE +1490680644,1490680647,A2 +1490680648,1490680663,DE +1490680664,1490680667,A2 +1490680668,1490681855,DE 1490681856,1490747391,GR 1490747392,1490812927,FR 1490812928,1490878463,PL @@ -42290,7 +50731,7 @@ 1494294528,1494302719,RU 1494302720,1494310911,FI 1494310912,1494319103,LB -1494319104,1494327295,MT +1494319104,1494327295,IS 1494327296,1494335487,IT 1494335488,1494343679,ES 1494343680,1494351871,PL @@ -42323,7 +50764,9 @@ 1494548480,1494556671,GB 1494556672,1494564863,DE 1494564864,1494573055,UA -1494573056,1494581247,RO +1494573056,1494580479,RO +1494580480,1494580735,HU +1494580736,1494581247,RO 1494581248,1494589439,RU 1494589440,1494594559,NL 1494594560,1494595071,US @@ -42335,6 +50778,20 @@ 1494597376,1494597631,NL 1494597632,1494605823,IT 1494605824,1494614015,GB +1494614016,1494616063,RU +1494616064,1494618111,ES +1494618112,1494622207,RU +1494622208,1494624255,PL +1494624256,1494626303,UA +1494626304,1494630399,RO +1494630400,1494638591,CZ +1494638592,1494646783,DE +1494646784,1494663167,RU +1494663168,1494665215,PL +1494665216,1494667263,UA +1494667264,1494669311,PL +1494669312,1494675455,RU +1494675456,1494679551,UA 1494679552,1494695935,RU 1494695936,1494704127,RS 1494704128,1494736895,RU @@ -42380,8 +50837,12 @@ 1495146496,1495150591,FR 1495150592,1495151103,GB 1495151104,1495151359,NL -1495151360,1495154687,FR -1495154688,1495161599,EU +1495151360,1495153919,FR +1495153920,1495154175,TR +1495154176,1495154687,FR +1495154688,1495160063,EU +1495160064,1495160319,NL +1495160320,1495161599,EU 1495161600,1495161855,FR 1495161856,1495162367,EU 1495162368,1495162879,US @@ -42420,8 +50881,7 @@ 1495209984,1495212031,KZ 1495212032,1495214079,RU 1495214080,1495216127,CZ -1495216128,1495218175,GB -1495218176,1495220223,IT +1495216128,1495220223,IT 1495220224,1495222271,PL 1495222272,1495224319,IT 1495224320,1495228415,RU @@ -42431,13 +50891,19 @@ 1495236608,1495237247,AT 1495237248,1495237255,EU 1495237256,1495237271,AT -1495237272,1495237375,EU +1495237272,1495237311,EU +1495237312,1495237319,AT +1495237320,1495237375,EU 1495237376,1495237711,AT 1495237712,1495237727,NL 1495237728,1495237731,AT -1495237732,1495237759,EU -1495237760,1495237775,AT -1495237776,1495237887,EU +1495237732,1495237739,EU +1495237740,1495237743,AT +1495237744,1495237751,EU +1495237752,1495237775,AT +1495237776,1495237791,EU +1495237792,1495237807,AT +1495237808,1495237887,EU 1495237888,1495238207,AT 1495238208,1495238223,EU 1495238224,1495238231,AT @@ -42457,7 +50923,25 @@ 1495242144,1495242151,ES 1495242152,1495242159,IT 1495242160,1495242167,PL -1495242168,1495242751,FR +1495242168,1495242175,FR +1495242176,1495242183,GB +1495242184,1495242191,IE +1495242192,1495242199,DK +1495242200,1495242207,CZ +1495242208,1495242215,GR +1495242216,1495242223,PT +1495242224,1495242231,RO +1495242232,1495242367,FR +1495242368,1495242375,HU +1495242376,1495242383,BG +1495242384,1495242391,SK +1495242392,1495242399,LT +1495242400,1495242407,LV +1495242408,1495242415,SI +1495242416,1495242423,EE +1495242424,1495242431,FI +1495242432,1495242439,SE +1495242440,1495242751,FR 1495242752,1495244799,MK 1495244800,1495246847,CZ 1495246848,1495248895,IE @@ -42472,57 +50956,37 @@ 1495265280,1495265791,DE 1495265792,1495267327,RU 1495267328,1495269375,SE -1495269376,1495326719,RO +1495269376,1495306239,RO +1495306240,1495308287,GB +1495308288,1495326719,RO 1495326720,1495330815,MD 1495330816,1495334911,RO 1495334912,1495335935,MD 1495335936,1495339007,RO 1495339008,1495343103,MD -1495343104,1495345151,GB -1495345152,1495347199,RO -1495347200,1495349247,GB -1495349248,1495399935,RO +1495343104,1495399935,RO 1495399936,1495400191,MD -1495400192,1495513087,RO -1495513088,1495515135,GB -1495515136,1495615487,RO -1495615488,1495616511,GB -1495616512,1495623679,RO +1495400192,1495623679,RO 1495623680,1495623935,MD -1495623936,1495647743,RO -1495647744,1495648255,MD -1495648256,1495669759,RO -1495669760,1495670783,GB -1495670784,1495752703,RO +1495623936,1495752703,RO 1495752704,1495754751,ES 1495754752,1495801855,RO 1495801856,1495802879,GB 1495802880,1495875583,RO 1495875584,1495891967,MD -1495891968,1495896063,RO -1495896064,1495898111,GB -1495898112,1495927295,RO +1495891968,1495927295,RO 1495927296,1495927551,AE 1495927552,1495937023,RO -1495937024,1495937535,ES -1495937536,1495986175,RO -1495986176,1495988223,GB -1495988224,1495992319,RO -1495992320,1495994367,GB -1495994368,1496074239,RO -1496074240,1496075263,GB -1496075264,1496078335,RO +1495937024,1495937535,SE +1495937536,1496078335,RO 1496078336,1496079359,MD -1496079360,1496080383,RO -1496080384,1496081407,GB -1496081408,1496119295,RO -1496119296,1496121343,GB +1496079360,1496121343,RO 1496121344,1496122367,MD 1496122368,1496178943,RO 1496178944,1496179199,AE -1496179200,1496195071,RO -1496195072,1496197119,GB -1496197120,1496317951,RO +1496179200,1496262655,RO +1496262656,1496263167,AE +1496263168,1496317951,RO 1496317952,1497366527,DE 1497366528,1498415103,PL 1498415104,1499463679,FR @@ -42542,9 +51006,7 @@ 1500078080,1500086271,GB 1500086272,1500094463,RU 1500094464,1500102655,AT -1500102656,1500104063,NL -1500104064,1500104071,DE -1500104072,1500106527,NL +1500102656,1500106527,NL 1500106528,1500106559,DE 1500106560,1500107415,NL 1500107416,1500107423,DE @@ -42560,7 +51022,9 @@ 1500108160,1500108287,DE 1500108288,1500108319,NL 1500108320,1500108351,DE -1500108352,1500110847,NL +1500108352,1500108367,NL +1500108368,1500108375,DE +1500108376,1500110847,NL 1500110848,1500119039,UA 1500119040,1500127231,TR 1500127232,1500135423,FI @@ -42587,9 +51051,7 @@ 1500174336,1500176383,DE 1500176384,1500178431,GB 1500178432,1500180479,KZ -1500180480,1500180619,NL -1500180620,1500181503,BE -1500181504,1500182527,NL +1500180480,1500182527,BE 1500182528,1500184575,RU 1500184576,1500184831,GB 1500184832,1500184895,IM @@ -42688,23 +51150,24 @@ 1502606336,1502609407,SI 1502609408,1502624030,DE 1502624031,1502624047,IR -1502624048,1502624063,DE -1502624064,1502624127,IR -1502624128,1502625791,DE +1502624048,1502625791,DE 1502625792,1502642175,SA 1502642176,1502658559,IR 1502658560,1502674943,AT 1502674944,1502691327,DE 1502691328,1502691679,GB 1502691680,1502691711,SE -1502691712,1502692415,GB -1502692416,1502692479,ES -1502692480,1502706623,GB +1502691712,1502702835,GB +1502702836,1502702839,IE +1502702840,1502703103,GB +1502703104,1502703615,SE +1502703616,1502706623,GB 1502706624,1502706687,CY -1502706688,1502707631,GB -1502707632,1502707639,IE -1502707640,1502707711,GB -1502707712,1502724095,RU +1502706688,1502707711,GB +1502707712,1502715903,RU +1502715904,1502717951,IT +1502717952,1502719999,GB +1502720000,1502722047,CH 1502724096,1502740479,GB 1502740480,1502756863,NL 1502756864,1502773247,UZ @@ -42731,18 +51194,18 @@ 1502969856,1502975231,US 1502975232,1502975247,FR 1502975248,1502975263,IE -1502975264,1502975311,FR +1502975264,1502975295,GB +1502975296,1502975311,FR 1502975312,1502975319,IE -1502975320,1502975327,FR -1502975328,1502975367,IE +1502975320,1502975359,FR +1502975360,1502975367,IE 1502975368,1502975383,FR 1502975384,1502975391,ES 1502975392,1502975423,FR 1502975424,1502975455,GB 1502975456,1502975487,IE 1502975488,1502975743,ES -1502975744,1502975775,IE -1502975776,1502975999,FR +1502975744,1502975999,FR 1502976000,1502977055,US 1502977056,1502977151,FR 1502977152,1502979071,US @@ -42762,12 +51225,14 @@ 1502981120,1502981887,US 1502981888,1502982143,NL 1502982144,1502982911,DE -1502982912,1502983679,FR -1502983680,1502986255,DE +1502982912,1502983167,FR +1502983168,1502986255,DE 1502986256,1502986495,TR 1502986496,1502986511,DE 1502986512,1502986751,PL -1502986752,1502987775,DE +1502986752,1502987535,DE +1502987536,1502987551,AE +1502987552,1502987775,DE 1502987776,1502988031,TR 1502988032,1502989055,DE 1502989056,1502989567,TR @@ -42807,13 +51272,20 @@ 1503789056,1503821823,NO 1503821824,1503854591,UA 1503854592,1503887359,RU -1503887360,1503895631,DE +1503887360,1503895599,DE +1503895600,1503895607,BE +1503895608,1503895631,DE 1503895632,1503895639,AT 1503895640,1503895647,GR -1503895648,1503895671,DE +1503895648,1503895663,DE +1503895664,1503895671,FR 1503895672,1503895679,PL 1503895680,1503895687,IT -1503895688,1503895767,DE +1503895688,1503895695,DE +1503895696,1503895703,GB +1503895704,1503895751,DE +1503895752,1503895759,IT +1503895760,1503895767,DE 1503895768,1503895783,IT 1503895784,1503895799,DE 1503895800,1503895807,CA @@ -42830,17 +51302,22 @@ 1503896544,1503896551,FR 1503896552,1503897303,DE 1503897304,1503897311,BE -1503897312,1503897367,DE +1503897312,1503897335,DE +1503897336,1503897343,PT +1503897344,1503897367,DE 1503897368,1503897375,BE -1503897376,1503897391,GR -1503897392,1503897407,DE +1503897376,1503897383,GR +1503897384,1503897407,DE 1503897408,1503897415,IT 1503897416,1503897431,DE 1503897432,1503897439,IT 1503897440,1503897463,DE 1503897464,1503897471,GR 1503897472,1503897479,AT -1503897480,1503897583,DE +1503897480,1503897487,BE +1503897488,1503897519,DE +1503897520,1503897527,IT +1503897528,1503897583,DE 1503897584,1503897591,GB 1503897592,1503898119,DE 1503898120,1503898135,TH @@ -42854,31 +51331,67 @@ 1503898216,1503898239,DE 1503898240,1503898303,IT 1503898304,1503898311,BE -1503898312,1503898327,DE -1503898328,1503898335,AT -1503898336,1503898351,DE +1503898312,1503898351,DE 1503898352,1503898359,CH 1503898360,1503898415,DE -1503898416,1503898423,BE -1503898424,1503898431,CH +1503898416,1503898431,BE 1503898432,1503898503,DE 1503898504,1503898511,GR 1503898512,1503898567,DE 1503898568,1503898575,NL -1503898576,1503898583,GR -1503898584,1503898599,DE +1503898576,1503898599,DE 1503898600,1503898607,IT 1503898608,1503898615,GR -1503898616,1503898623,SE -1503898624,1503898631,DE +1503898616,1503898631,DE 1503898632,1503898647,GR -1503898648,1503898679,DE -1503898680,1503898687,IT -1503898688,1503898791,DE +1503898648,1503898791,DE 1503898792,1503898799,US 1503898800,1503898815,DE 1503898816,1503898831,GB -1503898832,1503908351,DE +1503898832,1503898847,DE +1503898848,1503898855,MX +1503898856,1503898887,DE +1503898888,1503898895,IT +1503898896,1503898935,DE +1503898936,1503898943,IT +1503898944,1503898959,DE +1503898960,1503898967,IT +1503898968,1503898991,DE +1503898992,1503898999,GB +1503899000,1503899007,AT +1503899008,1503899015,CH +1503899016,1503899063,DE +1503899064,1503899079,AT +1503899080,1503899119,DE +1503899120,1503899127,NL +1503899128,1503899143,DE +1503899144,1503899151,IT +1503899152,1503899159,DE +1503899160,1503899167,GB +1503899168,1503899183,DE +1503899184,1503899191,GR +1503899192,1503899199,CH +1503899200,1503899263,DE +1503899264,1503899271,AT +1503899272,1503899287,BE +1503899288,1503899295,CH +1503899296,1503899303,GR +1503899304,1503899311,NL +1503899312,1503899319,RU +1503899320,1503899335,DE +1503899336,1503899343,TH +1503899344,1503899351,DE +1503899352,1503899367,GR +1503899368,1503899399,DE +1503899400,1503899407,CH +1503899408,1503899423,DE +1503899424,1503899431,IT +1503899432,1503899439,GR +1503899440,1503899463,DE +1503899464,1503899479,BR +1503899480,1503899495,DE +1503899496,1503899503,IT +1503899504,1503908351,DE 1503908352,1503909375,IT 1503909376,1503920127,DE 1503920128,1503985663,HR @@ -42891,9 +51404,7 @@ 1504152128,1504152191,IE 1504152192,1504152415,GB 1504152416,1504152431,IE -1504152432,1504152447,GB -1504152448,1504152575,IE -1504152576,1504154623,GB +1504152432,1504154623,GB 1504154624,1504155647,IE 1504155648,1504156927,GB 1504156928,1504157183,IE @@ -42932,14 +51443,8 @@ 1505247232,1505255423,UA 1505255424,1505263615,IT 1505263616,1505271807,DK -1505271808,1505273087,NL -1505273088,1505273095,NZ -1505273096,1505279999,NL -1505280000,1505280007,IR -1505280008,1505284095,AE -1505284096,1505284607,IR -1505284608,1505284863,AE -1505284864,1505288191,IR +1505271808,1505279999,NL +1505280000,1505288191,IR 1505288192,1505296383,RU 1505296384,1505304575,UA 1505304576,1505305351,FR @@ -42963,42 +51468,58 @@ 1505312768,1505320959,RU 1505320960,1505321103,AT 1505321104,1505321135,DE -1505321136,1505321407,AT -1505321408,1505321471,DE -1505321472,1505321631,AT -1505321632,1505321823,DE +1505321136,1505321423,AT +1505321424,1505321439,DE +1505321440,1505321599,AT +1505321600,1505321631,DE +1505321632,1505321695,AT +1505321696,1505321823,DE 1505321824,1505321831,AT 1505321832,1505321983,DE -1505321984,1505322287,AT -1505322288,1505322415,DE -1505322416,1505322879,AT -1505322880,1505324335,DE -1505324336,1505324351,AT -1505324352,1505324791,DE +1505321984,1505322303,AT +1505322304,1505322415,DE +1505322416,1505322895,AT +1505322896,1505324335,DE +1505324336,1505324367,AT +1505324368,1505324791,DE 1505324792,1505324799,AT 1505324800,1505325055,DE 1505325056,1505329151,AT 1505329152,1505329215,GB -1505329216,1505329375,IE +1505329216,1505329231,IE +1505329232,1505329247,GB +1505329248,1505329375,IE 1505329376,1505329407,GB 1505329408,1505332991,IE 1505332992,1505332999,GB -1505333000,1505333623,IE +1505333000,1505333471,IE +1505333472,1505333487,GB +1505333488,1505333623,IE 1505333624,1505333631,GB 1505333632,1505333887,IE 1505333888,1505333951,GB -1505333952,1505336063,IE +1505333952,1505335871,IE +1505335872,1505335911,GB +1505335912,1505335935,IE +1505335936,1505335975,GB +1505335976,1505335983,IE +1505335984,1505335999,GB +1505336000,1505336063,IE 1505336064,1505336071,GB 1505336072,1505336576,IE 1505336577,1505336639,GB -1505336640,1505336831,IE -1505336832,1505336863,GB +1505336640,1505336655,IE +1505336656,1505336695,GB +1505336696,1505336823,IE +1505336824,1505336863,GB 1505336864,1505336864,IE 1505336865,1505336879,GB -1505336880,1505337023,IE +1505336880,1505336959,IE +1505336960,1505336975,GB +1505336976,1505337023,IE 1505337024,1505337055,GB -1505337056,1505337087,IE -1505337088,1505337215,GB +1505337056,1505337071,IE +1505337072,1505337215,GB 1505337216,1505337343,IE 1505337344,1505345535,FR 1505345536,1505353727,MK @@ -43019,9 +51540,14 @@ 1505419264,1505427455,RU 1505427456,1505435647,UA 1505435648,1505443839,MD -1505443840,1505452327,GB +1505443840,1505452103,GB +1505452104,1505452111,US +1505452112,1505452327,GB 1505452328,1505452335,NO -1505452336,1505453439,GB +1505452336,1505453167,GB +1505453168,1505453175,SE +1505453176,1505453183,US +1505453184,1505453439,GB 1505453440,1505453567,US 1505453568,1505454367,GB 1505454368,1505454375,US @@ -43040,9 +51566,26 @@ 1505454976,1505455103,US 1505455104,1505455503,GB 1505455504,1505455519,NL -1505455520,1505456127,GB +1505455520,1505455683,GB +1505455684,1505455687,US +1505455688,1505455695,GB +1505455696,1505455699,NZ +1505455700,1505455711,US +1505455712,1505455719,GB +1505455720,1505455727,US +1505455728,1505455759,GB +1505455760,1505455767,DE +1505455768,1505455791,GB +1505455792,1505455799,US +1505455800,1505455999,GB +1505456000,1505456079,US +1505456080,1505456127,GB 1505456128,1505456255,US -1505456256,1505456639,GB +1505456256,1505456343,GB +1505456344,1505456347,US +1505456348,1505456351,GB +1505456352,1505456367,US +1505456368,1505456639,GB 1505456640,1505456895,US 1505456896,1505456927,GB 1505456928,1505456935,US @@ -43053,15 +51596,16 @@ 1505457012,1505457015,US 1505457016,1505458175,GB 1505458176,1505458431,US -1505458432,1505458451,GB -1505458452,1505458495,US -1505458496,1505458511,GB -1505458512,1505458519,US -1505458520,1505458543,GB +1505458432,1505458455,GB +1505458456,1505458495,US +1505458496,1505458519,GB +1505458520,1505458527,US +1505458528,1505458543,GB 1505458544,1505458559,US 1505458560,1505460223,GB -1505460224,1505476607,CZ -1505476608,1505484799,RU +1505460224,1505478655,CZ +1505478656,1505482751,DE +1505482752,1505484799,LB 1505484800,1505492991,PL 1505492992,1505501183,NL 1505501184,1505509375,ME @@ -43098,7 +51642,9 @@ 1505709056,1505714175,DE 1505714176,1505722367,LV 1505722368,1505738751,PL -1505738752,1505745839,GB +1505738752,1505745135,GB +1505745136,1505745151,ES +1505745152,1505745839,GB 1505745840,1505745855,IL 1505745856,1505746943,GB 1505746944,1505755135,RU @@ -43123,19 +51669,35 @@ 1506418688,1506418695,CY 1506418696,1506418703,GB 1506418704,1506418719,CA -1506418720,1506422655,DE +1506418720,1506418975,DE +1506418976,1506418983,CA +1506418984,1506422079,DE +1506422080,1506422111,CY +1506422112,1506422142,CA +1506422143,1506422655,DE 1506422656,1506422687,CY 1506422688,1506422703,CA -1506422704,1506422711,GB -1506422712,1506422719,DE +1506422704,1506422719,GB 1506422720,1506422751,US -1506422752,1506427663,DE +1506422752,1506427183,DE +1506427184,1506427199,CA +1506427200,1506427663,DE 1506427664,1506427679,GB -1506427680,1506428223,DE +1506427680,1506427743,DE +1506427744,1506427759,CA +1506427760,1506428223,DE 1506428224,1506428239,US -1506428240,1506437375,DE -1506437376,1506437503,US -1506437504,1506437631,DE +1506428240,1506436863,DE +1506436864,1506436879,FR +1506436880,1506436883,GB +1506436884,1506437119,DE +1506437120,1506437503,US +1506437504,1506437551,DE +1506437552,1506437567,BG +1506437568,1506437583,DE +1506437584,1506437615,NL +1506437616,1506437623,US +1506437624,1506437631,DE 1506437632,1506437887,MU 1506437888,1506437903,CA 1506437904,1506437919,US @@ -43157,14 +51719,17 @@ 1506438864,1506438871,DE 1506438872,1506438879,FR 1506438880,1506438883,US -1506438884,1506438895,DE +1506438884,1506438887,DE +1506438888,1506438895,NL 1506438896,1506438911,CH 1506438912,1506439039,US 1506439040,1506439463,DE 1506439464,1506439471,GB 1506439472,1506439571,DE 1506439572,1506439575,US -1506439576,1506439935,DE +1506439576,1506439579,DE +1506439580,1506439583,NL +1506439584,1506439935,DE 1506439936,1506440191,US 1506440192,1506440447,DE 1506440448,1506440575,US @@ -43244,21 +51809,19 @@ 1506445816,1506445823,GB 1506445824,1506446335,FR 1506446336,1506446719,NL -1506446720,1506446727,GB -1506446728,1506447359,NL +1506446720,1506446735,GB +1506446736,1506447359,NL 1506447360,1506447423,IT -1506447424,1506447455,GB -1506447456,1506448255,IT -1506448256,1506448287,GB -1506448288,1506448383,IT +1506447424,1506447463,GB +1506447464,1506448255,IT +1506448256,1506448319,GB +1506448320,1506448383,IT 1506448384,1506448639,AT 1506448640,1506448647,GB 1506448648,1506448663,AT 1506448664,1506448671,GB 1506448672,1506448703,AT -1506448704,1506448727,GB -1506448728,1506448735,AT -1506448736,1506448895,GB +1506448704,1506448895,GB 1506448896,1506449159,BE 1506449160,1506449171,GB 1506449172,1506449407,BE @@ -43266,20 +51829,33 @@ 1506449664,1506449919,SK 1506449920,1506449927,CH 1506449928,1506449935,GB -1506449936,1506450431,CH +1506449936,1506449999,CH +1506450000,1506450015,GB +1506450016,1506450431,CH 1506450432,1506450767,CZ 1506450768,1506450847,GB 1506450848,1506450863,CZ 1506450864,1506450879,GB 1506450880,1506450943,CZ -1506450944,1506451023,DK +1506450944,1506450958,DK +1506450959,1506450959,GB +1506450960,1506450975,DK +1506450976,1506451007,GB +1506451008,1506451023,DK 1506451024,1506451031,FI 1506451032,1506451039,DK 1506451040,1506451055,NO -1506451056,1506451199,GB -1506451200,1506451895,ES +1506451056,1506451059,DK +1506451060,1506451199,GB +1506451200,1506451791,ES +1506451792,1506451799,GB +1506451800,1506451871,ES +1506451872,1506451887,GB +1506451888,1506451895,ES 1506451896,1506451903,GB -1506451904,1506452223,ES +1506451904,1506452143,ES +1506452144,1506452159,GB +1506452160,1506452223,ES 1506452224,1506452479,GB 1506452480,1506452735,US 1506452736,1506452751,RO @@ -43295,7 +51871,9 @@ 1506453472,1506453487,GB 1506453488,1506453503,SE 1506453504,1506453759,DE -1506453760,1506454015,FR +1506453760,1506453823,FR +1506453824,1506453839,GB +1506453840,1506454015,FR 1506454016,1506454271,AT 1506454272,1506454527,ES 1506454528,1506454783,IT @@ -43312,7 +51890,9 @@ 1506456960,1506456991,GB 1506456992,1506457087,IT 1506457088,1506458239,GB -1506458240,1506458287,CH +1506458240,1506458271,CH +1506458272,1506458279,GB +1506458280,1506458287,CH 1506458288,1506458303,GB 1506458304,1506458623,CH 1506458624,1506459135,GB @@ -43323,7 +51903,9 @@ 1506460064,1506460079,GB 1506460080,1506460126,FR 1506460127,1506460127,GB -1506460128,1506460335,FR +1506460128,1506460315,FR +1506460316,1506460319,GB +1506460320,1506460335,FR 1506460336,1506460343,GB 1506460344,1506460671,FR 1506460672,1506460927,AT @@ -43331,34 +51913,43 @@ 1506461312,1506461315,GB 1506461316,1506461319,IT 1506461320,1506461327,GB -1506461328,1506461351,IT +1506461328,1506461343,IT +1506461344,1506461351,GB 1506461352,1506461359,FR 1506461360,1506461695,IT 1506461696,1506461863,FR 1506461864,1506461887,GB 1506461888,1506462207,FR 1506462208,1506462463,ES -1506462464,1506462607,FR -1506462608,1506462623,A2 -1506462624,1506462719,FR +1506462464,1506462527,FR +1506462528,1506462583,GB +1506462584,1506462599,FR +1506462600,1506462607,GB +1506462608,1506462719,FR 1506462720,1506463231,IT 1506463232,1506463487,SE -1506463488,1506463999,DE +1506463488,1506463671,DE +1506463672,1506463679,GB +1506463680,1506463999,DE 1506464000,1506464767,GB 1506464768,1506465279,NL 1506465280,1506465791,GB 1506465792,1506466047,DE 1506466048,1506466303,BE 1506466304,1506466559,DE -1506466560,1506467071,GB +1506466560,1506466627,GB +1506466628,1506466631,NL +1506466632,1506467071,GB 1506467072,1506467327,DE 1506467328,1506467583,GB -1506467584,1506468351,IT +1506467584,1506467591,IT +1506467592,1506467599,GB +1506467600,1506467679,IT +1506467680,1506467839,GB +1506467840,1506468351,IT 1506468352,1506468607,GB 1506468608,1506468863,TZ -1506468864,1506469015,IT -1506469016,1506469119,GB -1506469120,1506470143,IT +1506468864,1506470143,IT 1506470144,1506470399,GB 1506470400,1506470655,DE 1506470656,1506471679,IT @@ -43367,18 +51958,20 @@ 1506471976,1506471979,GB 1506471980,1506471999,NL 1506472000,1506472031,BE -1506472032,1506472191,NL +1506472032,1506472175,NL +1506472176,1506472191,GB 1506472192,1506472447,IT 1506472448,1506472703,GB 1506472704,1506473215,IT 1506473216,1506473471,GB -1506473472,1506474271,IT -1506474272,1506474303,SE -1506474304,1506474495,IT +1506473472,1506474247,IT +1506474248,1506474255,GB +1506474256,1506474495,IT 1506474496,1506474751,FR 1506474752,1506475519,IT -1506475520,1506475551,AT -1506475552,1506476031,GB +1506475520,1506475567,AT +1506475568,1506475775,GB +1506475776,1506476031,DE 1506476032,1506508799,KW 1506508800,1506541567,CZ 1506541568,1506574335,RU @@ -43394,9 +51987,10 @@ 1506743168,1506743183,DE 1506743184,1506743199,FR 1506743200,1506743215,IE -1506743216,1506743232,GB -1506743233,1506744319,SE -1506744320,1506746367,NL +1506743216,1506744319,SE +1506744320,1506744383,NL +1506744384,1506744391,GB +1506744392,1506746367,NL 1506746368,1506750463,RU 1506750464,1506752511,GB 1506752512,1506754559,IE @@ -43405,16 +51999,27 @@ 1506760704,1506764799,RU 1506764800,1506766847,IT 1506766848,1506767103,NO -1506767104,1506768895,GE +1506767104,1506767615,GE +1506767616,1506767679,NO +1506767680,1506768895,GE 1506768896,1506770943,AT -1506770944,1506772991,NL +1506770944,1506772017,NL +1506772018,1506772018,US +1506772019,1506772143,NL +1506772144,1506772145,TR +1506772146,1506772147,NL +1506772148,1506772176,TR +1506772177,1506772323,NL +1506772324,1506772325,IR +1506772326,1506772361,NL +1506772362,1506772364,IR +1506772365,1506772938,NL +1506772939,1506772939,IR +1506772940,1506772991,NL 1506772992,1506775039,GB 1506775040,1506777087,AT 1506777088,1506781695,GB -1506781696,1506781759,IE -1506781760,1506781823,US -1506781824,1506781887,ZA -1506781888,1506781951,AU +1506781696,1506781951,IE 1506781952,1506783231,GB 1506783232,1506785279,RU 1506785280,1506787327,BE @@ -43425,9 +52030,7 @@ 1506795520,1506797567,IE 1506797568,1506799615,ES 1506799616,1506801663,LV -1506801664,1506802767,DE -1506802768,1506802775,DK -1506802776,1506802831,DE +1506801664,1506802831,DE 1506802832,1506802839,CH 1506802840,1506803135,DE 1506803136,1506803151,CH @@ -43455,7 +52058,9 @@ 1507664768,1507664895,US 1507664896,1507665407,GR 1507665408,1507665663,IT -1507665664,1507666431,US +1507665664,1507665791,TZ +1507665792,1507665919,GR +1507665920,1507666431,US 1507666432,1507666559,GR 1507666560,1507666591,FR 1507666592,1507666639,GR @@ -43478,7 +52083,9 @@ 1507713024,1507717119,RU 1507717120,1507717631,SE 1507717632,1507718911,NO -1507718912,1507721215,SE +1507718912,1507720191,SE +1507720192,1507720447,NO +1507720448,1507721215,SE 1507721216,1507753983,GB 1507753984,1507819519,RU 1507819520,1507852287,HU @@ -43520,11 +52127,13 @@ 1508646912,1508646927,DK 1508646928,1508646935,SE 1508646936,1508647039,DK -1508647040,1508648447,SE +1508647040,1508647679,SE +1508647680,1508647807,DK +1508647808,1508648447,SE 1508648448,1508648703,DK 1508648704,1508650751,SE -1508650752,1508650839,DK -1508650840,1508650879,SE +1508650752,1508650855,DK +1508650856,1508650879,SE 1508650880,1508651263,DK 1508651264,1508652543,SE 1508652544,1508654079,DK @@ -43582,9 +52191,7 @@ 1509467840,1509467871,PL 1509467872,1509469055,NL 1509469056,1509469183,PL -1509469184,1509469439,NL -1509469440,1509469567,SE -1509469568,1509469887,NL +1509469184,1509469887,NL 1509469888,1509469919,MY 1509469920,1509470207,NL 1509470208,1509478399,RU @@ -43605,9 +52212,7 @@ 1509507072,1509511167,GB 1509511168,1509515263,LT 1509515264,1509519359,HR -1509519360,1509531647,RU -1509531648,1509535743,GB -1509535744,1509539839,RU +1509519360,1509539839,RU 1509539840,1509543935,AM 1509543936,1509543975,LB 1509543976,1509543983,DE @@ -43620,9 +52225,7 @@ 1509580800,1509584895,CZ 1509584896,1509588479,NO 1509588480,1509588607,GB -1509588608,1509588751,NO -1509588752,1509588767,GB -1509588768,1509588991,NO +1509588608,1509588991,NO 1509588992,1509593087,DE 1509593088,1509601279,RU 1509601280,1509605375,NL @@ -43664,13 +52267,17 @@ 1509900288,1509916671,RU 1509916672,1509933055,GB 1509933056,1509949439,US -1509949440,1515467007,FR +1509949440,1515241759,FR +1515241760,1515241791,GB +1515241792,1515467007,FR 1515467008,1515467263,ES 1515467264,1515467519,FR 1515467520,1515468031,US 1515468032,1515468287,ES 1515468288,1515468415,NL -1515468416,1515486975,FR +1515468416,1515468543,FR +1515468544,1515468671,DE +1515468672,1515486975,FR 1515486976,1515487231,CD 1515487232,1515487495,HK 1515487496,1515487739,FR @@ -43684,14 +52291,22 @@ 1518370816,1518403583,NL 1518403584,1518452735,SE 1518452736,1518460927,AT -1518460928,1518501887,SE +1518460928,1518479359,SE +1518479360,1518481407,EE +1518481408,1518501887,SE 1518501888,1518503935,EE 1518503936,1518508799,LT -1518508800,1518510079,SE +1518508800,1518509055,SE +1518509056,1518510079,LT 1518510080,1518516479,LV 1518516480,1518517247,SE 1518517248,1518518271,LV -1518518272,1518665727,SE +1518518272,1518538495,SE +1518538496,1518538751,LT +1518538752,1518542847,SE +1518542848,1518551039,LT +1518551040,1518565375,NL +1518565376,1518665727,SE 1518665728,1518727167,RU 1518727168,1518731263,SE 1518731264,1518927871,DE @@ -43934,14 +52549,11 @@ 1533419520,1533421567,KW 1533421568,1533423615,NL 1533423616,1533425663,IT -1533425664,1533428479,GB -1533428480,1533428735,US -1533428736,1533429759,GB -1533429760,1533431807,IT +1533425664,1533429759,GB +1533429760,1533431807,RU 1533431808,1533433855,IE 1533433856,1533435903,DK 1533435904,1533437951,CZ -1533437952,1533439999,RU 1533440000,1533441519,PL 1533441520,1533441535,CH 1533441536,1533442047,PL @@ -43987,9 +52599,10 @@ 1533505536,1533507583,DE 1533507584,1533509631,UA 1533509632,1533511679,GB -1533511680,1533512383,FR -1533512384,1533512447,DE -1533512448,1533513215,FR +1533511680,1533511935,IT +1533511936,1533513023,FR +1533513024,1533513087,ES +1533513088,1533513215,FR 1533513216,1533513471,GB 1533513472,1533513727,DE 1533513728,1533515775,KW @@ -44037,9 +52650,10 @@ 1534714064,1534714079,ES 1534714080,1534714095,FR 1534714096,1534714111,BE -1534714112,1534714119,GB -1534714120,1534714123,BE -1534714124,1534714127,NL +1534714112,1534714115,ES +1534714116,1534714119,DE +1534714120,1534714123,FI +1534714124,1534714127,ES 1534714128,1534714143,BE 1534714144,1534714159,GB 1534714160,1534714259,FR @@ -44053,12 +52667,14 @@ 1534714328,1534714331,FR 1534714332,1534714335,PL 1534714336,1534714351,FR -1534714352,1534714367,CH +1534714352,1534714359,DE +1534714360,1534714367,NL 1534714368,1534714383,GB 1534714384,1534714399,FR 1534714400,1534714403,GB 1534714404,1534714407,PL -1534714408,1534714431,GB +1534714408,1534714415,DE +1534714416,1534714431,GB 1534714432,1534714463,FR 1534714464,1534714495,GB 1534714496,1534714511,FR @@ -44066,7 +52682,7 @@ 1534714528,1534714531,FR 1534714532,1534714535,PL 1534714536,1534714539,GB -1534714540,1534714543,DE +1534714540,1534714543,PL 1534714544,1534714547,FR 1534714548,1534714551,ES 1534714552,1534714559,GB @@ -44077,7 +52693,9 @@ 1534714752,1534714767,DE 1534714768,1534714783,FR 1534714784,1534714799,PL -1534714800,1534714831,FR +1534714800,1534714815,FR +1534714816,1534714819,BE +1534714820,1534714831,FR 1534714832,1534714847,BE 1534714848,1534714855,GB 1534714856,1534714863,CH @@ -44087,49 +52705,62 @@ 1534714880,1534714895,PL 1534714896,1534714911,FR 1534714912,1534714927,DE -1534714928,1534714943,FR -1534714944,1534714975,DE +1534714928,1534714931,BE +1534714932,1534714935,DE +1534714936,1534714939,GB +1534714940,1534714975,DE 1534714976,1534715039,FR 1534715040,1534715055,GB 1534715056,1534715071,PL -1534715072,1534715135,FR +1534715072,1534715103,FR +1534715104,1534715119,BE +1534715120,1534715135,FR 1534715136,1534715143,PL 1534715144,1534715167,FR 1534715168,1534715183,NL 1534715184,1534715199,FR -1534715200,1534715203,GB +1534715200,1534715203,IT 1534715204,1534715207,FR 1534715208,1534715215,BE 1534715216,1534715263,FR 1534715264,1534715279,ES -1534715280,1534715295,FR +1534715280,1534715283,PL +1534715284,1534715287,FR +1534715288,1534715295,PL 1534715296,1534715299,ES 1534715300,1534715303,FR 1534715304,1534715307,ES 1534715308,1534715311,DE -1534715312,1534715315,FR +1534715312,1534715315,PL 1534715316,1534715319,ES 1534715320,1534715327,PL 1534715328,1534715359,FR 1534715360,1534715367,PL 1534715368,1534715371,FR -1534715372,1534715375,GB +1534715372,1534715375,CH 1534715376,1534715391,ES -1534715392,1534715407,PL -1534715408,1534715423,DE +1534715392,1534715399,PL +1534715400,1534715407,FR +1534715408,1534715411,GB +1534715412,1534715415,FI +1534715416,1534715419,DE +1534715420,1534715423,IT 1534715424,1534715439,PL 1534715440,1534715447,ES 1534715448,1534715451,FR 1534715452,1534715487,PL -1534715488,1534715495,IT -1534715496,1534715503,CZ +1534715488,1534715503,FR 1534715504,1534715519,CH 1534715520,1534715551,FR 1534715552,1534715583,ES 1534715584,1534715599,GB -1534715600,1534715615,BE +1534715600,1534715603,PL +1534715604,1534715607,GB +1534715608,1534715611,CH +1534715612,1534715615,FI 1534715616,1534715639,FR -1534715640,1534715647,DE +1534715640,1534715643,PL +1534715644,1534715647,DE 1534715648,1534715663,PL 1534715664,1534715667,FR 1534715668,1534715675,PL @@ -44142,32 +52773,38 @@ 1534715760,1534715775,ES 1534715776,1534715783,PL 1534715784,1534715791,BE -1534715792,1534715807,ES +1534715792,1534715807,CZ 1534715808,1534715875,FR -1534715876,1534715879,NL -1534715880,1534715883,CH +1534715876,1534715879,GB +1534715880,1534715883,PT 1534715884,1534715887,PL 1534715888,1534715919,FR 1534715920,1534715935,ES -1534715936,1534715999,FR -1534716000,1534716007,PL +1534715936,1534715951,PL +1534715952,1534715999,FR +1534716000,1534716007,NL 1534716008,1534716047,FR 1534716048,1534716063,GB 1534716064,1534716127,FR 1534716128,1534716143,ES 1534716144,1534716159,PL 1534716160,1534716163,IT -1534716164,1534716167,FR +1534716164,1534716167,FI 1534716168,1534716175,IE 1534716176,1534716191,FR 1534716192,1534716223,ES 1534716224,1534716239,FR 1534716240,1534716255,GB 1534716256,1534716319,FR -1534716320,1534716359,PL -1534716360,1534716363,CZ +1534716320,1534716351,PL +1534716352,1534716355,FR +1534716356,1534716359,PL +1534716360,1534716363,FR 1534716364,1534716367,GB -1534716368,1534716391,FR +1534716368,1534716375,BE +1534716376,1534716379,CH +1534716380,1534716383,PL +1534716384,1534716391,FR 1534716392,1534716395,ES 1534716396,1534716399,GB 1534716400,1534716431,FR @@ -44175,8 +52812,8 @@ 1534716448,1534716479,FR 1534716480,1534716495,ES 1534716496,1534716575,FR -1534716576,1534716607,PL -1534716608,1534716639,FR +1534716576,1534716591,PL +1534716592,1534716639,FR 1534716640,1534716647,BE 1534716648,1534716655,FR 1534716656,1534716663,IE @@ -44186,9 +52823,14 @@ 1534716704,1534716735,ES 1534716736,1534716751,FR 1534716752,1534716759,PL -1534716760,1534716763,FR +1534716760,1534716763,DE 1534716764,1534716767,ES -1534716768,1534716823,FR +1534716768,1534716799,FR +1534716800,1534716803,DE +1534716804,1534716807,PL +1534716808,1534716811,NL +1534716812,1534716815,DE +1534716816,1534716823,FR 1534716824,1534716831,GB 1534716832,1534716879,FR 1534716880,1534716895,BE @@ -44196,10 +52838,17 @@ 1534716904,1534716911,DE 1534716912,1534716927,FR 1534716928,1534716943,DE -1534716944,1534716991,FR +1534716944,1534716959,FR +1534716960,1534716967,PL +1534716968,1534716971,DE +1534716972,1534716991,FR 1534716992,1534717007,DE -1534717008,1534717023,FR -1534717024,1534717055,PL +1534717008,1534717011,PL +1534717012,1534717019,FR +1534717020,1534717023,DE +1534717024,1534717039,GB +1534717040,1534717047,PL +1534717048,1534717055,FR 1534717056,1534717071,GB 1534717072,1534717103,FR 1534717104,1534717119,PL @@ -44208,34 +52857,54 @@ 1534717140,1534717143,BE 1534717144,1534717147,FR 1534717148,1534717151,IT -1534717152,1534717263,FR +1534717152,1534717215,FR +1534717216,1534717219,ES +1534717220,1534717247,FR +1534717248,1534717251,CZ +1534717252,1534717255,NL +1534717256,1534717263,FR 1534717264,1534717267,PL -1534717268,1534717315,FR +1534717268,1534717311,FR +1534717312,1534717315,DE 1534717316,1534717319,IE 1534717320,1534717323,GB 1534717324,1534717343,FR 1534717344,1534717359,GB 1534717360,1534717375,PL -1534717376,1534717503,FR -1534717504,1534717535,DE +1534717376,1534717411,FR +1534717412,1534717415,CH +1534717416,1534717419,CZ +1534717420,1534717427,PL +1534717428,1534717431,FR +1534717432,1534717435,GB +1534717436,1534717439,NL +1534717440,1534717503,FR +1534717504,1534717519,BE +1534717520,1534717535,DE 1534717536,1534717551,PL 1534717552,1534717567,CZ 1534717568,1534717583,IE -1534717584,1534717647,FR -1534717648,1534717655,BE -1534717656,1534717659,ES +1534717584,1534717587,CZ +1534717588,1534717591,NL +1534717592,1534717599,IT +1534717600,1534717647,FR +1534717648,1534717659,PL 1534717660,1534717663,FR 1534717664,1534717679,GB -1534717680,1534717711,ES +1534717680,1534717695,ES +1534717696,1534717711,IE 1534717712,1534717727,FR 1534717728,1534717731,GB 1534717732,1534717735,FR 1534717736,1534717739,BE -1534717740,1534717743,DE +1534717740,1534717743,GB 1534717744,1534717751,FR 1534717752,1534717759,BE -1534717760,1534717775,FR -1534717776,1534717791,NL +1534717760,1534717767,FR +1534717768,1534717771,IT +1534717772,1534717783,FR +1534717784,1534717787,GB +1534717788,1534717791,DE 1534717792,1534717823,FR 1534717824,1534717855,BE 1534717856,1534717871,NL @@ -44247,11 +52916,19 @@ 1534717920,1534717923,PL 1534717924,1534717927,ES 1534717928,1534717931,DE -1534717932,1534717935,FR -1534717936,1534717951,IT -1534717952,1534717967,BE +1534717932,1534717951,FR +1534717952,1534717955,DE +1534717956,1534717959,FR +1534717960,1534717963,PT +1534717964,1534717967,CH 1534717968,1534717983,IT -1534717984,1534718015,FR +1534717984,1534717987,PL +1534717988,1534717991,DE +1534717992,1534717995,NL +1534717996,1534717999,GB +1534718000,1534718007,ES +1534718008,1534718011,PL +1534718012,1534718015,FR 1534718016,1534718031,BE 1534718032,1534718063,FR 1534718064,1534718079,IT @@ -44267,13 +52944,16 @@ 1534718208,1534718271,ES 1534718272,1534718399,FR 1534718400,1534718415,DE -1534718416,1534718431,FR -1534718432,1534718447,PL +1534718416,1534718419,CZ +1534718420,1534718423,GB +1534718424,1534718431,ES +1534718432,1534718435,GB +1534718436,1534718439,DE +1534718440,1534718447,ES 1534718448,1534718463,FR 1534718464,1534718467,DE 1534718468,1534718471,PT -1534718472,1534718479,FR -1534718480,1534718487,PL +1534718472,1534718487,PL 1534718488,1534718495,DE 1534718496,1534718531,FR 1534718532,1534718535,PL @@ -44281,14 +52961,20 @@ 1534718540,1534718543,ES 1534718544,1534718559,FR 1534718560,1534718575,BE -1534718576,1534718687,FR +1534718576,1534718591,GB +1534718592,1534718623,FR +1534718624,1534718631,PL +1534718632,1534718687,FR 1534718688,1534718703,PL 1534718704,1534718711,FR -1534718712,1534718735,GB -1534718736,1534718751,FR -1534718752,1534718767,PL -1534718768,1534718799,FR -1534718800,1534718815,ES +1534718712,1534718719,ES +1534718720,1534718735,GB +1534718736,1534718739,NL +1534718740,1534718759,FR +1534718760,1534718763,PL +1534718764,1534718767,IE +1534718768,1534718783,FR +1534718784,1534718815,ES 1534718816,1534718831,GB 1534718832,1534718847,FR 1534718848,1534718911,BE @@ -44297,7 +52983,8 @@ 1534718960,1534718975,ES 1534718976,1534719039,FR 1534719040,1534719167,BE -1534719168,1534719215,PL +1534719168,1534719199,FR +1534719200,1534719215,PL 1534719216,1534719295,FR 1534719296,1534719311,DE 1534719312,1534719335,FR @@ -44308,56 +52995,72 @@ 1534719392,1534719395,CH 1534719396,1534719399,PT 1534719400,1534719403,IT -1534719404,1534719423,FR -1534719424,1534719439,DE -1534719440,1534719455,PL -1534719456,1534719471,FR +1534719404,1534719439,FR +1534719440,1534719459,PL +1534719460,1534719463,FR +1534719464,1534719471,PL 1534719472,1534719487,IE 1534719488,1534719631,FR 1534719632,1534719639,ES -1534719640,1534719643,DE -1534719644,1534719647,FR +1534719640,1534719647,FR 1534719648,1534719655,ES -1534719656,1534719679,FR +1534719656,1534719663,FR +1534719664,1534719679,IE 1534719680,1534719695,GB 1534719696,1534719699,IT 1534719700,1534719703,DE 1534719704,1534719711,GB -1534719712,1534719759,FR +1534719712,1534719747,FR +1534719748,1534719751,PL +1534719752,1534719759,FR 1534719760,1534719775,IT -1534719776,1534719799,FR +1534719776,1534719783,PL +1534719784,1534719787,FR +1534719788,1534719791,DE +1534719792,1534719799,FR 1534719800,1534719803,ES 1534719804,1534719807,GB -1534719808,1534719823,FR +1534719808,1534719811,PL +1534719812,1534719815,FR +1534719816,1534719819,CH +1534719820,1534719823,CZ 1534719824,1534719827,PT 1534719828,1534719831,FR 1534719832,1534719839,PL -1534719840,1534719871,FR -1534719872,1534719887,PL -1534719888,1534719951,FR +1534719840,1534719951,FR 1534719952,1534719967,DE 1534719968,1534719983,PL 1534719984,1534720003,FR 1534720004,1534720007,ES 1534720008,1534720015,PL -1534720016,1534720031,GB -1534720032,1534720047,DE -1534720048,1534720063,ES +1534720016,1534720023,ES +1534720024,1534720027,PL +1534720028,1534720063,ES 1534720064,1534720079,IT 1534720080,1534720095,GB 1534720096,1534720111,FR 1534720112,1534720127,ES 1534720128,1534720211,FR 1534720212,1534720215,PL -1534720216,1534720223,FR +1534720216,1534720219,FR +1534720220,1534720223,GB 1534720224,1534720239,DE 1534720240,1534720255,BE -1534720256,1534720271,NL +1534720256,1534720271,FR 1534720272,1534720287,PL -1534720288,1534720351,FR +1534720288,1534720291,IT +1534720292,1534720295,PL +1534720296,1534720299,GB +1534720300,1534720351,FR 1534720352,1534720367,ES 1534720368,1534720383,PL -1534720384,1534720431,FR +1534720384,1534720399,FR +1534720400,1534720403,LT +1534720404,1534720411,GB +1534720412,1534720415,IE +1534720416,1534720419,ES +1534720420,1534720423,DE +1534720424,1534720431,ES 1534720432,1534720435,DE 1534720436,1534720439,FR 1534720440,1534720443,GB @@ -44376,17 +53079,20 @@ 1534720544,1534720559,FR 1534720560,1534720583,IT 1534720584,1534720591,BE -1534720592,1534720607,FR -1534720608,1534720623,GB +1534720592,1534720611,FR +1534720612,1534720615,BE +1534720616,1534720619,DE +1534720620,1534720623,PT 1534720624,1534720639,FR -1534720640,1534720671,PL +1534720640,1534720655,PL +1534720656,1534720671,ES 1534720672,1534720739,FR 1534720740,1534720743,PL -1534720744,1534720747,NL -1534720748,1534720751,FR -1534720752,1534720767,GB +1534720744,1534720747,IE +1534720748,1534720767,FR 1534720768,1534720783,ES -1534720784,1534720791,PL +1534720784,1534720787,FR +1534720788,1534720791,DE 1534720792,1534720795,IT 1534720796,1534720799,ES 1534720800,1534720815,PL @@ -44395,7 +53101,7 @@ 1534720864,1534720879,ES 1534720880,1534720895,FR 1534720896,1534720899,ES -1534720900,1534720903,GB +1534720900,1534720903,LT 1534720904,1534720943,FR 1534720944,1534720951,ES 1534720952,1534720959,PL @@ -44405,20 +53111,24 @@ 1534720976,1534720979,NL 1534720980,1534720983,FR 1534720984,1534720991,PL -1534720992,1534721007,FR +1534720992,1534720995,PT +1534720996,1534720999,ES +1534721000,1534721003,FI +1534721004,1534721007,GB 1534721008,1534721023,ES -1534721024,1534721055,FR +1534721024,1534721031,DE +1534721032,1534721055,FR 1534721056,1534721063,ES 1534721064,1534721071,FR 1534721072,1534721087,GB 1534721088,1534721103,ES 1534721104,1534721107,PL 1534721108,1534721111,ES -1534721112,1534721115,FR -1534721116,1534721119,BE +1534721112,1534721115,DE +1534721116,1534721119,FR 1534721120,1534721135,IT 1534721136,1534721159,FR -1534721160,1534721163,GB +1534721160,1534721163,ES 1534721164,1534721183,FR 1534721184,1534721191,LT 1534721192,1534721195,FR @@ -44436,9 +53146,7 @@ 1534721320,1534721327,PT 1534721328,1534721343,NL 1534721344,1534721359,PL -1534721360,1534721367,CH -1534721368,1534721371,GB -1534721372,1534721375,DE +1534721360,1534721375,GB 1534721376,1534721391,ES 1534721392,1534721407,PL 1534721408,1534721439,DE @@ -44448,29 +53156,35 @@ 1534721496,1534721519,PL 1534721520,1534721527,FR 1534721528,1534721531,ES -1534721532,1534721535,FR -1534721536,1534721583,GB -1534721584,1534721599,FR -1534721600,1534721619,ES +1534721532,1534721567,FR +1534721568,1534721583,GB +1534721584,1534721587,IE +1534721588,1534721595,FR +1534721596,1534721619,ES 1534721620,1534721627,PL 1534721628,1534721631,NL -1534721632,1534721663,FR +1534721632,1534721647,ES +1534721648,1534721663,FR 1534721664,1534721679,ES -1534721680,1534721743,FR +1534721680,1534721695,FR +1534721696,1534721703,PL +1534721704,1534721711,DE +1534721712,1534721743,FR 1534721744,1534721747,PL 1534721748,1534721751,GB 1534721752,1534721755,DE 1534721756,1534721823,FR 1534721824,1534721827,PL 1534721828,1534721831,FR -1534721832,1534721835,PL +1534721832,1534721835,DE 1534721836,1534721839,BE 1534721840,1534721855,PL 1534721856,1534721887,ES 1534721888,1534721903,FR 1534721904,1534721919,DE 1534721920,1534721935,FR -1534721936,1534721951,PL +1534721936,1534721943,CH +1534721944,1534721951,IE 1534721952,1534721955,FR 1534721956,1534721959,PL 1534721960,1534721963,IE @@ -44478,8 +53192,9 @@ 1534721968,1534721971,DE 1534721972,1534721975,PL 1534721976,1534721979,ES -1534721980,1534721983,GB -1534721984,1534722007,PL +1534721980,1534721983,PL +1534721984,1534721999,FR +1534722000,1534722007,PL 1534722008,1534722011,PT 1534722012,1534722015,ES 1534722016,1534722039,FR @@ -44502,7 +53217,9 @@ 1534849024,1534853119,NL 1534853120,1534918655,UA 1534918656,1534984191,GB -1534984192,1534989855,SE +1534984192,1534984703,SE +1534984704,1534985215,ES +1534985216,1534989855,SE 1534989856,1534990063,ES 1534990064,1534990079,SE 1534990080,1534990335,ES @@ -44514,10 +53231,14 @@ 1535017984,1535019519,ES 1535019520,1535020543,SE 1535020544,1535021055,ES -1535021056,1535024127,SE +1535021056,1535022079,SE +1535022080,1535023103,ES +1535023104,1535024127,SE 1535024128,1535049727,ES 1535049728,1535115263,SK -1535115264,1535377407,AT +1535115264,1535197183,AT +1535197184,1535246335,SE +1535246336,1535377407,AT 1535377408,1535442943,GR 1535442944,1535508479,FI 1535508480,1535574015,BG @@ -44538,7 +53259,17 @@ 1535635456,1535639551,AZ 1535639552,1535672319,GB 1535672320,1535705087,DE -1535705088,1535721471,CH +1535705088,1535708671,CH +1535708672,1535709694,DE +1535709695,1535720447,CH +1535720448,1535720575,DE +1535720576,1535720703,CH +1535720704,1535720831,DE +1535720832,1535720959,CH +1535720960,1535721087,DE +1535721088,1535721215,CH +1535721216,1535721343,DE +1535721344,1535721471,CH 1535721472,1535721726,DE 1535721727,1535737855,CH 1535737856,1535769855,HU @@ -44620,7 +53351,11 @@ 1536245760,1536262143,FI 1536262144,1536278527,PL 1536278528,1536294911,UA -1536294912,1536327679,RU +1536294912,1536311295,RU +1536311296,1536319487,EE +1536319488,1536321535,ES +1536321536,1536325631,GB +1536325632,1536327679,CZ 1536327680,1536344063,HU 1536344064,1536360447,PL 1536360448,1536376831,RU @@ -44646,51 +53381,39 @@ 1536630784,1536634879,RU 1536634880,1536643071,FR 1536643072,1536647167,TR -1536647168,1536647434,ES -1536647435,1536647435,PT -1536647436,1536651263,ES +1536647168,1536651263,ES 1536651264,1536655359,FR 1536655360,1536659455,GE -1536659456,1536659759,DE -1536659760,1536659775,BI -1536659776,1536659791,DE +1536659456,1536659775,DE +1536659776,1536659791,AO 1536659792,1536659823,SD -1536659824,1536659943,DE -1536659944,1536659951,SD -1536659952,1536659991,DE +1536659824,1536659991,DE 1536659992,1536659999,EG 1536660000,1536660007,SO 1536660008,1536660015,DE 1536660016,1536660019,CG 1536660020,1536660023,DE 1536660024,1536660031,CG -1536660032,1536660039,DJ -1536660040,1536660735,DE -1536660736,1536660991,SA -1536660992,1536661247,DE -1536661248,1536661759,GQ -1536661760,1536662015,BJ -1536662016,1536662271,DE +1536660032,1536660063,DE +1536660064,1536660079,SO +1536660080,1536662271,DE 1536662272,1536662303,SO -1536662304,1536662319,DE -1536662320,1536662335,LB -1536662336,1536662351,DE -1536662352,1536662359,TD -1536662360,1536662367,DE +1536662304,1536662335,LB +1536662336,1536662367,DE 1536662368,1536662399,SO -1536662400,1536662415,DE +1536662400,1536662407,DE +1536662408,1536662415,SO 1536662416,1536662431,GN -1536662432,1536662463,IQ +1536662432,1536662447,IR +1536662448,1536662463,IQ 1536662464,1536662527,SO -1536662528,1536662783,DE -1536662784,1536663039,SA -1536663040,1536663295,DE +1536662528,1536663295,DE 1536663296,1536663311,LB 1536663312,1536663319,DE 1536663320,1536663327,LB 1536663328,1536663343,DE -1536663344,1536663391,IQ -1536663392,1536663423,DE +1536663344,1536663359,YE +1536663360,1536663423,DE 1536663424,1536663551,KW 1536663552,1536667647,SA 1536667648,1536675839,RU @@ -44713,8 +53436,18 @@ 1538859008,1538875391,RU 1538875392,1538883583,RS 1538883584,1538891775,BE -1538891776,1538898175,DE -1538898176,1538899967,FR +1538891776,1538897671,DE +1538897672,1538897679,IT +1538897680,1538897687,ES +1538897688,1538897695,RU +1538897696,1538897703,PL +1538897704,1538897711,GR +1538897712,1538897719,PT +1538897720,1538897727,GB +1538897728,1538897735,NL +1538897736,1538897919,FR +1538897920,1538898431,DE +1538898432,1538899967,FR 1538899968,1538904031,SI 1538904032,1538904039,BH 1538904040,1538908159,SI @@ -44736,11 +53469,7 @@ 1538981888,1538990079,BY 1538990080,1538998271,CZ 1538998272,1539006463,AD -1539006464,1539006719,AL -1539006720,1539006735,RS -1539006736,1539008511,AL -1539008512,1539009023,RS -1539009024,1539014655,AL +1539006464,1539014655,AL 1539014656,1539022847,RS 1539022848,1539031039,LT 1539031040,1539039231,IT @@ -44769,9 +53498,7 @@ 1539049216,1539049223,LY 1539049224,1539049255,IT 1539049256,1539049263,LY -1539049264,1539049279,IT -1539049280,1539049287,LY -1539049288,1539049311,IT +1539049264,1539049311,IT 1539049312,1539049327,LY 1539049328,1539049335,IT 1539049336,1539049343,LY @@ -44827,9 +53554,7 @@ 1539194880,1539203071,RU 1539203072,1539207167,NL 1539207168,1539211263,RU -1539211264,1539211527,CZ -1539211528,1539211531,GB -1539211532,1539211775,CZ +1539211264,1539211775,CZ 1539211776,1539212031,DE 1539212032,1539212287,CZ 1539212288,1539212543,DE @@ -44840,21 +53565,21 @@ 1539219712,1539221503,GG 1539221504,1539222527,FR 1539222528,1539222783,HK -1539222784,1539223551,FR -1539223552,1539225599,DE +1539222784,1539223039,CN +1539223040,1539223551,FR 1539225600,1539227647,HU 1539227648,1539229695,FI 1539229696,1539231743,DE 1539231744,1539233791,BE -1539233792,1539235839,GR +1539233792,1539234303,LU +1539234304,1539234559,IE +1539234560,1539235839,LU 1539235840,1539237887,DE 1539237888,1539239935,RU 1539239936,1539244031,DE 1539244032,1539260415,BA 1539260416,1539276799,SK -1539276800,1539280135,SE -1539280136,1539280143,FI -1539280144,1539280895,SE +1539276800,1539280895,SE 1539280896,1539284991,FR 1539284992,1539287039,DE 1539287040,1539289087,TR @@ -44870,7 +53595,7 @@ 1539314688,1539315711,RU 1539315712,1539316735,UA 1539316736,1539317759,SE -1539317760,1539318783,RU +1539317760,1539318783,CZ 1539318784,1539319807,NL 1539319808,1539320831,DE 1539320832,1539321855,UA @@ -44925,7 +53650,7 @@ 1539379200,1539380223,EU 1539380224,1539381247,CH 1539381248,1539382271,RS -1539382272,1539383295,PL +1539382272,1539383295,RO 1539383296,1539384319,UA 1539384320,1539385343,RU 1539385344,1539385855,PL @@ -45053,7 +53778,7 @@ 1539482112,1539482623,UA 1539482624,1539483135,RU 1539483136,1539483647,ES -1539483648,1539484159,NL +1539483648,1539484159,UA 1539484160,1539484671,GB 1539484672,1539485695,RU 1539485696,1539486207,RO @@ -45226,7 +53951,7 @@ 1539590144,1539591167,RU 1539591168,1539592191,UZ 1539592192,1539593215,UA -1539593216,1539594239,IL +1539593216,1539594239,RU 1539594240,1539598335,UA 1539598336,1539599359,NL 1539599360,1539600383,PL @@ -45330,7 +54055,6 @@ 1539706624,1539707135,PL 1539707136,1539707391,LT 1539707392,1539707647,GB -1539707648,1539707903,RO 1539707904,1539708159,UA 1539708160,1539708415,DE 1539708416,1539708671,GB @@ -45339,7 +54063,7 @@ 1539709184,1539709439,AT 1539709440,1539709695,BE 1539709696,1539709951,NL -1539709952,1539710207,DE +1539709952,1539710207,TR 1539710208,1539710463,GB 1539710464,1539710719,FR 1539710720,1539710975,UA @@ -45376,8 +54100,7 @@ 1539718912,1539719167,KZ 1539719168,1539719423,IE 1539719424,1539719679,PL -1539719680,1539719935,IE -1539719936,1539720191,DE +1539719680,1539720191,DE 1539720192,1539720703,RU 1539720704,1539720959,IL 1539720960,1539721215,RU @@ -45442,7 +54165,6 @@ 1539737088,1539737343,KW 1539737344,1539737599,RU 1539737600,1539737855,RO -1539737856,1539738111,RU 1539738112,1539738367,DK 1539738368,1539738623,DE 1539738624,1539738879,UA @@ -45491,7 +54213,7 @@ 1539750400,1539750655,PL 1539750656,1539750911,DE 1539750912,1539751167,UA -1539751168,1539751423,TR +1539751168,1539751423,AT 1539751424,1539751679,SI 1539751680,1539751935,FR 1539751936,1539752191,DE @@ -45517,7 +54239,7 @@ 1539757568,1539757823,SI 1539757824,1539758079,UA 1539758080,1539758335,HR -1539758336,1539758591,EU +1539758336,1539758591,PL 1539758592,1539758847,NL 1539758848,1539759103,BA 1539759104,1539759359,DK @@ -45546,7 +54268,7 @@ 1539764992,1539765247,BE 1539765248,1539765503,GB 1539765504,1539766015,PL -1539766016,1539766271,AM +1539766016,1539766271,UA 1539766272,1539766527,PL 1539766528,1539766783,UA 1539766784,1539767039,DE @@ -45605,7 +54327,7 @@ 1539780608,1539780863,PL 1539780864,1539781119,RO 1539781120,1539781375,NL -1539781376,1539781631,DE +1539781376,1539781631,PL 1539781632,1539781887,HU 1539781888,1539782143,IL 1539782144,1539782399,UA @@ -45628,7 +54350,7 @@ 1539786752,1539787007,HU 1539787008,1539787263,TR 1539787264,1539787519,IE -1539787520,1539787775,UA +1539787520,1539787775,DE 1539787776,1539788031,CH 1539788032,1539788287,HR 1539788288,1539788543,GB @@ -45702,7 +54424,7 @@ 1539807744,1539807999,GB 1539808000,1539808255,HU 1539808256,1539808511,RU -1539808512,1539808767,RO +1539808512,1539808767,EU 1539808768,1539809023,DE 1539809024,1539809279,GB 1539809280,1539809535,EU @@ -45719,7 +54441,7 @@ 1539812096,1539812351,RU 1539812352,1539812607,CH 1539812608,1539812863,IT -1539812864,1539813119,SI +1539812864,1539813119,RU 1539813120,1539813375,AT 1539813376,1539813631,PL 1539813632,1539813887,NL @@ -45814,7 +54536,6 @@ 1539857408,1539858431,PL 1539858432,1539859455,RO 1539859456,1539860479,DE -1539860480,1539861503,UA 1539861504,1539862527,DE 1539862528,1539863551,UA 1539863552,1539864575,ES @@ -45891,7 +54612,7 @@ 1539947520,1539948543,UA 1539948544,1539949567,RO 1539949568,1539950591,MD -1539950592,1539951103,KZ +1539951104,1539951615,UA 1539951616,1539953663,RU 1539953664,1539954687,UA 1539954688,1539956735,RO @@ -45908,7 +54629,8 @@ 1539975168,1539976191,DE 1539976192,1539977215,RU 1539977216,1539978239,DE -1539978240,1539980287,UA +1539978240,1539979263,CZ +1539979264,1539980287,UA 1539980288,1539981311,VG 1539981312,1539982335,SI 1539982336,1539983359,RU @@ -45948,8 +54670,7 @@ 1540025344,1540026367,GB 1540026368,1540028415,UA 1540028416,1540029439,ES -1540029440,1540030463,RU -1540030464,1540031487,DE +1540029440,1540031487,RU 1540031488,1540032511,UA 1540032512,1540033535,RU 1540033536,1540034559,UA @@ -46000,11 +54721,10 @@ 1540081664,1540082687,DE 1540082688,1540083711,NO 1540083712,1540084735,RU -1540084736,1540085759,LU +1540084736,1540085759,NL 1540085760,1540087807,PL 1540087808,1540092927,RU 1540092928,1540094975,PL -1540094976,1540095999,EU 1540096000,1540097023,SE 1540097024,1540099071,DE 1540099072,1540100095,UA @@ -46021,7 +54741,7 @@ 1540118528,1540119551,PL 1540119552,1540120575,UA 1540120576,1540124671,RU -1540124672,1540125695,NO +1540124672,1540125695,UA 1540125696,1540126719,FR 1540126720,1540127743,UA 1540127744,1540128767,GB @@ -46096,7 +54816,7 @@ 1540206592,1540208639,RU 1540208640,1540209663,NO 1540209664,1540211711,RU -1540211712,1540212735,DE +1540211712,1540212735,RO 1540212736,1540213759,RU 1540213760,1540214783,UA 1540214784,1540215807,RU @@ -46146,7 +54866,8 @@ 1540248576,1540249087,GB 1540249088,1540249599,PL 1540249600,1540250111,KZ -1540250112,1540250623,DK +1540250112,1540250367,PL +1540250368,1540250623,CZ 1540250624,1540251135,RU 1540251136,1540251647,GB 1540251648,1540252159,PL @@ -46298,7 +55019,6 @@ 1540339712,1540340735,PL 1540340736,1540341247,CZ 1540341248,1540341759,BG -1540341760,1540342271,GB 1540342272,1540342783,UA 1540342784,1540343295,ES 1540343296,1540343807,GB @@ -46344,7 +55064,7 @@ 1540361472,1540361727,DE 1540361728,1540361983,IT 1540361984,1540362239,EE -1540362240,1540362495,DK +1540362240,1540362495,RU 1540362496,1540363007,DE 1540363008,1540363263,FR 1540363264,1540363519,RU @@ -46479,7 +55199,6 @@ 1540397824,1540398079,DE 1540398080,1540398335,SA 1540398336,1540398591,DK -1540398592,1540398847,IT 1540398848,1540399359,DE 1540399360,1540399871,RU 1540399872,1540400127,GB @@ -46618,15 +55337,14 @@ 1540437248,1540437503,CH 1540437504,1540438015,UA 1540438016,1540438271,PL -1540438272,1540438527,LB +1540438272,1540438527,US 1540438528,1540439039,RU -1540439040,1540439295,NO 1540439296,1540439551,RO 1540439552,1540440063,PL 1540440064,1540440319,UA 1540440320,1540440575,RU 1540440576,1540440831,MD -1540440832,1540441087,FR +1540440832,1540441087,GB 1540441088,1540441343,PL 1540441344,1540441855,RU 1540441856,1540442111,GB @@ -46666,7 +55384,6 @@ 1540451072,1540451327,FR 1540451328,1540451583,ES 1540451584,1540451839,RO -1540451840,1540452095,GB 1540452096,1540452351,CH 1540452352,1540452607,AT 1540452608,1540452863,IL @@ -46711,7 +55428,7 @@ 1540464896,1540465407,GB 1540465408,1540465663,ES 1540465664,1540465919,NL -1540465920,1540466175,UA +1540465920,1540466175,RU 1540466176,1540466431,DK 1540466432,1540466687,RU 1540466688,1540466943,NL @@ -46776,6 +55493,7 @@ 1540483840,1540484095,UA 1540484096,1540484351,DK 1540484352,1540484607,SI +1540484608,1540484863,GB 1540484864,1540485119,UA 1540485120,1540485375,SE 1540485376,1540485631,RO @@ -46788,12 +55506,13 @@ 1540487168,1540487423,PS 1540487424,1540487679,UA 1540487680,1540487935,DE -1540487936,1540488447,GB +1540488192,1540488447,GB 1540488448,1540488703,SA -1540488704,1540488959,DE +1540488704,1540488959,GB 1540488960,1540489215,RO 1540489216,1540491263,RU -1540491264,1540493311,UA +1540491264,1540492287,UA +1540492288,1540493311,PL 1540493312,1540494335,CZ 1540494336,1540495359,UA 1540495360,1540496383,RU @@ -46804,14 +55523,15 @@ 1540502528,1540503551,RU 1540503552,1540504575,NL 1540504576,1540505599,SE -1540505600,1540506623,RU +1540505600,1540506623,RO 1540506624,1540507647,GB 1540507648,1540508671,RU 1540508672,1540509695,UA 1540509696,1540510719,RO 1540510720,1540511743,RU 1540511744,1540512767,BG -1540512768,1540514815,UA +1540512768,1540513791,RU +1540513792,1540514815,UA 1540514816,1540515839,GB 1540515840,1540516863,RU 1540516864,1540517887,UA @@ -46869,7 +55589,7 @@ 1540589568,1540593663,RU 1540593664,1540594687,GB 1540594688,1540595711,IT -1540595712,1540596735,KZ +1540595712,1540596735,UZ 1540596736,1540597759,FR 1540597760,1540598783,SE 1540598784,1540600831,UA @@ -46942,7 +55662,8 @@ 1540633088,1540633343,RU 1540633344,1540633599,CH 1540633600,1540633855,RO -1540633856,1540634367,GB +1540633856,1540634111,AE +1540634112,1540634367,GB 1540634368,1540634623,FR 1540634624,1540634879,UA 1540634880,1540635135,RU @@ -46991,11 +55712,9 @@ 1540646912,1540647167,RU 1540647168,1540647423,GB 1540647424,1540647679,RU -1540647680,1540647935,CY -1540647936,1540648191,GB +1540647680,1540648191,GB 1540648192,1540648447,CH 1540648448,1540648959,RO -1540648960,1540649215,FR 1540649216,1540649471,DE 1540649472,1540649727,IL 1540649728,1540649983,GB @@ -47009,12 +55728,10 @@ 1540651776,1540652031,RU 1540652032,1540652543,UA 1540652544,1540652799,TR -1540652800,1540653055,EU 1540653056,1540653311,FR 1540653312,1540653567,DK 1540653568,1540653823,DE 1540653824,1540654079,GB -1540654080,1540654335,RS 1540654336,1540654591,RU 1540654592,1540654847,SI 1540654848,1540655103,RU @@ -47033,9 +55750,8 @@ 1540659200,1540659455,FR 1540659456,1540659967,UA 1540659968,1540660223,PL -1540660224,1540660479,UA +1540660224,1540660479,RU 1540660480,1540660735,FR -1540660736,1540660991,UA 1540660992,1540661247,RO 1540661248,1540661503,GB 1540661504,1540662015,RO @@ -47080,7 +55796,7 @@ 1540673280,1540673535,SE 1540673536,1540673791,SI 1540673792,1540674047,SE -1540674048,1540674303,GB +1540674048,1540674303,NL 1540674304,1540674559,FR 1540674560,1540674815,GB 1540674816,1540675071,GE @@ -47097,7 +55813,7 @@ 1540678144,1540678399,RU 1540678400,1540678655,RO 1540678656,1540678911,SE -1540678912,1540679167,RO +1540678912,1540679167,EU 1540679168,1540679423,RU 1540679424,1540679679,PL 1540679680,1540679935,LT @@ -47185,6 +55901,7 @@ 1540701952,1540702207,GB 1540702208,1540702463,PL 1540702464,1540702719,PT +1540702720,1540702975,DK 1540702976,1540703231,RU 1540703232,1540703487,MH 1540703488,1540703743,NL @@ -47201,7 +55918,8 @@ 1540706304,1540706559,SI 1540706560,1540706815,GB 1540706816,1540707071,FR -1540707072,1540707583,GB +1540707072,1540707327,AT +1540707328,1540707583,GB 1540707584,1540707839,NL 1540707840,1540708095,MD 1540708096,1540708351,RU @@ -47237,7 +55955,8 @@ 1540717056,1540717311,CZ 1540717312,1540717823,PL 1540717824,1540718079,UA -1540718336,1540718591,DE +1540718080,1540718335,RU +1540718336,1540718591,NO 1540718592,1540718847,CH 1540718848,1540719103,IT 1540719104,1540719359,RU @@ -47326,6 +56045,7 @@ 1540742912,1540743167,RU 1540743168,1540743423,NO 1540743424,1540743679,RU +1540743680,1540743935,PL 1540743936,1540744191,CH 1540744192,1540744447,GR 1540744448,1540744703,UA @@ -47406,8 +56126,7 @@ 1540817920,1540818943,NL 1540818944,1540819967,UA 1540819968,1540820991,CZ -1540820992,1540822015,RU -1540822016,1540823039,FR +1540820992,1540823039,RU 1540823040,1540824063,UA 1540824064,1540825087,RU 1540825088,1540826111,PL @@ -47499,8 +56218,7 @@ 1540893952,1540894207,DE 1540894208,1540894463,RU 1540894464,1540894719,RO -1540894720,1540894975,RS -1540894976,1540895487,RU +1540894720,1540895487,RU 1540895488,1540895743,PL 1540895744,1540895999,RO 1540896000,1540896255,RU @@ -47560,7 +56278,8 @@ 1540910848,1540911103,SE 1540911104,1540911359,GB 1540911360,1540911615,NL -1540911616,1540912127,RU +1540911616,1540911871,RU +1540911872,1540912127,PL 1540912128,1540912383,GB 1540912384,1540912639,PT 1540912640,1540912895,DK @@ -47592,8 +56311,7 @@ 1540920576,1540920831,PL 1540920832,1540921087,HU 1540921088,1540921599,RO -1540921600,1540921855,MT -1540921856,1540922111,EU +1540921600,1540922111,EU 1540922112,1540922367,ES 1540922368,1540922879,RO 1540922880,1540923135,DE @@ -47629,8 +56347,7 @@ 1540930560,1540930815,KW 1540930816,1540931071,KZ 1540931072,1540931327,EU -1540931328,1540931583,PL -1540931584,1540931839,RU +1540931328,1540931839,PL 1540931840,1540932095,GB 1540932096,1540932351,PL 1540932352,1540932607,FR @@ -47666,8 +56383,7 @@ 1540940800,1540941055,FR 1540941056,1540941311,CH 1540941312,1540941567,AT -1540941568,1540941823,UA -1540941824,1540942079,RU +1540941568,1540942079,UA 1540942080,1540942335,RO 1540942336,1540942591,FR 1540942592,1540942847,DE @@ -47720,13 +56436,13 @@ 1540962816,1540963839,UA 1540963840,1540964351,RU 1540964352,1540964863,IR -1540964864,1540965375,UA +1540964864,1540965887,UA 1540965888,1540966399,RU 1540966400,1540966911,GB 1540966912,1540967935,RU 1540967936,1540968447,UA 1540968448,1540969471,RO -1540969472,1540969983,GB +1540969472,1540969983,NL 1540969984,1540970495,DE 1540970496,1540971007,IE 1540971008,1540971519,UA @@ -47877,7 +56593,7 @@ 1541027840,1541028863,RU 1541028864,1541029887,PL 1541029888,1541030911,UA -1541030912,1541031935,DE +1541030912,1541031935,PL 1541031936,1541032959,UA 1541032960,1541033983,PL 1541033984,1541035007,BG @@ -48065,7 +56781,7 @@ 1541169408,1541169663,PL 1541169664,1541169919,SE 1541169920,1541170431,CH -1541170432,1541170687,UA +1541170432,1541170687,NL 1541170688,1541170943,BE 1541170944,1541171199,PL 1541171200,1541171455,UA @@ -48074,7 +56790,7 @@ 1541171968,1541172223,SI 1541172224,1541172479,GR 1541172480,1541172735,RU -1541172736,1541172991,RO +1541172736,1541172991,IS 1541172992,1541173247,BE 1541173248,1541173503,RU 1541173504,1541173759,UA @@ -48209,7 +56925,9 @@ 1541208320,1541208575,NL 1541208576,1541208831,BY 1541208832,1541209087,HU -1541209088,1541210111,UA +1541209088,1541209599,UA +1541209600,1541209855,SE +1541209856,1541210111,UA 1541210112,1541210623,RU 1541210624,1541211135,CZ 1541211136,1541211647,SK @@ -48260,8 +56978,7 @@ 1541236736,1541237247,DE 1541237248,1541237759,RU 1541237760,1541238271,CZ -1541238272,1541238783,ES -1541238784,1541239295,SK +1541238272,1541239295,SK 1541239296,1541239807,PL 1541239808,1541240319,RU 1541240320,1541240831,CH @@ -48323,6 +57040,7 @@ 1541270528,1541271039,IT 1541271040,1541271551,FI 1541271552,1541272063,RO +1541272064,1541272575,RU 1541272576,1541273087,FR 1541273088,1541274111,RU 1541274112,1541274623,DE @@ -48330,7 +57048,7 @@ 1541275136,1541275647,FR 1541275648,1541276671,UA 1541276672,1541277695,RS -1541277696,1541278719,ES +1541277696,1541278719,GB 1541278720,1541280767,UA 1541280768,1541281791,BG 1541281792,1541282815,PL @@ -48445,6 +57163,185 @@ 1541357568,1541357823,PL 1541357824,1541358079,HR 1541358080,1541358335,BG +1541358336,1541358591,GB +1541358592,1541358847,PL +1541358848,1541359103,SK +1541359104,1541359359,LV +1541359360,1541359615,FR +1541359616,1541359871,PL +1541359872,1541360127,FR +1541360128,1541360383,CZ +1541360384,1541360639,RU +1541360640,1541360895,FR +1541360896,1541361151,UA +1541361152,1541361407,PL +1541361408,1541361663,CH +1541361664,1541361919,SI +1541361920,1541362175,PL +1541362176,1541362431,NL +1541362432,1541362687,PL +1541362688,1541362943,FR +1541362944,1541363199,DK +1541363200,1541363455,UA +1541363456,1541363711,IE +1541363712,1541363967,UA +1541363968,1541364479,RU +1541364480,1541364735,AT +1541364736,1541364991,SE +1541364992,1541365247,RU +1541365248,1541365503,GB +1541365504,1541365759,NL +1541365760,1541366015,DE +1541366016,1541366271,UA +1541366272,1541366527,RU +1541366528,1541366783,RO +1541366784,1541367039,NO +1541367040,1541367295,AT +1541367296,1541367807,UA +1541367808,1541368063,GR +1541368064,1541368319,RU +1541368320,1541368575,IL +1541368576,1541368831,FI +1541368832,1541369343,RU +1541369344,1541369599,UA +1541369600,1541369855,GB +1541369856,1541370111,UA +1541370112,1541370367,SI +1541370368,1541370623,DE +1541370624,1541370879,SI +1541370880,1541371135,FI +1541371136,1541371391,RO +1541371392,1541371647,RU +1541371648,1541371903,DE +1541371904,1541372159,RU +1541372160,1541372415,CH +1541372416,1541372671,UA +1541372672,1541372927,ES +1541372928,1541373183,NL +1541373184,1541373439,FR +1541373440,1541373695,GB +1541373696,1541373951,UA +1541373952,1541374207,RU +1541374208,1541374463,DE +1541374464,1541374719,PL +1541374720,1541374975,NL +1541374976,1541375231,GR +1541375232,1541375487,UA +1541375488,1541375999,PL +1541376000,1541376255,UA +1541376256,1541376767,RU +1541376768,1541377023,FR +1541377024,1541377279,NL +1541377280,1541377535,DE +1541377536,1541377791,PL +1541377792,1541378047,ES +1541378048,1541378303,RU +1541378304,1541378559,DE +1541378560,1541378815,GB +1541378816,1541379071,AT +1541379072,1541379327,RO +1541379328,1541379583,UA +1541379584,1541379839,FR +1541379840,1541380095,DE +1541380096,1541380351,UA +1541380352,1541380607,RU +1541380608,1541380863,CH +1541380864,1541381119,IT +1541381120,1541381375,RO +1541381376,1541381631,TR +1541381632,1541381887,RO +1541381888,1541382143,FR +1541382144,1541382399,PL +1541382400,1541382655,IM +1541382656,1541382911,RS +1541382912,1541383167,RO +1541383168,1541383423,CY +1541383424,1541383679,LV +1541383680,1541383935,SI +1541383936,1541384447,PL +1541384448,1541384703,LV +1541384704,1541384959,RU +1541384960,1541385215,PL +1541385216,1541385471,NL +1541385472,1541385727,SK +1541385728,1541385983,SI +1541385984,1541386239,PL +1541386240,1541386495,RU +1541386496,1541386751,UA +1541386752,1541387007,RU +1541387008,1541387263,CH +1541387264,1541387519,UA +1541387520,1541387775,RU +1541387776,1541388031,SI +1541388032,1541388287,RO +1541388288,1541388543,PL +1541388544,1541388799,RO +1541388800,1541389055,CH +1541389056,1541389311,NL +1541389312,1541389567,RU +1541389568,1541389823,SI +1541389824,1541390079,RO +1541390080,1541390335,US +1541390336,1541390591,DK +1541390592,1541390847,SI +1541390848,1541391103,RU +1541391104,1541391359,BE +1541391360,1541391615,PL +1541391616,1541391871,SI +1541391872,1541392127,DE +1541392128,1541392383,RU +1541392384,1541392639,RO +1541392896,1541393151,DE +1541393152,1541393407,GB +1541393408,1541393663,DE +1541393664,1541393919,UA +1541393920,1541394175,ES +1541394176,1541394431,FR +1541394432,1541394687,CY +1541394688,1541394943,SK +1541394944,1541395199,SA +1541395200,1541395455,DE +1541395456,1541395711,PL +1541395712,1541395967,NO +1541395968,1541396223,UA +1541396224,1541396479,LB +1541396480,1541396735,UA +1541396736,1541396991,RU +1541396992,1541397247,GB +1541397504,1541397759,NL +1541397760,1541398015,PL +1541398016,1541398271,HU +1541398272,1541398527,UA +1541398528,1541398783,RU +1541398784,1541399039,PL +1541399040,1541399295,RU +1541399296,1541399551,UA +1541399552,1541399807,DE +1541399808,1541400063,RU +1541400064,1541400319,SI +1541400320,1541400831,SE +1541400832,1541401087,NL +1541401088,1541401343,UA +1541401344,1541401599,DK +1541401600,1541401855,LV +1541401856,1541402111,HR +1541402112,1541402367,SI +1541402368,1541402623,RU +1541402624,1541402879,FR +1541402880,1541403135,PL +1541403136,1541403391,RU +1541403392,1541403647,EE +1541403648,1541403903,RU +1541403904,1541404159,GE +1541404160,1541404415,RU +1541404416,1541404671,DE +1541404672,1541404927,AT +1541404928,1541405183,HR +1541405184,1541405439,PL +1541405440,1541405951,RU +1541405952,1541406207,FR +1541406208,1541406463,RU +1541406464,1541406719,AT 1541406720,1541407231,LV 1541407232,1541407743,UA 1541407744,1541408255,FI @@ -48464,6 +57361,96 @@ 1541416960,1541417471,RO 1541417472,1541417983,SK 1541417984,1541418495,UA +1541418496,1541419007,PL +1541419008,1541419519,CZ +1541419520,1541420031,RO +1541420032,1541420543,RU +1541420544,1541421055,NL +1541421056,1541421567,PL +1541421568,1541422079,GB +1541422080,1541422591,PL +1541422592,1541423103,RU +1541423104,1541423615,UA +1541423616,1541424127,AT +1541424128,1541424639,UA +1541424640,1541425151,AT +1541425152,1541425663,IT +1541425664,1541426175,UA +1541426176,1541426687,RU +1541426688,1541427199,UA +1541427200,1541428223,RU +1541428224,1541429247,UA +1541429248,1541429759,FI +1541429760,1541430271,CZ +1541430272,1541430783,LT +1541430784,1541431295,CH +1541431296,1541431807,UA +1541431808,1541432319,RU +1541432320,1541432831,RO +1541432832,1541433343,RU +1541433344,1541433855,PL +1541433856,1541434367,RU +1541434368,1541434879,GB +1541434880,1541435391,IR +1541435392,1541435903,UA +1541435904,1541436415,RU +1541436416,1541437951,PL +1541437952,1541438463,NL +1541438464,1541439487,RU +1541439488,1541439999,PL +1541440000,1541441023,RU +1541441024,1541441535,LT +1541441536,1541442559,RU +1541442560,1541443071,NL +1541443072,1541444607,PL +1541444608,1541445119,FR +1541445120,1541445631,ES +1541445632,1541446143,GB +1541446144,1541446655,RU +1541446656,1541447167,UA +1541447168,1541447679,RU +1541447680,1541448191,NL +1541448192,1541448703,FR +1541448704,1541449215,NL +1541449216,1541449727,RU +1541449728,1541450239,UA +1541450240,1541450751,RU +1541450752,1541451263,SI +1541451264,1541451775,DK +1541451776,1541452287,IR +1541452288,1541452799,UA +1541452800,1541453311,PL +1541453312,1541453823,RU +1541453824,1541454335,PL +1541454336,1541454847,GB +1541454848,1541455359,EE +1541455360,1541455871,GB +1541455872,1541456383,PL +1541456384,1541456895,RU +1541456896,1541457919,PL +1541457920,1541458943,UA +1541458944,1541459455,RO +1541459456,1541460479,RU +1541460480,1541460991,DK +1541460992,1541461503,RO +1541461504,1541462527,PL +1541462528,1541463039,RU +1541463040,1541463551,PL +1541463552,1541464063,UA +1541464064,1541464575,PL +1541464576,1541465087,DE +1541465088,1541465599,RU +1541465600,1541466111,FR +1541466112,1541467135,RU +1541467136,1541467647,PL +1541467648,1541468159,SI +1541468160,1541468671,ES +1541468672,1541469183,NL +1541469184,1541469695,SE +1541469696,1541470207,LV +1541470208,1541470719,NL +1541470720,1541471231,RS +1541471232,1541472255,UA 1541472256,1541473279,GB 1541473280,1541474303,UA 1541474304,1541475327,PL @@ -48473,6 +57460,883 @@ 1541479424,1541480447,PL 1541480448,1541481471,RO 1541481472,1541485567,UA +1541485568,1541486591,IR +1541486592,1541487615,UA +1541487616,1541488639,NO +1541488640,1541489663,PL +1541489664,1541490687,FI +1541490688,1541491711,UA +1541491712,1541492735,RU +1541492736,1541493759,UA +1541493760,1541494783,CZ +1541494784,1541496831,UA +1541496832,1541497855,SI +1541497856,1541498879,RU +1541498880,1541499903,LT +1541499904,1541500927,UA +1541500928,1541501951,RU +1541501952,1541503999,UA +1541504000,1541506047,RU +1541506048,1541507071,PL +1541507072,1541510143,UA +1541510144,1541511167,RU +1541511168,1541512191,UA +1541512192,1541513215,PL +1541513216,1541517311,UA +1541517312,1541518335,PL +1541518336,1541519359,IT +1541519360,1541521407,PL +1541521408,1541522431,RU +1541522432,1541524479,UA +1541524480,1541525503,RO +1541525504,1541528575,RU +1541528576,1541532671,UA +1541532672,1541533695,RU +1541533696,1541534719,PL +1541534720,1541535743,IT +1541535744,1541536767,US +1541536768,1541537791,RU +1541537792,1541538303,GB +1541538304,1541538815,RO +1541538816,1541539327,UA +1541539328,1541539839,PL +1541539840,1541540351,HR +1541540352,1541541375,RU +1541541376,1541541887,UA +1541541888,1541542399,PL +1541542400,1541542911,FR +1541542912,1541543423,MK +1541543424,1541543935,PL +1541543936,1541544447,GB +1541544448,1541544959,PL +1541544960,1541545471,FR +1541545472,1541545983,RU +1541545984,1541546495,LV +1541546496,1541547007,UA +1541547008,1541547519,SE +1541547520,1541548543,PL +1541548544,1541549567,UA +1541549568,1541550079,DE +1541550080,1541550591,RU +1541550592,1541551103,PL +1541551104,1541552127,RO +1541552128,1541553151,UA +1541553152,1541555199,RU +1541555200,1541556223,PL +1541556224,1541556479,UA +1541556480,1541556735,RU +1541556736,1541557247,IT +1541557248,1541557503,RU +1541557504,1541557759,SI +1541557760,1541558015,RU +1541558016,1541558271,HU +1541558272,1541559295,RU +1541559296,1541560319,RO +1541560320,1541561343,DE +1541561344,1541562879,RU +1541562880,1541563135,FR +1541563136,1541563391,NL +1541563392,1541564415,PL +1541564416,1541565439,RU +1541565440,1541565951,IT +1541565952,1541566463,PL +1541566464,1541567487,SK +1541567488,1541567743,RU +1541567744,1541567999,PL +1541568000,1541568511,SE +1541568512,1541569535,RU +1541569536,1541570559,NL +1541570560,1541571583,RU +1541571584,1541572607,UA +1541572608,1541573119,RU +1541573120,1541573631,UA +1541573632,1541574655,RU +1541574656,1541575167,DK +1541575168,1541575423,PL +1541575424,1541575679,IT +1541575680,1541577727,RU +1541577728,1541578751,AT +1541578752,1541579007,GB +1541579008,1541579263,RU +1541579264,1541579775,DE +1541579776,1541580799,RU +1541580800,1541581311,KZ +1541581312,1541581567,HR +1541581568,1541582847,RU +1541582848,1541583359,ES +1541583360,1541583615,RU +1541583616,1541583871,GE +1541583872,1541584127,SE +1541584128,1541584383,GB +1541584384,1541584895,BE +1541584896,1541585151,DE +1541585152,1541585663,RU +1541585664,1541585919,UA +1541585920,1541586431,RU +1541586432,1541587199,UA +1541587200,1541587455,FR +1541587456,1541588991,PL +1541588992,1541589247,RU +1541589248,1541589503,UA +1541589504,1541590015,CH +1541590016,1541590527,RU +1541590528,1541590783,GB +1541590784,1541591039,UA +1541591040,1541592063,RU +1541592064,1541592575,UA +1541592576,1541593087,FR +1541593088,1541594111,CZ +1541594112,1541594367,EU +1541594368,1541595135,RU +1541595136,1541595647,IR +1541595648,1541596159,BG +1541596160,1541597695,PL +1541597696,1541597951,RU +1541597952,1541598207,AM +1541598208,1541599231,PL +1541599232,1541600255,RS +1541600256,1541600511,HR +1541600512,1541600767,IL +1541600768,1541601023,SI +1541601024,1541601279,RU +1541601280,1541601791,DE +1541601792,1541602047,RU +1541602048,1541602303,PL +1541602304,1541603327,UA +1541603328,1541604351,PL +1541604352,1541605119,TR +1541605120,1541605375,CZ +1541605376,1541606911,RU +1541606912,1541607423,UZ +1541607424,1541608447,RU +1541608448,1541608703,DE +1541608704,1541608959,PL +1541608960,1541609215,SA +1541609216,1541609471,RU +1541609472,1541609983,SA +1541609984,1541610239,GB +1541610240,1541610495,NL +1541610496,1541611775,RU +1541611776,1541612031,RO +1541612032,1541612543,RU +1541612544,1541614079,PL +1541614080,1541614335,UA +1541614336,1541614591,SI +1541614592,1541615615,RU +1541615616,1541615871,CH +1541615872,1541616127,SE +1541616128,1541617663,RU +1541617664,1541619199,PL +1541619200,1541619455,GB +1541619456,1541620735,PL +1541620736,1541620991,RU +1541620992,1541621247,UA +1541621248,1541621759,IL +1541621760,1541622271,RO +1541622272,1541622527,RU +1541622528,1541622783,NL +1541622784,1541623295,PL +1541623296,1541623551,GB +1541623552,1541623807,RU +1541623808,1541624831,PL +1541624832,1541625855,RU +1541625856,1541626367,PL +1541626368,1541626623,RO +1541626624,1541627903,RU +1541627904,1541628415,CZ +1541628416,1541628927,DE +1541628928,1541629183,PT +1541629184,1541629439,LV +1541629440,1541630975,PL +1541630976,1541631231,GR +1541631232,1541631487,IT +1541631488,1541631999,SI +1541632000,1541632511,RU +1541632512,1541632767,NL +1541632768,1541633023,SK +1541633024,1541634303,PL +1541634304,1541634559,MD +1541634560,1541635071,PL +1541635072,1541636095,GB +1541636096,1541636863,AT +1541636864,1541637119,RO +1541637120,1541637631,PL +1541637632,1541638143,CZ +1541638144,1541638399,RU +1541638400,1541638655,FR +1541638656,1541639167,HU +1541639168,1541640191,RU +1541640192,1541641215,KZ +1541641216,1541641727,RU +1541641728,1541642239,UA +1541642240,1541643263,RU +1541643264,1541644287,PL +1541644288,1541645311,RU +1541645312,1541645823,IL +1541645824,1541646079,RO +1541646080,1541646335,PL +1541646336,1541646847,RU +1541646848,1541647359,NO +1541647360,1541648383,RU +1541648384,1541648639,PL +1541648640,1541648895,DK +1541648896,1541649151,GB +1541649152,1541649407,NL +1541649408,1541650431,UA +1541650432,1541650687,RU +1541650688,1541650943,MD +1541650944,1541651199,SE +1541651200,1541651455,FI +1541651456,1541652479,RU +1541652480,1541652991,FI +1541652992,1541653247,FR +1541653248,1541653503,CZ +1541653504,1541654015,PL +1541654016,1541654271,RU +1541654272,1541655551,PL +1541655552,1541656063,AT +1541656064,1541656575,UA +1541656576,1541656831,SE +1541656832,1541657087,BE +1541657088,1541657599,RU +1541657600,1541659647,PL +1541659648,1541660671,GB +1541660672,1541661695,SK +1541661696,1541661951,RU +1541661952,1541662207,NL +1541662208,1541662719,RO +1541662720,1541663743,CZ +1541663744,1541664767,RO +1541664768,1541666047,RU +1541666048,1541666815,GB +1541666816,1541667839,NO +1541667840,1541668095,CH +1541668096,1541668351,GB +1541668352,1541668607,UA +1541668608,1541668863,GE +1541668864,1541669887,GB +1541669888,1541670911,LV +1541670912,1541671423,PL +1541671424,1541671679,RU +1541671680,1541671935,PL +1541671936,1541672959,UA +1541672960,1541674495,RS +1541674496,1541675007,KG +1541675008,1541675519,IE +1541675520,1541676031,RU +1541676032,1541676287,PL +1541676288,1541676543,RO +1541676544,1541677055,RU +1541677056,1541678079,PL +1541678080,1541678591,RO +1541678592,1541678847,BG +1541678848,1541679615,RU +1541679616,1541680127,PL +1541680128,1541681151,CZ +1541681152,1541682175,RU +1541682176,1541682687,DE +1541682688,1541683199,RU +1541683200,1541683455,PL +1541683456,1541683711,RU +1541683712,1541684223,UA +1541684224,1541684735,CH +1541684736,1541686271,RU +1541686272,1541687295,UA +1541687296,1541688319,GB +1541688320,1541688831,RU +1541688832,1541689343,GB +1541689344,1541690367,PL +1541690368,1541691391,LT +1541691392,1541691903,PL +1541691904,1541692159,SE +1541692160,1541692415,ES +1541692416,1541693439,PL +1541693440,1541694463,RU +1541694464,1541694719,CZ +1541694720,1541694975,CH +1541694976,1541695487,RU +1541695488,1541696511,DE +1541696512,1541697535,MD +1541697536,1541698047,PL +1541698048,1541698303,DK +1541698304,1541698559,GB +1541698560,1541699327,RU +1541699328,1541699583,RO +1541699584,1541700095,RU +1541700096,1541700607,UA +1541700608,1541700863,RU +1541700864,1541701119,PL +1541701120,1541701631,IL +1541701632,1541702655,RO +1541702656,1541703679,RU +1541703680,1541704703,PL +1541704704,1541706239,RO +1541706240,1541706751,UA +1541706752,1541707263,RU +1541707264,1541707519,CH +1541707520,1541707775,NL +1541707776,1541708799,RU +1541708800,1541709823,PL +1541709824,1541710335,RU +1541710336,1541710847,IL +1541710848,1541711871,SK +1541711872,1541712127,FR +1541712128,1541712383,TR +1541712384,1541712895,DE +1541712896,1541713919,RU +1541713920,1541714175,NL +1541714176,1541716223,RU +1541716224,1541716479,PL +1541716480,1541716991,UA +1541716992,1541717247,FR +1541717248,1541717503,IR +1541717504,1541718015,DE +1541718016,1541718271,KZ +1541718272,1541719039,NO +1541719040,1541720063,PL +1541720064,1541721087,RU +1541721088,1541721343,PL +1541721344,1541721599,RU +1541721600,1541721855,GB +1541721856,1541722111,SI +1541722112,1541723135,RU +1541723136,1541723647,HU +1541723648,1541723903,NO +1541723904,1541724159,BE +1541724160,1541725183,CZ +1541725184,1541727231,RU +1541727232,1541727743,UA +1541727744,1541727999,RU +1541728000,1541728255,UA +1541728256,1541729023,GB +1541729024,1541729279,DE +1541729280,1541729535,UA +1541729536,1541729791,PL +1541729792,1541730303,RU +1541730304,1541730815,ES +1541730816,1541731071,GB +1541731072,1541731327,DE +1541731328,1541731839,SK +1541731840,1541732351,RU +1541732352,1541732607,IL +1541732608,1541732863,RO +1541732864,1541733119,RU +1541733120,1541733375,GB +1541733376,1541734143,RS +1541734144,1541734399,TR +1541734400,1541734911,RO +1541734912,1541735167,RU +1541735168,1541735423,DE +1541735424,1541735679,GB +1541735680,1541735935,RU +1541735936,1541736447,RO +1541736448,1541737471,RU +1541737472,1541739519,RO +1541739520,1541739775,FR +1541739776,1541740031,NO +1541740032,1541740287,PL +1541740288,1541740543,NL +1541740544,1541740799,SK +1541740800,1541741055,RU +1541741056,1541741567,PL +1541741568,1541742079,SK +1541742080,1541742591,RO +1541742592,1541743103,SA +1541743104,1541743615,TR +1541743616,1541744639,SK +1541744640,1541745663,PL +1541745664,1541746175,TR +1541746176,1541746687,UA +1541746688,1541746943,RU +1541746944,1541747199,NL +1541747200,1541747711,RU +1541747712,1541748735,UA +1541748736,1541748991,RU +1541748992,1541749247,AT +1541749248,1541749503,ES +1541749504,1541749759,RU +1541749760,1541750783,NL +1541750784,1541751295,AE +1541751296,1541751807,UA +1541751808,1541752831,PL +1541752832,1541753087,SI +1541753088,1541753343,GB +1541753344,1541753855,RU +1541753856,1541754879,UA +1541754880,1541755391,IT +1541755392,1541757439,PL +1541757440,1541757951,EU +1541757952,1541758207,GB +1541758208,1541758463,HU +1541758464,1541758719,RU +1541758720,1541758975,FR +1541758976,1541760255,RU +1541760256,1541760511,UA +1541760512,1541761023,CH +1541761024,1541761535,KG +1541761536,1541762047,PL +1541762048,1541763583,RU +1541763584,1541763839,SE +1541763840,1541764095,UA +1541764096,1541765119,RU +1541765120,1541766143,UA +1541766144,1541767167,GB +1541767168,1541767679,UA +1541767680,1541768191,FR +1541768192,1541769215,RO +1541769216,1541769471,FR +1541769472,1541770239,FI +1541770240,1541770495,CH +1541770496,1541770751,SE +1541770752,1541771263,NO +1541771264,1541771775,NL +1541771776,1541772031,RU +1541772032,1541772287,RO +1541772288,1541773311,KZ +1541773312,1541773823,NL +1541773824,1541774079,RU +1541774080,1541774335,TR +1541774336,1541775359,RO +1541775360,1541776895,UZ +1541776896,1541777151,GB +1541777152,1541777407,UA +1541777408,1541778431,DE +1541778432,1541778687,FR +1541778688,1541779455,GB +1541779456,1541779967,RU +1541779968,1541780479,DE +1541780480,1541780735,ES +1541780736,1541780991,GB +1541780992,1541781503,RO +1541781504,1541781759,TR +1541781760,1541782015,RU +1541782016,1541782271,RO +1541782272,1541782527,GB +1541782528,1541783551,RU +1541783552,1541783807,IE +1541783808,1541784063,PL +1541784064,1541784575,DE +1541784576,1541785855,RU +1541785856,1541786111,GB +1541786112,1541786623,RU +1541786624,1541787647,UA +1541787648,1541788159,RU +1541788160,1541788415,UA +1541788416,1541788671,RU +1541788672,1541789183,PL +1541789184,1541789695,IR +1541789696,1541790719,UA +1541790720,1541790975,SA +1541790976,1541791231,RU +1541791232,1541791743,GB +1541791744,1541792255,KG +1541792256,1541792511,UA +1541792512,1541792767,FR +1541792768,1541793023,RO +1541793024,1541793279,HR +1541793280,1541793791,FR +1541793792,1541794047,NL +1541794048,1541794815,RU +1541794816,1541795071,CH +1541795072,1541795327,RU +1541795328,1541795583,PL +1541795584,1541795839,ES +1541795840,1541796863,UA +1541796864,1541797375,RU +1541797376,1541797887,NL +1541797888,1541798143,UA +1541798144,1541798399,PL +1541798400,1541798911,RO +1541798912,1541799935,CZ +1541799936,1541800447,FR +1541800448,1541800959,AT +1541800960,1541801471,FI +1541801472,1541801983,BG +1541801984,1541802495,PL +1541802496,1541803007,RU +1541803008,1541804031,LT +1541804032,1541804287,GB +1541804288,1541804543,PL +1541804544,1541805567,RU +1541805568,1541805823,DE +1541805824,1541806079,RU +1541806080,1541806335,PL +1541806336,1541806591,UA +1541806592,1541807103,RU +1541807104,1541808127,UA +1541808128,1541808383,IR +1541808384,1541809151,NL +1541809152,1541809663,PL +1541809664,1541810175,GB +1541810176,1541810431,PT +1541810432,1541810687,AE +1541810688,1541811199,PL +1541811200,1541811711,SK +1541811712,1541811967,NL +1541811968,1541812991,RU +1541812992,1541813247,NL +1541813248,1541813759,LT +1541813760,1541814015,RU +1541814016,1541814783,ES +1541814784,1541815295,PL +1541815296,1541816319,RU +1541816320,1541816575,BE +1541816576,1541816831,RU +1541816832,1541817343,FR +1541817344,1541818367,DK +1541818368,1541818623,RU +1541818624,1541818879,TR +1541818880,1541819903,PL +1541819904,1541820159,SE +1541820160,1541820415,IL +1541820416,1541820671,MD +1541820672,1541820927,TR +1541820928,1541821183,RU +1541821184,1541821439,DE +1541821440,1541821695,RU +1541821696,1541821951,TR +1541821952,1541822975,PL +1541822976,1541823231,SI +1541823232,1541823487,RU +1541823488,1541823999,UA +1541824000,1541824511,RU +1541824512,1541824767,IT +1541824768,1541825023,GB +1541825024,1541825535,PL +1541825536,1541826047,RU +1541826048,1541826559,IT +1541826560,1541827071,ES +1541827072,1541827327,LV +1541827328,1541827583,RU +1541827584,1541828095,SE +1541828096,1541828351,RU +1541828352,1541828607,LV +1541828608,1541830911,PL +1541830912,1541831167,UA +1541831168,1541831423,PL +1541831424,1541831679,RO +1541831680,1541832191,SA +1541832192,1541833983,SE +1541833984,1541834239,RU +1541834240,1541834495,LV +1541834496,1541834751,RU +1541834752,1541835775,RO +1541835776,1541836287,CH +1541836288,1541836543,AT +1541836544,1541836799,RU +1541836800,1541837055,CZ +1541837056,1541837311,IT +1541837312,1541837823,RU +1541837824,1541838079,PL +1541838080,1541839871,RU +1541839872,1541840383,PL +1541840384,1541840639,RU +1541840640,1541840895,PL +1541840896,1541841407,DE +1541841408,1541842943,PL +1541842944,1541843199,GB +1541843200,1541843455,FR +1541843456,1541843967,BE +1541843968,1541844991,DE +1541844992,1541846015,BE +1541846016,1541846271,PL +1541846272,1541846527,GB +1541846528,1541848063,RU +1541848064,1541848319,HU +1541848320,1541848575,GB +1541848576,1541849087,RU +1541849088,1541850111,BG +1541850112,1541850623,RU +1541850624,1541851135,UA +1541851136,1541852671,PL +1541852672,1541853183,RO +1541853184,1541854207,RU +1541854208,1541854463,FR +1541854464,1541854719,KW +1541854720,1541854975,MD +1541854976,1541855999,RU +1541856000,1541856255,MK +1541856256,1541856511,UA +1541856512,1541857279,PL +1541857280,1541857535,RU +1541857536,1541857791,KW +1541857792,1541858303,RU +1541858304,1541858559,LV +1541858560,1541858815,UA +1541858816,1541859327,BG +1541859328,1541859583,RO +1541859584,1541859839,PL +1541859840,1541860095,RO +1541860096,1541860351,FR +1541860352,1541860607,IL +1541860608,1541860863,NL +1541860864,1541861119,SI +1541861120,1541861375,DK +1541861376,1541861887,RO +1541861888,1541862143,AT +1541862144,1541862399,GB +1541862400,1541862911,NL +1541862912,1541863167,GB +1541863168,1541863423,RU +1541863424,1541863679,RO +1541863680,1541863935,CH +1541863936,1541864191,ES +1541864192,1541864447,GB +1541864448,1541864959,RU +1541864960,1541865471,AL +1541865472,1541865727,RO +1541865728,1541865983,UA +1541865984,1541866239,PL +1541866240,1541866495,FR +1541866496,1541867263,NL +1541867264,1541867519,RO +1541867520,1541867775,RU +1541867776,1541868031,PL +1541868032,1541868287,MT +1541868288,1541868543,AE +1541868544,1541869567,PL +1541869568,1541870079,RU +1541870080,1541871103,PL +1541871104,1541871359,AT +1541871360,1541872639,PL +1541872640,1541873663,CZ +1541873664,1541874175,PL +1541874176,1541874687,RU +1541874688,1541875711,PL +1541875712,1541876735,UA +1541876736,1541877247,PL +1541877248,1541877503,GB +1541877504,1541877759,RU +1541877760,1541878783,RO +1541878784,1541879295,PL +1541879296,1541879807,UA +1541879808,1541880831,UZ +1541880832,1541881343,PL +1541881344,1541881599,IT +1541881600,1541881855,SE +1541881856,1541882879,RU +1541882880,1541883135,LV +1541883136,1541883391,UA +1541883392,1541884927,PL +1541884928,1541885951,LT +1541885952,1541886975,PL +1541886976,1541887999,UA +1541888000,1541888255,RS +1541888256,1541888511,RU +1541888512,1541889023,GB +1541889024,1541889535,PL +1541889536,1541890303,RU +1541890304,1541890559,DE +1541890560,1541891071,UA +1541891072,1541893119,PL +1541893120,1541893631,BE +1541893632,1541894143,PL +1541894144,1541895167,RU +1541895168,1541897727,PL +1541897728,1541897983,RU +1541897984,1541898239,UA +1541898240,1541900799,RU +1541900800,1541901055,RO +1541901056,1541901311,FR +1541901312,1541901567,PL +1541901568,1541901823,RU +1541901824,1541902335,UA +1541902336,1541902847,GB +1541902848,1541903103,RU +1541903104,1541903359,DK +1541903360,1541904383,UA +1541904384,1541904639,PL +1541904640,1541904895,SE +1541904896,1541905407,GB +1541905408,1541905663,RU +1541905664,1541906431,RO +1541906432,1541906687,UA +1541906688,1541907455,RU +1541907456,1541908479,IT +1541908480,1541908991,PL +1541908992,1541909247,UA +1541909248,1541909503,CZ +1541909504,1541910527,NL +1541910528,1541911039,RU +1541911040,1541911295,PL +1541911296,1541911551,IT +1541911552,1541912575,RU +1541912576,1541912831,NL +1541912832,1541913087,UA +1541913088,1541914623,RU +1541914624,1541915647,IL +1541915648,1541916671,RU +1541916672,1541917695,RO +1541917696,1541917951,CH +1541917952,1541918207,PL +1541918208,1541918463,UA +1541918464,1541919743,RO +1541919744,1541919999,DK +1541920000,1541920767,RU +1541920768,1541921279,PT +1541921280,1541921791,RU +1541921792,1541922047,DE +1541922048,1541922303,PL +1541922304,1541922559,RU +1541922560,1541923839,RO +1541923840,1541924095,FR +1541924096,1541924351,UA +1541924352,1541924863,PL +1541924864,1541925119,RO +1541925120,1541926911,RU +1541926912,1541927167,UA +1541927168,1541927679,PL +1541927680,1541927935,DE +1541927936,1541929983,PL +1541929984,1541931007,RU +1541931008,1541932031,UA +1541932032,1541932543,PL +1541932544,1541935103,RU +1541935104,1541936383,RO +1541936384,1541936639,UA +1541936640,1541936895,DE +1541936896,1541937151,FR +1541937152,1541937663,NL +1541937664,1541937919,GE +1541937920,1541938175,PL +1541938176,1541939199,UA +1541939200,1541939967,RU +1541939968,1541940223,ES +1541940224,1541940479,GB +1541940480,1541940735,CH +1541940736,1541940991,PL +1541940992,1541941247,RU +1541941248,1541942271,FR +1541942272,1541944831,PL +1541944832,1541945087,DE +1541945088,1541945855,RO +1541945856,1541946111,PL +1541946112,1541946879,SE +1541946880,1541947391,PL +1541947392,1541948927,IR +1541948928,1541949183,RU +1541949184,1541949439,ES +1541949440,1541950463,IR +1541950464,1541951487,ES +1541951488,1541951743,RU +1541951744,1541951999,ES +1541952000,1541952255,CZ +1541952256,1541952511,NO +1541952512,1541953535,CZ +1541953536,1541954047,LU +1541954048,1541954559,PL +1541954560,1541955583,RU +1541956608,1541957119,LB +1541957120,1541957375,PL +1541957376,1541957631,UA +1541957632,1541957887,GB +1541957888,1541958143,NL +1541958144,1541958655,RS +1541958656,1541959679,RU +1541959680,1541959935,PL +1541959936,1541960191,RU +1541960192,1541960703,NL +1541960704,1541961727,UA +1541961728,1541962751,RU +1541962752,1541963263,GB +1541963264,1541963519,RU +1541963520,1541964031,UA +1541964032,1541964287,RU +1541964288,1541964543,NL +1541964544,1541965823,RU +1541965824,1541966847,NL +1541966848,1541967871,PL +1541967872,1541968895,RU +1541968896,1541969407,RO +1541969408,1541969919,GB +1541969920,1541970175,IT +1541970176,1541970431,GB +1541970432,1541971199,FI +1541971200,1541971967,UA +1541971968,1541972479,PL +1541972480,1541972735,RU +1541972736,1541972991,AT +1541972992,1541974015,PL +1541974016,1541975551,RU +1541975552,1541975807,TR +1541975808,1541976319,PL +1541976320,1541976575,UA +1541976576,1541977087,RU +1541977088,1541977343,IT +1541977344,1541977599,GB +1541977600,1541977855,RO +1541977856,1541978111,PL +1541978112,1541978623,RO +1541978624,1541978879,MD +1541978880,1541979135,FR +1541979136,1541979647,RU +1541979648,1541981183,PL +1541981184,1541981951,RU +1541981952,1541982207,UA +1541982208,1541982719,RS +1541982720,1541984255,RU +1541984256,1541984511,UA +1541984512,1541984767,BG +1541984768,1541985279,RO +1541985280,1541986303,CZ +1541986304,1541986815,RU +1541986816,1541988351,SK +1541988352,1541988607,FR +1541988608,1541988863,RU +1541988864,1541989631,RO +1541989632,1541989887,LI +1541989888,1541990399,RU +1541990400,1541990911,AT +1541990912,1541991167,SI +1541991168,1541991423,RU +1541991424,1541991935,RS +1541991936,1541992191,UA +1541992192,1541992447,SI +1541992448,1541992959,UA +1541992960,1541993215,FR +1541993216,1541994239,RU +1541994240,1541994495,CZ +1541994496,1541995519,PL +1541995520,1541996031,RU +1541996032,1541996287,RO +1541996288,1541996543,RU +1541996544,1541997567,RO +1541997568,1541997823,RU +1541997824,1541998079,GB +1541998080,1541998335,NL +1541998336,1541998591,AT +1541998592,1541999615,DE +1541999616,1542000127,AT +1542000128,1542000383,NO +1542000384,1542000639,GE +1542000640,1542000895,GB +1542000896,1542001151,UA +1542001152,1542001663,PL +1542001664,1542001919,SC +1542001920,1542002175,HU +1542002176,1542002687,NL +1542002688,1542002943,RS +1542002944,1542003199,PL +1542003200,1542003711,RO +1542003712,1542004735,RU +1542004736,1542004991,BG +1542004992,1542005247,GB +1542005248,1542005503,PL +1542005504,1542005759,DE +1542005760,1542006271,HR +1542006272,1542008831,RU +1542008832,1542009343,UA +1542009344,1542009599,LI +1542009600,1542009855,FR +1542009856,1542010367,NL +1542010368,1542010879,RU +1542010880,1542011903,IR +1542011904,1542012159,PL +1542012160,1542012415,RU +1542012416,1542012671,GB +1542012672,1542013951,RU +1542013952,1542014207,FR +1542014208,1542015999,PL 1543503872,1545601023,GB 1545601024,1545673167,SE 1545673168,1545673175,FI @@ -48567,9 +58431,7 @@ 1546323968,1546325503,GE 1546325504,1546325759,SE 1546325760,1546326015,NO -1546326016,1546327295,ES -1546327296,1546327551,FR -1546327552,1546328063,ES +1546326016,1546328063,ES 1546328064,1546330111,CZ 1546330112,1546332159,SE 1546332160,1546334207,GB @@ -48599,15 +58461,17 @@ 1546379264,1546381311,ES 1546381312,1546383359,DK 1546383360,1546385407,IT -1546385408,1546387455,FR -1546387456,1546518527,TR +1546385408,1546385535,FR +1546385536,1546385599,US +1546385600,1546387455,FR +1546387456,1546460960,TR +1546460961,1546460967,NL +1546460968,1546518527,TR 1546518528,1546649599,KZ 1546649600,1546665983,SA 1546665984,1546673823,GB 1546673824,1546673839,RS -1546673840,1546677559,GB -1546677560,1546677561,IN -1546677562,1546678863,GB +1546673840,1546678863,GB 1546678864,1546678871,RS 1546678872,1546680831,GB 1546680832,1546680895,RS @@ -48629,13 +58493,14 @@ 1546878976,1546895359,DE 1546895360,1546911743,IE 1546911744,1546928127,SK -1546928128,1546944511,GB +1546928128,1546929407,GB +1546929408,1546929415,A2 +1546929416,1546944511,GB 1546944512,1546960895,UA 1546960896,1546977279,HU 1546977280,1546993663,MK 1546993664,1547010047,RU 1547010048,1547026431,SI -1547026432,1547042815,NL 1547042816,1547059199,ES 1547059200,1547075583,RU 1547075584,1547091967,GB @@ -48651,7 +58516,13 @@ 1547448320,1547452415,SK 1547452416,1547456511,IT 1547456512,1547460607,RU -1547460608,1547468799,GB +1547460608,1547465727,GB +1547465728,1547465983,ES +1547465984,1547467775,GB +1547467776,1547468031,ES +1547468032,1547468287,GB +1547468288,1547468543,ES +1547468544,1547468799,GB 1547468800,1547472895,PL 1547472896,1547476991,DK 1547476992,1547481087,ES @@ -48669,7 +58540,7 @@ 1547522048,1547526143,CZ 1547526144,1547534335,HU 1547534336,1547538431,FR -1547538432,1547542527,DE +1547538432,1547542527,EU 1547542528,1547546623,FR 1547546624,1547550719,IR 1547550720,1547554815,IE @@ -48705,8 +58576,8 @@ 1547620352,1547620359,A2 1547620360,1547620367,NG 1547620368,1547620375,A2 -1547620376,1547620383,NG -1547620384,1547620399,A2 +1547620376,1547620391,NG +1547620392,1547620399,A2 1547620400,1547620407,NG 1547620408,1547620415,A2 1547620416,1547620423,NG @@ -48727,17 +58598,15 @@ 1547620936,1547620951,A2 1547620952,1547620959,NG 1547620960,1547620967,A2 -1547620968,1547620983,NG -1547620984,1547620999,A2 +1547620968,1547620991,NG +1547620992,1547620999,A2 1547621000,1547621031,NG 1547621032,1547621039,A2 1547621040,1547621063,NG 1547621064,1547621071,A2 1547621072,1547621087,NG 1547621088,1547621095,A2 -1547621096,1547621119,NG -1547621120,1547621127,A2 -1547621128,1547621135,NG +1547621096,1547621135,NG 1547621136,1547621143,A2 1547621144,1547621151,NG 1547621152,1547621167,A2 @@ -48754,12 +58623,81 @@ 1547621304,1547621335,NG 1547621336,1547621351,A2 1547621352,1547621375,NG -1547621376,1547622463,A2 -1547622464,1547622471,NG -1547622472,1547624447,A2 +1547621376,1547621447,A2 +1547621448,1547621455,NG +1547621456,1547621463,A2 +1547621464,1547621471,NG +1547621472,1547621575,A2 +1547621576,1547621583,NG +1547621584,1547621615,A2 +1547621616,1547621623,NG +1547621624,1547621687,A2 +1547621688,1547621711,NG +1547621712,1547622407,A2 +1547622408,1547622415,NG +1547622416,1547622455,A2 +1547622456,1547622471,NG +1547622472,1547622511,A2 +1547622512,1547622527,NG +1547622528,1547622559,A2 +1547622560,1547622575,NG +1547622576,1547622583,A2 +1547622584,1547622615,NG +1547622616,1547622623,A2 +1547622624,1547622631,NG +1547622632,1547622911,A2 +1547622912,1547622935,NG +1547622936,1547622951,A2 +1547622952,1547622959,NG +1547622960,1547622967,A2 +1547622968,1547622983,NG +1547622984,1547622991,A2 +1547622992,1547623015,NG +1547623016,1547623031,A2 +1547623032,1547623039,NG +1547623040,1547623047,A2 +1547623048,1547623071,NG +1547623072,1547623103,A2 +1547623104,1547623159,NG +1547623160,1547623167,A2 +1547623168,1547623175,NG +1547623176,1547623183,A2 +1547623184,1547623191,NG +1547623192,1547623199,A2 +1547623200,1547623207,NG +1547623208,1547623215,A2 +1547623216,1547623247,NG +1547623248,1547623255,A2 +1547623256,1547623263,NG +1547623264,1547623287,A2 +1547623288,1547623295,NG +1547623296,1547623319,A2 +1547623320,1547623327,NG +1547623328,1547623335,A2 +1547623336,1547623343,NG +1547623344,1547623359,A2 +1547623360,1547623367,NG +1547623368,1547623383,A2 +1547623384,1547623391,NG +1547623392,1547623399,A2 +1547623400,1547623415,NG +1547623416,1547623455,A2 +1547623456,1547623463,NG +1547623464,1547623479,A2 +1547623480,1547623487,NG +1547623488,1547623495,A2 +1547623496,1547623519,NG +1547623520,1547623527,A2 +1547623528,1547623559,NG +1547623560,1547623567,A2 +1547623568,1547623615,NG +1547623616,1547623727,A2 +1547623728,1547623735,NG +1547623736,1547624447,A2 1547624448,1547628543,CZ 1547628544,1547632639,BG -1547632640,1547636735,TR +1547632640,1547634687,GB +1547634688,1547636735,TR 1547636736,1547640831,SI 1547640832,1547644927,PL 1547644928,1547649023,CZ @@ -48782,7 +58720,15 @@ 1547777120,1547777127,IT 1547777128,1548157119,NL 1548157120,1548157183,DE -1548157184,1548222463,NL +1548157184,1548157951,NL +1548157952,1548158207,SE +1548158208,1548158623,NL +1548158624,1548158639,DE +1548158640,1548158975,NL +1548158976,1548159103,DE +1548159104,1548159231,NL +1548159232,1548159487,ES +1548159488,1548222463,NL 1548222464,1548746751,DE 1548746752,1549271039,RO 1549271040,1549795327,FR @@ -48792,7 +58738,8 @@ 1550319616,1550581759,CH 1550581760,1550843903,NL 1550843904,1550974975,UA -1550974976,1550996223,RO +1550974976,1550975231,MD +1550975232,1550996223,RO 1550996224,1550996479,CH 1550996480,1551007743,RO 1551007744,1551106047,MD @@ -48842,17 +58789,26 @@ 1551548416,1551551487,DE 1551551488,1551556607,EU 1551556608,1551558655,FR -1551558656,1551564799,EU +1551558656,1551560703,EU +1551560704,1551561727,DE +1551561728,1551562751,FR +1551562752,1551564799,EU 1551564800,1551572991,FR 1551572992,1551576063,NL 1551576064,1551577087,EU 1551577088,1551580159,NL -1551580160,1551630335,EU +1551580160,1551604479,EU +1551604480,1551604735,SE +1551604736,1551630335,EU 1551630336,1551892479,RU 1551892480,1556086783,FR -1556086784,1556486729,DE -1556486730,1556486730,A2 -1556486731,1558708223,DE +1556086784,1556486924,DE +1556486925,1556486925,A2 +1556486926,1556493903,DE +1556493904,1556493911,A2 +1556493912,1556497655,DE +1556497656,1556497663,A2 +1556497664,1558708223,DE 1558708224,1559232511,GB 1559232512,1559240703,IL 1559240704,1559248895,BA @@ -48867,7 +58823,9 @@ 1559314432,1559322623,GE 1559322624,1559330815,RU 1559330816,1559339007,BA -1559339008,1559339743,RU +1559339008,1559339647,RU +1559339648,1559339679,MY +1559339680,1559339743,RU 1559339744,1559339775,MH 1559339776,1559341695,RU 1559341696,1559341703,ES @@ -48921,7 +58879,9 @@ 1560018944,1560051711,DE 1560051712,1560084479,RU 1560084480,1560117247,JO -1560117248,1560150015,CZ +1560117248,1560119295,CZ +1560119296,1560121343,UA +1560121344,1560150015,CZ 1560150016,1560182783,NL 1560182784,1560215551,SE 1560215552,1560281087,RU @@ -48943,11 +58903,10 @@ 1566081024,1566085119,RU 1566085120,1566089215,NL 1566089216,1566097407,RU +1566097408,1566101503,HU 1566101504,1566105599,RU 1566105600,1566109695,DE -1566109696,1566111231,CH -1566111232,1566111487,FR -1566111488,1566113791,CH +1566109696,1566113791,CH 1566113792,1566117887,DE 1566117888,1566121983,TR 1566121984,1566126079,NO @@ -49030,6 +58989,7 @@ 1566363648,1566365695,GB 1566365696,1566367743,RU 1566367744,1566371839,ES +1566371840,1566373887,IT 1566373888,1566375935,RS 1566375936,1566377983,DE 1566377984,1566380031,BG @@ -49037,41 +58997,82 @@ 1566382080,1566384127,TR 1566384128,1566386175,RU 1566386176,1566388223,FR -1566388224,1566388991,HU +1566388224,1566388479,HK +1566388480,1566388991,HU 1566388992,1566389247,SC 1566389248,1566389503,HU 1566389504,1566389759,SC 1566389760,1566390271,US 1566390272,1566392319,LT 1566392320,1566394367,ES -1566394368,1566396415,NO +1566394368,1566396175,NO +1566396176,1566396191,NL +1566396192,1566396415,NO 1566396416,1566398463,GB 1566398464,1566400511,RU 1566400512,1566400575,NO -1566400576,1566400607,NL -1566400608,1566400639,GB +1566400576,1566400639,GB 1566400640,1566400671,NO 1566400672,1566400703,DE 1566400704,1566400735,NL -1566400736,1566400767,DE -1566400768,1566400832,NO -1566400833,1566400895,GB -1566400896,1566401023,NO +1566400736,1566400863,NO +1566400864,1566400871,GB +1566400872,1566400903,NO +1566400904,1566400907,DE +1566400908,1566400911,GB +1566400912,1566400915,GE +1566400916,1566400919,NO +1566400920,1566400923,NE +1566400924,1566400943,NO +1566400944,1566400955,NE +1566400956,1566400967,NO +1566400968,1566400979,GB +1566400980,1566400983,GE +1566400984,1566400987,NE +1566400988,1566401023,NO 1566401024,1566401055,US 1566401056,1566401087,NO -1566401088,1566401215,US -1566401216,1566401279,NO -1566401280,1566401535,US +1566401088,1566401247,US +1566401248,1566401279,NO +1566401280,1566401311,US +1566401312,1566401399,NO +1566401400,1566401463,US +1566401464,1566401467,NO +1566401468,1566401483,US +1566401484,1566401491,NO +1566401492,1566401499,US +1566401500,1566401503,NO +1566401504,1566401535,US 1566401536,1566401599,IN -1566401600,1566401663,CN -1566401664,1566401727,SG -1566401728,1566401791,AU +1566401600,1566401631,HK +1566401632,1566401663,NO +1566401664,1566401695,SG +1566401696,1566401727,NO +1566401728,1566401759,AU +1566401760,1566401791,NO 1566401792,1566401856,SI -1566401857,1566401919,HK -1566401920,1566401983,NO -1566401984,1566402047,AU -1566402048,1566402559,NO -1566402560,1566404607,IT +1566401857,1566401887,NO +1566401888,1566401919,US +1566401920,1566401967,NO +1566401968,1566401975,HK +1566401976,1566401987,AU +1566401988,1566401991,HK +1566401992,1566401999,SG +1566402000,1566402003,AU +1566402004,1566402011,NO +1566402012,1566402031,HK +1566402032,1566402111,NO +1566402112,1566402143,HK +1566402144,1566402175,NO +1566402176,1566402199,US +1566402200,1566402207,NO +1566402208,1566402215,US +1566402216,1566402223,NO +1566402224,1566402239,US +1566402240,1566402255,NO +1566402256,1566402303,US +1566402304,1566402559,NO +1566402560,1566404607,IQ 1566404608,1566406655,ES 1566406656,1566408703,NL 1566408704,1566410751,GB @@ -49087,7 +59088,6 @@ 1566437376,1566439423,BE 1566439424,1566443519,DE 1566443520,1566445567,NO -1566445568,1566447615,CY 1566447616,1566451711,IT 1566451712,1566453759,IL 1566453760,1566455807,IQ @@ -49107,8 +59107,10 @@ 1566470144,1566470159,IE 1566470160,1566470171,GB 1566470172,1566470239,IE -1566470240,1566470343,GB -1566470344,1566470351,IE +1566470240,1566470279,GB +1566470280,1566470283,IE +1566470284,1566470303,GB +1566470304,1566470351,IE 1566470352,1566470367,GB 1566470368,1566470511,IE 1566470512,1566470527,GB @@ -49116,18 +59118,20 @@ 1566470560,1566470563,GB 1566470564,1566470623,IE 1566470624,1566470655,GB -1566470656,1566470719,IE -1566470720,1566470727,GB -1566470728,1566470739,IE +1566470656,1566470739,IE 1566470740,1566470743,GB -1566470744,1566470847,IE -1566470848,1566470879,GB -1566470880,1566470895,IE -1566470896,1566470911,GB -1566470912,1566471051,IE -1566471052,1566471191,GB +1566470744,1566470855,IE +1566470856,1566470859,GB +1566470860,1566471031,IE +1566471032,1566471039,GB +1566471040,1566471051,IE +1566471052,1566471151,GB +1566471152,1566471157,IE +1566471158,1566471191,GB 1566471192,1566471229,IE -1566471230,1566474239,GB +1566471230,1566471247,GB +1566471248,1566471263,IE +1566471264,1566474239,GB 1566474240,1566476287,DE 1566476288,1566478335,BG 1566478336,1566482431,RU @@ -49173,7 +59177,9 @@ 1566568448,1566570495,KZ 1566570496,1566570943,NL 1566570944,1566570951,DE -1566570952,1566572543,NL +1566570952,1566571479,NL +1566571480,1566571483,DE +1566571484,1566572543,NL 1566572544,1566703615,GB 1566703616,1566769151,SA 1566769152,1566773759,CZ @@ -49199,15 +59205,23 @@ 1567696384,1567696895,MD 1567696896,1567705087,RO 1567705088,1567707135,MD -1567707136,1567715327,RO +1567707136,1567712767,RO +1567712768,1567713279,DE +1567713280,1567715327,RO 1567715328,1567717375,MD -1567717376,1567752191,RO +1567717376,1567750655,RO +1567750656,1567751167,SE +1567751168,1567752191,RO 1567752192,1567756287,MD 1567756288,1567775743,RO 1567775744,1567776767,MD 1567776768,1567830015,RO 1567830016,1567831039,MD -1567831040,1567883263,RO +1567831040,1567840255,RO +1567840256,1567842303,DE +1567842304,1567880191,RO +1567880192,1567881215,SE +1567881216,1567883263,RO 1567883264,1567948799,MD 1567948800,1568026623,RO 1568026624,1568030719,MD @@ -49215,7 +59229,61 @@ 1568083968,1568086015,MD 1568086016,1568178175,RO 1568178176,1568243711,RU -1568243712,1568276479,FR +1568243712,1568243967,GP +1568243968,1568244735,FR +1568244736,1568244991,GP +1568244992,1568245759,FR +1568245760,1568246527,GF +1568246528,1568247039,GP +1568247040,1568247551,GF +1568247552,1568248831,GP +1568248832,1568249087,MQ +1568249088,1568250879,GP +1568250880,1568251135,MQ +1568251136,1568251903,GP +1568251904,1568252159,MQ +1568252160,1568252927,GP +1568252928,1568253183,MQ +1568253184,1568254719,GP +1568254720,1568254975,GF +1568254976,1568255743,GP +1568255744,1568255999,GF +1568256000,1568257791,GP +1568257792,1568258303,MQ +1568258304,1568259071,GF +1568259072,1568259327,MQ +1568259328,1568260095,GP +1568260096,1568260351,MQ +1568260352,1568261119,FR +1568261120,1568261375,MQ +1568261376,1568262143,FR +1568262144,1568262399,MQ +1568262400,1568263167,FR +1568263168,1568263423,MQ +1568263424,1568263679,FR +1568263680,1568263935,MQ +1568263936,1568264447,GP +1568264448,1568265215,FR +1568265216,1568265471,GP +1568265472,1568266239,FR +1568266240,1568266495,GP +1568266496,1568267263,FR +1568267264,1568267519,GP +1568267520,1568267775,FR +1568267776,1568268287,GP +1568268288,1568268543,GF +1568268544,1568269311,FR +1568269312,1568269567,MQ +1568269568,1568270335,FR +1568270336,1568270591,GP +1568270592,1568271359,FR +1568271360,1568271615,GP +1568271616,1568272383,FR +1568272384,1568272639,GP +1568272640,1568273407,GF +1568273408,1568274687,MQ +1568274688,1568275455,FR +1568275456,1568276479,MQ 1568276480,1568293135,DE 1568293136,1568293151,SA 1568293152,1568294223,DE @@ -49232,7 +59300,9 @@ 1568309248,1568342015,RO 1568342016,1568374783,BG 1568374784,1568440319,RU -1568440320,1568473087,NO +1568440320,1568443919,NO +1568443920,1568443927,SE +1568443928,1568473087,NO 1568473088,1568505855,BY 1568505856,1568538623,NL 1568538624,1568555007,IR @@ -49247,12 +59317,15 @@ 1570242560,1570275327,GB 1570275328,1570308095,BG 1570308096,1570340863,CZ -1570340864,1570406399,RU +1570340864,1570373631,RU +1570373632,1570406399,NL 1570406400,1570439167,PL 1570439168,1570471935,TR 1570471936,1570480895,BG 1570480896,1570481151,MK -1570481152,1570504703,BG +1570481152,1570492159,BG +1570492160,1570492415,ES +1570492416,1570504703,BG 1570504704,1570570239,ES 1570570240,1570572287,NL 1570572288,1570574335,UA @@ -49277,12 +59350,18 @@ 1570621440,1570625535,RU 1570625536,1570627583,GB 1570627584,1570635775,RU -1570635776,1570644991,FR +1570635776,1570644767,FR +1570644768,1570644775,GB +1570644776,1570644991,FR 1570644992,1570645055,GB -1570645056,1570652159,FR +1570645056,1570645231,FR +1570645232,1570645247,GB +1570645248,1570652159,FR 1570652160,1570652287,SE 1570652288,1570652291,MY -1570652292,1570652543,SE +1570652292,1570652295,GB +1570652296,1570652299,DE +1570652300,1570652543,SE 1570652544,1570652551,FR 1570652552,1570652891,SE 1570652892,1570652895,DE @@ -49297,7 +59376,9 @@ 1570660360,1570660367,SE 1570660368,1570660383,FR 1570660384,1570660387,RU -1570660388,1570660543,SE +1570660388,1570660407,SE +1570660408,1570660411,DE +1570660412,1570660543,SE 1570660544,1570660575,FI 1570660576,1570660591,GB 1570660592,1570660595,RU @@ -49307,14 +59388,14 @@ 1570660616,1570660619,RU 1570660620,1570660623,SE 1570660624,1570660639,FR -1570660640,1570660863,SE +1570660640,1570660675,DE +1570660676,1570660863,SE 1570660864,1570661375,NO 1570661376,1570661631,GB 1570661632,1570662143,SE 1570662144,1570662399,DE 1570662400,1570663423,SE -1570663424,1570663679,US -1570663680,1570663935,GB +1570663424,1570663935,GB 1570663936,1570665343,SE 1570665344,1570665351,GB 1570665352,1570665407,SE @@ -49326,16 +59407,22 @@ 1570665920,1570665935,GB 1570665936,1570665951,IT 1570665952,1570665967,FR -1570665968,1570666175,SE +1570665968,1570666143,SE +1570666144,1570666147,DE +1570666148,1570666175,SE 1570666176,1570666191,GB 1570666192,1570666223,FR 1570666224,1570666227,SE 1570666228,1570666231,NO -1570666232,1570666367,SE +1570666232,1570666263,SE +1570666264,1570666267,US +1570666268,1570666367,SE 1570666368,1570666383,FR 1570666384,1570666387,SE 1570666388,1570666391,NL -1570666392,1570666431,SE +1570666392,1570666395,SE +1570666396,1570666399,DE +1570666400,1570666431,SE 1570666432,1570666447,GB 1570666448,1570666463,DE 1570666464,1570666495,SE @@ -49350,25 +59437,34 @@ 1570666752,1570666755,ES 1570666756,1570666759,SE 1570666760,1570666767,GB -1570666768,1570666943,SE +1570666768,1570666887,SE +1570666888,1570666891,DE +1570666892,1570666943,SE 1570666944,1570666959,FR 1570666960,1570666975,SE 1570666976,1570666991,FR 1570666992,1570667007,SE 1570667008,1570667011,ES 1570667012,1570667015,SE -1570667016,1570667023,GB +1570667016,1570667023,FI 1570667024,1570667039,ES -1570667040,1570667199,SE +1570667040,1570667167,SE +1570667168,1570667171,DE +1570667172,1570667199,SE 1570667200,1570667215,FR 1570667216,1570667231,SE 1570667232,1570667247,FR 1570667248,1570667263,SE 1570667264,1570667267,ES -1570667268,1570667279,SE -1570667280,1570667295,ES +1570667268,1570667283,SE +1570667284,1570667287,MT +1570667288,1570667295,SE 1570667296,1570667327,GB -1570667328,1570667455,SE +1570667328,1570667335,SE +1570667336,1570667339,GB +1570667340,1570667343,NL +1570667344,1570667347,DE +1570667348,1570667455,SE 1570667456,1570667471,FR 1570667472,1570667487,SE 1570667488,1570667503,FR @@ -49377,10 +59473,14 @@ 1570667520,1570667523,NL 1570667524,1570667527,IT 1570667528,1570667531,NO -1570667532,1570667535,GB +1570667532,1570667535,IT 1570667536,1570667587,SE 1570667588,1570667591,US -1570667592,1570667711,SE +1570667592,1570667599,SE +1570667600,1570667603,DE +1570667604,1570667647,SE +1570667648,1570667651,US +1570667652,1570667711,SE 1570667712,1570667727,FR 1570667728,1570667743,NL 1570667744,1570667775,SE @@ -49392,16 +59492,23 @@ 1570667904,1570667907,SE 1570667908,1570667911,RU 1570667912,1570667915,US -1570667916,1570667967,SE +1570667916,1570667919,SE +1570667920,1570667923,DE +1570667924,1570667967,SE 1570667968,1570667983,FR 1570667984,1570668031,SE 1570668032,1570668035,NL -1570668036,1570668287,SE +1570668036,1570668047,SE +1570668048,1570668055,ES +1570668056,1570668063,NL +1570668064,1570668287,SE 1570668288,1570668291,NL 1570668292,1570668351,SE 1570668352,1570668415,NO 1570668416,1570668543,SE -1570668544,1570701311,RU +1570668544,1570671983,RU +1570671984,1570671987,TR +1570671988,1570701311,RU 1570701312,1570717695,PL 1570717696,1570725887,HR 1570725888,1570734079,DE @@ -49415,20 +59522,33 @@ 1571291136,1571422207,RO 1571422208,1571426303,RU 1571426304,1571428351,CZ -1571428352,1571428863,UA -1571428864,1571430399,CZ -1571430400,1571432447,UA +1571428352,1571428863,RU +1571428864,1571429119,KZ +1571429120,1571429375,RU +1571429376,1571432447,UA 1571432448,1571434495,CZ 1571434496,1571435519,UA -1571435520,1571438591,CZ +1571435520,1571436031,NL +1571436032,1571436287,UA +1571436288,1571438591,RU 1571438592,1571441663,UA 1571441664,1571442175,KZ 1571442176,1571442687,NL 1571442688,1571446783,CZ -1571446784,1571448831,KZ +1571446784,1571447807,KZ +1571447808,1571448831,CZ 1571448832,1571450879,US 1571450880,1571451903,UA -1571451904,1571487743,CZ +1571451904,1571453951,CZ +1571453952,1571454975,GB +1571454976,1571455999,RU +1571456000,1571456511,CY +1571456512,1571456767,RU +1571456768,1571457023,CZ +1571457024,1571458047,UA +1571458048,1571459071,CZ +1571459072,1571463167,UA +1571463168,1571487743,CZ 1571487744,1571495935,SK 1571495936,1571553279,CZ 1571553280,1571684351,IL @@ -49465,7 +59585,9 @@ 1571724032,1571725311,GB 1571725312,1571727359,RO 1571727360,1571729407,IE -1571729408,1571731455,SK +1571729408,1571729791,SK +1571729792,1571729799,CZ +1571729800,1571731455,SK 1571731456,1571732479,CH 1571732480,1571732495,LI 1571732496,1571733503,CH @@ -49506,7 +59628,10 @@ 1572028416,1572044799,RU 1572044800,1572061183,IT 1572061184,1572077567,PL -1572093952,1572110335,BG +1572077568,1572093951,RU +1572093952,1572095999,NL +1572096000,1572098047,DE +1572102144,1572110335,BA 1572110336,1572126719,RU 1572126720,1572143103,UA 1572143104,1572159487,DE @@ -49516,7 +59641,12 @@ 1572225024,1572241407,TR 1572241408,1572257791,SE 1572257792,1572274175,FR -1572274176,1572282111,SG +1572274176,1572276223,SG +1572276224,1572277247,US +1572277248,1572277759,DE +1572277760,1572280319,SG +1572280320,1572280575,DE +1572280576,1572282111,SG 1572282112,1572282367,PT 1572282368,1572290559,SG 1572290560,1572306943,RU @@ -49568,7 +59698,9 @@ 1572504576,1572504703,RO 1572504704,1572504831,TR 1572504832,1572505087,SG -1572505088,1572507199,IT +1572505088,1572505983,IT +1572505984,1572506623,GR +1572506624,1572507199,IT 1572507200,1572507207,GB 1572507208,1572507647,IT 1572507648,1572511743,GB @@ -49580,10 +59712,13 @@ 1572524032,1572528127,GE 1572528128,1572532223,RU 1572532224,1572536319,IT -1572536320,1572538367,GB +1572536320,1572536831,JE +1572536832,1572537087,GB +1572537088,1572538111,JE +1572538112,1572538175,GB +1572538176,1572538367,JE 1572538368,1572540415,NL -1572540416,1572540479,DE -1572540480,1572540511,GB +1572540416,1572540511,GB 1572540512,1572540519,DE 1572540520,1572541439,GB 1572541440,1572541447,FR @@ -49591,25 +59726,39 @@ 1572541456,1572541463,FR 1572541464,1572541471,GB 1572541472,1572541535,FR -1572541536,1572541951,GB +1572541536,1572541543,GB +1572541544,1572541551,CH +1572541552,1572541951,GB 1572541952,1572541983,DE 1572541984,1572541999,ES 1572542000,1572542015,GB 1572542016,1572542031,HU -1572542032,1572542207,GB +1572542032,1572542071,GB +1572542072,1572542079,DE +1572542080,1572542087,ES +1572542088,1572542111,GB +1572542112,1572542119,PL +1572542120,1572542127,ES +1572542128,1572542151,GB +1572542152,1572542159,DE +1572542160,1572542207,GB 1572542208,1572542463,FR 1572542464,1572544511,IT +1572544512,1572546559,IQ 1572546560,1572548607,FR +1572548608,1572550655,NL 1572550656,1572552703,DE 1572552704,1572554751,TR -1572554752,1572556799,CH +1572554752,1572556799,RU 1572556800,1572558847,NO 1572558848,1572560895,IT 1572560896,1572562943,RU 1572562944,1572564991,CZ 1572564992,1572567039,DE 1572567040,1572569087,RU -1572569088,1572571135,NL +1572569088,1572569343,NL +1572569344,1572569599,GB +1572569600,1572571135,NL 1572571136,1572573183,RO 1572573184,1572574975,GG 1572574976,1572575167,GB @@ -49622,7 +59771,9 @@ 1572587520,1572589567,TR 1572589568,1572591615,CH 1572591616,1572593663,NL -1572593664,1572595711,GB +1572593664,1572594687,GB +1572594688,1572594943,FR +1572594944,1572595711,GB 1572595712,1572597759,DE 1572597760,1572599807,RS 1572599808,1572601855,DE @@ -49634,7 +59785,7 @@ 1572612096,1572614143,RU 1572614144,1572616191,ES 1572616192,1572618239,CH -1572618240,1572620287,RS +1572618240,1572620287,NL 1572620288,1572620415,CH 1572620416,1572620431,CZ 1572620432,1572620559,CH @@ -49661,17 +59812,13 @@ 1572661248,1572663295,NO 1572663296,1572665343,DE 1572665344,1572667391,NL -1572667392,1572667903,GB -1572667904,1572667927,SA -1572667928,1572668303,GB -1572668304,1572668311,SA -1572668312,1572668415,GB -1572668416,1572668431,SA -1572668432,1572668463,GB -1572668464,1572668471,SA -1572668472,1572668639,GB -1572668640,1572668647,SA -1572668648,1572669439,GB +1572667392,1572668655,GB +1572668656,1572668671,CY +1572668672,1572668703,GB +1572668704,1572668711,CY +1572668712,1572668719,GB +1572668720,1572668727,CY +1572668728,1572669439,GB 1572669440,1572673535,RU 1572673536,1572675583,AT 1572675584,1572677631,ES @@ -49748,7 +59895,9 @@ 1572800512,1572804607,RU 1572804608,1572808703,GB 1572808704,1572810751,FR -1572810752,1572812799,DE +1572810752,1572812031,DE +1572812032,1572812543,RO +1572812544,1572812799,DE 1572812800,1572814847,RU 1572814848,1572816895,KW 1572816896,1572818943,RU @@ -49773,20 +59922,29 @@ 1572847616,1572849663,GI 1572849664,1572851711,GB 1572851712,1572853759,DE -1572853760,1572853769,BE +1572853760,1572853760,EU +1572853761,1572853767,BE +1572853768,1572853769,EU 1572853770,1572853770,DK -1572853771,1572854015,BE +1572853771,1572853775,EU +1572853776,1572854015,BE 1572854016,1572854271,LU -1572854272,1572854284,BE +1572854272,1572854272,EU +1572854273,1572854284,BE 1572854285,1572854285,NL 1572854286,1572854286,CH 1572854287,1572854287,LU 1572854288,1572854527,BE -1572854528,1572855295,EU +1572854528,1572855039,EU +1572855040,1572855071,BE +1572855072,1572855295,EU 1572855296,1572855551,CH -1572855552,1572855561,BE +1572855552,1572855552,EU +1572855553,1572855558,BE +1572855559,1572855561,EU 1572855562,1572855562,DK -1572855563,1572855807,BE +1572855563,1572855567,EU +1572855568,1572855807,BE 1572855808,1572857855,KZ 1572857856,1572859903,SE 1572859904,1572861951,IT @@ -49807,16 +59965,17 @@ 1578588160,1578590207,PL 1578590208,1578590223,FR 1578590224,1578590231,ES -1578590232,1578590271,FR +1578590232,1578590239,IT +1578590240,1578590271,FR 1578590272,1578590275,NL 1578590276,1578590279,PT 1578590280,1578590283,PL 1578590284,1578590287,GB 1578590288,1578590303,DE 1578590304,1578590311,IT -1578590312,1578590319,FR -1578590320,1578590335,CH -1578590336,1578590347,FR +1578590312,1578590339,FR +1578590340,1578590343,DE +1578590344,1578590347,FR 1578590348,1578590351,PL 1578590352,1578590415,FR 1578590416,1578590431,PL @@ -49825,12 +59984,15 @@ 1578590472,1578590479,DE 1578590480,1578590495,IT 1578590496,1578590527,PL -1578590528,1578590543,FR -1578590544,1578590559,GB +1578590528,1578590535,ES +1578590536,1578590543,FR +1578590544,1578590559,PL 1578590560,1578590575,ES -1578590576,1578590603,FR +1578590576,1578590599,FR +1578590600,1578590603,LT 1578590604,1578590607,PL -1578590608,1578590619,FR +1578590608,1578590615,GB +1578590616,1578590619,DE 1578590620,1578590623,IT 1578590624,1578590639,FR 1578590640,1578590647,CZ @@ -49838,21 +60000,29 @@ 1578590656,1578590659,FR 1578590660,1578590663,CZ 1578590664,1578590667,FR -1578590668,1578590687,PL -1578590688,1578590699,FR -1578590700,1578590731,PL -1578590732,1578590735,DE -1578590736,1578590799,FR -1578590800,1578590831,GB -1578590832,1578590839,FR +1578590668,1578590671,NL +1578590672,1578590687,PL +1578590688,1578590691,GB +1578590692,1578590695,DE +1578590696,1578590699,FR +1578590700,1578590735,PL +1578590736,1578590787,FR +1578590788,1578590791,LT +1578590792,1578590795,NL +1578590796,1578590799,IT +1578590800,1578590815,ES +1578590816,1578590831,GB +1578590832,1578590839,NL 1578590840,1578590847,PL -1578590848,1578590879,FR +1578590848,1578590851,DE +1578590852,1578590855,FR +1578590856,1578590859,GB +1578590860,1578590879,FR 1578590880,1578590911,PL 1578590912,1578590927,GB 1578590928,1578590935,DE 1578590936,1578590943,ES -1578590944,1578590959,CH -1578590960,1578590975,FR +1578590944,1578590975,FR 1578590976,1578590991,GB 1578590992,1578590999,IT 1578591000,1578591007,FR @@ -49869,16 +60039,15 @@ 1578591152,1578591183,FR 1578591184,1578591187,CH 1578591188,1578591195,GB -1578591196,1578591247,FR -1578591248,1578591263,PL -1578591264,1578591279,FR +1578591196,1578591279,FR 1578591280,1578591287,ES -1578591288,1578591291,NL +1578591288,1578591291,DE 1578591292,1578591295,ES 1578591296,1578591327,FR 1578591328,1578591343,PL 1578591344,1578591391,FR -1578591392,1578591407,CH +1578591392,1578591395,IT +1578591396,1578591407,PL 1578591408,1578591411,ES 1578591412,1578591415,FR 1578591416,1578591423,ES @@ -49901,17 +60070,19 @@ 1578591600,1578591679,FR 1578591680,1578591695,PL 1578591696,1578591699,DE -1578591700,1578591707,FR -1578591708,1578591711,CZ +1578591700,1578591703,FR +1578591704,1578591707,DE +1578591708,1578591711,FR 1578591712,1578591743,PL 1578591744,1578591759,ES 1578591760,1578591791,FR -1578591792,1578591807,PL -1578591808,1578591823,DE -1578591824,1578591887,FR +1578591792,1578591795,ES +1578591796,1578591799,NL +1578591800,1578591807,PL +1578591808,1578591887,FR 1578591888,1578591891,DE 1578591892,1578591899,FR -1578591900,1578591903,GB +1578591900,1578591903,NL 1578591904,1578591919,PL 1578591920,1578591939,ES 1578591940,1578591951,FR @@ -49919,7 +60090,8 @@ 1578591968,1578591983,FR 1578591984,1578592031,PL 1578592032,1578592039,PT -1578592040,1578592047,ES +1578592040,1578592043,ES +1578592044,1578592047,PL 1578592048,1578592079,FR 1578592080,1578592095,PL 1578592096,1578592111,FR @@ -49928,47 +60100,56 @@ 1578592144,1578592159,NL 1578592160,1578592163,FR 1578592164,1578592171,IT -1578592172,1578592175,FR +1578592172,1578592175,ES 1578592176,1578592183,CZ 1578592184,1578592191,PT 1578592192,1578592199,BE 1578592200,1578592207,CH 1578592208,1578592223,FR 1578592224,1578592239,ES -1578592240,1578592275,FR -1578592276,1578592279,FI +1578592240,1578592271,FR +1578592272,1578592279,PL 1578592280,1578592283,BE -1578592284,1578592287,NL +1578592284,1578592287,FR 1578592288,1578592295,PL 1578592296,1578592303,PT -1578592304,1578592319,FR -1578592320,1578592335,ES -1578592336,1578592351,FR +1578592304,1578592351,FR 1578592352,1578592367,PL 1578592368,1578592395,FR -1578592396,1578592399,ES -1578592400,1578592415,GB +1578592396,1578592399,DE +1578592400,1578592407,FR +1578592408,1578592411,GB +1578592412,1578592415,DE 1578592416,1578592423,IT 1578592424,1578592431,IE -1578592432,1578592447,FR -1578592448,1578592495,PL +1578592432,1578592483,FR +1578592484,1578592487,PL +1578592488,1578592495,BE 1578592496,1578592511,FR 1578592512,1578592515,GB 1578592516,1578592519,PL 1578592520,1578592531,FR 1578592532,1578592535,GB -1578592536,1578592543,NL +1578592536,1578592539,PL +1578592540,1578592543,ES 1578592544,1578592559,FR 1578592560,1578592575,NL 1578592576,1578592591,GB -1578592592,1578592687,FR +1578592592,1578592607,FR +1578592608,1578592623,IE +1578592624,1578592687,FR 1578592688,1578592695,DE 1578592696,1578592719,ES 1578592720,1578592735,CH -1578592736,1578592751,FR -1578592752,1578592783,DE +1578592736,1578592743,PL +1578592744,1578592747,PT +1578592748,1578592751,DE +1578592752,1578592767,IE +1578592768,1578592783,DE 1578592784,1578592799,FR -1578592800,1578592815,GB +1578592800,1578592803,IE +1578592804,1578592811,FR +1578592812,1578592815,PL 1578592816,1578592831,FR 1578592832,1578592847,PL 1578592848,1578592851,BE @@ -49985,15 +60166,24 @@ 1578593296,1578593299,ES 1578593300,1578593303,GB 1578593304,1578593307,ES -1578593308,1578593327,FR +1578593308,1578593319,FR +1578593320,1578593323,PT +1578593324,1578593327,FR 1578593328,1578593343,IT 1578593344,1578593359,FR -1578593360,1578593407,GB -1578593408,1578593415,FR +1578593360,1578593375,PL +1578593376,1578593407,GB +1578593408,1578593411,IT +1578593412,1578593415,FR 1578593416,1578593423,PL 1578593424,1578593439,FR -1578593440,1578593455,PL -1578593456,1578593487,FR +1578593440,1578593443,IT +1578593444,1578593447,PL +1578593448,1578593455,DE +1578593456,1578593471,FR +1578593472,1578593479,GB +1578593480,1578593483,PL +1578593484,1578593487,FR 1578593488,1578593495,ES 1578593496,1578593503,FR 1578593504,1578593519,PL @@ -50003,7 +60193,7 @@ 1578593552,1578593559,PL 1578593560,1578593567,FR 1578593568,1578593583,CZ -1578593584,1578593587,FR +1578593584,1578593587,GB 1578593588,1578593599,DE 1578593600,1578593631,FR 1578593632,1578593647,NL @@ -50027,9 +60217,13 @@ 1578593896,1578593899,GB 1578593900,1578593903,DE 1578593904,1578593919,FR -1578593920,1578593951,PL -1578593952,1578593955,FR -1578593956,1578593967,PL +1578593920,1578593935,PL +1578593936,1578593943,FR +1578593944,1578593947,IT +1578593948,1578593955,FR +1578593956,1578593959,LT +1578593960,1578593963,FR +1578593964,1578593967,ES 1578593968,1578593983,FR 1578593984,1578593999,PL 1578594000,1578594015,FR @@ -50042,17 +60236,18 @@ 1578594064,1578594079,PL 1578594080,1578594087,CH 1578594088,1578594095,CZ -1578594096,1578594111,FR -1578594112,1578594127,PL -1578594128,1578594159,FR -1578594160,1578594175,DE -1578594176,1578594191,FR -1578594192,1578594207,IT +1578594096,1578594143,FR +1578594144,1578594147,PL +1578594148,1578594151,ES +1578594152,1578594159,IT +1578594160,1578594163,PT +1578594164,1578594167,ES +1578594168,1578594171,DE +1578594172,1578594207,FR 1578594208,1578594211,DE -1578594212,1578594223,PL -1578594224,1578594239,ES +1578594212,1578594239,PL 1578594240,1578594255,FR -1578594256,1578594271,GB +1578594256,1578594271,IE 1578594272,1578594303,PL 1578594304,1578594307,GB 1578594308,1578594311,FI @@ -50062,7 +60257,7 @@ 1578594336,1578594355,GB 1578594356,1578594359,FR 1578594360,1578594363,PT -1578594364,1578594367,IT +1578594364,1578594367,ES 1578594368,1578594375,FR 1578594376,1578594383,PT 1578594384,1578594399,FR @@ -50075,7 +60270,10 @@ 1578594512,1578594515,PL 1578594516,1578594519,FR 1578594520,1578594523,PL -1578594524,1578594543,FR +1578594524,1578594527,FR +1578594528,1578594535,GB +1578594536,1578594539,DE +1578594540,1578594543,FR 1578594544,1578594551,ES 1578594552,1578594555,PL 1578594556,1578594559,LT @@ -50089,12 +60287,14 @@ 1578594712,1578594715,IT 1578594716,1578594751,FR 1578594752,1578594767,ES -1578594768,1578594771,GB -1578594772,1578594775,FR +1578594768,1578594775,GB 1578594776,1578594783,ES 1578594784,1578594799,FR 1578594800,1578594815,DE -1578594816,1578595039,FR +1578594816,1578594847,FR +1578594848,1578594863,IT +1578594864,1578594871,PL +1578594872,1578595039,FR 1578595040,1578595055,GB 1578595056,1578595103,FR 1578595104,1578595119,GB @@ -50118,28 +60318,37 @@ 1578595328,1578595343,IT 1578595344,1578595363,FR 1578595364,1578595367,DE -1578595368,1578595371,FR -1578595372,1578595375,BE -1578595376,1578595379,FR +1578595368,1578595379,FR 1578595380,1578595383,CH 1578595384,1578595387,ES 1578595388,1578595407,PL 1578595408,1578595411,IE 1578595412,1578595419,PL -1578595420,1578595423,FR +1578595420,1578595423,IT 1578595424,1578595439,PL 1578595440,1578595447,FR 1578595448,1578595455,ES 1578595456,1578595459,DE -1578595460,1578595487,FR +1578595460,1578595467,PL +1578595468,1578595487,FR 1578595488,1578595503,DE 1578595504,1578595519,PL -1578595520,1578595607,FR +1578595520,1578595535,FR +1578595536,1578595539,BE +1578595540,1578595543,CH +1578595544,1578595547,GB +1578595548,1578595607,FR 1578595608,1578595611,GB 1578595612,1578595615,ES -1578595616,1578595647,PL +1578595616,1578595619,PL +1578595620,1578595623,BE +1578595624,1578595627,GB +1578595628,1578595635,FR +1578595636,1578595639,ES +1578595640,1578595643,DE +1578595644,1578595647,GB 1578595648,1578595679,FR -1578595680,1578595695,BE +1578595680,1578595695,PL 1578595696,1578595711,FR 1578595712,1578595743,GB 1578595744,1578595747,IT @@ -50148,7 +60357,9 @@ 1578595760,1578595763,FR 1578595764,1578595775,ES 1578595776,1578595807,CH -1578595808,1578595871,FR +1578595808,1578595823,DE +1578595824,1578595855,FR +1578595856,1578595871,GB 1578595872,1578595907,PL 1578595908,1578595911,BE 1578595912,1578595935,FR @@ -50156,12 +60367,15 @@ 1578595968,1578595983,IE 1578595984,1578595991,NL 1578595992,1578595995,IT -1578595996,1578596095,FR +1578595996,1578596031,FR +1578596032,1578596063,IT +1578596064,1578596095,IE 1578596096,1578596099,DE 1578596100,1578596103,GB -1578596104,1578596111,FR +1578596104,1578596107,PL +1578596108,1578596111,ES 1578596112,1578596115,DE -1578596116,1578596119,NL +1578596116,1578596119,FR 1578596120,1578596123,PT 1578596124,1578596127,ES 1578596128,1578596143,PL @@ -50193,12 +60407,24 @@ 1578610772,1578610775,GB 1578610776,1578610779,DE 1578610780,1578610783,FR -1578610784,1578610799,NL +1578610784,1578610799,DE 1578610800,1578610803,PL 1578610804,1578610807,GB -1578610808,1578610943,FR +1578610808,1578610819,FR +1578610820,1578610823,NL +1578610824,1578610831,DE +1578610832,1578610847,CH +1578610848,1578610851,PL +1578610852,1578610855,IE +1578610856,1578610859,IT +1578610860,1578610863,PL +1578610864,1578610867,BE +1578610868,1578610871,FR +1578610872,1578610879,PL +1578610880,1578610943,FR 1578610944,1578610975,ES -1578610976,1578611039,PL +1578610976,1578611007,PL +1578611008,1578611039,FR 1578611040,1578611043,ES 1578611044,1578611047,CZ 1578611048,1578611051,ES @@ -50207,39 +60433,49 @@ 1578611072,1578611075,DE 1578611076,1578611079,FR 1578611080,1578611087,NL -1578611088,1578611119,DE +1578611088,1578611103,DE +1578611104,1578611107,BE +1578611108,1578611119,DE 1578611120,1578611135,FR 1578611136,1578611151,CH -1578611152,1578611167,DE -1578611168,1578611183,ES -1578611184,1578611199,FR +1578611152,1578611183,DE +1578611184,1578611191,BE +1578611192,1578611195,FR +1578611196,1578611199,ES 1578611200,1578611215,NL -1578611216,1578611231,PL -1578611232,1578611247,FR -1578611248,1578611251,ES +1578611216,1578611219,GB +1578611220,1578611223,DE +1578611224,1578611227,ES +1578611228,1578611231,PL +1578611232,1578611235,IT +1578611236,1578611243,FR +1578611244,1578611251,GB 1578611252,1578611255,IT 1578611256,1578611263,PL 1578611264,1578611279,IT -1578611280,1578611295,FR +1578611280,1578611287,FR +1578611288,1578611291,PL +1578611292,1578611295,DE 1578611296,1578611303,GB 1578611304,1578611327,PL 1578611328,1578611343,BE 1578611344,1578611359,FR 1578611360,1578611375,CH -1578611376,1578611399,FR -1578611400,1578611403,BE -1578611404,1578611407,ES +1578611376,1578611391,FR +1578611392,1578611399,GB +1578611400,1578611407,ES 1578611408,1578611423,IT 1578611424,1578611439,GB 1578611440,1578611443,ES -1578611444,1578611447,FR +1578611444,1578611447,NL 1578611448,1578611455,ES 1578611456,1578611711,FR 1578611712,1578611775,CH 1578611776,1578611783,DE -1578611784,1578611807,FR +1578611784,1578611791,FR +1578611792,1578611807,GB 1578611808,1578611839,CH -1578611840,1578611855,ES +1578611840,1578611855,BE 1578611856,1578611919,FR 1578611920,1578611935,BE 1578611936,1578611943,PL @@ -50258,31 +60494,52 @@ 1578612120,1578612123,IE 1578612124,1578612127,DE 1578612128,1578612135,ES -1578612136,1578612139,NL +1578612136,1578612139,IE 1578612140,1578612143,ES 1578612144,1578612223,PL -1578612224,1578612239,GB +1578612224,1578612239,IT 1578612240,1578612255,FR 1578612256,1578612259,PL 1578612260,1578612263,IT -1578612264,1578612287,FR -1578612288,1578612303,BE +1578612264,1578612303,FR 1578612304,1578612319,DE 1578612320,1578612383,FR 1578612384,1578612415,PL -1578612416,1578612623,FR +1578612416,1578612479,FR +1578612480,1578612575,GB +1578612576,1578612579,PL +1578612580,1578612583,FR +1578612584,1578612587,IE +1578612588,1578612607,IT +1578612608,1578612623,PT 1578612624,1578612639,CH 1578612640,1578612671,PL -1578612672,1578612687,FR +1578612672,1578612687,ES 1578612688,1578612703,DE 1578612704,1578612863,FR 1578612864,1578612895,NL -1578612896,1578612911,PL +1578612896,1578612899,FR +1578612900,1578612903,PL +1578612904,1578612907,DE +1578612908,1578612911,FR 1578612912,1578612959,ES -1578612960,1578612975,GB -1578612976,1578612991,FR +1578612960,1578612975,DE +1578612976,1578612983,IT +1578612984,1578612991,FR 1578612992,1578613247,DE -1578613248,1578613503,FR +1578613248,1578613391,FR +1578613392,1578613399,GB +1578613400,1578613423,FR +1578613424,1578613427,DE +1578613428,1578613431,GB +1578613432,1578613439,DE +1578613440,1578613447,FR +1578613448,1578613455,GB +1578613456,1578613471,FR +1578613472,1578613475,ES +1578613476,1578613479,CH +1578613480,1578613483,GB +1578613484,1578613503,FR 1578613504,1578613567,DE 1578613568,1578613631,PL 1578613632,1578613647,DE @@ -50292,7 +60549,9 @@ 1578613712,1578613719,BE 1578613720,1578613723,ES 1578613724,1578613727,IT -1578613728,1578613743,FR +1578613728,1578613735,FR +1578613736,1578613739,PL +1578613740,1578613743,FR 1578613744,1578613751,ES 1578613752,1578613759,NL 1578613760,1578613775,DE @@ -50305,10 +60564,13 @@ 1578613888,1578613951,ES 1578613952,1578613983,FR 1578613984,1578613999,PL -1578614000,1578614015,CH +1578614000,1578614003,FR +1578614004,1578614007,PL +1578614008,1578614015,DE 1578614016,1578614031,FR 1578614032,1578614047,BE -1578614048,1578614071,FR +1578614048,1578614055,FI +1578614056,1578614071,FR 1578614072,1578614079,ES 1578614080,1578614175,FR 1578614176,1578614191,ES @@ -50316,7 +60578,14 @@ 1578614196,1578614207,GB 1578614208,1578614271,PL 1578614272,1578614527,ES -1578614528,1578631167,FR +1578614528,1578614543,GB +1578614544,1578614559,PL +1578614560,1578614575,FR +1578614576,1578614583,DE +1578614584,1578614591,GB +1578614592,1578614623,CZ +1578614624,1578614655,BE +1578614656,1578631167,FR 1578631168,1578663935,RO 1578663936,1578762239,RU 1578762240,1578795007,BG @@ -50327,10 +60596,9 @@ 1578991616,1579024383,KW 1579024384,1579057151,GB 1579057152,1579089919,LV -1579089920,1579090575,NL -1579090576,1579090687,GB -1579090688,1579090943,NL -1579090944,1579091759,GB +1579089920,1579090431,GB +1579090432,1579090463,NL +1579090464,1579091759,GB 1579091760,1579091775,IL 1579091776,1579091839,GB 1579091840,1579091855,US @@ -50338,15 +60606,18 @@ 1579091968,1579092223,DE 1579092224,1579093759,GB 1579093760,1579094015,NL -1579094016,1579104511,GB -1579104512,1579104767,NL -1579104768,1579105023,GB +1579094016,1579094271,GB +1579094272,1579094527,NL +1579094528,1579094783,GB +1579094784,1579095039,NL +1579095040,1579096319,GB +1579096320,1579096451,NL +1579096452,1579098367,GB +1579098368,1579098623,NL +1579098624,1579105023,GB 1579105024,1579105087,NL 1579105088,1579105119,DE -1579105120,1579105151,NL -1579105152,1579105279,GB -1579105280,1579105343,NL -1579105344,1579105535,GB +1579105120,1579105535,GB 1579105536,1579105599,NL 1579105600,1579106303,GB 1579106304,1579122687,DE @@ -50361,9 +60632,11 @@ 1580015616,1580048383,UA 1580048384,1580064767,RU 1580064768,1580072959,DE -1580072960,1580085247,PT -1580085248,1580089343,MZ -1580089344,1580134399,PT +1580072960,1580079103,PT +1580079104,1580079359,US +1580079360,1580104959,PT +1580104960,1580105215,CH +1580105216,1580134399,PT 1580134400,1580136447,ES 1580136448,1580138495,PT 1580138496,1580204031,IT @@ -50380,7 +60653,11 @@ 1581826048,1581842431,GB 1581842432,1581858815,BG 1581858816,1581875199,IT -1581875200,1581891583,TR +1581875200,1581881343,TR +1581881344,1581881599,GB +1581881600,1581890559,TR +1581890560,1581891071,GB +1581891072,1581891583,TR 1581891584,1581907967,RU 1581907968,1581924351,IT 1581924352,1581940735,UA @@ -50390,14 +60667,18 @@ 1581989888,1582006271,PL 1582006272,1582022655,RU 1582022656,1582039039,NL -1582039040,1582055423,RU +1582039040,1582055423,BH 1582055424,1582071807,UA 1582071808,1582088191,ES 1582088192,1582104575,GB 1582104576,1582153727,RU 1582153728,1582170111,SA 1582170112,1582186495,CH -1582186496,1582202879,TR +1582186496,1582193919,GB +1582193920,1582194207,TR +1582194208,1582196991,GB +1582196992,1582198015,TR +1582198016,1582202879,GB 1582202880,1582219263,PL 1582219264,1582252031,RU 1582252032,1582268415,TR @@ -50412,11 +60693,15 @@ 1583619840,1583620095,US 1583620096,1583624191,IT 1583624192,1583628287,RS -1583628288,1583632383,DE +1583628288,1583631283,DE +1583631284,1583631287,A2 +1583631288,1583632383,DE 1583632384,1583636479,RU 1583636480,1583640575,MK 1583640576,1583644671,NL -1583644672,1583648767,DE +1583644672,1583646463,DE +1583646464,1583646719,GB +1583646720,1583648767,DE 1583648768,1583652863,CH 1583652864,1583656959,FR 1583656960,1583665151,RU @@ -50424,14 +60709,14 @@ 1583669248,1583673343,GE 1583673344,1583673991,DE 1583673992,1583673999,GB -1583674000,1583674031,DE -1583674032,1583674039,NL -1583674040,1583677439,DE +1583674000,1583677439,DE 1583677440,1583681535,FI 1583681536,1583685631,PL 1583685632,1583689727,DE 1583689728,1583693823,IT -1583693824,1583697919,RU +1583693824,1583693871,RU +1583693872,1583693879,A2 +1583693880,1583697919,RU 1583697920,1583702015,TR 1583702016,1583706111,RU 1583706112,1583710207,GI @@ -50457,7 +60742,9 @@ 1583742976,1583747071,TR 1583747072,1583751167,RU 1583751168,1583755263,NO -1583755264,1583759359,NL +1583755264,1583755414,NL +1583755415,1583755424,RU +1583755425,1583759359,NL 1583759360,1583763455,TR 1583763456,1583767551,RU 1583767552,1583771647,AT @@ -50467,26 +60754,40 @@ 1583783936,1583788031,EU 1583788032,1583792127,TM 1583792128,1583796223,IE -1583796224,1583800319,DE +1583796224,1583800063,DE +1583800064,1583800095,AT +1583800096,1583800319,DE 1583800320,1583804415,ME 1583804416,1583808511,GB 1583808512,1583812607,MD 1583812608,1583813171,NL -1583813172,1583813175,US -1583813176,1583813663,NL +1583813172,1583813183,US +1583813184,1583813199,NL +1583813200,1583813215,RU +1583813216,1583813231,US +1583813232,1583813239,NL +1583813240,1583813243,US +1583813244,1583813663,NL 1583813664,1583813671,US -1583813672,1583813679,NL -1583813680,1583813683,GB -1583813684,1583813711,NL +1583813672,1583813711,NL 1583813712,1583813727,US 1583813728,1583813735,NL 1583813736,1583813743,DE -1583813744,1583813808,NL -1583813809,1583813815,US -1583813816,1583815167,NL +1583813744,1583815167,NL 1583815168,1583815215,US -1583815216,1583816703,NL -1583816704,1583820799,TR +1583815216,1583815343,NL +1583815344,1583815351,US +1583815352,1583815679,NL +1583815680,1583815711,DE +1583815712,1583815727,US +1583815728,1583815807,NL +1583815808,1583815935,US +1583815936,1583816191,GB +1583816192,1583816255,DE +1583816256,1583816703,NL +1583816704,1583819007,TR +1583819008,1583819136,GB +1583819137,1583820799,TR 1583820800,1583824895,LV 1583824896,1583828991,SI 1583828992,1583833087,RU @@ -50528,8 +60829,8 @@ 1585205248,1585207295,FR 1585207296,1585209855,NL 1585209856,1585210111,IQ -1585210112,1585210879,IR -1585210880,1585211391,NL +1585210112,1585210367,IR +1585210368,1585211391,NL 1585211392,1585213439,CZ 1585213440,1585214463,GB 1585214464,1585217535,NL @@ -50542,8 +60843,7 @@ 1585231360,1585231615,NL 1585231616,1585231871,RU 1585231872,1585233919,CZ -1585233920,1585235967,LB -1585235968,1585238015,RU +1585233920,1585238015,RU 1585238016,1585240063,DE 1585240064,1585241087,FR 1585241088,1585242111,MQ @@ -50559,13 +60859,11 @@ 1585264640,1585265663,MT 1585265664,1585265695,FR 1585265696,1585265727,IM -1585265728,1585265767,FR -1585265768,1585265775,IM -1585265776,1585265919,FR -1585265920,1585265935,IM -1585265936,1585266111,FR +1585265728,1585266111,FR 1585266112,1585266175,IM -1585266176,1585266687,MT +1585266176,1585266271,MT +1585266272,1585266287,MA +1585266288,1585266687,MT 1585266688,1585270783,DE 1585270784,1585272831,IT 1585272832,1585274879,RU @@ -50612,7 +60910,7 @@ 1585354752,1585356799,RU 1585356800,1585358847,FI 1585358848,1585360895,PT -1585360896,1585362943,GB +1585360896,1585362943,DK 1585362944,1585363455,IT 1585363456,1585363551,ES 1585363552,1585364991,IT @@ -50636,7 +60934,11 @@ 1585399808,1585400063,NL 1585400064,1585400319,IL 1585400320,1585400575,GB -1585400576,1585401855,US +1585400576,1585400831,FR +1585400832,1585401087,DE +1585401088,1585401343,NL +1585401344,1585401599,DE +1585401600,1585401855,GB 1585401856,1585403903,IT 1585403904,1585405951,RU 1585405952,1585407999,GB @@ -50662,21 +60964,31 @@ 1585979392,1585987583,GB 1585987584,1585988095,SE 1585988096,1585988103,IT -1585988104,1585988351,SE +1585988104,1585988119,SE +1585988120,1585988123,US +1585988124,1585988351,SE 1585988352,1585988359,DE -1585988360,1585990655,SE +1585988360,1585988479,SE +1585988480,1585988483,US +1585988484,1585988927,SE +1585988928,1585988931,US +1585988932,1585989307,SE +1585989308,1585989311,US +1585989312,1585990655,SE 1585990656,1585990659,US -1585990660,1585990911,SE +1585990660,1585990847,SE +1585990848,1585990851,US +1585990852,1585990911,SE 1585990912,1585990915,US 1585990916,1585991167,SE 1585991168,1585991171,US 1585991172,1585991683,SE 1585991684,1585991687,US -1585991688,1585991935,SE +1585991688,1585991727,SE +1585991728,1585991731,RU +1585991732,1585991935,SE 1585991936,1585991939,US -1585991940,1585994499,SE -1585994500,1585994503,RU -1585994504,1585994543,SE +1585991940,1585994543,SE 1585994544,1585994547,MY 1585994548,1585995647,SE 1585995648,1585995651,US @@ -50709,7 +61021,11 @@ 1586216960,1586225151,BG 1586225152,1586233343,RU 1586233344,1586241535,FR -1586241536,1586249727,SE +1586241536,1586242983,SE +1586242984,1586242991,DK +1586242992,1586243779,SE +1586243780,1586243787,NO +1586243788,1586249727,SE 1586249728,1586257919,SI 1586257920,1586266111,EU 1586266112,1586274303,RU @@ -50736,7 +61052,9 @@ 1586411520,1586411775,GB 1586411776,1586412287,US 1586412288,1586412543,HK -1586412544,1586413567,GB +1586412544,1586412799,GB +1586412800,1586413055,US +1586413056,1586413567,GB 1586413568,1586415615,IT 1586415616,1586416255,ES 1586416256,1586417663,AD @@ -50779,6 +61097,15 @@ 1586495488,1587019775,DK 1587019776,1587085311,PL 1587085312,1587150847,UA +1587150848,1587154943,RU +1587154944,1587159039,PL +1587159040,1587163135,UA +1587163136,1587165183,DE +1587165184,1587167231,PL +1587167232,1587175423,RU +1587175424,1587177471,PL +1587177472,1587179519,RS +1587179520,1587183615,UA 1587183616,1587199999,RU 1587200000,1587216383,UA 1587216384,1587347455,BG @@ -50807,7 +61134,15 @@ 1588723712,1588854783,UA 1588854784,1588985855,RU 1588985856,1589182463,IR -1589182464,1589215231,RU +1589182464,1589198847,OM +1589198848,1589200895,FR +1589200896,1589202943,IT +1589202944,1589203711,SE +1589203712,1589203967,NL +1589203968,1589204223,SE +1589204224,1589204991,NL +1589204992,1589207039,DE +1589207040,1589215231,IT 1589215232,1589247999,GB 1589248000,1589280767,NO 1589280768,1589313535,DE @@ -50878,7 +61213,7 @@ 1590132992,1590134783,GB 1590134784,1590136831,ES 1590136832,1590138879,GB -1590138880,1590140927,CZ +1590138880,1590140927,FR 1590140928,1590142975,UA 1590142976,1590145023,AT 1590145024,1590147071,HU @@ -50886,8 +61221,10 @@ 1590149120,1590151167,CZ 1590151168,1590153215,TR 1590153216,1590157311,RU -1590157312,1590159359,IE -1590159360,1590161407,GB +1590157312,1590157471,IE +1590157472,1590157823,GB +1590157824,1590157951,IE +1590157952,1590161407,GB 1590161408,1590163455,DE 1590163456,1590165503,NL 1590165504,1590176831,AE @@ -50913,34 +61250,46 @@ 1592054272,1592054527,AE 1592054528,1592054783,NL 1592054784,1592055295,AE -1592055296,1592055935,NL -1592055936,1592055999,SG -1592056000,1592056959,NL -1592056960,1592057023,SG -1592057024,1592057855,NL +1592055296,1592057623,NL +1592057624,1592057631,IN +1592057632,1592057855,NL 1592057856,1592061951,RS 1592061952,1592066047,RU 1592066048,1592067583,US 1592067584,1592067711,NO -1592067712,1592069295,CY -1592069296,1592069375,RU +1592067712,1592067839,CY +1592067840,1592068095,NL +1592068096,1592068607,US +1592068608,1592068863,CY +1592068864,1592068895,US +1592068896,1592068927,NL +1592068928,1592068959,US +1592068960,1592068991,CY +1592068992,1592069087,US +1592069088,1592069119,CY +1592069120,1592069135,RU +1592069136,1592069247,CY +1592069248,1592069375,RU 1592069376,1592069407,US 1592069408,1592069631,CY -1592069632,1592069759,NL -1592069760,1592069855,CY -1592069856,1592069887,NL +1592069632,1592069711,NL +1592069712,1592069727,CY +1592069728,1592069759,NL +1592069760,1592069839,CY +1592069840,1592069887,NL 1592069888,1592074239,RU 1592074240,1592078335,SK 1592078336,1592082431,NL -1592082432,1592085023,GB -1592085024,1592085039,ES -1592085040,1592086527,GB -1592086528,1592087295,CZ +1592082432,1592086527,GB +1592086528,1592087079,CZ +1592087080,1592087087,PL +1592087088,1592087295,CZ 1592087296,1592088191,PL 1592088192,1592090623,CZ 1592090624,1592094719,RU 1592094720,1592098815,RS 1592098816,1592102911,GB +1592102912,1592107007,DE 1592107008,1592111103,GB 1592111104,1592115199,DE 1592115200,1592119295,ES @@ -50998,7 +61347,7 @@ 1592326144,1592328191,UA 1592328192,1592393727,RU 1592393728,1592459263,SE -1592459264,1592524799,GE +1592459264,1592524799,TR 1592524800,1592540415,GB 1592540416,1592540423,A2 1592540424,1592557567,GB @@ -51030,16 +61379,14 @@ 1593147392,1593163775,RU 1593163776,1593180159,AT 1593180160,1593196543,NO -1593196544,1593196783,SE -1593196784,1593196799,GB -1593196800,1593202687,SE +1593196544,1593202687,SE 1593202688,1593202815,NO 1593202816,1593203455,SE 1593203456,1593203487,NO 1593203488,1593204087,SE 1593204088,1593204095,FI 1593204096,1593204159,SE -1593204160,1593204223,DK +1593204160,1593204223,FI 1593204224,1593205567,SE 1593205568,1593205631,DK 1593205632,1593206083,SE @@ -51146,16 +61493,18 @@ 1599078400,1599094783,SE 1599094784,1599111167,RU 1599111168,1599127551,IR -1599127552,1599133695,CZ +1599127552,1599129007,CZ +1599129008,1599129011,EE +1599129012,1599133695,CZ 1599133696,1599133823,SK -1599133824,1599134207,CZ -1599134208,1599134463,AT -1599134464,1599143935,CZ +1599133824,1599137055,CZ +1599137056,1599137071,SK +1599137072,1599143935,CZ 1599143936,1599160319,UA 1599160320,1599176703,IR 1599176704,1599188991,FR -1599188992,1599189263,DE -1599189264,1599193087,FR +1599188992,1599189375,DE +1599189376,1599193087,FR 1599193088,1599209471,RU 1599209472,1599242239,IR 1599242240,1599258623,CZ @@ -51171,7 +61520,10 @@ 1599504384,1599520767,AZ 1599520768,1599537151,RU 1599537152,1599553535,BG -1599553536,1599569919,RU +1599553536,1599561727,KG +1599561728,1599565823,GB +1599565824,1599567871,SY +1599567872,1599569919,IT 1599569920,1599586303,SI 1599586304,1599602687,BG 1599602688,1599864831,DE @@ -51179,9 +61531,13 @@ 1600126976,1600389119,NL 1600389120,1600397311,EU 1600397312,1600401407,DE -1600401408,1600453119,EU +1600401408,1600442367,EU +1600442368,1600446463,DE +1600446464,1600453119,EU 1600453120,1600453631,IT -1600453632,1600520191,EU +1600453632,1600456703,EU +1600456704,1600457727,DE +1600457728,1600520191,EU 1600520192,1600651263,SK 1600651264,1600684031,GE 1600684032,1600749567,RU @@ -51194,7 +61550,9 @@ 1600963176,1600963183,RU 1600963184,1600963191,BY 1600963192,1600963199,KZ -1600963200,1600978943,RU +1600963200,1600971087,RU +1600971088,1600971091,TR +1600971092,1600978943,RU 1600978944,1601011711,SE 1601011712,1601044479,UA 1601044480,1601077247,RU @@ -51205,7 +61563,8 @@ 1601699840,1602224127,ES 1602224128,1602226175,NL 1602226176,1602228223,GB -1602228224,1602230271,DE +1602228224,1602230270,FR +1602230271,1602230271,DE 1602230272,1602232319,DK 1602232320,1602234367,CH 1602234368,1602234591,FR @@ -51224,31 +61583,37 @@ 1602235968,1602238463,GB 1602238464,1602240511,TR 1602240512,1602242559,BY -1602242560,1602244607,FR +1602242560,1602244031,FR +1602244032,1602244035,GB +1602244036,1602244607,FR 1602244608,1602246655,CH 1602246656,1602248703,NL 1602248704,1602250751,BE 1602250752,1602252799,NO 1602252800,1602254847,SE -1602254848,1602255359,HU +1602254848,1602255103,PT +1602255104,1602255359,HU 1602255360,1602255615,US -1602255616,1602256895,HU +1602255616,1602255871,PT +1602255872,1602256895,HU 1602256896,1602258943,GB 1602258944,1602260991,RU 1602260992,1602263039,FR 1602263040,1602265087,ES 1602265088,1602267135,RU -1602267136,1602269183,RO +1602267136,1602267199,DE +1602267200,1602267263,FR +1602267264,1602267327,GB +1602267328,1602267391,ES +1602267392,1602269183,RO 1602269184,1602271231,RU 1602271232,1602273279,MK 1602273280,1602273535,FR 1602273536,1602273791,GB 1602273792,1602274559,IN 1602274560,1602274815,IE -1602274816,1602275327,IN -1602275328,1602275615,DE -1602275616,1602275647,CY -1602275648,1602275679,DE +1602274816,1602275071,GB +1602275072,1602275679,DE 1602275680,1602275695,CA 1602275696,1602279423,DE 1602279424,1602281471,GB @@ -51258,13 +61623,13 @@ 1602287616,1602289663,DE 1602289664,1602291711,LB 1602291712,1602293759,SA -1602293760,1602295807,RU +1602293760,1602295807,GB 1602295808,1602297855,NL 1602297856,1602298367,IL 1602298368,1602298431,MT 1602298432,1602298879,IL 1602298880,1602299391,MT -1602299392,1602299903,GG +1602299392,1602299903,GB 1602299904,1602301951,DK 1602301952,1602303999,DE 1602304000,1602306047,RU @@ -51289,7 +61654,7 @@ 1602347008,1602349055,PL 1602349056,1602351103,RU 1602351104,1602353151,CZ -1602353152,1602355199,RU +1602353152,1602355199,ES 1602355200,1602357247,GB 1602357248,1602359295,FR 1602359296,1602361343,DE @@ -51314,11 +61679,7 @@ 1602392064,1602394111,GB 1602394112,1602396159,FR 1602396160,1602398207,DE -1602398208,1602398400,TR -1602398401,1602398406,US -1602398407,1602399231,TR -1602399232,1602399487,US -1602399488,1602400255,TR +1602398208,1602400255,TR 1602400256,1602402303,RU 1602402304,1602404351,LU 1602404352,1602406399,GB @@ -51350,9 +61711,17 @@ 1602449408,1602451455,LV 1602451456,1602453503,DE 1602453504,1602455551,SK -1602455552,1602456015,FR -1602456016,1602456023,ES -1602456024,1602456175,FR +1602455552,1602455690,FR +1602455691,1602455691,BE +1602455692,1602456015,FR +1602456016,1602456025,ES +1602456026,1602456026,DE +1602456027,1602456027,NL +1602456028,1602456028,IT +1602456029,1602456029,ES +1602456030,1602456030,PT +1602456031,1602456031,ES +1602456032,1602456175,FR 1602456176,1602456183,ES 1602456184,1602457599,FR 1602457600,1602459647,RU @@ -51373,7 +61742,9 @@ 1602781184,1602813951,FR 1602813952,1602846719,RU 1602846720,1602879487,GE -1602879488,1602912255,FR +1602879488,1602895871,FR +1602895872,1602896127,MQ +1602896128,1602912255,FR 1602912256,1603010559,RU 1603010560,1603014655,FR 1603014656,1603018751,RU @@ -51392,8 +61763,14 @@ 1603067904,1603071999,GB 1603072000,1603076095,CZ 1603076096,1603080191,RU -1603080192,1603084287,DE -1603084288,1603088383,IT +1603080192,1603082751,DE +1603082752,1603083007,ES +1603083008,1603083263,UA +1603083264,1603084031,DE +1603084032,1603086591,IT +1603086592,1603086847,GB +1603086848,1603087103,DE +1603087104,1603088383,IT 1603088384,1603092479,LB 1603092480,1603100671,NO 1603100672,1603108863,FR @@ -51404,27 +61781,44 @@ 1603133440,1603137535,RU 1603137536,1603141631,KW 1603141632,1603145727,ES -1603145728,1603146015,NL -1603146016,1603146079,CY -1603146080,1603146239,NL +1603145728,1603146031,NL +1603146032,1603146063,CY +1603146064,1603146239,NL 1603146240,1603146751,US 1603146752,1603147007,NL 1603147008,1603147263,US -1603147264,1603147775,IL +1603147264,1603147391,CY +1603147392,1603147519,NL +1603147520,1603147775,IL 1603147776,1603148031,US -1603148032,1603149567,IL +1603148032,1603148287,IL +1603148288,1603148799,NL +1603148800,1603149311,IL +1603149312,1603149567,NL 1603149568,1603149823,US 1603149824,1603153919,RU 1603153920,1603158015,NL 1603158016,1603159167,DE 1603159168,1603159183,NL -1603159184,1603159535,DE +1603159184,1603159199,FR +1603159200,1603159487,DE +1603159488,1603159519,AT +1603159520,1603159535,DE 1603159536,1603159551,GB -1603159552,1603161007,DE +1603159552,1603159823,DE +1603159824,1603159839,CH +1603159840,1603160079,DE +1603160080,1603160095,NL +1603160096,1603160111,GB +1603160112,1603161007,DE 1603161008,1603161023,GB 1603161024,1603161103,DE 1603161104,1603161119,GB -1603161120,1603162111,DE +1603161120,1603161135,AT +1603161136,1603161151,GB +1603161152,1603161567,DE +1603161568,1603161599,FR +1603161600,1603162111,DE 1603162112,1603166207,TJ 1603166208,1603166751,NL 1603166752,1603166767,MT @@ -51455,7 +61849,9 @@ 1603198976,1603203071,IR 1603203072,1603207167,PL 1603207168,1603215359,RU -1603215360,1603219455,DE +1603215360,1603217167,DE +1603217168,1603217183,US +1603217184,1603219455,DE 1603219456,1603220495,CH 1603220496,1603220503,LI 1603220504,1603223551,CH @@ -51466,21 +61862,34 @@ 1603223712,1603223936,FR 1603223937,1603223951,GB 1603223952,1603224319,FR -1603224320,1603224575,GB -1603224576,1603224775,FR -1603224776,1603224783,GB -1603224784,1603224799,FR -1603224800,1603225599,GB +1603224320,1603224335,GB +1603224336,1603224351,BE +1603224352,1603224367,NL +1603224368,1603224383,DE +1603224384,1603224399,CH +1603224400,1603224415,IT +1603224416,1603224431,ES +1603224432,1603224447,US +1603224448,1603224463,MX +1603224464,1603224575,GB +1603224576,1603224831,FR +1603224832,1603224847,ES +1603224848,1603224895,FR +1603224896,1603224911,GB +1603224912,1603225007,FR +1603225008,1603225023,MX +1603225024,1603225159,FR +1603225160,1603225343,GB +1603225344,1603225599,FR 1603225600,1603225607,ES 1603225608,1603225615,GB 1603225616,1603225623,DE 1603225624,1603225631,IT 1603225632,1603225639,US 1603225640,1603225647,CN -1603225648,1603225855,FR -1603225856,1603226623,GB -1603226624,1603227391,FR -1603227392,1603227647,GB +1603225648,1603226111,FR +1603226112,1603226623,GB +1603226624,1603227647,FR 1603227648,1603231743,AT 1603231744,1603235839,IT 1603235840,1603239935,RU @@ -51503,19 +61912,21 @@ 1603928064,1603944447,DK 1603944448,1603977215,RU 1603977216,1603979295,GB -1603979296,1603979327,ID +1603979296,1603979327,US 1603979328,1603980463,GB 1603980464,1603980479,CH -1603980480,1603981823,GB -1603981824,1603982079,IE -1603982080,1603982655,GB +1603980480,1603980863,GB +1603980864,1603980927,ID +1603980928,1603982655,GB 1603982656,1603982687,DK 1603982688,1603982719,AN -1603982720,1603982783,US +1603982720,1603982783,GB 1603982784,1603982847,AN 1603982848,1603984895,GB 1603984896,1603985151,PT -1603985152,1603990271,GB +1603985152,1603985279,GB +1603985280,1603985407,BR +1603985408,1603990271,GB 1603990272,1603990527,SA 1603990528,1603993599,GB 1603993600,1604009983,ME @@ -51550,8 +61961,7 @@ 1604853760,1604861951,HU 1604861952,1604870143,RS 1604870144,1604878335,HR -1604878336,1604886591,DE -1604886592,1604886655,US +1604878336,1604886655,DE 1604886656,1604886783,RU 1604886784,1604887039,DE 1604887040,1604887295,GB @@ -51564,11 +61974,7 @@ 1604891968,1604892159,RU 1604892160,1604892927,DE 1604892928,1604893183,HK -1604893184,1604893311,DE -1604893312,1604893375,TR -1604893376,1604893439,DE -1604893440,1604893695,TR -1604893696,1604893951,DE +1604893184,1604893951,DE 1604893952,1604894463,TR 1604894464,1604894719,DE 1604894720,1604895487,CZ @@ -51577,10 +61983,14 @@ 1604895608,1604895611,SK 1604895612,1604900351,CZ 1604900352,1604900383,SC -1604900384,1604901631,CZ +1604900384,1604901311,CZ +1604901312,1604901375,SC +1604901376,1604901631,CZ 1604901632,1604901887,SK -1604901888,1604902015,CZ -1604902016,1604902142,SK +1604901888,1604901911,CZ +1604901912,1604901935,SK +1604901936,1604901983,CZ +1604901984,1604902142,SK 1604902143,1604902399,CZ 1604902400,1604902911,SK 1604902912,1604911103,BG @@ -51610,21 +62020,35 @@ 1605107712,1605115903,GB 1605115904,1605124095,RU 1605124096,1605124607,US -1605124608,1605124671,GB -1605124672,1605124735,US -1605124736,1605125263,GB +1605124608,1605124639,GB +1605124640,1605124735,US +1605124736,1605124863,GB +1605124864,1605124895,US +1605124896,1605124927,GB +1605124928,1605124959,US +1605124960,1605125119,GB +1605125120,1605125247,US +1605125248,1605125263,GB 1605125264,1605125279,US 1605125280,1605125335,GB 1605125336,1605125343,US -1605125344,1605125439,GB -1605125440,1605125887,US -1605125888,1605126143,GB +1605125344,1605125375,GB +1605125376,1605125903,US +1605125904,1605126143,GB 1605126144,1605127679,US -1605127680,1605130239,GB +1605127680,1605127935,GB +1605127936,1605128703,US +1605128704,1605129215,GB +1605129216,1605129727,US +1605129728,1605130239,GB 1605130240,1605130271,US -1605130272,1605130495,GB -1605130496,1605130751,US -1605130752,1605132287,GB +1605130272,1605130295,GB +1605130296,1605130335,US +1605130336,1605130495,GB +1605130496,1605131007,US +1605131008,1605131263,GB +1605131264,1605132031,US +1605132032,1605132287,GB 1605132288,1605148671,RU 1605148672,1605156863,PT 1605156864,1605165055,JO @@ -51642,8 +62066,10 @@ 1605230592,1605238783,TR 1605238784,1605246975,IT 1605246976,1605255167,PL -1605255168,1605263359,HU -1605263360,1605271551,RU +1605255168,1605257215,RU +1605257216,1605259263,FR +1605259264,1605261311,DE +1605261312,1605271551,RU 1605271552,1605279743,DE 1605279744,1605287935,FR 1605287936,1605296127,RU @@ -51675,24 +62101,39 @@ 1606418432,1607467007,SE 1607467008,1607532543,DE 1607532544,1607569407,SE -1607569408,1607571455,DK -1607571456,1607585791,SE +1607569408,1607572479,DK +1607572480,1607575551,SE +1607575552,1607577599,DK +1607577600,1607581695,SE +1607581696,1607583743,DK +1607583744,1607585791,SE 1607585792,1607598079,DK 1607598080,1607610367,IT 1607610368,1607612415,IE 1607612416,1607614463,A2 1607614464,1607616511,GR -1607616512,1607630847,A2 +1607616512,1607618559,A2 +1607618560,1607622655,GB +1607622656,1607630847,A2 1607630848,1607633919,IE 1607633920,1607636991,A2 1607636992,1607639039,IE -1607639040,1607663615,A2 +1607639040,1607647231,A2 +1607647232,1607651327,DE +1607651328,1607655423,FR +1607655424,1607663615,A2 1607663616,1607729151,NL 1607729152,1607761919,EG 1607761920,1607766015,SY 1607766016,1607794687,EG 1607794688,1607860223,RU -1607860224,1607925759,ES +1607860224,1607892992,ES +1607892993,1607892994,DE +1607892995,1607893000,ES +1607893001,1607893004,GB +1607893005,1607893055,ES +1607893056,1607893119,DE +1607893120,1607925759,ES 1607925760,1607926783,RU 1607926784,1607927807,NL 1607927808,1607929855,RU @@ -51722,22 +62163,17 @@ 1607962624,1607963647,UA 1607963648,1607965695,RU 1607965696,1607966719,UA -1607966720,1607967743,RU 1607967744,1607968767,UA 1607968768,1607969791,SE -1607969792,1607971839,RU +1607970816,1607972863,RU 1607972864,1607974911,NL -1607974912,1607975935,LV -1607976960,1607977983,KZ -1607979008,1607980031,RU +1607974912,1607976959,PL +1607976960,1607980031,RU 1607980032,1607981055,DE 1607981056,1607982079,UA -1607982080,1607983103,RU 1607983104,1607984127,GB -1607984128,1607985151,RU 1607985152,1607986175,PL 1607986176,1607987199,UA -1607987200,1607988223,ES 1607988224,1607989247,KG 1607990272,1607991295,RU 1607991296,1608122367,UA @@ -51747,7 +62183,39 @@ 1608515584,1610612735,IT 1610612736,1610678271,US 1610678272,1610743807,CA -1610743808,1611227135,US +1610743808,1611165943,US +1611165944,1611165951,BD +1611165952,1611166111,US +1611166112,1611166119,NZ +1611166120,1611166167,US +1611166168,1611166175,AF +1611166176,1611166343,US +1611166344,1611166351,VE +1611166352,1611166359,US +1611166360,1611166367,GB +1611166368,1611166527,US +1611166528,1611166559,IN +1611166560,1611166575,HN +1611166576,1611166655,US +1611166656,1611166703,IN +1611166704,1611166751,US +1611166752,1611166783,IN +1611166784,1611166815,US +1611166816,1611166847,IN +1611166848,1611166911,US +1611166912,1611166975,IN +1611166976,1611167103,US +1611167104,1611167167,IN +1611167168,1611167199,US +1611167200,1611167231,IN +1611167232,1611167679,US +1611167680,1611167727,SE +1611167728,1611168479,US +1611168480,1611168511,IN +1611168512,1611169023,US +1611169024,1611169663,IE +1611169664,1611169791,GB +1611169792,1611227135,US 1611227136,1611235327,CA 1611235328,1611923455,US 1611923456,1612185599,CA @@ -51797,7 +62265,9 @@ 1613546680,1613546695,US 1613546696,1613546703,CA 1613546704,1613546719,US -1613546720,1613547919,CA +1613546720,1613547503,CA +1613547504,1613547519,US +1613547520,1613547919,CA 1613547920,1613547943,US 1613547944,1613548479,CA 1613548480,1613548487,US @@ -51815,13 +62285,22 @@ 1613549208,1613549319,US 1613549320,1613550735,CA 1613550736,1613550743,US -1613550744,1613565951,CA +1613550744,1613554743,CA +1613554744,1613554751,US +1613554752,1613556183,CA +1613556184,1613556191,US +1613556192,1613557007,CA +1613557008,1613557015,US +1613557016,1613557087,CA +1613557088,1613557095,US +1613557096,1613558359,CA +1613558360,1613558375,NL +1613558376,1613565951,CA 1613565952,1613570047,US 1613570048,1613574143,CA -1613574144,1613586431,US -1613586432,1613590527,CA -1613590528,1613602815,US -1613606912,1613607423,CA +1613574144,1613606911,US +1613606912,1613607167,CA +1613607168,1613607423,US 1613607424,1613607679,GB 1613607680,1613607935,US 1613607936,1613615103,CA @@ -51829,7 +62308,9 @@ 1613635584,1613639679,CA 1613639680,1613676543,US 1613676544,1613680639,CA -1613680640,1613737983,US +1613680640,1613703670,US +1613703671,1613703678,LK +1613703679,1613737983,US 1613737984,1613742079,CA 1613742080,1613750591,US 1613750592,1613750607,BR @@ -51846,7 +62327,15 @@ 1614741504,1614757887,CA 1614757888,1614774271,US 1614774272,1614786559,CA -1614786560,1632305151,US +1614786560,1618837503,US +1618837504,1618841599,CA +1618841600,1618849791,US +1618849792,1618862079,CA +1618862080,1618866175,US +1618866176,1618870271,CA +1618870272,1618984959,US +1618984960,1619001343,CA +1619001344,1632305151,US 1632305152,1632321535,CA 1632321536,1632354303,US 1632354304,1632354607,CA @@ -51859,9 +62348,11 @@ 1632355512,1632355519,US 1632355520,1632355583,CA 1632355584,1632355599,US -1632355600,1632357439,CA -1632357440,1632357447,US -1632357448,1632362495,CA +1632355600,1632358647,CA +1632358648,1632358655,US +1632358656,1632358775,CA +1632358776,1632358783,US +1632358784,1632362495,CA 1632362496,1634414591,US 1634414592,1634418687,CA 1634418688,1634447359,US @@ -51874,7 +62365,9 @@ 1652293632,1652310015,CA 1652310016,1652481279,US 1652481280,1652481791,CN -1652481792,1652621327,US +1652481792,1652487286,US +1652487287,1652487287,TR +1652487288,1652621327,US 1652621328,1652621335,CA 1652621336,1652621343,AU 1652621344,1652621359,CA @@ -52477,10 +62970,11 @@ 1654546432,1654550527,VG 1654550528,1654554623,US 1654554624,1654558719,CA -1654558720,1654583071,US -1654583072,1654583103,TR +1654558720,1654583103,US 1654583104,1654583135,CA -1654583136,1654599455,US +1654583136,1654597823,US +1654597824,1654597855,GB +1654597856,1654599455,US 1654599456,1654599471,CA 1654599472,1654599487,US 1654599488,1654599519,BA @@ -52509,9 +63003,8 @@ 1673562896,1673562911,CA 1673562912,1673562975,US 1673562976,1673563007,NL -1673563008,1673563071,US -1673563072,1673563135,NL -1673563136,1673563167,CA +1673563008,1673563151,US +1673563152,1673563167,CA 1673563168,1673563407,US 1673563408,1673563423,CA 1673563424,1673563487,US @@ -52522,22 +63015,13 @@ 1673563696,1673563711,CA 1673563712,1673563775,US 1673563776,1673563903,GB -1673563904,1673563967,US -1673563968,1673563983,CA -1673563984,1673566463,US -1673566464,1673566719,NL -1673566720,1673566735,CA -1673566736,1673566767,US -1673566768,1673566783,NO -1673566784,1673566847,US +1673563904,1673566847,US 1673566848,1673566911,CA 1673566912,1673566975,US 1673566976,1673567007,CA -1673567008,1673567103,US -1673567104,1673567167,GB -1673567168,1673567231,US -1673567232,1673567247,CA -1673567248,1673567263,US +1673567008,1673567087,US +1673567088,1673567167,GB +1673567168,1673567263,US 1673567264,1673567279,AT 1673567280,1673567311,US 1673567312,1673567327,GB @@ -52559,9 +63043,7 @@ 1673568304,1673568319,GB 1673568320,1673568383,US 1673568384,1673568447,CA -1673568448,1673568527,US -1673568528,1673568543,CA -1673568544,1673569023,US +1673568448,1673569023,US 1673569024,1673569039,CA 1673569040,1673569055,HR 1673569056,1673569103,US @@ -52580,9 +63062,7 @@ 1673572096,1673572351,LT 1673572352,1673572383,US 1673572384,1673572399,EC -1673572400,1673572415,US -1673572416,1673572431,CA -1673572432,1673572895,US +1673572400,1673572895,US 1673572896,1673572911,CA 1673572912,1673573183,US 1673573184,1673573247,CA @@ -52590,22 +63070,29 @@ 1673573504,1673573567,NL 1673573568,1673573759,US 1673573760,1673573823,CA -1673573824,1673576447,US -1673576448,1673576703,NL -1673576704,1673577727,US +1673573824,1673577727,US 1673577728,1673577983,LT 1673577984,1673578239,A1 -1673578240,1673986047,US +1673578240,1673578287,US +1673578288,1673578303,CA +1673578304,1673583231,US +1673583232,1673583295,CA +1673583296,1673585343,US +1673585344,1673585407,SC +1673585408,1673590783,US +1673590784,1673590911,EC +1673590912,1673986047,US 1673986048,1674051583,CA 1674051584,1674575871,US 1674575872,1677721599,CA 1677721600,1681915903,US -1694498816,1694499327,AU +1694498816,1694499839,CN 1694499840,1694500863,ID 1694500864,1694507007,JP 1694507008,1694515199,IN 1694515200,1694531583,AU 1694531584,1694564351,TW +1694564352,1694565375,CN 1694565376,1694566399,HK 1694566400,1694568447,KR 1694568448,1694572543,HK @@ -52615,42 +63102,86 @@ 1694662656,1694670847,JP 1694670848,1694672895,BD 1694672896,1694673919,AU +1694673920,1694674943,CN 1694674944,1694679039,LK 1694679040,1694695423,AU 1694695424,1694760959,TW 1694760960,1695023103,CN 1695023104,1695547391,TW 1695547392,1697775615,CN -1697775616,1697776639,AU +1697775616,1697776639,ID 1697776640,1697779711,JP 1697779712,1697783807,ID -1697783808,1697791999,JP +1697783808,1697789951,JP +1697789952,1697790975,CN +1697790976,1697791999,JP +1697792000,1697808383,PK +1697808384,1697841151,JP 1697841152,1697906687,TH 1697906688,1697972223,CN -1697996800,1698004991,JP +1697972224,1697988607,VN +1697988608,1697996799,KR +1697996800,1697997823,JP +1697997824,1697998847,CN +1697998848,1698004991,JP +1698004992,1698037759,AU 1698037760,1698103295,CN -1698160640,1698168831,JP +1698103296,1698136063,KR +1698136064,1698160639,JP +1698160640,1698162687,CN +1698162688,1698168831,JP 1698168832,1698693119,IN -1698693120,1699610623,CN +1698693120,1699611647,CN 1699611648,1699612671,JP 1699612672,1699614719,LA 1699614720,1699618815,PH +1699618816,1699627007,CN +1699627008,1699643391,SG +1699643392,1699676159,HK 1699676160,1699741695,KR -1699741696,1700790271,CN +1699741696,1700793343,CN 1700793344,1700794367,VN -1700855808,1700921343,AU +1700794368,1700798463,CN +1700798464,1700806655,JP +1700806656,1700823039,VN +1700823040,1700855807,CN +1700855808,1700921343,JP 1700921344,1700986879,NZ +1700986880,1701003263,VN +1701003264,1701011455,MY +1701011456,1701019647,CN +1701019648,1701052415,GU 1701052416,1701117951,NZ +1701117952,1701134335,NC +1701134336,1701142527,CN 1701142528,1701143551,HK +1701143552,1701143807,CN +1701143808,1701144063,AU +1701144064,1701150719,CN +1701150720,1701183487,KR +1701183488,1701199871,JP +1701199872,1701208063,CN 1701208064,1701209087,JP +1701209088,1701209855,CN +1701209856,1701210111,AU +1701210112,1701216255,CN +1701216256,1701249023,JP 1701249024,1701314559,AU 1701314560,1701576703,CN 1701576704,1701707775,TH +1701707776,1701724159,JP +1701724160,1701736447,CN 1701736448,1701737471,NZ -1701773312,1701838847,JP +1701737472,1701740543,CN +1701740544,1701838847,JP 1701838848,1702363135,AU 1702363136,1702821887,CN -1702821888,1702889471,AU +1702821888,1702887423,HK +1702887424,1702888447,CN +1702888448,1702889471,AU +1702889472,1702903807,CN +1702903808,1702920191,ID +1702920192,1702952959,JP 1702952960,1703411711,CN 1703411712,1703673855,TW 1703673856,1703935999,JP @@ -52658,16 +63189,745 @@ 1704984576,1707081727,AU 1707081728,1707737087,CN 1707737088,1707802623,KR +1707802624,1707835391,JP +1707835392,1707845631,CN 1707845632,1707846655,ID +1707846656,1707851775,CN +1707851776,1707868159,JP 1707868160,1708130303,CN 1708130304,1709178879,IN 1709178880,1709834239,CN +1709834240,1709850623,SG +1709850624,1709852671,CN +1709852672,1709853695,AU +1709853696,1709867007,CN +1709867008,1709899775,AU 1709899776,1709965311,KR 1709965312,1710882815,CN 1710882816,1710948351,KR -1711013888,1711210495,CN -1711210496,1711276031,AU -1795162112,1815822335,US +1710948352,1710949375,CN +1710949376,1710950399,NP +1710950400,1711210495,CN +1711210496,1711276031,ID +1728053248,1728120063,AU +1728120064,1728120319,SG +1728120320,1728120575,IN +1728120576,1728120831,AU +1728120832,1728121855,CN +1728121856,1728123903,HK +1728123904,1728125951,CN +1728125952,1728126975,LA +1728126976,1728132095,HK +1728132096,1728135167,AU +1728135168,1728136191,HK +1728136192,1728137215,MY +1728137216,1728138239,CN +1728138240,1728139263,AU +1728139264,1728140287,IN +1728140288,1728141311,SG +1728141312,1728142335,CN +1728142336,1728143359,NP +1728143360,1728144383,MP +1728144384,1728145407,IN +1728145408,1728146431,MY +1728146432,1728147455,AU +1728147456,1728148479,IN +1728148480,1728149503,PH +1728149504,1728150527,JP +1728150528,1728152575,IN +1728152576,1728153599,MY +1728153600,1728154623,SG +1728154624,1728155647,JP +1728155648,1728158719,MY +1728158720,1728159743,HK +1728159744,1728161791,TH +1728161792,1728162815,CN +1728162816,1728163839,SG +1728163840,1728164863,LK +1728164864,1728165887,FJ +1728165888,1728168959,AU +1728168960,1728169983,IN +1728169984,1728171007,VN +1728171008,1728172031,AU +1728172032,1728173055,VN +1728173056,1728175103,AU +1728175104,1728177151,HK +1728177152,1728178175,AU +1728178176,1728179199,LA +1728179200,1728180223,VN +1728180224,1728181247,AU +1728181248,1728203775,JP +1728203776,1728204799,KR +1728204800,1728205823,IN +1728205824,1728206847,KR +1728206848,1728207871,SB +1728207872,1728208895,KR +1728208896,1728210943,JP +1728210944,1728211967,SG +1728211968,1728212991,CN +1728212992,1728214015,TH +1728214016,1728215039,AU +1728215040,1728216063,NZ +1728216064,1728218111,JP +1728218112,1728219135,IN +1728219136,1728220159,JP +1728220160,1728221183,NZ +1728221184,1728222207,ID +1728222208,1728224255,LK +1728224256,1728225279,CN +1728225280,1728226303,JP +1728226304,1728227327,CN +1728227328,1728230399,AU +1728230400,1728231423,SG +1728231424,1728232447,NC +1728232448,1728235519,AU +1728235520,1728239615,CN +1728239616,1728240639,TW +1728240640,1728243711,VN +1728243712,1728246783,IN +1728246784,1728254975,JP +1728254976,1728255999,MY +1728256000,1728257023,HK +1728257024,1728258047,MN +1728258048,1728259071,IN +1728259072,1728260095,KR +1728260096,1728261119,IN +1728261120,1728262143,ID +1728262144,1728264191,JP +1728264192,1728265215,ID +1728265216,1728266239,SG +1728266240,1728267263,TH +1728267264,1728268287,ID +1728268288,1728269311,MY +1728269312,1728270335,ID +1728270336,1728271359,PH +1728271360,1728286719,CN +1728286720,1728287743,AU +1728287744,1728290815,CN +1728290816,1728291839,AU +1728291840,1728292863,SG +1728292864,1728293887,PG +1728293888,1728294911,MY +1728294912,1728295935,TH +1728295936,1728299007,JP +1728299008,1728300031,TW +1728300032,1728301055,AU +1728301056,1728302079,SG +1728302080,1728303103,IN +1728303104,1728305151,ID +1728305152,1728306175,AU +1728306176,1728307199,ID +1728307200,1728308223,BD +1728308224,1728309247,IN +1728309248,1728310271,NZ +1728310272,1728311295,AU +1728311296,1728312319,GU +1728312320,1728315391,VN +1728315392,1728316415,ID +1728316416,1728317439,MY +1728317440,1728318463,JP +1728318464,1728319487,SG +1728319488,1728320511,AU +1728320512,1728321535,PH +1728321536,1728322559,JP +1728322560,1728323583,MY +1728323584,1728324607,JP +1728324608,1728325631,SG +1728325632,1728326655,JP +1728326656,1728327679,MY +1728327680,1728328703,KR +1728328704,1728329727,ID +1728329728,1728330751,CN +1728330752,1728331775,AU +1728331776,1728332799,BD +1728332800,1728333823,JP +1728333824,1728334847,PF +1728334848,1728336895,JP +1728336896,1728337919,AU +1728337920,1728338943,MY +1728338944,1728339967,PK +1728339968,1728340991,SG +1728340992,1728342015,AU +1728342016,1728343039,TW +1728343040,1728344063,SG +1728344064,1728344575,HK +1728344576,1728345087,SG +1728345088,1728346111,BD +1728346112,1728346367,AU +1728346368,1728346623,NZ +1728346624,1728347135,AU +1728347136,1728348159,SG +1728348160,1728349183,VN +1728349184,1728349951,AU +1728349952,1728350207,NP +1728350208,1728351231,NZ +1728351232,1728352255,MY +1728352256,1728353279,BD +1728353280,1728354303,KR +1728354304,1728355327,NZ +1728355328,1728356351,TH +1728356352,1728357375,AU +1728357376,1728358399,ID +1728358400,1728359423,CN +1728359424,1728359935,AU +1728359936,1728360447,ID +1728360448,1728362495,KR +1728362496,1728363519,CN +1728363520,1728364543,BN +1728364544,1728365567,AU +1728365568,1728366591,SG +1728366592,1728367615,JP +1728367616,1728367871,IN +1728367872,1728368127,AU +1728368128,1728368639,ID +1728368640,1728369663,IN +1728369664,1728370687,AU +1728370688,1728371711,TH +1728371712,1728372735,IN +1728372736,1728373759,HK +1728373760,1728374783,TH +1728374784,1728375039,SG +1728375296,1728376831,AU +1728376832,1728377855,ID +1728377856,1728378879,HK +1728378880,1728380927,IN +1728380928,1728382975,PH +1728382976,1728383999,SG +1728384000,1728385023,HK +1728385024,1728386047,IN +1728386048,1728387071,JP +1728387072,1728388095,TH +1728388096,1728388351,NZ +1728388352,1728388607,AU +1728388608,1728389119,VN +1728389120,1728390143,TW +1728390144,1728391167,CN +1728391168,1728392191,JP +1728392192,1728393215,SG +1728393216,1728394239,ID +1728394240,1728396287,CN +1728396288,1728397311,PH +1728397312,1728398335,JP +1728398336,1728398847,AU +1728398848,1728399103,IN +1728399104,1728400383,NZ +1728400384,1728400895,AU +1728400896,1728401151,IN +1728401152,1728401407,SG +1728401408,1728402431,NZ +1728402432,1728403455,IN +1728403456,1728406527,AU +1728406528,1728407551,TW +1728407552,1728407807,JP +1728407808,1728408063,MY +1728408064,1728408319,NZ +1728408320,1728408575,ID +1728408576,1728409599,NZ +1728409600,1728410623,IN +1728410624,1728411647,JP +1728411648,1728412671,TH +1728412672,1728413695,KH +1728413696,1728414719,KR +1728414720,1728415743,IN +1728415744,1728416767,PK +1728416768,1728417791,JP +1728417792,1728418815,KR +1728418816,1728419071,ID +1728419072,1728419327,HK +1728419328,1728419583,NP +1728419584,1728419839,SG +1728419840,1728420863,JP +1728420864,1728421887,NZ +1728421888,1728422911,JP +1728422912,1728423935,AU +1728423936,1728424959,TW +1728424960,1728425983,AF +1728425984,1728427007,JP +1728427008,1728428031,MY +1728428032,1728430079,IN +1728430080,1728431103,JP +1728431104,1728431615,AF +1728431616,1728431871,HK +1728431872,1728432127,SG +1728432128,1728433151,IN +1728433152,1728435199,VN +1728435200,1728435967,AU +1728435968,1728436223,ID +1728436224,1728437247,IN +1728437248,1728438271,HK +1728438272,1728439295,NZ +1728439296,1728439807,NP +1728439808,1728440319,AU +1728440320,1728441343,BD +1728441344,1728442367,MY +1728442368,1728443391,SG +1728443392,1728444415,IN +1728444416,1728445439,JP +1728445440,1728446463,CN +1728708608,1728709631,CN +1728709632,1728710655,TW +1728710656,1728710911,AU +1728710912,1728711167,IN +1728711424,1728711679,AU +1728711680,1728712703,HK +1728712704,1728713727,CN +1728713728,1728714751,MN +1728714752,1728715775,IN +1728715776,1728716799,NP +1728716800,1728717823,AU +1728717824,1728718847,JP +1728718848,1728719871,MY +1728719872,1728720895,NZ +1728720896,1728721919,AU +1728721920,1728722943,BD +1728722944,1728723199,ID +1728723200,1728723455,AU +1728723456,1728726015,ID +1728726016,1728727039,JP +1728727040,1728728063,AU +1728728064,1728729087,BD +1728729088,1728729599,ID +1728729600,1728730111,AU +1728730112,1728731135,CN +1728731136,1728732159,VN +1728732160,1728733183,KR +1728733184,1728734207,ID +1728734208,1728735231,SG +1728735232,1728736255,ID +1728736256,1728736511,HK +1728736512,1728736767,IN +1728736768,1728737023,ID +1728737024,1728737279,CN +1728737280,1728738303,JP +1728738304,1728739327,IN +1728739328,1728740351,ID +1728740352,1728740863,HK +1728740864,1728741119,AU +1728741120,1728741375,IN +1728741376,1728742399,ID +1728742400,1728743423,IN +1728743424,1728744447,ID +1728744448,1728745471,CN +1728745472,1728747519,ID +1728747520,1728748543,PH +1728748544,1728750591,MY +1728750592,1728751615,JP +1728751616,1728751871,IN +1728751872,1728752639,ID +1728752640,1728753663,LK +1728753664,1728754687,PH +1728754688,1728755711,IN +1728755712,1728756735,ID +1728756736,1728757759,IN +1728757760,1728758783,JP +1728758784,1728759039,MY +1728759040,1728759295,HK +1728759296,1728759807,MY +1728759808,1728760831,PH +1728760832,1728761855,TW +1728761856,1728762879,IN +1728762880,1728763903,VN +1728763904,1728764927,KR +1728764928,1728765439,SG +1728765440,1728765695,IN +1728765696,1728765951,ID +1728765952,1728766975,IN +1728766976,1728767999,TH +1728768000,1728768255,AU +1728768256,1728768511,NZ +1728768512,1728769023,IN +1728769024,1728770047,HK +1728770048,1728772095,JP +1728772096,1728773375,IN +1728773376,1728773631,ID +1728773632,1728774143,PH +1728774144,1728775167,AU +1728775168,1728776191,JP +1728776192,1728777215,AU +1728777216,1728778239,TH +1728778240,1728779263,JP +1728779264,1728779519,IN +1728779520,1728779775,NZ +1728779776,1728780287,ID +1728780288,1728781311,KR +1728781312,1728782335,ID +1728782336,1728783359,LK +1728783360,1728784383,HK +1728784384,1728785407,PH +1728785408,1728786431,KR +1728786432,1728787455,SG +1728787456,1728788479,AU +1728788480,1728789503,KR +1728789504,1728790527,PK +1728790528,1728791551,PH +1728791552,1728792575,PK +1728792576,1728793087,NZ +1728793088,1728793599,ID +1728793600,1728794623,AU +1728794624,1728796671,IN +1728796672,1728798719,HK +1728798720,1728799743,ID +1728799744,1728801279,HK +1728801280,1728801791,ID +1728801792,1728802815,HK +1728802816,1728803839,PH +1728803840,1728804863,IN +1728804864,1728805887,JP +1728805888,1728806911,NZ +1728806912,1728807935,KR +1728807936,1728808959,ID +1728808960,1728809983,BD +1728809984,1728810495,SG +1728810496,1728810751,AU +1728810752,1728811007,SG +1728811008,1728812031,AU +1728812032,1728812543,ID +1728812544,1728813055,SG +1728813056,1728814079,IN +1728814080,1728815103,JP +1728815104,1728818175,AU +1728818176,1728819199,VN +1728819200,1728819711,ID +1728819712,1728819967,NZ +1728819968,1728820223,ID +1728820224,1728821247,CN +1728821248,1728821759,AU +1728821760,1728822271,ID +1728822272,1728823295,SG +1728823296,1728824319,MN +1728824320,1728825343,JP +1728825344,1728826367,SG +1728826368,1728827391,AU +1728827392,1728828415,JP +1728828416,1728829439,AU +1728829440,1728830463,KH +1728830464,1728830719,SG +1728830720,1728830975,JP +1728830976,1728831487,ID +1728831488,1728832511,IN +1728832512,1728833535,HK +1728833536,1728834559,IN +1728834560,1728835583,JP +1728835584,1728836607,NZ +1728836608,1728837631,HK +1728837632,1728838655,KR +1728838656,1728839679,ID +1729495040,1729519615,CN +1729519616,1729520639,HK +1729520640,1729527807,CN +1729527808,1729528831,SG +1729528832,1729530879,ID +1729530880,1729531903,MY +1729531904,1729532927,AU +1729532928,1729533951,MY +1729533952,1729534975,JP +1729534976,1729535999,TW +1729536000,1729537023,HK +1729537024,1729537791,ID +1729537792,1729538047,JP +1729538048,1729539071,SG +1729539072,1729540095,IN +1729540096,1729541119,AU +1729541120,1729542143,TH +1729542144,1729543167,AU +1729543168,1729544191,CN +1729544192,1729545215,IN +1729545216,1729546239,AU +1729546240,1729547263,HK +1729547264,1729548287,IN +1729548288,1729549311,AU +1729549312,1729550335,JP +1729550336,1729551359,MY +1729551360,1729552383,KR +1729552384,1729553407,AU +1729553408,1729554431,CN +1729554432,1729554943,ID +1729554944,1729555455,NZ +1729555456,1729556479,IN +1729556480,1729557503,ID +1729557504,1729558527,HK +1729558528,1729559551,ID +1729559552,1729560575,CN +1729560576,1729561599,AU +1729561600,1729562623,JP +1729562624,1729563647,CN +1729563648,1729564671,JP +1729564672,1729565695,NZ +1729565696,1729566719,ID +1729566720,1729568255,IN +1729568256,1729568511,ID +1729568768,1729569791,ID +1729569792,1729570815,AF +1729570816,1729571839,AU +1729571840,1729572863,MY +1729572864,1729573887,MN +1729573888,1729574911,NC +1729574912,1729575935,CN +1729575936,1729576959,BD +1729576960,1729577983,AU +1729577984,1729578495,HK +1729578496,1729578751,AU +1729578752,1729579007,MY +1729579008,1729580031,JP +1729580032,1729581055,SG +1729581056,1729583103,KR +1729583104,1729584127,JP +1729584128,1729585151,SG +1729585152,1729586175,HK +1729586176,1729587199,ID +1729587200,1729588223,AU +1729588224,1729589247,TW +1729589248,1729590271,AU +1729590272,1729590783,ID +1729590784,1729591295,IN +1729591296,1729592319,TH +1729592320,1729593343,IN +1729593344,1729594367,JP +1729594368,1729596415,KH +1729596416,1729596671,IN +1729596672,1729596927,ID +1729596928,1729597439,NZ +1729597440,1729598463,VN +1729598464,1729598975,AU +1729598976,1729599231,IN +1729599232,1729599487,ID +1729599488,1729600511,AU +1729600512,1729601535,VN +1729601536,1729603583,CN +1729603584,1729604607,BD +1729604608,1729605119,AU +1729605120,1729605375,PH +1729605376,1729605631,ID +1729605632,1729606655,CN +1729606656,1729607679,ID +1729607680,1729609727,AU +1729609728,1729610751,HK +1729953792,1729954815,MY +1729954816,1729955839,ID +1729955840,1729956863,BD +1729956864,1729957887,HK +1729957888,1729958911,CN +1729958912,1729959935,PH +1729959936,1729960959,SG +1729960960,1729961471,IN +1729961472,1729961983,NZ +1729961984,1729964031,IN +1729964032,1729965055,AU +1729965056,1729966079,IN +1729966080,1729967103,JP +1729967104,1729968127,AU +1729968128,1729969151,MY +1729969152,1729970175,LK +1729970176,1729971199,AU +1729971200,1729972223,JP +1729972224,1729973247,HK +1729973248,1729974271,AU +1729974272,1729975295,PH +1729975296,1729976831,AU +1729976832,1729977343,NZ +1729977344,1729978367,HK +1729978368,1729979391,IN +1729979392,1729980415,AU +1729980416,1729980927,BD +1729980928,1729982463,SG +1729982464,1729982719,AU +1729982720,1729982975,JP +1729982976,1729983231,SG +1729983232,1729983487,AU +1729983488,1729984511,IN +1729984512,1729985535,ID +1729985536,1729986559,BD +1729986560,1729989631,CN +1729989632,1729990655,HK +1729990656,1729991679,MN +1729991680,1729992703,ID +1729992704,1729993727,NC +1729993728,1729994751,IN +1729994752,1729995519,AU +1729995520,1729995775,PK +1729995776,1729996799,ID +1729996800,1729997311,AU +1729997312,1729997823,ID +1729997824,1729998847,AU +1729998848,1730000895,JP +1730000896,1730001919,ID +1730001920,1730002943,TH +1730002944,1730003967,AU +1730003968,1730004223,ID +1730004224,1730004479,IN +1730004480,1730004735,MY +1730004736,1730004991,MN +1730004992,1730007039,AU +1730007040,1730008063,IN +1730008064,1730009087,ID +1730009088,1730010111,AU +1730010112,1730011135,IN +1730011136,1730012159,BT +1730012160,1730013183,ID +1730013184,1730015231,IN +1730015232,1730016255,MY +1730016256,1730017279,PH +1730017280,1730017791,IN +1730017792,1730019327,PH +1744175104,1744176127,ID +1744176128,1744177151,AU +1744177152,1744179199,CN +1744179200,1744180223,TH +1744180224,1744181247,PH +1744181248,1744182271,TH +1744182272,1744185343,AU +1744185344,1744186367,HK +1744186368,1744187903,IN +1744187904,1744188159,TH +1744188160,1744188415,AU +1744188416,1744189439,NZ +1744189440,1744190463,KR +1744190464,1744191487,JP +1744191488,1744192511,IN +1744192512,1744194559,JP +1744194560,1744194815,ID +1744194816,1744195071,HK +1744195072,1744195327,SG +1744195328,1744195583,HK +1744195584,1744196607,JP +1744196608,1744197631,IN +1744197632,1744198655,MY +1744198656,1744199679,SG +1744199680,1744201727,AU +1744201728,1744201983,VN +1744202240,1744202495,IN +1744202496,1744202751,ID +1744202752,1744203775,PK +1744203776,1744204799,MY +1744204800,1744205823,ID +1744205824,1744207871,CN +1744207872,1744208127,AU +1744208128,1744208383,ID +1744208384,1744208895,AU +1744208896,1744209919,CN +1744209920,1744210943,AU +1744210944,1744211967,SG +1744211968,1744212991,KH +1744212992,1744214015,JP +1744214016,1744216063,CN +1744216064,1744217087,HK +1744217088,1744218111,JP +1744218112,1744218367,AU +1744218368,1744218623,ID +1744218624,1744219135,IN +1744219136,1744220159,PH +1744220160,1744221183,HK +1744221184,1744222207,NZ +1744222208,1744222719,ID +1744222720,1744223231,AU +1744223232,1744224255,TH +1744224256,1744225279,JP +1744225280,1744226303,IN +1744226304,1744227327,SG +1744227328,1744228351,MY +1744228352,1744229375,TW +1744229376,1744230399,IN +1744230400,1744230655,HK +1744230656,1744230911,MY +1744230912,1744231423,IN +1744231424,1744232447,VN +1744232448,1744233471,IN +1744233472,1744234495,KH +1744234496,1744234751,JP +1744234752,1744235519,AU +1744235520,1744236543,KR +1744236544,1744237567,IN +1744237568,1744238591,HK +1744238592,1744239103,US +1744239104,1744239615,NZ +1744239616,1744240639,JP +1769996288,1772093439,MA +1778384896,1778385151,CN +1778385152,1778385407,AU +1778385408,1778393087,CN +1778401280,1778417663,CN +1778417664,1778450431,TH +1778450432,1778515967,TW +1778515968,1779040255,CN +1779040256,1779073023,KR +1779073024,1779105791,SG +1779105792,1781727231,CN +1781727232,1781792767,IN +1781792768,1782579199,CN +1782579200,1782710271,TW +1782710272,1782841343,IN +1782841344,1783103487,AU +1783103488,1783234559,JP +1783234560,1783365631,CN +1783365632,1783627775,IN +1783627776,1784676351,CN +1784676352,1785200639,KR +1785200640,1785462783,TW +1785462784,1786773503,CN +1786773504,1790967807,JP +1790967808,1793064959,IN +1793064960,1794113535,CN +1794113536,1795162111,KR +1795162112,1795555359,US +1795555360,1795555455,CA +1795555456,1795555519,US +1795555520,1795555583,CA +1795555584,1795555839,US +1795555840,1795555855,CA +1795555856,1795555863,US +1795555864,1795555903,CA +1795555904,1795555967,AN +1795555968,1795556095,CA +1795556096,1795556103,US +1795556104,1795556127,CA +1795556128,1795556175,US +1795556176,1795556183,CA +1795556184,1795556191,US +1795556192,1795556255,CA +1795556256,1795556287,US +1795556288,1795556319,QA +1795556320,1795556351,US +1795556352,1795556607,GB +1795556608,1795556639,US +1795556640,1795556863,CA +1795556864,1795556927,US +1795556928,1795556959,CA +1795556960,1795556991,US +1795556992,1795557119,CA +1795557120,1795557135,US +1795557136,1795557143,CA +1795557144,1795557151,US +1795557152,1795557215,CA +1795557216,1795557247,US +1795557248,1795557375,CA +1795557376,1795557887,IN +1795557888,1795558143,US +1795558144,1795558655,IN +1795558656,1795558911,US +1795558912,1795559423,IN +1795559424,1795559679,AR +1795559680,1795559743,US +1795559744,1795559807,AE +1795559808,1795560447,US +1795560448,1795560959,CA +1795560960,1795561471,US +1795561472,1795562239,CA +1795562240,1795565055,US +1795565056,1795565567,IN +1795565568,1795565631,US +1795565632,1795565719,CA +1795565720,1795565759,US +1795565760,1795565791,CA +1795565792,1795565807,US +1795565808,1795566143,CA +1795566144,1796257919,US +1796257920,1796258047,PR +1796258048,1796262911,US +1796262912,1796263167,PR +1796263168,1796325375,US +1796325376,1796325631,PR +1796325632,1803550719,US +1809842176,1815822335,US 1815822336,1815826431,CA 1815826432,1815871487,US 1815871488,1815879679,CA @@ -52675,16 +63935,39 @@ 1815912448,1815920639,CA 1815920640,1815928831,US 1815928832,1815937023,BS -1815937024,1816068095,US +1815937024,1816001791,US +1816001792,1816002559,NL +1816002560,1816024319,US +1816024320,1816024575,CA +1816024576,1816068095,US 1816068096,1816133631,CA -1816133632,1828716543,US +1816133632,1822429183,US +1822429184,1822433279,CA +1822433280,1822445567,US +1822445568,1822453759,CA +1822453760,1822486527,US +1822486528,1822490623,CA +1822490624,1822498815,US +1822498816,1822502911,CA +1822502912,1822519295,US +1822519296,1822523391,CA +1822523392,1822531583,US +1822531584,1822535679,CA +1822535680,1822572543,US +1822572544,1822605311,CA +1822605312,1822654463,US +1822654464,1822670847,CA +1822670848,1822818303,US +1824522240,1828716543,US 1828716544,1830813695,FR 1830813696,1831337983,NL 1831337984,1831862271,DE 1831862272,1832124415,PT 1832124416,1832386559,IT 1832386560,1832517631,DK -1832517632,1832583167,SE +1832517632,1832551935,SE +1832551936,1832566783,DK +1832566784,1832583167,SE 1832583168,1832648703,DK 1832648704,1832681471,HR 1832681472,1832714239,RU @@ -52731,7 +64014,8 @@ 1833248768,1833250815,MK 1833250816,1833254911,GB 1833254912,1833256959,DE -1833256960,1833261055,GB +1833256960,1833259007,RU +1833259008,1833261055,GB 1833261056,1833263103,PL 1833263104,1833265151,DE 1833265152,1833267199,GB @@ -52739,7 +64023,7 @@ 1833269248,1833271295,FI 1833271296,1833273343,IT 1833273344,1833275391,EU -1833275392,1833277439,GB +1833275392,1833277439,IT 1833277440,1833279487,CH 1833279488,1833281535,AL 1833281536,1833283583,AT @@ -52747,8 +64031,9 @@ 1833285632,1833289727,FR 1833289728,1833291775,IT 1833291776,1833293823,CZ -1833293824,1833294557,BE -1833294558,1833294591,FR +1833293824,1833294540,BE +1833294541,1833294550,NL +1833294551,1833294591,FR 1833294592,1833295871,BE 1833295872,1833297919,NL 1833297920,1833299967,GB @@ -52759,7 +64044,15 @@ 1833308752,1833308759,NL 1833308760,1833308763,FR 1833308764,1833308767,NL -1833308768,1833310207,FR +1833308768,1833308807,FR +1833308808,1833308815,NL +1833308816,1833308819,FR +1833308820,1833308823,NL +1833308824,1833308831,FR +1833308832,1833308839,NL +1833308840,1833308855,FR +1833308856,1833308859,NL +1833308860,1833310207,FR 1833310208,1833312255,RU 1833312256,1833314303,ES 1833314304,1833315903,IM @@ -52777,8 +64070,8 @@ 1833332736,1833334783,CH 1833334784,1833336831,IT 1833336832,1833336959,ES -1833336960,1833336975,FR -1833336976,1833338879,ES +1833336960,1833337071,FR +1833337072,1833338879,ES 1833338880,1833342975,GB 1833342976,1833345023,CH 1833345024,1833347071,FI @@ -52823,7 +64116,8 @@ 1833406864,1833406912,GB 1833406913,1833406919,CA 1833406920,1833408511,GB -1833408512,1833410559,RS +1833408512,1833410303,RS +1833410304,1833410559,AL 1833410560,1833412607,PT 1833412608,1833414655,GB 1833414656,1833416703,RU @@ -52849,22 +64143,25 @@ 1833468160,1833468287,RU 1833468288,1833468575,CH 1833468576,1833468591,RU -1833468592,1833471999,CH +1833468592,1833469439,CH +1833469440,1833469951,IN +1833469952,1833471999,CH 1833472000,1833474047,EU 1833474048,1833474559,UA -1833474560,1833476095,EU +1833474560,1833474815,RU +1833474816,1833475071,EU +1833475072,1833476095,DE 1833476096,1833477375,NL 1833477376,1833477503,GB 1833477504,1833477631,DE -1833477632,1833481087,NL -1833481088,1833481215,IE -1833481216,1833484287,NL +1833477632,1833484287,NL 1833484288,1833488383,IR 1833488384,1833492479,GB 1833492480,1833504767,RU 1833504768,1833508863,DE 1833508864,1833512959,RU 1833512960,1833517055,DE +1833517056,1833521151,GB 1833521152,1833525247,IT 1833525248,1833529343,LV 1833529344,1833533439,GB @@ -52873,7 +64170,9 @@ 1833541632,1833542143,IL 1833542144,1833542655,GB 1833542656,1833542911,IN -1833542912,1833545727,GB +1833542912,1833543168,GB +1833543169,1833543423,IN +1833543424,1833545727,GB 1833545728,1833549823,IT 1833549824,1833553919,RU 1833553920,1833558015,CZ @@ -52907,19 +64206,17 @@ 1833644288,1833644319,TJ 1833644320,1833648127,RU 1833648128,1833652223,LB -1833652224,1833659023,DE -1833659024,1833659039,BZ -1833659040,1833659903,DE -1833659904,1833659919,NA -1833659920,1833660159,DE -1833660160,1833660223,CH -1833660224,1833660351,DE +1833652224,1833660351,DE 1833660352,1833660415,US 1833660416,1833664511,IT 1833664512,1833668607,RU 1833668608,1833672703,CZ 1833672704,1833676799,GB -1833676800,1833680895,DE +1833676800,1833677567,DE +1833677568,1833677599,CH +1833677600,1833677775,DE +1833677776,1833677783,FR +1833677784,1833680895,DE 1833680896,1833684991,UA 1833684992,1833689087,DE 1833689088,1833693183,FI @@ -52950,7 +64247,9 @@ 1834956800,1834960895,IR 1834960896,1834964991,RU 1834964992,1834967039,PL -1834967040,1834975231,RU +1834967040,1834971135,RU +1834971136,1834973183,PL +1834973184,1834975231,RU 1834975232,1834977279,IL 1834977280,1834983423,PL 1834983424,1834985471,RU @@ -52967,7 +64266,9 @@ 1835540480,1835548671,DE 1835548672,1835549695,GB 1835549696,1835550207,ES -1835550208,1835565055,GB +1835550208,1835561351,GB +1835561352,1835561359,A2 +1835561360,1835565055,GB 1835565056,1835573247,AL 1835573248,1835581439,UA 1835581440,1835589631,BG @@ -52988,7 +64289,10 @@ 1835627648,1835629567,SE 1835629568,1835630335,DK 1835630336,1835630591,SE -1835630592,1835646975,RU +1835630592,1835636735,RU +1835636736,1835638527,LU +1835638528,1835638783,AM +1835638784,1835646975,RU 1835646976,1835655167,BA 1835655168,1835663359,CY 1835663360,1835671551,UA @@ -53023,7 +64327,19 @@ 1835892736,1835909119,GB 1835909120,1835913215,RS 1835913216,1835917311,RU -1835917312,1835925503,GB +1835917312,1835920135,GB +1835920136,1835920159,PT +1835920160,1835920167,GB +1835920168,1835920175,PT +1835920176,1835920183,GB +1835920184,1835920199,PT +1835920200,1835920207,GB +1835920208,1835920239,PT +1835920240,1835920247,GB +1835920248,1835920335,PT +1835920336,1835920343,GB +1835920344,1835920359,PT +1835920360,1835925503,GB 1835925504,1835933695,LV 1835933696,1835941887,RU 1835941888,1835950079,UA @@ -53043,8 +64359,8 @@ 1836048472,1836056575,RS 1836056576,1836580863,IT 1836580864,1836597247,RU -1836597248,1836598015,LU -1836598016,1836606463,DE +1836597248,1836597759,LU +1836597760,1836606463,DE 1836606464,1836613631,LU 1836613632,1836630015,RU 1836630016,1836646399,BG @@ -53082,7 +64398,16 @@ 1839333376,1839366143,UA 1839366144,1839398911,IR 1839398912,1839431679,NO -1839431680,1839464447,RU +1839431680,1839448063,BA +1839448064,1839450111,KZ +1839450112,1839452159,NO +1839452160,1839454207,FI +1839454208,1839456255,RU +1839456256,1839459327,RO +1839459328,1839459839,DE +1839459840,1839460351,RO +1839460352,1839462399,RU +1839462400,1839464447,FI 1839464448,1839497215,CZ 1839497216,1839529983,CH 1839529984,1839562751,RU @@ -53094,19 +64419,16 @@ 1839756328,1839756335,FR 1839756336,1839759359,IT 1839759360,1839792127,RU -1839792128,1839794687,GB -1839794688,1839794943,US -1839794944,1839795071,GB -1839795072,1839795087,US -1839795088,1839795151,GB +1839792128,1839795151,GB 1839795152,1839795167,US 1839795168,1839796607,GB 1839796608,1839796671,US -1839796672,1839796735,GB -1839796736,1839796991,TR -1839796992,1839797759,GB +1839796672,1839796735,SG +1839796736,1839797759,GB 1839797760,1839798015,GR -1839798016,1839798527,GB +1839798016,1839798271,GB +1839798272,1839798399,US +1839798400,1839798527,GB 1839798528,1839798559,US 1839798560,1839800447,GB 1839800448,1839800479,SG @@ -53115,17 +64437,15 @@ 1839800960,1839801023,GR 1839801024,1839801279,GB 1839801280,1839801311,VG -1839801312,1839801343,GB -1839801344,1839801471,CN -1839801472,1839801551,GB +1839801312,1839801551,GB 1839801552,1839801567,US -1839801568,1839801599,GB -1839801600,1839801855,US -1839801856,1839802111,GB +1839801568,1839802111,GB 1839802112,1839802239,RO 1839802240,1839806463,GB 1839806464,1839811071,US -1839811072,1839816703,GB +1839811072,1839812607,GB +1839812608,1839814143,US +1839814144,1839816703,GB 1839816704,1839824895,NO 1839824896,1839890431,RU 1839890432,1839923199,GB @@ -53150,7 +64470,8 @@ 1840906240,1840971775,IL 1840971776,1841102847,RU 1841102848,1841168383,NO -1841168384,1841299455,RU +1841168384,1841233919,FR +1841233920,1841299455,RU 1841299456,1841430527,DE 1841430528,1841561599,RU 1841561600,1841565695,PL @@ -53206,7 +64527,10 @@ 1841848320,1841856511,RU 1841856512,1841864703,UA 1841864704,1841872895,YE -1841872896,1841879807,NL +1841872896,1841878015,NL +1841878016,1841879039,AU +1841879040,1841879551,NL +1841879552,1841879807,US 1841879808,1841880063,GB 1841880064,1841881087,JP 1841881088,1841889279,UA @@ -53219,6 +64543,10 @@ 1841946624,1841954815,UA 1841954816,1841971199,RU 1841971200,1841979391,CZ +1841979392,1841983487,NL +1841983488,1841983999,GI +1841984000,1841985535,IM +1841985536,1841987583,SI 1841987584,1841995775,DK 1841995776,1842003967,RU 1842003968,1842012159,CH @@ -53238,7 +64566,34 @@ 1842085888,1842118655,GB 1842118656,1842151423,FI 1842151424,1842153471,FR -1842153472,1842155519,NO +1842153472,1842153567,NO +1842153568,1842153575,GB +1842153576,1842153823,NO +1842153824,1842153855,GB +1842153856,1842153887,NO +1842153888,1842153919,DE +1842153920,1842153951,NE +1842153952,1842153983,NO +1842153984,1842154015,US +1842154016,1842154031,NO +1842154032,1842154047,US +1842154048,1842154111,NO +1842154112,1842154115,US +1842154116,1842154119,NO +1842154120,1842154143,US +1842154144,1842154239,NO +1842154240,1842154247,HK +1842154248,1842154367,NO +1842154368,1842154431,US +1842154432,1842154495,NO +1842154496,1842154511,CN +1842154512,1842154527,SG +1842154528,1842154559,AU +1842154560,1842154751,NO +1842154752,1842154815,AU +1842154816,1842155007,NO +1842155008,1842155263,AU +1842155264,1842155519,SG 1842155520,1842157567,IT 1842157568,1842159615,AE 1842159616,1842161663,BA @@ -53258,9 +64613,7 @@ 1842188288,1842190335,RU 1842190336,1842192383,GB 1842192384,1842194431,AZ -1842194432,1842196319,CH -1842196320,1842196351,NL -1842196352,1842196479,CH +1842194432,1842196479,CH 1842196480,1842198527,DE 1842198528,1842200575,GB 1842200576,1842202623,NL @@ -53269,8 +64622,8 @@ 1842206720,1842208767,SE 1842208768,1842210815,GB 1842210816,1842212863,LT -1842212864,1842214911,CZ -1842214912,1842216959,RU +1842212864,1842214655,CZ +1842214656,1842216959,RU 1842216960,1842225151,RO 1842225152,1842233343,UA 1842233344,1842241535,RO @@ -53322,7 +64675,10 @@ 1843789824,1843806207,SK 1843806208,1843822591,IR 1843822592,1843838975,RU -1843838976,1843849215,DE +1843838976,1843841535,DE +1843841536,1843841791,CH +1843841792,1843842047,AU +1843842048,1843849215,DE 1843849216,1843850239,GB 1843850240,1843855359,DE 1843855360,1843871743,PL @@ -53374,16 +64730,18 @@ 1844011008,1844013055,IT 1844013056,1844015103,PL 1844015104,1844017151,GB -1844017152,1844019199,IT -1844019200,1844027391,DE +1844017152,1844021247,IT +1844021248,1844027391,DE 1844027392,1844029439,CZ 1844029440,1844031487,RU 1844031488,1844031743,EU -1844031744,1844031999,CH -1844032000,1844032255,GB -1844032256,1844032511,CH -1844032512,1844033279,EU -1844033280,1844033535,CH +1844031744,1844031775,CH +1844031776,1844031999,EU +1844032000,1844032031,GB +1844032032,1844032255,EU +1844032256,1844033023,CH +1844033024,1844033271,EU +1844033272,1844033535,CH 1844033536,1844035583,RS 1844035584,1844037631,MD 1844037632,1844041727,RU @@ -53397,12 +64755,17 @@ 1844058112,1844062207,RU 1844062208,1844064255,CZ 1844064256,1844068351,IT -1844068352,1844072447,GB +1844068352,1844068607,FR +1844068608,1844070399,ES +1844070400,1844072447,GB 1844072448,1844076543,ES 1844076544,1844078591,IE -1844078592,1844080639,DE +1844078592,1844080127,DE +1844080128,1844080639,PL 1844080640,1844082687,GE -1844082688,1844084735,DE +1844082688,1844084055,DE +1844084056,1844084063,CH +1844084064,1844084735,DE 1844084736,1844086783,RU 1844086784,1844088831,IT 1844088832,1844090879,AT @@ -53412,7 +64775,9 @@ 1844099072,1844101119,DE 1844101120,1844105215,GB 1844105216,1844107263,ES -1844107264,1844109311,DE +1844107264,1844107807,DE +1844107808,1844107823,CH +1844107824,1844109311,DE 1844109312,1844109567,US 1844109568,1844111359,GB 1844111360,1844113407,AL @@ -53425,7 +64790,11 @@ 1844125696,1844127743,NL 1844127744,1844129791,DE 1844129792,1844131583,NL -1844131584,1844131839,SC +1844131584,1844131647,SC +1844131648,1844131711,NL +1844131712,1844131775,RU +1844131776,1844131807,US +1844131808,1844131839,NL 1844131840,1844133887,DE 1844133888,1844135935,LT 1844135936,1844137983,NL @@ -53437,10 +64806,7 @@ 1844148224,1844150271,GB 1844150272,1844152319,ES 1844152320,1844154367,DE -1844154368,1844154879,GB -1844154880,1844155135,FR -1844155136,1844155391,US -1844155392,1844156415,GB +1844154368,1844156415,GB 1844156416,1844158463,IT 1844158464,1844160511,RU 1844160512,1844162559,SE @@ -53452,9 +64818,41 @@ 1844169488,1844169519,US 1844169520,1844169599,SE 1844169600,1844169647,US -1844169648,1844169983,SE -1844169984,1844170387,DE -1844170388,1844170751,SE +1844169648,1844169655,AF +1844169656,1844169663,SE +1844169664,1844169679,US +1844169680,1844169687,ZM +1844169688,1844169695,IQ +1844169696,1844169703,KZ +1844169704,1844169727,SE +1844169728,1844169767,DE +1844169768,1844169951,US +1844169952,1844169983,DE +1844169984,1844169995,AF +1844169996,1844169999,TM +1844170000,1844170015,AF +1844170016,1844170019,NG +1844170020,1844170027,AF +1844170028,1844170031,IQ +1844170032,1844170051,AF +1844170052,1844170055,GH +1844170056,1844170063,AF +1844170064,1844170067,DE +1844170068,1844170071,NG +1844170072,1844170075,CG +1844170076,1844170079,DE +1844170080,1844170083,CG +1844170084,1844170091,NG +1844170092,1844170095,ZM +1844170096,1844170119,DE +1844170120,1844170123,AF +1844170124,1844170127,DE +1844170128,1844170131,NG +1844170132,1844170239,DE +1844170240,1844170255,AF +1844170256,1844170263,IQ +1844170264,1844170279,AF +1844170280,1844170751,DE 1844170752,1844174847,RU 1844174848,1844178943,DE 1844178944,1844180991,EE @@ -53466,8 +64864,8 @@ 1844181953,1844181958,GB 1844181959,1844181984,TR 1844181985,1844181990,GB -1844181991,1844182271,TR -1844182272,1844182302,US +1844181991,1844182272,TR +1844182273,1844182302,US 1844182303,1844182309,TR 1844182310,1844182329,US 1844182330,1844182343,TR @@ -53477,9 +64875,7 @@ 1844182418,1844182424,TR 1844182425,1844182426,US 1844182427,1844182432,TR -1844182433,1844182442,US -1844182443,1844182459,TR -1844182460,1844182480,US +1844182433,1844182480,US 1844182481,1844182485,TR 1844182486,1844182489,US 1844182490,1844182501,TR @@ -53492,9 +64888,17 @@ 1844207616,1844211711,RU 1844211712,1844215807,SK 1844215808,1844219903,BE -1844219904,1844220159,DE +1844219904,1844219919,A2 +1844219920,1844219959,LB +1844219960,1844220159,A2 1844220160,1844220191,IQ -1844220192,1844223999,DE +1844220192,1844220287,DE +1844220288,1844220415,LB +1844220416,1844220431,A2 +1844220432,1844220927,DE +1844220928,1844221951,A2 +1844221952,1844223743,DE +1844223744,1844223999,A2 1844224000,1844228095,GB 1844228096,1844228479,DK 1844228480,1844228511,SE @@ -53522,7 +64926,9 @@ 1844310016,1844318207,FR 1844318208,1844322303,IT 1844322304,1844326399,CZ -1844326400,1844330495,DK +1844326400,1844329983,DK +1844329984,1844330303,LU +1844330304,1844330495,DK 1844330496,1844334591,GB 1844334592,1844342783,RU 1844342784,1844346879,IT @@ -53607,6 +65013,7 @@ 1847787520,1847803903,KR 1847803904,1847807999,VN 1847808000,1847810047,ID +1847810048,1847812095,FJ 1847812096,1847853055,KR 1847853056,1848115199,PK 1848115200,1848377343,CN @@ -53618,6 +65025,7 @@ 1848401920,1848406015,PH 1848406016,1848410111,NP 1848410112,1848414207,PH +1848414208,1848418303,CN 1848418304,1848420351,AU 1848420352,1848422399,ID 1848422400,1848424447,JP @@ -53627,6 +65035,7 @@ 1848705024,1848770559,TH 1848770560,1848774655,JP 1848774656,1848776703,AU +1848776704,1848778751,JP 1848778752,1848786943,IN 1848786944,1848791039,JP 1848791040,1848793087,ID @@ -53652,9 +65061,11 @@ 1850510336,1850511359,KR 1850511360,1850513407,ID 1850513408,1850514431,TH +1850514432,1850515455,CN 1850515456,1850519551,IN 1850519552,1850520575,AU 1850520576,1850521599,JP +1850521600,1850522623,CN 1850522624,1850523647,HK 1850523648,1850572799,CN 1850572800,1850671103,TH @@ -53675,6 +65086,7 @@ 1851591680,1851592703,ID 1851592704,1851594751,AU 1851594752,1851596799,KR +1851596800,1851604991,CN 1851604992,1851613183,PH 1851613184,1851617279,JP 1851617280,1851637759,KR @@ -53703,9 +65115,10 @@ 1856798720,1856815103,IN 1856815104,1856843775,CN 1856843776,1856847871,HK -1856856064,1856864255,CN +1856847872,1856864255,CN 1856864256,1856872447,AU 1856872448,1856876543,NZ +1856876544,1856880639,IN 1856880640,1856888831,CN 1856888832,1856892927,AU 1856892928,1856897023,JP @@ -53730,6 +65143,7 @@ 1860746240,1860747263,PK 1860747264,1860759551,JP 1860759552,1860761599,AU +1860761600,1860763647,IN 1860763648,1860829183,JP 1860829184,1860960255,IN 1860960256,1861091327,CN @@ -53740,6 +65154,7 @@ 1866563584,1866579967,KR 1866579968,1866588159,JP 1866588160,1866592255,NZ +1866592256,1866596351,VN 1866596352,1866661887,CN 1866661888,1866670079,AU 1866670080,1866674175,MY @@ -53799,10 +65214,13 @@ 1870045184,1870049279,AU 1870049280,1870053375,IN 1870053376,1870055423,AU +1870055424,1870057471,CN 1870057472,1870058495,AU 1870058496,1870059519,IN 1870059520,1870065663,AU +1870065664,1870069759,IN 1870069760,1870077951,JP +1870077952,1870086143,NP 1870086144,1870110719,CN 1870110720,1870118911,PK 1870118912,1870135295,IN @@ -53813,7 +65231,7 @@ 1870497792,1870499839,IN 1870499840,1870501887,JP 1870501888,1870503935,AF -1870503936,1870508031,AU +1870503936,1870512127,AU 1870512128,1870528511,IN 1870528512,1873281023,CN 1873281024,1873412095,JP @@ -53862,16 +65280,11 @@ 1877707776,1877709823,AU 1877709824,1877710847,IN 1877710848,1877711871,HK -1877712896,1877721087,CN +1877711872,1877721087,CN 1877721088,1877737471,TW 1877737472,1877999615,JP 1877999616,1879048191,TW -1879048192,1883218547,CN -1883218548,1883218551,ES -1883218552,1883218555,FR -1883218556,1883218579,CN -1883218580,1883218583,BE -1883218584,1883504639,CN +1879048192,1883504639,CN 1883504640,1883766783,JP 1883766784,1883770879,MN 1883770880,1883783167,KR @@ -53896,8 +65309,11 @@ 1885995008,1886191615,KR 1886191616,1886195711,PH 1886195712,1886197759,ID +1886197760,1886199807,JP 1886199808,1886207999,KR -1886208000,1886216191,NZ +1886208000,1886214143,NZ +1886214144,1886216191,VN +1886216192,1886224383,IN 1886224384,1886257151,CN 1886257152,1886322687,IN 1886322688,1886781439,CN @@ -53917,7 +65333,9 @@ 1887993856,1888026623,KR 1888026624,1888030719,BD 1888030720,1888034815,HK -1888034816,1888059391,JP +1888034816,1888038911,JP +1888038912,1888040959,CN +1888040960,1888059391,JP 1888059392,1888063487,VN 1888063488,1888067583,JP 1888067584,1888071679,MY @@ -53930,7 +65348,6 @@ 1888266240,1888268287,JP 1888268288,1888270335,AU 1888270336,1888271359,SG -1888271360,1888272383,TH 1888272384,1888288767,KR 1888288768,1888354303,AU 1888354304,1888485375,TH @@ -53945,6 +65362,7 @@ 1892155392,1892941823,PH 1892941824,1893015551,KR 1893015552,1893019647,AU +1893019648,1893023743,TW 1893023744,1893027839,HK 1893027840,1893031935,VN 1893031936,1893040127,HK @@ -53967,6 +65385,7 @@ 1896605696,1896606719,AU 1896606720,1896607743,MY 1896607744,1896609791,VU +1896609792,1896611839,SG 1896611840,1897070591,CN 1897070592,1897136127,IN 1897136128,1897140223,AU @@ -53976,6 +65395,7 @@ 1897143296,1897144319,ID 1897144320,1897152511,NC 1897152512,1897160703,FJ +1897160704,1897168895,VN 1897168896,1897169919,AU 1897169920,1897170943,HK 1897170944,1897172991,ID @@ -54002,6 +65422,7 @@ 1897365504,1897398271,MY 1897398272,1897660415,CN 1897660416,1897725951,HK +1897725952,1897758719,JP 1897758720,1897779199,KR 1897779200,1897781247,AU 1897781248,1897783295,JP @@ -54015,6 +65436,7 @@ 1897922560,1898708991,JP 1898708992,1899233279,CN 1899233280,1899237375,AU +1899237376,1899241471,JP 1899241472,1899249663,VN 1899249664,1899266047,MO 1899266048,1899267071,AU @@ -54027,10 +65449,12 @@ 1899274240,1899282431,CN 1899282432,1899290623,KR 1899290624,1899294719,AU +1899294720,1899298815,JP 1899298816,1899364351,TH 1899364352,1899724799,CN 1899724800,1899741183,KR 1899741184,1899749375,LK +1899749376,1899750399,CN 1899750400,1899751423,JP 1899751424,1899753471,ID 1899753472,1899757567,HK @@ -54052,20 +65476,26 @@ 1905262592,1906311167,JP 1906311168,1908408319,VN 1908408320,1908424703,AU +1908424704,1908441087,KR 1908441088,1908473855,JP 1908473856,1908539391,IN 1908539392,1908670463,CN 1908670464,1908735999,TW 1908736000,1908740095,AU -1908744192,1908748287,JP +1908740096,1908744191,JP +1908744192,1908746239,SG +1908746240,1908748287,JP 1908748288,1908750335,PK +1908750336,1908752383,JP 1908752384,1908753407,NZ 1908753408,1908754431,PF 1908754432,1908756479,PH 1908756480,1908760575,KR 1908760576,1908761599,NZ 1908761600,1908762623,CN -1908762624,1908763647,IN +1908762624,1908762879,IN +1908762880,1908763135,HK +1908763136,1908763647,IN 1908763648,1908764671,ID 1908764672,1908768767,AU 1908768768,1908801535,JP @@ -54090,6 +65520,7 @@ 1909760000,1909762047,ID 1909762048,1909764095,AU 1909764096,1909766143,PH +1909766144,1909768191,CN 1909768192,1909784575,HK 1909784576,1909817343,CN 1909817344,1909850111,JP @@ -54119,6 +65550,7 @@ 1914652672,1914654719,AU 1914654720,1914658815,JP 1914658816,1914660863,AU +1914660864,1914662911,JP 1914662912,1914667007,KR 1914667008,1914683391,IN 1914683392,1914687487,AU @@ -54139,6 +65571,7 @@ 1917190144,1917321215,KR 1917321216,1917779967,AU 1917779968,1917796351,ID +1917796352,1917812735,CN 1917812736,1917845503,IN 1917845504,1919680511,CN 1919680512,1919729663,KR @@ -54148,6 +65581,7 @@ 1919815680,1919817727,ID 1919817728,1919819775,KR 1919819776,1919821823,NZ +1919821824,1919823871,ID 1919823872,1919827967,JP 1919827968,1919844351,CN 1919844352,1919877119,KR @@ -54174,12 +65608,14 @@ 1921253376,1921318911,CN 1921318912,1921384447,MY 1921384448,1921388543,NZ +1921388544,1921392639,PG 1921392640,1921400831,JP 1921400832,1921404927,ID 1921404928,1921406975,HK 1921406976,1921409023,BD 1921409024,1921425407,JP -1921425408,1921433599,NZ +1921425408,1921431551,NZ +1921431552,1921433599,KH 1921433600,1921449983,JP 1921449984,1921515519,CN 1921515520,1921646591,TW @@ -54194,6 +65630,7 @@ 1921863680,1921865727,BD 1921865728,1921867775,ID 1921867776,1921871871,AU +1921871872,1921875967,NZ 1921875968,1921892351,CN 1921892352,1921896447,AU 1921896448,1921898495,SG @@ -54245,6 +65682,7 @@ 1932001280,1932132351,KR 1932132352,1932148735,AU 1932148736,1932152831,PK +1932152832,1932156927,TW 1932156928,1932161023,JP 1932161024,1932163071,TW 1932163072,1932165119,PH @@ -54283,6 +65721,7 @@ 1934966784,1934974975,ID 1934974976,1934983167,JP 1934983168,1934985215,AU +1934985216,1934987263,JP 1934987264,1934991359,TW 1934991360,1934999551,KR 1934999552,1935015935,CN @@ -54293,9 +65732,11 @@ 1935933440,1936457727,CN 1936457728,1937244159,IN 1937244160,1937506303,CN -1937506304,1937508351,AU +1937506304,1937510399,AU 1937510400,1937514495,CN 1937514496,1937516543,AU +1937516544,1937518591,IN +1937518592,1937522687,JP 1937522688,1937530879,ID 1937530880,1937532927,US 1937532928,1937534463,IN @@ -54305,7 +65746,7 @@ 1937539072,1937637375,JP 1937637376,1937670143,HK 1937670144,1937672191,NZ -1937674240,1937678335,JP +1937672192,1937678335,JP 1937678336,1937686527,NC 1937686528,1937702911,KR 1937702912,1937768447,BD @@ -54313,7 +65754,7 @@ 1938030592,1938292735,MY 1938292736,1938948095,KR 1938948096,1938964479,JP -1938964480,1938968575,AU +1938964480,1938972671,AU 1938972672,1938976767,MY 1938976768,1938978815,SG 1938978816,1938980863,VN @@ -54433,6 +65874,7 @@ 1950518784,1950519295,NL 1950519296,1950523391,IN 1950523392,1950527487,AU +1950527488,1950531583,JP 1950531584,1950533631,NP 1950533632,1950535679,ID 1950535680,1950539775,HK @@ -54472,6 +65914,7 @@ 1952030720,1952038911,KR 1952038912,1952047103,JP 1952047104,1952051199,NZ +1952051200,1952055295,JP 1952055296,1952071679,AU 1952071680,1952073727,HK 1952073728,1952074751,AU @@ -54491,6 +65934,7 @@ 1952186368,1952251903,HK 1952251904,1952284671,PH 1952284672,1952288767,NZ +1952288768,1952292863,JP 1952292864,1952317439,KR 1952317440,1952382975,JP 1952382976,1952448511,CN @@ -54511,18 +65955,22 @@ 1958830080,1958838271,JP 1958838272,1958842367,IN 1958842368,1958844415,NZ -1958844416,1958846463,HK +1958845440,1958845695,HK +1958845696,1958845951,MY +1958845952,1958846463,HK 1958846464,1958848511,IN 1958848512,1958850559,BD 1958850560,1958853631,AU 1958853632,1958854655,ID -1958854656,1958862847,AU +1958854656,1958860799,AU +1958860800,1958862847,BD 1958862848,1958871039,JP 1958871040,1959067647,CN 1959067648,1959100415,MY 1959100416,1959102463,ID 1959102464,1959104511,JP 1959104512,1959106559,AU +1959106560,1959108607,JP 1959108608,1959110655,NP 1959110656,1959112703,JP 1959112704,1959116799,HK @@ -54534,6 +65982,7 @@ 1959247872,1959251967,ID 1959251968,1959256063,NZ 1959256064,1959260159,AU +1959260160,1959264255,JP 1959264256,1959395327,KR 1959395328,1959526399,IN 1959526400,1959657471,CN @@ -54555,6 +66004,7 @@ 1960097792,1960099839,BD 1960099840,1960121343,AU 1960121344,1960122367,JP +1960122368,1960124415,ID 1960124416,1960128511,AU 1960128512,1960132607,ID 1960132608,1960181759,CN @@ -54580,6 +66030,7 @@ 1962622976,1962639359,CN 1962639360,1962658815,NZ 1962658816,1962659839,HK +1962659840,1962663935,SG 1962663936,1962672127,HK 1962672128,1962803199,CN 1962803200,1962827775,JP @@ -54601,6 +66052,7 @@ 1964126464,1964130303,SG 1964130304,1964134399,HK 1964134400,1964136447,NZ +1964136448,1964138495,JP 1964138496,1964146687,HK 1964146688,1964171263,JP 1964171264,1964173311,BD @@ -54615,6 +66067,7 @@ 1964261376,1964263423,AU 1964263424,1964265471,JP 1964265472,1964269567,KR +1964269568,1964273663,JP 1964273664,1964275711,KH 1964275712,1964277759,GU 1964277760,1964294143,SG @@ -54625,6 +66078,7 @@ 1966080000,1966342143,CN 1966342144,1966407679,KR 1966407680,1966417919,JP +1966417920,1966419967,IN 1966419968,1966424063,CN 1966424064,1966440447,KR 1966440448,1966444543,AU @@ -54675,6 +66129,7 @@ 1969707008,1969709055,MH 1969709056,1969713151,TW 1969713152,1969715199,AU +1969715200,1969717247,IN 1969717248,1969721343,CN 1969721344,1969725439,HK 1969725440,1969727487,JP @@ -54700,6 +66155,7 @@ 1970800640,1970804735,AU 1970804736,1970806783,KH 1970806784,1970808831,NZ +1970808832,1970810879,AU 1970810880,1970812927,JP 1970812928,1970814975,LK 1970814976,1970915327,CN @@ -54726,6 +66182,7 @@ 1984118784,1984131071,JP 1984131072,1984135167,CN 1984135168,1984151551,KR +1984151552,1984153599,NZ 1984153600,1984155647,KH 1984155648,1984159743,AU 1984159744,1984167935,IN @@ -54733,14 +66190,14 @@ 1984430080,1985085439,CN 1985085440,1985093631,ID 1985093632,1985097727,AU -1985101824,1985118207,JP +1985097728,1985118207,JP 1985118208,1985150975,NZ 1985150976,1985216511,JP 1985216512,1985347583,CN 1985347584,1985478655,JP 1985478656,1985480703,IN 1985480704,1985482751,PH -1985482752,1985484799,AU +1985482752,1985486847,AU 1985486848,1985609727,CN 1985609728,1985675263,NZ 1985675264,1985708031,KR @@ -54779,6 +66236,7 @@ 1986740224,1986756607,VN 1986756608,1986760703,PK 1986760704,1986762751,AU +1986762752,1986764799,JP 1986764800,1986768895,KR 1986768896,1986772991,AU 1986772992,1986789375,MY @@ -54806,7 +66264,8 @@ 1991245824,1991311359,KR 1991311360,1991376895,JP 1991376896,1991442431,CN -1991442432,1991507967,BD +1991442432,1991499775,BD +1991499776,1991507967,NC 1991507968,1993342975,CN 1993342976,1993605119,AU 1993605120,1993736191,CN @@ -54828,6 +66287,7 @@ 1996644352,1996652543,BT 1996652544,1997176831,CN 1997176832,1997180927,AU +1997180928,1997185023,HK 1997185024,1997187071,JP 1997187072,1997189119,HK 1997189120,1997191167,ID @@ -54837,9 +66297,11 @@ 1997275136,1997406207,AU 1997406208,1997471743,TW 1997471744,1997479935,NZ -1997488128,1997490175,AU +1997479936,1997488127,JP +1997488128,1997492223,AU 1997492224,1997496319,KH 1997496320,1997500415,AU +1997500416,1997504511,JP 1997504512,1997506559,ID 1997506560,1997508607,CN 1997508608,1997510655,JP @@ -54847,10 +66309,13 @@ 1997512704,1997520895,VN 1997520896,1997537279,TW 1997537280,1997602815,CN -1997602816,1997635583,KR -1997635584,1997643775,AU +1997602816,1997611007,KR +1997611008,1997619199,AU +1997619200,1997635583,KR +1997635584,1997651967,AU 1997651968,1997668351,VN -1997668352,1997684735,AU +1997668352,1997680639,AU +1997680640,1997684735,IN 1997684736,1997701119,KR 1997701120,1997705215,VN 1997705216,1997707263,BD @@ -54866,6 +66331,7 @@ 1998290944,1998299135,PH 1998299136,1998454783,CN 1998454784,1998456831,AU +1998456832,1998458879,JP 1998458880,1998462975,TW 1998462976,1998467071,BD 1998467072,1998471167,CN @@ -54878,6 +66344,7 @@ 1998565376,1998569471,TW 1998569472,1998577663,CN 1998577664,1998579711,AU +1998579712,1998581759,SG 1998581760,1998585855,KR 1998585856,1999130623,CN 1999130624,1999134719,BD @@ -54885,6 +66352,7 @@ 1999136768,1999138815,AU 1999138816,1999142911,MY 1999142912,1999249407,CN +1999249408,1999257599,PH 1999257600,1999276031,TH 1999276032,1999278079,CN 1999278080,1999280127,HK @@ -54910,6 +66378,7 @@ 2000373760,2000375807,HK 2000375808,2000377855,AF 2000377856,2000379903,JP +2000379904,2000388095,TH 2000388096,2000617471,CN 2000617472,2000621567,PH 2000621568,2000625663,JP @@ -54918,7 +66387,7 @@ 2000642048,2000646143,HK 2000646144,2000650239,JP 2000650240,2000654335,PK -2000658432,2000668671,JP +2000654336,2000668671,JP 2000668672,2000674815,AU 2000674816,2001207295,KR 2001207296,2001272831,JP @@ -54935,12 +66404,12 @@ 2001567744,2001600511,TW 2001600512,2001862655,CN 2001862656,2001864703,AU -2001866752,2001870847,JP +2001864704,2001870847,JP 2001870848,2001879039,KR 2001879040,2001895423,IN 2001895424,2001899519,VN 2001899520,2001901567,AU -2001903616,2001915903,JP +2001901568,2001915903,JP 2001915904,2001919999,BD 2001920000,2001926143,ID 2001926144,2001928191,KH @@ -54977,8 +66446,7 @@ 2007031808,2007035903,AU 2007035904,2007039999,TW 2007040000,2007048191,KR -2007048192,2007052287,AU -2007056384,2007064575,AU +2007048192,2007064575,AU 2007064576,2007066623,MY 2007066624,2007070719,JP 2007070720,2007072767,US @@ -54987,7 +66455,8 @@ 2008023040,2009071615,CN 2009071616,2011168767,KR 2011168768,2011205631,NZ -2011217920,2011234303,JP +2011205632,2011209727,AU +2011209728,2011234303,JP 2011234304,2011299839,AU 2011299840,2011430911,IN 2011430912,2011693055,JP @@ -54998,7 +66467,8 @@ 2011897856,2011899903,NZ 2011899904,2011901951,HK 2011901952,2011906047,IN -2011906048,2011922431,FJ +2011906048,2011916287,FJ +2011916288,2011922431,JP 2011922432,2011938815,CN 2011938816,2011942911,KR 2011942912,2011947007,ID @@ -55010,17 +66480,19 @@ 2012610560,2012741631,HK 2012741632,2013003775,CN 2013003776,2013011967,AU +2013011968,2013020159,JP 2013020160,2013028351,AU +2013028352,2013030399,CN 2013030400,2013032447,ID 2013032448,2013036543,FM 2013036544,2013038591,ID 2013038592,2013040639,HK 2013040640,2013044735,IN 2013044736,2013048831,ID -2013048832,2013050879,AU +2013048832,2013052927,AU 2013052928,2013061119,IN 2013061120,2013065215,PG -2013069312,2014314495,CN +2013065216,2014314495,CN 2014314496,2014838783,AU 2014838784,2015100927,CN 2015100928,2015166463,PH @@ -55039,13 +66511,13 @@ 2015223760,2015223807,CA 2015223808,2015225855,ID 2015225856,2015227903,IN -2015227904,2015229951,AU +2015227904,2015231999,AU 2015232000,2016542719,CN 2016542720,2016550911,BD 2016550912,2016555007,SG 2016555008,2016559103,MY 2016559104,2016583679,KR -2016583680,2016585727,JP +2016583680,2016587775,JP 2016587776,2016589823,BD 2016589824,2016591871,VN 2016591872,2016673791,JP @@ -55067,12 +66539,15 @@ 2019035136,2019037183,CN 2019037184,2019041279,JP 2019041280,2019045375,IN -2019049472,2019082239,AU +2019045376,2019049471,JP +2019049472,2019078143,AU +2019078144,2019082239,IN 2019082240,2019098623,HK 2019098624,2019115007,PH 2019115008,2019117055,US 2019117056,2019119103,IN 2019119104,2019121151,NZ +2019121152,2019123199,ID 2019123200,2019131391,NP 2019131392,2019164159,JP 2019164160,2019360767,CN @@ -55081,6 +66556,7 @@ 2019557376,2021654527,TW 2021654528,2022178815,CN 2022178816,2022180863,NZ +2022180864,2022182911,JP 2022182912,2022184959,ID 2022184960,2022187007,KH 2022187008,2022187071,US @@ -55131,7 +66607,7 @@ 2033362944,2033364991,TH 2033364992,2033369087,TW 2033369088,2033377279,AU -2033377280,2033385471,PH +2033377280,2033385471,KR 2033385472,2033451007,CN 2033451008,2033487871,ID 2033487872,2033491967,PK @@ -55159,12 +66635,7 @@ 2033889280,2033891327,JP 2033891328,2033893375,ID 2033893376,2033909759,PH -2033909760,2034213775,CN -2034213776,2034213779,FR -2034213780,2034213783,DE -2034213784,2034213787,CN -2034213788,2034213791,SL -2034213792,2034237439,CN +2033909760,2034237439,CN 2034237440,2034499583,KR 2034499584,2034761727,CN 2034761728,2035023871,NZ @@ -55484,6 +66955,7 @@ 2066882560,2066890751,TW 2066890752,2066907135,PF 2066907136,2066915327,AU +2066915328,2066923519,CN 2066923520,2066939903,JP 2066939904,2066972671,AU 2066972672,2067005439,TW @@ -55609,6 +67081,7 @@ 2080260096,2080268287,KR 2080268288,2080270335,AP 2080270336,2080272383,HK +2080272384,2080276479,AU 2080276480,2080309247,KR 2080309248,2080325631,NZ 2080325632,2080342015,HK @@ -55687,12 +67160,7 @@ 2087462912,2087464959,CN 2087464960,2087467007,KH 2087467008,2087469055,JP -2087469056,2087472639,AP -2087472640,2087473151,SG -2087473152,2087474175,HK -2087474176,2087475711,AP -2087475712,2087476223,JP -2087476224,2087477247,HK +2087469056,2087477247,HK 2087477248,2087478271,AU 2087478272,2087481343,AP 2087481344,2087485439,HK @@ -55747,7 +67215,7 @@ 2090745856,2090762239,MN 2090762240,2090778623,ID 2090778624,2090786815,HK -2090786816,2090795007,SG +2090786816,2090795007,MY 2090795008,2090860543,JP 2090860544,2091384831,CN 2091384832,2091646975,AU @@ -55951,7 +67419,8 @@ 2113830912,2113863679,CN 2113863680,2113929215,AU 2113929216,2130706431,JP -2147483648,2147942399,US +2147483648,2147549183,EU +2147549184,2147942399,US 2147942400,2148007935,DE 2148007936,2148220515,US 2148220516,2148220535,AU @@ -55964,7 +67433,30 @@ 2150105088,2150236159,GB 2150236160,2150301695,US 2150301696,2150367231,CA -2150367232,2151743487,US +2150367232,2150432767,US +2150432768,2150498303,IT +2150498304,2151743487,US +2151743488,2151759871,BY +2151759872,2151768063,US +2151768064,2151770111,GB +2151770112,2151772159,BA +2151772160,2151776255,IT +2151776256,2151778303,AT +2151778304,2151780351,RU +2151780352,2151782399,DE +2151782400,2151784447,ES +2151784448,2151792639,IR +2151792640,2151794687,CH +2151794688,2151796735,IT +2151796736,2151797759,NL +2151797760,2151797775,DE +2151797776,2151799807,NL +2151799808,2151800831,DE +2151800832,2151809023,PT +2151809024,2151940095,IT +2151940096,2152464383,RU +2152464384,2152595455,DK +2152595456,2152726527,FR 2152726528,2153119743,US 2153119744,2153250815,GB 2153250816,2153578495,US @@ -55973,12 +67465,53 @@ 2153906176,2153971711,GB 2153971712,2154037247,US 2154037248,2154102783,CA -2154102784,2156003327,US +2154102784,2155610111,US +2155610112,2155675647,UA +2155675648,2155806719,US +2155806720,2155808767,IT +2155808768,2155810815,RU +2155810816,2155812863,FR +2155812864,2155814911,GB +2155814912,2155819007,NL +2155819008,2155821055,DE +2155821056,2155823103,IT +2155823104,2155825151,DE +2155825152,2155827199,AE +2155827200,2155831295,PL +2155831296,2155833343,RU +2155833344,2155833855,SE +2155833856,2155834367,NL +2155834368,2155834623,RU +2155834624,2155834879,SE +2155834880,2155835391,NL +2155835392,2155839487,RO +2155839488,2155843583,FR +2155843584,2155845631,RU +2155845632,2155847679,DE +2155847680,2155849727,ES +2155849728,2155851775,TR +2155851776,2155853823,KZ +2155853824,2155855871,SE +2155855872,2155872255,RO +2155872256,2156003327,US 2156003328,2156134399,AT 2156134400,2156265471,US 2156265472,2156331007,KR 2156331008,2156593151,US 2156593152,2156658687,IL +2156658688,2156691455,IR +2156691456,2156695551,A2 +2156695552,2156697599,FR +2156697600,2156699647,CY +2156699648,2156703743,RU +2156703744,2156707839,BG +2156707840,2156709887,RU +2156709888,2156711935,ES +2156711936,2156713983,DE +2156713984,2156716031,NL +2156716032,2156718079,RO +2156718080,2156720127,IS +2156720128,2156724223,BY 2156724224,2156855295,CH 2156855296,2156920831,US 2156920832,2156986367,CA @@ -55992,11 +67525,23 @@ 2159869952,2159935487,CA 2159935488,2160525311,US 2160525312,2160590847,GB -2160590848,2161508351,US +2160590848,2160852991,US +2160852992,2160885759,RU +2160885760,2160893951,AT +2160893952,2160902143,RU +2160902144,2160902932,NL +2160902933,2160902933,RO +2160902934,2160906239,NL +2160906240,2160908287,FR +2160908288,2160910335,PL +2160910336,2160914431,NL +2160914432,2160918527,SA +2160918528,2161508351,US 2161508352,2161573887,FI 2161573888,2162687999,US 2162688000,2162753535,GB 2162753536,2162819071,CA +2162819072,2162884607,RO 2162884608,2163212287,US 2163212288,2163277823,GB 2163277824,2163288063,US @@ -56087,7 +67632,9 @@ 2178351104,2178416639,GB 2178416640,2178482175,US 2178482176,2178547711,DE -2178547712,2179465215,US +2178547712,2179379199,US +2179379200,2179399679,GB +2179399680,2179465215,US 2179530752,2179596287,DE 2179596288,2179661823,GB 2179661824,2179989503,US @@ -56098,12 +67645,32 @@ 2180579328,2180644863,JP 2180644864,2180907007,US 2180907008,2180972543,KR -2180972544,2181824511,US +2180972544,2181038079,US +2181038080,2181040127,GB +2181040128,2181042175,AZ +2181042176,2181044223,DE +2181044224,2181046271,AL +2181046272,2181054463,UA +2181054464,2181056511,AT +2181056512,2181058559,DE +2181058560,2181060607,GB +2181060608,2181062655,BA +2181062656,2181070847,FR +2181070848,2181087231,IT +2181087232,2181089279,FR +2181089280,2181091327,SE +2181091328,2181093375,IT +2181093376,2181095423,RU +2181095424,2181097471,GB +2181097472,2181099519,UA +2181099520,2181103615,SY +2181103616,2181824511,US 2181824512,2181890047,CA 2181890048,2182021119,US 2182021120,2182086655,CA 2182086656,2182610943,US 2182610944,2182676479,GB +2182676480,2182742015,IT 2182742016,2182873087,US 2182873088,2182938623,SE 2182938624,2183135231,US @@ -56112,7 +67679,11 @@ 2183266304,2183331839,JP 2183331840,2183462911,US 2183462912,2183528447,NL -2183528448,2184577023,US +2183528448,2183856127,US +2183856128,2183888895,GR +2183888896,2183905279,GB +2183905280,2183921663,HU +2183921664,2184577023,US 2184577024,2184642559,JP 2184642560,2184708095,US 2184708096,2184773631,AU @@ -56205,9 +67776,34 @@ 2191589376,2191654911,NL 2191654912,2192769023,US 2192769024,2192834559,CA +2192834560,2192867327,DE +2192867328,2192883711,SY +2192883712,2192885759,PL +2192885760,2192887807,GB +2192887808,2192891903,UA +2192891904,2192900095,RS 2192900096,2193031167,US 2193031168,2193096703,DE 2193096704,2193162239,US +2193162240,2193178623,UA +2193178624,2193180671,GB +2193180672,2193181695,IR +2193181696,2193182207,DE +2193182208,2193182719,IR +2193182720,2193184767,PT +2193184768,2193186815,ES +2193186816,2193188863,PL +2193188864,2193190911,DE +2193190912,2193195007,RU +2193195008,2193199103,DK +2193199104,2193201151,GB +2193201152,2193202175,SE +2193202176,2193203199,US +2193203200,2193205247,GB +2193205248,2193207295,FR +2193207296,2193209343,CZ +2193209344,2193211391,FR +2193211392,2193227775,BG 2193227776,2193293311,IT 2193293312,2193358847,US 2193358848,2193424383,FI @@ -56215,11 +67811,25 @@ 2193489920,2193555455,FR 2193555456,2193620991,US 2193620992,2193686527,IT +2193686528,2193688575,FR +2193688576,2193692671,CZ +2193692672,2193694719,FR +2193694720,2193704959,RU +2193704960,2193707007,IT +2193707008,2193711103,GB +2193711104,2193713151,DE +2193713152,2193715199,ES +2193715200,2193717247,DE +2193717248,2193719295,AM +2193719296,2193752063,IQ 2193752064,2193817599,AU 2193817600,2193883135,NZ 2193883136,2194014207,US 2194014208,2194079743,CH -2194079744,2194407423,US +2194079744,2194210815,US +2194210816,2194276351,GB +2194276352,2194407423,US +2194407424,2194472959,BG 2194472960,2194538495,US 2194538496,2194604031,ES 2194604032,2194669567,US @@ -56242,7 +67852,27 @@ 2197225472,2197422079,US 2197422080,2197487615,CA 2197487616,2197553151,IT -2197553152,2197815295,US +2197553152,2197749759,US +2197749760,2197751807,IQ +2197751808,2197753855,RU +2197753856,2197757951,GB +2197757952,2197766143,RU +2197766144,2197768191,PS +2197768192,2197770239,IL +2197770240,2197772287,RU +2197772288,2197774335,IQ +2197774336,2197776383,IT +2197776384,2197778431,DE +2197778432,2197780479,IT +2197780480,2197782527,DE +2197782528,2197786623,UA +2197786624,2197788671,IT +2197788672,2197790719,PL +2197790720,2197792767,SE +2197792768,2197794815,IT +2197794816,2197796863,SA +2197796864,2197798911,DE +2197798912,2197815295,IR 2197880832,2197946367,IT 2197946368,2204172287,US 2204172288,2204237823,SE @@ -56291,8 +67921,7 @@ 2208235520,2208301055,DE 2208301056,2208366591,FI 2208432128,2208563199,CA -2208563200,2208694271,DK -2208694272,2208759807,EU +2208563200,2208759807,DK 2208759808,2208890879,US 2208890880,2208956415,DE 2208956416,2209021951,AU @@ -56313,8 +67942,7 @@ 2210136064,2210201599,DE 2210201600,2210594815,US 2210594816,2210660351,CA -2210660352,2210725887,FR -2210725888,2211053567,US +2210660352,2211053567,US 2211053568,2211119103,CA 2211119104,2211184639,NZ 2211184640,2211250175,US @@ -56333,8 +67961,12 @@ 2212495360,2212560895,NL 2212560896,2212691967,US 2212691968,2212757503,GB -2212757504,2212811263,FI -2212811264,2212811519,US +2212757504,2212761599,FI +2212761600,2212762623,GB +2212762624,2212766719,FI +2212766720,2212767743,GB +2212767744,2212810751,FI +2212810752,2212811519,US 2212811520,2212823039,FI 2212823040,2212954111,US 2212954112,2213019647,GB @@ -56353,13 +67985,7 @@ 2214068224,2214133759,JP 2214133760,2214264831,US 2214264832,2214330367,GB -2214330368,2214396159,US -2214396160,2214396415,CA -2214396416,2214396671,US -2214396672,2214396927,CA -2214396928,2214397183,US -2214397184,2214397695,CA -2214397696,2214397951,US +2214330368,2214397951,US 2214397952,2214398207,CA 2214398208,2214398975,US 2214398976,2214400767,CA @@ -56423,11 +68049,35 @@ 2231173120,2231238655,US 2231238656,2231304191,MX 2231369728,2248146943,JP -2248146944,2248409087,DE +2248146944,2248148991,IT +2248148992,2248151039,ES +2248151040,2248153087,GB +2248153088,2248155135,DE +2248155136,2248163327,AL +2248163328,2248165375,GB +2248165376,2248167423,US +2248167424,2248169471,IE +2248169472,2248171519,NL +2248171520,2248177663,RU +2248177664,2248179711,DE +2248179712,2248212479,OM +2248212480,2248409087,DE 2248409088,2248605695,US 2248605696,2248671231,AU 2248671232,2249261055,US +2249261056,2249326591,BY 2249326592,2249392127,AU +2249392128,2249424895,DE +2249424896,2249426943,RU +2249426944,2249428991,SK +2249428992,2249433087,RU +2249433088,2249435135,GB +2249435136,2249437183,IT +2249437184,2249441279,NL +2249441280,2249443327,FR +2249443328,2249445375,TR +2249445376,2249449471,AZ +2249449472,2249457663,GE 2249457664,2249523199,US 2249523200,2249588735,CH 2249588736,2249654271,CA @@ -56464,7 +68114,8 @@ 2251948032,2252013567,BE 2252013568,2252079103,FR 2252079104,2252210175,DE -2252210176,2253062143,US +2252210176,2252931071,US +2252996608,2253062143,US 2253062144,2253127679,KR 2253127680,2253193215,DE 2253193216,2253455359,US @@ -56474,6 +68125,17 @@ 2253651968,2253848575,US 2253848576,2253914111,CA 2253914112,2254045183,US +2254045184,2254077951,GE +2254077952,2254079999,BA +2254080000,2254082047,FR +2254082048,2254084095,NO +2254084096,2254094335,RU +2254094336,2254096383,RO +2254096384,2254096895,GB +2254096896,2254098431,RO +2254098432,2254100479,RU +2254100480,2254102527,CH +2254102528,2254110719,IT 2254110720,2255421439,DE 2255421440,2255683583,US 2255683584,2255749119,AU @@ -56754,7 +68416,15 @@ 2264203264,2264268799,DE 2264268800,2264334335,FR 2264334336,2264399871,DE -2264399872,2265710591,US +2264399872,2264465407,US +2264465408,2264530943,UA +2264530944,2264858623,US +2264858624,2264891391,HU +2264891392,2264899583,RU +2264899584,2264905727,IT +2264905728,2264907775,ES +2264907776,2264924159,DE +2264924160,2265710591,US 2265710592,2265776127,CA 2265776128,2276786175,US 2276786176,2276851711,CA @@ -56777,6 +68447,8 @@ 2292383744,2292449279,SE 2292449280,2292514815,NO 2292514816,2292776959,US +2292776960,2292809727,LV +2292809728,2292842495,RU 2292842496,2292908031,GB 2292908032,2292973567,US 2292973568,2293039103,DE @@ -56819,7 +68491,8 @@ 2301820928,2302083071,US 2302083072,2302214143,NL 2302214144,2302279679,US -2302279680,2302541823,SE +2302279680,2302345215,SE +2302410752,2302541823,SE 2302541824,2302607359,CH 2302672896,2302935039,US 2302935040,2303000575,KR @@ -56835,7 +68508,7 @@ 2304573440,2304638975,NO 2304638976,2304704511,CA 2304704512,2304770047,US -2304770048,2304835583,SE +2304770048,2304835583,FI 2304835584,2305097727,US 2305097728,2305163263,GB 2305163264,2305359871,US @@ -56845,9 +68518,7 @@ 2305622016,2305687551,AU 2305687552,2305753087,US 2305753088,2305818623,AU -2305818624,2306146303,US -2306146304,2306211839,CA -2306211840,2306342911,US +2305818624,2306342911,US 2306342912,2306408447,NL 2306408448,2306473983,FR 2306473984,2306539519,CA @@ -57018,13 +68689,16 @@ 2330066944,2330132479,US 2330132480,2330198015,SE 2330198016,2330263551,CH -2330263552,2330394623,US +2330263552,2330267647,US +2330329088,2330394623,US 2330394624,2330460159,FR 2330460160,2330525695,AT 2330525696,2330591231,SE 2330591232,2330656767,US 2330656768,2330722303,NZ -2330722304,2331181055,US +2330722304,2331049983,US +2331049984,2331115519,GB +2331115520,2331181055,US 2331181056,2331246591,JP 2331246592,2331443199,DE 2331443200,2331508735,US @@ -57034,7 +68708,9 @@ 2331770880,2331836415,AU 2331836416,2331901951,GB 2331901952,2331967487,US -2332033024,2332622847,DE +2332033024,2332098559,ID +2332098560,2332622847,DE +2332622848,2332688383,CN 2332688384,2332753919,NL 2332753920,2333868031,DE 2333933568,2334064639,DE @@ -57053,7 +68729,7 @@ 2335899648,2335965183,AU 2335965184,2336161791,US 2336161792,2336227327,NL -2336227328,2336358399,US +2336292864,2336358399,US 2336358400,2336423935,FI 2336423936,2336882687,US 2336882688,2336948223,FI @@ -57091,6 +68767,7 @@ 2338455552,2338521087,NO 2338521088,2338586623,US 2338586624,2338652159,FR +2338652160,2338717695,JP 2338717696,2338783231,US 2338783232,2338848767,CA 2338848768,2338914303,US @@ -57101,6 +68778,7 @@ 2340159488,2340225023,FR 2340225024,2340421631,US 2340421632,2340487167,IT +2340487168,2340552703,CN 2340552704,2340618239,AU 2340618240,2340683775,US 2340683776,2340749311,AU @@ -57113,14 +68791,18 @@ 2341470208,2341535743,US 2341535744,2341601279,NO 2341601280,2341732351,US +2341732352,2341797887,CN 2341797888,2341863423,GB +2341863424,2341928959,KR 2341928960,2341994495,US 2341994496,2342060031,JP 2342060032,2342125567,GB 2342125568,2342191103,JP +2342191104,2342256639,CN 2342256640,2342322175,NL 2342322176,2342387711,FI 2342387712,2342453247,FR +2342453248,2342518783,CN 2342518784,2342584319,FR 2342584320,2342649855,US 2342649856,2342715391,NL @@ -57131,10 +68813,12 @@ 2342977536,2343043071,US 2343043072,2343108607,AU 2343108608,2343174143,US +2343174144,2343239679,CN 2343239680,2343370751,US 2343370752,2343436287,CA 2343436288,2343501823,DE 2343501824,2343567359,TW +2343567360,2343632895,CN 2343632896,2343698431,US 2343698432,2343763967,NL 2343763968,2343829503,TR @@ -57143,17 +68827,32 @@ 2343925760,2343934975,US 2343934976,2343935999,IL 2343936000,2344026111,US +2344026112,2344091647,CN 2344091648,2344157183,GB 2344157184,2344222719,US +2344222720,2344288255,CN 2344288256,2344353791,US 2344353792,2344419327,AU +2344419328,2344484863,CN +2344484864,2344550399,PK 2344550400,2344615935,EU +2344615936,2344878079,ID +2344878080,2346188799,CN +2346188800,2346450943,AU +2346450944,2346582015,CN 2346582016,2346647551,GB 2346647552,2346713087,TW +2346713088,2346778623,CN 2346778624,2346844159,US +2346844160,2346975231,CN +2346975232,2347040767,ID 2347040768,2347106303,US 2347106304,2347171839,AU -2347171840,2353856511,US +2347171840,2348744703,US +2348744704,2348875775,ID +2348875776,2353725439,US +2353725440,2353790975,CN +2353790976,2353856511,US 2353856512,2353922047,FR 2353922048,2353987583,AT 2353987584,2354053119,AU @@ -57163,7 +68862,7 @@ 2354249728,2354315263,AU 2354315264,2354380799,DE 2354380800,2354446335,NL -2354446336,2354511871,FR +2354446336,2354511871,SE 2354511872,2354577407,CA 2354577408,2354839551,US 2354839552,2354905087,TW @@ -57177,8 +68876,11 @@ 2355691520,2355757055,IT 2355757056,2355953663,US 2355953664,2357919743,TW -2357919744,2358509567,US +2357919744,2358181887,US +2358181888,2358247423,CN +2358247424,2358509567,US 2358509568,2358575103,MX +2358575104,2358640639,TH 2358640640,2358706175,SE 2358706176,2358771711,FI 2358771712,2359230463,US @@ -57204,9 +68906,19 @@ 2361982976,2362114047,US 2362114048,2362179583,IE 2362179584,2362245119,GB -2362441728,2363883519,US +2362245120,2362441727,CN +2362441728,2362572799,US +2362572800,2362638335,CN +2362638336,2362769407,US +2362769408,2362834943,ID +2362834944,2363490303,US +2363490304,2363555839,CN +2363555840,2363883519,US 2363883520,2363949055,CA -2363949056,2364538879,US +2363949056,2364342271,US +2364342272,2364407807,CN +2364407808,2364538879,US +2364538880,2364604415,CN 2364604416,2364671487,US 2364671488,2364671743,CN 2364671744,2364675839,US @@ -57214,10 +68926,50 @@ 2364676096,2364676863,US 2364676864,2364677119,GB 2364677120,2364735487,US -2364801024,2365390847,US +2364735488,2364801023,CN +2364801024,2364932095,US +2364932096,2364997631,CN +2364997632,2365128703,US +2365128704,2365259775,CN +2365259776,2365390847,US 2365390848,2365456383,AU 2365456384,2365521919,US -2365587456,2366308351,DE +2365521920,2365587455,CN +2365587456,2365589503,JO +2365589504,2365591551,US +2365591552,2365593599,DE +2365593600,2365595647,NL +2365595648,2365603839,GB +2365603840,2365624319,NO +2365624320,2365630463,GB +2365630464,2365632511,NL +2365632512,2365634559,RU +2365634560,2365636607,FR +2365636608,2365638655,GB +2365638656,2365640703,FR +2365640704,2365644799,GB +2365644800,2365652991,NO +2365652992,2366111743,DE +2366111744,2366144511,MT +2366144512,2366149375,RU +2366149376,2366149407,DE +2366149408,2366149423,PL +2366149424,2366149439,SK +2366149440,2366149455,PT +2366149456,2366149471,ES +2366149472,2366149487,FR +2366149488,2366149495,MD +2366149496,2366149503,LT +2366149504,2366149511,LV +2366149512,2366149519,EE +2366149520,2366149527,BG +2366149528,2366149535,RS +2366149536,2366162943,RU +2366162944,2366164991,AL +2366164992,2366167039,GE +2366167040,2366169087,GB +2366169088,2366171135,CH +2366171136,2366308351,DE 2366308352,2366373887,GB 2366373888,2367487999,DE 2367488000,2367553535,SI @@ -57234,9 +68986,58 @@ 2371944448,2372009983,GB 2372009984,2372075519,CH 2372075520,2372206591,DE +2372206592,2372214783,UA +2372214784,2372218879,DE +2372218880,2372220927,FR +2372220928,2372222975,KW +2372222976,2372239359,EU +2372239360,2372264447,RU +2372264448,2372266495,UA +2372266496,2372272127,RU 2372272128,2372337663,US 2372337664,2372403199,ID -2372403200,2372665343,US +2372403200,2372468735,US +2372468736,2372472831,NL +2372472832,2372474367,PL +2372474368,2372474623,US +2372474624,2372474879,GB +2372474880,2372483071,RU +2372483072,2372485119,JO +2372485120,2372485185,RU +2372485186,2372485246,NL +2372485247,2372485247,RU +2372485248,2372485375,IN +2372485376,2372485823,RU +2372485824,2372485887,NL +2372485888,2372487167,RU +2372487168,2372489215,FR +2372489216,2372493311,LB +2372493312,2372497407,ES +2372497408,2372499455,IE +2372499456,2372501503,NL +2372501504,2372505599,UA +2372505600,2372507647,NL +2372507648,2372509695,IT +2372509696,2372511743,AE +2372511744,2372511744,SI +2372511745,2372511998,BA +2372511999,2372512000,SI +2372512001,2372512254,BA +2372512255,2372512256,SI +2372512257,2372512510,BA +2372512511,2372512512,SI +2372512513,2372512766,BA +2372512767,2372512768,SI +2372512769,2372513022,BA +2372513023,2372513024,SI +2372513025,2372513278,BA +2372513279,2372513280,SI +2372513281,2372513534,BA +2372513535,2372513536,SI +2372513537,2372513790,BA +2372513791,2372513791,SI +2372513792,2372534271,GB +2372534272,2372665343,US 2372665344,2372730879,IT 2372730880,2372796415,CA 2372796416,2372993023,US @@ -57255,19 +69056,64 @@ 2374172672,2374238207,US 2374238208,2374303743,AU 2374303744,2374369279,US +2374369280,2374500351,BE +2374500352,2374502399,LV +2374502400,2374504447,MK +2374504448,2374508543,RO +2374508544,2374512639,LT +2374512640,2374514687,SK +2374514688,2374516735,ES +2374516736,2374524927,AM +2374524928,2374525183,DE +2374525184,2374529023,FR +2374529024,2374531071,RU +2374531072,2374533119,NL +2374533120,2374565887,HR 2374565888,2374631423,SE +2374631424,2374647807,HR +2374647808,2374651903,BE +2374651904,2374653951,IT +2374653952,2374655999,FR +2374656000,2374664191,UA +2374664192,2374666239,GB +2374666240,2374670335,NL +2374670336,2374672383,FR +2374672384,2374674431,PL +2374674432,2374676479,NL +2374676480,2374680575,LB +2374680576,2374684671,NL +2374684672,2374684991,GB +2374684992,2374685119,FI +2374685120,2374685247,GB +2374685248,2374685375,NO +2374685376,2374685503,GB +2374685504,2374685631,DK +2374685632,2374685759,GB +2374685760,2374685887,NL +2374685888,2374686015,GB +2374686016,2374686143,PL +2374686144,2374686271,GB +2374686272,2374686303,NL +2374686304,2374686719,GB +2374686720,2374688767,NL +2374688768,2374696959,GB 2374696960,2374959103,US -2374959104,2375024639,BE +2374959104,2375024639,SE 2375024640,2375090175,DK 2375090176,2375155711,NO -2375155712,2375221247,FI -2375221248,2375286783,SE -2375286784,2375352319,CH +2375155712,2375221247,US +2375221248,2375352319,SE 2375352320,2376269823,US 2376269824,2376335359,GB 2376335360,2376597503,US 2376597504,2376663039,AU 2376663040,2376728575,DE +2376728576,2376761343,GB +2376761344,2376777727,CZ +2376777728,2376781823,BA +2376781824,2376783871,ES +2376783872,2376785919,FR +2376785920,2376794111,UA 2376794112,2376859647,CH 2376859648,2376925183,FI 2376925184,2377056255,US @@ -57283,7 +69129,9 @@ 2378170368,2378235903,FI 2378235904,2378301439,US 2378301440,2378366975,FR -2378366976,2378694655,US +2378366976,2378432511,US +2378432512,2378498047,TR +2378498048,2378694655,US 2378694656,2378760191,DE 2378760192,2378825727,AT 2378825728,2378891263,US @@ -57299,7 +69147,9 @@ 2380595200,2380660735,JP 2380660736,2380726271,US 2380726272,2380791807,GB -2380791808,2381381631,US +2380791808,2381119487,US +2381119488,2381185023,GR +2381185024,2381381631,US 2381381632,2381447167,GB 2381447168,2381512703,US 2381512704,2381578239,AU @@ -57312,6 +69162,14 @@ 2382102528,2382168063,NL 2382168064,2382233599,BE 2382233600,2382299135,US +2382299136,2382331903,GR +2382331904,2382335999,FR +2382336000,2382340095,NL +2382340096,2382342143,CH +2382342144,2382344191,AT +2382344192,2382346239,NL +2382346240,2382348287,SE +2382348288,2382364671,SI 2382364672,2385430655,CA 2385430656,2385430687,US 2385430688,2385903615,CA @@ -57324,7 +69182,11 @@ 2386988288,2386988543,CH 2386988544,2386989055,CA 2386989056,2386989311,GB -2386989312,2387410943,CA +2386989312,2387003391,CA +2387003392,2387003647,GB +2387003648,2387003903,CA +2387003904,2387004159,GB +2387004160,2387410943,CA 2387410944,2387476479,US 2387476480,2387542015,CA 2387542016,2387607551,US @@ -57426,13 +69288,17 @@ 2415656960,2415722495,GB 2415722496,2415788031,JP 2415788032,2415853567,US +2415919104,2415984639,CN 2415984640,2416050175,JP 2416050176,2416115711,NL 2416115712,2416181247,US 2416181248,2416246783,FI 2416246784,2416312319,US 2416312320,2416377855,AU -2416443392,2416967679,US +2416377856,2416443391,CN +2416443392,2416705535,US +2416705536,2416771071,CN +2416771072,2416967679,US 2416967680,2417033215,IN 2417033216,2417229823,US 2417229824,2417295359,ES @@ -57450,6 +69316,7 @@ 2418737152,2418802687,NL 2418802688,2418868223,EU 2418868224,2419326975,US +2419326976,2419392511,CN 2419392512,2419458047,AU 2419458048,2419523583,NL 2419523584,2419589119,AU @@ -57489,6 +69356,7 @@ 2423783424,2423848959,FJ 2423848960,2423914495,US 2423914496,2423980031,TR +2423980032,2424045567,CN 2424045568,2424111103,GB 2424111104,2424242175,US 2424242176,2424307711,NO @@ -57499,9 +69367,7 @@ 2425487360,2426667007,US 2426667008,2426732543,NO 2426732544,2426798079,FR -2426798080,2426929151,US -2426929152,2426994687,GB -2426994688,2427256831,US +2426798080,2427207679,US 2427256832,2427322367,GB 2427322368,2427453439,US 2427453440,2427584511,NO @@ -57526,7 +69392,8 @@ 2430205952,2430271487,AU 2430271488,2432172031,US 2432172032,2432237567,BE -2432237568,2432696319,US +2432237568,2432630783,US +2432630784,2432696319,CN 2432696320,2433810431,NL 2433810432,2433875967,GB 2433875968,2436300799,NL @@ -57534,9 +69401,23 @@ 2436366336,2436759551,NL 2436759552,2436825087,GB 2436825088,2446983167,NL -2446983168,2447048703,EU +2446983168,2447015935,EU +2447015936,2447015939,DK +2447015940,2447015943,SE +2447015944,2447015947,GB +2447015948,2447048703,EU 2447048704,2447376383,NL -2447376384,2447441919,GB +2447376384,2447384632,GB +2447384633,2447384633,NL +2447384634,2447384634,FR +2447384635,2447384635,BE +2447384636,2447384636,DE +2447384637,2447413304,GB +2447413305,2447413305,NL +2447413306,2447413306,FR +2447413307,2447413307,BE +2447413308,2447413308,DE +2447413309,2447441919,GB 2447441920,2447507455,DE 2447507456,2447572991,FR 2447572992,2447638527,GB @@ -57570,6 +69451,29 @@ 2449145856,2449211391,SE 2449211392,2449276927,CH 2449276928,2449407999,DE +2449408000,2449420287,RU +2449420288,2449422335,DE +2449422336,2449424383,DK +2449424384,2449440767,OM +2449440768,2449442815,RO +2449442816,2449444863,RU +2449444864,2449448959,SK +2449448960,2449457151,KZ +2449457152,2449465343,BG +2449465344,2449467391,GB +2449467392,2449469439,RU +2449469440,2449471487,GB +2449471488,2449473535,RU +2449473536,2449477631,DE +2449477632,2449479679,AL +2449479680,2449481727,FR +2449481728,2449489919,RO +2449489920,2449491967,FR +2449491968,2449494015,NL +2449494016,2449496063,UA +2449496064,2449498111,FR +2449498112,2449506303,DE +2449506304,2449539071,RO 2449539072,2449604607,US 2449604608,2449670143,NO 2449670144,2449735679,LU @@ -57585,19 +69489,40 @@ 2452684800,2452750335,US 2452750336,2452815871,NL 2452815872,2452881407,JP -2452881408,2453143551,US +2452881408,2452946943,DE +2452946944,2453143551,US 2453143552,2453209087,JP 2453209088,2453340159,US 2453340160,2453405695,NO +2453405696,2453471231,DE 2453471232,2453536767,US 2453536768,2453602303,AU 2453602304,2453667839,US 2453667840,2453733375,ZA 2453733376,2453798911,US +2453798912,2453800959,GB +2453800960,2453803007,RU +2453803008,2453805055,KZ +2453805056,2453807103,FI +2453807104,2453815295,GB +2453815296,2453831679,RO +2453831680,2453831807,IR +2453831808,2453831871,IQ +2453831872,2453832959,IR +2453832960,2453833727,IQ +2453833728,2453835775,ES +2453835776,2453837823,DE +2453837824,2453838335,LU +2453838336,2453839871,EU +2453839872,2453852159,RU +2453852160,2453856255,RO +2453856256,2453858303,DE +2453858304,2453860351,SE +2453860352,2453864447,ES 2453864448,2453929983,CH 2453929984,2454061055,US 2454061056,2454126591,GB -2454126592,2454192127,US +2454159360,2454192127,US 2454192128,2454257663,NO 2454257664,2454388735,US 2454388736,2454454271,SE @@ -57616,7 +69541,9 @@ 2454913024,2454978559,CL 2454978560,2455175167,US 2455175168,2455240703,GB -2455240704,2455830527,US +2455240704,2455371775,US +2455371776,2455437311,GB +2455437312,2455830527,US 2455830528,2455896063,GB 2455896064,2456027135,US 2456027136,2456092671,IT @@ -57637,7 +69564,21 @@ 2457141248,2457206783,JP 2457206784,2457272319,AU 2457272320,2457337855,FI -2457337856,2457599999,US +2457337856,2457360383,RU +2457360384,2457361151,UA +2457361152,2457361407,CZ +2457361408,2457366527,RU +2457366528,2457367551,GB +2457367552,2457376767,CZ +2457376768,2457378815,DE +2457378816,2457380863,RU +2457380864,2457382911,EE +2457382912,2457383935,CZ +2457383936,2457385983,RU +2457385984,2457398271,CZ +2457398272,2457400319,UA +2457400320,2457403391,CZ +2457403392,2457599999,US 2457600000,2457665535,GR 2457665536,2458058751,US 2458058752,2458124287,CA @@ -57656,6 +69597,8 @@ 2458995520,2459631615,US 2459631616,2459697151,CL 2459697152,2459828223,US +2459828224,2459860991,RU +2459860992,2459893759,RO 2459893760,2459959295,CH 2459959296,2460024831,US 2460024832,2460090367,FI @@ -57675,7 +69618,31 @@ 2461204480,2461270015,GB 2461270016,2461401087,US 2461401088,2461466623,ZA -2461466624,2461794303,US +2461466624,2461597695,US +2461597696,2461599743,CH +2461599744,2461601791,SE +2461601792,2461605887,GB +2461605888,2461607935,LB +2461607936,2461609983,FR +2461609984,2461610095,BE +2461610096,2461610111,NL +2461610112,2461610495,BE +2461610496,2461611519,NL +2461611520,2461611575,BE +2461611576,2461611583,NL +2461611584,2461612031,BE +2461612032,2461614079,IL +2461614080,2461630463,TR +2461630464,2461651967,RU +2461651968,2461652991,CY +2461652992,2461659135,RU +2461659136,2461659391,UA +2461659392,2461659903,RU +2461659904,2461660159,UA +2461660160,2461660415,RU +2461660416,2461660671,RO +2461660672,2461663231,RU +2461663232,2461794303,US 2461794304,2461859839,GB 2461859840,2461990911,US 2461990912,2462056447,GB @@ -57686,6 +69653,7 @@ 2462384128,2463236095,US 2463236096,2463301631,AT 2463301632,2463367167,FI +2463367168,2463432703,SI 2463432704,2463498239,NO 2463498240,2463629311,US 2463629312,2463694847,CH @@ -57705,13 +69673,70 @@ 2464546816,2464743423,ZA 2464743424,2464808959,US 2464808960,2464874495,DE -2464874496,2465726463,US +2464874496,2465660927,US +2465660928,2465662975,RU +2465662976,2465665023,CH +2465665024,2465667071,IT +2465667072,2465669119,SI +2465669120,2465671167,RU +2465671168,2465673215,IR +2465673216,2465677311,GB +2465677312,2465679359,IT +2465679360,2465681407,NL +2465681408,2465683455,SE +2465683456,2465685503,FR +2465685504,2465690367,DE +2465690368,2465690431,US +2465690432,2465690623,IT +2465690624,2465690639,GB +2465690640,2465690879,IT +2465690880,2465690895,CH +2465690896,2465691135,IT +2465691136,2465691151,DE +2465691152,2465691391,IT +2465691392,2465691407,NL +2465691408,2465691647,IT +2465691648,2465691663,BR +2465691664,2465691903,IT +2465691904,2465691919,JP +2465691920,2465692159,IT +2465692160,2465692175,CN +2465692176,2465692415,IT +2465692416,2465692431,LT +2465692432,2465692671,IT +2465692672,2465692687,FR +2465692688,2465692927,IT +2465692928,2465692943,ID +2465692944,2465693183,IT +2465693184,2465693199,RU +2465693200,2465693439,IT +2465693440,2465693455,FR +2465693456,2465693695,IT +2465693696,2465726463,NO 2465726464,2465791999,CH 2465792000,2465857535,FR 2465857536,2465923071,US +2465923072,2465988607,SA 2465988608,2466054143,US 2466054144,2466119679,SE 2466119680,2466185215,DE +2466185216,2466189311,GB +2466189312,2466191359,ES +2466191360,2466193407,CZ +2466193408,2466199551,NL +2466199552,2466201599,AT +2466201600,2466209791,MK +2466209792,2466211839,ES +2466211840,2466213887,GB +2466213888,2466215935,CH +2466215936,2466217983,DE +2466217984,2466226175,BA +2466226176,2466228223,IT +2466228224,2466230271,FR +2466230272,2466232319,EE +2466232320,2466234367,ES +2466234368,2466242559,RU +2466242560,2466250751,GE 2466250752,2466643967,US 2466643968,2466709503,KR 2466709504,2466775039,HU @@ -57727,7 +69752,7 @@ 2468151296,2468189663,DK 2468189664,2468189695,GB 2468189696,2468216831,DK -2468216832,2468282367,EU +2468216832,2468282367,KZ 2468282368,2468347903,US 2468347904,2468478975,CZ 2468478976,2468937727,US @@ -57753,9 +69778,9 @@ 2471165952,2471231487,CH 2471231488,2471297023,AU 2471297024,2471362559,GB -2471362560,2471428095,EU 2471428096,2471690239,US 2471690240,2471821311,ES +2471821312,2471886847,US 2471886848,2472083455,CH 2472083456,2472148991,GB 2472148992,2472214527,US @@ -57915,26 +69940,123 @@ 2499477504,2499543039,DE 2499543040,2499674111,GB 2499674112,2499739647,US -2499805184,2503016447,US +2499805184,2499870719,TR +2499870720,2500001791,US +2500001792,2500034559,GE +2500034560,2500038655,GB +2500038656,2500040703,IT +2500040704,2500042751,LB +2500042752,2500046847,SA +2500046848,2500047359,IT +2500047360,2500047615,DE +2500047616,2500048895,IT +2500048896,2500050943,MD +2500050944,2500067327,KZ +2500067328,2501574655,US +2501574656,2501640191,KZ +2501640192,2503016447,US 2503016448,2503081983,IL 2503081984,2503671807,US 2503671808,2503737343,NL -2503737344,2506293247,US +2503737344,2503868415,US +2503868416,2503876607,RU +2503876608,2503880703,ES +2503880704,2503882751,RU +2503882752,2503884799,DE +2503884800,2503901183,SI +2503901184,2503905279,IT +2503905280,2503907327,CZ +2503907328,2503909375,FR +2503909376,2503911423,RU +2503911424,2503915519,ES +2503915520,2503917567,IT +2503917568,2503933951,BG +2503933952,2506293247,US 2506293248,2506358783,CA -2506358784,2508455935,US +2506358784,2508062719,US +2508062720,2508064767,CH +2508064768,2508066815,ES +2508066816,2508068863,RU +2508068864,2508070911,HU +2508070912,2508075007,ES +2508075008,2508077055,CH +2508077056,2508079103,BE +2508079104,2508081151,DE +2508081152,2508081407,GB +2508081408,2508083199,IL +2508083200,2508085247,IS +2508085248,2508087295,PS +2508087296,2508089343,RU +2508089344,2508091391,GB +2508091392,2508095487,AZ +2508095488,2508103679,SI +2508103680,2508105727,ES +2508105728,2508107775,RU +2508107776,2508109823,FI +2508109824,2508111871,DE +2508111872,2508128255,RU +2508128256,2508455935,US 2508455936,2508521471,IT 2508521472,2508587007,CH 2508587008,2508652543,BE 2508652544,2508718079,AU 2508718080,2508914687,US 2508914688,2508980223,IT -2508980224,2509242367,US +2508980224,2509045759,TR +2509045760,2509242367,US 2509242368,2509307903,AU 2509307904,2509373439,US 2509373440,2509438975,NL +2509438976,2509504511,KW 2509504512,2509570047,AT 2509570048,2509832191,US 2509832192,2509897727,IE +2509897728,2509914111,US +2509914112,2509916159,RU +2509916160,2509918207,DE +2509918208,2509920255,FR +2509920256,2509922303,IT +2509922304,2509924351,AT +2509924352,2509928447,RU +2509928448,2509930495,FI +2509930496,2509934591,RU +2509934592,2509936639,DE +2509936640,2509937681,AT +2509937682,2509937682,ME +2509937683,2509937683,IR +2509937684,2509937684,IQ +2509937685,2509937685,AQ +2509937686,2509937686,MP +2509937687,2509937687,BT +2509937688,2509937688,KP +2509937689,2509937689,KY +2509937690,2509937690,BS +2509937691,2509937691,CU +2509937692,2509937692,SO +2509937693,2509937693,SZ +2509937694,2509937694,NA +2509937695,2509937695,AM +2509937696,2509937697,CN +2509937698,2509937715,AT +2509937716,2509937719,KP +2509937720,2509937721,AG +2509937722,2509937723,VI +2509937724,2509937724,KI +2509937725,2509937725,VU +2509937726,2509937726,TK +2509937727,2509937729,IM +2509937730,2509937753,AT +2509937754,2509937761,SI +2509937762,2509937919,AT +2509937920,2509938175,IT +2509938176,2509938431,US +2509938432,2509938557,DE +2509938558,2509938558,FR +2509938559,2509938559,NL +2509938560,2509938560,FR +2509938561,2509938687,DE +2509938688,2509946879,UA +2509946880,2509963263,BE 2509963264,2510028799,GB 2510028800,2510094335,PL 2510094336,2510159871,IE @@ -57943,13 +70065,18 @@ 2510815232,2510946303,US 2510946304,2511011839,GB 2511011840,2511077375,AU -2511077376,2511339519,US +2511077376,2511142911,DE +2511142912,2511339519,US 2511339520,2511405055,AU 2511405056,2512715775,GB 2512715776,2512781311,FI 2512781312,2512912383,US -2512912384,2513502207,DE +2512912384,2512945151,HU +2512945152,2512977919,JO +2512977920,2513502207,DE 2513502208,2513567743,NO +2513567744,2513600511,GR +2513600512,2513633279,RO 2513633280,2513698815,DE 2513698816,2513764351,DK 2513764352,2514419711,DE @@ -57957,22 +70084,51 @@ 2514485248,2514514431,DE 2514514432,2514514687,NL 2514514688,2515599359,DE -2515599360,2515664895,EU -2515664896,2516254719,DE +2515599360,2515664895,GB +2515664896,2516058111,DE +2516123648,2516254719,DE 2516254720,2516320255,FR 2516320256,2516451327,US 2516451328,2516516863,GB -2516582400,2523201535,JP +2516516864,2516520959,RU +2516520960,2516523007,SA +2516523008,2516525055,RU +2516525056,2516526335,US +2516526336,2516526591,NL +2516526592,2516526719,US +2516526720,2516526847,NL +2516526848,2516527103,US +2516527104,2516529151,GB +2516529152,2516531199,CH +2516531200,2516533247,GB +2516533248,2516541439,CZ +2516541440,2516545535,GB +2516545536,2516547583,RU +2516547584,2516549631,GB +2516549632,2516551679,RU +2516551680,2516553727,FR +2516553728,2516557823,AZ +2516557824,2516559871,RU +2516559872,2516561919,GB +2516561920,2516563967,LI +2516563968,2516566015,GB +2516566016,2516582399,IQ +2516582400,2516647935,CN +2516647936,2523201535,JP 2523201536,2523267071,AU 2523267072,2523529215,US 2523529216,2523594751,NO -2523594752,2523660287,AT -2523660288,2524971007,US +2523660288,2524119039,US +2524119040,2524184575,CN +2524184576,2524315647,TW +2524315648,2524512255,US +2524512256,2524643327,CN +2524643328,2524971007,US 2524971008,2525036543,ES -2525036544,2525102079,EU 2525102080,2525233151,US 2525233152,2525298687,SE 2525298688,2525626367,US +2525626368,2525757439,CN 2525757440,2525822975,GR 2525822976,2526085119,US 2526085120,2526216191,IT @@ -58008,22 +70164,24 @@ 2530607104,2530672639,ES 2530672640,2530803711,US 2530803712,2530869247,IT -2530869248,2531459071,US +2530869248,2531196927,US +2531196928,2531262463,CN +2531262464,2531459071,US 2531459072,2531524607,SE 2531524608,2531590143,US 2531590144,2531655679,AU -2531655680,2532048895,US +2531721216,2532048895,US 2532048896,2532114431,SE 2532114432,2532179967,GB 2532179968,2532376575,US 2532376576,2532442111,ES -2532442112,2532507647,FR 2532507648,2532573183,US 2532573184,2532638719,ES 2532638720,2533031935,US 2533031936,2533097471,BE 2533097472,2533228543,US 2533228544,2533294079,PL +2533294080,2533359615,CN 2533359616,2539978751,IT 2539978752,2540240895,US 2540240896,2540306431,FI @@ -58084,7 +70242,6 @@ 2555641856,2555707391,BR 2555707392,2555903999,US 2555904000,2555969535,CH -2555969536,2556035071,FR 2556035072,2556100607,NO 2556100608,2556166143,AU 2556166144,2556231679,BR @@ -58095,7 +70252,9 @@ 2556559360,2556624895,AU 2556624896,2556690431,KR 2556690432,2556755967,US -2556755968,2557018111,HK +2556755968,2556821503,HK +2556821504,2556887039,SG +2556887040,2557018111,HK 2557018112,2557083647,GB 2557083648,2557542399,ZA 2557542400,2557607935,US @@ -58123,8 +70282,10 @@ 2561671168,2564947967,US 2564947968,2565013503,SG 2565013504,2565210111,US +2566914048,2566979583,CN 2566979584,2567045119,FI 2567045120,2567110655,US +2567110656,2567176191,CN 2567176192,2567241727,US 2567241728,2567307263,SI 2567307264,2567897087,US @@ -58134,12 +70295,11 @@ 2568093696,2568159231,US 2568159232,2568224767,PL 2568224768,2568290303,SG -2568290304,2569601023,US -2569601024,2569666559,CA -2569666560,2569797631,US +2568290304,2569142271,US +2569142272,2569404415,CN +2569404416,2569797631,US 2569797632,2569863167,NO -2569863168,2569928703,US -2569928704,2569994239,CH +2569863168,2569994239,CH 2569994240,2570125311,US 2570125312,2570190847,BE 2570190848,2572681215,US @@ -58150,7 +70310,10 @@ 2572944896,2572945919,EU 2572945920,2572946175,DE 2572946176,2573008895,EU -2573008896,2573533183,DE +2573008896,2573402111,DE +2573402112,2573467647,CN +2573467648,2573533183,DE +2573533184,2573598719,CN 2573598720,2573926399,US 2573926400,2573991935,AU 2573991936,2574123007,CH @@ -58160,14 +70323,18 @@ 2574315008,2574315263,NO 2574315264,2574319615,SE 2574319616,2574647295,US -2583691264,2584215551,US +2574647296,2574778367,CN +2574778368,2583691263,JP +2583691264,2584018943,US +2584018944,2584084479,CA +2584084480,2584215551,US 2584215552,2584281087,GB 2584281088,2584346623,US 2584346624,2584412159,KR 2584412160,2584477695,CA 2584477696,2584608767,US -2584608768,2584805375,CH -2584805376,2585001983,US +2584608768,2584739839,CH +2584739840,2585001983,US 2585001984,2585067519,CA 2585067520,2585788415,US 2585788416,2585853951,GB @@ -58305,9 +70472,7 @@ 2621636608,2621702143,DE 2621702144,2621767679,US 2621767680,2621833215,NZ -2621833216,2622423039,US -2622423040,2622488575,CA -2622488576,2622685183,US +2621833216,2622685183,US 2622685184,2622750719,NL 2622750720,2623602687,US 2623602688,2623668223,CL @@ -58329,7 +70494,10 @@ 2627010560,2627076095,NZ 2627076096,2627141631,NL 2627141632,2627469311,US -2634022912,2635399167,JP +2634022912,2634088447,CN +2634088448,2635202559,JP +2635202560,2635268095,CN +2635268096,2635399167,JP 2635399168,2635530239,US 2635530240,2635595775,FR 2635595776,2635661311,FI @@ -58339,6 +70507,7 @@ 2635988992,2636120063,US 2636120064,2637561855,ID 2637561856,2638020607,US +2638020608,2638086143,CN 2638086144,2638151679,US 2638151680,2639462399,JP 2639462400,2639593471,GB @@ -58358,6 +70527,7 @@ 2640576512,2640642047,EC 2640642048,2641952767,JP 2641952768,2642018303,US +2642018304,2642083839,CN 2642083840,2642149375,US 2642149376,2642214911,FI 2642214912,2642280447,SE @@ -58373,8 +70543,11 @@ 2643197952,2643263487,GB 2643263488,2643460095,US 2643460096,2643525631,FI -2643525632,2644180991,US +2643525632,2643722239,US +2643722240,2643787775,CN +2643787776,2644180991,US 2644180992,2644246527,AU +2644246528,2644312063,CN 2644312064,2644377599,IS 2644377600,2644443135,PL 2644443136,2644508671,FR @@ -58429,6 +70602,7 @@ 2650406912,2650603519,US 2650603520,2650669055,CO 2650669056,2650734591,US +2650734592,2650800127,CN 2650800128,2653159423,US 2653159424,2653421567,NO 2653421568,2653487103,AU @@ -58437,19 +70611,33 @@ 2653618176,2653683711,GB 2653683712,2653749247,KR 2653749248,2653814783,AU +2653814784,2653880319,RU 2653880320,2653945855,IT 2653945856,2654011391,US 2654011392,2654076927,ES -2654076928,2654142463,FR -2654142464,2654207999,CA +2654076928,2654085119,FR +2654085120,2654089215,HK +2654089216,2654093311,FR +2654093312,2654097407,US +2654097408,2654142463,FR 2654208000,2654339071,US 2654339072,2654404607,AU -2654404608,2654994431,US +2654404608,2654601215,US +2654601216,2654633983,DE +2654633984,2654636031,RU +2654636032,2654638079,IT +2654638080,2654640127,DE +2654640128,2654642175,NO +2654642176,2654644223,GB +2654644224,2654646271,IT +2654646272,2654648319,FR +2654648320,2654650367,IR +2654650368,2654666751,BG +2654666752,2654994431,US 2654994432,2655059967,LU 2655059968,2655125503,US -2655125504,2655185151,EU -2655185152,2655186944,PL -2655186945,2655256575,EU +2655125504,2655191039,PL +2655191040,2655256575,EU 2655256576,2655715327,US 2655715328,2655780863,PL 2655780864,2656632831,US @@ -58491,6 +70679,7 @@ 2660171776,2660237311,GB 2660237312,2660302847,IN 2660302848,2660499455,US +2660499456,2660564991,IT 2660564992,2660696063,NO 2660696064,2660761599,US 2660761600,2660827135,GB @@ -58508,6 +70697,13 @@ 2662072320,2662137855,ES 2662137856,2662203391,SE 2662203392,2662662143,GB +2662662144,2662670335,KG +2662670336,2662674431,AZ +2662674432,2662676479,DE +2662676480,2662678527,GB +2662678528,2662686719,DE +2662686720,2662694911,CH +2662694912,2662727679,KG 2662727680,2662793215,HK 2662793216,2663251967,US 2663251968,2663448575,FR @@ -58539,7 +70735,27 @@ 2667118592,2667184127,HU 2667184128,2667249663,RU 2667249664,2667315199,CL -2667315200,2667970559,US +2667315200,2667511807,US +2667511808,2667513855,RU +2667513856,2667515903,GB +2667515904,2667522047,CZ +2667522048,2667524095,GB +2667524096,2667526143,RU +2667526144,2667528191,LV +2667528192,2667532287,FR +2667532288,2667534335,RU +2667534336,2667536383,PL +2667536384,2667544575,AT +2667544576,2667560959,RU +2667560960,2667565055,IT +2667565056,2667567103,AT +2667567104,2667569151,SE +2667569152,2667571199,GB +2667571200,2667573247,ES +2667573248,2667575295,IT +2667575296,2667577343,SK +2667577344,2667642879,SA +2667642880,2667970559,US 2667970560,2668036095,CA 2668036096,2668101631,SE 2668101632,2668167167,CH @@ -58552,6 +70768,15 @@ 2668691456,2668756991,US 2668756992,2668822527,CA 2668822528,2668888063,US +2668888064,2668890111,DK +2668890112,2668892159,FR +2668892160,2668894207,BA +2668894208,2668896255,MT +2668896256,2668904447,GB +2668904448,2668912639,TR +2668912640,2668916735,IR +2668918784,2668920831,ES +2668920832,2668953599,IT 2668953600,2669019135,US 2669019136,2669084671,CH 2669084672,2669150207,ES @@ -58577,7 +70802,9 @@ 2671378432,2671443967,NO 2671443968,2671509503,US 2671509504,2671575039,NL -2671575040,2672295935,US +2671575040,2671749119,US +2671749120,2671750143,CA +2671750144,2672295935,US 2672295936,2672361471,SE 2672361472,2672427007,AU 2672427008,2672820223,US @@ -58586,6 +70813,7 @@ 2672951296,2673082367,US 2673082368,2673147903,FR 2673147904,2673213439,US +2673213440,2673278975,GB 2673278976,2673410047,US 2673410048,2673475583,CA 2673475584,2673541119,VE @@ -58620,6 +70848,8 @@ 2676424704,2677014527,US 2677014528,2677080063,CH 2677080064,2677145599,US +2677145600,2677178367,TR +2677178368,2677211135,UA 2677211136,2677276671,GB 2677276672,2677342207,LV 2677342208,2677407743,IT @@ -58632,6 +70862,7 @@ 2677800960,2677866495,CH 2677866496,2677997567,US 2677997568,2678063103,CA +2678063104,2678128639,UA 2678128640,2678194175,US 2678194176,2678259711,NO 2678259712,2678521855,US @@ -58640,7 +70871,12 @@ 2678652928,2678718463,US 2678718464,2678783999,GB 2678784000,2678849535,NO -2678849536,2678915071,US +2678849536,2678885375,US +2678885376,2678885631,GB +2678885632,2678885887,DE +2678885888,2678886143,US +2678886144,2678886399,NL +2678886400,2678915071,US 2678915072,2678980607,FR 2678980608,2679046143,US 2679046144,2679111679,CA @@ -58659,6 +70895,7 @@ 2680553472,2680684543,US 2680684544,2680750079,SE 2680750080,2681012223,US +2681012224,2681077759,PL 2681077760,2681143295,CA 2681143296,2681208831,AU 2681208832,2681274367,CA @@ -58673,6 +70910,7 @@ 2681864192,2681929727,US 2681929728,2681995263,GB 2681995264,2682257407,US +2682257408,2682322943,UA 2682322944,2682388479,US 2682388480,2682454015,CN 2682454016,2682519551,US @@ -58697,7 +70935,305 @@ 2683699200,2683830271,US 2683830272,2683895807,AU 2683895808,2684157951,US +2684157952,2684159999,NL +2684160000,2684162047,NO +2684162048,2684164095,EE +2684164096,2684166143,SE +2684166144,2684170239,TR +2684170240,2684178431,GB +2684178432,2684180479,TR +2684180480,2684182527,DK +2684182528,2684184575,IT +2684184576,2684186623,SK +2684186624,2684188671,DE +2684188672,2684190719,RU +2684190720,2684191231,NL +2684191232,2684191239,HR +2684191240,2684191247,IT +2684191248,2684191259,AU +2684191260,2684191263,US +2684191264,2684191271,GB +2684191272,2684191279,US +2684191280,2684191287,GB +2684191288,2684191295,EG +2684191296,2684191303,HR +2684191304,2684191307,EG +2684191308,2684191311,NL +2684191312,2684191319,US +2684191320,2684191327,CA +2684191328,2684191335,BR +2684191336,2684191343,MA +2684191344,2684191351,HR +2684191352,2684191359,CN +2684191360,2684191367,SG +2684191368,2684191375,PH +2684191376,2684191383,AU +2684191384,2684191391,CN +2684191392,2684191399,NO +2684191400,2684191423,US +2684191424,2684191439,AU +2684191440,2684191455,CN +2684191456,2684191615,US +2684191616,2684191767,NL +2684191768,2684191879,US +2684191880,2684191887,LT +2684191888,2684191899,IT +2684191900,2684191919,US +2684191920,2684191927,TR +2684191928,2684191967,US +2684191968,2684191975,NL +2684191976,2684191999,US +2684192000,2684192007,ES +2684192008,2684192015,AE +2684192016,2684192031,CN +2684192032,2684192039,US +2684192040,2684192047,AL +2684192048,2684192055,NL +2684192056,2684192063,IN +2684192064,2684192071,AL +2684192072,2684192079,US +2684192080,2684192087,IN +2684192088,2684192095,SG +2684192096,2684192103,CY +2684192104,2684192107,GB +2684192108,2684192109,CA +2684192110,2684192111,TR +2684192112,2684192119,CH +2684192120,2684192127,DO +2684192128,2684192191,AE +2684192192,2684192215,US +2684192216,2684192223,CA +2684192224,2684192239,US +2684192240,2684192247,IN +2684192248,2684192279,US +2684192280,2684192287,RU +2684192288,2684192295,DK +2684192296,2684192303,US +2684192304,2684192319,NL +2684192320,2684192327,US +2684192328,2684192335,AE +2684192336,2684192343,US +2684192344,2684192347,AE +2684192348,2684192351,SA +2684192352,2684192359,AE +2684192360,2684192371,US +2684192372,2684192375,GB +2684192376,2684192383,BM +2684192384,2684192387,CA +2684192388,2684192399,US +2684192400,2684192407,AU +2684192408,2684192415,US +2684192416,2684192423,CA +2684192424,2684192427,CH +2684192428,2684192431,NL +2684192432,2684192439,BR +2684192440,2684192447,NL +2684192448,2684192459,TR +2684192460,2684192463,CN +2684192464,2684192471,US +2684192472,2684192479,CN +2684192480,2684192495,US +2684192496,2684192503,GB +2684192504,2684192507,HR +2684192508,2684192509,CA +2684192510,2684192510,BH +2684192511,2684192511,RU +2684192512,2684192575,US +2684192576,2684192639,NL +2684192640,2684192655,GR +2684192656,2684192663,GB +2684192664,2684192667,AE +2684192668,2684192671,RU +2684192672,2684192687,US +2684192688,2684192695,NL +2684192696,2684192703,IT +2684192704,2684192711,BE +2684192712,2684192715,PH +2684192716,2684192719,CA +2684192720,2684192727,NL +2684192728,2684192731,BE +2684192732,2684192767,US +2684192768,2684192775,TR +2684192776,2684192799,US +2684192800,2684192807,GB +2684192808,2684192823,PL +2684192824,2684192831,CA +2684192832,2684192839,NO +2684192840,2684192863,US +2684192864,2684192871,NL +2684192872,2684192879,CN +2684192880,2684192883,TR +2684192884,2684192887,PL +2684192888,2684192895,US +2684192896,2684192927,LT +2684192928,2684192939,ES +2684192940,2684192951,US +2684192952,2684192959,ES +2684192960,2684192971,PL +2684192972,2684192975,ES +2684192976,2684192983,SA +2684192984,2684192991,TR +2684192992,2684192999,BR +2684193000,2684193007,SA +2684193008,2684193015,GB +2684193016,2684193019,CN +2684193020,2684193020,BH +2684193021,2684193023,NL +2684193024,2684193031,TR +2684193032,2684193039,GR +2684193040,2684193063,BR +2684193064,2684193071,US +2684193072,2684193079,EG +2684193080,2684193087,HR +2684193088,2684193119,GB +2684193120,2684193127,CN +2684193128,2684193147,US +2684193148,2684193151,GR +2684193152,2684193159,NZ +2684193160,2684193167,SA +2684193168,2684193175,US +2684193176,2684193183,NL +2684193184,2684193195,TR +2684193196,2684193199,CN +2684193200,2684193215,BE +2684193216,2684193223,US +2684193224,2684193231,BR +2684193232,2684193239,US +2684193240,2684193247,BR +2684193248,2684193255,ES +2684193256,2684193263,US +2684193264,2684193271,NO +2684193272,2684193279,CZ +2684193280,2684193295,US +2684193296,2684193311,CN +2684193312,2684193383,US +2684193384,2684193391,CN +2684193392,2684193399,JO +2684193400,2684193407,PL +2684193408,2684193439,SA +2684193440,2684193447,US +2684193448,2684193455,GB +2684193456,2684193467,US +2684193468,2684193471,AE +2684193472,2684193479,MX +2684193480,2684193487,IN +2684193488,2684193519,US +2684193520,2684193527,IN +2684193528,2684193535,GB +2684193536,2684193543,IN +2684193544,2684193551,AU +2684193552,2684193559,SA +2684193560,2684193567,CN +2684193568,2684193575,TR +2684193576,2684193583,CN +2684193584,2684193591,RU +2684193592,2684193599,ES +2684193600,2684193607,IN +2684193608,2684193615,CN +2684193616,2684193623,IN +2684193624,2684193631,GR +2684193632,2684193647,IN +2684193648,2684193655,AU +2684193656,2684193659,CN +2684193660,2684193663,US +2684193664,2684193671,CH +2684193672,2684193675,US +2684193676,2684193679,TR +2684193680,2684193687,DE +2684193688,2684193691,US +2684193692,2684193695,GR +2684193696,2684193711,GB +2684193712,2684193719,TR +2684193720,2684193727,CN +2684193728,2684193759,US +2684193760,2684193767,ES +2684193768,2684193775,AR +2684193776,2684193787,US +2684193788,2684193791,NL +2684193792,2684193799,AE +2684193800,2684193807,FR +2684193808,2684193815,AU +2684193816,2684193823,GB +2684193824,2684193831,ES +2684193832,2684193855,US +2684193856,2684193871,GB +2684193872,2684193911,US +2684193912,2684193919,AT +2684193920,2684193927,US +2684193928,2684193931,AT +2684193932,2684193935,GB +2684193936,2684193951,US +2684193952,2684193959,IN +2684193960,2684193963,CN +2684193964,2684193975,GB +2684193976,2684193983,RU +2684193984,2684194039,US +2684194040,2684194047,MT +2684194048,2684194055,GB +2684194056,2684194087,US +2684194088,2684194095,GR +2684194096,2684194103,MX +2684194104,2684194119,US +2684194120,2684194127,BG +2684194128,2684194135,GB +2684194136,2684194143,MX +2684194144,2684194151,US +2684194152,2684194159,EG +2684194160,2684194167,US +2684194168,2684194171,PA +2684194172,2684194175,IL +2684194176,2684194207,NL +2684194208,2684194239,US +2684194240,2684194271,NL +2684194272,2684194279,GB +2684194280,2684194287,BZ +2684194288,2684194295,PA +2684194296,2684194303,CA +2684194304,2684194311,SE +2684194312,2684194319,IL +2684194320,2684194327,NL +2684194328,2684194331,AZ +2684194332,2684194335,NL +2684194336,2684194343,AZ +2684194344,2684194347,IL +2684194348,2684194351,NL +2684194352,2684194359,US +2684194360,2684197119,NL +2684197120,2684197631,GB +2684197632,2684198399,NL +2684198400,2684200959,GB +2684200960,2684203007,RU +2684203008,2684204031,CZ +2684204032,2684204543,HK +2684204544,2684205055,GB +2684205056,2684207103,IT +2684207104,2684213247,GB +2684213248,2684215295,MK +2684215296,2684217343,BE +2684217344,2684219391,CZ +2684219392,2684221439,PL +2684221440,2684223487,IL 2684223488,2684289023,GB +2684289024,2684297215,RU +2684297216,2684299263,IR +2684299264,2684301311,CY +2684301312,2684305407,PT +2684305408,2684321791,RU +2684321792,2684329983,IT +2684329984,2684332031,IQ +2684332032,2684334079,DE +2684334080,2684338175,PL +2684338176,2684338303,NL +2684338304,2684338399,ES +2684338400,2684338687,NL +2684338688,2684339103,ES +2684339104,2684339119,NL +2684339120,2684339135,ES +2684339136,2684339199,NL +2684339200,2684340223,ES +2684340224,2684344319,GB +2684344320,2684346367,NL +2684346368,2684354559,FI 2684354560,2684616703,US 2684616704,2684682239,NZ 2684682240,2684747775,GB @@ -58712,7 +71248,12 @@ 2686910464,2686975999,US 2686976000,2687041535,GR 2687041536,2687238143,US -2687238144,2687299119,DE +2687238144,2687297231,DE +2687297232,2687297239,GB +2687297240,2687297247,SE +2687297248,2687297824,DE +2687297825,2687297828,FR +2687297829,2687299119,DE 2687299120,2687299127,US 2687299128,2687299135,CN 2687299136,2687762431,DE @@ -58864,7 +71405,8 @@ 2706960384,2706964479,US 2706964480,2707226623,NL 2707226624,2707488767,JP -2707488768,2707947519,US +2707488768,2707619839,US +2707619840,2707947519,GB 2707947520,2708144127,FR 2708144128,2708340735,US 2708340736,2708406271,AT @@ -58876,7 +71418,6 @@ 2708865024,2708930559,JP 2708930560,2709127167,US 2709127168,2709192703,KR -2709192704,2709258239,EU 2709258240,2709389311,US 2709389312,2709454847,SG 2709454848,2709716991,US @@ -58955,6 +71496,7 @@ 2727018496,2727084031,CA 2727084032,2727346175,US 2727346176,2727608319,AU +2734686208,2734751743,CN 2734751744,2734817279,GB 2734817280,2734882815,US 2734882816,2734948351,SE @@ -58980,10 +71522,13 @@ 2742681600,2742747135,IN 2742747136,2742779903,CA 2742812672,2742878207,US +2742878208,2742943743,CN 2742943744,2743009279,US 2743009280,2743140351,AU 2743140352,2743205887,US -2743205888,2744516607,JP +2743205888,2743992319,JP +2743992320,2744057855,CN +2744057856,2744516607,JP 2744516608,2744647679,US 2744647680,2744713215,KR 2744713216,2744844287,US @@ -59006,15 +71551,24 @@ 2746089472,2746155007,NO 2746155008,2746220543,NL 2746220544,2746286079,US +2746286080,2746351615,CN 2746351616,2746417151,CR +2746417152,2746482687,CN 2746482688,2746548223,KR 2746548224,2747072511,US 2747072512,2747138047,AU 2747138048,2747465727,US 2747465728,2748055551,ZA -2748055552,2748317695,US -2748317696,2749628415,JP -2749628416,2749890559,US +2748055552,2748121087,CN +2748121088,2748317695,US +2748317696,2748645375,JP +2748645376,2748710911,KR +2748710912,2749235199,JP +2749235200,2749300735,KR +2749300736,2749628415,JP +2749628416,2749693951,US +2749693952,2749759487,KR +2749759488,2749890559,US 2749890560,2750021631,AU 2750021632,2750349311,US 2750349312,2750414847,KR @@ -59022,7 +71576,9 @@ 2750873600,2750939135,CL 2750939136,2751070207,US 2751070208,2751135743,CL -2751135744,2751463423,US +2751135744,2751397887,US +2751397888,2751463423,KR +2751463424,2751528959,KZ 2751528960,2751660031,FR 2751660032,2751725567,AT 2751725568,2751791103,SE @@ -59040,6 +71596,18 @@ 2753822720,2753888255,GB 2753888256,2753953791,SE 2753953792,2754084863,GB +2754084864,2754117631,KZ +2754117632,2754125823,NL +2754125824,2754127871,DE +2754127872,2754129919,SK +2754129920,2754131967,SE +2754131968,2754134015,PL +2754134016,2754138111,DE +2754138112,2754142207,GB +2754142208,2754144255,BA +2754144256,2754146303,DE +2754146304,2754148351,PL +2754148352,2754150399,MK 2754150400,2754215935,BR 2754215936,2754281471,PR 2754281472,2754347007,JP @@ -59053,7 +71621,9 @@ 2755330048,2755395583,DE 2755395584,2755461119,FR 2755461120,2755526655,DE -2755526656,2755985407,US +2755526656,2755592191,US +2755592192,2755657727,GB +2755657728,2755985407,US 2755985408,2756182015,JP 2756182016,2756247551,US 2756247552,2756313087,UY @@ -59087,6 +71657,7 @@ 2759000064,2759065599,TH 2759065600,2759589887,US 2759589888,2759720959,KR +2759720960,2759852031,PL 2759852032,2759883439,CH 2759883440,2759883443,LI 2759883444,2759883451,CH @@ -59121,8 +71692,26 @@ 2762276864,2762342399,US 2762342400,2762407935,CA 2762407936,2763063295,US +2763063296,2763096063,FR +2763096064,2763104255,GB +2763104256,2763108351,DE +2763108352,2763110399,RU +2763110400,2763112447,NL +2763112448,2763128831,BY 2763128832,2763194367,CA -2763194368,2768240639,US +2763194368,2765553663,US +2765553664,2765561855,CY +2765561856,2765563903,FI +2765563904,2765565951,IR +2765565952,2765567999,RU +2765568000,2765570047,IR +2765570048,2765578239,RU +2765578240,2765580287,AZ +2765580288,2765580799,FR +2765580800,2765582335,GB +2765582336,2765586431,CZ +2765586432,2765619199,IR +2765619200,2768240639,US 2768306176,2768437247,US 2768437248,2768633855,ZA 2768633856,2768764927,US @@ -59174,7 +71763,11 @@ 2778071040,2778333183,US 2778333184,2778398719,CA 2778398720,2779054079,US -2779054080,2779119615,ZA +2779054080,2779057151,ZA +2779057152,2779058175,SZ +2779058176,2779059199,ZA +2779059200,2779060223,SZ +2779060224,2779119615,ZA 2779119616,2779906047,US 2779906048,2779971583,CA 2779971584,2780037119,US @@ -59199,14 +71792,14 @@ 2780926272,2780926303,FR 2780926304,2780926319,IT 2780926320,2780926327,GB -2780926328,2780926823,US -2780926824,2780926847,GB -2780926848,2780926975,US +2780926328,2780926335,US +2780926336,2780926367,GB +2780926368,2780926823,US +2780926824,2780926879,GB +2780926880,2780926975,US 2780926976,2780927487,GB 2780927488,2780927743,US -2780927744,2780927999,GB -2780928000,2780928031,US -2780928032,2780928127,GB +2780927744,2780928127,GB 2780928128,2780928383,US 2780928384,2780928415,GB 2780928416,2780928447,US @@ -59252,7 +71845,9 @@ 2780946128,2780946135,CA 2780946136,2780947903,US 2780947904,2780947967,MY -2780947968,2780952967,US +2780947968,2780948815,US +2780948816,2780948823,MY +2780948824,2780952967,US 2780952968,2780952975,GB 2780952976,2780954623,US 2780954624,2781020159,KR @@ -59310,7 +71905,11 @@ 2788243472,2788243487,SG 2788243488,2788245007,US 2788245008,2788245023,CA -2788245024,2788261887,US +2788245024,2788247863,US +2788247864,2788247871,GB +2788247872,2788253183,US +2788253184,2788253191,JP +2788253192,2788261887,US 2788261888,2788294655,GB 2788294656,2789212159,US 2789212160,2789277695,AU @@ -59400,8 +71999,8 @@ 2815164416,2815229951,US 2815229952,2815295487,ID 2815295488,2815984639,US -2815984640,2815985407,IL -2815985408,2815985663,US +2815984640,2815985151,IL +2815985152,2815985663,US 2815985664,2815986687,IL 2815986688,2815986815,GB 2815986816,2815986831,US @@ -59442,7 +72041,9 @@ 2816004352,2816004367,US 2816004368,2816004415,IL 2816004416,2816004479,US -2816004480,2816008191,IL +2816004480,2816004703,IL +2816004704,2816004711,GB +2816004712,2816008191,IL 2816008192,2816008207,IE 2816008208,2816010495,IL 2816010496,2816010751,US @@ -59576,14 +72177,15 @@ 2848522240,2848587775,AU 2848587776,2848653311,ZA 2848653312,2848980991,US -2848980992,2849177855,AU +2848980992,2849177855,KR 2849177856,2849178111,CN -2849178112,2849178367,KR -2849178368,2849178623,AU +2849178112,2849178623,KR 2849178624,2849178879,ID 2849178880,2849179135,VN -2849179136,2849964031,AU -2849964032,2850029567,PH +2849179136,2849898495,KR +2849898496,2849898751,AU +2849898752,2849964031,KR +2849964032,2850029567,CN 2850029568,2851995647,US 2852126720,2853306367,US 2853306368,2853371903,CL @@ -59625,9 +72227,21 @@ 2867855360,2868117503,US 2868379648,2868772863,US 2868838400,2868903935,BE +2868903936,2869035007,SG +2869035008,2869166079,JP +2869166080,2869428223,TH +2869428224,2869952511,CN 2869952512,2870018047,FR 2870018048,2870083583,DE -2870083584,2870149119,FR +2870083584,2870087935,FR +2870087936,2870088191,ES +2870088192,2870088959,FR +2870088960,2870088991,ES +2870088992,2870089727,FR +2870089728,2870091775,DE +2870091776,2870095871,FR +2870095872,2870096383,SG +2870096384,2870149119,FR 2870149120,2870214655,HU 2870214656,2870280191,DK 2870280192,2870345727,NL @@ -59643,8 +72257,17 @@ 2870935552,2871001087,HU 2871001088,2871066623,SE 2871066624,2871083007,CH -2873098240,2874146815,US -2877292544,2885681151,US +2871132160,2872049663,CN +2872049664,2873098239,IN +2873098240,2873884671,US +2873884672,2874146815,IN +2874146816,2875195391,CN +2875195392,2875719679,TH +2875719680,2877292543,CN +2877292544,2882469887,US +2882469888,2882535423,SG +2882535424,2883583999,CN +2883584000,2885681151,VN 2894069760,2894921727,US 2894921728,2895118335,GB 2895118336,2895301887,US @@ -59671,13 +72294,55 @@ 2899443712,2899574783,FR 2899574784,2899902463,GB 2902458368,2902462463,A1 -2902462464,2902470936,US +2902462464,2902470775,US +2902470776,2902470777,BD +2902470778,2902470936,US 2902470937,2902470938,LK -2902470939,2902507519,US +2902470939,2902470986,US +2902470987,2902470989,BD +2902470990,2902471468,US +2902471469,2902471470,AU +2902471471,2902471895,US +2902471896,2902471897,AU +2902471898,2902471960,US +2902471961,2902471962,AU +2902471963,2902472018,US +2902472019,2902472021,AL +2902472022,2902472037,US +2902472038,2902472039,AU +2902472040,2902472725,US +2902472726,2902472728,BD +2902472729,2902472788,US +2902472789,2902472790,LK +2902472791,2902472813,US +2902472814,2902472814,LK +2902472815,2902472834,US +2902472835,2902472836,BD +2902472837,2902473028,US +2902473029,2902473031,IN +2902473032,2902473107,US +2902473108,2902473109,BD +2902473110,2902473556,US +2902473557,2902473558,LK +2902473559,2902473649,US +2902473650,2902473650,BD +2902473651,2902473652,US +2902473653,2902473653,BD +2902473654,2902474023,US +2902474024,2902474032,RU +2902474033,2902474062,US +2902474063,2902474073,RU +2902474074,2902475263,US +2902475264,2902475327,CY +2902475328,2902492671,US +2902492672,2902493183,IN +2902493184,2902507519,US 2902507520,2902515711,CA 2902515712,2904555519,US 2904555520,2904817663,CA -2904817664,2905376767,US +2904817664,2905350751,US +2905350752,2905350783,RU +2905350784,2905376767,US 2905376768,2905377535,CA 2905377536,2905378303,US 2905378304,2905378815,CA @@ -59689,9 +72354,15 @@ 2905381888,2905382016,CA 2905382017,2905384959,US 2905384960,2905385471,CA -2905385472,2905388031,US +2905385472,2905385951,US +2905385952,2905385983,CR +2905385984,2905388031,US 2905388032,2905388287,CA -2905388288,2905392895,US +2905388288,2905391327,US +2905391328,2905391335,CR +2905391336,2905391359,US +2905391360,2905391391,CR +2905391392,2905392895,US 2905392896,2905393151,CA 2905393152,2905394175,US 2905394176,2905394943,CA @@ -59701,28 +72372,49 @@ 2905399040,2905399295,CA 2905399296,2905407743,US 2905407744,2905407999,TW -2905408000,2905428967,US +2905408000,2905415679,US +2905415680,2905415935,GB +2905415936,2905428967,US 2905428968,2905428975,AE 2905428976,2905432975,US 2905432976,2905432983,AE -2905432984,2905449983,US +2905432984,2905446655,US +2905446656,2905446911,DE +2905446912,2905449983,US 2905449984,2905451007,CA -2905451008,2905451519,US +2905451008,2905451327,US +2905451328,2905451391,CY +2905451392,2905451519,US 2905451520,2905451647,PA -2905451648,2905451775,US -2905451776,2905451903,PA -2905451904,2905473023,US +2905451648,2905473023,US 2905473024,2905481215,CA 2905481216,2913992703,US 2913992704,2914516991,CA 2914516992,2915250175,US 2915250176,2915254271,CA -2915254272,2915765279,US +2915254272,2915274751,US +2915274752,2915274815,PL +2915274816,2915275007,US +2915275008,2915275071,PL +2915275072,2915275263,US +2915275264,2915275327,PL +2915275328,2915516415,US +2915516416,2915516671,NL +2915516672,2915516927,CA +2915516928,2915517439,US +2915517440,2915518463,DK +2915518464,2915520511,GB +2915520512,2915521023,AU +2915521024,2915521279,JP +2915521280,2915521535,PL +2915521536,2915526911,US +2915526912,2915527167,DE +2915527168,2915527679,US +2915527680,2915528711,NL +2915528712,2915765279,US 2915765280,2915765287,IN -2915765288,2915765343,US -2915765344,2915765351,NZ -2915765352,2915765367,US -2915765368,2915765375,PE +2915765288,2915765367,US +2915765368,2915765375,ZA 2915765376,2915765431,US 2915765432,2915765439,MX 2915765440,2915765471,US @@ -59743,7 +72435,8 @@ 2915767056,2915767063,GB 2915767064,2915767407,US 2915767408,2915767415,GB -2915767416,2915767679,US +2915767416,2915767663,US +2915767664,2915767679,NZ 2915767680,2915767695,GB 2915767696,2915767743,US 2915767744,2915767775,GB @@ -59754,16 +72447,14 @@ 2915767904,2915768191,US 2915768192,2915768199,GB 2915768200,2915768303,US -2915768304,2915768311,IL +2915768304,2915768311,MX 2915768312,2915768359,US 2915768360,2915768367,GB 2915768368,2915768375,US 2915768376,2915768383,GB 2915768384,2915768431,US 2915768432,2915768439,IE -2915768440,2915768487,US -2915768488,2915768495,CA -2915768496,2915768703,US +2915768440,2915768703,US 2915768704,2915768767,GB 2915768768,2915768903,US 2915768904,2915768911,GR @@ -59775,15 +72466,30 @@ 2915769240,2915769247,CA 2915769248,2915769295,US 2915769296,2915769303,BR -2915769304,2915772671,US +2915769304,2915770167,US +2915770168,2915770175,BR +2915770176,2915770255,US +2915770256,2915770263,CA +2915770264,2915770279,JE +2915770280,2915770311,US +2915770312,2915770319,MX +2915770320,2915771103,US +2915771104,2915771135,CA +2915771136,2915772671,US 2915772672,2915772679,IN 2915772680,2915772711,US 2915772712,2915772719,GB -2915772720,2915773023,US +2915772720,2915772751,US +2915772752,2915772759,DE +2915772760,2915773015,US +2915773016,2915773023,SG 2915773024,2915773039,IN 2915773040,2915773175,US 2915773176,2915773183,KW -2915773184,2915794959,US +2915773184,2915773791,US +2915773792,2915773807,CA +2915773808,2915773839,JE +2915773840,2915794959,US 2915794960,2915794975,MX 2915794976,2915795007,US 2915795008,2915795023,BR @@ -59997,11 +72703,27 @@ 2915808248,2915808255,DE 2915808256,2915810471,US 2915810472,2915810479,GB -2915810480,2915811135,US +2915810480,2915810647,US +2915810648,2915810663,CA +2915810664,2915811135,US 2915811136,2915811199,IN -2915811200,2915958783,US +2915811200,2915821791,US +2915821792,2915821823,IL +2915821824,2915958783,US 2915958784,2916024319,CA -2916024320,2916163583,US +2916024320,2916101535,US +2916101536,2916101543,CA +2916101544,2916101615,US +2916101616,2916101623,CA +2916101624,2916104703,US +2916104704,2916104719,ZA +2916104720,2916118223,US +2916118224,2916118231,LK +2916118232,2916120823,US +2916120824,2916120831,CA +2916120832,2916121087,US +2916121088,2916121343,GB +2916121344,2916163583,US 2916163584,2916171775,CA 2916171776,2916184063,US 2916184064,2916196351,CA @@ -60017,41 +72739,55 @@ 2916434560,2916434591,CA 2916434592,2916434623,US 2916434624,2916434655,CA -2916434656,2916437503,US -2916437504,2916437567,CA -2916437568,2916440143,US +2916434656,2916436487,US +2916436488,2916436495,CA +2916436496,2916436543,US +2916436544,2916436607,CA +2916436608,2916437039,US +2916437040,2916437047,DE +2916437048,2916437055,CN +2916437056,2916437063,GB +2916437064,2916437199,US +2916437200,2916437207,GB +2916437208,2916437215,TH +2916437216,2916437231,US +2916437232,2916437239,SG +2916437240,2916440143,US 2916440144,2916440159,CA 2916440160,2916440175,US 2916440176,2916440191,CA -2916440192,2916440223,US -2916440224,2916440239,CA -2916440240,2916440255,US -2916440256,2916440271,CA -2916440272,2916441119,US +2916440192,2916440287,US +2916440288,2916440295,CA +2916440296,2916441119,US 2916441120,2916441151,CA -2916441152,2916441343,US +2916441152,2916441199,US +2916441200,2916441207,MY +2916441208,2916441343,US 2916441344,2916442111,CA 2916442112,2916442623,US 2916442624,2916442879,CA 2916442880,2916443614,US 2916443615,2916443647,CA -2916443648,2916444927,US -2916444928,2916445951,CA -2916445952,2916449279,US +2916443648,2916449279,US 2916449280,2916450303,CA -2916450304,2916515839,US -2916548608,2916581375,US +2916450304,2916478975,US +2916478976,2916483071,A1 +2916483072,2916515839,US +2916515840,2916519935,CA +2916519936,2916530482,US +2916530483,2916530552,AU +2916530553,2916581375,US 2916581376,2916614143,PR 2916614144,2917167679,US 2917167680,2917167743,BR -2917167744,2917167807,US -2917167808,2917167839,RS +2917167744,2917167839,US 2917167840,2917167871,TR 2917167872,2917167903,US 2917167904,2917167935,TR 2917167936,2917167967,US 2917167968,2917167999,GB -2917168000,2917168095,US +2917168000,2917168031,UA +2917168032,2917168095,US 2917168096,2917168127,NZ 2917168128,2917168223,US 2917168224,2917168255,BR @@ -60063,15 +72799,12 @@ 2917168448,2917168479,BR 2917168480,2917168607,US 2917168608,2917168639,BR -2917168640,2917169663,US -2917169664,2917169695,DE -2917169696,2917170015,US +2917168640,2917170015,US 2917170016,2917170047,UA 2917170048,2917170079,BR 2917170080,2917170111,US 2917170112,2917170143,RU -2917170144,2917170207,US -2917170208,2917170239,NL +2917170144,2917170239,US 2917170240,2917170271,RU 2917170272,2917170303,BR 2917170304,2917193025,US @@ -60081,8 +72814,10 @@ 2917194159,2917194201,US 2917194202,2917194206,SG 2917194207,2917195775,US -2917195776,2917196031,CA -2917196032,2917199871,A2 +2917195776,2917196159,CA +2917196160,2917196287,A2 +2917196288,2917196415,CA +2917196416,2917199871,A2 2917199872,2917203967,CA 2917203968,2917210335,US 2917210336,2917210367,CA @@ -60091,21 +72826,94 @@ 2917210464,2917257215,US 2917257216,2917261311,KY 2917261312,2917265407,US -2917265408,2917269503,JM -2917269504,2917572607,US +2917265408,2917268223,JM +2917268224,2917268479,BB +2917268480,2917269503,JM +2917269504,2917449727,US +2917449728,2917466111,PR +2917466112,2917572607,US 2917572608,2917580799,CA 2917580800,2917597439,US 2917597440,2917597695,GB 2917597696,2917621759,US 2917621760,2917629951,CA -2917629952,2917646335,US -2917662720,2917663231,US +2917629952,2917646591,US +2917646592,2917647231,CN +2917647232,2917647359,US +2917647360,2917648511,CN +2917648512,2917648639,US +2917648640,2917649279,CN +2917649280,2917649407,US +2917649408,2917649535,RU +2917649536,2917649663,CN +2917649664,2917649791,GB +2917649792,2917649919,AZ +2917649920,2917650047,CN +2917650048,2917650175,US +2917650176,2917650303,CN +2917650304,2917650431,PA +2917650432,2917650559,CN +2917650560,2917651071,US +2917651072,2917651455,CN +2917651456,2917651711,US +2917651712,2917651839,CR +2917651840,2917652095,CN +2917652096,2917652223,IN +2917652224,2917652479,AU +2917652480,2917652735,CN +2917652736,2917652863,NZ +2917652864,2917653247,US +2917653248,2917653375,CN +2917653376,2917653503,PA +2917653504,2917654015,GB +2917654016,2917654143,FI +2917654144,2917654271,MY +2917654272,2917654527,CN +2917654528,2917654655,TH +2917654656,2917654783,MX +2917654784,2917655039,DE +2917655040,2917655167,US +2917655168,2917655295,SG +2917655296,2917655423,GB +2917655424,2917655807,CN +2917655808,2917655935,US +2917655936,2917656063,HU +2917656064,2917656447,CN +2917656448,2917656575,FR +2917656576,2917656703,US +2917656704,2917657087,CN +2917657088,2917657215,NO +2917657216,2917657471,US +2917657472,2917657599,CN +2917657600,2917657855,US +2917657856,2917657983,CN +2917657984,2917658367,US +2917658368,2917658495,CN +2917658496,2917658879,US +2917658880,2917659007,PH +2917659008,2917659519,US +2917659520,2917659647,HK +2917659648,2917659775,US +2917659776,2917659903,CN +2917659904,2917660287,US +2917660288,2917660415,MY +2917660416,2917660543,CA +2917660544,2917660671,GI +2917660672,2917661183,GB +2917661184,2917661311,CA +2917661312,2917661695,CN +2917661696,2917661823,ZA +2917661824,2917661951,PK +2917661952,2917662079,CN +2917662080,2917663231,US 2917663232,2917663487,CA 2917663488,2917665791,US 2917665792,2917666303,CA 2917666304,2917667710,US 2917667711,2917671935,CA -2917671936,2917675263,US +2917671936,2917672191,US +2917672192,2917672223,CA +2917672224,2917675263,US 2917675264,2917675775,CA 2917675776,2917676031,US 2917676032,2917677055,CA @@ -60117,8 +72925,8 @@ 2917682432,2917683455,CA 2917683456,2917685503,US 2917685504,2917686015,CA -2917686016,2917690367,US -2917690368,2917690879,CA +2917686016,2917690623,US +2917690624,2917690879,CA 2917690880,2917693183,US 2917693184,2917693951,CA 2917693952,2917695231,US @@ -60127,15 +72935,80 @@ 2917695744,2917696255,CA 2917696256,2917702399,US 2917702400,2917707007,CA -2917707008,2917714175,US +2917707008,2917707519,US +2917707520,2917707775,CA +2917707776,2917710591,US +2917710592,2917710847,CA +2917710848,2917714175,US 2917714176,2917714431,CA -2917714432,2917718527,US +2917714432,2917715967,US +2917715968,2917716223,DE +2917716224,2917718527,US 2917718528,2917719039,CA 2917719040,2917722367,US 2917722368,2917722623,CA -2917722624,2917842175,US +2917722624,2917724159,US +2917724160,2917724415,CA +2917724416,2917726207,US +2917726208,2917726463,CA +2917726464,2917726495,CR +2917726496,2917795951,US +2917795952,2917795959,CA +2917795960,2917796263,US +2917796264,2917796271,CA +2917796272,2917801983,US +2917801984,2917801991,CA +2917801992,2917802231,US +2917802232,2917802239,CA +2917802240,2917802295,US +2917802296,2917802303,CA +2917802304,2917802367,US +2917802368,2917802375,CA +2917802376,2917802479,US +2917802480,2917802487,CA +2917802488,2917804911,US +2917804912,2917804919,CA +2917804920,2917804935,US +2917804936,2917804943,CA +2917804944,2917805039,US +2917805040,2917805047,CA +2917805048,2917809231,US +2917809232,2917809239,CA +2917809240,2917809927,US +2917809928,2917809935,CA +2917809936,2917811511,US +2917811512,2917811519,LK +2917811520,2917811583,US +2917811584,2917811647,LK +2917811648,2917813679,US +2917813680,2917813687,LK +2917813688,2917815575,US +2917815576,2917815583,RO +2917815584,2917823871,US +2917823872,2917823887,CA +2917823888,2917823895,US +2917823896,2917823903,CA +2917823904,2917823975,US +2917823976,2917823991,CA +2917823992,2917829727,US +2917829728,2917829743,CA +2917829744,2917834143,US +2917834144,2917834151,CA +2917834152,2917834751,US +2917834752,2917835007,GB +2917835008,2917835679,US +2917835680,2917835687,CA +2917835688,2917842175,US 2917842176,2917842431,CA -2917842432,2918043647,US +2917842432,2917853471,US +2917853472,2917853495,CA +2917853496,2917853519,US +2917853520,2917853535,CA +2917853536,2917858047,US +2917858048,2917858303,BE +2917858304,2918014975,US +2918014976,2918023167,CA +2918023168,2918043647,US 2918043648,2918047743,CA 2918047744,2918051839,US 2918051840,2918121471,CA @@ -60143,7 +73016,11 @@ 2918154240,2918170623,CA 2918170624,2918199679,US 2918199680,2918199743,CA -2918199744,2918232063,US +2918199744,2918200287,US +2918200288,2918200303,CA +2918200304,2918201551,US +2918201552,2918201567,CA +2918201568,2918232063,US 2918232064,2918236159,CA 2918236160,2918260735,US 2918260736,2918264831,CA @@ -60161,22 +73038,63 @@ 2918375424,2918391807,US 2918391808,2918395903,CA 2918395904,2918404095,US -2918404096,2918408191,PR -2918408192,2918432767,US +2918404096,2918406911,PR +2918406912,2918407423,US +2918407424,2918408191,PR +2918408192,2918416383,US +2918416384,2918420479,CA +2918420480,2918432767,US 2918432768,2918436863,CA -2918436864,2918469631,US -2918469632,2918473727,CA +2918436864,2918460095,US +2918460096,2918460159,GB +2918460160,2918469631,US +2918469632,2918471423,CA +2918471424,2918471679,US +2918471680,2918473727,CA 2918473728,2918477823,US 2918477824,2918481919,CA -2918481920,2918533119,US +2918481920,2918514943,US +2918514944,2918515079,CA +2918515080,2918515199,US +2918515200,2918515231,CA +2918515232,2918532111,US +2918532112,2918532119,CN +2918532120,2918532143,US +2918532144,2918532151,PK +2918532152,2918533119,US 2918533120,2918533127,CN -2918533128,2918533167,US -2918533168,2918533183,CN -2918533184,2918533247,US -2918533248,2918533375,CA -2918533376,2918534911,US +2918533128,2918533143,US +2918533144,2918533151,CN +2918533152,2918533159,US +2918533160,2918533167,CN +2918533168,2918533191,US +2918533192,2918533199,AU +2918533200,2918533215,CN +2918533216,2918534687,US +2918534688,2918534695,CN +2918534696,2918534703,US +2918534704,2918534735,CN +2918534736,2918534751,US +2918534752,2918534767,CN +2918534768,2918534815,US +2918534816,2918534879,CN +2918534880,2918534911,US 2918534912,2918534943,KR -2918534944,2918580223,US +2918534944,2918534975,CN +2918534976,2918534983,US +2918534984,2918534991,ID +2918534992,2918535807,US +2918535808,2918535967,CN +2918535968,2918535999,US +2918536000,2918536023,CN +2918536024,2918536031,US +2918536032,2918536127,CN +2918536128,2918536167,US +2918536168,2918536191,CN +2918536192,2918536703,A1 +2918536704,2918536719,US +2918536720,2918536727,CA +2918536728,2918580223,US 2918580224,2918588415,CA 2918588416,2918596607,US 2918596608,2918604799,CA @@ -60184,8 +73102,9 @@ 2918699008,2918703103,CA 2918703104,2918760447,US 2918760448,2918776831,CA -2918776832,2918817791,US -2918825984,2918828031,US +2918776832,2918816000,US +2918816001,2918817023,GB +2918817024,2918828031,US 2918828032,2918828543,UA 2918828544,2918829055,ES 2918829056,2918829183,US @@ -60196,19 +73115,339 @@ 2918829696,2918829823,DE 2918829824,2918830079,CN 2918830080,2918834175,CA -2918834176,2918838271,US -2918838272,2918840319,AU -2918840320,2918842367,US +2918834176,2918842367,US 2918842368,2918875135,CA 2918875136,2918973439,US 2918973440,2918989823,CA -2919006208,2919174143,US +2918989824,2919010303,US +2919010304,2919010559,CA +2919010560,2919020543,US +2919020544,2919020575,CA +2919020576,2919020591,US +2919020592,2919020655,CA +2919020656,2919020711,US +2919020712,2919020719,CA +2919020720,2919020727,US +2919020728,2919020799,CA +2919020800,2919021343,US +2919021344,2919021567,CA +2919021568,2919063551,US +2919063552,2919064063,MX +2919064064,2919067655,CN +2919067656,2919067695,US +2919067696,2919067703,PK +2919067704,2919067711,ES +2919067712,2919067719,CN +2919067720,2919067727,TR +2919067728,2919067735,IN +2919067736,2919067743,US +2919067744,2919067751,BR +2919067752,2919067759,IN +2919067760,2919067767,CA +2919067768,2919067775,US +2919067776,2919067783,AU +2919067784,2919067791,US +2919067792,2919067799,BR +2919067800,2919067823,US +2919067824,2919067831,BR +2919067832,2919067839,US +2919067840,2919067847,BR +2919067848,2919067863,US +2919067864,2919067871,ES +2919067872,2919067879,CA +2919067880,2919067887,TW +2919067888,2919067895,IE +2919067896,2919067903,CA +2919067904,2919067911,US +2919067912,2919067919,CN +2919067920,2919067927,US +2919067928,2919067935,RU +2919067936,2919067943,BR +2919067944,2919067951,PL +2919067952,2919067959,CN +2919067960,2919067967,IL +2919067968,2919067975,US +2919067976,2919067983,CA +2919067984,2919067999,CN +2919068000,2919068007,CM +2919068008,2919068015,BR +2919068016,2919068023,US +2919068024,2919068031,HK +2919068032,2919068039,US +2919068040,2919068047,IN +2919068048,2919068055,CA +2919068056,2919068087,US +2919068088,2919068095,TR +2919068096,2919068103,US +2919068104,2919068111,AE +2919068112,2919068119,US +2919068120,2919068127,CN +2919068128,2919068135,US +2919068136,2919068143,PK +2919068144,2919068151,IN +2919068152,2919068159,JM +2919068160,2919068167,US +2919068168,2919068175,CA +2919068176,2919068183,US +2919068184,2919068191,CA +2919068192,2919068199,PR +2919068200,2919068207,US +2919068208,2919068215,GB +2919068216,2919068223,CA +2919068224,2919068239,US +2919068240,2919068247,CN +2919068248,2919068255,AU +2919068256,2919068271,US +2919068272,2919068279,SG +2919068280,2919068287,US +2919068288,2919068295,CN +2919068296,2919068303,BR +2919068304,2919068311,RO +2919068312,2919068319,MY +2919068320,2919068335,US +2919068336,2919068343,RU +2919068344,2919068359,US +2919068360,2919068367,CM +2919068368,2919068375,CN +2919068376,2919068383,US +2919068384,2919068391,BR +2919068392,2919068415,US +2919068416,2919068423,BR +2919068424,2919068431,CN +2919068432,2919068495,US +2919068496,2919068503,BR +2919068504,2919068511,IN +2919068512,2919068519,CN +2919068520,2919068527,US +2919068528,2919068535,PL +2919068536,2919068551,IN +2919068552,2919068559,AU +2919068560,2919068567,CN +2919068568,2919068575,IN +2919068576,2919068583,US +2919068584,2919068591,CN +2919068592,2919068599,IN +2919068600,2919068607,CM +2919068608,2919068615,MY +2919068616,2919068647,US +2919068648,2919068655,AU +2919068656,2919068663,CN +2919068664,2919068671,MY +2919068672,2919068703,US +2919068704,2919068711,IN +2919068712,2919068719,JM +2919068720,2919068727,US +2919068728,2919068735,RU +2919068736,2919068743,NO +2919068744,2919068751,PR +2919068752,2919068775,US +2919068776,2919068783,HK +2919068784,2919068791,IN +2919068792,2919068799,CR +2919068800,2919068815,NO +2919068816,2919068823,US +2919068824,2919068831,CA +2919068832,2919068839,CN +2919068840,2919068871,US +2919068872,2919068879,CN +2919068880,2919068887,DO +2919068888,2919068895,SG +2919068896,2919068911,US +2919068912,2919068927,CN +2919068928,2919068935,US +2919068936,2919068943,ZA +2919068944,2919068967,US +2919068968,2919068975,RU +2919068976,2919068991,US +2919068992,2919068999,DO +2919069000,2919069015,US +2919069016,2919069031,CN +2919069032,2919069039,US +2919069040,2919069047,CN +2919069048,2919069055,US +2919069056,2919069063,CN +2919069064,2919069071,AF +2919069072,2919069079,CN +2919069080,2919069087,US +2919069088,2919069095,IN +2919069096,2919069103,BZ +2919069104,2919069111,US +2919069112,2919069119,CN +2919069120,2919069127,CA +2919069128,2919069135,US +2919069136,2919069143,CN +2919069144,2919069151,BR +2919069152,2919069159,US +2919069160,2919069167,JM +2919069168,2919069175,GB +2919069176,2919069183,US +2919069184,2919069191,PR +2919069192,2919069199,US +2919069200,2919069207,GB +2919069208,2919069215,BR +2919069216,2919069231,US +2919069232,2919069239,ES +2919069240,2919069255,GB +2919069256,2919069271,CN +2919069272,2919069295,US +2919069296,2919069303,BR +2919069304,2919069327,US +2919069328,2919069335,BR +2919069336,2919069343,TR +2919069344,2919069359,US +2919069360,2919069367,CN +2919069368,2919069375,AU +2919069376,2919069391,US +2919069392,2919069399,GB +2919069400,2919069407,US +2919069408,2919069415,VN +2919069416,2919069439,US +2919069440,2919069447,CA +2919069448,2919069455,US +2919069456,2919069463,CN +2919069464,2919069471,US +2919069472,2919069479,CA +2919069480,2919069487,CN +2919069488,2919069495,US +2919069496,2919069503,CN +2919069504,2919069511,AR +2919069512,2919069527,US +2919069528,2919069535,TR +2919069536,2919069543,US +2919069544,2919069559,CN +2919069560,2919069567,AE +2919069568,2919069575,VN +2919069576,2919069583,CN +2919069584,2919069607,US +2919069608,2919069615,CN +2919069616,2919069623,QA +2919069624,2919069631,PK +2919069632,2919069639,TW +2919069640,2919069663,US +2919069664,2919069671,CA +2919069672,2919069679,US +2919069680,2919069687,CA +2919069688,2919069703,US +2919069704,2919069711,CN +2919069712,2919069735,US +2919069736,2919069743,BR +2919069744,2919069823,US +2919069824,2919069831,IN +2919069832,2919069839,US +2919069840,2919069847,BR +2919069848,2919069895,US +2919069896,2919069903,BR +2919069904,2919070111,US +2919070112,2919070119,ES +2919070120,2919070303,US +2919070304,2919070311,BR +2919070312,2919070783,US +2919070784,2919070791,BR +2919070792,2919070919,US +2919070920,2919070927,CA +2919070928,2919070943,US +2919070944,2919070951,BR +2919070952,2919071143,US +2919071144,2919071151,CN +2919071152,2919153695,US +2919153696,2919153703,DE +2919153704,2919153807,US +2919153808,2919153815,AU +2919153816,2919170327,US +2919170328,2919170335,PE +2919170336,2919170351,US +2919170352,2919170359,PE +2919170360,2919170367,AU +2919170368,2919170383,BR +2919170384,2919170391,US +2919170392,2919170399,IN +2919170400,2919170407,TR +2919170408,2919170415,ES +2919170416,2919170431,US +2919170432,2919170439,JP +2919170440,2919170447,IN +2919170448,2919170463,TH +2919170464,2919170487,US +2919170488,2919170495,NL +2919170496,2919170527,US +2919170528,2919170535,BR +2919170536,2919170551,US +2919170552,2919170559,FR +2919170560,2919170599,US +2919170600,2919170607,JP +2919170608,2919170615,US +2919170616,2919170623,CN +2919170624,2919170639,US +2919170640,2919170655,JP +2919170656,2919170663,US +2919170664,2919170671,PH +2919170672,2919170679,JP +2919170680,2919170695,US +2919170696,2919170703,CN +2919170704,2919170711,MX +2919170712,2919170727,US +2919170728,2919170735,IN +2919170736,2919170751,US +2919170752,2919170759,GB +2919170760,2919170767,BR +2919170768,2919170775,AR +2919170776,2919170799,US +2919170800,2919170815,SG +2919170816,2919170863,US +2919170864,2919170871,AU +2919170872,2919170879,CH +2919170880,2919170903,US +2919170904,2919170911,GR +2919170912,2919170919,BR +2919170920,2919170935,US +2919170936,2919170943,PH +2919170944,2919170967,US +2919170968,2919170975,NZ +2919170976,2919171055,US +2919171056,2919171063,TR +2919171064,2919171071,US +2919171072,2919171079,IN +2919171080,2919171087,CL +2919171088,2919171095,TR +2919171096,2919171103,US +2919171104,2919171111,PL +2919171112,2919171119,US +2919171120,2919171127,CL +2919171128,2919171135,BR +2919171136,2919171143,AU +2919171144,2919171151,TR +2919171152,2919171159,US +2919171160,2919171167,AU +2919171168,2919171183,US +2919171184,2919171191,ZA +2919171192,2919171311,US +2919171312,2919171319,IL +2919171320,2919171327,TW +2919171328,2919171343,US +2919171344,2919171351,BR +2919171352,2919171359,US +2919171360,2919171367,BR +2919171368,2919171391,US +2919171392,2919171399,ES +2919171400,2919171407,IT +2919171408,2919171415,CN +2919171416,2919171455,US +2919171456,2919171463,BR +2919171464,2919171479,US +2919171480,2919171487,BR +2919171488,2919171535,US +2919171536,2919171543,BR +2919171544,2919171655,US +2919171656,2919171663,BR +2919171664,2919174143,US 2919174144,2919178239,CA 2919178240,2919186431,US 2919186432,2919190527,CA -2919190528,2919202815,US +2919190528,2919202079,US +2919202080,2919202111,BE +2919202112,2919206911,US 2919206912,2919211007,CA -2919219200,2919235583,US +2919211008,2919235583,US 2919235584,2919759871,CA 2919759872,2921496895,US 2921496896,2921496903,IN @@ -60218,17 +73457,31 @@ 2921497416,2921497423,IN 2921497424,2921497471,US 2921497472,2921497599,IN -2921497600,2921498383,US +2921497600,2921498031,US +2921498032,2921498039,CA +2921498040,2921498215,US +2921498216,2921498223,CA +2921498224,2921498383,US 2921498384,2921498391,ID -2921498392,2921503607,US +2921498392,2921498431,US +2921498432,2921498439,CA +2921498440,2921500159,US +2921500160,2921500415,GB +2921500416,2921503607,US 2921503608,2921503615,GB 2921503616,2921503695,US 2921503696,2921503703,ID 2921503704,2921504431,US 2921504432,2921504439,GB -2921504440,2921508719,US +2921504440,2921507903,US +2921507904,2921507911,CA +2921507912,2921508719,US 2921508720,2921508727,SE -2921508728,2921512703,US +2921508728,2921509351,US +2921509352,2921509367,CA +2921509368,2921511383,US +2921511384,2921511391,CA +2921511392,2921512703,US 2921512704,2921512959,CA 2921512960,2921562111,US 2921562112,2921594879,CA @@ -60236,59 +73489,92 @@ 2925002752,2925527039,CA 2925527040,2926575615,US 2926575616,2927099903,CA -2927099904,2928173103,US +2927099904,2927112031,US +2927112032,2927112039,CH +2927112040,2927152175,US +2927152176,2927152183,CH +2927152184,2927154847,US +2927154848,2927154855,CH +2927154856,2927242751,US +2927242752,2927243263,AE +2927243264,2927254527,US +2927254528,2927255039,AE +2927255040,2927911183,US +2927911184,2927911191,CH +2927911192,2928173103,US 2928173104,2928173119,PH 2928173120,2928173151,US 2928173152,2928173159,RU -2928173160,2928173343,US +2928173160,2928173223,US +2928173224,2928173231,JP +2928173232,2928173343,US 2928173344,2928173351,NL 2928173352,2928173519,US -2928173520,2928173527,GB +2928173520,2928173527,JP 2928173528,2928173551,US 2928173552,2928173559,CA -2928173560,2928173679,US +2928173560,2928173671,US +2928173672,2928173679,NZ 2928173680,2928173695,JP 2928173696,2928173711,US 2928173712,2928173727,JP -2928173728,2928173775,US -2928173776,2928173783,IE -2928173784,2928173855,US -2928173856,2928173871,AU -2928173872,2928173903,US +2928173728,2928173903,US 2928173904,2928173919,NZ 2928173920,2928173959,US 2928173960,2928173967,CA -2928173968,2928174095,US -2928174096,2928174103,CA -2928174104,2928174223,US +2928173968,2928174087,US +2928174088,2928174103,CA +2928174104,2928174215,US +2928174216,2928174223,MQ 2928174224,2928174231,CA 2928174232,2928174479,US 2928174480,2928174487,SE -2928174488,2928174575,US -2928174576,2928174583,AU -2928174584,2928174911,US +2928174488,2928174911,US 2928174912,2928174919,AU 2928174920,2928175055,US 2928175056,2928175063,MX -2928175064,2928175791,US +2928175064,2928175143,US +2928175144,2928175151,PH +2928175152,2928175167,US +2928175168,2928175175,RU +2928175176,2928175207,US +2928175208,2928175215,CA +2928175216,2928175271,US +2928175272,2928175279,NZ +2928175280,2928175303,US +2928175304,2928175311,CN +2928175312,2928175399,US +2928175400,2928175407,TR +2928175408,2928175471,US +2928175472,2928175479,JP +2928175480,2928175551,US +2928175552,2928175567,CA +2928175568,2928175655,US +2928175656,2928175663,AU +2928175664,2928175775,US +2928175776,2928175791,PH 2928175792,2928175799,CA -2928175800,2928175839,US -2928175840,2928175847,SE -2928175848,2928175967,US +2928175800,2928175815,US +2928175816,2928175823,CA +2928175824,2928175967,US 2928175968,2928175975,ZA -2928175976,2928176223,US +2928175976,2928176007,US +2928176008,2928176015,AU +2928176016,2928176207,US +2928176208,2928176223,ZA 2928176224,2928176231,JP 2928176232,2928176383,US 2928176384,2928176391,ES -2928176392,2928176527,US +2928176392,2928176519,US +2928176520,2928176527,NL 2928176528,2928176543,CN -2928176544,2928176575,US -2928176576,2928176591,MQ -2928176592,2928176783,US +2928176544,2928176783,US 2928176784,2928176799,MX 2928176800,2928176895,US 2928176896,2928176903,CA -2928176904,2928177151,US +2928176904,2928176919,US +2928176920,2928176927,CA +2928176928,2928177151,US 2928177152,2928181247,CA 2928181248,2928218127,US 2928218128,2928218143,CA @@ -60577,17 +73863,27 @@ 2928278960,2928278991,US 2928278992,2928279015,CA 2928279016,2928279023,US -2928279024,2928279551,CA +2928279024,2928279383,CA +2928279384,2928279391,US +2928279392,2928279551,CA 2928279552,2928312319,US 2928312320,2928316415,CA 2928316416,2928318719,US 2928318720,2928318975,DO -2928318976,2928321311,US +2928318976,2928320519,US +2928320520,2928320527,BR +2928320528,2928321063,US +2928321064,2928321071,AU +2928321072,2928321311,US 2928321312,2928321327,GB 2928321328,2928321343,CN -2928321344,2928323135,US +2928321344,2928322639,US +2928322640,2928322655,RU +2928322656,2928323135,US 2928323136,2928323143,RU -2928323144,2928323967,US +2928323144,2928323175,US +2928323176,2928323183,AU +2928323184,2928323967,US 2928323968,2928323983,RU 2928323984,2928328703,US 2928328704,2928336895,CA @@ -61155,17 +74451,19 @@ 2942763008,2942767103,JP 2942767104,2942771199,AU 2942771200,2942779391,ID +2942779392,2942795775,VN 2942795776,2942959615,JP 2942959616,2942960639,VN 2942960640,2942961663,AU 2942961664,2942965759,ID -2942965760,2942966783,AU +2942965760,2942967807,AU 2942967808,2942975999,AF 2942976000,2942992383,KR 2942992384,2943025151,CN 2943025152,2943041535,PK 2943041536,2943057919,KR 2943057920,2943074303,AU +2943074304,2943090687,PK 2943090688,2943221759,JP 2943221760,2943291391,PK 2943291392,2943295487,KR @@ -61176,7 +74474,6 @@ 2943311872,2943312895,HK 2943312896,2943313919,NZ 2943313920,2943314943,SG -2943314944,2943315967,BD 2943315968,2943318015,ID 2943318016,2943320063,JP 2943320064,2943336447,PK @@ -61191,8 +74488,7 @@ 2946375680,2946383871,ID 2946383872,2946392063,IN 2946392064,2946393087,BD -2946393088,2946394111,JP -2946394112,2946395135,AU +2946394112,2946396159,AU 2946396160,2946400255,JP 2946400256,2946416639,NC 2946416640,2946433023,PH @@ -61201,10 +74497,8 @@ 2947547136,2947579903,PH 2947579904,2947583999,KR 2947584000,2947586047,TO -2947586048,2947588095,JP 2947588096,2947590143,ID 2947590144,2947592191,SG -2947592192,2947596287,HK 2947596288,2947597311,IN 2947597312,2947598335,JP 2947598336,2947602431,AU @@ -61224,7 +74518,2339 @@ 2948135936,2948136959,IN 2948136960,2948595711,CN 2948595712,2952790015,KR -2969567232,2973761535,BR +2952790016,2953314303,DE +2953314304,2953379839,UA +2953379840,2953435855,DE +2953435856,2953435863,IT +2953435864,2953438191,DE +2953438192,2953438199,ES +2953438200,2953438231,DE +2953438232,2953438239,CH +2953438240,2953441263,DE +2953441264,2953441279,IT +2953441280,2953443031,DE +2953443032,2953443039,IT +2953443040,2953444183,DE +2953444184,2953444191,IT +2953444192,2953445375,DE +2953445376,2953453567,IT +2953453568,2953455615,IS +2953455616,2953457663,SK +2953457664,2953459711,DE +2953459712,2953461759,IT +2953461760,2953465855,ES +2953465856,2953465991,GB +2953465992,2953466111,EU +2953466112,2953466127,GB +2953466128,2953467903,EU +2953467904,2953469951,BE +2953469952,2953478143,CH +2953478144,2953503551,SE +2953503552,2953503559,NO +2953503560,2953510911,SE +2953510912,2953576447,NO +2953576448,2953592831,BG +2953592832,2953596927,IR +2953596928,2953598975,ES +2953598976,2953601023,IT +2953601024,2953603071,RU +2953603072,2953605119,GB +2953605120,2953609215,CZ +2953609216,2953707519,IL +2953707520,2953838591,RU +2953838592,2954100735,SA +2954100736,2954362879,DK +2954362880,2954625023,GB +2954625024,2954641407,DE +2954641408,2954643455,RU +2954643456,2954645503,IQ +2954645504,2954647551,AZ +2954647552,2954657791,ES +2954657792,2954756095,JO +2954756096,2954821631,TR +2954821632,2954829823,FR +2954829824,2954829827,ES +2954829828,2954829831,NL +2954829832,2954829839,DE +2954829840,2954829875,FR +2954829876,2954829879,GB +2954829880,2954829887,FR +2954829888,2954829903,PL +2954829904,2954829919,GB +2954829920,2954829951,FR +2954829952,2954829959,ES +2954829960,2954829963,PT +2954829964,2954829967,PL +2954829968,2954829983,FR +2954829984,2954830015,DE +2954830016,2954830079,GB +2954830080,2954830271,FR +2954830272,2954830279,GB +2954830280,2954830283,PL +2954830284,2954830287,DE +2954830288,2954830303,FR +2954830304,2954830367,DE +2954830368,2954830375,NL +2954830376,2954830383,ES +2954830384,2954830387,PL +2954830388,2954830391,IT +2954830392,2954830399,FR +2954830400,2954830415,IT +2954830416,2954830431,ES +2954830432,2954830447,FR +2954830448,2954830451,CZ +2954830452,2954830455,BE +2954830456,2954830463,CH +2954830464,2954830591,PL +2954830592,2954830847,GB +2954830848,2954830855,PL +2954830856,2954830859,FR +2954830860,2954830863,GB +2954830864,2954830879,FR +2954830880,2954830887,GB +2954830888,2954830891,FR +2954830892,2954830895,ES +2954830896,2954830931,FR +2954830932,2954830935,IE +2954830936,2954830975,FR +2954830976,2954831103,PL +2954831104,2954831167,PT +2954831168,2954831231,FR +2954831232,2954831263,DE +2954831264,2954831267,FR +2954831268,2954831271,PL +2954831272,2954831275,FR +2954831276,2954831279,IT +2954831280,2954831295,CH +2954831296,2954831327,FR +2954831328,2954831331,PL +2954831332,2954831335,FR +2954831336,2954831339,PL +2954831340,2954831359,DE +2954831360,2954831391,FR +2954831392,2954831399,CZ +2954831400,2954831403,CH +2954831404,2954831407,DE +2954831408,2954831411,ES +2954831412,2954831415,FR +2954831416,2954831423,DE +2954831424,2954831487,FR +2954831488,2954831519,DE +2954831520,2954831527,FR +2954831528,2954831535,PT +2954831536,2954831551,FR +2954831552,2954831583,DE +2954831584,2954831599,ES +2954831600,2954831603,PT +2954831604,2954831607,BE +2954831608,2954831611,FR +2954831612,2954831615,ES +2954831616,2954831647,FR +2954831648,2954831651,GB +2954831652,2954831667,FR +2954831668,2954831671,PL +2954831672,2954831675,DE +2954831676,2954831711,FR +2954831712,2954831743,ES +2954831744,2954831747,FR +2954831748,2954831751,DE +2954831752,2954831759,FR +2954831760,2954831775,FI +2954831776,2954831791,FR +2954831792,2954831799,NL +2954831800,2954831807,FR +2954831808,2954831839,GB +2954831840,2954831919,FR +2954831920,2954831935,IT +2954831936,2954831983,FR +2954831984,2954831999,BE +2954832000,2954832015,FR +2954832016,2954832023,GB +2954832024,2954832063,PL +2954832064,2954832079,IE +2954832080,2954832127,FR +2954832128,2954832135,GB +2954832136,2954832143,PL +2954832144,2954832207,FR +2954832208,2954832211,PT +2954832212,2954832215,FR +2954832216,2954832219,DE +2954832220,2954832223,FR +2954832224,2954832255,BE +2954832256,2954832335,FR +2954832336,2954832343,DE +2954832344,2954832383,FR +2954832384,2954832639,NL +2954832640,2954832647,FR +2954832648,2954832651,ES +2954832652,2954832655,GB +2954832656,2954832671,FR +2954832672,2954832675,DE +2954832676,2954832679,FR +2954832680,2954832687,PL +2954832688,2954832691,GB +2954832692,2954832695,FR +2954832696,2954832699,GB +2954832700,2954832703,CH +2954832704,2954832799,FR +2954832800,2954832823,ES +2954832824,2954832831,FR +2954832832,2954832839,CH +2954832840,2954832847,DE +2954832848,2954832855,GB +2954832856,2954832859,DE +2954832860,2954832863,ES +2954832864,2954832887,FR +2954832888,2954832891,PL +2954832892,2954832895,IE +2954832896,2954832991,FR +2954832992,2954833023,GB +2954833024,2954833071,FR +2954833072,2954833075,PT +2954833076,2954833079,ES +2954833080,2954833083,GB +2954833084,2954833087,ES +2954833088,2954833103,FR +2954833104,2954833111,CZ +2954833112,2954833119,FR +2954833120,2954833151,ES +2954833152,2954833183,FR +2954833184,2954833199,PL +2954833200,2954833207,FR +2954833208,2954833211,CH +2954833212,2954833215,FR +2954833216,2954833219,DE +2954833220,2954833223,IT +2954833224,2954833227,FR +2954833228,2954833231,CH +2954833232,2954833247,ES +2954833248,2954833255,FR +2954833256,2954833259,DE +2954833260,2954833263,PL +2954833264,2954833271,FR +2954833272,2954833275,DE +2954833276,2954833279,ES +2954833280,2954833283,PL +2954833284,2954833287,FR +2954833288,2954833295,IE +2954833296,2954833315,FR +2954833316,2954833319,CZ +2954833320,2954833343,FR +2954833344,2954833375,GB +2954833376,2954833391,FR +2954833392,2954833407,GB +2954833408,2954833419,FR +2954833420,2954833423,DE +2954833424,2954833447,GB +2954833448,2954833455,PT +2954833456,2954833471,ES +2954833472,2954833487,FR +2954833488,2954833503,BE +2954833504,2954833535,GB +2954833536,2954833539,PL +2954833540,2954833543,FR +2954833544,2954833547,ES +2954833548,2954833551,DE +2954833552,2954833555,FR +2954833556,2954833559,IE +2954833560,2954833567,FR +2954833568,2954833583,PL +2954833584,2954833587,FR +2954833588,2954833591,IT +2954833592,2954833595,GB +2954833596,2954833607,FR +2954833608,2954833611,PL +2954833612,2954833615,ES +2954833616,2954833631,GB +2954833632,2954833635,ES +2954833636,2954833639,CZ +2954833640,2954833647,CH +2954833648,2954833663,FI +2954833664,2954833951,GB +2954833952,2954833967,FR +2954833968,2954833983,ES +2954833984,2954833999,FR +2954834000,2954834003,PL +2954834004,2954834007,NL +2954834008,2954834011,FR +2954834012,2954834015,GB +2954834016,2954834047,PL +2954834048,2954834063,GB +2954834064,2954834067,PL +2954834068,2954834071,FR +2954834072,2954834079,PL +2954834080,2954834095,FR +2954834096,2954834099,PL +2954834100,2954834103,FR +2954834104,2954834107,NL +2954834108,2954834111,PT +2954834112,2954834143,FR +2954834144,2954834147,GB +2954834148,2954834431,FR +2954834432,2954834435,PL +2954834436,2954834439,FR +2954834440,2954834443,NL +2954834444,2954834447,LT +2954834448,2954834451,PL +2954834452,2954834459,IT +2954834460,2954834479,GB +2954834480,2954834483,FR +2954834484,2954834491,ES +2954834492,2954834495,NL +2954834496,2954834527,IT +2954834528,2954834531,DE +2954834532,2954834535,PL +2954834536,2954834539,FR +2954834540,2954834575,PL +2954834576,2954834579,GB +2954834580,2954834583,IT +2954834584,2954834591,IE +2954834592,2954834607,FR +2954834608,2954834611,PT +2954834612,2954834615,ES +2954834616,2954834623,FR +2954834624,2954834631,CH +2954834632,2954834635,IT +2954834636,2954834639,FR +2954834640,2954834655,CH +2954834656,2954834663,DE +2954834664,2954834671,ES +2954834672,2954834687,FR +2954834688,2954834691,NL +2954834692,2954834695,PL +2954834696,2954838015,FR +2954838016,2954838019,PL +2954838020,2954838047,FR +2954838048,2954838055,DE +2954838056,2954838087,FR +2954838088,2954838091,IT +2954838092,2954838095,FR +2954838096,2954838099,ES +2954838100,2954838111,FR +2954838112,2954838115,CZ +2954838116,2954838119,GB +2954838120,2954838123,CZ +2954838124,2954838127,IT +2954838128,2954838135,FR +2954838136,2954838139,ES +2954838140,2954838143,CH +2954838144,2954838151,FR +2954838152,2954838159,BE +2954838160,2954838167,FR +2954838168,2954838171,NL +2954838172,2954838175,IT +2954838176,2954838179,GB +2954838180,2954838183,DE +2954838184,2954838191,IT +2954838192,2954838199,NL +2954838200,2954838203,ES +2954838204,2954838207,DE +2954838208,2954838211,ES +2954838212,2954838215,IE +2954838216,2954838219,GB +2954838220,2954838223,ES +2954838224,2954838239,FR +2954838240,2954838263,PL +2954838264,2954838271,IT +2954838272,2954838279,DE +2954838280,2954838287,IT +2954838288,2954838303,BE +2954838304,2954838351,FR +2954838352,2954838367,DE +2954838368,2954838371,FR +2954838372,2954838375,GB +2954838376,2954838379,NL +2954838380,2954838383,PL +2954838384,2954838387,FR +2954838388,2954838391,CH +2954838392,2954838395,GB +2954838396,2954838399,IE +2954838400,2954838431,DE +2954838432,2954838463,FR +2954838464,2954838495,IE +2954838496,2954838527,FR +2954838528,2954838531,IT +2954838532,2954838535,GB +2954838536,2954838539,DE +2954838540,2954838543,CH +2954838544,2954838559,PL +2954838560,2954838575,FR +2954838576,2954838583,GB +2954838584,2954838591,BE +2954838592,2954838599,DE +2954838600,2954838615,GB +2954838616,2954838623,FR +2954838624,2954838639,IT +2954838640,2954838643,GB +2954838644,2954838647,PT +2954838648,2954838655,PL +2954838656,2954838719,IE +2954838720,2954838751,FR +2954838752,2954838767,BE +2954838768,2954838911,FR +2954838912,2954838915,ES +2954838916,2954838927,GB +2954838928,2954838931,FR +2954838932,2954838935,GB +2954838936,2954838939,FR +2954838940,2954838943,PL +2954838944,2954838991,FR +2954838992,2954838999,IE +2954839000,2954839003,GB +2954839004,2954839039,FR +2954839040,2954839107,GB +2954839108,2954839111,BE +2954839112,2954839119,ES +2954839120,2954839127,NL +2954839128,2954839135,GB +2954839136,2954839167,DE +2954839168,2954839199,PL +2954839200,2954839231,FR +2954839232,2954839247,IE +2954839248,2954839251,GB +2954839252,2954839263,FR +2954839264,2954839271,PL +2954839272,2954839279,GB +2954839280,2954839303,FR +2954839304,2954839311,GB +2954839312,2954839319,PL +2954839320,2954839343,GB +2954839344,2954839347,ES +2954839348,2954839351,IT +2954839352,2954839355,NL +2954839356,2954839359,ES +2954839360,2954839363,IT +2954839364,2954839367,GB +2954839368,2954839375,DE +2954839376,2954839383,GB +2954839384,2954839395,FR +2954839396,2954839399,GB +2954839400,2954839403,IT +2954839404,2954839407,FR +2954839408,2954839423,IE +2954839424,2954839455,GB +2954839456,2954839471,FR +2954839472,2954839479,BE +2954839480,2954839483,DE +2954839484,2954839487,FR +2954839488,2954839519,ES +2954839520,2954839523,GB +2954839524,2954839527,PL +2954839528,2954839535,GB +2954839536,2954839543,FR +2954839544,2954839551,ES +2954839552,2954840063,DE +2954840064,2954840095,FR +2954840096,2954840103,ES +2954840104,2954840107,IT +2954840108,2954840111,ES +2954840112,2954840119,FR +2954840120,2954840123,ES +2954840124,2954840127,PL +2954840128,2954840135,FR +2954840136,2954840139,IT +2954840140,2954840143,PL +2954840144,2954840159,IE +2954840160,2954840175,FR +2954840176,2954840179,IE +2954840180,2954840183,IT +2954840184,2954840191,IE +2954840192,2954840223,GB +2954840224,2954840479,PL +2954840480,2954840511,PT +2954840512,2954840519,PL +2954840520,2954840523,FR +2954840524,2954840527,ES +2954840528,2954840543,FR +2954840544,2954840575,ES +2954840576,2954840591,FI +2954840592,2954840607,ES +2954840608,2954840623,FR +2954840624,2954840631,NL +2954840632,2954840639,ES +2954840640,2954840647,FR +2954840648,2954840655,PL +2954840656,2954840663,FR +2954840664,2954840671,PL +2954840672,2954840703,IT +2954840704,2954840719,FR +2954840720,2954840727,GB +2954840728,2954840731,ES +2954840732,2954840743,DE +2954840744,2954840775,GB +2954840776,2954840779,FR +2954840780,2954840783,NL +2954840784,2954840903,FR +2954840904,2954840907,PL +2954840908,2954840911,ES +2954840912,2954840919,DE +2954840920,2954840927,FR +2954840928,2954840931,IT +2954840932,2954840939,FR +2954840940,2954840943,ES +2954840944,2954840959,FR +2954840960,2954841023,IT +2954841024,2954841091,ES +2954841092,2954841095,PL +2954841096,2954841103,GB +2954841104,2954841111,ES +2954841112,2954841151,FR +2954841152,2954841183,ES +2954841184,2954841199,FR +2954841200,2954841207,CH +2954841208,2954841215,FI +2954841216,2954841239,DE +2954841240,2954841247,GB +2954841248,2954841255,PL +2954841256,2954841259,ES +2954841260,2954841263,DE +2954841264,2954841295,FR +2954841296,2954841299,ES +2954841300,2954841307,PL +2954841308,2954841311,GB +2954841312,2954841471,FR +2954841472,2954841503,PL +2954841504,2954841507,DE +2954841508,2954841511,GB +2954841512,2954841519,FR +2954841520,2954841523,PL +2954841524,2954841527,DE +2954841528,2954841535,FR +2954841536,2954841543,GB +2954841544,2954841551,PL +2954841552,2954841559,FR +2954841560,2954841563,FI +2954841564,2954841567,PL +2954841568,2954841591,ES +2954841592,2954841595,DE +2954841596,2954841631,PL +2954841632,2954841635,FR +2954841636,2954841639,CZ +2954841640,2954841643,ES +2954841644,2954841647,PL +2954841648,2954841651,PT +2954841652,2954841655,LT +2954841656,2954841659,FR +2954841660,2954841663,DE +2954841664,2954841667,IE +2954841668,2954841671,NL +2954841672,2954841675,CH +2954841676,2954841683,GB +2954841684,2954841687,PT +2954841688,2954841691,PL +2954841692,2954841695,FR +2954841696,2954841699,IT +2954841700,2954841703,FR +2954841704,2954841711,BE +2954841712,2954841715,FR +2954841716,2954841719,CZ +2954841720,2954841727,DE +2954841728,2954841759,FR +2954841760,2954841783,PL +2954841784,2954841787,CZ +2954841788,2954841795,ES +2954841796,2954841799,FR +2954841800,2954841811,ES +2954841812,2954841815,GB +2954841816,2954841819,FR +2954841820,2954841823,GB +2954841824,2954841851,FR +2954841852,2954841855,ES +2954841856,2954841879,FR +2954841880,2954841887,PL +2954841888,2954841907,FR +2954841908,2954841911,PL +2954841912,2954841919,NL +2954841920,2954841927,GB +2954841928,2954841931,PL +2954841932,2954841935,DE +2954841936,2954841939,BE +2954841940,2954841943,ES +2954841944,2954841951,DE +2954841952,2954841983,ES +2954841984,2954842015,FR +2954842016,2954842031,GB +2954842032,2954842035,CH +2954842036,2954842043,DE +2954842044,2954842047,GB +2954842048,2954842067,FR +2954842068,2954842071,GB +2954842072,2954842095,FR +2954842096,2954842111,IE +2954842112,2954842239,FR +2954842240,2954842243,ES +2954842244,2954842247,FR +2954842248,2954842251,ES +2954842252,2954842255,GB +2954842256,2954842263,FR +2954842264,2954842267,CZ +2954842268,2954842271,FR +2954842272,2954842275,IE +2954842276,2954842279,FR +2954842280,2954842291,PL +2954842292,2954842295,CH +2954842296,2954842299,GB +2954842300,2954842367,ES +2954842368,2954842375,IE +2954842376,2954842403,FR +2954842404,2954842407,IE +2954842408,2954842411,DE +2954842412,2954842431,GB +2954842432,2954842439,FR +2954842440,2954842443,IE +2954842444,2954842447,BE +2954842448,2954842451,ES +2954842452,2954842455,CZ +2954842456,2954842463,NL +2954842464,2954842467,PL +2954842468,2954842479,FR +2954842480,2954842483,IT +2954842484,2954842487,PL +2954842488,2954842491,CH +2954842492,2954842495,FR +2954842496,2954842559,GB +2954842560,2954842655,DE +2954842656,2954842659,ES +2954842660,2954842663,FI +2954842664,2954842667,FR +2954842668,2954842671,IE +2954842672,2954842703,FR +2954842704,2954842719,PL +2954842720,2954842723,FR +2954842724,2954842727,DE +2954842728,2954842731,ES +2954842732,2954842735,LT +2954842736,2954842743,NL +2954842744,2954842751,CH +2954842752,2954842767,PL +2954842768,2954842771,BE +2954842772,2954842775,GB +2954842776,2954842783,FR +2954842784,2954842791,PT +2954842792,2954842799,BE +2954842800,2954842807,ES +2954842808,2954842811,GB +2954842812,2954842815,FI +2954842816,2954842831,PL +2954842832,2954842855,FR +2954842856,2954842863,GB +2954842864,2954842879,FR +2954842880,2954842911,PL +2954842912,2954842919,IT +2954842920,2954842927,PL +2954842928,2954842935,BE +2954842936,2954842943,IE +2954842944,2954842951,CH +2954842952,2954842955,PL +2954842956,2954842959,IT +2954842960,2954842975,FR +2954842976,2954842991,ES +2954842992,2954843007,PL +2954843008,2954843023,FI +2954843024,2954843027,NL +2954843028,2954843031,ES +2954843032,2954843039,IT +2954843040,2954843071,DE +2954843072,2954843103,FR +2954843104,2954843135,NL +2954843136,2954843183,FR +2954843184,2954843187,NL +2954843188,2954843191,GB +2954843192,2954843195,NL +2954843196,2954843199,ES +2954843200,2954843263,FR +2954843264,2954843271,CZ +2954843272,2954843311,FR +2954843312,2954843315,ES +2954843316,2954843319,FR +2954843320,2954843335,IT +2954843336,2954843343,NL +2954843344,2954843347,DE +2954843348,2954843351,GB +2954843352,2954843407,FR +2954843408,2954843415,CH +2954843416,2954843419,PL +2954843420,2954843423,FR +2954843424,2954843439,NL +2954843440,2954843459,FR +2954843460,2954843463,GB +2954843464,2954843471,FR +2954843472,2954843487,GB +2954843488,2954843519,DE +2954843520,2954843535,PL +2954843536,2954843595,FR +2954843596,2954843599,DE +2954843600,2954843603,IT +2954843604,2954843607,PL +2954843608,2954843631,FR +2954843632,2954843639,CH +2954843640,2954843643,IE +2954843644,2954843647,CZ +2954843648,2954843775,ES +2954843776,2954843871,DE +2954843872,2954843887,PL +2954843888,2954843895,BE +2954843896,2954843899,PT +2954843900,2954843903,GB +2954843904,2954844031,PT +2954844032,2954844063,DE +2954844064,2954844095,BE +2954844096,2954844127,IT +2954844128,2954844143,FR +2954844144,2954844147,IT +2954844148,2954844151,FR +2954844152,2954844155,DE +2954844156,2954844175,FR +2954844176,2954844179,LT +2954844180,2954844183,PL +2954844184,2954844187,GB +2954844188,2954844191,ES +2954844192,2954844223,IE +2954844224,2954844263,FR +2954844264,2954844267,DE +2954844268,2954844271,NL +2954844272,2954844275,FR +2954844276,2954844279,GB +2954844280,2954844287,PT +2954844288,2954844351,PL +2954844352,2954844415,FR +2954844416,2954844479,ES +2954844480,2954844543,PT +2954844544,2954844575,PL +2954844576,2954844591,DE +2954844592,2954844599,PL +2954844600,2954844607,NL +2954844608,2954844671,PL +2954844672,2954844687,FR +2954844688,2954844703,CH +2954844704,2954844707,DE +2954844708,2954844719,PT +2954844720,2954844723,ES +2954844724,2954844731,FR +2954844732,2954844735,GB +2954844736,2954844799,DE +2954844800,2954844935,FR +2954844936,2954844947,GB +2954844948,2954844951,IT +2954844952,2954844959,FR +2954844960,2954844967,ES +2954844968,2954844971,BE +2954844972,2954844991,PL +2954844992,2954845055,PT +2954845056,2954845119,ES +2954845120,2954845135,PL +2954845136,2954845151,FR +2954845152,2954845159,PL +2954845160,2954845167,FR +2954845168,2954845183,BE +2954845184,2954845199,PL +2954845200,2954845207,NL +2954845208,2954845211,ES +2954845212,2954845215,CH +2954845216,2954845223,FR +2954845224,2954845231,NL +2954845232,2954845239,DE +2954845240,2954845247,NL +2954845248,2954845263,CH +2954845264,2954845279,PL +2954845280,2954845311,LT +2954845312,2954845315,CH +2954845316,2954845319,BE +2954845320,2954845327,LT +2954845328,2954845343,FR +2954845344,2954845359,FI +2954845360,2954845363,FR +2954845364,2954845367,ES +2954845368,2954845371,NL +2954845372,2954845375,DE +2954845376,2954845407,PL +2954845408,2954845439,FR +2954845440,2954845695,GB +2954845696,2954845951,IT +2954845952,2954845999,FR +2954846000,2954846015,PT +2954846016,2954846047,FR +2954846048,2954846055,NL +2954846056,2954846059,FR +2954846060,2954846063,GB +2954846064,2954846079,NL +2954846080,2954846111,DE +2954846112,2954846119,FR +2954846120,2954846123,IE +2954846124,2954846127,GB +2954846128,2954846135,FR +2954846136,2954846139,DE +2954846140,2954846143,GB +2954846144,2954846191,FR +2954846192,2954846207,FI +2954846208,2954854403,FR +2954854404,2954854407,IT +2954854408,2954854411,FR +2954854412,2954854415,PL +2954854416,2954854431,GB +2954854432,2954854495,FR +2954854496,2954854527,ES +2954854528,2954854619,FR +2954854620,2954854623,ES +2954854624,2954854655,FR +2954854656,2954854659,PL +2954854660,2954854663,CH +2954854664,2954854667,FI +2954854668,2954854691,FR +2954854692,2954854695,IT +2954854696,2954854699,PL +2954854700,2954854703,GB +2954854704,2954854711,FR +2954854712,2954854719,DE +2954854720,2954854783,ES +2954854784,2954854799,FR +2954854800,2954854815,FI +2954854816,2954854847,FR +2954854848,2954854851,PL +2954854852,2954854855,GB +2954854856,2954854863,FR +2954854864,2954854867,NL +2954854868,2954854871,GB +2954854872,2954854879,ES +2954854880,2954854895,FR +2954854896,2954854903,PL +2954854904,2954854919,FR +2954854920,2954854927,PL +2954854928,2954854943,DE +2954854944,2954855007,FR +2954855008,2954855023,IT +2954855024,2954855027,GB +2954855028,2954855031,PL +2954855032,2954855039,GB +2954855040,2954855043,ES +2954855044,2954855047,FR +2954855048,2954855051,PL +2954855052,2954855055,ES +2954855056,2954855059,FR +2954855060,2954855063,ES +2954855064,2954855067,BE +2954855068,2954855071,ES +2954855072,2954855075,FR +2954855076,2954855079,DE +2954855080,2954855087,GB +2954855088,2954855103,FR +2954855104,2954855167,IE +2954855168,2954855199,GB +2954855200,2954855207,FR +2954855208,2954855211,NL +2954855212,2954855215,CH +2954855216,2954855295,FR +2954855296,2954855359,BE +2954855360,2954855391,ES +2954855392,2954855439,FR +2954855440,2954855455,LT +2954855456,2954855479,FR +2954855480,2954855487,IT +2954855488,2954855527,GB +2954855528,2954855535,PT +2954855536,2954855551,FR +2954855552,2954855567,GB +2954855568,2954855571,FR +2954855572,2954855575,BE +2954855576,2954855579,FR +2954855580,2954855583,IT +2954855584,2954855615,FR +2954855616,2954855619,IE +2954855620,2954855623,FR +2954855624,2954855627,IT +2954855628,2954855635,GB +2954855636,2954855639,NL +2954855640,2954855643,PL +2954855644,2954855655,GB +2954855656,2954855659,CH +2954855660,2954855663,DE +2954855664,2954855679,ES +2954855680,2954855695,NL +2954855696,2954855703,FR +2954855704,2954855707,ES +2954855708,2954855711,GB +2954855712,2954855743,PL +2954855744,2954855807,FR +2954855808,2954855871,IE +2954855872,2954855879,FR +2954855880,2954855887,ES +2954855888,2954855903,FR +2954855904,2954855919,PL +2954855920,2954855999,FR +2954856000,2954856063,PL +2954856064,2954856067,FR +2954856068,2954856071,PL +2954856072,2954856079,FR +2954856080,2954856083,ES +2954856084,2954856087,FR +2954856088,2954856095,ES +2954856096,2954856167,FR +2954856168,2954856175,ES +2954856176,2954856187,PL +2954856188,2954856447,FR +2954856448,2954856511,ES +2954856512,2954856551,FR +2954856552,2954856559,IT +2954856560,2954856563,ES +2954856564,2954856567,LT +2954856568,2954856571,FR +2954856572,2954856575,PL +2954856576,2954856583,ES +2954856584,2954856587,FR +2954856588,2954856591,ES +2954856592,2954856607,PL +2954856608,2954856611,BE +2954856612,2954856615,DE +2954856616,2954856619,ES +2954856620,2954856623,GB +2954856624,2954856627,IT +2954856628,2954856635,FR +2954856636,2954856639,DE +2954856640,2954856671,IT +2954856672,2954856687,NL +2954856688,2954856691,BE +2954856692,2954856699,FR +2954856700,2954856959,PL +2954856960,2954856975,ES +2954856976,2954856979,PL +2954856980,2954856983,FR +2954856984,2954856987,GB +2954856988,2954856991,FR +2954856992,2954856999,FI +2954857000,2954857007,PL +2954857008,2954857087,FR +2954857088,2954857091,PL +2954857092,2954857095,CZ +2954857096,2954857099,PL +2954857100,2954857107,GB +2954857108,2954857111,FR +2954857112,2954857115,PL +2954857116,2954857119,IE +2954857120,2954857135,PT +2954857136,2954857143,LT +2954857144,2954857151,ES +2954857152,2954857215,IE +2954857216,2954857343,GB +2954857344,2954857351,ES +2954857352,2954857355,PT +2954857356,2954857359,IT +2954857360,2954857367,FR +2954857368,2954857375,PT +2954857376,2954857383,PL +2954857384,2954857407,GB +2954857408,2954857423,CH +2954857424,2954857431,GB +2954857432,2954857435,IT +2954857436,2954857439,PL +2954857440,2954857471,PT +2954857472,2954857503,FR +2954857504,2954857519,IT +2954857520,2954857523,FR +2954857524,2954857527,IE +2954857528,2954857531,GB +2954857532,2954857535,NL +2954857536,2954857551,CH +2954857552,2954857567,IT +2954857568,2954857571,PL +2954857572,2954857575,PT +2954857576,2954857583,FR +2954857584,2954857599,ES +2954857600,2954857663,IE +2954857664,2954857695,FR +2954857696,2954857699,IE +2954857700,2954857703,ES +2954857704,2954857707,PL +2954857708,2954857711,ES +2954857712,2954857727,IE +2954857728,2954857751,FR +2954857752,2954857755,IE +2954857756,2954857759,PL +2954857760,2954857823,FR +2954857824,2954857855,ES +2954857856,2954857983,IE +2954857984,2954857999,IT +2954858000,2954858015,FR +2954858016,2954858023,PL +2954858024,2954858027,ES +2954858028,2954858031,IT +2954858032,2954858035,DE +2954858036,2954858039,PL +2954858040,2954858043,FR +2954858044,2954858047,IE +2954858048,2954858055,PT +2954858056,2954858059,IE +2954858060,2954858063,PL +2954858064,2954858079,IE +2954858080,2954858095,PT +2954858096,2954858111,ES +2954858112,2954858143,DE +2954858144,2954858175,ES +2954858176,2954858191,PL +2954858192,2954858207,IE +2954858208,2954858239,IT +2954858240,2954858271,NL +2954858272,2954858303,GB +2954858304,2954858335,DE +2954858336,2954858351,IE +2954858352,2954858383,PL +2954858384,2954858415,FR +2954858416,2954858423,ES +2954858424,2954858427,DE +2954858428,2954858431,IE +2954858432,2954858439,GB +2954858440,2954858443,FR +2954858444,2954858447,GB +2954858448,2954858463,IT +2954858464,2954858479,FR +2954858480,2954858483,NL +2954858484,2954858487,DE +2954858488,2954858491,IT +2954858492,2954858495,NL +2954858496,2954858751,ES +2954858752,2954858815,IE +2954858816,2954858819,ES +2954858820,2954858823,PT +2954858824,2954858827,GB +2954858828,2954858831,CZ +2954858832,2954858847,IE +2954858848,2954858863,FR +2954858864,2954858871,ES +2954858872,2954858895,FR +2954858896,2954858911,ES +2954858912,2954858943,DE +2954858944,2954858975,ES +2954858976,2954858991,FR +2954858992,2954859007,GB +2954859008,2954859023,FR +2954859024,2954859027,IT +2954859028,2954859031,PT +2954859032,2954859043,FR +2954859044,2954859055,DE +2954859056,2954859071,FR +2954859072,2954859079,PL +2954859080,2954859103,BE +2954859104,2954859119,PT +2954859120,2954859123,FR +2954859124,2954859127,NL +2954859128,2954859135,PT +2954859136,2954859235,FR +2954859236,2954859239,DE +2954859240,2954859243,ES +2954859244,2954859247,PL +2954859248,2954859263,ES +2954859264,2954859267,FR +2954859268,2954859271,ES +2954859272,2954859275,PL +2954859276,2954859279,ES +2954859280,2954859311,FR +2954859312,2954859315,ES +2954859316,2954859323,FR +2954859324,2954859327,CZ +2954859328,2954859343,GB +2954859344,2954859391,FR +2954859392,2954859423,IT +2954859424,2954859455,GB +2954859456,2954859487,NL +2954859488,2954859495,FR +2954859496,2954859503,IT +2954859504,2954859519,GB +2954859520,2954859551,DE +2954859552,2954859559,FR +2954859560,2954859575,IT +2954859576,2954859583,DE +2954859584,2954859647,FR +2954859648,2954859655,ES +2954859656,2954859663,NL +2954859664,2954859679,FR +2954859680,2954859695,CH +2954859696,2954859703,FR +2954859704,2954859707,GB +2954859708,2954859711,DE +2954859712,2954859775,FR +2954859776,2954859807,PL +2954859808,2954859839,GB +2954859840,2954859903,PL +2954859904,2954859935,DE +2954859936,2954859951,FR +2954859952,2954859955,PL +2954859956,2954859959,GB +2954859960,2954859963,ES +2954859964,2954860031,PL +2954860032,2954860063,DE +2954860064,2954860095,FR +2954860096,2954860103,GB +2954860104,2954860111,FR +2954860112,2954860127,DE +2954860128,2954860131,ES +2954860132,2954860135,FR +2954860136,2954860151,PL +2954860152,2954860167,IE +2954860168,2954860171,PL +2954860172,2954860175,IE +2954860176,2954860183,DE +2954860184,2954860187,FR +2954860188,2954860191,ES +2954860192,2954860223,PT +2954860224,2954860231,BE +2954860232,2954860239,ES +2954860240,2954860255,FR +2954860256,2954860271,IE +2954860272,2954860275,GB +2954860276,2954860319,FR +2954860320,2954860327,DE +2954860328,2954860335,PL +2954860336,2954860351,CH +2954860352,2954860415,FR +2954860416,2954860423,PL +2954860424,2954860427,FR +2954860428,2954860431,IE +2954860432,2954860439,FR +2954860440,2954860443,IT +2954860444,2954860447,FI +2954860448,2954860479,PT +2954860480,2954860483,GB +2954860484,2954860487,FR +2954860488,2954860491,GB +2954860492,2954860511,FR +2954860512,2954860543,DE +2954860544,2954860799,CZ +2954860800,2954860863,IE +2954860864,2954861067,FR +2954861068,2954861071,GB +2954861072,2954861087,FR +2954861088,2954861119,CH +2954861120,2954861143,FR +2954861144,2954861167,ES +2954861168,2954861183,FR +2954861184,2954861191,IT +2954861192,2954861195,FR +2954861196,2954861199,IE +2954861200,2954861215,GB +2954861216,2954861231,FR +2954861232,2954861239,PL +2954861240,2954861247,FR +2954861248,2954861311,PL +2954861312,2954861323,FR +2954861324,2954861327,IT +2954861328,2954861343,NL +2954861344,2954861359,FR +2954861360,2954861363,IE +2954861364,2954861367,FR +2954861368,2954861371,ES +2954861372,2954861375,PT +2954861376,2954861407,DE +2954861408,2954861423,FR +2954861424,2954861431,CH +2954861432,2954861435,FR +2954861436,2954861439,GB +2954861440,2954861571,FR +2954861572,2954861575,GB +2954861576,2954861599,FR +2954861600,2954861615,PT +2954861616,2954861623,FR +2954861624,2954861631,IT +2954861632,2954861635,NL +2954861636,2954861639,GB +2954861640,2954861647,PL +2954861648,2954861651,FR +2954861652,2954861655,GB +2954861656,2954861663,FR +2954861664,2954861671,ES +2954861672,2954861675,NL +2954861676,2954861687,PL +2954861688,2954861691,GB +2954861692,2954861695,FR +2954861696,2954861763,GB +2954861764,2954861767,PL +2954861768,2954861779,FR +2954861780,2954861783,DE +2954861784,2954861787,FR +2954861788,2954861791,PL +2954861792,2954861823,GB +2954861824,2954861827,PL +2954861828,2954861831,GB +2954861832,2954861835,DE +2954861836,2954861839,PL +2954861840,2954861843,GB +2954861844,2954861847,PL +2954861848,2954861863,FR +2954861864,2954861867,NL +2954861868,2954861871,FR +2954861872,2954861887,IE +2954861888,2954861919,PT +2954861920,2954861923,PL +2954861924,2954861927,ES +2954861928,2954861935,FR +2954861936,2954861943,DE +2954861944,2954861955,FR +2954861956,2954861967,GB +2954861968,2954861975,ES +2954861976,2954861983,DE +2954861984,2954862015,GB +2954862016,2954862047,LT +2954862048,2954862143,FR +2954862144,2954862207,ES +2954862208,2954862211,PL +2954862212,2954862215,PT +2954862216,2954862219,FR +2954862220,2954862223,DE +2954862224,2954862239,FR +2954862240,2954862247,IT +2954862248,2954862271,FR +2954862272,2954862303,FI +2954862304,2954870783,FR +2954870784,2954870787,DE +2954870788,2954870799,GB +2954870800,2954870831,FR +2954870832,2954870835,PL +2954870836,2954870839,GB +2954870840,2954870843,DE +2954870844,2954870847,FR +2954870848,2954870863,PL +2954870864,2954870867,GB +2954870868,2954870875,ES +2954870876,2954870879,PL +2954870880,2954870895,IE +2954870896,2954870903,FR +2954870904,2954870907,PL +2954870908,2954870911,ES +2954870912,2954871551,FR +2954871552,2954871583,DE +2954871584,2954871599,GB +2954871600,2954871603,FR +2954871604,2954871607,PL +2954871608,2954871611,BE +2954871612,2954871615,CZ +2954871616,2954871631,ES +2954871632,2954871635,BE +2954871636,2954871639,ES +2954871640,2954871643,FR +2954871644,2954871647,IT +2954871648,2954871667,FR +2954871668,2954871671,PL +2954871672,2954871695,FR +2954871696,2954871703,DE +2954871704,2954871707,CH +2954871708,2954871711,GB +2954871712,2954871743,FR +2954871744,2954871759,PT +2954871760,2954871807,FR +2954871808,2954871823,ES +2954871824,2954871831,FR +2954871832,2954871839,PL +2954871840,2954871887,FR +2954871888,2954871895,GB +2954871896,2954871903,FR +2954871904,2954871919,IE +2954871920,2954871923,ES +2954871924,2954871935,IE +2954871936,2954871939,PL +2954871940,2954871943,GB +2954871944,2954871947,ES +2954871948,2954871951,DE +2954871952,2954871955,ES +2954871956,2954871959,PT +2954871960,2954871963,IE +2954871964,2954871967,FR +2954871968,2954871999,PL +2954872000,2954872323,FR +2954872324,2954872327,PL +2954872328,2954872335,DE +2954872336,2954872351,FR +2954872352,2954872383,DE +2954872384,2954872415,GB +2954872416,2954872419,ES +2954872420,2954872435,PL +2954872436,2954872439,FR +2954872440,2954872447,PL +2954872448,2954872587,FR +2954872588,2954872591,DE +2954872592,2954872607,IT +2954872608,2954872639,FR +2954872640,2954872671,BE +2954872672,2954872675,IE +2954872676,2954872679,ES +2954872680,2954872687,FR +2954872688,2954872703,GB +2954872704,2954872831,DE +2954872832,2954873367,FR +2954873368,2954873375,PL +2954873376,2954873391,FR +2954873392,2954873407,PL +2954873408,2954873447,FR +2954873448,2954873459,PL +2954873460,2954873463,NL +2954873464,2954873467,PL +2954873468,2954873535,FR +2954873536,2954873567,DE +2954873568,2954873583,FR +2954873584,2954873591,ES +2954873592,2954873599,FR +2954873600,2954873631,DE +2954873632,2954873635,NL +2954873636,2954873639,PL +2954873640,2954873647,FR +2954873648,2954873663,PL +2954873664,2954873679,IT +2954873680,2954873695,FR +2954873696,2954873727,ES +2954873728,2954873759,FR +2954873760,2954873791,DE +2954873792,2954873799,FR +2954873800,2954873803,PL +2954873804,2954873807,NL +2954873808,2954873815,DE +2954873816,2954873819,FI +2954873820,2954873831,FR +2954873832,2954873835,IT +2954873836,2954873839,PL +2954873840,2954873847,IT +2954873848,2954873851,GB +2954873852,2954873855,PL +2954873856,2954874111,GB +2954874112,2954874367,FR +2954874368,2954874375,ES +2954874376,2954874387,FR +2954874388,2954874391,PL +2954874392,2954874415,IE +2954874416,2954874419,NL +2954874420,2954874423,FR +2954874424,2954874427,GB +2954874428,2954874431,ES +2954874432,2954874495,FR +2954874496,2954874559,NL +2954874560,2954874567,GB +2954874568,2954874591,FR +2954874592,2954874623,PT +2954874624,2954874627,BE +2954874628,2954874631,FR +2954874632,2954874639,GB +2954874640,2954874647,ES +2954874648,2954874651,FR +2954874652,2954874655,PL +2954874656,2954874671,FR +2954874672,2954874675,PL +2954874676,2954874679,GB +2954874680,2954874687,FR +2954874688,2954874719,IE +2954874720,2954874751,FI +2954874752,2954874799,IE +2954874800,2954874815,GB +2954874816,2954874819,FR +2954874820,2954874823,IT +2954874824,2954874827,FR +2954874828,2954874831,PL +2954874832,2954874855,FR +2954874856,2954874859,DE +2954874860,2954874863,LT +2954874864,2954874867,FR +2954874868,2954874871,PL +2954874872,2954874919,FR +2954874920,2954874923,PL +2954874924,2954874927,FR +2954874928,2954874943,PL +2954874944,2954874975,IE +2954874976,2954874979,PL +2954874980,2954874983,DE +2954874984,2954874987,GB +2954874988,2954874991,PL +2954874992,2954875007,IE +2954875008,2954875039,FR +2954875040,2954875047,PL +2954875048,2954875051,FR +2954875052,2954875055,NL +2954875056,2954875063,IT +2954875064,2954875067,DE +2954875068,2954875071,FI +2954875072,2954875075,NL +2954875076,2954875079,GB +2954875080,2954875095,FR +2954875096,2954875099,GB +2954875100,2954875103,PL +2954875104,2954875183,FR +2954875184,2954875191,GB +2954875192,2954875199,FR +2954875200,2954875203,PL +2954875204,2954875207,DE +2954875208,2954875215,NL +2954875216,2954875231,FR +2954875232,2954875263,ES +2954875264,2954875295,FR +2954875296,2954875311,PL +2954875312,2954875327,FR +2954875328,2954875359,PL +2954875360,2954875383,FR +2954875384,2954875391,DE +2954875392,2954875463,ES +2954875464,2954875467,NL +2954875468,2954875471,GB +2954875472,2954875487,FR +2954875488,2954875491,LT +2954875492,2954875495,GB +2954875496,2954875503,IT +2954875504,2954875519,FR +2954875520,2954875543,PL +2954875544,2954875551,FR +2954875552,2954875583,PL +2954875584,2954875587,ES +2954875588,2954875591,IT +2954875592,2954875599,FR +2954875600,2954875615,PT +2954875616,2954875623,PL +2954875624,2954875627,DE +2954875628,2954875631,ES +2954875632,2954875639,FR +2954875640,2954875647,BE +2954875648,2954875651,ES +2954875652,2954875655,BE +2954875656,2954875659,FR +2954875660,2954875663,PT +2954875664,2954875671,ES +2954875672,2954875679,FR +2954875680,2954875711,PT +2954875712,2954875775,IE +2954875776,2954875903,PT +2954875904,2954875907,IT +2954875908,2954875911,CH +2954875912,2954875919,ES +2954875920,2954875935,FR +2954875936,2954875951,PL +2954875952,2954875999,IE +2954876000,2954876031,GB +2954876032,2954876039,IT +2954876040,2954876043,FR +2954876044,2954876047,GB +2954876048,2954876051,ES +2954876052,2954876055,NL +2954876056,2954876059,PL +2954876060,2954876063,ES +2954876064,2954876079,FR +2954876080,2954876095,PL +2954876096,2954876111,FR +2954876112,2954876119,IE +2954876120,2954876123,CZ +2954876124,2954876127,NL +2954876128,2954876147,FR +2954876148,2954876151,BE +2954876152,2954876159,FR +2954876160,2954876167,FI +2954876168,2954876175,NL +2954876176,2954876191,FR +2954876192,2954876223,PT +2954876224,2954876231,FR +2954876232,2954876235,PL +2954876236,2954876239,IE +2954876240,2954876247,PL +2954876248,2954876287,ES +2954876288,2954876351,FR +2954876352,2954876383,ES +2954876384,2954876391,FR +2954876392,2954876395,DE +2954876396,2954876399,IE +2954876400,2954876403,GB +2954876404,2954876407,NL +2954876408,2954876411,LT +2954876412,2954876415,DE +2954876416,2954876575,PT +2954876576,2954876579,ES +2954876580,2954876583,FR +2954876584,2954876587,ES +2954876588,2954876591,DE +2954876592,2954876639,IE +2954876640,2954876643,DE +2954876644,2954876647,IT +2954876648,2954876655,FR +2954876656,2954876671,BE +2954876672,2954876703,PT +2954876704,2954876719,FR +2954876720,2954876727,GB +2954876728,2954876731,PL +2954876732,2954876735,DE +2954876736,2954876767,IT +2954876768,2954876783,GB +2954876784,2954876795,FR +2954876796,2954876799,DE +2954876800,2954876863,IE +2954876864,2954876895,DE +2954876896,2954876899,GB +2954876900,2954876903,IT +2954876904,2954876959,FR +2954876960,2954876975,DE +2954876976,2954876983,PL +2954876984,2954876987,FR +2954876988,2954876991,ES +2954876992,2954877007,PL +2954877008,2954877023,CZ +2954877024,2954877027,ES +2954877028,2954877031,PL +2954877032,2954877035,FR +2954877036,2954877039,GB +2954877040,2954877055,FR +2954877056,2954877059,PL +2954877060,2954877063,GB +2954877064,2954877071,DE +2954877072,2954877087,CH +2954877088,2954877119,GB +2954877120,2954877151,ES +2954877152,2954877159,NL +2954877160,2954877163,PL +2954877164,2954877167,FR +2954877168,2954877183,DE +2954877184,2954877455,FR +2954877456,2954877459,PT +2954877460,2954877463,FR +2954877464,2954877471,DE +2954877472,2954877503,FR +2954877504,2954877519,ES +2954877520,2954877523,BE +2954877524,2954877527,ES +2954877528,2954877535,PT +2954877536,2954877539,PL +2954877540,2954877547,FR +2954877548,2954877551,PL +2954877552,2954877583,FR +2954877584,2954877595,DE +2954877596,2954877599,PT +2954877600,2954877615,PL +2954877616,2954877631,NL +2954877632,2954877647,FR +2954877648,2954877651,PL +2954877652,2954877655,DE +2954877656,2954877663,FR +2954877664,2954877667,GB +2954877668,2954877671,PL +2954877672,2954877675,FR +2954877676,2954877679,PL +2954877680,2954877727,FR +2954877728,2954877743,IE +2954877744,2954877779,FR +2954877780,2954877783,A1 +2954877784,2954877791,IT +2954877792,2954877819,FR +2954877820,2954877823,PL +2954877824,2954877963,FR +2954877964,2954877967,DE +2954877968,2954877983,PT +2954877984,2954877991,LT +2954877992,2954877995,FR +2954877996,2954877999,PL +2954878000,2954878007,FR +2954878008,2954878011,IT +2954878012,2954878015,GB +2954878016,2954878031,FR +2954878032,2954878035,NL +2954878036,2954878039,FR +2954878040,2954878047,PL +2954878048,2954878063,FR +2954878064,2954878079,IT +2954878080,2954878095,FR +2954878096,2954878103,ES +2954878104,2954878111,FR +2954878112,2954878143,PT +2954878144,2954878207,FR +2954878208,2954878463,ES +2954878464,2954878471,CH +2954878472,2954878475,FR +2954878476,2954878495,NL +2954878496,2954878499,GB +2954878500,2954878511,FR +2954878512,2954878559,IE +2954878560,2954878575,FR +2954878576,2954878579,GB +2954878580,2954878583,DE +2954878584,2954878591,GB +2954878592,2954878607,BE +2954878608,2954878623,FI +2954878624,2954878631,PL +2954878632,2954878635,IT +2954878636,2954878639,FR +2954878640,2954878655,IT +2954878656,2954878687,PL +2954878688,2954878695,FR +2954878696,2954878703,IE +2954878704,2954878707,IT +2954878708,2954878711,PL +2954878712,2954878719,ES +2954878720,2954878763,FR +2954878764,2954878767,GB +2954878768,2954878783,FR +2954878784,2954878847,IE +2954878848,2954878855,FR +2954878856,2954878863,IE +2954878864,2954878879,IT +2954878880,2954878883,ES +2954878884,2954878887,PL +2954878888,2954878891,FR +2954878892,2954878895,GB +2954878896,2954878899,DE +2954878900,2954878903,GB +2954878904,2954878911,FR +2954878912,2954878915,DE +2954878916,2954878919,PL +2954878920,2954878931,FR +2954878932,2954878939,GB +2954878940,2954878943,PL +2954878944,2954887167,FR +2954887168,2954891263,UA +2954891264,2954895359,IT +2954895360,2954897407,RU +2954897408,2954899455,DE +2954899456,2954901503,ES +2954901504,2954903551,IT +2954903552,2954905599,NL +2954905600,2954907647,IE +2954907648,2954909695,GB +2954909696,2954911743,DE +2954911744,2954918911,IE +2954918912,2954919423,NL +2954919424,2954919935,IE +2954919936,2954928127,RU +2954928128,2954932223,PL +2954932224,2954936319,RU +2954936320,2954938367,AM +2954938368,2954940415,HU +2954940416,2954940658,DE +2954940659,2954940662,PL +2954940663,2954940666,DE +2954940667,2954940670,PL +2954940671,2954940927,DE +2954940928,2954940931,RO +2954940932,2954940935,DE +2954940936,2954940939,TR +2954940940,2954940943,DE +2954940944,2954940947,TR +2954940948,2954940963,DE +2954940964,2954940967,TR +2954940968,2954940987,DE +2954940988,2954940991,TR +2954940992,2954941011,DE +2954941012,2954941015,TR +2954941016,2954941035,DE +2954941036,2954941039,TR +2954941040,2954941047,DE +2954941048,2954941051,RO +2954941052,2954941063,DE +2954941064,2954941071,TR +2954941072,2954941091,DE +2954941092,2954941095,TR +2954941096,2954941115,DE +2954941116,2954941119,TR +2954941120,2954941139,DE +2954941140,2954941143,TR +2954941144,2954941147,DE +2954941148,2954941151,GR +2954941152,2954941163,DE +2954941164,2954941167,TR +2954941168,2954941171,DE +2954941172,2954941175,TR +2954941176,2954941187,DE +2954941188,2954941191,TR +2954941192,2954941193,DE +2954941194,2954941197,GR +2954941198,2954941209,DE +2954941210,2954941213,TR +2954941214,2954941219,DE +2954941220,2954941223,TR +2954941224,2954941243,DE +2954941244,2954941247,TR +2954941248,2954941267,DE +2954941268,2954941271,TR +2954941272,2954941291,DE +2954941292,2954941295,TR +2954941296,2954941314,DE +2954941315,2954941318,RO +2954941319,2954941319,DE +2954941320,2954941323,TR +2954941324,2954941330,DE +2954941331,2954941334,TR +2954941335,2954941413,DE +2954941414,2954941417,GR +2954941418,2954941429,DE +2954941430,2954941433,TR +2954941434,2954941447,DE +2954941448,2954941451,RO +2954941452,2954941463,DE +2954941464,2954941467,TR +2954941468,2954941547,DE +2954941548,2954941551,GR +2954941552,2954941563,DE +2954941564,2954941567,TR +2954941568,2954941647,DE +2954941648,2954941651,GR +2954941652,2954941663,DE +2954941664,2954941667,TR +2954941668,2954941703,DE +2954941704,2954941707,GR +2954941708,2954941719,DE +2954941720,2954941723,TR +2954941724,2954941727,GR +2954941728,2954941739,DE +2954941740,2954941743,TR +2954941744,2954941803,DE +2954941804,2954941807,GR +2954941808,2954941819,DE +2954941820,2954941823,TR +2954941824,2954941873,DE +2954941874,2954941877,RO +2954941878,2954941889,DE +2954941890,2954941893,TR +2954941894,2954941903,DE +2954941904,2954941907,RO +2954941908,2954941919,DE +2954941920,2954941923,TR +2954941924,2954941935,DE +2954941936,2954941939,RO +2954941940,2954941951,DE +2954941952,2954941955,GR +2954941956,2954941961,DE +2954941962,2954941965,ES +2954941966,2954941967,DE +2954941968,2954941971,TR +2954941972,2954942041,DE +2954942042,2954942045,GR +2954942046,2954942057,DE +2954942058,2954942058,TR +2954942059,2954942108,DE +2954942109,2954942112,ES +2954942113,2954942151,DE +2954942152,2954942155,RO +2954942156,2954942167,DE +2954942168,2954942171,TR +2954942172,2954942191,DE +2954942192,2954942195,TR +2954942196,2954942227,DE +2954942228,2954942231,RO +2954942232,2954942243,DE +2954942244,2954942247,TR +2954942248,2954942347,DE +2954942348,2954942351,GR +2954942352,2954942363,DE +2954942364,2954942367,TR +2954942368,2954942427,DE +2954942428,2954942431,TR +2954942432,2954942441,DE +2954942442,2954942445,TR +2954942446,2954942457,DE +2954942458,2954942461,RO +2954942462,2954942471,DE +2954942472,2954942475,GR +2954942476,2954942479,DE +2954942480,2954942483,ES +2954942484,2954942487,DE +2954942488,2954942491,TR +2954942492,2954942563,DE +2954942564,2954942567,TR +2954942568,2954942571,DE +2954942572,2954942575,RO +2954942576,2954942587,DE +2954942588,2954942591,TR +2954942592,2954942654,DE +2954942655,2954942658,ES +2954942659,2954942671,DE +2954942672,2954942675,GR +2954942676,2954942687,DE +2954942688,2954942691,TR +2954942692,2954942719,DE +2954942720,2954942723,TR +2954942724,2954942727,DE +2954942728,2954942731,RO +2954942732,2954942743,DE +2954942744,2954942747,TR +2954942748,2954942839,DE +2954942840,2954942843,FR +2954942844,2954942847,TR +2954942848,2954942851,FR +2954942852,2954942871,GB +2954942872,2954942875,FR +2954942876,2954942943,DE +2954942944,2954942947,TR +2954942948,2954942979,DE +2954942980,2954942983,TR +2954942984,2954943003,DE +2954943004,2954943007,TR +2954943008,2954943027,DE +2954943028,2954943031,TR +2954943032,2954943051,DE +2954943052,2954943055,TR +2954943056,2954943075,DE +2954943076,2954943079,TR +2954943080,2954943099,DE +2954943100,2954943103,TR +2954943104,2954943123,DE +2954943124,2954943127,TR +2954943128,2954943146,DE +2954943147,2954943150,TR +2954943151,2954943170,DE +2954943171,2954943174,TR +2954943175,2954943194,DE +2954943195,2954943198,TR +2954943199,2954943218,DE +2954943219,2954943222,TR +2954943223,2954943235,DE +2954943236,2954943239,TR +2954943240,2954943259,DE +2954943260,2954943263,TR +2954943264,2954943283,DE +2954943284,2954943287,TR +2954943288,2954943307,DE +2954943308,2954943311,TR +2954943312,2954943331,DE +2954943332,2954943335,TR +2954943336,2954943355,DE +2954943356,2954943359,TR +2954943360,2954943379,DE +2954943380,2954943383,TR +2954943384,2954943403,DE +2954943404,2954943407,TR +2954943408,2954943427,DE +2954943428,2954943431,TR +2954943432,2954943451,DE +2954943452,2954943455,TR +2954943456,2954943475,DE +2954943476,2954943479,TR +2954943480,2954943491,DE +2954943492,2954943495,TR +2954943496,2954943515,DE +2954943516,2954943519,TR +2954943520,2954943539,DE +2954943540,2954943543,TR +2954943544,2954943547,DE +2954943548,2954943563,GB +2954943564,2954943567,TR +2954943568,2954943583,GB +2954943584,2954943587,DE +2954943588,2954943591,TR +2954943592,2954943603,GB +2954943604,2954943611,FR +2954943612,2954943615,TR +2954943616,2954943623,FR +2954943624,2954943635,DE +2954943636,2954943639,TR +2954943640,2954943659,DE +2954943660,2954943663,TR +2954943664,2954943683,DE +2954943684,2954943687,TR +2954943688,2954943707,DE +2954943708,2954943711,TR +2954943712,2954943731,DE +2954943732,2954943735,TR +2954943736,2954943743,DE +2954943744,2954943823,GB +2954943824,2954943903,DE +2954943904,2954943943,FR +2954943944,2954943999,DE +2954944000,2954944007,RO +2954944008,2954944511,DE +2954944512,2954946559,GB +2954946560,2954948607,DE +2954948608,2954950655,RU +2954950656,2954952703,ES +2954952704,2955018239,TR +2955018240,2955026431,FR +2955026432,2955034623,NL +2955034624,2955051007,IE +2955051008,2955067391,NL +2955067392,2955069439,IE +2955069440,2955071487,NL +2955071488,2955073535,IE +2955073536,2955075583,FR +2955075584,2955083775,NL +2955083776,2955149311,GB +2955149312,2955411455,UA +2955411456,2955673599,TR +2955673600,2955804671,SA +2955804672,2955837439,EE +2955837440,2955845631,IR +2955845632,2955853823,GB +2955853824,2955870207,CH +2955870208,2955935743,UA +2955935744,2956230655,RU +2956230656,2956238847,SI +2956238848,2956242943,ES +2956242944,2956244991,SE +2956244992,2956247039,FR +2956247040,2956251135,DE +2956251136,2956253183,GB +2956253184,2956255231,IE +2956255232,2956259327,FR +2956259328,2956261375,DE +2956261376,2956263423,ES +2956263424,2956296191,TR +2956296192,2956328959,RU +2956328960,2956460031,TR +2956460032,2956468223,RU +2956468224,2956470271,LV +2956470272,2956472319,NL +2956472320,2956474367,RU +2956474368,2956476415,GB +2956476416,2956492799,ES +2956492800,2956496895,CH +2956496896,2956500991,IR +2956500992,2956504831,RU +2956504832,2956505087,GB +2956505088,2956507135,RU +2956507136,2956508159,NL +2956508160,2956508415,RU +2956508416,2956508671,FR +2956508672,2956509183,NL +2956509184,2956517375,GB +2956517376,2956521471,NL +2956521472,2956525567,SE +2956525568,2956533759,JO +2956533760,2956535807,FR +2956535808,2956537855,LV +2956537856,2956541951,UA +2956541952,2956543999,FR +2956544000,2956546047,RU +2956546048,2956548095,FR +2956548096,2956550143,ME +2956550144,2956554239,ES +2956554240,2956558335,IT +2956558336,2956574719,DE +2956574720,2956576767,SE +2956576768,2956578815,ES +2956578816,2956582911,RU +2956582912,2956587007,CH +2956587008,2956589055,FR +2956589056,2956593151,GB +2956593152,2956595199,ES +2956595200,2956597247,PL +2956597248,2956599295,NL +2956599296,2956607487,RU +2956607488,2956611583,PS +2956611584,2956613631,IT +2956613632,2956613887,GB +2956613888,2956614143,NL +2956614144,2956614399,FR +2956614400,2956615679,EU +2956615680,2956623871,GB +2956623872,2956656639,GR +2956656640,2956722175,RU +2956722176,2956787711,BY +2956787712,2956820479,IE +2956820480,2956822527,NL +2956822528,2956823551,SE +2956823552,2956824575,US +2956824576,2956826623,PT +2956826624,2956827647,US +2956827648,2956828671,DK +2956828672,2956828767,BA +2956828768,2956828799,AT +2956828800,2956828943,BA +2956828944,2956828959,AT +2956828960,2956828991,BA +2956828992,2956829055,AT +2956829056,2956829695,BA +2956829696,2956836863,AT +2956836864,2956853247,SK +2956853248,2956865535,HR +2956865536,2956869631,IT +2956869632,2956886015,RU +2956886016,2956888063,GB +2956888064,2956890111,BE +2956890112,2956892159,IR +2956892160,2956894207,IT +2956894208,2956896767,BE +2956896768,2956898303,NL +2956898304,2956902399,RU +2956902400,2956904447,NL +2956904448,2956906495,DK +2956906496,2956908543,GB +2956908544,2956910591,RU +2956910592,2956914687,CZ +2956914688,2956918783,RU +2956918784,2956984319,HU +2956984320,2957049855,SE +2957049856,2957058047,PS +2957058048,2957066239,RU +2957066240,2957068287,GB +2957068288,2957070335,LU +2957070336,2957074431,IT +2957074432,2957082623,RU +2957082624,2957093887,DE +2957093888,2957096959,CH +2957096960,2957105912,DE +2957105913,2957105918,AT +2957105919,2957106168,DE +2957106169,2957106174,AT +2957106175,2957106424,DE +2957106425,2957106430,AT +2957106431,2957106680,DE +2957106681,2957106686,AT +2957106687,2957106936,DE +2957106937,2957106942,AT +2957106943,2957107192,DE +2957107193,2957107198,AT +2957107199,2957107448,DE +2957107449,2957107454,AT +2957107455,2957107704,DE +2957107705,2957107710,AT +2957107711,2957107960,DE +2957107961,2957107966,AT +2957107967,2957108216,DE +2957108217,2957108222,AT +2957108223,2957108472,DE +2957108473,2957108478,AT +2957108479,2957108728,DE +2957108729,2957108734,AT +2957108735,2957108984,DE +2957108985,2957108990,AT +2957108991,2957109240,DE +2957109241,2957109246,AT +2957109247,2957109496,DE +2957109497,2957109502,AT +2957109503,2957109752,DE +2957109753,2957109758,AT +2957109759,2957110008,DE +2957110009,2957110014,AT +2957110015,2957110264,DE +2957110265,2957110270,AT +2957110271,2957110520,DE +2957110521,2957110526,AT +2957110527,2957110776,DE +2957110777,2957110782,AT +2957110783,2957111032,DE +2957111033,2957111038,AT +2957111039,2957111288,DE +2957111289,2957111294,AT +2957111295,2957111544,DE +2957111545,2957111550,AT +2957111551,2957111800,DE +2957111801,2957111806,AT +2957111807,2957112056,DE +2957112057,2957112062,AT +2957112063,2957112312,DE +2957112313,2957112318,AT +2957112319,2957112568,DE +2957112569,2957112574,AT +2957112575,2957112824,DE +2957112825,2957112830,AT +2957112831,2957113080,DE +2957113081,2957113086,AT +2957113087,2957113336,DE +2957113337,2957113342,AT +2957113343,2957113592,DE +2957113593,2957113598,AT +2957113599,2957113848,DE +2957113849,2957113854,AT +2957113855,2957114104,DE +2957114105,2957114110,AT +2957114111,2957114360,DE +2957114361,2957114366,AT +2957114367,2957114616,DE +2957114617,2957114622,AT +2957114623,2957114872,DE +2957114873,2957114878,AT +2957114879,2957115128,DE +2957115129,2957115134,AT +2957115135,2957115391,DE +2957115392,2957180927,AT +2957180928,2957189119,UA +2957189120,2957193215,LV +2957193216,2957195263,RU +2957195264,2957197311,PS +2957197312,2957201407,IR +2957201408,2957201423,GB +2957201424,2957201427,IE +2957201428,2957201431,DK +2957201432,2957201435,CH +2957201436,2957201468,BR +2957201469,2957201727,US +2957201728,2957201743,CA +2957201744,2957201759,MX +2957201760,2957201775,BR +2957201776,2957201791,AR +2957201792,2957201807,BS +2957201808,2957201823,VE +2957201824,2957201839,AU +2957201840,2957201855,JP +2957201856,2957201871,HK +2957201872,2957201887,RU +2957201888,2957201903,KR +2957201904,2957201919,TW +2957201920,2957202175,US +2957202176,2957202179,GB +2957202180,2957202183,BR +2957202184,2957202187,CA +2957202188,2957202431,US +2957202432,2957202463,GB +2957202464,2957202467,PL +2957202468,2957202471,KR +2957202472,2957202475,BR +2957202476,2957202479,EG +2957202480,2957202483,ZA +2957202484,2957202487,IS +2957202488,2957202491,CA +2957202492,2957202495,IL +2957202496,2957202499,DE +2957202500,2957202503,AR +2957202504,2957202507,NZ +2957202508,2957202511,DE +2957202512,2957202527,NO +2957202528,2957202543,SE +2957202544,2957202551,FI +2957202552,2957202559,EE +2957202560,2957202567,LV +2957202568,2957202575,LT +2957202576,2957202583,BY +2957202584,2957202591,UA +2957202592,2957202599,RO +2957202600,2957202607,BG +2957202608,2957202615,GR +2957202616,2957202623,TR +2957202624,2957202627,AT +2957202628,2957202631,IT +2957202632,2957202639,CH +2957202640,2957202643,LU +2957202644,2957202647,BE +2957202648,2957202651,NL +2957202652,2957202667,DK +2957202668,2957202671,FR +2957202672,2957202675,US +2957202676,2957202679,ES +2957202680,2957202683,PT +2957202684,2957202687,AU +2957202688,2957202691,RU +2957202692,2957202699,IE +2957202700,2957202703,JP +2957202704,2957202944,US +2957202945,2957202947,AL +2957202948,2957202951,AD +2957202952,2957202955,AR +2957202956,2957202959,AU +2957202960,2957202963,BY +2957202964,2957202967,BE +2957202968,2957202971,BA +2957202972,2957202975,BR +2957202976,2957202979,BG +2957202980,2957202983,CL +2957202984,2957202987,CN +2957202988,2957202991,CO +2957202992,2957202995,CR +2957202996,2957202999,HR +2957203000,2957203003,CY +2957203004,2957203007,CZ +2957203008,2957203011,DK +2957203012,2957203015,EG +2957203016,2957203019,EE +2957203020,2957203023,FJ +2957203024,2957203027,FI +2957203028,2957203031,FR +2957203032,2957203035,GE +2957203036,2957203039,DE +2957203040,2957203043,GR +2957203044,2957203047,HK +2957203048,2957203051,HU +2957203052,2957203055,IS +2957203056,2957203059,IN +2957203060,2957203063,IE +2957203064,2957203067,IL +2957203068,2957203071,IT +2957203072,2957203075,JP +2957203076,2957203079,KR +2957203080,2957203083,LV +2957203084,2957203087,LI +2957203088,2957203091,LT +2957203092,2957203095,LU +2957203096,2957203099,MK +2957203100,2957203103,MY +2957203104,2957203107,MX +2957203108,2957203111,NL +2957203112,2957203115,NZ +2957203116,2957203119,NO +2957203120,2957203123,US +2957203124,2957203127,MT +2957203128,2957203131,RS +2957203132,2957203196,GB +2957203197,2957203199,US +2957203200,2957203203,AU +2957203204,2957203207,US +2957203208,2957203211,SE +2957203212,2957203215,FR +2957203216,2957203219,ZA +2957203220,2957203223,CH +2957203224,2957203227,DE +2957203228,2957203231,PL +2957203232,2957203263,GB +2957203264,2957203455,US +2957203456,2957205503,FR +2957205504,2957213695,PS +2957213696,2957221887,FR +2957221888,2957228031,GB +2957228032,2957230079,DK +2957230080,2957238271,RS +2957238272,2957240319,CZ +2957240320,2957242367,BG +2957242368,2957244415,RU +2957244416,2957246463,HU +2957246464,2957508607,SE +2957508608,2957574143,FI +2957574144,2957639679,GE +2957639680,2957641727,GB +2957641728,2957643775,RU +2957643776,2957647871,GB +2957647872,2957649919,FR +2957649920,2957651967,CH +2957651968,2957654015,AE +2957654016,2957656063,DE +2957656064,2957672447,GE +2957672448,2957680639,CZ +2957680640,2957688831,GB +2957688832,2957690879,SE +2957690880,2957692927,RU +2957692928,2957694975,NO +2957694976,2957697023,CZ +2957697024,2957705215,NL +2957705216,2957770751,NO +2957770752,2957836287,SI +2957836288,2957869055,RU +2957869056,2957901823,HU +2957901824,2958032895,PT +2958032896,2958557183,ES +2958557184,2958819327,TR +2958819328,2958884863,GR +2958884864,2958950399,FI +2958950400,2959081471,DE +2959081472,2959089663,RU +2959089664,2959093759,PL +2959093760,2959097855,RO +2959097856,2959099903,RU +2959099904,2959101951,UA +2959101952,2959103999,RU +2959104000,2959106047,RO +2959106048,2959114239,AT +2959114240,2959118335,RU +2959118336,2959120383,PL +2959120384,2959122431,AT +2959122432,2959126527,PL +2959126528,2959128575,RO +2959128576,2959130623,RU +2959130624,2959138815,UA +2959138816,2959147007,RU +2959147008,2959149055,UA +2959149056,2959151103,CZ +2959151104,2959155199,PL +2959155200,2959159295,RU +2959159296,2959161343,PL +2959161344,2959163391,RO +2959163392,2959167487,UA +2959167488,2959171583,PL +2959171584,2959175679,RU +2959175680,2959179775,UA +2959179776,2959181823,RU +2959181824,2959183871,PL +2959183872,2959187967,RO +2959187968,2959204351,RU +2959204352,2959208447,RO +2959208448,2959210495,CZ +2959210496,2959212543,PL +2959212544,2959220735,UA +2959220736,2959224831,RO +2959224832,2959226879,UA +2959226880,2959228927,RO +2959228928,2959237119,UA +2959237120,2959241215,CZ +2959241216,2959245311,PL +2959245312,2959253503,RU +2959253504,2959255551,DE +2959255552,2959261695,RU +2959261696,2959278079,KZ +2959278080,2959343615,DE +2959343616,2959351807,UA +2959351808,2959353855,DE +2959353856,2959355903,RU +2959355904,2959357951,RO +2959357952,2959359999,UA +2959360000,2959384575,RU +2959384576,2959392767,UA +2959392768,2959394815,PL +2959394816,2959398911,ES +2959398912,2959400959,RU +2959400960,2959405055,ES +2959409152,2959413247,UA +2959413248,2959417343,ES +2959417344,2959423487,IR +2959423488,2959427583,RU +2959427584,2959429631,ES +2959429632,2959431679,PL +2959431680,2959433727,RU +2959433728,2959441919,UA +2959441920,2959446015,PL +2959446016,2959450111,CZ +2959450112,2959452159,PL +2959452160,2959454207,RO +2959454208,2959456255,SK +2959456256,2959466495,UA +2959466496,2959474687,RU +2959474688,2959491071,FR +2959491072,2959493119,GB +2959493120,2959495167,CZ +2959495168,2959499263,PL +2959499264,2959505407,SK +2959505408,2959507455,RO +2959507456,2959515647,CZ +2959515648,2959517695,RU +2959517696,2959519743,DE +2959519744,2959523839,PL +2959523840,2959532031,UA +2959532032,2959540223,IR +2961178624,2965372927,FR +2965372928,2965766143,RU +2965766144,2965897215,DE +2965897216,2966028287,IT +2966028288,2966159359,QA +2966159360,2966290431,AE +2966290432,2966421503,IT +2966421504,2966945791,RU +2966945792,2967273471,TR +2967273472,2967277567,RU +2967277568,2967281663,IR +2967281664,2967283711,PT +2967283712,2967285759,DE +2967285760,2967287807,UA +2967287808,2967289855,GB +2967289856,2967291903,IR +2967291904,2967293951,RS +2967293952,2967295999,SE +2967296000,2967298047,NO +2967298048,2967306239,PL +2967306240,2967339007,GE +2967339008,2967343103,BG +2967343104,2967345151,RU +2967345152,2967347199,ES +2967347200,2967351295,HR +2967351296,2967355391,FR +2967355392,2967371775,RO +2967371776,2967388159,KZ +2967388160,2967392255,RU +2967392256,2967394303,FR +2967394304,2967396351,RU +2967396352,2967398399,CZ +2967398400,2967400447,DK +2967400448,2967404543,RU +2967404544,2967470079,RO +2967470080,2967601151,SA +2967601152,2967633919,HU +2967633920,2967666687,RU +2967666688,2967699455,TR +2967699456,2967701503,GB +2967701504,2967703551,A2 +2967703552,2967707647,ES +2967707648,2967709695,PL +2967709696,2967711743,IT +2967711744,2967715839,RU +2967715840,2967724031,GB +2967724032,2967728127,CY +2967728128,2967730175,GB +2967730176,2967732223,CZ +2967732224,2967994367,IL +2967994368,2968584191,TR +2968584192,2968600575,HU +2968600576,2968602623,IQ +2968602624,2968604671,PL +2968604672,2968608767,IQ +2969042944,2969567231,GB +2969567232,2977955839,BR 2986344448,2987393023,DE 2987393024,2987397119,IM 2987397120,2987401215,LV @@ -61235,16 +76861,18 @@ 2987417600,2987425791,PL 2987425792,2987429887,BG 2987429888,2987433215,RU -2987433216,2987433235,KZ -2987433236,2987433239,RU -2987433240,2987433287,KZ +2987433216,2987433287,KZ 2987433288,2987433291,RU 2987433292,2987433331,KZ 2987433332,2987433335,RU 2987433336,2987433339,KZ 2987433340,2987433347,RU -2987433348,2987433351,KZ -2987433352,2987433407,RU +2987433348,2987433359,KZ +2987433360,2987433367,RU +2987433368,2987433379,KZ +2987433380,2987433383,RU +2987433384,2987433391,KZ +2987433392,2987433407,RU 2987433408,2987433471,KZ 2987433472,2987433983,RU 2987433984,2987438079,FR @@ -61256,20 +76884,18 @@ 2987458560,2987462655,CZ 2987462656,2987466751,RS 2987466752,2987470847,GB -2987470848,2987474943,DE +2987470848,2987474943,IQ 2987474944,2987479039,GB 2987479040,2987487231,CZ 2987487232,2987491327,HR 2987491328,2987495423,RU 2987495424,2987499519,NO -2987499520,2987500103,MD -2987500104,2987500111,US -2987500112,2987500239,MD -2987500240,2987500255,DE -2987500256,2987503615,MD +2987499520,2987503615,MD 2987503616,2987511807,RU 2987511808,2987515903,JO -2987515904,2987519999,A2 +2987515904,2987519487,A2 +2987519488,2987519743,KE +2987519744,2987519999,A2 2987520000,2987524095,GB 2987524096,2987528191,RU 2987528192,2987529215,US @@ -61281,7 +76907,10 @@ 2987548672,2987552767,RU 2987552768,2987556863,GB 2987556864,2987560959,NL -2987560960,2987565055,DE +2987560960,2987562239,DE +2987562240,2987562263,CY +2987562264,2987562275,SE +2987562276,2987565055,DE 2987565056,2987569151,AT 2987569152,2987573247,FR 2987573248,2987577343,TR @@ -61300,7 +76929,8 @@ 2987585872,2987585879,MX 2987585880,2987585887,BR 2987585888,2987585895,PL -2987585896,2987589631,DE +2987585896,2987589119,DE +2987589120,2987589631,US 2987589632,2987593727,FR 2987593728,2987597823,LT 2987597824,2987601919,ES @@ -61319,8 +76949,7 @@ 2987655168,2987658367,DE 2987658368,2987658383,AT 2987658384,2987659263,DE -2987659264,2987660799,BA -2987660800,2987661311,SI +2987659264,2987661311,BA 2987661312,2987663359,GB 2987663360,2987665407,IT 2987665408,2987667455,RU @@ -61368,7 +76997,7 @@ 2987755520,2987757567,PL 2987757568,2987759615,DE 2987759616,2987761663,PL -2987761664,2987763711,DK +2987761664,2987763711,IR 2987763712,2987765759,GR 2987765760,2987767807,FR 2987767808,2987769855,CZ @@ -61384,7 +77013,8 @@ 2987788288,2987788543,GB 2987788544,2987788799,DE 2987788800,2987789055,US -2987789056,2987790335,TR +2987789056,2987789311,GB +2987789312,2987790335,TR 2987790336,2987792383,GB 2987792384,2987794431,CH 2987794432,2987796479,IQ @@ -61397,7 +77027,8 @@ 2987810816,2987812863,NO 2987812864,2987814911,CH 2987814912,2987816959,CZ -2987816960,2987819007,NL +2987816960,2987817983,NL +2987817984,2987819007,GB 2987819008,2987821055,FR 2987821056,2987823103,GB 2987823104,2987827199,FR @@ -61448,9 +77079,16 @@ 2987917312,2988179455,DE 2988179456,2988441599,SE 2988441600,2988441603,CH -2988441604,2988441655,FR -2988441656,2988441663,DE -2988441664,2988441839,FR +2988441604,2988441607,GB +2988441608,2988441615,CH +2988441616,2988441647,FR +2988441648,2988441663,DE +2988441664,2988441695,IT +2988441696,2988441791,FR +2988441792,2988441807,PL +2988441808,2988441815,FR +2988441816,2988441819,FI +2988441820,2988441839,FR 2988441840,2988441843,PL 2988441844,2988441847,BE 2988441848,2988441855,FR @@ -61458,9 +77096,12 @@ 2988441888,2988441895,FR 2988441896,2988441903,PL 2988441904,2988441911,IT -2988441912,2988441915,DE -2988441916,2988441919,ES -2988441920,2988441951,FR +2988441912,2988441919,ES +2988441920,2988441931,PL +2988441932,2988441935,BE +2988441936,2988441939,FR +2988441940,2988441943,ES +2988441944,2988441951,FR 2988441952,2988441967,PL 2988441968,2988441971,NL 2988441972,2988441975,CH @@ -61468,27 +77109,43 @@ 2988441980,2988441983,IT 2988441984,2988441991,FR 2988441992,2988441995,ES -2988441996,2988442003,FR +2988441996,2988441999,PT +2988442000,2988442003,PL 2988442004,2988442007,ES 2988442008,2988442047,FR 2988442048,2988442063,GB 2988442064,2988442067,FR 2988442068,2988442071,BE 2988442072,2988442075,FR -2988442076,2988442079,GB -2988442080,2988442399,FR +2988442076,2988442083,GB +2988442084,2988442087,DE +2988442088,2988442095,FR +2988442096,2988442099,IT +2988442100,2988442399,FR 2988442400,2988442431,ES 2988442432,2988442439,CZ 2988442440,2988442447,ES 2988442448,2988442463,GB -2988442464,2988442623,FR -2988442624,2988442639,NL -2988442640,2988442647,PL +2988442464,2988442495,FR +2988442496,2988442503,PL +2988442504,2988442507,DE +2988442508,2988442511,GB +2988442512,2988442519,ES +2988442520,2988442527,DE +2988442528,2988442559,FR +2988442560,2988442583,PL +2988442584,2988442587,FR +2988442588,2988442591,ES +2988442592,2988442623,DE +2988442624,2988442647,PL 2988442648,2988442651,DE 2988442652,2988442655,GB -2988442656,2988442671,IT +2988442656,2988442671,PL 2988442672,2988442675,GB -2988442676,2988442895,FR +2988442676,2988442687,FR +2988442688,2988442695,PL +2988442696,2988442703,PT +2988442704,2988442895,FR 2988442896,2988442899,PL 2988442900,2988442903,FR 2988442904,2988442907,IT @@ -61498,9 +77155,11 @@ 2988442920,2988442923,LT 2988442924,2988442927,GB 2988442928,2988442975,FR -2988442976,2988443007,GB +2988442976,2988442995,GB +2988442996,2988442999,IE +2988443000,2988443007,GB 2988443008,2988443023,PT -2988443024,2988443027,NL +2988443024,2988443027,CZ 2988443028,2988443031,BE 2988443032,2988443035,GB 2988443036,2988443039,BE @@ -61510,7 +77169,7 @@ 2988443088,2988443111,PL 2988443112,2988443119,ES 2988443120,2988443391,FR -2988443392,2988443407,GB +2988443392,2988443407,DE 2988443408,2988443439,FR 2988443440,2988443443,CZ 2988443444,2988443447,DE @@ -61519,7 +77178,7 @@ 2988443488,2988443539,FR 2988443540,2988443547,ES 2988443548,2988443551,IT -2988443552,2988443555,FR +2988443552,2988443555,CH 2988443556,2988443559,PL 2988443560,2988443563,GB 2988443564,2988443567,PL @@ -61531,12 +77190,15 @@ 2988443924,2988443927,PL 2988443928,2988444167,FR 2988444168,2988444171,CZ -2988444172,2988444199,FR -2988444200,2988444203,DE +2988444172,2988444175,FR +2988444176,2988444191,PT +2988444192,2988444199,FR +2988444200,2988444203,FI 2988444204,2988444207,NL 2988444208,2988444415,FR 2988444416,2988444679,ES -2988444680,2988444695,PL +2988444680,2988444687,FR +2988444688,2988444695,LT 2988444696,2988444703,FR 2988444704,2988444719,GB 2988444720,2988444735,ES @@ -61551,8 +77213,8 @@ 2988444800,2988444927,ES 2988444928,2988444931,PL 2988444932,2988444943,DE -2988444944,2988444959,PL -2988444960,2988444999,FR +2988444944,2988444967,PL +2988444968,2988444999,FR 2988445000,2988445007,PL 2988445008,2988445023,FR 2988445024,2988445027,PL @@ -61561,17 +77223,23 @@ 2988445036,2988445039,PL 2988445040,2988445119,FR 2988445120,2988445127,ES -2988445128,2988445151,FR -2988445152,2988445183,IT +2988445128,2988445139,FR +2988445140,2988445143,GB +2988445144,2988445151,IT +2988445152,2988445167,FR +2988445168,2988445183,ES 2988445184,2988445951,DE 2988445952,2988445967,FR 2988445968,2988445983,GB 2988445984,2988446207,DE 2988446208,2988446271,PL 2988446272,2988446275,IT -2988446276,2988446287,FR -2988446288,2988446303,GB -2988446304,2988446307,FR +2988446276,2988446279,FR +2988446280,2988446287,BE +2988446288,2988446291,FR +2988446292,2988446295,ES +2988446296,2988446299,GB +2988446300,2988446307,FR 2988446308,2988446319,PL 2988446320,2988446323,FR 2988446324,2988446327,LT @@ -61587,18 +77255,18 @@ 2988447924,2988447927,IT 2988447928,2988447935,PL 2988447936,2988447943,DE -2988447944,2988447947,NL -2988447948,2988447951,DE -2988447952,2988447955,GB -2988447956,2988447959,BE +2988447944,2988447947,GB +2988447948,2988447959,FR 2988447960,2988447967,IT 2988447968,2988447999,GB 2988448000,2988448127,DE 2988448128,2988448255,ES 2988448256,2988448511,DE -2988448512,2988448519,FR +2988448512,2988448515,GB +2988448516,2988448519,FR 2988448520,2988448543,PL -2988448544,2988448551,FR +2988448544,2988448547,GB +2988448548,2988448551,FR 2988448552,2988448559,PL 2988448560,2988448563,DE 2988448564,2988448575,ES @@ -61606,9 +77274,8 @@ 2988448608,2988448639,ES 2988448640,2988448671,GB 2988448672,2988448691,IT -2988448692,2988448695,DE -2988448696,2988448699,IT -2988448700,2988448703,LT +2988448692,2988448699,DE +2988448700,2988448703,NL 2988448704,2988448767,GB 2988448768,2988448783,FR 2988448784,2988448815,PL @@ -61617,25 +77284,32 @@ 2988448896,2988448899,PT 2988448900,2988448903,PL 2988448904,2988448907,ES -2988448908,2988448959,FR -2988448960,2988448991,DE -2988448992,2988449007,FR +2988448908,2988449007,FR 2988449008,2988449023,GB 2988449024,2988449055,PL -2988449056,2988449087,ES +2988449056,2988449087,FR 2988449088,2988449103,PL 2988449104,2988449119,DE 2988449120,2988449123,FR 2988449124,2988449127,DE 2988449128,2988449135,ES 2988449136,2988449151,FR -2988449152,2988449279,PL -2988449280,2988449535,GB +2988449152,2988449167,PL +2988449168,2988449175,GB +2988449176,2988449183,FR +2988449184,2988449199,PL +2988449200,2988449203,FR +2988449204,2988449207,PL +2988449208,2988449215,ES +2988449216,2988449247,FR +2988449248,2988449535,GB 2988449536,2988449579,FR 2988449580,2988449583,PL 2988449584,2988449631,FR -2988449632,2988449647,ES -2988449648,2988449663,GB +2988449632,2988449639,ES +2988449640,2988449643,CH +2988449644,2988449647,CZ +2988449648,2988449663,FR 2988449664,2988449695,DE 2988449696,2988449727,IT 2988449728,2988449743,BE @@ -61648,7 +77322,7 @@ 2988457988,2988457991,PL 2988457992,2988457995,CH 2988457996,2988457999,FR -2988458000,2988458015,GB +2988458000,2988458015,DE 2988458016,2988458031,FR 2988458032,2988458047,IT 2988458048,2988458055,PL @@ -61658,10 +77332,13 @@ 2988458076,2988458111,PL 2988458112,2988458255,FR 2988458256,2988458271,IT -2988458272,2988458287,PL -2988458288,2988458295,FR +2988458272,2988458275,GB +2988458276,2988458279,FI +2988458280,2988458283,ES +2988458284,2988458295,FR 2988458296,2988458299,GB -2988458300,2988458319,ES +2988458300,2988458303,ES +2988458304,2988458319,FR 2988458320,2988458323,CZ 2988458324,2988458331,FR 2988458332,2988458335,GB @@ -61670,14 +77347,14 @@ 2988458400,2988458431,PL 2988458432,2988458495,FR 2988458496,2988458751,GB -2988458752,2988459007,FR +2988458752,2988458759,FR +2988458760,2988458763,NL +2988458764,2988458767,ES +2988458768,2988459007,FR 2988459008,2988459015,PL 2988459016,2988459019,DE 2988459020,2988459023,GB -2988459024,2988459027,BE -2988459028,2988459031,CH -2988459032,2988459035,CZ -2988459036,2988459039,ES +2988459024,2988459039,IE 2988459040,2988459051,FR 2988459052,2988459055,ES 2988459056,2988459071,CH @@ -61689,27 +77366,31 @@ 2988459104,2988459111,FR 2988459112,2988459119,ES 2988459120,2988459127,IT -2988459128,2988459135,PL -2988459136,2988459167,IT +2988459128,2988459151,PL +2988459152,2988459167,FR 2988459168,2988459171,IE -2988459172,2988459183,FR +2988459172,2988459175,FR +2988459176,2988459179,PL +2988459180,2988459183,FR 2988459184,2988459199,PL -2988459200,2988459215,FR -2988459216,2988459219,DE -2988459220,2988459223,FR -2988459224,2988459227,DE -2988459228,2988459231,ES -2988459232,2988459235,IT +2988459200,2988459223,FR +2988459224,2988459231,DE +2988459232,2988459235,GB 2988459236,2988459239,PL 2988459240,2988459243,FR 2988459244,2988459247,ES -2988459248,2988459251,FR -2988459252,2988459255,BE +2988459248,2988459251,LT +2988459252,2988459255,GB 2988459256,2988459259,FR -2988459260,2988459263,NL +2988459260,2988459263,PL 2988459264,2988459519,ES -2988459520,2988459583,DE -2988459584,2988459599,FR +2988459520,2988459535,FR +2988459536,2988459539,GB +2988459540,2988459543,PL +2988459544,2988459547,ES +2988459548,2988459551,PL +2988459552,2988459583,FR +2988459584,2988459599,ES 2988459600,2988459603,GB 2988459604,2988459615,FR 2988459616,2988459631,CZ @@ -61723,10 +77404,10 @@ 2988459692,2988459695,PL 2988459696,2988459711,FR 2988459712,2988459715,ES -2988459716,2988459723,FR -2988459724,2988459727,DE +2988459716,2988459719,FR +2988459720,2988459727,DE 2988459728,2988459731,FR -2988459732,2988459735,BE +2988459732,2988459735,ES 2988459736,2988459743,PL 2988459744,2988459747,ES 2988459748,2988459751,PL @@ -61735,20 +77416,18 @@ 2988459768,2988459771,NL 2988459772,2988459775,GB 2988459776,2988459839,FR -2988459840,2988459855,GB -2988459856,2988459863,FR -2988459864,2988459867,ES -2988459868,2988459871,GB -2988459872,2988459887,FR -2988459888,2988459895,PL +2988459840,2988459855,IT +2988459856,2988459859,GB +2988459860,2988459863,FR +2988459864,2988459871,ES +2988459872,2988459895,PL 2988459896,2988459967,FR 2988459968,2988459999,ES 2988460000,2988460015,NL 2988460016,2988460031,FR 2988460032,2988460063,DE 2988460064,2988460095,FR -2988460096,2988460103,ES -2988460104,2988460107,PL +2988460096,2988460107,PL 2988460108,2988460111,DE 2988460112,2988460119,FR 2988460120,2988460123,DE @@ -61757,8 +77436,7 @@ 2988460132,2988460135,CZ 2988460136,2988460143,FR 2988460144,2988460147,GB -2988460148,2988460151,FR -2988460152,2988460159,ES +2988460148,2988460159,ES 2988460160,2988460191,GB 2988460192,2988460195,FR 2988460196,2988460199,CZ @@ -61773,9 +77451,11 @@ 2988460276,2988460279,NL 2988460280,2988460287,PL 2988460288,2988460323,FR -2988460324,2988460335,PL -2988460336,2988460351,DE -2988460352,2988460367,GB +2988460324,2988460327,GB +2988460328,2988460335,PL +2988460336,2988460339,FR +2988460340,2988460343,GB +2988460344,2988460367,FR 2988460368,2988460375,PL 2988460376,2988460543,FR 2988460544,2988460547,GB @@ -61784,28 +77464,29 @@ 2988460576,2988460591,PT 2988460592,2988460607,GB 2988460608,2988460615,IT -2988460616,2988460619,CZ -2988460620,2988460623,IT +2988460616,2988460623,PT 2988460624,2988460679,FR 2988460680,2988460687,DE -2988460688,2988460719,FR -2988460720,2988460735,ES -2988460736,2988460759,FR -2988460760,2988460763,PT -2988460764,2988460767,FR +2988460688,2988460755,FR +2988460756,2988460759,PT +2988460760,2988460767,FR 2988460768,2988460799,PL 2988460800,2988460863,DE 2988460864,2988460927,FR -2988460928,2988460931,DE +2988460928,2988460931,ES 2988460932,2988460943,PL 2988460944,2988460959,DE 2988460960,2988460991,GB -2988460992,2988461087,FR -2988461088,2988461103,PL -2988461104,2988461119,FR -2988461120,2988461151,NL -2988461152,2988461247,GB -2988461248,2988461255,FR +2988460992,2988460999,NL +2988461000,2988461003,FR +2988461004,2988461007,NL +2988461008,2988461023,FR +2988461024,2988461027,NL +2988461028,2988461035,ES +2988461036,2988461055,FR +2988461056,2988461087,PL +2988461088,2988461103,DE +2988461104,2988461255,FR 2988461256,2988461259,IT 2988461260,2988461263,PT 2988461264,2988461279,PL @@ -61825,7 +77506,7 @@ 2988461424,2988461431,IT 2988461432,2988461435,PT 2988461436,2988461439,BE -2988461440,2988461471,ES +2988461440,2988461471,FI 2988461472,2988461475,PL 2988461476,2988461479,IE 2988461480,2988461483,CZ @@ -61833,23 +77514,28 @@ 2988461488,2988461491,FR 2988461492,2988461495,PL 2988461496,2988461499,ES -2988461500,2988461503,BE +2988461500,2988461503,PT 2988461504,2988461519,PL -2988461520,2988461523,GB +2988461520,2988461523,DE 2988461524,2988461559,FR 2988461560,2988461567,GB -2988461568,2988461599,FR -2988461600,2988461615,BE +2988461568,2988461583,FR +2988461584,2988461587,ES +2988461588,2988461591,GB +2988461592,2988461595,ES +2988461596,2988461599,GB +2988461600,2988461615,FR 2988461616,2988461623,IT 2988461624,2988461695,FR 2988461696,2988461699,DE -2988461700,2988461703,FR -2988461704,2988461707,NL +2988461700,2988461703,PL +2988461704,2988461707,GB 2988461708,2988461711,BE 2988461712,2988461719,FR 2988461720,2988461723,DE -2988461724,2988461735,FR -2988461736,2988461743,DE +2988461724,2988461727,FR +2988461728,2988461731,PL +2988461732,2988461743,DE 2988461744,2988461747,ES 2988461748,2988461751,IT 2988461752,2988461755,FR @@ -61863,26 +77549,30 @@ 2988461824,2988461839,PL 2988461840,2988461851,FR 2988461852,2988461855,PL -2988461856,2988461859,FI +2988461856,2988461859,CH 2988461860,2988461871,DE 2988461872,2988461879,FR 2988461880,2988461883,ES -2988461884,2988461887,IT -2988461888,2988461903,FR -2988461904,2988461911,ES -2988461912,2988461935,FR +2988461884,2988461887,PL +2988461888,2988461907,FR +2988461908,2988461911,ES +2988461912,2988461915,IT +2988461916,2988461919,NL +2988461920,2988461935,FR 2988461936,2988461951,GB 2988461952,2988462087,PL -2988462088,2988462095,DE -2988462096,2988462127,FR +2988462088,2988462091,IT +2988462092,2988462095,PL +2988462096,2988462119,FR +2988462120,2988462123,PL +2988462124,2988462127,GB 2988462128,2988462131,ES 2988462132,2988462143,FR 2988462144,2988462151,PL 2988462152,2988462155,IT 2988462156,2988462159,NL -2988462160,2988462163,DE -2988462164,2988462167,ES -2988462168,2988462171,PT +2988462160,2988462167,ES +2988462168,2988462171,PL 2988462172,2988462175,ES 2988462176,2988462191,PL 2988462192,2988462199,FR @@ -61893,7 +77583,8 @@ 2988462312,2988462319,FR 2988462320,2988462323,IT 2988462324,2988462327,DE -2988462328,2988462335,FR +2988462328,2988462331,GB +2988462332,2988462335,FR 2988462336,2988462463,ES 2988462464,2988462495,GB 2988462496,2988462527,DE @@ -61909,8 +77600,9 @@ 2988462752,2988462767,PL 2988462768,2988462775,GB 2988462776,2988462779,PL -2988462780,2988462783,FR -2988462784,2988462799,DE +2988462780,2988462787,FR +2988462788,2988462795,PL +2988462796,2988462799,DE 2988462800,2988462815,FR 2988462816,2988462823,BE 2988462824,2988462847,FR @@ -61918,7 +77610,8 @@ 2988463104,2988463107,IT 2988463108,2988463111,FR 2988463112,2988463119,ES -2988463120,2988463127,GB +2988463120,2988463123,GB +2988463124,2988463127,ES 2988463128,2988463131,FR 2988463132,2988463135,PL 2988463136,2988463143,NL @@ -61931,13 +77624,16 @@ 2988463204,2988463207,DE 2988463208,2988463211,FR 2988463212,2988463223,GB -2988463224,2988463227,FR +2988463224,2988463227,ES 2988463228,2988463231,CH -2988463232,2988463263,NL +2988463232,2988463251,FR +2988463252,2988463255,PL +2988463256,2988463259,IE +2988463260,2988463263,CH 2988463264,2988463279,PL 2988463280,2988463283,GB 2988463284,2988463315,FR -2988463316,2988463319,DE +2988463316,2988463319,PL 2988463320,2988463323,FR 2988463324,2988463331,DE 2988463332,2988463335,IT @@ -61953,7 +77649,8 @@ 2988463652,2988463659,GB 2988463660,2988463663,FR 2988463664,2988463679,PL -2988463680,2988463743,FR +2988463680,2988463711,DE +2988463712,2988463743,FR 2988463744,2988463747,BE 2988463748,2988463759,FR 2988463760,2988463775,DE @@ -61965,9 +77662,12 @@ 2988463832,2988463835,DE 2988463836,2988463839,FR 2988463840,2988463871,PL -2988463872,2988463915,FR +2988463872,2988463907,FR +2988463908,2988463915,PL 2988463916,2988463919,GB -2988463920,2988463947,FR +2988463920,2988463939,FR +2988463940,2988463943,DE +2988463944,2988463947,FR 2988463948,2988463951,GB 2988463952,2988463999,FR 2988464000,2988464007,IE @@ -61978,46 +77678,65 @@ 2988464028,2988464031,PL 2988464032,2988464055,FR 2988464056,2988464059,ES -2988464060,2988464063,FR +2988464060,2988464063,CZ 2988464064,2988464095,PL -2988464096,2988464303,FR +2988464096,2988464271,FR +2988464272,2988464275,ES +2988464276,2988464279,PL +2988464280,2988464283,FR +2988464284,2988464287,PL +2988464288,2988464299,FR +2988464300,2988464303,GB 2988464304,2988464307,IT -2988464308,2988464351,FR +2988464308,2988464311,PL +2988464312,2988464351,FR 2988464352,2988464355,DE 2988464356,2988464359,FR 2988464360,2988464363,PL 2988464364,2988464367,GB -2988464368,2988464511,FR -2988464512,2988464519,PT -2988464520,2988464527,FR +2988464368,2988464383,IE +2988464384,2988464527,FR 2988464528,2988464543,DE 2988464544,2988464551,FR -2988464552,2988464575,ES +2988464552,2988464555,IT +2988464556,2988464559,NL +2988464560,2988464575,ES 2988464576,2988464591,GB 2988464592,2988464607,FR 2988464608,2988464611,DE -2988464612,2988464615,PL -2988464616,2988464619,FR +2988464612,2988464619,PL 2988464620,2988464623,ES 2988464624,2988464627,FR 2988464628,2988464631,IT -2988464632,2988464639,GB -2988464640,2988464783,FR +2988464632,2988464779,FR +2988464780,2988464783,PL 2988464784,2988464787,IT 2988464788,2988464791,ES -2988464792,2988464799,FR +2988464792,2988464795,FR +2988464796,2988464799,GB 2988464800,2988464815,DE 2988464816,2988464819,FR -2988464820,2988464823,NL -2988464824,2988464831,PL +2988464820,2988464823,GB +2988464824,2988464827,ES +2988464828,2988464831,PL 2988464832,2988464895,ES -2988464896,2988464927,NL -2988464928,2988464947,FR +2988464896,2988464911,PL +2988464912,2988464915,FR +2988464916,2988464919,DE +2988464920,2988464923,FI +2988464924,2988464927,FR +2988464928,2988464943,ES +2988464944,2988464947,FR 2988464948,2988464951,CH 2988464952,2988464955,FR 2988464956,2988464959,GB -2988464960,2988465215,FR -2988465216,2988465223,ES +2988464960,2988464963,IT +2988464964,2988464967,LT +2988464968,2988464971,PT +2988464972,2988464975,PL +2988464976,2988465215,FR +2988465216,2988465219,ES +2988465220,2988465223,IE 2988465224,2988465235,FR 2988465236,2988465239,ES 2988465240,2988465279,FR @@ -62034,8 +77753,8 @@ 2988465404,2988465407,DE 2988465408,2988465423,CH 2988465424,2988465439,PT -2988465440,2988465471,GB -2988465472,2988465479,FR +2988465440,2988465455,GB +2988465456,2988465479,FR 2988465480,2988465483,NL 2988465484,2988465503,FR 2988465504,2988465507,DE @@ -62063,46 +77782,91 @@ 2988465620,2988465623,ES 2988465624,2988465631,FR 2988465632,2988465647,IT -2988465648,2988465663,CZ +2988465648,2988465655,CZ +2988465656,2988465663,GB 2988465664,2988466047,FR 2988466048,2988466111,PL 2988466112,2988466115,FR 2988466116,2988466127,NL -2988466128,2988466131,PT +2988466128,2988466131,PL 2988466132,2988466139,FR 2988466140,2988466143,PL -2988466144,2988466175,NL -2988466176,2988476415,FR +2988466144,2988466159,NL +2988466160,2988476415,FR 2988476416,2988478463,IT -2988478464,2988482935,FR -2988482936,2988482939,PL +2988478464,2988482559,FR +2988482560,2988482567,ES +2988482568,2988482579,FR +2988482580,2988482591,ES +2988482592,2988482607,PL +2988482608,2988482631,FR +2988482632,2988482639,PL +2988482640,2988482647,FR +2988482648,2988482651,CZ +2988482652,2988482655,GB +2988482656,2988482763,FR +2988482764,2988482767,GB +2988482768,2988482775,PL +2988482776,2988482779,NL +2988482780,2988482783,PL +2988482784,2988482799,FR +2988482800,2988482807,ES +2988482808,2988482811,GB +2988482812,2988482815,FR +2988482816,2988482819,NL +2988482820,2988482823,DE +2988482824,2988482831,PL +2988482832,2988482835,IE +2988482836,2988482839,PL +2988482840,2988482843,ES +2988482844,2988482847,NL +2988482848,2988482863,FR +2988482864,2988482871,ES +2988482872,2988482875,PT +2988482876,2988482879,CZ +2988482880,2988482887,PL +2988482888,2988482891,ES +2988482892,2988482895,PL +2988482896,2988482927,GB +2988482928,2988482931,FR +2988482932,2988482939,PL 2988482940,2988482943,LT 2988482944,2988482959,PL 2988482960,2988482975,CZ -2988482976,2988482987,DE -2988482988,2988483079,FR -2988483080,2988483087,IT -2988483088,2988483091,FR +2988482976,2988482979,DE +2988482980,2988482983,GB +2988482984,2988482987,DE +2988482988,2988483031,FR +2988483032,2988483035,DE +2988483036,2988483039,LT +2988483040,2988483091,FR 2988483092,2988483095,BE 2988483096,2988483099,FR -2988483100,2988483103,DE -2988483104,2988483111,ES -2988483112,2988483115,FR +2988483100,2988483103,PL +2988483104,2988483107,IE +2988483108,2988483111,PL +2988483112,2988483115,ES 2988483116,2988483119,PL -2988483120,2988483135,GB +2988483120,2988483127,ES +2988483128,2988483135,PL 2988483136,2988483151,FR -2988483152,2988483155,CH +2988483152,2988483155,PL 2988483156,2988483159,FR 2988483160,2988483167,ES 2988483168,2988483199,GB -2988483200,2988483267,FR +2988483200,2988483231,FR +2988483232,2988483235,IE +2988483236,2988483263,PL +2988483264,2988483267,FR 2988483268,2988483271,NL 2988483272,2988483279,DE 2988483280,2988483283,ES 2988483284,2988483295,DE 2988483296,2988483299,FR 2988483300,2988483303,NL -2988483304,2988483319,FR +2988483304,2988483311,FR +2988483312,2988483315,GB +2988483316,2988483319,NL 2988483320,2988483327,PL 2988483328,2988483335,BE 2988483336,2988483343,DE @@ -62110,15 +77874,16 @@ 2988483352,2988483359,FR 2988483360,2988483367,ES 2988483368,2988483375,PL -2988483376,2988483383,GB +2988483376,2988483383,ES 2988483384,2988483427,FR 2988483428,2988483431,BE -2988483432,2988483435,FR -2988483436,2988483439,DE -2988483440,2988483447,FR +2988483432,2988483447,FR 2988483448,2988483455,DE 2988483456,2988483711,FR -2988483712,2988483743,PL +2988483712,2988483727,PL +2988483728,2988483735,FR +2988483736,2988483739,DE +2988483740,2988483743,FR 2988483744,2988483767,GB 2988483768,2988483775,FR 2988483776,2988483871,PL @@ -62131,36 +77896,138 @@ 2988483952,2988483963,IT 2988483964,2988483967,FR 2988483968,2988483983,IE -2988483984,2988483987,DE -2988483988,2988483991,NL -2988483992,2988483999,FR -2988484000,2988484003,GB -2988484004,2988484007,DE +2988483984,2988483991,DE +2988483992,2988483995,GB +2988483996,2988483999,PT +2988484000,2988484003,DE +2988484004,2988484007,GB 2988484008,2988484011,FR 2988484012,2988484015,IE -2988484016,2988484031,FR +2988484016,2988484019,FR +2988484020,2988484023,ES +2988484024,2988484031,FR 2988484032,2988484039,IT 2988484040,2988484047,NL -2988484048,2988484095,FR +2988484048,2988484051,ES +2988484052,2988484095,GB 2988484096,2988484111,DE 2988484112,2988484127,FR 2988484128,2988484131,PT 2988484132,2988484135,PL 2988484136,2988484143,NL -2988484144,2988484159,FR -2988484160,2988484163,GB +2988484144,2988484163,FR 2988484164,2988484167,PT -2988484168,2988484191,ES +2988484168,2988484175,ES +2988484176,2988484187,FR +2988484188,2988484191,PL 2988484192,2988484207,DE 2988484208,2988484223,FR 2988484224,2988484239,ES -2988484240,2988484243,DE +2988484240,2988484243,PL 2988484244,2988484287,FR 2988484288,2988484351,PL -2988484352,2988485887,FR +2988484352,2988484383,GB +2988484384,2988484391,CZ +2988484392,2988484395,PT +2988484396,2988484399,PL +2988484400,2988484403,PT +2988484404,2988484427,PL +2988484428,2988484431,GB +2988484432,2988484439,PL +2988484440,2988484443,ES +2988484444,2988484447,FR +2988484448,2988484463,SN +2988484464,2988484471,FR +2988484472,2988484475,PL +2988484476,2988484479,FR +2988484480,2988484511,PL +2988484512,2988484543,IT +2988484544,2988484591,FR +2988484592,2988484607,PL +2988484608,2988484775,FR +2988484776,2988484783,PL +2988484784,2988484831,FR +2988484832,2988484847,PL +2988484848,2988484863,FR +2988484864,2988484879,ES +2988484880,2988484883,GB +2988484884,2988484887,PL +2988484888,2988484891,FR +2988484892,2988484895,GB +2988484896,2988484927,FR +2988484928,2988484959,PT +2988484960,2988484967,FR +2988484968,2988484971,GB +2988484972,2988484991,FR +2988484992,2988485007,LT +2988485008,2988485023,PL +2988485024,2988485039,IE +2988485040,2988485055,PL +2988485056,2988485071,FR +2988485072,2988485087,IE +2988485088,2988485119,PL +2988485120,2988485135,FR +2988485136,2988485151,PL +2988485152,2988485167,IT +2988485168,2988485183,FR +2988485184,2988485247,BE +2988485248,2988485255,IT +2988485256,2988485263,NL +2988485264,2988485267,DE +2988485268,2988485271,CH +2988485272,2988485279,FR +2988485280,2988485311,PL +2988485312,2988485327,IT +2988485328,2988485335,FI +2988485336,2988485343,PT +2988485344,2988485347,ES +2988485348,2988485351,IT +2988485352,2988485355,GB +2988485356,2988485359,PL +2988485360,2988485439,FR +2988485440,2988485455,PL +2988485456,2988485471,ES +2988485472,2988485479,FR +2988485480,2988485487,IT +2988485488,2988485503,FR +2988485504,2988485519,GB +2988485520,2988485559,FR +2988485560,2988485567,NL +2988485568,2988485583,GB +2988485584,2988485587,IT +2988485588,2988485591,BE +2988485592,2988485599,FR +2988485600,2988485607,PL +2988485608,2988485611,FR +2988485612,2988485615,PL +2988485616,2988485631,GB +2988485632,2988485663,ES +2988485664,2988485671,PL +2988485672,2988485675,DE +2988485676,2988485683,FR +2988485684,2988485687,PL +2988485688,2988485691,GB +2988485692,2988485695,PL +2988485696,2988485759,FR +2988485760,2988485767,GB +2988485768,2988485791,FR +2988485792,2988485795,PT +2988485796,2988485799,LT +2988485800,2988485803,PT +2988485804,2988485807,PL +2988485808,2988485823,NL +2988485824,2988485831,FR +2988485832,2988485835,NL +2988485836,2988485839,LT +2988485840,2988485855,BE +2988485856,2988485871,FR +2988485872,2988485875,PL +2988485876,2988485879,IE +2988485880,2988485887,FR 2988485888,2988485903,PL 2988485904,2988485911,GB -2988485912,2988485951,FR +2988485912,2988485919,PT +2988485920,2988485951,FR 2988485952,2988485955,GB 2988485956,2988485959,CZ 2988485960,2988485967,FR @@ -62168,46 +78035,98 @@ 2988485984,2988485999,FR 2988486000,2988486015,PL 2988486016,2988486031,FR -2988486032,2988486047,ES +2988486032,2988486047,PL 2988486048,2988486063,GB 2988486064,2988486067,FR 2988486068,2988486071,ES 2988486072,2988486075,FR 2988486076,2988486079,ES 2988486080,2988486083,BE -2988486084,2988486087,CZ -2988486088,2988486111,FR -2988486112,2988486127,PL -2988486128,2988486159,NL +2988486084,2988486087,IT +2988486088,2988486095,FR +2988486096,2988486099,GB +2988486100,2988486111,FR +2988486112,2988486135,PL +2988486136,2988486139,FR +2988486140,2988486143,GB +2988486144,2988486151,ES +2988486152,2988486159,FR 2988486160,2988486175,IE -2988486176,2988486191,GB +2988486176,2988486179,FR +2988486180,2988486183,DE +2988486184,2988486191,IE 2988486192,2988486195,IT -2988486196,2988486199,DE +2988486196,2988486199,FR 2988486200,2988486207,PT -2988486208,2988486211,ES +2988486208,2988486211,PL 2988486212,2988486215,DE 2988486216,2988486219,ES 2988486220,2988486223,IT -2988486224,2988486239,NL +2988486224,2988486231,BE +2988486232,2988486235,PL +2988486236,2988486239,ES 2988486240,2988486287,PL 2988486288,2988486291,FR -2988486292,2988486295,DE -2988486296,2988486299,GB -2988486300,2988486303,PL -2988486304,2988486319,DE +2988486292,2988486299,GB +2988486300,2988486319,PL 2988486320,2988486323,IT 2988486324,2988486327,PT 2988486328,2988486343,ES 2988486344,2988486347,FR 2988486348,2988486351,ES 2988486352,2988486399,FR -2988486400,2988486783,GB -2988486784,2988486795,FR -2988486796,2988486799,GB +2988486400,2988486415,PL +2988486416,2988486423,FR +2988486424,2988486431,PT +2988486432,2988486447,FR +2988486448,2988486463,ES +2988486464,2988486471,BE +2988486472,2988486475,ES +2988486476,2988486479,PL +2988486480,2988486495,IE +2988486496,2988486503,DE +2988486504,2988486511,PL +2988486512,2988486515,DE +2988486516,2988486527,PL +2988486528,2988486575,FR +2988486576,2988486579,PL +2988486580,2988486583,GB +2988486584,2988486595,FR +2988486596,2988486599,GB +2988486600,2988486603,DE +2988486604,2988486607,FR +2988486608,2988486615,FI +2988486616,2988486623,ES +2988486624,2988486643,FR +2988486644,2988486647,GB +2988486648,2988486651,ES +2988486652,2988486655,PL +2988486656,2988486671,FR +2988486672,2988486675,DE +2988486676,2988486679,FR +2988486680,2988486687,ES +2988486688,2988486691,PL +2988486692,2988486695,FR +2988486696,2988486699,ES +2988486700,2988486711,PL +2988486712,2988486719,IT +2988486720,2988486735,FR +2988486736,2988486743,ES +2988486744,2988486747,FR +2988486748,2988486751,GB +2988486752,2988486759,PL +2988486760,2988486763,ES +2988486764,2988486767,FR +2988486768,2988486775,ES +2988486776,2988486783,BE +2988486784,2988486787,DE +2988486788,2988486795,FR +2988486796,2988486799,PL 2988486800,2988486807,FR 2988486808,2988486811,DE -2988486812,2988486815,FR -2988486816,2988486847,DE +2988486812,2988486823,FR +2988486824,2988486831,IT +2988486832,2988486847,PL 2988486848,2988486863,FR 2988486864,2988486879,BE 2988486880,2988486883,PL @@ -62221,11 +78140,12 @@ 2988487424,2988487679,IE 2988487680,2988487935,DE 2988487936,2988487939,BE -2988487940,2988487979,FR +2988487940,2988487947,FR +2988487948,2988487951,CH +2988487952,2988487979,FR 2988487980,2988487983,ES -2988487984,2988488007,FR -2988488008,2988488011,GB -2988488012,2988488015,CZ +2988487984,2988488011,FR +2988488012,2988488015,LT 2988488016,2988488031,FR 2988488032,2988488047,IE 2988488048,2988488051,IT @@ -62239,25 +78159,28 @@ 2988488128,2988488159,FR 2988488160,2988488175,ES 2988488176,2988488179,GB -2988488180,2988488183,DE +2988488180,2988488183,FR 2988488184,2988488187,IT 2988488188,2988488191,DE 2988488192,2988488479,FR 2988488480,2988488487,PL 2988488488,2988488491,FR 2988488492,2988488495,ES -2988488496,2988488511,FR -2988488512,2988488543,ES -2988488544,2988488575,FR -2988488576,2988488607,NL -2988488608,2988488639,IT +2988488496,2988488543,FR +2988488544,2988488555,GB +2988488556,2988488563,ES +2988488564,2988488567,FR +2988488568,2988488571,ES +2988488572,2988488575,GB +2988488576,2988488639,FR 2988488640,2988488647,ES 2988488648,2988488655,IT 2988488656,2988488663,PL 2988488664,2988488959,FR 2988488960,2988488963,NL 2988488964,2988488967,FR -2988488968,2988488975,LT +2988488968,2988488971,DE +2988488972,2988488975,FR 2988488976,2988488983,ES 2988488984,2988488987,FR 2988488988,2988488991,NL @@ -62268,8 +78191,8 @@ 2988489088,2988489103,GB 2988489104,2988489119,FI 2988489120,2988489123,ES -2988489124,2988489127,NL -2988489128,2988489131,DE +2988489124,2988489127,IE +2988489128,2988489131,IT 2988489132,2988489167,FR 2988489168,2988489175,PT 2988489176,2988489179,PL @@ -62281,16 +78204,35 @@ 2988489280,2988489283,FI 2988489284,2988489287,FR 2988489288,2988489295,PL -2988489296,2988489343,FR -2988489344,2988489471,DE +2988489296,2988489311,FR +2988489312,2988489327,PL +2988489328,2988489331,DE +2988489332,2988489335,PL +2988489336,2988489339,DE +2988489340,2988489343,PL +2988489344,2988489347,DE +2988489348,2988489351,PL +2988489352,2988489355,FR +2988489356,2988489359,PT +2988489360,2988489375,FR +2988489376,2988489379,ES +2988489380,2988489383,GB +2988489384,2988489391,FR +2988489392,2988489399,NL +2988489400,2988489403,PL +2988489404,2988489407,IT +2988489408,2988489439,PT +2988489440,2988489455,GB +2988489456,2988489471,BE 2988489472,2988489475,ES 2988489476,2988489479,GB -2988489480,2988489483,IT +2988489480,2988489483,PL 2988489484,2988489487,GB 2988489488,2988489503,FR 2988489504,2988489519,GB -2988489520,2988489535,ES -2988489536,2988489543,PT +2988489520,2988489527,ES +2988489528,2988489539,NL +2988489540,2988489543,CH 2988489544,2988489663,FR 2988489664,2988489667,DE 2988489668,2988489671,GB @@ -62301,28 +78243,594 @@ 2988489712,2988489719,FR 2988489720,2988489723,IT 2988489724,2988489727,ES -2988489728,2988507143,FR +2988489728,2988489747,FR +2988489748,2988489751,IT +2988489752,2988489755,ES +2988489756,2988489759,FR +2988489760,2988489791,NL +2988489792,2988489887,PL +2988489888,2988489903,FR +2988489904,2988489919,IE +2988489920,2988489935,PL +2988489936,2988489943,ES +2988489944,2988489947,FR +2988489948,2988489951,GB +2988489952,2988489967,FR +2988489968,2988489983,GB +2988489984,2988490047,FR +2988490048,2988490051,ES +2988490052,2988490055,PL +2988490056,2988490059,LT +2988490060,2988490063,FR +2988490064,2988490079,GB +2988490080,2988490095,FR +2988490096,2988490103,PT +2988490104,2988490107,ES +2988490108,2988490111,FR +2988490112,2988490143,PL +2988490144,2988490175,ES +2988490176,2988490179,IE +2988490180,2988490183,PL +2988490184,2988490191,ES +2988490192,2988490195,GB +2988490196,2988490199,PT +2988490200,2988490203,DE +2988490204,2988490223,FR +2988490224,2988490227,DE +2988490228,2988490231,GB +2988490232,2988490239,ES +2988490240,2988490247,PL +2988490248,2988490251,ES +2988490252,2988490255,GB +2988490256,2988490271,PL +2988490272,2988490287,ES +2988490288,2988490295,FR +2988490296,2988490303,DE +2988490304,2988490319,ES +2988490320,2988490335,FR +2988490336,2988490367,PT +2988490368,2988490371,ES +2988490372,2988490375,NL +2988490376,2988490379,FR +2988490380,2988490383,ES +2988490384,2988490399,FR +2988490400,2988490407,GB +2988490408,2988490411,NL +2988490412,2988490415,ES +2988490416,2988490423,GB +2988490424,2988490463,FR +2988490464,2988490623,PL +2988490624,2988490751,ES +2988490752,2988491775,FR +2988491776,2988492031,TN +2988492032,2988492799,FR +2988492800,2988494847,PL +2988494848,2988498975,FR +2988498976,2988498983,ES +2988498984,2988498991,FR +2988498992,2988499007,PL +2988499008,2988499051,DE +2988499052,2988499063,FR +2988499064,2988499067,DE +2988499068,2988499071,FR +2988499072,2988499103,PL +2988499104,2988499119,IE +2988499120,2988499135,FR +2988499136,2988499139,DE +2988499140,2988499143,FR +2988499144,2988499151,DE +2988499152,2988499167,FR +2988499168,2988499199,ES +2988499200,2988499343,FR +2988499344,2988499347,PL +2988499348,2988499351,FR +2988499352,2988499359,IT +2988499360,2988499367,PL +2988499368,2988499375,IT +2988499376,2988499379,PT +2988499380,2988499387,PL +2988499388,2988499407,FR +2988499408,2988499415,PL +2988499416,2988499423,DE +2988499424,2988499455,PL +2988499456,2988499463,NL +2988499464,2988499471,DE +2988499472,2988499487,FR +2988499488,2988499519,PL +2988499520,2988499551,ES +2988499552,2988499559,PL +2988499560,2988499567,NL +2988499568,2988499575,IE +2988499576,2988499579,FR +2988499580,2988499583,CH +2988499584,2988499599,IT +2988499600,2988499615,PL +2988499616,2988499623,DE +2988499624,2988499631,ES +2988499632,2988499635,CH +2988499636,2988499639,DE +2988499640,2988499663,GB +2988499664,2988499671,DE +2988499672,2988499679,NL +2988499680,2988499683,FR +2988499684,2988499687,CZ +2988499688,2988499691,FI +2988499692,2988499695,IT +2988499696,2988499699,PT +2988499700,2988499703,GB +2988499704,2988499711,DE +2988499712,2988499731,GB +2988499732,2988499735,FR +2988499736,2988499743,NL +2988499744,2988499747,IE +2988499748,2988499751,LT +2988499752,2988499755,PL +2988499756,2988499759,ES +2988499760,2988499763,CH +2988499764,2988499775,PL +2988499776,2988499791,IT +2988499792,2988499795,GB +2988499796,2988499803,IT +2988499804,2988499807,DE +2988499808,2988499823,FR +2988499824,2988499831,PL +2988499832,2988499839,GB +2988499840,2988499847,BE +2988499848,2988499851,DE +2988499852,2988499855,PL +2988499856,2988499871,ES +2988499872,2988499903,IE +2988499904,2988499907,FR +2988499908,2988499911,BE +2988499912,2988499915,FR +2988499916,2988499919,LT +2988499920,2988499923,DE +2988499924,2988499927,BE +2988499928,2988499935,FR +2988499936,2988499967,IE +2988499968,2988500223,FR +2988500224,2988500255,ES +2988500256,2988500271,IT +2988500272,2988500287,BE +2988500288,2988500303,PL +2988500304,2988500307,FR +2988500308,2988500311,NL +2988500312,2988500315,ES +2988500316,2988500319,DE +2988500320,2988500335,FR +2988500336,2988500339,DE +2988500340,2988500343,IE +2988500344,2988500347,FR +2988500348,2988500351,PL +2988500352,2988500383,GB +2988500384,2988500399,BE +2988500400,2988500415,DE +2988500416,2988500447,PL +2988500448,2988500479,ES +2988500480,2988500495,DE +2988500496,2988500499,PL +2988500500,2988500503,DE +2988500504,2988500511,PL +2988500512,2988500519,NL +2988500520,2988500523,ES +2988500524,2988500527,GB +2988500528,2988500543,BE +2988500544,2988500607,PL +2988500608,2988500639,FR +2988500640,2988500671,GB +2988500672,2988500679,IT +2988500680,2988500687,PL +2988500688,2988500703,NL +2988500704,2988500711,PL +2988500712,2988500767,FR +2988500768,2988500771,PT +2988500772,2988500775,ES +2988500776,2988500779,GB +2988500780,2988500787,PL +2988500788,2988500791,ES +2988500792,2988500799,PL +2988500800,2988500815,ES +2988500816,2988500831,FR +2988500832,2988500847,ES +2988500848,2988500851,FI +2988500852,2988500855,PL +2988500856,2988500859,IE +2988500860,2988500863,FR +2988500864,2988500867,GB +2988500868,2988500871,DE +2988500872,2988500879,NL +2988500880,2988500883,BE +2988500884,2988500887,PL +2988500888,2988500895,DE +2988500896,2988500919,FR +2988500920,2988500927,PL +2988500928,2988500935,FR +2988500936,2988500939,DE +2988500940,2988500943,FI +2988500944,2988500959,IT +2988500960,2988500975,IE +2988500976,2988500979,CZ +2988500980,2988500983,FR +2988500984,2988500987,DE +2988500988,2988500991,PL +2988500992,2988501055,FR +2988501056,2988501119,PT +2988501120,2988501135,NL +2988501136,2988501183,FR +2988501184,2988501215,PL +2988501216,2988501219,DE +2988501220,2988501223,ES +2988501224,2988501227,PL +2988501228,2988501231,CZ +2988501232,2988501247,PL +2988501248,2988501327,FR +2988501328,2988501331,FI +2988501332,2988501335,GB +2988501336,2988501339,FR +2988501340,2988501359,PL +2988501360,2988501367,FR +2988501368,2988501375,ES +2988501376,2988501383,FR +2988501384,2988501391,PL +2988501392,2988501407,FR +2988501408,2988501411,LT +2988501412,2988501415,NL +2988501416,2988501423,BE +2988501424,2988501439,NL +2988501440,2988501471,BE +2988501472,2988501475,PT +2988501476,2988501479,BE +2988501480,2988501483,DE +2988501484,2988501487,PL +2988501488,2988501503,FR +2988501504,2988501567,PT +2988501568,2988501631,PL +2988501632,2988501663,DE +2988501664,2988501679,CH +2988501680,2988501683,PL +2988501684,2988501687,GB +2988501688,2988501691,FR +2988501692,2988501695,PL +2988501696,2988501727,FI +2988501728,2988501759,PL +2988501760,2988502031,FR +2988502032,2988502047,DE +2988502048,2988502063,NL +2988502064,2988502067,FR +2988502068,2988502071,GB +2988502072,2988502075,PL +2988502076,2988502079,ES +2988502080,2988502095,IE +2988502096,2988502099,FI +2988502100,2988502103,CZ +2988502104,2988502111,PL +2988502112,2988502127,DE +2988502128,2988502143,PL +2988502144,2988502207,FR +2988502208,2988502223,GB +2988502224,2988502255,FR +2988502256,2988502263,DE +2988502264,2988502267,ES +2988502268,2988502271,DE +2988502272,2988502399,FR +2988502400,2988502407,NL +2988502408,2988502411,FR +2988502412,2988502419,GB +2988502420,2988502423,IE +2988502424,2988502431,FI +2988502432,2988502447,FR +2988502448,2988502451,IE +2988502452,2988502455,IT +2988502456,2988502459,ES +2988502460,2988502463,PT +2988502464,2988502479,IE +2988502480,2988502483,CH +2988502484,2988502487,PL +2988502488,2988502491,CH +2988502492,2988502495,PL +2988502496,2988502511,ES +2988502512,2988502519,FR +2988502520,2988502523,ES +2988502524,2988502527,DE +2988502528,2988502543,PL +2988502544,2988502559,FR +2988502560,2988502591,PL +2988502592,2988502599,FR +2988502600,2988502603,DE +2988502604,2988502607,PL +2988502608,2988502631,FR +2988502632,2988502639,NL +2988502640,2988502655,FR +2988502656,2988502719,DE +2988502720,2988502723,ES +2988502724,2988502727,BE +2988502728,2988502731,GB +2988502732,2988502735,PL +2988502736,2988502751,FR +2988502752,2988502783,ES +2988502784,2988502795,FR +2988502796,2988502799,DE +2988502800,2988502831,GB +2988502832,2988502839,DE +2988502840,2988502847,NL +2988502848,2988502851,FR +2988502852,2988502855,CH +2988502856,2988502859,FI +2988502860,2988502863,BE +2988502864,2988502867,IE +2988502868,2988502871,LT +2988502872,2988502875,PL +2988502876,2988502879,ES +2988502880,2988502883,IT +2988502884,2988502887,CZ +2988502888,2988502891,NL +2988502892,2988502895,PL +2988502896,2988502911,FR +2988502912,2988502915,PL +2988502916,2988502919,CH +2988502920,2988502959,FR +2988502960,2988502975,IE +2988502976,2988502983,PL +2988502984,2988502991,ES +2988502992,2988503015,DE +2988503016,2988503019,PL +2988503020,2988503023,ES +2988503024,2988503031,GB +2988503032,2988503035,ES +2988503036,2988503039,GB +2988503040,2988503071,FR +2988503072,2988503075,NL +2988503076,2988503103,GB +2988503104,2988503107,ES +2988503108,2988503111,NL +2988503112,2988503119,PL +2988503120,2988503127,DE +2988503128,2988503131,IT +2988503132,2988503151,PL +2988503152,2988503155,DE +2988503156,2988503159,LT +2988503160,2988503167,ES +2988503168,2988503171,PL +2988503172,2988503183,ES +2988503184,2988503199,NL +2988503200,2988503215,FR +2988503216,2988503231,PL +2988503232,2988503375,FR +2988503376,2988503383,PT +2988503384,2988503391,PL +2988503392,2988503395,ES +2988503396,2988503399,PL +2988503400,2988503415,FR +2988503416,2988503423,PL +2988503424,2988503471,FR +2988503472,2988503487,NL +2988503488,2988503495,IT +2988503496,2988503499,PL +2988503500,2988503519,FR +2988503520,2988503535,NL +2988503536,2988503551,FI +2988503552,2988503871,FR +2988503872,2988503903,DE +2988503904,2988503919,FR +2988503920,2988503927,ES +2988503928,2988503931,IT +2988503932,2988503935,NL +2988503936,2988503939,FR +2988503940,2988503943,CH +2988503944,2988503947,PL +2988503948,2988503951,IE +2988503952,2988503987,FR +2988503988,2988504007,PL +2988504008,2988504015,BE +2988504016,2988504019,FR +2988504020,2988504023,BE +2988504024,2988504031,FR +2988504032,2988504063,ES +2988504064,2988504127,IE +2988504128,2988504143,ES +2988504144,2988504159,FR +2988504160,2988504191,PL +2988504192,2988504223,FR +2988504224,2988504227,PT +2988504228,2988504231,DE +2988504232,2988504239,PL +2988504240,2988504255,GB +2988504256,2988504287,ES +2988504288,2988504303,GB +2988504304,2988504311,PL +2988504312,2988504315,FI +2988504316,2988504319,DE +2988504320,2988504415,FR +2988504416,2988504419,PL +2988504420,2988504423,DE +2988504424,2988504427,ES +2988504428,2988504431,PT +2988504432,2988504435,FR +2988504436,2988504439,ES +2988504440,2988504443,FR +2988504444,2988504447,GB +2988504448,2988504451,BE +2988504452,2988504455,ES +2988504456,2988504459,PL +2988504460,2988504463,GB +2988504464,2988504467,DE +2988504468,2988504471,ES +2988504472,2988504479,PL +2988504480,2988504543,FR +2988504544,2988504559,PL +2988504560,2988504563,FR +2988504564,2988504567,PL +2988504568,2988504571,CH +2988504572,2988504603,PL +2988504604,2988504639,FR +2988504640,2988504643,DE +2988504644,2988504647,PT +2988504648,2988504655,GB +2988504656,2988504671,FR +2988504672,2988504703,PT +2988504704,2988504735,FR +2988504736,2988504743,PL +2988504744,2988504751,ES +2988504752,2988504767,FR +2988504768,2988504799,ES +2988504800,2988504823,PL +2988504824,2988504827,DE +2988504828,2988504863,FR +2988504864,2988504879,PL +2988504880,2988504959,FR +2988504960,2988504963,PT +2988504964,2988504967,FR +2988504968,2988504975,BE +2988504976,2988504983,FR +2988504984,2988504987,ES +2988504988,2988504991,FR +2988504992,2988505023,CZ +2988505024,2988505087,FR +2988505088,2988505151,NL +2988505152,2988505183,FR +2988505184,2988505195,PL +2988505196,2988505199,DE +2988505200,2988505207,PL +2988505208,2988505211,ES +2988505212,2988505215,PT +2988505216,2988505247,FR +2988505248,2988505255,PL +2988505256,2988505263,FR +2988505264,2988505267,IT +2988505268,2988505271,FR +2988505272,2988505275,CZ +2988505276,2988505311,BE +2988505312,2988505315,DE +2988505316,2988505319,ES +2988505320,2988505323,PL +2988505324,2988505327,ES +2988505328,2988505343,PL +2988505344,2988505375,DE +2988505376,2988505391,FR +2988505392,2988505399,PL +2988505400,2988505407,ES +2988505408,2988505439,FR +2988505440,2988505455,PL +2988505456,2988505459,FI +2988505460,2988505463,CH +2988505464,2988505471,IT +2988505472,2988505475,ES +2988505476,2988505479,NL +2988505480,2988505487,IE +2988505488,2988505503,PL +2988505504,2988505599,FR +2988505600,2988505603,DE +2988505604,2988505607,ES +2988505608,2988505615,FR +2988505616,2988505631,ES +2988505632,2988505663,FR +2988505664,2988505695,ES +2988505696,2988505699,FR +2988505700,2988505703,IT +2988505704,2988505711,PL +2988505712,2988505727,GB +2988505728,2988505735,PL +2988505736,2988505739,DE +2988505740,2988505743,ES +2988505744,2988505747,PT +2988505748,2988505751,DE +2988505752,2988505755,CH +2988505756,2988505759,PL +2988505760,2988505775,FR +2988505776,2988505791,GB +2988505792,2988505807,FR +2988505808,2988505811,PL +2988505812,2988505815,DE +2988505816,2988505819,GB +2988505820,2988505823,PL +2988505824,2988505839,FR +2988505840,2988505843,CH +2988505844,2988505847,FR +2988505848,2988505855,PL +2988505856,2988505919,IE +2988505920,2988505935,GB +2988505936,2988505951,PL +2988505952,2988505967,GB +2988505968,2988505971,BE +2988505972,2988505975,ES +2988505976,2988506111,FR +2988506112,2988506143,BE +2988506144,2988506175,PT +2988506176,2988506191,IT +2988506192,2988506207,GB +2988506208,2988506239,ES +2988506240,2988506255,BE +2988506256,2988506271,CH +2988506272,2988506303,GB +2988506304,2988506335,DE +2988506336,2988506367,FR +2988506368,2988506375,IE +2988506376,2988506379,FR +2988506380,2988506383,DE +2988506384,2988506399,FR +2988506400,2988506415,GB +2988506416,2988506431,BE +2988506432,2988506447,IT +2988506448,2988506451,ES +2988506452,2988506455,PT +2988506456,2988506459,BE +2988506460,2988506463,PL +2988506464,2988506495,FR +2988506496,2988506499,PL +2988506500,2988506507,DE +2988506508,2988506511,ES +2988506512,2988506515,GB +2988506516,2988506519,FR +2988506520,2988506523,PL +2988506524,2988506527,IE +2988506528,2988506543,FR +2988506544,2988506551,DE +2988506552,2988506559,FR +2988506560,2988506563,DE +2988506564,2988506567,GB +2988506568,2988506571,PL +2988506572,2988506575,CH +2988506576,2988506591,FR +2988506592,2988506623,PT +2988506624,2988506687,PL +2988506688,2988506751,IE +2988506752,2988506763,ES +2988506764,2988506767,PL +2988506768,2988506783,ES +2988506784,2988506819,PL +2988506820,2988506831,FR +2988506832,2988506847,PL +2988506848,2988506863,FR +2988506864,2988506871,DE +2988506872,2988506875,ES +2988506876,2988506887,FR +2988506888,2988506891,ES +2988506892,2988507143,FR 2988507144,2988507147,BE -2988507148,2988507151,IT -2988507152,2988507159,DE +2988507148,2988507155,IT +2988507156,2988507159,PL 2988507160,2988507163,CH 2988507164,2988507167,PL 2988507168,2988507183,DE 2988507184,2988507199,FR 2988507200,2988507203,GB -2988507204,2988507207,PL +2988507204,2988507207,DE 2988507208,2988507211,ES 2988507212,2988507215,PL 2988507216,2988507231,FR 2988507232,2988507239,ES 2988507240,2988507243,FR -2988507244,2988507247,ES +2988507244,2988507247,GB 2988507248,2988507263,FR 2988507264,2988507279,PL -2988507280,2988507287,GB +2988507280,2988507283,FR +2988507284,2988507287,ES 2988507288,2988507327,FR 2988507328,2988507335,DE -2988507336,2988507423,FR +2988507336,2988507339,FR +2988507340,2988507343,NL +2988507344,2988507391,FR +2988507392,2988507423,PT 2988507424,2988507431,PL 2988507432,2988507439,DE 2988507440,2988507443,IT @@ -62338,17 +78846,16 @@ 2988507484,2988507487,IT 2988507488,2988507503,FR 2988507504,2988507519,IT -2988507520,2988507527,PL -2988507528,2988507531,DE -2988507532,2988507535,PL +2988507520,2988507523,PL +2988507524,2988507531,FR +2988507532,2988507535,DE 2988507536,2988507539,FR 2988507540,2988507543,PL 2988507544,2988507547,FR -2988507548,2988507551,DE -2988507552,2988507567,GB +2988507548,2988507567,GB 2988507568,2988507583,IE 2988507584,2988507591,ES -2988507592,2988507595,GB +2988507592,2988507595,FR 2988507596,2988507599,DE 2988507600,2988507603,ES 2988507604,2988507607,FR @@ -62361,11 +78868,15 @@ 2988507640,2988507643,FR 2988507644,2988507647,IT 2988507648,2988507711,DE -2988507712,2988507743,FR -2988507744,2988507759,IE +2988507712,2988507715,GB +2988507716,2988507719,FR +2988507720,2988507727,CH +2988507728,2988507731,FR +2988507732,2988507735,GB +2988507736,2988507739,ES +2988507740,2988507759,IE 2988507760,2988507767,FR -2988507768,2988507775,PL -2988507776,2988507839,IE +2988507768,2988507839,PL 2988507840,2988507855,FR 2988507856,2988507859,BE 2988507860,2988507867,PL @@ -62375,8 +78886,7 @@ 2988507884,2988507887,GB 2988507888,2988507903,ES 2988507904,2988507919,PL -2988507920,2988507923,DE -2988507924,2988507927,IT +2988507920,2988507927,DE 2988507928,2988507935,BE 2988507936,2988507951,FR 2988507952,2988507955,DE @@ -62389,41 +78899,46 @@ 2988507984,2988507999,FR 2988508000,2988508031,NL 2988508032,2988508035,PL -2988508036,2988508039,ES +2988508036,2988508039,CZ 2988508040,2988508047,FR 2988508048,2988508055,GB -2988508056,2988508063,ES -2988508064,2988508067,FR +2988508056,2988508059,FR +2988508060,2988508063,DE +2988508064,2988508067,ES 2988508068,2988508071,PL 2988508072,2988508079,FR 2988508080,2988508095,ES 2988508096,2988508103,FR -2988508104,2988508127,GB +2988508104,2988508111,IT +2988508112,2988508127,BE 2988508128,2988508135,PL 2988508136,2988508143,GB 2988508144,2988508151,FR -2988508152,2988508155,ES -2988508156,2988508159,PL +2988508152,2988508159,ES 2988508160,2988508207,FR -2988508208,2988508211,DE -2988508212,2988508215,PL +2988508208,2988508215,PL 2988508216,2988508219,FR 2988508220,2988508223,DE -2988508224,2988508287,FR +2988508224,2988508255,FR +2988508256,2988508259,BE +2988508260,2988508263,FR +2988508264,2988508271,ES +2988508272,2988508287,FR 2988508288,2988508303,PL 2988508304,2988508307,PT 2988508308,2988508315,FR 2988508316,2988508319,ES 2988508320,2988508343,FR -2988508344,2988508367,ES +2988508344,2988508351,GB +2988508352,2988508367,ES 2988508368,2988508383,FR -2988508384,2988508399,PL -2988508400,2988508415,ES -2988508416,2988508431,PT +2988508384,2988508423,PL +2988508424,2988508427,CH +2988508428,2988508431,CZ 2988508432,2988508435,FR 2988508436,2988508439,DE -2988508440,2988508447,PL -2988508448,2988508479,FR +2988508440,2988508455,PL +2988508456,2988508479,FR 2988508480,2988508543,PT 2988508544,2988508607,GB 2988508608,2988508671,IT @@ -62432,44 +78947,42 @@ 2988508684,2988508687,DE 2988508688,2988508703,PL 2988508704,2988508711,GB -2988508712,2988508715,DE -2988508716,2988508719,GB -2988508720,2988508723,IT +2988508712,2988508719,DE +2988508720,2988508723,FR 2988508724,2988508735,GB -2988508736,2988508847,FR +2988508736,2988508767,FR +2988508768,2988508799,PT +2988508800,2988508847,FR 2988508848,2988508855,GB 2988508856,2988508871,FR 2988508872,2988508875,PL -2988508876,2988508879,DE -2988508880,2988508895,ES +2988508876,2988508879,PT +2988508880,2988508895,DE 2988508896,2988508911,PL -2988508912,2988508915,FR -2988508916,2988508919,GB -2988508920,2988508923,IE -2988508924,2988508927,IT -2988508928,2988508931,LT -2988508932,2988508939,NL -2988508940,2988508943,PL -2988508944,2988508947,PT +2988508912,2988508919,GB +2988508920,2988508927,FR +2988508928,2988508943,GB +2988508944,2988508947,DE 2988508948,2988508951,FR -2988508952,2988508959,IT -2988508960,2988508975,DE -2988508976,2988508991,NL -2988508992,2988509023,FR -2988509024,2988509055,ES -2988509056,2988509119,IT -2988509120,2988509151,GB +2988508952,2988508959,ES +2988508960,2988508983,FR +2988508984,2988508987,DE +2988508988,2988508991,PL +2988508992,2988509055,NL +2988509056,2988509119,FR +2988509120,2988509151,IT 2988509152,2988509183,PL 2988509184,2988509279,FR 2988509280,2988509283,DE 2988509284,2988509287,IT 2988509288,2988509291,BE -2988509292,2988509295,GB +2988509292,2988509295,IT 2988509296,2988509311,DE 2988509312,2988509343,FR 2988509344,2988509351,BE -2988509352,2988509355,NL -2988509356,2988509363,DE +2988509352,2988509355,ES +2988509356,2988509359,DE +2988509360,2988509363,CH 2988509364,2988509367,IT 2988509368,2988509371,CH 2988509372,2988509375,PL @@ -62479,11 +78992,11 @@ 2988509412,2988509415,DE 2988509416,2988509419,ES 2988509420,2988509443,FR -2988509444,2988509451,ES +2988509444,2988509447,FI +2988509448,2988509451,GB 2988509452,2988509455,PL 2988509456,2988509467,FR -2988509468,2988509471,NL -2988509472,2988509503,FR +2988509468,2988509503,NL 2988509504,2988509507,PL 2988509508,2988509511,FR 2988509512,2988509515,GB @@ -62494,53 +79007,64 @@ 2988509552,2988509575,FR 2988509576,2988509583,PL 2988509584,2988509619,FR -2988509620,2988509623,DE +2988509620,2988509623,GB 2988509624,2988509627,CZ 2988509628,2988509631,IT -2988509632,2988509711,FR +2988509632,2988509695,FR +2988509696,2988509711,IT 2988509712,2988509715,IE 2988509716,2988509719,GB 2988509720,2988509727,IT -2988509728,2988509743,FR -2988509744,2988509751,ES +2988509728,2988509751,FR 2988509752,2988509759,DE 2988509760,2988509767,PL 2988509768,2988509775,IT -2988509776,2988509779,DE +2988509776,2988509779,ES 2988509780,2988509783,GB 2988509784,2988509787,FR -2988509788,2988509791,ES +2988509788,2988509791,BE 2988509792,2988509823,NL 2988509824,2988509839,FR 2988509840,2988509855,ES 2988509856,2988509859,FR -2988509860,2988509871,DE -2988509872,2988509903,FR +2988509860,2988509875,DE +2988509876,2988509879,FR +2988509880,2988509887,DE +2988509888,2988509903,FR 2988509904,2988509907,PL 2988509908,2988509919,IT 2988509920,2988509927,FR -2988509928,2988509951,PL +2988509928,2988509935,PL +2988509936,2988509939,DE +2988509940,2988509943,IT +2988509944,2988509951,FR 2988509952,2988509955,IT -2988509956,2988509959,PL -2988509960,2988509963,IT +2988509956,2988509963,PL 2988509964,2988509967,GB 2988509968,2988509983,ES -2988509984,2988509995,FR +2988509984,2988509987,DE +2988509988,2988509991,CZ +2988509992,2988509995,FR 2988509996,2988509999,DE 2988510000,2988510015,PL 2988510016,2988510023,ES 2988510024,2988510031,FR 2988510032,2988510079,PL -2988510080,2988510095,ES -2988510096,2988510099,FR +2988510080,2988510087,ES +2988510088,2988510091,PL +2988510092,2988510099,FR 2988510100,2988510103,GB 2988510104,2988510111,BE 2988510112,2988510143,CZ 2988510144,2988510175,NL 2988510176,2988510207,ES 2988510208,2988510211,FR -2988510212,2988510215,DE -2988510216,2988510255,FR +2988510212,2988510215,ES +2988510216,2988510239,FR +2988510240,2988510243,IT +2988510244,2988510247,FR +2988510248,2988510251,FI +2988510252,2988510255,LT 2988510256,2988510259,GB 2988510260,2988510263,FR 2988510264,2988510271,PL @@ -62553,18 +79077,37 @@ 2988510324,2988510327,GB 2988510328,2988510399,FR 2988510400,2988510403,DE -2988510404,2988510407,FR +2988510404,2988510407,GB 2988510408,2988510415,PL 2988510416,2988510431,FR 2988510432,2988510435,IT -2988510436,2988510751,FR +2988510436,2988510463,FR +2988510464,2988510495,PL +2988510496,2988510507,FR +2988510508,2988510511,NL +2988510512,2988510515,GB +2988510516,2988510519,DE +2988510520,2988510523,PT +2988510524,2988510527,BE +2988510528,2988510559,FR +2988510560,2988510591,IT +2988510592,2988510623,BE +2988510624,2988510655,IE +2988510656,2988510687,PL +2988510688,2988510703,FR +2988510704,2988510719,PL +2988510720,2988510751,FR 2988510752,2988510759,PL 2988510760,2988510767,FR -2988510768,2988510775,ES +2988510768,2988510771,ES +2988510772,2988510775,LT 2988510776,2988510847,FR 2988510848,2988510943,PL 2988510944,2988510975,GB -2988510976,2988510991,PL +2988510976,2988510979,PL +2988510980,2988510983,IT +2988510984,2988510987,GB +2988510988,2988510991,PL 2988510992,2988511007,FR 2988511008,2988511015,PL 2988511016,2988511023,IT @@ -62575,8 +79118,9 @@ 2988511088,2988511103,FR 2988511104,2988511167,PL 2988511168,2988511175,IE -2988511176,2988511183,FR -2988511184,2988511191,GB +2988511176,2988511179,GB +2988511180,2988511187,FR +2988511188,2988511191,GB 2988511192,2988511487,FR 2988511488,2988511551,PL 2988511552,2988511555,FR @@ -62585,7 +79129,7 @@ 2988511576,2988511583,GB 2988511584,2988511663,FR 2988511664,2988511671,DE -2988511672,2988511675,FR +2988511672,2988511675,PL 2988511676,2988511679,GB 2988511680,2988511683,NL 2988511684,2988511687,ES @@ -62595,20 +79139,20 @@ 2988511700,2988511703,IT 2988511704,2988511711,PL 2988511712,2988511719,DE -2988511720,2988511735,FR -2988511736,2988511739,DE +2988511720,2988511727,FR +2988511728,2988511731,NL +2988511732,2988511739,DE 2988511740,2988511743,FR 2988511744,2988511747,PL 2988511748,2988511751,GB -2988511752,2988511759,CZ +2988511752,2988511759,IT 2988511760,2988511775,FR 2988511776,2988511807,GB 2988511808,2988511823,ES 2988511824,2988511831,DE -2988511832,2988511835,ES +2988511832,2988511835,GB 2988511836,2988511855,FR -2988511856,2988511871,GB -2988511872,2988511887,PL +2988511856,2988511887,PL 2988511888,2988511903,FR 2988511904,2988511911,IT 2988511912,2988511915,FR @@ -62616,7 +79160,7 @@ 2988511920,2988511923,GB 2988511924,2988511927,ES 2988511928,2988511931,IT -2988511932,2988511935,PL +2988511932,2988511935,FR 2988511936,2988511951,PT 2988511952,2988511999,GB 2988512000,2988512031,PL @@ -62628,7 +79172,7 @@ 2988512096,2988512127,IE 2988512128,2988512143,PL 2988512144,2988512151,GB -2988512152,2988512155,ES +2988512152,2988512155,CH 2988512156,2988512159,FR 2988512160,2988512191,GB 2988512192,2988512195,FR @@ -62648,10 +79192,12 @@ 2988512316,2988512319,DE 2988512320,2988512335,FR 2988512336,2988512339,PL -2988512340,2988512343,ES +2988512340,2988512343,IT 2988512344,2988512351,FR 2988512352,2988512383,IT -2988512384,2988512415,FR +2988512384,2988512399,FR +2988512400,2988512403,DE +2988512404,2988512415,FR 2988512416,2988512435,PL 2988512436,2988512439,FR 2988512440,2988512447,NL @@ -62660,19 +79206,21 @@ 2988512460,2988512467,FR 2988512468,2988512471,GB 2988512472,2988512479,FR -2988512480,2988512483,ES +2988512480,2988512483,DE 2988512484,2988512523,FR 2988512524,2988512527,IT 2988512528,2988512543,FR 2988512544,2988512551,PL -2988512552,2988512579,FR +2988512552,2988512575,FR +2988512576,2988512579,NL 2988512580,2988512583,ES 2988512584,2988512587,FR 2988512588,2988512591,PL 2988512592,2988512595,BE 2988512596,2988512599,ES 2988512600,2988512607,PT -2988512608,2988512639,FR +2988512608,2988512631,GB +2988512632,2988512639,PL 2988512640,2988512647,GB 2988512648,2988512651,ES 2988512652,2988512655,DE @@ -62691,16 +79239,20 @@ 2988512856,2988512879,FR 2988512880,2988512895,DE 2988512896,2988512899,PL -2988512900,2988512903,GB -2988512904,2988512907,ES -2988512908,2988512943,FR -2988512944,2988512951,GB +2988512900,2988512911,ES +2988512912,2988512943,FR +2988512944,2988512951,ES 2988512952,2988512955,FR 2988512956,2988512959,LT -2988512960,2988512967,ES +2988512960,2988512963,ES +2988512964,2988512967,PL 2988512968,2988512971,GB 2988512972,2988512975,NL -2988512976,2988512995,FR +2988512976,2988512979,FI +2988512980,2988512983,DE +2988512984,2988512987,CH +2988512988,2988512991,CZ +2988512992,2988512995,FR 2988512996,2988512999,GB 2988513000,2988513003,FR 2988513004,2988513007,PL @@ -62723,42 +79275,49 @@ 2988513276,2988513279,CH 2988513280,2988513283,FR 2988513284,2988513287,ES -2988513288,2988513307,FR +2988513288,2988513291,FR +2988513292,2988513295,PL +2988513296,2988513303,NL +2988513304,2988513307,FR 2988513308,2988513311,PL 2988513312,2988513327,PT 2988513328,2988513331,PL -2988513332,2988513335,FR -2988513336,2988513343,GB -2988513344,2988513351,DE +2988513332,2988513343,FR +2988513344,2988513351,ES 2988513352,2988513359,IT -2988513360,2988513375,GB +2988513360,2988513363,DE +2988513364,2988513367,FR +2988513368,2988513375,ES 2988513376,2988513379,FR 2988513380,2988513383,PT -2988513384,2988513407,GB +2988513384,2988513387,FR +2988513388,2988513391,CH +2988513392,2988513407,FR 2988513408,2988513471,PL 2988513472,2988513503,FR 2988513504,2988513507,CH 2988513508,2988513511,DE 2988513512,2988513515,FR 2988513516,2988513519,DE -2988513520,2988513535,GB -2988513536,2988513551,DE +2988513520,2988513551,GB 2988513552,2988513555,IT 2988513556,2988513567,FR 2988513568,2988513575,GB 2988513576,2988513583,PL 2988513584,2988513599,IE -2988513600,2988513671,FR -2988513672,2988513675,ES +2988513600,2988513631,FR +2988513632,2988513647,ES +2988513648,2988513671,FR +2988513672,2988513675,PT 2988513676,2988513679,FR 2988513680,2988513683,ES 2988513684,2988513691,FR 2988513692,2988513695,DE -2988513696,2988513723,FR +2988513696,2988513703,FR +2988513704,2988513707,DE +2988513708,2988513723,FR 2988513724,2988513727,DE -2988513728,2988513731,FR -2988513732,2988513735,BE -2988513736,2988513739,FR +2988513728,2988513739,FR 2988513740,2988513743,ES 2988513744,2988513759,GB 2988513760,2988513879,FR @@ -62768,54 +79327,63 @@ 2988513900,2988513903,PL 2988513904,2988513919,IT 2988513920,2988513951,FR -2988513952,2988513983,PT -2988513984,2988514015,GB -2988514016,2988514019,PT -2988514020,2988514023,NL -2988514024,2988514027,PT -2988514028,2988514111,FR -2988514112,2988514115,DE +2988513952,2988513967,PT +2988513968,2988513983,DE +2988513984,2988513991,GB +2988513992,2988513999,IE +2988514000,2988514015,FR +2988514016,2988514023,ES +2988514024,2988514027,CH +2988514028,2988514031,PL +2988514032,2988514047,FR +2988514048,2988514079,ES +2988514080,2988514095,PL +2988514096,2988514099,DE +2988514100,2988514103,PL +2988514104,2988514111,FR +2988514112,2988514115,IE 2988514116,2988514127,FR 2988514128,2988514131,IE -2988514132,2988514139,IT +2988514132,2988514135,IT +2988514136,2988514139,ES 2988514140,2988514143,PL 2988514144,2988514159,FR 2988514160,2988514163,IT -2988514164,2988514167,DE -2988514168,2988514171,FR +2988514164,2988514171,FR 2988514172,2988514175,DE 2988514176,2988514207,FR 2988514208,2988514211,ES 2988514212,2988514219,FR 2988514220,2988514227,GB -2988514228,2988514231,FR -2988514232,2988514239,GB -2988514240,2988514243,FR -2988514244,2988514251,GB +2988514228,2988514231,IE +2988514232,2988514239,ES +2988514240,2988514247,FR +2988514248,2988514251,GB 2988514252,2988514255,FR 2988514256,2988514271,ES 2988514272,2988514279,FR -2988514280,2988514283,PL -2988514284,2988514287,GB +2988514280,2988514287,PL 2988514288,2988514303,ES 2988514304,2988514335,FR -2988514336,2988514339,IE +2988514336,2988514339,PL 2988514340,2988514343,FR -2988514344,2988514351,GB -2988514352,2988514399,FR +2988514344,2988514359,PL +2988514360,2988514367,ES +2988514368,2988514399,FR 2988514400,2988514431,GB 2988514432,2988514447,FR 2988514448,2988514463,ES -2988514464,2988514527,FR -2988514528,2988514559,DE +2988514464,2988514543,FR +2988514544,2988514559,PL 2988514560,2988514623,FR 2988514624,2988514655,DE 2988514656,2988514671,FR -2988514672,2988514675,GB +2988514672,2988514675,CH 2988514676,2988514679,IT -2988514680,2988514687,FR +2988514680,2988514683,GB +2988514684,2988514687,DE 2988514688,2988514719,GB -2988514720,2988514735,DE +2988514720,2988514735,ES 2988514736,2988514739,FR 2988514740,2988514743,ES 2988514744,2988514747,BE @@ -62823,24 +79391,507 @@ 2988514752,2988514815,FI 2988514816,2988514823,FR 2988514824,2988514827,PL -2988514828,2988514831,DE +2988514828,2988514831,FR 2988514832,2988514839,PL 2988514840,2988514879,ES 2988514880,2988514943,PL 2988514944,2988514959,ES 2988514960,2988514975,PL -2988514976,2988514979,BE +2988514976,2988514979,DE 2988514980,2988514983,PL 2988514984,2988514991,IT -2988514992,2988514999,FR -2988515000,2988515007,PL -2988515008,2988515039,FR +2988514992,2988514995,FR +2988514996,2988515007,PL +2988515008,2988515027,FR +2988515028,2988515031,DE +2988515032,2988515039,FR 2988515040,2988515071,GB 2988515072,2988515327,FR 2988515328,2988517375,DE 2988517376,2988519423,FR 2988519424,2988521471,PL -2988521472,2988535807,FR +2988521472,2988523519,FR +2988523520,2988523523,GB +2988523524,2988523599,FR +2988523600,2988523603,ES +2988523604,2988523607,GB +2988523608,2988523615,PL +2988523616,2988523631,FR +2988523632,2988523651,PL +2988523652,2988523655,FR +2988523656,2988523663,FI +2988523664,2988523667,DE +2988523668,2988523679,FR +2988523680,2988523711,ES +2988523712,2988523731,GB +2988523732,2988523735,IT +2988523736,2988523739,DE +2988523740,2988523743,FR +2988523744,2988523775,PT +2988523776,2988524031,FR +2988524032,2988524035,DE +2988524036,2988524039,LT +2988524040,2988524047,ES +2988524048,2988524055,FR +2988524056,2988524063,CZ +2988524064,2988524067,PL +2988524068,2988524075,GB +2988524076,2988524079,ES +2988524080,2988524083,GB +2988524084,2988524087,IT +2988524088,2988524111,FR +2988524112,2988524127,IT +2988524128,2988524159,FR +2988524160,2988524163,ES +2988524164,2988524167,FR +2988524168,2988524175,ES +2988524176,2988524191,FR +2988524192,2988524195,FI +2988524196,2988524199,DE +2988524200,2988524203,IE +2988524204,2988524211,FR +2988524212,2988524215,FI +2988524216,2988524219,FR +2988524220,2988524223,ES +2988524224,2988524227,DE +2988524228,2988524231,PL +2988524232,2988524239,ES +2988524240,2988524255,FR +2988524256,2988524259,LT +2988524260,2988524263,PT +2988524264,2988524267,CZ +2988524268,2988524271,NL +2988524272,2988524287,DE +2988524288,2988524291,ES +2988524292,2988524295,IT +2988524296,2988524299,CZ +2988524300,2988524303,FR +2988524304,2988524307,IT +2988524308,2988524319,GB +2988524320,2988524351,FR +2988524352,2988524359,CH +2988524360,2988524363,ES +2988524364,2988524367,DE +2988524368,2988524383,GB +2988524384,2988524415,IE +2988524416,2988524447,FI +2988524448,2988524479,FR +2988524480,2988524483,CZ +2988524484,2988524487,IT +2988524488,2988524495,FR +2988524496,2988524543,PL +2988524544,2988524575,IE +2988524576,2988524591,FR +2988524592,2988524603,PL +2988524604,2988524607,ES +2988524608,2988524627,GB +2988524628,2988524631,IE +2988524632,2988524635,DE +2988524636,2988524639,FR +2988524640,2988524671,DE +2988524672,2988524735,FR +2988524736,2988524751,GB +2988524752,2988524799,FR +2988524800,2988525055,GB +2988525056,2988525567,PL +2988525568,2988525583,FR +2988525584,2988525647,PL +2988525648,2988525655,GB +2988525656,2988525659,FR +2988525660,2988525663,DE +2988525664,2988525695,FR +2988525696,2988525823,PL +2988525824,2988525839,FR +2988525840,2988525847,ES +2988525848,2988525851,IT +2988525852,2988525855,DE +2988525856,2988525887,FR +2988525888,2988525951,FI +2988525952,2988526079,ES +2988526080,2988526143,PT +2988526144,2988526175,BE +2988526176,2988526239,ES +2988526240,2988526423,PL +2988526424,2988526427,BE +2988526428,2988526431,ES +2988526432,2988526435,NL +2988526436,2988526439,FR +2988526440,2988526443,CH +2988526444,2988526447,BE +2988526448,2988526451,GB +2988526452,2988526455,DE +2988526456,2988526463,ES +2988526464,2988526543,FR +2988526544,2988526559,IT +2988526560,2988526579,FR +2988526580,2988526583,ES +2988526584,2988526591,DE +2988526592,2988526607,FR +2988526608,2988526615,DE +2988526616,2988526655,FR +2988526656,2988526663,PL +2988526664,2988526671,FR +2988526672,2988526679,IE +2988526680,2988526683,ES +2988526684,2988526687,FR +2988526688,2988526703,ES +2988526704,2988526711,FR +2988526712,2988526715,ES +2988526716,2988526719,GB +2988526720,2988526727,FR +2988526728,2988526735,DE +2988526736,2988526751,PL +2988526752,2988526783,GB +2988526784,2988526847,FR +2988526848,2988526863,PL +2988526864,2988526867,GB +2988526868,2988526871,FR +2988526872,2988526875,DE +2988526876,2988526879,PL +2988526880,2988526911,FR +2988526912,2988526927,GB +2988526928,2988526935,DE +2988526936,2988526943,PL +2988526944,2988526951,DE +2988526952,2988526955,FR +2988526956,2988526959,IT +2988526960,2988526975,FR +2988526976,2988526991,PL +2988526992,2988526995,DE +2988526996,2988527003,ES +2988527004,2988527055,FR +2988527056,2988527071,BE +2988527072,2988527087,FR +2988527088,2988527095,GB +2988527096,2988527099,IE +2988527100,2988527103,LT +2988527104,2988527127,FR +2988527128,2988527167,PL +2988527168,2988527171,DE +2988527172,2988527175,ES +2988527176,2988527179,PT +2988527180,2988527183,PL +2988527184,2988527187,IT +2988527188,2988527191,ES +2988527192,2988527195,DE +2988527196,2988527199,FR +2988527200,2988527207,NL +2988527208,2988527211,DE +2988527212,2988527359,FR +2988527360,2988527391,DE +2988527392,2988527399,PL +2988527400,2988527407,DE +2988527408,2988527411,FR +2988527412,2988527415,PL +2988527416,2988527423,ES +2988527424,2988527431,FR +2988527432,2988527439,IT +2988527440,2988527451,PL +2988527452,2988527455,PT +2988527456,2988527459,LT +2988527460,2988527463,IE +2988527464,2988527475,FR +2988527476,2988527479,ES +2988527480,2988527487,FR +2988527488,2988527503,GB +2988527504,2988527523,FR +2988527524,2988527527,PL +2988527528,2988527531,DE +2988527532,2988527535,FR +2988527536,2988527551,GB +2988527552,2988527583,PL +2988527584,2988527591,GB +2988527592,2988527595,IE +2988527596,2988527599,DE +2988527600,2988527603,NL +2988527604,2988527607,FR +2988527608,2988527611,DE +2988527612,2988527615,PT +2988527616,2988527619,ES +2988527620,2988527623,PL +2988527624,2988527631,ES +2988527632,2988527667,FR +2988527668,2988527671,IE +2988527672,2988527675,ES +2988527676,2988527679,DE +2988527680,2988527683,ES +2988527684,2988527695,FR +2988527696,2988527711,GB +2988527712,2988527747,FR +2988527748,2988527751,ES +2988527752,2988527755,DE +2988527756,2988527759,PL +2988527760,2988527775,ES +2988527776,2988527823,FR +2988527824,2988527827,ES +2988527828,2988527831,DE +2988527832,2988527839,ES +2988527840,2988527843,PL +2988527844,2988527847,NL +2988527848,2988527851,LT +2988527852,2988527855,GB +2988527856,2988527871,FR +2988527872,2988527903,PT +2988527904,2988527935,ES +2988527936,2988527967,DE +2988527968,2988527983,PL +2988527984,2988527999,FR +2988528000,2988528007,IT +2988528008,2988528011,ES +2988528012,2988528015,PL +2988528016,2988528063,IE +2988528064,2988528071,GB +2988528072,2988528075,NL +2988528076,2988528079,BE +2988528080,2988528095,ES +2988528096,2988528127,FR +2988528128,2988528159,GB +2988528160,2988528179,ES +2988528180,2988528183,IT +2988528184,2988528187,PL +2988528188,2988528191,FR +2988528192,2988528207,IE +2988528208,2988528215,FR +2988528216,2988528219,IE +2988528220,2988528223,DE +2988528224,2988528227,FR +2988528228,2988528231,IE +2988528232,2988528235,GB +2988528236,2988528239,FR +2988528240,2988528263,GB +2988528264,2988528267,PL +2988528268,2988528271,FR +2988528272,2988528287,IE +2988528288,2988528303,GB +2988528304,2988528351,FR +2988528352,2988528383,DE +2988528384,2988528399,GB +2988528400,2988528415,FR +2988528416,2988528423,GB +2988528424,2988528431,NL +2988528432,2988528435,PL +2988528436,2988528439,FR +2988528440,2988528447,GB +2988528448,2988528451,DE +2988528452,2988528455,IT +2988528456,2988528459,GB +2988528460,2988528463,ES +2988528464,2988528467,DE +2988528468,2988528471,GB +2988528472,2988528475,ES +2988528476,2988528479,DE +2988528480,2988528483,NL +2988528484,2988528487,ES +2988528488,2988528495,FR +2988528496,2988528511,IT +2988528512,2988528639,FR +2988528640,2988528643,BE +2988528644,2988528647,PL +2988528648,2988528671,FR +2988528672,2988528703,DE +2988528704,2988528735,IE +2988528736,2988528755,FR +2988528756,2988528759,PL +2988528760,2988528763,GB +2988528764,2988528767,FR +2988528768,2988528771,DE +2988528772,2988528783,FR +2988528784,2988528787,ES +2988528788,2988528791,FR +2988528792,2988528795,PL +2988528796,2988528799,GB +2988528800,2988528863,FR +2988528864,2988528867,DE +2988528868,2988528871,FR +2988528872,2988528879,GB +2988528880,2988528895,ES +2988528896,2988528911,FR +2988528912,2988528919,PL +2988528920,2988528923,CH +2988528924,2988528927,GB +2988528928,2988528959,FR +2988528960,2988528995,FI +2988528996,2988528999,BE +2988529000,2988529007,FR +2988529008,2988529023,FI +2988529024,2988529031,PL +2988529032,2988529047,FR +2988529048,2988529051,PL +2988529052,2988529055,PT +2988529056,2988529119,FR +2988529120,2988529151,NL +2988529152,2988529159,IT +2988529160,2988529163,GB +2988529164,2988529167,DE +2988529168,2988529171,IE +2988529172,2988529175,PT +2988529176,2988529179,ES +2988529180,2988529199,FR +2988529200,2988529207,PL +2988529208,2988529247,FR +2988529248,2988529251,GB +2988529252,2988529263,PL +2988529264,2988529279,ES +2988529280,2988529295,LT +2988529296,2988529311,IT +2988529312,2988529315,PL +2988529316,2988529319,FR +2988529320,2988529323,ES +2988529324,2988529331,DE +2988529332,2988529339,GB +2988529340,2988529343,DE +2988529344,2988529351,PL +2988529352,2988529359,GB +2988529360,2988529375,IT +2988529376,2988529383,GB +2988529384,2988529387,DE +2988529388,2988529391,FR +2988529392,2988529407,PL +2988529408,2988529411,IT +2988529412,2988529415,NL +2988529416,2988529419,PT +2988529420,2988529423,CH +2988529424,2988529431,DE +2988529432,2988529439,FR +2988529440,2988529455,PL +2988529456,2988529535,FR +2988529536,2988529567,FI +2988529568,2988529583,FR +2988529584,2988529591,ES +2988529592,2988529595,FR +2988529596,2988529599,GB +2988529600,2988529607,IT +2988529608,2988529631,FR +2988529632,2988529647,LT +2988529648,2988529663,FR +2988529664,2988529679,PL +2988529680,2988529703,FR +2988529704,2988529707,DE +2988529708,2988529759,FR +2988529760,2988529767,PL +2988529768,2988529771,FR +2988529772,2988529775,DE +2988529776,2988529783,ES +2988529784,2988529787,FR +2988529788,2988529791,PL +2988529792,2988529799,ES +2988529800,2988529807,DE +2988529808,2988529823,FR +2988529824,2988529855,ES +2988529856,2988529887,FR +2988529888,2988529891,DE +2988529892,2988529895,PL +2988529896,2988529899,GB +2988529900,2988529903,FI +2988529904,2988529919,BE +2988529920,2988529935,GB +2988529936,2988529939,CH +2988529940,2988529943,GB +2988529944,2988529947,ES +2988529948,2988529951,PT +2988529952,2988529955,GB +2988529956,2988529959,PL +2988529960,2988529967,GB +2988529968,2988529983,NL +2988529984,2988529999,GB +2988530000,2988530003,FR +2988530004,2988530007,GB +2988530008,2988530031,FR +2988530032,2988530035,CH +2988530036,2988530043,DE +2988530044,2988530047,FR +2988530048,2988530063,GB +2988530064,2988530079,IE +2988530080,2988530095,FR +2988530096,2988530099,DE +2988530100,2988530191,FR +2988530192,2988530207,NL +2988530208,2988530239,PL +2988530240,2988530271,FR +2988530272,2988530303,IE +2988530304,2988530307,DE +2988530308,2988530311,PL +2988530312,2988530323,FR +2988530324,2988530327,GB +2988530328,2988530367,FR +2988530368,2988530371,ES +2988530372,2988530379,FR +2988530380,2988530383,CH +2988530384,2988530391,FR +2988530392,2988530395,PT +2988530396,2988530399,GB +2988530400,2988530403,ES +2988530404,2988530407,PL +2988530408,2988530411,LT +2988530412,2988530415,CZ +2988530416,2988530423,PL +2988530424,2988530431,ES +2988530432,2988530687,DE +2988530688,2988530695,IT +2988530696,2988530703,PL +2988530704,2988530735,FR +2988530736,2988530739,IE +2988530740,2988530743,NL +2988530744,2988530751,PL +2988530752,2988530847,FR +2988530848,2988530851,DE +2988530852,2988530855,ES +2988530856,2988530863,PT +2988530864,2988530867,PL +2988530868,2988530871,FR +2988530872,2988530879,IT +2988530880,2988530887,PL +2988530888,2988530895,DE +2988530896,2988530927,FR +2988530928,2988530943,FI +2988530944,2988530975,FR +2988530976,2988531007,PL +2988531008,2988531015,DE +2988531016,2988531019,NL +2988531020,2988531023,IE +2988531024,2988531027,ES +2988531028,2988531031,FR +2988531032,2988531035,PL +2988531036,2988531039,GB +2988531040,2988531047,FR +2988531048,2988531051,GB +2988531052,2988531055,PL +2988531056,2988531071,FR +2988531072,2988531075,DE +2988531076,2988531079,GB +2988531080,2988531083,FR +2988531084,2988531087,PL +2988531088,2988531103,FR +2988531104,2988531107,DE +2988531108,2988531151,FR +2988531152,2988531171,PL +2988531172,2988531175,BE +2988531176,2988531183,GB +2988531184,2988531187,ES +2988531188,2988531191,IE +2988531192,2988531199,FR +2988531200,2988531247,ES +2988531248,2988531259,PL +2988531260,2988531271,GB +2988531272,2988531279,ES +2988531280,2988531287,PT +2988531288,2988531291,FR +2988531292,2988531295,PL +2988531296,2988531311,IE +2988531312,2988531319,FR +2988531320,2988531323,PT +2988531324,2988531327,GB +2988531328,2988531343,IE +2988531344,2988531351,CH +2988531352,2988531355,PL +2988531356,2988531359,IE +2988531360,2988531391,FR +2988531392,2988531399,PL +2988531400,2988531403,DE +2988531404,2988531427,PL +2988531428,2988531451,FR +2988531452,2988531455,GB +2988531456,2988535807,FR 2988535808,2988537855,ES 2988537856,2988539935,FR 2988539936,2988539967,GB @@ -62849,7 +79900,10 @@ 2988539976,2988539983,FR 2988539984,2988540003,PL 2988540004,2988540007,CZ -2988540008,2988540023,FR +2988540008,2988540011,ES +2988540012,2988540015,DE +2988540016,2988540019,FR +2988540020,2988540023,GB 2988540024,2988540027,PL 2988540028,2988540031,ES 2988540032,2988540207,FR @@ -62863,14 +79917,13 @@ 2988540276,2988540279,PL 2988540280,2988540287,FR 2988540288,2988540303,BE -2988540304,2988540319,FR -2988540320,2988540351,PT -2988540352,2988540363,FR +2988540304,2988540363,FR 2988540364,2988540367,PL 2988540368,2988540375,FR 2988540376,2988540379,GB -2988540380,2988540423,FR -2988540424,2988540427,GB +2988540380,2988540415,FR +2988540416,2988540419,CZ +2988540420,2988540427,GB 2988540428,2988540431,NL 2988540432,2988540435,FR 2988540436,2988540439,DE @@ -62880,7 +79933,7 @@ 2988540456,2988540459,DE 2988540460,2988540463,ES 2988540464,2988540471,PL -2988540472,2988540479,DE +2988540472,2988540479,ES 2988540480,2988540483,FR 2988540484,2988540487,DE 2988540488,2988540491,ES @@ -62889,31 +79942,35 @@ 2988540508,2988540511,ES 2988540512,2988540543,FR 2988540544,2988540607,PL -2988540608,2988540639,FR +2988540608,2988540623,FR +2988540624,2988540631,GB +2988540632,2988540635,DE +2988540636,2988540639,PT 2988540640,2988540647,PL -2988540648,2988540651,GB -2988540652,2988540663,PL -2988540664,2988540671,IT -2988540672,2988540679,PL -2988540680,2988540683,IT -2988540684,2988540715,FR +2988540648,2988540651,FR +2988540652,2988540667,PL +2988540668,2988540671,IT +2988540672,2988540683,PL +2988540684,2988540707,FR +2988540708,2988540711,DE +2988540712,2988540715,FR 2988540716,2988540719,PL 2988540720,2988540735,DE 2988540736,2988540751,ES 2988540752,2988540759,PL -2988540760,2988540763,GB +2988540760,2988540763,ES 2988540764,2988540767,DE -2988540768,2988540775,GB +2988540768,2988540775,PL 2988540776,2988540783,BE 2988540784,2988540787,ES -2988540788,2988540791,DE -2988540792,2988540795,FR +2988540788,2988540795,FR 2988540796,2988540799,GB 2988540800,2988540831,FR 2988540832,2988540839,PL 2988540840,2988540847,GB -2988540848,2988540855,FR -2988540856,2988540863,ES +2988540848,2988540851,FR +2988540852,2988540855,DE +2988540856,2988540863,IT 2988540864,2988540931,FR 2988540932,2988540935,DE 2988540936,2988540943,FR @@ -62933,15 +79990,22 @@ 2988541232,2988541235,DE 2988541236,2988541243,FR 2988541244,2988541247,GB -2988541248,2988541279,FR +2988541248,2988541263,FR +2988541264,2988541279,IT 2988541280,2988541311,NL 2988541312,2988541315,DE 2988541316,2988541319,CH 2988541320,2988541327,DE 2988541328,2988541335,PL -2988541336,2988541375,FR +2988541336,2988541343,FR +2988541344,2988541347,GB +2988541348,2988541351,IT +2988541352,2988541359,IE +2988541360,2988541367,ES +2988541368,2988541371,PL +2988541372,2988541375,GB 2988541376,2988541391,BE -2988541392,2988541407,FR +2988541392,2988541407,CH 2988541408,2988541423,BE 2988541424,2988541439,DE 2988541440,2988541443,IT @@ -62949,13 +80013,12 @@ 2988541464,2988541467,ES 2988541468,2988541503,FR 2988541504,2988541519,CH -2988541520,2988541535,FR -2988541536,2988541539,GB +2988541520,2988541539,FR 2988541540,2988541543,PT 2988541544,2988541547,FR 2988541548,2988541551,ES -2988541552,2988541583,FR -2988541584,2988541587,ES +2988541552,2988541567,FR +2988541568,2988541587,ES 2988541588,2988541603,FR 2988541604,2988541607,NL 2988541608,2988541611,GB @@ -62971,7 +80034,8 @@ 2988541688,2988541691,ES 2988541692,2988541695,IT 2988541696,2988541727,PL -2988541728,2988541735,FR +2988541728,2988541731,NL +2988541732,2988541735,FR 2988541736,2988541739,GB 2988541740,2988541743,FR 2988541744,2988541747,DE @@ -62986,12 +80050,10 @@ 2988541788,2988541791,FR 2988541792,2988541807,ES 2988541808,2988541815,FR -2988541816,2988541819,DE +2988541816,2988541819,ES 2988541820,2988541823,CZ 2988541824,2988541855,FR -2988541856,2988541859,PL -2988541860,2988541863,GB -2988541864,2988541867,PL +2988541856,2988541867,PL 2988541868,2988541887,FR 2988541888,2988541895,DE 2988541896,2988541899,PL @@ -63007,8 +80069,11 @@ 2988541956,2988541959,DE 2988541960,2988541963,CH 2988541964,2988541967,DE -2988541968,2988541983,FR -2988541984,2988542015,ES +2988541968,2988541999,FR +2988542000,2988542003,PL +2988542004,2988542007,DE +2988542008,2988542011,FI +2988542012,2988542015,CH 2988542016,2988542019,GB 2988542020,2988542023,FR 2988542024,2988542027,NL @@ -63021,18 +80086,19 @@ 2988542072,2988542255,FR 2988542256,2988542271,IT 2988542272,2988542335,ES -2988542336,2988542367,FR +2988542336,2988542367,DE 2988542368,2988542399,CZ -2988542400,2988542407,FR -2988542408,2988542415,PL +2988542400,2988542403,FI +2988542404,2988542407,FR +2988542408,2988542411,LT +2988542412,2988542415,PL 2988542416,2988542431,FR 2988542432,2988542439,PL 2988542440,2988542443,ES 2988542444,2988542447,FR 2988542448,2988542455,PL 2988542456,2988542459,FR -2988542460,2988542463,ES -2988542464,2988542495,NL +2988542460,2988542495,ES 2988542496,2988542527,FR 2988542528,2988542535,DE 2988542536,2988542539,NL @@ -63044,34 +80110,41 @@ 2988542596,2988542599,FI 2988542600,2988542603,GB 2988542604,2988542611,FR -2988542612,2988542623,DE -2988542624,2988542655,FR +2988542612,2988542627,DE +2988542628,2988542631,FR +2988542632,2988542635,CZ +2988542636,2988542639,GB +2988542640,2988542651,FR +2988542652,2988542655,PL 2988542656,2988542719,BE 2988542720,2988542783,CH 2988542784,2988542847,CZ 2988542848,2988542919,DE 2988542920,2988542923,PL -2988542924,2988542943,GB +2988542924,2988542935,FR +2988542936,2988542939,IT +2988542940,2988542943,PL 2988542944,2988542959,DE 2988542960,2988542963,FR 2988542964,2988542967,CH -2988542968,2988542971,NL -2988542972,2988542975,DE -2988542976,2988542991,FR -2988542992,2988542995,FI -2988542996,2988542999,IE -2988543000,2988543003,IT -2988543004,2988543007,LT +2988542968,2988542975,DE +2988542976,2988543007,FR 2988543008,2988543011,PL -2988543012,2988543015,FR +2988543012,2988543015,LT 2988543016,2988543023,CH 2988543024,2988543039,DE -2988543040,2988543043,CZ -2988543044,2988543047,ES -2988543048,2988543051,IE -2988543052,2988543067,FR +2988543040,2988543047,GB +2988543048,2988543067,FR 2988543068,2988543071,PL -2988543072,2988543231,FR +2988543072,2988543103,FR +2988543104,2988543183,GB +2988543184,2988543191,CH +2988543192,2988543195,PL +2988543196,2988543203,GB +2988543204,2988543207,FR +2988543208,2988543211,PL +2988543212,2988543215,GB +2988543216,2988543231,FR 2988543232,2988543235,IT 2988543236,2988543243,FR 2988543244,2988543247,IT @@ -63084,22 +80157,26 @@ 2988543300,2988543303,FR 2988543304,2988543307,ES 2988543308,2988543311,PL -2988543312,2988543315,DE +2988543312,2988543315,FR 2988543316,2988543319,IE 2988543320,2988543323,FI 2988543324,2988543327,PL 2988543328,2988543379,FR -2988543380,2988543399,DE +2988543380,2988543383,PL +2988543384,2988543399,DE 2988543400,2988543403,GB 2988543404,2988543407,NL -2988543408,2988543423,GB +2988543408,2988543411,PL +2988543412,2988543415,FR +2988543416,2988543419,ES +2988543420,2988543423,PL 2988543424,2988543431,DE 2988543432,2988543439,GB 2988543440,2988543447,FR 2988543448,2988543451,BE 2988543452,2988543455,PL 2988543456,2988543463,FR -2988543464,2988543471,GB +2988543464,2988543471,IT 2988543472,2988543487,FR 2988543488,2988543503,BE 2988543504,2988543527,FR @@ -63114,34 +80191,45 @@ 2988543584,2988543615,DE 2988543616,2988543743,ES 2988543744,2988543935,FR -2988543936,2988543939,FI -2988543940,2988543947,IT +2988543936,2988543947,PL 2988543948,2988543959,BE -2988543960,2988543967,PL -2988543968,2988543999,FR -2988544000,2988544127,CZ +2988543960,2988543983,PL +2988543984,2988543999,PT +2988544000,2988544015,DE +2988544016,2988544023,GB +2988544024,2988544031,IE +2988544032,2988544035,PL +2988544036,2988544039,FR +2988544040,2988544043,DE +2988544044,2988544047,GB +2988544048,2988544055,FR +2988544056,2988544063,FI +2988544064,2988544127,DE 2988544128,2988544159,GB 2988544160,2988544163,FR 2988544164,2988544167,PL 2988544168,2988544175,GB 2988544176,2988544179,CH -2988544180,2988544183,IT -2988544184,2988544191,DE +2988544180,2988544183,DE +2988544184,2988544187,PL +2988544188,2988544191,FR 2988544192,2988544227,ES 2988544228,2988544271,FR -2988544272,2988544279,BE +2988544272,2988544275,PL +2988544276,2988544279,FR 2988544280,2988544283,GB -2988544284,2988544287,DE +2988544284,2988544287,CZ 2988544288,2988544291,PL 2988544292,2988544295,GB 2988544296,2988544303,FR -2988544304,2988544307,PL -2988544308,2988544311,IT +2988544304,2988544311,IT 2988544312,2988544315,DE -2988544316,2988544323,FR -2988544324,2988544327,GB -2988544328,2988544331,NL -2988544332,2988544351,FR +2988544316,2988544319,FR +2988544320,2988544323,PL +2988544324,2988544327,ES +2988544328,2988544331,PL +2988544332,2988544335,A1 +2988544336,2988544351,FR 2988544352,2988544355,PL 2988544356,2988544359,DE 2988544360,2988544367,FR @@ -63151,16 +80239,27 @@ 2988544384,2988544447,GB 2988544448,2988544463,FR 2988544464,2988544479,ES -2988544480,2988544495,PL -2988544496,2988544511,IE +2988544480,2988544511,PL 2988544512,2988544527,FR 2988544528,2988544535,ES -2988544536,2988544539,PL -2988544540,2988544543,LT +2988544536,2988544543,FR 2988544544,2988544639,ES -2988544640,2988544735,DE -2988544736,2988544751,PL -2988544752,2988544799,FR +2988544640,2988544647,PL +2988544648,2988544655,FR +2988544656,2988544663,ES +2988544664,2988544667,DE +2988544668,2988544671,ES +2988544672,2988544687,GB +2988544688,2988544703,PL +2988544704,2988544719,GB +2988544720,2988544723,FR +2988544724,2988544727,DE +2988544728,2988544767,FR +2988544768,2988544775,ES +2988544776,2988544783,PT +2988544784,2988544787,GB +2988544788,2988544791,PL +2988544792,2988544799,PT 2988544800,2988544831,FI 2988544832,2988544863,FR 2988544864,2988544895,PL @@ -63168,12 +80267,11 @@ 2988544928,2988544931,DE 2988544932,2988544935,FR 2988544936,2988544943,IT -2988544944,2988544951,PL +2988544944,2988544951,PT 2988544952,2988544959,GB 2988544960,2988544979,ES 2988544980,2988544983,FR -2988544984,2988544991,IE -2988544992,2988544995,PL +2988544984,2988544995,PL 2988544996,2988544999,FR 2988545000,2988545003,DE 2988545004,2988545007,ES @@ -63207,21 +80305,28 @@ 2988545372,2988545375,GB 2988545376,2988545383,DE 2988545384,2988545387,ES -2988545388,2988545407,FR -2988545408,2988545439,IE -2988545440,2988545471,FR -2988545472,2988545503,ES -2988545504,2988545507,FR -2988545508,2988545511,DE +2988545388,2988545391,FR +2988545392,2988545395,DE +2988545396,2988545439,FR +2988545440,2988545443,DE +2988545444,2988545447,ES +2988545448,2988545455,PL +2988545456,2988545503,FR +2988545504,2988545511,DE 2988545512,2988545515,IT -2988545516,2988545531,PL -2988545532,2988545535,FR -2988545536,2988545567,BE -2988545568,2988545571,NL -2988545572,2988545575,DE +2988545516,2988545523,PL +2988545524,2988545527,FR +2988545528,2988545531,PL +2988545532,2988545551,FR +2988545552,2988545555,ES +2988545556,2988545559,IT +2988545560,2988545563,FR +2988545564,2988545575,DE 2988545576,2988545579,FR 2988545580,2988545583,ES -2988545584,2988545663,FR +2988545584,2988545599,FR +2988545600,2988545631,DE +2988545632,2988545663,FR 2988545664,2988545695,ES 2988545696,2988545727,DE 2988545728,2988545791,FR @@ -63233,15 +80338,20 @@ 2988545836,2988545839,DE 2988545840,2988545855,FR 2988545856,2988545859,ES -2988545860,2988545867,FR -2988545868,2988545871,PL +2988545860,2988545863,FR +2988545864,2988545871,PL 2988545872,2988545919,FR -2988545920,2988545923,GB +2988545920,2988545923,ES 2988545924,2988545927,PL 2988545928,2988545931,BE -2988545932,2988545943,FR -2988545944,2988545967,NL -2988545968,2988545983,GB +2988545932,2988545935,DE +2988545936,2988545943,FR +2988545944,2988545947,CZ +2988545948,2988545967,FR +2988545968,2988545971,IT +2988545972,2988545975,DE +2988545976,2988545979,FR +2988545980,2988545983,DE 2988545984,2988545987,FR 2988545988,2988545991,PL 2988545992,2988545995,LT @@ -63256,62 +80366,75 @@ 2988546112,2988546115,ES 2988546116,2988546119,FR 2988546120,2988546123,IE -2988546124,2988546127,ES -2988546128,2988546143,GB +2988546124,2988546143,GB 2988546144,2988546159,PL 2988546160,2988546175,ES 2988546176,2988546239,GB 2988546240,2988546271,LT 2988546272,2988546279,IT -2988546280,2988546283,GB +2988546280,2988546283,DE 2988546284,2988546287,BE 2988546288,2988546291,GB 2988546292,2988546295,ES -2988546296,2988546303,PL -2988546304,2988546307,ES +2988546296,2988546299,PL +2988546300,2988546307,ES 2988546308,2988546311,NL -2988546312,2988546315,IT -2988546316,2988546319,FR +2988546312,2988546319,FR 2988546320,2988546327,CH 2988546328,2988546335,ES 2988546336,2988546351,PT 2988546352,2988546367,ES -2988546368,2988546431,FR -2988546432,2988546463,DE +2988546368,2988546439,FR +2988546440,2988546443,DE +2988546444,2988546447,FR +2988546448,2988546451,IE +2988546452,2988546463,ES 2988546464,2988546527,FR 2988546528,2988546535,BE -2988546536,2988546539,IE -2988546540,2988546547,ES +2988546536,2988546539,FR +2988546540,2988546543,DE +2988546544,2988546547,ES 2988546548,2988546559,FR 2988546560,2988546567,NL -2988546568,2988546575,FR +2988546568,2988546571,PL +2988546572,2988546575,DE 2988546576,2988546579,ES 2988546580,2988546583,GB 2988546584,2988546591,FR 2988546592,2988546599,DE 2988546600,2988546603,PT -2988546604,2988546615,GB +2988546604,2988546607,GB +2988546608,2988546615,NL 2988546616,2988546619,FI -2988546620,2988546623,FR +2988546620,2988546623,IT 2988546624,2988546687,FI 2988546688,2988546695,PL 2988546696,2988546699,FR 2988546700,2988546703,IT 2988546704,2988546727,FR -2988546728,2988546735,ES -2988546736,2988546751,FR -2988546752,2988546783,ES -2988546784,2988546819,FR +2988546728,2988546731,PL +2988546732,2988546735,DE +2988546736,2988546815,FR +2988546816,2988546819,PT 2988546820,2988546823,NL 2988546824,2988546831,FR 2988546832,2988546835,DE 2988546836,2988546839,ES 2988546840,2988546847,IE -2988546848,2988546879,FR +2988546848,2988546851,PT +2988546852,2988546855,IT +2988546856,2988546859,FR +2988546860,2988546863,IE +2988546864,2988546867,GB +2988546868,2988546871,FR +2988546872,2988546875,GB +2988546876,2988546879,IE 2988546880,2988546947,ES 2988546948,2988546951,DE -2988546952,2988546959,FR -2988546960,2988546967,DE +2988546952,2988546955,FR +2988546956,2988546959,DE +2988546960,2988546963,CH +2988546964,2988546967,IT 2988546968,2988546971,FR 2988546972,2988546975,BE 2988546976,2988546991,FI @@ -63319,8 +80442,7 @@ 2988546996,2988546999,ES 2988547000,2988547003,IT 2988547004,2988547007,ES -2988547008,2988547011,GB -2988547012,2988547015,FR +2988547008,2988547015,FR 2988547016,2988547019,NL 2988547020,2988547023,ES 2988547024,2988547039,FR @@ -63340,22 +80462,24 @@ 2988547124,2988547127,IT 2988547128,2988547135,FR 2988547136,2988547167,IT -2988547168,2988547199,BE +2988547168,2988547183,IE +2988547184,2988547191,ES +2988547192,2988547195,DE +2988547196,2988547199,PL 2988547200,2988547207,IE -2988547208,2988547211,FR -2988547212,2988547215,DE -2988547216,2988547219,IT -2988547220,2988547223,FR -2988547224,2988547227,ES -2988547228,2988547231,PT -2988547232,2988547239,FR +2988547208,2988547211,ES +2988547212,2988547215,GB +2988547216,2988547223,FR +2988547224,2988547227,GB +2988547228,2988547239,FR 2988547240,2988547247,PL 2988547248,2988547255,NL 2988547256,2988547263,FR 2988547264,2988547267,GB -2988547268,2988547279,ES -2988547280,2988547295,FR -2988547296,2988547303,DE +2988547268,2988547271,ES +2988547272,2988547275,GB +2988547276,2988547295,FR +2988547296,2988547303,BE 2988547304,2988547311,FR 2988547312,2988547327,PL 2988547328,2988547423,FR @@ -63365,39 +80489,48 @@ 2988547444,2988547447,DE 2988547448,2988547451,FR 2988547452,2988547455,PT -2988547456,2988547471,DE -2988547472,2988547475,NL +2988547456,2988547471,PL +2988547472,2988547475,LT 2988547476,2988547479,GB 2988547480,2988547487,FR 2988547488,2988547519,ES -2988547520,2988547523,PL +2988547520,2988547523,NL 2988547524,2988547527,CZ 2988547528,2988547531,IT 2988547532,2988547535,ES 2988547536,2988547539,FR 2988547540,2988547543,DE -2988547544,2988547547,IT +2988547544,2988547547,BE 2988547548,2988547567,FR 2988547568,2988547583,DE 2988547584,2988547599,ES -2988547600,2988547615,FR -2988547616,2988547647,PL -2988547648,2988547655,FR +2988547600,2988547655,FR 2988547656,2988547663,PL 2988547664,2988547679,FR 2988547680,2988547711,CH -2988547712,2988547727,PL -2988547728,2988547751,FR -2988547752,2988547775,DE +2988547712,2988547743,FR +2988547744,2988547751,PT +2988547752,2988547759,ES +2988547760,2988547775,FR 2988547776,2988547807,ES -2988547808,2988547871,FR +2988547808,2988547823,GB +2988547824,2988547831,FR +2988547832,2988547835,DE +2988547836,2988547839,BE +2988547840,2988547871,FR 2988547872,2988547903,GB 2988547904,2988547935,FR 2988547936,2988547967,LT -2988547968,2988548047,FR +2988547968,2988547971,GB +2988547972,2988547975,DE +2988547976,2988547983,PL +2988547984,2988548015,FR +2988548016,2988548019,ES +2988548020,2988548023,LT +2988548024,2988548047,FR 2988548048,2988548055,ES 2988548056,2988548059,PL -2988548060,2988548063,DE +2988548060,2988548063,IE 2988548064,2988548095,ES 2988548096,2988556287,FR 2988556288,2988556295,PL @@ -63405,16 +80538,26 @@ 2988556304,2988556311,PL 2988556312,2988556319,FR 2988556320,2988556351,GB -2988556352,2988556359,DE +2988556352,2988556355,DE +2988556356,2988556359,PL 2988556360,2988556383,FR 2988556384,2988556415,DE -2988556416,2988556447,FR +2988556416,2988556419,IT +2988556420,2988556423,FR +2988556424,2988556427,BE +2988556428,2988556431,ES +2988556432,2988556435,GB +2988556436,2988556439,FI +2988556440,2988556443,FR +2988556444,2988556447,PL 2988556448,2988556451,NL 2988556452,2988556479,FR -2988556480,2988556495,IT +2988556480,2988556487,IT +2988556488,2988556491,PL +2988556492,2988556495,DE 2988556496,2988556527,FR 2988556528,2988556535,PL -2988556536,2988556539,GB +2988556536,2988556539,FR 2988556540,2988556543,DE 2988556544,2988556831,FR 2988556832,2988556839,DE @@ -63424,34 +80567,45 @@ 2988556864,2988556879,FR 2988556880,2988556883,ES 2988556884,2988556887,DE -2988556888,2988556895,FR +2988556888,2988556891,BE +2988556892,2988556895,FR 2988556896,2988556911,PL 2988556912,2988556919,NL -2988556920,2988556959,PL -2988556960,2988556963,ES +2988556920,2988556927,PL +2988556928,2988556943,FR +2988556944,2988556963,PL 2988556964,2988556967,FR 2988556968,2988556975,BE 2988556976,2988556979,FI -2988556980,2988557003,FR +2988556980,2988556999,FR +2988557000,2988557003,BE 2988557004,2988557007,ES 2988557008,2988557023,FR 2988557024,2988557039,IE -2988557040,2988557047,FR +2988557040,2988557043,PT +2988557044,2988557047,BE 2988557048,2988557055,PL 2988557056,2988557059,ES -2988557060,2988557071,FR -2988557072,2988557075,PL +2988557060,2988557063,FR +2988557064,2988557067,ES +2988557068,2988557075,PL 2988557076,2988557079,FR 2988557080,2988557087,FI -2988557088,2988557119,DE -2988557120,2988557151,NL +2988557088,2988557095,CH +2988557096,2988557103,ES +2988557104,2988557111,FR +2988557112,2988557115,LT +2988557116,2988557151,NL 2988557152,2988557215,FR 2988557216,2988557247,BE 2988557248,2988557251,FR 2988557252,2988557255,ES -2988557256,2988557263,FR +2988557256,2988557259,FR +2988557260,2988557263,DE 2988557264,2988557279,GB -2988557280,2988557295,ES +2988557280,2988557287,ES +2988557288,2988557291,PL +2988557292,2988557295,DE 2988557296,2988557299,BE 2988557300,2988557303,PL 2988557304,2988557311,CZ @@ -63460,22 +80614,22 @@ 2988557344,2988557379,FR 2988557380,2988557383,ES 2988557384,2988557387,GB -2988557388,2988557391,ES -2988557392,2988557395,FR -2988557396,2988557399,PL -2988557400,2988557407,DE +2988557388,2988557391,CZ +2988557392,2988557399,PL +2988557400,2988557403,ES +2988557404,2988557407,IT 2988557408,2988557427,ES 2988557428,2988557431,DE -2988557432,2988557435,PL -2988557436,2988557439,FR +2988557432,2988557439,PL 2988557440,2988557471,GB 2988557472,2988557487,PL -2988557488,2988557495,DE +2988557488,2988557491,FI +2988557492,2988557495,FR 2988557496,2988557539,PL -2988557540,2988557543,ES -2988557544,2988557599,FR -2988557600,2988557631,GB -2988557632,2988557639,FR +2988557540,2988557599,FR +2988557600,2988557631,DE +2988557632,2988557635,GB +2988557636,2988557639,PT 2988557640,2988557643,IE 2988557644,2988557647,GB 2988557648,2988557651,NL @@ -63483,27 +80637,32 @@ 2988557664,2988557695,PL 2988557696,2988557727,FR 2988557728,2988557759,PL -2988557760,2988557763,FR +2988557760,2988557763,DE 2988557764,2988557767,ES 2988557768,2988557771,PL -2988557772,2988557823,FR -2988557824,2988557951,DE +2988557772,2988557775,FR +2988557776,2988557791,BE +2988557792,2988557951,FR 2988557952,2988557983,LT -2988557984,2988557999,GB +2988557984,2988557999,FR 2988558000,2988558015,IE 2988558016,2988558047,FR 2988558048,2988558063,PL -2988558064,2988558071,IT +2988558064,2988558067,DE +2988558068,2988558071,FI 2988558072,2988558075,DE 2988558076,2988558079,PL 2988558080,2988558083,FR 2988558084,2988558087,PL -2988558088,2988558099,FR -2988558100,2988558103,PL -2988558104,2988558119,FR -2988558120,2988558123,GB +2988558088,2988558095,FR +2988558096,2988558103,PL +2988558104,2988558107,NL +2988558108,2988558111,IT +2988558112,2988558115,IE +2988558116,2988558123,GB 2988558124,2988558127,FR -2988558128,2988558135,PL +2988558128,2988558131,DE +2988558132,2988558135,PL 2988558136,2988558139,GB 2988558140,2988558143,DE 2988558144,2988558207,PL @@ -63514,10 +80673,13 @@ 2988558464,2988558527,NL 2988558528,2988558591,PL 2988558592,2988558655,GB -2988558656,2988558727,FR -2988558728,2988558731,DE +2988558656,2988558719,FR +2988558720,2988558727,PL +2988558728,2988558731,IT 2988558732,2988558735,PT -2988558736,2988558767,FR +2988558736,2988558747,FR +2988558748,2988558751,GB +2988558752,2988558767,FR 2988558768,2988558783,CH 2988558784,2988558831,FR 2988558832,2988558847,IT @@ -63525,9 +80687,11 @@ 2988558884,2988558887,BE 2988558888,2988558891,GB 2988558892,2988558895,NL -2988558896,2988558903,FR +2988558896,2988558899,CH +2988558900,2988558903,FR 2988558904,2988558907,NL -2988558908,2988558935,GB +2988558908,2988558911,PL +2988558912,2988558935,GB 2988558936,2988558939,PL 2988558940,2988558943,GB 2988558944,2988558975,FR @@ -63536,16 +80700,14 @@ 2988559012,2988559015,PL 2988559016,2988559039,FR 2988559040,2988559055,GB -2988559056,2988559071,LT +2988559056,2988559059,NL +2988559060,2988559063,LT +2988559064,2988559071,FR 2988559072,2988559103,ES 2988559104,2988559135,PL 2988559136,2988559139,DE 2988559140,2988559151,PL -2988559152,2988559231,FR -2988559232,2988559247,DE -2988559248,2988559255,FR -2988559256,2988559259,DE -2988559260,2988559263,GB +2988559152,2988559263,FR 2988559264,2988559295,LT 2988559296,2988559359,PL 2988559360,2988559631,FR @@ -63557,26 +80719,38 @@ 2988559700,2988559703,PL 2988559704,2988559707,DE 2988559708,2988559711,PL -2988559712,2988559719,FR -2988559720,2988559727,DE -2988559728,2988559731,FR +2988559712,2988559723,FR +2988559724,2988559727,IT +2988559728,2988559731,DE 2988559732,2988559735,PL 2988559736,2988559743,GB -2988559744,2988559871,FR +2988559744,2988559807,FR +2988559808,2988559871,ES 2988559872,2988560383,IT -2988560384,2988560447,FR +2988560384,2988560387,FR +2988560388,2988560391,ES +2988560392,2988560395,GB +2988560396,2988560399,FR +2988560400,2988560415,IE +2988560416,2988560439,FR +2988560440,2988560443,DE +2988560444,2988560447,PL 2988560448,2988560451,DE 2988560452,2988560455,PL -2988560456,2988560463,FR -2988560464,2988560479,PL -2988560480,2988560575,FR +2988560456,2988560479,FR +2988560480,2988560515,ES +2988560516,2988560519,FI +2988560520,2988560523,DE +2988560524,2988560527,BE +2988560528,2988560535,ES +2988560536,2988560543,IE +2988560544,2988560575,GB 2988560576,2988560591,ES -2988560592,2988560595,DE +2988560592,2988560595,NL 2988560596,2988560599,IT 2988560600,2988560603,PL -2988560604,2988560607,PT -2988560608,2988560623,FR -2988560624,2988560627,BE +2988560604,2988560623,FR +2988560624,2988560627,PL 2988560628,2988560639,FR 2988560640,2988560703,GB 2988560704,2988560711,DE @@ -63590,24 +80764,32 @@ 2988560800,2988560815,DE 2988560816,2988560831,FR 2988560832,2988560863,GB -2988560864,2988560895,DE +2988560864,2988560871,PL +2988560872,2988560895,GB 2988560896,2988560911,PL 2988560912,2988560919,FR 2988560920,2988560923,DE -2988560924,2988560951,FR +2988560924,2988560935,FR +2988560936,2988560939,CZ +2988560940,2988560951,FR 2988560952,2988560959,PL -2988560960,2988561023,IE -2988561024,2988561031,ES -2988561032,2988561039,FR -2988561040,2988561043,ES -2988561044,2988561047,FR +2988560960,2988560975,FR +2988560976,2988560991,ES +2988560992,2988560995,FR +2988560996,2988560999,DE +2988561000,2988561023,FR +2988561024,2988561027,BE +2988561028,2988561031,FR +2988561032,2988561039,ES +2988561040,2988561043,GB +2988561044,2988561047,DE 2988561048,2988561051,PL 2988561052,2988561055,GB 2988561056,2988561059,FR 2988561060,2988561071,PL -2988561072,2988561075,NL -2988561076,2988561079,IT -2988561080,2988561083,DE +2988561072,2988561075,ES +2988561076,2988561079,LT +2988561080,2988561083,PL 2988561084,2988561087,GB 2988561088,2988561095,FR 2988561096,2988561099,PL @@ -63617,17 +80799,24 @@ 2988561172,2988561175,PL 2988561176,2988561179,ES 2988561180,2988561183,PL -2988561184,2988561199,GB +2988561184,2988561187,GB +2988561188,2988561191,FR +2988561192,2988561195,CZ +2988561196,2988561199,LT 2988561200,2988561203,PL 2988561204,2988561207,GB 2988561208,2988561215,PL -2988561216,2988561283,FR +2988561216,2988561231,FR +2988561232,2988561235,PT +2988561236,2988561239,GB +2988561240,2988561243,BE +2988561244,2988561263,PL +2988561264,2988561283,FR 2988561284,2988561287,NL 2988561288,2988561291,ES 2988561292,2988561295,PT 2988561296,2988561303,PL -2988561304,2988561311,FR -2988561312,2988561343,IE +2988561304,2988561343,FR 2988561344,2988561375,PL 2988561376,2988561391,FR 2988561392,2988561403,ES @@ -63636,27 +80825,31 @@ 2988561668,2988561671,PL 2988561672,2988561675,NL 2988561676,2988561679,FI -2988561680,2988561695,ES +2988561680,2988561683,FR +2988561684,2988561687,CZ +2988561688,2988561691,DE +2988561692,2988561695,LT 2988561696,2988561727,FR 2988561728,2988561743,PL 2988561744,2988561747,FR 2988561748,2988561751,PL 2988561752,2988561759,GB 2988561760,2988561763,PL -2988561764,2988561767,DE +2988561764,2988561767,PT 2988561768,2988561775,PL -2988561776,2988561843,FR +2988561776,2988561791,FR +2988561792,2988561823,PL +2988561824,2988561843,FR 2988561844,2988561847,IT 2988561848,2988561855,FR 2988561856,2988561871,IE 2988561872,2988561875,CH -2988561876,2988561887,FR +2988561876,2988561879,A1 +2988561880,2988561887,FR 2988561888,2988561903,PL -2988561904,2988561919,IE -2988561920,2988561983,FR +2988561904,2988561983,FR 2988561984,2988562015,DE -2988562016,2988562023,PT -2988562024,2988562027,NL +2988562016,2988562027,ES 2988562028,2988562031,LT 2988562032,2988562047,PL 2988562048,2988562079,DE @@ -63665,27 +80858,31 @@ 2988562112,2988562127,FR 2988562128,2988562143,PL 2988562144,2988562151,FR -2988562152,2988562159,PL -2988562160,2988562175,IT -2988562176,2988562431,NL +2988562152,2988562163,PL +2988562164,2988562167,DE +2988562168,2988562431,NL 2988562432,2988562591,FR -2988562592,2988562595,GB -2988562596,2988562607,FR +2988562592,2988562599,GB +2988562600,2988562607,FR 2988562608,2988562611,PT 2988562612,2988562623,PL 2988562624,2988562687,FI 2988562688,2988562703,GB 2988562704,2988562707,PL 2988562708,2988562711,DE -2988562712,2988562719,GB +2988562712,2988562719,FR 2988562720,2988562815,BE -2988562816,2988562847,FR -2988562848,2988562855,NL -2988562856,2988562863,DE +2988562816,2988562823,PL +2988562824,2988562831,PT +2988562832,2988562835,FR +2988562836,2988562839,NL +2988562840,2988562843,LT +2988562844,2988562847,PL +2988562848,2988562863,GB 2988562864,2988562911,FR 2988562912,2988562943,PL 2988562944,2988563011,FR -2988563012,2988563015,PL +2988563012,2988563015,PT 2988563016,2988563023,GB 2988563024,2988563043,FR 2988563044,2988563047,ES @@ -63696,17 +80893,23 @@ 2988563068,2988563075,PT 2988563076,2988563079,GB 2988563080,2988563083,DE -2988563084,2988563087,FR -2988563088,2988563103,NL +2988563084,2988563087,LT +2988563088,2988563103,PL 2988563104,2988563135,FR 2988563136,2988563151,PL -2988563152,2988563199,FR +2988563152,2988563183,FR +2988563184,2988563187,CZ +2988563188,2988563191,PL +2988563192,2988563199,FR 2988563200,2988563455,IE 2988563456,2988563487,FR -2988563488,2988563495,GB -2988563496,2988563503,FR +2988563488,2988563499,GB +2988563500,2988563503,FR 2988563504,2988563519,PL -2988563520,2988563555,FR +2988563520,2988563523,CZ +2988563524,2988563527,FI +2988563528,2988563535,PL +2988563536,2988563555,FR 2988563556,2988563559,BE 2988563560,2988563567,FR 2988563568,2988563571,NL @@ -63721,14 +80924,47 @@ 2988563664,2988563667,FR 2988563668,2988563671,PL 2988563672,2988563675,FR -2988563676,2988563679,PL +2988563676,2988563679,NL 2988563680,2988563967,FR 2988563968,2988563999,BE -2988564000,2988564019,FR +2988564000,2988564015,IE +2988564016,2988564019,FR 2988564020,2988564023,PL 2988564024,2988564031,FR 2988564032,2988564063,BE -2988564064,2988572671,FR +2988564064,2988564143,FR +2988564144,2988564159,FI +2988564160,2988564175,FR +2988564176,2988564179,PL +2988564180,2988564183,GB +2988564184,2988564187,PL +2988564188,2988564191,GB +2988564192,2988564195,ES +2988564196,2988564199,LT +2988564200,2988564203,DE +2988564204,2988564215,FR +2988564216,2988564219,GB +2988564220,2988564223,IT +2988564224,2988564275,FR +2988564276,2988564279,BE +2988564280,2988564287,ES +2988564288,2988564303,FR +2988564304,2988564307,IT +2988564308,2988564311,PL +2988564312,2988564319,ES +2988564320,2988564351,FR +2988564352,2988564359,DE +2988564360,2988564367,GB +2988564368,2988564383,FR +2988564384,2988564387,IE +2988564388,2988564391,GB +2988564392,2988564395,NL +2988564396,2988564399,CH +2988564400,2988564403,DE +2988564404,2988564407,ES +2988564408,2988564471,FR +2988564472,2988564479,GB +2988564480,2988572671,FR 2988572672,2988703743,RU 2988703744,2988834815,PL 2988834816,2988965887,CH @@ -63749,13 +80985,21 @@ 2990276608,2990342143,ES 2990342144,2990407679,KW 2990407680,2990473215,RU -2990473216,2990518015,DE +2990473216,2990517655,DE +2990517656,2990517663,IT +2990517664,2990518015,DE 2990518016,2990518079,IT -2990518080,2990525247,DE +2990518080,2990518815,DE +2990518816,2990518823,IT +2990518824,2990525247,DE 2990525248,2990525311,ES -2990525312,2990534655,DE -2990534656,2990534783,EG -2990534784,2990535935,DE +2990525312,2990528031,DE +2990528032,2990528039,IT +2990528040,2990528703,DE +2990528704,2990528735,RS +2990528736,2990534655,DE +2990534656,2990534687,EG +2990534688,2990535935,DE 2990535936,2990535967,PL 2990535968,2990538751,DE 2990538752,2991063039,RU @@ -63768,151 +81012,173 @@ 2991128576,2991144959,PL 2991144960,2991161343,SA 2991161344,2991177727,FR -2991177728,2991177983,DK -2991177984,2991178239,NL -2991178240,2991178495,DE -2991178496,2991178751,RU -2991178752,2991182335,SE -2991182336,2991182591,GB -2991182592,2991185919,SE +2991177728,2991178751,A1 +2991178752,2991179263,SE +2991179264,2991179327,A1 +2991179328,2991180799,SE +2991180800,2991182847,A1 +2991182848,2991185919,SE 2991185920,2991185951,GB 2991185952,2991185967,NL 2991185968,2991185983,DE 2991185984,2991185999,DK 2991186000,2991186015,ES -2991186016,2991186175,SE +2991186016,2991186019,FR +2991186020,2991186175,SE 2991186176,2991186207,GB 2991186208,2991186223,NL 2991186224,2991186239,DE 2991186240,2991186255,DK 2991186256,2991186271,ES -2991186272,2991186431,SE +2991186272,2991186275,FR +2991186276,2991186431,SE 2991186432,2991186463,GB 2991186464,2991186479,NL 2991186480,2991186495,DE 2991186496,2991186511,DK 2991186512,2991186527,ES -2991186528,2991186687,SE +2991186528,2991186531,FR +2991186532,2991186687,SE 2991186688,2991186719,GB 2991186720,2991186735,NL 2991186736,2991186751,DE 2991186752,2991186767,DK 2991186768,2991186783,ES -2991186784,2991186943,SE +2991186784,2991186787,FR +2991186788,2991186943,SE 2991186944,2991186975,GB 2991186976,2991186991,NL 2991186992,2991187007,DE 2991187008,2991187023,DK 2991187024,2991187039,ES -2991187040,2991187199,SE +2991187040,2991187043,FR +2991187044,2991187199,SE 2991187200,2991187231,GB 2991187232,2991187247,NL 2991187248,2991187263,DE 2991187264,2991187279,DK 2991187280,2991187295,ES -2991187296,2991187455,SE +2991187296,2991187299,FR +2991187300,2991187455,SE 2991187456,2991187487,GB 2991187488,2991187503,NL 2991187504,2991187519,DE 2991187520,2991187535,DK 2991187536,2991187551,ES -2991187552,2991187711,SE +2991187552,2991187555,FR +2991187556,2991187711,SE 2991187712,2991187743,GB 2991187744,2991187759,NL 2991187760,2991187775,DE 2991187776,2991187791,DK 2991187792,2991187807,ES -2991187808,2991187967,SE +2991187808,2991187811,FR +2991187812,2991187967,SE 2991187968,2991187999,GB 2991188000,2991188015,NL 2991188016,2991188031,DE 2991188032,2991188047,DK 2991188048,2991188063,ES -2991188064,2991188223,SE +2991188064,2991188067,FR +2991188068,2991188223,SE 2991188224,2991188255,GB 2991188256,2991188271,NL 2991188272,2991188287,DE 2991188288,2991188303,DK 2991188304,2991188319,ES -2991188320,2991188479,SE +2991188320,2991188323,FR +2991188324,2991188479,SE 2991188480,2991188511,GB 2991188512,2991188527,NL 2991188528,2991188543,DE 2991188544,2991188559,DK 2991188560,2991188575,ES -2991188576,2991188735,SE +2991188576,2991188579,FR +2991188580,2991188735,SE 2991188736,2991188767,GB 2991188768,2991188783,NL 2991188784,2991188799,DE 2991188800,2991188815,DK 2991188816,2991188831,ES -2991188832,2991188991,SE +2991188832,2991188835,FR +2991188836,2991188991,SE 2991188992,2991189023,GB 2991189024,2991189039,NL 2991189040,2991189055,DE 2991189056,2991189071,DK 2991189072,2991189087,ES -2991189088,2991189247,SE +2991189088,2991189091,FR +2991189092,2991189247,SE 2991189248,2991189279,GB 2991189280,2991189295,NL 2991189296,2991189311,DE 2991189312,2991189327,DK 2991189328,2991189343,ES -2991189344,2991189503,SE +2991189344,2991189347,FR +2991189348,2991189503,SE 2991189504,2991189535,GB 2991189536,2991189551,NL 2991189552,2991189567,DE 2991189568,2991189583,DK 2991189584,2991189599,ES -2991189600,2991189759,SE +2991189600,2991189603,FR +2991189604,2991189759,SE 2991189760,2991189791,GB 2991189792,2991189807,NL 2991189808,2991189823,DE 2991189824,2991189839,DK 2991189840,2991189855,ES -2991189856,2991190015,SE +2991189856,2991189859,FR +2991189860,2991190015,SE 2991190016,2991190047,GB 2991190048,2991190063,NL 2991190064,2991190079,DE 2991190080,2991190095,DK 2991190096,2991190111,ES -2991190112,2991190271,SE +2991190112,2991190115,FR +2991190116,2991190271,SE 2991190272,2991190303,GB 2991190304,2991190319,NL 2991190320,2991190335,DE 2991190336,2991190351,DK 2991190352,2991190367,ES -2991190368,2991190527,SE +2991190368,2991190371,FR +2991190372,2991190527,SE 2991190528,2991190559,GB 2991190560,2991190575,NL 2991190576,2991190591,DE 2991190592,2991190607,DK 2991190608,2991190623,ES -2991190624,2991190783,SE +2991190624,2991190627,FR +2991190628,2991190783,SE 2991190784,2991190815,GB 2991190816,2991190831,NL 2991190832,2991190847,DE 2991190848,2991190863,DK 2991190864,2991190879,ES -2991190880,2991191039,SE +2991190880,2991190883,FR +2991190884,2991191039,SE 2991191040,2991191071,GB 2991191072,2991191087,NL 2991191088,2991191103,DE 2991191104,2991191119,DK 2991191120,2991191135,ES -2991191136,2991191295,SE +2991191136,2991191139,FR +2991191140,2991191295,SE 2991191296,2991191327,GB 2991191328,2991191343,NL 2991191344,2991191359,DE 2991191360,2991191375,DK 2991191376,2991191391,ES -2991191392,2991191551,SE +2991191392,2991191395,FR +2991191396,2991191551,SE 2991191552,2991191583,GB 2991191584,2991191599,NL 2991191600,2991191615,DE 2991191616,2991191631,DK 2991191632,2991191647,ES -2991191648,2991191807,SE +2991191648,2991191651,FR +2991191652,2991191807,SE 2991191808,2991192063,FI 2991192064,2991192255,DK 2991192256,2991192319,IT @@ -63939,7 +81205,7 @@ 2991538176,2991554559,SI 2991554560,2991571455,GB 2991571456,2991587327,IT -2991587328,2991718399,RU +2991587328,2991718399,SA 2991718400,2991849471,CH 2991849472,2991980543,NL 2991980544,2991980807,UA @@ -63948,23 +81214,25 @@ 2991981064,2991981071,DE 2991981072,2991981495,UA 2991981496,2991981503,NA -2991981504,2991981647,UA -2991981648,2991981655,NA -2991981656,2991981687,UA -2991981688,2991981695,NA -2991981696,2991981839,UA +2991981504,2991981839,UA 2991981840,2991981847,RU 2991981848,2991982535,UA 2991982536,2991982543,GL 2991982544,2991982592,UA 2991982593,2991982599,JP 2991982600,2991982607,UA -2991982608,2991982846,JP +2991982608,2991982751,JP +2991982752,2991982759,UA +2991982760,2991982846,JP 2991982847,2991983359,UA 2991983360,2991983615,JP 2991983616,2991984383,UA 2991984384,2991984639,JP -2991984640,2992111615,UA +2991984640,2991985919,UA +2991985920,2991986175,JP +2991986176,2991986431,UA +2991986432,2991986687,JP +2991986688,2992111615,UA 2992111616,2992373759,KZ 2992373760,2992635903,UA 2992635904,2993684479,GB @@ -63974,7 +81242,27 @@ 2994733056,2994798591,GR 2994798592,2994929663,RU 2994929664,2994995199,IR -2994995200,2995060735,RU +2994995200,2994997247,RU +2994997248,2994999295,BE +2994999296,2995003391,FR +2995003392,2995007487,BH +2995007488,2995009535,TR +2995009536,2995011583,ES +2995011584,2995013631,DE +2995013632,2995013887,MT +2995013888,2995015679,SE +2995015680,2995017727,BG +2995017728,2995019775,IT +2995019776,2995021823,RU +2995021824,2995023871,IT +2995023872,2995044351,MD +2995044352,2995046399,ES +2995046400,2995048447,RU +2995048448,2995050495,NL +2995050496,2995052543,AL +2995052544,2995056639,DK +2995056640,2995058687,DE +2995058688,2995060735,SE 2995060736,2995126271,UA 2995126272,2995191807,GE 2995191808,2995257343,LB @@ -63990,7 +81278,9 @@ 2996174848,2996305919,UA 2996305920,2996436991,QA 2996436992,2996469759,BY -2996469760,2996535295,RU +2996469760,2996502399,RU +2996502400,2996502431,TR +2996502432,2996535295,RU 2996535296,2996568063,DK 2996568064,2996600831,ES 2996600832,2996633599,RO @@ -64017,8 +81307,7 @@ 2996862976,2996895743,AM 2996895744,2996928511,KW 2996928512,2996994047,RU -2996994048,2996994879,DE -2996994880,2996994943,UA +2996994048,2996994943,DE 2996994944,2996995071,US 2996995072,2996995327,BZ 2996995328,2996995647,DE @@ -64035,7 +81324,8 @@ 2996996576,2996996639,DE 2996996640,2996996767,UA 2996996768,2996996831,RU -2996996832,2996997119,CN +2996996832,2996996863,DE +2996996864,2996997119,CN 2996997120,2996998143,DE 2996998144,2996998271,UA 2996998272,2996998463,DE @@ -64043,23 +81333,16 @@ 2996998528,2996998655,UA 2996998656,2996998719,DE 2996998720,2996998911,RU -2996998912,2996999199,DE -2996999200,2996999231,AU -2996999232,2996999359,DE +2996998912,2996999359,DE 2996999360,2996999423,IL 2996999424,2996999551,IN 2996999552,2996999679,DE 2996999680,2996999935,GB -2996999936,2996999951,DE -2996999952,2996999967,LT -2996999968,2996999999,AU -2997000000,2997000447,DE +2996999936,2997000447,DE 2997000448,2997000703,RU 2997000704,2997000831,DE 2997000832,2997000959,CA -2997000960,2997000991,DE -2997000992,2997001119,RO -2997001120,2997001471,DE +2997000960,2997001471,DE 2997001472,2997001727,BZ 2997001728,2997001983,TR 2997001984,2997003071,DE @@ -64070,11 +81353,10 @@ 2997003288,2997003295,NL 2997003296,2997003327,CA 2997003328,2997003391,RU -2997003392,2997003583,DE -2997003584,2997003647,UA -2997003648,2997004031,DE +2997003392,2997004031,DE 2997004032,2997004287,BZ -2997004288,2997004607,DE +2997004288,2997004543,CA +2997004544,2997004607,DE 2997004608,2997004671,RU 2997004672,2997004799,DE 2997004800,2997005055,BZ @@ -64083,14 +81365,12 @@ 2997005376,2997005439,GR 2997005440,2997005567,GB 2997005568,2997005823,BZ -2997005824,2997006079,DE -2997006080,2997006335,GB +2997005824,2997006335,DE 2997006336,2997006591,TR 2997006592,2997006655,DE 2997006656,2997006719,TR 2997006720,2997006847,RU -2997006848,2997008191,DE -2997008192,2997008255,TR +2997006848,2997008255,DE 2997008256,2997008383,LT 2997008384,2997008447,DE 2997008448,2997008511,RU @@ -64100,26 +81380,26 @@ 2997009024,2997018623,DE 2997018624,2997019135,GB 2997019136,2997019391,TR -2997019392,2997019647,GB -2997019648,2997019679,DE -2997019680,2997019711,AU +2997019392,2997019711,DE 2997019712,2997019903,US 2997019904,2997020415,DE 2997020416,2997020671,CA -2997020672,2997021183,DE -2997021184,2997021695,GB -2997021696,2997022015,DE -2997022016,2997022143,GB -2997022144,2997022207,IN -2997022208,2997022223,DE -2997022224,2997022239,IR +2997020672,2997020719,DE +2997020720,2997020735,SE +2997020736,2997020799,DE +2997020800,2997020863,CA +2997020864,2997022079,DE +2997022080,2997022143,GB +2997022144,2997022239,DE 2997022240,2997022303,NL 2997022304,2997022367,SG 2997022368,2997022751,DE 2997022752,2997022783,TR -2997022784,2997022847,IN +2997022784,2997022847,DE 2997022848,2997023231,BZ -2997023232,2997024255,DE +2997023232,2997023295,DE +2997023296,2997023423,IN +2997023424,2997024255,DE 2997024256,2997024511,TR 2997024512,2997026815,DE 2997026816,2997059583,RU @@ -64163,12 +81443,18 @@ 2999985712,2999985727,BE 2999985728,2999985743,CZ 2999985744,2999985759,NL -2999985760,2999988479,BE -2999988480,2999992319,NL +2999985760,2999988991,BE +2999988992,2999988999,FR +2999989000,2999989007,BE +2999989008,2999989247,NL +2999989248,2999991039,BE +2999991040,2999992319,NL 2999992320,3000000511,RU 3000000512,3000008703,DE 3000008704,3000016895,RU -3000016896,3000025087,GB +3000016896,3000020991,GB +3000020992,3000023039,US +3000023040,3000025087,GB 3000025088,3000033279,GI 3000033280,3000041471,RU 3000041472,3000049663,BA @@ -64249,14 +81535,15 @@ 3000434688,3000451071,IR 3000451072,3000467455,RU 3000467456,3000471551,GB -3000475648,3000483839,UA +3000471552,3000475647,RU +3000475648,3000479743,UA 3000483840,3000487935,PL 3000487936,3000492031,PS 3000492032,3000506367,UA 3000506368,3000508415,PL 3000508416,3000510463,UA 3000510464,3000512511,PL -3000512512,3000514559,EE +3000512512,3000514559,SE 3000514560,3000516607,SI 3000516608,3000520703,RU 3000520704,3000522751,CZ @@ -64273,7 +81560,7 @@ 3000545280,3000547327,RU 3000547328,3000549375,UA 3000549376,3000551423,SE -3000551424,3000553471,RS +3000551424,3000553471,PL 3000553472,3000555519,KG 3000555520,3000557567,RU 3000557568,3000561663,UA @@ -64310,8 +81597,7 @@ 3000664064,3000668159,RO 3000668160,3000672255,RU 3000672256,3000676351,HR -3000676352,3000680447,RO -3000680448,3000684543,RS +3000676352,3000684543,RO 3000684544,3000688639,RU 3000688640,3000692735,PL 3000692736,3000696831,UA @@ -64321,7 +81607,7 @@ 3000709120,3000713215,AM 3000713216,3000717311,A2 3000717312,3000721407,UA -3000721408,3000729599,PL +3000721408,3000733695,PL 3000733696,3000737791,RU 3000737792,3000741887,UA 3000741888,3000745983,RU @@ -64339,26 +81625,149 @@ 3001815040,3001819135,RU 3001819136,3001823231,IR 3001823232,3001827327,GE -3001827328,3001831423,SE +3001827328,3001827647,SE +3001827648,3001827743,GB +3001827744,3001827775,US +3001827776,3001828864,SE +3001828865,3001828896,US +3001828897,3001828927,SE +3001828928,3001828991,DE +3001828992,3001829055,GB +3001829056,3001829120,SE +3001829121,3001829152,US +3001829153,3001829183,SE +3001829184,3001829247,DE +3001829248,3001829311,GB +3001829312,3001830400,SE +3001830401,3001830432,GB +3001830433,3001830495,SE +3001830496,3001830527,GB +3001830528,3001830559,IT +3001830560,3001830591,FR +3001830592,3001830623,US +3001830624,3001830631,SE +3001830632,3001830639,IT +3001830640,3001830656,SE +3001830657,3001830688,GB +3001830689,3001830751,SE +3001830752,3001830783,GB +3001830784,3001830815,IT +3001830816,3001830847,FR +3001830848,3001830879,US +3001830880,3001830887,SE +3001830888,3001830895,IT +3001830896,3001830912,SE +3001830913,3001830944,GB +3001830945,3001831007,SE +3001831008,3001831039,GB +3001831040,3001831071,IT +3001831072,3001831103,FR +3001831104,3001831135,US +3001831136,3001831167,IT +3001831168,3001831199,GB +3001831200,3001831263,SE +3001831264,3001831295,GB +3001831296,3001831327,IT +3001831328,3001831359,FR +3001831360,3001831391,US +3001831392,3001831423,SE 3001831424,3001835519,BA 3001835520,3001839615,RU 3001839616,3001843711,ES -3001843712,3001845759,RU -3001845760,3001846271,GB -3001846272,3001847295,RU -3001847296,3001851903,GB +3001843712,3001846271,RU +3001846272,3001846783,GB +3001846784,3001847807,RU +3001847808,3001851903,GB 3001851904,3001855999,IT 3001856000,3001859071,NL 3001859072,3001860095,MD -3001860096,3001864191,EE +3001860096,3001861119,LV +3001861120,3001862143,LT +3001862144,3001863167,EE +3001863168,3001864191,LT 3001864192,3001868287,RU -3001868288,3001869312,FR +3001868288,3001868799,FR +3001868800,3001868803,US +3001868804,3001868807,CN +3001868808,3001868811,JP +3001868812,3001868815,DE +3001868816,3001868819,FR +3001868820,3001868823,GB +3001868824,3001868827,BR +3001868828,3001868831,IT +3001868832,3001868835,FR +3001868836,3001868839,IN +3001868840,3001868843,RU +3001868844,3001868847,ES +3001868848,3001868851,AU +3001868852,3001868855,MX +3001868856,3001868859,KR +3001868860,3001868863,FR +3001868864,3001868867,TR +3001868868,3001868871,ID +3001868872,3001868875,CH +3001868876,3001868879,PL +3001868880,3001868883,BE +3001868884,3001868887,SE +3001868888,3001868891,SA +3001868892,3001868895,TW +3001868896,3001868899,SJ +3001868900,3001868903,AT +3001868904,3001868907,AR +3001868908,3001868911,ZA +3001868912,3001868915,IR +3001868916,3001868919,TH +3001868920,3001868923,DK +3001868924,3001868927,GR +3001868928,3001868931,AE +3001868932,3001868935,VE +3001868936,3001868939,CD +3001868940,3001868943,FI +3001868944,3001868947,MY +3001868948,3001868951,PT +3001868952,3001868955,HK +3001868956,3001868959,SG +3001868960,3001868963,EG +3001868964,3001868967,NG +3001868968,3001868971,IL +3001868972,3001868975,IE +3001868976,3001868979,CL +3001868980,3001868983,CZ +3001868984,3001868987,PH +3001868988,3001868991,PK +3001868992,3001868995,RO +3001868996,3001868999,DZ +3001869000,3001869003,PE +3001869004,3001869007,NZ +3001869008,3001869011,KZ +3001869012,3001869015,UA +3001869016,3001869019,KW +3001869020,3001869023,QA +3001869024,3001869027,HU +3001869028,3001869031,BD +3001869032,3001869035,VN +3001869036,3001869039,MA +3001869040,3001869043,SK +3001869044,3001869047,AO +3001869048,3001869051,IQ +3001869052,3001869055,LY +3001869056,3001869311,RU +3001869312,3001869312,FR 3001869313,3001869599,SA 3001869600,3001869600,FR 3001869601,3001869696,IR 3001869697,3001869823,YE 3001869824,3001869887,IR -3001869888,3001872383,FR +3001869888,3001870079,FR +3001870080,3001870335,RU +3001870336,3001870591,IT +3001870592,3001870847,FR +3001870848,3001871103,DE +3001871104,3001871359,ES +3001871360,3001871615,GR +3001871616,3001871871,PL +3001871872,3001872127,PT +3001872128,3001872383,RO 3001872384,3001876479,RU 3001876480,3001880575,IT 3001880576,3001884671,RU @@ -64369,7 +81778,9 @@ 3001885440,3001886463,BE 3001886464,3001886511,NL 3001886512,3001886527,US -3001886528,3001888767,NL +3001886528,3001886543,IE +3001886544,3001886559,US +3001886560,3001888767,NL 3001888768,3001892863,BH 3001892864,3001896959,AZ 3001896960,3001901055,CH @@ -64387,97 +81798,10 @@ 3001954304,3001958399,IT 3001958400,3001962495,KZ 3001962496,3001966591,GB -3001966592,3001970687,NL +3001966592,3001968639,NL +3001968640,3001970687,BE 3001970688,3001974783,RU -3001974784,3001975567,GB -3001975568,3001975591,US -3001975592,3001975599,TW -3001975600,3001975607,CN -3001975608,3001975615,RU -3001975616,3001975623,UA -3001975624,3001975631,RU -3001975632,3001975655,GB -3001975656,3001975663,RU -3001975664,3001975671,US -3001975672,3001975679,CN -3001975680,3001975687,TW -3001975688,3001975695,US -3001975696,3001975703,UA -3001975704,3001975711,DE -3001975712,3001975719,MY -3001975720,3001975727,US -3001975728,3001975735,GB -3001975736,3001975743,MY -3001975744,3001975759,GB -3001975760,3001975807,US -3001975808,3001975815,GB -3001975816,3001975823,US -3001975824,3001975839,GB -3001975840,3001975847,CN -3001975848,3001975855,US -3001975856,3001975863,MY -3001975864,3001975871,AU -3001975872,3001975887,US -3001975888,3001975895,GB -3001975896,3001975903,RU -3001975904,3001975919,GB -3001975920,3001975927,US -3001975928,3001975935,CN -3001975936,3001976623,GB -3001976624,3001976639,CN -3001976640,3001976655,RU -3001976656,3001976671,GB -3001976672,3001976679,IN -3001976680,3001976687,US -3001976688,3001976831,GB -3001976832,3001976895,CN -3001976896,3001976927,GB -3001976928,3001976959,RU -3001976960,3001977103,GB -3001977104,3001977119,RU -3001977120,3001977135,GB -3001977136,3001977143,CN -3001977144,3001977151,TW -3001977152,3001977167,IN -3001977168,3001977183,LK -3001977184,3001977215,GB -3001977216,3001977247,RU -3001977248,3001977311,GB -3001977312,3001977343,CN -3001977344,3001977375,GB -3001977376,3001977407,CA -3001977408,3001977447,GB -3001977448,3001977455,IT -3001977456,3001977463,US -3001977464,3001977471,GB -3001977472,3001977487,IN -3001977488,3001977503,LK -3001977504,3001977519,GB -3001977520,3001977535,CN -3001977536,3001977591,GB -3001977592,3001977599,GR -3001977600,3001977855,DK -3001977856,3001977983,GB -3001977984,3001978015,CN -3001978016,3001978031,RU -3001978032,3001978047,GB -3001978048,3001978111,US -3001978112,3001978367,GB -3001978368,3001978495,US -3001978496,3001978527,RU -3001978528,3001978559,UA -3001978560,3001978591,US -3001978592,3001978607,RU -3001978608,3001978615,IE -3001978616,3001978623,CN -3001978624,3001978687,US -3001978688,3001978751,EE -3001978752,3001978783,RU -3001978784,3001978815,US -3001978816,3001978823,LK -3001978824,3001978847,GB -3001978848,3001978879,UA -3001978880,3001982975,GB +3001974784,3001982975,GB 3001982976,3001987071,CH 3001987072,3001991167,JO 3001991168,3001995263,IR @@ -64486,16 +81810,9 @@ 3002003456,3002011647,PL 3002011648,3002015743,BA 3002015744,3002019839,IT -3002019840,3002020095,NL -3002020096,3002020159,SG -3002020160,3002020223,NL -3002020224,3002020287,IL +3002019840,3002020287,NL 3002020288,3002020303,US -3002020304,3002021695,NL -3002021696,3002021759,SG -3002021760,3002022527,NL -3002022528,3002022655,BZ -3002022656,3002023935,NL +3002020304,3002023935,NL 3002023936,3002028031,DE 3002028032,3002036223,GB 3002036224,3002040319,BG @@ -64528,10 +81845,9 @@ 3002619984,3002619991,GB 3002619992,3002620015,IT 3002620016,3002620031,GB -3002620032,3002620039,DE -3002620040,3002620047,IT -3002620048,3002620095,GB -3002620096,3002620103,IT +3002620032,3002620047,IT +3002620048,3002620087,GB +3002620088,3002620103,IT 3002620104,3002620111,GB 3002620112,3002621951,IT 3002621952,3002623999,NO @@ -64557,13 +81873,17 @@ 3002662912,3002664959,DE 3002664960,3002667007,ES 3002667008,3002669055,GE -3002669056,3002671103,DE +3002669056,3002669199,DE +3002669200,3002669207,CH +3002669208,3002669951,DE +3002669952,3002669983,US +3002669984,3002671103,DE 3002671104,3002673151,LV 3002673152,3002675199,GB 3002675200,3002677247,DK 3002677248,3002683391,RU -3002683392,3002685439,DE -3002685440,3002687487,MT +3002683392,3002685183,DE +3002685184,3002685439,CH 3002687488,3002688511,GB 3002688512,3002689535,NL 3002689536,3002691583,IL @@ -64587,10 +81907,14 @@ 3002730496,3002732543,DE 3002732544,3002734591,NL 3002734592,3002736639,CH -3002736640,3002738687,FR +3002736640,3002738687,LT 3002738688,3002740735,PL 3002740736,3002742783,GB -3002742784,3002744831,LI +3002742784,3002742927,LI +3002742928,3002742943,CH +3002742944,3002743071,LI +3002743072,3002743103,US +3002743104,3002744831,LI 3002744832,3002746879,IT 3002746880,3002748927,GB 3002748928,3002750975,DE @@ -64603,7 +81927,11 @@ 3002763264,3002765311,RS 3002765312,3002767359,NL 3002767360,3002769407,RU -3002769408,3002773503,DE +3002769408,3002771655,DE +3002771656,3002771663,NL +3002771664,3002771711,DE +3002771712,3002771719,NL +3002771720,3002773503,DE 3002773504,3002775551,GB 3002775552,3002777599,RO 3002777600,3002779647,NL @@ -64618,8 +81946,8 @@ 3002798080,3002800127,FR 3002800128,3002802175,NL 3002802176,3002804223,GB -3002804224,3002806271,TR -3002806272,3002808319,DE +3002804224,3002806015,TR +3002806016,3002808319,DE 3002808320,3002810367,FI 3002810368,3002812415,AT 3002812416,3002814463,IT @@ -64632,7 +81960,9 @@ 3002826752,3002828799,SE 3002828800,3002830847,RU 3002830848,3002834943,FI -3002834944,3002836991,LU +3002834944,3002835887,LU +3002835888,3002835903,US +3002835904,3002836991,LU 3002836992,3002841087,GB 3002841088,3002843135,CZ 3002843136,3002845183,NL @@ -64660,15 +81990,14 @@ 3003058432,3003058687,FI 3003058688,3003058751,EE 3003058752,3003058943,PH -3003058944,3003060223,EE +3003058944,3003059199,IL +3003059200,3003059711,EE +3003059712,3003059967,GI +3003059968,3003060223,EE 3003060224,3003062271,DE 3003062272,3003064319,NL 3003064320,3003066367,RO -3003066368,3003066887,PL -3003066888,3003066895,MX -3003066896,3003066903,RU -3003066904,3003066911,UA -3003066912,3003068415,PL +3003066368,3003068415,PL 3003068416,3003070463,NL 3003070464,3003074559,GB 3003074560,3003076607,IT @@ -64680,12 +82009,22 @@ 3003088896,3003090943,FR 3003090944,3003092991,DE 3003092992,3003095039,NO -3003095040,3003097087,AT +3003095040,3003095567,AT +3003095568,3003095583,CZ +3003095584,3003095871,AT +3003095872,3003095935,IT +3003095936,3003096063,AT +3003096064,3003096079,CZ +3003096080,3003097087,AT 3003097088,3003099135,FR 3003099136,3003101183,CZ 3003101184,3003103231,UA 3003103232,3003105279,IT -3003105280,3003107327,NL +3003105280,3003107084,NL +3003107085,3003107085,US +3003107086,3003107091,NL +3003107092,3003107093,US +3003107094,3003107327,NL 3003107328,3003109375,RU 3003109376,3003111423,FR 3003111424,3003113471,IT @@ -64725,7 +82064,6 @@ 3026075648,3026083839,AF 3026083840,3026087935,CN 3026087936,3026089983,AU -3026089984,3026092031,MN 3026092032,3026108415,MO 3026108416,3026114559,JP 3026114560,3026115583,SG @@ -64741,6 +82079,7 @@ 3028484096,3028500479,KR 3028500480,3028516863,JP 3028516864,3028518911,AU +3028518912,3028520959,JP 3028520960,3028521983,ID 3028521984,3028523007,LA 3028523008,3028525055,JP @@ -64752,22 +82091,26 @@ 3029598208,3029600255,VN 3029600256,3029601279,AU 3029601280,3029602303,IN +3029602304,3029604351,CN 3029604352,3029605375,AU +3029605376,3029606399,JP 3029606400,3029614591,IN -3029614592,3029622783,AU +3029614592,3029630975,AU 3029630976,3029635071,VN 3029635072,3029637119,JP +3029637120,3029639167,CN 3029639168,3029643263,JP 3029643264,3029644287,AU +3029644288,3029645311,KR 3029645312,3029651455,JP 3029651456,3029653503,BD -3029655552,3029663743,CN +3029653504,3029663743,CN 3029663744,3029671935,BD 3029671936,3029680127,IN 3029680128,3029696511,MN 3029696512,3029704703,CN 3029704704,3029712895,JP -3029712896,3029713919,AU +3029712896,3029714943,AU 3029714944,3029715199,JP 3029715200,3029715455,AU 3029715456,3029716991,JP @@ -64791,11 +82134,12 @@ 3031564288,3031572479,IN 3031572480,3031580671,HK 3031580672,3031581695,AU +3031581696,3031582719,JP 3031582720,3031584767,SG 3031584768,3031587839,JP 3031587840,3031592959,ID -3031592960,3031595007,HK 3031595008,3031596031,AU +3031596032,3031597055,KH 3031597056,3031613439,PK 3031613440,3031629823,CN 3031629824,3031695359,IN @@ -64811,13 +82155,13 @@ 3032285184,3032301567,JP 3032301568,3032317951,KR 3032317952,3032319999,JP -3032320000,3032321023,AU -3032322048,3032323071,AU +3032320000,3032323071,AU 3032323072,3032324095,CN 3032324096,3032326143,AU 3032326144,3032330239,TL 3032330240,3032334335,KR 3032334336,3032342527,NZ +3032342528,3032350719,JP 3032350720,3032743935,PH 3032743936,3033038847,JP 3033038848,3033063423,AU @@ -64835,6 +82179,7 @@ 3033710592,3033712639,KR 3033712640,3033714687,SG 3033714688,3033715711,NZ +3033715712,3033716735,AU 3033716736,3033717759,TH 3033718784,3033726975,CN 3033726976,3033743359,KR @@ -64848,6 +82193,7 @@ 3033792512,3033923583,CN 3033923584,3033939967,JP 3033939968,3033948159,AU +3033948160,3033956351,NC 3033956352,3033964543,IN 3033964544,3033966591,HK 3033966592,3033968639,AU @@ -64863,17 +82209,21 @@ 3034251264,3034316799,HK 3034316800,3034447871,JP 3034447872,3034456063,AU +3034456064,3034464255,JP 3034464256,3034466303,NZ 3034466304,3034472447,JP -3034472448,3034480639,IN +3034472448,3034478591,IN +3034478592,3034480639,JP 3034480640,3034482687,SG 3034482688,3034484735,AF 3034484736,3034488831,TH 3034488832,3034492927,AU -3034497024,3034498047,AU +3034492928,3034497023,JP +3034497024,3034499071,AU 3034499072,3034500095,HK 3034500096,3034501119,TW 3034501120,3034502143,VU +3034502144,3034503167,IN 3034503168,3034504191,ID 3034504192,3034505215,KR 3034505216,3034578943,CN @@ -64883,7 +82233,7 @@ 3035193344,3035197439,JP 3035197440,3035199487,HK 3035199488,3035200511,IN -3035201536,3035202559,AU +3035200512,3035202559,AU 3035202560,3035205631,JP 3035205632,3035207679,MY 3035207680,3035209727,ID @@ -64893,7 +82243,7 @@ 3035299840,3035316223,JP 3035316224,3035324415,CN 3035324416,3035326463,JP -3035326464,3035327487,AU +3035326464,3035328511,AU 3035332608,3035333631,AU 3035333632,3035334655,HK 3035335680,3035337727,JP @@ -64901,20 +82251,30 @@ 3035338752,3035339007,SG 3035339008,3035339263,IN 3035339264,3035339775,HK +3035339776,3035340799,AU 3035340800,3035348991,MN 3035348992,3035357183,AU +3035357184,3035365375,JP 3035365376,3035627519,KR -3035627520,3036610559,ID +3035627520,3035660287,ID +3035660288,3035693055,SG +3035693056,3036610559,ID 3036610560,3036676095,SG 3036676096,3037790207,AR 3037790208,3037855743,VE 3037986816,3038248959,AR 3038511104,3038773247,AR +3039035392,3039166463,DO +3039297536,3039363071,PY +3039428608,3039494143,CL +3039821824,3040346111,CO +3040870400,3041001471,PE +3041918976,3042967551,AR +3045064704,3047161855,CO 3053453312,3054501887,ID 3054501888,3054534655,HK 3054534656,3054537727,PH 3054537728,3054538751,SG -3054538752,3054540799,BD 3054540800,3054541823,NZ 3054541824,3054542847,BD 3054542848,3054551039,ID @@ -64935,7 +82295,9 @@ 3054997504,3055001599,SG 3055001600,3055005695,ID 3055005696,3055007743,NZ +3055007744,3055009791,CN 3055009792,3055011839,AU +3055011840,3055013887,CN 3055013888,3055014911,JP 3055014912,3055015935,AU 3055015936,3055026175,JP @@ -64946,18 +82308,21 @@ 3056615424,3056623615,BD 3056623616,3056631807,CN 3056631808,3056639999,NZ +3056640000,3056648191,ID 3056648192,3056664575,IN 3056664576,3056734207,CN 3056734208,3056746495,KR 3056746496,3056747519,NP -3056747520,3056748543,BD 3056748544,3056749567,WS +3056749568,3056750591,SG 3056750592,3056754687,TH 3056754688,3056758783,JP 3056758784,3056762879,CN 3056762880,3056771071,SG 3056771072,3056772095,NZ +3056772096,3056773119,JP 3056773120,3056774143,WS +3056774144,3056775167,JP 3056775168,3056779263,AF 3056779264,3056791551,JP 3056791552,3056795647,ID @@ -64966,8 +82331,13 @@ 3056992256,3057025023,CN 3057025024,3057033215,PH 3057033216,3057037311,NZ +3057037312,3057041407,JP 3057041408,3057049599,MY -3057049600,3057053695,AU +3057049600,3057050623,AU +3057050624,3057051647,SG +3057051648,3057052415,AU +3057052416,3057052671,ES +3057052672,3057053695,AU 3057053696,3057054719,JP 3057054720,3057055743,HK 3057055744,3057057791,JP @@ -64993,6 +82363,7 @@ 3063955456,3063963647,CN 3063963648,3063971839,BD 3063971840,3063988223,AU +3063988224,3064004607,JP 3064004608,3064012799,LK 3064012800,3064020991,MY 3064020992,3064023039,JP @@ -65065,7 +82436,7 @@ 3075383296,3075385343,IN 3075385344,3075386367,MY 3075386368,3075387391,AU -3075387392,3075388415,JP +3075388416,3075389439,CN 3075389440,3075390463,IN 3075390464,3075391487,JP 3075391488,3075407871,KR @@ -65073,6 +82444,7 @@ 3075473408,3075571711,VN 3075571712,3075575807,FJ 3075575808,3075577855,AU +3075577856,3075579903,ID 3075579904,3075581951,MY 3075581952,3075582975,MN 3075582976,3075583999,TH @@ -65096,9 +82468,10 @@ 3076194304,3076202495,VN 3076202496,3076210687,HK 3076210688,3076218879,ID +3076218880,3076227071,JP 3076227072,3076228095,CN 3076228096,3076229119,NP -3076231168,3076235263,CN +3076229120,3076235263,CN 3076235264,3076243455,VN 3076243456,3076259839,KR 3076259840,3076521983,CN @@ -65126,19 +82499,61 @@ 3082289152,3087007743,CN 3087007744,3091202047,US 3091202048,3091726335,CA -3091726336,3093168127,US +3091726336,3091955711,US +3091955712,3091959807,CA +3091959808,3091976191,US +3091976192,3091980287,CA +3091980288,3093168127,US 3093168128,3093200895,CA +3093200896,3093213183,US +3093213184,3093217279,CA +3093217280,3093233663,US 3093233664,3093237759,PR -3093237760,3093241855,US -3093299200,3093939167,US -3093939168,3093939175,CN -3093939176,3093941111,US -3093941112,3093941119,MY -3093941120,3093941199,US -3093941200,3093941207,CN -3093941208,3093942271,US -3093942272,3093942527,CA -3093942528,3093954759,US +3093237760,3093241863,US +3093241864,3093241871,AU +3093241872,3093242287,US +3093242288,3093242295,AU +3093242296,3093242719,US +3093242720,3093242751,CN +3093242752,3093243223,US +3093243224,3093243231,AU +3093243232,3093245575,US +3093245576,3093245583,BR +3093245584,3093245719,US +3093245720,3093245727,AU +3093245728,3093245999,US +3093246000,3093246007,AU +3093246008,3093246431,US +3093246432,3093246439,AU +3093246440,3093247327,US +3093247328,3093247335,AU +3093247336,3093247511,US +3093247512,3093247519,AU +3093247520,3093248375,US +3093248376,3093248399,AU +3093248400,3093248415,US +3093248416,3093248431,AU +3093248432,3093248479,US +3093248480,3093248487,AU +3093248488,3093248727,US +3093248728,3093248735,AU +3093248736,3093248831,US +3093248832,3093248839,AU +3093248840,3093248887,US +3093248888,3093248895,AU +3093248896,3093249599,US +3093249600,3093249623,AU +3093249624,3093249679,US +3093249680,3093249687,AU +3093249688,3093282815,US +3093282816,3093299199,CA +3093299200,3093940991,US +3093940992,3093941055,CN +3093941056,3093941103,US +3093941104,3093941119,CN +3093941120,3093941191,US +3093941192,3093941199,CN +3093941200,3093954759,US 3093954760,3093954767,AR 3093954768,3093954975,US 3093954976,3093954983,AU @@ -65164,7 +82579,9 @@ 3093955664,3093955679,CA 3093955680,3093956479,US 3093956480,3093956495,IE -3093956496,3093956567,US +3093956496,3093956543,US +3093956544,3093956551,AU +3093956552,3093956567,US 3093956568,3093956575,MX 3093956576,3093956895,US 3093956896,3093956943,CA @@ -65216,9 +82633,13 @@ 3093962376,3093962379,CA 3093962380,3093962475,US 3093962476,3093962479,CA -3093962480,3093962807,US +3093962480,3093962559,US +3093962560,3093962575,GB +3093962576,3093962807,US 3093962808,3093962815,AU -3093962816,3093963359,US +3093962816,3093962943,US +3093962944,3093962951,GB +3093962952,3093963359,US 3093963360,3093963367,CA 3093963368,3093963487,US 3093963488,3093963495,IE @@ -65232,7 +82653,13 @@ 3093965880,3093965881,CA 3093965882,3093965885,US 3093965886,3093965887,MX -3093965888,3093967191,US +3093965888,3093965903,US +3093965904,3093965905,CA +3093965906,3093965965,US +3093965966,3093965967,MX +3093965968,3093966319,US +3093966320,3093966323,AU +3093966324,3093967191,US 3093967192,3093967199,CA 3093967200,3093968911,US 3093968912,3093968927,CA @@ -65244,7 +82671,12 @@ 3093969032,3093969035,CA 3093969036,3093969131,US 3093969132,3093969135,MX -3093969136,3093986367,US +3093969136,3093970503,US +3093970504,3093970507,GB +3093970508,3093977159,US +3093977160,3093977163,AU +3093977164,3093977167,IL +3093977168,3093986367,US 3093986368,3093986431,DE 3093986432,3093986463,US 3093986464,3093986495,GB @@ -65256,26 +82688,125 @@ 3097493504,3097755647,CA 3097755648,3098095615,US 3098095616,3098099711,CA +3098099712,3098148863,US 3098148864,3098165247,JM -3098214400,3098263551,US +3098165248,3098181631,US +3098181632,3098185727,CA +3098185728,3098255903,US +3098255904,3098255911,MV +3098255912,3098263551,US 3098263552,3098271743,CA -3098271744,3098275839,US -3098279936,3098476543,US +3098271744,3098279943,US +3098279944,3098279951,KW +3098279952,3098280591,US +3098280592,3098280599,PA +3098280600,3098281311,US +3098281312,3098281343,EG +3098281344,3098281503,US +3098281504,3098281511,PA +3098281512,3098281711,US +3098281712,3098281719,PA +3098281720,3098281943,US +3098281944,3098281951,AU +3098281952,3098286287,US +3098286288,3098286295,IN +3098286296,3098286399,US +3098286400,3098286431,BR +3098286432,3098287711,US +3098287712,3098287719,AU +3098287720,3098288343,US +3098288344,3098288351,BR +3098288352,3098288775,US +3098288776,3098288783,BR +3098288784,3098289495,US +3098289496,3098289503,AU +3098289504,3098290223,US +3098290224,3098290231,IN +3098290232,3098291119,US +3098291120,3098291135,NL +3098291136,3098291151,US +3098291152,3098291159,NL +3098291160,3098295751,US +3098295752,3098295759,PL +3098295760,3098321663,US +3098321664,3098321695,IN +3098321696,3098322367,US +3098322368,3098322375,BD +3098322376,3098322383,US +3098322384,3098322391,BD +3098322392,3098322695,US +3098322696,3098322703,BD +3098322704,3098323679,US +3098323680,3098323711,EG +3098323712,3098326511,US +3098326512,3098326519,CN +3098326520,3098331151,US +3098331152,3098331159,HK +3098331160,3098331471,US +3098331472,3098331479,CL +3098331480,3098333951,US +3098333952,3098333959,BD +3098333960,3098336047,US +3098336048,3098336055,MA +3098336056,3098336303,US +3098336304,3098336311,MY +3098336312,3098336975,US +3098336976,3098336983,BR +3098336984,3098365535,US +3098365536,3098365551,IN +3098365552,3098365631,US +3098365632,3098365639,AU +3098365640,3098365951,US +3098365952,3098365959,MX +3098365960,3098371191,US +3098371192,3098371199,BR +3098371200,3098371495,US +3098371496,3098371503,JO +3098371504,3098373927,US +3098373928,3098373935,MX +3098373936,3098375583,US +3098375584,3098375615,BR +3098375616,3098376863,US +3098376864,3098376895,BR +3098376896,3098377655,US +3098377656,3098377663,GB +3098377664,3098377727,US +3098377728,3098377759,AR +3098377760,3098380047,US +3098380048,3098380063,IN +3098380064,3098381455,US +3098381456,3098381471,LT +3098381472,3098388175,US +3098388176,3098388183,SA +3098388184,3098390271,US +3098390272,3098390279,ES +3098390280,3098476543,US 3098476544,3098492927,CA -3098492928,3103784959,US +3098492928,3098495999,US +3098496000,3098496255,CA +3098496256,3098502143,US +3098502144,3098502207,IN +3098502208,3098503423,US +3098503424,3098503679,CA +3098503680,3098507263,US +3098507264,3098507519,CA +3098507520,3103784959,US +3103784960,3107979263,EU 3120562176,3120594943,CO 3120594944,3120599039,AR 3120599040,3120601087,EC 3120601088,3120602111,AR 3120602112,3120603135,BO -3120603136,3120608255,AR -3120609280,3120610303,AR +3120603136,3120610303,AR 3120610304,3120611327,PY 3120611328,3120627711,AR 3120627712,3120644095,NI +3120644096,3120660479,DO 3120660480,3120668671,PA +3120668672,3120676863,CO 3120676864,3120680959,HT -3120685056,3120689151,AR +3120680960,3120691199,AR +3120691200,3120693247,CO 3120693248,3120726015,BO 3120726016,3120734207,HN 3120742400,3120750591,PY @@ -65283,7 +82814,8 @@ 3120824320,3120840703,CR 3120840704,3120857087,AR 3120857088,3120922623,EC -3120955392,3121020927,DO +3120922624,3120930815,PA +3120955392,3121086463,DO 3121086464,3121151999,UY 3121152000,3121348607,CL 3121348608,3121479679,AR @@ -65293,42 +82825,72 @@ 3121741824,3121872895,AR 3121872896,3122003967,CL 3122003968,3122135039,AR -3122135040,3122331647,VE +3122135040,3122282495,VE +3122282496,3122294783,AR +3122294784,3122298879,CR +3122298880,3122331647,VE 3122331648,3122348031,BO 3122397184,3122659327,CO -3122659328,3122724863,GT -3122790400,3122987007,CL +3122659328,3122675711,GT +3122675712,3122683903,SV +3122683904,3122724863,GT +3122790400,3123052543,CL 3123052544,3123183615,AR 3123183616,3123314687,CL 3123314688,3123380223,EC 3123380224,3123412991,CO +3123412992,3123429375,EC 3123445760,3123576831,TT -3123576832,3123642367,EC -3123707904,3123970047,UY -3124232192,3124772863,AR +3123576832,3123707903,EC +3123707904,3124232191,UY +3124232192,3124789247,AR +3124789248,3124822015,CR +3124822016,3124838399,EC +3124854784,3124887551,CL 3124887552,3124953087,EC -3125018624,3125149695,EC -3125280768,3125542911,PA +3124953088,3125018623,CL +3125018624,3125280767,EC +3125280768,3125346303,CO +3125346304,3125542911,PA +3125542912,3125673983,NI +3125673984,3125805055,CL 3125805056,3126329343,CO 3126329344,3126853631,VE 3126853632,3126919167,AR 3126919168,3127115775,CO 3127115776,3127181311,AR -3127246848,3127377919,CO -3127377920,3127640063,CL +3127181312,3127246847,EC +3127246848,3127345151,CO +3127345152,3127640063,CL 3127640064,3127902207,AR -3127902208,3128164351,CO +3127902208,3128426495,CO 3128426496,3128492031,DO 3128492032,3128524799,CO 3128557568,3128950783,AR 3128950784,3129016319,UY 3129016320,3129999359,AR 3129999360,3130261503,CO +3130261504,3130277887,CL +3130294272,3130302463,AR +3130302464,3130312703,PA +3130312704,3130314751,AR +3130314752,3130315775,CL +3130315776,3130316799,CR +3130316800,3130318847,AN +3130318848,3130327039,AR +3130327040,3130392575,DO +3130458112,3130523647,GT 3130523648,3130654719,AR +3130654720,3130720255,CO +3130785792,3130818559,CL +3130851328,3130916863,AR 3131047936,3131310079,PE -3132096512,3132162047,CR +3131310080,3131572223,VE +3131572224,3131834367,CO +3131834368,3132096511,CL +3132096512,3132227583,CR 3132227584,3132293119,EC -3132358656,3132424191,CO +3132358656,3132489727,CO 3132489728,3132555263,AR 3132620800,3132915711,VE 3132915712,3132948479,PA @@ -65342,12 +82904,19 @@ 3133079552,3133145087,AR 3133145088,3145727999,BR 3145728000,3154116607,MX +3154116608,3154124799,RU +3154124800,3154126847,PL +3154126848,3154128895,RU +3154128896,3154132991,EE +3154132992,3154157567,UA +3154157568,3154173951,RU +3154173952,3154182143,MD 3154182144,3154247679,DE 3154247680,3154313215,RS 3154313216,3154378751,TR 3154378752,3154444287,GR 3154444288,3154509823,BE -3154509824,3154575359,RU +3154509824,3154575359,HU 3154575360,3154640895,FR 3154640896,3155165183,IT 3155165184,3155427327,RU @@ -65368,12 +82937,19 @@ 3156672512,3156738047,GB 3156738048,3156791439,DE 3156791440,3156791455,NL -3156791456,3156802271,DE -3156802272,3156802303,US -3156802304,3156803583,DE +3156791456,3156793751,DE +3156793752,3156793759,IT +3156793760,3156803327,DE +3156803328,3156803359,CH +3156803360,3156803583,DE 3156803584,3156869119,TR 3156869120,3156934655,LU -3156934656,3157065727,RU +3156934656,3157000191,RU +3157000192,3157008383,MK +3157008384,3157016575,RU +3157016576,3157024767,BE +3157024768,3157032959,RU +3157032960,3157065727,HU 3157065728,3157131263,AT 3157131264,3157196799,DE 3157196800,3157262335,PL @@ -65381,7 +82957,7 @@ 3157786624,3158048767,TR 3158048768,3158310911,CH 3158310912,3158312959,FI -3158312960,3158315007,NL +3158312960,3158315007,AZ 3158315008,3158317055,DE 3158317056,3158319103,SI 3158319104,3158321151,GB @@ -65394,7 +82970,6 @@ 3158325248,3158327295,DE 3158327296,3158329343,NL 3158329344,3158331391,BE -3158331392,3158333439,GB 3158333440,3158335487,IT 3158335488,3158337535,IL 3158337536,3158339583,SI @@ -65425,13 +83000,25 @@ 3158392832,3158394879,RU 3158394880,3158395007,AT 3158395008,3158395135,GB -3158395136,3158395151,AT -3158395152,3158395159,DE -3158395160,3158395263,AT -3158395264,3158395295,DE -3158395296,3158395647,AT +3158395136,3158395167,AT +3158395168,3158395175,DE +3158395176,3158395191,AT +3158395192,3158395199,DE +3158395200,3158395247,AT +3158395248,3158395295,DE +3158395296,3158395359,AT +3158395360,3158395367,DE +3158395368,3158395431,AT +3158395432,3158395439,DE +3158395440,3158395647,AT 3158395648,3158395663,DE -3158395664,3158396927,AT +3158395664,3158395687,AT +3158395688,3158395695,DE +3158395696,3158395711,AT +3158395712,3158395743,DE +3158395744,3158396287,AT +3158396288,3158396319,DE +3158396320,3158396927,AT 3158396928,3158398975,IT 3158398976,3158401023,ES 3158401024,3158403071,GB @@ -65445,7 +83032,12 @@ 3158417408,3158419455,NL 3158419456,3158421503,FR 3158421504,3158423551,GB -3158423552,3158425599,MT +3158423552,3158424063,MT +3158424064,3158424095,NL +3158424096,3158424127,MT +3158424128,3158424159,IE +3158424160,3158425567,MT +3158425568,3158425599,IE 3158425600,3158427647,NL 3158427648,3158429695,DE 3158429696,3158431743,RU @@ -65477,13 +83069,9 @@ 3158886176,3158886207,BZ 3158886208,3158886271,DE 3158886272,3158886335,RO -3158886336,3158886399,DE -3158886400,3158886655,TR -3158886656,3158887167,DE +3158886336,3158887167,DE 3158887168,3158887423,CA -3158887424,3158889215,DE -3158889216,3158889727,TR -3158889728,3158889983,DE +3158887424,3158889983,DE 3158889984,3158890239,HK 3158890240,3158891263,DE 3158891264,3158891519,CA @@ -65493,18 +83081,15 @@ 3158891648,3158891711,DE 3158891712,3158891775,RU 3158891776,3158892031,PL -3158892032,3158892351,DE -3158892352,3158892415,IR +3158892032,3158892415,DE 3158892416,3158892543,GB 3158892544,3158892671,DE 3158892672,3158892799,RU 3158892800,3158893567,DE 3158893568,3158893823,GB -3158893824,3158894079,TR -3158894080,3158895167,DE +3158893824,3158895167,DE 3158895168,3158895231,RU -3158895232,3158895359,TR -3158895360,3158895423,DE +3158895232,3158895423,DE 3158895424,3158895487,RU 3158895488,3158895551,MK 3158895552,3158895615,AE @@ -65523,7 +83108,7 @@ 3158898272,3158898335,RU 3158898336,3158898431,DE 3158898432,3158898687,US -3158898688,3158898815,DE +3158898688,3158898815,IN 3158898816,3158898943,BZ 3158898944,3158899199,ES 3158899200,3158899455,DE @@ -65647,9 +83232,14 @@ 3160324096,3160328191,IT 3160328192,3160330239,FR 3160330240,3160332287,RU -3160332288,3160333055,NO +3160332288,3160332751,NO +3160332752,3160332759,SE +3160332760,3160332767,AU +3160332768,3160333055,NO 3160333056,3160333087,CO -3160333088,3160334335,NO +3160333088,3160334063,NO +3160334064,3160334071,PA +3160334072,3160334335,NO 3160334336,3160336383,RU 3160336384,3160338431,CZ 3160338432,3160340479,GB @@ -65670,7 +83260,9 @@ 3160375296,3160377343,GB 3160377344,3160379391,NL 3160379392,3160381439,TR -3160381440,3160383487,UA +3160381440,3160382543,UA +3160382544,3160382559,DE +3160382560,3160383487,UA 3160383488,3160385535,SA 3160385536,3160387583,NL 3160387584,3160389631,RS @@ -65679,6 +83271,7 @@ 3160395776,3160397823,EE 3160397824,3160399871,ES 3160399872,3160401919,SE +3160401920,3160403967,DE 3160403968,3160406015,NO 3160406016,3160408063,ES 3160408064,3161456639,DE @@ -65703,10 +83296,14 @@ 3161784320,3161800703,FI 3161800704,3161817087,SA 3161817088,3161833471,PL -3161833472,3161833983,MK -3161833984,3161834495,AT -3161834496,3161835263,MK -3161835264,3161849855,AT +3161833472,3161835519,MK +3161835520,3161835775,AT +3161835776,3161837567,MK +3161837568,3161837695,AT +3161837696,3161840639,MK +3161840640,3161840895,AT +3161840896,3161844735,MK +3161844736,3161849855,AT 3161849856,3161866239,BE 3161866240,3161882623,IR 3161882624,3161899007,DE @@ -65729,12 +83326,12 @@ 3162071040,3162087423,IR 3162087424,3162095615,SK 3162095616,3162103807,GE -3162103808,3162104319,FR -3162104320,3162108415,NL -3162108416,3162108671,FR -3162108672,3162108927,NL -3162108928,3162109951,FR -3162109952,3162111999,NL +3162103808,3162104831,FR +3162104832,3162110975,NL +3162110976,3162111103,FR +3162111104,3162111167,NL +3162111168,3162111231,FR +3162111232,3162111999,NL 3162112000,3162120191,PL 3162120192,3162128383,GB 3162128384,3162129407,NL @@ -65755,6 +83352,7 @@ 3162234880,3162243071,RU 3162243072,3162251263,TR 3162251264,3162259455,RU +3162259456,3162267647,BG 3162267648,3162275839,RU 3162275840,3162284031,NO 3162284032,3162292223,PL @@ -65799,8 +83397,12 @@ 3162669056,3162681343,RU 3162681344,3162682367,UA 3162682368,3162685439,RU -3162685440,3162697727,UA -3162697728,3162701823,RU +3162685440,3162693631,UA +3162693632,3162700031,RU +3162700032,3162700287,UZ +3162700288,3162700543,RU +3162700544,3162700799,UA +3162700800,3162701823,RU 3162701824,3162734591,MD 3162734592,3162767359,RU 3162767360,3162800127,SA @@ -65814,128 +83416,238 @@ 3163062272,3163095039,IR 3163095040,3163127807,PL 3163127808,3163160575,BH -3163160576,3163161631,DE +3163160576,3163161599,DE +3163161600,3163161631,IN 3163161632,3163161663,DK -3163161664,3163161695,DE +3163161664,3163161695,US 3163161696,3163161727,BG -3163161728,3163161887,DE -3163161888,3163161919,US -3163161920,3163162111,DE +3163161728,3163161759,DE +3163161760,3163161823,BR +3163161824,3163161855,US +3163161856,3163161887,BR +3163161888,3163161951,US +3163161952,3163162015,DE +3163162016,3163162047,US +3163162048,3163162079,NL +3163162080,3163162111,RU 3163162112,3163162143,TR -3163162144,3163162175,DE -3163162176,3163162207,US -3163162208,3163162239,TR -3163162240,3163162271,DE +3163162144,3163162239,DE +3163162240,3163162271,MA 3163162272,3163162303,NL -3163162304,3163162431,DE +3163162304,3163162335,TH +3163162336,3163162367,RU +3163162368,3163162399,TR +3163162400,3163162431,MA 3163162432,3163162463,CY -3163162464,3163163871,DE +3163162464,3163162495,DE +3163162496,3163162527,BR +3163162528,3163162559,DE +3163162560,3163162623,US +3163162624,3163163679,DE +3163163680,3163163711,RU +3163163712,3163163743,BR +3163163744,3163163807,US +3163163808,3163163839,CY +3163163840,3163163871,PL 3163163872,3163163903,RU 3163163904,3163163935,GR -3163163936,3163163967,VG -3163163968,3163164063,DE +3163163936,3163163967,BR +3163163968,3163163999,US +3163164000,3163164031,MA +3163164032,3163164063,US 3163164064,3163164095,AM -3163164096,3163164127,DE -3163164128,3163164159,US -3163164160,3163164351,DE -3163164352,3163164383,BG -3163164384,3163164511,DE +3163164096,3163164127,RU +3163164128,3163164159,MA +3163164160,3163164191,US +3163164192,3163164223,MA +3163164224,3163164287,DE +3163164288,3163164319,CL +3163164320,3163164351,RU +3163164352,3163164383,DE +3163164384,3163164415,US +3163164416,3163164447,PL +3163164448,3163164479,US +3163164480,3163164511,DE 3163164512,3163164543,HU 3163164544,3163164575,RU -3163164576,3163165759,DE +3163164576,3163164607,DE +3163164608,3163164639,ES +3163164640,3163164671,US +3163164672,3163165695,DE +3163165696,3163165727,US +3163165728,3163165759,RU 3163165760,3163165791,PL 3163165792,3163165823,RU -3163165824,3163166175,DE -3163166176,3163166207,US -3163166208,3163166367,DE -3163166368,3163166399,NL -3163166400,3163166495,DE +3163165824,3163165855,BR +3163165856,3163165887,DE +3163165888,3163165919,AR +3163165920,3163165983,DE +3163165984,3163166015,AR +3163166016,3163166047,US +3163166048,3163166079,BR +3163166080,3163166111,MA +3163166112,3163166143,AU +3163166144,3163166175,DE +3163166176,3163166207,RU +3163166208,3163166239,TR +3163166240,3163166271,IT +3163166272,3163166335,DE +3163166336,3163166399,US +3163166400,3163166431,DE +3163166432,3163166495,BR 3163166496,3163166527,RO 3163166528,3163166559,DE 3163166560,3163166591,HU -3163166592,3163167775,DE +3163166592,3163166623,IN +3163166624,3163166655,US +3163166656,3163166687,DE +3163166688,3163166719,RU +3163166720,3163167743,DE +3163167744,3163167775,RU 3163167776,3163167807,GR -3163167808,3163167839,NL -3163167840,3163167871,DE -3163167872,3163167903,PT -3163167904,3163167967,DE +3163167808,3163167839,US +3163167840,3163167871,BR +3163167872,3163167903,DE +3163167904,3163167935,UA +3163167936,3163167967,US 3163167968,3163167999,TR -3163168000,3163168031,DE +3163168000,3163168031,AU 3163168032,3163168095,RU 3163168096,3163168127,TR 3163168128,3163168159,SA -3163168160,3163168319,DE +3163168160,3163168191,BR +3163168192,3163168223,AT +3163168224,3163168255,DE +3163168256,3163168287,US +3163168288,3163168319,BR 3163168320,3163168351,DK -3163168352,3163168383,DE +3163168352,3163168383,RU 3163168384,3163168415,TR -3163168416,3163168511,DE +3163168416,3163168479,DE +3163168480,3163168511,US 3163168512,3163168543,TR 3163168544,3163168575,DE -3163168576,3163168607,NL -3163168608,3163168671,DE +3163168576,3163168607,US +3163168608,3163168639,MA +3163168640,3163168671,DE 3163168672,3163168703,US -3163168704,3163169823,DE +3163168704,3163168735,GR +3163168736,3163169823,DE 3163169824,3163169855,RU -3163169856,3163169951,DE -3163169952,3163169983,GB +3163169856,3163169887,US +3163169888,3163169951,DE +3163169952,3163169983,UA 3163169984,3163170015,DE 3163170016,3163170047,ES 3163170048,3163170079,RU 3163170080,3163170111,TR -3163170112,3163170207,DE +3163170112,3163170143,CZ +3163170144,3163170175,ZA +3163170176,3163170207,DE 3163170208,3163170239,RU -3163170240,3163170303,DE +3163170240,3163170271,DE +3163170272,3163170303,US 3163170304,3163170335,IT -3163170336,3163170495,DE -3163170496,3163170527,BR -3163170528,3163170591,DE +3163170336,3163170367,RO +3163170368,3163170463,DE +3163170464,3163170495,US +3163170496,3163170527,BG +3163170528,3163170559,HR +3163170560,3163170591,DE 3163170592,3163170623,BR 3163170624,3163170655,GR -3163170656,3163170783,DE +3163170656,3163170687,BR +3163170688,3163170719,DE +3163170720,3163170751,MA +3163170752,3163170783,CH 3163170784,3163170815,US 3163170816,3163171871,DE 3163171872,3163171903,RO -3163171904,3163171935,DE -3163171936,3163171967,BR -3163171968,3163172127,DE -3163172128,3163172159,NL -3163172160,3163172319,DE +3163171904,3163171935,BR +3163171936,3163171967,DE +3163171968,3163171999,US +3163172000,3163172127,BR +3163172128,3163172159,US +3163172160,3163172191,TR +3163172192,3163172223,US +3163172224,3163172255,FR +3163172256,3163172287,US +3163172288,3163172319,DE 3163172320,3163172351,NL -3163172352,3163172383,GB -3163172384,3163172447,DE -3163172448,3163172479,TR -3163172480,3163172511,DE +3163172352,3163172383,FR +3163172384,3163172415,US +3163172416,3163172447,DE +3163172448,3163172479,US +3163172480,3163172511,MA 3163172512,3163172543,RU -3163172544,3163172607,DE +3163172544,3163172575,DE +3163172576,3163172607,MA 3163172608,3163172639,DK -3163172640,3163172735,DE +3163172640,3163172671,LV +3163172672,3163172703,BR +3163172704,3163172735,DE 3163172736,3163172767,GR -3163172768,3163174047,DE +3163172768,3163172799,DE +3163172800,3163172831,RU +3163172832,3163172863,BR +3163172864,3163173951,DE +3163173952,3163173983,IN +3163173984,3163174015,GB +3163174016,3163174047,RU 3163174048,3163174079,DK -3163174080,3163174303,DE -3163174304,3163174335,IL +3163174080,3163174111,DE +3163174112,3163174143,BE +3163174144,3163174175,BD +3163174176,3163174207,MA +3163174208,3163174239,RU +3163174240,3163174271,MA +3163174272,3163174303,DE +3163174304,3163174335,US 3163174336,3163174367,RU -3163174368,3163174399,DE -3163174400,3163174431,US -3163174432,3163174591,DE +3163174368,3163174399,US +3163174400,3163174431,DE +3163174432,3163174463,BR +3163174464,3163174495,DE +3163174496,3163174527,US +3163174528,3163174559,BD +3163174560,3163174591,PL 3163174592,3163174623,SE 3163174624,3163174655,GB -3163174656,3163174719,DE +3163174656,3163174687,RU +3163174688,3163174719,DE 3163174720,3163174751,NL -3163174752,3163174783,US -3163174784,3163176127,DE -3163176128,3163176159,NL +3163174752,3163174783,BR +3163174784,3163174815,TW +3163174816,3163174847,CA +3163174848,3163174879,TR +3163174880,3163174911,RU +3163174912,3163175967,DE +3163175968,3163176031,US +3163176032,3163176063,BG +3163176064,3163176095,RU +3163176096,3163176127,CY +3163176128,3163176159,US 3163176160,3163176255,DE 3163176256,3163176287,UG -3163176288,3163176479,DE -3163176480,3163176543,GB -3163176544,3163176575,DE +3163176288,3163176319,RU +3163176320,3163176351,DE +3163176352,3163176383,RO +3163176384,3163176415,IN +3163176416,3163176479,DE +3163176480,3163176511,GB +3163176512,3163176543,RU +3163176544,3163176575,US 3163176576,3163176607,GR -3163176608,3163176767,DE +3163176608,3163176671,MA +3163176672,3163176703,DE +3163176704,3163176735,BR +3163176736,3163176767,DE 3163176768,3163176799,PL -3163176800,3163176895,DE +3163176800,3163176831,EG +3163176832,3163176895,BR 3163176896,3163176927,SE -3163176928,3163193343,DE +3163176928,3163176959,TH +3163176960,3163193343,DE 3163193344,3163226111,MD 3163226112,3163258879,SA 3163258880,3163291647,SY @@ -65982,16 +83694,17 @@ 3164947044,3164947047,GB 3164947048,3164947063,FR 3164947064,3164947067,NL -3164947068,3164947071,PL +3164947068,3164947071,IT 3164947072,3164947199,DE 3164947200,3164947455,FR 3164947456,3164947519,PL 3164947520,3164947551,ES 3164947552,3164947583,DE 3164947584,3164947587,FR -3164947588,3164947591,PT -3164947592,3164947615,GB -3164947616,3164947623,ES +3164947588,3164947591,DE +3164947592,3164947599,GB +3164947600,3164947619,FR +3164947620,3164947623,ES 3164947624,3164947627,GB 3164947628,3164947635,ES 3164947636,3164947639,DE @@ -66009,33 +83722,46 @@ 3164948736,3164949087,GB 3164949088,3164949095,FR 3164949096,3164949103,IT -3164949104,3164949119,PL +3164949104,3164949107,DE +3164949108,3164949111,PL +3164949112,3164949119,FR 3164949120,3164949123,PT 3164949124,3164949131,DE 3164949132,3164949151,FR 3164949152,3164949155,NL -3164949156,3164949159,FR +3164949156,3164949159,DE 3164949160,3164949163,PL -3164949164,3164949183,FR -3164949184,3164949215,DE +3164949164,3164949167,FR +3164949168,3164949171,IT +3164949172,3164949175,FR +3164949176,3164949179,ES +3164949180,3164949183,FR +3164949184,3164949191,PT +3164949192,3164949195,DE +3164949196,3164949199,NL +3164949200,3164949215,FR 3164949216,3164949219,PL 3164949220,3164949223,FR 3164949224,3164949231,PL 3164949232,3164949247,BE -3164949248,3164949279,FR +3164949248,3164949263,FR +3164949264,3164949271,PL +3164949272,3164949275,GB +3164949276,3164949279,CH 3164949280,3164949295,ES 3164949296,3164949327,FR -3164949328,3164949331,PL -3164949332,3164949335,ES -3164949336,3164949343,IE +3164949328,3164949335,PL +3164949336,3164949339,IT +3164949340,3164949343,GB 3164949344,3164949359,FR -3164949360,3164949363,BE +3164949360,3164949363,IE 3164949364,3164949371,FR 3164949372,3164949375,GB 3164949376,3164949391,FR 3164949392,3164949395,ES 3164949396,3164949439,FR -3164949440,3164949471,PL +3164949440,3164949455,GB +3164949456,3164949471,PL 3164949472,3164949503,FR 3164949504,3164950015,BE 3164950016,3164950271,GB @@ -66045,7 +83771,7 @@ 3164950412,3164950435,PL 3164950436,3164950439,ES 3164950440,3164950447,FR -3164950448,3164950451,PL +3164950448,3164950451,ES 3164950452,3164950455,CZ 3164950456,3164950463,PL 3164950464,3164950479,ES @@ -66057,13 +83783,13 @@ 3164950520,3164950523,FR 3164950524,3164950527,ES 3164950528,3164950543,BE -3164950544,3164950591,NL +3164950544,3164950559,IE +3164950560,3164950591,NL 3164950592,3164950623,FR 3164950624,3164950655,GB 3164950656,3164950687,FR 3164950688,3164950703,ES -3164950704,3164950707,DE -3164950708,3164950711,PL +3164950704,3164950711,PL 3164950712,3164950715,FI 3164950716,3164950723,GB 3164950724,3164950735,FR @@ -66078,7 +83804,9 @@ 3164951296,3164951471,PL 3164951472,3164951487,FR 3164951488,3164951519,PL -3164951520,3164951535,GB +3164951520,3164951523,ES +3164951524,3164951527,IT +3164951528,3164951535,FR 3164951536,3164951543,BE 3164951544,3164951547,NL 3164951548,3164951559,FR @@ -66092,8 +83820,7 @@ 3164951616,3164951663,GB 3164951664,3164951671,PL 3164951672,3164951675,FR -3164951676,3164951679,IT -3164951680,3164951683,ES +3164951676,3164951683,ES 3164951684,3164951687,GB 3164951688,3164951691,FR 3164951692,3164951695,CH @@ -66109,7 +83836,8 @@ 3164951876,3164951879,IT 3164951880,3164951887,DE 3164951888,3164951895,ES -3164951896,3164951907,FR +3164951896,3164951903,FR +3164951904,3164951907,DE 3164951908,3164951911,PL 3164951912,3164951915,ES 3164951916,3164951919,IE @@ -66117,11 +83845,13 @@ 3164951936,3164951999,DE 3164952000,3164952015,ES 3164952016,3164952031,FR -3164952032,3164952063,PL +3164952032,3164952063,PT 3164952064,3164952191,FR 3164952192,3164952207,ES -3164952208,3164952219,NL -3164952220,3164952239,FR +3164952208,3164952215,FR +3164952216,3164952219,NL +3164952220,3164952223,FR +3164952224,3164952239,GB 3164952240,3164952243,DE 3164952244,3164952247,BE 3164952248,3164952255,FR @@ -66130,8 +83860,7 @@ 3164952576,3164952831,FR 3164952832,3164952959,IT 3164952960,3164952975,GB -3164952976,3164952991,FR -3164952992,3164953007,PL +3164952976,3164953007,FR 3164953008,3164953023,ES 3164953024,3164953087,FR 3164953088,3164953151,LT @@ -66139,9 +83868,11 @@ 3164953216,3164953247,FR 3164953248,3164953255,CH 3164953256,3164953263,CZ -3164953264,3164953311,FR -3164953312,3164953375,PL -3164953376,3164953391,FR +3164953264,3164953327,FR +3164953328,3164953375,PL +3164953376,3164953379,NL +3164953380,3164953383,GB +3164953384,3164953391,PL 3164953392,3164953395,IT 3164953396,3164953399,NL 3164953400,3164953403,BE @@ -66151,15 +83882,16 @@ 3164953440,3164953443,PL 3164953444,3164953447,DE 3164953448,3164953451,ES -3164953452,3164953455,FR -3164953456,3164953463,PL +3164953452,3164953459,FR +3164953460,3164953463,GB 3164953464,3164953467,FR 3164953468,3164953471,GB 3164953472,3164953503,PL 3164953504,3164953511,FR 3164953512,3164953515,PL 3164953516,3164953519,IE -3164953520,3164953567,PL +3164953520,3164953535,FR +3164953536,3164953567,PL 3164953568,3164953571,FR 3164953572,3164953575,GB 3164953576,3164953583,IT @@ -66171,10 +83903,16 @@ 3164954280,3164954287,FR 3164954288,3164954303,ES 3164954304,3164954367,DE -3164954368,3164954431,FR +3164954368,3164954371,FR +3164954372,3164954375,IE +3164954376,3164954399,FR +3164954400,3164954407,PL +3164954408,3164954415,CH +3164954416,3164954423,NL +3164954424,3164954431,PL 3164954432,3164954439,ES -3164954440,3164954443,DE -3164954444,3164954447,NL +3164954440,3164954443,NL +3164954444,3164954447,PL 3164954448,3164954479,FR 3164954480,3164954495,GB 3164954496,3164954499,PL @@ -66185,16 +83923,24 @@ 3164954516,3164954519,IT 3164954520,3164954543,GB 3164954544,3164954559,LT -3164954560,3164954591,FR +3164954560,3164954567,PT +3164954568,3164954575,FI +3164954576,3164954579,IT +3164954580,3164954583,ES +3164954584,3164954591,DE 3164954592,3164954623,PL -3164954624,3164956479,FR +3164954624,3164956383,FR +3164956384,3164956399,DE +3164956400,3164956479,FR 3164956480,3164956543,GB 3164956544,3164958847,FR 3164958848,3164958911,IT 3164958912,3164958927,CH 3164958928,3164958955,FR 3164958956,3164958959,GB -3164958960,3164959039,FR +3164958960,3164959007,FR +3164959008,3164959023,PL +3164959024,3164959039,FR 3164959040,3164959135,DE 3164959136,3164959231,ES 3164959232,3164959247,FR @@ -66210,17 +83956,60 @@ 3164959360,3164959375,ES 3164959376,3164959383,DE 3164959384,3164959387,PL -3164959388,3164959487,FR +3164959388,3164959455,FR +3164959456,3164959463,DE +3164959464,3164959487,GB 3164959488,3164959743,ES -3164959744,3164959999,FR -3164960000,3164960255,DE -3164960256,3164960511,FR +3164959744,3164959763,FR +3164959764,3164959767,LT +3164959768,3164959775,FR +3164959776,3164959807,DE +3164959808,3164959839,PT +3164959840,3164959871,ES +3164959872,3164959887,FR +3164959888,3164959891,CH +3164959892,3164959895,LT +3164959896,3164959903,PL +3164959904,3164959919,DE +3164959920,3164959927,FR +3164959928,3164959935,GB +3164959936,3164959999,FR +3164960000,3164960259,DE +3164960260,3164960263,FR +3164960264,3164960267,LT +3164960268,3164960271,NL +3164960272,3164960295,FR +3164960296,3164960299,IT +3164960300,3164960303,GB +3164960304,3164960319,FR +3164960320,3164960323,ES +3164960324,3164960327,IT +3164960328,3164960331,CZ +3164960332,3164960335,LT +3164960336,3164960339,PL +3164960340,3164960359,FR +3164960360,3164960367,PL +3164960368,3164960383,GB +3164960384,3164960387,DE +3164960388,3164960391,PL +3164960392,3164960395,GB +3164960396,3164960399,DE +3164960400,3164960415,PL +3164960416,3164960435,FR +3164960436,3164960439,ES +3164960440,3164960443,CH +3164960444,3164960447,IT +3164960448,3164960463,PL +3164960464,3164960467,NL +3164960468,3164960471,GB +3164960472,3164960479,FR +3164960480,3164960511,DE 3164960512,3164960575,PL 3164960576,3164960591,DE 3164960592,3164960599,ES -3164960600,3164960603,IT -3164960604,3164960607,CZ -3164960608,3164960639,BE +3164960600,3164960623,DE +3164960624,3164960627,FR +3164960628,3164960639,PL 3164960640,3164960643,LT 3164960644,3164960647,FR 3164960648,3164960651,CH @@ -66230,42 +84019,49 @@ 3164960676,3164960679,GB 3164960680,3164960699,PL 3164960700,3164960703,ES -3164960704,3164960719,GB +3164960704,3164960719,FR 3164960720,3164960723,CH -3164960724,3164960727,DE -3164960728,3164960735,GB +3164960724,3164960727,FR +3164960728,3164960735,PL 3164960736,3164960767,ES 3164960768,3164960799,GB 3164960800,3164960831,ES 3164960832,3164960911,FR -3164960912,3164960915,PL -3164960916,3164960919,LT +3164960912,3164960919,PL 3164960920,3164960927,FR 3164960928,3164960935,ES 3164960936,3164960939,GB 3164960940,3164960943,DE -3164960944,3164960959,FR -3164960960,3164961023,CH +3164960944,3164960959,PL +3164960960,3164960963,ES +3164960964,3164960967,PT +3164960968,3164960975,PL +3164960976,3164960991,GB +3164960992,3164960999,FR +3164961000,3164961003,ES +3164961004,3164961007,DE +3164961008,3164961023,PL 3164961024,3164961151,FR 3164961152,3164961167,DE 3164961168,3164961175,PL -3164961176,3164961247,FR -3164961248,3164961279,NL +3164961176,3164961279,FR 3164961280,3164961311,DE 3164961312,3164961319,FR 3164961320,3164961327,PL -3164961328,3164961331,ES -3164961332,3164961339,FR -3164961340,3164961343,ES -3164961344,3164961363,FR +3164961328,3164961331,CZ +3164961332,3164961363,FR 3164961364,3164961367,ES -3164961368,3164961375,FR -3164961376,3164961391,DE -3164961392,3164961399,FR +3164961368,3164961375,GB +3164961376,3164961379,DE +3164961380,3164961387,IT +3164961388,3164961399,FR 3164961400,3164961403,PL 3164961404,3164961471,FR 3164961472,3164961503,DE -3164961504,3164961551,ES +3164961504,3164961519,GB +3164961520,3164961527,IT +3164961528,3164961535,PL +3164961536,3164961551,ES 3164961552,3164961559,FR 3164961560,3164961563,DE 3164961564,3164961583,FR @@ -66276,14 +84072,24 @@ 3164961656,3164961663,ES 3164961664,3164961695,DE 3164961696,3164961727,GB -3164961728,3164961743,ES +3164961728,3164961731,ES +3164961732,3164961735,IT +3164961736,3164961739,FR +3164961740,3164961743,GB 3164961744,3164961763,PL 3164961764,3164961767,IT 3164961768,3164961775,BE -3164961776,3164961783,FR +3164961776,3164961783,PL 3164961784,3164961791,ES -3164961792,3164961855,FR -3164961856,3164961871,PL +3164961792,3164961807,PL +3164961808,3164961815,FR +3164961816,3164961819,CZ +3164961820,3164961823,DE +3164961824,3164961827,ES +3164961828,3164961855,FR +3164961856,3164961859,PL +3164961860,3164961863,ES +3164961864,3164961871,FR 3164961872,3164961887,IE 3164961888,3164961903,ES 3164961904,3164961919,GB @@ -66294,17 +84100,22 @@ 3164961976,3164961979,GB 3164961980,3164961999,DE 3164962000,3164962007,BE -3164962008,3164962031,FR +3164962008,3164962011,DE +3164962012,3164962015,PT +3164962016,3164962031,FR 3164962032,3164962047,NL 3164962048,3164962079,FR 3164962080,3164962095,ES -3164962096,3164962111,BE +3164962096,3164962111,FR 3164962112,3164962143,GB -3164962144,3164962203,FR +3164962144,3164962151,ES +3164962152,3164962159,DE +3164962160,3164962191,FR +3164962192,3164962199,DE +3164962200,3164962203,GB 3164962204,3164962207,PT -3164962208,3164962211,GB -3164962212,3164962215,PL -3164962216,3164962239,FR +3164962208,3164962211,FI +3164962212,3164962239,FR 3164962240,3164962247,PL 3164962248,3164962251,FR 3164962252,3164962255,DE @@ -66312,7 +84123,9 @@ 3164962260,3164962263,DE 3164962264,3164962279,ES 3164962280,3164962283,DE -3164962284,3164962295,ES +3164962284,3164962287,ES +3164962288,3164962291,FR +3164962292,3164962295,ES 3164962296,3164962303,PL 3164962304,3164962319,NL 3164962320,3164962335,FR @@ -66333,8 +84146,10 @@ 3164962632,3164962639,FR 3164962640,3164962647,ES 3164962648,3164962655,PT -3164962656,3164962687,ES -3164962688,3164962715,FR +3164962656,3164962671,GB +3164962672,3164962687,FR +3164962688,3164962703,PL +3164962704,3164962715,FR 3164962716,3164962719,NL 3164962720,3164962723,FR 3164962724,3164962727,ES @@ -66365,28 +84180,42 @@ 3164967972,3164967975,DE 3164967976,3164967983,FR 3164967984,3164967999,PL -3164968000,3164968063,ES -3164968064,3164968191,FR +3164968000,3164968015,GB +3164968016,3164968191,FR 3164968192,3164968703,PL 3164968704,3164968831,FR -3164968832,3164968863,DE -3164968864,3164968895,FR -3164968896,3164968927,GB -3164968928,3164968959,IT -3164968960,3164968991,DE -3164968992,3164969007,FR +3164968832,3164968835,PL +3164968836,3164968839,NL +3164968840,3164968843,ES +3164968844,3164968847,IT +3164968848,3164968851,GB +3164968852,3164968855,FR +3164968856,3164968859,IE +3164968860,3164968863,LT +3164968864,3164968895,DE +3164968896,3164968899,PT +3164968900,3164968903,CZ +3164968904,3164968907,IE +3164968908,3164968911,GB +3164968912,3164968927,DE +3164968928,3164968947,FR +3164968948,3164968951,PL +3164968952,3164968959,DE +3164968960,3164968991,GB +3164968992,3164969007,IE 3164969008,3164969015,PT 3164969016,3164969019,NL 3164969020,3164969023,BE 3164969024,3164969055,PL 3164969056,3164969071,CZ -3164969072,3164969087,GB -3164969088,3164969095,ES +3164969072,3164969079,FR +3164969080,3164969083,PL +3164969084,3164969095,ES 3164969096,3164969099,PL 3164969100,3164969103,DE 3164969104,3164969135,FR 3164969136,3164969143,ES -3164969144,3164969147,PT +3164969144,3164969147,FR 3164969148,3164969183,GB 3164969184,3164969199,FR 3164969200,3164969203,LT @@ -66394,7 +84223,17 @@ 3164969208,3164969211,PL 3164969212,3164969471,FR 3164969472,3164969727,PL -3164969728,3164969983,GB +3164969728,3164969743,DE +3164969744,3164969759,FR +3164969760,3164969775,IE +3164969776,3164969823,FR +3164969824,3164969855,DE +3164969856,3164969875,FR +3164969876,3164969879,DE +3164969880,3164969883,ES +3164969884,3164969887,PL +3164969888,3164969903,IE +3164969904,3164969983,FR 3164969984,3164970047,IE 3164970048,3164970079,GB 3164970080,3164970111,DE @@ -66404,7 +84243,7 @@ 3164970220,3164970223,FR 3164970224,3164970239,GB 3164970240,3164970271,IE -3164970272,3164970287,DE +3164970272,3164970287,BE 3164970288,3164970291,PL 3164970292,3164970295,DE 3164970296,3164970299,ES @@ -66419,8 +84258,13 @@ 3164970364,3164970367,ES 3164970368,3164970371,PL 3164970372,3164970375,ES -3164970376,3164970399,IT -3164970400,3164970415,GB +3164970376,3164970379,FR +3164970380,3164970383,PL +3164970384,3164970399,IT +3164970400,3164970403,NL +3164970404,3164970407,CH +3164970408,3164970411,IT +3164970412,3164970415,GB 3164970416,3164970423,FR 3164970424,3164970427,IE 3164970428,3164970431,PT @@ -66450,24 +84294,23 @@ 3164970832,3164970835,IT 3164970836,3164970839,PL 3164970840,3164970847,GB -3164970848,3164970883,FR -3164970884,3164970887,ES -3164970888,3164970891,IT +3164970848,3164970887,FR +3164970888,3164970891,GB 3164970892,3164970911,FR -3164970912,3164970915,ES +3164970912,3164970915,NL 3164970916,3164970919,FR 3164970920,3164970923,GB 3164970924,3164970927,LT 3164970928,3164970991,FR 3164970992,3164971007,BE -3164971008,3164971011,ES +3164971008,3164971011,IT 3164971012,3164971015,FR 3164971016,3164971023,PL 3164971024,3164971071,FR 3164971072,3164971135,DE 3164971136,3164971263,GB 3164971264,3164971455,DE -3164971456,3164971459,NL +3164971456,3164971459,FR 3164971460,3164971463,IT 3164971464,3164971467,CH 3164971468,3164971471,FR @@ -66489,7 +84332,7 @@ 3164972000,3164972015,CH 3164972016,3164972019,ES 3164972020,3164972027,FR -3164972028,3164972031,ES +3164972028,3164972031,CH 3164972032,3164972287,GB 3164972288,3164972319,FR 3164972320,3164972351,DE @@ -66499,25 +84342,79 @@ 3164972500,3164972511,DE 3164972512,3164972527,GB 3164972528,3164972531,DE -3164972532,3164972799,FR +3164972532,3164972559,FR +3164972560,3164972575,IT +3164972576,3164972579,CZ +3164972580,3164972583,GB +3164972584,3164972587,NL +3164972588,3164972591,FR +3164972592,3164972595,IE +3164972596,3164972599,PL +3164972600,3164972607,FR +3164972608,3164972639,PL +3164972640,3164972655,IT +3164972656,3164972671,FR +3164972672,3164972679,PL +3164972680,3164972691,FR +3164972692,3164972695,FI +3164972696,3164972699,FR +3164972700,3164972703,DE +3164972704,3164972735,FR +3164972736,3164972767,GB +3164972768,3164972799,IT 3164972800,3164973311,ES -3164973312,3164973823,FR +3164973312,3164973407,DE +3164973408,3164973415,GB +3164973416,3164973419,FR +3164973420,3164973423,ES +3164973424,3164973439,DE +3164973440,3164973503,PL +3164973504,3164973511,FR +3164973512,3164973515,ES +3164973516,3164973519,DE +3164973520,3164973551,PL +3164973552,3164973555,GB +3164973556,3164973559,FR +3164973560,3164973563,BE +3164973564,3164973575,CZ +3164973576,3164973583,GB +3164973584,3164973599,FR +3164973600,3164973615,IE +3164973616,3164973623,BE +3164973624,3164973627,PL +3164973628,3164973631,CH +3164973632,3164973663,IE +3164973664,3164973695,ES +3164973696,3164973727,DE +3164973728,3164973743,GB +3164973744,3164973759,FR +3164973760,3164973791,GB +3164973792,3164973807,DE +3164973808,3164973815,GB +3164973816,3164973823,FR 3164973824,3164973855,DE 3164973856,3164973863,PL 3164973864,3164973867,FR -3164973868,3164973875,ES +3164973868,3164973871,ES +3164973872,3164973875,PL 3164973876,3164973879,GB 3164973880,3164973883,FR 3164973884,3164973887,DE -3164973888,3164973919,ES -3164973920,3164973935,FR -3164973936,3164973939,IE +3164973888,3164973903,GB +3164973904,3164973911,FR +3164973912,3164973915,DE +3164973916,3164973935,FR +3164973936,3164973939,GB 3164973940,3164973943,FR 3164973944,3164973951,PL -3164973952,3164974651,FR +3164973952,3164974591,FR +3164974592,3164974623,PL +3164974624,3164974643,FR +3164974644,3164974647,PL +3164974648,3164974651,PT 3164974652,3164974655,DE -3164974656,3164974663,FR -3164974664,3164974667,GB +3164974656,3164974659,BE +3164974660,3164974667,GB 3164974668,3164974671,DE 3164974672,3164974675,FR 3164974676,3164974719,PL @@ -66532,14 +84429,46 @@ 3164975104,3164975167,CH 3164975168,3164975231,GB 3164975232,3164975299,IT -3164975300,3164975303,ES -3164975304,3164975311,IT -3164975312,3164975343,ES +3164975300,3164975343,ES 3164975344,3164975351,GB 3164975352,3164975355,NL 3164975356,3164975359,FR 3164975360,3164975615,ES -3164975616,3164976127,GB +3164975616,3164975663,FI +3164975664,3164975679,PL +3164975680,3164975695,GB +3164975696,3164975699,PL +3164975700,3164975703,DE +3164975704,3164975719,PL +3164975720,3164975731,ES +3164975732,3164975735,PT +3164975736,3164975739,BE +3164975740,3164975751,PL +3164975752,3164975755,NL +3164975756,3164975759,ES +3164975760,3164975775,PL +3164975776,3164975807,FR +3164975808,3164975823,PL +3164975824,3164975839,ES +3164975840,3164975843,DE +3164975844,3164975847,PL +3164975848,3164975851,ES +3164975852,3164975871,PL +3164975872,3164975935,FR +3164975936,3164975939,ES +3164975940,3164975943,PT +3164975944,3164975947,PL +3164975948,3164975951,NL +3164975952,3164975967,GB +3164975968,3164975983,NL +3164975984,3164975991,DE +3164975992,3164976011,PL +3164976012,3164976015,ES +3164976016,3164976023,PL +3164976024,3164976031,ES +3164976032,3164976063,FR +3164976064,3164976095,PT +3164976096,3164976127,PL 3164976128,3164976131,NL 3164976132,3164976135,GB 3164976136,3164976139,FR @@ -66548,37 +84477,46 @@ 3164976160,3164976191,GB 3164976192,3164976215,FR 3164976216,3164976223,PL -3164976224,3164976231,NL +3164976224,3164976231,FR 3164976232,3164976239,ES 3164976240,3164976255,IE 3164976256,3164976259,GB -3164976260,3164976263,NL +3164976260,3164976263,DE 3164976264,3164976271,PT 3164976272,3164976279,FI 3164976280,3164976287,PL 3164976288,3164976295,ES 3164976296,3164976303,IT 3164976304,3164976307,FR -3164976308,3164976311,DE +3164976308,3164976311,IE 3164976312,3164976315,GB 3164976316,3164976319,FR -3164976320,3164976335,DE +3164976320,3164976327,DE +3164976328,3164976331,FR +3164976332,3164976335,PL 3164976336,3164976343,FR 3164976344,3164976347,PL 3164976348,3164976351,ES 3164976352,3164976367,DE 3164976368,3164976383,PL -3164976384,3164976407,FR +3164976384,3164976399,FR +3164976400,3164976403,ES +3164976404,3164976407,FR 3164976408,3164976415,DE 3164976416,3164976431,IT -3164976432,3164976459,FR +3164976432,3164976447,PT +3164976448,3164976459,FR 3164976460,3164976479,DE 3164976480,3164976511,PL -3164976512,3164976767,FR +3164976512,3164976639,FR +3164976640,3164976671,CH +3164976672,3164976687,FR +3164976688,3164976703,PL +3164976704,3164976767,FR 3164976768,3164976783,DE -3164976784,3164976799,ES -3164976800,3164976815,DE -3164976816,3164976831,GB +3164976784,3164976799,CZ +3164976800,3164976815,PT +3164976816,3164976831,CZ 3164976832,3164976835,IT 3164976836,3164976839,ES 3164976840,3164976847,FR @@ -66596,18 +84534,25 @@ 3164977744,3164977759,PT 3164977760,3164977775,NL 3164977776,3164977791,PL -3164977792,3164977807,FR -3164977808,3164977823,NL +3164977792,3164977823,FR 3164977824,3164977839,GB -3164977840,3164977883,FR +3164977840,3164977871,FR +3164977872,3164977875,GB +3164977876,3164977879,NL +3164977880,3164977883,DE 3164977884,3164977887,GB 3164977888,3164977903,IT -3164977904,3164977919,NL +3164977904,3164977907,DE +3164977908,3164977911,BE +3164977912,3164977915,CH +3164977916,3164977919,CZ 3164977920,3164978047,DE -3164978048,3164978067,FR +3164978048,3164978055,FR +3164978056,3164978063,NL +3164978064,3164978067,FR 3164978068,3164978079,ES 3164978080,3164978111,IT -3164978112,3164978127,ES +3164978112,3164978127,GB 3164978128,3164978143,FR 3164978144,3164978147,DE 3164978148,3164978151,ES @@ -66615,32 +84560,38 @@ 3164978156,3164978159,DE 3164978160,3164978175,FR 3164978176,3164978431,IT -3164978432,3164978495,FR -3164978496,3164978511,IT -3164978512,3164978527,ES -3164978528,3164978543,FR -3164978544,3164978559,PT -3164978560,3164978575,GB +3164978432,3164978559,FR +3164978560,3164978563,PT +3164978564,3164978567,PL +3164978568,3164978571,GB +3164978572,3164978575,FR 3164978576,3164978591,ES 3164978592,3164978607,FR -3164978608,3164978623,CZ -3164978624,3164978687,FR -3164978688,3164978943,PL +3164978608,3164978623,IE +3164978624,3164978655,PT +3164978656,3164978659,IT +3164978660,3164978663,FI +3164978664,3164978667,PL +3164978668,3164978671,FR +3164978672,3164978679,PT +3164978680,3164978943,PL 3164978944,3164978951,PT 3164978952,3164978955,PL 3164978956,3164978959,GB 3164978960,3164978975,FR -3164978976,3164978991,ES -3164978992,3164979007,FR -3164979008,3164979023,ES -3164979024,3164979039,CH -3164979040,3164979071,PT -3164979072,3164979103,ES -3164979104,3164979111,DE +3164978976,3164978983,ES +3164978984,3164978999,PL +3164979000,3164979003,FR +3164979004,3164979007,DE +3164979008,3164979023,GB +3164979024,3164979047,FR +3164979048,3164979051,BE +3164979052,3164979103,FR +3164979104,3164979107,PL +3164979108,3164979111,GB 3164979112,3164979119,PL 3164979120,3164979135,NL -3164979136,3164979151,DE -3164979152,3164979159,FR +3164979136,3164979159,FR 3164979160,3164979167,PL 3164979168,3164979175,DE 3164979176,3164979183,FR @@ -66659,29 +84610,43 @@ 3166175232,3166306303,CH 3166306304,3166437375,RU 3166437376,3166568447,BE +3166568448,3166601215,UA +3166601216,3166609407,RU +3166609408,3166633983,UA +3166633984,3166638079,RU +3166638080,3166646271,UA +3166646272,3166650367,CZ +3166650368,3166654463,UA +3166654464,3166658559,RU +3166658560,3166662655,UA +3166662656,3166666751,RU +3166666752,3166670847,RO +3166670848,3166672895,UA +3166672896,3166674943,GB +3166674944,3166679039,RU +3166679040,3166681087,IR +3166681088,3166685183,RU +3166685184,3166687231,PL +3166687232,3166689279,MD +3166689280,3166691327,PL +3166691328,3166693375,RU +3166693376,3166695423,UA +3166695424,3166697471,RU +3166697472,3166699519,RO 3166699520,3166961663,DE 3166961664,3167223807,SI 3167223808,3167594831,NL 3167594832,3167594839,A2 3167594840,3167748095,NL -3167748096,3167940095,RO +3167748096,3167875071,RO +3167875072,3167879167,MD +3167879168,3167940095,RO 3167940096,3167940351,CY -3167940352,3168069631,RO -3168069632,3168075775,GB -3168075776,3168092159,RO -3168092160,3168096255,GB +3167940352,3168096255,RO 3168096256,3168100351,MD -3168100352,3168104447,RO -3168104448,3168108543,GB -3168108544,3168112639,RO -3168112640,3168116735,GB -3168116736,3168120831,RO -3168120832,3168124927,GB -3168124928,3168157695,RO -3168157696,3168178175,GB -3168178176,3168182271,RO -3168182272,3168194559,GB -3168194560,3168207103,RO +3168100352,3168195583,RO +3168195584,3168196095,DE +3168196096,3168207103,RO 3168207104,3168207359,CY 3168207360,3168214527,RO 3168214528,3168214783,CY @@ -66694,7 +84659,16 @@ 3168829440,3168862207,RO 3168862208,3168894975,RU 3168894976,3168927743,PS -3168927744,3169058815,RU +3168927744,3169026047,RU +3169026048,3169034239,CZ +3169034240,3169042431,GB +3169042432,3169044479,GR +3169044480,3169046527,NL +3169046528,3169050623,AZ +3169050624,3169052671,HU +3169052672,3169054719,PS +3169054720,3169056767,GB +3169056768,3169058815,EE 3169058816,3169091583,DK 3169091584,3169124351,IT 3169124352,3169157119,RO @@ -66730,9 +84704,21 @@ 3169281280,3169288191,KW 3169288192,3169320959,UA 3169320960,3169583103,RU -3169845248,3169965823,RO -3169965824,3169966079,GB -3169966080,3169976319,RO +3169583104,3169648639,KW +3169648640,3169714175,MD +3169714176,3169779711,FI +3169779712,3169845247,UA +3169845248,3169863679,RO +3169863680,3169864703,MD +3169864704,3169867775,RO +3169867776,3169868031,DE +3169868032,3169873919,RO +3169873920,3169878015,MD +3169878016,3169905151,RO +3169905152,3169905407,GB +3169905408,3169920767,RO +3169920768,3169921023,SE +3169921024,3169976319,RO 3169976320,3170111487,RU 3170111488,3170115583,MD 3170115584,3170119679,RU @@ -66749,14 +84735,27 @@ 3170263040,3170271231,CZ 3170271232,3170279423,PL 3170279424,3170287615,RU -3170287616,3170295807,GB +3170287616,3170289151,GB +3170289152,3170289167,BA +3170289168,3170295807,GB 3170295808,3170303999,RU 3170304000,3170312191,SY 3170312192,3170320383,RU 3170320384,3170328575,JO 3170328576,3170336767,UA -3170336768,3170369535,RO +3170336768,3170363391,RO +3170363392,3170363647,SK +3170363648,3170369535,RO 3170369536,3170500607,SA +3170500608,3170631679,PT +3170631680,3170664447,PL +3170664448,3170697215,HR +3170697216,3170729983,IR +3170729984,3170762751,AZ +3170762752,3170795519,RU +3170795520,3170828287,BG +3170828288,3170861055,RU +3170861056,3170893823,RS 3170893824,3179282431,BR 3179282432,3179282943,UY 3179282944,3179283199,MX @@ -66783,8 +84782,9 @@ 3187826688,3187834879,AR 3187834880,3187851263,AN 3187851264,3187855359,PY +3187855360,3187857407,PA 3187859456,3187863551,PA -3187867648,3187908607,AR +3187863552,3187908607,AR 3187908608,3187910655,CO 3187910656,3187914751,CL 3187914752,3187916799,BO @@ -66796,9 +84796,11 @@ 3187953664,3187955711,CL 3187955712,3187957759,CR 3187957760,3187961855,CL +3187961856,3187965951,AR 3187965952,3187982335,AN 3187982336,3187998719,CL 3187998720,3188006911,AR +3188006912,3188015103,CL 3188015104,3188031487,HN 3188031488,3188039679,SV 3188047872,3188051967,CO @@ -66809,18 +84811,28 @@ 3188097024,3188105215,DO 3188105216,3188113407,CO 3188113408,3188117503,HN +3188117504,3188121599,AR 3188121600,3188125695,TT -3188129792,3188146175,AR +3188125696,3188146175,AR 3188146176,3188170751,CO 3188170752,3188174847,CR +3188174848,3188178943,AR 3188178944,3188187135,CR -3188187136,3188199423,AR +3188187136,3188203519,AR 3188203520,3188207615,DO +3188207616,3188211711,AR 3188211712,3188228095,CL 3188228096,3188236287,PE +3188236288,3188237311,PA +3188237312,3188238335,VE +3188240384,3188241407,CO +3188241408,3188242431,EC +3188242432,3188244479,AR 3188244480,3188260863,CO 3188260864,3188269055,AR -3188269056,3188273151,VE +3188269056,3188269439,VE +3188269440,3188269567,CO +3188269568,3188273151,VE 3188273152,3188275199,PA 3188275200,3188277247,CL 3188277248,3188293631,CO @@ -66832,20 +84844,35 @@ 3188400128,3188408319,AR 3188408320,3188416511,BO 3188416512,3188445183,AR +3188445184,3188449279,PE 3188449280,3188453375,HN -3188457472,3188473855,EC +3188453376,3188473855,EC 3188473856,3188482047,PE 3188482048,3188490239,AR 3188490240,3188498431,CO -3188506624,3188513279,AR +3188498432,3188509695,AR +3188509696,3188510207,US +3188510208,3188513279,AR 3188513280,3188513535,US -3188513536,3188523007,AR +3188513536,3188516351,AR +3188516352,3188516607,US +3188516608,3188517119,AR +3188517120,3188517375,US +3188517376,3188523007,AR 3188523008,3188539391,CO 3188539392,3188543487,CL +3188543488,3188545535,PA +3188545536,3188547583,AR 3188547584,3188551679,CO +3188551680,3188552703,AR +3188552704,3188553727,CL +3188553728,3188555775,AN 3188555776,3188572159,CL 3188572160,3188576255,CO -3188580352,3188596735,AR +3188576256,3188597759,AR +3188597760,3188598783,PA +3188598784,3188600831,AR +3188600832,3188604927,CL 3188604928,3188606207,AR 3188606208,3188606463,CL 3188606464,3188609279,AR @@ -66857,12 +84884,14 @@ 3188612352,3188621311,AR 3188621312,3188625407,GT 3188625408,3188627455,AR -3188629504,3188637695,AR +3188627456,3188628479,CR +3188628480,3188637695,AR 3188637696,3188645887,PA 3188645888,3188662271,CO 3188670464,3188674559,HN -3188678656,3188686847,AR +3188674560,3188686847,AR 3188686848,3188690943,EC +3188690944,3188695039,CU 3188695040,3188703231,VE 3188703232,3188981759,AR 3188981760,3189178367,CL @@ -66875,9 +84904,12 @@ 3190554624,3190816767,CL 3190816768,3191078911,AR 3191078912,3191087103,CO -3191087104,3191089151,AR +3191087104,3191091199,AR +3191091200,3191093247,BO +3191093248,3191095295,AR 3191095296,3191099391,EC 3191103488,3191107583,CO +3191107584,3191111679,PE 3191111680,3191128063,PY 3191128064,3191132159,EC 3191136256,3191144447,DO @@ -66899,11 +84931,14 @@ 3191436288,3191438335,GT 3191438336,3191439359,SV 3191439360,3191455743,EC +3191455744,3191472127,AR 3191472128,3191603199,TT 3191603200,3191608319,MX 3191608320,3191608831,CO 3191608832,3191609087,MX -3191609088,3191635967,CO +3191609088,3191611391,CO +3191611392,3191619583,VE +3191619584,3191635967,CO 3191635968,3191637503,AR 3191637504,3191638095,CO 3191638096,3191638103,AR @@ -66928,23 +84963,39 @@ 3193307136,3193438207,SV 3193438208,3193569279,AN 3193569280,3193634815,CO -3193700352,3193716735,HN +3193634816,3193700351,CL +3193700352,3193733119,HN 3193733120,3193765887,AR -3193765888,3193798655,TT +3193765888,3193774079,TT +3193774080,3193775103,PA +3193775104,3193776127,GY +3193776128,3193777151,AR +3193777152,3193778175,VE +3193778176,3193782271,AR +3193782272,3193798655,TT 3193798656,3193806847,CO -3193815040,3193819135,AR +3193806848,3193810943,CR +3193810944,3193815039,PY +3193815040,3193823231,AR 3193823232,3193827327,CL 3193831424,3193864191,DO 3193864192,3193872383,EC -3193880576,3193888767,VE +3193872384,3193880575,AR +3193880576,3193896959,VE 3193896960,3193929727,CL 3193929728,3193962495,EC -3193962496,3193995263,CL +3193962496,3193987071,CL +3193987072,3193989119,EC +3193991168,3193995263,AR 3193995264,3194028031,CO 3194028032,3194044415,AR 3194044416,3194052607,CO 3194052608,3194056703,TT -3194060800,3194093567,CO +3194056704,3194058751,AN +3194060800,3194068991,CO +3194068992,3194071039,PA +3194073088,3194077183,HN +3194077184,3194085375,CO 3194093568,3194126335,SR 3194126336,3194127359,GT 3194127360,3194128383,AR @@ -66975,13 +85026,19 @@ 3194429440,3194437631,VE 3194437632,3194441727,BO 3194445824,3194454015,CO -3194454016,3194486783,AR +3194454016,3194458111,AR +3194465280,3194467327,AR +3194469376,3194470399,CR +3194470400,3194486783,AR 3194486784,3194494975,BO 3194503168,3194507263,AR 3194511360,3194515455,AW 3194519552,3194535935,PY 3194552320,3194585087,AR 3194585088,3194589183,HN +3194589184,3194591231,AR +3194591232,3194592255,PA +3194592256,3194593279,GY 3194593280,3194595327,AR 3194595328,3194596351,PA 3194596352,3194597375,HT @@ -66995,7 +85052,9 @@ 3194642432,3194646527,AR 3194650624,3194653439,AR 3194653440,3194653695,US -3194653696,3194665983,AR +3194653696,3194663167,AR +3194663168,3194663423,US +3194663424,3194665983,AR 3194665984,3194666239,US 3194666240,3194667007,AR 3194683392,3194687487,CU @@ -67004,18 +85063,18 @@ 3194707968,3194716159,AR 3194716160,3194724351,HN 3194724352,3194728447,PA -3194732544,3194736639,AR 3194740736,3194742783,CL 3194742784,3194744831,EC 3194744832,3194746879,AR 3194746880,3194748927,AN 3194748928,3194757119,UY 3194765312,3194767359,EC +3194767360,3194768383,CR 3194769408,3194771455,PE 3194781696,3194798079,CL 3194798080,3194799103,AR 3194799104,3194802175,GY -3194806272,3194810367,AR +3194806272,3194814463,AR 3194818560,3194822655,AR 3194830848,3194839039,PA 3194847232,3194863615,CO @@ -67025,24 +85084,24 @@ 3194912768,3194925055,CL 3194925056,3194929151,AR 3194929152,3194937343,EC +3194937344,3194945535,AR 3194945536,3194953727,GT -3194961920,3194966015,EC +3194961920,3194970111,EC 3194970112,3194974207,PA 3194974208,3194976255,AR 3194976256,3194977279,VE 3194977280,3194978303,AR 3194978304,3194994687,PA -3194994688,3195002879,AR -3195011072,3195023359,AR +3194994688,3195023359,AR 3195023360,3195024383,CL 3195024384,3195025407,UY -3195025408,3195035647,AR +3195025408,3195043839,AR 3195043840,3195060223,CO 3195060224,3195064319,UY -3195068416,3195072511,AN +3195068416,3195076607,AN 3195076608,3195084799,CL 3195092992,3195097087,AR -3195101184,3195105279,CR +3195101184,3195109375,CR 3195109376,3195125759,AR 3195125760,3195133951,PE 3195142144,3195150335,VE @@ -67056,29 +85115,32 @@ 3195240448,3195256831,HT 3195256832,3195265023,AR 3195273216,3195535359,PE -3195535360,3195539455,SV -3195543552,3195547647,PE +3195535360,3195543551,SV +3195547648,3195551743,AR 3195551744,3195559935,EC -3195559936,3195564031,AR +3195559936,3195568127,AR 3195568128,3195572223,CO 3195572224,3195576319,AR 3195576320,3195580415,CL 3195584512,3195592703,HT 3195592704,3195596799,PA 3195600896,3195633663,CL -3195633664,3195637759,CO +3195633664,3195641855,CO 3195641856,3195645951,PY 3195650048,3195654143,GT 3195658240,3195662335,VE +3195662336,3195666431,AN 3195666432,3195686911,AR -3195691008,3195695103,DO +3195691008,3195699199,DO 3195699200,3195703295,AR 3195707392,3195711487,PA 3195715584,3195731967,AR 3195731968,3195736063,EC 3195740160,3195744255,PA +3195744256,3195748351,EC 3195748352,3195752447,CL -3195756544,3195760639,AR +3195756544,3195763711,AR +3195763712,3195764735,BO 3195764736,3195768831,CR 3195772928,3195777023,VE 3195781120,3195797503,PA @@ -67088,6 +85150,7 @@ 3195809792,3195811839,PE 3195811840,3195813887,AR 3195813888,3195822079,DO +3195822080,3195830271,CO 3195830272,3195838463,AR 3195838464,3195840511,HN 3195846656,3195852799,AR @@ -67102,7 +85165,9 @@ 3196092416,3196125183,PY 3196125184,3196190719,BO 3196190720,3196207103,HN -3196256256,3196321791,EC +3196207104,3196223487,CO +3196223488,3196305407,EC +3196305408,3196321791,CO 3196321792,3196583935,UY 3196583936,3196690687,AR 3196690688,3196690943,UY @@ -67113,10 +85178,16 @@ 3197075456,3197091839,GT 3197108224,3197370367,CO 3197370368,3197501439,GT -3197501440,3197534207,SV +3197501440,3197566975,SV 3197566976,3197599743,CL +3197599744,3197600767,GT +3197600768,3197601791,CR +3197601792,3197612031,AR +3197612032,3197616127,SV +3197616128,3197632511,CO 3197632512,3197698047,EC 3197698048,3197730815,VE +3197730816,3197763583,CL 3197763584,3197894655,EC 3197894656,3198156799,CO 3198156800,3198484479,CL @@ -67127,12 +85198,14 @@ 3198910464,3198926847,CL 3198943232,3199500799,AR 3199500800,3199501311,US -3199501312,3199516671,AR +3199501312,3199533055,AR 3199533056,3199549439,BO +3199549440,3199565823,AR 3199565824,3199582207,NI 3199598592,3199631359,CO 3199664128,3199729663,AR 3199729664,3199762431,NI +3199778816,3199795199,AR 3199795200,3199827967,AN 3199827968,3199860735,AR 3199860736,3199926271,BO @@ -67147,7 +85220,12 @@ 3201302528,3201433599,CL 3201433600,3201499135,AR 3201499136,3201515519,CL -3201531904,3201540095,AR +3201515520,3201522687,AR +3201522688,3201531903,CR +3201531904,3201533951,AR +3201533952,3201534975,HN +3201534976,3201535999,CO +3201536000,3201540095,AR 3201540096,3201544191,CL 3201548288,3201556479,AR 3201556480,3201560575,BO @@ -67163,22 +85241,36 @@ 3201875968,3201880063,CO 3201880064,3201888255,AR 3201888256,3201892351,VE +3201892352,3201925119,AR +3201925120,3201957887,CL 3201957888,3202088959,PA 3202088960,3202220031,AR 3202220032,3202351103,PE 3202351104,3202875391,AR 3202875392,3203399679,PE -3203399680,3203432447,CO +3203399680,3203465215,CO 3203465216,3203476479,CR 3203476480,3203476735,CO 3203476736,3203476991,CR 3203476992,3203477375,CO 3203477376,3203530751,CR -3203530752,3203538943,NI -3203538944,3203596287,CO +3203530752,3203531519,NI +3203531520,3203531775,PA +3203531776,3203532287,NI +3203532288,3203532543,PA +3203532544,3203532799,NI +3203532800,3203534847,PA +3203534848,3203535871,NI +3203535872,3203536383,PA +3203536384,3203538943,NI +3203538944,3203547135,CO +3203547136,3203549183,PA +3203549184,3203661823,CO 3203661824,3203923967,AR 3203923968,3204448255,CO -3221225472,3221560319,US +3221233664,3221237759,US +3221291008,3221422079,US +3221487616,3221560319,US 3221560320,3221561343,GB 3221561344,3221562367,US 3221562368,3221562623,SE @@ -67435,14 +85527,63 @@ 3223582464,3223582719,NL 3223582720,3223582975,AU 3223583488,3223584767,US -3223584768,3223650303,SE +3223584768,3223585023,GB +3223585024,3223585791,SE +3223585792,3223586047,GB +3223586048,3223586303,SE +3223586304,3223586559,GB +3223586560,3223589119,SE +3223589120,3223589375,US +3223589376,3223601663,SE +3223601664,3223602175,GB +3223602176,3223606527,SE +3223606528,3223606783,GB +3223606784,3223607551,SE +3223607552,3223607807,GB +3223607808,3223610367,SE +3223610368,3223610623,IT +3223610624,3223610879,SE +3223610880,3223611135,NO +3223611136,3223611647,SE +3223611648,3223611903,GB +3223611904,3223615743,SE +3223615744,3223616767,GB +3223616768,3223617535,SE +3223617536,3223617791,NO +3223617792,3223620863,SE +3223620864,3223621119,DK +3223621120,3223621375,GB +3223621376,3223627775,SE +3223627776,3223628031,DE +3223628032,3223628287,SE +3223628288,3223628543,ES +3223628544,3223630591,SE +3223630592,3223630847,GB +3223630848,3223634431,SE +3223634432,3223634687,US +3223634688,3223634943,SE +3223634944,3223635455,GB +3223635456,3223637247,SE +3223637248,3223637503,GB +3223637504,3223638271,SE +3223638272,3223638527,GB +3223638528,3223640831,SE +3223640832,3223641087,GB +3223641088,3223646207,SE +3223646208,3223646463,IT +3223646464,3223646975,SE +3223646976,3223647231,IT +3223647232,3223648511,SE +3223648512,3223648767,GB +3223648768,3223650047,SE +3223650048,3223650303,GB 3223650304,3223715839,CH 3223715840,3223781375,DK 3223781376,3223823871,US 3223823872,3223824127,AT 3223824128,3223863295,US 3223863552,3223863807,US -3223864320,3223867647,FI +3223865344,3223867391,FI 3223871488,3223887871,US 3223898368,3223898623,US 3223902464,3223902719,CA @@ -67633,9 +85774,7 @@ 3224725760,3224739071,US 3224739072,3224739327,FI 3224739328,3224772351,US -3224772352,3224781311,DE -3224781312,3224781567,EU -3224781568,3224785151,DE +3224772352,3224785151,DE 3224785152,3224791039,US 3224791040,3224791295,DE 3224791296,3224791807,AU @@ -67659,7 +85798,6 @@ 3224800256,3224816639,FR 3224816640,3224816895,EU 3224816896,3224820735,FR -3224820736,3224820991,AT 3224820992,3224821247,DE 3224821248,3224822015,US 3224822016,3224822271,SE @@ -67745,7 +85883,7 @@ 3224958208,3225028863,US 3225028864,3225031423,JP 3225031424,3225033727,US -3225033728,3225035775,LU +3225033728,3225033983,LU 3225035776,3225037055,US 3225037056,3225051135,FI 3225051136,3225052671,JP @@ -67974,10 +86112,36 @@ 3225876480,3225878527,US 3225878528,3225880319,SE 3225880320,3225880575,US -3225880576,3225944063,SE -3225944064,3225977855,TW -3225977856,3225978111,CH -3225978112,3226008831,TW +3225880576,3225881343,SE +3225881344,3225881599,IT +3225881600,3225887999,SE +3225888000,3225888255,GB +3225888256,3225905407,SE +3225905408,3225905663,IT +3225905664,3225913855,SE +3225913856,3225914111,DE +3225914112,3225915135,SE +3225915136,3225915391,DK +3225915392,3225918463,SE +3225918464,3225918719,GB +3225918720,3225920767,SE +3225920768,3225921023,GB +3225921024,3225921791,SE +3225921792,3225922047,GB +3225922048,3225923839,SE +3225923840,3225924095,GB +3225924096,3225930239,SE +3225930240,3225930495,FR +3225930496,3225932799,SE +3225932800,3225933055,IT +3225933056,3225935359,SE +3225935360,3225935615,US +3225935616,3225937407,SE +3225937408,3225937663,US +3225937664,3225938431,SE +3225938432,3225938687,US +3225938688,3225944063,SE +3225944064,3226008831,TW 3226008832,3226009343,US 3226009600,3226010879,US 3226010880,3226011135,CA @@ -68008,9 +86172,7 @@ 3226191360,3226191615,US 3226191872,3226201855,CA 3226201856,3226202111,US -3226202112,3226205439,CA -3226205440,3226205695,AE -3226205696,3226205951,CA +3226202112,3226206207,CA 3226206208,3226215423,GB 3226215424,3226236927,US 3226237184,3226237439,US @@ -68145,7 +86307,6 @@ 3226705408,3226705919,US 3226705920,3226706175,FR 3226706176,3226706943,US -3226707200,3226707455,EU 3226707456,3226715391,TW 3226715392,3226715647,US 3226715648,3226715903,AU @@ -68310,9 +86471,7 @@ 3227041536,3227042815,US 3227042816,3227043071,IT 3227043072,3227043327,US -3227043584,3227044863,US -3227044864,3227045119,EU -3227045120,3227053567,US +3227043584,3227053567,US 3227053568,3227053823,GB 3227053824,3227054079,DE 3227054080,3227056639,US @@ -68506,7 +86665,9 @@ 3227806496,3227806527,GB 3227806528,3227806719,FI 3227806720,3227807743,US -3227807744,3227813375,FI +3227807744,3227809023,FI +3227809024,3227809279,IN +3227809280,3227813375,FI 3227813376,3227813631,US 3227813632,3227813887,MY 3227813888,3227815167,GB @@ -68562,7 +86723,6 @@ 3227909632,3227909887,AU 3227910400,3227910655,AT 3227910656,3227911679,US -3227911680,3227912191,HU 3227912192,3227912447,GB 3227912448,3227912703,ZA 3227912704,3227912959,US @@ -68580,7 +86740,7 @@ 3227933184,3227933695,US 3227933696,3227933951,NZ 3227933952,3227934463,US -3227934464,3227934719,CH +3227934464,3227934719,EU 3227934720,3227947519,US 3227947520,3227955711,DE 3227955712,3227964927,US @@ -68896,9 +87056,34 @@ 3229120768,3229151487,US 3229151488,3229151743,SE 3229151744,3229155327,US -3229155328,3229171455,SE +3229155328,3229155583,GB +3229155584,3229155839,SE +3229155840,3229156095,ES +3229156096,3229161727,SE +3229161728,3229161983,GB +3229161984,3229164543,SE +3229164544,3229165055,GB +3229165056,3229168895,SE +3229168896,3229169151,JP +3229169152,3229171455,SE 3229171456,3229171711,MT -3229171712,3229219583,SE +3229171712,3229172223,GB +3229172224,3229182463,SE +3229182464,3229182975,GB +3229182976,3229189119,SE +3229189120,3229189375,GB +3229189376,3229191167,SE +3229191168,3229191423,GB +3229191424,3229200383,SE +3229200384,3229200895,GB +3229200896,3229201151,DE +3229201152,3229201663,SE +3229201664,3229201919,DK +3229201920,3229203199,SE +3229203200,3229203967,GB +3229203968,3229205503,SE +3229205504,3229206015,GB +3229206016,3229219583,SE 3229219584,3229219839,EE 3229219840,3229220863,SE 3229220864,3229245439,GB @@ -68969,7 +87154,13 @@ 3229705216,3229708287,US 3229745152,3229749759,FI 3229749760,3229750015,BE -3229750016,3229810687,FI +3229750016,3229764063,FI +3229764064,3229764095,AX +3229764096,3229795455,FI +3229795456,3229795487,AX +3229795488,3229808639,FI +3229808640,3229808647,AX +3229808648,3229810687,FI 3229810688,3229814015,US 3229814016,3229814271,AU 3229814272,3229815807,US @@ -69167,8 +87358,7 @@ 3230151424,3230151679,NL 3230151680,3230151935,PT 3230152192,3230152447,FR -3230152448,3230152959,BF -3230152960,3230153215,NE +3230152448,3230153215,BF 3230153216,3230153471,FR 3230153472,3230153727,PF 3230153728,3230153983,US @@ -69285,13 +87475,7 @@ 3230368768,3230370303,US 3230370304,3230370559,CA 3230370816,3230400511,CA -3230400512,3230591231,FR -3230591232,3230591487,FI -3230591488,3230625791,FR -3230625792,3230626047,FI -3230626048,3230654879,FR -3230654880,3230654895,HU -3230654896,3230793727,FR +3230681088,3230683135,FR 3230793728,3230823679,US 3230823680,3230823935,DK 3230824192,3230824447,FR @@ -69302,7 +87486,7 @@ 3230827520,3230827775,AT 3230827776,3230828031,NZ 3230828032,3230828543,HU -3230828544,3230830079,GB +3230828544,3230828799,GB 3230830080,3230832127,US 3230832128,3230832383,NZ 3230832384,3230832639,US @@ -69431,7 +87615,8 @@ 3230996480,3230997247,US 3230997248,3230997503,AT 3230997504,3230997759,US -3230997760,3230999039,NL +3230997760,3230998015,SE +3230998016,3230999039,NL 3230999040,3230999295,US 3230999296,3230999551,NL 3230999552,3230999807,AU @@ -69713,9 +87898,7 @@ 3231502848,3231503103,PT 3231503104,3231503615,US 3231503616,3231503871,IT -3231503872,3231504383,US -3231504640,3231504895,GB -3231504896,3231506687,US +3231503872,3231506687,US 3231506688,3231506943,NZ 3231506944,3231507199,US 3231507200,3231507455,BE @@ -69797,9 +87980,7 @@ 3231678464,3231682559,US 3231711232,3231713023,US 3231713024,3231713279,CA -3231713280,3231713791,US -3231713792,3231714047,IE -3231714048,3231715071,US +3231713280,3231715071,US 3231715072,3231715327,SI 3231715328,3231715583,AU 3231715584,3231716095,US @@ -69881,38 +88062,131 @@ 3231776768,3231793151,US 3231793152,3231793663,BE 3231809536,3231810047,NZ -3231842304,3231846399,EU +3231842304,3231843327,RU +3231843328,3231844351,NO +3231844352,3231845375,RU +3231845376,3231846399,ES 3231846400,3231846655,RO -3231846656,3231907839,EU +3231846656,3231846911,PT +3231846912,3231847167,GB +3231847168,3231847423,UA +3231847424,3231848447,RU +3231848448,3231849471,ES +3231849472,3231850495,RO +3231850496,3231851519,UA +3231851520,3231853567,RU +3231853568,3231855615,PL +3231855616,3231856639,RS +3231856640,3231857663,RU +3231857664,3231858687,PL +3231858688,3231859711,RU +3231859712,3231860735,FR +3231860736,3231861759,SA +3231861760,3231863807,UA +3231863808,3231864831,DE +3231864832,3231865855,RU +3231865856,3231866879,PL +3231866880,3231867903,CZ +3231867904,3231868927,RU +3231868928,3231869951,LV +3231869952,3231873023,UA +3231873024,3231875071,RU +3231875072,3231876095,PL +3231876096,3231877119,UA +3231877120,3231878143,NL +3231878144,3231879167,UA +3231879168,3231881215,PL +3231881216,3231882239,UA +3231882240,3231883263,RU +3231883264,3231884287,UA +3231884288,3231885311,PL +3231885312,3231886335,DE +3231886336,3231888383,PL +3231888384,3231889407,RU +3231889408,3231890431,RO +3231890432,3231893503,RU +3231893504,3231894527,UA +3231894528,3231895551,RU +3231895552,3231896575,UA +3231896576,3231897599,RU +3231897600,3231898623,IE +3231898624,3231899647,SE +3231899648,3231900671,UA +3231900672,3231901439,DE +3231901440,3231901695,BG +3231901696,3231903743,UA +3231903744,3231905791,RU +3231905792,3231906047,PL +3231906048,3231907839,RU 3231907840,3231916031,US 3231916032,3231948799,FI 3231973376,3232038911,AT -3232038912,3232079871,SE +3232038912,3232039167,SE +3232039168,3232039423,DK +3232039424,3232039679,IT +3232039680,3232047359,SE +3232047360,3232048639,GB +3232048640,3232049151,SE +3232049152,3232049407,GB +3232049408,3232051967,SE +3232051968,3232052991,GB +3232052992,3232060415,SE +3232060416,3232060671,IE +3232060672,3232065791,SE +3232065792,3232066303,GB +3232066304,3232066559,SE +3232066560,3232066815,NO +3232066816,3232079871,SE 3232079872,3232080895,GB -3232080896,3232092671,SE +3232080896,3232082687,SE +3232082688,3232083199,GB +3232083200,3232083455,SE +3232083456,3232083711,DE +3232083712,3232086271,SE +3232086272,3232087039,GB +3232087040,3232089087,SE +3232089088,3232089343,ES +3232089344,3232090367,SE +3232090368,3232090623,IT +3232090624,3232092671,SE 3232092672,3232093183,GB 3232093184,3232093439,US 3232093440,3232094207,GB 3232094208,3232094719,CH 3232094720,3232095231,US 3232095232,3232096255,GB -3232096256,3232104447,SE +3232096256,3232097279,SE +3232097280,3232097535,IT +3232097536,3232098047,SE +3232098048,3232098303,FR +3232098304,3232100095,SE +3232100096,3232100351,IE +3232100352,3232101119,GB +3232101120,3232104447,SE 3232104448,3232107519,DE -3232107520,3232108543,EU +3232107520,3232108543,RU 3232108544,3232129023,DE -3232129024,3232131071,EU +3232129024,3232130047,RO +3232130048,3232131071,UA 3232131072,3232133119,DE -3232133120,3232133631,EU +3232133120,3232133631,UA 3232133632,3232134143,DE -3232134144,3232141823,EU +3232134144,3232135167,RU +3232135168,3232135679,PL +3232135680,3232135935,RO +3232135936,3232137215,RU +3232137216,3232139263,UA +3232139264,3232140287,GB +3232140288,3232141311,FR +3232141312,3232141823,UA 3232141824,3232156159,DE -3232156160,3232156671,EU +3232156160,3232156671,PL 3232156672,3232159743,DE -3232159744,3232160767,EU +3232159744,3232160767,PL 3232160768,3232163839,DE -3232163840,3232165887,EU +3232163840,3232165887,RU 3232165888,3232169727,DE -3232169728,3232169983,EU +3232169728,3232169983,PL 3232169984,3232235519,IT 3232301056,3232309247,US 3232309248,3232313343,SG @@ -69946,7 +88220,23 @@ 3232706560,3232706815,US 3232710656,3232718847,US 3232727040,3232759807,US -3232759808,3232825343,SE +3232759808,3232774911,SE +3232774912,3232775167,IE +3232775168,3232794879,SE +3232794880,3232795135,DE +3232795136,3232802559,SE +3232802560,3232802815,DK +3232802816,3232803071,SE +3232803072,3232803327,IE +3232803328,3232804607,SE +3232804608,3232804863,IT +3232804864,3232812031,SE +3232812032,3232812543,GB +3232812544,3232812799,SE +3232812800,3232813055,ES +3232813056,3232820223,SE +3232820224,3232820479,IE +3232820480,3232825343,SE 3233285120,3233285375,US 3233480704,3233484799,US 3233484800,3233488895,ES @@ -70357,10 +88647,7 @@ 3234781440,3234781951,CA 3234781952,3234782719,US 3234782720,3234783999,IL -3234784000,3234794495,US -3234794752,3234795007,US -3234795008,3234795263,GB -3234795264,3234799359,US +3234784000,3234799359,US 3234799360,3234799615,NL 3234799616,3234799871,US 3234799872,3234800127,AU @@ -70563,9 +88850,7 @@ 3236419584,3236419839,AU 3236419840,3236420095,US 3236420096,3236420351,AU -3236420352,3236424959,US -3236424960,3236425215,MZ -3236425216,3236427519,US +3236420352,3236427519,US 3236427520,3236427775,CA 3236427776,3236428031,NZ 3236428800,3236429311,US @@ -70754,7 +89039,7 @@ 3238007040,3238010879,NL 3238010880,3238017023,CH 3238017024,3238018303,DK -3238018304,3238018559,TR +3238018304,3238018559,UA 3238018560,3238018815,FR 3238018816,3238019071,DE 3238019072,3238035455,PL @@ -70802,10 +89087,32 @@ 3238461440,3238502399,DE 3238502400,3238504447,RU 3238504448,3238526975,DE -3238526976,3238592511,CH -3238592512,3238593023,GB -3238593024,3238594303,EU -3238594304,3238594559,GB +3238526976,3238527231,RU +3238527232,3238541567,CH +3238541568,3238541823,PL +3238541824,3238542591,CH +3238542592,3238542847,PL +3238542848,3238545919,CH +3238545920,3238546431,RU +3238546432,3238546943,CH +3238546944,3238547455,UA +3238547456,3238548991,CH +3238548992,3238549503,CZ +3238549504,3238559231,CH +3238559232,3238559487,SE +3238559488,3238562559,CH +3238562560,3238562815,IR +3238562816,3238573567,CH +3238573568,3238574079,PL +3238574080,3238578431,CH +3238578688,3238578943,CH +3238578944,3238579199,RU +3238579200,3238589951,CH +3238589952,3238590207,LT +3238590208,3238590975,CH +3238590976,3238591231,SA +3238591232,3238592511,CH +3238592512,3238594559,GB 3238594560,3238595583,BE 3238595584,3238595839,SI 3238595840,3238596607,GB @@ -70843,10 +89150,15 @@ 3238624000,3238624255,PL 3238624256,3238625279,HU 3238625280,3238630399,EU -3238630400,3238630655,GR -3238630656,3238632959,GB +3238630400,3238631423,GR +3238631424,3238632959,GB 3238632960,3238633215,UA 3238633216,3238653951,DK +3238653952,3238655999,RU +3238656000,3238656255,GB +3238656256,3238656511,RU +3238656512,3238657023,UA +3238657024,3238657535,AT 3238657536,3238657791,DK 3238657792,3238658047,AT 3238658048,3238675455,SE @@ -70865,7 +89177,6 @@ 3239062784,3239063551,UA 3239063552,3239075839,DE 3239075840,3239076095,MT -3239076096,3239076351,SE 3239076352,3239076607,DE 3239076608,3239076863,PL 3239076864,3239077119,NL @@ -70910,7 +89221,6 @@ 3239108096,3239109887,DE 3239109888,3239110143,PL 3239110144,3239110655,DE -3239110656,3239110911,RU 3239110912,3239111167,UA 3239111168,3239111423,NL 3239111424,3239111935,DE @@ -70927,7 +89237,8 @@ 3239114752,3239116543,DE 3239116544,3239116799,PL 3239116800,3239117055,PT -3239117056,3239119871,DE +3239117056,3239117311,SI +3239117312,3239119871,DE 3239119872,3239120127,GB 3239120128,3239120383,CZ 3239120384,3239120639,PL @@ -70939,7 +89250,6 @@ 3239127296,3239127551,PL 3239127552,3239127807,IL 3239127808,3239128063,RU -3239128064,3239128319,AT 3239128320,3239128575,IT 3239128576,3239128831,UA 3239128832,3239129087,CZ @@ -70973,11 +89283,12 @@ 3239160576,3239160831,DE 3239160832,3239161087,PL 3239161088,3239161343,BY -3239161344,3239161599,UA 3239161600,3239161855,HU 3239161856,3239162623,DE 3239162624,3239162879,BE -3239162880,3239164671,DE +3239162880,3239163903,DE +3239163904,3239164159,PL +3239164160,3239164671,DE 3239164672,3239164927,GB 3239164928,3239165183,DK 3239165184,3239165951,DE @@ -71017,7 +89328,8 @@ 3239175424,3239175679,BG 3239175680,3239175935,DE 3239175936,3239176191,FI -3239176192,3239181311,DE +3239176192,3239180287,DE +3239180288,3239181311,CZ 3239181312,3239181567,AT 3239181568,3239181823,UA 3239181824,3239264255,DE @@ -71058,7 +89370,7 @@ 3239287808,3239288831,GB 3239288832,3239289855,DE 3239289856,3239290879,PL -3239290880,3239291903,GB +3239290880,3239291903,RU 3239291904,3239292927,BG 3239292928,3239293951,CZ 3239293952,3239294975,DE @@ -71089,7 +89401,7 @@ 3239452416,3239452671,HR 3239452672,3239464959,DE 3239464960,3239465215,IL -3239465216,3239465471,HR +3239465216,3239465471,PL 3239465472,3239465727,AT 3239465728,3239465983,PL 3239465984,3239466239,UA @@ -71173,7 +89485,7 @@ 3239541504,3239541759,FR 3239541760,3239542015,GB 3239542016,3239542271,PL -3239542272,3239542527,UA +3239542272,3239542527,RU 3239542528,3239542783,FR 3239542784,3239544831,DE 3239544832,3239545087,GB @@ -71260,8 +89572,7 @@ 3239682560,3239683071,BG 3239683072,3239683583,PT 3239683584,3239684607,PL -3239684608,3239685119,GB -3239685120,3239686143,DE +3239684608,3239686143,DE 3239686144,3239686655,UA 3239686656,3239687167,IT 3239687168,3239687679,UA @@ -71286,7 +89597,7 @@ 3239706880,3239707135,NL 3239707136,3239707391,RU 3239707392,3239707647,UA -3239707648,3239707903,GB +3239707648,3239707903,CH 3239707904,3239708159,DE 3239708160,3239708415,SE 3239708416,3239708671,RO @@ -71337,9 +89648,11 @@ 3239762176,3239762431,RU 3239762432,3239762687,DK 3239762688,3239762943,RO +3239762944,3239763199,SI 3239763200,3239763455,SE 3239763456,3239763967,GB 3239763968,3239772159,DE +3239772160,3239772415,NL 3239772416,3239772671,GB 3239772672,3239773183,DK 3239773184,3239773439,FR @@ -71357,12 +89670,13 @@ 3239783424,3239783679,DK 3239783680,3239783935,CH 3239783936,3239784191,DE -3239784192,3239784447,UA +3239784192,3239784447,FR 3239784448,3239788543,DE 3239788544,3239789055,EU -3239789056,3239789567,RU +3239789056,3239789567,DE 3239789568,3239790079,FR 3239790080,3239790591,RO +3239790592,3239791103,LV 3239791104,3239792127,CH 3239792128,3239792639,FR 3239792640,3239793151,UA @@ -71376,7 +89690,7 @@ 3239796736,3239821311,DE 3239821312,3239821823,SE 3239821824,3239822335,FR -3239822336,3239822847,RU +3239822336,3239822847,UA 3239822848,3239823359,PL 3239823360,3239823871,SE 3239823872,3239824383,IT @@ -71424,7 +89738,8 @@ 3239859968,3239860223,CA 3239860224,3239860479,DE 3239860480,3239860735,GB -3239860736,3239861247,DE +3239860736,3239860991,DE +3239860992,3239861247,AT 3239861248,3239861503,UA 3239861504,3239861759,PL 3239861760,3239862015,SA @@ -71445,12 +89760,12 @@ 3239877632,3239877887,UA 3239877888,3239878143,IT 3239878144,3239878399,PL -3239878400,3239882751,DE +3239878656,3239882751,DE 3239882752,3239883007,GB 3239883008,3239883263,UA 3239883264,3239883775,GB 3239883776,3239884031,DE -3239884032,3239884287,CH +3239884032,3239884287,IR 3239884288,3239884543,GB 3239884544,3239884799,FR 3239884800,3239885055,UA @@ -71474,7 +89789,8 @@ 3239895296,3239895551,TR 3239895552,3239895807,PL 3239895808,3239896063,DK -3239896064,3239896575,DE +3239896064,3239896319,DE +3239896320,3239896575,AT 3239896576,3239896831,PL 3239896832,3239897087,HU 3239897088,3239897343,GB @@ -71618,7 +89934,7 @@ 3240183616,3240183647,CR 3240183648,3240183807,NL 3240183808,3240184319,GB -3240184320,3240184831,UA +3240184320,3240184831,RU 3240184832,3240185343,GB 3240185344,3240185855,FR 3240185856,3240187391,RU @@ -71630,6 +89946,7 @@ 3240189952,3240190463,DE 3240190464,3240190975,IT 3240190976,3240191487,RU +3240191488,3240191999,AE 3240192000,3240192511,UA 3240192512,3240193023,RO 3240193024,3240193535,GB @@ -71662,7 +89979,7 @@ 3240207872,3240208383,RU 3240208384,3240208895,FR 3240208896,3240209407,GB -3240209408,3240209919,UA +3240209408,3240209919,AE 3240209920,3240210943,PL 3240210944,3240211455,GB 3240211456,3240211967,NL @@ -71755,9 +90072,9 @@ 3240278016,3240278527,RU 3240278528,3240279039,GB 3240279040,3240279551,CH -3240279552,3240280063,RO +3240279552,3240280063,EU 3240280064,3240280191,DE -3240280192,3240280447,PL +3240280320,3240280447,PL 3240280448,3240280575,UA 3240280576,3240280703,GB 3240280704,3240280831,RU @@ -71772,9 +90089,13 @@ 3240282112,3240282239,DE 3240282240,3240282367,UA 3240282368,3240282495,RO -3240282496,3240282879,SE +3240282496,3240282623,RU +3240282624,3240282879,SE 3240282880,3240283007,UA -3240283008,3240283135,PL +3240283008,3240283391,PL +3240283392,3240283647,TR +3240283648,3240283903,AT +3240283904,3240284159,DE 3240284160,3240285183,RU 3240285184,3240286207,PL 3240286208,3240287231,UA @@ -71783,7 +90104,16 @@ 3240296448,3240296703,RO 3240296704,3240302847,GB 3240302848,3240303103,UA -3240303104,3240361983,GB +3240303104,3240321023,GB +3240321024,3240321791,RU +3240321792,3240322047,PL +3240322048,3240322559,RU +3240322560,3240324095,CZ +3240324096,3240324351,RO +3240324352,3240324607,RU +3240324608,3240324863,PL +3240324864,3240325119,SI +3240325120,3240361983,GB 3240361984,3240362239,TR 3240362240,3240370175,GB 3240370176,3240370431,CH @@ -71812,8 +90142,7 @@ 3240409088,3240409343,TR 3240409344,3240409599,GB 3240409600,3240409855,NL -3240409856,3240410111,DE -3240410112,3240410367,CH +3240409856,3240410367,DE 3240410368,3240410623,AT 3240410624,3240410879,PT 3240410880,3240411135,NO @@ -71854,7 +90183,9 @@ 3240488192,3240488447,GB 3240488448,3240488703,BG 3240488704,3240488959,NL -3240488960,3240575487,GB +3240488960,3240505343,GB +3240505344,3240505599,PL +3240505600,3240575487,GB 3240575488,3240575743,RO 3240575744,3240575999,GB 3240576000,3240576255,DE @@ -71865,13 +90196,13 @@ 3240577280,3240577535,RO 3240577536,3240577791,DE 3240577792,3240578559,UA -3240578560,3240578815,CH +3240578560,3240578815,RU 3240578816,3240579071,IL 3240579072,3240587263,GB 3240587264,3240587519,NL 3240587520,3240587775,RU 3240587776,3240588031,UA -3240588032,3240588287,DE +3240588032,3240588287,US 3240588288,3240588543,RU 3240588544,3240588799,RO 3240588800,3240589055,UA @@ -71957,7 +90288,6 @@ 3240730624,3240731647,ES 3240731648,3240732671,GB 3240732672,3240733695,SE -3240733696,3240734719,UA 3240734720,3240735743,IT 3240735744,3240736255,FR 3240736256,3240736767,BG @@ -71973,13 +90303,13 @@ 3240740608,3240741119,DE 3240741120,3240741375,AT 3240741376,3240741631,IL -3240741632,3240741887,SK +3240741632,3240741887,RU 3240741888,3240742143,LV 3240742144,3240742399,IT 3240742400,3240742655,RO 3240742656,3240742911,AT 3240742912,3240743423,IL -3240743424,3240743935,DK +3240743424,3240743935,PL 3240743936,3240744447,DE 3240744448,3240744959,SE 3240744960,3240745471,RO @@ -72008,7 +90338,7 @@ 3240791552,3240791807,RU 3240791808,3240792063,ES 3240792064,3240792319,GB -3240792320,3240792575,RO +3240792320,3240792575,RU 3240792576,3240792831,CH 3240792832,3240793087,PL 3240793088,3240793343,UA @@ -72040,7 +90370,6 @@ 3240813568,3240814591,PL 3240814592,3240818687,IT 3240818688,3240820735,NL -3240820736,3240820799,EU 3240820800,3240820831,RU 3240820832,3240827135,IT 3240827136,3240827391,FR @@ -72086,7 +90415,7 @@ 3240867584,3240867839,CH 3240867840,3240873983,IT 3240873984,3240874495,RU -3240874496,3240875007,UA +3240874496,3240875007,CZ 3240875008,3240875519,AT 3240875520,3240876031,FR 3240876032,3240876543,DK @@ -72101,8 +90430,7 @@ 3240884224,3240886271,UA 3240886272,3240952071,SE 3240952072,3240952079,IE -3240952080,3240952087,GB -3240952088,3240952095,SE +3240952080,3240952095,SE 3240952096,3240952127,US 3240952128,3240954495,SE 3240954496,3240954623,DE @@ -72168,7 +90496,6 @@ 3241070848,3241071103,AT 3241071104,3241071359,UA 3241071360,3241071615,RU -3241071616,3241071871,MD 3241071872,3241072127,RU 3241072128,3241072383,BE 3241072384,3241072639,DE @@ -72215,7 +90542,6 @@ 3241119232,3241119487,DK 3241119488,3241119743,BE 3241119744,3241119999,RO -3241120000,3241120255,UA 3241120256,3241120511,RU 3241120512,3241120767,GB 3241120768,3241121023,RU @@ -72251,8 +90577,7 @@ 3241146880,3241148415,CH 3241148416,3241476095,FR 3241476096,3241476351,CH -3241476352,3241481471,BE -3241481472,3241481727,NL +3241476352,3241481727,BE 3241481728,3241481983,PT 3241481984,3241482239,DE 3241482240,3241484799,SE @@ -72271,9 +90596,10 @@ 3241499136,3241499903,BE 3241499904,3241500159,DE 3241500160,3241500671,GB -3241500672,3241502975,BE +3241500672,3241501439,BE +3241501440,3241501951,EU +3241501952,3241502975,BE 3241502976,3241503231,GR -3241503232,3241503487,FR 3241503488,3241508095,BE 3241508096,3241508351,NL 3241508352,3241541375,BE @@ -72284,7 +90610,6 @@ 3241803824,3241803831,EU 3241803832,3241803839,GB 3241803840,3241803903,PT -3241803904,3241804031,UA 3241804032,3241820159,BE 3241820160,3241821695,GB 3241821696,3241822207,GR @@ -72329,7 +90654,9 @@ 3241869312,3241934847,PL 3241934848,3242196991,GB 3242196992,3242393599,FI -3242393600,3242459135,NL +3242393600,3242394471,NL +3242394472,3242394479,DE +3242394480,3242459135,NL 3242459136,3242467327,BG 3242467328,3242475519,HU 3242475520,3242483711,LV @@ -72379,7 +90706,7 @@ 3243514368,3243514623,IE 3243514624,3243514879,DK 3243514880,3243515135,AT -3243515136,3243515391,PL +3243515136,3243515391,CH 3243515392,3243515647,DE 3243515648,3243515903,RU 3243515904,3243520511,CZ @@ -72515,7 +90842,9 @@ 3244228608,3244261375,TN 3244261376,3244265823,IE 3244265824,3244265831,ES -3244265832,3244272575,IE +3244265832,3244268031,IE +3244268032,3244268159,LU +3244268160,3244272575,IE 3244272576,3244272639,US 3244272640,3244273687,IE 3244273688,3244273695,US @@ -72562,15 +90891,17 @@ 3244823296,3244823551,FR 3244823552,3244823807,GE 3244823808,3244824063,RO +3244824064,3244824319,IR 3244824320,3244824575,SI 3244824576,3244824831,RU 3244824832,3244825087,GB 3244825088,3244825343,DE -3244825600,3244826111,RU +3244825344,3244826111,RU 3244826112,3244826367,RO 3244826368,3244826623,CH 3244826624,3244826879,DE 3244826880,3244827135,MK +3244827136,3244827391,AT 3244827392,3244827647,GB 3244827648,3244827903,FR 3244827904,3244828159,BE @@ -72608,7 +90939,7 @@ 3244836608,3244836863,PL 3244836864,3244837119,FR 3244837120,3244837375,RO -3244837376,3244837631,ES +3244837376,3244837631,GB 3244837632,3244837887,RU 3244837888,3244838143,CY 3244838144,3244838399,IL @@ -72638,6 +90969,7 @@ 3244844800,3244845055,GB 3244845056,3244845311,NL 3244845312,3244845567,NO +3244845568,3244845823,RO 3244845824,3244846335,GB 3244846336,3244846591,TR 3244846592,3244846847,CZ @@ -72673,10 +91005,9 @@ 3244854528,3244855295,RU 3244855296,3244855551,GB 3244855552,3244855807,UA -3244855808,3244856063,CZ +3244855808,3244856063,DE 3244856064,3244856319,IL 3244856320,3244856575,CH -3244856576,3244856831,RU 3244856832,3244857087,RO 3244857088,3244857343,IT 3244857344,3244857599,GB @@ -72744,7 +91075,7 @@ 3244875008,3244875263,PL 3244875264,3244875519,LI 3244875520,3244875775,IT -3244875776,3244876799,BZ +3244875776,3244876799,RU 3244876800,3244877055,GB 3244877056,3244877311,JO 3244877312,3244877567,RU @@ -72770,9 +91101,9 @@ 3244882432,3244882687,IT 3244882688,3244882943,PL 3244882944,3244883199,NL -3244883200,3244883455,UA 3244883456,3244883711,CZ 3244883712,3244883967,NL +3244883968,3244884223,DE 3244884224,3244884479,FR 3244884480,3244884735,IR 3244884736,3244884991,NL @@ -72783,10 +91114,9 @@ 3244886016,3244886271,LB 3244886272,3244886527,CH 3244886528,3244886783,DK -3244886784,3244887039,UA +3244886784,3244887039,RU 3244887040,3244887295,NL 3244887296,3244887551,GB -3244887552,3244887807,CZ 3244887808,3244888063,BE 3244888064,3244888319,RU 3244888320,3244888575,DE @@ -72847,7 +91177,7 @@ 3244903168,3244903423,PL 3244903424,3244903679,FI 3244903680,3244903935,NO -3244903936,3244904191,TR +3244903936,3244904191,RO 3244904192,3244904447,IT 3244904448,3244904703,GR 3244904704,3244904959,FR @@ -72860,7 +91190,7 @@ 3244906752,3244907007,SA 3244907008,3244907263,FR 3244907264,3244907519,RO -3244907520,3244907775,GB +3244907520,3244907775,UA 3244907776,3244908287,RU 3244908288,3244908543,NL 3244908544,3244908799,RU @@ -72884,7 +91214,7 @@ 3244913408,3244913663,SI 3244913664,3244913919,DK 3244913920,3244914431,RU -3244914432,3244914687,UA +3244914432,3244914687,SA 3244914688,3244914943,GB 3244914944,3244915199,UA 3244915200,3244915455,PL @@ -72919,7 +91249,8 @@ 3244922624,3244922879,BG 3244922880,3244923135,UA 3244923136,3244923391,AT -3244923392,3244923903,LV +3244923392,3244923647,EU +3244923648,3244923903,LV 3244923904,3244924159,RU 3244924160,3244924927,CZ 3244924928,3244925183,FI @@ -72936,7 +91267,7 @@ 3244927744,3244927999,US 3244928000,3244928255,GB 3244928256,3244928511,US -3244928768,3244929023,RU +3244928512,3244929023,RU 3244929024,3244929535,RO 3244929536,3244929791,PL 3244929792,3244930047,RU @@ -72962,7 +91293,7 @@ 3244935168,3244935423,NL 3244935424,3244935679,UA 3244935680,3244935935,PL -3244935936,3244936191,FR +3244935936,3244936191,IL 3244936192,3244936959,AT 3244936960,3244937215,KZ 3244937216,3244937471,TR @@ -73052,12 +91383,19 @@ 3244999680,3245000703,IQ 3245000704,3245001727,UA 3245001728,3245002751,IL +3245002752,3245003263,PL +3245003264,3245003519,SE +3245003520,3245003775,UA 3245003776,3245004799,RU 3245004800,3245005823,PL 3245005824,3245006847,UA 3245006848,3245007871,DE 3245007872,3245008895,PL -3245008896,3245011967,RU +3245008896,3245009919,RU +3245009920,3245010431,UA +3245010432,3245010687,PL +3245010688,3245010943,FR +3245010944,3245011967,RU 3245011968,3245012991,PL 3245012992,3245014015,UA 3245014016,3245015039,GR @@ -73139,7 +91477,7 @@ 3245093888,3245094911,RO 3245094912,3245095935,UA 3245095936,3245096959,IT -3245096960,3245099007,CZ +3245096960,3245099007,EU 3245099008,3245103103,GB 3245103104,3245105151,EU 3245105152,3245105663,GB @@ -73209,7 +91547,7 @@ 3245136384,3245136639,GB 3245136640,3245136895,EU 3245136896,3245137151,PL -3245137152,3245137407,IT +3245137152,3245137407,GB 3245137408,3245137663,DE 3245137664,3245137919,SE 3245137920,3245138431,DK @@ -73219,7 +91557,7 @@ 3245139968,3245140479,CH 3245140480,3245140991,RO 3245140992,3245141503,UA -3245141504,3245142015,IT +3245141504,3245142015,RO 3245142016,3245143039,UA 3245143040,3245144063,GB 3245144064,3245145087,UA @@ -73257,6 +91595,7 @@ 3245168896,3245169151,RU 3245169152,3245169407,IT 3245169408,3245169919,PL +3245169920,3245170175,PT 3245170176,3245170431,GB 3245170432,3245170687,CH 3245170688,3245171711,DE @@ -73300,7 +91639,7 @@ 3245200384,3245200639,PL 3245200640,3245200895,GR 3245200896,3245201151,DE -3245201152,3245201407,GB +3245201152,3245201407,KW 3245201408,3245201663,UA 3245201664,3245201919,NO 3245201920,3245202175,SA @@ -73320,6 +91659,7 @@ 3245207552,3245208063,UA 3245208064,3245208575,DE 3245208576,3245209087,PL +3245209088,3245209599,VG 3245209600,3245210111,UA 3245210112,3245210623,FR 3245210624,3245211135,HU @@ -73469,7 +91809,6 @@ 3245298688,3245298943,GB 3245298944,3245299199,UA 3245299200,3245299455,GB -3245299456,3245299711,CY 3245299712,3245299967,DE 3245299968,3245300223,BG 3245300224,3245300479,FR @@ -73568,7 +91907,9 @@ 3245903032,3245903039,GB 3245903040,3245903959,IE 3245903960,3245903967,FR -3245903968,3245904199,IE +3245903968,3245904087,IE +3245904088,3245904095,GB +3245904096,3245904199,IE 3245904200,3245904207,GB 3245904208,3245906367,IE 3245906368,3245906431,GB @@ -73576,7 +91917,9 @@ 3245909568,3245909631,US 3245909632,3245910831,IE 3245910832,3245910847,GB -3245910848,3245921279,IE +3245910848,3245919456,IE +3245919457,3245919462,IN +3245919463,3245921279,IE 3245921280,3245921535,BE 3245921536,3245922959,IE 3245922960,3245922975,US @@ -73598,20 +91941,14 @@ 3245932544,3245998079,BE 3245998080,3246100351,GB 3246100352,3246100367,DE -3246100368,3246128479,GB -3246128480,3246128495,DE -3246128496,3246129151,GB +3246100368,3246129151,GB 3246129152,3246141439,RU 3246141440,3246141695,UA 3246141696,3246142975,RU 3246142976,3246143231,UA -3246143232,3246144511,RU -3246144512,3246144767,UA -3246144768,3246147839,RU +3246143232,3246147839,RU 3246147840,3246148095,UA -3246148096,3246148607,RU -3246148608,3246148863,UA -3246148864,3246260223,RU +3246148096,3246260223,RU 3246260224,3246325759,PT 3246325760,3246328831,ES 3246328832,3246329087,EU @@ -73630,9 +91967,7 @@ 3246417960,3246417967,LV 3246417968,3246418887,GB 3246418888,3246418895,SE -3246418896,3246475535,GB -3246475536,3246475551,A2 -3246475552,3246537887,GB +3246418896,3246537887,GB 3246537888,3246537903,A2 3246537904,3246613503,GB 3246613504,3246614527,HU @@ -73640,7 +91975,8 @@ 3246784512,3246915583,CH 3246915584,3247046655,PT 3247046656,3247046911,AT -3247046912,3247048703,SI +3247046912,3247048191,SI +3247048192,3247048703,NO 3247048704,3247048959,EE 3247048960,3247049215,SI 3247049216,3247054079,DE @@ -73975,9 +92311,12 @@ 3247308728,3247308735,DE 3247308736,3247308799,NL 3247308800,3247309055,BG -3247309056,3247316479,FI +3247309056,3247313663,FI +3247313664,3247313919,AM +3247313920,3247316479,FI 3247316480,3247316735,NO -3247316736,3247322367,FI +3247316736,3247316991,RU +3247316992,3247322367,FI 3247322368,3247322623,DE 3247322624,3247323135,FI 3247323136,3247323647,RU @@ -73994,7 +92333,7 @@ 3247336448,3247337215,NO 3247337216,3247337471,CH 3247337472,3247337983,PL -3247337984,3247338239,FI +3247337984,3247338239,UA 3247338240,3247338495,PL 3247338496,3247338751,SI 3247338752,3247339519,GB @@ -74013,6 +92352,8 @@ 3247347968,3247348223,HU 3247348224,3247348991,FI 3247348992,3247349247,DE +3247349248,3247349503,FR +3247349504,3247349759,UA 3247349760,3247353855,SE 3247353856,3247362047,FI 3247362048,3247362303,RO @@ -74034,11 +92375,14 @@ 3247371008,3247371263,PL 3247371264,3247371519,SE 3247371520,3247371775,GB -3247371776,3247374335,FI +3247371776,3247372031,RU +3247372032,3247374335,FI 3247374336,3247374591,RU 3247374592,3247394047,FI 3247394048,3247394303,PL -3247394304,3247399423,FI +3247394304,3247397887,FI +3247397888,3247398143,RU +3247398144,3247399423,FI 3247399424,3247399679,RU 3247399680,3247404799,FI 3247404800,3247405055,RU @@ -74052,7 +92396,9 @@ 3247438336,3247439871,FI 3247439872,3247702015,ES 3247702016,3247702271,RO -3247702272,3247704831,ES +3247702272,3247703551,ES +3247703552,3247704063,FR +3247704064,3247704831,ES 3247704832,3247705087,GB 3247705088,3247705855,ES 3247705856,3247706111,RU @@ -74066,7 +92412,9 @@ 3247714304,3247716351,CH 3247716352,3247717887,ES 3247717888,3247718399,CH -3247718400,3247769599,ES +3247718400,3247742975,ES +3247742976,3247751167,DE +3247751168,3247769599,ES 3247769600,3247771647,DE 3247771648,3247775743,ES 3247775744,3247779647,DE @@ -74086,10 +92434,62 @@ 3247825920,3247826943,BE 3247826944,3247828991,CH 3247828992,3247833087,BE -3247833088,3247865855,RU +3247833088,3247833599,RU +3247833600,3247834111,PL +3247834112,3247834623,DE +3247834624,3247835135,UA +3247835136,3247836159,GB +3247836160,3247837183,CZ +3247837184,3247838207,ES +3247838208,3247838719,CH +3247838720,3247839231,NO +3247839232,3247839743,CZ +3247839744,3247840255,GB +3247840256,3247841279,UA +3247841280,3247841791,RU +3247841792,3247842047,GB +3247842048,3247842303,CZ +3247842304,3247842815,PL +3247842816,3247843327,CZ +3247843328,3247843583,LT +3247843584,3247845375,PL +3247845376,3247845631,CH +3247845632,3247845887,UA +3247845888,3247846399,PL +3247846400,3247847423,RU +3247847424,3247848447,UA +3247848448,3247849471,IT +3247849472,3247849727,DE +3247849728,3247849983,RU +3247849984,3247850239,GB +3247850240,3247850495,BG +3247850496,3247850751,RU +3247850752,3247851007,PL +3247851008,3247851519,RU +3247851520,3247852543,SK +3247852544,3247853567,PL +3247853568,3247854591,RU +3247854592,3247855615,DK +3247855616,3247856127,UA +3247856128,3247856639,ES +3247856640,3247857663,RU +3247857664,3247858175,UA +3247858176,3247858687,EU +3247858688,3247859711,RU +3247859712,3247859967,SE +3247859968,3247861759,RU +3247861760,3247862015,IT +3247862016,3247862271,UA +3247862272,3247864063,RU +3247864064,3247864319,NO +3247864320,3247864575,UA +3247864576,3247864831,PL +3247864832,3247865343,RU +3247865344,3247865599,MT +3247865600,3247865855,IL 3247865856,3247871999,GB 3247872000,3247875327,NL -3247875328,3247875583,TR +3247875328,3247875583,PL 3247875584,3247876095,DE 3247876096,3247876351,PL 3247876352,3247876607,FR @@ -74113,7 +92513,7 @@ 3247909888,3247910911,DE 3247910912,3247912959,PL 3247912960,3247913983,UA -3247913984,3247915007,DE +3247913984,3247915007,AT 3247915008,3247917055,PL 3247917056,3247918079,NL 3247918080,3247919103,PL @@ -74141,9 +92541,7 @@ 3248226304,3248235007,NO 3248235008,3248235263,PK 3248235264,3248357375,NO -3248357376,3248370511,DE -3248370512,3248370519,AT -3248370520,3248371743,DE +3248357376,3248371743,DE 3248371744,3248371751,PL 3248371752,3248372239,DE 3248372240,3248372247,AT @@ -74168,7 +92566,12 @@ 3248522240,3248525311,NO 3248525312,3248525567,DE 3248525568,3248525823,DK -3248525824,3248545791,NO +3248525824,3248528895,NO +3248528896,3248529151,RU +3248529152,3248529407,BG +3248529408,3248540671,NO +3248540672,3248541183,RU +3248541184,3248545791,NO 3248545792,3248546815,UA 3248546816,3248547839,RU 3248547840,3248553727,NO @@ -74178,7 +92581,10 @@ 3248557056,3248558079,UA 3248558080,3248575487,NO 3248575488,3248576511,CZ -3248576512,3248619263,NO +3248576512,3248603135,NO +3248603136,3248603391,BG +3248603392,3248603647,RU +3248603648,3248619263,NO 3248619264,3248619519,UA 3248619520,3248638463,DK 3248638464,3248638719,GB @@ -74218,8 +92624,8 @@ 3248790784,3248791039,PL 3248791040,3248791295,BE 3248791296,3248791551,DE -3248791552,3248792479,GB -3248792480,3248796607,EU +3248791552,3248792551,GB +3248792552,3248796607,EU 3248796608,3248796863,GB 3248796864,3248798975,EU 3248798976,3248799231,GB @@ -74260,11 +92666,11 @@ 3248881664,3249012735,FI 3249012736,3249012991,DE 3249012992,3249014271,LU -3249014272,3249014783,EU +3249014272,3249014783,DE 3249014784,3249025535,LU 3249025536,3249025791,FR 3249025792,3249026559,LU -3249026560,3249026815,EU +3249026560,3249026815,PL 3249026816,3249045503,LU 3249045504,3249078271,DE 3249078272,3249078783,RU @@ -74285,7 +92691,7 @@ 3249089536,3249090047,RU 3249090048,3249090559,FR 3249090560,3249091071,SI -3249091072,3249091583,RO +3249091072,3249091583,EU 3249091584,3249092095,RU 3249092096,3249092607,DE 3249092608,3249093119,IT @@ -74364,6 +92770,7 @@ 3249136128,3249137151,RU 3249137152,3249137663,FR 3249137664,3249138175,PL +3249138176,3249138687,RU 3249138688,3249139199,GB 3249139200,3249139711,RU 3249139712,3249140223,UA @@ -74397,7 +92804,13 @@ 3249574144,3249574399,RU 3249574400,3249574655,SE 3249574656,3249574911,UA -3249574912,3249668095,NL +3249574912,3249590527,NL +3249590528,3249590783,FR +3249590784,3249600255,NL +3249600256,3249600511,AT +3249600512,3249601535,UA +3249601536,3249601791,RU +3249601792,3249668095,NL 3249668096,3249676287,IE 3249676288,3249676543,GB 3249676544,3249676799,IE @@ -74457,7 +92870,7 @@ 3249716736,3249717247,UA 3249717248,3249718271,LV 3249718272,3249719295,DE -3249719296,3249720319,GB +3249719296,3249720319,IR 3249720320,3249721343,IT 3249721344,3249721599,AT 3249721600,3249721855,BE @@ -74485,15 +92898,109 @@ 3249731584,3249732607,UA 3249732608,3249733631,IT 3249733632,3249799167,CZ -3249799168,3249865727,SE -3249865728,3249866751,GB -3249866752,3249910783,SE +3249799168,3249802239,SE +3249802240,3249802751,DE +3249802752,3249828607,SE +3249828608,3249828863,AT +3249828864,3249829375,DE +3249829376,3249829631,AT +3249829632,3249829887,SE +3249829888,3249830143,GB +3249830144,3249830399,SE +3249830400,3249830655,IT +3249830656,3249844479,SE +3249844480,3249844735,AT +3249844736,3249844991,AU +3249844992,3249845759,SE +3249845760,3249846271,DE +3249846272,3249850623,SE +3249850624,3249850879,GB +3249850880,3249859583,SE +3249859584,3249860095,DE +3249860096,3249861375,SE +3249861376,3249861631,BE +3249861632,3249862143,DE +3249862144,3249862399,BE +3249862400,3249862655,SE +3249862656,3249863167,DE +3249863168,3249863423,BE +3249863424,3249863679,SE +3249863680,3249863935,ES +3249863936,3249865471,SE +3249865472,3249866751,GB +3249866752,3249868543,SE +3249868544,3249868799,DE +3249868800,3249871103,SE +3249871104,3249871359,NO +3249871360,3249871615,SE +3249871616,3249871871,NO +3249871872,3249872383,SE +3249872384,3249872639,GB +3249872640,3249910783,SE 3249910784,3249912319,GB -3249912320,3249931007,SE +3249912320,3249926143,SE +3249926144,3249926399,AU +3249926400,3249926655,SE +3249926656,3249926911,AU +3249926912,3249929471,SE +3249929472,3249929983,CA +3249929984,3249931007,SE 3249931008,3249931263,GB 3249931264,3249932031,SE -3249932032,3249934335,GB -3249934336,3250061311,SE +3249932032,3249932287,GB +3249932288,3249934335,US +3249934336,3249960447,SE +3249960448,3249960959,DE +3249960960,3249961215,CA +3249961216,3249961471,SE +3249961472,3249961727,NL +3249961728,3249967615,SE +3249967616,3249967871,GB +3249967872,3249968127,SE +3249968128,3249969151,FR +3249969152,3249969663,SE +3249969664,3249970175,DE +3249970176,3249971199,SE +3249971200,3249971455,IT +3249971456,3249971711,SE +3249971712,3249972735,DE +3249972736,3249974527,SE +3249974528,3249974783,ES +3249974784,3249976063,SE +3249976064,3249976319,FR +3249976320,3249976831,SE +3249976832,3249977087,GB +3249977088,3249991679,SE +3249991680,3249991935,US +3249991936,3249993215,SE +3249993216,3249993471,NL +3249993472,3249993727,SE +3249993728,3249994239,DE +3249994240,3249994495,CH +3249994496,3249995263,SE +3249995264,3249995519,GB +3249995520,3249997055,SE +3249997056,3249997311,US +3249997312,3250000127,SE +3250000128,3250000383,GB +3250000384,3250007295,SE +3250007296,3250007551,GB +3250007552,3250010367,SE +3250010368,3250010879,CH +3250010880,3250030335,SE +3250030336,3250030591,DK +3250030592,3250031103,DE +3250031104,3250031359,DK +3250031360,3250031615,US +3250031616,3250032639,SE +3250032640,3250032895,HK +3250032896,3250035455,SE +3250035456,3250035711,US +3250035712,3250038271,SE +3250038272,3250039295,ES +3250039296,3250042623,SE +3250042624,3250043135,FR +3250043136,3250061311,SE 3250061312,3250061635,FI 3250061636,3250061639,AX 3250061640,3250083643,FI @@ -74531,7 +93038,10 @@ 3250200832,3250201087,RO 3250201088,3250201343,RU 3250201344,3250201599,DK -3250201600,3250233855,AT +3250201600,3250202111,NL +3250202112,3250202367,BG +3250202368,3250202623,PL +3250202624,3250233855,AT 3250233856,3250234111,GB 3250234112,3250234367,GR 3250234368,3250245631,AT @@ -74563,27 +93073,25 @@ 3250357880,3250357887,SE 3250357888,3250357895,DK 3250357920,3250357927,PL -3250357928,3250357959,CY -3250357960,3250358015,GB +3250357952,3250358015,GB 3250358016,3250358527,LB 3250358528,3250358783,HU 3250358784,3250359295,LB 3250359296,3250359807,HU 3250359808,3250362879,KW 3250362880,3250363391,DE -3250363392,3250363903,EU +3250363392,3250363903,SE 3250363904,3250364415,DE 3250364416,3250372607,KW 3250372608,3250373375,HU 3250373376,3250373631,GB 3250373632,3250374143,DE -3250374144,3250374655,TR +3250374144,3250374655,PL 3250374656,3250374911,SA 3250374912,3250375679,SE 3250375680,3250376703,GB 3250376704,3250380799,AT -3250380800,3250381055,DK -3250381056,3250386943,CH +3250380800,3250386943,CH 3250386944,3250387199,SE 3250387200,3250387455,FR 3250387456,3250387711,DE @@ -74616,6 +93124,7 @@ 3250416128,3250417663,DE 3250417664,3250418175,IT 3250418176,3250418687,DE +3250418688,3250419199,PL 3250419200,3250419711,NO 3250419712,3250420223,RU 3250420224,3250420735,IR @@ -74638,15 +93147,12 @@ 3250426880,3250427135,JO 3250427136,3250427391,NL 3250427392,3250429951,DE -3250429952,3250438143,SI -3250438144,3250438207,FR -3250438208,3250438399,CH -3250438400,3250438431,FR -3250438432,3250443519,CH +3250429952,3250434335,SI +3250434336,3250434351,AT +3250434352,3250438143,SI +3250438144,3250443519,CH 3250443520,3250443527,DE -3250443528,3250443543,CH -3250443544,3250443551,DE -3250443552,3250446335,CH +3250443528,3250446335,CH 3250446336,3250451583,DE 3250451584,3250451599,AT 3250451600,3250454527,DE @@ -74660,7 +93166,7 @@ 3250589440,3250589471,IE 3250589472,3250589503,NL 3250589504,3250589567,HR -3250589568,3250589631,UA +3250589568,3250589631,RU 3250589632,3250589695,NO 3250589696,3250593791,CH 3250593792,3250594815,GB @@ -74691,7 +93197,9 @@ 3250692096,3250692351,NO 3250692352,3250692607,NL 3250692608,3250693375,BG -3250693376,3250694399,IE +3250693376,3250693631,NL +3250693632,3250694143,DE +3250694144,3250694399,PL 3250694400,3250694655,GB 3250694656,3250694911,SK 3250694912,3250695167,NL @@ -74701,7 +93209,8 @@ 3250697728,3250697983,BG 3250697984,3250698239,IT 3250698240,3250698751,GR -3250698752,3250699775,GB +3250698752,3250699263,RU +3250699264,3250699775,GB 3250699776,3250700287,DE 3250700288,3250708479,UA 3250708480,3250716671,KZ @@ -74713,7 +93222,15 @@ 3250722304,3250724863,GB 3250724864,3250733055,MA 3250733056,3250741247,DZ -3250741248,3250749439,EU +3250741248,3250742783,RU +3250742784,3250743551,AT +3250743552,3250743807,CY +3250743808,3250746367,UA +3250746368,3250747391,NL +3250747392,3250747903,SI +3250747904,3250748159,SA +3250748160,3250748415,PL +3250748416,3250749439,UA 3250749440,3250749695,GH 3250749696,3250749951,IT 3250749952,3250750463,RO @@ -74781,6 +93298,7 @@ 3251122176,3251122687,CH 3251122688,3251123199,PL 3251123200,3251123711,FR +3251123712,3251124223,RU 3251124224,3251124735,NL 3251124736,3251125247,FR 3251125248,3251125759,BE @@ -74931,10 +93449,7 @@ 3251174656,3251174911,DE 3251174912,3251175167,AT 3251175168,3251175423,UA -3251175424,3251176703,FR -3251176704,3251176959,IT -3251176960,3251177215,US -3251177216,3251177471,FR +3251175424,3251177471,IT 3251177472,3251179519,DE 3251179520,3251180031,SE 3251180032,3251180543,PL @@ -74944,7 +93459,7 @@ 3251182080,3251182591,FR 3251182592,3251183103,IT 3251183104,3251183615,RU -3251183616,3251183871,NO +3251183616,3251183871,LT 3251183872,3251184127,CH 3251184128,3251184383,PL 3251184384,3251184639,DK @@ -74981,12 +93496,11 @@ 3251201536,3251201791,AT 3251201792,3251202047,FR 3251202048,3251202303,NL -3251202304,3251202559,PL 3251202560,3251202815,AT 3251202816,3251203327,ES 3251203328,3251203583,SI 3251203584,3251203839,CZ -3251203840,3251204095,SE +3251203840,3251204095,RU 3251204096,3251204607,DE 3251204608,3251205119,BG 3251205120,3251205631,UA @@ -74999,6 +93513,7 @@ 3251209216,3251210239,GB 3251210240,3251211263,PL 3251211264,3251212287,UA +3251212288,3251212415,PL 3251212416,3251212671,FI 3251212672,3251212799,SE 3251212800,3251212927,FR @@ -75017,7 +93532,7 @@ 3251213696,3251213759,LV 3251213760,3251213823,TR 3251213824,3251213887,GB -3251213888,3251214015,FI +3251213952,3251214015,FI 3251214016,3251214079,UA 3251214080,3251214143,FR 3251214144,3251214207,AF @@ -75033,7 +93548,6 @@ 3251215488,3251215615,SE 3251215616,3251215743,TR 3251215744,3251215871,GB -3251215872,3251215999,CH 3251216000,3251216127,LI 3251216128,3251216255,FI 3251216256,3251216383,RU @@ -75082,32 +93596,16 @@ 3251246336,3251246591,UA 3251246592,3251246847,RO 3251246848,3251247103,NL -3251247104,3251247359,FR -3251247360,3251247871,DE -3251247872,3251248127,GB -3251248128,3251248383,DE -3251248384,3251248639,SE -3251248640,3251248895,DE +3251247104,3251248895,DE 3251248896,3251249151,GB 3251249152,3251251199,NL -3251251200,3251251455,PT -3251251456,3251251711,GB -3251251712,3251251967,CH -3251251968,3251252223,BG -3251252224,3251252479,AT -3251252480,3251252735,NL +3251251200,3251252735,EU 3251252736,3251256831,CH 3251256832,3251257343,GB 3251257344,3251259903,BE -3251259904,3251260671,FR -3251260672,3251260927,BE -3251260928,3251261439,FR +3251259904,3251261439,FR 3251261440,3251264255,CH -3251264256,3251264511,BG -3251264512,3251264767,IT -3251264768,3251265023,GB -3251265024,3251265279,ES -3251265280,3251265535,DE +3251264256,3251265535,FR 3251265536,3251267839,NL 3251267840,3251268351,GB 3251268352,3251268607,NL @@ -75142,7 +93640,7 @@ 3251308544,3251310591,EU 3251310592,3251311103,SI 3251311104,3251311615,RS -3251311616,3251312127,EU +3251311616,3251312127,GB 3251312128,3251312383,RS 3251312384,3251312639,CH 3251312640,3251313151,RS @@ -75219,7 +93717,9 @@ 3251734528,3251734783,NL 3251734784,3251765247,FI 3251765248,3251765503,NL -3251765504,3251774207,FI +3251765504,3251766663,FI +3251766664,3251766671,AX +3251766672,3251774207,FI 3251774208,3251774463,DE 3251774464,3251783423,FI 3251783424,3251783679,GB @@ -75235,12 +93735,52 @@ 3251850496,3251850751,FR 3251850752,3251851007,CH 3251851008,3251896319,FI -3251896320,3251927991,NO +3251896320,3251927767,NO +3251927768,3251927775,SE +3251927776,3251927991,NO 3251927992,3251927999,NL 3251928000,3252015687,NO 3252015688,3252015695,SE -3252015696,3252289535,NO -3252289536,3252291327,GR +3252015696,3252168191,NO +3252168192,3252174847,SE +3252174848,3252177151,NO +3252177152,3252177407,SE +3252177408,3252178431,NO +3252178432,3252178943,SE +3252178944,3252179199,NO +3252179200,3252189183,SE +3252189184,3252189695,NO +3252189696,3252190975,SE +3252190976,3252191231,NO +3252191232,3252197119,SE +3252197120,3252197375,NO +3252197376,3252205567,SE +3252205568,3252205823,NO +3252205824,3252211967,SE +3252211968,3252212223,NO +3252212224,3252213759,SE +3252213760,3252214527,NO +3252214528,3252218879,SE +3252218880,3252219135,NO +3252219136,3252220927,SE +3252220928,3252221183,NO +3252221184,3252222463,SE +3252222464,3252223231,NO +3252223232,3252223743,SE +3252223744,3252223999,NO +3252224000,3252233215,SE +3252233216,3252240383,NO +3252240384,3252244479,SE +3252244480,3252246527,NO +3252246528,3252276223,SE +3252276224,3252277759,NO +3252277760,3252279295,SE +3252279296,3252279807,NO +3252279808,3252286463,SE +3252286464,3252286975,NO +3252286976,3252289535,SE +3252289536,3252289791,BG +3252289792,3252291327,GR 3252291328,3252291583,SK 3252291584,3252293631,FR 3252293632,3252297983,DE @@ -75254,10 +93794,14 @@ 3252316416,3252316671,FR 3252316672,3252318463,GR 3252318464,3252318719,TR -3252318720,3252318975,GP +3252318720,3252318975,MQ 3252318976,3252319231,PL 3252319232,3252319743,AT -3252319744,3252322303,GR +3252319744,3252319999,UA +3252320000,3252320255,GR +3252320256,3252320511,CZ +3252320512,3252321791,GR +3252321792,3252322303,PL 3252322304,3252323327,NO 3252323328,3252324351,PL 3252324352,3252326399,RU @@ -75270,21 +93814,24 @@ 3252337664,3252338687,RU 3252338688,3252340735,BE 3252340736,3252340991,TR -3252340992,3252342015,GR +3252340992,3252341247,GR +3252341504,3252342015,GR 3252342016,3252342079,GB 3252342080,3252342143,IR 3252342144,3252342207,LU 3252342208,3252342239,GB 3252342240,3252342271,CH +3252342272,3252342527,SE 3252342528,3252342543,NO -3252342544,3252342591,CH +3252342544,3252342591,DE +3252342592,3252342607,IE +3252342656,3252342783,IL 3252342784,3252346367,DE 3252346368,3252346623,GB 3252346624,3252355071,GR 3252355072,3252355327,GB 3252355328,3252358911,LT -3252358912,3252358927,GB -3252358928,3252359167,DE +3252358912,3252359167,DE 3252359168,3252362239,DK 3252362240,3252362495,PL 3252362496,3252362751,IT @@ -75327,15 +93874,14 @@ 3252407584,3252407599,NG 3252407600,3252407615,BJ 3252407616,3252407711,NO -3252407712,3252407727,NG -3252407728,3252407751,NO -3252407752,3252407759,AO -3252407760,3252407767,NE -3252407768,3252407775,CD +3252407712,3252407743,NG +3252407744,3252407759,NO +3252407760,3252407775,CD 3252407776,3252407791,GH 3252407792,3252407807,NO -3252407808,3252407999,GN -3252408000,3252408159,NO +3252407808,3252408063,GN +3252408064,3252408079,ML +3252408080,3252408159,NO 3252408160,3252408191,GQ 3252408192,3252408319,NO 3252408320,3252408327,MW @@ -75343,20 +93889,21 @@ 3252408336,3252408343,GN 3252408344,3252408351,LT 3252408352,3252408367,GN -3252408368,3252408375,NG -3252408376,3252408383,LT +3252408368,3252408375,LT +3252408376,3252408383,GN 3252408384,3252408391,BI 3252408392,3252408415,LT 3252408416,3252408479,NO 3252408480,3252408511,LT -3252408512,3252408519,AF -3252408520,3252408639,LT +3252408512,3252408527,AF +3252408528,3252408575,LT +3252408576,3252408607,SO +3252408608,3252408639,LT 3252408640,3252408671,CF 3252408672,3252408703,SO 3252408704,3252408735,NG -3252408736,3252408767,LT -3252408768,3252408783,NG -3252408784,3252408799,LT +3252408736,3252408751,SO +3252408752,3252408799,LT 3252408800,3252408831,SO 3252408832,3252408839,NG 3252408840,3252408847,KE @@ -75364,11 +93911,12 @@ 3252408856,3252408863,CM 3252408864,3252408871,LR 3252408872,3252408879,CI -3252408880,3252409103,LT +3252408880,3252409023,LT +3252409024,3252409039,TZ +3252409040,3252409047,MR +3252409048,3252409103,LT 3252409104,3252409111,SD -3252409112,3252409119,LT -3252409120,3252409127,NG -3252409128,3252409151,LT +3252409112,3252409151,LT 3252409152,3252409159,KE 3252409160,3252409167,LT 3252409168,3252409175,UG @@ -75379,7 +93927,8 @@ 3252409216,3252409223,BW 3252409224,3252409231,LT 3252409232,3252409247,UG -3252409248,3252409279,LT +3252409248,3252409263,CD +3252409264,3252409279,LT 3252409280,3252409295,SO 3252409296,3252409303,LT 3252409304,3252409343,SO @@ -75388,17 +93937,20 @@ 3252409408,3252409471,BI 3252409472,3252409503,LT 3252409504,3252409511,GH -3252409512,3252409519,LT +3252409512,3252409519,BF 3252409520,3252409527,NG -3252409528,3252409535,LT -3252409536,3252409543,BI -3252409544,3252409599,LT +3252409528,3252409599,LT 3252409600,3252409615,MA 3252409616,3252409631,LT 3252409632,3252409647,AO 3252409648,3252409727,LT 3252409728,3252409735,LR -3252409736,3252410383,LT +3252409736,3252409751,NG +3252409752,3252409759,LT +3252409760,3252409775,BI +3252409776,3252409791,LT +3252409792,3252409823,BI +3252409824,3252410383,LT 3252410384,3252410391,BW 3252410392,3252410431,LT 3252410432,3252410463,BI @@ -75411,21 +93963,21 @@ 3252411376,3252411391,CD 3252411392,3252411647,LT 3252411648,3252411679,BI -3252411680,3252411695,LT -3252411696,3252411711,UG +3252411680,3252411711,LT 3252411712,3252411743,NG 3252411744,3252411775,LT 3252411776,3252411783,GH -3252411784,3252411791,LT -3252411792,3252411823,NG +3252411784,3252411807,LT +3252411808,3252411823,NG 3252411824,3252411839,LT 3252411840,3252411855,MR 3252411856,3252411879,LT -3252411880,3252411903,CD +3252411880,3252411887,CD +3252411888,3252411895,LT +3252411896,3252411903,CD 3252411904,3252414463,LT -3252414464,3252414479,GH -3252414480,3252414495,ML -3252414496,3252414511,LT +3252414464,3252414471,GH +3252414472,3252414511,LT 3252414512,3252414527,MR 3252414528,3252414591,LT 3252414592,3252414599,GH @@ -75434,30 +93986,36 @@ 3252414624,3252414639,TZ 3252414640,3252414647,GH 3252414648,3252414655,NE -3252414656,3252414687,LT -3252414688,3252414719,ER -3252414720,3252414991,LT -3252414992,3252414999,IQ -3252415000,3252415015,LT -3252415016,3252415127,IQ -3252415128,3252415135,LT -3252415136,3252415191,IQ -3252415192,3252415487,LT -3252415488,3252415743,IQ +3252414656,3252414975,LT +3252414976,3252415015,IQ +3252415016,3252415023,LT +3252415024,3252415031,IQ +3252415032,3252415039,LT +3252415040,3252415055,IQ +3252415056,3252415071,LT +3252415072,3252415095,IQ +3252415096,3252415103,LT +3252415104,3252415135,IQ +3252415136,3252415151,LT +3252415152,3252415159,IQ +3252415160,3252415167,BE +3252415168,3252415231,IQ +3252415232,3252415743,LT 3252415744,3252415775,GB 3252415776,3252415967,LT 3252415968,3252415999,CM -3252416000,3252416831,LT -3252416832,3252416927,GN +3252416000,3252416895,LT +3252416896,3252416927,GN 3252416928,3252416959,LT 3252416960,3252417023,GN 3252417024,3252417279,LT 3252417280,3252417287,IQ -3252417288,3252417423,AF -3252417424,3252417791,LT +3252417288,3252417463,AF +3252417464,3252417471,LT +3252417472,3252417519,AF +3252417520,3252417791,LT 3252417792,3252417855,NG -3252417856,3252417919,LT -3252417920,3252417935,MW +3252417856,3252417935,LT 3252417936,3252417951,ZM 3252417952,3252418239,LT 3252418240,3252418303,JO @@ -75476,24 +94034,17 @@ 3252419168,3252419199,CD 3252419200,3252419215,LT 3252419216,3252419247,GN -3252419248,3252419263,LT -3252419264,3252419279,TZ -3252419280,3252419311,LT +3252419248,3252419311,LT 3252419312,3252419327,ZM -3252419328,3252419343,GH -3252419344,3252419359,LT +3252419328,3252419359,LT 3252419360,3252419423,GH 3252419424,3252419839,LT 3252419840,3252419879,IQ -3252419880,3252419903,LT -3252419904,3252419911,IQ -3252419912,3252419919,LT +3252419880,3252419919,LT 3252419920,3252419927,IQ 3252419928,3252419935,LT -3252419936,3252419951,IQ -3252419952,3252419999,LT -3252420000,3252420007,IQ -3252420008,3252420031,LT +3252419936,3252419943,IQ +3252419944,3252420031,LT 3252420032,3252420055,IQ 3252420056,3252420063,LT 3252420064,3252420071,IQ @@ -75502,11 +94053,7 @@ 3252420120,3252420143,IQ 3252420144,3252420191,LT 3252420192,3252420223,IQ -3252420224,3252420239,LT -3252420240,3252420247,IQ -3252420248,3252420263,LT -3252420264,3252420271,IQ -3252420272,3252420351,LT +3252420224,3252420351,LT 3252420352,3252420415,IQ 3252420416,3252420431,GB 3252420432,3252420447,LT @@ -75515,12 +94062,12 @@ 3252420472,3252420583,LT 3252420584,3252420591,IQ 3252420592,3252421119,LT -3252421120,3252421631,NO -3252421632,3252424703,LT +3252421120,3252423679,NO +3252423680,3252424703,LT 3252424704,3252424719,GN 3252424720,3252424735,LT -3252424736,3252424767,MA -3252424768,3252424799,LT +3252424736,3252424751,GA +3252424752,3252424799,LT 3252424800,3252424815,NE 3252424816,3252425023,LT 3252425024,3252425215,SO @@ -75531,13 +94078,12 @@ 3252425552,3252425575,AO 3252425576,3252425727,LT 3252425728,3252425983,A2 -3252425984,3252426239,LT -3252426240,3252426751,BW +3252425984,3252426751,LT 3252426752,3252427263,MZ -3252427264,3252427519,NG -3252427520,3252427775,LT +3252427264,3252427775,LT 3252427776,3252428287,MW -3252428288,3252428351,LT +3252428288,3252428303,AO +3252428304,3252428351,LT 3252428352,3252428383,AO 3252428384,3252428415,LT 3252428416,3252428447,KE @@ -75546,10 +94092,10 @@ 3252430336,3252430463,NE 3252430464,3252430511,LT 3252430512,3252430519,BF -3252430520,3252430527,LT -3252430528,3252430543,BF +3252430520,3252430535,LT +3252430536,3252430543,BF 3252430544,3252430559,BJ -3252430560,3252430591,BF +3252430560,3252430591,LT 3252430592,3252430847,GN 3252430848,3252431359,MW 3252431360,3252431871,LT @@ -75568,30 +94114,34 @@ 3252434704,3252434711,TZ 3252434712,3252434719,LT 3252434720,3252434743,GH -3252434744,3252435199,LT -3252435200,3252435247,TZ -3252435248,3252435295,LT -3252435296,3252435311,TZ -3252435312,3252435319,ML +3252434744,3252434751,ML +3252434752,3252434759,GN +3252434760,3252434767,SL +3252434768,3252435199,LT +3252435200,3252435231,TZ +3252435232,3252435247,LT +3252435248,3252435263,BW +3252435264,3252435279,ML +3252435280,3252435295,LT +3252435296,3252435303,TZ +3252435304,3252435311,LT +3252435312,3252435319,CF 3252435320,3252435327,MZ 3252435328,3252435343,CD -3252435344,3252435359,BF -3252435360,3252435375,LT +3252435344,3252435375,BF 3252435376,3252435415,GN -3252435416,3252435423,CD -3252435424,3252435455,LT +3252435416,3252435455,CD 3252435456,3252435711,TZ 3252435712,3252435855,GH 3252435856,3252435871,MR 3252435872,3252435887,GH -3252435888,3252435919,BW +3252435888,3252435903,CD +3252435904,3252435919,BW 3252435920,3252435935,BF -3252435936,3252435951,CF -3252435952,3252435967,LT +3252435936,3252435967,LT 3252435968,3252436223,TZ 3252436224,3252436239,GN -3252436240,3252436255,LT -3252436256,3252436271,ML +3252436240,3252436271,ML 3252436272,3252436287,BF 3252436288,3252436303,LT 3252436304,3252436319,ZM @@ -75599,8 +94149,7 @@ 3252436336,3252436351,ZM 3252436352,3252436383,GN 3252436384,3252436399,LR -3252436400,3252436407,SL -3252436408,3252436415,ML +3252436400,3252436415,SL 3252436416,3252436447,LT 3252436448,3252436479,ER 3252436480,3252436991,LT @@ -75611,18 +94160,16 @@ 3252438528,3252438783,CM 3252438784,3252439039,LT 3252439040,3252439055,BJ -3252439056,3252439071,LT -3252439072,3252439079,BJ -3252439080,3252439263,LT +3252439056,3252439263,LT 3252439264,3252439271,SN 3252439272,3252439287,LT 3252439288,3252439295,SN 3252439296,3252439391,SO -3252439392,3252439807,LT +3252439392,3252439551,LT +3252439552,3252439615,SO +3252439616,3252439807,LT 3252439808,3252439871,SO -3252439872,3252440063,LT -3252440064,3252440319,MW -3252440320,3252444287,LT +3252439872,3252444287,LT 3252444288,3252444351,TZ 3252444352,3252445183,LT 3252445184,3252445263,GN @@ -75661,7 +94208,7 @@ 3252452096,3252452127,NO 3252452128,3252452135,LT 3252452136,3252452143,NO -3252452144,3252452159,LT +3252452144,3252452159,GB 3252452160,3252452175,NL 3252452176,3252452191,NO 3252452192,3252452215,NL @@ -75687,14 +94234,12 @@ 3252455168,3252455295,NG 3252455296,3252455679,LT 3252455680,3252455807,BI -3252455808,3252455935,LT -3252455936,3252456191,MW -3252456192,3252456959,LT -3252456960,3252457471,NG -3252457472,3252460799,LT +3252455808,3252460799,LT 3252460800,3252460831,AF -3252460832,3252460847,KP -3252460848,3252461055,LT +3252460832,3252460847,US +3252460848,3252460863,LT +3252460864,3252460927,IQ +3252460928,3252461055,LT 3252461056,3252461567,NO 3252461568,3252464383,LT 3252464384,3252465663,NO @@ -75703,12 +94248,9 @@ 3252465952,3252465983,GH 3252465984,3252466047,LT 3252466048,3252466175,GH -3252466176,3252473343,LT -3252473344,3252473855,CD +3252466176,3252473855,LT 3252473856,3252474879,SO -3252474880,3252475903,LT -3252475904,3252476415,NG -3252476416,3252481023,LT +3252474880,3252481023,LT 3252481024,3252481535,MZ 3252481536,3252483071,LT 3252483072,3252483583,KW @@ -75732,7 +94274,7 @@ 3252510720,3252514815,FR 3252514816,3252515071,SI 3252515072,3252515327,GB -3252515328,3252515583,DE +3252515328,3252515583,NL 3252515584,3252515839,SI 3252515840,3252516095,CH 3252516096,3252516351,FR @@ -75749,11 +94291,17 @@ 3252518912,3252527103,NL 3252527104,3252535295,BE 3252535296,3252539391,GB -3252539392,3252540415,EU +3252539392,3252540415,IE 3252540416,3252541951,NL 3252541952,3252542207,CI 3252542208,3252551679,BE -3252551680,3252567295,CH +3252551680,3252563967,CH +3252563968,3252564991,RO +3252564992,3252566015,UA +3252566016,3252566271,DE +3252566272,3252566527,RO +3252566528,3252566783,RU +3252566784,3252567295,CH 3252567296,3252567551,GB 3252567552,3252567807,RU 3252567808,3252568063,RO @@ -75784,7 +94332,9 @@ 3252616704,3252616959,ES 3252616960,3252617215,CH 3252617216,3252617471,PL -3252617472,3252636671,CH +3252617472,3252634623,CH +3252634624,3252634879,RU +3252634880,3252636671,CH 3252636672,3252636927,TR 3252636928,3252637183,DE 3252637184,3252637695,GB @@ -75840,7 +94390,7 @@ 3252912896,3252913151,PL 3252913152,3252913407,ES 3252913408,3252913663,FR -3252913664,3252913919,CZ +3252913664,3252913919,RU 3252913920,3252914175,NO 3252914176,3252916223,FR 3252916224,3252920319,DE @@ -75904,13 +94454,76 @@ 3253230592,3253230847,BY 3253230848,3253247999,RU 3253248000,3253248255,DE -3253248256,3253248511,UZ -3253248512,3253265407,RU +3253248256,3253265407,RU 3253265408,3253265919,AM 3253265920,3253270527,RU 3253270528,3253271551,BY 3253271552,3253338111,RU -3253338112,3253469183,SE +3253338112,3253338367,PL +3253338368,3253380863,SE +3253380864,3253381119,IT +3253381120,3253383935,SE +3253383936,3253384191,NO +3253384192,3253388287,SE +3253388288,3253388799,FR +3253388800,3253389055,SE +3253389056,3253389823,FR +3253389824,3253398271,SE +3253398272,3253398783,FR +3253398784,3253399039,SE +3253399040,3253399295,FR +3253399296,3253399551,IT +3253399552,3253400575,SE +3253400576,3253401087,IT +3253401088,3253402111,SE +3253402112,3253402367,IT +3253402368,3253402623,JP +3253402624,3253403647,SE +3253403648,3253403903,PL +3253403904,3253409791,SE +3253409792,3253410047,GB +3253410048,3253411327,SE +3253411328,3253411583,NO +3253411584,3253412351,SE +3253412352,3253412607,US +3253412608,3253416447,SE +3253416448,3253416959,GB +3253416960,3253428223,SE +3253428224,3253428479,DE +3253428480,3253429247,SE +3253429248,3253429759,JP +3253429760,3253430015,ES +3253430016,3253433087,SE +3253433088,3253433343,DE +3253433344,3253434111,SE +3253434112,3253434367,GB +3253434368,3253434623,IT +3253434624,3253434879,SE +3253434880,3253435135,IT +3253435136,3253435903,SE +3253435904,3253436159,NL +3253436160,3253436415,NO +3253436416,3253440511,SE +3253440512,3253440767,FR +3253440768,3253443839,SE +3253443840,3253444351,NO +3253444352,3253453311,SE +3253453312,3253453567,NO +3253453568,3253454079,SE +3253454080,3253454335,GB +3253454336,3253455615,SE +3253455616,3253455871,US +3253455872,3253456383,SE +3253456384,3253456639,US +3253456640,3253460735,SE +3253460736,3253460991,IT +3253460992,3253461247,US +3253461248,3253461759,SE +3253461760,3253462015,PL +3253462016,3253462527,SE +3253462528,3253463039,US +3253463040,3253464063,GB +3253464064,3253469183,SE 3253469184,3253471231,AO 3253471232,3253534719,PT 3253534720,3253600255,GB @@ -76002,7 +94615,6 @@ 3253697536,3253698559,PL 3253698560,3253699071,UA 3253699072,3253699583,RO -3253699584,3253700095,UA 3253700096,3253700607,RO 3253700608,3253701119,PL 3253701120,3253702143,RO @@ -76071,7 +94683,7 @@ 3253888256,3253888511,BE 3253888512,3253888767,GB 3253888768,3253889023,SE -3253889024,3253889279,PL +3253889024,3253889279,RO 3253889280,3253889535,CH 3253889536,3253889791,DE 3253889792,3253890047,DK @@ -76114,7 +94726,7 @@ 3253968896,3253969407,DE 3253969408,3253969919,AT 3253969920,3253970431,NL -3253970432,3253970687,DE +3253970432,3253970687,RU 3253970688,3253970943,UA 3253970944,3253971967,RS 3253971968,3253972991,RU @@ -76250,11 +94862,11 @@ 3254510564,3254510847,NE 3254510848,3254521855,FR 3254521856,3254522367,GB -3254522368,3254523665,FR -3254523666,3254523666,UG -3254523667,3254523667,CH -3254523668,3254523668,RO -3254523669,3254550527,FR +3254522368,3254523739,FR +3254523740,3254523740,UG +3254523741,3254523741,CH +3254523742,3254523742,RO +3254523743,3254550527,FR 3254550528,3254550783,US 3254550784,3254551039,IR 3254551040,3254551295,US @@ -76313,7 +94925,8 @@ 3254707712,3254708223,RO 3254708224,3254708735,UA 3254708736,3254709247,RO -3254709248,3254710271,DE +3254709248,3254709759,DE +3254709760,3254710271,PL 3254710272,3254710783,IT 3254710784,3254711295,RO 3254711296,3254711807,FR @@ -76341,6 +94954,14 @@ 3254785280,3254785535,KZ 3254785536,3254785791,DK 3254785792,3254786047,LU +3254786048,3254786815,AT +3254786816,3254787071,SM +3254787072,3254788095,NL +3254788096,3254788351,BG +3254788352,3254789119,ES +3254789120,3254789375,FR +3254789632,3254790655,TK +3254790656,3254790911,LU 3254796288,3254797311,SE 3254797312,3254798335,RU 3254798336,3254799359,AT @@ -76352,7 +94973,7 @@ 3254804480,3254806527,PL 3254806528,3254807551,UA 3254807552,3254808575,KZ -3254808576,3254809599,PL +3254808576,3254809599,RU 3254809600,3254810623,UA 3254810624,3254811647,RU 3254811648,3254812671,RO @@ -76411,7 +95032,7 @@ 3254827776,3254828031,UA 3254828032,3254828287,DE 3254828288,3254828799,RO -3254828800,3254829055,BE +3254828800,3254829055,SI 3254829056,3254829311,NO 3254829312,3254829567,GB 3254829568,3254829823,NL @@ -76459,7 +95080,7 @@ 3254840320,3254840575,DK 3254840576,3254840831,UA 3254840832,3254841343,GB -3254841344,3254841599,IT +3254841344,3254841599,PL 3254841600,3254841855,IE 3254841856,3254842111,LV 3254842112,3254842367,GB @@ -76546,11 +95167,15 @@ 3255006720,3255006975,A2 3255006976,3255017648,FR 3255017649,3255017649,LB -3255017650,3255120639,FR +3255017650,3255087103,FR +3255087104,3255087359,SG +3255087360,3255120639,FR 3255120640,3255120895,DE 3255120896,3255123711,FR 3255123712,3255123967,DE -3255123968,3255172351,FR +3255123968,3255129855,FR +3255129856,3255130111,HR +3255130112,3255172351,FR 3255172352,3255172607,DE 3255172608,3255173119,FR 3255173120,3255173631,GB @@ -76697,13 +95322,9 @@ 3255252488,3255252495,FR 3255252496,3255252527,BE 3255252528,3255252543,LU -3255252544,3255252559,BE -3255252560,3255252575,LU -3255252576,3255254847,BE +3255252544,3255254847,BE 3255254848,3255254879,LU -3255254880,3255255559,BE -3255255560,3255255567,LU -3255255568,3255255599,BE +3255254880,3255255599,BE 3255255600,3255255607,LU 3255255608,3255255711,BE 3255255712,3255255743,LU @@ -76711,7 +95332,9 @@ 3255255752,3255255759,DK 3255255760,3255256319,BE 3255256320,3255256575,LU -3255256576,3255259327,BE +3255256576,3255259199,BE +3255259200,3255259215,LU +3255259216,3255259327,BE 3255259328,3255259359,LU 3255259360,3255259919,BE 3255259920,3255259927,LU @@ -76722,18 +95345,20 @@ 3255260336,3255260343,BE 3255260344,3255260347,LU 3255260348,3255261471,BE -3255261472,3255261503,LU -3255261504,3255261519,BE -3255261520,3255261535,LU +3255261472,3255261535,LU 3255261536,3255262799,BE 3255262800,3255262815,LU 3255262816,3255263295,BE 3255263296,3255263327,US -3255263328,3255265007,BE +3255263328,3255264543,BE +3255264544,3255264575,LU +3255264576,3255265007,BE 3255265008,3255265023,LU 3255265024,3255270431,BE 3255270432,3255270463,FR -3255270464,3255273855,BE +3255270464,3255271807,BE +3255271808,3255271839,LU +3255271840,3255273855,BE 3255273856,3255273887,LU 3255273888,3255274207,BE 3255274208,3255274239,LU @@ -76749,7 +95374,9 @@ 3255276576,3255276607,LU 3255276608,3255276671,BE 3255276672,3255276703,LU -3255276704,3255277247,BE +3255276704,3255276783,BE +3255276784,3255276799,LU +3255276800,3255277247,BE 3255277248,3255277255,LU 3255277256,3255277955,BE 3255277956,3255277959,LU @@ -76798,9 +95425,7 @@ 3255291400,3255291423,LU 3255291424,3255291615,BE 3255291616,3255291623,LU -3255291624,3255291871,BE -3255291872,3255291887,LU -3255291888,3255291983,BE +3255291624,3255291983,BE 3255291984,3255291999,LU 3255292000,3255292311,BE 3255292312,3255292319,LU @@ -76811,7 +95436,7 @@ 3255300808,3255304191,BE 3255304192,3255304447,DE 3255304448,3255305215,LV -3255305216,3255305471,EU +3255305216,3255305471,BG 3255305472,3255307775,LV 3255307776,3255308031,PL 3255308032,3255308287,CH @@ -76820,8 +95445,7 @@ 3255311616,3255311871,SE 3255311872,3255312127,PT 3255312128,3255312383,SE -3255312384,3255315455,LV -3255315456,3255315711,EU +3255312384,3255315711,LV 3255315712,3255316223,PL 3255316224,3255316479,RU 3255316480,3255316991,GB @@ -76849,7 +95473,7 @@ 3255326208,3255326719,DE 3255326720,3255327231,IL 3255327232,3255327743,DE -3255327744,3255328255,SE +3255327744,3255328255,GB 3255328256,3255328767,SI 3255328768,3255336959,DE 3255336960,3255341055,RU @@ -76868,7 +95492,7 @@ 3255366144,3255367167,DK 3255367168,3255367679,RU 3255367680,3255368191,UA -3255368192,3255368703,LV +3255368192,3255368703,FR 3255368704,3255369215,CZ 3255369216,3255369727,GB 3255369728,3255370239,LU @@ -76905,7 +95529,7 @@ 3255385600,3255386111,FR 3255386112,3255386623,KE 3255386624,3255387135,PL -3255387136,3255388159,UA +3255387648,3255388159,UA 3255388160,3255388671,DE 3255388672,3255389183,SE 3255389184,3255389695,GB @@ -76921,7 +95545,8 @@ 3255401472,3255412479,DE 3255412480,3255412735,RO 3255412736,3255413247,DE -3255413248,3255413759,LV +3255413248,3255413503,LV +3255413504,3255413759,UZ 3255413760,3255414271,GB 3255414272,3255414527,TR 3255414528,3255414783,LV @@ -76931,7 +95556,6 @@ 3255416832,3255417855,FR 3255417856,3255418879,GB 3255418880,3255422975,DE -3255422976,3255426047,GB 3255426048,3255426559,IT 3255426560,3255426815,FR 3255426816,3255427071,PL @@ -77030,9 +95654,7 @@ 3255558144,3255558399,BE 3255558400,3255564031,CH 3255564032,3255564287,RU -3255564288,3255565567,CH -3255565568,3255566079,DE -3255566080,3255566335,CH +3255564288,3255566335,CH 3255566336,3255574527,SE 3255574528,3255578623,CZ 3255578624,3255582719,SE @@ -77045,14 +95667,32 @@ 3255660544,3255666431,NL 3255666432,3255666687,DE 3255666688,3255697407,NL -3255697408,3255739647,SE +3255697408,3255698687,SE +3255698688,3255698943,GB +3255698944,3255710719,SE +3255710720,3255710975,ES +3255710976,3255724543,SE +3255724544,3255725055,US +3255725056,3255725311,ES +3255725312,3255730943,SE +3255730944,3255731199,GB +3255731200,3255739647,SE 3255739648,3255739903,GB -3255739904,3255743231,SE +3255739904,3255742719,SE +3255742720,3255742975,SG +3255742976,3255743231,SE 3255743232,3255743487,IT -3255743488,3255745535,SE +3255743488,3255743743,DE +3255743744,3255745535,SE 3255745536,3255746047,DK 3255746048,3255762943,SE -3255762944,3255799039,DE +3255762944,3255791615,DE +3255791616,3255792639,UA +3255792640,3255793663,RU +3255793664,3255794943,PL +3255794944,3255795199,RU +3255795200,3255795711,UA +3255795712,3255799039,DE 3255799040,3255799295,SE 3255799296,3255800575,DE 3255800576,3255800831,UA @@ -77075,7 +95715,11 @@ 3256075008,3256076287,DK 3256076288,3256076799,SE 3256076800,3256082431,DK -3256082432,3256090623,LV +3256082432,3256088063,LV +3256088064,3256088095,RU +3256088096,3256088103,LV +3256088104,3256088319,RU +3256088320,3256090623,LV 3256090624,3256164863,IT 3256164864,3256165375,SE 3256165376,3256187391,IT @@ -77219,10 +95863,12 @@ 3256698880,3256699135,DE 3256699136,3256699391,NL 3256699392,3256700415,GB -3256700416,3256701183,EU +3256700416,3256700671,NL +3256700672,3256700927,FR +3256700928,3256701183,DE 3256701184,3256701439,BE -3256701440,3256701695,GB -3256701696,3256705279,EU +3256701440,3256701951,GB +3256701952,3256705279,EU 3256705280,3256705791,BE 3256705792,3256706047,AT 3256706048,3256706559,GR @@ -77234,7 +95880,6 @@ 3256711168,3256711423,DE 3256711424,3256713215,EU 3256713216,3256727551,PL -3256727552,3256728575,UA 3256728576,3256729599,DE 3256729600,3256731647,FI 3256731648,3256732671,NO @@ -77255,7 +95900,7 @@ 3256788224,3256788479,RU 3256788480,3256788735,GB 3256788736,3256788991,DE -3256788992,3256789247,UA +3256788992,3256789247,RO 3256789248,3256789503,SE 3256789504,3256789759,UA 3256789760,3256790015,GB @@ -77281,7 +95926,9 @@ 3256795136,3256811519,GR 3256811520,3256864511,DE 3256864512,3256864767,CH -3256864768,3256877055,DE +3256864768,3256870911,DE +3256870912,3256871167,RU +3256871168,3256877055,DE 3256877056,3256915455,GB 3256915456,3256915967,SE 3256915968,3256945663,GB @@ -77351,12 +95998,11 @@ 3257401344,3257466879,CH 3257466880,3257467135,DE 3257467136,3257467391,GB -3257467392,3257467903,NL +3257467392,3257467903,SE 3257467904,3257468927,IT 3257468928,3257469183,EU 3257469184,3257469439,IT 3257469440,3257469951,GB -3257469952,3257470975,BE 3257470976,3257475071,FI 3257475072,3257475327,ES 3257475328,3257475583,FI @@ -77399,68 +96045,7 @@ 3257546688,3257546719,DE 3257546720,3257546751,DK 3257546752,3257548799,IE -3257548800,3257549343,GB -3257549344,3257549359,DE -3257549360,3257549407,GB -3257549408,3257549423,DE -3257549424,3257549631,GB -3257549632,3257549695,DE -3257549696,3257549823,GB -3257549824,3257549871,DE -3257549872,3257550079,GB -3257550080,3257550095,DE -3257550096,3257551631,GB -3257551632,3257551647,DE -3257551648,3257551711,GB -3257551712,3257551807,DE -3257551808,3257551871,GB -3257551872,3257552383,DE -3257552384,3257552607,GB -3257552608,3257552655,DE -3257552656,3257552703,GB -3257552704,3257552719,DE -3257552720,3257552895,GB -3257552896,3257552927,DE -3257552928,3257553023,GB -3257553024,3257553039,DE -3257553040,3257553407,GB -3257553408,3257553727,DE -3257553728,3257553791,GB -3257553792,3257553807,DE -3257553808,3257553823,GB -3257553824,3257553839,DE -3257553840,3257553855,GB -3257553856,3257553919,DE -3257553920,3257554175,GB -3257554176,3257554207,DE -3257554208,3257554239,GB -3257554240,3257554271,DE -3257554272,3257554335,GB -3257554336,3257554351,DE -3257554352,3257554415,GB -3257554416,3257554943,DE -3257554944,3257555007,GB -3257555008,3257555039,DE -3257555040,3257555167,GB -3257555168,3257555199,DE -3257555200,3257555247,GB -3257555248,3257555263,DE -3257555264,3257555327,GB -3257555328,3257555359,DE -3257555360,3257555391,GB -3257555392,3257555471,DE -3257555472,3257555583,GB -3257555584,3257555695,DE -3257555696,3257555711,GB -3257555712,3257555775,DE -3257555776,3257555839,GB -3257555840,3257555887,DE -3257555888,3257555903,GB -3257555904,3257555935,DE -3257555936,3257556223,GB -3257556224,3257556287,DE -3257556288,3257556479,GB -3257556480,3257556991,DE +3257548800,3257556991,GB 3257556992,3257557503,MW 3257557504,3257558015,LU 3257558016,3257559551,RO @@ -78288,9 +96873,7 @@ 3257827840,3257829375,GB 3257829376,3257830399,IE 3257830400,3257835519,GB -3257835520,3257844223,IE -3257844224,3257851903,GB -3257851904,3257860095,IE +3257835520,3257860095,IE 3257860096,3257925631,SE 3257925632,3257925887,AT 3257925888,3257926143,SE @@ -78448,7 +97031,9 @@ 3258109952,3258110207,DK 3258110208,3258111487,CZ 3258111488,3258111743,PL -3258111744,3258121215,CZ +3258111744,3258118399,CZ +3258118400,3258118655,UA +3258118656,3258121215,CZ 3258121216,3258121471,PL 3258121472,3258121727,AT 3258121728,3258121983,UA @@ -78517,9 +97102,7 @@ 3258506496,3258506751,DE 3258506752,3258515455,CH 3258515456,3258580991,FR -3258580992,3258625791,RU -3258625792,3258626047,UA -3258626048,3258646527,RU +3258580992,3258646527,RU 3258646528,3258691583,DE 3258691584,3258691839,RU 3258691840,3258692351,AT @@ -78555,12 +97138,24 @@ 3258746880,3258748927,DE 3258748928,3258764287,GB 3258764288,3258764543,DE -3258764544,3258764799,RU +3258764544,3258764799,GB 3258764800,3258765055,BE 3258765056,3258765311,NL 3258765312,3258767615,GB 3258767616,3258767871,CH -3258767872,3258802175,GB +3258767872,3258769919,GB +3258769920,3258770431,PL +3258770432,3258771455,IR +3258771456,3258772479,KZ +3258772480,3258773503,RU +3258773504,3258774015,FR +3258774016,3258774271,RU +3258774272,3258774527,DK +3258774528,3258776063,RU +3258776064,3258776319,GE +3258776320,3258776575,PL +3258776576,3258777599,UA +3258777600,3258802175,GB 3258802176,3258806271,LU 3258806272,3258818047,GB 3258818048,3258818303,SE @@ -78586,13 +97181,17 @@ 3258948608,3258949631,RU 3258949632,3258972159,GR 3258972160,3258974207,NO -3258974208,3259023103,DE +3258974208,3259006079,DE +3259006080,3259006111,BE +3259006112,3259023103,DE 3259023104,3259023107,ES 3259023108,3259031655,DE 3259031656,3259031659,ES 3259031660,3259031895,DE 3259031896,3259031899,ES -3259031900,3259032199,DE +3259031900,3259032151,DE +3259032152,3259032159,GB +3259032160,3259032199,DE 3259032200,3259032203,ES 3259032204,3259032439,DE 3259032440,3259032443,ES @@ -78605,9 +97204,7 @@ 3259035456,3259036031,DE 3259036032,3259036035,ES 3259036036,3259039743,DE -3259039744,3259062015,PT -3259062016,3259062271,GW -3259062272,3259105279,PT +3259039744,3259105279,PT 3259105280,3259170815,GB 3259170816,3259219967,RU 3259219968,3259220479,BY @@ -78624,11 +97221,43 @@ 3259228160,3259236351,RU 3259236352,3259236863,SE 3259236864,3259237119,CH -3259237120,3259269375,SE +3259237120,3259237887,SE +3259237888,3259238143,FR +3259238144,3259243519,SE +3259243520,3259244543,US +3259244544,3259248127,SE +3259248128,3259248383,GB +3259248384,3259258623,SE +3259258624,3259258879,ES +3259258880,3259262719,SE +3259262720,3259262975,DK +3259262976,3259266047,SE +3259266048,3259266303,SG +3259266304,3259269375,SE 3259269376,3259269631,FR -3259269632,3259292415,SE +3259269632,3259276287,SE +3259276288,3259276543,ES +3259276544,3259279615,SE +3259279616,3259279871,JP +3259279872,3259280639,SE +3259280640,3259280895,US +3259280896,3259281407,SE +3259281408,3259282431,US +3259282432,3259282687,SE +3259282688,3259282943,JP +3259282944,3259283711,SE +3259283712,3259283967,US +3259283968,3259284479,SE +3259284480,3259284735,US +3259284736,3259285759,SE +3259285760,3259286015,GB +3259286016,3259290879,SE +3259290880,3259291135,US +3259291136,3259292415,SE 3259292416,3259292671,IT -3259292672,3259301887,SE +3259292672,3259297535,SE +3259297536,3259297791,GB +3259297792,3259301887,SE 3259301888,3259302143,DE 3259302144,3259302399,AE 3259302400,3259303423,CH @@ -78732,13 +97361,23 @@ 3259367424,3259432959,GB 3259432960,3259435263,SE 3259435264,3259435519,IT -3259435520,3259457279,SE +3259435520,3259438079,SE +3259438080,3259438335,ES +3259438336,3259457279,SE 3259457280,3259457535,IT 3259457536,3259460351,SE 3259460352,3259460607,DE -3259460608,3259465215,SE +3259460608,3259461375,SE +3259461376,3259461631,GB +3259461632,3259465215,SE 3259465216,3259465471,KH -3259465472,3259492351,SE +3259465472,3259470847,SE +3259470848,3259471871,US +3259471872,3259479807,SE +3259479808,3259480063,DK +3259480064,3259480831,SE +3259480832,3259481087,ES +3259481088,3259492351,SE 3259492352,3259493375,GB 3259493376,3259498495,SE 3259498496,3259506943,GB @@ -78815,18 +97454,16 @@ 3259641344,3259642367,GB 3259642368,3259642623,BE 3259642624,3259650047,GB -3259650048,3259652095,NL +3259650048,3259650559,NL +3259650560,3259650815,GB +3259650816,3259652095,NL 3259652096,3259656959,GB 3259656960,3259657215,BE 3259657216,3259657727,GB 3259657728,3259657887,BE 3259657888,3259657919,GB 3259657920,3259657983,BE -3259657984,3259660287,GB -3259660288,3259660295,CH -3259660296,3259660327,GB -3259660328,3259660335,CH -3259660336,3259660543,GB +3259657984,3259660543,GB 3259660544,3259660799,CH 3259660800,3259695871,GB 3259695872,3259695903,ES @@ -78834,11 +97471,9 @@ 3259696640,3259696895,ES 3259696896,3259701759,GB 3259701760,3259702303,DE -3259702304,3259751423,GB -3259751424,3259751431,FR -3259751432,3259751551,GB -3259751552,3259751615,FR -3259751616,3259752191,GB +3259702304,3259709999,GB +3259710000,3259710007,JE +3259710008,3259752191,GB 3259752192,3259752447,FR 3259752448,3259760639,GB 3259760640,3259814399,DE @@ -78875,9 +97510,7 @@ 3260021248,3260021759,RU 3260021760,3260022271,GR 3260022272,3260022783,NL -3260022784,3260237775,GB -3260237776,3260237791,GR -3260237792,3260284927,GB +3260022784,3260284927,GB 3260284928,3260288767,RU 3260288768,3260289023,KZ 3260289024,3260303935,RU @@ -78933,7 +97566,7 @@ 3260587520,3260588031,PL 3260588032,3260596223,DE 3260596224,3260596735,CH -3260596736,3260597247,RO +3260596736,3260597247,SK 3260597248,3260597759,CH 3260597760,3260598271,DE 3260598272,3260598783,RU @@ -78980,26 +97613,19 @@ 3260809216,3260874751,PL 3260874752,3260875775,DK 3260875776,3260876031,GB -3260876032,3260891391,DK -3260891392,3260891647,IT -3260891648,3260891903,NL -3260891904,3260892159,ES -3260892160,3260892415,GB -3260892416,3260892671,FI -3260892672,3260892927,PT -3260892928,3260893183,SE -3260893184,3260893439,AT +3260876032,3260893439,DK 3260893440,3260894207,SE 3260894208,3260895231,AT 3260895232,3260898303,SE 3260898304,3260899327,ES 3260899328,3260900095,CH -3260900096,3260900607,EU +3260900096,3260900351,RU +3260900352,3260900607,RO 3260900608,3260901119,NL 3260901120,3260903423,DE 3260903424,3260906239,CH 3260906240,3260906495,DE -3260906496,3260907519,FR +3260906496,3260907519,PL 3260907520,3260915711,GB 3260915712,3260923903,UA 3260923904,3261071359,DE @@ -79025,7 +97651,15 @@ 3261472768,3261503487,RO 3261503488,3261503935,MD 3261503936,3261530111,RO -3261530112,3261570303,SE +3261530112,3261531903,SE +3261531904,3261532159,GB +3261532160,3261532671,SE +3261532672,3261532927,US +3261532928,3261533439,SE +3261533440,3261533695,US +3261533696,3261539327,SE +3261539328,3261540351,SG +3261540352,3261570303,SE 3261570304,3261570559,IT 3261570560,3261595647,SE 3261595648,3261661183,NL @@ -79052,8 +97686,7 @@ 3261697024,3261698047,RO 3261698048,3261698559,UA 3261698560,3261699071,DE -3261699072,3261699583,SA -3261699584,3261700095,NL +3261699072,3261700095,NL 3261700096,3261700607,FR 3261700608,3261701119,GB 3261701120,3261701631,RU @@ -79069,7 +97702,7 @@ 3261767680,3261775871,RS 3261775872,3261776383,PL 3261776384,3261777407,RU -3261777664,3261777919,KZ +3261777408,3261777663,IR 3261777920,3261778431,PL 3261778432,3261778943,RU 3261778944,3261779455,RO @@ -79097,12 +97730,13 @@ 3261820928,3261821183,RO 3261821184,3261821439,AT 3261821440,3261821695,NL +3261821696,3261821951,UA 3261821952,3261822207,RU 3261822208,3261822463,UA 3261822464,3261822719,GB 3261822720,3261822975,SE 3261822976,3261823231,PL -3261823232,3261823743,NL +3261823232,3261823487,NL 3261823744,3261823999,BE 3261824000,3261824255,PL 3261824256,3261824511,RU @@ -79159,29 +97793,41 @@ 3262034048,3262034119,AX 3262034120,3262034123,FI 3262034124,3262034127,AX -3262034128,3262034175,FI -3262034176,3262034191,AX -3262034192,3262034431,FI +3262034128,3262034143,FI +3262034144,3262034191,AX +3262034192,3262034239,FI +3262034240,3262034287,AX +3262034288,3262034431,FI 3262034432,3262034447,AX 3262034448,3262034455,FI 3262034456,3262034463,AX 3262034464,3262034527,FI -3262034528,3262034559,AX -3262034560,3262034687,FI -3262034688,3262034719,AX -3262034720,3262034783,FI +3262034528,3262034567,AX +3262034568,3262034575,FI +3262034576,3262034591,AX +3262034592,3262034687,FI +3262034688,3262034723,AX +3262034724,3262034783,FI 3262034784,3262034791,AX -3262034792,3262034839,FI +3262034792,3262034799,FI +3262034800,3262034807,AX +3262034808,3262034815,FI +3262034816,3262034831,AX +3262034832,3262034839,FI 3262034840,3262034847,AX 3262034848,3262034943,FI 3262034944,3262035455,AX 3262035456,3262035487,FI 3262035488,3262035551,AX -3262035552,3262036143,FI -3262036144,3262036151,AX +3262035552,3262035711,FI +3262035712,3262035967,AX +3262035968,3262036127,FI +3262036128,3262036139,AX +3262036140,3262036141,FI +3262036142,3262036151,AX 3262036152,3262036287,FI -3262036288,3262036303,AX -3262036304,3262036311,FI +3262036288,3262036307,AX +3262036308,3262036311,FI 3262036312,3262036335,AX 3262036336,3262036367,FI 3262036368,3262036383,AX @@ -79190,8 +97836,12 @@ 3262036432,3262036463,FI 3262036464,3262036479,AX 3262036480,3262036607,FI -3262036608,3262036615,AX -3262036616,3262036719,FI +3262036608,3262036623,AX +3262036624,3262036655,FI +3262036656,3262036659,AX +3262036660,3262036663,FI +3262036664,3262036671,AX +3262036672,3262036719,FI 3262036720,3262038015,AX 3262038016,3262038271,FR 3262038272,3262038527,RU @@ -79255,24 +97905,32 @@ 3262120448,3262120703,FI 3262120704,3262121599,AX 3262121600,3262121663,FI -3262121664,3262121727,AX -3262121728,3262121983,FI -3262121984,3262122007,AX +3262121664,3262122007,AX 3262122008,3262122015,FI -3262122016,3262122039,AX -3262122040,3262122143,FI +3262122016,3262122047,AX +3262122048,3262122143,FI 3262122144,3262122159,AX -3262122160,3262122239,FI +3262122160,3262122167,FI +3262122168,3262122183,AX +3262122184,3262122199,FI +3262122200,3262122207,AX +3262122208,3262122239,FI 3262122240,3262122367,AX 3262122368,3262122431,FI -3262122432,3262122455,AX -3262122456,3262122463,FI -3262122464,3262122591,AX -3262122592,3262122631,FI -3262122632,3262122639,AX -3262122640,3262122751,FI -3262122752,3262122815,AX -3262122816,3262124031,FI +3262122432,3262122623,AX +3262122624,3262122631,FI +3262122632,3262122655,AX +3262122656,3262122751,FI +3262122752,3262123007,AX +3262123008,3262123263,FI +3262123264,3262123295,AX +3262123296,3262123311,FI +3262123312,3262123327,AX +3262123328,3262123391,FI +3262123392,3262123519,AX +3262123520,3262123527,FI +3262123528,3262123775,AX +3262123776,3262124031,FI 3262124032,3262128127,DE 3262128128,3262136319,GB 3262136320,3262137599,EU @@ -79333,7 +97991,10 @@ 3262283776,3262284799,RU 3262284800,3262286847,UA 3262286848,3262287871,SE -3262287872,3262289919,PL +3262287872,3262288127,MD +3262288128,3262288383,FR +3262288384,3262288895,IL +3262288896,3262289919,PL 3262289920,3262316543,SE 3262316544,3262348799,DE 3262348800,3262349055,NL @@ -79355,8 +98016,10 @@ 3262423040,3262423551,GB 3262423552,3262424063,UA 3262424064,3262424575,IT -3262424576,3262425087,FR -3262425088,3262425599,RO +3262424576,3262424831,PL +3262424832,3262425087,GB +3262425088,3262425343,GR +3262425344,3262425599,RU 3262425600,3262426111,UA 3262426112,3262426623,DE 3262426624,3262427135,GB @@ -79395,14 +98058,12 @@ 3262444032,3262444543,AT 3262444544,3262445055,UA 3262445056,3262445567,RO -3262445568,3262446079,PL -3262446592,3262447103,PL +3262445568,3262447103,PL 3262447104,3262447615,GB 3262447616,3262460415,PT 3262460416,3262460543,UA 3262460544,3262460671,RU 3262460672,3262460927,AE -3262460928,3262461055,HU 3262461056,3262461183,DK 3262461184,3262461311,SN 3262461312,3262461439,NO @@ -79490,8 +98151,7 @@ 3262472620,3262472623,TR 3262472624,3262472631,DE 3262472632,3262472635,ES -3262472636,3262472651,DE -3262472652,3262472655,FR +3262472636,3262472655,DE 3262472656,3262472659,GB 3262472660,3262472663,IT 3262472664,3262472667,ES @@ -79564,7 +98224,7 @@ 3262472992,3262472995,DE 3262472996,3262472999,FR 3262473000,3262473003,HU -3262473004,3262473007,NO +3262473004,3262473007,DE 3262473008,3262473011,US 3262473012,3262473015,DE 3262473016,3262473019,AR @@ -79960,8 +98620,7 @@ 3262475460,3262475463,FR 3262475464,3262475467,DE 3262475468,3262475471,ES -3262475472,3262475475,DE -3262475476,3262475479,ES +3262475472,3262475479,DE 3262475480,3262475483,US 3262475484,3262475487,IT 3262475488,3262475491,MX @@ -80159,7 +98818,7 @@ 3262476656,3262476667,US 3262476668,3262476671,GB 3262476672,3262476675,SE -3262476676,3262476679,AT +3262476676,3262476679,DE 3262476680,3262476683,NL 3262476684,3262476687,IT 3262476688,3262476691,DE @@ -80569,7 +99228,7 @@ 3262478344,3262478344,IT 3262478345,3262478345,CH 3262478346,3262478346,PT -3262478347,3262478347,AO +3262478347,3262478347,DE 3262478348,3262478348,DK 3262478349,3262478349,BE 3262478350,3262478350,AT @@ -80876,7 +99535,7 @@ 3262478749,3262478751,FR 3262478752,3262478752,PT 3262478753,3262478753,IE -3262478754,3262478754,ES +3262478754,3262478754,DE 3262478755,3262478755,DK 3262478756,3262478756,DE 3262478757,3262478757,AT @@ -80923,7 +99582,7 @@ 3262478801,3262478801,DE 3262478802,3262478802,IT 3262478803,3262478803,ES -3262478804,3262478804,SK +3262478804,3262478804,DE 3262478805,3262478806,GR 3262478807,3262478807,CH 3262478808,3262478808,HU @@ -81242,7 +99901,7 @@ 3262479279,3262479279,ES 3262479280,3262479280,DE 3262479281,3262479281,FR -3262479282,3262479282,AD +3262479282,3262479282,DE 3262479283,3262479283,IT 3262479284,3262479284,NO 3262479285,3262479289,DE @@ -81260,8 +99919,7 @@ 3262479305,3262479307,DE 3262479308,3262479308,DK 3262479309,3262479309,SE -3262479310,3262479311,DE -3262479312,3262479312,IT +3262479310,3262479312,DE 3262479313,3262479313,FR 3262479314,3262479318,DE 3262479319,3262479319,DK @@ -81342,8 +100000,7 @@ 3262479420,3262479420,ES 3262479421,3262479421,DE 3262479422,3262479422,SE -3262479423,3262479423,AT -3262479424,3262479426,DE +3262479423,3262479426,DE 3262479427,3262479427,IT 3262479428,3262479429,FR 3262479430,3262479430,GB @@ -81613,8 +100270,7 @@ 3262479809,3262479809,FR 3262479810,3262479810,NL 3262479811,3262479811,ES -3262479812,3262479812,GB -3262479813,3262479816,DE +3262479812,3262479816,DE 3262479817,3262479817,HU 3262479818,3262479818,DE 3262479819,3262479819,NL @@ -81682,9 +100338,7 @@ 3262479903,3262479903,CH 3262479904,3262479908,DE 3262479909,3262479909,SE -3262479910,3262479912,DE -3262479913,3262479913,NO -3262479914,3262479914,DE +3262479910,3262479914,DE 3262479915,3262479915,FR 3262479916,3262479917,DE 3262479918,3262479918,GB @@ -81732,9 +100386,7 @@ 3262479988,3262479988,FR 3262479989,3262479989,DE 3262479990,3262479990,NL -3262479991,3262479993,DE -3262479994,3262479994,CH -3262479995,3262479995,DE +3262479991,3262479995,DE 3262479996,3262479996,NL 3262479997,3262480001,DE 3262480002,3262480002,BE @@ -81999,7 +100651,7 @@ 3262510080,3262511103,FR 3262511104,3262511615,GB 3262511616,3262512127,DE -3262512128,3262512639,GB +3262512128,3262512639,UA 3262512640,3262513151,DE 3262513152,3262578687,AT 3262578688,3262611455,FR @@ -82146,7 +100798,7 @@ 3263072256,3263074303,LB 3263074304,3263074815,CH 3263074816,3263075327,RO -3263075328,3263075839,GB +3263075328,3263075839,IT 3263075840,3263076351,SE 3263076352,3263076863,RO 3263076864,3263077375,IT @@ -82194,7 +100846,7 @@ 3263096064,3263096319,PL 3263096320,3263096575,TR 3263096576,3263096831,SA -3263096832,3263097087,NL +3263096832,3263097087,PL 3263097088,3263097343,FR 3263097344,3263097599,DK 3263097600,3263097855,NL @@ -82223,12 +100875,29 @@ 3263138560,3263138815,AT 3263138816,3263168511,DE 3263168512,3263430655,GB -3263430656,3263436799,SE +3263430656,3263436543,SE +3263436544,3263436799,ES 3263436800,3263437311,GB -3263437312,3263477759,SE +3263437312,3263458047,SE +3263458048,3263458303,DE +3263458304,3263459583,SE +3263459584,3263459839,FR +3263459840,3263461631,SE +3263461632,3263461887,AE +3263461888,3263469567,SE +3263469568,3263470591,SG +3263470592,3263472127,SE +3263472128,3263472383,SG +3263472384,3263475711,SE +3263475712,3263476735,JP +3263476736,3263477759,SE 3263477760,3263478015,JP 3263478016,3263478271,AU -3263478272,3263496191,SE +3263478272,3263478527,SE +3263478528,3263478783,ES +3263478784,3263480831,SE +3263480832,3263481855,JP +3263481856,3263496191,SE 3263496192,3263497983,EU 3263497984,3263498239,GB 3263498240,3263498751,EU @@ -82328,20 +100997,7 @@ 3263561216,3263561231,TR 3263561232,3263561727,EU 3263561728,3263627263,NL -3263627264,3263657471,RU -3263657472,3263657727,KZ -3263657728,3263684351,RU -3263684352,3263684607,UA -3263684608,3263688959,RU -3263688960,3263689215,UA -3263689216,3263689471,RU -3263689472,3263689727,UA -3263689728,3263689983,RU -3263689984,3263690239,UA -3263690240,3263691775,RU -3263691776,3263692031,UA -3263692032,3263692287,RU -3263692288,3263692799,UA +3263627264,3263692799,RU 3263692800,3263760127,FI 3263760128,3263760383,SE 3263760384,3263764991,FI @@ -82382,6 +101038,7 @@ 3264015360,3264015615,DK 3264015616,3264015871,UA 3264015872,3264016127,PT +3264016128,3264016383,UA 3264016384,3264016639,SE 3264016640,3264016895,PL 3264016896,3264017151,GB @@ -82458,7 +101115,7 @@ 3264320000,3264320255,DE 3264320256,3264321023,GB 3264321024,3264321535,DE -3264321536,3264321791,SE +3264321536,3264321791,GB 3264321792,3264322047,RS 3264322048,3264322303,FR 3264322304,3264322559,RO @@ -82496,7 +101153,9 @@ 3264340992,3264341503,PL 3264341504,3264341759,DE 3264341760,3264342015,IT -3264342016,3264343295,DE +3264342016,3264342783,DE +3264342784,3264343039,FR +3264343040,3264343295,DE 3264343296,3264343551,GB 3264343552,3264343807,RO 3264343808,3264344063,DE @@ -82504,7 +101163,9 @@ 3264345088,3264346111,NL 3264346112,3264347135,SE 3264347136,3264348159,DE -3264348160,3264375039,FR +3264348160,3264372223,FR +3264372224,3264372735,GB +3264372736,3264375039,FR 3264375040,3264376063,SE 3264376064,3264376319,HR 3264376320,3264376575,UA @@ -82519,7 +101180,7 @@ 3264378880,3264379135,PL 3264379136,3264379391,BE 3264379392,3264379647,RU -3264379648,3264380159,DE +3264379904,3264380159,DE 3264380160,3264380415,RO 3264380416,3264380671,CH 3264380672,3264380927,NL @@ -82556,7 +101217,9 @@ 3264431104,3264431615,LI 3264431616,3264446207,CH 3264446208,3264446463,FR -3264446464,3264463871,CH +3264446464,3264447743,CH +3264447744,3264447999,DE +3264448000,3264463871,CH 3264463872,3264466943,LI 3264466944,3264483071,CH 3264483072,3264483327,LI @@ -82593,53 +101256,53 @@ 3264606976,3264607231,BE 3264607232,3264607487,IT 3264607488,3264610303,DE -3264610304,3264611583,GB -3264611584,3264612095,FR -3264612096,3264612351,GB -3264612352,3264612479,FR -3264612480,3264612511,GB -3264612512,3264612591,FR -3264612592,3264613119,GB -3264613120,3264614399,FR -3264614400,3264614431,GB -3264614432,3264614447,FR -3264614448,3264614463,GB -3264614464,3264614527,FR -3264614528,3264614559,GB -3264614560,3264614591,FR -3264614592,3264614623,GB -3264614624,3264614655,FR -3264614656,3264615935,GB -3264615936,3264615999,FR -3264616000,3264616095,GB -3264616096,3264616159,FR -3264616160,3264616191,GB -3264616192,3264616511,FR -3264616512,3264616575,GB -3264616576,3264616591,FR -3264616592,3264616639,GB -3264616640,3264616655,FR -3264616656,3264616671,GB -3264616672,3264616687,FR -3264616688,3264616959,GB -3264616960,3264617215,FR -3264617216,3264617311,GB -3264617312,3264617983,FR -3264617984,3264618751,GB -3264618752,3264619007,FR -3264619008,3264619519,GB -3264619520,3264619551,FR -3264619552,3264619583,GB -3264619584,3264619615,FR -3264619616,3264619775,GB -3264619776,3264620031,FR -3264620032,3264620159,GB -3264620160,3264620191,FR -3264620192,3264620543,GB -3264620544,3264620927,FR -3264620928,3264621567,GB -3264621568,3264621823,FR -3264621824,3264626687,GB +3264610304,3264612351,GB +3264612352,3264612599,FR +3264612600,3264612607,GB +3264612608,3264613199,FR +3264613200,3264613247,GB +3264613248,3264613311,FR +3264613312,3264613375,GB +3264613376,3264613887,NL +3264613888,3264613895,GB +3264613896,3264613919,NL +3264613920,3264614399,GB +3264614400,3264614655,NL +3264614656,3264614911,SE +3264614912,3264615423,GB +3264615424,3264615735,CH +3264615736,3264615743,GB +3264615744,3264615775,CH +3264615776,3264615807,GB +3264615808,3264615823,CH +3264615824,3264615839,GB +3264615840,3264615871,CH +3264615872,3264616447,GB +3264616448,3264616479,DE +3264616480,3264616575,GB +3264616576,3264616703,DE +3264616704,3264616959,GB +3264616960,3264617471,DE +3264617472,3264617727,US +3264617728,3264618239,GB +3264618240,3264618495,US +3264618496,3264618751,PL +3264618752,3264619007,GB +3264619008,3264619311,BE +3264619312,3264620543,GB +3264620544,3264620575,FR +3264620576,3264621311,GB +3264621312,3264621567,FR +3264621568,3264622335,GB +3264622336,3264622591,DE +3264622592,3264622847,GB +3264622848,3264623103,FR +3264623104,3264624127,GB +3264624128,3264624143,GI +3264624144,3264624383,GB +3264624384,3264624639,MT +3264624640,3264626431,GB +3264626432,3264626687,NL 3264626688,3264627711,EE 3264627712,3264628735,GR 3264628736,3264630783,UA @@ -82658,7 +101321,7 @@ 3264652288,3264652799,RU 3264652800,3264653311,PL 3264653312,3264653823,EU -3264653824,3264654335,RO +3264653824,3264654335,PL 3264654336,3264654847,DE 3264654848,3264655359,UA 3264655360,3264655871,GB @@ -82683,6 +101346,7 @@ 3264665600,3264666111,RO 3264666112,3264666623,IL 3264666624,3264667135,UA +3264667136,3264667647,RU 3264667648,3264668159,BE 3264668160,3264669183,DE 3264669184,3264669695,PL @@ -82778,12 +101442,12 @@ 3264846592,3264846719,US 3264846720,3264846847,RU 3264846848,3264846911,DK -3264846912,3264846975,SK -3264846976,3264847103,GB +3264847040,3264847103,GB 3264847104,3264847135,FR 3264847136,3264847167,ES 3264847168,3264847199,IE 3264847200,3264847231,NO +3264847232,3264847263,CH 3264847264,3264847295,LI 3264847360,3264847487,FR 3264847488,3264847615,RU @@ -82798,7 +101462,7 @@ 3264850944,3264851967,IT 3264851968,3264854015,CH 3264854016,3264854527,DE -3264854528,3264854783,CZ +3264854528,3264854783,EU 3264854784,3264855039,IT 3264855040,3264855551,CH 3264855552,3264856063,DE @@ -82813,157 +101477,10 @@ 3264872448,3264888831,GB 3264888832,3264897023,RU 3264897024,3264905215,GB -3264905216,3264906255,CY -3264906256,3264906263,GR -3264906264,3264906287,CY -3264906288,3264906291,GR -3264906292,3264906295,CY -3264906296,3264906303,GR -3264906304,3264906323,CY -3264906324,3264906327,GR -3264906328,3264906332,CY -3264906333,3264906335,GR -3264906336,3264906339,CY -3264906340,3264906351,GR -3264906352,3264906367,CY -3264906368,3264906383,GR -3264906384,3264906399,CY -3264906400,3264906411,GR -3264906412,3264906423,CY -3264906424,3264906435,GR -3264906436,3264906495,CY -3264906496,3264906623,GR -3264906624,3264906751,CY -3264906752,3264906761,GR -3264906762,3264906879,CY -3264906880,3264906895,GR -3264906896,3264906911,CY -3264906912,3264906919,GR -3264906920,3264906983,CY -3264906984,3264906995,GR -3264906996,3264907139,CY -3264907140,3264907143,GR -3264907144,3264907151,CY -3264907152,3264907155,GR -3264907156,3264907639,CY -3264907640,3264907647,GR -3264907648,3264907663,CY -3264907664,3264907671,GR -3264907672,3264907679,CY -3264907680,3264907683,GR -3264907684,3264907687,CY -3264907688,3264907691,GR -3264907692,3264907695,CY -3264907696,3264907703,GR -3264907704,3264907715,CY -3264907716,3264907727,GR -3264907728,3264907735,CY -3264907736,3264907743,GR -3264907744,3264907755,CY -3264907756,3264907763,GR -3264907764,3264907767,CY -3264907768,3264907775,GR -3264907776,3264907919,CY -3264907920,3264907927,GR -3264907928,3264907935,CY -3264907936,3264907939,GR -3264907940,3264907963,CY -3264907964,3264907971,GR -3264907972,3264907987,CY -3264907988,3264907991,GR -3264907992,3264908007,CY -3264908008,3264908019,GR -3264908020,3264908023,CY -3264908024,3264908031,GR -3264908032,3264908063,CY -3264908064,3264908071,GR -3264908072,3264908095,CY -3264908096,3264908103,GR -3264908104,3264908111,CY -3264908112,3264908119,GR -3264908120,3264908167,CY -3264908168,3264908175,GR -3264908176,3264908183,CY -3264908184,3264908191,GR -3264908192,3264908223,CY -3264908224,3264908255,GR -3264908256,3264908286,CY -3264908287,3264908799,GR +3264905216,3264908799,CY 3264908800,3264909055,GB -3264909056,3264909311,GR -3264909312,3264909639,CY -3264909640,3264909647,GR -3264909648,3264909655,CY -3264909656,3264909663,GR -3264909664,3264910590,CY -3264910591,3264910591,GR -3264910592,3264910607,CY -3264910608,3264910623,GR -3264910624,3264910655,CY -3264910656,3264910671,GR -3264910672,3264910696,CY -3264910697,3264910699,GR -3264910700,3264910703,CY -3264910704,3264910719,GR -3264910720,3264910815,CY -3264910816,3264911103,GR -3264911104,3264911651,CY -3264911652,3264911655,GR -3264911656,3264911679,CY -3264911680,3264911703,GR -3264911704,3264911743,CY -3264911744,3264911807,GR -3264911808,3264912131,CY -3264912132,3264912135,GR -3264912136,3264912139,CY -3264912140,3264912143,GR -3264912144,3264912147,CY -3264912148,3264912151,GR -3264912152,3264912167,CY -3264912168,3264912183,GR -3264912184,3264912191,CY -3264912192,3264912219,GR -3264912220,3264912223,CY -3264912224,3264912231,GR -3264912232,3264912235,CY -3264912236,3264912239,GR -3264912240,3264912243,CY -3264912244,3264912251,GR -3264912252,3264912263,CY -3264912264,3264912279,GR -3264912280,3264912283,CY -3264912284,3264912287,GR -3264912288,3264912295,CY -3264912296,3264912319,GR -3264912320,3264912655,CY -3264912656,3264912663,GR -3264912664,3264912815,CY -3264912816,3264912839,GR -3264912840,3264912843,CY -3264912844,3264912863,GR -3264912864,3264912879,CY -3264912880,3264912895,GR -3264912896,3264913151,CY -3264913152,3264913183,GR -3264913184,3264913191,CY -3264913192,3264913199,GR -3264913200,3264913223,CY -3264913224,3264913231,GR -3264913232,3264913243,CY -3264913244,3264913263,GR -3264913264,3264913279,CY -3264913280,3264913295,GR -3264913296,3264913299,CY -3264913300,3264913303,GR -3264913304,3264913311,CY -3264913312,3264913327,GR -3264913328,3264913375,CY -3264913376,3264913383,GR -3264913384,3264913399,CY -3264913400,3264913407,GR -3264913408,3264917247,GB -3264917248,3264917375,NL -3264917376,3264921599,GB +3264909056,3264913407,CY +3264913408,3264921599,GB 3264921600,3264922303,LU 3264922304,3264922319,SA 3264922320,3264929791,LU @@ -83054,7 +101571,11 @@ 3265467520,3265467523,ES 3265467524,3265527055,DE 3265527056,3265527059,ES -3265527060,3265527807,DE +3265527060,3265527063,DE +3265527064,3265527071,SE +3265527072,3265527087,DE +3265527088,3265527095,SE +3265527096,3265527807,DE 3265527808,3265569279,GB 3265569280,3265569791,AE 3265569792,3265582335,GB @@ -83079,17 +101600,18 @@ 3265603328,3265603583,MD 3265603584,3265603839,DE 3265603840,3265604095,PL -3265604096,3265604351,SA +3265604096,3265604351,NL 3265604352,3265604607,FR 3265604608,3265604863,CH +3265604864,3265605119,RU 3265605120,3265605375,UA 3265605376,3265605631,CZ 3265605632,3265605887,PL 3265605888,3265606143,FR 3265606144,3265606399,RU -3265606400,3265606655,DE +3265606400,3265606655,NL 3265606656,3265606911,AT -3265606912,3265607167,FR +3265606912,3265607167,RU 3265607168,3265607423,PL 3265607424,3265607935,DK 3265607936,3265608191,CZ @@ -83167,6 +101689,7 @@ 3265918976,3265919231,NL 3265919232,3265919487,FR 3265919488,3265919743,RU +3265919744,3265919999,DE 3265920000,3265920255,CZ 3265920256,3265920511,TR 3265920512,3265921023,GB @@ -83249,7 +101772,9 @@ 3266420736,3266428927,GB 3266428928,3266437119,GR 3266437120,3266445311,GL -3266445312,3266510847,NL +3266445312,3266473807,NL +3266473808,3266473823,GB +3266473824,3266510847,NL 3266510848,3266543615,ES 3266543616,3266576383,IT 3266576384,3266617327,DE @@ -83264,38 +101789,17 @@ 3266789376,3266796543,SM 3266796544,3266796799,IT 3266796800,3266797567,SM -3266797568,3266797823,GB -3266797824,3266798079,NL -3266798080,3266799103,GB +3266797568,3266799103,GB 3266799104,3266799615,NL -3266799616,3266800127,GB -3266800128,3266800319,NL -3266800320,3266800639,GB -3266800640,3266800695,NL -3266800696,3266800727,GB -3266800728,3266800735,NL -3266800736,3266800895,GB -3266800896,3266801215,NL -3266801216,3266801407,GB -3266801408,3266801471,NL -3266801472,3266801487,GB -3266801488,3266801519,NL -3266801520,3266801535,GB -3266801536,3266801599,NL -3266801600,3266801615,GB -3266801616,3266801647,NL -3266801648,3266801663,GB -3266801664,3266801919,NL -3266801920,3266803727,GB -3266803728,3266803751,NL -3266803752,3266803759,GB -3266803760,3266803831,NL -3266803832,3266804223,GB +3266799616,3266800895,GB +3266800896,3266801151,NL +3266801152,3266801487,GB +3266801488,3266801503,NL +3266801504,3266803815,GB +3266803816,3266803823,NL +3266803824,3266804223,GB 3266804224,3266804479,NL -3266804480,3266804735,GB -3266804736,3266804991,NL -3266804992,3266805503,GB -3266805504,3266805759,NL +3266804480,3266805759,GB 3266805760,3266813951,AT 3266813952,3266822143,UA 3266822144,3266830335,FR @@ -83462,7 +101966,9 @@ 3267557888,3267558399,IL 3267558400,3267558911,CH 3267558912,3267559423,AT -3267559424,3267622527,DE +3267559424,3267561727,DE +3267561728,3267561759,GB +3267561760,3267622527,DE 3267622528,3267622559,GB 3267622560,3267624959,DE 3267624960,3267625471,GB @@ -83472,9 +101978,7 @@ 3267626240,3267626495,BE 3267626496,3267626751,ES 3267626752,3267627007,RU -3267627008,3267627167,DE -3267627168,3267627199,EU -3267627200,3267627343,DE +3267627008,3267627343,DE 3267627344,3267627359,EU 3267627360,3267627423,DE 3267627424,3267627431,EU @@ -83489,9 +101993,11 @@ 3267628800,3267629055,HU 3267629056,3267629311,CZ 3267629312,3267629567,DK -3267629568,3267629759,BE -3267629760,3267629807,EU -3267629808,3267629823,BE +3267629568,3267629711,BE +3267629712,3267629719,EU +3267629720,3267629759,BE +3267629760,3267629791,EU +3267629792,3267629823,BE 3267629824,3267630079,GR 3267630080,3267630591,GB 3267630592,3267630847,SK @@ -83566,12 +102072,13 @@ 3267644416,3267644671,DE 3267644672,3267644927,SI 3267644928,3267644935,EU -3267644936,3267644959,BE +3267644936,3267644943,BE +3267644944,3267644951,EU +3267644952,3267644959,BE 3267644960,3267644975,FR 3267644976,3267644983,GB 3267644984,3267645055,BE -3267645056,3267645183,GB -3267645184,3267645439,EU +3267645056,3267645439,EU 3267645440,3267645695,GB 3267645696,3267645951,DE 3267645952,3267646207,DK @@ -83581,16 +102088,15 @@ 3267648000,3267648255,DE 3267648256,3267648383,EU 3267648384,3267648399,BG -3267648400,3267648431,EU +3267648400,3267648415,GB +3267648416,3267648431,EU 3267648432,3267648447,BE 3267648448,3267648479,FR 3267648480,3267648511,GB 3267648512,3267648767,DE 3267648768,3267649023,NL 3267649024,3267649279,RU -3267649280,3267649295,DE -3267649296,3267649311,EU -3267649312,3267649471,DE +3267649280,3267649471,DE 3267649472,3267649791,EU 3267649792,3267650303,NL 3267650304,3267650319,EU @@ -83622,8 +102128,8 @@ 3267657488,3267657503,EU 3267657504,3267657567,RO 3267657568,3267657663,EU -3267657664,3267657687,RO -3267657688,3267657983,EU +3267657664,3267657695,RO +3267657696,3267657983,EU 3267657984,3267658239,GB 3267658240,3267658495,IT 3267658496,3267658751,EU @@ -83632,30 +102138,33 @@ 3267659520,3267659775,IT 3267659776,3267660287,EU 3267660288,3267660543,CH -3267660544,3267660671,ES +3267660544,3267660575,ES +3267660576,3267660591,EU +3267660592,3267660671,ES 3267660672,3267661311,EU 3267661312,3267661567,SK -3267661568,3267661679,GB +3267661568,3267661583,GB +3267661584,3267661599,EU +3267661600,3267661679,GB 3267661680,3267661695,EU 3267661696,3267661823,GB 3267661824,3267661847,ES 3267661848,3267661855,EU 3267661856,3267661887,ES 3267661888,3267662023,EU -3267662024,3267662031,ES -3267662032,3267662047,EU +3267662024,3267662039,ES +3267662040,3267662047,EU 3267662048,3267662079,ES 3267662080,3267662847,EU 3267662848,3267662879,IE 3267662880,3267662887,EU 3267662888,3267662895,GB -3267662896,3267662951,IE +3267662896,3267662911,EU +3267662912,3267662951,IE 3267662952,3267662959,GB 3267662960,3267662991,IE 3267662992,3267663007,EU -3267663008,3267663071,IE -3267663072,3267663087,EU -3267663088,3267663103,IE +3267663008,3267663103,IE 3267663104,3267663327,IT 3267663328,3267663359,EU 3267663360,3267663871,GB @@ -83683,12 +102192,12 @@ 3267666544,3267666575,EU 3267666576,3267667199,GB 3267667200,3267667455,NL -3267667456,3267667967,GB +3267667456,3267667759,GB +3267667760,3267667775,EU +3267667776,3267667967,GB 3267667968,3267670015,EU 3267670016,3267671551,ZA -3267671552,3267671679,DE -3267671680,3267671711,EU -3267671712,3267671807,DE +3267671552,3267671807,DE 3267671808,3267672063,NO 3267672064,3267672223,DE 3267672224,3267672255,EU @@ -83697,26 +102206,25 @@ 3267672576,3267672831,AT 3267672832,3267672847,FR 3267672848,3267672855,EU -3267672856,3267672927,FR -3267672928,3267672943,EU -3267672944,3267672999,FR -3267673000,3267673007,EU -3267673008,3267673015,FR +3267672856,3267672935,FR +3267672936,3267672943,EU +3267672944,3267673015,FR 3267673016,3267673023,EU 3267673024,3267673087,FR 3267673088,3267673439,DE 3267673440,3267673471,EU -3267673472,3267673479,DE -3267673480,3267673487,EU -3267673488,3267673503,DE +3267673472,3267673503,DE 3267673504,3267673599,EU 3267673600,3267673759,DE 3267673760,3267673807,EU 3267673808,3267673855,DE 3267673856,3267674111,EU 3267674112,3267674127,NL -3267674128,3267674159,GB -3267674160,3267674207,BE +3267674128,3267674143,EU +3267674144,3267674159,GB +3267674160,3267674167,BE +3267674168,3267674175,EU +3267674176,3267674207,BE 3267674208,3267674239,GB 3267674240,3267674303,BE 3267674304,3267674335,EU @@ -83756,8 +102264,8 @@ 3267680000,3267680255,CZ 3267680256,3267680767,SK 3267680768,3267681279,EU -3267681280,3267681319,FR -3267681320,3267681327,EU +3267681280,3267681311,FR +3267681312,3267681327,EU 3267681328,3267681503,FR 3267681504,3267681511,EU 3267681512,3267681535,FR @@ -83772,8 +102280,8 @@ 3267682560,3267683335,EU 3267683336,3267683359,PL 3267683360,3267683391,EU -3267683392,3267683471,PL -3267683472,3267683519,EU +3267683392,3267683463,PL +3267683464,3267683519,EU 3267683520,3267683527,PL 3267683528,3267683535,EU 3267683536,3267683551,PL @@ -83782,9 +102290,7 @@ 3267683576,3267683919,EU 3267683920,3267683935,PL 3267683936,3267684383,EU -3267684384,3267684399,GB -3267684400,3267684407,EU -3267684408,3267685119,GB +3267684384,3267685119,GB 3267685120,3267685375,DE 3267685376,3267685887,NL 3267685888,3267686399,CH @@ -83803,7 +102309,12 @@ 3267690272,3267690495,FR 3267690496,3267691519,FI 3267691520,3267692543,SE -3267692544,3267711999,FI +3267692544,3267710959,FI +3267710960,3267710963,LV +3267710964,3267710967,NO +3267710968,3267710971,DK +3267710972,3267710975,SE +3267710976,3267711999,FI 3267712000,3267712255,SE 3267712256,3267729311,FI 3267729312,3267729343,AX @@ -83883,9 +102394,7 @@ 3268223232,3268224767,EU 3268224768,3268225023,US 3268225024,3268226367,EU -3268226368,3268226663,GB -3268226664,3268226687,EU -3268226688,3268226815,GB +3268226368,3268226815,GB 3268226816,3268227327,EU 3268227328,3268227391,GB 3268227392,3268227519,EU @@ -84153,10 +102662,10 @@ 3268739072,3268739327,DE 3268739328,3268739583,PL 3268739584,3268739839,DE -3268739840,3268740095,CH +3268739840,3268740095,GB 3268740096,3268740351,IL 3268740352,3268740607,DE -3268740608,3268740863,UA +3268740608,3268740863,RO 3268740864,3268741119,CH 3268741120,3268741375,FR 3268741376,3268741887,LV @@ -84224,17 +102733,15 @@ 3268935680,3269057535,GB 3269057536,3269058047,NL 3269058048,3269066751,GB -3269066752,3269131555,SE +3269066752,3269118087,SE +3269118088,3269118091,GB +3269118092,3269122343,SE +3269122344,3269122351,GB +3269122352,3269131555,SE 3269131556,3269131559,NO 3269131560,3269132287,SE 3269132288,3269197823,GR -3269197824,3269200639,RU -3269200640,3269200895,UA -3269200896,3269212671,RU -3269212672,3269213183,UA -3269213184,3269239039,RU -3269239040,3269239295,UA -3269239296,3269263359,RU +3269197824,3269263359,RU 3269263360,3269264639,EU 3269264640,3269264895,DE 3269264896,3269265855,EU @@ -84268,8 +102775,8 @@ 3269279488,3269279671,EU 3269279672,3269279679,CH 3269279680,3269279743,EU -3269279744,3269279999,GB -3269280000,3269280767,NL +3269279744,3269280127,GB +3269280128,3269280767,NL 3269280768,3269281023,GB 3269281024,3269281279,DE 3269281280,3269282047,EU @@ -84286,12 +102793,12 @@ 3269284864,3269285055,FR 3269285056,3269285087,EU 3269285088,3269285135,DE -3269285136,3269285151,EU +3269285136,3269285151,GB 3269285152,3269285215,DE 3269285216,3269285311,EU 3269285312,3269285327,DE 3269285328,3269285343,FR -3269285344,3269285631,EU +3269285344,3269285631,GB 3269285632,3269285887,DE 3269285888,3269286399,EU 3269286400,3269286463,DE @@ -84370,7 +102877,9 @@ 3269320704,3269321727,GB 3269321728,3269322239,EU 3269322240,3269322495,DE -3269322496,3269322679,EU +3269322496,3269322655,EU +3269322656,3269322671,DE +3269322672,3269322679,EU 3269322680,3269322683,DE 3269322684,3269322751,EU 3269322752,3269323263,DE @@ -84400,7 +102909,9 @@ 3269656576,3269722111,GB 3269722112,3269750799,CZ 3269750800,3269750815,CR -3269750816,3269787647,CZ +3269750816,3269771007,CZ +3269771008,3269771263,GB +3269771264,3269787647,CZ 3269787648,3269853183,NL 3269853184,3269918719,CH 3269918720,3269936063,DE @@ -84411,7 +102922,9 @@ 3270062192,3270062195,ES 3270062196,3270078391,DE 3270078392,3270078395,ES -3270078396,3270115327,DE +3270078396,3270100735,DE +3270100736,3270100767,GB +3270100768,3270115327,DE 3270115328,3270117503,EU 3270117504,3270117631,DK 3270117632,3270122239,EU @@ -84603,7 +103116,7 @@ 3270653440,3270653695,NL 3270653696,3270653951,GB 3270653952,3270654207,ES -3270654208,3270654463,EU +3270654208,3270654463,RO 3270654464,3270654719,BE 3270654720,3270655231,UA 3270655232,3270655487,IT @@ -84630,7 +103143,12 @@ 3270911872,3270911935,DE 3270911936,3270911967,PL 3270911968,3270911999,NL -3270912000,3270926335,DE +3270912000,3270920703,DE +3270920704,3270921215,UA +3270921216,3270921471,DK +3270921472,3270921727,UA +3270921728,3270922239,GB +3270922240,3270926335,DE 3270926336,3270926591,US 3270926592,3270926847,CH 3270926848,3270927103,PL @@ -84678,11 +103196,13 @@ 3270979072,3270979327,PL 3270979328,3270979583,AT 3270979584,3270979839,LV +3270979840,3270980095,GB 3270980096,3270980351,AM 3270980352,3270980607,RU 3270980608,3270980863,MD 3270980864,3270981631,RU 3270981632,3270981887,IT +3270981888,3270982143,AT 3270982144,3270982399,RU 3270982400,3270982655,TR 3270982656,3270982911,UA @@ -84873,7 +103393,14 @@ 3271426304,3271491583,FR 3271491584,3271495679,DK 3271495680,3271495807,SE -3271495808,3271557119,DK +3271495808,3271501567,DK +3271501568,3271501575,SE +3271501576,3271501663,DK +3271501664,3271501679,DE +3271501680,3271501695,SE +3271501696,3271501783,DK +3271501784,3271501791,SE +3271501792,3271557119,DK 3271557120,3271589887,BE 3271589888,3271688191,NO 3271688192,3271691775,EU @@ -84882,7 +103409,7 @@ 3271692288,3271694847,EU 3271694848,3271695103,GB 3271695104,3271696383,EU -3271696384,3271698431,DE +3271696384,3271698431,GB 3271698432,3271704575,EU 3271704576,3271712767,RU 3271712768,3271716863,LV @@ -84954,9 +103481,7 @@ 3271821247,3271821247,AT 3271821248,3271847487,DE 3271847488,3271847495,US -3271847496,3271851879,DE -3271851880,3271851887,NL -3271851888,3271884799,DE +3271847496,3271884799,DE 3271884800,3271901183,UA 3271901184,3271909375,ES 3271909376,3271909887,RO @@ -84972,9 +103497,8 @@ 3271915008,3271915519,SE 3271915520,3271916031,NL 3271916032,3271916543,GB -3271916544,3271917055,UA -3271917056,3271917567,RO -3271917568,3271925759,RU +3271916544,3271917311,UA +3271917312,3271925759,RU 3271925760,3271926015,DE 3271926016,3271926271,MD 3271926272,3271926527,RU @@ -85016,83 +103540,28 @@ 3272040448,3272048639,FR 3272048640,3272056831,NL 3272056832,3272065023,RU -3272065024,3272065215,GB -3272065216,3272065279,NL -3272065280,3272065343,GB -3272065344,3272065439,NL -3272065440,3272065535,GB -3272065536,3272065551,NL -3272065552,3272065559,GB -3272065560,3272065575,NL -3272065576,3272065583,GB -3272065584,3272065599,NL -3272065600,3272065615,GB -3272065616,3272065663,NL -3272065664,3272065791,GB -3272065792,3272065823,NL -3272065824,3272066335,GB -3272066336,3272066431,NL -3272066432,3272066815,GB -3272066816,3272066847,NL -3272066848,3272066911,GB -3272066912,3272066943,NL -3272066944,3272067063,GB -3272067064,3272067071,NL -3272067072,3272067615,GB -3272067616,3272067647,NL -3272067648,3272067711,GB -3272067712,3272067775,NL -3272067776,3272067807,GB -3272067808,3272067839,NL -3272067840,3272067871,GB -3272067872,3272067887,NL -3272067888,3272067927,GB -3272067928,3272067967,NL -3272067968,3272069343,GB -3272069344,3272069375,IT -3272069376,3272069503,GB +3272065024,3272065631,GB +3272065632,3272065663,NL +3272065664,3272069503,GB 3272069504,3272069567,NL -3272069568,3272069599,GB -3272069600,3272069603,NL -3272069604,3272069607,GB -3272069608,3272069611,NL -3272069612,3272069615,GB -3272069616,3272069631,NL -3272069632,3272070143,GB -3272070144,3272070255,NL -3272070256,3272070263,GB -3272070264,3272070271,NL -3272070272,3272070399,GB -3272070400,3272070463,NL -3272070464,3272070559,GB -3272070560,3272070591,NL -3272070592,3272070623,GB -3272070624,3272070639,NL -3272070640,3272070647,GB -3272070648,3272070655,NL -3272070656,3272071247,GB -3272071248,3272071283,NL -3272071284,3272071287,GB -3272071288,3272071295,NL -3272071296,3272071359,GB -3272071360,3272071423,NL -3272071424,3272071615,GB -3272071616,3272071647,NL -3272071648,3272072319,GB -3272072320,3272072959,NL -3272072960,3272081407,GB +3272069568,3272070143,GB +3272070144,3272070175,NL +3272070176,3272070239,GB +3272070240,3272070255,NL +3272070256,3272081407,GB 3272081408,3272081919,PT 3272081920,3272082687,CV 3272082688,3272083455,PT 3272083456,3272083711,ST 3272083712,3272084735,PT 3272084736,3272084991,CV -3272084992,3272085503,GW +3272084992,3272085503,PT 3272085504,3272086015,AO 3272086016,3272086527,ST 3272086528,3272086655,AO 3272086656,3272086783,PT -3272086784,3272086807,GH +3272086784,3272086799,GH +3272086800,3272086807,PT 3272086808,3272086815,RO 3272086816,3272086831,NI 3272086832,3272086879,AO @@ -85100,9 +103569,7 @@ 3272086976,3272087039,AN 3272087040,3272087295,PT 3272087296,3272087551,AO -3272087552,3272088063,PT -3272088064,3272088319,GH -3272088320,3272089343,PT +3272087552,3272089343,PT 3272089344,3272089479,ST 3272089480,3272089535,PT 3272089536,3272089551,ST @@ -85144,8 +103611,7 @@ 3272111872,3272112383,RO 3272112384,3272113151,DE 3272113152,3272113407,FR -3272113408,3272113663,PL -3272113664,3272113919,GB +3272113408,3272113919,GB 3272113920,3272114175,AT 3272114176,3272122367,PL 3272122368,3272131071,GB @@ -85165,9 +103631,7 @@ 3272137728,3272138239,PL 3272138240,3272138751,BG 3272138752,3272146943,DE -3272146944,3272161023,RU -3272161024,3272161279,KZ -3272161280,3272178559,RU +3272146944,3272178559,RU 3272178560,3272178623,UA 3272178624,3272212479,RU 3272212480,3272212991,GB @@ -85208,29 +103672,10 @@ 3272214352,3272214407,FR 3272214408,3272214431,EU 3272214432,3272214463,SE -3272214464,3272214655,EU -3272214656,3272214671,NL -3272214672,3272214679,GB -3272214680,3272214687,FR -3272214688,3272214815,EU -3272214816,3272214823,CH -3272214824,3272214831,EU -3272214832,3272214847,BE -3272214848,3272214879,NL -3272214880,3272214883,EU -3272214884,3272214887,NL -3272214888,3272214895,EU -3272214896,3272214903,ES -3272214904,3272214911,SE -3272214912,3272214943,EU -3272214944,3272214951,DE -3272214952,3272214959,BE -3272214960,3272215007,NL -3272215008,3272215015,FR -3272215016,3272215023,IT -3272215024,3272215039,EU +3272214464,3272214527,EU +3272214528,3272215039,FR 3272215040,3272215295,ES -3272215296,3272215551,IR +3272215296,3272215551,NL 3272215552,3272215807,CH 3272215808,3272215823,NL 3272215824,3272215871,EU @@ -85299,8 +103744,8 @@ 3272219904,3272220159,DE 3272220160,3272220415,FR 3272220416,3272221183,GB -3272221184,3272221311,NL -3272221312,3272221439,EU +3272221184,3272221375,NL +3272221376,3272221439,EU 3272221440,3272221447,SE 3272221448,3272221455,NO 3272221456,3272221463,SE @@ -85326,7 +103771,9 @@ 3272224256,3272224383,GI 3272224384,3272224511,EU 3272224512,3272225279,GB -3272225280,3272225791,IT +3272225280,3272225535,IT +3272225536,3272225591,GB +3272225592,3272225791,IT 3272225792,3272226047,EU 3272226048,3272226815,FR 3272226816,3272227071,GB @@ -85349,11 +103796,65 @@ 3272228736,3272228799,NL 3272228800,3272228863,CH 3272228864,3272237055,LU -3272237056,3272240575,GB +3272237056,3272238919,GB +3272238920,3272238975,IM +3272238976,3272239039,GB +3272239040,3272239103,IM +3272239104,3272239687,GB +3272239688,3272239695,IM +3272239696,3272239703,GB +3272239704,3272239711,IM +3272239712,3272239775,GB +3272239776,3272239799,IM +3272239800,3272240127,GB +3272240128,3272240367,IM +3272240368,3272240575,GB 3272240576,3272240639,GH -3272240640,3272243967,GB -3272243968,3272244007,IM -3272244008,3272245247,GB +3272240640,3272241215,GB +3272241216,3272241247,IM +3272241248,3272241279,GB +3272241280,3272241295,IM +3272241296,3272241303,GB +3272241304,3272241311,IM +3272241312,3272241335,GB +3272241336,3272241343,IM +3272241344,3272241375,GB +3272241376,3272241407,IM +3272241408,3272241518,GB +3272241519,3272241599,IM +3272241600,3272241663,GB +3272241664,3272241855,IM +3272241856,3272242215,GB +3272242216,3272242223,IM +3272242224,3272242239,GB +3272242240,3272242591,IM +3272242592,3272242607,GB +3272242608,3272242623,IM +3272242624,3272242655,GB +3272242656,3272242719,IM +3272242720,3272242735,GB +3272242736,3272242751,IM +3272242752,3272242783,GB +3272242784,3272242943,IM +3272242944,3272243207,GB +3272243208,3272243215,IM +3272243216,3272243231,GB +3272243232,3272243263,IM +3272243264,3272243327,GB +3272243328,3272243455,IM +3272243456,3272244015,GB +3272244016,3272244031,IM +3272244032,3272244039,GB +3272244040,3272244047,IM +3272244048,3272244071,GB +3272244072,3272244079,IM +3272244080,3272244111,GB +3272244112,3272244127,IM +3272244128,3272244151,GB +3272244152,3272244159,IM +3272244160,3272244175,GB +3272244176,3272244215,IM +3272244216,3272245247,GB 3272245248,3272261631,FI 3272261632,3272261887,MT 3272261888,3272262143,BG @@ -85397,29 +103898,41 @@ 3272358912,3272359935,NL 3272359936,3272368127,RU 3272368128,3272376319,KZ -3272376320,3272384511,SK +3272376320,3272376447,SK +3272376448,3272376479,SR +3272376480,3272376495,SK +3272376496,3272376527,SR +3272376528,3272376535,SK +3272376536,3272376543,SR +3272376544,3272376607,SK +3272376608,3272376639,SR +3272376640,3272376735,SK +3272376736,3272376751,SR +3272376752,3272376767,SK +3272376768,3272376831,SR +3272376832,3272378183,SK +3272378184,3272378201,SR +3272378202,3272384511,SK 3272384512,3272392703,LT 3272392704,3272400895,AT -3272400896,3272400903,EU -3272400904,3272400927,GB +3272400896,3272400911,EU +3272400912,3272400927,GB 3272400928,3272401023,EU 3272401024,3272401087,GB -3272401088,3272401183,EU -3272401184,3272401199,GB -3272401200,3272401407,EU -3272401408,3272401919,ES +3272401088,3272401279,EU +3272401280,3272401407,NL +3272401408,3272401919,EU 3272401920,3272401951,GB -3272401952,3272401983,EU -3272401984,3272402015,DE -3272402016,3272402031,EU +3272401952,3272401967,SE +3272401968,3272401983,GB +3272401984,3272402031,DE 3272402032,3272402039,GB 3272402040,3272402047,US 3272402048,3272402079,EU 3272402080,3272402111,SE 3272402112,3272402175,EU 3272402176,3272402191,GB -3272402192,3272402239,EU -3272402240,3272402303,GB +3272402192,3272402303,EU 3272402304,3272402431,FR 3272402432,3272402447,EU 3272402448,3272402455,FR @@ -85427,14 +103940,13 @@ 3272402560,3272402623,GB 3272402624,3272402687,EU 3272402688,3272402815,SE -3272402816,3272402879,GB -3272402880,3272403007,EU +3272402816,3272403007,EU 3272403008,3272403023,FR 3272403024,3272403039,EU 3272403040,3272403055,DE 3272403056,3272403071,NL 3272403072,3272403199,FR -3272403200,3272403455,EU +3272403200,3272403455,SE 3272403456,3272404991,FR 3272404992,3272406015,DE 3272406016,3272407039,NL @@ -85544,7 +104056,8 @@ 3272646785,3272646911,GB 3272646912,3272647423,DE 3272647424,3272649215,GB -3272649216,3272649727,IE +3272649216,3272649471,IE +3272649472,3272649727,SA 3272649728,3272650623,GB 3272650624,3272650639,FR 3272650640,3272650655,GB @@ -85637,8 +104150,8 @@ 3272896512,3272897535,DE 3272897536,3272898047,FI 3272898048,3272898559,UA -3272898560,3272899071,DE -3272899072,3272899583,GB +3272898560,3272899327,DE +3272899328,3272899583,PL 3272899584,3272900095,UA 3272900096,3272900607,LV 3272900608,3272900863,RU @@ -85692,214 +104205,23 @@ 3272923648,3272924159,PL 3272924160,3272924671,DE 3272924672,3272925183,GB -3272925184,3272933375,DE -3272933376,3272933759,GB -3272933760,3272933775,DK -3272933776,3272934687,GB -3272934688,3272934703,DE -3272934704,3272934847,GB -3272934848,3272934911,DE -3272934912,3272935167,GB -3272935168,3272935679,DE -3272935680,3272936447,GB -3272936448,3272936479,DE -3272936480,3272936703,GB -3272936704,3272936719,DE -3272936720,3272936735,GB -3272936736,3272936895,DE -3272936896,3272936959,GB -3272936960,3272937087,DE -3272937088,3272937471,GB -3272937472,3272937535,DE -3272937536,3272937791,GB -3272937792,3272937903,DE -3272937904,3272937919,GB -3272937920,3272937983,DE -3272937984,3272938015,GB -3272938016,3272938063,DE -3272938064,3272938239,GB -3272938240,3272938271,DE -3272938272,3272938479,GB -3272938480,3272938495,DE -3272938496,3272939775,GB -3272939776,3272940223,DE -3272940224,3272940287,GB +3272925184,3272931135,DE +3272931136,3272931151,GB +3272931152,3272933375,DE +3272933376,3272940287,GB 3272940288,3272940543,DE -3272940544,3272940799,GB -3272940800,3272940831,DE -3272940832,3272941055,GB -3272941056,3272941311,DE -3272941312,3272943103,GB -3272943104,3272943167,DE -3272943168,3272943359,GB -3272943360,3272943391,DE -3272943392,3272943439,GB -3272943440,3272943455,DE -3272943456,3272943471,GB -3272943472,3272943487,DE -3272943488,3272943503,GB -3272943504,3272943535,DE -3272943536,3272943551,GB -3272943552,3272943583,DE -3272943584,3272944127,GB -3272944128,3272944191,DE -3272944192,3272944383,GB -3272944384,3272944415,DE -3272944416,3272944447,GB -3272944448,3272944463,DE -3272944464,3272944575,GB -3272944576,3272944607,DE -3272944608,3272944639,GB -3272944640,3272944959,DE -3272944960,3272945151,GB -3272945152,3272945423,DE -3272945424,3272945471,GB -3272945472,3272945487,DE -3272945488,3272945503,GB -3272945504,3272945519,DE -3272945520,3272945535,GB -3272945536,3272945551,DE -3272945552,3272945567,GB -3272945568,3272945599,DE -3272945600,3272945919,GB -3272945920,3272946229,DE -3272946230,3272946271,GB -3272946272,3272946287,DE -3272946288,3272946335,GB -3272946336,3272946351,DE -3272946352,3272946367,GB -3272946368,3272946383,DE -3272946384,3272946399,GB -3272946400,3272946415,DE -3272946416,3272946687,GB -3272946688,3272946751,DE -3272946752,3272946783,GB -3272946784,3272946831,DE -3272946832,3272946847,GB -3272946848,3272946863,DE -3272946864,3272947199,GB -3272947200,3272947215,DE -3272947216,3272947231,GB -3272947232,3272947247,DE -3272947248,3272947263,GB -3272947264,3272947279,DE -3272947280,3272947327,GB -3272947328,3272947343,DE -3272947344,3272962303,GB -3272962304,3272962319,DE -3272962320,3272962559,GB -3272962560,3272962688,DE -3272962689,3272964351,GB -3272964352,3272964607,DE -3272964608,3272966399,GB -3272966400,3272966975,DE -3272966976,3272967103,GB -3272967104,3272967167,DE -3272967168,3272967423,GB -3272967424,3272968191,DE -3272968192,3272968447,GB -3272968448,3272968703,DE -3272968704,3272968735,GB -3272968736,3272968879,DE -3272968880,3272968927,GB -3272968928,3272968959,DE -3272968960,3272969215,GB -3272969216,3272969279,DE -3272969280,3272969727,GB -3272969728,3272969791,DE -3272969792,3272970015,GB -3272970016,3272970079,DE -3272970080,3272970095,GB -3272970096,3272970175,DE -3272970176,3272971263,GB -3272971264,3272971519,DE -3272971520,3272972031,GB -3272972032,3272972287,DE -3272972288,3272974335,GB -3272974336,3272974367,DE -3272974368,3272975871,GB -3272975872,3272976383,DE -3272976384,3272976895,GB -3272976896,3272976927,DE -3272976928,3272976959,GB -3272976960,3272976991,DE -3272976992,3272977151,GB -3272977152,3272977407,DE -3272977408,3272978415,GB -3272978416,3272978687,DE -3272978688,3272979023,GB -3272979024,3272979103,DE -3272979104,3272979119,GB -3272979120,3272979167,DE -3272979168,3272979519,GB -3272979520,3272979535,DE -3272979536,3272979967,GB -3272979968,3272979999,DE -3272980000,3272980095,GB -3272980096,3272980127,DE -3272980128,3272980479,GB -3272980480,3272980607,DE -3272980608,3272980639,GB -3272980640,3272980767,DE -3272980768,3272980799,GB -3272980800,3272980863,DE -3272980864,3272980927,GB -3272980928,3272980943,DE -3272980944,3272981119,GB -3272981120,3272981215,DE -3272981216,3272981503,GB -3272981504,3272981759,DE -3272981760,3272982015,GB -3272982016,3272982527,DE -3272982528,3272982783,GB -3272982784,3272983039,DE -3272983040,3272983295,GB -3272983296,3272983343,DE -3272983344,3272983391,GB -3272983392,3272983423,DE -3272983424,3272983551,GB -3272983552,3272983823,DE -3272983824,3272984079,GB -3272984080,3272984095,DE -3272984096,3272984191,GB -3272984192,3272984255,DE -3272984256,3272985599,GB -3272985600,3272985615,DE -3272985616,3272985631,GB -3272985632,3272985647,DE -3272985648,3272985695,GB -3272985696,3272985871,DE -3272985872,3272985887,GB -3272985888,3272985935,DE -3272985936,3272985951,GB -3272985952,3272986047,DE -3272986048,3272986063,GB -3272986064,3272986079,DE -3272986080,3272986095,GB -3272986096,3272986111,DE -3272986112,3272988415,GB -3272988416,3272988927,DE -3272988928,3272989183,GB -3272989184,3272989199,DE -3272989200,3272990975,GB -3272990976,3272991007,DE -3272991008,3272994815,GB -3272994816,3272994847,DE -3272994848,3272994927,GB -3272994928,3272995008,DE -3272995009,3272995023,GB -3272995024,3272995055,DE -3272995056,3272996863,GB -3272996864,3272997119,DE -3272997120,3272998911,GB +3272940544,3272998911,GB 3272998912,3273007103,PT 3273007104,3273015295,CZ 3273015296,3273023487,SE 3273023488,3273024511,PL 3273024512,3273025535,NL 3273025536,3273026559,RU -3273027584,3273028607,UA +3273026560,3273028607,UA 3273028608,3273029631,PL +3273029632,3273029887,CH +3273029888,3273030143,GB +3273030144,3273030655,RU 3273030656,3273031679,PL 3273031680,3273032191,GB 3273032192,3273033215,UA @@ -85931,8 +104253,8 @@ 3273052040,3273052047,NL 3273052048,3273052063,GR 3273052064,3273052087,IT -3273052088,3273052111,GR -3273052112,3273052415,IT +3273052088,3273052095,DE +3273052096,3273052415,IT 3273052416,3273052671,GB 3273052672,3273052927,FR 3273052928,3273053183,DE @@ -85951,9 +104273,7 @@ 3273056128,3273056255,HK 3273056256,3273064447,MD 3273064448,3273129983,PT -3273129984,3273131999,DK -3273132000,3273132015,NO -3273132016,3273138175,DK +3273129984,3273138175,DK 3273138176,3273146367,BG 3273146368,3273148415,RU 3273148416,3273150463,LU @@ -85993,7 +104313,7 @@ 3273264640,3273265151,AT 3273265152,3273266175,UA 3273266176,3273266687,LV -3273266688,3273267711,PL +3273266688,3273267455,PL 3273267712,3273268223,GB 3273268224,3273268735,SE 3273268736,3273269247,RU @@ -86016,18 +104336,21 @@ 3273326984,3273326987,DE 3273326988,3273326991,EU 3273326992,3273327047,DE -3273327048,3273327279,EU -3273327280,3273327287,DE +3273327048,3273327263,EU +3273327264,3273327287,DE 3273327288,3273327359,EU 3273327360,3273327423,IE 3273327424,3273327511,GB 3273327512,3273327519,EU 3273327520,3273327551,IE -3273327552,3273328511,EU +3273327552,3273327583,GB +3273327584,3273328511,EU 3273328512,3273328639,DE 3273328640,3273329199,GB 3273329200,3273329215,DE -3273329216,3273329327,GB +3273329216,3273329279,GB +3273329280,3273329311,EU +3273329312,3273329327,GB 3273329328,3273329407,EU 3273329408,3273329423,GB 3273329424,3273329439,DE @@ -86044,9 +104367,10 @@ 3273331200,3273331711,EU 3273331712,3273331967,GB 3273331968,3273332031,DE -3273332032,3273332095,EU +3273332032,3273332095,GB 3273332096,3273332223,DE -3273332224,3273332543,EU +3273332224,3273332479,GB +3273332480,3273332543,EU 3273332544,3273332575,DE 3273332576,3273332607,EU 3273332608,3273332671,DE @@ -86169,7 +104493,8 @@ 3273372672,3273372927,GB 3273372928,3273373183,NL 3273373184,3273373455,GB -3273373456,3273373695,DE +3273373456,3273373567,DE +3273373568,3273373695,GB 3273373696,3273375231,EU 3273375232,3273375551,DE 3273375552,3273375743,EU @@ -86212,8 +104537,8 @@ 3273387552,3273387583,DE 3273387584,3273388159,EU 3273388160,3273388223,DE -3273388224,3273388799,EU -3273388800,3273388807,DE +3273388224,3273388543,EU +3273388544,3273388807,DE 3273388808,3273388815,EU 3273388816,3273388863,DE 3273388864,3273388871,EU @@ -86229,12 +104554,9 @@ 3273390208,3273390335,EU 3273390336,3273390463,DE 3273390464,3273391103,EU -3273391104,3273391327,DE -3273391328,3273391343,EU -3273391344,3273391359,DE +3273391104,3273391359,DE 3273391360,3273391871,EU 3273391872,3273392127,DE -3273392128,3273392639,UA 3273392640,3273393663,RO 3273393664,3273394175,BG 3273394176,3273394687,RO @@ -86262,29 +104584,13 @@ 3273437184,3273437695,RO 3273437696,3273438207,PL 3273438208,3273438719,IL -3273438720,3273439231,PL 3273439232,3273439743,RO +3273439744,3273440255,DE 3273440256,3273440767,RO 3273440768,3273441279,AT -3273441280,3273441599,GB -3273441600,3273441607,FR -3273441608,3273441647,GB -3273441648,3273441759,FR -3273441760,3273442111,GB -3273442112,3273442127,FR -3273442128,3273442143,GB -3273442144,3273442151,FR -3273442152,3273442303,GB -3273442304,3273442331,FR -3273442332,3273442335,GB -3273442336,3273442367,FR -3273442368,3273442431,GB -3273442432,3273442559,FR -3273442560,3273443071,GB -3273443072,3273443080,FR -3273443081,3273443327,GB -3273443328,3273443839,FR -3273443840,3273449471,GB +3273441280,3273443327,GB +3273443328,3273444095,FR +3273444096,3273449471,GB 3273449472,3273457663,CH 3273457664,3273523199,HR 3273523200,3273588735,DE @@ -86376,7 +104682,6 @@ 3273878528,3273879039,DE 3273879040,3273879551,BE 3273879552,3273880063,GB -3273880064,3273880575,LV 3273880576,3273881087,RU 3273881088,3273881343,RO 3273881344,3273881599,CH @@ -86433,7 +104738,8 @@ 3274172416,3274172927,UA 3274172928,3274173439,DE 3274173440,3274173951,GR -3274173952,3274174463,DE +3274173952,3274174207,GB +3274174208,3274174463,CZ 3274174464,3274175487,UA 3274175488,3274175999,BE 3274176000,3274176511,DE @@ -86513,7 +104819,6 @@ 3274398208,3274399231,RU 3274399232,3274399743,SC 3274399744,3274407935,LU -3274407936,3274408191,ES 3274408192,3274408447,IT 3274408448,3274408703,NL 3274408704,3274408959,SI @@ -86540,7 +104845,7 @@ 3274414336,3274414591,CH 3274414592,3274414847,NL 3274414848,3274415103,IE -3274415104,3274415359,GR +3274415104,3274415359,PL 3274415360,3274415615,GB 3274415616,3274415871,NL 3274415872,3274416127,SI @@ -86759,7 +105064,7 @@ 3274692864,3274693119,AT 3274693120,3274693375,LT 3274693376,3274693631,UA -3274693632,3274693887,NL +3274693632,3274693887,KZ 3274693888,3274694143,IT 3274694144,3274694399,DK 3274694400,3274694655,GB @@ -86790,7 +105095,8 @@ 3274700800,3274701055,UA 3274701056,3274701311,DE 3274701312,3274701567,TJ -3274701568,3274702079,IT +3274701568,3274701823,IT +3274701824,3274702079,IL 3274702080,3274702335,UA 3274702336,3274702591,SE 3274702592,3274702847,KZ @@ -87003,7 +105309,8 @@ 3274964928,3274964991,GB 3274964992,3275030527,DE 3275030528,3275096063,ES -3275096064,3275105279,RU +3275096064,3275104767,RU +3275104768,3275105279,DE 3275105280,3275105791,GB 3275105792,3275106303,NL 3275106304,3275106815,RU @@ -87013,7 +105320,7 @@ 3275108352,3275108863,FR 3275108864,3275109375,PL 3275109376,3275109887,UA -3275109888,3275110399,DE +3275109888,3275110399,RO 3275110400,3275110911,NL 3275110912,3275111423,GB 3275111424,3275111935,IT @@ -87056,40 +105363,34 @@ 3275423752,3275423775,EU 3275423776,3275423807,GB 3275423808,3275423871,EU -3275423872,3275424295,GB -3275424296,3275424319,EU -3275424320,3275424447,GB -3275424448,3275424511,EU -3275424512,3275424639,GB -3275424640,3275425791,EU -3275425792,3275427271,GB -3275427272,3275427279,EU -3275427280,3275427583,GB -3275427584,3275427839,EU -3275427840,3275428375,GB -3275428376,3275428383,EU -3275428384,3275428399,GB -3275428400,3275429887,EU +3275423872,3275425167,GB +3275425168,3275425791,EU +3275425792,3275428399,GB +3275428400,3275428415,EU +3275428416,3275428447,GB +3275428448,3275429887,EU 3275429888,3275430143,GB 3275430144,3275430271,EU 3275430272,3275430399,GB 3275430400,3275430591,EU -3275430592,3275430623,GB -3275430624,3275431935,EU -3275431936,3275432703,GB -3275432704,3275433983,EU -3275433984,3275437567,GB -3275437568,3275438079,EU -3275438080,3275438615,GB -3275438616,3275440127,EU +3275430592,3275430631,GB +3275430632,3275430655,EU +3275430656,3275430911,GB +3275430912,3275431935,EU +3275431936,3275432831,GB +3275432832,3275433983,EU +3275433984,3275439459,GB +3275439460,3275439463,EU +3275439464,3275439615,GB +3275439616,3275440127,EU 3275440128,3275440639,GB 3275440640,3275442175,EU 3275442176,3275442719,GB 3275442720,3275444223,EU 3275444224,3275444735,GB 3275444736,3275446271,EU -3275446272,3275447063,GB -3275447064,3275448319,EU +3275446272,3275447151,GB +3275447152,3275448319,EU 3275448320,3275449519,GB 3275449520,3275449527,FR 3275449528,3275450879,GB @@ -87098,21 +105399,16 @@ 3275451264,3275452415,EU 3275452416,3275454127,GB 3275454128,3275454143,EU -3275454144,3275454383,GB -3275454384,3275454463,EU -3275454464,3275456447,GB -3275456448,3275456511,EU -3275456512,3275457023,GB +3275454144,3275457023,GB 3275457024,3275457791,FK 3275457792,3275458559,GB 3275458560,3275460095,IE -3275460096,3275460607,EU +3275460096,3275460223,GB +3275460224,3275460607,EU 3275460608,3275460863,HK 3275460864,3275463523,GB 3275463524,3275463527,EU -3275463528,3275463551,GB -3275463552,3275463679,EU -3275463680,3275464031,GB +3275463528,3275464031,GB 3275464032,3275464047,IE 3275464048,3275468655,GB 3275468656,3275468671,IE @@ -87122,12 +105418,16 @@ 3275468768,3275468799,IE 3275468800,3275469071,GB 3275469072,3275469087,IE -3275469088,3275469695,GB -3275469696,3275469951,EU -3275469952,3275469983,GB -3275469984,3275470847,EU -3275470848,3275471359,GB -3275471360,3275489279,EU +3275469088,3275473615,GB +3275473616,3275474943,EU +3275474944,3275474995,GB +3275474996,3275475071,EU +3275475072,3275475199,GB +3275475200,3275476991,EU +3275476992,3275477079,GB +3275477080,3275477503,EU +3275477504,3275477567,GB +3275477568,3275489279,EU 3275489280,3275497471,GB 3275497472,3275505663,DE 3275505664,3275506175,PL @@ -87144,7 +105444,6 @@ 3275510016,3275510079,SE 3275510080,3275510143,ES 3275510144,3275510207,FI -3275510208,3275510271,SE 3275510336,3275510399,IE 3275510400,3275510463,NL 3275510464,3275510527,GB @@ -87153,6 +105452,7 @@ 3275510624,3275510655,EE 3275510656,3275510687,FR 3275510720,3275510751,GB +3275510752,3275510783,NL 3275510784,3275510911,RU 3275510912,3275511167,GB 3275511168,3275511295,LV @@ -87170,7 +105470,7 @@ 3275512832,3275512895,SE 3275512896,3275512959,AT 3275512960,3275513023,PL -3275513024,3275513151,UA +3275513024,3275513087,UA 3275513152,3275513215,ES 3275513216,3275513279,CH 3275513280,3275513343,DK @@ -87186,7 +105486,6 @@ 3275530752,3275531263,AT 3275531264,3275531775,GB 3275531776,3275532287,IE -3275532288,3275532799,CH 3275532800,3275533823,GB 3275533824,3275534335,UA 3275534336,3275534847,IL @@ -87203,9 +105502,8 @@ 3275542528,3275543551,DE 3275543552,3275544575,NL 3275544576,3275545599,PL -3275545600,3275546623,EU -3275546624,3275547647,UA -3275547648,3275548671,RU +3275545600,3275546623,RU +3275546624,3275548671,UA 3275548672,3275549695,IL 3275549696,3275550719,SY 3275550720,3275551743,PL @@ -87391,6 +105689,7 @@ 3275628032,3275628543,IL 3275628544,3275629567,RU 3275629568,3275630079,UA +3275630080,3275630591,RU 3275630592,3275631103,PL 3275631104,3275631615,FR 3275631616,3275632127,DE @@ -87398,9 +105697,7 @@ 3275633152,3275633663,FR 3275633664,3275634687,RU 3275634688,3275635199,RO -3275635200,3275635711,RU -3275635712,3275636223,CZ -3275636224,3275636735,RU +3275635200,3275636735,RU 3275636736,3275637247,PL 3275637248,3275637759,SE 3275637760,3275638271,BE @@ -87438,6 +105735,7 @@ 3275789312,3275789823,UA 3275789824,3275790335,PL 3275790336,3275790847,MD +3275790848,3275791359,UA 3275791360,3275791871,RU 3275791872,3275792383,PL 3275792384,3275792895,BG @@ -87459,9 +105757,7 @@ 3275808768,3275816959,UA 3275816960,3275818207,CH 3275818208,3275818215,DE -3275818216,3275881335,CH -3275881336,3275881343,DE -3275881344,3275882495,CH +3275818216,3275882495,CH 3275882496,3275884543,DE 3275884544,3275886591,IT 3275886592,3275888639,PL @@ -87481,7 +105777,8 @@ 3275902720,3275902975,UA 3275902976,3275903231,FR 3275903232,3275903487,GB -3275903488,3275903999,DE +3275903488,3275903743,FR +3275903744,3275903999,DE 3275904000,3275904255,RU 3275904256,3275904511,CH 3275904512,3275904767,PL @@ -87506,7 +105803,7 @@ 3275909888,3275910143,SI 3275910144,3275910399,RU 3275910400,3275910655,DK -3275910656,3275910911,CH +3275910656,3275910911,UA 3275910912,3275911167,DE 3275911168,3275911423,FR 3275911424,3275911679,RO @@ -87523,6 +105820,7 @@ 3275914496,3275914751,BG 3275914752,3275915007,RU 3275915008,3275915263,PT +3275915264,3275915775,SA 3275915776,3275916287,SE 3275916288,3275916799,US 3275916800,3275917311,NL @@ -87584,13 +105882,21 @@ 3276014192,3276014207,GB 3276014208,3276014255,FR 3276014256,3276014263,GB -3276014264,3276014471,FR +3276014264,3276014335,FR +3276014336,3276014343,GB +3276014344,3276014471,FR 3276014472,3276014495,GB -3276014496,3276014887,FR +3276014496,3276014775,FR +3276014776,3276014783,GB +3276014784,3276014815,FR +3276014816,3276014823,GB +3276014824,3276014887,FR 3276014888,3276014895,IE -3276014896,3276014951,FR -3276014952,3276014959,GB -3276014960,3276015103,FR +3276014896,3276014943,FR +3276014944,3276014951,GB +3276014952,3276015031,FR +3276015032,3276015039,GB +3276015040,3276015103,FR 3276015104,3276015119,GB 3276015120,3276015199,FR 3276015200,3276015231,GB @@ -87598,11 +105904,15 @@ 3276015248,3276015263,GB 3276015264,3276015295,FR 3276015296,3276015327,GB -3276015328,3276015415,FR +3276015328,3276015383,FR +3276015384,3276015391,GB +3276015392,3276015415,FR 3276015416,3276015423,GB 3276015424,3276015559,FR -3276015560,3276015583,GB -3276015584,3276015879,FR +3276015560,3276015599,GB +3276015600,3276015855,FR +3276015856,3276015863,GB +3276015864,3276015879,FR 3276015880,3276015887,GB 3276015888,3276016391,FR 3276016392,3276016399,GB @@ -87644,10 +105954,12 @@ 3276018096,3276018127,GB 3276018128,3276018143,FR 3276018144,3276018159,GB -3276018160,3276018375,FR +3276018160,3276018239,FR +3276018240,3276018271,GB +3276018272,3276018375,FR 3276018376,3276018383,GB -3276018384,3276018431,FR -3276018432,3276018447,GB +3276018384,3276018423,FR +3276018424,3276018447,GB 3276018448,3276018495,FR 3276018496,3276018527,GB 3276018528,3276018543,FR @@ -87660,29 +105972,29 @@ 3276019024,3276019071,GB 3276019072,3276019135,FR 3276019136,3276019151,GB -3276019152,3276019463,FR -3276019464,3276019471,GB -3276019472,3276019503,FR -3276019504,3276019511,GB -3276019512,3276019535,FR +3276019152,3276019535,FR 3276019536,3276019543,GB 3276019544,3276019559,FR 3276019560,3276019599,GB 3276019600,3276019639,FR -3276019640,3276019647,GB -3276019648,3276019679,FR +3276019640,3276019663,GB +3276019664,3276019679,FR 3276019680,3276019687,GB 3276019688,3276019695,FR 3276019696,3276019703,GB -3276019704,3276019823,FR +3276019704,3276019719,FR +3276019720,3276019743,GB +3276019744,3276019823,FR 3276019824,3276019831,GB 3276019832,3276019839,FR 3276019840,3276019855,GB 3276019856,3276019863,FR -3276019864,3276019887,GB -3276019888,3276019919,FR +3276019864,3276019871,GB +3276019872,3276019919,FR 3276019920,3276019927,GB -3276019928,3276020407,FR +3276019928,3276019959,FR +3276019960,3276019967,GB +3276019968,3276020407,FR 3276020408,3276020415,GB 3276020416,3276020503,FR 3276020504,3276020511,GB @@ -87696,13 +106008,17 @@ 3276020880,3276020887,GB 3276020888,3276020943,FR 3276020944,3276020991,GB -3276020992,3276021591,FR +3276020992,3276021103,FR +3276021104,3276021111,GB +3276021112,3276021591,FR 3276021592,3276021599,GB -3276021600,3276022039,FR -3276022040,3276022047,GB -3276022048,3276022087,FR -3276022088,3276022095,GB -3276022096,3276022127,FR +3276021600,3276021815,FR +3276021816,3276021823,GB +3276021824,3276021847,FR +3276021848,3276021855,GB +3276021856,3276022031,FR +3276022032,3276022039,GB +3276022040,3276022127,FR 3276022128,3276022143,GB 3276022144,3276022215,FR 3276022216,3276022223,GB @@ -87712,7 +106028,9 @@ 3276022456,3276022463,GB 3276022464,3276022479,FR 3276022480,3276022495,GB -3276022496,3276022519,FR +3276022496,3276022503,FR +3276022504,3276022511,GB +3276022512,3276022519,FR 3276022520,3276022527,GB 3276022528,3276022567,FR 3276022568,3276022639,GB @@ -87730,23 +106048,19 @@ 3276023072,3276023079,GB 3276023080,3276023103,FR 3276023104,3276023279,GB -3276023280,3276023687,FR -3276023688,3276023695,GB -3276023696,3276023727,FR +3276023280,3276023727,FR 3276023728,3276023743,GB 3276023744,3276023759,FR 3276023760,3276023767,GB 3276023768,3276023871,FR 3276023872,3276023887,GB -3276023888,3276023903,FR -3276023904,3276023919,GB -3276023920,3276023943,FR +3276023888,3276023943,FR 3276023944,3276023951,GB 3276023952,3276023959,FR 3276023960,3276023967,GB 3276023968,3276024719,FR -3276024720,3276024831,GB -3276024832,3276025111,FR +3276024720,3276024767,GB +3276024768,3276025111,FR 3276025112,3276025135,GB 3276025136,3276025151,FR 3276025152,3276025159,GB @@ -87760,9 +106074,7 @@ 3276025248,3276025279,GB 3276025280,3276025295,FR 3276025296,3276025327,GB -3276025328,3276026143,FR -3276026144,3276026159,GB -3276026160,3276026167,FR +3276025328,3276026167,FR 3276026168,3276026175,GB 3276026176,3276026191,FR 3276026192,3276026199,GB @@ -87771,9 +106083,7 @@ 3276026224,3276026319,FR 3276026320,3276026351,GB 3276026352,3276026423,FR -3276026424,3276026431,GB -3276026432,3276026439,FR -3276026440,3276026447,GB +3276026424,3276026447,GB 3276026448,3276026527,FR 3276026528,3276026535,GB 3276026536,3276026543,FR @@ -87860,7 +106170,9 @@ 3276030256,3276030263,GB 3276030264,3276030271,FR 3276030272,3276030303,GB -3276030304,3276030407,FR +3276030304,3276030319,FR +3276030320,3276030335,GB +3276030336,3276030407,FR 3276030408,3276030415,GB 3276030416,3276030463,FR 3276030464,3276030495,GB @@ -87883,15 +106195,17 @@ 3276031744,3276032007,FR 3276032008,3276032015,GB 3276032016,3276032023,FR -3276032024,3276032031,GB -3276032032,3276032055,FR +3276032024,3276032047,GB +3276032048,3276032055,FR 3276032056,3276032063,GB 3276032064,3276032103,FR 3276032104,3276032111,GB -3276032112,3276032223,FR +3276032112,3276032191,FR +3276032192,3276032207,GB +3276032208,3276032223,FR 3276032224,3276032255,GB -3276032256,3276032271,FR -3276032272,3276032303,GB +3276032256,3276032263,FR +3276032264,3276032303,GB 3276032304,3276032319,FR 3276032320,3276032343,GB 3276032344,3276032367,FR @@ -87926,39 +106240,33 @@ 3276033880,3276033887,GB 3276033888,3276033927,FR 3276033928,3276033951,GB -3276033952,3276036095,FR -3276036096,3276036103,GB -3276036104,3276036111,FR -3276036112,3276036119,GB -3276036120,3276036191,FR -3276036192,3276036207,GB -3276036208,3276036223,FR -3276036224,3276036255,GB -3276036256,3276036271,FR -3276036272,3276036287,GB -3276036288,3276036303,FR -3276036304,3276036335,GB -3276036336,3276036343,FR -3276036344,3276036351,GB -3276036352,3276036383,FR +3276033952,3276036271,FR +3276036272,3276036279,DE +3276036280,3276036383,FR 3276036384,3276036415,GB 3276036416,3276036591,FR 3276036592,3276036607,GB -3276036608,3276037199,FR +3276036608,3276036671,FR +3276036672,3276036863,GB +3276036864,3276037127,FR +3276037128,3276037135,GB +3276037136,3276037199,FR 3276037200,3276037215,GB 3276037216,3276037359,FR 3276037360,3276037375,GB -3276037376,3276037695,FR -3276037696,3276037743,GB +3276037376,3276037703,FR +3276037704,3276037743,GB 3276037744,3276037887,FR 3276037888,3276037903,GB 3276037904,3276037959,FR 3276037960,3276037983,GB 3276037984,3276038047,FR 3276038048,3276038111,GB -3276038112,3276038143,FR -3276038144,3276038399,GB -3276038400,3276038703,FR +3276038112,3276038159,FR +3276038160,3276038399,GB +3276038400,3276038663,FR +3276038664,3276038671,GB +3276038672,3276038703,FR 3276038704,3276038719,GB 3276038720,3276038735,FR 3276038736,3276038767,GB @@ -87966,35 +106274,29 @@ 3276038800,3276038815,GB 3276038816,3276038847,FR 3276038848,3276038911,GB -3276038912,3276039199,FR -3276039200,3276039247,GB +3276038912,3276038919,FR +3276038920,3276039167,GB +3276039168,3276039207,FR +3276039208,3276039247,GB 3276039248,3276039279,FR 3276039280,3276039295,GB 3276039296,3276039327,FR 3276039328,3276039343,GB 3276039344,3276039391,FR 3276039392,3276039423,GB -3276039424,3276039551,FR -3276039552,3276039567,GB -3276039568,3276039647,FR -3276039648,3276039663,GB -3276039664,3276039943,FR -3276039944,3276039951,GB -3276039952,3276039967,FR +3276039424,3276039967,FR 3276039968,3276040031,GB 3276040032,3276040063,FR 3276040064,3276040095,GB 3276040096,3276040159,FR 3276040160,3276040175,GB -3276040176,3276040191,FR -3276040192,3276040215,GB -3276040216,3276040231,FR +3276040176,3276040231,FR 3276040232,3276040239,GB 3276040240,3276040319,FR 3276040320,3276040327,GB -3276040328,3276040335,FR -3276040336,3276040367,GB -3276040368,3276040439,FR +3276040328,3276040391,FR +3276040392,3276040399,GB +3276040400,3276040439,FR 3276040440,3276040495,GB 3276040496,3276040543,FR 3276040544,3276040575,GB @@ -88004,8 +106306,8 @@ 3276040640,3276040671,GB 3276040672,3276040879,FR 3276040880,3276040895,GB -3276040896,3276040991,FR -3276040992,3276041007,GB +3276040896,3276040975,FR +3276040976,3276041007,GB 3276041008,3276041071,FR 3276041072,3276041087,GB 3276041088,3276041199,FR @@ -88014,8 +106316,8 @@ 3276041280,3276041311,GB 3276041312,3276041391,FR 3276041392,3276041407,GB -3276041408,3276041487,FR -3276041488,3276041503,GB +3276041408,3276041495,FR +3276041496,3276041503,GB 3276041504,3276041519,FR 3276041520,3276041535,GB 3276041536,3276041551,FR @@ -88028,27 +106330,23 @@ 3276041920,3276041951,GB 3276041952,3276041967,FR 3276041968,3276041983,GB -3276041984,3276041999,FR -3276042000,3276042007,GB -3276042008,3276042015,FR -3276042016,3276042143,GB +3276041984,3276042047,FR +3276042048,3276042143,GB 3276042144,3276042175,FR 3276042176,3276042191,GB 3276042192,3276042207,FR 3276042208,3276042239,GB -3276042240,3276042767,FR -3276042768,3276042815,GB +3276042240,3276042775,FR +3276042776,3276042815,GB 3276042816,3276042831,FR 3276042832,3276042847,GB -3276042848,3276044303,FR -3276044304,3276044319,GB +3276042848,3276044311,FR +3276044312,3276044319,GB 3276044320,3276044351,FR 3276044352,3276044359,GB 3276044360,3276044367,FR 3276044368,3276044375,GB -3276044376,3276044447,FR -3276044448,3276044463,GB -3276044464,3276044479,FR +3276044376,3276044479,FR 3276044480,3276044495,GB 3276044496,3276044511,FR 3276044512,3276044543,GB @@ -88070,13 +106368,7 @@ 3276044992,3276044999,GB 3276045000,3276045023,FR 3276045024,3276045039,GB -3276045040,3276045063,FR -3276045064,3276045071,GB -3276045072,3276045111,FR -3276045112,3276045127,GB -3276045128,3276045135,FR -3276045136,3276045151,GB -3276045152,3276045191,FR +3276045040,3276045191,FR 3276045192,3276045199,GB 3276045200,3276045223,FR 3276045224,3276045239,GB @@ -88094,9 +106386,9 @@ 3276045480,3276045487,GB 3276045488,3276045543,FR 3276045544,3276045551,GB -3276045552,3276045567,FR -3276045568,3276045599,GB -3276045600,3276045631,FR +3276045552,3276045583,FR +3276045584,3276045607,GB +3276045608,3276045631,FR 3276045632,3276045647,GB 3276045648,3276045767,FR 3276045768,3276045783,GB @@ -88131,7 +106423,8 @@ 3276074496,3276075007,GB 3276075008,3276075519,RU 3276075520,3276076031,DE -3276076032,3276076543,GB +3276076032,3276076287,NL +3276076288,3276076543,RU 3276076544,3276077055,DE 3276077056,3276077567,UA 3276077568,3276078079,FR @@ -88171,14 +106464,14 @@ 3276127232,3276128255,UZ 3276128256,3276129279,AT 3276129280,3276131327,UA -3276131328,3276132351,DK 3276132352,3276133375,PL 3276133376,3276134399,GB 3276134400,3276135423,RU 3276135424,3276136447,UA +3276136448,3276137471,NL 3276137472,3276138495,PL 3276138496,3276139519,NL -3276139520,3276140543,IL +3276139520,3276140543,RU 3276140544,3276141567,DE 3276141568,3276143615,UA 3276143616,3276144639,GB @@ -88190,11 +106483,7 @@ 3276185600,3276193791,NO 3276193792,3276201983,RU 3276201984,3276210175,AT -3276210176,3276233791,DE -3276233792,3276233799,RO -3276233800,3276233807,DE -3276233808,3276233823,RO -3276233824,3276234303,DE +3276210176,3276234303,DE 3276234304,3276234367,GB 3276234368,3276241759,DE 3276241760,3276241767,FR @@ -88209,11 +106498,9 @@ 3276250096,3276275711,DE 3276275712,3276283903,SK 3276283904,3276292095,GB -3276292096,3276292479,BE -3276292480,3276292511,LU -3276292512,3276299295,BE -3276299296,3276299327,CH -3276299328,3276300287,BE +3276292096,3276294655,BE +3276294656,3276294663,LU +3276294664,3276300287,BE 3276300288,3276304383,DE 3276304384,3276304639,BG 3276304640,3276305407,GB @@ -88229,8 +106516,8 @@ 3276316672,3276324863,GB 3276324864,3276333055,IT 3276333056,3276341247,RU -3276341248,3276341263,NL -3276341264,3276341279,DE +3276341248,3276341271,NL +3276341272,3276341279,DE 3276341280,3276341535,NL 3276341536,3276341543,DE 3276341544,3276341655,NL @@ -88837,9 +107124,7 @@ 3276361680,3276361687,DE 3276361688,3276361751,NL 3276361752,3276361767,DE -3276361768,3276361999,NL -3276362000,3276362007,DE -3276362008,3276362047,NL +3276361768,3276362047,NL 3276362048,3276362055,DE 3276362056,3276362071,NL 3276362072,3276362079,DE @@ -90271,6 +108556,7 @@ 3276425472,3276425727,DE 3276425728,3276425983,RU 3276425984,3276426239,IT +3276426240,3276426495,CZ 3276426496,3276426751,DK 3276426752,3276427007,RO 3276427008,3276427263,PL @@ -90315,13 +108601,12 @@ 3276474368,3276474623,EU 3276474624,3276474879,GB 3276474880,3276475015,EU -3276475016,3276475063,IT -3276475064,3276475071,EU -3276475072,3276475135,IT -3276475136,3276475903,EU -3276475904,3276475951,IT -3276475952,3276475983,EU -3276475984,3276476039,IT +3276475016,3276475023,IT +3276475024,3276475039,FR +3276475040,3276475055,EU +3276475056,3276475071,IT +3276475072,3276475903,EU +3276475904,3276476039,IT 3276476040,3276476047,EU 3276476048,3276476111,IT 3276476112,3276476119,GB @@ -90333,27 +108618,25 @@ 3276477984,3276478319,EU 3276478320,3276478335,CH 3276478336,3276478463,EU -3276478464,3276479127,FR -3276479128,3276479135,EU -3276479136,3276479167,FR +3276478464,3276479167,FR 3276479168,3276479199,EU 3276479200,3276479215,FR 3276479216,3276479223,EU -3276479224,3276479343,FR -3276479344,3276479351,EU -3276479352,3276479615,FR +3276479224,3276479279,FR +3276479280,3276479343,EU +3276479344,3276479351,GB +3276479352,3276479359,EU +3276479360,3276479615,FR 3276479616,3276479647,EU 3276479648,3276479743,FR 3276479744,3276479999,EU -3276480000,3276480095,FR -3276480096,3276480111,EU -3276480112,3276480159,FR +3276480000,3276480143,FR +3276480144,3276480151,EU +3276480152,3276480159,FR 3276480160,3276480191,EU -3276480192,3276480295,FR -3276480296,3276480303,EU -3276480304,3276480319,FR -3276480320,3276480351,EU -3276480352,3276480375,FR +3276480192,3276480319,FR +3276480320,3276480335,EU +3276480336,3276480375,FR 3276480376,3276480399,EU 3276480400,3276480439,FR 3276480440,3276480455,EU @@ -90385,27 +108668,38 @@ 3276489216,3276490751,EU 3276490752,3276491263,NL 3276491264,3276491327,CZ -3276491328,3276491391,EU +3276491328,3276491359,EU +3276491360,3276491391,NO 3276491392,3276491775,CZ 3276491776,3276491847,GB 3276491848,3276491855,EU -3276491856,3276492055,GB -3276492056,3276492063,EU +3276491856,3276492047,GB +3276492048,3276492063,EU 3276492064,3276492127,GB 3276492128,3276492143,EU 3276492144,3276492151,GB 3276492152,3276492287,EU -3276492288,3276492487,GB -3276492488,3276492495,EU -3276492496,3276493215,GB +3276492288,3276492831,GB +3276492832,3276492839,EU +3276492840,3276493135,GB +3276493136,3276493151,EU +3276493152,3276493215,GB 3276493216,3276493247,EU -3276493248,3276494383,GB -3276494384,3276494415,EU -3276494416,3276495503,GB +3276493248,3276494367,GB +3276494368,3276494415,EU +3276494416,3276494471,GB +3276494472,3276494479,EU +3276494480,3276495439,GB +3276495440,3276495455,EU +3276495456,3276495503,GB 3276495504,3276495519,EU -3276495520,3276495679,GB -3276495680,3276495775,EU -3276495776,3276496639,GB +3276495520,3276495543,GB +3276495544,3276495551,EU +3276495552,3276495763,GB +3276495764,3276495767,EU +3276495768,3276495831,GB +3276495832,3276495839,EU +3276495840,3276496639,GB 3276496640,3276496895,EU 3276496896,3276497151,DE 3276497152,3276497215,EU @@ -90421,10 +108715,8 @@ 3276497648,3276497663,EU 3276497664,3276497919,DE 3276497920,3276498047,GB -3276498048,3276498303,EU -3276498304,3276498311,GB -3276498312,3276498319,EU -3276498320,3276498431,GB +3276498048,3276498175,EU +3276498176,3276498431,GB 3276498432,3276499199,DE 3276499200,3276499455,EU 3276499456,3276499503,DE @@ -90432,10 +108724,8 @@ 3276499520,3276499615,DE 3276499616,3276499679,EU 3276499680,3276499759,DE -3276499760,3276499775,EU -3276499776,3276499791,DE -3276499792,3276499799,EU -3276499800,3276499823,DE +3276499760,3276499791,EU +3276499792,3276499823,DE 3276499824,3276499935,EU 3276499936,3276499999,DE 3276500000,3276500031,CH @@ -90448,8 +108738,8 @@ 3276500992,3276501023,DE 3276501024,3276501055,FR 3276501056,3276501119,EU -3276501120,3276501167,DE -3276501168,3276501247,EU +3276501120,3276501183,DE +3276501184,3276501247,EU 3276501248,3276501503,DE 3276501504,3276502271,EU 3276502272,3276505087,DE @@ -90485,8 +108775,8 @@ 3276508928,3276509183,EU 3276509184,3276510207,IT 3276510208,3276510719,EU -3276510720,3276510735,IT -3276510736,3276510783,EU +3276510720,3276510751,IT +3276510752,3276510783,EU 3276510784,3276510815,IT 3276510816,3276510847,EU 3276510848,3276510911,GB @@ -90526,19 +108816,17 @@ 3276517904,3276517951,NL 3276517952,3276518015,EU 3276518016,3276518023,NL -3276518024,3276518055,EU -3276518056,3276518063,NL -3276518064,3276518095,EU +3276518024,3276518095,EU 3276518096,3276518111,NL 3276518112,3276518127,EU -3276518128,3276518175,NL -3276518176,3276518183,EU -3276518184,3276518191,NL +3276518128,3276518191,NL 3276518192,3276518207,EU 3276518208,3276518271,NL 3276518272,3276518303,EU 3276518304,3276518335,NL -3276518336,3276518399,EU +3276518336,3276518351,EU +3276518352,3276518367,NL +3276518368,3276518399,EU 3276518400,3276518527,BE 3276518528,3276518591,EU 3276518592,3276518655,BE @@ -90549,8 +108837,8 @@ 3276520192,3276520223,BE 3276520224,3276520255,GB 3276520256,3276520415,BE -3276520416,3276520431,EU -3276520432,3276520447,BE +3276520416,3276520423,EU +3276520424,3276520447,BE 3276520448,3276520463,EU 3276520464,3276520591,SE 3276520592,3276520607,EU @@ -90563,19 +108851,21 @@ 3276520832,3276520927,SE 3276520928,3276520943,EU 3276520944,3276521215,SE -3276521216,3276521983,EU +3276521216,3276521471,EU +3276521472,3276521487,RO +3276521488,3276521983,EU 3276521984,3276523519,NL 3276523520,3276523791,EU 3276523792,3276523911,NO -3276523912,3276523927,EU -3276523928,3276523951,NO +3276523912,3276523919,EU +3276523920,3276523951,NO 3276523952,3276523967,EU 3276523968,3276524031,NO 3276524032,3276524063,EU 3276524064,3276524095,TR 3276524096,3276524191,EU -3276524192,3276524279,TR -3276524280,3276524543,EU +3276524192,3276524287,TR +3276524288,3276524543,EU 3276524544,3276524799,GB 3276524800,3276524855,PT 3276524856,3276525039,EU @@ -90586,7 +108876,9 @@ 3276525528,3276525535,PL 3276525536,3276525567,HR 3276525568,3276526079,EU -3276526080,3276526111,CH +3276526080,3276526087,CH +3276526088,3276526095,EU +3276526096,3276526111,CH 3276526112,3276526143,EU 3276526144,3276526159,CH 3276526160,3276526335,EU @@ -90613,12 +108905,18 @@ 3276528368,3276528399,BE 3276528400,3276528447,EU 3276528448,3276528503,BE -3276528504,3276528559,EU +3276528504,3276528511,EU +3276528512,3276528519,BE +3276528520,3276528527,EU +3276528528,3276528543,BE +3276528544,3276528559,EU 3276528560,3276528567,BE 3276528568,3276528575,EU 3276528576,3276528719,BE 3276528720,3276528727,EU -3276528728,3276528799,BE +3276528728,3276528735,BE +3276528736,3276528767,EU +3276528768,3276528799,BE 3276528800,3276528815,GB 3276528816,3276528831,EU 3276528832,3276528895,BE @@ -90637,9 +108935,9 @@ 3276529376,3276529391,EU 3276529392,3276529407,TR 3276529408,3276529663,EU -3276529664,3276530455,NL -3276530456,3276530463,EU -3276530464,3276530495,NL +3276529664,3276530447,NL +3276530448,3276530455,EU +3276530456,3276530495,NL 3276530496,3276530559,EU 3276530560,3276532735,NL 3276532736,3276532775,TR @@ -90658,20 +108956,20 @@ 3276533776,3276533791,GB 3276533792,3276533823,EU 3276533824,3276533887,IE -3276533888,3276533919,EU -3276533920,3276533951,IE +3276533888,3276533927,EU +3276533928,3276533951,IE 3276533952,3276533983,EU 3276533984,3276534015,IE -3276534016,3276534399,EU -3276534400,3276534415,GB +3276534016,3276534271,EU +3276534272,3276534415,GB 3276534416,3276534431,NL 3276534432,3276534463,GB 3276534464,3276534495,FR 3276534496,3276534543,EU 3276534544,3276534591,NL 3276534592,3276534623,EU -3276534624,3276534671,NL -3276534672,3276534687,EU +3276534624,3276534655,NL +3276534656,3276534687,EU 3276534688,3276534719,NL 3276534720,3276534783,EU 3276534784,3276534879,NL @@ -90687,16 +108985,18 @@ 3276535104,3276535311,EU 3276535312,3276535319,FI 3276535320,3276535335,EU -3276535336,3276535359,FI +3276535336,3276535343,FI +3276535344,3276535351,EU +3276535352,3276535359,FI 3276535360,3276535375,EU -3276535376,3276535423,FI -3276535424,3276535551,EU +3276535376,3276535455,FI +3276535456,3276535551,EU 3276535552,3276535807,PK 3276535808,3276536063,FI 3276536064,3276536319,EU 3276536320,3276536430,ES -3276536431,3276536447,EU -3276536448,3276536511,ES +3276536431,3276536439,EU +3276536440,3276536511,ES 3276536512,3276536583,EU 3276536584,3276536591,HR 3276536592,3276536639,EU @@ -90707,8 +109007,8 @@ 3276536736,3276536743,HU 3276536744,3276536831,EU 3276536832,3276536895,ES -3276536896,3276536967,EU -3276536968,3276536991,ES +3276536896,3276536959,EU +3276536960,3276536991,ES 3276536992,3276537151,EU 3276537152,3276537215,AT 3276537216,3276537343,EU @@ -90757,11 +109057,13 @@ 3276697600,3276698111,UA 3276698112,3276699647,RU 3276699648,3276700159,NL +3276700160,3276700671,CZ 3276700672,3276701183,RO 3276701184,3276701695,RU 3276701696,3276709887,SE 3276709888,3276718079,DE 3276718080,3276726271,IT +3276726272,3276727295,SE 3276727296,3276728319,ES 3276728320,3276729343,UA 3276729344,3276730367,PL @@ -91140,11 +109442,12 @@ 3276799872,3276799999,NL 3276800000,3276824575,GB 3276824576,3276832767,EE -3276832768,3276834495,GB -3276834496,3276834503,FR -3276834504,3276834815,GB +3276832768,3276834815,PL +3276834816,3276835839,RU +3276835840,3276836351,UA +3276836352,3276836863,RO 3276836864,3276837887,RU -3276837888,3276838911,EU +3276837888,3276838911,PL 3276838912,3276840959,FR 3276840960,3276849151,SK 3276849152,3276857343,DE @@ -91183,101 +109486,120 @@ 3276869856,3276869887,GB 3276869888,3276870143,NL 3276870144,3276871679,IT -3276871680,3276872479,DE +3276871680,3276872255,DE +3276872256,3276872319,CZ +3276872320,3276872479,DE 3276872480,3276872511,GB 3276872512,3276872703,DE 3276872704,3276873727,GB -3276873728,3276874751,ES +3276873728,3276874367,ES +3276874368,3276874495,GB +3276874496,3276874559,ES +3276874560,3276874751,GB 3276874752,3276875007,NL 3276875008,3276875263,CH 3276875264,3276875775,NL 3276875776,3276876031,GB 3276876032,3276876287,DK -3276876288,3276876367,NL -3276876368,3276876799,GB -3276876800,3276876823,AT -3276876824,3276877303,GB -3276877304,3276877311,AT -3276877312,3276877535,GB +3276876288,3276876415,NL +3276876416,3276876431,GB +3276876432,3276876541,NL +3276876542,3276877535,GB 3276877536,3276877551,AT -3276877552,3276877559,GB -3276877560,3276877567,AT -3276877568,3276877815,GB -3276877816,3276877823,AT -3276877824,3276877831,BG -3276877832,3276878079,GB +3276877552,3276878079,GB 3276878080,3276878335,BG -3276878336,3276879103,GB -3276879104,3276879359,ES +3276878336,3276878399,GB +3276878400,3276878431,FR +3276878432,3276878463,ES +3276878464,3276878559,FR +3276878560,3276878591,GB +3276878592,3276878847,FR +3276878848,3276879359,ES 3276879360,3276879423,TR 3276879424,3276879615,GB 3276879616,3276879871,TR -3276879872,3276880639,DK -3276880640,3276881663,GB -3276881664,3276881919,FR -3276881920,3276883391,IT -3276883392,3276883455,GB -3276883456,3276883839,IT -3276883840,3276883967,GB -3276883968,3276884487,PL -3276884488,3276884735,GB +3276879872,3276880895,DK +3276880896,3276881215,DE +3276881216,3276881279,GB +3276881280,3276881407,DE +3276881408,3276881919,FR +3276881920,3276883327,IT +3276883328,3276883391,GB +3276883392,3276883967,IT +3276883968,3276884495,PL +3276884496,3276884735,GB 3276884736,3276884991,PL 3276884992,3276886015,GB 3276886016,3276886271,RO -3276886272,3276886527,GB -3276886528,3276886911,DE -3276886912,3276887167,GB -3276887168,3276888063,DE +3276886272,3276886943,DE +3276886944,3276886959,GB +3276886960,3276886991,DE +3276886992,3276887047,GB +3276887048,3276887055,DE +3276887056,3276887071,GB +3276887072,3276888063,DE 3276888064,3276888575,GB -3276888576,3276888831,AT -3276888832,3276889087,GB -3276889088,3276890111,AT +3276888576,3276889087,IT +3276889088,3276890111,GB 3276890112,3276890135,US 3276890136,3276890143,GB -3276890144,3276890191,US -3276890192,3276890367,GB +3276890144,3276890223,US +3276890224,3276890367,GB 3276890368,3276890623,US 3276890624,3276891135,IT -3276891136,3276891391,GB +3276891136,3276891391,BE 3276891392,3276892159,US -3276892160,3276893695,IT -3276893696,3276894207,GB -3276894208,3276895999,IT +3276892160,3276893950,IT +3276893951,3276893951,GB +3276893952,3276895999,IT 3276896000,3276896255,CZ -3276896256,3276896831,BE +3276896256,3276896767,BE +3276896768,3276896831,GB 3276896832,3276896847,SE -3276896848,3276896895,GB +3276896848,3276896863,BE +3276896864,3276896895,GB 3276896896,3276896927,BE 3276896928,3276897023,GB -3276897024,3276897279,BE -3276897280,3276898047,GB -3276898048,3276898303,CZ -3276898304,3276898775,CH +3276897024,3276897663,BE +3276897664,3276897919,GB +3276897920,3276898303,CZ +3276898304,3276898399,CH +3276898400,3276898407,GB +3276898408,3276898655,CH +3276898656,3276898671,GB +3276898672,3276898775,CH 3276898776,3276898783,GB -3276898784,3276900039,CH +3276898784,3276899071,CH +3276899072,3276899087,GB +3276899088,3276900039,CH 3276900040,3276900047,GB 3276900048,3276900351,CH 3276900352,3276900607,GB -3276900608,3276900831,CH -3276900832,3276900863,GB -3276900864,3276901119,CH -3276901120,3276901375,GB -3276901376,3276901391,CH -3276901392,3276901887,GB -3276901888,3276902151,CH +3276900608,3276901503,CH +3276901504,3276901519,ES +3276901520,3276901551,CH +3276901552,3276901559,GB +3276901560,3276901623,CH +3276901624,3276901631,GB +3276901632,3276902151,CH 3276902152,3276902159,GB -3276902160,3276902175,CH -3276902176,3276902207,GB -3276902208,3276902271,CH -3276902272,3276902399,GB +3276902160,3276902335,CH +3276902336,3276902399,GB 3276902400,3276902583,SE 3276902584,3276902615,GB 3276902616,3276902639,SE 3276902640,3276902655,GB -3276902656,3276903311,SE -3276903312,3276903423,GB -3276903424,3276903935,SE -3276903936,3276905311,GB +3276902656,3276903319,SE +3276903320,3276903327,GB +3276903328,3276903359,NO +3276903360,3276903935,SE +3276903936,3276903999,GB +3276904000,3276904079,SE +3276904080,3276904095,GB +3276904096,3276904127,SE +3276904128,3276904191,GB +3276904192,3276904447,SE +3276904448,3276905311,GB 3276905312,3276905319,ES 3276905320,3276905471,GB 3276905472,3276905727,SE @@ -91288,32 +109610,48 @@ 3276906240,3276906279,SE 3276906280,3276906287,GB 3276906288,3276906295,SE -3276906296,3276906495,GB -3276906496,3276906823,NL +3276906296,3276906303,GB +3276906304,3276906319,SE +3276906320,3276906495,GB +3276906496,3276906623,NL +3276906624,3276906751,GB +3276906752,3276906823,NL 3276906824,3276906831,CH -3276906832,3276907551,NL -3276907552,3276907775,GB -3276907776,3276908159,NL -3276908160,3276908287,GB -3276908288,3276908543,NL -3276908544,3276909823,GB -3276909824,3276910591,NL -3276910592,3276910967,IT -3276910968,3276910975,GB -3276910976,3276911615,IT -3276911616,3276911871,GB -3276911872,3276912615,IT +3276906832,3276907339,NL +3276907340,3276907343,GB +3276907344,3276907551,NL +3276907552,3276907567,BE +3276907568,3276907643,NL +3276907644,3276907647,GB +3276907648,3276907663,NL +3276907664,3276907679,BE +3276907680,3276907687,GB +3276907688,3276908159,NL +3276908160,3276908175,CH +3276908176,3276908183,NL +3276908184,3276908191,GB +3276908192,3276909055,NL +3276909056,3276909567,GB +3276909568,3276910591,NL +3276910592,3276912615,IT 3276912616,3276912623,GB -3276912624,3276913183,IT -3276913184,3276913215,GB -3276913216,3276913919,IT +3276912624,3276913199,IT +3276913200,3276913215,GB +3276913216,3276913359,IT +3276913360,3276913360,GB +3276913361,3276913374,IT +3276913375,3276913375,GB +3276913376,3276913919,IT 3276913920,3276913983,US -3276913984,3276914143,IT -3276914144,3276914159,GB -3276914160,3276914687,IT +3276913984,3276914079,IT +3276914080,3276914095,GB +3276914096,3276914687,IT 3276914688,3276915567,ES -3276915568,3276915583,GB -3276915584,3276916175,ES +3276915568,3276915583,NL +3276915584,3276915711,GB +3276915712,3276916087,ES +3276916088,3276916095,GB +3276916096,3276916175,ES 3276916176,3276916183,GB 3276916184,3276917231,ES 3276917232,3276917247,GB @@ -91336,15 +109674,13 @@ 3276921344,3276921399,GB 3276921400,3276921403,DK 3276921404,3276921599,GB -3276921600,3276921607,DE -3276921608,3276921615,GB -3276921616,3276922623,DE +3276921600,3276922623,DE 3276922624,3276923431,FR 3276923432,3276923439,GB -3276923440,3276924071,FR -3276924072,3276924079,GB -3276924080,3276926735,FR -3276926736,3276931071,GB +3276923440,3276923447,FR +3276923448,3276923455,DE +3276923456,3276926847,FR +3276926848,3276931071,GB 3276931072,3276939263,KZ 3276939264,3276955647,DE 3276955648,3276963839,GB @@ -91376,9 +109712,8 @@ 3277179392,3277179647,DE 3277179648,3277180159,BE 3277180160,3277180415,NL -3277180416,3277180671,GB +3277180416,3277180671,RU 3277180672,3277180927,FR -3277180928,3277181183,DE 3277181184,3277181439,PL 3277181440,3277181695,DE 3277181696,3277181951,RO @@ -91405,7 +109740,7 @@ 3277187072,3277187327,GB 3277187328,3277187583,UA 3277187584,3277188351,RU -3277188352,3277188607,GB +3277188352,3277188607,DE 3277188608,3277188863,RU 3277188864,3277189119,RO 3277189120,3277189375,DE @@ -91492,13 +109827,12 @@ 3277359616,3277360127,UA 3277360128,3277360639,BG 3277360640,3277361151,CZ -3277361152,3277361663,UA 3277361664,3277362175,RU 3277362176,3277362687,ES -3277362688,3277363199,IE +3277362688,3277363199,GB 3277363200,3277363711,ES 3277363712,3277364223,RU -3277364224,3277364735,GB +3277364224,3277364735,NL 3277364736,3277365247,UA 3277365248,3277365759,NL 3277365760,3277366271,GR @@ -91509,7 +109843,6 @@ 3277368320,3277369343,RO 3277369344,3277369855,CY 3277369856,3277370367,RU -3277370368,3277370879,SE 3277370880,3277371391,RO 3277371392,3277371903,RU 3277371904,3277372415,PL @@ -91538,17 +109871,18 @@ 3277386240,3277386751,UA 3277386752,3277387263,SA 3277387264,3277388287,RU -3277388288,3277388799,SE +3277388288,3277388543,RO +3277388544,3277388799,HU 3277388800,3277389311,RU 3277389312,3277389823,AM 3277389824,3277394943,GB 3277394944,3277395455,US -3277395456,3277395951,GB -3277395952,3277395967,IE -3277395968,3277452647,GB +3277395456,3277452647,GB 3277452648,3277452655,DK 3277452656,3277455359,GB -3277455360,3277463551,DE +3277455360,3277456895,DE +3277456896,3277457151,CH +3277457152,3277463551,DE 3277463552,3277463807,GB 3277463808,3277464063,US 3277464064,3277464575,FR @@ -91680,13 +110014,13 @@ 3277822208,3277822463,ES 3277822464,3277822719,PL 3277822720,3277822975,RU -3277822976,3277823231,FR +3277822976,3277823231,ES 3277823232,3277823487,UA 3277823488,3277823743,SI 3277823744,3277823999,UA 3277824000,3277824255,TR 3277824256,3277824511,SI -3277824768,3277825023,AT +3277824512,3277825023,AT 3277825024,3277825279,PL 3277825280,3277825535,UA 3277825536,3277826047,RO @@ -91720,8 +110054,8 @@ 3277835776,3277836287,UA 3277836288,3277836799,FI 3277836800,3277837311,UA -3277837312,3277838847,RU -3277838848,3277839359,BY +3277837312,3277839103,RU +3277839104,3277839359,CH 3277839360,3277839871,DE 3277839872,3277840383,UA 3277840384,3277840895,FR @@ -91740,16 +110074,23 @@ 3277856768,3277864959,DE 3277864960,3277873151,RU 3277873152,3277881343,NL -3277881344,3277884175,IT +3277881344,3277881375,A2 +3277881376,3277881407,IT +3277881408,3277884175,A2 3277884176,3277884191,IR -3277884192,3277885439,IT -3277885440,3277885727,LB -3277885728,3277885951,IT -3277885952,3277886207,LB -3277886208,3277886975,IR -3277886976,3277888255,IT +3277884192,3277885439,A2 +3277885440,3277885695,IQ +3277885696,3277885727,LB +3277885728,3277885951,A2 +3277885952,3277886463,LB +3277886464,3277886719,IQ +3277886720,3277886975,IR +3277886976,3277887487,IQ +3277887488,3277888255,A2 3277888256,3277888319,LB -3277888320,3277889535,IT +3277888320,3277889023,A2 +3277889024,3277889279,IQ +3277889280,3277889535,A2 3277889536,3277897727,RU 3277897728,3277905919,IT 3277905920,3277914111,BG @@ -91772,19 +110113,19 @@ 3278103296,3278110719,GB 3278110720,3278110751,SE 3278110752,3278110767,ES -3278110768,3278111239,SE -3278111240,3278111247,ES -3278111248,3278115327,SE +3278110768,3278115327,SE 3278115328,3278116607,ES 3278116608,3278116863,SE 3278116864,3278118399,ES -3278118400,3278119935,SE +3278118400,3278118911,SE +3278118912,3278118975,NL +3278118976,3278119935,SE 3278119936,3278119943,DE -3278119944,3278119967,SE -3278119968,3278119975,NO -3278119976,3278120151,SE +3278119944,3278120151,SE 3278120152,3278120159,DE -3278120160,3278161631,SE +3278120160,3278125055,SE +3278125056,3278125567,NL +3278125568,3278161631,SE 3278161632,3278161647,DE 3278161648,3278168111,SE 3278168112,3278168119,DK @@ -91812,7 +110153,7 @@ 3278769152,3278769663,FR 3278769664,3278770175,DE 3278770176,3278770687,DK -3278770688,3278771199,DE +3278770688,3278771711,DE 3278771712,3278772223,NL 3278772224,3278772735,BG 3278772736,3278773247,DE @@ -92056,8 +110397,7 @@ 3278939048,3278939055,FR 3278939056,3278939063,DE 3278939064,3278939067,ES -3278939068,3278939071,IT -3278939072,3278939075,DE +3278939068,3278939075,DE 3278939076,3278939079,CH 3278939080,3278939083,DE 3278939084,3278939087,IT @@ -92168,14 +110508,14 @@ 3278939712,3278939715,CY 3278939716,3278939723,TR 3278939724,3278939727,MC -3278939728,3278939731,TR +3278939728,3278939731,DE 3278939732,3278939735,AT 3278939736,3278939739,RU 3278939740,3278939743,HU 3278939744,3278939747,GB 3278939748,3278939751,ES 3278939752,3278939755,GR -3278939756,3278939759,AO +3278939756,3278939759,DE 3278939760,3278939763,FR 3278939764,3278939767,GR 3278939768,3278939771,ES @@ -92587,8 +110927,7 @@ 3278942180,3278942183,FR 3278942184,3278942187,DK 3278942188,3278942191,IT -3278942192,3278942199,DE -3278942200,3278942203,GB +3278942192,3278942203,DE 3278942204,3278942207,CH 3278942208,3278942211,TW 3278942212,3278942227,AU @@ -92760,9 +111099,7 @@ 3278942836,3278942837,DE 3278942838,3278942838,ES 3278942839,3278942839,FR -3278942840,3278942841,DE -3278942842,3278942842,IT -3278942843,3278942843,DE +3278942840,3278942843,DE 3278942844,3278942844,ES 3278942845,3278942850,DE 3278942851,3278942851,HU @@ -92883,7 +111220,7 @@ 3278943011,3278943011,DE 3278943012,3278943012,CZ 3278943013,3278943013,IT -3278943014,3278943014,AT +3278943014,3278943014,DE 3278943015,3278943016,ES 3278943017,3278943017,FR 3278943018,3278943018,CH @@ -92916,7 +111253,8 @@ 3278943049,3278943049,GB 3278943050,3278943050,IT 3278943051,3278943051,AT -3278943052,3278943053,IT +3278943052,3278943052,DE +3278943053,3278943053,IT 3278943054,3278943056,DE 3278943057,3278943057,CH 3278943058,3278943058,FR @@ -93218,9 +111556,7 @@ 3278943440,3278943440,DK 3278943441,3278943441,IT 3278943442,3278943442,FR -3278943443,3278943443,DE -3278943444,3278943444,GB -3278943445,3278943445,DE +3278943443,3278943445,DE 3278943446,3278943446,CH 3278943447,3278943447,DE 3278943448,3278943448,FR @@ -93367,8 +111703,7 @@ 3278943625,3278943625,FR 3278943626,3278943628,DE 3278943629,3278943630,FR -3278943631,3278943631,CH -3278943632,3278943632,DE +3278943631,3278943632,DE 3278943633,3278943633,GB 3278943634,3278943634,DE 3278943635,3278943635,IT @@ -93594,7 +111929,7 @@ 3278943912,3278943913,IT 3278943914,3278943914,DE 3278943915,3278943915,PL -3278943916,3278943916,IT +3278943916,3278943916,DE 3278943917,3278943917,FR 3278943918,3278943918,ES 3278943919,3278943920,FR @@ -93692,7 +112027,7 @@ 3278944036,3278944036,US 3278944037,3278944037,FR 3278944038,3278944038,GB -3278944039,3278944039,ES +3278944039,3278944039,DE 3278944040,3278944040,FR 3278944041,3278944041,DE 3278944042,3278944042,FR @@ -94191,9 +112526,7 @@ 3278945833,3278945833,GB 3278945834,3278945834,NL 3278945835,3278945835,CH -3278945836,3278945838,DE -3278945839,3278945839,CZ -3278945840,3278945840,DE +3278945836,3278945840,DE 3278945841,3278945841,CH 3278945842,3278945844,DE 3278945845,3278945845,ES @@ -94318,7 +112651,7 @@ 3279053312,3279053823,DE 3279053824,3279054335,NL 3279054336,3279054847,GB -3279054848,3279055359,PL +3279054848,3279055359,RU 3279055360,3279055871,SA 3279055872,3279056383,TR 3279056384,3279056895,GB @@ -94336,9 +112669,8 @@ 3279078656,3279078911,FR 3279078912,3279084543,ES 3279084544,3279085567,IT -3279085568,3279090687,NL -3279090688,3279090943,DE -3279090944,3279093759,NL +3279085568,3279093503,NL +3279093504,3279093759,DE 3279093760,3279103103,FR 3279103104,3279103135,GB 3279103136,3279119295,FR @@ -94511,7 +112843,9 @@ 3279586000,3279586303,DE 3279586304,3279586559,GB 3279586560,3279588095,DE -3279588096,3279588607,GB +3279588096,3279588255,GB +3279588256,3279588287,DE +3279588288,3279588607,GB 3279588608,3279588863,DE 3279588864,3279589375,GB 3279589376,3279589887,DE @@ -94551,11 +112885,17 @@ 3279601664,3279609855,CZ 3279609856,3279618047,RU 3279618048,3279683583,UA -3279683584,3279744391,DE +3279683584,3279723215,DE +3279723216,3279723223,A2 +3279723224,3279744391,DE 3279744392,3279744399,PL 3279744400,3279752959,DE 3279752960,3279753215,CH -3279753216,3279897583,DE +3279753216,3279789439,DE +3279789440,3279789455,PL +3279789456,3279840663,DE +3279840664,3279840671,A2 +3279840672,3279897583,DE 3279897584,3279897591,GB 3279897592,3279946751,DE 3279946752,3279947775,SE @@ -94571,6 +112911,34 @@ 3279972352,3279974399,AT 3279974400,3279976447,PL 3279976448,3279978495,RU +3279978496,3279978751,SI +3279978752,3279979007,NL +3279979008,3279979263,RO +3279979264,3279979519,SA +3279979520,3279979775,BG +3279979776,3279980031,RU +3279980032,3279980287,BG +3279980288,3279980543,PL +3279980544,3279980799,RO +3279980800,3279981055,RU +3279981056,3279981311,GB +3279981312,3279981567,UA +3279981568,3279981823,PL +3279981824,3279982079,SI +3279982080,3279982335,PL +3279982336,3279982591,FR +3279982592,3279982847,DE +3279982848,3279983103,IL +3279983104,3279983615,FR +3279983616,3279983871,PL +3279983872,3279984127,FR +3279984128,3279984383,AT +3279984384,3279984639,RO +3279984640,3279985151,RU +3279985152,3279985407,PL +3279985408,3279985663,CZ +3279985664,3279985919,DE +3279985920,3279986687,RU 3279986688,3279987199,NL 3279987200,3279987711,RU 3279987712,3279988223,RO @@ -94682,7 +113050,7 @@ 3280126976,3280127231,CH 3280127232,3280127487,PL 3280127488,3280127743,AT -3280127744,3280127999,EU +3280127744,3280127999,NL 3280128000,3280128255,SE 3280128256,3280128511,GB 3280128512,3280129023,HU @@ -94716,71 +113084,13 @@ 3280355328,3280371711,GR 3280371712,3280379903,CH 3280379904,3280388095,FR -3280388096,3280388159,GB -3280388160,3280388191,FR -3280388192,3280388735,GB -3280388736,3280388759,FR -3280388760,3280390719,GB +3280388096,3280390719,GB 3280390720,3280390751,FR -3280390752,3280390783,GB -3280390784,3280390815,FR -3280390816,3280390879,GB -3280390880,3280390911,FR -3280390912,3280391423,GB -3280391424,3280391551,FR -3280391552,3280391583,GB -3280391584,3280391743,FR -3280391744,3280391775,GB -3280391776,3280391807,FR -3280391808,3280391967,GB -3280391968,3280392007,FR -3280392008,3280392031,GB -3280392032,3280392063,FR -3280392064,3280392095,GB -3280392096,3280392127,FR -3280392128,3280392191,CH -3280392192,3280392319,FR -3280392320,3280392383,GB -3280392384,3280392415,FR -3280392416,3280392447,GB -3280392448,3280392463,FR -3280392464,3280392639,GB -3280392640,3280392671,FR -3280392672,3280392703,GB +3280390752,3280392703,GB 3280392704,3280392831,FR -3280392832,3280393023,GB -3280393024,3280393055,FR -3280393056,3280393087,GB -3280393088,3280393151,FR -3280393152,3280393343,GB -3280393344,3280393375,FR -3280393376,3280393407,GB -3280393408,3280393503,FR -3280393504,3280393599,GB -3280393600,3280393631,FR -3280393632,3280393695,GB -3280393696,3280393727,FR -3280393728,3280394367,GB -3280394368,3280394431,FR -3280394432,3280394463,GB -3280394464,3280394495,FR -3280394496,3280394527,GB -3280394528,3280394559,FR -3280394560,3280394623,GB -3280394624,3280394751,FR -3280394752,3280395263,GB +3280392832,3280395263,GB 3280395264,3280395519,FR -3280395520,3280395647,GB -3280395648,3280395839,FR -3280395840,3280396031,GB -3280396032,3280396055,FR -3280396056,3280396071,GB -3280396072,3280396095,FR -3280396096,3280396191,GB -3280396192,3280396223,FR -3280396224,3280396255,GB -3280396256,3280396263,FR -3280396264,3280396287,GB +3280395520,3280396287,GB 3280396288,3280404479,FI 3280404480,3280437247,IT 3280437248,3280453631,DE @@ -94792,10 +113102,10 @@ 3280458752,3280459775,RU 3280459776,3280460799,DK 3280460800,3280462847,DE -3280462848,3280463871,DK +3280462848,3280463871,PL 3280463872,3280466943,RU 3280466944,3280467967,UA -3280467968,3280468991,GB +3280467968,3280468991,ES 3280468992,3280470015,CY 3280470016,3280535551,PL 3280535552,3280568319,GB @@ -94829,7 +113139,7 @@ 3280583424,3280583679,RU 3280583680,3280583935,PS 3280583936,3280584191,PL -3280584192,3280584447,RO +3280584192,3280584447,KW 3280584448,3280584703,DE 3280584704,3280585215,UA 3280585216,3280585727,DK @@ -94843,7 +113153,8 @@ 3280589312,3280590335,DE 3280590336,3280590847,NL 3280590848,3280591359,DE -3280591360,3280592383,GB +3280591360,3280591871,UA +3280591872,3280592383,GB 3280592384,3280592895,TR 3280592896,3280593407,DE 3280593408,3280593919,UA @@ -94867,9 +113178,7 @@ 3280625664,3280633855,MD 3280633856,3280635807,BG 3280635808,3280635815,DE -3280635816,3280638207,BG -3280638208,3280638463,A2 -3280638464,3280642047,BG +3280635816,3280642047,BG 3280642048,3280650239,UA 3280650240,3280650495,RO 3280650496,3280650751,UA @@ -94933,1391 +113242,259 @@ 3280796672,3280797695,CZ 3280797696,3280810783,CH 3280810784,3280810799,DE -3280810800,3280844292,CH -3280844293,3280844295,GB -3280844296,3280863231,CH +3280810800,3280863231,CH 3280863232,3280928767,TR -3280928768,3280928768,GB -3280928769,3280928769,DE -3280928770,3280928771,GB -3280928772,3280928791,DE -3280928792,3280928799,GB -3280928800,3280928815,DE -3280928816,3280928831,GB -3280928832,3280928843,DE -3280928844,3280928847,GB -3280928848,3280928849,DE -3280928850,3280928854,GB -3280928855,3280928859,DE -3280928860,3280928895,GB -3280928896,3280928906,DE -3280928907,3280928907,GB -3280928908,3280928927,DE -3280928928,3280928960,GB -3280928961,3280928961,DE -3280928962,3280928962,GB -3280928963,3280928963,DE -3280928964,3280928964,GB -3280928965,3280928965,DE -3280928966,3280928991,GB -3280928992,3280928998,DE -3280928999,3280929007,GB -3280929008,3280929015,DE -3280929016,3280929055,GB -3280929056,3280929096,DE -3280929097,3280929098,GB -3280929099,3280929099,DE -3280929100,3280929100,GB -3280929101,3280929101,DE -3280929102,3280929119,GB -3280929120,3280929151,DE -3280929152,3280929183,GB -3280929184,3280929247,DE -3280929248,3280929255,GB -3280929256,3280929259,DE -3280929260,3280929263,GB -3280929264,3280929271,DE -3280929272,3280929272,GB -3280929273,3280929273,DE -3280929274,3280929274,GB -3280929275,3280929276,DE -3280929277,3280929277,GB -3280929278,3280929278,DE -3280929279,3280929343,GB -3280929344,3280929367,DE -3280929368,3280929375,GB -3280929376,3280929395,DE -3280929396,3280929399,GB -3280929400,3280929403,DE -3280929404,3280929404,GB -3280929405,3280929406,DE -3280929407,3280929455,GB -3280929456,3280929487,DE -3280929488,3280929503,GB -3280929504,3280929527,DE -3280929528,3280929531,GB -3280929532,3280929534,DE -3280929535,3280929551,GB -3280929552,3280929583,DE -3280929584,3280929599,GB -3280929600,3280929615,DE -3280929616,3280929639,GB -3280929640,3280929641,DE -3280929642,3280929642,GB -3280929643,3280929645,DE -3280929646,3280929647,GB -3280929648,3280929655,DE -3280929656,3280929663,GB -3280929664,3280929695,DE -3280929696,3280929696,GB -3280929697,3280929697,DE -3280929698,3280929698,GB -3280929699,3280929699,DE -3280929700,3280929700,GB -3280929701,3280929703,DE -3280929704,3280929711,GB -3280929712,3280929727,DE -3280929728,3280929792,GB -3280929793,3280929799,DE -3280929800,3280929827,GB -3280929828,3280929839,DE -3280929840,3280929855,GB -3280929856,3280929887,DE -3280929888,3280929888,GB -3280929889,3280929889,DE -3280929890,3280930047,GB -3280930048,3280930079,DE -3280930080,3280930087,GB -3280930088,3280930091,DE -3280930092,3280930095,GB -3280930096,3280930111,DE -3280930112,3280930127,GB -3280930128,3280930155,DE -3280930156,3280930175,GB -3280930176,3280930177,DE -3280930178,3280930180,GB -3280930181,3280930182,DE -3280930183,3280930190,GB -3280930191,3280930191,DE -3280930192,3280930197,GB -3280930198,3280930198,DE -3280930199,3280930199,GB -3280930200,3280930239,DE -3280930240,3280930351,GB -3280930352,3280930367,DE -3280930368,3280930383,GB -3280930384,3280930391,DE -3280930392,3280930407,GB -3280930408,3280930420,DE -3280930421,3280930421,GB -3280930422,3280930431,DE -3280930432,3280930464,GB -3280930465,3280930465,DE -3280930466,3280930466,GB -3280930467,3280930495,DE -3280930496,3280930511,GB -3280930512,3280930515,DE -3280930516,3280930524,GB -3280930525,3280930535,DE -3280930536,3280930537,GB -3280930538,3280930541,DE -3280930542,3280930561,GB -3280930562,3280930562,DE -3280930563,3280930563,GB -3280930564,3280930575,DE -3280930576,3280930579,GB -3280930580,3280930591,DE -3280930592,3280930639,GB -3280930640,3280930655,DE -3280930656,3280930671,GB -3280930672,3280930687,DE -3280930688,3280930719,GB -3280930720,3280930731,DE -3280930732,3280930735,GB -3280930736,3280930743,DE -3280930744,3280930747,GB -3280930748,3280930759,DE -3280930760,3280930767,GB -3280930768,3280930771,DE -3280930772,3280930779,GB -3280930780,3280930783,DE -3280930784,3280930807,GB -3280930808,3280930812,DE -3280930813,3280930818,GB -3280930819,3280930819,DE -3280930820,3280930822,GB -3280930823,3280930823,DE -3280930824,3280930863,GB -3280930864,3280930868,DE -3280930869,3280930869,GB -3280930870,3280930870,DE -3280930871,3280930879,GB -3280930880,3280930911,DE -3280930912,3280930919,GB -3280930920,3280930927,DE -3280930928,3280930959,GB -3280930960,3280930983,DE -3280930984,3280931103,GB -3280931104,3280931119,DE -3280931120,3280931135,GB -3280931136,3280931143,DE -3280931144,3280931154,GB -3280931155,3280931155,DE -3280931156,3280931157,GB -3280931158,3280931158,DE -3280931159,3280931159,GB -3280931160,3280931167,DE -3280931168,3280931175,GB -3280931176,3280931180,DE -3280931181,3280931191,GB -3280931192,3280931193,DE -3280931194,3280931194,GB -3280931195,3280931199,DE -3280931200,3280931327,GB -3280931328,3280931631,DE -3280931632,3280931633,GB -3280931634,3280931634,DE -3280931635,3280931635,GB -3280931636,3280931639,DE -3280931640,3280931649,GB -3280931650,3280931650,DE -3280931651,3280931655,GB -3280931656,3280931663,DE -3280931664,3280931815,GB -3280931816,3280931819,DE -3280931820,3280931825,GB -3280931826,3280931826,DE -3280931827,3280931935,GB -3280931936,3280931943,DE -3280931944,3280931951,GB -3280931952,3280931983,DE -3280931984,3280932015,GB -3280932016,3280932031,DE -3280932032,3280932351,GB -3280932352,3280932367,DE -3280932368,3280932383,GB -3280932384,3280932399,DE -3280932400,3280932431,GB -3280932432,3280932455,DE -3280932456,3280932463,GB -3280932464,3280932472,DE -3280932473,3280932474,GB -3280932475,3280932477,DE -3280932478,3280932479,GB -3280932480,3280932495,DE -3280932496,3280932543,GB -3280932544,3280932559,DE -3280932560,3280932567,GB -3280932568,3280932575,DE -3280932576,3280932591,GB -3280932592,3280932607,DE -3280932608,3280932655,GB -3280932656,3280932663,DE -3280932664,3280932671,GB -3280932672,3280932687,DE -3280932688,3280932711,GB -3280932712,3280932735,DE -3280932736,3280932831,GB -3280932832,3280932847,DE -3280932848,3280932976,GB -3280932977,3280932983,DE -3280932984,3280932984,GB -3280932985,3280932985,DE -3280932986,3280932988,GB -3280932989,3280932989,DE -3280932990,3280932990,GB -3280932991,3280932991,DE -3280932992,3280933023,GB -3280933024,3280933039,DE -3280933040,3280933071,GB -3280933072,3280933087,DE -3280933088,3280933103,GB -3280933104,3280933119,DE -3280933120,3280933175,GB -3280933176,3280933215,DE -3280933216,3280933311,GB -3280933312,3280933375,DE -3280933376,3280933439,GB -3280933440,3280933451,DE -3280933452,3280933487,GB -3280933488,3280933519,DE -3280933520,3280933539,GB -3280933540,3280933551,DE -3280933552,3280933567,GB -3280933568,3280933599,DE -3280933600,3280933615,GB -3280933616,3280933616,DE -3280933617,3280933618,GB -3280933619,3280933620,DE -3280933621,3280933631,GB -3280933632,3280933647,DE -3280933648,3280933687,GB -3280933688,3280933699,DE -3280933700,3280933703,GB -3280933704,3280933855,DE -3280933856,3280934219,GB -3280934220,3280934243,DE -3280934244,3280934655,GB -3280934656,3280934863,DE -3280934864,3280934911,GB -3280934912,3280934943,DE -3280934944,3280935007,GB -3280935008,3280935015,DE -3280935016,3280935053,GB -3280935054,3280935055,DE -3280935056,3280935059,GB -3280935060,3280935063,DE -3280935064,3280935119,GB -3280935120,3280935127,DE -3280935128,3280935135,GB -3280935136,3280935167,DE -3280935168,3280935247,GB -3280935248,3280935263,DE -3280935264,3280935344,GB -3280935345,3280935345,DE -3280935346,3280935347,GB -3280935348,3280935351,DE -3280935352,3280935807,GB -3280935808,3280935823,DE -3280935824,3280935856,GB -3280935857,3280935858,DE -3280935859,3280935859,GB -3280935860,3280935863,DE -3280935864,3280935887,GB -3280935888,3280935903,DE -3280935904,3280936039,GB -3280936040,3280936048,DE -3280936049,3280936052,GB -3280936053,3280936053,DE -3280936054,3280936054,GB -3280936055,3280936063,DE -3280936064,3280936143,GB -3280936144,3280936159,DE -3280936160,3280936191,GB +3280928768,3280930303,GB +3280930304,3280930559,DE +3280930560,3280930959,GB +3280930960,3280930975,DE +3280930976,3280933175,GB +3280933176,3280933183,DE +3280933184,3280933359,GB +3280933360,3280933375,DE +3280933376,3280933631,GB +3280933632,3280934399,DE +3280934400,3280936191,GB 3280936192,3280936319,DE -3280936320,3280936463,GB -3280936464,3280936479,DE -3280936480,3280936495,GB -3280936496,3280936498,DE -3280936499,3280936500,GB -3280936501,3280936501,DE -3280936502,3280936504,GB -3280936505,3280936505,DE -3280936506,3280936506,GB -3280936507,3280936510,DE -3280936511,3280936511,GB -3280936512,3280936512,DE -3280936513,3280936519,GB -3280936520,3280936523,DE -3280936524,3280936559,GB -3280936560,3280936567,DE -3280936568,3280936575,GB -3280936576,3280936583,DE -3280936584,3280936591,GB -3280936592,3280936655,DE -3280936656,3280936999,GB -3280937000,3280937003,DE -3280937004,3280937007,GB -3280937008,3280937023,DE -3280937024,3280937639,GB -3280937640,3280937643,DE -3280937644,3280937919,GB -3280937920,3280937935,DE -3280937936,3280937999,GB -3280938000,3280938003,DE -3280938004,3280938167,GB -3280938168,3280938175,DE -3280938176,3280938207,GB -3280938208,3280938223,DE -3280938224,3280938236,GB -3280938237,3280938237,DE -3280938238,3280938271,GB -3280938272,3280938279,DE -3280938280,3280938283,GB -3280938284,3280938284,DE -3280938285,3280938285,GB -3280938286,3280938286,DE -3280938287,3280938303,GB -3280938304,3280938367,DE -3280938368,3280938400,GB -3280938401,3280938401,DE -3280938402,3280938402,GB -3280938403,3280938407,DE -3280938408,3280938543,GB -3280938544,3280938591,DE -3280938592,3280938619,GB -3280938620,3280938623,DE -3280938624,3280938668,GB -3280938669,3280938669,DE -3280938670,3280938723,GB -3280938724,3280938751,DE -3280938752,3280938767,GB -3280938768,3280938815,DE -3280938816,3280938919,GB -3280938920,3280938931,DE -3280938932,3280939167,GB -3280939168,3280939175,DE -3280939176,3280939179,GB -3280939180,3280939183,DE -3280939184,3280939839,GB -3280939840,3280939871,DE -3280939872,3280939896,GB -3280939897,3280939900,DE -3280939901,3280939901,GB -3280939902,3280939902,DE -3280939903,3280939923,GB -3280939924,3280939924,DE -3280939925,3280939925,GB -3280939926,3280939926,DE -3280939927,3280939975,GB -3280939976,3280939977,DE -3280939978,3280939978,GB -3280939979,3280939979,DE -3280939980,3280939983,GB -3280939984,3280939999,DE -3280940000,3280940015,GB -3280940016,3280940023,DE -3280940024,3280940095,GB -3280940096,3280940103,DE -3280940104,3280940132,GB -3280940133,3280940135,DE -3280940136,3280940143,GB -3280940144,3280940151,DE -3280940152,3280940487,GB -3280940488,3280940495,DE -3280940496,3280940503,GB -3280940504,3280940511,DE -3280940512,3280940575,GB -3280940576,3280940599,DE -3280940600,3280940703,GB -3280940704,3280940719,DE -3280940720,3280940735,GB -3280940736,3280940767,DE -3280940768,3280940832,GB -3280940833,3280940833,DE -3280940834,3280940834,GB -3280940835,3280940835,DE -3280940836,3280940836,GB -3280940837,3280940837,DE -3280940838,3280940959,GB -3280940960,3280940967,DE -3280940968,3280941124,GB -3280941125,3280941127,DE -3280941128,3280941183,GB -3280941184,3280941199,DE -3280941200,3280941312,GB -3280941313,3280941314,DE -3280941315,3280941335,GB -3280941336,3280941343,DE -3280941344,3280941359,GB -3280941360,3280941367,DE -3280941368,3280941369,GB -3280941370,3280941370,DE -3280941371,3280941371,GB -3280941372,3280941373,DE -3280941374,3280941423,GB -3280941424,3280941439,DE -3280941440,3280941479,GB -3280941480,3280941484,DE -3280941485,3280941485,GB -3280941486,3280941523,DE -3280941524,3280941527,GB -3280941528,3280941551,DE -3280941552,3280941655,GB -3280941656,3280941663,DE -3280941664,3280941672,GB -3280941673,3280941675,DE -3280941676,3280941887,GB -3280941888,3280941888,DE -3280941889,3280941894,GB -3280941895,3280941895,DE -3280941896,3280941901,GB -3280941902,3280941902,DE -3280941903,3280941912,GB -3280941913,3280941919,DE -3280941920,3280941952,GB -3280941953,3280941953,DE -3280941954,3280941957,GB -3280941958,3280941958,DE -3280941959,3280941964,GB -3280941965,3280941967,DE -3280941968,3280941994,GB -3280941995,3280941996,DE -3280941997,3280941998,GB -3280941999,3280942000,DE -3280942001,3280942008,GB -3280942009,3280942009,DE -3280942010,3280942010,GB -3280942011,3280942011,DE -3280942012,3280942031,GB -3280942032,3280942047,DE -3280942048,3280942335,GB -3280942336,3280942351,DE -3280942352,3280942383,GB -3280942384,3280942399,DE -3280942400,3280942431,GB -3280942432,3280942471,DE -3280942472,3280943103,GB -3280943104,3280943359,DE -3280943360,3280943615,GB -3280943616,3280943679,DE -3280943680,3280943711,GB -3280943712,3280943743,DE -3280943744,3280943935,GB -3280943936,3280943943,DE -3280943944,3280943967,GB -3280943968,3280943983,DE -3280943984,3280944191,GB -3280944192,3280944199,DE -3280944200,3280944215,GB -3280944216,3280944219,DE -3280944220,3280944223,GB -3280944224,3280944225,DE -3280944226,3280944243,GB -3280944244,3280944247,DE -3280944248,3280944447,GB -3280944448,3280944527,DE -3280944528,3280944543,GB -3280944544,3280944575,DE -3280944576,3280944591,GB -3280944592,3280944607,DE -3280944608,3280944623,GB -3280944624,3280944639,DE -3280944640,3280945186,GB -3280945187,3280945189,DE -3280945190,3280945312,GB -3280945313,3280945313,DE -3280945314,3280945315,GB -3280945316,3280945317,DE -3280945318,3280945319,GB -3280945320,3280945323,DE -3280945324,3280945327,GB -3280945328,3280945335,DE -3280945336,3280945439,GB -3280945440,3280945503,DE -3280945504,3280945535,GB -3280945536,3280945551,DE -3280945552,3280945679,GB -3280945680,3280945695,DE -3280945696,3280945715,GB -3280945716,3280945719,DE -3280945720,3280945743,GB -3280945744,3280945751,DE -3280945752,3280945759,GB -3280945760,3280945767,DE -3280945768,3280945776,GB -3280945777,3280945777,DE -3280945778,3280945812,GB -3280945813,3280945814,DE -3280945815,3280945817,GB -3280945818,3280945818,DE -3280945819,3280945819,GB -3280945820,3280945820,DE -3280945821,3280945821,GB -3280945822,3280945823,DE -3280945824,3280945835,GB -3280945836,3280945840,DE -3280945841,3280945842,GB -3280945843,3280945843,DE -3280945844,3280945847,GB -3280945848,3280945853,DE -3280945854,3280945855,GB -3280945856,3280945919,DE -3280945920,3280946721,GB -3280946722,3280946722,DE -3280946723,3280946723,GB -3280946724,3280946724,DE -3280946725,3280948623,GB -3280948624,3280948639,DE -3280948640,3280948719,GB -3280948720,3280948735,DE -3280948736,3280949503,GB -3280949504,3280949759,DE -3280949760,3280950655,GB +3280936320,3280938767,GB +3280938768,3280938783,DE +3280938784,3280938799,GB +3280938800,3280938815,DE +3280938816,3280950655,GB 3280950656,3280950687,DE 3280950688,3280951039,GB -3280951040,3280951807,DE -3280951808,3280951819,GB -3280951820,3280951831,DE -3280951832,3280952067,GB -3280952068,3280952079,DE -3280952080,3280952087,GB -3280952088,3280952095,DE -3280952096,3280952111,GB -3280952112,3280952119,DE -3280952120,3280952127,GB -3280952128,3280952159,DE -3280952160,3280952183,GB -3280952184,3280952191,DE -3280952192,3280952207,GB -3280952208,3280952223,DE -3280952224,3280952319,GB -3280952320,3280952323,DE +3280951040,3280951295,DE +3280951296,3280951807,GB +3280951808,3280952323,DE 3280952324,3280952327,GB 3280952328,3280952343,DE 3280952344,3280952351,GB -3280952352,3280952359,DE -3280952360,3280952383,GB -3280952384,3280952559,DE -3280952560,3280952575,GB -3280952576,3280952623,DE +3280952352,3280952375,DE +3280952376,3280952383,GB +3280952384,3280952455,DE +3280952456,3280952463,GB +3280952464,3280952575,DE +3280952576,3280952615,GB +3280952616,3280952623,DE 3280952624,3280952631,GB -3280952632,3280952687,DE +3280952632,3280952643,DE +3280952644,3280952671,GB +3280952672,3280952687,DE 3280952688,3280952695,GB -3280952696,3280952703,DE -3280952704,3280952743,GB -3280952744,3280952767,DE +3280952696,3280952767,DE 3280952768,3280952783,GB -3280952784,3280952815,DE -3280952816,3280953104,GB -3280953105,3280953135,DE -3280953136,3280953343,GB -3280953344,3280953371,DE -3280953372,3280953375,GB -3280953376,3280953383,DE -3280953384,3280953423,GB -3280953424,3280953431,DE -3280953432,3280953443,GB -3280953444,3280953444,DE -3280953445,3280953451,GB -3280953452,3280953454,DE -3280953455,3280953455,GB -3280953456,3280953463,DE -3280953464,3280953471,GB -3280953472,3280953475,DE -3280953476,3280953479,GB -3280953480,3280953487,DE -3280953488,3280953491,GB -3280953492,3280953492,DE -3280953493,3280953493,GB -3280953494,3280953494,DE -3280953495,3280953495,GB -3280953496,3280953503,DE -3280953504,3280953519,GB -3280953520,3280953527,DE -3280953528,3280953599,GB -3280953600,3280953663,DE -3280953664,3280953807,GB -3280953808,3280953823,DE -3280953824,3280954063,GB -3280954064,3280954079,DE -3280954080,3280954119,GB -3280954120,3280954127,DE -3280954128,3280954367,GB -3280954368,3280954495,DE -3280954496,3280955391,GB -3280955392,3280955419,DE -3280955420,3280955423,GB -3280955424,3280955519,DE -3280955520,3280955647,GB -3280955648,3280955791,DE +3280952784,3280952791,DE +3280952792,3280952799,GB +3280952800,3280952831,DE +3280952832,3280955407,GB +3280955408,3280955419,DE +3280955420,3280955503,GB +3280955504,3280955791,DE 3280955792,3280955799,GB -3280955800,3280956143,DE +3280955800,3280955999,DE +3280956000,3280956007,GB +3280956008,3280956015,DE +3280956016,3280956023,GB +3280956024,3280956039,DE +3280956040,3280956047,GB +3280956048,3280956095,DE +3280956096,3280956103,GB +3280956104,3280956143,DE 3280956144,3280956415,GB 3280956416,3280956927,DE -3280956928,3280956991,GB -3280956992,3280957007,DE -3280957008,3280957015,GB -3280957016,3280957019,DE -3280957020,3280957151,GB -3280957152,3280957167,DE -3280957168,3280957183,GB -3280957184,3280957199,DE -3280957200,3280957215,GB -3280957216,3280957231,DE -3280957232,3280957247,GB -3280957248,3280957249,DE -3280957250,3280957255,GB +3280956928,3280957255,GB 3280957256,3280957263,DE 3280957264,3280957311,GB 3280957312,3280957503,DE -3280957504,3280957743,GB -3280957744,3280957791,DE -3280957792,3280957823,GB -3280957824,3280957839,DE -3280957840,3280957871,GB -3280957872,3280957887,DE -3280957888,3280957935,GB -3280957936,3280957943,DE -3280957944,3280958207,GB -3280958208,3280958223,DE -3280958224,3280958287,GB -3280958288,3280958335,DE -3280958336,3280958343,GB -3280958344,3280958350,DE -3280958351,3280958463,GB -3280958464,3280958851,DE -3280958852,3280958863,GB +3280957504,3280957831,GB +3280957832,3280957839,DE +3280957840,3280958463,GB +3280958464,3280958807,DE +3280958808,3280958863,GB 3280958864,3280958871,DE 3280958872,3280958879,GB -3280958880,3280958915,DE -3280958916,3280958919,GB -3280958920,3280958927,DE -3280958928,3280958975,GB -3280958976,3280959199,DE -3280959200,3280959487,GB -3280959488,3280959711,DE -3280959712,3280959743,GB -3280959744,3280959935,DE -3280959936,3280960015,GB +3280958880,3280958911,DE +3280958912,3280958919,GB +3280958920,3280959111,DE +3280959112,3280959119,GB +3280959120,3280959279,DE +3280959280,3280959743,GB +3280959744,3280959775,DE +3280959776,3280960015,GB 3280960016,3280960023,DE 3280960024,3280960031,GB 3280960032,3280960039,DE -3280960040,3280960255,GB -3280960256,3280960287,DE -3280960288,3280960511,GB -3280960512,3280961279,DE -3280961280,3280961791,GB -3280961792,3280961807,DE -3280961808,3280961855,GB -3280961856,3280961863,DE -3280961864,3280961869,GB -3280961870,3280961871,DE -3280961872,3280961887,GB -3280961888,3280961919,DE -3280961920,3280962111,GB -3280962112,3280962175,DE -3280962176,3280962815,GB +3280960040,3280962815,GB 3280962816,3280962831,DE -3280962832,3280962847,GB -3280962848,3280962887,DE -3280962888,3280963199,GB -3280963200,3280963263,DE -3280963264,3280963303,GB -3280963304,3280963311,DE -3280963312,3280963327,GB -3280963328,3280963343,DE -3280963344,3280963359,GB -3280963360,3280963495,DE -3280963496,3280963511,GB -3280963512,3280963515,DE -3280963516,3280963519,GB +3280962832,3280963343,GB +3280963344,3280963367,DE +3280963368,3280963375,GB +3280963376,3280963391,DE +3280963392,3280963407,GB +3280963408,3280963423,DE +3280963424,3280963487,GB +3280963488,3280963495,DE +3280963496,3280963519,GB 3280963520,3280963527,DE -3280963528,3280963590,GB -3280963591,3280963591,DE -3280963592,3280963593,GB -3280963594,3280963595,DE -3280963596,3280963603,GB -3280963604,3280963604,DE -3280963605,3280963615,GB -3280963616,3280963616,DE -3280963617,3280963623,GB -3280963624,3280963631,DE -3280963632,3280963711,GB -3280963712,3280963719,DE -3280963720,3280963727,GB -3280963728,3280963735,DE -3280963736,3280963751,GB -3280963752,3280963767,DE -3280963768,3280963775,GB -3280963776,3280963791,DE -3280963792,3280963823,GB -3280963824,3280963839,DE -3280963840,3280964095,GB -3280964096,3280964351,DE -3280964352,3280965631,GB -3280965632,3280965887,DE -3280965888,3280965951,GB -3280965952,3280965967,DE -3280965968,3280966015,GB -3280966016,3280966079,DE -3280966080,3280966127,GB -3280966128,3280966143,DE -3280966144,3280967167,GB -3280967168,3280967455,DE -3280967456,3280967535,GB -3280967536,3280967551,DE -3280967552,3280968447,GB +3280963528,3280963535,GB +3280963536,3280963551,DE +3280963552,3280968447,GB 3280968448,3280968703,DE -3280968704,3280969039,GB -3280969040,3280969087,DE -3280969088,3280969599,GB -3280969600,3280969603,DE -3280969604,3280969631,GB -3280969632,3280969647,DE -3280969648,3280970239,GB -3280970240,3280970399,DE -3280970400,3280970431,GB -3280970432,3280970463,DE -3280970464,3280970507,GB -3280970508,3280970511,DE -3280970512,3280970575,GB -3280970576,3280970579,DE -3280970580,3280970671,GB -3280970672,3280970687,DE -3280970688,3280970775,GB -3280970776,3280970783,DE -3280970784,3280970799,GB -3280970800,3280970815,DE -3280970816,3280970847,GB -3280970848,3280970863,DE -3280970864,3280970975,GB -3280970976,3280970991,DE -3280970992,3280971039,GB +3280968704,3280970239,GB +3280970240,3280970495,DE +3280970496,3280971039,GB 3280971040,3280971055,DE -3280971056,3280971295,GB -3280971296,3280971327,DE -3280971328,3280971343,GB -3280971344,3280971351,DE -3280971352,3280971359,GB -3280971360,3280971391,DE -3280971392,3280971599,GB -3280971600,3280971615,DE -3280971616,3280971647,GB -3280971648,3280971743,DE -3280971744,3280971799,GB -3280971800,3280971807,DE -3280971808,3280971815,GB -3280971816,3280971819,DE -3280971820,3280971823,GB -3280971824,3280971839,DE -3280971840,3280972031,GB -3280972032,3280972063,DE -3280972064,3280972071,GB -3280972072,3280972079,DE -3280972080,3280972319,GB -3280972320,3280972335,DE -3280972336,3280972351,GB -3280972352,3280972415,DE -3280972416,3280974079,GB +3280971056,3280974079,GB 3280974080,3280974335,DE 3280974336,3280974399,GB 3280974400,3280974415,DE 3280974416,3280974591,GB 3280974592,3280974847,DE -3280974848,3280976695,GB -3280976696,3280976719,DE -3280976720,3280976831,GB -3280976832,3280976847,DE -3280976848,3280976895,GB -3280976896,3280977119,DE -3280977120,3280977135,GB -3280977136,3280977407,DE -3280977408,3280977439,GB -3280977440,3280977479,DE -3280977480,3280977487,GB -3280977488,3280977495,DE -3280977496,3280977935,GB -3280977936,3280977936,DE -3280977937,3280977937,GB -3280977938,3280977938,DE -3280977939,3280977941,GB -3280977942,3280977942,DE -3280977943,3280977947,GB -3280977948,3280977959,DE -3280977960,3280977967,GB -3280977968,3280977969,DE -3280977970,3280977974,GB -3280977975,3280977975,DE -3280977976,3280977983,GB -3280977984,3280978007,DE -3280978008,3280978063,GB -3280978064,3280978079,DE -3280978080,3280978127,GB -3280978128,3280978143,DE -3280978144,3280978175,GB -3280978176,3280978191,DE -3280978192,3280978225,GB -3280978226,3280978226,DE -3280978227,3280978231,GB +3280974848,3280976911,GB +3280976912,3280976927,DE +3280976928,3280976935,GB +3280976936,3280976951,DE +3280976952,3280976991,GB +3280976992,3280977023,DE +3280977024,3280977031,GB +3280977032,3280977111,DE +3280977112,3280977119,GB +3280977120,3280977407,DE +3280977408,3280977951,GB +3280977952,3280977955,DE +3280977956,3280977999,GB +3280978000,3280978007,DE +3280978008,3280978191,GB +3280978192,3280978195,DE +3280978196,3280978231,GB 3280978232,3280978239,DE -3280978240,3280978271,GB -3280978272,3280978279,DE -3280978280,3280978335,GB +3280978240,3280978335,GB 3280978336,3280978367,DE 3280978368,3280978383,GB -3280978384,3280978415,DE -3280978416,3280978433,GB -3280978434,3280978441,DE -3280978442,3280978442,GB -3280978443,3280978443,DE -3280978444,3280978445,GB -3280978446,3280978479,DE -3280978480,3280978503,GB -3280978504,3280978507,DE -3280978508,3280978543,GB -3280978544,3280978552,DE -3280978553,3280978575,GB -3280978576,3280978591,DE -3280978592,3280978783,GB -3280978784,3280978799,DE -3280978800,3280978847,GB -3280978848,3280978863,DE -3280978864,3280978887,GB -3280978888,3280978891,DE -3280978892,3280979003,GB -3280979004,3280979007,DE -3280979008,3280979023,GB -3280979024,3280979044,DE -3280979045,3280979049,GB -3280979050,3280979051,DE -3280979052,3280979052,GB -3280979053,3280979053,DE -3280979054,3280979103,GB +3280978384,3280978399,DE +3280978400,3280978495,GB +3280978496,3280978499,DE +3280978500,3280978623,GB +3280978624,3280978631,DE +3280978632,3280979023,GB +3280979024,3280979039,DE +3280979040,3280979103,GB 3280979104,3280979111,DE -3280979112,3280979141,GB -3280979142,3280979142,DE -3280979143,3280979143,GB -3280979144,3280979147,DE -3280979148,3280979151,GB +3280979112,3280979151,GB 3280979152,3280979159,DE 3280979160,3280979167,GB 3280979168,3280979183,DE -3280979184,3280979199,GB -3280979200,3280979215,DE -3280979216,3280979231,GB -3280979232,3280979247,DE -3280979248,3280979311,GB +3280979184,3280979311,GB 3280979312,3280979327,DE -3280979328,3280979344,GB -3280979345,3280979345,DE -3280979346,3280979348,GB -3280979349,3280979350,DE -3280979351,3280979363,GB -3280979364,3280979364,DE -3280979365,3280979419,GB -3280979420,3280979420,DE -3280979421,3280979431,GB -3280979432,3280979435,DE -3280979436,3280979471,GB -3280979472,3280979479,DE -3280979480,3280979503,GB -3280979504,3280979519,DE -3280979520,3280979527,GB -3280979528,3280979535,DE -3280979536,3280979555,GB +3280979328,3280979555,GB 3280979556,3280979559,DE -3280979560,3280979567,GB -3280979568,3280979568,DE -3280979569,3280979569,GB -3280979570,3280979571,DE -3280979572,3280979573,GB -3280979574,3280979574,DE -3280979575,3280979576,GB +3280979560,3280979576,GB 3280979577,3280979577,DE -3280979578,3280979631,GB -3280979632,3280979647,DE -3280979648,3280979679,GB -3280979680,3280979695,DE -3280979696,3280979711,GB -3280979712,3280979743,DE -3280979744,3280979839,GB +3280979578,3280979839,GB 3280979840,3280979975,DE -3280979976,3280980031,GB -3280980032,3280980039,DE -3280980040,3280980047,GB -3280980048,3280980071,DE -3280980072,3280980079,GB -3280980080,3280980081,DE -3280980082,3280980085,GB -3280980086,3280980086,DE -3280980087,3280980089,GB -3280980090,3280980090,DE -3280980091,3280980092,GB -3280980093,3280980093,DE -3280980094,3280980094,GB -3280980095,3280980095,DE -3280980096,3280980103,GB -3280980104,3280980111,DE -3280980112,3280980135,GB -3280980136,3280980143,DE -3280980144,3280980147,GB -3280980148,3280980151,DE -3280980152,3280980168,GB -3280980169,3280980170,DE -3280980171,3280980175,GB -3280980176,3280980183,DE -3280980184,3280980191,GB -3280980192,3280980199,DE -3280980200,3280980298,GB -3280980299,3280980299,DE -3280980300,3280980300,GB -3280980301,3280980304,DE -3280980305,3280980305,GB -3280980306,3280980307,DE -3280980308,3280980310,GB -3280980311,3280980311,DE -3280980312,3280980312,GB -3280980313,3280980313,DE -3280980314,3280980351,GB +3280979976,3280980080,GB +3280980081,3280980081,DE +3280980082,3280980351,GB 3280980352,3280980367,DE -3280980368,3280980383,GB -3280980384,3280980399,DE -3280980400,3280980471,GB +3280980368,3280980423,GB +3280980424,3280980431,DE +3280980432,3280980471,GB 3280980472,3280980479,DE -3280980480,3280980503,GB -3280980504,3280980508,DE -3280980509,3280980592,GB -3280980593,3280980594,DE -3280980595,3280980601,GB -3280980602,3280980602,DE -3280980603,3280980603,GB -3280980604,3280980606,DE -3280980607,3280980639,GB -3280980640,3280980647,DE -3280980648,3280980683,GB -3280980684,3280980703,DE -3280980704,3280980759,GB -3280980760,3280980767,DE -3280980768,3280980823,GB -3280980824,3280980827,DE -3280980828,3280980831,GB -3280980832,3280980847,DE -3280980848,3280980927,GB -3280980928,3280980991,DE -3280980992,3280980993,GB -3280980994,3280980996,DE -3280980997,3280981000,GB -3280981001,3280981001,DE -3280981002,3280981039,GB +3280980480,3280981039,GB 3280981040,3280981055,DE -3280981056,3280981095,GB -3280981096,3280981111,DE -3280981112,3280981135,GB -3280981136,3280981151,DE -3280981152,3280981179,GB -3280981180,3280981183,DE -3280981184,3280981199,GB -3280981200,3280981207,DE -3280981208,3280981215,GB +3280981056,3280981215,GB 3280981216,3280981231,DE -3280981232,3280981247,GB -3280981248,3280981375,DE -3280981376,3280981407,GB -3280981408,3280981415,DE -3280981416,3280981487,GB +3280981232,3280981487,GB 3280981488,3280981503,DE -3280981504,3280981555,GB -3280981556,3280981556,DE -3280981557,3280981557,GB -3280981558,3280981558,DE -3280981559,3280981559,GB -3280981560,3280981561,DE -3280981562,3280981599,GB -3280981600,3280981615,DE -3280981616,3280981623,GB -3280981624,3280981647,DE -3280981648,3280981983,GB +3280981504,3280981607,GB +3280981608,3280981615,DE +3280981616,3280981839,GB +3280981840,3280981847,DE +3280981848,3280981983,GB 3280981984,3280981999,DE 3280982000,3280982015,GB 3280982016,3280982023,DE -3280982024,3280982047,GB -3280982048,3280982051,DE -3280982052,3280982052,GB -3280982053,3280982053,DE -3280982054,3280982079,GB -3280982080,3280982095,DE -3280982096,3280982167,GB -3280982168,3280982175,DE -3280982176,3280982239,GB -3280982240,3280982263,DE -3280982264,3280982269,GB -3280982270,3280982270,DE -3280982271,3280982271,GB -3280982272,3280982287,DE -3280982288,3280982399,GB -3280982400,3280982431,DE -3280982432,3280982528,GB -3280982529,3280982529,DE -3280982530,3280982530,GB -3280982531,3280982531,DE -3280982532,3280982536,GB -3280982537,3280982537,DE -3280982538,3280982580,GB -3280982581,3280982582,DE -3280982583,3280982607,GB -3280982608,3280982671,DE -3280982672,3280982676,GB -3280982677,3280982677,DE -3280982678,3280982678,GB -3280982679,3280982679,DE -3280982680,3280982680,GB -3280982681,3280982686,DE -3280982687,3280982767,GB -3280982768,3280982783,DE -3280982784,3280982799,GB -3280982800,3280982815,DE -3280982816,3280982863,GB -3280982864,3280982864,DE -3280982865,3280982866,GB -3280982867,3280982867,DE -3280982868,3280982879,GB -3280982880,3280982895,DE -3280982896,3280982911,GB -3280982912,3280982931,DE -3280982932,3280982943,GB -3280982944,3280982975,DE -3280982976,3280983072,GB -3280983073,3280983073,DE -3280983074,3280983103,GB -3280983104,3280983104,DE -3280983105,3280983112,GB +3280982024,3280982255,GB +3280982256,3280982263,DE +3280982264,3280982607,GB +3280982608,3280982623,DE +3280982624,3280982655,GB +3280982656,3280982671,DE +3280982672,3280982951,GB +3280982952,3280982959,DE +3280982960,3280983112,GB 3280983113,3280983113,DE -3280983114,3280983114,GB -3280983115,3280983183,DE -3280983184,3280983199,GB -3280983200,3280983215,DE -3280983216,3280983343,GB -3280983344,3280983375,DE -3280983376,3280983391,GB -3280983392,3280983407,DE -3280983408,3280983423,GB +3280983114,3280983119,GB +3280983120,3280983167,DE +3280983168,3280983359,GB +3280983360,3280983375,DE +3280983376,3280983423,GB 3280983424,3280983431,DE -3280983432,3280983455,GB -3280983456,3280983471,DE -3280983472,3280983487,GB -3280983488,3280983515,DE -3280983516,3280983516,GB -3280983517,3280983517,DE -3280983518,3280983518,GB -3280983519,3280983527,DE -3280983528,3280983695,GB -3280983696,3280983711,DE -3280983712,3280983783,GB -3280983784,3280983791,DE -3280983792,3280983807,GB -3280983808,3280983815,DE -3280983816,3280983887,GB -3280983888,3280983919,DE -3280983920,3280983927,GB -3280983928,3280983939,DE -3280983940,3280983951,GB -3280983952,3280983975,DE -3280983976,3280983999,GB -3280984000,3280984007,DE -3280984008,3280984013,GB -3280984014,3280984014,DE -3280984015,3280984015,GB -3280984016,3280984031,DE -3280984032,3280984319,GB -3280984320,3280984335,DE -3280984336,3280984367,GB -3280984368,3280984399,DE -3280984400,3280984431,GB -3280984432,3280984443,DE -3280984444,3280984445,GB -3280984446,3280984495,DE -3280984496,3280984503,GB -3280984504,3280984511,DE -3280984512,3280984527,GB -3280984528,3280984535,DE -3280984536,3280984559,GB -3280984560,3280984567,DE -3280984568,3280984639,GB -3280984640,3280984640,DE -3280984641,3280984642,GB -3280984643,3280984643,DE -3280984644,3280984646,GB -3280984647,3280984647,DE -3280984648,3280984661,GB -3280984662,3280984662,DE -3280984663,3280984663,GB -3280984664,3280984671,DE -3280984672,3280984984,GB -3280984985,3280984985,DE -3280984986,3280984987,GB -3280984988,3280984988,DE -3280984989,3280984991,GB -3280984992,3280985007,DE -3280985008,3280985047,GB -3280985048,3280985055,DE -3280985056,3280985079,GB -3280985080,3280985087,DE -3280985088,3280985343,GB -3280985344,3280985415,DE -3280985416,3280985431,GB -3280985432,3280985435,DE -3280985436,3280985471,GB -3280985472,3280985631,DE -3280985632,3280985635,GB -3280985636,3280985647,DE -3280985648,3280985663,GB -3280985664,3280985679,DE -3280985680,3280985695,GB -3280985696,3280985703,DE -3280985704,3280985727,GB -3280985728,3280985735,DE -3280985736,3280985791,GB -3280985792,3280985823,DE -3280985824,3280985831,GB -3280985832,3280985832,DE -3280985833,3280985833,GB -3280985834,3280985834,DE -3280985835,3280986263,GB +3280983432,3280983887,GB +3280983888,3280983895,DE +3280983896,3280984495,GB +3280984496,3280984503,DE +3280984504,3280985639,GB +3280985640,3280985647,DE +3280985648,3280986263,GB 3280986264,3280986267,DE -3280986268,3280986271,GB -3280986272,3280986303,DE -3280986304,3280986336,GB -3280986337,3280986337,DE -3280986338,3280986338,GB -3280986339,3280986339,DE -3280986340,3280986342,GB -3280986343,3280986343,DE -3280986344,3280986356,GB -3280986357,3280986357,DE -3280986358,3280986364,GB -3280986365,3280986365,DE -3280986366,3280986527,GB -3280986528,3280986541,DE -3280986542,3280986583,GB -3280986584,3280986599,DE -3280986600,3280986615,GB -3280986616,3280986619,DE -3280986620,3280986767,GB -3280986768,3280986775,DE -3280986776,3280986783,GB -3280986784,3280986799,DE -3280986800,3280986867,GB -3280986868,3280986871,DE -3280986872,3280987343,GB -3280987344,3280987359,DE -3280987360,3280987385,GB -3280987386,3280987387,DE -3280987388,3280987647,GB -3280987648,3280987679,DE -3280987680,3280987696,GB -3280987697,3280987697,DE -3280987698,3280987698,GB -3280987699,3280987699,DE -3280987700,3280987711,GB -3280987712,3280987727,DE -3280987728,3280987775,GB -3280987776,3280987855,DE -3280987856,3280987919,GB -3280987920,3280987935,DE -3280987936,3280987936,GB -3280987937,3280987939,DE -3280987940,3280987940,GB -3280987941,3280987942,DE -3280987943,3280988111,GB -3280988112,3280988127,DE -3280988128,3280988171,GB -3280988172,3280988175,DE -3280988176,3280988207,GB -3280988208,3280988215,DE -3280988216,3280988303,GB +3280986268,3280987983,GB +3280987984,3280987999,DE +3280988000,3280988303,GB 3280988304,3280988311,DE 3280988312,3280988383,GB 3280988384,3280988391,DE 3280988392,3280988399,GB 3280988400,3280988431,DE -3280988432,3280988671,GB -3280988672,3280988679,DE -3280988680,3280988703,GB -3280988704,3280988719,DE -3280988720,3280988740,GB -3280988741,3280988741,DE -3280988742,3280988747,GB -3280988748,3280988751,DE -3280988752,3280988815,GB +3280988432,3280988815,GB 3280988816,3280988831,DE 3280988832,3280988855,GB -3280988856,3280988879,DE -3280988880,3280988895,GB -3280988896,3280988903,DE -3280988904,3280988915,GB -3280988916,3280988916,DE -3280988917,3280988917,GB -3280988918,3280988918,DE -3280988919,3280988923,GB -3280988924,3280988943,DE -3280988944,3280989007,GB -3280989008,3280989010,DE -3280989011,3280989011,GB -3280989012,3280989012,DE -3280989013,3280989023,GB -3280989024,3280989039,DE -3280989040,3280989055,GB -3280989056,3280989063,DE -3280989064,3280989067,GB -3280989068,3280989071,DE -3280989072,3280989135,GB -3280989136,3280989151,DE -3280989152,3280989183,GB -3280989184,3280989187,DE -3280989188,3280989195,GB -3280989196,3280989199,DE -3280989200,3280989239,GB -3280989240,3280989243,DE -3280989244,3280989255,GB -3280989256,3280989263,DE -3280989264,3280989270,GB -3280989271,3280989279,DE -3280989280,3280989303,GB -3280989304,3280989311,DE -3280989312,3280989351,GB -3280989352,3280989359,DE -3280989360,3280989367,GB -3280989368,3280989371,DE -3280989372,3280989373,GB -3280989374,3280989391,DE -3280989392,3280989406,GB -3280989407,3280989407,DE -3280989408,3280989427,GB -3280989428,3280989439,DE -3280989440,3280989446,GB -3280989447,3280989447,DE -3280989448,3280989535,GB +3280988856,3280988863,DE +3280988864,3280989015,GB +3280989016,3280989039,DE +3280989040,3280989063,GB +3280989064,3280989067,DE +3280989068,3280989335,GB +3280989336,3280989343,DE +3280989344,3280989375,GB +3280989376,3280989391,DE +3280989392,3280989463,GB +3280989464,3280989471,DE +3280989472,3280989535,GB 3280989536,3280989551,DE -3280989552,3280989575,GB -3280989576,3280989583,DE -3280989584,3280989607,GB -3280989608,3280989615,DE -3280989616,3280989623,GB -3280989624,3280989631,DE -3280989632,3280989807,GB -3280989808,3280989811,DE -3280989812,3280989814,GB -3280989815,3280989815,DE -3280989816,3280989820,GB +3280989552,3280989631,GB +3280989632,3280989647,DE +3280989648,3280989820,GB 3280989821,3280989821,DE -3280989822,3280989839,GB -3280989840,3280989847,DE -3280989848,3280990047,GB -3280990048,3280990079,DE -3280990080,3280990119,GB -3280990120,3280990143,DE -3280990144,3280990191,GB +3280989822,3280990047,GB +3280990048,3280990063,DE +3280990064,3280990191,GB 3280990192,3280990223,DE 3280990224,3280990231,GB 3280990232,3280990239,DE 3280990240,3280990271,GB 3280990272,3280990287,DE -3280990288,3280990335,GB -3280990336,3280990367,DE -3280990368,3280990377,GB -3280990378,3280990379,DE -3280990380,3280990491,GB -3280990492,3280990495,DE -3280990496,3280990511,GB -3280990512,3280990527,DE -3280990528,3280990575,GB -3280990576,3280990599,DE -3280990600,3280990607,GB -3280990608,3280990623,DE -3280990624,3280990647,GB -3280990648,3280990687,DE -3280990688,3280990703,GB +3280990288,3280990479,GB +3280990480,3280990487,DE +3280990488,3280990575,GB +3280990576,3280990591,DE +3280990592,3280990703,GB 3280990704,3280990719,DE -3280990720,3280990751,GB -3280990752,3280990767,DE -3280990768,3280990847,GB -3280990848,3280990871,DE -3280990872,3280990872,GB -3280990873,3280990873,DE -3280990874,3280990875,GB -3280990876,3280990879,DE -3280990880,3280990901,GB -3280990902,3280990902,DE -3280990903,3280990903,GB -3280990904,3280990905,DE -3280990906,3280990908,GB -3280990909,3280990910,DE -3280990911,3280990911,GB -3280990912,3280990927,DE -3280990928,3280990963,GB -3280990964,3280990964,DE -3280990965,3280990968,GB -3280990969,3280990969,DE -3280990970,3280990975,GB -3280990976,3280990983,DE -3280990984,3280991027,GB -3280991028,3280991028,DE -3280991029,3280991031,GB -3280991032,3280991055,DE -3280991056,3280991199,GB -3280991200,3280991211,DE -3280991212,3280991359,GB -3280991360,3280991375,DE -3280991376,3280991391,GB +3280990720,3280990863,GB +3280990864,3280990871,DE +3280990872,3280991391,GB 3280991392,3280991407,DE -3280991408,3280991422,GB -3280991423,3280991423,DE -3280991424,3280991743,GB -3280991744,3280992007,DE -3280992008,3280992095,GB -3280992096,3280992111,DE -3280992112,3280992131,GB -3280992132,3280992135,DE -3280992136,3280992159,GB -3280992160,3280992207,DE -3280992208,3280992219,GB -3280992220,3280992223,DE -3280992224,3280992231,GB +3280991408,3280992231,GB 3280992232,3280992239,DE -3280992240,3280992319,GB -3280992320,3280992335,DE -3280992336,3280992367,GB -3280992368,3280992383,DE -3280992384,3280992391,GB -3280992392,3280992415,DE -3280992416,3280992495,GB -3280992496,3280992503,DE -3280992504,3280992508,GB -3280992509,3280992509,DE -3280992510,3280992543,GB -3280992544,3280992551,DE -3280992552,3280992575,GB -3280992576,3280992591,DE -3280992592,3280992767,GB -3280992768,3280992775,DE -3280992776,3280992783,GB -3280992784,3280992799,DE -3280992800,3280992847,GB +3280992240,3280992399,GB +3280992400,3280992415,DE +3280992416,3280992799,GB +3280992800,3280992815,DE +3280992816,3280992847,GB 3280992848,3280992863,DE -3280992864,3280992871,GB -3280992872,3280992879,DE -3280992880,3280993119,GB -3280993120,3280993135,DE -3280993136,3280993159,GB -3280993160,3280993175,DE -3280993176,3280993199,GB -3280993200,3280993215,DE -3280993216,3280993247,GB -3280993248,3280993263,DE -3280993264,3280993535,GB -3280993536,3280994303,DE -3280994304,3280994559,GB +3280992864,3280993535,GB +3280993536,3280993791,DE +3280993792,3280994559,GB 3280994560,3280994815,RU 3280994816,3280995071,NL 3280995072,3280995327,DE @@ -96372,8 +113549,8 @@ 3281027808,3281027839,EU 3281027840,3281027903,GB 3281027904,3281028063,EU -3281028064,3281028223,GB -3281028224,3281028991,EU +3281028064,3281028159,GB +3281028160,3281028991,EU 3281028992,3281029055,GB 3281029056,3281030399,EU 3281030400,3281035263,GB @@ -96405,22 +113582,21 @@ 3281339392,3281339647,PL 3281339648,3281339903,GB 3281339904,3281340159,UA -3281340160,3281340415,SA +3281340160,3281340415,BG 3281340416,3281340927,RO 3281340928,3281341183,DE 3281341184,3281341439,AT 3281341440,3281341695,DE 3281341696,3281341951,PL 3281341952,3281342207,DK -3281342208,3281342463,GB -3281342464,3281343231,DE +3281342208,3281343231,DE 3281343232,3281343487,FI 3281343488,3281343743,GB 3281343744,3281343999,TR +3281344000,3281344255,FR 3281344256,3281344511,RU 3281344512,3281344767,UA -3281344768,3281345023,RU -3281345024,3281345279,UA +3281344768,3281345279,RU 3281345280,3281345535,SA 3281345536,3281345791,CH 3281345792,3281346047,RU @@ -96444,6 +113620,7 @@ 3281351168,3281351423,UA 3281351424,3281351679,AT 3281351680,3281351935,TR +3281351936,3281352191,UA 3281352192,3281352447,PL 3281352448,3281352703,RO 3281352704,3281352959,DE @@ -96456,6 +113633,9 @@ 3281354752,3281359071,SE 3281359072,3281359103,AN 3281359104,3281371135,SE +3281371136,3281372159,RS +3281372160,3281372671,RU +3281372672,3281373183,PL 3281373184,3281375231,RU 3281375232,3281377279,ES 3281377280,3281379327,AT @@ -96560,7 +113740,8 @@ 3282149472,3282173951,RU 3282173952,3282174463,UA 3282174464,3282174975,GB -3282174976,3282177023,RU +3282174976,3282175487,DE +3282175488,3282177023,RU 3282177024,3282177535,GB 3282177536,3282178047,KZ 3282178048,3282178559,PL @@ -96588,22 +113769,15 @@ 3282206720,3282223103,CH 3282223104,3282231295,BE 3282231296,3282239487,DE -3282239488,3282242223,SE -3282242224,3282242227,NO -3282242228,3282284543,SE -3282284544,3282284551,FI -3282284552,3282284567,SE -3282284568,3282284575,FR -3282284576,3282284579,FI +3282239488,3282284567,SE +3282284568,3282284579,FI 3282284580,3282284591,SE -3282284592,3282284595,FR +3282284592,3282284595,FI 3282284596,3282284599,SE -3282284600,3282284603,FR +3282284600,3282284603,FI 3282284604,3282284735,SE 3282284736,3282284783,FI -3282284784,3282286975,SE -3282286976,3282287007,FI -3282287008,3282287615,SE +3282284784,3282287615,SE 3282287616,3282287759,FI 3282287760,3282305023,SE 3282305024,3282370559,PL @@ -96679,6 +113853,7 @@ 3282743040,3282743295,CH 3282743296,3282743551,CY 3282743552,3282743807,SI +3282743808,3282744063,BG 3282744064,3282744319,UA 3282744320,3282744575,SA 3282744576,3282744831,LT @@ -96699,7 +113874,9 @@ 3282844864,3282952191,GB 3282952192,3282960383,NL 3282960384,3283091455,TR -3283091456,3283156991,CH +3283091456,3283111935,CH +3283111936,3283113471,LI +3283113472,3283156991,CH 3283156992,3283158215,DE 3283158216,3283158219,EE 3283158220,3283173375,DE @@ -96730,7 +113907,7 @@ 3283210752,3283211263,PL 3283211264,3283211775,GB 3283211776,3283212287,NL -3283212288,3283212799,RU +3283212288,3283212799,PL 3283212800,3283213311,BG 3283213312,3283213823,ES 3283213824,3283214335,UA @@ -96820,7 +113997,7 @@ 3283485184,3283485439,DE 3283485440,3283485695,UA 3283485696,3283485951,GB -3283485952,3283486207,SE +3283485952,3283486207,US 3283486208,3283486463,AT 3283486464,3283486719,UA 3283486720,3283486975,RU @@ -96857,7 +114034,7 @@ 3283495680,3283495935,NL 3283495936,3283496191,BG 3283496192,3283496447,DE -3283496448,3283496703,FR +3283496448,3283496703,HR 3283496704,3283496959,LV 3283496960,3283497215,DE 3283497216,3283497471,GB @@ -96867,7 +114044,7 @@ 3283498496,3283498751,PL 3283498752,3283499007,AT 3283499008,3283499263,DE -3283499264,3283499519,GB +3283499264,3283499519,RU 3283499520,3283499775,DE 3283499776,3283500031,GB 3283500032,3283500287,DE @@ -96924,15 +114101,11 @@ 3283550624,3283550655,FR 3283550656,3283550719,GB 3283550720,3283552255,AT -3283552256,3283552279,IT -3283552280,3283552287,EU -3283552288,3283552319,IT +3283552256,3283552319,IT 3283552320,3283552351,EU -3283552352,3283552415,IT -3283552416,3283552447,EU -3283552448,3283552495,IT -3283552496,3283552511,EU -3283552512,3283552575,IT +3283552352,3283552431,IT +3283552432,3283552447,EU +3283552448,3283552575,IT 3283552576,3283552639,DE 3283552640,3283552671,IT 3283552672,3283552703,CH @@ -97098,8 +114271,7 @@ 3283584032,3283584063,DE 3283584064,3283584127,IE 3283584128,3283585023,ZA -3283585024,3283585031,EU -3283585032,3283585279,ES +3283585024,3283585279,ES 3283585280,3283585535,ZA 3283585536,3283585679,ES 3283585680,3283585695,IE @@ -97116,7 +114288,8 @@ 3283586504,3283586559,EU 3283586560,3283586815,FR 3283586816,3283587071,DE -3283587072,3283587231,NL +3283587072,3283587199,EU +3283587200,3283587231,NL 3283587232,3283587327,EU 3283587328,3283587335,NL 3283587336,3283587343,GB @@ -97152,9 +114325,7 @@ 3283589824,3283589839,EU 3283589840,3283589887,DE 3283589888,3283590143,DK -3283590144,3283590159,EU -3283590160,3283590167,SE -3283590168,3283590175,EU +3283590144,3283590175,EU 3283590176,3283590207,SE 3283590208,3283590271,EU 3283590272,3283590319,SE @@ -97482,57 +114653,29 @@ 3284016384,3284016639,CH 3284016640,3284017151,DK 3284017152,3284025343,GR -3284025344,3284025359,DE -3284025360,3284025439,GB +3284025344,3284025439,GB 3284025440,3284025471,DE -3284025472,3284025535,GB -3284025536,3284025567,DE -3284025568,3284026399,GB -3284026400,3284026479,DE -3284026480,3284026495,GB -3284026496,3284026559,DE -3284026560,3284026815,GB -3284026816,3284026879,DE -3284026880,3284027231,GB -3284027232,3284027359,DE -3284027360,3284027743,GB -3284027744,3284027775,DE -3284027776,3284027807,GB -3284027808,3284027903,DE -3284027904,3284028415,GB +3284025472,3284027327,GB +3284027328,3284027343,DE +3284027344,3284028415,GB 3284028416,3284028671,DE 3284028672,3284028879,GB 3284028880,3284028895,DE -3284028896,3284028911,GB -3284028912,3284028927,DE -3284028928,3284029215,GB -3284029216,3284029311,DE -3284029312,3284029759,GB -3284029760,3284029791,DE -3284029792,3284030207,GB -3284030208,3284030463,DE -3284030464,3284030655,GB -3284030656,3284030687,DE -3284030688,3284031039,GB -3284031040,3284031103,DE -3284031104,3284031551,GB -3284031552,3284031615,DE -3284031616,3284031743,GB -3284031744,3284032031,DE -3284032032,3284032063,GB +3284028896,3284031743,GB +3284031744,3284031999,DE +3284032000,3284032063,GB 3284032064,3284032095,DE -3284032096,3284032127,GB -3284032128,3284032255,DE -3284032256,3284032639,GB -3284032640,3284032703,DE -3284032704,3284032767,GB -3284032768,3284032895,DE -3284032896,3284033535,GB +3284032096,3284032159,GB +3284032160,3284032191,DE +3284032192,3284032671,GB +3284032672,3284032703,DE +3284032704,3284033535,GB 3284033536,3284041727,RU 3284041728,3284041983,DK 3284041984,3284042239,SI 3284042240,3284042495,GB 3284042496,3284042751,AT +3284042752,3284043007,RU 3284043008,3284043263,DE 3284043264,3284043519,EE 3284043520,3284043775,DE @@ -97551,7 +114694,7 @@ 3284047104,3284047359,DK 3284047360,3284047615,DE 3284047616,3284047871,NL -3284047872,3284048127,HU +3284047872,3284048127,UA 3284048128,3284048383,DK 3284048384,3284048639,GB 3284048640,3284049151,FR @@ -97573,7 +114716,7 @@ 3284079616,3284080127,DE 3284080128,3284080639,BE 3284080640,3284081151,UA -3284081152,3284081663,CH +3284081152,3284081663,DE 3284081664,3284082175,IE 3284082176,3284082687,NO 3284082688,3284083199,RU @@ -97655,9 +114798,10 @@ 3284125184,3284125695,RO 3284125696,3284126207,UA 3284126208,3284127231,CZ -3284127232,3284127743,NL +3284127232,3284127743,HK 3284127744,3284128255,RU 3284128256,3284128767,GB +3284128768,3284129279,SE 3284129280,3284129791,UA 3284129792,3284130303,DE 3284130304,3284130815,GB @@ -97690,7 +114834,6 @@ 3284598784,3284664319,HU 3284664320,3284672511,GB 3284672512,3284680703,DE -3284680704,3284681215,UA 3284681216,3284681727,RO 3284681728,3284682239,FI 3284682240,3284682751,DE @@ -97700,11 +114843,12 @@ 3284684288,3284684799,FR 3284684800,3284685311,DE 3284685312,3284685823,NL -3284685824,3284686335,US +3284685824,3284686335,DE 3284686336,3284686847,RO 3284686848,3284687359,PL 3284687360,3284687871,UA 3284687872,3284688383,NG +3284688384,3284688895,IT 3284688896,3284697087,FR 3284697088,3284697215,GB 3284697216,3284697279,FR @@ -97760,15 +114904,9 @@ 3284795392,3284803583,FR 3284803584,3284811775,DE 3284811776,3284819967,KE -3284819968,3284820479,GB -3284820480,3284820495,DE -3284820496,3284823519,GB -3284823520,3284823527,DE -3284823528,3284825343,GB +3284819968,3284825343,GB 3284825344,3284825359,DE -3284825360,3284825423,GB -3284825424,3284825439,DE -3284825440,3284828159,GB +3284825360,3284828159,GB 3284828160,3284844543,AT 3284844544,3284860927,CH 3284860928,3284863743,DE @@ -97779,7 +114917,9 @@ 3284869632,3284869887,IT 3284869888,3284872959,DE 3284872960,3284873471,IT -3284873472,3284926463,DE +3284873472,3284913919,DE +3284913920,3284914175,GB +3284914176,3284926463,DE 3284926464,3284991999,NO 3284992000,3285057535,PL 3285057536,3285065727,IT @@ -97800,7 +114940,7 @@ 3285084160,3285085183,LU 3285085184,3285086207,GB 3285086208,3285088255,PL -3285088256,3285089279,RU +3285088256,3285089279,CZ 3285089280,3285090303,PL 3285090304,3285098495,DE 3285098496,3285114879,GB @@ -97864,9 +115004,7 @@ 3285387264,3285388287,PL 3285388288,3285389311,CH 3285389312,3285390335,FI -3285390336,3285391359,RU -3285391360,3285392383,AM -3285392384,3285393407,RU +3285390336,3285393407,RU 3285393408,3285394431,AT 3285394432,3285396479,RU 3285396480,3285397503,IR @@ -97890,7 +115028,8 @@ 3285419008,3285420031,SE 3285420032,3285424127,UA 3285424128,3285425151,RO -3285425152,3285427199,UA +3285425152,3285426175,LV +3285426176,3285427199,UA 3285427200,3285428223,GB 3285428224,3285429247,RU 3285429248,3285430271,UA @@ -97910,23 +115049,16 @@ 3285449728,3285450751,UA 3285450752,3285453055,GB 3285453056,3285453119,EU -3285453120,3285453415,GB -3285453416,3285453423,EU -3285453424,3285454047,GB -3285454048,3285454079,EU -3285454080,3285454175,GB -3285454176,3285454207,EU -3285454208,3285454847,GB -3285454848,3285455695,DE -3285455696,3285455711,EU -3285455712,3285455743,DE +3285453120,3285454847,GB +3285454848,3285455103,EU +3285455104,3285455743,DE 3285455744,3285455871,EU 3285455872,3285455887,DE 3285455888,3285455895,EU 3285455896,3285455903,GB 3285455904,3285455935,EU -3285455936,3285456015,DE -3285456016,3285456031,EU +3285455936,3285456023,DE +3285456024,3285456031,EU 3285456032,3285456255,DE 3285456256,3285456287,EU 3285456288,3285456351,DE @@ -97934,19 +115066,16 @@ 3285456384,3285456639,DE 3285456640,3285456703,DK 3285456704,3285456735,EU -3285456736,3285456743,DK -3285456744,3285456751,EU -3285456752,3285456767,DK +3285456736,3285456767,DK 3285456768,3285456831,EU 3285456832,3285456871,DK 3285456872,3285456879,EU 3285456880,3285456895,DK 3285456896,3285456959,GB 3285456960,3285456975,EU -3285456976,3285457023,GB -3285457024,3285457055,EU -3285457056,3285457151,GB -3285457152,3285457183,SE +3285456976,3285457151,GB +3285457152,3285457167,EU +3285457168,3285457183,SE 3285457184,3285457231,EU 3285457232,3285457247,SE 3285457248,3285457279,EU @@ -97955,17 +115084,13 @@ 3285457664,3285457759,IT 3285457760,3285457791,EU 3285457792,3285457919,IT -3285457920,3285457951,GB -3285457952,3285457983,EU -3285457984,3285458095,GB -3285458096,3285458103,EU -3285458104,3285458111,GB -3285458112,3285458175,EU +3285457920,3285458151,GB +3285458152,3285458175,EU 3285458176,3285458943,GB 3285458944,3285458975,DK 3285458976,3285459007,EU -3285459008,3285459103,DK -3285459104,3285459119,EU +3285459008,3285459079,DK +3285459080,3285459119,EU 3285459120,3285459327,DK 3285459328,3285459391,EU 3285459392,3285459535,DK @@ -97978,20 +115103,15 @@ 3285461008,3285461055,EU 3285461056,3285461111,NL 3285461112,3285461119,EU -3285461120,3285461231,NL -3285461232,3285461247,EU -3285461248,3285461263,NL +3285461120,3285461263,NL 3285461264,3285461279,BE 3285461280,3285461311,EU 3285461312,3285461375,CH 3285461376,3285461407,NL 3285461408,3285461423,EU -3285461424,3285461439,NL -3285461440,3285461447,EU +3285461424,3285461447,NL 3285461448,3285461455,DE -3285461456,3285461503,NL -3285461504,3285461527,EU -3285461528,3285461535,NL +3285461456,3285461535,NL 3285461536,3285461567,EU 3285461568,3285461807,NL 3285461808,3285461855,EU @@ -98001,9 +115121,7 @@ 3285461992,3285461999,GB 3285462000,3285462007,NL 3285462008,3285462015,EU -3285462016,3285462175,DE -3285462176,3285462191,EU -3285462192,3285462207,DE +3285462016,3285462207,DE 3285462208,3285462223,GB 3285462224,3285462367,DE 3285462368,3285462399,EU @@ -98012,38 +115130,35 @@ 3285462544,3285462655,DE 3285462656,3285462783,EU 3285462784,3285462831,AT -3285462832,3285462839,EU -3285462840,3285462847,AT -3285462848,3285462951,EU +3285462832,3285462951,EU 3285462952,3285462959,AT 3285462960,3285463007,EU 3285463008,3285463039,AT -3285463040,3285463079,LU -3285463080,3285463103,EU +3285463040,3285463087,LU +3285463088,3285463103,EU 3285463104,3285463135,LU 3285463136,3285463295,EU 3285463296,3285463311,FR 3285463312,3285463319,BE -3285463320,3285463327,FR -3285463328,3285463359,EU +3285463320,3285463359,EU 3285463360,3285463455,BE -3285463456,3285463519,EU +3285463456,3285463487,EU +3285463488,3285463503,GB +3285463504,3285463519,EU 3285463520,3285463615,BE 3285463616,3285463647,FR -3285463648,3285463743,BE +3285463648,3285463663,BE +3285463664,3285463671,EU +3285463672,3285463743,BE 3285463744,3285463775,EU -3285463776,3285463839,BE -3285463840,3285463855,EU -3285463856,3285463991,BE -3285463992,3285464015,EU -3285464016,3285464063,BE +3285463776,3285463991,BE +3285463992,3285464031,EU +3285464032,3285464063,BE 3285464064,3285464071,EU 3285464072,3285464095,BE 3285464096,3285464127,GB 3285464128,3285464319,EU -3285464320,3285464351,BE -3285464352,3285464359,EU -3285464360,3285464383,BE +3285464320,3285464383,BE 3285464384,3285464415,GB 3285464416,3285464431,BE 3285464432,3285464447,DE @@ -98060,7 +115175,9 @@ 3285465728,3285465855,EU 3285465856,3285465903,DE 3285465904,3285465911,EU -3285465912,3285466367,DE +3285465912,3285465951,DE +3285465952,3285465983,EU +3285465984,3285466367,DE 3285466368,3285466447,CH 3285466448,3285466455,EU 3285466456,3285466463,CH @@ -98070,20 +115187,18 @@ 3285466624,3285466879,AT 3285466880,3285466895,BG 3285466896,3285466911,EU -3285466912,3285466943,BG -3285466944,3285466951,EU -3285466952,3285466959,BG -3285466960,3285466983,EU -3285466984,3285467007,BG +3285466912,3285466959,BG +3285466960,3285466975,EU +3285466976,3285467007,BG 3285467008,3285467015,EU 3285467016,3285467023,BG 3285467024,3285467135,EU 3285467136,3285467391,DE 3285467392,3285467663,EU 3285467664,3285467679,DE -3285467680,3285467775,EU -3285467776,3285467807,DE -3285467808,3285467831,EU +3285467680,3285467711,EU +3285467712,3285467823,DE +3285467824,3285467831,EU 3285467832,3285467839,DE 3285467840,3285467935,EU 3285467936,3285467951,DE @@ -98091,64 +115206,65 @@ 3285467960,3285467967,EU 3285467968,3285468511,DE 3285468512,3285468575,EU -3285468576,3285468615,DE -3285468616,3285468623,GB +3285468576,3285468599,DE +3285468600,3285468607,EU +3285468608,3285468615,DE +3285468616,3285468623,EU 3285468624,3285469695,DE 3285469696,3285469727,EU 3285469728,3285471007,DE 3285471008,3285471039,EU -3285471040,3285471055,DE -3285471056,3285471103,EU +3285471040,3285471071,DE +3285471072,3285471103,EU 3285471104,3285471743,DE 3285471744,3285471807,EU 3285471808,3285471871,DE 3285471872,3285471935,EU -3285471936,3285471967,DE -3285471968,3285471999,EU -3285472000,3285472127,DE +3285471936,3285472127,DE 3285472128,3285472159,EU 3285472160,3285472175,DE 3285472176,3285472183,EU 3285472184,3285472223,DE 3285472224,3285472255,EU 3285472256,3285472287,DE -3285472288,3285472367,EU +3285472288,3285472319,EU +3285472320,3285472351,DE +3285472352,3285472367,EU 3285472368,3285472511,DE 3285472512,3285473327,EU 3285473328,3285473343,DE 3285473344,3285473439,EU -3285473440,3285473527,DE -3285473528,3285473535,EU -3285473536,3285473567,DE -3285473568,3285473583,EU +3285473440,3285473583,DE 3285473584,3285473591,GB 3285473592,3285473599,DE 3285473600,3285473631,EU 3285473632,3285473663,DE 3285473664,3285473791,EU 3285473792,3285474047,DE -3285474048,3285474079,EU -3285474080,3285474095,DE -3285474096,3285474175,EU -3285474176,3285474231,DE -3285474232,3285474239,EU -3285474240,3285474271,DE +3285474048,3285474095,EU +3285474096,3285474111,DE +3285474112,3285474175,EU +3285474176,3285474271,DE 3285474272,3285474303,EU 3285474304,3285474319,DE 3285474320,3285474335,EU -3285474336,3285474815,DE +3285474336,3285474367,DE +3285474368,3285474383,EU +3285474384,3285474815,DE 3285474816,3285475071,EU 3285475072,3285475135,DE 3285475136,3285475143,EU 3285475144,3285475167,DE 3285475168,3285475199,EU 3285475200,3285475207,DE -3285475208,3285475231,EU -3285475232,3285475327,DE +3285475208,3285475215,EU +3285475216,3285475327,DE 3285475328,3285475623,EU 3285475624,3285475647,AT 3285475648,3285475679,EU -3285475680,3285475711,AT +3285475680,3285475695,AT +3285475696,3285475703,EU +3285475704,3285475711,AT 3285475712,3285475775,EU 3285475776,3285475783,AT 3285475784,3285475807,EU @@ -98165,16 +115281,10 @@ 3285476896,3285477023,EU 3285477024,3285477087,AT 3285477088,3285477151,EU -3285477152,3285477263,IT -3285477264,3285477279,EU -3285477280,3285477319,IT -3285477320,3285477335,EU -3285477336,3285477343,IT +3285477152,3285477343,IT 3285477344,3285477359,EU 3285477360,3285477375,IT -3285477376,3285477631,FR -3285477632,3285477887,EU -3285477888,3285477919,FR +3285477376,3285477919,FR 3285477920,3285477951,EU 3285477952,3285477983,FR 3285477984,3285477999,EU @@ -98219,20 +115329,22 @@ 3285485640,3285485647,SK 3285485648,3285485727,EU 3285485728,3285485743,SK -3285485744,3285485799,EU +3285485744,3285485751,EU +3285485752,3285485759,SK +3285485760,3285485799,EU 3285485800,3285485815,SK 3285485816,3285486591,EU 3285486592,3285487103,IT 3285487104,3285487359,HU -3285487360,3285487391,NL -3285487392,3285487423,EU +3285487360,3285487375,NL +3285487376,3285487423,EU 3285487424,3285487487,GB 3285487488,3285487615,EU 3285487616,3285487679,NL 3285487680,3285487743,EU 3285487744,3285488127,NL -3285488128,3285488895,EU -3285488896,3285489663,GB +3285488128,3285488639,EU +3285488640,3285489663,GB 3285489664,3285490175,EU 3285490176,3285490319,RU 3285490320,3285490335,EU @@ -98255,38 +115367,29 @@ 3285492696,3285492735,GB 3285492736,3285493759,EU 3285493760,3285493775,ES -3285493776,3285493783,EU -3285493784,3285493791,ES -3285493792,3285493807,EU -3285493808,3285493887,ES -3285493888,3285493967,EU -3285493968,3285493983,ES -3285493984,3285493991,GB -3285493992,3285493999,EU +3285493776,3285493791,EU +3285493792,3285493887,ES +3285493888,3285493951,EU +3285493952,3285493983,ES +3285493984,3285493999,EU 3285494000,3285494015,ES 3285494016,3285494079,IT 3285494080,3285494111,EU 3285494112,3285494783,IT 3285494784,3285495807,EU 3285495808,3285496319,DE -3285496320,3285496335,ES -3285496336,3285496351,EU -3285496352,3285496383,ES -3285496384,3285496463,EU -3285496464,3285496471,ES -3285496472,3285496479,EU -3285496480,3285496495,ES +3285496320,3285496383,ES +3285496384,3285496447,EU +3285496448,3285496471,ES +3285496472,3285496495,EU 3285496496,3285496527,FR -3285496528,3285496543,EU +3285496528,3285496535,ES +3285496536,3285496543,EU 3285496544,3285496575,FR 3285496576,3285496607,EU -3285496608,3285496815,DE -3285496816,3285496831,EU -3285496832,3285497855,DE +3285496608,3285497855,DE 3285497856,3285497887,EU -3285497888,3285498031,DE -3285498032,3285498047,EU -3285498048,3285498079,DE +3285497888,3285498079,DE 3285498080,3285498095,EU 3285498096,3285498111,DE 3285498112,3285498367,IT @@ -98305,9 +115408,7 @@ 3285500288,3285500415,CZ 3285500416,3285500927,GB 3285500928,3285501183,DK -3285501184,3285501311,CZ -3285501312,3285501319,EU -3285501320,3285501327,CZ +3285501184,3285501327,CZ 3285501328,3285501335,EU 3285501336,3285501343,CZ 3285501344,3285501375,GB @@ -98316,8 +115417,8 @@ 3285501440,3285501567,CZ 3285501568,3285501727,EU 3285501728,3285501759,GB -3285501760,3285501767,CZ -3285501768,3285502207,EU +3285501760,3285501775,CZ +3285501776,3285502207,EU 3285502208,3285502463,CZ 3285502464,3285502495,IL 3285502496,3285502503,CY @@ -99079,7 +116180,8 @@ 3285571904,3285571967,SE 3285571968,3285572095,BE 3285572096,3285572223,DE -3285572224,3285572351,FI +3285572224,3285572335,BE +3285572336,3285572351,ES 3285572352,3285572367,IR 3285572368,3285572383,ES 3285572384,3285572447,BE @@ -99192,6 +116294,8 @@ 3285766656,3285767679,UA 3285767680,3285768191,FR 3285768192,3285768703,RU +3285768704,3285768959,RO +3285768960,3285769215,PL 3285769216,3285769727,DE 3285769728,3285770239,RO 3285770240,3285770495,NL @@ -99232,8 +116336,7 @@ 3285860352,3285868543,FI 3285868544,3285876735,IE 3285876736,3285909503,RU -3285909504,3285910015,GB -3285910016,3285910271,EU +3285909504,3285910271,GB 3285910272,3285910303,ES 3285910304,3285910335,GB 3285910336,3285910399,ES @@ -99245,7 +116348,8 @@ 3285911552,3285912575,EU 3285912576,3285913087,GB 3285913088,3285913215,ES -3285913216,3285913343,EU +3285913216,3285913279,GB +3285913280,3285913343,ES 3285913344,3285913599,GB 3285913600,3285915647,EU 3285915648,3285915903,GB @@ -99256,8 +116360,9 @@ 3285916704,3285916711,DE 3285916712,3285916719,CY 3285916720,3285916735,ES -3285916736,3285916799,GB -3285916800,3285917183,EU +3285916736,3285916831,GB +3285916832,3285916927,EU +3285916928,3285917183,GB 3285917184,3285917439,ES 3285917440,3285917695,YE 3285917696,3285918719,EU @@ -99267,12 +116372,9 @@ 3285919488,3285919743,UA 3285919744,3285921791,QA 3285921792,3285921823,CZ -3285921824,3285921855,GB -3285921856,3285921919,EU -3285921920,3285921983,GB -3285921984,3285922111,EU +3285921824,3285922111,GB 3285922112,3285922175,FR -3285922176,3285922183,EU +3285922176,3285922183,GB 3285922184,3285922191,RU 3285922192,3285922207,DE 3285922208,3285922239,ES @@ -99291,24 +116393,30 @@ 3285926408,3285926415,ES 3285926416,3285926431,GB 3285926432,3285926463,CH -3285926464,3285926847,EU -3285926848,3285926911,GB +3285926464,3285926527,GB +3285926528,3285926591,EU +3285926592,3285926623,FR +3285926624,3285926631,US +3285926632,3285926687,GB +3285926688,3285926719,IN +3285926720,3285926783,EU +3285926784,3285926911,GB 3285926912,3285927423,DE 3285927424,3285927679,GB 3285927680,3285927935,IR -3285927936,3285928063,EU +3285927936,3285927951,GB +3285927952,3285928063,EU 3285928064,3285928191,ES 3285928192,3285928207,PL 3285928208,3285928223,GB 3285928224,3285928255,DE 3285928256,3285928271,GB 3285928272,3285928287,DE -3285928288,3285928303,GB -3285928304,3285928447,EU +3285928288,3285928335,GB +3285928336,3285928447,EU 3285928448,3285928959,ES 3285928960,3285929983,EU -3285929984,3285930495,GB -3285930496,3285930559,EU +3285929984,3285930559,GB 3285930560,3285930575,ES 3285930576,3285930623,GB 3285930624,3285930631,BE @@ -99317,8 +116425,7 @@ 3285930656,3285930671,NL 3285930672,3285930679,BE 3285930680,3285930687,DE -3285930688,3285930751,EU -3285930752,3285931007,GB +3285930688,3285931007,GB 3285931008,3285932031,EU 3285932032,3285932287,NL 3285932288,3285932799,GB @@ -99327,11 +116434,12 @@ 3285933312,3285933567,ES 3285933568,3285934079,DE 3285934080,3285934591,GB -3285934592,3285935103,EU -3285935104,3285935615,GB +3285934592,3285934847,ES +3285934848,3285935615,GB 3285935616,3285938175,EU 3285938176,3285938431,ES -3285938432,3285938559,EU +3285938432,3285938447,GB +3285938448,3285938559,EU 3285938560,3285938607,GB 3285938608,3285938623,FR 3285938624,3285938631,NG @@ -99343,31 +116451,38 @@ 3285938952,3285938959,NL 3285938960,3285938975,US 3285938976,3285939071,ES -3285939072,3285939199,EU +3285939072,3285939087,EU +3285939088,3285939103,FR +3285939104,3285939199,EU 3285939200,3285939711,ES -3285939712,3285940223,EU -3285940224,3285940735,ES -3285940736,3285941247,GB -3285941248,3285942655,EU +3285939712,3285939727,EU +3285939728,3285939735,GB +3285939736,3285940223,EU +3285940224,3285940479,ES +3285940480,3285941247,GB +3285941248,3285942287,EU +3285942288,3285942303,NL +3285942304,3285942655,EU 3285942656,3285942783,IR 3285942784,3285943039,ES 3285943040,3285943295,SE 3285943296,3285943551,ES -3285943552,3285943559,GB -3285943560,3285943567,EU +3285943552,3285943567,GB 3285943568,3285943575,ES 3285943576,3285943583,DE -3285943584,3285943615,GB -3285943616,3285943679,EU +3285943584,3285943647,GB +3285943648,3285943679,NG 3285943680,3285943807,GB 3285943808,3285944319,EU 3285944320,3285944831,US 3285944832,3285945343,DK 3285945344,3285945599,ES -3285945600,3285945663,EU +3285945600,3285945615,EU +3285945616,3285945631,GB +3285945632,3285945663,EU 3285945664,3285945695,FR -3285945696,3285945727,GB -3285945728,3285945855,EU +3285945696,3285945743,GB +3285945744,3285945855,EU 3285945856,3285946111,GB 3285946112,3285946367,ES 3285946368,3285946879,GB @@ -99383,21 +116498,27 @@ 3285949696,3285949823,ES 3285949824,3285949855,EU 3285949856,3285949887,ES -3285949888,3285949951,EU +3285949888,3285949919,GB +3285949920,3285949951,EU 3285949952,3285950463,ES 3285950464,3285950719,GB 3285950720,3285950783,US -3285950784,3285950975,EU +3285950784,3285950815,GB +3285950816,3285950943,EU +3285950944,3285950975,GB 3285950976,3285951231,NL 3285951232,3285951487,IT -3285951488,3285951615,EU +3285951488,3285951519,GB +3285951520,3285951615,EU 3285951616,3285951647,GB 3285951648,3285951679,ES -3285951680,3285951743,EU +3285951680,3285951695,GB +3285951696,3285951743,EU 3285951744,3285951999,GB 3285952000,3285952255,IT 3285952256,3285952511,SA -3285952512,3285955583,EU +3285952512,3285953535,CA +3285953536,3285955583,EU 3285955584,3285955839,DE 3285955840,3285956095,ES 3285956096,3285956351,FR @@ -99406,7 +116527,11 @@ 3285956864,3285957631,PT 3285957632,3285957887,PL 3285957888,3285958143,GB -3285958144,3285958847,EU +3285958144,3285958655,EU +3285958656,3285958687,GB +3285958688,3285958783,EU +3285958784,3285958799,GB +3285958800,3285958847,EU 3285958848,3285958895,NL 3285958896,3285959039,GB 3285959040,3285959167,DE @@ -99415,7 +116540,8 @@ 3285959936,3285960191,ES 3285960192,3285960447,FR 3285960448,3285960703,GB -3285960704,3285962751,EU +3285960704,3285961727,CA +3285961728,3285962751,EU 3285962752,3285963775,DE 3285963776,3285964287,GB 3285964288,3285964799,FR @@ -99426,7 +116552,10 @@ 3285967616,3285968383,BE 3285968384,3285968639,ES 3285968640,3285968895,PL -3285968896,3285971199,EU +3285968896,3285971007,EU +3285971008,3285971039,GB +3285971040,3285971183,EU +3285971184,3285971199,GB 3285971200,3285971455,FR 3285971456,3285971711,DE 3285971712,3285971967,GB @@ -99434,7 +116563,13 @@ 3285972224,3285972479,EU 3285972480,3285972735,PL 3285972736,3285972991,FR -3285972992,3285975039,GB +3285972992,3285973095,GB +3285973096,3285973247,EU +3285973248,3285973767,GB +3285973768,3285973791,EU +3285973792,3285973823,GB +3285973824,3285974015,EU +3285974016,3285975039,GB 3285975040,3286106111,FR 3286106112,3286106687,EE 3286106688,3286106691,FI @@ -99462,9 +116597,7 @@ 3286264880,3286264895,NL 3286264896,3286279423,GB 3286279424,3286279679,US -3286279680,3286289919,GB -3286289920,3286290175,US -3286290176,3286291807,GB +3286279680,3286291807,GB 3286291808,3286291823,US 3286291824,3286302719,GB 3286302720,3286310911,NO @@ -99476,7 +116609,8 @@ 3286313984,3286314495,CH 3286314496,3286315007,IL 3286315008,3286315519,UA -3286315520,3286316031,DE +3286315520,3286315775,SI +3286315776,3286316031,BG 3286316032,3286316543,UA 3286316544,3286317055,NL 3286317056,3286317567,RU @@ -99530,7 +116664,9 @@ 3286367232,3286368255,BG 3286368256,3286376447,CH 3286376448,3286384639,GB -3286384640,3286401023,DE +3286384640,3286397607,DE +3286397608,3286397615,A2 +3286397616,3286401023,DE 3286401024,3286409215,GB 3286409216,3286417407,DE 3286417408,3286417663,UA @@ -99560,7 +116696,7 @@ 3286423808,3286424063,CZ 3286424064,3286424319,LV 3286424320,3286424575,FR -3286424576,3286424831,UA +3286424576,3286424831,RU 3286424832,3286425087,TR 3286425088,3286425343,RU 3286425344,3286425599,IT @@ -99573,9 +116709,7 @@ 3286566144,3286566271,TZ 3286566272,3286566655,AE 3286566656,3286567423,KW -3286567424,3286568191,AE -3286568192,3286568703,KW -3286568704,3286571007,AE +3286567424,3286571007,AE 3286571008,3286571775,KW 3286571776,3286630399,AE 3286630400,3286638591,BG @@ -99584,7 +116718,7 @@ 3286654976,3286655231,UA 3286655232,3286655487,KZ 3286655488,3286655743,LT -3286655744,3286655999,UA +3286655744,3286655999,RU 3286656000,3286656255,CH 3286656256,3286656511,RU 3286656512,3286656767,GR @@ -99666,7 +116800,9 @@ 3286790912,3286791679,GB 3286791680,3286791935,AT 3286791936,3286794239,GB -3286794240,3286892543,DE +3286794240,3286888447,DE +3286888448,3286889471,IE +3286889472,3286892543,DE 3286892544,3286893055,LI 3286893056,3286893567,RU 3286893568,3286894591,UA @@ -99706,7 +116842,6 @@ 3286907392,3286907647,AT 3286907648,3286907903,ES 3286907904,3286908159,CH -3286908160,3286908415,UA 3286908416,3286908671,FR 3286908672,3286908927,PL 3286908928,3286909951,CH @@ -99842,7 +116977,7 @@ 3287213312,3287213567,FR 3287213568,3287214079,RU 3287214080,3287214335,GB -3287214336,3287214847,DE +3287214336,3287214591,DE 3287214848,3287215103,IT 3287215104,3287215359,PL 3287215360,3287215615,GB @@ -99864,9 +116999,7 @@ 3287219712,3287220223,SE 3287220224,3287259375,RU 3287259376,3287259383,DK -3287259384,3287267191,RU -3287267192,3287267201,KZ -3287267202,3287271119,RU +3287259384,3287271119,RU 3287271120,3287271127,UZ 3287271128,3287285759,RU 3287285760,3287416831,NL @@ -99895,7 +117028,8 @@ 3287443968,3287444479,BG 3287444480,3287444991,PL 3287444992,3287445503,DE -3287445504,3287446527,UA +3287445504,3287446015,GB +3287446016,3287446527,UA 3287446528,3287447039,PL 3287447040,3287447551,IL 3287447552,3287448063,DK @@ -99907,6 +117041,7 @@ 3287450624,3287451135,SE 3287451136,3287451647,PL 3287451648,3287452159,ES +3287452160,3287452671,PL 3287452672,3287453183,CH 3287453184,3287454207,RU 3287454208,3287454719,SE @@ -99949,7 +117084,8 @@ 3287468032,3287469055,UA 3287469056,3287471103,DE 3287471104,3287472127,GB -3287472128,3287473151,FI +3287472128,3287472639,RU +3287472640,3287473151,UA 3287473152,3287474175,GB 3287474176,3287476223,DE 3287476224,3287477247,PL @@ -99958,32 +117094,23 @@ 3287479296,3287480319,RO 3287480320,3287481343,AT 3287481344,3287482367,PL -3287482368,3287499279,DE -3287499280,3287499287,FR -3287499288,3287499295,US -3287499296,3287499439,DE +3287482368,3287499439,DE 3287499440,3287499471,GB 3287499472,3287499487,DE 3287499488,3287499503,GB -3287499504,3287501359,DE -3287501360,3287501367,NL -3287501368,3287507983,DE +3287499504,3287507983,DE 3287507984,3287507991,FR 3287507992,3287515375,DE 3287515376,3287515383,CZ 3287515384,3287523303,DE 3287523304,3287523311,US -3287523312,3287526303,DE -3287526304,3287526311,LU -3287526312,3287534807,DE +3287523312,3287534807,DE 3287534808,3287534815,IT 3287534816,3287541087,DE 3287541088,3287541095,CZ 3287541096,3287542815,DE 3287542816,3287542831,US -3287542832,3287544647,DE -3287544648,3287544655,CH -3287544656,3287548927,DE +3287542832,3287548927,DE 3287548928,3287549439,UA 3287549440,3287549951,SE 3287549952,3287550463,UA @@ -100002,7 +117129,9 @@ 3287564288,3287572479,FI 3287572480,3287578863,DE 3287578864,3287578879,LI -3287578880,3287580671,DE +3287578880,3287580575,DE +3287580576,3287580607,LI +3287580608,3287580671,DE 3287580672,3287588863,LV 3287588864,3287597055,BE 3287597056,3287605247,GI @@ -100013,7 +117142,7 @@ 3287632384,3287632895,SE 3287632896,3287633407,RU 3287633408,3287633919,SK -3287633920,3287634431,UA +3287633920,3287634431,GB 3287634432,3287634943,RO 3287634944,3287635455,PL 3287635456,3287635967,DE @@ -100025,7 +117154,6 @@ 3287638528,3287639039,DE 3287639040,3287639551,GB 3287639552,3287640063,RU -3287640064,3287640575,DE 3287640576,3287641087,SI 3287641088,3287641599,A2 3287641600,3287642111,FI @@ -100048,7 +117176,7 @@ 3287664896,3287665151,GB 3287665152,3287665407,NO 3287665408,3287665919,PL -3287666176,3287666431,RU +3287665920,3287666431,RU 3287666432,3287666687,DK 3287666688,3287666943,SI 3287666944,3287667199,CZ @@ -100061,6 +117189,7 @@ 3287668736,3287668991,SI 3287668992,3287669247,PL 3287669248,3287669503,LI +3287669504,3287669759,MD 3287669760,3287670015,RO 3287670016,3287670271,UA 3287670272,3287670527,PL @@ -100116,36 +117245,11 @@ 3287710208,3287710719,RU 3287710720,3287711231,UA 3287711232,3287711743,PL -3287711744,3287711983,GB -3287711984,3287711999,FR -3287712000,3287712512,GB -3287712513,3287713023,FR -3287713024,3287713439,GB -3287713440,3287713471,FR -3287713472,3287713535,GB -3287713536,3287713567,FR -3287713568,3287713591,GB -3287713592,3287713598,FR -3287713599,3287713599,GB -3287713600,3287713603,FR -3287713604,3287713611,GB -3287713612,3287713615,FR -3287713616,3287713623,GB -3287713624,3287713667,FR -3287713668,3287713775,GB -3287713776,3287713791,FR -3287713792,3287714047,GB -3287714048,3287715071,FR -3287715072,3287715327,GB -3287715328,3287715839,FR -3287715840,3287716127,GB -3287716128,3287716143,FR -3287716144,3287717631,GB -3287717632,3287717887,FR -3287717888,3287718719,GB -3287718720,3287718731,FR -3287718732,3287718735,GB -3287718736,3287719935,FR +3287711744,3287718911,GB +3287718912,3287719167,FR +3287719168,3287719423,GB +3287719424,3287719679,FR +3287719680,3287719935,GB 3287719936,3287728127,DE 3287728128,3287729407,IT 3287729408,3287729663,SE @@ -100164,7 +117268,7 @@ 3287736832,3287737343,LV 3287737344,3287737855,GB 3287737856,3287738367,FR -3287738368,3287738879,GB +3287738368,3287738879,CH 3287738880,3287739391,DE 3287739392,3287739903,NL 3287739904,3287740415,PT @@ -100177,9 +117281,7 @@ 3287743488,3287743999,LV 3287744000,3287744511,FR 3287744512,3287810047,DE -3287810048,3287816495,FR -3287816496,3287816511,A2 -3287816512,3287818239,FR +3287810048,3287818239,FR 3287818240,3287826431,AT 3287826432,3287826687,LV 3287826688,3287826943,RO @@ -100253,14 +117355,14 @@ 3287949824,3287950079,IT 3287950080,3287950335,DE 3287950336,3287950591,UA -3287950592,3287950847,PL -3287950848,3287951103,DE +3287950592,3287951103,PL 3287951104,3287951359,HU 3287951360,3287951615,FR 3287951616,3287951871,CH 3287951872,3287952127,RU 3287952128,3287952383,UA -3287952384,3287953407,CH +3287952384,3287953151,CH +3287953152,3287953407,UA 3287953408,3287953663,DE 3287953664,3287953919,GB 3287953920,3287954175,DE @@ -100272,7 +117374,7 @@ 3287955712,3287955967,DE 3287955968,3287956223,SI 3287956224,3287956479,RO -3287956480,3287956735,FR +3287956480,3287956735,BG 3287956736,3287956991,SE 3287956992,3287957247,UA 3287957248,3287957503,GB @@ -100385,7 +117487,7 @@ 3288514560,3288530943,EG 3288530944,3288532991,JM 3288532992,3288534527,PR -3288534528,3288535039,EG +3288534528,3288535039,MG 3288535040,3288539135,AN 3288539136,3288545535,US 3288545536,3288545791,ZA @@ -100424,10 +117526,14 @@ 3288616960,3288617215,ZW 3288617216,3288661759,ZA 3288661760,3288662015,LS -3288662016,3289070335,ZA +3288662016,3288727551,ZA +3288727552,3288727807,MU +3288727808,3289063423,ZA +3289069568,3289070335,ZA 3289070336,3289070591,ZW 3289070592,3289070847,NA -3289070848,3289086975,ZA +3289070848,3289071103,ZA +3289071616,3289086975,ZA 3289086976,3289087231,SZ 3289087232,3289120767,ZA 3289120768,3289123327,PR @@ -100449,9 +117555,7 @@ 3289320192,3289320447,NA 3289321472,3289325567,IN 3289325568,3289333759,SA -3289333760,3289376767,ZA -3289376768,3289378815,SZ -3289378816,3289645055,ZA +3289333760,3289645055,ZA 3289645056,3289653247,NA 3289653248,3289661439,EG 3289661440,3289677823,DZ @@ -100510,6 +117614,7 @@ 3290118400,3290120191,US 3290120192,3290128383,MU 3290128384,3290136575,ZW +3290136576,3290169343,NG 3290169344,3290171135,ZA 3290171136,3290171391,SZ 3290171392,3290171647,ZA @@ -100549,9 +117654,11 @@ 3290489344,3290489855,KE 3290489856,3290490367,EG 3290490880,3290492927,ZA +3290492928,3290494975,TZ 3290497024,3290955775,ZA 3290955776,3290980351,CR 3290980352,3290984447,ZA +3290988544,3290992639,KE 3291004928,3291021311,NG 3291021312,3291029503,ZA 3291029504,3291033343,TZ @@ -100575,7 +117682,24 @@ 3291203584,3291203839,ZA 3291203840,3291204095,EG 3291204096,3291204351,KE -3291204352,3291204607,ZA +3291204352,3291204863,ZA +3291204864,3291205119,KE +3291205120,3291205631,GH +3291205632,3291206143,ZA +3291206144,3291206399,AO +3291206400,3291206911,KE +3291207168,3291207423,MG +3291207424,3291207679,NG +3291207680,3291207935,BW +3291207936,3291208447,KE +3291208448,3291208703,EG +3291208704,3291208959,KE +3291208960,3291209215,TZ +3291209216,3291209471,KE +3291209472,3291209727,AO +3291209728,3291209983,NG +3291209984,3291210239,GH +3291216896,3291217919,MU 3291217920,3291230207,ZA 3291230208,3291234303,GH 3291234304,3291242495,ZA @@ -100600,7 +117724,9 @@ 3291326464,3291330559,ZA 3291330560,3291331583,TZ 3291331584,3291332607,MW -3291332608,3291348991,NG +3291332608,3291332615,ZA +3291332616,3291332863,NG +3291332864,3291348991,ZA 3291348992,3291353087,MZ 3291353088,3291353343,KE 3291353344,3291353599,EG @@ -100649,8 +117775,7 @@ 3291437568,3291437823,NA 3291437824,3291439103,ZA 3291447296,3291463679,CI -3291480064,3291480319,MU -3291742208,3292004351,ZA +3291480064,3292528639,ZA 3300917248,3300921343,MU 3300925440,3300929535,MG 3300933632,3300950015,MU @@ -100663,8 +117788,7 @@ 3301470208,3301474303,NG 3301474304,3301490687,MA 3301490688,3301494783,DZ -3301494784,3301498879,NG -3301498880,3301507071,GH +3301494784,3301498879,TZ 3301507328,3301507583,US 3301507584,3301507839,GH 3301507840,3301508095,EG @@ -100727,6 +117851,9 @@ 3302536192,3302537215,GH 3302537216,3302538239,NG 3302538240,3302539263,GH +3302539264,3302540287,ZA +3302551552,3302552063,EG +3302552064,3302552575,KE 3302552576,3302552831,TZ 3302552832,3302553087,KE 3302553088,3302553343,EG @@ -100752,9 +117879,11 @@ 3302760448,3302768639,ZA 3302768640,3302776831,NG 3302776832,3302785023,ZW -3302801408,3302817791,NG +3302801408,3302805503,NG +3302805504,3302809599,MW +3302809600,3302817791,NG 3302817792,3302883327,EG -3302883328,3302948863,MA +3302883328,3302948863,RW 3302948864,3302949119,MU 3302949120,3302949375,AO 3302949376,3302949631,ZM @@ -100773,26 +117902,82 @@ 3302953728,3302953983,AO 3302953984,3302954239,SD 3302954240,3302954495,KE +3302954496,3302955007,ZA +3302955008,3302955263,LS +3302955264,3302955519,UG +3302955520,3302955775,ZW +3302955776,3302956031,MW 3305111552,3307208703,TN -3311403008,3311927295,ZA +3307208704,3309305855,EG +3309305856,3312451583,ZA +3312451584,3312975871,DZ +3312975872,3313500159,EG 3313500160,3313762303,MA 3313762304,3314024447,EG 3314024448,3314286591,KE 3314286592,3314548735,DZ +3315335168,3315351551,ZA +3315351552,3315367935,ET +3315367936,3315384319,KE +3315531776,3315539967,CM +3315548160,3315552255,NG +3315564544,3315568639,GH +3315568640,3315572735,MG +3315572736,3315580927,ST +3315580928,3315589119,CI +3315589120,3315597311,CM 3315597312,3316121599,EG 3316121600,3316645887,ZA 3316645888,3317170175,KE 3317694464,3318218751,EG 3318218752,3318743039,DZ +3319398400,3319529471,MZ +3319529472,3319537663,ZM +3319537664,3319545855,MW +3319545856,3319554047,SO +3319554048,3319562239,KE +3319562240,3319570431,LS +3319570432,3319578623,GH +3319578624,3319595007,ZM +3319595008,3319611391,ZA +3319611392,3319619583,GH +3319619584,3319627775,ZA +3319627776,3319635967,UG +3319635968,3319644159,ZA +3319644160,3319652351,TZ +3319652352,3319660543,ZW 3319660544,3319791615,EG 3319791616,3320053759,MU 3320578048,3320643583,ZA 3320643584,3320709119,KE +3320709120,3320840191,ZA +3320840192,3320905727,NG +3321069568,3321102335,NA +3321102336,3321167871,NG +3321167872,3321233407,ZA +3321233408,3321298943,EG +3321298944,3321364479,MA +3321364480,3321430015,KE +3321430016,3321495551,MZ +3321495552,3321561087,TZ +3321561088,3321593855,SD +3321593856,3321626623,GH +3321626624,3321692159,SD +3321692160,3321708543,NG +3321708544,3321724927,GH +3321724928,3321757695,MA 3321757696,3321790463,KE +3321790464,3321806847,LS 3321806848,3321823231,SD 3321823232,3321839615,NG 3321839616,3321855999,GH -3321886720,3321887743,MU +3321856000,3321860095,CV +3321860096,3321864191,ZA +3321864192,3321868287,NG +3321868288,3321872383,CG +3321872384,3321876479,GM +3321876480,3321880575,NG +3321880576,3321884671,KM 3321954304,3321970687,US 3322019840,3322023935,US 3322023936,3322028031,CL @@ -100815,7 +118000,8 @@ 3322675200,3322683391,US 3322683392,3322691583,BR 3322740736,3322773503,US -3322806272,3322875903,US +3322806272,3322871807,US +3322873856,3322875903,US 3322875904,3322888191,AU 3322937344,3322945535,US 3323003136,3323003391,JP @@ -100881,9 +118067,15 @@ 3323662336,3323674623,US 3323723776,3324011007,US 3324011008,3324011263,KN -3324011264,3324019711,US -3324019712,3324019967,KN -3324019968,3324051455,US +3324011264,3324030463,US +3324030464,3324030719,KN +3324030720,3324033791,US +3324033792,3324034047,KN +3324034048,3324035583,US +3324035584,3324035839,KN +3324035840,3324036351,US +3324036352,3324036607,KN +3324036608,3324051455,US 3324051456,3324182527,CA 3324182528,3324256255,US 3324256256,3324259327,SA @@ -100894,7 +118086,9 @@ 3324379136,3324380159,CA 3324380160,3324391423,US 3324395520,3324399615,US -3324411904,3324579839,US +3324411904,3324470271,US +3324470272,3324471295,GB +3324471296,3324579839,US 3324579840,3324583935,NZ 3324583936,3324588031,CL 3324592128,3324596223,US @@ -101137,18 +118331,17 @@ 3327996928,3328028671,US 3328028672,3328030719,AN 3328030720,3328180223,US -3328180224,3328210175,CA -3328210176,3328210943,AE -3328210944,3328214783,CA +3328180224,3328214783,CA 3328214784,3328215295,GB -3328215296,3328233983,CA -3328233984,3328234239,AE -3328234240,3328235007,CA +3328215296,3328235007,CA 3328235008,3328235263,US 3328235520,3328241663,CA -3328241664,3328243199,US +3328241664,3328242943,US +3328242944,3328243199,GB 3328243200,3328245759,CA -3328245760,3328414719,US +3328245760,3328394239,US +3328394240,3328394495,GB +3328394496,3328414719,US 3328414720,3328414975,CH 3328414976,3328420351,US 3328420352,3328420607,CA @@ -101217,7 +118410,32 @@ 3330778880,3330779135,GB 3330779136,3330791423,US 3330791424,3330791679,CA -3330791680,3331102463,US +3330791680,3330883583,US +3330883584,3330884351,NL +3330884352,3330884863,US +3330884864,3330885119,GB +3330885120,3330888063,US +3330888064,3330888127,NL +3330888128,3330888191,US +3330888192,3330888703,AU +3330888704,3330888959,US +3330888960,3330889215,CH +3330889216,3330889471,GB +3330889472,3330890239,JP +3330890240,3330890751,BE +3330890752,3330891263,GB +3330891264,3330892287,US +3330892288,3330892543,FR +3330892544,3330893567,US +3330893568,3330893823,NL +3330893824,3330894079,CA +3330894080,3330894591,GB +3330894592,3330894847,DE +3330894848,3330897919,US +3330897920,3330898175,CA +3330898176,3330898431,DE +3330898432,3330898943,FR +3330898944,3331102463,US 3331102464,3331102719,CA 3331102720,3331194879,US 3331194880,3331260415,AU @@ -101229,18 +118447,24 @@ 3331647232,3331647487,CA 3331647488,3331649279,US 3331649280,3331649535,CA -3331649536,3331818495,US +3331649536,3331798271,US +3331798272,3331798527,AU +3331798528,3331818495,US 3331818496,3331818751,MX 3331818752,3332440063,US 3332440064,3332460543,CA 3332460544,3332460799,US 3332460800,3332461311,CA -3332461568,3332554751,CA +3332461568,3332503039,CA +3332503040,3332503551,US +3332503552,3332554751,CA 3332558848,3332562943,CA 3332562944,3332563455,US 3332563456,3332590079,CA 3332590080,3332590591,US -3332590592,3332618239,CA +3332590592,3332616191,CA +3332616192,3332616959,US +3332616960,3332617471,CA 3332618240,3332624383,US 3332624384,3332724735,CA 3332724736,3332726783,PM @@ -101344,7 +118568,9 @@ 3337060352,3337289727,US 3337289728,3337297919,CA 3337297920,3337302015,US -3337302016,3337335295,CA +3337302016,3337304319,CA +3337304320,3337305599,US +3337305600,3337335295,CA 3337335296,3337335807,US 3337335808,3337355263,CA 3337355264,3337650175,US @@ -101467,7 +118693,7 @@ 3338916352,3338916479,CN 3338916480,3339075583,US 3339075584,3339076863,GB -3339076864,3339077631,NO +3339076864,3339077631,JP 3339077632,3339077887,SG 3339077888,3339079167,US 3339079168,3339079423,DK @@ -101485,14 +118711,13 @@ 3339093504,3339094015,NL 3339094016,3339142655,US 3339142656,3339142911,NL -3339142912,3339145727,US -3339145728,3339145983,NL -3339145984,3339146239,US +3339142912,3339146239,US 3339146496,3339147007,US 3339147008,3339147775,CA 3339147776,3339148031,MS -3339148032,3339149311,US -3339157504,3339159551,US +3339148032,3339153407,US +3339153408,3339155455,BB +3339155456,3339159551,US 3339159552,3339160575,CA 3339160576,3339164671,US 3339164672,3339165695,CA @@ -101508,10 +118733,18 @@ 3339184128,3339184639,CA 3339184640,3339184895,US 3339184896,3339186175,CA -3339186176,3339669503,US +3339186176,3339327999,US +3339328512,3339329535,CA +3339329536,3339337727,US +3339337984,3339338239,US +3339338240,3339338495,CA +3339338496,3339669503,US 3339669504,3339671807,CA -3339672576,3339673599,US -3339681792,3339747327,US +3339672576,3339728895,US +3339728896,3339729919,AG +3339729920,3339743231,US +3339743232,3339744255,CA +3339744256,3339747327,US 3339747328,3339747583,CA 3339747584,3339747839,FR 3339747840,3339748351,CA @@ -101519,20 +118752,27 @@ 3339753472,3339754495,CA 3339754496,3339760639,US 3339760640,3339761663,CA -3339761664,3339778303,US -3339778304,3339778367,GB -3339778368,3339778431,US -3339778432,3339778495,CY +3339761664,3339778431,US +3339778432,3339778447,CY +3339778448,3339778455,US +3339778456,3339778471,CY +3339778472,3339778479,US +3339778480,3339778495,CY 3339778496,3339923455,US 3339923456,3339927551,CA -3339943936,3339952127,US +3339927552,3339934719,US +3339934720,3339935743,CA +3339935744,3339952127,US 3339952128,3339956223,CA 3339956224,3339965439,US 3339965440,3339969311,CA 3339969312,3339969327,AU 3339969328,3339969375,CA -3339969376,3340058623,US -3340075008,3340080127,US +3339969376,3340071007,US +3340071008,3340071055,GB +3340071056,3340071063,US +3340071064,3340071071,ES +3340071072,3340080127,US 3340080128,3340081151,CA 3340081152,3340084223,US 3340084224,3340085247,KN @@ -101545,16 +118785,20 @@ 3340369920,3340386559,US 3340387328,3340388351,CA 3340388352,3340390399,US -3340394496,3340429823,US +3340390400,3340391423,CA +3340391424,3340429823,US 3340429824,3340430079,PA -3340430080,3340451839,US -3340468224,3340481535,US +3340430080,3340460031,US +3340460032,3340462079,PR +3340462080,3340466175,US +3340466176,3340467199,A2 +3340467200,3340481535,US 3340481536,3340482559,CA 3340482560,3340490751,US 3340490752,3340492799,CA 3340492800,3340584703,US 3340584704,3340584959,KW -3340584960,3340648447,US +3340584960,3340664831,US 3340664832,3340665855,CA 3340665856,3340677119,US 3340677120,3340679167,CA @@ -101607,8 +118851,7 @@ 3340926160,3340926175,AR 3340926176,3340926199,US 3340926200,3340926207,DE -3340926208,3340926215,US -3340926216,3340926223,BO +3340926208,3340926223,US 3340926224,3340926231,PT 3340926232,3340926247,CA 3340926248,3340926255,AR @@ -101652,10 +118895,15 @@ 3340926928,3340926935,ES 3340926936,3340926951,US 3340926952,3340926959,BR -3340926960,3341041663,US -3341058048,3341082623,US +3340926960,3341082623,US 3341082624,3341084671,CA -3341084672,3341444863,US +3341084672,3341180927,US +3341180928,3341182975,CA +3341182976,3341205503,US +3341205504,3341207551,VC +3341207552,3341216767,US +3341216768,3341217791,CA +3341217792,3341444863,US 3341444864,3341445631,DE 3341445632,3341479935,US 3341479936,3341480447,DE @@ -101687,15 +118935,30 @@ 3341645056,3341645567,CA 3341645568,3341646079,US 3341646080,3341646591,CA -3341646592,3341762559,US +3341646592,3341709311,US +3341709312,3341710335,CA +3341710336,3341758463,US +3341758464,3341759487,CA +3341759488,3341760511,BB +3341760512,3341762559,CA +3341762560,3341777919,US +3341777920,3341778943,CA 3341778944,3341807615,US 3341807616,3341808639,CA 3341808640,3341828095,US -3341844480,3341863935,US +3341828096,3341829119,CA +3341830144,3341832191,US +3341844480,3341854079,US +3341854080,3341854207,SG +3341854208,3341854551,US +3341854552,3341854559,SG +3341854560,3341863935,US 3341863936,3341864959,AG 3341864960,3341867007,US 3341867008,3341869055,CA -3341869056,3342139391,US +3341869056,3341873151,US +3341873152,3341875199,A1 +3341875200,3342139391,US 3342139392,3342204927,CH 3342204928,3342483455,US 3342499840,3342505983,US @@ -101708,7 +118971,9 @@ 3342526464,3342528511,CA 3342528512,3342548991,US 3342565376,3342567423,CA -3342567424,3342579711,US +3342567424,3342569471,US +3342569472,3342569727,CR +3342569728,3342579711,US 3342579712,3342581759,CA 3342581760,3342595071,US 3342595072,3342595839,CA @@ -101720,7 +118985,63 @@ 3342605312,3342605567,US 3342605568,3342663679,CA 3342663680,3343007743,US -3343024128,3343055871,US +3343024128,3343046915,US +3343046916,3343046919,GB +3343046920,3343046927,IT +3343046928,3343046939,US +3343046940,3343046943,RU +3343046944,3343046947,KW +3343046948,3343046951,PT +3343046952,3343046955,US +3343046956,3343046959,IT +3343046960,3343046963,BE +3343046964,3343046967,US +3343046968,3343046971,NL +3343046972,3343046979,US +3343046980,3343046983,GB +3343046984,3343046987,US +3343046988,3343046991,CA +3343046992,3343046999,US +3343047000,3343047003,RU +3343047004,3343047011,US +3343047012,3343047015,AU +3343047016,3343047039,US +3343047040,3343047047,CA +3343047048,3343047079,US +3343047080,3343047087,GR +3343047088,3343047111,US +3343047112,3343047127,SG +3343047128,3343047143,US +3343047144,3343047159,IT +3343047160,3343047327,US +3343047328,3343047343,IT +3343047344,3343047423,US +3343047424,3343047439,RU +3343047440,3343047455,UA +3343047456,3343047471,IE +3343047472,3343047519,US +3343047520,3343047535,IN +3343047536,3343047599,US +3343047600,3343047615,GB +3343047616,3343047687,US +3343047688,3343047695,CA +3343047696,3343047727,US +3343047728,3343047735,CA +3343047736,3343047743,US +3343047744,3343047751,AU +3343047752,3343047759,BR +3343047760,3343047791,US +3343047792,3343047799,PL +3343047800,3343047847,US +3343047848,3343047855,IT +3343047856,3343047863,US +3343047864,3343047871,RU +3343047872,3343047879,AU +3343047880,3343047903,US +3343047904,3343047911,AR +3343047912,3343047935,US +3343047936,3343047967,CA +3343047968,3343055871,US 3343055872,3343056895,CA 3343056896,3343167487,US 3343167488,3343169535,CA @@ -101732,9 +119053,7 @@ 3343365632,3343372543,CA 3343373312,3343376383,US 3343380480,3343384575,CA -3343384576,3343922175,US -3343922176,3343922303,PA -3343922304,3343922975,US +3343384576,3343922975,US 3343922976,3343923007,PA 3343923008,3343923135,US 3343923136,3343923199,HK @@ -101745,7 +119064,9 @@ 3344146432,3344154623,US 3344154624,3344156671,GD 3344156672,3344158719,CA -3344158720,3344166911,US +3344158720,3344165631,US +3344165632,3344165663,MX +3344165664,3344166911,US 3344166912,3344168959,CA 3344168960,3344171007,US 3344171008,3344255999,CA @@ -101763,11 +119084,25 @@ 3344299776,3344300543,CA 3344300544,3344300799,US 3344300800,3344302079,CA -3344302080,3344486399,US +3344302080,3344406527,US +3344406528,3344408575,CA +3344408576,3344429055,US +3344429056,3344429343,CA +3344429344,3344429375,US +3344429376,3344431103,CA +3344431104,3344486399,US 3344486400,3344488447,NL 3344488448,3344633855,US 3344633856,3344637951,CH 3344637952,3344642047,US +3344662528,3344670719,US +3344670720,3344671743,GP +3344671744,3344676863,US +3344676864,3344678911,CA +3344678912,3344681983,US +3344681984,3344685055,CA +3344685056,3344694271,US +3344694272,3344695295,CA 3344695296,3344937471,US 3344937472,3344937983,EG 3344937984,3344938239,US @@ -101777,8 +119112,132 @@ 3344955648,3344964607,US 3344964608,3344965631,CA 3344965632,3344969727,US -3345022976,3345367039,US -3345416192,3345418239,US +3344990208,3345007615,US +3345007616,3345008639,CA +3345008640,3345010687,US +3345010688,3345011711,CA +3345011712,3345301503,US +3345317888,3345318943,US +3345318944,3345318975,HK +3345318976,3345321471,US +3345321472,3345321727,CA +3345321728,3345327103,US +3345327104,3345328127,CA +3345328128,3345333247,US +3345333248,3345334271,MF +3345334272,3345339391,US +3345339392,3345340415,CA +3345340416,3345367039,US +3345383424,3345384447,CA +3345384448,3345390591,US +3345390592,3345391615,CA +3345391616,3345393151,US +3345393152,3345393279,AU +3345393280,3345393407,US +3345393408,3345393535,AU +3345393536,3345398783,US +3345398784,3345399807,BS +3345399808,3345401855,PR +3345401856,3345403903,CA +3345403904,3345408005,US +3345408006,3345408009,CZ +3345408010,3345408017,US +3345408018,3345408021,GB +3345408022,3345408092,US +3345408093,3345408094,GB +3345408095,3345408098,VE +3345408099,3345408110,US +3345408111,3345408114,AU +3345408115,3345408161,US +3345408162,3345408165,CA +3345408166,3345408189,US +3345408190,3345408193,AR +3345408194,3345408197,US +3345408198,3345408225,IN +3345408226,3345408227,GB +3345408228,3345408235,US +3345408236,3345408239,CN +3345408240,3345408319,US +3345408320,3345408323,GB +3345408324,3345408335,US +3345408336,3345408339,GB +3345408340,3345408386,US +3345408387,3345408394,GB +3345408395,3345408415,US +3345408416,3345408420,AU +3345408421,3345408424,US +3345408425,3345408428,GB +3345408429,3345408460,US +3345408461,3345408464,IN +3345408465,3345408479,US +3345408480,3345408483,GB +3345408484,3345408534,US +3345408535,3345408538,AU +3345408539,3345408542,CA +3345408543,3345408569,US +3345408570,3345408573,CA +3345408574,3345408577,US +3345408578,3345408589,GB +3345408590,3345408634,US +3345408635,3345408639,CA +3345408640,3345408651,US +3345408652,3345408655,CA +3345408656,3345408667,US +3345408668,3345408671,CA +3345408672,3345408697,US +3345408698,3345408701,GB +3345408702,3345408784,US +3345408785,3345408788,CA +3345408789,3345408888,US +3345408889,3345408892,MX +3345408893,3345408903,US +3345408904,3345408907,GB +3345408908,3345408949,US +3345408950,3345408993,IN +3345408994,3345409033,US +3345409034,3345409037,CA +3345409038,3345409085,US +3345409086,3345409089,CA +3345409090,3345409093,US +3345409094,3345409097,CA +3345409098,3345409101,US +3345409102,3345409105,GB +3345409106,3345409171,US +3345409172,3345409175,GB +3345409176,3345409179,CN +3345409180,3345409204,US +3345409205,3345409212,AU +3345409213,3345409217,US +3345409218,3345409221,AU +3345409222,3345409245,US +3345409246,3345409255,GB +3345409256,3345409558,US +3345409559,3345409562,CA +3345409563,3345409576,US +3345409577,3345409580,GB +3345409581,3345409706,US +3345409707,3345409718,IN +3345409719,3345409722,US +3345409723,3345409727,GB +3345409728,3345409782,US +3345409783,3345409786,SG +3345409787,3345409816,US +3345409817,3345409820,GB +3345409821,3345409887,US +3345409888,3345409891,GB +3345409892,3345409895,US +3345409896,3345409899,PR +3345409900,3345409903,CA +3345409904,3345409911,US +3345409912,3345409915,CA +3345409916,3345409919,AU +3345409920,3345409945,US +3345409946,3345409949,SG +3345409950,3345409957,US +3345409958,3345409961,CA +3345409962,3345410032,US +3345410033,3345410036,GB +3345410037,3345418239,US 3345418240,3345419519,NL 3345419520,3345422847,US 3345423360,3345424383,TC @@ -101820,12 +119279,71 @@ 3345666592,3345666639,NO 3345666640,3345667103,US 3345667104,3345667119,IN -3345667120,3346282495,US +3345667120,3346219007,US +3346235392,3346241535,US +3346241536,3346243583,CA +3346243584,3346282495,US 3346282496,3346284543,PR -3346333696,3346923519,US +3346300928,3346323455,US +3346323456,3346325503,CA +3346325504,3346327551,US +3346327552,3346328575,CA +3346328576,3346481151,US +3346497536,3346498559,CA +3346498560,3346499583,US +3346499584,3346501631,VI +3346501632,3346505951,US +3346505952,3346505959,CA +3346505960,3346506007,US +3346506008,3346506015,EG +3346506016,3346506039,US +3346506040,3346506055,CA +3346506056,3346506111,US +3346506112,3346506119,JM +3346506120,3346506127,MX +3346506128,3346506271,US +3346506272,3346506279,GB +3346506280,3346506287,CA +3346506288,3346506311,US +3346506312,3346506319,CO +3346506320,3346506567,US +3346506568,3346506575,TR +3346506576,3346510271,US +3346510272,3346510335,IL +3346510336,3346520063,US +3346520064,3346521087,CA +3346521088,3346522347,US +3346522348,3346522350,BD +3346522351,3346522401,US +3346522402,3346522404,IN +3346522405,3346522411,US +3346522412,3346522413,AE +3346522414,3346522691,US +3346522692,3346522704,PT +3346522705,3346522773,US +3346522774,3346522783,PT +3346522784,3346523113,US +3346523114,3346523121,TH +3346523122,3346523135,US +3346523136,3346523391,BO +3346523392,3346523647,RU +3346523648,3346523903,US +3346523904,3346524159,FR +3346524160,3346525183,CA +3346525184,3346528255,US +3346528256,3346529279,PR +3346529280,3346530303,CA +3346530304,3346923519,US 3346923520,3346989055,CA 3346989056,3347005439,US -3347054592,3349268479,US +3347021824,3347022847,CA +3347022848,3347030527,US +3347030528,3347030783,IN +3347030784,3347033087,US +3347033088,3347034111,CA +3347034112,3347039231,US +3347039232,3347040255,DM +3347040256,3349268479,US 3349268480,3349268991,CA 3349268992,3349273087,US 3349273088,3349273343,CA @@ -101842,7 +119360,33 @@ 3349608448,3349609215,US 3349609216,3349610495,CA 3349610496,3349614591,US -3349676032,3349987327,US +3349643264,3349643487,CA +3349643488,3349643503,US +3349643504,3349644287,CA +3349644288,3349644656,US +3349644657,3349644672,GB +3349644673,3349645215,US +3349645216,3349645231,ID +3349645232,3349645311,US +3349645312,3349647359,CA +3349647360,3349649407,US +3349649408,3349653503,CA +3349653504,3349692415,US +3349708800,3349723260,US +3349723261,3349723265,CA +3349723266,3349723360,US +3349723361,3349723367,CA +3349723368,3349723996,US +3349723997,3349724000,LK +3349724001,3349724985,US +3349724986,3349724999,PK +3349725000,3349731327,US +3349731328,3349733375,CA +3349733376,3349739519,US +3349739520,3349739551,CA +3349739552,3349739559,US +3349739560,3349740543,CA +3349740544,3349987327,US 3349987328,3349996543,BM 3349996544,3349997055,KY 3349997056,3350003711,BM @@ -101859,7 +119403,27 @@ 3350470656,3350475775,US 3350475776,3350476799,CA 3350476800,3350478847,US -3350528000,3350593535,US +3350495232,3350495577,US +3350495578,3350495585,GB +3350495586,3350495602,US +3350495603,3350495604,BD +3350495605,3350495645,US +3350495646,3350495652,RO +3350495653,3350495873,US +3350495874,3350495874,IN +3350495875,3350495881,US +3350495882,3350495882,IN +3350495883,3350496305,US +3350496306,3350496317,PT +3350496318,3350496447,US +3350496448,3350496455,PT +3350496456,3350496532,US +3350496533,3350496533,IN +3350496534,3350496659,US +3350496660,3350496675,BR +3350496676,3350496721,US +3350496722,3350496723,IN +3350496724,3350593535,US 3350593536,3350609919,CA 3350614016,3350618111,US 3350626304,3350790143,US @@ -101868,14 +119432,50 @@ 3350825984,3350855679,CA 3350855680,3350862079,US 3350862080,3350864639,CL -3350864640,3350953983,US -3350986752,3350994943,US +3350864640,3350970367,US +3350970368,3350971391,CA +3350971392,3350979583,US +3350979584,3350980607,CA +3350980608,3350994943,US 3350994944,3350998015,CA 3350998016,3350999039,US -3351052288,3351068671,US -3351117824,3351232511,US +3351019520,3351030783,US +3351030784,3351031807,CA +3351031808,3351034879,US +3351034880,3351035903,CA +3351035904,3351036927,US +3351036928,3351037951,CA +3351037952,3351043071,US +3351043072,3351043079,FR +3351043080,3351044095,CA +3351044096,3351068671,US +3351085056,3351086079,US +3351086080,3351087103,CA +3351087104,3351103487,US +3351103488,3351104511,CA +3351104512,3351112703,US +3351112704,3351113727,CA +3351113728,3351232511,US 3351232512,3351232767,IL -3351232768,3351380223,US +3351232768,3351265279,US +3351281664,3351293951,US +3351293952,3351294975,CA +3351294976,3351295999,US +3351296000,3351298047,CA +3351298048,3351303167,US +3351303168,3351304191,CA +3351304192,3351306239,US +3351306240,3351307263,VC +3351307264,3351307519,US +3351307520,3351307775,CA +3351307776,3351308287,US +3351308288,3351310335,CA +3351310336,3351330815,US +3351347200,3351357439,US +3351357440,3351359487,CA +3351359488,3351372799,US +3351372800,3351373823,BM +3351373824,3351380223,US 3351380224,3351380479,CA 3351380480,3351380735,US 3351380736,3351381759,CA @@ -101981,13 +119581,19 @@ 3351441152,3351441407,CA 3351441408,3351441919,US 3351441920,3351442175,CA -3351442176,3351478271,US +3351442176,3351483391,US +3351483392,3351484415,CA +3351484416,3351485439,US 3351511040,3351524095,US 3351524096,3351524351,GB 3351524352,3351642111,US 3351642112,3351698431,CA 3351698432,3351904255,US -3351904256,3351969791,CA +3351912448,3351927551,CA +3351927552,3351927807,US +3351927808,3351959551,CA +3351959552,3351961599,US +3351961600,3351969791,CA 3351969792,3352035327,IL 3352035328,3352036351,CA 3352036352,3352046591,US @@ -101998,7 +119604,9 @@ 3352066048,3352067071,CA 3352067072,3352068095,US 3352068096,3352069119,CA -3352069120,3352082431,US +3352069120,3352069919,US +3352069920,3352069935,CO +3352069936,3352082431,US 3352082432,3352083455,JM 3352083456,3352088575,US 3352088576,3352090623,CA @@ -102015,7 +119623,37 @@ 3353722624,3353729023,US 3353729024,3353729279,HK 3353729280,3353730047,US -3353739264,3353979647,US +3353739264,3353752581,US +3353752582,3353752585,FR +3353752586,3353752589,BE +3353752590,3353752606,US +3353752607,3353752610,AU +3353752611,3353752630,US +3353752631,3353752634,CA +3353752635,3353752650,US +3353752651,3353752654,AU +3353752655,3353752677,US +3353752678,3353752681,ES +3353752682,3353752716,US +3353752717,3353752720,IT +3353752721,3353752740,US +3353752741,3353752744,CA +3353752745,3353752748,US +3353752749,3353752752,CA +3353752753,3353752769,US +3353752770,3353752773,AU +3353752774,3353752811,US +3353752812,3353752815,CA +3353752816,3353752828,US +3353752829,3353752830,FR +3353752831,3353752936,US +3353752937,3353752940,SE +3353752941,3353752987,US +3353752988,3353752991,GB +3353752992,3353753055,US +3353753056,3353753059,BR +3353753060,3353753067,GB +3353753068,3353979647,US 3353979648,3353979903,CA 3353979904,3353982719,US 3353982720,3353983231,CA @@ -102045,7 +119683,7 @@ 3355260928,3355262719,CA 3355262720,3355310591,US 3355310592,3355311103,CA -3355312128,3355319295,US +3355311104,3355319295,US 3355319296,3355320319,CA 3355320320,3355324415,US 3355324416,3355328511,CA @@ -102345,7 +119983,7 @@ 3356102656,3356105727,CL 3356105728,3356106751,SV 3356106752,3356113919,BR -3356113920,3356114431,UY +3356113920,3356114943,UY 3356114944,3356123135,PE 3356123136,3356131839,AR 3356131840,3356132351,PE @@ -102401,7 +120039,6 @@ 3356157952,3356158207,CL 3356158208,3356158463,MX 3356158464,3356158719,CL -3356158720,3356158975,AR 3356158976,3356159743,CL 3356159744,3356160255,MX 3356160256,3356160511,GT @@ -102516,8 +120153,8 @@ 3356341808,3356341863,SV 3356341864,3356341871,HN 3356341872,3356343295,SV -3356343296,3356343423,HN -3356343424,3356344319,SV +3356343296,3356343551,HN +3356343552,3356344319,SV 3356344320,3356360703,CO 3356360704,3356362751,CL 3356362752,3356364799,VE @@ -102535,9 +120172,14 @@ 3356380928,3356381183,DO 3356381184,3356381439,CL 3356381440,3356381695,PA +3356381696,3356381951,CL +3356381952,3356382207,EC 3356382208,3356389375,CL 3356389376,3356389887,CO -3356389888,3356391423,CL +3356389888,3356390399,CL +3356390400,3356390655,AR +3356390656,3356391167,CL +3356391168,3356391423,PA 3356391424,3356393471,CO 3356393472,3356413183,CL 3356413184,3356413951,CO @@ -102549,11 +120191,22 @@ 3356493824,3356495871,ZA 3356495872,3356499967,AR 3356499968,3356508159,MX -3356508160,3356514303,AR +3356508160,3356508671,AR +3356508672,3356509183,CR +3356509184,3356510207,VE +3356510208,3356511999,AR +3356512000,3356512255,CO +3356512256,3356514303,AR 3356514304,3356514559,US +3356514560,3356514815,AR +3356514816,3356515327,DO +3356515328,3356515839,AN +3356515840,3356516095,EC +3356516096,3356516351,VE 3356516352,3356520447,AR 3356520448,3356521471,CL 3356521472,3356521727,AR +3356521728,3356522495,CO 3356522496,3356557311,AR 3356557312,3356819455,BR 3356819456,3356884991,CO @@ -102693,8 +120346,8 @@ 3358064640,3358130175,UY 3358130176,3358131199,EC 3358131200,3358131391,CO -3358131392,3358131415,GT -3358131416,3358131983,CO +3358131392,3358131407,GT +3358131408,3358131983,CO 3358131984,3358131991,GT 3358131992,3358132223,CO 3358132224,3358132479,AR @@ -102716,7 +120369,9 @@ 3358150656,3358151167,EC 3358151168,3358151423,PY 3358151424,3358151679,CO -3358151680,3358152703,GT +3358151680,3358151935,GT +3358151936,3358152063,PE +3358152064,3358152703,GT 3358152704,3358152735,AR 3358152736,3358152767,VE 3358152768,3358152831,US @@ -102805,13 +120460,14 @@ 3358720000,3358720075,PR 3358720076,3358720083,DO 3358720084,3358722047,PR -3358722048,3358723071,DO +3358722048,3358722671,DO +3358722672,3358722687,PR +3358722688,3358723071,DO 3358723072,3358723327,PR 3358723328,3358723583,AN 3358723584,3358724095,PR 3358724096,3358725119,DO -3358725120,3358725375,AN -3358725376,3358728191,PR +3358725120,3358728191,PR 3358728192,3358736383,CL 3358736384,3358737111,BB 3358737112,3358737119,CA @@ -102939,7 +120595,9 @@ 3359475520,3359475551,AR 3359475552,3359475615,CO 3359475616,3359475623,AR -3359475624,3359478687,CO +3359475624,3359477247,CO +3359477248,3359477759,AR +3359477760,3359478687,CO 3359478688,3359478719,AR 3359478720,3359479295,CO 3359479296,3359479303,AR @@ -102969,6 +120627,10 @@ 3359481856,3359498239,AR 3359498240,3359501311,PY 3359501312,3359502335,SR +3359502336,3359505407,AR +3359505408,3359505663,VE +3359505664,3359505919,AN +3359505920,3359506431,AR 3359506432,3359508479,US 3359508480,3359514623,VE 3359514624,3359516671,GT @@ -103034,7 +120696,9 @@ 3360231680,3360234751,CL 3360234752,3360235263,CO 3360235264,3360235271,CL -3360235272,3360235519,CO +3360235272,3360235487,CO +3360235488,3360235495,CL +3360235496,3360235519,CO 3360235520,3360236287,CL 3360236288,3360236303,CO 3360236304,3360236311,CL @@ -103132,7 +120796,9 @@ 3360763904,3360765951,GT 3360765952,3360767999,CO 3360768000,3360770047,PY -3360770048,3360771327,EC +3360770048,3360771071,EC +3360771072,3360771199,AR +3360771200,3360771327,EC 3360771328,3360771839,AR 3360771840,3360772095,EC 3360772096,3360772351,AR @@ -103149,7 +120815,7 @@ 3360775168,3360775679,BO 3360775680,3360788479,AR 3360788480,3360790527,CL -3360790528,3360849919,AR +3360792576,3360849919,AR 3360849920,3360882687,VE 3360882688,3360948223,CL 3360948224,3361013759,VE @@ -103200,7 +120866,9 @@ 3362328576,3362330623,CO 3362330624,3362332671,MX 3362332672,3362336767,PA -3362336768,3362338815,CO +3362336768,3362337279,CO +3362337280,3362337535,US +3362337536,3362338815,CO 3362338816,3362339839,AR 3362339840,3362341887,CO 3362341888,3362342143,GT @@ -103224,6 +120892,11 @@ 3362428928,3362430975,CL 3362430976,3362447359,CO 3362447360,3362451455,SV +3362451456,3362452479,AR +3362452480,3362452991,BO +3362452992,3362453247,HN +3362453248,3362453503,NI +3362453504,3362455551,AR 3362455552,3362471935,EC 3362471936,3362476031,CL 3362476032,3362476287,HN @@ -103251,7 +120924,7 @@ 3362529280,3362533375,PA 3362537472,3362545663,AR 3362545664,3362549759,PE -3362549760,3362551807,AR +3362549760,3362553855,AR 3362553856,3362557951,PY 3362562048,3362563071,BZ 3362563072,3362563199,PA @@ -103305,6 +120978,7 @@ 3362717696,3362815999,CL 3362816000,3362832383,AR 3362832384,3362836479,BO +3362836480,3362838527,CO 3362840576,3362897919,CL 3362897920,3362906111,HT 3362914304,3362934783,CO @@ -103329,13 +121003,17 @@ 3363471360,3363487743,CR 3363487744,3363504127,CO 3363504128,3363512319,PE -3363520512,3363553791,AR +3363512320,3363553791,AR 3363553792,3363554047,PE -3363554048,3363557375,AR +3363554048,3363554175,US +3363554176,3363557375,AR 3363561472,3363565567,CO 3363569664,3363577855,PA 3363577856,3363586047,CL 3363586048,3363594239,BZ +3363594240,3363600383,AR +3363600384,3363600639,PY +3363600640,3363600895,VE 3363602432,3363610623,AN 3363610624,3363614719,CO 3363618816,3363622911,UY @@ -103347,13 +121025,23 @@ 3363678208,3363680255,NI 3363680256,3363682303,GT 3363682304,3363684351,VE -3363684352,3363700735,EC -3363700736,3363708927,CU +3363684352,3363700991,EC +3363700992,3363701247,CU +3363701248,3363708927,EC 3363708928,3363713023,CL 3363717120,3363733503,CL 3363733504,3363831807,AR 3363831808,3378511871,BR 3378511872,3383754751,MX +3383754752,3384147967,AR +3384147968,3384213503,PA +3384279040,3384410111,CO +3384410112,3384672255,CL +3384672256,3384688639,HN +3384688640,3384705023,CO +3384705024,3384721407,PA +3384721408,3384725503,US +3384725504,3384737791,PA 3384737792,3385851903,CR 3385851904,3386114047,VE 3386114048,3386245119,AR @@ -103368,12 +121056,13 @@ 3386458112,3386474495,EC 3386474496,3386490879,UY 3386490880,3386499071,CO +3386499072,3386503167,AR 3386507264,3386523647,EC 3386523648,3386540031,PA 3386540032,3386548223,CL 3386556416,3386572799,PA 3386572800,3386589183,EC -3386589184,3386597375,AR +3386589184,3386605567,AR 3386605568,3386613759,CL 3386621952,3386630143,CO 3386638336,3386642431,AN @@ -103520,17 +121209,12 @@ 3389151232,3389152255,JP 3389152256,3389153279,ID 3389153280,3389161471,TV -3389161472,3389163791,JP -3389163792,3389163795,AU -3389163796,3389165286,JP -3389165287,3389165287,SG -3389165288,3389165631,JP -3389165632,3389165695,CN -3389165696,3389194239,JP +3389161472,3389194239,JP 3389194240,3389195775,AU 3389195776,3389196287,HK 3389196288,3389197567,AU 3389197568,3389197823,IN +3389197824,3389198079,ID 3389198080,3389198335,IN 3389198336,3389202431,NZ 3389202432,3389210623,AU @@ -103621,10 +121305,10 @@ 3389412352,3389412863,NZ 3389412864,3389413119,AU 3389413120,3389413375,NZ -3389413376,3389413887,AU +3389413376,3389413887,CN 3389413888,3389414143,TH 3389414144,3389414655,AU -3389414656,3389414911,NZ +3389414656,3389414911,CN 3389414912,3389415167,HK 3389415168,3389415423,KR 3389415424,3389415935,VN @@ -103665,7 +121349,9 @@ 3389480960,3389489151,JP 3389489152,3389493247,HK 3389493248,3389521919,AU -3389521920,3389523455,SG +3389521920,3389522431,SG +3389522432,3389522943,CN +3389522944,3389523455,SG 3389523456,3389523967,JP 3389523968,3389525503,NZ 3389525504,3389526015,TW @@ -103681,6 +121367,7 @@ 3389534208,3389538303,JP 3389538304,3389538559,AU 3389538560,3389540351,TH +3389540352,3389541375,KH 3389541376,3389541631,AU 3389541632,3389541887,JP 3389541888,3389542399,TH @@ -103696,7 +121383,9 @@ 3389571072,3389575167,LK 3389575168,3389579263,JP 3389579264,3389587455,PH -3389587456,3389604351,AU +3389587456,3389597695,AU +3389597696,3389599743,MN +3389599744,3389604351,AU 3389604352,3389604863,SG 3389604864,3389605119,HK 3389605120,3389605375,ID @@ -103812,19 +121501,22 @@ 3389950976,3389951743,NZ 3389951744,3389953279,AU 3389953280,3389953535,NZ -3389953792,3389954303,AU +3389953536,3389954303,AU 3389954304,3389954815,SG 3389954816,3389956607,AU 3389956608,3389957375,TH 3389957376,3389957631,KR 3389957632,3389957887,AU 3389957888,3389958399,NZ -3389958400,3389970431,AU +3389958400,3389969663,AU +3389969664,3389969919,CN +3389969920,3389970431,AU 3389970432,3389971199,NZ 3389971200,3389971967,AU 3389971968,3389972223,HK 3389972224,3389972479,AU -3389972480,3389973759,NZ +3389972480,3389972735,IN +3389972736,3389973759,NZ 3389973760,3389975295,AU 3389975296,3389976319,CN 3389976320,3389979647,AU @@ -103886,9 +121578,7 @@ 3390414336,3390414847,SG 3390414848,3390418943,JP 3390418944,3390423039,MV -3390423040,3390429439,SG -3390429440,3390429951,HK -3390429952,3390439423,SG +3390423040,3390439423,SG 3390439424,3390441471,NZ 3390441472,3390443519,TH 3390443520,3390447359,NZ @@ -103917,16 +121607,25 @@ 3390832640,3390963711,TH 3390963712,3391094783,KR 3391094784,3391356927,JP -3391356928,3391444479,NZ +3391356928,3391414783,NZ +3391414784,3391415039,AU +3391415040,3391441407,NZ +3391441408,3391441663,PH +3391441664,3391444479,NZ 3391444480,3391444991,VN -3391444992,3391469055,NZ +3391444992,3391453183,NZ +3391453184,3391453439,ID +3391453440,3391469055,NZ 3391469056,3391469311,AU 3391469312,3391487999,NZ 3391488000,3391492095,CN 3391492096,3391496191,HK 3391496192,3391500287,SG 3391500288,3391504383,PK -3391504384,3391524863,CN +3391504384,3391523583,CN +3391523584,3391523839,AU +3391523840,3391524863,CN +3391524864,3391525375,AU 3391525376,3391525887,CN 3391525888,3391526143,AU 3391526144,3391526655,CN @@ -103969,7 +121668,7 @@ 3391725568,3391733759,TH 3391733760,3391734015,IN 3391734016,3391734783,AU -3391734784,3391736831,JP +3391735808,3391736831,JP 3391736832,3391737855,IN 3391737856,3391741951,JP 3391741952,3391744959,IN @@ -104013,7 +121712,8 @@ 3391879168,3391881215,ID 3391881216,3391895551,TH 3391895552,3391896575,IN -3391896576,3391900415,TH +3391896576,3391897599,NZ +3391897600,3391900415,TH 3391900416,3391901695,AU 3391901696,3391905791,PK 3391905792,3391906047,TH @@ -104024,7 +121724,11 @@ 3391909888,3391910911,IO 3391910912,3391911935,AU 3391911936,3391913983,HK -3391913984,3391920127,TH +3391913984,3391915519,TH +3391915520,3391915775,AU +3391915776,3391916287,TH +3391916288,3391916543,VN +3391916544,3391920127,TH 3391920128,3391930367,AU 3391930368,3391946751,TH 3391946752,3391947007,DE @@ -104074,7 +121778,7 @@ 3392086016,3392094207,AU 3392094208,3392098559,ID 3392098560,3392098815,AU -3392098816,3392099327,PH +3392098816,3392099327,CN 3392099328,3392100095,AU 3392100096,3392100351,VN 3392100352,3392100607,ID @@ -104102,9 +121806,14 @@ 3392208896,3392286975,NZ 3392286976,3392287231,US 3392287232,3392287743,NZ +3392287744,3392288767,NP 3392288768,3392295935,NZ 3392295936,3392296191,AU -3392296192,3392339967,NZ +3392296192,3392324607,NZ +3392324608,3392325119,AU +3392325120,3392325631,NZ +3392325632,3392326655,ID +3392326656,3392339967,NZ 3392339968,3392340991,NP 3392340992,3392344063,JP 3392344064,3392348159,ID @@ -104112,6 +121821,7 @@ 3392354304,3392356351,ID 3392356352,3392364543,NP 3392364544,3392372735,ID +3392372736,3392380927,HK 3392380928,3392385023,AU 3392385024,3392389119,BD 3392389120,3392401407,ID @@ -104162,7 +121872,6 @@ 3392440832,3392441343,BD 3392441344,3392441855,ID 3392441856,3392442111,AU -3392442112,3392442367,IN 3392442368,3392442623,HK 3392442624,3392442879,AU 3392442880,3392443391,ID @@ -104236,6 +121945,7 @@ 3392765952,3392782335,TH 3392782336,3392790527,HK 3392790528,3392794623,JP +3392794624,3392798719,CN 3392798720,3392798975,LA 3392798976,3392799231,JP 3392799232,3392799487,PH @@ -104271,7 +121981,7 @@ 3392864512,3392864767,AU 3392864768,3392865279,IN 3392865280,3392866303,NU -3392868352,3392880639,AU +3392866304,3392880639,AU 3392880640,3392888831,PK 3392888832,3392892927,AU 3392892928,3392897023,JP @@ -104290,7 +122000,6 @@ 3392923392,3392923647,IN 3392923648,3392924159,CN 3392924160,3392924671,JP -3392924672,3392924927,PH 3392924928,3392925183,AU 3392925184,3392925695,VN 3392925696,3392926719,AU @@ -104309,6 +122018,7 @@ 3392944128,3392945151,MY 3392945152,3392946175,IN 3392946176,3392954367,AU +3392954368,3392956415,CN 3392956416,3392958463,VN 3392958464,3392962559,CN 3392962560,3392970751,IN @@ -104345,14 +122055,14 @@ 3393026048,3393026559,HK 3393026560,3393026815,AU 3393026816,3393027071,PK -3393027072,3393027839,ID -3393027840,3393028095,PH +3393027072,3393028095,ID 3393028096,3393060863,AU 3393060864,3393062911,FJ 3393062912,3393069055,ID 3393069056,3393077247,AU 3393077248,3393085439,IN 3393085440,3393089535,LA +3393089536,3393090559,CN 3393090560,3393091071,IN 3393091072,3393093631,FJ 3393093632,3393101823,AU @@ -104363,9 +122073,11 @@ 3393123328,3393123583,IN 3393123584,3393123839,NZ 3393123840,3393124351,IN +3393124352,3393125375,CN 3393125376,3393125631,IN 3393125632,3393125887,JP 3393125888,3393126143,AU +3393126144,3393126399,CN 3393126400,3393134591,HK 3393134592,3393146879,AU 3393146880,3393150975,PK @@ -104430,6 +122142,7 @@ 3393593344,3393597439,MN 3393597440,3393601535,ID 3393601536,3393609727,NP +3393609728,3393613823,CN 3393613824,3393617919,AS 3393617920,3393618431,AU 3393618432,3393618687,NZ @@ -104495,6 +122208,7 @@ 3393814528,3393815551,HK 3393815552,3393816575,KR 3393816576,3393818623,JP +3393818624,3393822719,AU 3393822720,3393830911,PH 3393830912,3393835007,NZ 3393835008,3393839103,JP @@ -104517,8 +122231,7 @@ 3393859328,3393859583,JP 3393859584,3393860095,AU 3393860096,3393860607,HK -3393860608,3393860863,AU -3393860864,3393861631,IN +3393860608,3393861631,IN 3393861632,3393861887,VN 3393861888,3393862143,AU 3393862144,3393862655,VN @@ -104611,6 +122324,7 @@ 3394284352,3394285567,SG 3394285568,3394289663,AU 3394289664,3394290687,HK +3394290688,3394293759,CN 3394293760,3394297855,ID 3394297856,3394306047,TH 3394306048,3394307071,HK @@ -104642,6 +122356,7 @@ 3394501632,3394507263,HK 3394507264,3394507775,JP 3394507776,3394508799,PH +3394508800,3394510847,CN 3394510848,3394514943,BD 3394514944,3394519039,JP 3394519040,3394521087,BD @@ -104679,6 +122394,7 @@ 3394697472,3394697727,PK 3394697728,3394697983,AU 3394697984,3394698239,IN +3394698240,3394699263,CN 3394699264,3394700287,HK 3394700288,3394707455,AU 3394707456,3394715647,IN @@ -104745,6 +122461,9 @@ 3394905088,3394905343,BN 3394905344,3394906111,AU 3394906112,3394906367,IN +3394906368,3394906623,AU +3394906624,3394907135,IN +3394907136,3394908159,NZ 3394908160,3394910207,AU 3394910208,3394912255,PH 3394912256,3394920447,PF @@ -104776,6 +122495,7 @@ 3394971648,3394973695,SG 3394973696,3394977791,JP 3394977792,3394985983,IN +3394985984,3394990079,CN 3394990080,3394994175,JP 3394994176,3394995199,CN 3394995200,3394998271,IN @@ -104789,7 +122509,7 @@ 3395028992,3395031039,IN 3395031040,3395035135,PK 3395035136,3395039231,AU -3395039232,3395043327,BD +3395039232,3395043327,CN 3395043328,3395059711,AU 3395059712,3395067903,PH 3395067904,3395076095,HK @@ -104838,6 +122558,8 @@ 3395180032,3395180287,JP 3395180288,3395180543,HK 3395180544,3395181055,VN +3395181056,3395181567,HK +3395181568,3395182591,CN 3395182592,3395190783,SG 3395190784,3395198975,JP 3395198976,3395203071,MY @@ -104886,7 +122608,6 @@ 3397070848,3397074943,PH 3397074944,3397083135,HK 3397083136,3397087231,CN -3397087232,3397091327,JP 3397091328,3397099519,GU 3397099520,3397103615,HK 3397103616,3397105663,LA @@ -104895,7 +122616,7 @@ 3397115904,3397119999,ID 3397120000,3397124095,PK 3397124096,3397128191,JP -3397130240,3397131263,CN +3397128192,3397131263,CN 3397131264,3397132287,HK 3397132288,3397136383,AU 3397136384,3397140479,JP @@ -104982,7 +122703,9 @@ 3397349376,3397363711,CN 3397363712,3397365759,HK 3397365760,3397369855,JP -3397369856,3397386239,CN +3397369856,3397374463,CN +3397374464,3397374975,AU +3397374976,3397386239,CN 3397386240,3397394431,GU 3397394432,3397402623,PH 3397402624,3397410815,GU @@ -105038,7 +122761,6 @@ 3397525504,3397526527,AU 3397526528,3397527039,VN 3397527040,3397527295,AU -3397527296,3397527551,JP 3397527552,3397528575,IN 3397528576,3397530623,AU 3397530624,3397531647,ID @@ -105146,6 +122868,7 @@ 3397963776,3397971967,CN 3397971968,3397974015,LA 3397974016,3397975039,IN +3397975040,3397976063,AU 3397976064,3397984255,ID 3397984256,3397992447,JP 3397992448,3398004735,AU @@ -105160,6 +122883,7 @@ 3398033664,3398033919,ID 3398033920,3398034943,IN 3398034944,3398035199,ID +3398035200,3398035455,CN 3398035456,3398037503,IN 3398037504,3398039551,NZ 3398039552,3398040575,IN @@ -105212,6 +122936,7 @@ 3398481920,3398483967,LA 3398483968,3398488063,MY 3398488064,3398492159,TW +3398492160,3398500351,JP 3398500352,3398504447,ID 3398504448,3398508543,JP 3398508544,3398565887,TW @@ -105228,6 +122953,7 @@ 3398612992,3398613503,PH 3398613504,3398613759,NZ 3398613760,3398614015,AU +3398614016,3398615039,CN 3398615040,3398619135,IN 3398619136,3398621183,AU 3398621184,3398623231,HK @@ -105362,13 +123088,15 @@ 3398647296,3398647551,TW 3398647552,3398647807,AP 3398647808,3398668287,AU +3398668288,3398672383,CN 3398672384,3398680575,PK 3398680576,3398684671,ID 3398684672,3398688767,JP 3398688768,3398705151,ID +3398705152,3398709247,CN 3398709248,3398711295,AU 3398711296,3398713343,BD -3398721536,3398729727,CN +3398713344,3398729727,CN 3398729728,3398737919,AU 3398737920,3398742015,SG 3398742016,3398746111,TH @@ -105397,6 +123125,7 @@ 3398852608,3398860799,NZ 3398860800,3398873087,ID 3398873088,3398877183,KR +3398877184,3398881279,CN 3398881280,3398885375,SG 3398885376,3398894591,ID 3398894592,3398895615,TH @@ -105492,6 +123221,7 @@ 3399332864,3399333375,HK 3399333376,3399335423,MY 3399335424,3399335935,IN +3399335936,3399344127,CN 3399344128,3399352319,JP 3399352320,3399389183,ID 3399389184,3399393279,KR @@ -105519,19 +123249,7 @@ 3399515648,3399524351,AU 3399524352,3399528447,IN 3399528448,3399532543,CN -3399532544,3399544575,SG -3399544576,3399544831,IN -3399544832,3399546879,SG -3399546880,3399547135,US -3399547136,3399547903,SG -3399547904,3399547911,PK -3399547912,3399547935,SG -3399547936,3399547951,PK -3399547952,3399547967,SG -3399547968,3399547999,PK -3399548000,3399548415,SG -3399548416,3399548671,ID -3399548672,3399548927,SG +3399532544,3399548927,SG 3399548928,3399557119,AU 3399557120,3399565311,SG 3399565312,3399581695,AU @@ -105549,10 +123267,12 @@ 3399614464,3399622655,MY 3399622656,3399626751,ID 3399626752,3399630847,IN -3399630848,3399631871,AU +3399630848,3399631615,AU +3399631616,3399631871,CN 3399631872,3399632895,SG 3399632896,3399633407,NZ 3399633408,3399633663,AU +3399633664,3399633919,CN 3399633920,3399634943,TH 3399634944,3399639039,JP 3399639040,3399643135,AU @@ -105577,6 +123297,7 @@ 3399752704,3399753727,NZ 3399753728,3399761919,IN 3399761920,3399770111,JP +3399770112,3399778303,CN 3399778304,3399786495,IN 3399786496,3399794687,PH 3399794688,3399798783,AU @@ -105679,7 +123400,7 @@ 3400183808,3400187903,JP 3400187904,3400191999,AU 3400192000,3400194047,JP -3400194048,3400196095,CN +3400194048,3400204287,CN 3400204288,3400212479,ID 3400212480,3400220671,MY 3400220672,3400221055,NC @@ -105691,10 +123412,12 @@ 3400245248,3400253439,AU 3400253440,3400257535,MY 3400257536,3400259583,HK +3400259584,3400261631,CN 3400261632,3400263679,JP 3400263680,3400263935,AU 3400263936,3400264191,ID 3400264192,3400264447,IN +3400264448,3400264703,CN 3400264704,3400265215,ID 3400265216,3400265471,AU 3400265472,3400265727,IN @@ -105721,7 +123444,7 @@ 3400341504,3400343551,AU 3400343552,3400351743,TW 3400351744,3400359935,ID -3400359936,3400368127,JP +3400359936,3400364031,JP 3400368128,3400388607,AU 3400388608,3400392703,TH 3400392704,3400400895,CN @@ -105843,8 +123566,8 @@ 3400438112,3400438143,HK 3400438144,3400438175,BD 3400438176,3400438399,HK -3400438400,3400438591,BD -3400438592,3400438783,HK +3400438400,3400438527,BD +3400438528,3400438783,AF 3400438784,3400438815,KZ 3400438816,3400438831,PK 3400438832,3400438839,AF @@ -105978,6 +123701,7 @@ 3400536064,3400548351,JP 3400548352,3400581119,TH 3400581120,3400589311,SG +3400589312,3400597503,CN 3400597504,3400605695,HK 3400605696,3400607743,JP 3400607744,3400608767,AU @@ -106030,16 +123754,18 @@ 3400826880,3400835071,CN 3400835072,3400839167,HK 3400839168,3400847359,JP +3400847360,3400849407,CN 3400849408,3400851455,MN -3400851456,3400867839,AU -3400876032,3400884223,AU +3400851456,3400884223,AU 3400884224,3400888319,JP 3400888320,3400892415,CN 3400892416,3400925183,HK 3400925184,3400933375,TH +3400933376,3400937471,CN 3400937472,3400941567,ID 3400941568,3400966143,AU 3400966144,3400974335,ID +3400974336,3400982527,CN 3400982528,3400990719,HK 3400990720,3400998911,ID 3400998912,3401003007,PH @@ -106049,6 +123775,7 @@ 3401015296,3401023487,AU 3401023488,3401056255,TH 3401056256,3401383935,MY +3401383936,3401400319,CN 3401400320,3401404415,AU 3401404416,3401408511,CN 3401408512,3401416703,HK @@ -106056,10 +123783,12 @@ 3401420800,3401424895,JP 3401424896,3401428991,NZ 3401428992,3401431039,JP +3401431040,3401433087,CN 3401433088,3401441279,JP 3401441280,3401449471,IN 3401449472,3401515007,MY 3401515008,3401515263,DE +3401515264,3401515519,AU 3401515520,3401516031,ID 3401516032,3401519103,AU 3401519104,3401523199,JP @@ -106080,23 +123809,63 @@ 3404857956,3404857966,JP 3404857967,3404857967,IN 3404857968,3405774847,JP -3405774848,3406071807,AU +3405774848,3405795583,AU +3405795584,3405796095,CN +3405796096,3405846783,AU +3405846784,3405847039,ID +3405847040,3405934591,AU +3405934592,3405936639,CN +3405936640,3406005247,AU +3406005248,3406005503,HK +3406005504,3406071807,AU 3406071808,3406073855,US 3406073856,3406077951,AU 3406077952,3406078207,TH -3406078208,3406327039,AU +3406078208,3406109695,AU +3406109696,3406109951,NZ +3406109952,3406115839,AU +3406115840,3406116863,CN +3406116864,3406205951,AU +3406205952,3406206463,ID +3406206464,3406271231,AU +3406271232,3406271487,CN +3406271488,3406277375,AU +3406277376,3406277631,ID +3406277632,3406327039,AU 3406327040,3406327295,IN -3406327296,3406384639,AU +3406327296,3406327807,CN +3406327808,3406328831,AU +3406328832,3406329343,IN +3406329344,3406331647,AU +3406331648,3406331903,VN +3406331904,3406343167,AU +3406343168,3406343423,VN +3406343424,3406350591,AU +3406350592,3406350847,IN +3406350848,3406380799,AU +3406380800,3406381055,CN +3406381056,3406382591,AU +3406382592,3406383103,CN +3406383104,3406384639,AU 3406384640,3406385151,SG 3406385152,3406409727,AU 3406409728,3406411775,NZ 3406411776,3406434303,AU 3406434304,3406436351,MY -3406436352,3406542847,AU +3406436352,3406445055,AU +3406445056,3406445311,MY +3406445312,3406512383,AU +3406512384,3406512639,IN +3406512640,3406514687,AU +3406514688,3406514943,TH +3406514944,3406521343,AU +3406521344,3406522367,CN +3406522368,3406542847,AU 3406542848,3406543103,SG 3406543104,3406565887,AU 3406565888,3406566143,PH 3406566144,3406566399,AU +3406566400,3406566911,ID 3406566912,3406591487,AU 3406591488,3406591743,NP 3406591744,3406617599,AU @@ -106105,7 +123874,9 @@ 3406618112,3406618623,IN 3406618624,3406625023,AU 3406625024,3406625279,NF -3406625280,3406669823,AU +3406625280,3406637055,AU +3406637056,3406637311,IN +3406637312,3406669823,AU 3406669824,3406670847,IN 3406670848,3406696959,AU 3406696960,3406697215,IN @@ -106117,16 +123888,31 @@ 3406739200,3406739455,ID 3406739456,3406746623,AU 3406746624,3406746879,HK -3406746880,3406865663,AU +3406746880,3406832127,AU +3406832128,3406832383,PK +3406832384,3406865663,AU 3406865664,3406865919,IN -3406865920,3406946815,AU +3406865920,3406884607,AU +3406884608,3406884863,HK +3406884864,3406894335,AU +3406894336,3406894591,ID +3406894592,3406896895,AU +3406896896,3406897151,IN +3406897152,3406923775,AU +3406923776,3406924031,CN +3406924032,3406938623,AU +3406938624,3406938879,IN +3406938880,3406946815,AU 3406946816,3406947071,KR 3406947072,3406950399,AU 3406950400,3406951423,NF -3406951424,3406961151,AU +3406951424,3406952703,AU +3406952704,3406952959,PH +3406952960,3406961151,AU 3406961152,3406961407,IN 3406961408,3406967295,AU 3406967296,3406967551,CN +3406967552,3406967807,IN 3406967808,3406989567,AU 3406989568,3406989823,IN 3406989824,3407020287,AU @@ -106134,13 +123920,25 @@ 3407020544,3407020799,AU 3407020800,3407021055,IN 3407021056,3407021311,ID -3407021312,3407045887,AU +3407021312,3407027711,AU +3407027712,3407027967,CN +3407027968,3407045887,AU 3407045888,3407046143,HK 3407046144,3407057663,AU 3407057664,3407057919,JP -3407057920,3407096831,AU +3407057920,3407058175,AU +3407058176,3407058431,CN +3407058432,3407059967,AU +3407059968,3407060223,CN +3407060224,3407078399,AU +3407078400,3407079423,CN +3407079424,3407085311,AU +3407085312,3407085567,CN +3407085568,3407096831,AU 3407096832,3407097087,JP -3407097088,3407112447,AU +3407097088,3407101183,AU +3407101184,3407101439,CN +3407101440,3407112447,AU 3407112448,3407112703,SG 3407112704,3407152895,AU 3407152896,3407153151,IN @@ -106180,79 +123978,204 @@ 3407159232,3407159239,NZ 3407159240,3407159263,AU 3407159264,3407159295,NZ -3407159296,3407243263,AU +3407159296,3407161599,AU +3407161600,3407161855,CN +3407161856,3407162367,TH +3407162368,3407170047,AU +3407170048,3407170559,ID +3407170560,3407185919,AU +3407185920,3407186431,CN +3407186432,3407240959,AU +3407240960,3407241215,CN +3407241216,3407243263,AU 3407243264,3407243775,HK -3407243776,3407268863,AU +3407243776,3407250175,AU +3407250176,3407250431,CN +3407250432,3407268863,AU 3407268864,3407269119,US -3407269120,3407367167,AU +3407269120,3407294207,AU +3407294208,3407294463,CN +3407294464,3407310847,AU +3407310848,3407311103,CN +3407311104,3407315455,AU +3407315456,3407315711,CN +3407315712,3407326207,AU +3407326208,3407326463,CN +3407326464,3407328767,AU +3407328768,3407329023,CN +3407329024,3407329791,AU +3407329792,3407330303,CN +3407330304,3407360511,AU +3407360512,3407361023,ID +3407361024,3407362047,AU +3407362048,3407362303,CN +3407362304,3407367167,AU 3407367168,3407367679,ID 3407367680,3407367935,AU -3407368192,3407369983,AU +3407367936,3407368447,CN +3407368448,3407369983,AU 3407369984,3407370239,IN -3407370240,3407498495,AU +3407370240,3407370751,AU +3407370752,3407371007,CN +3407371008,3407386623,AU +3407386624,3407386879,CN +3407386880,3407388927,AU +3407388928,3407389183,CN +3407389184,3407398655,AU +3407398656,3407398911,CN +3407398912,3407440383,AU +3407440384,3407440639,CN +3407440640,3407464191,AU +3407464192,3407464447,CN +3407464448,3407466495,AU +3407466496,3407470591,CN +3407470592,3407475199,AU +3407475200,3407475455,CN +3407475456,3407495423,AU +3407495424,3407495679,CN +3407495680,3407498495,AU 3407498496,3407498751,PK -3407498752,3407524607,AU +3407498752,3407499263,AU +3407499264,3407499519,CN +3407499520,3407504895,AU +3407504896,3407505407,CN +3407505408,3407508223,AU +3407508224,3407508479,CN +3407508480,3407523071,AU +3407523072,3407523327,CN +3407523328,3407524607,AU 3407524608,3407524863,NZ -3407524864,3407602943,AU +3407524864,3407545855,AU +3407545856,3407546367,ID +3407546368,3407546879,AU +3407546880,3407547135,CN +3407547136,3407574271,AU +3407574272,3407574527,CN +3407574528,3407575807,AU +3407575808,3407576063,CN +3407576064,3407602943,AU 3407602944,3407603199,JP 3407603200,3407604479,AU 3407604480,3407604735,IN 3407604736,3407608715,AU 3407608716,3407608736,JP -3407608737,3407682047,AU +3407608737,3407642623,AU +3407642624,3407643135,TH +3407643136,3407675903,AU +3407675904,3407676159,CN +3407676160,3407678975,AU +3407678976,3407679231,CN +3407679232,3407682047,AU 3407682048,3407682559,ID -3407682560,3407732223,AU +3407682560,3407682815,CN +3407682816,3407701759,AU +3407701760,3407702015,CN +3407702016,3407704063,AU +3407704064,3407704319,CN +3407704320,3407727871,AU +3407727872,3407728127,CN +3407728128,3407729151,AU +3407729152,3407729407,CN +3407729408,3407732223,AU 3407732224,3407732479,HK -3407732480,3407750655,AU +3407732480,3407747839,AU +3407747840,3407748095,CN +3407748096,3407750655,AU 3407750656,3407751167,SG 3407751168,3407753215,AU 3407753216,3407753727,HK -3407753728,3407785471,AU +3407753728,3407779839,AU +3407779840,3407780095,CN +3407780096,3407780863,AU +3407780864,3407781119,CN +3407781120,3407785471,AU 3407785472,3407785727,NZ -3407785728,3407801343,AU +3407785728,3407790591,AU +3407790592,3407790847,CN +3407790848,3407797247,AU +3407797248,3407797503,CN +3407797504,3407801087,AU +3407801088,3407801343,CN 3407801344,3407801855,ID 3407801856,3407805951,AU 3407805952,3407806463,ID -3407806464,3407814655,AU +3407806464,3407808511,AU +3407808512,3407809023,IN +3407809024,3407814655,AU 3407814656,3407815167,HK -3407815168,3407828991,AU +3407815168,3407824127,AU +3407824128,3407824383,CN +3407824384,3407828991,AU 3407828992,3407829503,US 3407829504,3407837183,AU 3407837184,3407837439,US -3407837440,3407848447,AU +3407837440,3407847935,AU +3407847936,3407848191,CN +3407848192,3407848447,AU 3407848448,3407848959,ID -3407848960,3407866367,AU +3407848960,3407862783,AU +3407862784,3407863039,CN +3407863040,3407866367,AU 3407866368,3407866623,GB 3407866624,3407873023,AU 3407873024,3407873535,IN -3407873536,3407928575,AU +3407873536,3407877119,AU +3407877120,3407877375,CN +3407877376,3407887871,AU +3407887872,3407888127,CN +3407888128,3407905279,AU +3407905280,3407905535,CN +3407905536,3407907839,AU +3407907840,3407908095,CN +3407908096,3407919615,AU +3407919616,3407920127,CN +3407920128,3407928575,AU 3407928576,3407928831,IN -3407928832,3407985919,AU +3407928832,3407977471,AU +3407977472,3407977727,CN +3407977728,3407985919,AU 3407985920,3407986175,KH 3407986176,3407987711,AU 3407987712,3407987967,PH 3407987968,3407988223,AU 3407988224,3407988735,IN -3407988736,3407998975,AU +3407988736,3407989759,AU +3407989760,3407990015,CN +3407990016,3407994879,AU +3407994880,3407995135,CN +3407995136,3407997183,AU +3407997184,3407997439,CN +3407997440,3407998975,AU 3407998976,3407999231,TH -3407999232,3408012543,AU +3407999232,3408009983,AU +3408009984,3408010239,CN +3408010240,3408012543,AU 3408012544,3408012799,MN -3408012800,3408023807,AU +3408012800,3408020735,AU +3408020736,3408020991,CN +3408020992,3408023807,AU 3408023808,3408024063,JP -3408024064,3408032767,AU +3408024064,3408031999,AU +3408032000,3408032255,CN +3408032256,3408032767,AU 3408032768,3408033279,IN 3408033280,3408033791,ID 3408033792,3408039935,AU 3408039936,3408040191,VN 3408040192,3408040703,AU +3408040704,3408040959,CN 3408040960,3408041983,AU 3408041984,3408042495,SG 3408042496,3408042751,HK -3408042752,3408066047,AU +3408042752,3408064511,AU +3408064512,3408064767,CN +3408064768,3408066047,AU 3408066048,3408066303,PH 3408066304,3409396479,AU 3409396480,3409396735,PH -3409396736,3409418495,AU +3409396736,3409409023,AU +3409409024,3409409535,CN +3409409536,3409418495,AU 3409418496,3409418751,PL 3409418752,3409420287,AU 3409420288,3409420543,IN @@ -106260,11 +124183,21 @@ 3409423616,3409423871,IN 3409423872,3409425663,AU 3409425664,3409425919,AP -3409425920,3409491711,AU +3409425920,3409429503,AU +3409429504,3409429759,CN +3409429760,3409435135,AU +3409435136,3409435391,CN +3409435392,3409466623,AU +3409466624,3409466879,CN +3409466880,3409475839,AU +3409475840,3409476095,CN +3409476096,3409488127,AU +3409488128,3409488383,CN +3409488384,3409491711,AU 3409491712,3409491967,SG -3409491968,3409503999,AU -3409504000,3409504255,HK -3409504256,3409505023,AU +3409491968,3409498111,AU +3409498112,3409498879,CN +3409498880,3409505023,AU 3409505024,3409505279,US 3409505280,3409506559,AU 3409506560,3409506815,IN @@ -106274,26 +124207,43 @@ 3409510368,3409510383,IN 3409510384,3409516543,AU 3409516544,3409517055,ID -3409517056,3409547519,AU +3409517056,3409520383,AU +3409520384,3409520639,CN +3409520640,3409522175,AU +3409522176,3409522431,CN +3409522432,3409547519,AU 3409547520,3409547775,NZ -3409547776,3409802831,AU -3409802832,3409802847,MT -3409802848,3409838335,AU +3409547776,3409550591,AU +3409550592,3409550847,CN +3409550848,3409567231,AU +3409567232,3409567487,CN +3409567488,3409574143,AU +3409574144,3409574399,CN +3409574400,3409838335,AU 3409838336,3409838591,MY +3409838592,3409838847,CN 3409838848,3409876991,AU 3409876992,3409878015,TH 3409878016,3409882111,AU 3409882112,3409883135,IN 3409883136,3409887999,AU 3409888000,3409888255,SG -3409888256,3409969151,AU +3409888256,3409896447,AU +3409896448,3409897471,CN +3409897472,3409897983,AU +3409897984,3409898239,CN +3409898240,3409901055,AU +3409901056,3409901311,CN +3409901312,3409969151,AU 3409969152,3410755583,TW 3410755584,3410771967,AU 3410771968,3410780159,JP 3410780160,3410788351,BD 3410788352,3410792447,IN 3410792448,3410796543,BD +3410796544,3410797567,CN 3410797568,3410798591,JP +3410798592,3410799615,CN 3410799616,3410800639,SG 3410800640,3410804735,IN 3410804736,3410821119,PH @@ -106314,6 +124264,7 @@ 3410888704,3410890751,SG 3410890752,3410894847,AU 3410894848,3410898943,HK +3410898944,3410903039,CN 3410903040,3410911231,HK 3410911232,3410915327,TH 3410915328,3410919423,ID @@ -106340,8 +124291,10 @@ 3411019776,3411021823,ID 3411021824,3411023871,MY 3411023872,3411025919,JP +3411025920,3411030015,CN 3411030016,3411032063,NC 3411032064,3411032319,TH +3411032320,3411032575,CN 3411032576,3411033087,AU 3411033088,3411034111,NZ 3411034112,3411050495,HK @@ -106352,6 +124305,7 @@ 3411062784,3411063231,HK 3411063232,3411063295,PK 3411063296,3411083263,HK +3411083264,3411085311,CN 3411085312,3411086335,KR 3411086336,3411087359,JP 3411087360,3411091455,CN @@ -106364,12 +124318,12 @@ 3411128320,3411130367,HK 3411130368,3411132415,ID 3411132416,3411144703,PK -3411144704,3411146751,JP 3411146752,3411147775,ID 3411147776,3411149311,HK 3411149312,3411149823,MV 3411149824,3411150847,IN 3411150848,3411152895,HK +3411152896,3411154943,CN 3411154944,3411156991,JP 3411156992,3411161087,PH 3411161088,3411165183,PK @@ -106388,7 +124342,6 @@ 3411212800,3411213311,IN 3411213312,3411215359,HK 3411215360,3411216383,AU -3411216384,3411218431,JP 3411218432,3411220479,PG 3411220480,3411226623,ID 3411226624,3411228671,IO @@ -106431,6 +124384,7 @@ 3411472384,3411475199,JP 3411475200,3411475455,AU 3411475456,3411475967,HK +3411475968,3411476479,CN 3411476480,3411509247,AU 3411509248,3411542015,PH 3411542016,3411550207,IN @@ -106545,6 +124499,7 @@ 3411608576,3411608831,IN 3411608832,3411609087,AU 3411609088,3411609599,HK +3411609600,3411611647,CN 3411611648,3411615743,ID 3411615744,3411623935,JP 3411623936,3411640319,AU @@ -106552,16 +124507,19 @@ 3411641344,3411641599,IN 3411641600,3411641855,HK 3411641856,3411642367,IN +3411642368,3411643391,CN 3411643392,3411644415,VN 3411644416,3411644927,AU 3411644928,3411645951,ID 3411645952,3411646207,SG 3411646208,3411647487,IN +3411647488,3411648511,AU 3411648512,3411656703,NZ 3411656704,3411673087,AU 3411673088,3411674111,CN 3411674112,3411674623,IN 3411674624,3411675135,HK +3411675136,3411676159,CN 3411676160,3411677183,PK 3411677184,3411679231,JP 3411679232,3411681279,AU @@ -106734,7 +124692,7 @@ 3412253696,3412254719,JP 3412254720,3412262911,NR 3412262912,3412264959,JP -3412267008,3412271103,CN +3412264960,3412271103,CN 3412271104,3412273151,NZ 3412273152,3412275199,IN 3412275200,3412279295,PK @@ -106760,12 +124718,13 @@ 3412327936,3412328191,HK 3412328192,3412328447,WS 3412328448,3412336639,AU -3412336640,3412340735,CN +3412336640,3412342783,CN 3412342784,3412343039,AU 3412343040,3412343295,IN 3412343296,3412343551,AP 3412343552,3412344319,AU 3412344320,3412344575,SG +3412344576,3412344831,CN 3412344832,3412348927,IN 3412348928,3412361215,CN 3412361216,3412369407,AP @@ -106780,16 +124739,19 @@ 3412451328,3412594687,AU 3412594688,3412596735,IN 3412596736,3412598783,MV +3412598784,3412602879,CN 3412602880,3412606975,NC 3412606976,3412615167,PH 3412615168,3412656127,JP 3412656128,3412672511,HK 3412672512,3412680703,JP +3412680704,3412697087,CN 3412697088,3412705279,IN 3412705280,3412713471,AU 3412713472,3412721663,TW 3412721664,3412787199,MY 3412787200,3412803583,TW +3412803584,3412819967,CN 3412819968,3412852735,TH 3412852736,3412918271,AU 3412918272,3412926463,KR @@ -106804,10 +124766,13 @@ 3413032960,3413037055,AU 3413037056,3413041151,IN 3413041152,3413043199,JP -3413043200,3413044223,AU +3413043200,3413043711,AU +3413043712,3413043967,CN +3413043968,3413044223,AU 3413044224,3413045247,AP 3413045248,3413047295,IN 3413047296,3413098495,AU +3413098496,3413102591,JP 3413102592,3413106687,TW 3413106688,3413110783,PH 3413110784,3413112831,JP @@ -106815,6 +124780,7 @@ 3413113856,3413133311,JP 3413133312,3413135359,BD 3413135360,3413139455,HK +3413139456,3413147647,AU 3413147648,3413155839,IN 3413155840,3413164031,SG 3413164032,3413172223,BD @@ -106845,6 +124811,7 @@ 3413557248,3413565439,CN 3413565440,3413569535,TW 3413569536,3413569791,SG +3413569792,3413570047,CN 3413570048,3413570303,KH 3413570304,3413570559,AU 3413570560,3413571583,PH @@ -106883,11 +124850,12 @@ 3413595392,3413595647,CN 3413595648,3413595903,AU 3413595904,3413596159,HK -3413596160,3413596671,SG -3413596672,3413597183,NP +3413596160,3413597183,NP 3413597184,3413597695,AU 3413597696,3413597951,TW 3413597952,3413602303,AU +3413602304,3413602559,ID +3413602560,3413639167,CN 3413639168,3413704703,SG 3413704704,3413737471,MY 3413737472,3413753855,TH @@ -106904,9 +124872,7 @@ 3413852160,3413868543,AU 3413868544,3413884927,IN 3413884928,3413893119,KR -3413893120,3413899199,ID -3413899200,3413899203,IN -3413899204,3413901311,ID +3413893120,3413901311,ID 3413901312,3413902847,SG 3413902848,3413903359,JP 3413903360,3413905407,HK @@ -106928,7 +124894,9 @@ 3414171648,3414179839,CN 3414179840,3414188031,ID 3414188032,3414196223,CN +3414196224,3414204415,AU 3414204416,3414220799,KR +3414220800,3414222847,CN 3414222848,3414223871,AU 3414223872,3414224895,KR 3414224896,3414226943,VN @@ -106936,6 +124904,7 @@ 3414227968,3414230015,PK 3414230016,3414230527,PH 3414230528,3414231039,KR +3414231040,3414233087,CN 3414233088,3414245375,AU 3414245376,3414253567,HK 3414253568,3414261759,JP @@ -107017,6 +124986,7 @@ 3415228416,3415236607,KH 3415236608,3415244799,IN 3415244800,3415277567,TH +3415277568,3415285759,CN 3415285760,3415293951,AU 3415293952,3415302143,HK 3415302144,3415306239,AU @@ -107036,7 +125006,9 @@ 3415441408,3415474175,AU 3415474176,3415490559,CN 3415490560,3415491583,PK +3415491584,3415495679,CN 3415495680,3415496191,ID +3415496192,3415496703,CN 3415496704,3415497727,MY 3415497728,3415497983,TW 3415497984,3415498751,AU @@ -107050,6 +125022,7 @@ 3415605248,3415752703,TH 3415752704,3415760895,CN 3415760896,3415769087,NZ +3415769088,3415777279,CN 3415777280,3415785471,KR 3415785472,3415793663,JP 3415793664,3415801855,AU @@ -107095,8 +125068,10 @@ 3416274944,3416276991,ID 3416276992,3416285183,HK 3416285184,3416287231,VN +3416287232,3416289279,CN 3416289280,3416293375,NZ 3416293376,3416293631,ID +3416293632,3416293887,CN 3416293888,3416294399,PH 3416294400,3416295423,AU 3416295424,3416295679,IN @@ -107105,6 +125080,7 @@ 3416296448,3416297471,KR 3416297472,3416301567,TW 3416301568,3416309759,PH +3416309760,3416317951,CN 3416317952,3416326143,TW 3416326144,3416327167,VN 3416327168,3416328191,HK @@ -107121,7 +125097,6 @@ 3416372224,3416372479,CN 3416372480,3416372735,SG 3416372736,3416372991,AU -3416372992,3416373247,SG 3416373248,3416373503,AU 3416373504,3416373759,SG 3416373760,3416374271,AU @@ -107137,205 +125112,10 @@ 3416465664,3416465919,HK 3416465920,3416471039,JP 3416471040,3416471295,NZ -3416471296,3416473727,JP -3416473728,3416473855,PH -3416473856,3416473871,JP -3416473872,3416473983,AU -3416473984,3416474047,JP -3416474048,3416474111,AU -3416474112,3416474239,ID -3416474240,3416474375,JP -3416474376,3416474383,AU -3416474384,3416474407,JP -3416474408,3416474415,AU -3416474416,3416474639,JP -3416474640,3416474671,NZ -3416474672,3416474687,JP -3416474688,3416474740,NZ -3416474741,3416474743,JP -3416474744,3416474759,NZ -3416474760,3416474775,JP -3416474776,3416474783,NZ -3416474784,3416474847,JP -3416474848,3416474855,NZ -3416474856,3416475199,JP -3416475200,3416475263,NZ -3416475264,3416475455,JP -3416475456,3416475487,NZ -3416475488,3416475615,JP -3416475616,3416475647,NZ -3416475648,3416475903,TW -3416475904,3416475919,SG -3416475920,3416475951,JP -3416475952,3416475959,SG -3416475960,3416476031,JP -3416476032,3416476063,SG -3416476064,3416476071,JP -3416476072,3416476079,SG -3416476080,3416476111,JP -3416476112,3416476127,SG -3416476128,3416476159,JP -3416476160,3416476167,AU -3416476168,3416476207,JP -3416476208,3416476255,AU -3416476256,3416476367,JP -3416476368,3416476375,AU -3416476376,3416476863,JP -3416476864,3416477183,TW -3416477184,3416477199,JP -3416477200,3416477207,MY -3416477208,3416477215,JP -3416477216,3416477239,MY -3416477240,3416477247,SG -3416477248,3416477263,MY -3416477264,3416477759,JP -3416477760,3416477823,SG -3416477824,3416477887,JP -3416477888,3416477951,SG -3416477952,3416477983,ID -3416477984,3416478143,JP -3416478144,3416478175,ID -3416478176,3416478239,JP -3416478240,3416478271,HK -3416478272,3416478303,JP -3416478304,3416478335,HK -3416478336,3416478463,JP -3416478464,3416478479,TW -3416478480,3416478527,JP -3416478528,3416478543,TW -3416478544,3416478655,JP -3416478656,3416478671,HK -3416478672,3416478703,TW -3416478704,3416478783,JP -3416478784,3416478799,KR -3416478800,3416478847,JP -3416478848,3416478911,TW -3416478912,3416478927,KR -3416478928,3416479103,JP -3416479104,3416479231,AU -3416479232,3416480255,JP -3416480256,3416480383,TW -3416480384,3416481559,JP -3416481560,3416481567,IN -3416481568,3416481575,JP -3416481576,3416481583,AU -3416481584,3416481807,JP -3416481808,3416481815,HK -3416481816,3416481823,JP -3416481824,3416481839,HK -3416481840,3416481855,JP -3416481856,3416481871,HK -3416481872,3416481887,JP -3416481888,3416481919,HK -3416481920,3416481967,JP -3416481968,3416481983,HK -3416481984,3416482047,JP -3416482048,3416482079,SG -3416482080,3416482159,JP -3416482160,3416482191,SG -3416482192,3416482255,JP -3416482256,3416482287,SG -3416482288,3416482591,JP -3416482592,3416482607,KR -3416482608,3416482671,JP -3416482672,3416482687,KR -3416482688,3416482703,JP -3416482704,3416482719,AU -3416482720,3416482784,SG -3416482785,3416482815,HK -3416482816,3416482879,KR -3416482880,3416483167,JP -3416483168,3416483199,SG -3416483200,3416483231,JP -3416483232,3416483327,SG -3416483328,3416483391,HK -3416483392,3416483407,JP -3416483408,3416483423,HK -3416483424,3416483567,JP -3416483568,3416483583,HK -3416483584,3416483663,SG -3416483664,3416483671,JP -3416483672,3416483775,SG -3416483776,3416483863,JP -3416483864,3416483871,KR -3416483872,3416483903,JP -3416483904,3416483911,KR -3416483912,3416483919,HK -3416483920,3416483943,JP -3416483944,3416483951,KR -3416483952,3416483959,HK -3416483960,3416483967,AU -3416483968,3416483975,JP -3416483976,3416484031,HK -3416484032,3416484039,JP -3416484040,3416484055,KR -3416484056,3416484143,JP -3416484144,3416484159,MY -3416484160,3416484175,JP -3416484176,3416484183,MY -3416484184,3416484191,JP -3416484192,3416484223,MY -3416484224,3416484255,JP -3416484256,3416484271,AU -3416484272,3416484319,JP -3416484320,3416484335,HK -3416484336,3416484351,JP -3416484352,3416484607,SG -3416484608,3416484671,JP -3416484672,3416484735,HK -3416484736,3416485823,JP -3416485824,3416485903,SG -3416485904,3416485911,JP -3416485912,3416485927,SG -3416485928,3416485935,JP -3416485936,3416485943,SG -3416485944,3416485967,JP -3416485968,3416485975,SG -3416485976,3416486023,JP -3416486024,3416486039,AU -3416486040,3416486047,SG -3416486048,3416486063,JP -3416486064,3416486103,SG -3416486104,3416486111,JP -3416486112,3416486119,SG -3416486120,3416486127,HK -3416486128,3416486143,SG -3416486144,3416487167,JP -3416487168,3416487175,HK -3416487176,3416487183,JP -3416487184,3416487191,HK -3416487192,3416487255,JP -3416487256,3416487263,HK -3416487264,3416487271,JP -3416487272,3416487279,HK -3416487280,3416487303,JP -3416487304,3416487343,HK -3416487344,3416487359,JP -3416487360,3416487383,HK -3416487384,3416487391,JP -3416487392,3416487415,HK -3416487416,3416487423,JP -3416487424,3416487487,PH -3416487488,3416488451,JP -3416488452,3416488453,AU -3416488454,3416488578,JP -3416488579,3416488579,TW -3416488580,3416488580,SG -3416488581,3416488581,JP -3416488582,3416488582,HK -3416488583,3416488583,AU -3416488584,3416489471,JP +3416471296,3416489471,JP 3416489472,3416489727,AU -3416489728,3416489731,JP -3416489732,3416489735,AU -3416489736,3416489751,JP -3416489752,3416489759,AU -3416489760,3416489763,JP -3416489764,3416489773,AU -3416489774,3416489774,JP -3416489775,3416489783,AU -3416489784,3416489787,JP -3416489788,3416489983,AU +3416489728,3416489983,JP +3416489984,3416506367,VN 3416506368,3416514559,TW 3416514560,3416522751,IN 3416522752,3416588287,AU @@ -107360,6 +125140,7 @@ 3416727552,3416735743,JP 3416735744,3416752127,PH 3416752128,3416784895,NZ +3416784896,3416793087,CN 3416793088,3416801279,AU 3416801280,3416817663,JP 3416817664,3416850431,HK @@ -107401,6 +125182,7 @@ 3416929280,3416930303,JP 3416930304,3416930559,NZ 3416930560,3416930815,AU +3416930816,3416931327,CN 3416931328,3416932351,IN 3416932352,3416936447,PK 3416936448,3416938495,AU @@ -107440,6 +125222,7 @@ 3417137152,3417145343,KR 3417145344,3417178111,NZ 3417178112,3417179135,PH +3417179136,3417179391,CN 3417179392,3417179647,ID 3417179648,3417179903,IN 3417179904,3417180159,CN @@ -107474,7 +125257,7 @@ 3417289728,3417291263,IN 3417291264,3417291775,AU 3417291776,3417292799,KR -3417292800,3417309183,CN +3417292800,3417333759,CN 3417333760,3417337855,AU 3417337856,3417338367,IN 3417338368,3417338879,HK @@ -107532,6 +125315,7 @@ 3418157056,3418161663,BD 3418161664,3418162431,AU 3418162432,3418162687,IN +3418162688,3418163199,CN 3418163200,3418165247,PH 3418165248,3418167295,MY 3418167296,3418167551,IN @@ -107545,6 +125329,7 @@ 3418184192,3418184959,IN 3418184960,3418185727,AU 3418185728,3418189823,PK +3418189824,3418190847,CN 3418190848,3418191871,TH 3418191872,3418192895,ID 3418192896,3418193919,AU @@ -107552,6 +125337,7 @@ 3418202112,3418206207,HK 3418206208,3418208255,IN 3418208256,3418210303,LK +3418210304,3418218495,CN 3418218496,3418227711,BD 3418227712,3418228735,TW 3418228736,3418230783,BD @@ -107739,6 +125525,7 @@ 3418453760,3418456063,HK 3418456064,3418472447,IN 3418472448,3418480639,AU +3418480640,3418488831,CN 3418488832,3418505215,AU 3418505216,3418506831,JP 3418506832,3418506879,ID @@ -107810,17 +125597,18 @@ 3418513232,3418513407,JP 3418513408,3418517503,IN 3418517504,3418519551,MN -3418521600,3418524574,HK -3418524575,3418524606,CN -3418524607,3418524638,TH -3418524639,3418554367,HK +3418519552,3418521599,CN +3418521600,3418554367,HK +3418554368,3418570751,VN +3418570752,3418578943,CN 3418578944,3418583039,TH +3418583040,3418585087,CN 3418585088,3418586111,TH 3418586112,3418586367,AU 3418586368,3418586623,SG 3418586624,3418586879,PK 3418586880,3418587135,AU -3418619904,3418621951,CN +3418587136,3418623999,CN 3418624000,3418626047,JP 3418626048,3418628095,KI 3418628096,3418636287,AU @@ -107878,12 +125666,12 @@ 3418955776,3418959871,TW 3418959872,3418960383,BD 3418960384,3418960895,ID +3418960896,3418961919,JP 3418961920,3418962943,VN 3418962944,3418963967,IN 3418963968,3418988543,AU 3418988544,3418992639,ID 3418992640,3418993919,SG -3418993920,3418994175,MN 3418994176,3418994431,MY 3418994432,3418994687,AU 3418994688,3418995711,MY @@ -107912,6 +125700,7 @@ 3419357184,3419411455,CN 3419411456,3419411711,HK 3419411712,3419411967,NZ +3419411968,3419412223,HK 3419412224,3419412479,JP 3419412480,3419414527,PH 3419414528,3419422719,CN @@ -107924,14 +125713,16 @@ 3419456912,3419456927,JP 3419456928,3419459007,SG 3419459008,3419459071,AF -3419459072,3419471871,SG +3419459072,3419459407,SG +3419459408,3419459423,GB +3419459424,3419471871,SG 3419471872,3419504639,TH 3419504640,3419508735,HK 3419508736,3419512831,JP 3419512832,3419516927,AU 3419516928,3419517951,JP 3419517952,3419518975,VN -3419518976,3419519999,TW +3419518976,3419519999,JP 3419520000,3419520767,ID 3419520768,3419521023,TH 3419521024,3419529215,AU @@ -107973,8 +125764,9 @@ 3419877632,3419877887,KH 3419877888,3419878143,ID 3419878144,3419878399,IN +3419878400,3419879423,GU 3419879424,3419880447,JP -3419880448,3419881471,MY +3419880448,3419881471,MM 3419881472,3419897855,PH 3419897856,3419899903,JP 3419899904,3419900159,FR @@ -107991,6 +125783,7 @@ 3419906048,3419914239,PK 3419914240,3419922431,KR 3419922432,3419924479,JP +3419924480,3419926527,CN 3419926528,3419930623,HK 3419930624,3419971583,JP 3419971584,3419979775,KR @@ -108006,7 +125799,7 @@ 3420033024,3420034047,IN 3420034048,3420036095,AU 3420036096,3420037119,JP -3420037120,3420039167,AU +3420037120,3420038143,AU 3420039168,3420040191,KH 3420040192,3420040703,ID 3420040704,3420040959,IN @@ -108130,8 +125923,8 @@ 3420368896,3420368935,HK 3420368936,3420368943,TW 3420368944,3420368991,HK -3420368992,3420369023,AU -3420369024,3420369055,HK +3420368992,3420369007,AU +3420369008,3420369055,HK 3420369056,3420369087,AU 3420369088,3420369139,HK 3420369140,3420369223,CN @@ -108166,6 +125959,7 @@ 3420372992,3420377087,HK 3420377088,3420389375,JP 3420389376,3420393471,US +3420393472,3420395519,CN 3420395520,3420397567,JP 3420397568,3420401663,KH 3420401664,3420411903,JP @@ -108204,14 +125998,22 @@ 3423161480,3423161487,HK 3423161488,3423161613,US 3423161614,3423161621,CA -3423161622,3423182847,US +3423161622,3423162159,US +3423162160,3423162167,MX +3423162168,3423162303,US +3423162304,3423162311,GB +3423162312,3423162367,US +3423162368,3423163391,CA +3423163392,3423182847,US 3423182848,3423183199,CA 3423183200,3423183231,BM 3423183232,3423183263,CA -3423183264,3423183295,BM -3423183296,3423183743,CA +3423183264,3423183279,EE +3423183280,3423183743,CA 3423183744,3423183871,EE -3423183872,3423184175,CA +3423183872,3423183935,CA +3423183936,3423183967,EE +3423183968,3423184175,CA 3423184176,3423184191,US 3423184192,3423184207,CA 3423184208,3423184215,EE @@ -108242,14 +126044,12 @@ 3423236096,3423238143,JM 3423238144,3423258623,US 3423258624,3423260671,CA -3423262720,3423264831,US +3423260672,3423264831,US 3423264832,3423264863,NG 3423264864,3423265247,US 3423265248,3423265263,EC 3423265264,3423266815,US -3423268864,3423269135,CA -3423269136,3423269151,US -3423269152,3423269887,CA +3423268864,3423269887,CA 3423269888,3423285247,US 3423285248,3423285527,CA 3423285528,3423285535,NL @@ -108289,7 +126089,9 @@ 3423339376,3423339383,DE 3423339384,3423340399,US 3423340400,3423340407,AU -3423340408,3423341511,US +3423340408,3423341015,US +3423341016,3423341023,CA +3423341024,3423341511,US 3423341512,3423341519,PE 3423341520,3423341543,US 3423341544,3423341551,GB @@ -108310,7 +126112,9 @@ 3423343152,3423343167,RO 3423343168,3423343327,US 3423343328,3423343343,AU -3423343344,3423344767,US +3423343344,3423344007,US +3423344008,3423344023,CA +3423344024,3423344767,US 3423344768,3423344791,PK 3423344792,3423344807,CA 3423344808,3423344991,US @@ -108325,7 +126129,8 @@ 3423345432,3423345439,GT 3423345440,3423345503,US 3423345504,3423345535,AU -3423345536,3423345583,US +3423345536,3423345551,CA +3423345552,3423345583,US 3423345584,3423345591,JO 3423345592,3423345623,US 3423345624,3423345631,GB @@ -108335,9 +126140,12 @@ 3423346128,3423346143,CA 3423346144,3423346319,US 3423346320,3423346327,DK -3423346328,3423346487,US +3423346328,3423346431,US +3423346432,3423346447,GB +3423346448,3423346487,US 3423346488,3423346495,AE -3423346496,3423346831,US +3423346496,3423346503,SA +3423346504,3423346831,US 3423346832,3423346847,IM 3423346848,3423346943,US 3423346944,3423346951,CA @@ -108350,13 +126158,19 @@ 3423347448,3423347455,CA 3423347456,3423347503,US 3423347504,3423347519,DE -3423347520,3423347783,US +3423347520,3423347639,US +3423347640,3423347663,GB +3423347664,3423347783,US 3423347784,3423347791,SA 3423347792,3423347823,US 3423347824,3423347831,FR -3423347832,3423347919,US +3423347832,3423347879,US +3423347880,3423347903,CA +3423347904,3423347919,US 3423347920,3423347927,AU -3423347928,3423348007,US +3423347928,3423347951,US +3423347952,3423347959,TH +3423347960,3423348007,US 3423348008,3423348023,GB 3423348024,3423348071,US 3423348072,3423348095,AU @@ -108378,19 +126192,28 @@ 3423350720,3423350727,CA 3423350728,3423350735,US 3423350736,3423350743,SA -3423350744,3423351831,US +3423350744,3423351551,US +3423351552,3423351615,PR +3423351616,3423351831,US 3423351832,3423351839,AU -3423351840,3423352047,US +3423351840,3423352023,US +3423352024,3423352047,CA 3423352048,3423352063,GB -3423352064,3423352255,US +3423352064,3423352071,US +3423352072,3423352079,CA +3423352080,3423352255,US 3423352256,3423352271,CA 3423352272,3423352439,US 3423352440,3423352447,IL -3423352448,3423352503,US +3423352448,3423352495,US +3423352496,3423352503,CA 3423352504,3423352511,IL 3423352512,3423352679,US 3423352680,3423352687,NL -3423352688,3423353031,US +3423352688,3423352695,US +3423352696,3423352703,MX +3423352704,3423352711,BR +3423352712,3423353031,US 3423353032,3423353039,AU 3423353040,3423353143,US 3423353144,3423353151,KH @@ -108400,15 +126223,19 @@ 3423353352,3423353367,PA 3423353368,3423353471,US 3423353472,3423353479,KH -3423353480,3423353543,US +3423353480,3423353503,US +3423353504,3423353511,GB +3423353512,3423353543,US 3423353544,3423353551,IN 3423353552,3423353791,US 3423353792,3423353807,GB -3423353808,3423353919,US +3423353808,3423353855,US +3423353856,3423353871,CA +3423353872,3423353919,US 3423353920,3423353927,BB 3423353928,3423354031,US 3423354032,3423354039,IL -3423354040,3423354047,US +3423354040,3423354047,PT 3423354048,3423354063,PK 3423354064,3423354095,US 3423354096,3423354103,CA @@ -108418,18 +126245,30 @@ 3423354336,3423354359,PE 3423354360,3423354583,US 3423354584,3423354591,AU -3423354592,3423354655,US +3423354592,3423354623,GB +3423354624,3423354655,US 3423354656,3423354663,AE -3423354664,3423354783,US +3423354664,3423354719,US +3423354720,3423354727,BR +3423354728,3423354783,US 3423354784,3423354791,PA -3423354792,3423357111,US +3423354792,3423356087,US +3423356088,3423356119,BR +3423356120,3423356287,US +3423356288,3423356319,CA +3423356320,3423356383,US +3423356384,3423356399,IN +3423356400,3423357111,US 3423357112,3423357127,AE -3423357128,3423357311,US -3423357312,3423357319,CO -3423357320,3423357511,US +3423357128,3423357511,US 3423357512,3423357519,DE -3423357520,3423357527,CO -3423357528,3423363463,US +3423357520,3423357839,US +3423357840,3423357855,IN +3423357856,3423357863,US +3423357864,3423357871,AE +3423357872,3423361023,US +3423361024,3423361279,AU +3423361280,3423363463,US 3423363464,3423363471,AU 3423363472,3423363487,CA 3423363488,3423363511,US @@ -108442,15 +126281,21 @@ 3423365776,3423365783,CA 3423365784,3423365903,US 3423365904,3423365911,AE -3423365912,3423366223,US +3423365912,3423366127,US +3423366128,3423366135,SA +3423366136,3423366223,US 3423366224,3423366239,AU -3423366240,3423366351,US +3423366240,3423366295,US +3423366296,3423366303,CA +3423366304,3423366351,US 3423366352,3423366367,AU 3423366368,3423366479,US 3423366480,3423366495,IT 3423366496,3423366703,US 3423366704,3423366711,GB -3423366712,3423366991,US +3423366712,3423366855,US +3423366856,3423366871,BR +3423366872,3423366991,US 3423366992,3423366999,CA 3423367000,3423367223,US 3423367224,3423367231,AU @@ -108495,7 +126340,11 @@ 3423370872,3423370879,VG 3423370880,3423371263,US 3423371264,3423375359,ZA -3423375360,3423379455,CA +3423375360,3423378175,CA +3423378176,3423378303,US +3423378304,3423378431,CA +3423378432,3423378943,US +3423378944,3423379455,CA 3423379456,3423393903,US 3423393904,3423393911,RU 3423393912,3423396487,US @@ -108512,13 +126361,11 @@ 3423401184,3423401191,RU 3423401192,3423402943,US 3423402944,3423402951,RU -3423402952,3423412223,US -3423414272,3423416319,US +3423402952,3423416319,US +3423416320,3423417343,CA 3423417344,3423417470,US 3423417471,3423417480,AU -3423417481,3423417975,US -3423417976,3423417995,RO -3423417996,3423462655,US +3423417481,3423462655,US 3423462656,3423462671,CA 3423462672,3423473663,US 3423473664,3423474655,CA @@ -108546,9 +126393,7 @@ 3423493912,3423493919,TT 3423493920,3423493967,US 3423493968,3423493975,AT -3423493976,3423498079,US -3423498080,3423498087,CA -3423498088,3423533055,US +3423493976,3423533055,US 3423533056,3423535103,AI 3423535104,3423540087,US 3423540088,3423540095,HN @@ -108560,8 +126405,7 @@ 3423544512,3423544543,CA 3423544544,3423544551,US 3423544552,3423545343,CA -3423545344,3423549439,US -3423551488,3423554183,US +3423545344,3423554183,US 3423554184,3423554191,CA 3423554192,3423554271,US 3423554272,3423554279,GB @@ -108570,8 +126414,10 @@ 3423554768,3423571967,US 3423571968,3423574015,PR 3423574016,3423582207,US -3423582208,3423584343,CA -3423584344,3423584351,US +3423582208,3423584271,CA +3423584272,3423584279,US +3423584280,3423584335,CA +3423584336,3423584351,US 3423584352,3423584359,AU 3423584360,3423584367,CA 3423584368,3423584375,US @@ -108579,9 +126425,7 @@ 3423584424,3423584431,US 3423584432,3423584447,CA 3423584448,3423584455,US -3423584456,3423584503,CA -3423584504,3423584511,US -3423584512,3423584687,CA +3423584456,3423584687,CA 3423584688,3423584703,US 3423584704,3423584719,CA 3423584720,3423584735,US @@ -108589,13 +126433,9 @@ 3423584752,3423584767,US 3423584768,3423585535,CA 3423585536,3423585551,MY -3423585552,3423585631,CA -3423585632,3423585647,US -3423585648,3423585775,CA +3423585552,3423585775,CA 3423585776,3423585791,MY -3423585792,3423585879,CA -3423585880,3423585887,US -3423585888,3423585895,CA +3423585792,3423585895,CA 3423585896,3423585903,NL 3423585904,3423585911,CA 3423585912,3423585919,ES @@ -108643,31 +126483,55 @@ 3423652000,3423653887,CA 3423653888,3423705599,US 3423705600,3423705855,CA -3423705856,3423797247,US -3423797248,3423827711,CA +3423705856,3423797503,US +3423797504,3423801087,CA +3423801088,3423801343,US +3423801344,3423823359,CA +3423823360,3423823871,US +3423823872,3423827711,CA 3423827712,3423827967,US -3423827968,3423848447,CA +3423827968,3423830271,CA +3423830272,3423830527,US +3423830528,3423838719,CA +3423838720,3423838975,US +3423838976,3423848447,CA 3423848448,3423849471,KN -3423849984,3423858175,CA +3423849472,3423849983,US +3423849984,3423850495,CA +3423850496,3423850751,US +3423850752,3423854335,CA +3423854336,3423854591,US +3423854592,3423858175,CA 3423858176,3423858687,US -3423858688,3423862783,CA -3423862784,3424334847,US +3423858688,3423858943,CA +3423858944,3423859455,US +3423859456,3423859711,CA +3423859712,3423859967,US +3423859968,3423862527,CA +3423862528,3424334847,US 3424334848,3424335871,CA 3424335872,3424378879,US 3424378880,3424379135,PR -3424379136,3424493823,US +3424379136,3424412415,US +3424412416,3424412671,CA +3424412672,3424493823,US 3424493824,3424494079,CA -3424494080,3424494335,US -3424494592,3425173503,US +3424494080,3424507135,US +3424507136,3424507391,CA +3424507392,3425173503,US 3425173504,3425304575,CA 3425304576,3425697791,US 3425697792,3425699839,CA -3425699840,3425828863,US +3425699840,3425714175,US +3425714176,3425722367,CA +3425722368,3425828863,US 3425828864,3425830815,CA 3425830816,3425830831,US -3425830832,3425855231,CA -3425855232,3425855487,US -3425855488,3425869167,CA +3425830832,3425850519,CA +3425850520,3425850527,US +3425850528,3425864711,CA +3425864712,3425864719,US +3425864720,3425869167,CA 3425869168,3425869183,US 3425869184,3425875391,CA 3425875392,3425875407,US @@ -108684,27 +126548,43 @@ 3425916480,3425916543,DK 3425916544,3426013183,US 3426013184,3426013439,IL -3426013440,3426387967,US +3426013440,3426369023,US +3426369024,3426369535,CA +3426369536,3426387967,US 3426387968,3426388991,MX -3426388992,3426646015,US +3426388992,3426400255,US +3426400256,3426400511,CA +3426400512,3426617855,US +3426617856,3426618367,CA +3426618368,3426618687,US +3426618688,3426618703,NZ +3426618704,3426618735,US +3426618736,3426618751,NZ +3426618752,3426618911,US +3426618912,3426619071,NZ +3426619072,3426619167,US +3426619168,3426619247,NZ +3426619248,3426619263,US +3426619264,3426619295,NZ +3426619296,3426646015,US 3426646016,3426647039,CA -3426647040,3426680831,US -3426680832,3426682111,KN -3426682112,3426682367,US -3426682368,3426682879,KN -3426682880,3426683647,US -3426683648,3426683903,KN -3426683904,3426684159,US -3426684160,3426684415,KN -3426684416,3426744319,US +3426647040,3426729471,US +3426729472,3426729983,CA +3426729984,3426744319,US 3426744320,3426746367,CA -3426746368,3427127295,US +3426746368,3427033087,US +3427033088,3427041279,A1 +3427041280,3427117055,US +3427117056,3427117311,CA +3427117312,3427127295,US 3427127296,3427127551,CA -3427127552,3427127807,US -3427128064,3427128831,US -3427129344,3427618303,US +3427127552,3427618303,US 3427618304,3427618559,CA -3427618560,3427729407,US +3427618560,3427647999,US +3427648000,3427648511,CA +3427648512,3427651071,US +3427651072,3427651327,CA +3427651328,3427729407,US 3427729408,3427729663,CA 3427729664,3427730431,US 3427730432,3427730687,BE @@ -108745,8 +126625,7 @@ 3427750912,3427751423,US 3427751424,3427751519,BE 3427751520,3427752447,US -3427752448,3427752703,NL -3427752704,3427752959,GB +3427752448,3427752959,GB 3427752960,3427753215,US 3427753216,3427753471,JP 3427753472,3427753727,FI @@ -108805,8 +126684,7 @@ 3427773696,3427773951,FR 3427773952,3427774719,US 3427774720,3427775231,DE -3427775232,3427775999,US -3427776000,3427776511,HK +3427775232,3427776511,US 3427776512,3427776767,CZ 3427776768,3427777023,US 3427777024,3427777279,NL @@ -108861,11 +126739,21 @@ 3428286720,3428286975,CA 3428286976,3428296959,US 3428296960,3428297215,CL -3428297472,3428299519,US +3428297216,3428299519,US 3428299520,3428299775,ZA -3428299776,3428306175,US +3428299776,3428302079,US +3428302080,3428302335,CA +3428302336,3428306175,US 3428306176,3428306431,MX -3428306432,3428437503,US +3428306432,3428318975,US +3428318976,3428319231,CA +3428319232,3428399359,US +3428399360,3428399615,CA +3428400128,3428433919,US +3428433920,3428434175,CA +3428434176,3428434943,US +3428434944,3428435199,CA +3428435200,3428437503,US 3428437504,3428437759,MX 3428437760,3428496639,US 3428496640,3428497151,NL @@ -108917,7 +126805,9 @@ 3428587776,3428588287,CA 3428588288,3428588543,US 3428588544,3428589055,CA -3428589056,3428591623,US +3428589056,3428589311,US +3428589312,3428589567,CA +3428589568,3428591623,US 3428591624,3428591663,CA 3428591664,3428591679,US 3428591680,3428591695,CA @@ -109012,8 +126902,8 @@ 3428606384,3428606415,US 3428606416,3428606431,CA 3428606432,3428606463,US -3428606464,3428606559,CA -3428606560,3428606655,US +3428606464,3428606591,CA +3428606592,3428606655,US 3428606656,3428606687,CA 3428606688,3428606911,US 3428606912,3428606975,IS @@ -109021,8 +126911,8 @@ 3428607744,3428607871,CA 3428607872,3428607999,US 3428608000,3428609023,CA -3428609024,3428610303,US -3428610304,3428611071,CA +3428609024,3428610047,US +3428610048,3428611071,CA 3428611072,3428611583,US 3428611584,3428611839,CA 3428611840,3428612607,US @@ -109038,8 +126928,8 @@ 3428623616,3428623871,US 3428623872,3428624639,CA 3428624640,3428625407,US -3428625408,3428627199,CA -3428627200,3428630015,US +3428625408,3428628223,CA +3428628224,3428630015,US 3428630016,3428634623,CA 3428634624,3428634879,US 3428634880,3428635135,CA @@ -109117,7 +127007,9 @@ 3429411584,3429411839,DE 3429411840,3429500927,US 3429500928,3429502975,A2 -3429502976,3429775359,US +3429502976,3429774599,US +3429774600,3429774607,BD +3429774608,3429775359,US 3429775360,3429777407,TC 3429777408,3429892095,US 3429892096,3429957631,CA @@ -109136,9 +127028,13 @@ 3430468864,3430468871,PR 3430468872,3430701055,US 3430701056,3430702079,CA -3430702080,3430705151,US +3430702080,3430703871,US +3430703872,3430704127,PR +3430704128,3430705151,US 3430705152,3430706175,MX -3430706176,3430747903,US +3430706176,3430722303,US +3430722304,3430722559,CA +3430722560,3430747903,US 3430747904,3430748159,CA 3430748160,3430749951,US 3430749952,3430750207,CA @@ -109180,22 +127076,30 @@ 3430807296,3430807551,CA 3430807552,3430809087,US 3430809088,3430809343,CA -3430809344,3430812159,US +3430809344,3430812671,US 3430812672,3430813183,MX 3430813184,3430842367,US 3430842368,3430842879,DO 3430842880,3430845439,US 3430845440,3430845951,MX -3430845952,3431114495,US +3430845952,3430849535,US +3430849536,3430850047,CA +3430850048,3431114495,US 3431114496,3431114751,CA 3431114752,3431468031,US 3431468032,3431469055,CA -3431469056,3431596031,US -3431596032,3431613439,CA +3431469056,3431596287,US +3431596288,3431602687,CA +3431602688,3431602943,US +3431602944,3431613439,CA 3431613440,3431613695,US -3431613696,3431621631,CA -3431621632,3431622143,US -3431622400,3431624703,CA +3431613696,3431620095,CA +3431620096,3431620351,US +3431620352,3431621375,CA +3431621376,3431622399,US +3431622400,3431622655,CA +3431622656,3431622911,US +3431622912,3431624703,CA 3431624704,3431624959,US 3431624960,3431638783,CA 3431638784,3431639039,US @@ -109218,7 +127122,8 @@ 3431752704,3431753215,US 3431753216,3431753471,SG 3431753472,3431755007,CA -3431755008,3431759615,NL +3431755008,3431755775,NL +3431755776,3431759615,CA 3431759616,3431759871,DE 3431759872,3431783431,US 3431783432,3431783435,NL @@ -109260,7 +127165,7 @@ 3432572800,3432572927,DO 3432572928,3432585215,US 3432585216,3432585727,MX -3432586240,3432613631,US +3432585728,3432613631,US 3432613632,3432613887,CA 3432613888,3432634111,US 3432634112,3432634367,CA @@ -109302,10 +127207,12 @@ 3434133760,3434133791,IL 3434133792,3434134015,US 3434134016,3434134079,CA -3434134080,3434423295,US +3434134080,3434299391,US +3434299392,3434303487,VE +3434303488,3434423295,US 3434423296,3434423303,CA 3434423304,3434427391,US -3434427392,3434428415,HN +3434427392,3434428415,HR 3434428416,3434433279,US 3434433280,3434433535,PR 3434433536,3434553343,US @@ -109319,7 +127226,27 @@ 3434584064,3434807551,US 3434807552,3434810111,CA 3434810112,3434810367,US -3434810368,3434831359,CA +3434810368,3434810879,CA +3434810880,3434810895,GB +3434810896,3434810911,US +3434810912,3434810943,CA +3434810944,3434810959,US +3434810960,3434810975,AE +3434810976,3434811007,CA +3434811008,3434811023,US +3434811024,3434811039,ZA +3434811040,3434811071,US +3434811072,3434811135,CA +3434811136,3434811151,US +3434811152,3434811167,CA +3434811168,3434811199,US +3434811200,3434811215,AU +3434811216,3434811311,US +3434811312,3434811327,GB +3434811328,3434811359,US +3434811360,3434811375,CA +3434811376,3434811383,US +3434811384,3434831359,CA 3434831360,3434831615,US 3434831616,3434872575,CA 3434872576,3434907647,US @@ -109344,10 +127271,14 @@ 3435271424,3435271679,CA 3435271680,3435507711,US 3435507712,3435511807,CA -3435511808,3436249343,US +3435511808,3435518463,US +3435518464,3435518527,GI +3435518528,3436249343,US 3436249344,3436255743,CA 3436255744,3436256255,US -3436256256,3436282367,CA +3436256256,3436278271,CA +3436278272,3436278527,US +3436278528,3436282367,CA 3436282368,3436282623,US 3436282624,3436289791,CA 3436289792,3436290047,US @@ -109391,7 +127322,9 @@ 3437332480,3437332735,US 3437332736,3437334015,CA 3437334016,3437334271,US -3437334272,3437336063,CA +3437334272,3437334783,CA +3437334784,3437335551,US +3437335552,3437336063,CA 3437336064,3437336319,US 3437336320,3437341695,CA 3437341696,3437341951,US @@ -109476,7 +127409,9 @@ 3437756160,3437756415,IE 3437756416,3437772799,US 3437772800,3437776895,CA -3437776896,3437789863,US +3437776896,3437789847,US +3437789848,3437789855,IN +3437789856,3437789863,US 3437789864,3437789871,AU 3437789872,3437790143,US 3437790144,3437790159,CA @@ -109498,7 +127433,9 @@ 3437792280,3437792287,SE 3437792288,3437792415,US 3437792416,3437792423,AU -3437792424,3437792735,US +3437792424,3437792527,US +3437792528,3437792535,MX +3437792536,3437792735,US 3437792736,3437792743,CA 3437792744,3437792775,US 3437792776,3437792783,CA @@ -109625,7 +127562,9 @@ 3437805232,3437805239,FR 3437805240,3437805271,US 3437805272,3437805279,IL -3437805280,3437815807,US +3437805280,3437814623,US +3437814624,3437814631,CA +3437814632,3437815807,US 3437815808,3437815815,IN 3437815816,3437815991,US 3437815992,3437815999,CA @@ -109648,7 +127587,9 @@ 3437817648,3437817663,FR 3437817664,3437817855,US 3437817856,3437817983,BD -3437817984,3437819871,US +3437817984,3437819471,US +3437819472,3437819479,IL +3437819480,3437819871,US 3437819872,3437819887,FR 3437819888,3437821823,US 3437821824,3437821887,BD @@ -109683,21 +127624,27 @@ 3438545424,3438545431,US 3438545432,3438545471,CA 3438545472,3438545479,US -3438545480,3438545583,CA -3438545584,3438545591,US -3438545592,3438550071,CA +3438545480,3438550071,CA 3438550072,3438550079,US 3438550080,3438550447,CA 3438550448,3438550463,US 3438550464,3438552271,CA 3438552272,3438552287,US -3438552288,3438570031,CA +3438552288,3438559647,CA +3438559648,3438559679,US +3438559680,3438569215,CA +3438569216,3438569343,US +3438569344,3438570031,CA 3438570032,3438570039,MY -3438570040,3438590975,CA +3438570040,3438570495,CA +3438570496,3438570527,US +3438570528,3438590975,CA 3438590976,3438591231,TC 3438591232,3438592255,CA 3438592256,3438592263,US -3438592264,3438600319,CA +3438592264,3438592527,CA +3438592528,3438592535,US +3438592536,3438600319,CA 3438600320,3438600351,US 3438600352,3438608383,CA 3438608384,3438813183,US @@ -109847,7 +127794,9 @@ 3448546176,3448546207,SG 3448546208,3448546431,US 3448546432,3448546455,AU -3448546456,3448556671,US +3448546456,3448547583,US +3448547584,3448547599,SG +3448547600,3448556671,US 3448556672,3448556735,GB 3448556736,3448556799,US 3448556800,3448556815,GB @@ -109859,7 +127808,12 @@ 3448563016,3448563031,GB 3448563032,3448569055,US 3448569056,3448569087,MX -3448569088,3449001245,US +3448569088,3448569735,US +3448569736,3448569743,GB +3448569744,3448983807,US +3448983808,3448983871,GB +3448983872,3448985599,US +3448987648,3449001245,US 3449001246,3449001246,MC 3449001247,3449159679,US 3449159680,3449160703,CA @@ -110058,7 +128012,12 @@ 3450272768,3450345231,US 3450345232,3450345247,FR 3450345248,3450345263,IT -3450345264,3450345439,US +3450345264,3450345279,US +3450345280,3450345311,NE +3450345312,3450345343,GE +3450345344,3450345391,US +3450345392,3450345399,BG +3450345400,3450345439,US 3450345440,3450345471,GE 3450345472,3450731519,US 3450731520,3450732543,CA @@ -110083,10 +128042,14 @@ 3451236608,3451371519,US 3451371520,3451371775,GB 3451371776,3451482111,US -3451482112,3451486207,CA +3451482112,3451482439,CA +3451482440,3451482447,AR +3451482448,3451483423,CA +3451483424,3451483431,US +3451483432,3451486207,CA 3451486208,3451506687,US -3451506688,3451507199,BR -3451507200,3451715583,US +3451506688,3451507711,BR +3451507712,3451715583,US 3451715584,3451737343,CA 3451737344,3451737599,US 3451737600,3451744255,CA @@ -110202,7 +128165,11 @@ 3453039168,3453039183,AU 3453039184,3453039199,US 3453039200,3453039215,CA -3453039216,3453091839,US +3453039216,3453039623,US +3453039624,3453039631,AU +3453039632,3453039919,US +3453039920,3453039935,AU +3453039936,3453091839,US 3453091840,3453101055,CA 3453101056,3453101311,US 3453101312,3453139455,CA @@ -110211,7 +128178,9 @@ 3453149184,3453149439,US 3453149440,3453159423,CA 3453159424,3453159935,BM -3453159936,3453206527,CA +3453159936,3453195263,CA +3453195264,3453195519,US +3453195520,3453206527,CA 3453206528,3453207551,HN 3453207552,3453207807,NI 3453207808,3453208575,HN @@ -110318,8 +128287,8 @@ 3453375144,3453375167,US 3453375168,3453375191,SA 3453375192,3453375215,US -3453375216,3453375239,GB -3453375240,3453375255,US +3453375216,3453375231,GB +3453375232,3453375255,US 3453375256,3453375263,IN 3453375264,3453375279,GB 3453375280,3453375319,TK @@ -110433,15 +128402,30 @@ 3453554160,3453554175,GB 3453554176,3453554207,US 3453554208,3453554215,GB -3453554216,3453554431,US +3453554216,3453554239,US +3453554240,3453554255,GB +3453554256,3453554431,US 3453554432,3453554687,GB 3453554688,3453554863,US 3453554864,3453554879,NL 3453554880,3453555711,US 3453555712,3453555767,GB -3453555768,3453599999,US +3453555768,3453583615,US +3453583616,3453583695,SG +3453583696,3453595527,US +3453595528,3453595551,CA +3453595552,3453595583,US +3453595584,3453595623,CA +3453595624,3453599999,US 3453600000,3453600767,GB -3453600768,3453607935,US +3453600768,3453601863,US +3453601864,3453601871,GB +3453601872,3453601879,CH +3453601880,3453602175,US +3453602176,3453602183,GB +3453602184,3453602207,US +3453602208,3453602223,GB +3453602224,3453607935,US 3453607936,3453608959,KN 3453608960,3453609983,LC 3453609984,3453610495,AG @@ -110455,7 +128439,9 @@ 3453615104,3453615359,AG 3453615360,3453615615,KN 3453615616,3453616127,AG -3453616128,3454003013,US +3453616128,3453681943,US +3453681944,3453681951,IN +3453681952,3454003013,US 3454003014,3454003014,ES 3454003015,3454004997,US 3454004998,3454004998,GB @@ -110465,25 +128451,34 @@ 3454497792,3454498815,MX 3454498816,3454563623,US 3454563624,3454563631,NC -3454563632,3454599167,US -3454599168,3454601215,CA +3454563632,3454599423,US +3454599424,3454601215,CA 3454601216,3454602239,US -3454603008,3454604799,CA +3454602752,3454603007,US +3454603008,3454603519,CA +3454603520,3454604031,US +3454604032,3454604799,CA 3454604800,3454607359,US 3454607360,3454608127,CA 3454608128,3454608383,US -3454608384,3454609407,CA -3454609408,3454611455,US -3454611456,3454618623,CA -3454618624,3454619647,US -3454619648,3454635007,CA -3454635008,3454636031,US +3454608384,3454609151,CA +3454609152,3454611455,US +3454611456,3454617343,CA +3454617344,3454617599,US +3454617600,3454617855,CA +3454617856,3454618111,US +3454618112,3454618367,CA +3454618368,3454619647,US +3454619648,3454634751,CA +3454634752,3454636031,US 3454636032,3454636799,CA 3454636800,3454637055,US -3454637056,3454661631,CA +3454637056,3454652159,CA +3454652160,3454652415,US +3454652416,3454661631,CA 3454661632,3454662655,US -3454662656,3454664703,CA -3454664704,3454672895,US +3454662656,3454664447,CA +3454664448,3454672895,US 3454672896,3454681087,CA 3454681088,3454698823,US 3454698824,3454698839,CA @@ -110493,9 +128488,26 @@ 3454703136,3454703143,IN 3454703144,3454703255,US 3454703256,3454703263,CA -3454703264,3454705151,US +3454703264,3454703647,US +3454703648,3454703663,CA +3454703664,3454703951,US +3454703952,3454703959,AF +3454703960,3454704007,US +3454704008,3454704015,ID +3454704016,3454704047,US +3454704048,3454704055,CA +3454704056,3454704063,US +3454704064,3454704079,CA +3454704080,3454704087,AE +3454704088,3454704103,US +3454704104,3454704111,GB +3454704112,3454705151,US 3454705152,3454705215,GB -3454705216,3454708927,US +3454705216,3454705439,US +3454705440,3454705447,GB +3454705448,3454705511,US +3454705512,3454705519,CA +3454705520,3454708927,US 3454708928,3454708991,IN 3454708992,3454710551,US 3454710552,3454710559,SO @@ -110522,13 +128534,23 @@ 3454727800,3454727807,CA 3454727808,3454730239,US 3454730240,3454732287,EC -3454732288,3454795775,US -3454795776,3454808831,CA +3454732288,3454796031,US +3454796032,3454808831,CA 3454808832,3454809087,US -3454809088,3454814975,CA +3454809088,3454810111,CA +3454810112,3454810367,US +3454810368,3454814975,CA 3454814976,3454815231,US 3454815232,3454815743,CA -3454816256,3454883839,CA +3454816256,3454816511,CA +3454816512,3454816767,US +3454816768,3454828287,CA +3454828288,3454828543,US +3454828544,3454861055,CA +3454861056,3454861567,US +3454861568,3454867711,CA +3454867712,3454867967,US +3454867968,3454883839,CA 3454883840,3454914559,US 3454914560,3454926847,CA 3454926848,3455096831,US @@ -110662,7 +128684,9 @@ 3455647488,3455647743,IT 3455647744,3455713279,US 3455713280,3455778815,CA -3455778816,3455871999,US +3455778816,3455797375,US +3455797376,3455797407,FR +3455797408,3455871999,US 3455872000,3455872255,ZM 3455872256,3456303103,US 3456303104,3456311295,JP @@ -110708,7 +128732,11 @@ 3457859840,3457860095,CA 3457860096,3457862847,US 3457862848,3457862911,CA -3457862912,3458141631,US +3457862912,3457892351,US +3457892352,3457892623,IN +3457892624,3458084927,US +3458084928,3458084935,CA +3458084936,3458141631,US 3458141632,3458141655,GB 3458141656,3458143863,US 3458143864,3458143871,AE @@ -110774,7 +128802,7 @@ 3459266624,3459266655,KN 3459266656,3459267327,AG 3459267328,3459267583,AI -3459267584,3459267839,LC +3459267584,3459267839,AG 3459267840,3459268095,DM 3459268096,3459268607,AG 3459268608,3459273727,US @@ -110916,7 +128944,11 @@ 3459745536,3459745791,IT 3459745792,3459850431,US 3459850432,3459850495,CA -3459850496,3460104703,US +3459850496,3459852991,US +3459852992,3459853007,CA +3459853008,3459873807,US +3459873808,3459873823,IT +3459873824,3460104703,US 3460104704,3460105215,MX 3460105216,3460108895,US 3460108896,3460108903,FI @@ -110927,27 +128959,33 @@ 3460113048,3460114431,US 3460114432,3460116479,SR 3460116480,3460161535,US -3460161536,3460163583,PR -3460163584,3460374527,US +3460161536,3460165631,PR +3460165632,3460374527,US 3460374528,3460375551,MX 3460375552,3460453631,US 3460453632,3460453887,BS 3460453888,3460507647,US 3460507648,3460507903,MX -3460507904,3460854439,US +3460507904,3460800511,US +3460800512,3460808703,A1 +3460808704,3460854439,US 3460854440,3460854447,CA 3460854448,3460854831,US 3460854832,3460854847,VE 3460854848,3460854911,US 3460854912,3460854943,GB -3460854944,3460855247,US +3460854944,3460855015,US +3460855016,3460855031,AU +3460855032,3460855195,US +3460855196,3460855199,AU +3460855200,3460855247,US 3460855248,3460855255,AU 3460855256,3460855263,VE 3460855264,3460855271,US 3460855272,3460855279,GB 3460855280,3460855287,CA 3460855288,3460855311,US -3460855312,3460855319,CA +3460855312,3460855319,NL 3460855320,3460855463,US 3460855464,3460855471,SA 3460855472,3460855495,US @@ -110956,20 +128994,21 @@ 3460855536,3460855543,MX 3460855544,3460855551,AU 3460855552,3460855631,US -3460855632,3460855647,IT +3460855632,3460855647,CA 3460855648,3460855703,US 3460855704,3460855711,AU 3460855712,3460855743,US 3460855744,3460855775,CA 3460855776,3460855807,US 3460855808,3460855815,GB -3460855816,3460855823,NZ -3460855824,3460855855,US +3460855816,3460855855,US 3460855856,3460855863,GB 3460855864,3460855871,US 3460855872,3460855879,GB 3460855880,3460855887,GU -3460855888,3460856007,US +3460855888,3460855991,US +3460855992,3460855999,GB +3460856000,3460856007,US 3460856008,3460856015,CA 3460856016,3460856119,US 3460856120,3460856127,GB @@ -110980,21 +129019,28 @@ 3460856216,3460856223,GB 3460856224,3460856287,US 3460856288,3460856295,IN -3460856296,3460856383,US +3460856296,3460856351,US +3460856352,3460856355,TZ +3460856356,3460856383,US 3460856384,3460856399,GB 3460856400,3460856447,US 3460856448,3460856495,GB 3460856496,3460856559,US 3460856560,3460856575,CA -3460856576,3460856607,US -3460856608,3460856639,NZ +3460856576,3460856623,US +3460856624,3460856639,NZ 3460856640,3460856815,US 3460856816,3460856831,NZ 3460856832,3460857055,US 3460857056,3460857087,NZ 3460857088,3460857151,US 3460857152,3460857183,CA -3460857184,3460857431,US +3460857184,3460857343,US +3460857344,3460857359,CA +3460857360,3460857367,US +3460857368,3460857375,PL +3460857376,3460857383,GB +3460857384,3460857431,US 3460857432,3460857439,VE 3460857440,3460857463,US 3460857464,3460857471,GB @@ -111349,9 +129395,15 @@ 3461286336,3461286399,US 3461286400,3461286463,FR 3461286464,3461286471,GB -3461286472,3461330943,US +3461286472,3461286503,US +3461286504,3461286511,GB +3461286512,3461286519,US +3461286520,3461286543,GB +3461286544,3461330943,US 3461330944,3461331199,SG -3461331200,3461331295,US +3461331200,3461331247,US +3461331248,3461331263,SG +3461331264,3461331295,US 3461331296,3461331311,SG 3461331312,3461331327,US 3461331328,3461331551,SG @@ -111373,7 +129425,9 @@ 3461514752,3461516287,CA 3461516288,3461516543,IL 3461516544,3461517055,CA -3461517056,3461554175,US +3461517056,3461532607,US +3461532608,3461532623,CA +3461532624,3461554175,US 3461554176,3461556223,CA 3461558272,3461597887,US 3461597888,3461597951,CO @@ -111471,15 +129525,22 @@ 3462571664,3462571671,CA 3462571672,3462593791,US 3462593792,3462594559,GN -3462594560,3462633727,US +3462594560,3462633471,US +3462633472,3462633727,SG 3462633728,3462633799,BV 3462633800,3462633823,US 3462633824,3462633855,SG -3462633856,3462634247,US +3462633856,3462633983,US +3462633984,3462634239,SG +3462634240,3462634247,US 3462634248,3462634271,SG 3462634272,3462634367,AE 3462634368,3462634495,SG -3462634496,3462889479,US +3462634496,3462634751,US +3462634752,3462635007,SG +3462635008,3462635263,US +3462635264,3462635519,SG +3462635520,3462889479,US 3462889480,3462889487,GB 3462889488,3462991183,US 3462991184,3462991191,CA @@ -111530,8 +129591,8 @@ 3464128000,3464128255,DE 3464128256,3464129535,US 3464129536,3464130047,DE -3464130048,3464167423,US -3464167424,3464171775,CA +3464130048,3464167679,US +3464167680,3464171775,CA 3464171776,3464172031,US 3464172032,3464180735,CA 3464180736,3464184487,US @@ -111541,13 +129602,16 @@ 3464185760,3464185791,PR 3464185792,3464190463,US 3464190464,3464190719,CA -3464190720,3464191799,US +3464190720,3464191775,US +3464191776,3464191783,ES +3464191784,3464191799,US 3464191800,3464191807,AF 3464191808,3464191815,US 3464191816,3464191823,CA -3464191824,3464191831,US -3464191832,3464191847,CA -3464191848,3464195543,US +3464191824,3464191911,US +3464191912,3464191919,ES +3464191920,3464191927,SG +3464191928,3464195543,US 3464195544,3464195551,IT 3464195552,3464195887,US 3464195888,3464195895,PR @@ -111559,7 +129623,7 @@ 3464196160,3464196175,US 3464196176,3464196183,AU 3464196184,3464196191,IT -3464196192,3464208383,US +3464196192,3464200191,US 3464208384,3464216575,CA 3464216576,3464309903,US 3464309904,3464309911,CA @@ -111571,18 +129635,31 @@ 3464340480,3464341503,CA 3464341504,3464341759,US 3464341760,3464341775,JP -3464341776,3464341823,US +3464341776,3464341783,AU +3464341784,3464341799,US +3464341800,3464341807,CA +3464341808,3464341815,JP +3464341816,3464341823,US 3464341824,3464341831,PT -3464341832,3464342543,US +3464341832,3464341871,US +3464341872,3464341879,VN +3464341880,3464341895,US +3464341896,3464341903,GB +3464341904,3464341911,US +3464341912,3464341919,IE +3464341920,3464341927,US +3464341928,3464341935,CV +3464341936,3464341983,US +3464341984,3464341991,PR +3464341992,3464342543,US 3464342544,3464342559,SE -3464342560,3464342703,US +3464342560,3464342567,US +3464342568,3464342575,PT +3464342576,3464342703,US 3464342704,3464342711,JP -3464342712,3464342871,US -3464342872,3464342879,ZA +3464342712,3464342879,US 3464342880,3464342887,GB -3464342888,3464343111,US -3464343112,3464343119,CN -3464343120,3464343215,US +3464342888,3464343215,US 3464343216,3464343223,CA 3464343224,3464343239,US 3464343240,3464343247,MX @@ -111594,51 +129671,28 @@ 3464384512,3464388607,CA 3464388608,3464394751,US 3464394752,3464396799,VC -3464396800,3464548367,US -3464548368,3464548375,AG -3464548376,3464548391,US -3464548392,3464548399,AG -3464548400,3464548415,US -3464548416,3464548431,AG -3464548432,3464548479,US -3464548480,3464548599,AG -3464548600,3464548607,US +3464396800,3464548351,US +3464548352,3464548607,AG 3464548608,3464548863,LC 3464548864,3464549119,KN 3464549120,3464549375,VG -3464549376,3464549391,US -3464549392,3464549399,AG -3464549400,3464549415,US -3464549416,3464549439,AG +3464549376,3464549439,AG 3464549440,3464549503,MS -3464549504,3464549519,AG -3464549520,3464549551,US -3464549552,3464549567,AG -3464549568,3464549639,US -3464549640,3464549679,AG -3464549680,3464549687,US -3464549688,3464549727,AG +3464549504,3464549727,AG 3464549728,3464549759,KN -3464549760,3464549855,AG -3464549856,3464549863,US -3464549864,3464549871,AG -3464549872,3464549919,US -3464549920,3464549927,AG -3464549928,3464549935,US -3464549936,3464549943,AG -3464549944,3464549951,US -3464549952,3464550015,AG -3464550016,3464550047,US -3464550048,3464550127,AG -3464550128,3464550143,US +3464549760,3464550143,AG 3464550144,3464550399,LC 3464550400,3464626175,US -3464626176,3464630271,CA +3464626432,3464626687,CA +3464626688,3464627199,US +3464627968,3464630271,CA 3464630272,3464631295,US 3464631296,3464650751,CA 3464650752,3464664063,US 3464664064,3464691711,CA -3464691712,3464768607,US +3464691712,3464766143,US +3464766144,3464766207,IN +3464766208,3464768607,US 3464768608,3464768623,IT 3464768624,3464768767,US 3464768768,3464768895,CA @@ -111652,7 +129706,8 @@ 3465177088,3465179135,PE 3465179136,3465412607,US 3465412608,3465412871,HK -3465412872,3465412927,US +3465412872,3465412895,GB +3465412896,3465412927,US 3465412928,3465413055,HK 3465413056,3465413119,US 3465413120,3465413127,HK @@ -111660,9 +129715,37 @@ 3465413376,3465413383,HK 3465413384,3465462783,US 3465462784,3465463039,GB -3465463040,3465510911,US +3465463040,3465463279,US +3465463280,3465463295,GB +3465463296,3465466687,US +3465466688,3465466703,GB +3465466704,3465466879,US +3465466880,3465466975,GB +3465466976,3465467071,US +3465467072,3465467079,GB +3465467080,3465468079,US +3465468080,3465468087,GB +3465468088,3465468351,US +3465468352,3465468367,FI +3465468368,3465468383,US +3465468384,3465468399,GB +3465468400,3465468879,US +3465468880,3465468911,SG +3465468912,3465468935,US +3465468936,3465468943,SG +3465468944,3465469183,US +3465469184,3465469215,GB +3465469216,3465510911,US 3465510912,3465543679,JP -3465543680,3465982991,US +3465543680,3465953503,US +3465953504,3465953535,CA +3465953536,3465954175,US +3465954176,3465954303,CA +3465954304,3465961607,US +3465961608,3465961615,CA +3465961616,3465961631,US +3465961632,3465961663,CA +3465961664,3465982991,US 3465982992,3465983007,GB 3465983008,3465983023,US 3465983024,3465983127,GB @@ -111676,7 +129759,9 @@ 3465983464,3465983487,GB 3465983488,3466044903,US 3466044904,3466044911,PH -3466044912,3466158079,US +3466044912,3466067967,US +3466067968,3466068247,CA +3466068248,3466158079,US 3466158080,3466166271,PA 3466166272,3466282111,US 3466282112,3466282119,GB @@ -111686,7 +129771,11 @@ 3466283328,3466283391,CA 3466283392,3466286103,US 3466286104,3466286111,DE -3466286112,3466313727,US +3466286112,3466290687,US +3466290688,3466290943,CH +3466290944,3466294271,US +3466294272,3466294319,CA +3466294320,3466313727,US 3466313728,3466317823,CA 3466317824,3466489855,US 3466489856,3466490111,CA @@ -111706,7 +129795,9 @@ 3466756096,3466772479,CA 3466772480,3466846207,US 3466846208,3466854399,CA -3466854400,3467051007,US +3466854400,3466958079,US +3466958080,3466958335,CA +3466958336,3467051007,US 3467051008,3467116543,CA 3467116544,3467145351,US 3467145352,3467145359,DE @@ -112036,9 +130127,7 @@ 3468128256,3468296191,US 3468296192,3468309503,CA 3468309504,3468309759,US -3468309760,3468319999,CA -3468320000,3468320255,US -3468320256,3468320351,CA +3468309760,3468320351,CA 3468320352,3468320383,US 3468320384,3468361727,CA 3468361728,3468427359,US @@ -112087,7 +130176,9 @@ 3468624552,3468624559,US 3468624560,3468625727,CA 3468625728,3468625743,US -3468625744,3468627087,CA +3468625744,3468627015,CA +3468627016,3468627023,US +3468627024,3468627087,CA 3468627088,3468627103,US 3468627104,3468627247,CA 3468627248,3468627263,US @@ -112103,9 +130194,7 @@ 3468628512,3468628607,US 3468628608,3468628927,CA 3468628928,3468628991,US -3468628992,3468629311,CA -3468629312,3468629319,US -3468629320,3468631583,CA +3468628992,3468631583,CA 3468631584,3468631615,US 3468631616,3468631679,CA 3468631680,3468631695,US @@ -112141,7 +130230,8 @@ 3469186560,3469893631,US 3469893632,3469901823,CA 3469901824,3470131199,US -3470131200,3470137343,AG +3470131200,3470135295,AG +3470135296,3470137343,LC 3470137344,3470139391,VG 3470139392,3470148095,US 3470148096,3470148351,CA @@ -112149,13 +130239,13 @@ 3470148864,3470149119,CA 3470149120,3470150655,US 3470150656,3470150911,CA -3470150912,3470151935,US -3470151936,3470152703,CA +3470150912,3470151295,US +3470151296,3470151359,CA +3470151360,3470151679,US +3470151680,3470152703,CA 3470152704,3470152959,US 3470152960,3470152975,CA -3470152976,3470153983,US -3470153984,3470154239,CA -3470154240,3470184454,US +3470152976,3470184454,US 3470184455,3470184458,LK 3470184459,3470184460,RU 3470184461,3470184476,US @@ -112387,7 +130477,7 @@ 3470186746,3470186757,US 3470186758,3470186761,CA 3470186762,3470186765,US -3470186766,3470186769,RO +3470186766,3470186769,HU 3470186770,3470186785,US 3470186786,3470186789,GB 3470186790,3470186805,US @@ -112629,19 +130719,38 @@ 3470188522,3470188541,HK 3470188542,3470192639,US 3470192640,3470196735,CA -3470196736,3470360631,US -3470360632,3470360639,CA -3470360640,3470360687,US +3470196736,3470360623,US +3470360624,3470360639,CA +3470360640,3470360647,GB +3470360648,3470360687,US 3470360688,3470360695,AF -3470360696,3470360799,US +3470360696,3470360727,US +3470360728,3470360735,GB +3470360736,3470360799,US 3470360800,3470360807,CA -3470360808,3470361039,US +3470360808,3470360895,US +3470360896,3470360911,CA +3470360912,3470360927,US +3470360928,3470360935,CA +3470360936,3470361039,US 3470361040,3470361055,CA -3470361056,3470361655,US -3470361656,3470361671,CA +3470361056,3470361231,US +3470361232,3470361247,IN +3470361248,3470361295,US +3470361296,3470361311,IN +3470361312,3470361471,US +3470361472,3470361479,JP +3470361480,3470361487,US +3470361488,3470361495,SG +3470361496,3470361663,US +3470361664,3470361671,CA 3470361672,3470361703,US 3470361704,3470361711,AF -3470361712,3470362111,US +3470361712,3470361771,US +3470361772,3470361775,AE +3470361776,3470362099,US +3470362100,3470362103,AE +3470362104,3470362111,US 3470362112,3470362119,CA 3470362120,3470362127,AU 3470362128,3470362135,US @@ -112654,40 +130763,41 @@ 3470362264,3470362271,NZ 3470362272,3470362319,US 3470362320,3470362335,AF -3470362336,3470362455,US -3470362456,3470362471,CA -3470362472,3470362495,US -3470362496,3470362503,CA -3470362504,3470362559,US +3470362336,3470362463,US +3470362464,3470362471,CA +3470362472,3470362543,US +3470362544,3470362559,SE 3470362560,3470362623,CA -3470362624,3470362719,US -3470362720,3470362727,CA -3470362728,3470362783,US -3470362784,3470362791,AF -3470362792,3470362847,US -3470362848,3470362855,AR -3470362856,3470362879,US -3470362880,3470362895,CA -3470362896,3470363295,US -3470363296,3470363303,BR -3470363304,3470363391,US -3470363392,3470363399,MX -3470363400,3470363423,US +3470362624,3470362731,US +3470362732,3470362735,AE +3470362736,3470362791,US +3470362792,3470362799,SG +3470362800,3470362895,US +3470362896,3470362911,AU +3470362912,3470363423,US 3470363424,3470363439,CA 3470363440,3470363535,US 3470363536,3470363543,CA 3470363544,3470363555,AF 3470363556,3470363559,US -3470363560,3470363567,CA -3470363568,3470363871,US -3470363872,3470363879,CA -3470363880,3470363903,US +3470363560,3470363567,BR +3470363568,3470363615,US +3470363616,3470363631,ES +3470363632,3470363671,US +3470363672,3470363679,SE +3470363680,3470363903,US 3470363904,3470363919,CA 3470363920,3470363967,US 3470363968,3470363983,CA -3470363984,3470364415,US -3470364416,3470364503,CA -3470364504,3470364655,US +3470363984,3470364047,US +3470364048,3470364063,CA +3470364064,3470364095,US +3470364096,3470364103,AU +3470364104,3470364415,US +3470364416,3470364479,CA +3470364480,3470364559,US +3470364560,3470364575,HN +3470364576,3470364655,US 3470364656,3470364663,CA 3470364664,3470458879,US 3470458880,3470475263,KR @@ -112702,9 +130812,8 @@ 3470643648,3470645511,US 3470645512,3470645519,GB 3470645520,3470645527,FR -3470645528,3470645535,BR -3470645536,3470645559,US -3470645560,3470645567,IT +3470645528,3470645559,US +3470645560,3470645567,RU 3470645568,3470645575,CA 3470645576,3470645583,US 3470645584,3470645591,FR @@ -112713,7 +130822,8 @@ 3470645632,3470645655,US 3470645656,3470645663,RU 3470645664,3470645687,US -3470645688,3470645703,ES +3470645688,3470645695,ES +3470645696,3470645703,NL 3470645704,3470645731,US 3470645732,3470645735,AU 3470645736,3470645739,CN @@ -112721,7 +130831,9 @@ 3470645744,3470645747,ES 3470645748,3470645751,US 3470645752,3470645759,BR -3470645760,3470646015,US +3470645760,3470645791,US +3470645792,3470645799,CN +3470645800,3470646015,US 3470646016,3470646019,BR 3470646020,3470646035,US 3470646036,3470646039,VI @@ -112769,8 +130881,7 @@ 3470646608,3470646623,ZA 3470646624,3470646631,DE 3470646632,3470646639,BR -3470646640,3470646663,US -3470646664,3470646671,PL +3470646640,3470646671,US 3470646672,3470646679,BR 3470646680,3470646687,CA 3470646688,3470646703,US @@ -112793,8 +130904,8 @@ 3470646912,3470646919,RU 3470646920,3470646935,US 3470646936,3470646943,CA -3470646944,3470646959,BR -3470646960,3470646983,US +3470646944,3470646951,BR +3470646952,3470646983,US 3470646984,3470646991,AR 3470646992,3470646999,CN 3470647000,3470651391,US @@ -112853,9 +130964,7 @@ 3470660080,3470660087,CA 3470660088,3470660103,US 3470660104,3470660111,HK -3470660112,3470660159,US -3470660160,3470660191,IL -3470660192,3470660199,US +3470660112,3470660199,US 3470660200,3470660215,AU 3470660216,3470660223,US 3470660224,3470660255,PH @@ -112867,8 +130976,7 @@ 3470660832,3470660847,TR 3470660848,3470660911,US 3470660912,3470660919,ID -3470660920,3470660927,US -3470660928,3470660935,JP +3470660920,3470660935,US 3470660936,3470660943,IR 3470660944,3470661039,US 3470661040,3470661047,GB @@ -112933,11 +131041,7 @@ 3470754304,3470754559,PE 3470754560,3470755839,US 3470755840,3470756095,ZA -3470756096,3470757887,US -3470757888,3470760959,KN -3470760960,3470761215,US -3470761216,3470761727,KN -3470761728,3470761983,US +3470756096,3470761983,US 3470761984,3470762751,CA 3470762752,3470762759,NL 3470762760,3470767871,CA @@ -112977,7 +131081,9 @@ 3471572992,3472375807,US 3472375808,3472392191,PR 3472392192,3472408575,CA -3472408576,3472990207,US +3472408576,3472613375,US +3472613376,3472621567,A1 +3472621568,3472990207,US 3472990208,3472990463,AS 3472990464,3473039359,US 3473039360,3473040639,BM @@ -113043,21 +131149,7 @@ 3474548224,3474548479,JP 3474548480,3474623599,US 3474623600,3474623615,CA -3474623616,3474841599,US -3474841600,3474843071,KN -3474843072,3474843135,US -3474843136,3474844415,KN -3474844416,3474844543,US -3474844544,3474844927,KN -3474844928,3474845055,US -3474845056,3474845439,KN -3474845440,3474845567,US -3474845568,3474846463,KN -3474846464,3474846591,US -3474846592,3474846975,KN -3474846976,3474847231,US -3474847232,3474849791,KN -3474849792,3475029927,US +3474623616,3475029927,US 3475029928,3475029935,CA 3475029936,3475112191,US 3475112192,3475113215,CA @@ -113086,7 +131178,9 @@ 3475745536,3475752703,US 3475752704,3475752959,AN 3475752960,3475881983,US -3475881984,3475883487,CA +3475881984,3475883007,CA +3475883008,3475883039,US +3475883040,3475883487,CA 3475883488,3475883519,US 3475883520,3475884031,CA 3475884032,3475884287,US @@ -113148,13 +131242,17 @@ 3476722192,3476722207,BE 3476722208,3476722239,IT 3476722240,3476722255,SA -3476722256,3476722271,US -3476722272,3476722319,IT -3476722320,3476722527,US +3476722256,3476722287,US +3476722288,3476722319,IT +3476722320,3476722495,US +3476722496,3476722511,AU +3476722512,3476722527,US 3476722528,3476722543,AU 3476722544,3476722591,US 3476722592,3476722607,GB -3476722608,3476722759,US +3476722608,3476722719,US +3476722720,3476722727,CO +3476722728,3476722759,US 3476722760,3476722767,IN 3476722768,3476722775,US 3476722776,3476722783,GB @@ -113176,9 +131274,23 @@ 3476725400,3476725415,CA 3476725416,3476725423,US 3476725424,3476725431,GB -3476725432,3476732373,US +3476725432,3476731909,US +3476731910,3476731913,IN +3476731914,3476732049,US +3476732050,3476732053,IN +3476732054,3476732073,US +3476732074,3476732077,IN +3476732078,3476732113,US +3476732114,3476732117,IN +3476732118,3476732341,US +3476732342,3476732345,MX +3476732346,3476732373,US 3476732374,3476732377,MX -3476732378,3476881407,US +3476732378,3476733603,US +3476733604,3476733604,MX +3476733605,3476733913,US +3476733914,3476733914,MX +3476733915,3476881407,US 3476881408,3476946943,CA 3476946944,3477161503,US 3477161504,3477161519,TN @@ -113198,7 +131310,15 @@ 3478114304,3478118399,PE 3478118400,3478192127,US 3478192128,3478257663,CA -3478257664,3478294527,US +3478257664,3478261855,US +3478261856,3478261887,SG +3478261888,3478261903,US +3478261904,3478261935,SG +3478261936,3478262271,US +3478262272,3478262279,SG +3478262280,3478262655,US +3478262656,3478262671,SG +3478262672,3478294527,US 3478294528,3478294543,GB 3478294544,3478323391,US 3478323392,3478323399,CA @@ -113232,7 +131352,7 @@ 3479290208,3479290239,BD 3479290240,3479290351,US 3479290352,3479290359,IN -3479290360,3479290367,TH +3479290360,3479290367,US 3479290368,3479290431,BD 3479290432,3479290487,US 3479290488,3479290495,GB @@ -113244,7 +131364,9 @@ 3479290744,3479290751,EC 3479290752,3479290767,US 3479290768,3479290783,CA -3479290784,3479291263,US +3479290784,3479291071,US +3479291072,3479291087,CA +3479291088,3479291263,US 3479291264,3479291287,CA 3479291288,3479291671,US 3479291672,3479291679,CA @@ -113285,7 +131407,9 @@ 3479294224,3479294231,TH 3479294232,3479294419,US 3479294420,3479294423,CA -3479294424,3479294487,US +3479294424,3479294425,US +3479294426,3479294427,CA +3479294428,3479294487,US 3479294488,3479294495,MX 3479294496,3479294527,US 3479294528,3479294543,BD @@ -113301,7 +131425,8 @@ 3479295072,3479295079,CR 3479295080,3479295095,US 3479295096,3479295103,PR -3479295104,3479295359,US +3479295104,3479295111,CA +3479295112,3479295359,US 3479295360,3479295367,AU 3479295368,3479295519,US 3479295520,3479295527,CA @@ -113309,7 +131434,9 @@ 3479295584,3479295591,NL 3479295592,3479295703,US 3479295704,3479295735,MY -3479295736,3479296007,US +3479295736,3479295767,US +3479295768,3479295775,MY +3479295776,3479296007,US 3479296008,3479296015,CA 3479296016,3479296071,US 3479296072,3479296079,GB @@ -113401,7 +131528,9 @@ 3479923072,3479923079,US 3479923080,3479961599,CA 3479961600,3480223743,US -3480223744,3480226959,CA +3480223744,3480226415,CA +3480226416,3480226423,US +3480226424,3480226959,CA 3480226960,3480226967,US 3480226968,3480227455,CA 3480227456,3480227463,US @@ -113571,9 +131700,7 @@ 3480907264,3480907775,FR 3480907776,3480968191,US 3480968192,3480968447,AU -3480968448,3481169151,US -3481169152,3481169407,NZ -3481169408,3481182503,US +3480968448,3481182503,US 3481182504,3481182511,CA 3481182512,3481665535,US 3481665536,3481731071,CA @@ -113615,7 +131742,9 @@ 3482778384,3482779647,PR 3482779648,3482910719,US 3482910720,3482927103,CA -3482927104,3483296004,US +3482927104,3483238399,US +3483238400,3483254783,A1 +3483254784,3483296004,US 3483296005,3483296005,BE 3483296006,3483435007,US 3483435008,3483533311,CA @@ -113751,9 +131880,7 @@ 3484472184,3484472199,US 3484472200,3484472223,CA 3484472224,3484472263,US -3484472264,3484472311,CA -3484472312,3484472319,US -3484472320,3484472839,CA +3484472264,3484472839,CA 3484472840,3484472855,US 3484472856,3484473007,CA 3484473008,3484473015,US @@ -113763,11 +131890,11 @@ 3484473048,3484473055,US 3484473056,3484473087,CA 3484473088,3484473151,US -3484473152,3484473343,CA -3484473344,3484473727,US +3484473152,3484473599,CA +3484473600,3484473727,US 3484473728,3484473791,CA -3484473792,3484474111,US -3484474112,3484477183,CA +3484473792,3484473855,US +3484473856,3484477183,CA 3484477184,3484477695,US 3484477696,3484478207,CA 3484478208,3484478719,US @@ -113792,7 +131919,9 @@ 3484777696,3484778495,CA 3484778496,3484884991,US 3484884992,3484893183,CA -3484893184,3485220863,US +3484893184,3484937103,US +3484937104,3484937111,SE +3484937112,3485220863,US 3485220864,3485229055,CA 3485229056,3485290463,US 3485290464,3485290479,GB @@ -113803,7 +131932,8 @@ 3485446144,3485458847,US 3485458848,3485458863,FR 3485458864,3485462527,US -3485462528,3485466623,VC +3485462528,3485464575,VC +3485464576,3485466623,LC 3485466624,3485597695,US 3485597696,3485671583,CA 3485671584,3485671615,US @@ -113957,7 +132087,7 @@ 3486612992,3486613247,US 3486613248,3486613759,GB 3486613760,3486614015,ES -3486614016,3486614271,DE +3486614016,3486614271,US 3486614272,3486614527,GB 3486614528,3486614783,US 3486614784,3486615039,FR @@ -114079,7 +132209,9 @@ 3486700440,3486700447,IT 3486700448,3486701311,US 3486701312,3486701567,CA -3486701568,3486711551,US +3486701568,3486707559,US +3486707560,3486707567,HN +3486707568,3486711551,US 3486711552,3486711807,CA 3486711808,3487039487,US 3487039488,3487105023,CA @@ -114087,19 +132219,27 @@ 3487187200,3487187215,GB 3487187216,3487189247,US 3487189248,3487189503,DK -3487189504,3487193599,US -3487193600,3487193855,DK -3487193856,3487197183,US +3487189504,3487197183,US 3487197184,3487197439,DK 3487197440,3487203071,US 3487203072,3487203327,DK 3487203328,3487236095,US 3487236096,3487301631,CA -3487301632,3487559711,US -3487559712,3487559743,AU -3487559744,3487559855,US -3487559856,3487559871,AU -3487559872,3487766527,US +3487301632,3487507327,US +3487507328,3487507335,CA +3487507336,3487507343,US +3487507344,3487507359,CA +3487507360,3487507375,US +3487507376,3487507391,CA +3487507392,3487559719,US +3487559720,3487559727,AU +3487559728,3487559839,US +3487559840,3487559871,AU +3487559872,3487560167,US +3487560168,3487560175,AU +3487560176,3487561471,US +3487561472,3487561727,AU +3487561728,3487766527,US 3487766528,3487768575,CA 3487768576,3487842303,US 3487842304,3487858687,CA @@ -114109,7 +132249,9 @@ 3487862016,3487875071,BM 3487875072,3487891455,US 3487891456,3487907839,CA -3487907840,3487969791,US +3487907840,3487912959,US +3487912960,3487913087,CA +3487913088,3487969791,US 3487969792,3487970047,KW 3487970048,3488014335,US 3488014336,3488022527,CA @@ -114214,9 +132356,7 @@ 3490732432,3490732447,CA 3490732448,3490786047,US 3490786048,3490786303,PR -3490786304,3490796799,US -3490796800,3490797055,CA -3490797056,3490879231,US +3490786304,3490879231,US 3490879232,3490879487,PR 3490879488,3490922495,US 3490922496,3490924543,CO @@ -114228,7 +132368,9 @@ 3491226688,3491226719,CA 3491226720,3491231807,US 3491231808,3491231823,PR -3491231824,3491358183,US +3491231824,3491351455,US +3491351456,3491351463,HR +3491351464,3491358183,US 3491358184,3491358191,PR 3491358192,3491381247,US 3491381248,3491389439,BM @@ -114254,11 +132396,11 @@ 3491743744,3491745791,CO 3491745792,3491764783,US 3491764784,3491764791,PR -3491764792,3491780607,US -3491780608,3491781631,EC -3491781632,3491826687,US +3491764792,3491826687,US 3491826688,3491826943,AN -3491826944,3491921663,US +3491826944,3491832575,US +3491832576,3491832583,PR +3491832584,3491921663,US 3491921664,3491921919,PR 3491921920,3491955711,US 3491955712,3491956735,CO @@ -114293,11 +132435,15 @@ 3492188800,3492188831,CH 3492188832,3492472039,US 3492472040,3492472047,GB -3492472048,3492646623,US +3492472048,3492576143,US +3492576144,3492576151,CN +3492576152,3492646623,US 3492646624,3492646639,IL 3492646640,3492669695,US 3492669696,3492671487,PA -3492671488,3492795775,US +3492671488,3492730415,US +3492730416,3492730431,CA +3492730432,3492795775,US 3492795776,3492795903,AR 3492795904,3492827391,US 3492827392,3492827423,CA @@ -114308,7 +132454,13 @@ 3492827520,3492827647,AU 3492827648,3492827903,US 3492827904,3492827967,AU -3492827968,3493018639,US +3492827968,3492924991,US +3492924992,3492925007,DE +3492925008,3492947087,US +3492947088,3492947103,DE +3492947104,3492963087,US +3492963088,3492963103,FR +3492963104,3493018639,US 3493018640,3493018655,AE 3493018656,3493069055,US 3493069056,3493069311,A2 @@ -114327,13 +132479,11 @@ 3493081600,3493082623,PY 3493082624,3493089023,US 3493089024,3493089279,A2 -3493089280,3493091327,US -3493091328,3493091839,BO -3493091840,3493092351,US -3493092352,3493092607,NA -3493092608,3493138207,US +3493089280,3493138207,US 3493138208,3493138239,DE -3493138240,3493141279,US +3493138240,3493140223,US +3493140224,3493140479,DE +3493140480,3493141279,US 3493141280,3493141311,CY 3493141312,3493244927,US 3493244928,3493249023,PR @@ -114349,26 +132499,33 @@ 3493901024,3493901031,HK 3493901032,3493901311,US 3493901312,3493901567,AE -3493901568,3493901599,IL +3493901568,3493901579,US +3493901580,3493901583,TT +3493901584,3493901599,VG 3493901600,3493901759,US 3493901760,3493901767,AE 3493901768,3493901791,US 3493901792,3493901823,AE -3493901824,3493901951,US +3493901824,3493901847,US +3493901848,3493901851,CA +3493901852,3493901951,US 3493901952,3493901983,CA 3493901984,3493902215,US 3493902216,3493902223,CA -3493902224,3493903551,US +3493902224,3493902295,US +3493902296,3493902303,NG +3493902304,3493903551,US 3493903552,3493903567,KW -3493903568,3493906431,US -3493906944,3493907199,US -3493907200,3493907231,GB -3493907232,3493907263,US -3493907328,3493914111,US -3493914112,3493914367,CA -3493914368,3493936127,US +3493903568,3493914239,US +3493914240,3493914367,CA +3493914368,3493916671,US +3493918720,3493936127,US 3493936128,3493937151,CA -3493937152,3493982207,US +3493937152,3493980159,US +3493980160,3493980447,CA +3493980448,3493980455,US +3493980456,3493981183,CA +3493981184,3493982207,US 3493982208,3493984255,CA 3493984256,3493986303,US 3493986304,3493986623,CA @@ -114390,14 +132547,15 @@ 3494044672,3494045695,CA 3494045696,3494049791,US 3494049792,3494051839,CA -3494051840,3494072319,US -3494074368,3494075391,US +3494051840,3494075391,US 3494075392,3494076415,CA 3494076416,3494088703,US 3494088704,3494090751,CA 3494090752,3494094847,US 3494094848,3494095871,CA -3494095872,3494101319,US +3494095872,3494101089,US +3494101090,3494101097,JM +3494101098,3494101319,US 3494101320,3494101327,GB 3494101328,3494101377,US 3494101378,3494101385,JM @@ -114405,26 +132563,23 @@ 3494101408,3494101415,CO 3494101416,3494101429,US 3494101430,3494101437,GB -3494101438,3494102623,US +3494101438,3494102481,US +3494102482,3494102489,CA +3494102490,3494102623,US 3494102624,3494102639,SB -3494102640,3494102735,US -3494102736,3494102751,VI -3494102752,3494109540,US -3494109541,3494109548,GB -3494109549,3494109697,US -3494109698,3494109722,GB -3494109723,3494109795,US -3494109796,3494109825,LB -3494109826,3494109859,US -3494109860,3494109869,GB -3494109870,3494109925,US +3494102640,3494102687,US +3494102688,3494102701,PE +3494102702,3494102703,US +3494102704,3494102711,CA +3494102712,3494102735,US +3494102736,3494102743,VI +3494102744,3494109925,US 3494109926,3494109942,CA 3494109943,3494110091,US 3494110092,3494110109,CA 3494110110,3494110145,US 3494110146,3494110161,CA -3494110162,3494114303,US -3494115328,3494115471,US +3494110162,3494115471,US 3494115472,3494115487,AU 3494115488,3494115495,US 3494115496,3494115503,CA @@ -114445,9 +132600,7 @@ 3494122496,3494135807,US 3494135808,3494136831,CA 3494136832,3494139903,US -3494139904,3494141735,CA -3494141736,3494141743,US -3494141744,3494141951,CA +3494139904,3494141951,CA 3494141952,3494143999,US 3494144000,3494145023,CA 3494145024,3494159039,US @@ -114470,9 +132623,7 @@ 3494197561,3494197569,FR 3494197570,3494197604,CA 3494197605,3494197614,US -3494197615,3494197617,CA -3494197618,3494197632,US -3494197633,3494197760,CA +3494197615,3494197760,CA 3494197761,3494197777,AE 3494197778,3494197953,CA 3494197954,3494197967,US @@ -114530,9 +132681,7 @@ 3494291744,3494291751,GB 3494291752,3494291903,US 3494291904,3494291967,GB -3494291968,3494295039,US -3494295040,3494295551,UM -3494295552,3494299663,US +3494291968,3494299663,US 3494299664,3494299679,TH 3494299680,3494299687,US 3494299688,3494299695,SC @@ -114540,9 +132689,7 @@ 3494299728,3494299735,SC 3494299736,3494300367,US 3494300368,3494300383,TW -3494300384,3494300927,US -3494300928,3494301055,TW -3494301056,3494301247,US +3494300384,3494301247,US 3494301248,3494301311,SG 3494301312,3494301439,US 3494301440,3494301695,TW @@ -114557,10 +132704,8 @@ 3494313328,3494313343,CO 3494313344,3494313359,US 3494313360,3494313375,MX -3494313376,3494313391,ES -3494313392,3494313535,US -3494313536,3494313551,AU -3494313552,3494316031,US +3494313376,3494313383,ES +3494313384,3494316031,US 3494316032,3494317055,CA 3494317056,3494336511,US 3494336512,3494337023,CA @@ -114582,7 +132727,7 @@ 3494361088,3494362111,CA 3494362112,3494380543,US 3494380544,3494381567,CA -3494381568,3494409215,US +3494381568,3494410239,US 3494410240,3494412287,CA 3494412288,3494418511,US 3494418512,3494418527,GB @@ -114629,8 +132774,8 @@ 3494420224,3494420239,BO 3494420240,3494420415,US 3494420416,3494420447,CA -3494420448,3494424575,US -3494424576,3494425599,CA +3494420448,3494422527,US +3494422528,3494425599,CA 3494425600,3494427199,US 3494427200,3494427215,CA 3494427216,3494428223,US @@ -114645,21 +132790,28 @@ 3494438032,3494438063,GP 3494438064,3494438071,KN 3494438072,3494438143,GP -3494438144,3494438399,VC +3494438144,3494438399,DM 3494438400,3494438655,KN 3494438656,3494438911,DM -3494438912,3494439935,CA -3494439936,3494449151,US -3494449152,3494451199,CA +3494438912,3494449287,US +3494449288,3494449311,CA +3494449312,3494449439,US +3494449440,3494449663,CA +3494449664,3494449695,US +3494449696,3494450431,CA +3494450432,3494450471,US +3494450472,3494450479,CA +3494450480,3494450495,US +3494450496,3494451199,CA 3494451200,3494454128,US 3494454129,3494454158,PH 3494454159,3494455295,US 3494455296,3494456319,CA -3494456320,3494457779,US +3494456320,3494457368,US +3494457369,3494457379,GB +3494457380,3494457779,US 3494457780,3494457787,GB -3494457788,3494458121,US -3494458122,3494458185,PH -3494458186,3494458201,US +3494457788,3494458201,US 3494458202,3494458211,FR 3494458212,3494458231,US 3494458232,3494458255,DE @@ -114667,13 +132819,14 @@ 3494459392,3494460415,CA 3494460416,3494464511,US 3494464512,3494465535,CA -3494465536,3494467583,US -3494469632,3494501023,US +3494465536,3494501023,US 3494501024,3494501039,AU 3494501040,3494510591,US 3494510592,3494512639,CA -3494512640,3494513135,US -3494513136,3494513151,NO +3494512640,3494512895,US +3494512896,3494512911,NO +3494512912,3494512919,US +3494512920,3494513151,NO 3494513152,3494516735,US 3494516736,3494517759,CA 3494517760,3494539263,US @@ -114753,8 +132906,8 @@ 3494701056,3494705319,US 3494705320,3494705327,MX 3494705328,3494712319,US -3494712320,3494713343,CA -3494713344,3494727679,US +3494712320,3494712575,CA +3494712576,3494727679,US 3494727680,3494729727,CA 3494729728,3494730751,US 3494730752,3494731775,CA @@ -114763,20 +132916,20 @@ 3494744064,3494744399,US 3494744400,3494744407,AU 3494744408,3494744703,US -3494744704,3494744711,DK +3494744704,3494744711,DE 3494744712,3494745151,US 3494745152,3494745159,AU 3494745160,3494745303,US 3494745304,3494745311,AU 3494745312,3494745879,US 3494745880,3494745887,GB -3494745888,3494745919,US -3494745920,3494745927,CN -3494745928,3494745951,US +3494745888,3494745951,US 3494745952,3494745959,GB 3494745960,3494746019,US 3494746020,3494746023,AU -3494746024,3494757375,US +3494746024,3494747135,US +3494747136,3494748159,CA +3494748160,3494757375,US 3494757376,3494758399,CA 3494758400,3494763007,US 3494763008,3494763015,ES @@ -114816,24 +132969,35 @@ 3494852608,3494854655,CA 3494854656,3494861087,US 3494861088,3494861095,CA -3494861096,3494861111,US -3494861112,3494861119,AU -3494861120,3494862639,US +3494861096,3494861575,US +3494861576,3494861583,CH +3494861584,3494861615,US +3494861616,3494861623,AU +3494861624,3494861839,US +3494861840,3494861855,AU +3494861856,3494861935,US +3494861936,3494861943,AU +3494861944,3494861999,US +3494862000,3494862007,CA +3494862008,3494862255,US +3494862256,3494862263,CZ +3494862264,3494862639,US 3494862640,3494862647,JP -3494862648,3494862815,US -3494862816,3494862823,AU -3494862824,3494862847,US -3494862848,3494863615,VC -3494863616,3494863871,DM +3494862648,3494862847,US +3494862848,3494863871,DM 3494863872,3494866943,US 3494866944,3494867967,CA -3494867968,3494893567,US +3494867968,3494874111,US +3494874112,3494874367,ES +3494874368,3494874879,US +3494874880,3494874911,ES +3494874912,3494893567,US 3494893568,3494894591,CA -3494894592,3494906367,US -3494906368,3494906431,IL -3494906432,3494917119,US -3494917120,3494918143,CA -3494918144,3494928383,US +3494894592,3494906455,US +3494906456,3494906463,GB +3494906464,3494917119,US +3494917120,3494917631,CA +3494917632,3494928383,US 3494928384,3494930431,CA 3494930432,3494935746,US 3494935747,3494935747,GB @@ -114845,13 +133009,17 @@ 3494936515,3494936515,GB 3494936516,3494938623,US 3494938624,3494939647,CA -3494939648,3494950655,US +3494939648,3494949889,US +3494949890,3494949952,GB +3494949953,3494949972,US +3494949973,3494950142,GB +3494950143,3494950655,US 3494950656,3494950911,PH 3494950912,3494964223,US 3494964224,3494965247,PR 3494965248,3494968319,US 3494968320,3494972415,CA -3494972416,3494978559,US +3494972416,3494979583,US 3494979584,3494981631,CA 3494981632,3495000063,US 3495000064,3495001087,CA @@ -114865,7 +133033,9 @@ 3495014449,3495014456,SG 3495014457,3495023615,US 3495023616,3495024639,CA -3495024640,3495065599,US +3495024640,3495057407,US +3495057408,3495059455,CA +3495059456,3495065599,US 3495065600,3495066623,CA 3495066624,3495068031,US 3495068032,3495068047,PL @@ -114881,9 +133051,11 @@ 3495098368,3495100415,CA 3495100416,3495120895,US 3495120896,3495122943,AG -3495122944,3495136455,US -3495136456,3495136463,IN -3495136464,3495136471,US +3495122944,3495127615,US +3495127616,3495127647,CA +3495127648,3495128991,US +3495128992,3495129007,AE +3495129008,3495136471,US 3495136472,3495136479,AR 3495136480,3495136495,US 3495136496,3495136503,IN @@ -114893,59 +133065,68 @@ 3495153664,3495155711,CA 3495155712,3495157039,US 3495157040,3495157047,SE -3495157048,3495159807,US -3495159808,3495159815,ES -3495159816,3495159839,US +3495157048,3495159839,US 3495159840,3495159847,BR -3495159848,3495159895,US +3495159848,3495159871,US +3495159872,3495159879,AE +3495159880,3495159887,BD +3495159888,3495159895,GB 3495159896,3495159903,IN -3495159904,3495160111,US +3495159904,3495159927,US +3495159928,3495159935,IN +3495159936,3495160071,US +3495160072,3495160079,HK +3495160080,3495160111,US 3495160112,3495160119,NZ 3495160120,3495160303,US 3495160304,3495160319,TR -3495160320,3495160367,US -3495160368,3495160383,ZA -3495160384,3495160639,US -3495160640,3495160647,CA -3495160648,3495160863,US +3495160320,3495160359,US +3495160360,3495160367,GB +3495160368,3495160447,US +3495160448,3495160455,BR +3495160456,3495160463,US +3495160464,3495160479,TR +3495160480,3495160511,CA +3495160512,3495160535,US +3495160536,3495160543,BR +3495160544,3495160863,US 3495160864,3495160895,TR -3495160896,3495161599,US -3495161600,3495161855,BR -3495161856,3495164239,US +3495160896,3495161055,US +3495161056,3495161087,TR +3495161088,3495161151,US +3495161152,3495161167,TR +3495161168,3495164239,US 3495164240,3495164247,CA -3495164248,3495187199,US +3495164248,3495164335,US +3495164336,3495164343,CO +3495164344,3495187199,US 3495187200,3495187455,IM -3495187456,3495190527,US +3495187456,3495192575,US 3495192576,3495193599,CA 3495193600,3495215103,US 3495215104,3495217151,VI 3495217152,3495219199,VC -3495219200,3495235663,US -3495235664,3495235671,BR -3495235672,3495235679,AU -3495235680,3495235687,BR +3495219200,3495235687,US 3495235688,3495235695,IN 3495235696,3495235703,FR -3495235704,3495235775,US -3495235776,3495235783,MY +3495235704,3495235783,US 3495235784,3495235791,HR -3495235792,3495235799,US -3495235800,3495235807,ES -3495235808,3495235823,US +3495235792,3495235823,US 3495235824,3495235831,GB 3495235832,3495235903,US 3495235904,3495235911,CA -3495235912,3495235991,US -3495235992,3495235999,CA -3495236000,3495236015,US -3495236016,3495236023,GB -3495236024,3495236111,US -3495236112,3495236119,CZ -3495236120,3495236135,US -3495236136,3495236143,CR -3495236144,3495236367,US +3495235912,3495235975,US +3495235976,3495235983,VN +3495235984,3495236015,US +3495236016,3495236031,GB +3495236032,3495236247,US +3495236248,3495236255,AZ +3495236256,3495236367,US 3495236368,3495236375,CA -3495236376,3495251967,US +3495236376,3495236423,US +3495236424,3495236431,SG +3495236432,3495236439,IN +3495236440,3495251967,US 3495251968,3495254015,CA 3495254016,3495260159,US 3495260160,3495261183,CA @@ -114953,7 +133134,29 @@ 3495276288,3495276351,IN 3495276352,3495286783,US 3495286784,3495288831,CA -3495288832,3495331839,US +3495288832,3495292927,US +3495292928,3495292943,GB +3495292944,3495292959,US +3495292960,3495292975,PH +3495292976,3495293071,US +3495293072,3495293087,CA +3495293088,3495293167,US +3495293168,3495293183,IN +3495293184,3495293359,US +3495293360,3495293375,IN +3495293376,3495293487,US +3495293488,3495293503,GB +3495293504,3495293663,US +3495293664,3495293679,GB +3495293680,3495293727,US +3495293728,3495293743,GB +3495293744,3495293759,US +3495293760,3495293791,AU +3495293792,3495308447,US +3495308448,3495308463,HK +3495308464,3495308607,US +3495308608,3495308671,IL +3495308672,3495331839,US 3495331840,3495332863,A2 3495332864,3495333887,CA 3495333888,3495349247,US @@ -115023,21 +133226,39 @@ 3495441920,3495441935,PL 3495441936,3495442319,US 3495442320,3495442335,PL -3495442336,3495454719,US -3495454720,3495456767,CA +3495442336,3495455743,US +3495455744,3495456767,CA 3495456768,3495463935,US 3495463936,3495464959,CA 3495464960,3495475199,US -3495475200,3495477247,CA +3495475200,3495475711,CA +3495475712,3495476223,EE +3495476224,3495477247,CA 3495477248,3495478271,US 3495478272,3495479295,CA -3495479296,3495505919,US +3495479296,3495485599,US +3495485600,3495485615,GB +3495485616,3495485631,US +3495485632,3495485663,VG +3495485664,3495486079,US +3495486080,3495486143,PA +3495486144,3495486207,US +3495486208,3495486239,AI +3495486240,3495486335,US +3495486336,3495486399,VG +3495486400,3495505919,US 3495505920,3495507967,CA 3495507968,3495515135,US 3495515136,3495516159,CA 3495516160,3495520375,US 3495520376,3495520379,SG -3495520380,3495526399,US +3495520380,3495520571,US +3495520572,3495520579,KE +3495520580,3495520667,US +3495520668,3495520706,BR +3495520707,3495520707,US +3495520708,3495520715,CH +3495520716,3495526399,US 3495526400,3495527423,CA 3495527424,3495542783,US 3495542784,3495544831,A2 @@ -115053,13 +133274,22 @@ 3495547472,3495547479,GB 3495547480,3495547605,US 3495547606,3495547606,BD -3495547607,3495548205,US +3495547607,3495547633,US +3495547634,3495547635,CO +3495547636,3495548126,US +3495548127,3495548129,NO +3495548130,3495548205,US 3495548206,3495548207,ID -3495548208,3495548544,US +3495548208,3495548437,US +3495548438,3495548438,ES +3495548439,3495548544,US 3495548545,3495548545,BD -3495548546,3495548549,US +3495548546,3495548548,US +3495548549,3495548549,ES 3495548550,3495548550,BD -3495548551,3495548586,US +3495548551,3495548558,US +3495548559,3495548559,ES +3495548560,3495548586,US 3495548587,3495548588,LK 3495548589,3495548635,US 3495548636,3495548637,BD @@ -115091,17 +133321,15 @@ 3495620608,3495622655,CA 3495622656,3495653375,US 3495653376,3495654399,CA -3495655424,3495657551,US +3495654400,3495657551,US 3495657552,3495657567,GB -3495657568,3495658015,US -3495658016,3495658023,IN -3495658024,3495658319,US -3495658320,3495658327,IN -3495658328,3495673855,US +3495657568,3495658527,US +3495658528,3495658559,FR +3495658560,3495673855,US 3495673856,3495674623,GP 3495674624,3495674879,MF -3495674880,3495686143,US -3495687168,3495688191,US +3495674880,3495675903,VG +3495675904,3495688191,US 3495688192,3495689215,CA 3495689216,3495694335,US 3495694336,3495696383,CA @@ -115109,7 +133337,8 @@ 3495703552,3495704575,CA 3495704576,3495718911,US 3495718912,3495719151,A2 -3495719152,3495720959,CA +3495719152,3495719423,CA +3495719424,3495720959,A2 3495720960,3495724031,US 3495724032,3495724735,CA 3495724736,3495724799,US @@ -115119,23 +133348,19 @@ 3495741440,3495749631,US 3495749632,3495749735,CA 3495749736,3495749745,US -3495749746,3495749767,CA -3495749768,3495749777,US -3495749778,3495749785,CA +3495749746,3495749785,CA 3495749786,3495749829,GB -3495749830,3495749908,CA +3495749830,3495749846,CA +3495749847,3495749856,US +3495749857,3495749908,CA 3495749909,3495749933,GB -3495749934,3495749941,CA -3495749942,3495749951,US -3495749952,3495749959,CA +3495749934,3495749959,CA 3495749960,3495749990,GB 3495749991,3495749991,CA 3495749992,3495750021,GB 3495750022,3495750026,CA 3495750027,3495750051,US -3495750052,3495750074,CA -3495750075,3495750109,GB -3495750110,3495750189,CA +3495750052,3495750189,CA 3495750190,3495750204,PA 3495750205,3495750267,CA 3495750268,3495750277,US @@ -115175,7 +133400,7 @@ 3495866080,3495866359,CA 3495866360,3495866363,US 3495866364,3495866367,CA -3495866368,3495868415,VC +3495866368,3495868415,LC 3495868416,3495871487,US 3495871488,3495872511,CA 3495872512,3495881119,US @@ -115219,12 +133444,12 @@ 3496882176,3496886399,US 3496886400,3496886407,TR 3496886408,3496886423,US -3496886424,3496886463,TR +3496886424,3496886431,TR +3496886432,3496886447,US +3496886448,3496886463,TR 3496886464,3496886495,US 3496886496,3496886503,CA -3496886504,3496886511,US -3496886512,3496886527,GB -3496886528,3496886607,US +3496886504,3496886607,US 3496886608,3496886623,CA 3496886624,3496886655,US 3496886656,3496886671,IN @@ -115232,9 +133457,7 @@ 3496886712,3496886727,AU 3496886728,3496886823,US 3496886824,3496886831,IN -3496886832,3496886919,US -3496886920,3496886927,PK -3496886928,3496886935,US +3496886832,3496886935,US 3496886936,3496886943,PK 3496886944,3496887135,US 3496887136,3496887167,AU @@ -115253,8 +133476,7 @@ 3496887552,3496887559,TR 3496887560,3496887575,US 3496887576,3496887583,AU -3496887584,3496887615,US -3496887616,3496887623,AT +3496887584,3496887623,US 3496887624,3496887631,MY 3496887632,3496887639,RU 3496887640,3496887655,US @@ -115265,8 +133487,7 @@ 3496887808,3496887935,AU 3496887936,3496887975,US 3496887976,3496887983,AU -3496887984,3496887999,US -3496888000,3496888063,IN +3496887984,3496888063,US 3496888064,3496888095,AU 3496888096,3496888103,PT 3496888104,3496888111,GB @@ -115393,7 +133614,9 @@ 3497156864,3497156879,NL 3497156880,3497156983,US 3497156984,3497157006,DZ -3497157007,3497160191,US +3497157007,3497157375,US +3497157376,3497158655,A2 +3497158656,3497160191,US 3497160192,3497160351,NL 3497160352,3497161215,US 3497161216,3497161343,HK @@ -115459,7 +133682,13 @@ 3497226392,3497226399,IR 3497226400,3497226687,US 3497226688,3497226719,GB -3497226720,3497233407,US +3497226720,3497226943,US +3497226944,3497226975,CA +3497226976,3497227311,US +3497227312,3497227327,CA +3497227328,3497227599,US +3497227600,3497227615,CA +3497227616,3497233407,US 3497233408,3497233663,CN 3497233664,3497263815,US 3497263816,3497263823,GB @@ -115489,15 +133718,15 @@ 3497447424,3497451519,CA 3497451520,3497713415,US 3497713416,3497713423,EC -3497713424,3497717759,US +3497713424,3497713543,US +3497713544,3497713551,CA +3497713552,3497717759,US 3497717760,3497719807,A2 3497719808,3497719839,MR 3497719840,3497721343,A2 3497721344,3497721599,NG 3497721600,3497721855,A2 -3497721856,3497739327,US -3497739328,3497739351,IN -3497739352,3497739679,US +3497721856,3497739679,US 3497739680,3497739687,CA 3497739688,3497820159,US 3497820160,3497852927,CA @@ -115582,7 +133811,31 @@ 3500486656,3500490751,CR 3500490752,3500613631,US 3500613632,3500614655,MZ -3500614656,3500689407,US +3500614656,3500663545,US +3500663546,3500663546,CA +3500663547,3500664319,US +3500664320,3500664375,CA +3500664376,3500664383,US +3500664384,3500664431,CA +3500664432,3500664511,US +3500664512,3500664535,CA +3500664536,3500664573,US +3500664574,3500664574,CA +3500664575,3500664575,US +3500664576,3500664591,CA +3500664592,3500664831,US +3500664832,3500665103,CA +3500665104,3500665119,US +3500665120,3500665343,CA +3500665344,3500665855,US +3500665856,3500665871,CA +3500665872,3500665887,US +3500665888,3500665935,CA +3500665936,3500665983,US +3500665984,3500666111,CA +3500666112,3500669951,US +3500669952,3500670463,CA +3500670464,3500689407,US 3500689408,3500689919,CL 3500689920,3500707327,US 3500707328,3500707839,CA @@ -115599,12 +133852,25 @@ 3500809992,3500809999,CA 3500810000,3500810247,US 3500810248,3500810255,CA -3500810256,3500921279,US +3500810256,3500811567,US +3500811568,3500811583,AU +3500811584,3500811591,US +3500811592,3500811631,AU +3500811632,3500812175,US +3500812176,3500812183,GB +3500812184,3500921279,US 3500921280,3500921311,AU -3500921312,3501181703,US +3500921312,3501146951,US +3501146952,3501146959,CA +3501146960,3501146975,GB +3501146976,3501147039,US +3501147040,3501147071,CA +3501147072,3501181703,US 3501181704,3501181711,AU 3501181712,3501181727,KR -3501181728,3501182975,US +3501181728,3501181743,US +3501181744,3501181791,JP +3501181792,3501182975,US 3501182976,3501183007,SG 3501183008,3501183023,US 3501183024,3501183047,SG @@ -115687,10 +133953,7 @@ 3503250432,3503250943,PK 3503250944,3503323135,US 3503323136,3503323647,KE -3503323648,3503323903,A2 -3503323904,3503372031,US -3503372032,3503372287,A2 -3503372288,3503386111,US +3503323648,3503386111,US 3503386112,3503386367,CH 3503386368,3503413871,US 3503413872,3503413887,PR @@ -115769,9 +134032,9 @@ 3506058816,3506058823,AF 3506058824,3506135263,US 3506135264,3506135295,GB -3506135296,3506177967,US -3506177968,3506177983,DE -3506177984,3506192639,US +3506135296,3506161975,US +3506161976,3506161983,AF +3506161984,3506192639,US 3506192640,3506192895,A2 3506192896,3506194535,US 3506194536,3506194543,AU @@ -115785,23 +134048,21 @@ 3506384000,3506384031,CA 3506384032,3506421983,US 3506421984,3506422015,PR -3506422016,3506765823,US -3506765824,3506831359,CA +3506422016,3506580863,US +3506580864,3506580927,PL +3506580928,3506765823,US +3506765824,3506794503,CA +3506794504,3506794511,US +3506794512,3506831359,CA 3506831360,3507025407,US 3507025408,3507025663,IQ 3507025664,3507101919,US 3507101920,3507101935,IL 3507101936,3507290111,US 3507290112,3507355647,AR -3507355648,3507479079,US -3507479080,3507479080,CA -3507479081,3507479108,US -3507479109,3507479109,CA -3507479110,3507482153,US -3507482154,3507482155,CA -3507482156,3507485103,US -3507485104,3507485119,CA -3507485120,3507540015,US +3507355648,3507470335,US +3507470336,3507486719,CA +3507486720,3507540015,US 3507540016,3507540031,IN 3507540032,3507585023,US 3507585024,3507598911,CA @@ -116569,34 +134830,31 @@ 3509776120,3509777159,US 3509777160,3509777167,CN 3509777168,3509777175,RU -3509777176,3509777207,US -3509777208,3509777215,IN +3509777176,3509777215,US 3509777216,3509777223,TH 3509777224,3509777271,US 3509777272,3509777279,IT -3509777280,3509777327,US -3509777328,3509777335,GB -3509777336,3509777449,US +3509777280,3509777449,US 3509777450,3509777545,ID 3509777546,3509777584,US 3509777585,3509777648,ID -3509777649,3509778399,US +3509777649,3509778239,US +3509778240,3509778271,IN +3509778272,3509778399,US 3509778400,3509778431,NL 3509778432,3509778703,US 3509778704,3509778711,CA -3509778712,3509778903,US +3509778712,3509778847,US +3509778848,3509778855,CO +3509778856,3509778903,US 3509778904,3509778911,RU 3509778912,3509778919,US 3509778920,3509778927,GB 3509778928,3509779007,US 3509779008,3509779039,IN -3509779040,3509821911,US -3509821912,3509821919,BM -3509821920,3509822335,US +3509779040,3509822335,US 3509822336,3509822351,DE -3509822352,3509825887,US -3509825888,3509826303,CN -3509826304,3509829503,US +3509822352,3509829503,US 3509829504,3509829535,GB 3509829536,3509830287,US 3509830288,3509830295,BE @@ -116646,7 +134904,11 @@ 3509837752,3509837759,GB 3509837760,3509846015,US 3509846016,3509977087,CA -3510042624,3510239231,US +3509977088,3509993471,US +3509993472,3509997567,CA +3509997568,3510005759,US +3510005760,3510009855,CA +3510009856,3510239231,US 3510239232,3510240703,CA 3510240704,3510240735,AM 3510240736,3510240767,CA @@ -116658,15 +134920,17 @@ 3510242560,3510245375,CA 3510245376,3510245631,BD 3510245632,3510246735,CA -3510246736,3510246767,US -3510246768,3510249471,CA +3510246736,3510246775,US +3510246776,3510249471,CA 3510249472,3510249983,QA 3510249984,3510251519,CA 3510251520,3510252799,DO 3510252800,3510253311,CA 3510253312,3510253567,NC 3510253568,3510253631,US -3510253632,3510255439,CA +3510253632,3510253759,CA +3510253760,3510253775,US +3510253776,3510255439,CA 3510255440,3510255447,US 3510255448,3510261503,CA 3510261504,3510261759,ZM @@ -117099,17 +135363,13 @@ 3510844416,3510844927,CA 3510844928,3510846527,US 3510846528,3510846559,CA -3510846560,3510886271,US -3510886272,3510886399,BR -3510886400,3510897442,US +3510846560,3510897442,US 3510897443,3510897443,IE 3510897444,3510935551,US 3510935552,3510943743,CA 3510943744,3511129087,US -3511129088,3511129183,CA -3511129184,3511129199,US -3511129200,3511131135,CA -3511131136,3511132159,US +3511129088,3511131135,CA +3511131136,3511140351,US 3511140352,3511156735,CA 3511156736,3511331199,US 3511331200,3511331231,CA @@ -117131,8 +135391,7 @@ 3512011808,3512011823,TW 3512011824,3512011855,US 3512011856,3512011871,SE -3512011872,3512011903,IN -3512011904,3512012095,US +3512011872,3512012095,US 3512012096,3512012159,GB 3512012160,3512012175,MX 3512012176,3512012255,US @@ -117143,9 +135402,7 @@ 3512013648,3512013663,CA 3512013664,3512013679,US 3512013680,3512013695,GR -3512013696,3512013791,US -3512013792,3512013823,IN -3512013824,3512016543,US +3512013696,3512016543,US 3512016544,3512016559,IT 3512016560,3512016575,US 3512016576,3512016591,TW @@ -117185,9 +135442,7 @@ 3512020096,3512020223,ES 3512020224,3512020479,US 3512020480,3512020511,GB -3512020512,3512020543,US -3512020544,3512020607,CA -3512020608,3512021503,US +3512020512,3512021503,US 3512021504,3512021759,GB 3512021760,3512022335,US 3512022336,3512022399,ES @@ -117262,9 +135517,7 @@ 3512222272,3512222335,KN 3512222336,3512222463,AG 3512222464,3512222975,AI -3512222976,3512223231,AG -3512223232,3512223487,LC -3512223488,3512223743,AG +3512222976,3512223743,AG 3512223744,3512225791,ZA 3512225792,3512227839,PR 3512227840,3512229887,ZW @@ -117335,9 +135588,17 @@ 3512269824,3512270847,US 3512270848,3512336383,CA 3512336384,3512369151,US -3512369152,3512385535,CA +3512369152,3512377231,CA +3512377232,3512377239,US +3512377240,3512378435,CA +3512378436,3512378436,US +3512378437,3512378983,CA +3512378984,3512378991,US +3512378992,3512385535,CA 3512385536,3512397823,US -3512397824,3512401919,CA +3512397824,3512399375,CA +3512399376,3512399383,US +3512399384,3512401919,CA 3512401920,3512418303,US 3512418304,3512451071,CA 3512451072,3512467455,PR @@ -117791,9 +136052,7 @@ 3513501568,3513501631,AZ 3513501632,3513502719,US 3513502720,3513502975,A1 -3513502976,3513503743,US -3513503744,3513503999,SC -3513504000,3513506047,US +3513502976,3513506047,US 3513506048,3513506303,A1 3513506304,3513506559,US 3513506560,3513506815,CA @@ -117801,13 +136060,17 @@ 3513670912,3513671167,A2 3513671168,3513778175,US 3513778176,3513794559,CA -3513794560,3514007551,US +3513794560,3513839615,US +3513839616,3513843711,A1 +3513843712,3514007551,US 3514007552,3514040319,CA 3514040320,3514367999,US 3514368000,3514433535,CA -3514433536,3514583479,US -3514583480,3514583487,PA -3514583488,3514587511,US +3514433536,3514583535,US +3514583536,3514583543,JE +3514583544,3514585359,US +3514585360,3514585375,GB +3514585376,3514587511,US 3514587512,3514587519,PA 3514587520,3514589439,US 3514589440,3514589695,GT @@ -117827,9 +136090,7 @@ 3515149568,3515149583,AU 3515149584,3515170991,US 3515170992,3515170999,KR -3515171000,3515185151,US -3515185152,3515185407,CA -3515185408,3515301887,US +3515171000,3515301887,US 3515301888,3515318271,CA 3515318272,3515358975,US 3515358976,3515359231,MX @@ -117839,11 +136100,7 @@ 3515453056,3515453071,JP 3515453072,3515453679,US 3515453680,3515453687,JP -3515453688,3515454063,US -3515454064,3515454079,JP -3515454080,3515454095,US -3515454096,3515454111,JP -3515454112,3515454143,US +3515453688,3515454143,US 3515454144,3515454207,JP 3515454208,3515454399,US 3515454400,3515454463,JP @@ -117855,13 +136112,17 @@ 3515456704,3515456767,JP 3515456768,3515596799,US 3515596800,3515613183,CA -3515613184,3515645951,US -3515678720,3515686911,US -3515686912,3515695103,CA +3515613184,3515686911,US +3515686912,3515687167,CA +3515687168,3515688191,US +3515688192,3515695103,CA 3515695104,3515711487,US -3515744256,3515793351,US +3515711488,3515731967,CA +3515731968,3515793351,US 3515793352,3515793359,MO -3515793360,3515867151,US +3515793360,3515860351,US +3515860352,3515860431,IN +3515860432,3515867151,US 3515867152,3515867167,AU 3515867168,3515867391,US 3515867392,3515867519,AU @@ -117892,7 +136153,9 @@ 3516139264,3516153855,US 3516153856,3516162047,CA 3516162048,3516170239,US -3516170240,3516203007,CA +3516170240,3516193943,CA +3516193944,3516193951,US +3516193952,3516203007,CA 3516203008,3516334079,US 3516334080,3516342271,CA 3516342272,3516351055,US @@ -117946,7 +136209,9 @@ 3517100620,3517100635,CA 3517100636,3517100648,US 3517100649,3517100668,CA -3517100669,3517100811,US +3517100669,3517100720,US +3517100721,3517100730,CA +3517100731,3517100811,US 3517100812,3517100829,GB 3517100830,3517101597,US 3517101598,3517101613,GB @@ -118005,9 +136270,7 @@ 3517396144,3517396175,US 3517396176,3517396911,CA 3517396912,3517396927,US -3517396928,3517396943,CA -3517396944,3517396959,US -3517396960,3517397503,CA +3517396928,3517397503,CA 3517397504,3517397759,US 3517397760,3517398015,CA 3517398016,3517398527,US @@ -118069,8 +136332,8 @@ 3517416712,3517416727,US 3517416728,3517416735,CA 3517416736,3517416743,US -3517416744,3517416775,CA -3517416776,3517416783,US +3517416744,3517416767,CA +3517416768,3517416783,US 3517416784,3517416791,CA 3517416792,3517416799,US 3517416800,3517416823,CA @@ -118180,8 +136443,8 @@ 3517437000,3517437007,CA 3517437008,3517437015,US 3517437016,3517437039,CA -3517437040,3517437063,US -3517437064,3517437071,CA +3517437040,3517437055,US +3517437056,3517437071,CA 3517437072,3517437079,US 3517437080,3517437087,CA 3517437088,3517437095,NO @@ -118189,9 +136452,7 @@ 3517437136,3517437143,US 3517437144,3517437151,CA 3517437152,3517437175,US -3517437176,3517438015,CA -3517438016,3517438079,US -3517438080,3517438143,CA +3517437176,3517438143,CA 3517438144,3517438207,US 3517438208,3517438463,CA 3517438464,3517438527,US @@ -118203,9 +136464,7 @@ 3517438880,3517438911,KW 3517438912,3517439487,CA 3517439488,3517439615,US -3517439616,3517440255,CA -3517440256,3517440511,US -3517440512,3517442239,CA +3517439616,3517442239,CA 3517442240,3517442303,US 3517442304,3517442319,CA 3517442320,3517442335,US @@ -118231,9 +136490,7 @@ 3517446912,3517447167,US 3517447168,3517447727,CA 3517447728,3517447743,US -3517447744,3517447759,CA -3517447760,3517447767,US -3517447768,3517447783,CA +3517447744,3517447783,CA 3517447784,3517447791,US 3517447792,3517447847,CA 3517447848,3517447863,US @@ -118255,22 +136512,27 @@ 3517596672,3517596927,NO 3517596928,3517597183,IE 3517597184,3517597695,US -3517597696,3517598207,SE +3517597696,3517597951,IE +3517597952,3517598207,DE 3517598208,3517598463,IE 3517598464,3517598527,SE 3517598528,3517598559,FR 3517598560,3517598591,SE 3517598592,3517599231,US 3517599232,3517599263,BG -3517599264,3517600767,SE +3517599264,3517599359,SE +3517599360,3517599487,US +3517599488,3517600767,SE 3517600768,3517601279,US 3517601280,3517602047,SE 3517602048,3517602303,DE 3517602304,3517602559,US -3517602560,3517602623,SE +3517602560,3517602575,SE +3517602576,3517602591,US +3517602592,3517602623,SE 3517602624,3517602815,US -3517602816,3517603327,SE -3517603328,3517603615,US +3517602816,3517603071,SE +3517603072,3517603615,US 3517603616,3517603647,DE 3517603648,3517603711,US 3517603712,3517603775,SE @@ -118284,8 +136546,8 @@ 3517605376,3517605775,SE 3517605776,3517605791,US 3517605792,3517605887,SE -3517605888,3517606207,US -3517606208,3517606271,SE +3517605888,3517606143,US +3517606144,3517606271,SE 3517606272,3517606399,US 3517606400,3517606911,SE 3517606912,3517607935,US @@ -118293,15 +136555,19 @@ 3517608192,3517608447,US 3517608448,3517608703,GB 3517608704,3517609743,US -3517609744,3517609855,SE +3517609744,3517609759,SE +3517609760,3517609791,US +3517609792,3517609855,SE 3517609856,3517610047,US -3517610048,3517610191,SE +3517610048,3517610111,SE +3517610112,3517610143,NO +3517610144,3517610191,SE 3517610192,3517610199,US 3517610200,3517610239,SE 3517610240,3517610495,US 3517610496,3517611263,IE 3517611264,3517611295,SE -3517611296,3517611303,US +3517611296,3517611303,DE 3517611304,3517611311,CA 3517611312,3517611367,SE 3517611368,3517611383,US @@ -118337,8 +136603,7 @@ 3518076672,3518076927,PA 3518076928,3518077103,US 3518077104,3518077111,GB -3518077112,3518078975,US -3518083072,3518374719,US +3518077112,3518374719,US 3518374720,3518374783,IN 3518374784,3518380223,US 3518380224,3518380287,DE @@ -118359,10 +136624,7 @@ 3518759408,3518759423,CY 3518759424,3518760511,US 3518760512,3518760575,AU -3518760576,3518760647,HU -3518760648,3518760655,US -3518760656,3518760703,HU -3518760704,3518762495,US +3518760576,3518762495,US 3518762496,3518762751,GB 3518762752,3518764671,US 3518764672,3518764703,NL @@ -118381,29 +136643,17 @@ 3518896216,3518896223,CA 3518896224,3518896231,US 3518896232,3518896239,CN -3518896240,3518896895,US -3518896896,3518896903,GB -3518896904,3518897119,US +3518896240,3518897119,US 3518897120,3518897127,IT -3518897128,3518898143,US -3518898144,3518898151,BR -3518898152,3518903191,US +3518897128,3518903191,US 3518903192,3518903199,JP -3518903200,3518903871,US -3518903872,3518903879,PK -3518903880,3518903927,US -3518903928,3518903935,RU -3518903936,3518904015,US -3518904016,3518904031,EG -3518904032,3518905599,US +3518903200,3518905599,US 3518905600,3518905855,GB 3518905856,3518911743,US 3518911744,3518911999,GB 3518912000,3518912511,US 3518912512,3518912767,IN -3518912768,3518921447,US -3518921448,3518921455,CN -3518921456,3518929535,US +3518912768,3518929535,US 3518929536,3518929599,CA 3518929600,3518995695,US 3518995696,3518995703,GB @@ -118423,9 +136673,7 @@ 3519381504,3519397887,CA 3519397888,3519406079,US 3519406080,3519406143,IT -3519406144,3519406207,US -3519406208,3519406215,SA -3519406216,3519406255,US +3519406144,3519406255,US 3519406256,3519406263,SA 3519406264,3519406295,US 3519406296,3519406303,TH @@ -118491,59 +136739,39 @@ 3519412736,3519412751,RU 3519412752,3519412799,US 3519412800,3519412815,RU -3519412816,3519413759,US +3519412816,3519412999,US +3519413000,3519413007,CY +3519413008,3519413759,US 3519413760,3519414271,CA 3519414272,3519417071,US 3519417072,3519417075,PT 3519417076,3519417087,US 3519417088,3519417151,IT -3519417152,3519417183,DE -3519417184,3519420767,US +3519417152,3519420767,US 3519420768,3519420775,HK 3519420776,3519422495,US 3519422496,3519422527,CA -3519422528,3519475711,US +3519422528,3519466895,US +3519466896,3519466911,SZ +3519466912,3519467519,US +3519469568,3519475711,US 3519475712,3519476223,BH 3519476224,3519477759,A2 3519477760,3519578367,US 3519578368,3519578623,NA 3519578624,3519578879,US 3519578880,3519579135,CA -3519579136,3519579583,US -3519579584,3519579591,CR -3519579592,3519579967,US +3519579136,3519579967,US 3519579968,3519579983,CY -3519579984,3519579991,CR -3519579992,3519580031,US -3519580032,3519580047,CY -3519580048,3519580063,CR -3519580064,3519583999,US -3519584000,3519584255,CA -3519584256,3519586047,US -3519586048,3519586559,GB -3519586560,3519586815,US -3519586816,3519587007,GB -3519587008,3519587071,AG -3519587072,3519588351,US -3519588352,3519588367,CR -3519588368,3519588391,US -3519588392,3519588399,CR -3519588400,3519588447,US -3519588448,3519588463,CR -3519588464,3519588639,US +3519579984,3519586303,US +3519586304,3519586559,GB +3519586560,3519587039,US +3519587040,3519587071,AG +3519587072,3519588639,US 3519588640,3519588671,GB -3519588672,3519588687,US -3519588688,3519588703,CY -3519588704,3519590655,US +3519588672,3519590655,US 3519590656,3519590911,CA -3519590912,3519590927,GB -3519590928,3519590943,EE -3519590944,3519590959,AG -3519590960,3519591071,US -3519591072,3519591087,IM -3519591088,3519591167,US -3519591168,3519591423,GB -3519591424,3519603204,US +3519590912,3519603204,US 3519603205,3519603212,VN 3519603213,3519603255,US 3519603256,3519603265,BR @@ -118566,13 +136794,12 @@ 3519712512,3519715295,US 3519715296,3519715327,GB 3519715328,3519716863,US -3519716864,3519716991,CA -3519716992,3519723519,US +3519716864,3519716999,CA +3519717000,3519723519,US 3519723520,3519724031,CA 3519724032,3519741951,US 3519741952,3519758335,ZA -3519758336,3519791103,US -3519799296,3519799871,US +3519758336,3519799871,US 3519799872,3519799903,IN 3519799904,3519805119,US 3519805120,3519805183,GB @@ -118583,9 +136810,7 @@ 3519879768,3519879775,US 3519879776,3519879807,CA 3519879808,3519879815,US -3519879816,3519879863,CA -3519879864,3519879871,US -3519879872,3519880767,CA +3519879816,3519880767,CA 3519880768,3519880831,DE 3519880832,3519881375,CA 3519881376,3519881407,US @@ -118601,8 +136826,8 @@ 3520020656,3520020663,US 3520020664,3520020719,CA 3520020720,3520020727,US -3520020728,3520020983,CA -3520020984,3520021015,US +3520020728,3520020991,CA +3520020992,3520021015,US 3520021016,3520021055,CA 3520021056,3520021071,US 3520021072,3520021183,CA @@ -118613,21 +136838,19 @@ 3520021384,3520021415,US 3520021416,3520021471,CA 3520021472,3520021479,US -3520021480,3520021487,CA -3520021488,3520021503,US +3520021480,3520021495,CA +3520021496,3520021503,US 3520021504,3520021687,CA 3520021688,3520021695,US 3520021696,3520021839,CA 3520021840,3520021847,US -3520021848,3520021863,CA -3520021864,3520021871,US -3520021872,3520021895,CA +3520021848,3520021895,CA 3520021896,3520021903,US 3520021904,3520021911,CA -3520021912,3520021935,US -3520021936,3520021943,CA -3520021944,3520021951,US -3520021952,3520021967,CA +3520021912,3520021919,US +3520021920,3520021927,CA +3520021928,3520021935,US +3520021936,3520021967,CA 3520021968,3520021975,US 3520021976,3520021983,CA 3520021984,3520021991,US @@ -118654,16 +136877,16 @@ 3520022936,3520023047,CA 3520023048,3520023063,US 3520023064,3520023087,CA -3520023088,3520023119,US +3520023088,3520023103,US +3520023104,3520023111,CA +3520023112,3520023119,US 3520023120,3520023127,CA 3520023128,3520023135,US 3520023136,3520023151,CA 3520023152,3520023159,US 3520023160,3520023383,CA 3520023384,3520023415,US -3520023416,3520023647,CA -3520023648,3520023655,US -3520023656,3520023879,CA +3520023416,3520023879,CA 3520023880,3520023887,US 3520023888,3520023911,CA 3520023912,3520023919,US @@ -118671,13 +136894,11 @@ 3520024216,3520024231,US 3520024232,3520024487,CA 3520024488,3520024495,US -3520024496,3520024799,CA -3520024800,3520024815,US +3520024496,3520024807,CA +3520024808,3520024815,US 3520024816,3520025191,CA 3520025192,3520025199,US -3520025200,3520025239,CA -3520025240,3520025247,US -3520025248,3520025295,CA +3520025200,3520025295,CA 3520025296,3520025303,US 3520025304,3520025343,CA 3520025344,3520025359,US @@ -118689,15 +136910,13 @@ 3520025624,3520025631,US 3520025632,3520025639,CA 3520025640,3520025647,US -3520025648,3520025767,CA -3520025768,3520025775,US -3520025776,3520025791,CA +3520025648,3520025791,CA 3520025792,3520025799,US 3520025800,3520026671,CA 3520026672,3520026679,US -3520026680,3520026719,CA -3520026720,3520026727,US -3520026728,3520026783,CA +3520026680,3520026703,CA +3520026704,3520026711,US +3520026712,3520026783,CA 3520026784,3520026791,US 3520026792,3520026895,CA 3520026896,3520026903,US @@ -118715,9 +136934,7 @@ 3520027440,3520027447,US 3520027448,3520027711,CA 3520027712,3520027727,US -3520027728,3520027783,CA -3520027784,3520027791,US -3520027792,3520027815,CA +3520027728,3520027815,CA 3520027816,3520027823,US 3520027824,3520027839,CA 3520027840,3520027887,US @@ -118735,8 +136952,8 @@ 3520028544,3520028551,US 3520028552,3520028655,CA 3520028656,3520028671,US -3520028672,3520028687,CA -3520028688,3520028711,US +3520028672,3520028695,CA +3520028696,3520028711,US 3520028712,3520029167,CA 3520029168,3520029175,IL 3520029176,3520030719,CA @@ -118845,7 +137062,9 @@ 3520036360,3520036863,CA 3520036864,3520071823,US 3520071824,3520071839,NL -3520071840,3520073967,US +3520071840,3520072751,US +3520072752,3520072767,AR +3520072768,3520073967,US 3520073968,3520073975,CA 3520073976,3520074671,US 3520074672,3520074687,GB @@ -118859,24 +137078,24 @@ 3520075456,3520075471,CA 3520075472,3520075743,US 3520075744,3520075775,NL -3520075776,3520078911,US +3520075776,3520078031,US +3520078032,3520078047,BS +3520078048,3520078911,US 3520078912,3520078927,AU 3520078928,3520078943,EC 3520078944,3520081455,US 3520081456,3520081471,BR -3520081472,3520081743,US -3520081744,3520081759,VG -3520081760,3520082151,US +3520081472,3520082151,US 3520082152,3520082167,CA 3520082168,3520086271,US 3520086272,3520086527,CA 3520086528,3520086959,US 3520086960,3520086975,CA -3520086976,3520088447,US +3520086976,3520087327,US +3520087328,3520087359,DE +3520087360,3520088447,US 3520088448,3520088463,ES -3520088464,3520092991,US -3520092992,3520093007,IL -3520093008,3520095455,US +3520088464,3520095455,US 3520095456,3520095471,NL 3520095472,3520097135,US 3520097136,3520097151,CA @@ -118886,7 +137105,9 @@ 3520100032,3520100039,LB 3520100040,3520101839,US 3520101840,3520101855,CA -3520101856,3520112975,US +3520101856,3520101919,US +3520101920,3520101927,BR +3520101928,3520112975,US 3520112976,3520112991,ES 3520112992,3520114399,US 3520114400,3520114407,VG @@ -118894,7 +137115,9 @@ 3520121520,3520121535,GB 3520121536,3520356351,US 3520356352,3520364543,ZA -3520364544,3520450943,US +3520364544,3520369096,US +3520369097,3520369097,A1 +3520369098,3520450943,US 3520450944,3520450959,GB 3520450960,3520454655,US 3520454656,3520462847,CA @@ -118902,7 +137125,9 @@ 3520527872,3520528383,A2 3520528384,3520626687,US 3520626688,3520634879,CA -3520634880,3520675839,US +3520634880,3520643071,US +3520643072,3520659455,A1 +3520659456,3520675839,US 3520675840,3520675991,CA 3520675992,3520675999,US 3520676000,3520679439,CA @@ -118930,11 +137155,27 @@ 3520956156,3520956159,CH 3520956160,3520978943,US 3520978944,3520979711,BZ -3520979712,3520999423,US +3520979712,3520987903,US +3520987904,3520987935,A1 +3520987936,3520994815,US +3520994816,3520995327,ES +3520995328,3520999423,US 3520999424,3521003519,CA 3521003520,3521003583,US 3521003584,3521003647,IL -3521003648,3521011719,US +3521003648,3521004031,US +3521004032,3521004039,MY +3521004040,3521004063,US +3521004064,3521004071,RO +3521004072,3521004159,US +3521004160,3521004175,FR +3521004176,3521005311,US +3521005312,3521005319,MY +3521005320,3521005327,GB +3521005328,3521005335,DE +3521005336,3521009679,US +3521009680,3521009687,MY +3521009688,3521011719,US 3521011720,3521011727,BR 3521011728,3521011735,AU 3521011736,3521011743,US @@ -118946,9 +137187,7 @@ 3521011800,3521011807,BR 3521011808,3521011967,US 3521011968,3521011975,IL -3521011976,3521013559,US -3521013560,3521013567,GB -3521013568,3521013951,US +3521011976,3521013951,US 3521013952,3521013959,AU 3521013960,3521014127,US 3521014128,3521014135,GR @@ -119014,11 +137253,11 @@ 3521372096,3521372159,CA 3521372160,3521377407,US 3521377408,3521377439,IT -3521377440,3521835903,US +3521377440,3521835567,US +3521835568,3521835575,CH +3521835576,3521835903,US 3521835904,3521835967,CA -3521835968,3521836351,US -3521836352,3521836415,IL -3521836416,3521836687,US +3521835968,3521836687,US 3521836688,3521836703,GB 3521836704,3521904639,US 3521904640,3521921023,JM @@ -119029,23 +137268,25 @@ 3521933358,3521933365,AE 3521933366,3521933389,US 3521933390,3521933397,AE -3521933398,3521933413,US +3521933398,3521933405,US +3521933406,3521933413,VE 3521933414,3521933421,IN 3521933422,3521933429,MA 3521933430,3521933437,CA -3521933438,3521933497,US +3521933438,3521933445,VE +3521933446,3521933485,US +3521933486,3521933493,EG +3521933494,3521933497,US 3521933498,3521933505,EG 3521933506,3521933537,GB 3521933538,3521933577,US 3521933578,3521933585,EG -3521933586,3521933589,US -3521933590,3521933597,IN -3521933598,3521933605,US +3521933586,3521933605,US 3521933606,3521933613,AE 3521933614,3521933621,US 3521933622,3521933629,IN 3521933630,3521933645,US -3521933646,3521933653,GB +3521933646,3521933653,PE 3521933654,3521933661,US 3521933662,3521933669,MA 3521933670,3521933725,US @@ -119056,33 +137297,44 @@ 3521933834,3521933841,EG 3521933842,3521933929,US 3521933930,3521933937,IN -3521933938,3521933981,US +3521933938,3521933945,GB +3521933946,3521933953,EG +3521933954,3521933981,US 3521933982,3521933989,IN 3521933990,3521934089,US 3521934090,3521934097,EG -3521934098,3521934169,US +3521934098,3521934121,US +3521934122,3521934129,ID +3521934130,3521934137,US +3521934138,3521934145,GR +3521934146,3521934161,ID +3521934162,3521934169,US 3521934170,3521934177,EG -3521934178,3521934421,US +3521934178,3521934185,US +3521934186,3521934201,LK +3521934202,3521934233,US +3521934234,3521934241,ID +3521934242,3521934421,US 3521934422,3521934429,EG -3521934430,3521934477,US -3521934478,3521934485,ID -3521934486,3521934509,US +3521934430,3521934437,US +3521934438,3521934445,IN +3521934446,3521934509,US 3521934510,3521934517,IN 3521934518,3521934735,US 3521934736,3521934743,EG 3521934744,3521934768,US 3521934769,3521934776,MA -3521934777,3521935237,US -3521935238,3521935245,EG -3521935246,3521935310,US +3521934777,3521935310,US 3521935311,3521935318,EG -3521935319,3521935717,US -3521935718,3521935725,IN +3521935319,3521935553,US +3521935554,3521935561,VE +3521935562,3521935709,US +3521935710,3521935725,IN 3521935726,3521935993,US 3521935994,3521936025,EG -3521936026,3521936162,US -3521936163,3521936194,EG -3521936195,3521936243,US +3521936026,3521936049,US +3521936050,3521936065,CA +3521936066,3521936243,US 3521936244,3521936251,IN 3521936252,3521936291,US 3521936292,3521936299,IN @@ -119090,14 +137342,23 @@ 3521936394,3521936425,EG 3521936426,3521936669,US 3521936670,3521936677,PK -3521936678,3521936827,US +3521936678,3521936739,US +3521936740,3521936747,ID +3521936748,3521936758,US +3521936759,3521936766,IN +3521936767,3521936774,PE +3521936775,3521936827,US 3521936828,3521936860,EG -3521936861,3521936969,US +3521936861,3521936957,US +3521936958,3521936965,PE +3521936966,3521936969,US 3521936970,3521936977,PK 3521936978,3521936993,US 3521936994,3521937001,LK 3521937002,3521937005,US -3521937006,3521937013,EG +3521937006,3521937009,EG +3521937010,3521937011,US +3521937012,3521937013,EG 3521937014,3521937017,US 3521937018,3521937025,SG 3521937026,3521937161,US @@ -119106,14 +137367,14 @@ 3521937261,3521937406,EG 3521937407,3521965055,US 3521965056,3521966079,DE -3521966080,3522029439,US +3521966080,3521989631,US +3521989632,3521989887,A2 +3521989888,3522029439,US 3522029440,3522029503,FI 3522029504,3522029567,CA 3522029568,3522029823,US 3522029824,3522029855,A1 -3522029856,3522031871,US -3522031872,3522032127,AT -3522032128,3522034447,US +3522029856,3522034447,US 3522034448,3522034463,GB 3522034464,3522101247,US 3522101248,3522109439,CA @@ -119124,16 +137385,17 @@ 3522121216,3522121471,US 3522121472,3522121983,LY 3522121984,3522122239,AW -3522122240,3522131615,US +3522122240,3522131487,US +3522131488,3522131519,DE +3522131520,3522131615,US 3522131616,3522131647,BR 3522131648,3522131711,US 3522131712,3522131743,GB -3522131744,3522131775,DE -3522131776,3522131807,BR +3522131744,3522131775,US +3522131776,3522131807,TR 3522131808,3522132479,US 3522132480,3522132543,CO -3522132544,3522132575,US -3522132576,3522132607,UA +3522132544,3522132607,US 3522132608,3522132639,CA 3522132640,3522132671,BO 3522132672,3522132703,BR @@ -119148,20 +137410,19 @@ 3522133664,3522133695,DE 3522133696,3522133759,US 3522133760,3522133791,IR -3522133792,3522133823,DE -3522133824,3522174975,US +3522133792,3522174975,US 3522174976,3522179071,BM 3522179072,3522195455,US 3522195456,3522199551,CA 3522199552,3522759591,US 3522759592,3522759599,CA -3522759600,3522763263,US -3522763264,3522763519,CA -3522763520,3522854911,US +3522759600,3522854911,US 3522854912,3522859999,CA 3522860000,3522860031,IN 3522860032,3522871295,CA -3522871296,3522937855,US +3522871296,3522902015,US +3522902016,3522903039,CA +3522903040,3522937855,US 3522937856,3522938367,GB 3522938368,3523215359,US 3523215360,3523223551,AU @@ -119199,7 +137460,7 @@ 3523553280,3523555327,MY 3523555328,3523557375,NZ 3523557376,3523575807,PH -3523579904,3523583999,CN +3523575808,3523583999,CN 3523584000,3523592479,HK 3523592480,3523592495,YE 3523592496,3523592511,HK @@ -119426,9 +137687,7 @@ 3524781792,3524781823,SG 3524781824,3524788223,PH 3524788224,3524853759,SG -3524853760,3525300739,CN -3525300740,3525300743,US -3525300744,3526361087,CN +3524853760,3526361087,CN 3526361088,3526393855,NZ 3526393856,3526395903,JP 3526395904,3526397951,KH @@ -119488,7 +137747,6 @@ 3528884224,3528908799,TH 3528908800,3528912895,VN 3528912896,3528933375,AU -3528933376,3528949759,JP 3528949760,3528966143,CN 3528966144,3528974335,KR 3528974336,3528978431,JP @@ -119518,9 +137776,7 @@ 3535372288,3535380479,JP 3535380480,3535388671,PH 3535388672,3535405055,CN -3535405056,3535480703,MY -3535480704,3535480831,TH -3535480832,3535536127,MY +3535405056,3535536127,MY 3535536128,3535798271,JP 3535798272,3535814655,TW 3535814656,3535822847,KR @@ -119573,9 +137829,7 @@ 3546808320,3547856895,KR 3547856896,3548905471,JP 3548905472,3551002623,CN -3551002624,3554544607,KR -3554544608,3554544639,DE -3554544640,3556769791,KR +3551002624,3556769791,KR 3556769792,3556774399,DE 3556774400,3556786175,EU 3556786176,3556794367,RU @@ -119598,7 +137852,11 @@ 3556851712,3556868095,UA 3556868096,3556876287,GB 3556876288,3556884479,NL -3556884480,3556900863,RU +3556884480,3556886527,IR +3556886528,3556888575,GB +3556888576,3556890623,US +3556890624,3556892671,GB +3556892672,3556900863,RU 3556900864,3556909055,GB 3556909056,3556925439,DE 3556925440,3556933631,PL @@ -119610,11 +137868,20 @@ 3556974592,3556982783,ES 3556982784,3556984623,DE 3556984624,3556984639,FR -3556984640,3556985663,DE +3556984640,3556984647,DE +3556984648,3556984651,FR +3556984652,3556984655,DE +3556984656,3556984719,FR +3556984720,3556985119,DE +3556985120,3556985135,ES +3556985136,3556985207,DE +3556985208,3556985215,ES +3556985216,3556985663,DE 3556985664,3556985671,HU 3556985672,3556990975,DE 3556990976,3556999167,UA 3556999168,3557007359,RU +3557007360,3557015551,IT 3557015552,3557023743,DE 3557023744,3557023879,BE 3557023880,3557023903,GB @@ -119634,17 +137901,13 @@ 3557028032,3557028063,GB 3557028064,3557028095,BE 3557028096,3557028351,GB -3557028352,3557028543,BE -3557028544,3557028607,GB -3557028608,3557028735,BE +3557028352,3557028735,BE 3557028736,3557028799,GB 3557028800,3557028911,BE 3557028912,3557028927,GB 3557028928,3557029059,BE 3557029060,3557029071,GB -3557029072,3557029567,BE -3557029568,3557029631,GB -3557029632,3557029887,BE +3557029072,3557029887,BE 3557029888,3557029951,GB 3557029952,3557030079,BE 3557030080,3557030143,GB @@ -119676,26 +137939,27 @@ 3557138432,3557146623,RU 3557146624,3557154815,SK 3557154816,3557171199,RU -3557171200,3557172479,IT +3557171200,3557172479,A2 3557172480,3557172991,IR 3557172992,3557173503,IQ 3557173504,3557173631,IR 3557173632,3557173695,IQ 3557173696,3557173703,AE -3557173704,3557173759,IT +3557173704,3557173759,A2 3557173760,3557174015,IR -3557174016,3557174527,IT +3557174016,3557174527,A2 3557174528,3557174783,IR 3557174784,3557175039,AE 3557175040,3557176063,IR -3557176064,3557176319,IT -3557176320,3557176619,NE -3557176620,3557176831,IT +3557176064,3557176575,A2 +3557176576,3557176619,NE +3557176620,3557176831,A2 3557176832,3557177023,IQ -3557177024,3557177199,IT +3557177024,3557177199,A2 3557177200,3557177215,IR -3557177216,3557178367,IT -3557178368,3557179135,IR +3557177216,3557177343,A2 +3557177344,3557177599,IT +3557177600,3557179135,A2 3557179136,3557179391,IT 3557179392,3557213351,DE 3557213352,3557213359,US @@ -119715,37 +137979,39 @@ 3557302272,3557310463,UA 3557310464,3557326847,ES 3557326848,3557335039,DE -3557335040,3557335391,BE +3557335040,3557335311,BE +3557335312,3557335327,EU +3557335328,3557335391,BE 3557335392,3557335455,EU 3557335456,3557335951,BE 3557335952,3557335967,LU -3557335968,3557336191,BE +3557335968,3557336063,BE +3557336064,3557336127,EU +3557336128,3557336191,BE 3557336192,3557336255,EU 3557336256,3557336319,BE 3557336320,3557336575,EU -3557336576,3557336655,BE -3557336656,3557336703,EU -3557336704,3557336831,BE +3557336576,3557336831,BE 3557336832,3557338111,EU 3557338112,3557338367,BE 3557338368,3557338495,EU -3557338496,3557339175,BE +3557338496,3557338615,BE +3557338616,3557338623,EU +3557338624,3557339175,BE 3557339176,3557339183,EU -3557339184,3557339199,BE -3557339200,3557339215,EU +3557339184,3557339191,BE +3557339192,3557339215,EU 3557339216,3557339223,BE 3557339224,3557339239,EU 3557339240,3557339247,BE -3557339248,3557339255,EU -3557339256,3557339267,BE +3557339248,3557339259,EU +3557339260,3557339267,BE 3557339268,3557339271,EU 3557339272,3557340159,BE 3557340160,3557340191,EU 3557340192,3557340927,BE 3557340928,3557341183,EU -3557341184,3557341439,BE -3557341440,3557341471,EU -3557341472,3557341527,BE +3557341184,3557341527,BE 3557341528,3557341535,EU 3557341536,3557341551,BE 3557341552,3557341559,EU @@ -119753,9 +138019,7 @@ 3557341568,3557341663,EU 3557341664,3557341695,BE 3557341696,3557341951,EU -3557341952,3557342479,BE -3557342480,3557342495,EU -3557342496,3557342511,BE +3557341952,3557342511,BE 3557342512,3557342527,EU 3557342528,3557342543,BE 3557342544,3557342559,EU @@ -119764,8 +138028,12 @@ 3557342720,3557343231,BE 3557343232,3557351423,DE 3557351424,3557359615,RU -3557359616,3557359743,GB -3557359744,3557359871,JE +3557359616,3557359647,GB +3557359648,3557359655,JE +3557359656,3557359671,GB +3557359672,3557359695,JE +3557359696,3557359703,GB +3557359704,3557359871,JE 3557359872,3557360055,GB 3557360056,3557360063,JE 3557360064,3557360406,GB @@ -119780,19 +138048,15 @@ 3557360536,3557360543,JE 3557360544,3557360559,GB 3557360560,3557360575,JE -3557360576,3557360623,GB -3557360624,3557360639,JE -3557360640,3557360680,GB +3557360576,3557360680,GB 3557360681,3557360687,JE -3557360688,3557360815,GB -3557360816,3557360895,JE -3557360896,3557360927,GB +3557360688,3557360927,GB 3557360928,3557360943,JE 3557360944,3557360959,GB 3557360960,3557360967,JE 3557360968,3557361055,GB -3557361056,3557361151,JE -3557361152,3557361159,GB +3557361056,3557361087,JE +3557361088,3557361159,GB 3557361160,3557361167,JE 3557361168,3557361183,GB 3557361184,3557361215,JE @@ -119809,18 +138073,18 @@ 3557361984,3557362047,GB 3557362048,3557362431,JE 3557362432,3557362687,GB -3557362688,3557363455,JE -3557363456,3557363471,GB +3557362688,3557363199,JE +3557363200,3557363471,GB 3557363472,3557363479,JE 3557363480,3557363655,GB 3557363656,3557363663,JE 3557363664,3557363671,GB 3557363672,3557363679,JE -3557363680,3557363703,GB -3557363704,3557363783,JE -3557363784,3557363791,GB -3557363792,3557364223,JE -3557364224,3557364479,GB +3557363680,3557364103,GB +3557364104,3557364107,JE +3557364108,3557364187,GB +3557364188,3557364199,JE +3557364200,3557364479,GB 3557364480,3557364495,JE 3557364496,3557364527,GB 3557364528,3557364559,JE @@ -119845,28 +138109,28 @@ 3557365104,3557365111,GB 3557365112,3557365119,JE 3557365120,3557365183,GB -3557365184,3557365247,JE -3557365248,3557365423,GB +3557365184,3557365375,JE +3557365376,3557365423,GB 3557365424,3557365503,JE 3557365504,3557365511,GB 3557365512,3557365519,JE 3557365520,3557365551,GB -3557365552,3557365559,JE -3557365560,3557365631,GB +3557365552,3557365567,JE +3557365568,3557365631,GB 3557365632,3557365695,JE -3557365696,3557365847,GB +3557365696,3557365807,GB +3557365808,3557365823,JE +3557365824,3557365847,GB 3557365848,3557365871,JE 3557365872,3557365887,GB 3557365888,3557365895,JE 3557365896,3557365911,GB 3557365912,3557365919,JE -3557365920,3557365935,GB -3557365936,3557366015,JE +3557365920,3557365927,GB +3557365928,3557366015,JE 3557366016,3557366055,GB 3557366056,3557366063,JE -3557366064,3557366111,GB -3557366112,3557366119,JE -3557366120,3557366263,GB +3557366064,3557366263,GB 3557366264,3557366271,JE 3557366272,3557367807,GB 3557367808,3557375999,DE @@ -119935,18 +138199,47 @@ 3557810176,3557818367,ES 3557818368,3557826559,RU 3557826560,3557834751,AT -3557834752,3557842943,IR +3557834752,3557836287,GB +3557836288,3557836543,IR +3557836544,3557837055,GB +3557837056,3557842943,IR 3557842944,3557851135,FI 3557851136,3557859327,HU 3557859328,3557859839,SE 3557859840,3557860095,NO -3557860096,3557860607,SE +3557860096,3557860159,SE +3557860160,3557860167,DK +3557860168,3557860607,SE 3557860608,3557860623,FI 3557860624,3557860831,SE 3557860832,3557860847,FI 3557860848,3557860863,SE 3557860864,3557861119,NO -3557861120,3557867519,SE +3557861120,3557861943,SE +3557861944,3557861947,FI +3557861948,3557862015,SE +3557862016,3557862031,BE +3557862032,3557862399,SE +3557862400,3557862911,FI +3557862912,3557863295,SE +3557863296,3557863327,FI +3557863328,3557863351,SE +3557863352,3557863359,FI +3557863360,3557863391,SE +3557863392,3557863399,FI +3557863400,3557863487,SE +3557863488,3557863503,NO +3557863504,3557863519,DK +3557863520,3557863887,SE +3557863888,3557863903,NO +3557863904,3557863919,FI +3557863920,3557864287,SE +3557864288,3557864303,DK +3557864304,3557864311,SE +3557864312,3557864319,FI +3557864320,3557864799,SE +3557864800,3557864831,FI +3557864832,3557867519,SE 3557867520,3557875711,RU 3557875712,3557883903,DE 3557883904,3557892095,RU @@ -120005,7 +138298,9 @@ 3558155048,3558155055,A2 3558155056,3558155059,AF 3558155060,3558155063,DE -3558155064,3558155135,A2 +3558155064,3558155103,A2 +3558155104,3558155119,DE +3558155120,3558155135,A2 3558155136,3558155263,SD 3558155264,3558155391,ET 3558155392,3558155399,A2 @@ -120055,8 +138350,11 @@ 3558158336,3558158847,SE 3558158848,3558159359,DE 3558159360,3558159519,AF -3558159520,3558159871,A2 -3558159872,3558160383,DE +3558159520,3558159807,A2 +3558159808,3558159839,DE +3558159840,3558159871,A2 +3558159872,3558160127,SL +3558160128,3558160383,DE 3558160384,3558161151,A2 3558161152,3558161407,AF 3558161408,3558162143,A2 @@ -120086,10 +138384,8 @@ 3558196360,3558196367,ES 3558196368,3558196415,IT 3558196416,3558196543,ES -3558196544,3558196607,IT -3558196608,3558196719,ES -3558196720,3558196727,IT -3558196728,3558196735,ES +3558196544,3558196599,IT +3558196600,3558196735,ES 3558196736,3558203391,US 3558203392,3558211583,ES 3558211584,3558219775,GB @@ -120134,11 +138430,13 @@ 3558288640,3558288671,BE 3558288672,3558288687,DE 3558288688,3558288895,BE -3558288896,3558289111,FR -3558289112,3558289119,GB +3558288896,3558289103,FR +3558289104,3558289119,GB 3558289120,3558289151,FR 3558289152,3558289407,GB -3558289408,3558289663,NL +3558289408,3558289503,NL +3558289504,3558289535,GB +3558289536,3558289663,NL 3558289664,3558289747,IT 3558289748,3558289751,GB 3558289752,3558289775,IT @@ -120151,11 +138449,12 @@ 3558290592,3558290599,BE 3558290600,3558290615,GB 3558290616,3558290663,BE -3558290664,3558290671,GB -3558290672,3558290687,BE +3558290664,3558290679,GB +3558290680,3558290687,BE 3558290688,3558290871,ES 3558290872,3558290879,GB -3558290880,3558290943,ES +3558290880,3558290911,ES +3558290912,3558290943,GB 3558290944,3558290959,DE 3558290960,3558290967,NL 3558290968,3558290975,GB @@ -120172,14 +138471,18 @@ 3558291264,3558291279,AT 3558291280,3558291295,GB 3558291296,3558291455,CH -3558291456,3558292223,GB +3558291456,3558291459,DE +3558291460,3558291463,GB +3558291464,3558291471,DE +3558291472,3558292223,GB 3558292224,3558292287,SE 3558292288,3558292543,NL 3558292544,3558292607,GB 3558292608,3558292735,NL 3558292736,3558292863,GB 3558292864,3558292871,CH -3558292872,3558293119,NL +3558292872,3558292879,GB +3558292880,3558293119,NL 3558293120,3558293143,CH 3558293144,3558293151,GB 3558293152,3558293247,NL @@ -120271,18 +138574,13 @@ 3558514688,3558522879,SK 3558522880,3558531071,NL 3558531072,3558539263,RU -3558539264,3558543359,SE -3558543360,3558547455,DK +3558539264,3558547455,DK 3558547456,3558555647,FR 3558555648,3558572031,AT 3558572032,3558580223,DE -3558580224,3558581119,CH -3558581120,3558581151,DE -3558581152,3558581423,CH +3558580224,3558581423,CH 3558581424,3558581439,DE -3558581440,3558586303,CH -3558586304,3558586335,NL -3558586336,3558588415,CH +3558581440,3558588415,CH 3558588416,3558596607,CZ 3558596608,3558604799,EE 3558604800,3558612991,GB @@ -120487,9 +138785,7 @@ 3558856576,3558856639,ES 3558856640,3558856703,NL 3558856704,3558858751,US -3558858752,3558860967,IT -3558860968,3558860975,IE -3558860976,3558864695,IT +3558858752,3558864695,IT 3558864696,3558864703,GB 3558864704,3558866943,IT 3558866944,3558899711,GB @@ -120528,9 +138824,13 @@ 3559088368,3559088371,GB 3559088372,3559088375,BE 3559088376,3559088379,GB -3559088380,3559089023,BE +3559088380,3559088631,BE +3559088632,3559088639,DE +3559088640,3559089023,BE 3559089024,3559089027,GB -3559089028,3559089351,BE +3559089028,3559089079,BE +3559089080,3559089087,GB +3559089088,3559089351,BE 3559089352,3559089359,GB 3559089360,3559089407,BE 3559089408,3559089411,GB @@ -120538,8 +138838,8 @@ 3559089440,3559089443,GB 3559089444,3559089447,BE 3559089448,3559089451,GB -3559089452,3559089459,BE -3559089460,3559089467,GB +3559089452,3559089463,BE +3559089464,3559089467,GB 3559089468,3559089547,BE 3559089548,3559089551,GB 3559089552,3559089607,BE @@ -120556,9 +138856,7 @@ 3559090440,3559090443,GB 3559090444,3559090463,BE 3559090464,3559090467,GB -3559090468,3559090471,BE -3559090472,3559090479,GB -3559090480,3559090483,BE +3559090468,3559090483,BE 3559090484,3559090487,GB 3559090488,3559090587,BE 3559090588,3559090591,GB @@ -120590,10 +138888,14 @@ 3559091424,3559091427,GB 3559091428,3559091439,BE 3559091440,3559091447,ES -3559091448,3559091507,BE +3559091448,3559091455,BE +3559091456,3559091487,DE +3559091488,3559091495,BE +3559091496,3559091503,GB +3559091504,3559091507,BE 3559091508,3559091511,GB -3559091512,3559091535,BE -3559091536,3559091543,GB +3559091512,3559091527,BE +3559091528,3559091543,GB 3559091544,3559091571,BE 3559091572,3559091575,GB 3559091576,3559091591,BE @@ -120602,17 +138904,15 @@ 3559091632,3559091639,LU 3559091640,3559091815,BE 3559091816,3559091823,GB -3559091824,3559091855,BE -3559091856,3559091863,GB -3559091864,3559092159,BE +3559091824,3559092159,BE 3559092160,3559092160,GB 3559092161,3559092222,BE 3559092223,3559092223,GB -3559092224,3559092295,BE -3559092296,3559092303,GB -3559092304,3559092399,BE -3559092400,3559092407,GB -3559092408,3559092735,BE +3559092224,3559092239,BE +3559092240,3559092247,GB +3559092248,3559092359,BE +3559092360,3559092367,GB +3559092368,3559092735,BE 3559092736,3559092739,GB 3559092740,3559092799,BE 3559092800,3559092803,GB @@ -120629,7 +138929,9 @@ 3559093000,3559093007,BE 3559093008,3559093015,GB 3559093016,3559093023,FR -3559093024,3559093047,BE +3559093024,3559093031,BE +3559093032,3559093039,GB +3559093040,3559093047,BE 3559093048,3559093055,GB 3559093056,3559093063,BE 3559093064,3559093071,FR @@ -120650,11 +138952,19 @@ 3559093216,3559093219,GB 3559093220,3559093239,BE 3559093240,3559093243,GB -3559093244,3559093567,BE +3559093244,3559093519,BE +3559093520,3559093535,GB +3559093536,3559093567,BE 3559093568,3559093599,IT -3559093600,3559093687,BE +3559093600,3559093663,BE +3559093664,3559093671,GB +3559093672,3559093687,BE 3559093688,3559093699,GB -3559093700,3559094019,BE +3559093700,3559093703,BE +3559093704,3559093711,GB +3559093712,3559093975,BE +3559093976,3559093983,GB +3559093984,3559094019,BE 3559094020,3559094023,GB 3559094024,3559094031,BE 3559094032,3559094039,FR @@ -120723,6 +139033,7 @@ 3559096320,3559103231,RO 3559103232,3559103487,GB 3559103488,3559104511,RO +3559104512,3559112703,RU 3559112704,3559120895,IT 3559120896,3559129087,GB 3559129088,3559137279,BG @@ -120730,17 +139041,13 @@ 3559145472,3559153663,ES 3559153664,3559161855,GB 3559161856,3559161887,FR -3559161888,3559161919,GB -3559161920,3559161983,SE -3559161984,3559162047,GB +3559161888,3559162047,GB 3559162048,3559162079,BE 3559162080,3559163903,GB 3559163904,3559163935,FR 3559163936,3559163999,GB 3559164000,3559164031,NL -3559164032,3559164087,GB -3559164088,3559164095,SE -3559164096,3559164151,GB +3559164032,3559164151,GB 3559164152,3559164159,IT 3559164160,3559166335,GB 3559166336,3559166351,CH @@ -120760,8 +139067,8 @@ 3559174944,3559174951,IT 3559174952,3559174975,GB 3559174976,3559174983,DE -3559174984,3559175071,GB -3559175072,3559175095,FR +3559174984,3559175079,GB +3559175080,3559175095,FR 3559175096,3559175127,GB 3559175128,3559175135,DE 3559175136,3559175143,FR @@ -120793,7 +139100,8 @@ 3559288832,3559289855,AZ 3559289856,3559292927,RU 3559292928,3559301119,JO -3559301120,3559309311,GB +3559301120,3559303167,DE +3559303168,3559309311,US 3559309312,3559317503,PL 3559317504,3559325695,FI 3559325696,3559333887,IT @@ -120820,13 +139128,14 @@ 3559490624,3559490687,NL 3559490688,3559490719,ES 3559490720,3559490751,NL -3559490752,3559490791,ES +3559490752,3559490783,ES +3559490784,3559490791,NL 3559490792,3559490799,BE -3559490800,3559491135,NL -3559491136,3559491199,ES -3559491200,3559491327,NL -3559491328,3559491359,ES -3559491360,3559491439,NL +3559490800,3559490815,NL +3559490816,3559491071,ES +3559491072,3559491135,NL +3559491136,3559491167,ES +3559491168,3559491439,NL 3559491440,3559491455,ES 3559491456,3559491647,NL 3559491648,3559491711,ES @@ -120834,10 +139143,9 @@ 3559491728,3559491735,ES 3559491736,3559491871,NL 3559491872,3559491903,GB -3559491904,3559491967,ES -3559491968,3559492003,NL -3559492004,3559492007,ES -3559492008,3559492013,NL +3559491904,3559491935,BE +3559491936,3559491999,ES +3559492000,3559492013,NL 3559492014,3559492015,ES 3559492016,3559492023,NL 3559492024,3559492031,ES @@ -120885,19 +139193,15 @@ 3559686144,3559694335,RU 3559694336,3559702655,DE 3559702656,3559702719,RU -3559702720,3559703039,DE -3559703040,3559703551,UA -3559703552,3559703679,IR -3559703680,3559703807,DE -3559703808,3559704063,IR -3559704064,3559710463,DE -3559710464,3559710719,IR +3559702720,3559710719,DE 3559710720,3559718911,FR 3559718912,3559727103,RU 3559727104,3559735295,NL 3559735296,3559743487,BG 3559743488,3559745535,IT -3559745536,3559747583,DE +3559745536,3559746099,DE +3559746100,3559746103,GB +3559746104,3559747583,DE 3559747584,3559751679,DK 3559751680,3559759871,IT 3559759872,3559768063,NO @@ -120905,7 +139209,11 @@ 3559776256,3559792639,RU 3559792640,3559800831,SA 3559800832,3559809023,IT -3559809024,3559817215,DE +3559809024,3559815427,DE +3559815428,3559815431,AT +3559815432,3559815595,DE +3559815596,3559815599,NL +3559815600,3559817215,DE 3559817216,3559825407,GB 3559825408,3559833599,IT 3559833600,3559849983,RU @@ -120917,9 +139225,7 @@ 3559877968,3559882751,LT 3559882752,3559890943,AZ 3559890944,3559899135,CH -3559899136,3559899391,UA -3559899392,3559899395,EE -3559899396,3559899487,UA +3559899136,3559899487,UA 3559899488,3559899519,EE 3559899520,3559899903,UA 3559899904,3559899907,EE @@ -120934,22 +139240,16 @@ 3559900424,3559900432,EE 3559900433,3559900439,UA 3559900440,3559900447,EE -3559900448,3559900471,UA -3559900472,3559900479,EE -3559900480,3559900483,UA +3559900448,3559900483,UA 3559900484,3559900487,EE 3559900488,3559900492,UA 3559900493,3559900493,EE -3559900494,3559900494,UA -3559900495,3559900495,EE -3559900496,3559900503,UA +3559900494,3559900503,UA 3559900504,3559900511,EE -3559900512,3559900519,UA -3559900520,3559900523,EE -3559900524,3559900611,UA +3559900512,3559900611,UA 3559900612,3559900624,EE -3559900625,3559900927,UA -3559900928,3559900951,EE +3559900625,3559900671,UA +3559900672,3559900951,EE 3559900952,3559900959,DE 3559900960,3559900975,SE 3559900976,3559900983,PL @@ -120964,21 +139264,27 @@ 3559902056,3559902071,UA 3559902072,3559902079,EE 3559902080,3559902175,UA -3559902176,3559902187,EE -3559902188,3559902191,UA -3559902192,3559902207,EE -3559902208,3559902975,UA -3559902976,3559903231,EE -3559903232,3559903487,UA -3559903488,3559904023,EE -3559904024,3559904255,UA -3559904256,3559904511,EE -3559904512,3559904767,UA -3559904768,3559904799,EE -3559904800,3559905019,UA -3559905020,3559905031,EE -3559905032,3559905047,UA -3559905048,3559905051,EE +3559902176,3559902183,EE +3559902184,3559902191,UA +3559902192,3559902215,EE +3559902216,3559902223,UA +3559902224,3559902239,EE +3559902240,3559902431,UA +3559902432,3559902463,EE +3559902464,3559902975,UA +3559902976,3559903631,EE +3559903632,3559903679,UA +3559903680,3559904003,EE +3559904004,3559904015,UA +3559904016,3559904043,EE +3559904044,3559904127,UA +3559904128,3559904767,EE +3559904768,3559904799,UA +3559904800,3559904815,EE +3559904816,3559904895,UA +3559904896,3559905027,EE +3559905028,3559905029,UA +3559905030,3559905051,EE 3559905052,3559905055,UA 3559905056,3559905139,EE 3559905140,3559905143,DE @@ -120995,15 +139301,22 @@ 3559905298,3559905299,UA 3559905300,3559905317,EE 3559905318,3559905319,LT -3559905320,3559905323,EE -3559905324,3559905535,UA -3559905536,3559905623,EE -3559905624,3559905631,UA +3559905320,3559905323,UA +3559905324,3559905331,EE +3559905332,3559905347,UA +3559905348,3559905349,EE +3559905350,3559905535,UA +3559905536,3559905615,EE +3559905616,3559905631,UA 3559905632,3559905903,EE 3559905904,3559905911,UA -3559905912,3559906257,EE -3559906258,3559906259,UA -3559906260,3559906975,EE +3559905912,3559906239,EE +3559906240,3559906247,UA +3559906248,3559906257,EE +3559906258,3559906263,UA +3559906264,3559906267,EE +3559906268,3559906271,UA +3559906272,3559906975,EE 3559906976,3559907071,UA 3559907072,3559907327,EE 3559907328,3559915519,FR @@ -121052,7 +139365,9 @@ 3560235008,3560243199,DE 3560243200,3560247295,BE 3560247296,3560251391,NL -3560251392,3560253439,RU +3560251392,3560252159,RU +3560252160,3560252415,CZ +3560252416,3560253439,RU 3560253440,3560253695,CZ 3560253696,3560259583,RU 3560259584,3560267775,GB @@ -121118,7 +139433,9 @@ 3560726528,3560734719,DK 3560734720,3560742911,DE 3560742912,3560751103,AT -3560751104,3560767487,DE +3560751104,3560761856,DE +3560761857,3560761857,A2 +3560761858,3560767487,DE 3560767488,3560832791,NL 3560832792,3560832799,BE 3560832800,3560833023,NL @@ -121157,16 +139474,13 @@ 3560939588,3560939591,BE 3560939592,3560939607,DE 3560939608,3560939611,IT -3560939612,3560939627,DE -3560939628,3560939631,CH -3560939632,3560939643,DE +3560939612,3560939643,DE 3560939644,3560939647,BE 3560939648,3560939655,DE 3560939656,3560939659,CH 3560939660,3560939663,DE 3560939664,3560939667,DK -3560939668,3560939675,DE -3560939676,3560939679,PL +3560939668,3560939679,DE 3560939680,3560939683,IT 3560939684,3560939687,AT 3560939688,3560939691,ES @@ -121453,8 +139767,7 @@ 3560941124,3560941127,FR 3560941128,3560941131,DE 3560941132,3560941135,GB -3560941136,3560941139,ES -3560941140,3560941147,DE +3560941136,3560941147,DE 3560941148,3560941151,IT 3560941152,3560941155,DK 3560941156,3560941159,ES @@ -121824,9 +140137,7 @@ 3560942952,3560942955,ES 3560942956,3560942959,DE 3560942960,3560942963,GB -3560942964,3560942975,DE -3560942976,3560942979,IT -3560942980,3560942983,DE +3560942964,3560942983,DE 3560942984,3560942987,BE 3560942988,3560942999,IT 3560943000,3560943003,PL @@ -121848,8 +140159,8 @@ 3560943076,3560943079,ES 3560943080,3560943095,DE 3560943096,3560943099,PL -3560943100,3560943109,DE -3560943110,3560943111,ES +3560943100,3560943110,DE +3560943111,3560943111,ES 3560943112,3560943113,DE 3560943114,3560943115,ES 3560943116,3560943116,DK @@ -121915,15 +140226,14 @@ 3560943189,3560943192,DE 3560943193,3560943193,ES 3560943194,3560943194,AT -3560943195,3560943195,PL +3560943195,3560943195,DE 3560943196,3560943197,IT 3560943198,3560943198,DE 3560943199,3560943199,PT 3560943200,3560943200,AT 3560943201,3560943201,IT 3560943202,3560943202,IL -3560943203,3560943203,DE -3560943204,3560943204,CH +3560943203,3560943204,DE 3560943205,3560943205,IT 3560943206,3560943207,DE 3560943208,3560943208,AT @@ -122448,7 +140758,7 @@ 3560943861,3560943865,DE 3560943866,3560943866,BE 3560943867,3560943867,ES -3560943868,3560943868,FR +3560943868,3560943868,DE 3560943869,3560943869,LU 3560943870,3560943871,DE 3560943872,3560943875,BR @@ -123126,7 +141436,13 @@ 3560951116,3560951119,SE 3560951120,3560951123,CZ 3560951124,3560951127,GB -3560951128,3560951195,SE +3560951128,3560951131,SE +3560951132,3560951135,ES +3560951136,3560951143,SE +3560951144,3560951147,BR +3560951148,3560951155,SE +3560951156,3560951159,US +3560951160,3560951195,SE 3560951196,3560951199,DK 3560951200,3560951203,SE 3560951204,3560951207,AE @@ -123158,7 +141474,9 @@ 3560951445,3560951446,HU 3560951447,3560951447,SE 3560951448,3560951451,FR -3560951452,3560951551,SE +3560951452,3560951459,SE +3560951460,3560951463,FI +3560951464,3560951551,SE 3560951552,3560951555,ES 3560951556,3560951559,NO 3560951560,3560951583,SE @@ -123187,20 +141505,22 @@ 3560951944,3560951947,NO 3560951948,3560951995,SE 3560951996,3560951999,US -3560952000,3560952223,SE +3560952000,3560952039,SE +3560952040,3560952043,FI +3560952044,3560952223,SE 3560952224,3560952227,CZ 3560952228,3560952231,SE 3560952232,3560952235,US 3560952236,3560952239,PT 3560952240,3560952255,SE 3560952256,3560952259,PL -3560952260,3560952431,SE +3560952260,3560952295,SE +3560952296,3560952299,NL +3560952300,3560952431,SE 3560952432,3560952435,DK 3560952436,3560953103,SE 3560953104,3560953119,JP -3560953120,3560954239,SE -3560954240,3560954367,AX -3560954368,3560955903,SE +3560953120,3560955903,SE 3560955904,3560964095,BE 3560964096,3560996863,NL 3560996864,3561005055,GB @@ -123237,10 +141557,12 @@ 3561206656,3561206663,BE 3561206664,3561209855,NL 3561209856,3561214975,GB -3561214976,3561215230,ES -3561215231,3561218047,GB +3561214976,3561215231,ES +3561215232,3561218047,GB 3561218048,3561226239,AT -3561226240,3561234431,FI +3561226240,3561228663,FI +3561228664,3561228671,AX +3561228672,3561234431,FI 3561234432,3561242623,TR 3561242624,3561259007,DE 3561259008,3561267199,IL @@ -123259,7 +141581,9 @@ 3561381888,3561382479,AT 3561382480,3561382495,DE 3561382496,3561390079,AT -3561390080,3561396223,BG +3561390080,3561395455,BG +3561395456,3561395711,GR +3561395712,3561396223,BG 3561396224,3561396480,MK 3561396481,3561398271,BG 3561398272,3561406463,LV @@ -123342,7 +141666,9 @@ 3561562112,3561570303,ES 3561570304,3561578495,AM 3561578496,3561586687,RU -3561586688,3561594879,BG +3561586688,3561590591,BG +3561590592,3561590623,CY +3561590624,3561594879,BG 3561594880,3561594935,SE 3561594936,3561594939,DK 3561594940,3561594975,SE @@ -123375,15 +141701,19 @@ 3561611560,3561611567,FR 3561611568,3561612287,GB 3561612288,3561612415,FR -3561612416,3561614175,GB +3561612416,3561613311,GB +3561613312,3561613319,FR +3561613320,3561613343,GB +3561613344,3561613407,FR +3561613408,3561614175,GB 3561614176,3561614199,FR 3561614200,3561614335,GB 3561614336,3561614591,FR 3561614592,3561615359,GB 3561615360,3561615615,FR 3561615616,3561615871,IT -3561615872,3561616383,FR -3561616384,3561616495,GB +3561615872,3561616415,FR +3561616416,3561616495,GB 3561616496,3561616543,FR 3561616544,3561616559,GB 3561616560,3561616575,FR @@ -123462,31 +141792,30 @@ 3561923424,3561923551,NL 3561923552,3561923647,GB 3561923648,3561923679,NL -3561923680,3561923711,GB -3561923712,3561923743,FR -3561923744,3561923775,NL -3561923776,3561923839,GB +3561923680,3561923839,GB 3561923840,3561924351,NL 3561924352,3561924607,GB -3561924608,3561924647,NL -3561924648,3561924655,GB -3561924656,3561924671,NL -3561924672,3561924679,GB +3561924608,3561924639,NL +3561924640,3561924655,GB +3561924656,3561924663,NL +3561924664,3561924679,GB 3561924680,3561924687,NL 3561924688,3561924703,GB 3561924704,3561924719,NL 3561924720,3561924895,GB 3561924896,3561924903,FR 3561924904,3561924911,GB -3561924912,3561925039,NL +3561924912,3561924927,NL +3561924928,3561924943,GB +3561924944,3561925039,NL 3561925040,3561925087,GB 3561925088,3561925119,NL 3561925120,3561926943,GB 3561926944,3561926975,NL 3561926976,3561926983,GB 3561926984,3561926999,NL -3561927000,3561927007,GB -3561927008,3561927039,NL +3561927000,3561927015,GB +3561927016,3561927039,NL 3561927040,3561927103,GB 3561927104,3561927167,NL 3561927168,3561927551,GB @@ -123516,12 +141845,14 @@ 3561930680,3561930719,NL 3561930720,3561930727,GB 3561930728,3561938943,NL -3561938944,3561940991,IE +3561938944,3561939832,IE +3561939833,3561939835,GB +3561939836,3561940991,IE 3561940992,3561942015,GB -3561942016,3561947135,IE -3561947136,3561963143,DE -3561963144,3561963151,AU -3561963152,3561963519,DE +3561942016,3561942847,IE +3561942848,3561942911,GB +3561942912,3561947135,IE +3561947136,3561963519,DE 3561963520,3561971711,BE 3561971712,3561975807,CZ 3561975808,3561979903,UA @@ -123560,159 +141891,39 @@ 3562086400,3562087423,SE 3562087424,3562088447,GB 3562088448,3562094591,SE -3562094592,3562094975,GB -3562094976,3562095775,FR -3562095776,3562095807,GB -3562095808,3562095887,FR -3562095888,3562095903,GB -3562095904,3562096383,FR -3562096384,3562096639,GB -3562096640,3562096767,FR -3562096768,3562096927,GB -3562096928,3562097055,FR -3562097056,3562097151,GB -3562097152,3562097687,FR -3562097688,3562097695,GB -3562097696,3562097727,FR -3562097728,3562097791,GB -3562097792,3562097919,FR -3562097920,3562098175,GB -3562098176,3562098207,FR -3562098208,3562098223,GB -3562098224,3562098271,FR -3562098272,3562098367,GB +3562094592,3562095607,GB +3562095608,3562095615,FR +3562095616,3562096063,GB +3562096064,3562096127,FR +3562096128,3562098367,GB 3562098368,3562098375,FR -3562098376,3562098383,GB -3562098384,3562098431,FR -3562098432,3562098687,GB -3562098688,3562098879,FR -3562098880,3562098895,BE -3562098896,3562098903,GB -3562098904,3562098911,FR -3562098912,3562099199,GB -3562099200,3562099359,FR -3562099360,3562099391,GB -3562099392,3562099423,FR -3562099424,3562099519,GB -3562099520,3562099583,FR -3562099584,3562099615,GB -3562099616,3562099647,FR -3562099648,3562099903,GB -3562099904,3562099935,FR -3562099936,3562100223,GB -3562100224,3562100351,FR -3562100352,3562100415,GB -3562100416,3562100479,FR -3562100480,3562100543,GB -3562100544,3562100575,FR -3562100576,3562100703,GB -3562100704,3562100735,FR -3562100736,3562100991,GB -3562100992,3562101055,FR -3562101056,3562101087,GB -3562101088,3562101215,FR -3562101216,3562101375,GB -3562101376,3562101439,FR -3562101440,3562101471,GB -3562101472,3562101535,FR -3562101536,3562101631,GB -3562101632,3562101647,FR -3562101648,3562101663,GB -3562101664,3562101695,FR -3562101696,3562101759,GB -3562101760,3562101887,FR -3562101888,3562101951,GB -3562101952,3562101983,FR -3562101984,3562102015,GB -3562102016,3562102111,FR -3562102112,3562102143,GB -3562102144,3562102335,FR -3562102336,3562102367,GB -3562102368,3562102415,FR -3562102416,3562102431,NL -3562102432,3562102463,DE -3562102464,3562102655,FR -3562102656,3562102719,GB -3562102720,3562102735,FR -3562102736,3562102751,GB -3562102752,3562102783,FR -3562102784,3562103039,GB -3562103040,3562103295,FR -3562103296,3562103423,GB -3562103424,3562103647,FR -3562103648,3562103711,GB -3562103712,3562103743,FR -3562103744,3562103807,GB -3562103808,3562103903,FR -3562103904,3562103967,GB -3562103968,3562103999,FR -3562104000,3562104351,GB -3562104352,3562104383,FR -3562104384,3562104447,GB -3562104448,3562104511,FR -3562104512,3562104831,GB -3562104832,3562104927,FR -3562104928,3562104959,GB -3562104960,3562105007,FR -3562105008,3562105119,GB -3562105120,3562105151,FR -3562105152,3562105167,GB -3562105168,3562105199,FR -3562105200,3562105247,GB -3562105248,3562105343,FR -3562105344,3562105471,GB -3562105472,3562105487,FR -3562105488,3562105503,GB -3562105504,3562105535,DE -3562105536,3562105567,FR -3562105568,3562105599,GB +3562098376,3562101471,GB +3562101472,3562101479,FR +3562101480,3562101631,GB +3562101632,3562101639,FR +3562101640,3562104991,GB +3562104992,3562104999,FR +3562105000,3562105599,GB 3562105600,3562105855,FR -3562105856,3562106143,GB -3562106144,3562106159,FR -3562106160,3562106191,GB -3562106192,3562106271,FR -3562106272,3562106527,GB -3562106528,3562106559,FR -3562106560,3562106623,GB -3562106624,3562106911,FR -3562106912,3562106927,GB -3562106928,3562106959,FR -3562106960,3562107007,GB -3562107008,3562107103,FR -3562107104,3562107119,GB -3562107120,3562107135,FR -3562107136,3562107231,GB +3562105856,3562106879,GB +3562106880,3562106911,FR +3562106912,3562106943,GB +3562106944,3562106959,FR +3562106960,3562107071,GB +3562107072,3562107103,FR +3562107104,3562107231,GB 3562107232,3562107263,FR -3562107264,3562107327,GB -3562107328,3562107391,FR -3562107392,3562107503,GB -3562107504,3562107583,FR -3562107584,3562107647,GB -3562107648,3562107711,FR -3562107712,3562107775,GB -3562107776,3562107807,FR -3562107808,3562107887,GB -3562107888,3562107967,FR -3562107968,3562108031,GB -3562108032,3562108063,FR -3562108064,3562108159,GB -3562108160,3562108415,FR -3562108416,3562108959,GB -3562108960,3562108991,FR -3562108992,3562109119,GB -3562109120,3562109183,FR -3562109184,3562109567,GB +3562107264,3562107519,GB +3562107520,3562107583,FR +3562107584,3562108959,GB +3562108960,3562108975,FR +3562108976,3562109567,GB 3562109568,3562109583,FR -3562109584,3562109759,GB -3562109760,3562109791,FR -3562109792,3562109823,GB -3562109824,3562110207,FR -3562110208,3562110399,GB -3562110400,3562110719,FR -3562110720,3562110943,GB -3562110944,3562110959,FR -3562110960,3562110967,GB -3562110968,3562110975,FR +3562109584,3562110399,GB +3562110400,3562110431,FR +3562110432,3562110463,GB +3562110464,3562110719,FR +3562110720,3562110975,GB 3562110976,3562143743,ES 3562143744,3562151935,GB 3562151936,3562160127,DE @@ -123729,16 +141940,17 @@ 3562192896,3562201087,UA 3562201088,3562209279,DE 3562209280,3562217471,RU -3562217472,3562220287,DE -3562220288,3562220799,CH -3562220800,3562225663,DE +3562217472,3562225663,DE 3562225664,3562233855,NL 3562233856,3562242047,FI 3562242048,3562258431,FR 3562258432,3562263975,NL 3562263976,3562263983,BE 3562263984,3562283007,NL -3562283008,3562291199,IT +3562283008,3562285055,IT +3562285056,3562287103,IE +3562287104,3562289151,IT +3562289152,3562291199,FR 3562291200,3562307583,GB 3562307584,3562315775,NL 3562315776,3562321231,GB @@ -123760,7 +141972,8 @@ 3562373120,3562381311,FR 3562381312,3562389503,SI 3562389504,3562395647,GH -3562395648,3562396159,TZ +3562395648,3562395903,BR +3562395904,3562396159,TZ 3562396160,3562397695,SZ 3562397696,3562405887,GB 3562405888,3562414079,FI @@ -123781,9 +141994,7 @@ 3562545152,3562553343,GB 3562553344,3562561535,DK 3562561536,3562569727,UG -3562569728,3562572143,DE -3562572144,3562572159,LU -3562572160,3562572223,DE +3562569728,3562572223,DE 3562572224,3562572239,US 3562572240,3562572543,DE 3562572544,3562572799,LU @@ -123805,9 +142016,7 @@ 3562668032,3562676223,IT 3562676224,3562684415,UA 3562684416,3562692607,FI -3562692608,3562695375,UA -3562695376,3562695379,CZ -3562695380,3562700799,UA +3562692608,3562700799,UA 3562700800,3562708991,DE 3562708992,3562717183,UA 3562717184,3562725375,CH @@ -123852,10 +142061,7 @@ 3563005952,3563006463,TR 3563006464,3563006591,DE 3563006592,3563006719,CA -3563006720,3563006729,DE -3563006730,3563006847,CN -3563006848,3563006911,US -3563006912,3563007487,DE +3563006720,3563007487,DE 3563007488,3563007999,TR 3563008000,3563008255,DE 3563008256,3563008511,PL @@ -123863,11 +142069,7 @@ 3563009280,3563009535,LT 3563009536,3563009791,DE 3563009792,3563010047,HK -3563010048,3563010063,DE -3563010064,3563010079,KZ -3563010080,3563010303,DE -3563010304,3563010559,NL -3563010560,3563010815,DE +3563010048,3563010815,DE 3563010816,3563011071,PL 3563011072,3563011583,DE 3563011584,3563011839,ES @@ -123880,15 +142082,12 @@ 3563053056,3563061247,GB 3563061248,3563061759,GH 3563061760,3563062527,NG -3563062528,3563067391,GH -3563067392,3563067519,MZ -3563067520,3563067647,GH -3563067648,3563067903,MZ -3563067904,3563068415,GH -3563068416,3563069183,NG -3563069184,3563069439,GH +3563062528,3563065599,GH +3563065600,3563067391,NG +3563067392,3563068415,MZ +3563068416,3563069439,NG 3563069440,3563077631,HU -3563077632,3563085823,SE +3563077632,3563085823,KZ 3563085824,3563094015,RU 3563094016,3563096255,DE 3563096256,3563096287,GB @@ -123903,6 +142102,7 @@ 3563097344,3563102207,DE 3563102208,3563110399,CZ 3563110400,3563118591,RU +3563118592,3563126783,PL 3563126784,3563134975,KG 3563134976,3563143167,IT 3563143168,3563151359,GB @@ -123929,13 +142129,7 @@ 3563356160,3563364351,RU 3563364352,3563372543,BE 3563372544,3563380735,SA -3563380736,3563381951,GB -3563381952,3563381959,IT -3563381960,3563382383,GB -3563382384,3563382391,AU -3563382392,3563382495,GB -3563382496,3563382503,AT -3563382504,3563382583,GB +3563380736,3563382583,GB 3563382584,3563382587,AT 3563382588,3563382589,DE 3563382590,3563382767,GB @@ -124089,29 +142283,37 @@ 3563848320,3563848327,ES 3563848328,3563848383,NL 3563848384,3563848447,ES -3563848448,3563848495,NL -3563848496,3563848511,ES -3563848512,3563848575,NL +3563848448,3563848575,NL 3563848576,3563848583,ES -3563848584,3563848655,NL -3563848656,3563848703,ES +3563848584,3563848671,NL +3563848672,3563848703,ES 3563848704,3563848979,NL 3563848980,3563848983,ES 3563848984,3563848987,NL -3563848988,3563848999,ES -3563849000,3563849151,NL +3563848988,3563849007,ES +3563849008,3563849151,NL 3563849152,3563849183,ES 3563849184,3563849191,NL 3563849192,3563849215,ES 3563849216,3563849727,GB 3563849728,3563849999,NL 3563850000,3563850007,FI -3563850008,3563851023,NL -3563851024,3563851135,ES +3563850008,3563850015,NL +3563850016,3563850047,ES +3563850048,3563850239,NL +3563850240,3563850751,GB +3563850752,3563850815,NL +3563850816,3563850831,ES +3563850832,3563850847,NL +3563850848,3563850879,ES +3563850880,3563851007,NL +3563851008,3563851135,ES 3563851136,3563851839,NL 3563851840,3563851903,ES 3563851904,3563852031,NL -3563852032,3563852095,ES +3563852032,3563852071,ES +3563852072,3563852079,NL +3563852080,3563852095,ES 3563852096,3563852191,NL 3563852192,3563852207,GB 3563852208,3563852216,NL @@ -124123,9 +142325,11 @@ 3563853328,3563853375,NL 3563853376,3563853439,ES 3563853440,3563853567,NL -3563853568,3563854103,ES -3563854104,3563854175,NL -3563854176,3563854239,ES +3563853568,3563854079,ES +3563854080,3563854095,NL +3563854096,3563854103,ES +3563854104,3563854191,NL +3563854192,3563854239,ES 3563854240,3563854259,NL 3563854260,3563854591,ES 3563854592,3563854847,NL @@ -124165,20 +142369,24 @@ 3564024096,3564024103,IT 3564024104,3564024135,GB 3564024136,3564024143,IT -3564024144,3564024447,GB -3564024448,3564024463,IT -3564024464,3564027903,GB -3564027904,3564041215,DE +3564024144,3564027903,GB +3564027904,3564036351,DE +3564036352,3564039423,A2 +3564039424,3564039679,DE +3564039680,3564041215,A2 3564041216,3564041727,RU -3564041728,3564044031,DE -3564044032,3564044287,GB +3564041728,3564043263,A2 +3564043264,3564043519,DE +3564043520,3564044287,A2 3564044288,3564052479,CZ 3564052480,3564060671,GB 3564060672,3564068863,RU 3564068864,3564077055,ES 3564077056,3564093439,GB 3564093440,3564101631,UA -3564101632,3564109823,DE +3564101632,3564103743,DE +3564103744,3564103759,A2 +3564103760,3564109823,DE 3564109824,3564126207,SE 3564126208,3564128287,IT 3564128288,3564128303,BG @@ -124237,131 +142445,23 @@ 3564314624,3564322815,GB 3564322816,3564331007,IT 3564331008,3564339199,ES -3564339200,3564339967,GB -3564339968,3564339999,NL -3564340000,3564340479,GB -3564340480,3564340735,NL -3564340736,3564340991,GB -3564340992,3564341119,NL -3564341120,3564341183,GB -3564341184,3564341247,NL -3564341248,3564342015,GB -3564342016,3564342063,NL -3564342064,3564342335,GB -3564342336,3564342431,NL -3564342432,3564343583,GB -3564343584,3564343615,NL -3564343616,3564343679,GB -3564343680,3564343743,NL -3564343744,3564343775,GB -3564343776,3564343807,NL -3564343808,3564343839,GB -3564343840,3564343871,NL -3564343872,3564343967,GB -3564343968,3564343999,NL -3564344000,3564344031,GB -3564344032,3564344215,NL -3564344216,3564344223,GB -3564344224,3564344231,NL -3564344232,3564344239,GB -3564344240,3564344247,NL -3564344248,3564344895,GB -3564344896,3564344959,NL -3564344960,3564345023,GB -3564345024,3564345087,NL -3564345088,3564345127,GB -3564345128,3564345131,NL -3564345132,3564345135,GB -3564345136,3564345151,NL -3564345152,3564345247,GB -3564345248,3564345343,NL -3564345344,3564346143,GB -3564346144,3564346175,NL -3564346176,3564346207,GB -3564346208,3564346239,NL -3564346240,3564346271,GB -3564346272,3564346303,NL -3564346304,3564347391,GB -3564347392,3564347583,NL -3564347584,3564348191,GB -3564348192,3564348239,NL -3564348240,3564348255,GB -3564348256,3564348287,NL -3564348288,3564348399,GB -3564348400,3564348415,NL -3564348416,3564348479,GB -3564348480,3564348495,NL -3564348496,3564348527,GB -3564348528,3564348543,NL -3564348544,3564348559,GB -3564348560,3564348639,NL -3564348640,3564348927,GB -3564348928,3564348991,NL -3564348992,3564349183,GB -3564349184,3564349311,NL -3564349312,3564349375,GB -3564349376,3564349407,NL -3564349408,3564349503,GB -3564349504,3564349583,NL -3564349584,3564349615,GB -3564349616,3564349695,NL -3564349696,3564350335,GB -3564350336,3564350351,NL -3564350352,3564350367,GB -3564350368,3564350719,NL -3564350720,3564351231,GB -3564351232,3564351295,NL -3564351296,3564351375,GB -3564351376,3564351391,NL -3564351392,3564351439,GB +3564339200,3564339991,GB +3564339992,3564339999,NL +3564340000,3564344031,GB +3564344032,3564344047,NL +3564344048,3564345143,GB +3564345144,3564345151,NL +3564345152,3564349615,GB +3564349616,3564349631,NL +3564349632,3564350399,GB +3564350400,3564350431,NL +3564350432,3564351439,GB 3564351440,3564351455,NL -3564351456,3564351471,GB -3564351472,3564351487,NL -3564351488,3564351503,GB -3564351504,3564351679,NL -3564351680,3564351999,GB -3564352000,3564352063,NL -3564352064,3564352095,GB -3564352096,3564352127,NL -3564352128,3564352191,GB -3564352192,3564352511,NL -3564352512,3564352543,GB -3564352544,3564352575,NL -3564352576,3564352735,GB -3564352736,3564352767,NL -3564352768,3564353023,GB -3564353024,3564353087,NL -3564353088,3564353111,GB -3564353112,3564353151,NL -3564353152,3564353199,GB -3564353200,3564353215,NL -3564353216,3564353223,GB -3564353224,3564353263,NL -3564353264,3564353295,GB -3564353296,3564353311,NL -3564353312,3564353343,GB -3564353344,3564353359,NL -3564353360,3564353407,GB -3564353408,3564353487,NL -3564353488,3564353503,GB -3564353504,3564353535,NL -3564353536,3564353855,GB -3564353856,3564353919,NL -3564353920,3564354063,GB -3564354064,3564354079,NL -3564354080,3564354303,GB -3564354304,3564354335,NL -3564354336,3564354367,GB -3564354368,3564354431,NL -3564354432,3564354495,GB -3564354496,3564354559,NL -3564354560,3564354943,GB -3564354944,3564355039,NL -3564355040,3564355135,GB -3564355136,3564355199,NL -3564355200,3564355295,GB -3564355296,3564355311,NL -3564355312,3564355583,GB +3564351456,3564351551,GB +3564351552,3564351615,NL +3564351616,3564353207,GB +3564353208,3564353215,NL +3564353216,3564355583,GB 3564355584,3564363775,NL 3564363776,3564371967,UA 3564371968,3564380159,DE @@ -124447,16 +142547,12 @@ 3564544000,3564560383,DE 3564560384,3564560391,US 3564560392,3564560399,CA -3564560400,3564560415,US -3564560416,3564560511,GB +3564560400,3564560431,US +3564560432,3564560511,GB 3564560512,3564560527,US 3564560528,3564560543,GB 3564560544,3564560607,US -3564560608,3564560927,GB -3564560928,3564560959,US -3564560960,3564561039,GB -3564561040,3564561055,US -3564561056,3564561071,GB +3564560608,3564561071,GB 3564561072,3564561087,US 3564561088,3564561151,GB 3564561152,3564561407,US @@ -124465,8 +142561,7 @@ 3564561672,3564561679,GB 3564561680,3564561687,US 3564561688,3564561695,GB -3564561696,3564561791,US -3564561792,3564561919,GB +3564561696,3564561919,US 3564561920,3564562431,CH 3564562432,3564562687,GB 3564562688,3564562831,US @@ -124476,13 +142571,19 @@ 3564563712,3564563967,US 3564563968,3564564223,GB 3564564224,3564564239,US -3564564240,3564565231,GB +3564564240,3564564351,GB +3564564352,3564564415,US +3564564416,3564565231,GB 3564565232,3564565239,US 3564565240,3564565247,GB 3564565248,3564565279,US 3564565280,3564565327,GB -3564565328,3564565407,US -3564565408,3564566047,GB +3564565328,3564565439,US +3564565440,3564565567,GB +3564565568,3564565631,US +3564565632,3564565663,GB +3564565664,3564565679,US +3564565680,3564566047,GB 3564566048,3564566079,US 3564566080,3564566143,GB 3564566144,3564566175,US @@ -124498,8 +142599,8 @@ 3564567184,3564567199,US 3564567200,3564567247,GB 3564567248,3564567255,US -3564567256,3564567295,GB -3564567296,3564567551,US +3564567256,3564567263,GB +3564567264,3564567551,US 3564567552,3564567807,GB 3564567808,3564567935,US 3564567936,3564568039,GB @@ -124522,7 +142623,11 @@ 3564571592,3564571599,FR 3564571600,3564572271,GB 3564572272,3564572287,DE -3564572288,3564576767,GB +3564572288,3564572415,GB +3564572416,3564572543,DE +3564572544,3564573695,GB +3564573696,3564574079,DE +3564574080,3564576767,GB 3564576768,3564584959,RU 3564584960,3564593151,SA 3564593152,3564601343,RU @@ -124580,13 +142685,15 @@ 3564736872,3564736887,GB 3564736888,3564736895,DE 3564736896,3564736903,GB -3564736904,3564736911,DE -3564736912,3564736959,GB +3564736904,3564736927,DE +3564736928,3564736959,GB 3564736960,3564736967,DE 3564736968,3564736975,GB 3564736976,3564736991,DE 3564736992,3564737023,GB -3564737024,3564739383,DE +3564737024,3564739335,DE +3564739336,3564739343,GB +3564739344,3564739383,DE 3564739384,3564739391,ES 3564739392,3564739495,DE 3564739496,3564739503,GB @@ -124624,8 +142731,8 @@ 3564855296,3564862863,DE 3564862864,3564862871,AE 3564862872,3564863487,DE -3564863488,3564880935,NL -3564880936,3564880943,GB +3564863488,3564880927,NL +3564880928,3564880943,GB 3564880944,3564880951,NL 3564880952,3564880967,FR 3564880968,3564880975,NL @@ -124639,31 +142746,25 @@ 3564881232,3564881247,NL 3564881248,3564881343,GB 3564881344,3564881359,NL -3564881360,3564881375,GB -3564881376,3564881439,NL +3564881360,3564881391,GB +3564881392,3564881439,NL 3564881440,3564881455,GB 3564881456,3564881463,NL 3564881464,3564881471,GB 3564881472,3564881551,NL 3564881552,3564881599,GB -3564881600,3564881631,NL -3564881632,3564881663,GB +3564881600,3564881615,NL +3564881616,3564881663,GB 3564881664,3564881727,NL 3564881728,3564881935,GB 3564881936,3564881939,NL -3564881940,3564881983,GB -3564881984,3564881991,NL -3564881992,3564881999,GB +3564881940,3564881999,GB 3564882000,3564882079,NL 3564882080,3564882095,GB 3564882096,3564882119,NL -3564882120,3564882127,GB -3564882128,3564882135,NL -3564882136,3564882143,GB +3564882120,3564882143,GB 3564882144,3564882239,NL -3564882240,3564882431,GB -3564882432,3564882943,NL -3564882944,3564883007,GB +3564882240,3564883007,GB 3564883008,3564883039,NL 3564883040,3564883071,GB 3564883072,3564883087,NL @@ -124677,9 +142778,7 @@ 3564884336,3564884343,NL 3564884344,3564884359,GB 3564884360,3564884367,NL -3564884368,3564884375,GB -3564884376,3564884399,NL -3564884400,3564884407,GB +3564884368,3564884407,GB 3564884408,3564884415,NL 3564884416,3564884431,GB 3564884432,3564884439,NL @@ -124839,8 +142938,8 @@ 3564896256,3564904447,RU 3564904448,3564912639,DE 3564912640,3564920831,BG -3564920832,3564922879,ES -3564922880,3564929023,US +3564920832,3564921855,ES +3564921856,3564929023,US 3564929024,3564937215,AT 3564937216,3564945407,RS 3564945408,3564947175,GB @@ -125038,7 +143137,8 @@ 3564961320,3564961791,AT 3564961792,3564969983,TR 3564969984,3564972607,DE -3564972608,3564972631,AT +3564972608,3564972623,AT +3564972624,3564972631,DE 3564972632,3564972639,LI 3564972640,3564978175,DE 3564978176,3564986367,GB @@ -125046,7 +143146,9 @@ 3564994560,3565002751,NL 3565002752,3565007247,NO 3565007248,3565007251,SE -3565007252,3565027327,NO +3565007252,3565012663,NO +3565012664,3565012667,SE +3565012668,3565027327,NO 3565027328,3565035519,PL 3565035520,3565036287,IE 3565036288,3565036543,GB @@ -125057,7 +143159,11 @@ 3565037568,3565037823,IE 3565037824,3565038591,GB 3565038592,3565038663,IE -3565038664,3565039615,GB +3565038664,3565038687,GB +3565038688,3565038719,IE +3565038720,3565038727,GB +3565038728,3565038855,IE +3565038856,3565039615,GB 3565039616,3565042175,IE 3565042176,3565043711,GB 3565043712,3565047807,AT @@ -125068,13 +143174,11 @@ 3565068288,3565076479,CH 3565076480,3565084671,DE 3565084672,3565092863,IS -3565092864,3565093391,GB -3565093392,3565093399,NO -3565093400,3565096759,GB +3565092864,3565096759,GB 3565096760,3565096767,IE -3565096768,3565099647,GB -3565099648,3565099651,US -3565099652,3565101055,GB +3565096768,3565097151,GB +3565097152,3565097167,TZ +3565097168,3565101055,GB 3565101056,3565109247,DE 3565109248,3565117439,PL 3565117440,3565125631,TR @@ -125223,13 +143327,7 @@ 3565688320,3565748223,NL 3565748224,3565752407,GB 3565752408,3565752415,EU -3565752416,3565752463,GB -3565752464,3565752471,EU -3565752472,3565752479,GB -3565752480,3565752487,EU -3565752488,3565752535,GB -3565752536,3565752543,EU -3565752544,3565752839,GB +3565752416,3565752839,GB 3565752840,3565752855,EU 3565752856,3565752879,GB 3565752880,3565752887,EU @@ -125419,22 +143517,16 @@ 3566739456,3566747647,RU 3566747648,3566764031,GR 3566764032,3566796799,AT -3566796800,3566803455,NL -3566803456,3566803711,A2 -3566803712,3566816511,NL +3566796800,3566816511,NL 3566816512,3566816767,US 3566816768,3566862335,NL 3566862336,3566895103,TR -3566895104,3566897279,KZ -3566897280,3566897311,KG -3566897312,3566927871,KZ +3566895104,3566927871,KZ 3566927872,3566993407,FR 3566993408,3567058943,TR 3567058944,3567103047,FR 3567103048,3567103055,IT -3567103056,3567108255,FR -3567108256,3567108263,SE -3567108264,3567124479,FR +3567103056,3567124479,FR 3567124480,3567124991,EU 3567124992,3567125023,GB 3567125024,3567125247,EU @@ -125592,7 +143684,9 @@ 3567352760,3567352767,NL 3567352768,3567353855,GB 3567353856,3567386623,CH -3567386624,3567386879,GB +3567386624,3567386671,GB +3567386672,3567386687,DE +3567386688,3567386879,GB 3567386880,3567386883,DE 3567386884,3567386975,GB 3567386976,3567387007,DE @@ -125609,9 +143703,7 @@ 3567388032,3567388159,GB 3567388160,3567388399,DE 3567388400,3567388415,GB -3567388416,3567388527,DE -3567388528,3567388543,GB -3567388544,3567388607,DE +3567388416,3567388607,DE 3567388608,3567388671,GB 3567388672,3567388927,CZ 3567388928,3567389183,DE @@ -125631,7 +143723,10 @@ 3567392768,3567393023,DE 3567393024,3567393279,FR 3567393280,3567393535,HU -3567393536,3567394975,GB +3567393536,3567393791,GB +3567393792,3567394047,SI +3567394048,3567394175,HR +3567394176,3567394975,GB 3567394976,3567395007,DE 3567395008,3567395071,GB 3567395072,3567395327,DE @@ -125677,22 +143772,16 @@ 3567403008,3567419391,IT 3567419392,3567427583,SA 3567427584,3567435775,SE -3567435776,3567436543,GB -3567436544,3567436595,IN -3567436596,3567436599,GB -3567436600,3567436603,IN -3567436604,3567436799,GB -3567436800,3567436895,IN -3567436896,3567441375,GB +3567435776,3567441375,GB 3567441376,3567441407,NL 3567441408,3567444223,GB 3567444224,3567444479,TZ 3567444480,3567445951,GB 3567445952,3567445983,NL -3567445984,3567452031,GB -3567452032,3567452047,GR -3567452048,3567452159,GB -3567452160,3567507455,ES +3567445984,3567452159,GB +3567452160,3567463135,ES +3567463136,3567463151,IT +3567463152,3567507455,ES 3567507456,3567509503,NL 3567509504,3567512575,ES 3567512576,3567513599,NL @@ -125715,8 +143804,9 @@ 3567587328,3567591423,GB 3567591424,3567599615,IT 3567599616,3567615999,NL -3567616000,3567616511,BD -3567616512,3567616527,A2 +3567616000,3567616255,CG +3567616256,3567616263,CD +3567616264,3567616527,A2 3567616528,3567616535,GB 3567616536,3567616575,A2 3567616576,3567616583,GB @@ -125754,8 +143844,14 @@ 3567620960,3567620991,A2 3567620992,3567621055,NG 3567621056,3567621119,KE -3567621120,3567621375,GB -3567621376,3567621631,A2 +3567621120,3567621263,GB +3567621264,3567621279,CG +3567621280,3567621375,GB +3567621376,3567621391,A2 +3567621392,3567621399,CG +3567621400,3567621407,A2 +3567621408,3567621423,CG +3567621424,3567621631,A2 3567621632,3567621887,ID 3567621888,3567621895,TZ 3567621896,3567621903,KE @@ -125796,7 +143892,10 @@ 3567626240,3567627008,NG 3567627009,3567629311,A2 3567629312,3567630207,TJ -3567630208,3567647487,A2 +3567630208,3567635711,A2 +3567635712,3567635839,CG +3567635840,3567635967,CD +3567635968,3567647487,A2 3567647488,3567648767,GB 3567648768,3567665151,BE 3567665152,3567673343,ES @@ -125862,9 +143961,7 @@ 3568631808,3568697343,SE 3568697344,3568730111,PL 3568730112,3568746495,NL -3568746496,3568752895,FI -3568752896,3568752959,EE -3568752960,3568762879,FI +3568746496,3568762879,FI 3568762880,3568795647,AT 3568795648,3568803839,GB 3568803840,3568812031,IT @@ -125875,9 +143972,7 @@ 3568848792,3568848799,PL 3568848800,3568848871,DE 3568848872,3568848879,GB -3568848880,3568876159,DE -3568876160,3568876287,ES -3568876288,3568915791,DE +3568848880,3568915791,DE 3568915792,3568915807,LU 3568915808,3568916399,DE 3568916400,3568916407,IT @@ -125892,7 +143987,9 @@ 3569068544,3569068671,BG 3569068672,3569068951,GB 3569068952,3569068991,DE -3569068992,3569075711,GB +3569068992,3569074879,GB +3569074880,3569074887,IE +3569074888,3569075711,GB 3569075712,3569075839,FR 3569075840,3569083903,GB 3569083904,3569084159,US @@ -125915,7 +144012,9 @@ 3569241584,3569241599,LU 3569241600,3569241887,BE 3569241888,3569241903,LU -3569241904,3569242047,BE +3569241904,3569241907,BE +3569241908,3569241911,LU +3569241912,3569242047,BE 3569242048,3569242111,LU 3569242112,3569243903,BE 3569243904,3569244031,NL @@ -125944,18 +144043,14 @@ 3569271912,3569271919,DE 3569271920,3569271935,BE 3569271936,3569271943,IT -3569271944,3569272063,BE -3569272064,3569272079,LU -3569272080,3569273167,BE +3569271944,3569273167,BE 3569273168,3569273183,LU 3569273184,3569273791,BE 3569273792,3569273823,LU -3569273824,3569273935,BE -3569273936,3569273951,LI -3569273952,3569274303,BE +3569273824,3569274303,BE 3569274304,3569274311,LU -3569274312,3569274335,BE -3569274336,3569274383,LU +3569274312,3569274367,BE +3569274368,3569274383,LU 3569274384,3569274495,BE 3569274496,3569274559,LU 3569274560,3569274687,BE @@ -126237,7 +144332,11 @@ 3569830528,3569839187,IL 3569839188,3569839191,A2 3569839192,3569839359,IL -3569839360,3569839615,A2 +3569839360,3569839475,A2 +3569839476,3569839479,IL +3569839480,3569839608,A2 +3569839609,3569839610,IL +3569839611,3569839615,A2 3569839616,3569846527,IL 3569846528,3569846783,A2 3569846784,3569851935,IL @@ -126252,17 +144351,17 @@ 3569873280,3569873407,A2 3569873408,3569876991,IL 3569876992,3569942527,RS -3569942528,3570064759,DE -3570064760,3570064767,A2 -3570064768,3570073599,DE +3569942528,3570038463,DE +3570038464,3570038464,A2 +3570038465,3570073599,DE 3570073600,3570081791,NL -3570081792,3570102463,CH -3570102464,3570102479,ES -3570102480,3570106367,CH +3570081792,3570106367,CH 3570106368,3570139135,PL 3570139136,3570170079,DE 3570170080,3570170111,BE -3570170112,3570171903,DE +3570170112,3570171655,DE +3570171656,3570171663,AU +3570171664,3570171903,DE 3570171904,3570204671,NL 3570204672,3570215679,GR 3570215680,3570215807,DE @@ -126291,9 +144390,9 @@ 3570617344,3570617855,GB 3570617856,3570622463,DE 3570622464,3570630655,GB -3570630656,3570633343,DE -3570633344,3570633471,CH -3570633472,3570663423,DE +3570630656,3570640383,DE +3570640384,3570640415,CH +3570640416,3570663423,DE 3570663424,3570728959,GB 3570728960,3570729983,FI 3570729984,3570731007,SE @@ -126317,444 +144416,116 @@ 3571056640,3571122175,DE 3571122176,3571187711,GB 3571187712,3571253247,RU -3571253248,3571259551,BE -3571259552,3571259583,LU -3571259584,3571261359,BE -3571261360,3571261367,LU -3571261368,3571262335,BE -3571262336,3571262367,LU -3571262368,3571264607,BE +3571253248,3571264607,BE 3571264608,3571264639,FR -3571264640,3571265935,BE -3571265936,3571265951,LU -3571265952,3571267199,BE -3571267200,3571267263,LU -3571267264,3571268607,BE +3571264640,3571268607,BE 3571268608,3571268639,LU -3571268640,3571269823,BE -3571269824,3571269855,LU -3571269856,3571271423,BE -3571271424,3571271439,LU -3571271440,3571271551,BE -3571271552,3571271679,LU -3571271680,3571272447,BE -3571272448,3571272575,LU -3571272576,3571277119,BE -3571277120,3571277151,DE -3571277152,3571286015,BE -3571286016,3571318911,DE -3571318912,3571319167,GB -3571319168,3571319295,DE -3571319296,3571319711,GB -3571319712,3571319935,DE -3571319936,3571320063,GB -3571320064,3571320575,DE -3571320576,3571320855,GB +3571268640,3571286015,BE +3571286016,3571318783,DE +3571318784,3571319807,GB +3571319808,3571319935,DE +3571319936,3571320855,GB 3571320856,3571320863,DE -3571320864,3571320927,GB -3571320928,3571320991,DE -3571320992,3571321023,GB -3571321024,3571321055,DE -3571321056,3571321151,GB -3571321152,3571321247,DE -3571321248,3571321279,GB -3571321280,3571321727,DE -3571321728,3571321791,GB -3571321792,3571321855,DE -3571321856,3571321887,GB -3571321888,3571321919,DE -3571321920,3571321983,GB +3571320864,3571320943,GB +3571320944,3571320959,DE +3571320960,3571321599,GB +3571321600,3571321727,DE +3571321728,3571321823,GB +3571321824,3571321855,DE +3571321856,3571321983,GB 3571321984,3571321999,DE -3571322000,3571322015,GB -3571322016,3571322111,DE -3571322112,3571322559,GB -3571322560,3571322591,DE -3571322592,3571323391,GB -3571323392,3571323455,DE -3571323456,3571323487,GB -3571323488,3571323519,DE -3571323520,3571323711,GB -3571323712,3571323743,DE -3571323744,3571323775,GB -3571323776,3571323903,DE -3571323904,3571323935,GB -3571323936,3571324031,DE -3571324032,3571324095,GB -3571324096,3571324127,DE -3571324128,3571324415,GB -3571324416,3571324527,DE -3571324528,3571324927,GB -3571324928,3571324959,DE -3571324960,3571324991,GB -3571324992,3571325023,DE -3571325024,3571325183,GB -3571325184,3571325247,DE -3571325248,3571325407,GB -3571325408,3571325439,DE -3571325440,3571325567,GB -3571325568,3571325631,DE -3571325632,3571326207,GB -3571326208,3571326255,DE -3571326256,3571326259,BE -3571326260,3571326263,DE -3571326264,3571326463,GB -3571326464,3571326591,DE -3571326592,3571326975,GB -3571326976,3571327039,DE -3571327040,3571327135,GB -3571327136,3571327167,DE -3571327168,3571327615,GB -3571327616,3571327679,DE -3571327680,3571327711,GB -3571327712,3571328063,DE -3571328064,3571328223,GB -3571328224,3571328255,DE -3571328256,3571328447,GB -3571328448,3571328543,DE -3571328544,3571328767,GB -3571328768,3571328831,DE -3571328832,3571328863,GB -3571328864,3571329119,DE -3571329120,3571329183,GB -3571329184,3571329247,DE -3571329248,3571329439,GB -3571329440,3571329455,DE -3571329456,3571329535,GB -3571329536,3571329791,DE -3571329792,3571330047,GB -3571330048,3571330079,DE -3571330080,3571330111,GB -3571330112,3571330175,DE -3571330176,3571330239,GB -3571330240,3571330271,DE -3571330272,3571330911,GB -3571330912,3571331071,DE -3571331072,3571331455,GB -3571331456,3571331519,DE -3571331520,3571331647,GB -3571331648,3571331775,DE -3571331776,3571331807,GB -3571331808,3571332415,DE -3571332416,3571332479,GB -3571332480,3571332607,DE -3571332608,3571332735,GB -3571332736,3571332751,DE -3571332752,3571332831,GB -3571332832,3571332863,DE -3571332864,3571333759,GB -3571333760,3571333791,DE -3571333792,3571333887,GB -3571333888,3571333951,DE -3571333952,3571334079,GB -3571334080,3571334111,DE -3571334112,3571334175,GB -3571334176,3571334207,DE -3571334208,3571334303,GB -3571334304,3571334335,DE -3571334336,3571334911,GB -3571334912,3571334943,DE -3571334944,3571335103,GB -3571335104,3571335455,DE -3571335456,3571335487,GB -3571335488,3571335519,DE -3571335520,3571335583,GB -3571335584,3571335647,DE -3571335648,3571335807,GB +3571322000,3571323967,GB +3571323968,3571324031,DE +3571324032,3571326207,GB +3571326208,3571326215,DE +3571326216,3571326231,GB +3571326232,3571326247,DE +3571326248,3571326983,GB +3571326984,3571326991,DE +3571326992,3571328511,GB +3571328512,3571328543,DE +3571328544,3571328863,GB +3571328864,3571328879,DE +3571328880,3571329215,GB +3571329216,3571329247,DE +3571329248,3571331647,GB +3571331648,3571331679,DE +3571331680,3571331839,GB +3571331840,3571332351,DE +3571332352,3571335807,GB 3571335808,3571335935,DE -3571335936,3571336063,GB -3571336064,3571336191,DE -3571336192,3571336223,GB -3571336224,3571336255,DE -3571336256,3571336319,GB -3571336320,3571336447,DE -3571336448,3571336927,GB -3571336928,3571336959,DE -3571336960,3571337215,GB -3571337216,3571337279,DE -3571337280,3571337407,GB -3571337408,3571337439,DE -3571337440,3571338367,GB -3571338368,3571338751,DE -3571338752,3571338879,GB -3571338880,3571338975,DE -3571338976,3571339135,GB -3571339136,3571339199,DE -3571339200,3571339391,GB -3571339392,3571339583,DE -3571339584,3571339903,GB -3571339904,3571339967,DE -3571339968,3571340095,GB -3571340096,3571340159,DE -3571340160,3571340383,GB -3571340384,3571340447,DE -3571340448,3571340511,GB -3571340512,3571340543,DE -3571340544,3571340799,GB -3571340800,3571341375,DE -3571341376,3571341487,GB -3571341488,3571341503,DE -3571341504,3571342015,GB -3571342016,3571342047,DE -3571342048,3571342079,GB -3571342080,3571342591,DE -3571342592,3571342623,GB -3571342624,3571342655,DE -3571342656,3571342719,GB -3571342720,3571342751,DE -3571342752,3571343039,GB -3571343040,3571343071,DE -3571343072,3571343103,GB -3571343104,3571343359,DE -3571343360,3571343391,GB +3571335936,3571340415,GB +3571340416,3571340447,DE +3571340448,3571342079,GB +3571342080,3571342335,DE +3571342336,3571343391,GB 3571343392,3571343455,DE -3571343456,3571343487,GB -3571343488,3571343495,DE -3571343496,3571343503,ES -3571343504,3571343515,DE -3571343516,3571343519,GB -3571343520,3571343551,DE -3571343552,3571343615,GB -3571343616,3571343871,DE -3571343872,3571344095,GB -3571344096,3571344127,DE -3571344128,3571344191,GB -3571344192,3571344255,DE -3571344256,3571345215,GB -3571345216,3571345407,DE -3571345408,3571346431,GB -3571346432,3571346463,DE -3571346464,3571346495,GB -3571346496,3571346559,DE -3571346560,3571346591,GB -3571346592,3571346623,DE -3571346624,3571346831,GB -3571346832,3571346847,DE -3571346848,3571346879,GB -3571346880,3571346911,DE -3571346912,3571347071,GB -3571347072,3571347191,DE -3571347192,3571347199,GB -3571347200,3571347455,DE +3571343456,3571347455,GB 3571347456,3571347711,BE -3571347712,3571347967,GB -3571347968,3571348223,DE -3571348224,3571348255,GB -3571348256,3571348287,DE -3571348288,3571348383,GB -3571348384,3571348399,DE -3571348400,3571348447,GB -3571348448,3571348511,DE -3571348512,3571348543,GB -3571348544,3571348735,DE -3571348736,3571348991,GB -3571348992,3571349135,DE -3571349136,3571349151,GB -3571349152,3571349231,DE -3571349232,3571349239,GB -3571349240,3571349263,DE -3571349264,3571349311,GB -3571349312,3571349343,DE -3571349344,3571349743,GB -3571349744,3571349759,CH -3571349760,3571349791,DE -3571349792,3571349799,SE -3571349800,3571349807,DE -3571349808,3571349815,BE -3571349816,3571349819,SE -3571349820,3571349887,GB -3571349888,3571349919,DE -3571349920,3571350511,GB -3571350512,3571350527,DE -3571350528,3571351551,GB +3571347712,3571348387,GB +3571348388,3571348391,DE +3571348392,3571349087,GB +3571349088,3571349119,DE +3571349120,3571351551,GB 3571351552,3571351807,DE -3571351808,3571351871,GB -3571351872,3571352031,DE -3571352032,3571352063,GB -3571352064,3571352415,DE -3571352416,3571352527,GB -3571352528,3571352639,DE -3571352640,3571352735,GB -3571352736,3571352783,DE -3571352784,3571352831,GB -3571352832,3571353215,DE -3571353216,3571353231,GB -3571353232,3571353279,DE -3571353280,3571353311,GB -3571353312,3571353343,DE -3571353344,3571353471,GB -3571353472,3571353599,DE -3571353600,3571353791,GB -3571353792,3571353807,DE -3571353808,3571353855,GB -3571353856,3571354111,DE -3571354112,3571354463,GB +3571351808,3571354463,GB 3571354464,3571354495,DE -3571354496,3571355007,GB -3571355008,3571355135,DE -3571355136,3571355167,GB -3571355168,3571355183,DE -3571355184,3571355391,GB -3571355392,3571355935,DE -3571355936,3571355967,GB -3571355968,3571356031,DE -3571356032,3571356159,GB -3571356160,3571356415,DE -3571356416,3571356671,GB -3571356672,3571357071,DE -3571357072,3571357183,GB +3571354496,3571355071,GB +3571355072,3571355135,DE +3571355136,3571355391,GB +3571355392,3571355903,DE +3571355904,3571355999,GB +3571356000,3571356031,DE +3571356032,3571357183,GB 3571357184,3571357695,DE -3571357696,3571357791,GB -3571357792,3571357855,DE -3571357856,3571357871,GB +3571357696,3571357871,GB 3571357872,3571357919,DE -3571357920,3571358047,GB -3571358048,3571358079,DE -3571358080,3571358223,GB -3571358224,3571358255,DE -3571358256,3571358319,GB -3571358320,3571358335,DE -3571358336,3571358399,GB -3571358400,3571358415,DE -3571358416,3571358431,GB -3571358432,3571358447,DE -3571358448,3571358463,GB -3571358464,3571358495,DE -3571358496,3571358503,GB -3571358504,3571358527,DE -3571358528,3571358531,GB -3571358532,3571358559,DE -3571358560,3571358575,GB -3571358576,3571358591,DE -3571358592,3571358975,GB -3571358976,3571358991,DE -3571358992,3571358999,GB -3571359000,3571359079,DE -3571359080,3571359095,GB -3571359096,3571359151,DE -3571359152,3571359159,GB -3571359160,3571359167,DE -3571359168,3571359175,GB -3571359176,3571359207,DE -3571359208,3571359215,GB -3571359216,3571359319,DE -3571359320,3571359327,GB -3571359328,3571359335,DE -3571359336,3571359343,GB -3571359344,3571359351,DE -3571359352,3571359359,GB -3571359360,3571359415,DE -3571359416,3571359419,GB -3571359420,3571359463,DE -3571359464,3571359471,GB -3571359472,3571359487,DE -3571359488,3571359999,GB -3571360000,3571360767,DE -3571360768,3571361151,GB -3571361152,3571361215,DE -3571361216,3571361247,GB -3571361248,3571361407,DE -3571361408,3571361439,GB -3571361440,3571361455,DE -3571361456,3571361471,GB +3571357920,3571358239,GB +3571358240,3571358255,DE +3571358256,3571358999,GB +3571359000,3571359007,DE +3571359008,3571359011,GB +3571359012,3571359015,DE +3571359016,3571359143,GB +3571359144,3571359151,DE +3571359152,3571359191,GB +3571359192,3571359199,DE +3571359200,3571359303,GB +3571359304,3571359311,DE +3571359312,3571359407,GB +3571359408,3571359415,DE +3571359416,3571359447,GB +3571359448,3571359455,DE +3571359456,3571361279,GB +3571361280,3571361407,DE +3571361408,3571361471,GB 3571361472,3571361535,DE -3571361536,3571361983,GB -3571361984,3571362303,DE -3571362304,3571362559,GB -3571362560,3571362879,DE -3571362880,3571363007,GB -3571363008,3571363039,DE -3571363040,3571363327,GB -3571363328,3571364095,DE -3571364096,3571364287,GB -3571364288,3571364319,DE -3571364320,3571364919,GB -3571364920,3571364927,DE -3571364928,3571364955,GB -3571364956,3571364975,DE -3571364976,3571364983,GB -3571364984,3571364991,DE -3571364992,3571365023,GB -3571365024,3571365031,DE -3571365032,3571365039,GB -3571365040,3571365047,DE -3571365048,3571365055,GB -3571365056,3571365071,DE -3571365072,3571365079,GB -3571365080,3571365087,DE -3571365088,3571365183,GB -3571365184,3571365247,DE -3571365248,3571365999,GB -3571366000,3571366007,DE -3571366008,3571366399,GB -3571366400,3571366511,NL -3571366512,3571366519,DE -3571366520,3571366559,GB -3571366560,3571366591,DE -3571366592,3571366655,GB -3571366656,3571366911,DE -3571366912,3571368447,GB -3571368448,3571368479,DE -3571368480,3571368511,GB -3571368512,3571368575,DE -3571368576,3571368623,GB -3571368624,3571368687,DE -3571368688,3571368695,GB -3571368696,3571368959,DE -3571368960,3571369215,GB -3571369216,3571369279,DE -3571369280,3571369727,GB -3571369728,3571369759,DE -3571369760,3571369807,GB -3571369808,3571369823,DE -3571369824,3571369983,GB -3571369984,3571371299,DE -3571371300,3571371303,GB -3571371304,3571371319,DE -3571371320,3571371327,GB +3571361536,3571361999,GB +3571362000,3571362015,DE +3571362016,3571362815,GB +3571362816,3571362879,DE +3571362880,3571363583,GB +3571363584,3571364095,DE +3571364096,3571368623,GB +3571368624,3571368639,DE +3571368640,3571368703,GB +3571368704,3571368959,DE +3571368960,3571371327,GB 3571371328,3571371359,DE -3571371360,3571372303,GB -3571372304,3571372319,DE -3571372320,3571375327,GB -3571375328,3571375343,DE -3571375344,3571379199,GB -3571379200,3571379231,DE -3571379232,3571379247,GB -3571379248,3571379311,DE -3571379312,3571379315,NL -3571379316,3571379351,DE +3571371360,3571379343,GB +3571379344,3571379351,DE 3571379352,3571379359,GB 3571379360,3571379367,DE 3571379368,3571379375,GB -3571379376,3571379631,DE -3571379632,3571379647,GB -3571379648,3571379871,DE -3571379872,3571379887,GB -3571379888,3571379903,DE -3571379904,3571381151,GB -3571381152,3571381631,DE -3571381632,3571381695,AT -3571381696,3571381711,DE -3571381712,3571381727,GB -3571381728,3571381791,DE -3571381792,3571381887,GB -3571381888,3571381951,DE -3571381952,3571382015,GB -3571382016,3571382207,DE -3571382208,3571382271,GB -3571382272,3571382303,DE -3571382304,3571382351,GB -3571382352,3571382367,DE -3571382368,3571382623,GB -3571382624,3571382783,DE -3571382784,3571383039,AT -3571383040,3571383135,DE -3571383136,3571383151,AT -3571383152,3571383167,GB -3571383168,3571383175,DE -3571383176,3571383999,GB -3571384000,3571384063,DE -3571384064,3571384191,GB -3571384192,3571385151,DE +3571379376,3571379391,DE +3571379392,3571379535,GB +3571379536,3571379559,DE +3571379560,3571379887,GB +3571379888,3571379895,DE +3571379896,3571382623,GB +3571382624,3571382655,DE +3571382656,3571384319,GB +3571384320,3571385151,DE 3571385152,3571385183,GB 3571385184,3571385631,DE 3571385632,3571385663,GB @@ -126770,7 +144541,9 @@ 3571415040,3571415295,GB 3571415296,3571415311,DE 3571415312,3571415327,AT -3571415328,3571425695,DE +3571415328,3571423743,DE +3571423744,3571423999,US +3571424000,3571425695,DE 3571425696,3571425727,ES 3571425728,3571426895,DE 3571426896,3571426899,ES @@ -126782,15 +144555,19 @@ 3571473152,3571473407,NL 3571473408,3571482367,DE 3571482368,3571482623,CH -3571482624,3571515391,BE +3571482624,3571485191,BE +3571485192,3571485195,NL +3571485196,3571515391,BE 3571515392,3571548159,GB 3571548160,3571580927,ES -3571580928,3571595727,FI -3571595728,3571595743,AX -3571595744,3571646463,FI -3571646464,3571675679,DE +3571580928,3571646463,FI +3571646464,3571655560,DE +3571655561,3571655561,RO +3571655562,3571675679,DE 3571675680,3571675687,GB -3571675688,3571711999,DE +3571675688,3571710207,DE +3571710208,3571710463,GB +3571710464,3571711999,DE 3571712000,3571843071,GB 3571843072,3571974143,ES 3571974144,3571978239,RU @@ -126840,24 +144617,14 @@ 3572629504,3572695039,DK 3572695040,3572704951,CH 3572704952,3572704959,DE -3572704960,3572705479,CH -3572705480,3572705487,NL -3572705488,3572715519,CH +3572704960,3572715519,CH 3572715520,3572715775,GB 3572715776,3572760575,CH 3572760576,3572826111,PL 3572826112,3572891647,IT 3572891648,3572957175,FI 3572957176,3572957183,AX -3572957184,3572975359,SE -3572975360,3572975615,A2 -3572975616,3572980991,SE -3572980992,3572981247,A2 -3572981248,3572984319,SE -3572984320,3572984575,A2 -3572984576,3572986367,SE -3572986368,3572986623,A2 -3572986624,3573022719,SE +3572957184,3573022719,SE 3573022720,3573055487,RU 3573055488,3573088255,GB 3573088256,3573088263,CH @@ -126908,9 +144675,7 @@ 3573940224,3574005759,PS 3574005760,3574071295,CY 3574071296,3574136831,IL -3574136832,3574137783,DE -3574137784,3574137791,AT -3574137792,3574137823,DE +3574136832,3574137823,DE 3574137824,3574137855,NL 3574137856,3574138559,DE 3574138560,3574138623,NL @@ -126954,36 +144719,29 @@ 3574348544,3574398975,EU 3574398976,3574464511,PT 3574464512,3574530047,TR -3574530048,3574563679,SE -3574563680,3574563695,FI -3574563696,3574563727,SE -3574563728,3574563775,FI -3574563776,3574563807,SE +3574530048,3574563807,SE 3574563808,3574563823,FI -3574563824,3574563839,SE -3574563840,3574564863,FI -3574564864,3574565887,SE -3574565888,3574565951,FI -3574565952,3574566207,SE -3574566208,3574566271,FI -3574566272,3574566447,SE -3574566448,3574566463,FI -3574566464,3574594559,SE +3574563824,3574594559,SE 3574594560,3574595583,GB -3574595584,3574596351,FR +3574595584,3574595839,GP +3574595840,3574596095,MQ +3574596096,3574596351,FR 3574596352,3574596607,MQ -3574596608,3574597631,FR -3574597632,3574597887,MQ -3574597888,3574598655,FR +3574596608,3574596863,GP +3574596864,3574597119,GF +3574597120,3574597631,MQ +3574597632,3574598143,GP +3574598144,3574598399,MQ +3574598400,3574598655,GP 3574598656,3574599679,MQ -3574599680,3574600191,FR -3574600192,3574601215,MQ -3574601216,3574601471,RE +3574599680,3574599935,GP +3574599936,3574600959,MQ +3574600960,3574601471,GP 3574601472,3574601983,MQ -3574601984,3574602239,GF -3574602240,3574602495,FR +3574601984,3574602495,GF 3574602496,3574603263,MQ -3574603264,3574603775,FR +3574603264,3574603519,GP +3574603520,3574603775,GF 3574603776,3574611967,BG 3574611968,3574628351,HU 3574628352,3574661119,GR @@ -127033,26 +144791,34 @@ 3574956032,3574972415,IT 3574972416,3574988799,LV 3574988800,3575054335,PT -3575054336,3575086175,DE -3575086176,3575086207,MT -3575086208,3575119871,DE +3575054336,3575119871,DE 3575119872,3575185407,RU 3575185408,3575250943,PL 3575250944,3575316479,IT 3575316480,3575349247,RU 3575349248,3575351679,ES 3575351680,3575351687,NL -3575351688,3575355231,ES +3575351688,3575351943,ES +3575351944,3575351951,FR +3575351952,3575354599,ES +3575354600,3575354607,GB +3575354608,3575355231,ES 3575355232,3575355247,GB 3575355248,3575360199,ES 3575360200,3575360207,FR -3575360208,3575360319,ES -3575360320,3575360383,PT -3575360384,3575367111,ES +3575360208,3575366135,ES +3575366136,3575366143,GB +3575366144,3575367111,ES 3575367112,3575367119,DE 3575367120,3575372239,ES 3575372240,3575372247,PT -3575372248,3575382015,ES +3575372248,3575373183,ES +3575373184,3575373191,GB +3575373192,3575374319,ES +3575374320,3575374327,GB +3575374328,3575376191,ES +3575376192,3575376199,US +3575376200,3575382015,ES 3575382016,3575412991,FI 3575412992,3575413119,RU 3575413120,3575419903,FI @@ -127279,8 +145045,7 @@ 3575634456,3575634463,DE 3575634464,3575634495,BE 3575634496,3575634511,FI -3575634512,3575634519,CH -3575634520,3575634591,BE +3575634512,3575634591,BE 3575634592,3575634599,ES 3575634600,3575634607,BE 3575634608,3575634615,GB @@ -127329,7 +145094,7 @@ 3575635704,3575635775,BE 3575635776,3575635839,CH 3575635840,3575635847,GB -3575635848,3575635855,FR +3575635848,3575635855,BE 3575635856,3575635871,TR 3575635872,3575635983,BE 3575635984,3575635999,DE @@ -127566,8 +145331,8 @@ 3576042688,3576042695,GB 3576042696,3576042751,EU 3576042752,3576042815,GB -3576042816,3576045567,EU -3576045568,3576045599,GB +3576042816,3576045583,EU +3576045584,3576045599,GB 3576045600,3576045663,EU 3576045664,3576045679,GB 3576045680,3576045711,EU @@ -127728,17 +145493,13 @@ 3576077440,3576077471,GB 3576077472,3576077567,EU 3576077568,3576077695,GB -3576077696,3576077871,EU -3576077872,3576077887,GB -3576077888,3576077935,EU +3576077696,3576077935,EU 3576077936,3576077967,GB 3576077968,3576078143,EU 3576078144,3576078175,GB 3576078176,3576078463,EU 3576078464,3576078591,GB -3576078592,3576079615,EU -3576079616,3576079871,GB -3576079872,3576079999,EU +3576078592,3576079999,EU 3576080000,3576080127,GB 3576080128,3576080223,EU 3576080224,3576080255,GB @@ -127806,9 +145567,7 @@ 3576091408,3576091423,GB 3576091424,3576091455,EU 3576091456,3576091479,GB -3576091480,3576091519,EU -3576091520,3576091535,GB -3576091536,3576091967,EU +3576091480,3576091967,EU 3576091968,3576091983,GB 3576091984,3576091999,EU 3576092000,3576092031,GB @@ -127825,152 +145584,70 @@ 3576096768,3576099071,EU 3576099072,3576100863,GB 3576100864,3576101375,EU -3576101376,3576102911,GB -3576102912,3576103167,FR -3576103168,3576103247,GB -3576103248,3576103295,FR -3576103296,3576103327,GB -3576103328,3576103367,FR -3576103368,3576103375,GB -3576103376,3576103455,FR -3576103456,3576103583,GB -3576103584,3576103599,FR -3576103600,3576103615,GB -3576103616,3576103631,FR -3576103632,3576103679,GB -3576103680,3576103935,FR -3576103936,3576104111,GB -3576104112,3576104127,FR -3576104128,3576104175,GB -3576104176,3576104191,FR -3576104192,3576104319,GB -3576104320,3576104351,FR -3576104352,3576104447,GB -3576104448,3576104495,FR -3576104496,3576104575,GB -3576104576,3576104607,FR -3576104608,3576104639,GB -3576104640,3576104655,FR -3576104656,3576104703,GB -3576104704,3576104959,FR -3576104960,3576105055,GB -3576105056,3576105183,FR -3576105184,3576105215,GB -3576105216,3576105535,FR -3576105536,3576105599,GB -3576105600,3576105727,FR -3576105728,3576105759,GB -3576105760,3576105855,FR -3576105856,3576105999,GB -3576106000,3576106047,FR -3576106048,3576106055,GB -3576106056,3576106111,FR -3576106112,3576106239,GB -3576106240,3576106287,FR -3576106288,3576106559,GB -3576106560,3576106751,FR -3576106752,3576107007,GB -3576107008,3576107135,FR -3576107136,3576107183,GB -3576107184,3576107231,FR -3576107232,3576107263,GB -3576107264,3576107295,FR -3576107296,3576107391,GB -3576107392,3576107519,FR -3576107520,3576107647,GB -3576107648,3576107679,FR -3576107680,3576107695,GB -3576107696,3576107759,FR -3576107760,3576107775,GB -3576107776,3576107903,FR -3576107904,3576108031,GB -3576108032,3576108063,FR -3576108064,3576108079,GB -3576108080,3576108159,FR -3576108160,3576108255,GB -3576108256,3576108263,FR -3576108264,3576108271,GB -3576108272,3576108351,FR -3576108352,3576108511,GB -3576108512,3576108799,FR -3576108800,3576108815,GB -3576108816,3576108863,FR -3576108864,3576108991,GB -3576108992,3576109023,FR -3576109024,3576109055,DE -3576109056,3576109311,GB -3576109312,3576109567,FR -3576109568,3576109695,GB -3576109696,3576109791,FR -3576109792,3576109799,GB -3576109800,3576109815,FR -3576109816,3576110079,GB -3576110080,3576110207,FR -3576110208,3576110271,GB -3576110272,3576110335,FR -3576110336,3576110367,GB -3576110368,3576110463,FR -3576110464,3576110575,GB -3576110576,3576110847,FR -3576110848,3576111103,GB -3576111104,3576111231,FR -3576111232,3576111423,GB -3576111424,3576111599,FR -3576111600,3576111615,GB -3576111616,3576111647,FR -3576111648,3576111679,GB -3576111680,3576111711,FR -3576111712,3576111727,GB -3576111728,3576111807,FR -3576111808,3576112511,GB -3576112512,3576112543,FR -3576112544,3576113407,GB -3576113408,3576113535,FR -3576113536,3576119295,GB -3576119296,3576119455,CH -3576119456,3576119471,BE -3576119472,3576127487,CH -3576127488,3576127615,GB -3576127616,3576127647,FR -3576127648,3576127679,GB -3576127680,3576127687,FR -3576127688,3576127695,GB -3576127696,3576127703,FR -3576127704,3576131583,GB -3576131584,3576135679,CH +3576101376,3576103375,GB +3576103376,3576103423,FR +3576103424,3576105791,GB +3576105792,3576105855,FR +3576105856,3576107711,GB +3576107712,3576107743,FR +3576107744,3576108287,GB +3576108288,3576108303,FR +3576108304,3576108831,GB +3576108832,3576108847,FR +3576108848,3576111423,GB +3576111424,3576111551,FR +3576111552,3576119471,GB +3576119472,3576119487,CH +3576119488,3576121343,GB +3576121344,3576121471,CH +3576121472,3576121855,GB +3576121856,3576122111,CH +3576122112,3576122543,GB +3576122544,3576122551,CH +3576122552,3576122695,GB +3576122696,3576122703,CH +3576122704,3576132943,GB +3576132944,3576132959,CH +3576132960,3576133759,GB +3576133760,3576133775,CH +3576133776,3576134399,GB +3576134400,3576134655,CH +3576134656,3576135295,GB +3576135296,3576135359,CH +3576135360,3576135679,GB 3576135680,3576168447,DE 3576168448,3576233983,GB -3576233984,3576236671,FR -3576236672,3576236703,GB -3576236704,3576236879,FR -3576236880,3576236927,GB +3576233984,3576236703,FR +3576236704,3576236719,GB +3576236720,3576236743,FR +3576236744,3576236751,GB +3576236752,3576236775,FR +3576236776,3576236783,GB +3576236784,3576236887,FR +3576236888,3576236927,GB 3576236928,3576237063,FR 3576237064,3576237071,GB 3576237072,3576237087,FR 3576237088,3576237119,GB 3576237120,3576237231,FR -3576237232,3576237279,GB -3576237280,3576237455,FR +3576237232,3576237311,GB +3576237312,3576237455,FR 3576237456,3576237503,GB -3576237504,3576237615,FR -3576237616,3576237631,GB -3576237632,3576237711,FR +3576237504,3576237599,FR +3576237600,3576237631,GB +3576237632,3576237663,FR +3576237664,3576237679,GB +3576237680,3576237711,FR 3576237712,3576237743,GB -3576237744,3576238143,FR -3576238144,3576238159,GB +3576237744,3576237919,FR +3576237920,3576237935,GB +3576237936,3576238151,FR +3576238152,3576238159,GB 3576238160,3576238305,FR 3576238306,3576238335,GB -3576238336,3576238447,FR -3576238448,3576238463,GB -3576238464,3576238511,FR -3576238512,3576238527,GB -3576238528,3576238559,FR -3576238560,3576238575,GB -3576238576,3576238607,FR -3576238608,3576238623,GB -3576238624,3576238639,FR -3576238640,3576238655,GB -3576238656,3576238863,FR +3576238336,3576238543,FR +3576238544,3576238551,GB +3576238552,3576238863,FR 3576238864,3576238879,GB 3576238880,3576238895,FR 3576238896,3576238911,GB @@ -127982,12 +145659,7 @@ 3576239040,3576239071,GB 3576239072,3576239087,FR 3576239088,3576239103,GB -3576239104,3576239615,FR -3576239616,3576239623,GB -3576239624,3576239631,IT -3576239632,3576239663,FR -3576239664,3576239671,GB -3576239672,3576240039,FR +3576239104,3576240039,FR 3576240040,3576240047,GB 3576240048,3576240111,FR 3576240112,3576240127,GB @@ -128021,14 +145693,12 @@ 3576242320,3576242327,GB 3576242328,3576242335,FR 3576242336,3576242343,GB -3576242344,3576243967,FR -3576243968,3576243999,GB -3576244000,3576244031,FR -3576244032,3576244047,GB -3576244048,3576244127,FR +3576242344,3576244103,FR +3576244104,3576244111,GB +3576244112,3576244127,FR 3576244128,3576244143,GB -3576244144,3576246399,FR -3576246400,3576246463,GB +3576244144,3576246407,FR +3576246408,3576246463,GB 3576246464,3576246656,FR 3576246657,3576246727,GB 3576246728,3576246743,FR @@ -128038,8 +145708,8 @@ 3576249368,3576249463,FR 3576249464,3576249471,GB 3576249472,3576249527,FR -3576249528,3576249535,GB -3576249536,3576249743,FR +3576249528,3576249567,GB +3576249568,3576249743,FR 3576249744,3576249791,GB 3576249792,3576249807,FR 3576249808,3576249823,GB @@ -128058,36 +145728,42 @@ 3576251648,3576252415,FR 3576252416,3576252671,GB 3576252672,3576254543,FR -3576254544,3576254559,GB -3576254560,3576254607,FR +3576254544,3576254551,GB +3576254552,3576254607,FR 3576254608,3576254615,GB 3576254616,3576254623,FR 3576254624,3576254647,GB -3576254648,3576254655,FR -3576254656,3576254687,GB -3576254688,3576254847,FR +3576254648,3576254847,FR 3576254848,3576254855,GB 3576254856,3576254863,FR 3576254864,3576254879,GB 3576254880,3576254895,FR 3576254896,3576254903,GB -3576254904,3576255151,FR +3576254904,3576255071,FR +3576255072,3576255079,GB +3576255080,3576255151,FR 3576255152,3576255199,GB 3576255200,3576255215,FR 3576255216,3576255231,GB -3576255232,3576255239,FR -3576255240,3576255263,GB -3576255264,3576255375,FR +3576255232,3576255375,FR 3576255376,3576255383,GB 3576255384,3576255407,FR 3576255408,3576255423,GB 3576255424,3576255431,FR 3576255432,3576255439,GB -3576255440,3576255519,FR +3576255440,3576255447,FR +3576255448,3576255455,GB +3576255456,3576255471,FR +3576255472,3576255479,GB +3576255480,3576255519,FR 3576255520,3576255527,GB 3576255528,3576255543,FR 3576255544,3576255551,GB -3576255552,3576255631,FR +3576255552,3576255575,FR +3576255576,3576255583,GB +3576255584,3576255615,FR +3576255616,3576255623,GB +3576255624,3576255631,FR 3576255632,3576255647,GB 3576255648,3576255671,FR 3576255672,3576255679,GB @@ -128121,11 +145797,9 @@ 3576256896,3576256959,GB 3576256960,3576256991,FR 3576256992,3576257007,GB -3576257008,3576257079,FR -3576257080,3576257087,GB -3576257088,3576257103,FR -3576257104,3576257111,GB -3576257112,3576257135,FR +3576257008,3576257103,FR +3576257104,3576257119,GB +3576257120,3576257135,FR 3576257136,3576257151,GB 3576257152,3576257159,FR 3576257160,3576257167,GB @@ -128138,9 +145812,7 @@ 3576257376,3576257455,FR 3576257456,3576257471,GB 3576257472,3576257487,FR -3576257488,3576257495,GB -3576257496,3576257503,FR -3576257504,3576257535,GB +3576257488,3576257535,GB 3576257536,3576257551,FR 3576257552,3576257583,GB 3576257584,3576257631,FR @@ -128154,12 +145826,8 @@ 3576257872,3576257887,FR 3576257888,3576257903,GB 3576257904,3576257975,FR -3576257976,3576257999,GB -3576258000,3576258055,FR -3576258056,3576258063,GB -3576258064,3576258079,FR -3576258080,3576258095,GB -3576258096,3576258167,FR +3576257976,3576258015,GB +3576258016,3576258167,FR 3576258168,3576258175,GB 3576258176,3576258351,FR 3576258352,3576258399,GB @@ -128177,20 +145845,18 @@ 3576258672,3576258687,GB 3576258688,3576258703,FR 3576258704,3576258783,GB -3576258784,3576258815,FR -3576258816,3576258847,GB -3576258848,3576258863,FR +3576258784,3576258863,FR 3576258864,3576258895,GB 3576258896,3576258943,FR 3576258944,3576259007,GB 3576259008,3576259023,FR 3576259024,3576259039,GB -3576259040,3576259071,FR -3576259072,3576259087,GB +3576259040,3576259079,FR +3576259080,3576259087,GB 3576259088,3576259103,FR 3576259104,3576259199,GB -3576259200,3576259231,FR -3576259232,3576259247,GB +3576259200,3576259215,FR +3576259216,3576259247,GB 3576259248,3576259279,FR 3576259280,3576259295,GB 3576259296,3576259311,FR @@ -128247,57 +145913,41 @@ 3576261080,3576261095,GB 3576261096,3576261103,FR 3576261104,3576261111,GB -3576261112,3576261375,FR -3576261376,3576261631,GB -3576261632,3576261927,FR -3576261928,3576261935,GB -3576261936,3576263439,FR -3576263440,3576263487,GB -3576263488,3576263519,FR +3576261112,3576261391,FR +3576261392,3576261631,GB +3576261632,3576263463,FR +3576263464,3576263471,GB +3576263472,3576263519,FR 3576263520,3576263527,GB -3576263528,3576263535,FR -3576263536,3576263551,GB -3576263552,3576263567,FR +3576263528,3576263567,FR 3576263568,3576263575,GB 3576263576,3576263583,FR -3576263584,3576263599,GB -3576263600,3576263615,FR -3576263616,3576263623,GB +3576263584,3576263623,GB 3576263624,3576263679,FR 3576263680,3576263743,GB 3576263744,3576263751,FR 3576263752,3576263759,GB 3576263760,3576263791,FR -3576263792,3576263887,GB -3576263888,3576263911,FR +3576263792,3576263903,GB +3576263904,3576263911,FR 3576263912,3576263919,GB 3576263920,3576264295,FR 3576264296,3576264319,GB 3576264320,3576264383,FR 3576264384,3576264399,GB 3576264400,3576264447,FR -3576264448,3576264511,GB -3576264512,3576264543,FR +3576264448,3576264527,GB +3576264528,3576264543,FR 3576264544,3576264559,GB 3576264560,3576264575,FR 3576264576,3576264623,GB 3576264624,3576264639,FR 3576264640,3576264687,GB -3576264688,3576265287,FR -3576265288,3576265295,GB -3576265296,3576265303,FR -3576265304,3576265311,GB -3576265312,3576265327,FR -3576265328,3576265335,GB -3576265336,3576265343,FR -3576265344,3576265367,GB -3576265368,3576265375,FR -3576265376,3576265383,GB -3576265384,3576265399,FR -3576265400,3576265431,GB -3576265432,3576265447,FR -3576265448,3576265455,GB -3576265456,3576265463,FR +3576264688,3576265319,FR +3576265320,3576265327,GB +3576265328,3576265423,FR +3576265424,3576265431,GB +3576265432,3576265463,FR 3576265464,3576265471,GB 3576265472,3576265759,FR 3576265760,3576265775,GB @@ -128311,10 +145961,10 @@ 3576265880,3576265903,GB 3576265904,3576265919,FR 3576265920,3576265935,GB -3576265936,3576266663,FR -3576266664,3576266671,GB -3576266672,3576266687,FR -3576266688,3576266751,GB +3576265936,3576266263,FR +3576266264,3576266495,GB +3576266496,3576266695,FR +3576266696,3576266751,GB 3576266752,3576299519,FR 3576299520,3576365055,AE 3576365056,3576430591,TR @@ -128350,12 +146000,12 @@ 3576823808,3576889343,SE 3576889344,3576954879,NL 3576954880,3576987647,NO -3576987648,3577001983,GB -3577001984,3577003583,NL -3577003584,3577003711,GB -3577003712,3577003767,NL -3577003768,3577003771,GB -3577003772,3577004031,NL +3576987648,3577000959,GB +3577000960,3577001343,NL +3577001344,3577001983,GB +3577001984,3577003643,NL +3577003644,3577003711,GB +3577003712,3577004031,NL 3577004032,3577020415,GB 3577020416,3577085951,NL 3577085952,3577151487,DE @@ -128377,8 +146027,8 @@ 3577545984,3577546111,SE 3577546112,3577546239,DE 3577546240,3577546367,US -3577546368,3577547455,DE -3577547456,3577547519,FR +3577546368,3577547487,DE +3577547488,3577547519,FR 3577547520,3577550983,DE 3577550984,3577550991,CH 3577550992,3577551407,DE @@ -128391,17 +146041,23 @@ 3577559776,3577559783,FR 3577559784,3577562391,DE 3577562392,3577562399,GB -3577562400,3577567711,DE +3577562400,3577564631,DE +3577564632,3577564639,GB +3577564640,3577567711,DE 3577567712,3577567719,IT -3577567720,3577577231,DE +3577567720,3577571391,DE +3577571392,3577571399,DK +3577571400,3577577231,DE 3577577232,3577577247,US -3577577248,3577592431,DE +3577577248,3577586343,DE +3577586344,3577586351,US +3577586352,3577592431,DE 3577592432,3577592447,FR 3577592448,3577592743,DE 3577592744,3577592751,IE -3577592752,3577608743,DE -3577608744,3577608751,ES -3577608752,3577610367,DE +3577592752,3577607559,DE +3577607560,3577607567,NL +3577607568,3577610367,DE 3577610368,3577610495,GB 3577610496,3577610751,DE 3577610752,3577611199,CH @@ -128457,8 +146113,8 @@ 3577625208,3577625215,GB 3577625216,3577625231,EU 3577625232,3577625599,GB -3577625600,3577625823,EU -3577625824,3577626623,GB +3577625600,3577625791,EU +3577625792,3577626623,GB 3577626624,3577627135,FR 3577627136,3577627391,EU 3577627392,3577627647,GB @@ -128466,8 +146122,10 @@ 3577627968,3577627999,EU 3577628000,3577628671,FR 3577628672,3577630719,CH -3577630720,3577631743,GB -3577631744,3577633791,EU +3577630720,3577632255,GB +3577632256,3577632511,EU +3577632512,3577632767,GB +3577632768,3577633791,EU 3577633792,3577633951,CZ 3577633952,3577633959,EU 3577633960,3577633967,CZ @@ -128485,8 +146143,8 @@ 3577638960,3577638967,EU 3577638968,3577639239,FR 3577639240,3577639247,EU -3577639248,3577639679,FR -3577639680,3577639767,EU +3577639248,3577639743,FR +3577639744,3577639767,EU 3577639768,3577639783,FR 3577639784,3577639799,EU 3577639800,3577639807,FR @@ -128499,21 +146157,17 @@ 3577640720,3577640735,EU 3577640736,3577641151,FR 3577641152,3577641159,EU -3577641160,3577641199,FR -3577641200,3577641215,EU -3577641216,3577641391,FR +3577641160,3577641391,FR 3577641392,3577641399,EU -3577641400,3577641423,FR -3577641424,3577641983,EU -3577641984,3577642023,GB -3577642024,3577642031,EU -3577642032,3577642111,GB -3577642112,3577642175,EU -3577642176,3577642239,GB +3577641400,3577641439,FR +3577641440,3577641983,EU +3577641984,3577642007,GB +3577642008,3577642015,EU +3577642016,3577642055,GB +3577642056,3577642063,EU +3577642064,3577642239,GB 3577642240,3577642495,EU -3577642496,3577642623,FR -3577642624,3577642751,EU -3577642752,3577643007,FR +3577642496,3577643007,FR 3577643008,3577643231,NL 3577643232,3577643247,GB 3577643248,3577643263,NL @@ -128619,9 +146273,7 @@ 3578208128,3578208191,PK 3578208192,3578234759,DE 3578234760,3578234767,US -3578234768,3578236791,DE -3578236792,3578236799,PL -3578236800,3578265599,DE +3578234768,3578265599,DE 3578265600,3578331135,GB 3578331136,3578339327,PL 3578339328,3578347519,ES @@ -128643,7 +146295,9 @@ 3578988096,3578988099,CH 3578988100,3578992959,DE 3578992960,3578992975,GB -3578992976,3578996999,DE +3578992976,3578995015,DE +3578995016,3578995023,BE +3578995024,3578996999,DE 3578997000,3578997007,CH 3578997008,3578997935,DE 3578997936,3578997943,FR @@ -128662,21 +146316,21 @@ 3579188240,3579188255,BE 3579188256,3579188415,GB 3579188416,3579188431,IS -3579188432,3579191759,GB +3579188432,3579189071,GB +3579189072,3579189087,CH +3579189088,3579191759,GB 3579191760,3579191775,DE -3579191776,3579193607,GB -3579193608,3579193703,NL +3579191776,3579193599,GB +3579193600,3579193703,NL 3579193704,3579193704,GB 3579193705,3579193705,NL 3579193706,3579193711,GB 3579193712,3579193727,BE -3579193728,3579193815,NL +3579193728,3579193807,NL +3579193808,3579193815,GB 3579193816,3579193823,ES -3579193824,3579193839,GB -3579193840,3579193855,NL -3579193856,3579194039,GB -3579194040,3579194047,SE -3579194048,3579194103,GB +3579193824,3579193855,NL +3579193856,3579194103,GB 3579194104,3579194111,US 3579194112,3579197055,GB 3579197056,3579197183,US @@ -128684,7 +146338,9 @@ 3579197312,3579197439,US 3579197440,3579197887,GB 3579197888,3579197903,IT -3579197904,3579205631,GB +3579197904,3579204127,GB +3579204128,3579204143,BE +3579204144,3579205631,GB 3579205632,3579205887,IE 3579205888,3579210079,GB 3579210080,3579210087,BE @@ -128917,22 +146573,34 @@ 3580199424,3580199935,SE 3580199936,3580200447,EE 3580200448,3580200959,SE -3580200960,3580201983,LT -3580201984,3580203519,SE +3580200960,3580203007,LT +3580203008,3580203135,HR +3580203136,3580203519,SE 3580203520,3580204543,RU -3580204544,3580205055,SE +3580204544,3580205055,NL 3580205056,3580207103,HR 3580207104,3580208127,SE -3580208128,3580208639,EE -3580208640,3580213247,SE +3580208128,3580209151,EE +3580209152,3580211199,SE +3580211200,3580213247,HR 3580213248,3580214271,CH 3580214272,3580214783,LV -3580214784,3580223487,SE +3580214784,3580215295,HR +3580215296,3580216319,EE +3580216320,3580216831,SE +3580216832,3580217087,EE +3580217088,3580221439,SE +3580221440,3580221951,HR +3580221952,3580222335,SE +3580222336,3580222719,HR +3580222720,3580222975,SE +3580222976,3580223487,HR 3580223488,3580231679,DE 3580231680,3580231935,LT 3580231936,3580232447,LV 3580232448,3580233727,LT -3580233728,3580235263,SE +3580233728,3580234751,NO +3580234752,3580235263,SE 3580235264,3580236799,LT 3580236800,3580237567,LV 3580237568,3580237823,LT @@ -128941,11 +146609,11 @@ 3580239872,3580241919,SE 3580241920,3580243967,CH 3580243968,3580248063,NL -3580248064,3580252671,SE -3580252672,3580254207,EE +3580248064,3580254207,EE 3580254208,3580260351,DE 3580260352,3580265727,AT -3580265728,3580268543,SE +3580265728,3580266495,EE +3580266496,3580268543,SE 3580268544,3580272639,LV 3580272640,3580280831,SE 3580280832,3580329983,RU @@ -129021,7 +146689,7 @@ 3580686336,3580688383,BG 3580688384,3580698623,RU 3580698624,3580702719,PL -3580706816,3580710911,RU +3580702720,3580710911,RU 3580710912,3580715007,UA 3580715008,3580719103,RU 3580719104,3580723199,NL @@ -129093,10 +146761,21 @@ 3582050304,3582058495,NL 3582058496,3582066687,AT 3582066688,3582074879,UA -3582074880,3582078631,GB +3582074880,3582076079,GB +3582076080,3582076095,AE +3582076096,3582076863,GB +3582076864,3582076895,DE +3582076896,3582076927,GB +3582076928,3582077111,ES +3582077112,3582077439,GB +3582077440,3582077471,DE +3582077472,3582077503,GB +3582077504,3582077951,DE +3582077952,3582078631,GB 3582078632,3582078639,DE -3582078640,3582081023,GB -3582081024,3582081535,ES +3582078640,3582081055,GB +3582081056,3582081087,ES +3582081088,3582081535,GB 3582081536,3582081791,DE 3582081792,3582083071,GB 3582083072,3582091263,BG @@ -129105,10 +146784,10 @@ 3582107648,3582115839,NL 3582115840,3582116095,SE 3582116096,3582116351,EE -3582116352,3582116863,SE +3582116352,3582116863,NO 3582116864,3582117887,EE -3582117888,3582119423,LT -3582119424,3582120959,SE +3582117888,3582120447,LT +3582120448,3582120959,NO 3582120960,3582121983,EE 3582121984,3582124031,LT 3582124032,3582125383,FI @@ -129120,45 +146799,33 @@ 3582156800,3582164991,GB 3582164992,3582173183,SE 3582173184,3582181375,GB -3582181376,3582190847,DE -3582190848,3582190879,CH -3582190880,3582190927,DE +3582181376,3582190927,DE 3582190928,3582190931,FR -3582190932,3582191023,DE -3582191024,3582191031,BE -3582191032,3582192127,DE +3582190932,3582192127,DE 3582192128,3582192143,NL -3582192144,3582192287,DE -3582192288,3582192303,CH -3582192304,3582194775,DE +3582192144,3582194775,DE 3582194776,3582194783,CY -3582194784,3582194863,DE -3582194864,3582194879,CH -3582194880,3582195135,DE -3582195136,3582195143,CH -3582195144,3582196183,DE -3582196184,3582196191,BE -3582196192,3582197127,DE +3582194784,3582197127,DE 3582197128,3582197135,BZ 3582197136,3582197759,DE 3582197760,3582205951,DK 3582205952,3582214143,AE 3582214144,3582222335,RU -3582222336,3582222511,SE +3582222336,3582222383,SE +3582222384,3582222391,NO +3582222392,3582222511,SE 3582222512,3582222527,DK 3582222528,3582222863,SE 3582222864,3582222879,NO 3582222880,3582223087,SE 3582223088,3582223095,NL -3582223096,3582223123,SE -3582223124,3582223127,NO -3582223128,3582223967,SE -3582223968,3582223975,NO -3582223976,3582224163,SE -3582224164,3582224167,NO -3582224168,3582226599,SE +3582223096,3582225719,SE +3582225720,3582225727,FI +3582225728,3582226599,SE 3582226600,3582226607,FI -3582226608,3582230527,SE +3582226608,3582227391,SE +3582227392,3582227455,FI +3582227456,3582230527,SE 3582230528,3582238719,BE 3582238720,3582255103,NL 3582255104,3582263295,KW @@ -129168,13 +146835,10 @@ 3582287872,3582296063,DE 3582296064,3582304255,GB 3582304256,3582312447,UA -3582312448,3582312703,GB -3582312704,3582313215,JE -3582313216,3582313231,GB -3582313232,3582313249,JE +3582312448,3582313249,JE 3582313250,3582313250,GB -3582313251,3582313255,JE -3582313256,3582313260,GB +3582313251,3582313256,JE +3582313257,3582313260,GB 3582313261,3582313271,JE 3582313272,3582313342,GB 3582313343,3582313343,JE @@ -129399,9 +147063,7 @@ 3582566752,3582566767,BE 3582566768,3582566783,EU 3582566784,3582566847,BE -3582566848,3582566863,EU -3582566864,3582566879,BE -3582566880,3582566911,EU +3582566848,3582566911,EU 3582566912,3582567019,BE 3582567020,3582567023,EU 3582567024,3582567039,BE @@ -129445,12 +147107,13 @@ 3582569472,3582569535,FR 3582569536,3582569983,EU 3582569984,3582570239,FR -3582570240,3582570367,DE -3582570368,3582570399,EU +3582570240,3582570399,GB 3582570400,3582570431,FR 3582570432,3582570463,EU 3582570464,3582570471,FR -3582570472,3582570751,EU +3582570472,3582570483,EU +3582570484,3582570487,FR +3582570488,3582570751,EU 3582570752,3582570823,FR 3582570824,3582570847,EU 3582570848,3582570855,FR @@ -129463,8 +147126,8 @@ 3582570976,3582570983,EU 3582570984,3582571031,FR 3582571032,3582571135,EU -3582571136,3582571199,FR -3582571200,3582571303,EU +3582571136,3582571263,FR +3582571264,3582571303,EU 3582571304,3582571307,CH 3582571308,3582571375,EU 3582571376,3582571391,FR @@ -129475,7 +147138,9 @@ 3582571488,3582571647,EU 3582571648,3582571687,IE 3582571688,3582571691,EU -3582571692,3582571719,IE +3582571692,3582571695,IE +3582571696,3582571707,EU +3582571708,3582571719,IE 3582571720,3582571751,EU 3582571752,3582571839,IE 3582571840,3582571999,EU @@ -129516,15 +147181,13 @@ 3582573552,3582573567,DE 3582573568,3582573599,EU 3582573600,3582573615,CH -3582573616,3582573631,EU -3582573632,3582573695,CH -3582573696,3582573823,EU +3582573616,3582573823,EU 3582573824,3582573887,CH 3582573888,3582573895,EU 3582573896,3582573903,CH -3582573904,3582573911,EU -3582573912,3582574015,CH -3582574016,3582574431,EU +3582573904,3582573919,EU +3582573920,3582573951,CH +3582573952,3582574431,EU 3582574432,3582574435,CH 3582574436,3582574455,EU 3582574456,3582574463,CH @@ -129534,6 +147197,7 @@ 3582590976,3582599167,FR 3582599168,3582607359,DE 3582607360,3582615551,RU +3582615552,3582623743,GB 3582623744,3582631935,FI 3582631936,3582635007,NO 3582635008,3582635263,SE @@ -129552,8 +147216,7 @@ 3582722048,3582730239,IT 3582730240,3582736383,ES 3582736384,3582737407,DZ -3582737408,3582737919,MA -3582737920,3582738431,ES +3582737408,3582738431,ES 3582738432,3582746623,DK 3582746624,3582754815,RU 3582754816,3582763007,GR @@ -129576,7 +147239,8 @@ 3582885888,3582894079,TR 3582894080,3582902271,CH 3582902272,3582910463,RU -3582910464,3582918655,SI +3582910464,3582917631,SI +3582917632,3582918655,LU 3582918656,3582926847,GB 3582926848,3582935039,ES 3582935040,3582943231,SI @@ -129611,11 +147275,11 @@ 3583031848,3583031895,GR 3583031896,3583031903,SG 3583031904,3583031919,LB -3583031920,3583032095,IT -3583032096,3583032127,GR +3583031920,3583032111,IT +3583032112,3583032127,GR 3583032128,3583032159,IT -3583032160,3583032191,FR -3583032192,3583032319,IT +3583032160,3583032255,FR +3583032256,3583032319,IT 3583032320,3583032575,FR 3583032576,3583032831,IT 3583032832,3583033087,SG @@ -129640,13 +147304,12 @@ 3583157280,3583157439,GB 3583157440,3583157471,IE 3583157472,3583157487,GB -3583157488,3583157503,IE -3583157504,3583158511,GB +3583157488,3583157759,IE +3583157760,3583158511,GB 3583158512,3583158527,IE -3583158528,3583159039,DE -3583159040,3583159359,GB -3583159360,3583159375,DE -3583159376,3583160319,GB +3583158528,3583158783,GB +3583158784,3583159039,DE +3583159040,3583160319,GB 3583160320,3583161343,DE 3583161344,3583162271,GB 3583162272,3583162303,IE @@ -129667,7 +147330,11 @@ 3583246336,3583254527,RU 3583254528,3583262719,GB 3583262720,3583270911,TR -3583270912,3583287295,DE +3583270912,3583283743,DE +3583283744,3583283747,A2 +3583283748,3583283867,DE +3583283868,3583283871,A2 +3583283872,3583287295,DE 3583287296,3583295487,RU 3583295488,3583303679,ES 3583303680,3583311871,NL @@ -129689,9 +147356,13 @@ 3583342592,3583344639,ME 3583344640,3583345663,BG 3583345664,3583346175,MK -3583346176,3583350271,BG +3583346176,3583346687,BG +3583346688,3583346943,MK +3583346944,3583350271,BG 3583350272,3583351039,MK -3583351040,3583352319,BG +3583351040,3583351807,BG +3583351808,3583352063,MK +3583352064,3583352319,BG 3583352320,3583352831,MK 3583352832,3583361023,CY 3583361024,3583369215,IT @@ -129719,9 +147390,9 @@ 3583533056,3583541247,DE 3583541248,3583549439,RU 3583549440,3583557631,NL -3583557632,3583558399,IT -3583558400,3583558527,SM -3583558528,3583565823,IT +3583557632,3583561471,IT +3583561472,3583561503,SM +3583561504,3583565823,IT 3583565824,3583574015,GB 3583574016,3583582207,NO 3583582208,3583590399,AT @@ -129739,9 +147410,7 @@ 3583705240,3583705247,NA 3583705248,3583705255,UA 3583705256,3583705263,NA -3583705264,3583705287,UA -3583705288,3583705295,NA -3583705296,3583705303,UA +3583705264,3583705303,UA 3583705304,3583705319,NA 3583705320,3583705335,UA 3583705336,3583705343,NA @@ -129759,24 +147428,15 @@ 3583705848,3583705855,NA 3583705856,3583705859,UA 3583705860,3583705863,NA -3583705864,3583705887,UA -3583705888,3583705895,RU -3583705896,3583705903,UA -3583705904,3583705911,NA -3583705912,3583705919,RU -3583705920,3583706023,UA +3583705864,3583706023,UA 3583706024,3583706031,NA 3583706032,3583706055,UA 3583706056,3583706063,RU 3583706064,3583706103,UA 3583706104,3583706107,NA -3583706108,3583706151,UA -3583706152,3583706159,NA -3583706160,3583706191,UA +3583706108,3583706191,UA 3583706192,3583706199,NA -3583706200,3583706223,UA -3583706224,3583706231,NA -3583706232,3583706295,UA +3583706200,3583706295,UA 3583706296,3583706319,NA 3583706320,3583706463,UA 3583706464,3583706471,NA @@ -129784,17 +147444,13 @@ 3583706496,3583706511,NA 3583706512,3583706519,UA 3583706520,3583706527,NA -3583706528,3583706535,UA -3583706536,3583706543,NA -3583706544,3583706575,UA +3583706528,3583706575,UA 3583706576,3583706583,NA 3583706584,3583706591,UA 3583706592,3583706607,NA 3583706608,3583706615,UA 3583706616,3583706623,NA -3583706624,3583706679,UA -3583706680,3583706687,NA -3583706688,3583706695,UA +3583706624,3583706695,UA 3583706696,3583706711,NA 3583706712,3583706743,UA 3583706744,3583706767,NA @@ -129806,8 +147462,8 @@ 3583706864,3583706879,NA 3583706880,3583706883,UA 3583706884,3583706887,NA -3583706888,3583706895,UA -3583706896,3583706911,NA +3583706888,3583706903,UA +3583706904,3583706911,NA 3583706912,3583706927,UA 3583706928,3583706943,NA 3583706944,3583706959,UA @@ -129826,13 +147482,9 @@ 3583707216,3583707223,NA 3583707224,3583707519,UA 3583707520,3583707535,NA -3583707536,3583707663,UA -3583707664,3583707671,NA -3583707672,3583707751,UA -3583707752,3583707767,NA -3583707768,3583707775,UA -3583707776,3583707791,NA -3583707792,3583707807,UA +3583707536,3583707751,UA +3583707752,3583707759,NA +3583707760,3583707807,UA 3583707808,3583707815,NA 3583707816,3583707839,UA 3583707840,3583707855,NA @@ -129856,35 +147508,18 @@ 3583709448,3583709455,NA 3583709456,3583709503,UA 3583709504,3583709511,RU -3583709512,3583709535,UA -3583709536,3583709543,NA -3583709544,3583709551,UA -3583709552,3583709559,NA -3583709560,3583709575,UA -3583709576,3583709583,NA -3583709584,3583709599,UA -3583709600,3583709607,NA +3583709512,3583709607,UA 3583709608,3583709615,RU -3583709616,3583709631,UA -3583709632,3583709639,NA -3583709640,3583709663,UA -3583709664,3583709671,NA -3583709672,3583709699,UA +3583709616,3583709699,UA 3583709700,3583709703,NA -3583709704,3583709727,UA -3583709728,3583709751,NA -3583709752,3583709759,UA +3583709704,3583709735,UA +3583709736,3583709743,NA +3583709744,3583709759,UA 3583709760,3583709767,NA -3583709768,3583709791,UA -3583709792,3583709799,NA -3583709800,3583709807,DE -3583709808,3583709823,UA -3583709824,3583709831,NA -3583709832,3583709839,UA -3583709840,3583709863,NA +3583709768,3583709847,UA +3583709848,3583709863,NA 3583709864,3583709871,RU -3583709872,3583709879,NA -3583709880,3583709887,UA +3583709872,3583709887,UA 3583709888,3583709911,NA 3583709912,3583709927,UA 3583709928,3583709943,NA @@ -129907,82 +147542,49 @@ 3583710408,3583710415,NA 3583710416,3583710455,UA 3583710456,3583710459,NA -3583710460,3583710519,UA -3583710520,3583710527,NA -3583710528,3583710631,UA +3583710460,3583710631,UA 3583710632,3583710639,NA 3583710640,3583710703,UA 3583710704,3583710711,NA 3583710712,3583710743,UA 3583710744,3583710751,BE -3583710752,3583710855,UA -3583710856,3583710863,NA -3583710864,3583710871,UA -3583710872,3583710879,NA -3583710880,3583710887,UA +3583710752,3583710887,UA 3583710888,3583710895,NA -3583710896,3583710991,UA -3583710992,3583710999,NA -3583711000,3583711007,UA -3583711008,3583711015,RU +3583710896,3583711015,UA 3583711016,3583711023,NA 3583711024,3583711247,UA 3583711248,3583711255,NA -3583711256,3583711311,UA -3583711312,3583711319,NA -3583711320,3583711327,UA +3583711256,3583711327,UA 3583711328,3583711335,NA 3583711336,3583711359,UA 3583711360,3583711367,NA 3583711368,3583711375,UA 3583711376,3583711383,NA -3583711384,3583711575,UA -3583711576,3583711591,NA -3583711592,3583711631,UA -3583711632,3583711639,RU -3583711640,3583711695,UA -3583711696,3583711703,NA -3583711704,3583711711,UA +3583711384,3583711711,UA 3583711712,3583711719,NA 3583711720,3583711783,UA 3583711784,3583711799,NA 3583711800,3583711815,UA 3583711816,3583711823,NA -3583711824,3583711871,UA -3583711872,3583711879,NA -3583711880,3583712015,UA -3583712016,3583712031,NA -3583712032,3583712119,UA +3583711824,3583712015,UA +3583712016,3583712023,NA +3583712024,3583712119,UA 3583712120,3583712127,NA 3583712128,3583712159,UA -3583712160,3583712199,NA -3583712200,3583712311,UA -3583712312,3583712319,NA -3583712320,3583712455,UA +3583712160,3583712191,NA +3583712192,3583712455,UA 3583712456,3583712463,NA 3583712464,3583712471,UA 3583712472,3583712479,NA -3583712480,3583712623,UA -3583712624,3583712631,NA -3583712632,3583712655,UA -3583712656,3583712663,NA -3583712664,3583712735,UA -3583712736,3583712743,NA -3583712744,3583712759,UA -3583712760,3583712763,NA -3583712764,3583712775,UA +3583712480,3583712527,UA +3583712528,3583712535,IN +3583712536,3583712775,UA 3583712776,3583712783,NA -3583712784,3583712831,UA -3583712832,3583712847,AQ -3583712848,3583712927,UA -3583712928,3583712943,NA +3583712784,3583712935,UA +3583712936,3583712943,NA 3583712944,3583713007,UA 3583713008,3583713015,RU -3583713016,3583713143,UA -3583713144,3583713151,NA -3583713152,3583713183,UA -3583713184,3583713191,NA -3583713192,3583713279,UA +3583713016,3583713279,UA 3583713280,3583721471,CZ 3583721472,3583729663,DE 3583729664,3583737855,TR @@ -129993,34 +147595,46 @@ 3583741696,3583741951,NL 3583741952,3583742719,EU 3583742720,3583743487,DE -3583743488,3583743519,EU +3583743488,3583743503,FR +3583743504,3583743519,EU 3583743520,3583743551,FR 3583743552,3583743615,EU 3583743616,3583743743,GB -3583743744,3583743975,EU +3583743744,3583743775,EU +3583743776,3583743807,NL +3583743808,3583743975,EU 3583743976,3583743983,GB -3583743984,3583744067,EU +3583743984,3583744063,EU +3583744064,3583744067,FR 3583744068,3583744071,GB -3583744072,3583744127,EU -3583744128,3583744255,GB -3583744256,3583744287,EU +3583744072,3583744095,EU +3583744096,3583744099,DE +3583744100,3583744103,FR +3583744104,3583744111,GB +3583744112,3583744287,EU 3583744288,3583744303,GB 3583744304,3583744319,EU 3583744320,3583744447,GB 3583744448,3583744511,EU 3583744512,3583744767,GB 3583744768,3583744831,DE -3583744832,3583744839,GB -3583744840,3583744927,EU +3583744832,3583744927,EU 3583744928,3583744959,DE 3583744960,3583744991,GB -3583744992,3583745279,EU +3583744992,3583744999,EU +3583745000,3583745003,NL +3583745004,3583745215,EU +3583745216,3583745279,SE 3583745280,3583745535,GB 3583745536,3583745663,SE -3583745664,3583745799,EU +3583745664,3583745719,EU +3583745720,3583745723,FR +3583745724,3583745799,EU 3583745800,3583745807,NL 3583745808,3583745823,GB -3583745824,3583746047,EU +3583745824,3583745919,EU +3583745920,3583745951,GB +3583745952,3583746047,EU 3583746048,3583754239,PL 3583754240,3583762431,RU 3583762432,3583770623,CZ @@ -130042,8 +147656,8 @@ 3583852544,3583853055,SG 3583853056,3583854591,FI 3583854592,3583854726,GB -3583854727,3583854735,FI -3583854736,3583854871,GB +3583854727,3583854727,FI +3583854728,3583854871,GB 3583854872,3583854879,FI 3583854880,3583855103,GB 3583855104,3583855167,US @@ -130056,8 +147670,10 @@ 3583855248,3583855311,FI 3583855312,3583855327,US 3583855328,3583856383,FI -3583856384,3583856447,SG -3583856448,3583856615,FI +3583856384,3583856510,SG +3583856511,3583856511,FI +3583856512,3583856590,SG +3583856591,3583856615,FI 3583856616,3583856639,SG 3583856640,3583860735,FI 3583860736,3583868927,HU @@ -130137,7 +147753,13 @@ 3584221184,3584229375,NO 3584229376,3584245759,HU 3584245760,3584253951,NL -3584253952,3584262143,RS +3584253952,3584260095,AL +3584260096,3584260511,RS +3584260512,3584260607,AL +3584260608,3584260991,RS +3584260992,3584261119,AL +3584261120,3584261375,RS +3584261376,3584262143,AL 3584262144,3584270335,SE 3584270336,3584278527,FR 3584278528,3584286719,GB @@ -130218,7 +147840,9 @@ 3584614752,3584614759,GB 3584614760,3584614763,IE 3584614764,3584614767,GB -3584614768,3584622335,IE +3584614768,3584615167,IE +3584615168,3584615327,GB +3584615328,3584622335,IE 3584622336,3584622591,GB 3584622592,3584630783,FI 3584630784,3584638975,BG @@ -130268,44 +147892,23 @@ 3584929600,3584929727,DE 3584929728,3584931375,CH 3584931376,3584931391,ES -3584931392,3584933887,CH -3584933888,3584933919,SE -3584933920,3584933927,PL -3584933928,3584934079,SE -3584934080,3584934087,PL -3584934088,3584934167,SE -3584934168,3584934171,PL -3584934172,3584934219,SE -3584934220,3584934223,PL -3584934224,3584934431,SE -3584934432,3584934439,PL -3584934440,3584935487,SE -3584935488,3584935491,PL -3584935492,3584935735,SE -3584935736,3584935739,PL -3584935740,3584935775,SE -3584935776,3584935779,PL -3584935780,3584936227,SE -3584936228,3584936231,PL -3584936232,3584936327,SE -3584936328,3584936331,PL -3584936332,3584938607,SE -3584938608,3584938611,PL -3584938612,3584938711,SE -3584938712,3584938715,PL -3584938716,3584938719,SE -3584938720,3584938723,PL -3584938724,3584941111,SE -3584941112,3584941115,PL -3584941116,3584941131,SE -3584941132,3584941135,PL -3584941136,3584942079,SE +3584931392,3584932295,CH +3584932296,3584932303,DE +3584932304,3584933887,CH +3584933888,3584942079,NO 3584942080,3584950271,DK 3584950272,3584958463,UA 3584958464,3584966655,DE -3584966656,3584974847,DK +3584966656,3584972799,DK +3584972800,3584973823,SE +3584973824,3584974591,DK +3584974592,3584974847,SE 3584974848,3584983039,FR -3584983040,3584988655,US +3584983040,3584988575,US +3584988576,3584988591,UA +3584988592,3584988623,US +3584988624,3584988639,UA +3584988640,3584988655,US 3584988656,3584988671,UA 3584988672,3584990303,US 3584990304,3584990335,UA @@ -130323,15 +147926,9 @@ 3585024000,3585032191,CZ 3585032192,3585048575,LV 3585048576,3585050623,IQ -3585050624,3585054719,GB -3585054720,3585055063,NG -3585055064,3585055071,GB -3585055072,3585055087,NG -3585055088,3585056767,GB +3585050624,3585056767,GB 3585056768,3585064959,LB -3585064960,3585071405,GB -3585071406,3585071409,IN -3585071410,3585081343,GB +3585064960,3585081343,GB 3585081344,3585114111,IR 3585114112,3585122303,IS 3585122304,3585130495,ES @@ -130357,7 +147954,24 @@ 3585261568,3585269759,IT 3585269760,3585277951,SY 3585277952,3585286143,SE -3585286144,3585294335,NO +3585286144,3585289095,NO +3585289096,3585289215,GB +3585289216,3585289552,NO +3585289553,3585289599,GB +3585289600,3585289631,NO +3585289632,3585290751,GB +3585290752,3585290759,NO +3585290760,3585290783,GB +3585290784,3585290975,NO +3585290976,3585291007,GB +3585291008,3585293023,NO +3585293024,3585293055,GB +3585293056,3585293215,NO +3585293216,3585293263,GB +3585293264,3585293271,ZA +3585293272,3585293311,GB +3585293312,3585293823,NO +3585293824,3585294335,GB 3585294336,3585302527,DE 3585302528,3585310719,ES 3585310720,3585318911,DE @@ -130393,7 +148007,8 @@ 3585542336,3585542351,TR 3585542352,3585544903,DE 3585544904,3585544911,CH -3585544912,3585548287,DE +3585544912,3585544927,TR +3585544928,3585548287,DE 3585548288,3585556479,RU 3585556480,3585564671,DE 3585564672,3585572863,RU @@ -130436,7 +148051,8 @@ 3585697536,3585697791,A2 3585697792,3585698047,NG 3585698048,3585698303,A2 -3585698304,3585698815,NG +3585698304,3585698559,US +3585698560,3585698815,A2 3585698816,3585699071,GB 3585699072,3585699583,A2 3585699584,3585699711,US @@ -130444,8 +148060,7 @@ 3585699840,3585700095,IQ 3585700096,3585700159,NG 3585700160,3585700191,A2 -3585700192,3585700222,US -3585700223,3585700223,NG +3585700192,3585700223,NG 3585700224,3585700231,A2 3585700232,3585700239,US 3585700240,3585700255,ZA @@ -130473,8 +148088,7 @@ 3585702656,3585702911,TG 3585702912,3585703167,NG 3585703168,3585703423,FR -3585703424,3585703679,A2 -3585703680,3585703935,GB +3585703424,3585703935,A2 3585703936,3585712127,DE 3585712128,3585716335,AT 3585716336,3585716351,DE @@ -130484,12 +148098,20 @@ 3585720320,3585728511,GB 3585728512,3585736703,SE 3585736704,3585744895,HR -3585744896,3585750335,FR +3585744896,3585749295,FR +3585749296,3585749311,ES +3585749312,3585750015,FR +3585750016,3585750031,GB +3585750032,3585750271,FR +3585750272,3585750287,ES +3585750288,3585750335,FR 3585750336,3585750351,GB 3585750352,3585750367,DE 3585750368,3585750383,ES 3585750384,3585750399,PT -3585750400,3585753087,FR +3585750400,3585750447,FR +3585750448,3585750463,DE +3585750464,3585753087,FR 3585753088,3585761279,PL 3585761280,3585769471,UA 3585769472,3585777663,TR @@ -130503,8 +148125,8 @@ 3585835008,3585835023,GB 3585835024,3585835583,NL 3585835584,3585835647,IQ -3585835648,3585835791,NL -3585835792,3585835839,GQ +3585835648,3585835775,NL +3585835776,3585835839,GQ 3585835840,3585835847,AO 3585835848,3585835871,NL 3585835872,3585835879,IQ @@ -130551,7 +148173,9 @@ 3585843200,3585851391,NO 3585851392,3585859583,SE 3585859584,3585860607,RU -3585860608,3585865727,DE +3585860608,3585863679,DE +3585863680,3585864703,RU +3585864704,3585865727,DE 3585865728,3585867775,RU 3585867776,3585875967,NO 3585875968,3585884159,CH @@ -130562,17 +148186,23 @@ 3585902272,3585902447,NO 3585902448,3585902463,GB 3585902464,3585908735,NO -3585908736,3585909759,FR -3585909760,3585910271,MQ -3585910272,3585910783,FR -3585910784,3585911039,MQ -3585911040,3585911551,FR -3585911552,3585911807,GP -3585911808,3585912063,FR -3585912064,3585912319,GP -3585912320,3585912575,FR -3585912576,3585912831,GP -3585912832,3585916671,FR +3585908736,3585908991,GP +3585908992,3585909759,GF +3585909760,3585910015,GP +3585910016,3585910271,MQ +3585910272,3585910527,GP +3585910528,3585910783,FR +3585910784,3585911039,GP +3585911040,3585911295,FR +3585911296,3585913087,GP +3585913088,3585913343,FR +3585913344,3585914623,GP +3585914624,3585914879,GF +3585914880,3585915135,MQ +3585915136,3585915647,GP +3585915648,3585915903,FR +3585915904,3585916159,GP +3585916160,3585916671,FR 3585916672,3585916927,MQ 3585916928,3585925119,IT 3585925120,3585933311,CH @@ -130625,8 +148255,8 @@ 3586228224,3586237695,BE 3586237696,3586237951,NL 3586237952,3586244607,BE -3586244608,3586244927,NL -3586244928,3586246655,GB +3586244608,3586245119,NL +3586245120,3586246655,GB 3586246656,3586248703,BE 3586248704,3586250449,NL 3586250450,3586250457,BE @@ -130636,8 +148266,8 @@ 3586258944,3586259455,BE 3586259456,3586269247,NL 3586269248,3586269263,ES -3586269264,3586269343,NL -3586269344,3586269415,ES +3586269264,3586269375,NL +3586269376,3586269415,ES 3586269416,3586269423,NL 3586269424,3586269439,ES 3586269440,3586269471,NL @@ -130662,8 +148292,9 @@ 3586272384,3586272799,ES 3586272800,3586272807,IT 3586272808,3586272815,ES -3586272816,3586272831,IT -3586272832,3586272895,NL +3586272816,3586272823,IT +3586272824,3586272863,ES +3586272864,3586272895,NL 3586272896,3586272959,IT 3586272960,3586272991,ES 3586272992,3586273007,IT @@ -130687,21 +148318,23 @@ 3586441216,3586457599,DE 3586457600,3586473983,NL 3586473984,3586473987,SK -3586473988,3586476287,HU +3586473988,3586476031,HU +3586476032,3586476063,TR +3586476064,3586476287,HU 3586476288,3586476295,SK -3586476296,3586476311,HU -3586476312,3586476319,AT -3586476320,3586476351,HU +3586476296,3586476351,HU 3586476352,3586476383,AT 3586476384,3586476407,UA -3586476408,3586476431,HU +3586476408,3586476415,BG +3586476416,3586476431,HU 3586476432,3586476439,SK 3586476440,3586478079,HU 3586478080,3586478591,SK -3586478592,3586478847,TR +3586478592,3586478847,HU 3586478848,3586479103,SK 3586479104,3586479359,TR -3586479360,3586490367,HU +3586479360,3586479615,SK +3586479616,3586490367,HU 3586490368,3586506751,LT 3586506752,3586523135,NL 3586523136,3586542559,DE @@ -130712,11 +148345,21 @@ 3586543760,3586543791,GB 3586543792,3586544703,DE 3586544704,3586544719,AE -3586544720,3586545679,DE +3586544720,3586545119,DE +3586545120,3586545127,GB +3586545128,3586545679,DE 3586545680,3586545703,GB -3586545704,3586546375,DE +3586545704,3586546287,DE +3586546288,3586546303,GB +3586546304,3586546311,DE +3586546312,3586546319,GB +3586546320,3586546375,DE 3586546376,3586546383,GB -3586546384,3586555903,DE +3586546384,3586546415,DE +3586546416,3586546423,GB +3586546424,3586547087,DE +3586547088,3586547095,GB +3586547096,3586555903,DE 3586555904,3586572287,IT 3586572288,3586588671,RS 3586588672,3586596863,IT @@ -130761,8 +148404,7 @@ 3586679648,3586679711,IT 3586679712,3586679727,FR 3586679728,3586679743,IT -3586679744,3586680063,FR -3586680064,3586680319,IT +3586679744,3586680319,FR 3586680320,3586680447,ES 3586680448,3586680463,FR 3586680464,3586680543,ES @@ -130772,11 +148414,7 @@ 3586680608,3586680615,ES 3586680616,3586680767,FR 3586680768,3586680831,ES -3586680832,3586681087,FR -3586681088,3586681343,IT -3586681344,3586682111,FR -3586682112,3586682175,US -3586682176,3586682239,FR +3586680832,3586682239,FR 3586682240,3586682367,US 3586682368,3586682399,AT 3586682400,3586682879,FR @@ -130785,75 +148423,45 @@ 3586703360,3586719743,CH 3586719744,3586752511,ES 3586752512,3586785279,NL -3586785280,3586793471,RU +3586785280,3586793471,OM 3586793472,3586801663,CH -3586801664,3586818047,HR +3586801664,3586803487,HR +3586803488,3586803519,DE +3586803520,3586804751,HR +3586804752,3586804767,HU +3586804768,3586818047,HR 3586818048,3586834431,IE 3586834432,3586850495,DE 3586850496,3586850511,US -3586850512,3586850543,DE -3586850544,3586850559,GR -3586850560,3586850815,DE +3586850512,3586850815,DE 3586850816,3586867199,NO 3586867200,3586883583,FR 3586883584,3586899967,IT 3586899968,3586900287,DE 3586900288,3586900351,NL -3586900352,3586902271,DE -3586902272,3586902335,CH -3586902336,3586902411,DE -3586902412,3586902415,CH -3586902416,3586903263,DE -3586903264,3586903295,CH -3586903296,3586904223,DE -3586904224,3586904255,CH -3586904256,3586904319,DE -3586904320,3586904415,CH -3586904416,3586904831,DE +3586900352,3586901311,DE +3586901312,3586901375,ES +3586901376,3586904831,DE 3586904832,3586904839,VG -3586904840,3586905039,DE -3586905040,3586905055,CH -3586905056,3586905071,DE -3586905072,3586905079,CH -3586905080,3586905087,DE -3586905088,3586905119,CH -3586905120,3586905167,DE -3586905168,3586905199,CH +3586904840,3586905199,DE 3586905200,3586905215,GB -3586905216,3586905247,DE -3586905248,3586905279,CH -3586905280,3586905287,DE +3586905216,3586905287,DE 3586905288,3586905295,CY -3586905296,3586906391,DE -3586906392,3586906399,CH -3586906400,3586906423,DE -3586906424,3586906427,CH -3586906428,3586906719,DE -3586906720,3586906735,CH -3586906736,3586907903,DE -3586907904,3586908031,CH -3586908032,3586909695,DE -3586909696,3586909823,CH -3586909824,3586910559,DE +3586905296,3586910559,DE 3586910560,3586910567,NL 3586910568,3586910575,CY 3586910576,3586910587,NL -3586910588,3586910655,DE -3586910656,3586910703,NL -3586910704,3586910711,DE +3586910588,3586910591,DE +3586910592,3586910623,NL +3586910624,3586910655,DE +3586910656,3586910687,NL +3586910688,3586910711,DE 3586910712,3586910719,NL 3586910720,3586910991,DE -3586910992,3586911007,BE -3586911008,3586911039,DE -3586911040,3586911103,GB +3586910992,3586911039,BE +3586911040,3586911103,DE 3586911104,3586911167,NL -3586911168,3586911191,DE -3586911192,3586911195,BE -3586911196,3586912511,DE -3586912512,3586912575,FR -3586912576,3586912647,DE -3586912648,3586912651,FR -3586912652,3586916351,DE +3586911168,3586916351,DE 3586916352,3586924031,IT 3586924032,3586924047,US 3586924048,3586924543,IT @@ -130922,15 +148530,7 @@ 3587053056,3587053823,FR 3587053824,3587055615,GB 3587055616,3587063807,UZ -3587063808,3587071583,NL -3587071584,3587071599,BE -3587071600,3587071615,NL -3587071616,3587071631,DE -3587071632,3587072095,NL -3587072096,3587072127,DE -3587072128,3587074415,NL -3587074416,3587074431,BE -3587074432,3587080191,NL +3587063808,3587080191,NL 3587080192,3587082367,GB 3587082368,3587082431,US 3587082432,3587088383,GB @@ -130946,29 +148546,27 @@ 3587178796,3587178799,US 3587178800,3587179439,AT 3587179440,3587179455,GB -3587179456,3587179463,AT -3587179464,3587179471,CH -3587179472,3587186687,AT -3587186688,3587190783,DE -3587190784,3587191039,GB -3587191040,3587194495,DE +3587179456,3587186687,AT +3587186688,3587187199,A2 +3587187200,3587187455,GB +3587187456,3587188479,A2 +3587188480,3587188735,DE +3587188736,3587194495,A2 3587194496,3587194511,RU -3587194512,3587194879,DE +3587194512,3587194879,A2 3587194880,3587211263,GB 3587211264,3587211531,AT 3587211532,3587211535,DE -3587211536,3587211663,AT -3587211664,3587211671,IT -3587211672,3587213911,AT +3587211536,3587213911,AT 3587213912,3587213919,UY 3587213920,3587219455,AT 3587219456,3587227647,RU -3587227648,3587227759,NL +3587227648,3587227663,NL +3587227664,3587227679,GB +3587227680,3587227759,NL 3587227760,3587227775,GB 3587227776,3587227903,NL -3587227904,3587227967,GB -3587227968,3587227983,DE -3587227984,3587228047,GB +3587227904,3587228047,GB 3587228048,3587228087,NL 3587228088,3587228127,GB 3587228128,3587228271,NL @@ -131003,9 +148601,7 @@ 3587230528,3587230543,NL 3587230544,3587230607,GB 3587230608,3587230623,NL -3587230624,3587230687,GB -3587230688,3587230719,NL -3587230720,3587230791,GB +3587230624,3587230791,GB 3587230792,3587230799,NL 3587230800,3587230847,GB 3587230848,3587230911,NL @@ -131018,7 +148614,9 @@ 3587232536,3587232711,GB 3587232712,3587232719,NL 3587232720,3587232767,GB -3587232768,3587233103,NL +3587232768,3587232911,NL +3587232912,3587232927,GB +3587232928,3587233103,NL 3587233104,3587233119,GB 3587233120,3587233295,NL 3587233296,3587233319,GB @@ -131039,16 +148637,18 @@ 3587233952,3587233967,NL 3587233968,3587233983,GB 3587233984,3587233999,NL -3587234000,3587234015,GB -3587234016,3587234031,NL -3587234032,3587234047,GB +3587234000,3587234047,GB 3587234048,3587234079,NL 3587234080,3587234095,GB -3587234096,3587234143,NL +3587234096,3587234111,NL +3587234112,3587234127,GB +3587234128,3587234143,NL 3587234144,3587234159,GB 3587234160,3587234207,NL 3587234208,3587234815,GB -3587234816,3587236447,NL +3587234816,3587236351,NL +3587236352,3587236383,GB +3587236384,3587236447,NL 3587236448,3587236479,GB 3587236480,3587236511,NL 3587236512,3587236543,GB @@ -131058,43 +148658,53 @@ 3587237376,3587237391,GB 3587237392,3587237399,NL 3587237400,3587237407,GB -3587237408,3587237471,NL +3587237408,3587237447,NL +3587237448,3587237455,GB +3587237456,3587237471,NL 3587237472,3587237487,GB 3587237488,3587237495,NL 3587237496,3587237519,GB 3587237520,3587237567,NL 3587237568,3587237887,GB -3587237888,3587238471,NL -3587238472,3587238479,GB -3587238480,3587238527,NL +3587237888,3587238463,NL +3587238464,3587238479,GB +3587238480,3587238511,NL +3587238512,3587238519,GB +3587238520,3587238527,NL 3587238528,3587238543,GB 3587238544,3587238567,NL 3587238568,3587238583,GB 3587238584,3587238607,NL 3587238608,3587238911,GB -3587238912,3587239303,NL +3587238912,3587239279,NL +3587239280,3587239287,GB +3587239288,3587239303,NL 3587239304,3587239311,GB -3587239312,3587239903,NL -3587239904,3587239935,GB -3587239936,3587240007,NL -3587240008,3587240015,GB -3587240016,3587240023,NL -3587240024,3587240031,GB -3587240032,3587240087,NL -3587240088,3587240095,GB -3587240096,3587240103,NL +3587239312,3587239367,NL +3587239368,3587239423,GB +3587239424,3587239911,NL +3587239912,3587239919,GB +3587239920,3587240063,NL +3587240064,3587240071,BE +3587240072,3587240103,NL 3587240104,3587240107,GB 3587240108,3587240271,NL -3587240272,3587240287,GB -3587240288,3587240359,NL +3587240272,3587240279,GB +3587240280,3587240359,NL 3587240360,3587240367,GB -3587240368,3587240439,NL -3587240440,3587240447,GB -3587240448,3587240511,NL -3587240512,3587240575,GB -3587240576,3587240615,NL -3587240616,3587240623,GB -3587240624,3587241143,NL +3587240368,3587240519,NL +3587240520,3587240527,GB +3587240528,3587240543,NL +3587240544,3587240559,IE +3587240560,3587240567,BE +3587240568,3587240575,GB +3587240576,3587240607,NL +3587240608,3587240623,GB +3587240624,3587241039,NL +3587241040,3587241047,GB +3587241048,3587241071,NL +3587241072,3587241087,GB +3587241088,3587241143,NL 3587241144,3587241151,GB 3587241152,3587241223,NL 3587241224,3587241247,GB @@ -131102,15 +148712,28 @@ 3587241264,3587241271,GB 3587241272,3587241343,NL 3587241344,3587241471,GB -3587241472,3587242103,NL -3587242104,3587242111,GB -3587242112,3587242463,NL -3587242464,3587242471,GB -3587242472,3587243935,NL -3587243936,3587243943,GB -3587243944,3587243967,NL +3587241472,3587242071,NL +3587242072,3587242079,IE +3587242080,3587242095,NL +3587242096,3587242111,GB +3587242112,3587242271,NL +3587242272,3587242287,GB +3587242288,3587242463,NL +3587242464,3587242495,GB +3587242496,3587243407,NL +3587243408,3587243415,GB +3587243416,3587243911,NL +3587243912,3587243919,GB +3587243920,3587243935,NL +3587243936,3587243951,GB +3587243952,3587243967,NL 3587243968,3587243975,GB -3587243976,3587244031,NL +3587243976,3587243983,NL +3587243984,3587243991,GB +3587243992,3587244007,NL +3587244008,3587244015,GB +3587244016,3587244023,NL +3587244024,3587244031,GB 3587244032,3587260415,IT 3587260416,3587284991,DE 3587284992,3587285135,A2 @@ -131242,12 +148865,18 @@ 3587391488,3587407871,KZ 3587407872,3587408383,NL 3587408384,3587408895,BE -3587408896,3587424255,NL +3587408896,3587409407,RU +3587409408,3587410431,BE +3587410432,3587410687,NL +3587410688,3587412223,BE +3587412224,3587424255,NL 3587424256,3587440639,DE 3587440640,3587457023,SE 3587457024,3587459263,GB 3587459264,3587459295,DE -3587459296,3587473407,GB +3587459296,3587465359,GB +3587465360,3587465367,US +3587465368,3587473407,GB 3587473408,3587489791,IT 3587489792,3587506175,EG 3587506176,3587538943,IT @@ -131262,21 +148891,23 @@ 3587620864,3587637247,SE 3587637248,3587653631,FR 3587653632,3587670015,SK -3587670016,3587679135,IT -3587679136,3587679143,ES -3587679144,3587683327,IT +3587670016,3587683327,IT 3587683328,3587683359,FR 3587683360,3587686031,IT 3587686032,3587686039,FR 3587686040,3587687591,IT 3587687592,3587687599,NL -3587687600,3587699255,IT +3587687600,3587689151,IT +3587689152,3587689159,FR +3587689160,3587699255,IT 3587699256,3587699263,A2 3587699264,3587699559,IT 3587699560,3587699567,GB 3587699568,3587700031,IT 3587700032,3587700039,GB -3587700040,3587701295,IT +3587700040,3587701271,IT +3587701272,3587701279,DE +3587701280,3587701295,IT 3587701296,3587701303,FR 3587701304,3587702783,IT 3587702784,3587710975,DE @@ -131296,7 +148927,9 @@ 3587866624,3587874815,FR 3587874816,3587877407,DE 3587877408,3587877439,NL -3587877440,3587878527,DE +3587877440,3587878335,DE +3587878336,3587878399,BA +3587878400,3587878527,DE 3587878528,3587878559,AT 3587878560,3587883007,DE 3587883008,3587915775,GB @@ -131311,7 +148944,9 @@ 3587981312,3587997695,IS 3587997696,3588014079,DE 3588014080,3588030463,CZ -3588030464,3588046847,RU +3588030464,3588031615,RU +3588031616,3588031623,LV +3588031624,3588046847,RU 3588046848,3588060351,DE 3588060352,3588060359,CH 3588060360,3588063231,DE @@ -131347,12 +148982,9 @@ 3588521984,3588538367,PT 3588538368,3588544383,GB 3588544384,3588544391,IE -3588544392,3588550447,GB -3588550448,3588550463,IE -3588550464,3588553983,GB +3588544392,3588553983,GB 3588553984,3588554239,IE -3588554240,3588554255,DE -3588554256,3588554687,GB +3588554240,3588554687,GB 3588554688,3588554751,IE 3588554752,3588571135,AT 3588571136,3588587519,GB @@ -131360,9 +148992,11 @@ 3588588568,3588588575,IT 3588588576,3588590175,ES 3588590176,3588590207,BE -3588590208,3588594751,ES -3588594752,3588594759,DE -3588594760,3588598607,ES +3588590208,3588590591,ES +3588590592,3588590847,FR +3588590848,3588595199,ES +3588595200,3588595455,FR +3588595456,3588598607,ES 3588598608,3588598615,IT 3588598616,3588603903,ES 3588603904,3588620287,SI @@ -131385,7 +149019,9 @@ 3588782272,3588782279,A2 3588782280,3588784127,GB 3588784128,3588800511,CH -3588800512,3588816895,RU +3588800512,3588802687,RU +3588802688,3588802815,CH +3588802816,3588816895,RU 3588816896,3588833279,IT 3588833280,3588848767,RO 3588848768,3588848775,FR @@ -131403,9 +149039,7 @@ 3588997120,3589013503,AT 3589013504,3589021695,ES 3589021696,3589029887,SA -3589029888,3589030183,NL -3589030184,3589030191,FR -3589030192,3589030303,NL +3589029888,3589030303,NL 3589030304,3589030335,FR 3589030336,3589034143,NL 3589034144,3589034159,ES @@ -131472,17 +149106,20 @@ 3589373952,3589375495,DE 3589375496,3589375503,CI 3589375504,3589390335,DE -3589390336,3589406719,RU +3589390336,3589423103,RU 3589423104,3589423615,IT 3589423616,3589424127,CH 3589424128,3589424639,SE 3589424640,3589425151,ES 3589425152,3589425663,CH 3589425664,3589426175,GB -3589426176,3589426303,FR +3589426176,3589426239,FR +3589426240,3589426303,IT 3589426304,3589427199,GB 3589427200,3589427247,FR -3589427248,3589429247,GB +3589427248,3589428223,GB +3589428224,3589428255,CH +3589428256,3589429247,GB 3589429248,3589429503,FR 3589429504,3589430271,GB 3589430272,3589430543,FR @@ -131531,7 +149168,13 @@ 3589545984,3589554175,DE 3589554176,3589570559,PS 3589570560,3589570655,NL -3589570656,3589578751,GB +3589570656,3589570671,GB +3589570672,3589570679,NL +3589570680,3589570783,GB +3589570784,3589570799,NL +3589570800,3589571071,GB +3589571072,3589571135,NL +3589571136,3589578751,GB 3589578752,3589579391,NL 3589579392,3589579775,GB 3589579776,3589580799,NL @@ -131549,7 +149192,9 @@ 3589582656,3589583359,NL 3589583360,3589583647,GB 3589583648,3589583663,NL -3589583664,3589584255,GB +3589583664,3589583743,GB +3589583744,3589583871,NL +3589583872,3589584255,GB 3589584256,3589584271,NL 3589584272,3589584639,GB 3589584640,3589585279,NL @@ -131567,9 +149212,13 @@ 3589680752,3589680767,MQ 3589680768,3589685247,FR 3589685248,3589718015,GB -3589718016,3589719343,BE +3589718016,3589719279,BE +3589719280,3589719287,FR +3589719288,3589719343,BE 3589719344,3589719347,LU -3589719348,3589719847,BE +3589719348,3589719383,BE +3589719384,3589719391,GB +3589719392,3589719847,BE 3589719848,3589719855,AT 3589719856,3589719967,BE 3589719968,3589719975,GB @@ -131688,7 +149337,9 @@ 3589724200,3589724207,ES 3589724208,3589724271,BE 3589724272,3589724287,NL -3589724288,3589724671,BE +3589724288,3589724351,BE +3589724352,3589724367,ES +3589724368,3589724671,BE 3589724672,3589724679,FR 3589724680,3589724695,GB 3589724696,3589724703,BE @@ -131737,7 +149388,9 @@ 3589730088,3589730095,GB 3589730096,3589730111,BE 3589730112,3589730119,GB -3589730120,3589733375,BE +3589730120,3589732671,BE +3589732672,3589732687,DE +3589732688,3589733375,BE 3589733376,3589733439,LU 3589733440,3589734167,BE 3589734168,3589734175,DE @@ -131775,11 +149428,11 @@ 3589828608,3589828639,SE 3589828640,3589828671,NL 3589828672,3589828735,EU -3589828736,3589828863,NL -3589828864,3589829119,EU +3589828736,3589828991,NL +3589828992,3589829119,ES 3589829120,3589829183,GB -3589829184,3589829375,EU -3589829376,3589830655,GB +3589829184,3589829631,EU +3589829632,3589830655,GB 3589830656,3589831167,DE 3589831168,3589831679,US 3589831680,3589832703,FR @@ -131798,32 +149451,14 @@ 3589891616,3589891631,BE 3589891632,3589931007,GB 3589931008,3589947391,SI -3589947392,3589951863,FI -3589951864,3589951871,AX -3589951872,3589963775,FI +3589947392,3589963775,FI 3589963776,3589971231,ES 3589971232,3589971247,CA 3589971248,3589980159,ES 3589980160,3589996543,CZ -3589996544,3589996575,GB -3589996576,3589996623,NL -3589996624,3589996639,GB -3589996640,3589996655,NL -3589996656,3589996735,GB -3589996736,3589996799,NL -3589996800,3589996863,GB -3589996864,3589996879,NL -3589996880,3589996911,GB -3589996912,3589996931,NL -3589996932,3589996959,GB -3589996960,3589996991,NL -3589996992,3589997055,GB +3589996544,3589997055,GB 3589997056,3589997311,NL -3589997312,3589997439,GB -3589997440,3589997503,NL -3589997504,3589997535,GB -3589997536,3589997543,NL -3589997544,3589997559,GB +3589997312,3589997559,GB 3589997560,3589997567,NL 3589997568,3590012927,GB 3590012928,3590029311,BE @@ -131847,29 +149482,35 @@ 3590155808,3590155815,SI 3590155816,3590155823,HR 3590155824,3590155871,SI -3590155872,3590156431,HR +3590155872,3590156359,HR +3590156360,3590156367,SI +3590156368,3590156407,HR +3590156408,3590156415,RS +3590156416,3590156431,HR 3590156432,3590156447,SI -3590156448,3590156543,HR -3590156544,3590156575,SI -3590156576,3590156671,HR +3590156448,3590156599,HR +3590156600,3590156607,SI +3590156608,3590156671,HR 3590156672,3590156687,SI 3590156688,3590156719,HR -3590156720,3590156727,SI -3590156728,3590156991,HR -3590156992,3590157039,SI +3590156720,3590156735,SI +3590156736,3590156943,HR +3590156944,3590156951,SI +3590156952,3590156959,HR +3590156960,3590157039,SI 3590157040,3590157311,HR 3590157312,3590157343,RS 3590157344,3590157351,SI 3590157352,3590157359,RS -3590157360,3590157439,SI -3590157440,3590157471,RS +3590157360,3590157455,SI +3590157456,3590157471,RS 3590157472,3590157487,SI 3590157488,3590157567,RS 3590157568,3590157631,SI 3590157632,3590157679,RS 3590157680,3590157687,SI -3590157688,3590157695,RS -3590157696,3590157743,SI +3590157688,3590157727,RS +3590157728,3590157743,SI 3590157744,3590157751,RS 3590157752,3590157759,SI 3590157760,3590157767,RS @@ -131879,14 +149520,16 @@ 3590157824,3590157839,RS 3590157840,3590157855,SI 3590157856,3590157951,RS -3590157952,3590158015,SI -3590158016,3590158343,RS -3590158344,3590158407,SI +3590157952,3590158079,SI +3590158080,3590158343,RS +3590158344,3590158359,SI +3590158360,3590158367,RS +3590158368,3590158407,SI 3590158408,3590158415,RS -3590158416,3590158431,SI +3590158416,3590158431,ME 3590158432,3590158439,RS -3590158440,3590158455,SI -3590158456,3590158479,RS +3590158440,3590158447,SI +3590158448,3590158479,RS 3590158480,3590158527,SI 3590158528,3590158535,RS 3590158536,3590158591,SI @@ -131902,18 +149545,17 @@ 3590225920,3590234111,TR 3590234112,3590242303,GB 3590242304,3590244351,US -3590244352,3590244863,DE -3590244864,3590245119,GR -3590245120,3590245167,BE -3590245168,3590245279,FR -3590245280,3590245311,BE +3590244352,3590244607,DE +3590244608,3590244863,IT +3590244864,3590245119,FR +3590245120,3590245135,BE +3590245136,3590245143,FR +3590245144,3590245183,BE +3590245184,3590245311,FR 3590245312,3590245439,US 3590245440,3590245503,FR 3590245504,3590245567,GB -3590245568,3590245631,US -3590245632,3590245887,FR -3590245888,3590245983,US -3590245984,3590246175,FR +3590245568,3590246175,FR 3590246176,3590246207,AU 3590246208,3590246271,FR 3590246272,3590246287,DE @@ -131938,45 +149580,40 @@ 3590248448,3590248959,US 3590248960,3590249471,ES 3590249472,3590249983,IE -3590249984,3590250495,GR +3590249984,3590250239,FR +3590250240,3590250495,GR 3590250496,3590250751,IE -3590250752,3590251007,GR -3590251008,3590251263,IT +3590250752,3590251263,FR 3590251264,3590251519,DE -3590251520,3590251551,ES -3590251552,3590251583,FR +3590251520,3590251583,FR 3590251584,3590251647,US 3590251648,3590251775,NL -3590251776,3590251839,FR -3590251840,3590251903,ES -3590251904,3590251967,FR -3590251968,3590252543,ES +3590251776,3590251967,FR +3590251968,3590252287,ES +3590252288,3590252543,FR 3590252544,3590253055,GB 3590253056,3590253311,DE 3590253312,3590253375,FR 3590253376,3590253407,US 3590253408,3590254079,FR -3590254080,3590254087,DE -3590254088,3590254095,FR -3590254096,3590254111,DE +3590254080,3590254111,DE 3590254112,3590254127,FR 3590254128,3590254135,RU 3590254136,3590254143,FR 3590254144,3590254271,US 3590254272,3590254463,FR -3590254464,3590254879,ES -3590254880,3590254911,FR +3590254464,3590254591,ES +3590254592,3590254911,FR 3590254912,3590254975,ES 3590254976,3590255039,DE 3590255040,3590255047,FR 3590255048,3590255071,ES 3590255072,3590255103,FR 3590255104,3590255359,ES -3590255360,3590255615,FR -3590255616,3590255871,BE +3590255360,3590255871,FR 3590255872,3590256127,US 3590256128,3590256383,ES -3590256384,3590256639,IT +3590256384,3590256639,FR 3590256640,3590256703,US 3590256704,3590256719,BE 3590256720,3590256735,FR @@ -131998,17 +149635,22 @@ 3590307904,3590307935,UA 3590307936,3590307951,A2 3590307952,3590307967,NG -3590307968,3590308031,A2 +3590307968,3590307991,A2 +3590307992,3590307995,SO +3590307996,3590308031,A2 3590308032,3590308047,UG 3590308048,3590308055,NG 3590308056,3590308063,A2 -3590308064,3590308071,ZW +3590308064,3590308071,SO 3590308072,3590308079,RW -3590308080,3590308095,A2 +3590308080,3590308087,IQ +3590308088,3590308095,A2 3590308096,3590308103,IQ 3590308104,3590308119,A2 3590308120,3590308127,IQ -3590308128,3590308175,A2 +3590308128,3590308135,A2 +3590308136,3590308143,IQ +3590308144,3590308175,A2 3590308176,3590308191,IQ 3590308192,3590308199,A2 3590308200,3590308238,IQ @@ -132016,32 +149658,42 @@ 3590308248,3590308287,IQ 3590308288,3590308303,A2 3590308304,3590308311,SO -3590308312,3590308319,A2 -3590308320,3590308343,IQ +3590308312,3590308319,IQ +3590308320,3590308327,A2 +3590308328,3590308343,IQ 3590308344,3590308351,A2 3590308352,3590308367,IQ 3590308368,3590308375,A2 3590308376,3590308391,IQ 3590308392,3590308399,A2 -3590308400,3590308423,IQ -3590308424,3590308431,A2 -3590308432,3590308439,IQ -3590308440,3590308447,A2 -3590308448,3590308455,IQ -3590308456,3590308463,A2 -3590308464,3590308471,IQ -3590308472,3590308519,A2 +3590308400,3590308407,IQ +3590308408,3590308415,A2 +3590308416,3590308431,IQ +3590308432,3590308439,A2 +3590308440,3590308455,IQ +3590308456,3590308479,A2 +3590308480,3590308487,IQ +3590308488,3590308519,A2 3590308520,3590308527,IQ -3590308528,3590308607,A2 +3590308528,3590308535,A2 +3590308536,3590308543,IQ +3590308544,3590308551,A2 +3590308552,3590308559,IQ +3590308560,3590308567,A2 +3590308568,3590308583,IQ +3590308584,3590308607,A2 3590308608,3590308735,NG -3590308736,3590308767,A2 +3590308736,3590308743,A2 +3590308744,3590308747,SO +3590308748,3590308767,A2 3590308768,3590308775,RW 3590308776,3590308783,ZA 3590308784,3590308799,ZW -3590308800,3590308807,A2 +3590308800,3590308807,GB 3590308808,3590308815,ZM 3590308816,3590308823,KE -3590308824,3590308855,A2 +3590308824,3590308831,SO +3590308832,3590308855,A2 3590308856,3590308863,NG 3590308864,3590308951,A2 3590308952,3590308959,GH @@ -132054,9 +149706,9 @@ 3590309072,3590309079,MW 3590309080,3590309103,NG 3590309104,3590309111,ZW -3590309112,3590309119,A2 -3590309120,3590309375,GB -3590309376,3590309511,A2 +3590309112,3590309251,A2 +3590309252,3590309255,SO +3590309256,3590309511,A2 3590309512,3590309519,AO 3590309520,3590309527,NG 3590309528,3590309535,CM @@ -132074,39 +149726,35 @@ 3590309712,3590309719,IQ 3590309720,3590309727,A2 3590309728,3590309759,IQ -3590309760,3590309767,A2 -3590309768,3590309791,IQ +3590309760,3590309775,A2 +3590309776,3590309791,IQ 3590309792,3590309799,A2 3590309800,3590309807,IQ 3590309808,3590309815,A2 -3590309816,3590309823,IQ -3590309824,3590309831,A2 -3590309832,3590309839,IQ +3590309816,3590309839,IQ 3590309840,3590309863,A2 3590309864,3590309871,IQ 3590309872,3590309879,A2 3590309880,3590309887,IQ 3590309888,3590310143,A2 -3590310144,3590310167,IQ -3590310168,3590310175,A2 +3590310144,3590310175,IQ 3590310176,3590310183,LR -3590310184,3590310207,IQ -3590310208,3590310215,SD +3590310184,3590310191,A2 +3590310192,3590310215,IQ 3590310216,3590310223,A2 3590310224,3590310255,IQ -3590310256,3590310263,A2 -3590310264,3590310271,SD -3590310272,3590310287,A2 +3590310256,3590310271,A2 +3590310272,3590310279,IQ +3590310280,3590310287,A2 3590310288,3590310303,IQ 3590310304,3590310311,A2 3590310312,3590310319,IQ 3590310320,3590310327,A2 3590310328,3590310335,NG -3590310336,3590310343,IQ -3590310344,3590310351,A2 -3590310352,3590310367,IQ -3590310368,3590310383,A2 -3590310384,3590310391,IQ +3590310336,3590310359,A2 +3590310360,3590310367,IQ +3590310368,3590310375,A2 +3590310376,3590310391,IQ 3590310392,3590310655,A2 3590310656,3590310911,GB 3590310912,3590310919,IQ @@ -132114,13 +149762,13 @@ 3590310952,3590310959,IQ 3590310960,3590310967,A2 3590310968,3590311007,IQ -3590311008,3590311015,A2 -3590311016,3590311023,IQ -3590311024,3590311031,A2 +3590311008,3590311031,A2 3590311032,3590311039,IQ -3590311040,3590311079,A2 -3590311080,3590311095,IQ -3590311096,3590311103,A2 +3590311040,3590311055,A2 +3590311056,3590311063,IQ +3590311064,3590311079,A2 +3590311080,3590311087,IQ +3590311088,3590311103,A2 3590311104,3590311111,IQ 3590311112,3590311119,A2 3590311120,3590311135,IQ @@ -132131,24 +149779,23 @@ 3590311184,3590311199,A2 3590311200,3590311207,SD 3590311208,3590311215,CD -3590311216,3590311223,AO +3590311216,3590311223,A2 3590311224,3590311231,CD -3590311232,3590311239,AO -3590311240,3590311255,A2 +3590311232,3590311255,A2 3590311256,3590311263,ZW 3590311264,3590311271,A2 3590311272,3590311279,SD 3590311280,3590311287,NG 3590311288,3590311295,A2 3590311296,3590311303,LR -3590311304,3590311311,NG +3590311304,3590311311,A2 3590311312,3590311319,CD 3590311320,3590311327,CI 3590311328,3590311335,CD 3590311336,3590311343,SD -3590311344,3590311351,A2 +3590311344,3590311351,LY 3590311352,3590311359,CD -3590311360,3590311367,CI +3590311360,3590311367,LY 3590311368,3590311383,CD 3590311384,3590311391,NG 3590311392,3590311423,A2 @@ -132157,9 +149804,7 @@ 3590311936,3590312703,MW 3590312704,3590312799,A2 3590312800,3590312807,KE -3590312808,3590312815,A2 -3590312816,3590312823,US -3590312824,3590312895,A2 +3590312808,3590312895,A2 3590312896,3590312903,ZA 3590312904,3590312911,AO 3590312912,3590312919,NG @@ -132173,16 +149818,11 @@ 3590314656,3590314671,A2 3590314672,3590314679,UG 3590314680,3590314687,A2 -3590314688,3590314703,NG -3590314704,3590314719,A2 +3590314688,3590314719,GB 3590314720,3590314727,TG 3590314728,3590314735,UG 3590314736,3590314743,NG -3590314744,3590314767,A2 -3590314768,3590314775,US -3590314776,3590314823,A2 -3590314824,3590314831,ZW -3590314832,3590314887,A2 +3590314744,3590314887,A2 3590314888,3590314895,NG 3590314896,3590314903,A2 3590314904,3590314911,KE @@ -132228,9 +149868,7 @@ 3590317496,3590317503,LB 3590317504,3590317527,A2 3590317528,3590317543,IQ -3590317544,3590317567,A2 -3590317568,3590317695,IQ -3590317696,3590317951,A2 +3590317544,3590317951,A2 3590317952,3590318047,UA 3590318048,3590319167,A2 3590319168,3590319231,AE @@ -132284,9 +149922,7 @@ 3590323200,3590323711,MW 3590323712,3590323903,A2 3590323904,3590323911,CD -3590323912,3590323967,A2 -3590323968,3590323975,SD -3590323976,3590323983,A2 +3590323912,3590323983,A2 3590323984,3590323991,NG 3590323992,3590323999,A2 3590324000,3590324007,LR @@ -132298,7 +149934,7 @@ 3590324176,3590324183,LR 3590324184,3590324191,SD 3590324192,3590324199,VG -3590324200,3590324207,UG +3590324200,3590324207,A2 3590324208,3590324215,CD 3590324216,3590324223,NG 3590324224,3623890943,US @@ -132352,7 +149988,9 @@ 3624303760,3624304639,CA 3624304640,3624321023,US 3624321024,3624325119,CA -3624325120,3624357887,US +3624325120,3624330511,US +3624330512,3624330519,CA +3624330520,3624357887,US 3624357888,3624358143,KN 3624358144,3624359679,US 3624359680,3624360703,AN @@ -132385,7 +150023,9 @@ 3624376656,3624376679,GB 3624376680,3624377319,US 3624377320,3624377323,GB -3624377324,3624377863,US +3624377324,3624377599,US +3624377600,3624377855,A2 +3624377856,3624377863,US 3624377864,3624377871,GB 3624377872,3624377879,US 3624377880,3624377887,GB @@ -132403,8 +150043,8 @@ 3624378088,3624378095,GB 3624378096,3624379391,US 3624379392,3624379399,SG -3624379400,3624380415,US -3624380416,3624380447,CA +3624379400,3624380423,US +3624380424,3624380447,CA 3624380448,3624380455,GB 3624380456,3624380511,US 3624380512,3624380519,HK @@ -132414,9 +150054,7 @@ 3624380544,3624380551,CA 3624380552,3624380687,US 3624380688,3624380695,AU -3624380696,3624380735,US -3624380736,3624380743,VI -3624380744,3624380751,US +3624380696,3624380751,US 3624380752,3624380759,CA 3624380760,3624380767,CY 3624380768,3624380799,US @@ -132429,9 +150067,7 @@ 3624380936,3624380943,SA 3624380944,3624380967,GB 3624380968,3624380983,TW -3624380984,3624381471,US -3624381472,3624381487,AU -3624381488,3624381567,US +3624380984,3624381567,US 3624381568,3624381583,MY 3624381584,3624381631,US 3624381632,3624381647,GB @@ -132507,7 +150143,9 @@ 3624548040,3624548063,US 3624548064,3624548087,A2 3624548088,3624548095,US -3624548096,3624548679,A2 +3624548096,3624548351,A2 +3624548352,3624548359,US +3624548360,3624548679,A2 3624548680,3624548687,US 3624548688,3624548703,A2 3624548704,3624548711,US @@ -132522,11 +150160,57 @@ 3624549080,3624549087,A2 3624549088,3624549103,US 3624549104,3624549111,A2 -3624549112,3624549375,US -3624549376,3624550143,A2 +3624549112,3624549383,US +3624549384,3624549471,A2 +3624549472,3624549479,US +3624549480,3624549583,A2 +3624549584,3624549615,US +3624549616,3624550143,A2 3624550144,3624587263,US 3624587264,3624591359,JM -3624595456,3624730623,US +3624591360,3624714239,US +3624714240,3624714623,SG +3624714624,3624714639,US +3624714640,3624714655,SG +3624714656,3624714679,US +3624714680,3624714687,SG +3624714688,3624714719,US +3624714720,3624714743,SG +3624714744,3624714751,US +3624714752,3624715023,SG +3624715024,3624715071,US +3624715072,3624715103,SG +3624715104,3624715167,US +3624715168,3624715183,SG +3624715184,3624715263,US +3624715264,3624715647,SG +3624715648,3624715655,US +3624715656,3624715743,SG +3624715744,3624715775,US +3624715776,3624716223,SG +3624716224,3624716255,AU +3624716256,3624716287,SG +3624716288,3624718335,US +3624718336,3624718591,SG +3624718592,3624718847,US +3624718848,3624718863,SG +3624718864,3624718879,AU +3624718880,3624719423,SG +3624719424,3624719431,US +3624719432,3624719535,SG +3624719536,3624719543,AU +3624719544,3624719743,SG +3624719744,3624719751,US +3624719752,3624719871,SG +3624719872,3624720895,US +3624720896,3624721151,SG +3624721152,3624721407,US +3624721408,3624721695,SG +3624721696,3624721727,US +3624721728,3624721855,SG +3624721856,3624721863,CN +3624721864,3624721919,SG +3624721920,3624730623,US 3624730624,3624796159,CA 3624796160,3624817679,US 3624817680,3624817687,CA @@ -132622,8 +150306,8 @@ 3624905088,3624905215,CA 3624905216,3624905471,US 3624905472,3624905727,CA -3624905728,3624906465,US -3624906466,3624906495,CA +3624905728,3624906239,US +3624906240,3624906495,CA 3624906496,3624906751,US 3624906752,3624906879,CA 3624906880,3624907007,TW @@ -132659,9 +150343,7 @@ 3624908640,3624908687,CA 3624908688,3624908783,US 3624908784,3624908799,CA -3624908800,3624909375,US -3624909376,3624909407,VE -3624909408,3624909471,US +3624908800,3624909471,US 3624909472,3624909503,AU 3624909504,3624909567,US 3624909568,3624909822,MY @@ -132698,7 +150380,13 @@ 3624911648,3624911651,RU 3624911652,3624911999,US 3624912000,3624912127,CA -3624912128,3624912959,US +3624912128,3624912679,US +3624912680,3624912687,IN +3624912688,3624912727,US +3624912728,3624912735,TT +3624912736,3624912759,US +3624912760,3624912767,MY +3624912768,3624912959,US 3624912960,3624913087,IN 3624913088,3624913247,US 3624913248,3624913279,CA @@ -132716,20 +150404,20 @@ 3624914272,3624914303,CA 3624914304,3624914335,US 3624914336,3624914367,CA -3624914368,3624914687,US +3624914368,3624914399,IN +3624914400,3624914687,US 3624914688,3624914943,BE -3624914944,3624915199,US -3624915200,3624915455,CA -3624915456,3624915903,US +3624914944,3624915071,CA +3624915072,3624915455,US +3624915456,3624915487,CA +3624915488,3624915903,US 3624915904,3624915935,HK -3624915936,3624916159,US -3624916160,3624916191,MY -3624916192,3624916223,US +3624915936,3624916223,US 3624916224,3624916735,CA 3624916736,3624917247,US 3624917248,3624917503,AU 3624917504,3624917919,US -3624917920,3624917951,CH +3624917920,3624917951,CA 3624917952,3624917983,US 3624917984,3624918015,CA 3624918016,3624918527,US @@ -132767,8 +150455,7 @@ 3624922336,3624922367,FR 3624922368,3624922495,IN 3624922496,3624922623,BE -3624922624,3624922655,US -3624922656,3624922687,CA +3624922624,3624922687,CA 3624922688,3624922783,US 3624922784,3624922815,CN 3624922816,3624922847,FR @@ -132779,18 +150466,24 @@ 3624923392,3624923519,CA 3624923520,3624923647,US 3624923648,3624923775,CA -3624923776,3624924095,US +3624923776,3624923903,US +3624923904,3624923935,CA +3624923936,3624923967,US +3624923968,3624923999,IN +3624924000,3624924095,US 3624924096,3624924127,CA 3624924128,3624924287,US -3624924288,3624924671,CA -3624924672,3624924895,US +3624924288,3624924703,CA +3624924704,3624924895,US 3624924896,3624924927,CA 3624924928,3624925054,US 3624925055,3624925695,CA -3624925696,3624926591,US +3624925696,3624926335,US +3624926336,3624926463,TZ +3624926464,3624926527,CA +3624926528,3624926591,US 3624926592,3624926655,IN -3624926656,3624926719,US -3624926720,3624926975,CA +3624926656,3624926975,CA 3624926976,3624927039,US 3624927040,3624927071,HK 3624927072,3624927167,US @@ -132803,7 +150496,9 @@ 3624990464,3624991223,CA 3624991224,3624991231,US 3624991232,3624992767,CA -3624992768,3625042327,US +3624992768,3625002351,US +3625002352,3625002367,CA +3625002368,3625042327,US 3625042328,3625042335,IT 3625042336,3625058303,US 3625058304,3625091071,CA @@ -132843,8 +150538,10 @@ 3625246280,3625246287,MX 3625246288,3625246295,US 3625246296,3625246375,MX -3625246376,3625246391,US -3625246392,3625246719,MX +3625246376,3625246399,US +3625246400,3625246535,MX +3625246536,3625246543,US +3625246544,3625246719,MX 3625246720,3625287679,US 3625287680,3625288887,CA 3625288888,3625288895,US @@ -132948,12 +150645,11 @@ 3625423104,3625426943,CA 3625426944,3625508863,US 3625508864,3625512959,CA -3625512960,3625515007,PR -3625517056,3625528541,US +3625512960,3625528541,US 3625528542,3625528551,AU 3625528552,3625574399,US -3625574400,3625578495,A2 -3625578496,3625581631,US +3625574400,3625578239,A2 +3625578240,3625581631,US 3625581632,3625581647,NL 3625581648,3625631743,US 3625631744,3625639935,CA @@ -133003,7 +150699,7 @@ 3626228464,3626228479,AE 3626228480,3626270719,US 3626270720,3626287103,CA -3626287104,3626328063,US +3626287104,3626332159,US 3626332160,3626336255,CA 3626336256,3626381317,US 3626381318,3626381321,AU @@ -133185,9 +150881,7 @@ 3626382404,3626382411,US 3626382412,3626382415,CN 3626382416,3626382419,GB -3626382420,3626382426,US -3626382427,3626382430,ID -3626382431,3626382434,US +3626382420,3626382434,US 3626382435,3626382438,BR 3626382439,3626382442,ZA 3626382443,3626382450,US @@ -133306,7 +151000,9 @@ 3626383299,3626383375,US 3626383376,3626383383,RU 3626383384,3626383391,CA -3626383392,3626383423,US +3626383392,3626383399,US +3626383400,3626383407,IN +3626383408,3626383423,US 3626383424,3626383431,GB 3626383432,3626383439,AU 3626383440,3626383447,GR @@ -133319,8 +151015,7 @@ 3626383544,3626383551,GB 3626383552,3626383583,US 3626383584,3626383599,CA -3626383600,3626383607,GB -3626383608,3626383615,IN +3626383600,3626383615,IN 3626383616,3626383647,US 3626383648,3626383679,CH 3626383680,3626383727,US @@ -133359,15 +151054,18 @@ 3626385038,3626385041,US 3626385042,3626385045,MX 3626385046,3626385049,CA -3626385050,3626385073,US +3626385050,3626385057,US +3626385058,3626385061,IN +3626385062,3626385073,US 3626385074,3626385077,IE 3626385078,3626385097,US 3626385098,3626385101,IN 3626385102,3626385113,US 3626385114,3626385117,JP -3626385118,3626385125,US +3626385118,3626385121,US +3626385122,3626385125,IN 3626385126,3626385129,ID -3626385130,3626385133,GR +3626385130,3626385133,IN 3626385134,3626385137,CA 3626385138,3626385141,GB 3626385142,3626385145,IN @@ -133389,16 +151087,17 @@ 3626385242,3626385245,US 3626385246,3626385249,ID 3626385250,3626385253,CN -3626385254,3626385257,US -3626385258,3626385261,PK +3626385254,3626385261,US 3626385262,3626385265,GR -3626385266,3626385321,US +3626385266,3626385285,US +3626385286,3626385289,IN +3626385290,3626385321,US 3626385322,3626385325,FR 3626385326,3626385329,CA 3626385330,3626385333,US 3626385334,3626385337,CA 3626385338,3626385349,US -3626385350,3626385353,CA +3626385350,3626385353,IN 3626385354,3626385357,MX 3626385358,3626385361,CA 3626385362,3626385365,US @@ -133472,7 +151171,9 @@ 3626529808,3626529863,US 3626529864,3626529919,CA 3626529920,3626529927,US -3626529928,3626530039,CA +3626529928,3626529951,CA +3626529952,3626529959,US +3626529960,3626530039,CA 3626530040,3626530055,US 3626530056,3626530151,CA 3626530152,3626530159,US @@ -133569,7 +151270,9 @@ 3627288576,3627288607,GB 3627288608,3627309455,US 3627309456,3627309471,IL -3627309472,3627310471,US +3627309472,3627309695,US +3627309696,3627309823,AE +3627309824,3627310471,US 3627310472,3627310479,BM 3627310480,3627317087,US 3627317088,3627317119,GB @@ -133606,7 +151309,9 @@ 3627524988,3627532287,US 3627532288,3627544575,CA 3627544576,3627659263,US -3627659264,3627663359,CA +3627659264,3627661951,CA +3627661952,3627662015,US +3627662016,3627663359,CA 3627663360,3627665407,US 3627665408,3627665439,CA 3627665440,3627666255,US @@ -133624,13 +151329,9 @@ 3627745376,3627745439,US 3627745440,3627745471,IN 3627745472,3627745503,CA -3627745504,3627745919,US -3627745920,3627745983,IL -3627745984,3627746399,US +3627745504,3627746399,US 3627746400,3627746431,CA -3627746432,3627746559,US -3627746560,3627746815,IN -3627746816,3627747159,US +3627746432,3627747159,US 3627747160,3627747167,IN 3627747168,3627753471,US 3627753472,3627753727,AR @@ -133638,7 +151339,15 @@ 3627755008,3627755135,IE 3627755136,3627755263,US 3627755264,3627755391,IE -3627755392,3627802623,US +3627755392,3627758847,US +3627758848,3627758863,GB +3627758864,3627759071,US +3627759072,3627759103,GB +3627759104,3627759359,US +3627759360,3627759375,NL +3627759376,3627759551,US +3627759552,3627759615,NL +3627759616,3627802623,US 3627802624,3627810815,CA 3627810816,3627842047,US 3627842048,3627842303,IS @@ -133727,8 +151436,7 @@ 3628179456,3628187647,CA 3628187648,3628208127,US 3628208128,3628208383,IT -3628208384,3628208639,CN -3628208640,3628223983,US +3628208384,3628223983,US 3628223984,3628223999,CA 3628224000,3628224735,US 3628224736,3628224743,IT @@ -133825,8 +151533,7 @@ 3628771456,3628771647,GB 3628771648,3628771839,US 3628771840,3628772095,NO -3628772096,3628772415,US -3628772416,3628772431,CA +3628772096,3628772431,US 3628772432,3628772447,GB 3628772448,3628834815,US 3628834816,3628843007,CA @@ -133841,47 +151548,45 @@ 3629201488,3629201515,US 3629201516,3629201539,CA 3629201540,3629201543,US -3629201544,3629201615,CA -3629201616,3629201619,US -3629201620,3629201647,CA -3629201648,3629201667,US -3629201668,3629201679,CA -3629201680,3629201683,US -3629201684,3629201707,CA -3629201708,3629201719,US -3629201720,3629201747,CA +3629201544,3629201551,CA +3629201552,3629201559,US +3629201560,3629201563,CA +3629201564,3629201599,US +3629201600,3629201615,CA +3629201616,3629201623,US +3629201624,3629201627,CA +3629201628,3629201743,US +3629201744,3629201747,CA 3629201748,3629201751,US 3629201752,3629201755,CA -3629201756,3629201763,US -3629201764,3629201791,CA +3629201756,3629201775,US +3629201776,3629201791,CA 3629201792,3629201839,US 3629201840,3629201855,CA 3629201856,3629201887,US 3629201888,3629201903,CA 3629201904,3629201919,US -3629201920,3629201959,CA -3629201960,3629201967,US -3629201968,3629201983,CA +3629201920,3629201935,CA +3629201936,3629201951,US +3629201952,3629201959,CA +3629201960,3629201971,US +3629201972,3629201983,CA 3629201984,3629201991,US 3629201992,3629201999,CA 3629202000,3629202003,US -3629202004,3629202011,CA -3629202012,3629202015,US +3629202004,3629202007,CA +3629202008,3629202015,US 3629202016,3629202047,CA 3629202048,3629202175,US 3629202176,3629202203,CA -3629202204,3629202219,US -3629202220,3629202239,CA +3629202204,3629202223,US +3629202224,3629202239,CA 3629202240,3629202263,US 3629202264,3629202271,CA -3629202272,3629202279,US -3629202280,3629202287,CA -3629202288,3629202311,US -3629202312,3629202367,CA -3629202368,3629202399,US -3629202400,3629202407,CA -3629202408,3629202427,US -3629202428,3629203199,CA +3629202272,3629202331,US +3629202332,3629202367,CA +3629202368,3629202431,US +3629202432,3629203199,CA 3629203200,3629318143,US 3629318144,3629326335,CA 3629326336,3629327527,US @@ -134427,15 +152132,11 @@ 3631016572,3631016581,US 3631016582,3631016613,BD 3631016614,3631016645,UA -3631016646,3631016707,US -3631016708,3631016958,LT -3631016959,3631017175,US +3631016646,3631017175,US 3631017176,3631017191,CN 3631017192,3631017475,US 3631017476,3631017726,LT -3631017727,3631017731,US -3631017732,3631017982,LT -3631017983,3631039439,US +3631017727,3631039439,US 3631039440,3631039455,CA 3631039456,3631039487,US 3631039488,3631039743,CA @@ -134458,7 +152159,27 @@ 3631058592,3631059229,US 3631059230,3631059239,NO 3631059240,3631112191,US -3631112192,3631116543,BB +3631112192,3631112385,BB +3631112386,3631112386,VC +3631112387,3631112387,BB +3631112388,3631112391,VC +3631112392,3631112393,BB +3631112394,3631112398,VC +3631112399,3631112399,BB +3631112400,3631112401,VC +3631112402,3631112404,BB +3631112405,3631112405,VC +3631112406,3631112417,BB +3631112418,3631112418,VC +3631112419,3631112425,BB +3631112426,3631112427,VC +3631112428,3631112429,BB +3631112430,3631112430,VC +3631112431,3631112433,BB +3631112434,3631112434,VC +3631112435,3631112439,BB +3631112440,3631112440,VC +3631112441,3631116543,BB 3631116544,3631117567,GD 3631117568,3631117823,BB 3631117824,3631118079,GD @@ -134473,10 +152194,12 @@ 3631333376,3631333679,CA 3631333680,3631333695,US 3631333696,3631341567,CA -3631341568,3631435007,US +3631341568,3631415295,US +3631415296,3631419391,A2 +3631419392,3631435007,US 3631435008,3631435263,GB 3631435264,3631480831,US -3631480832,3631484927,CA +3631482880,3631484927,CA 3631484928,3631644671,US 3631644672,3631652863,CA 3631652864,3631663151,US @@ -134604,9 +152327,9 @@ 3632480496,3632480503,US 3632480504,3632480511,RU 3632480512,3632480543,TK -3632480544,3632480567,US -3632480568,3632480575,GB -3632480576,3632480599,US +3632480544,3632480559,US +3632480560,3632480567,DE +3632480568,3632480599,US 3632480600,3632480607,CA 3632480608,3632480615,GB 3632480616,3632480647,US @@ -134620,11 +152343,9 @@ 3632481184,3632481199,TH 3632481200,3632481279,US 3632481280,3632481287,GB -3632481288,3632481295,PH +3632481288,3632481295,US 3632481296,3632481311,TH -3632481312,3632481391,US -3632481392,3632481399,GB -3632481400,3632481415,US +3632481312,3632481415,US 3632481416,3632481423,TH 3632481424,3632481431,US 3632481432,3632481439,CA @@ -134644,11 +152365,10 @@ 3632481768,3632481775,US 3632481776,3632481783,CA 3632481784,3632481791,GB -3632481792,3632481815,US -3632481816,3632481823,GB -3632481824,3632481999,US +3632481792,3632481999,US 3632482000,3632482007,BZ -3632482008,3632482039,US +3632482008,3632482015,CA +3632482016,3632482039,US 3632482040,3632482047,TK 3632482048,3632482239,US 3632482240,3632482247,GB @@ -134662,8 +152382,7 @@ 3632483152,3632483159,GB 3632483160,3632483327,US 3632483328,3632483335,CA -3632483336,3632483351,US -3632483352,3632483359,CN +3632483336,3632483359,US 3632483360,3632483367,NL 3632483368,3632483375,GI 3632483376,3632483391,GB @@ -134676,9 +152395,7 @@ 3632483584,3632483599,US 3632483600,3632483607,AU 3632483608,3632483615,PL -3632483616,3632483623,GB -3632483624,3632483663,US -3632483664,3632483671,PH +3632483616,3632483671,US 3632483672,3632483679,CA 3632483680,3632483759,US 3632483760,3632483775,TH @@ -134703,8 +152420,8 @@ 3632484384,3632484391,GB 3632484392,3632484623,US 3632484624,3632484639,GB -3632484640,3632484647,CA -3632484648,3632484655,TH +3632484640,3632484647,SG +3632484648,3632484655,JP 3632484656,3632484687,US 3632484688,3632484695,GI 3632484696,3632484727,US @@ -134720,8 +152437,7 @@ 3632484816,3632484823,US 3632484824,3632484831,CA 3632484832,3632484839,HK -3632484840,3632484847,BZ -3632484848,3632484855,US +3632484840,3632484855,US 3632484856,3632484863,GB 3632484864,3632485055,US 3632485056,3632485087,TW @@ -134738,19 +152454,18 @@ 3632485264,3632485271,IT 3632485272,3632485279,US 3632485280,3632485311,TH -3632485312,3632485359,US -3632485360,3632485367,TH -3632485368,3632485391,US +3632485312,3632485391,US 3632485392,3632485399,SR -3632485400,3632485431,US +3632485400,3632485407,US +3632485408,3632485415,CA +3632485416,3632485431,US 3632485432,3632485439,CA 3632485440,3632485471,US 3632485472,3632485487,NC -3632485488,3632485551,US +3632485488,3632485535,US +3632485536,3632485551,CA 3632485552,3632485559,GB -3632485560,3632485567,US -3632485568,3632485575,GB -3632485576,3632485615,US +3632485560,3632485615,US 3632485616,3632485623,TH 3632485624,3632485631,CA 3632485632,3632485639,US @@ -134762,16 +152477,16 @@ 3632485680,3632485687,BR 3632485688,3632485727,US 3632485728,3632485735,CA -3632485736,3632485743,KW -3632485744,3632485751,US +3632485736,3632485751,US 3632485752,3632485759,CA -3632485760,3632485767,CZ +3632485760,3632485767,US 3632485768,3632485775,KW 3632485776,3632485847,US 3632485848,3632485855,CA 3632485856,3632485863,US 3632485864,3632485871,BZ -3632485872,3632485887,US +3632485872,3632485879,US +3632485880,3632485887,GR 3632485888,3632485895,GB 3632485896,3632485903,KW 3632485904,3632486087,US @@ -134781,7 +152496,9 @@ 3632486112,3632486143,US 3632486144,3632486151,TK 3632486152,3632486159,GB -3632486160,3632486263,US +3632486160,3632486191,US +3632486192,3632486199,GB +3632486200,3632486263,US 3632486264,3632486271,GB 3632486272,3632486287,FR 3632486288,3632486319,US @@ -134791,11 +152508,10 @@ 3632486344,3632486351,FR 3632486352,3632486407,US 3632486408,3632486415,TH -3632486416,3632486423,US -3632486424,3632486431,CA -3632486432,3632486479,US +3632486416,3632486479,US 3632486480,3632486495,GB -3632486496,3632486519,US +3632486496,3632486511,US +3632486512,3632486519,HU 3632486520,3632486527,GB 3632486528,3632486543,US 3632486544,3632486551,DE @@ -134806,18 +152522,16 @@ 3632486688,3632486703,HK 3632486704,3632486711,US 3632486712,3632486719,CA -3632486720,3632486751,TH +3632486720,3632486751,US 3632486752,3632486759,NL 3632486760,3632486783,US 3632486784,3632486815,DE 3632486816,3632486879,US 3632486880,3632486895,TH -3632486896,3632486903,GB -3632486904,3632487023,US +3632486896,3632487023,US 3632487024,3632487031,TH 3632487032,3632487039,CZ -3632487040,3632487103,US -3632487104,3632487135,EE +3632487040,3632487135,US 3632487136,3632487143,GB 3632487144,3632487423,US 3632487424,3632487455,GB @@ -134828,8 +152542,9 @@ 3632487816,3632487823,IL 3632487824,3632487855,US 3632487856,3632487863,GB -3632487864,3632487871,CA -3632487872,3632489087,US +3632487864,3632487895,US +3632487896,3632487903,GB +3632487904,3632489087,US 3632489088,3632489119,SR 3632489120,3632489127,US 3632489128,3632489135,AU @@ -134864,9 +152579,7 @@ 3632490960,3632490967,CA 3632490968,3632490983,US 3632490984,3632490991,HK -3632490992,3632491071,US -3632491072,3632491087,GB -3632491088,3632491151,US +3632490992,3632491151,US 3632491152,3632491167,IN 3632491168,3632491239,US 3632491240,3632491247,CA @@ -134884,9 +152597,7 @@ 3632491536,3632491543,GB 3632491544,3632491583,US 3632491584,3632491591,TH -3632491592,3632491599,US -3632491600,3632491607,TH -3632491608,3632491639,US +3632491592,3632491639,US 3632491640,3632491647,CA 3632491648,3632491807,US 3632491808,3632491823,TW @@ -134894,7 +152605,7 @@ 3632491968,3632491999,SR 3632492000,3632492007,NL 3632492008,3632492015,IO -3632492016,3632492023,IN +3632492016,3632492023,US 3632492024,3632492031,GB 3632492032,3632492087,US 3632492088,3632492095,GB @@ -134903,8 +152614,8 @@ 3632492240,3632492255,US 3632492256,3632492263,CH 3632492264,3632492271,US -3632492272,3632492279,CA -3632492280,3632492319,US +3632492272,3632492287,CA +3632492288,3632492319,US 3632492320,3632492327,CH 3632492328,3632492367,US 3632492368,3632492375,GB @@ -134912,9 +152623,7 @@ 3632492456,3632492463,TH 3632492464,3632492543,US 3632492544,3632492551,FR -3632492552,3632492559,US -3632492560,3632492575,GB -3632492576,3632492775,US +3632492552,3632492775,US 3632492776,3632492791,GB 3632492792,3632492839,US 3632492840,3632492847,CA @@ -134931,10 +152640,10 @@ 3632493088,3632493119,IO 3632493120,3632493151,US 3632493152,3632493159,GR -3632493160,3632493191,US +3632493160,3632493183,US +3632493184,3632493191,BZ 3632493192,3632493199,CA -3632493200,3632493207,GB -3632493208,3632493215,US +3632493200,3632493215,US 3632493216,3632493223,DE 3632493224,3632493239,US 3632493240,3632493247,TW @@ -134942,9 +152651,7 @@ 3632493256,3632493263,DE 3632493264,3632493271,US 3632493272,3632493279,SK -3632493280,3632493287,US -3632493288,3632493295,IN -3632493296,3632493439,US +3632493280,3632493439,US 3632493440,3632493455,MX 3632493456,3632493471,JP 3632493472,3632493479,TK @@ -135038,7 +152745,9 @@ 3632902144,3632971775,US 3632971776,3632972031,CA 3632972032,3632972063,US -3632972064,3632988159,CA +3632972064,3632973087,CA +3632973088,3632973119,US +3632973120,3632988159,CA 3632988160,3633029119,US 3633029120,3633029631,PY 3633029632,3633030143,NI @@ -135186,8 +152895,14 @@ 3633553152,3633553279,GW 3633553280,3633553311,US 3633553312,3633553343,A2 -3633553344,3633815551,US -3633815552,3633816079,CA +3633553344,3633776399,US +3633776400,3633776415,CN +3633776416,3633776463,US +3633776464,3633776479,CN +3633776480,3633815551,US +3633815552,3633815843,CA +3633815844,3633815847,US +3633815848,3633816079,CA 3633816080,3633816095,US 3633816096,3633816119,CA 3633816120,3633816127,IN @@ -135204,7 +152919,9 @@ 3633816256,3633816263,NG 3633816264,3633816279,CA 3633816280,3633816311,US -3633816312,3633816351,CA +3633816312,3633816319,CA +3633816320,3633816327,ZA +3633816328,3633816351,CA 3633816352,3633816383,IN 3633816384,3633816391,NG 3633816392,3633816399,US @@ -135219,24 +152936,36 @@ 3633816520,3633816527,ZA 3633816528,3633816535,CA 3633816536,3633816543,US -3633816544,3633818703,CA +3633816544,3633816559,ZA +3633816560,3633816567,IN +3633816568,3633818703,CA 3633818704,3633818711,US -3633818712,3633819135,CA +3633818712,3633818751,CA +3633818752,3633818767,US +3633818768,3633818863,CA +3633818864,3633818879,US +3633818880,3633819135,CA 3633819136,3633819199,IN 3633819200,3633819391,CA 3633819392,3633819423,IN 3633819424,3633819647,CA 3633819648,3633821279,US 3633821280,3633821311,BB -3633821312,3633821439,US -3633821440,3633821695,SC -3633821696,3633822175,US +3633821312,3633822175,US 3633822176,3633822191,GB 3633822192,3633822303,US 3633822304,3633822327,CA 3633822328,3633827839,US 3633827840,3633828095,GB -3633828096,3633881087,US +3633828096,3633828970,US +3633828971,3633828977,IN +3633828978,3633831306,US +3633831307,3633831338,IN +3633831339,3633831383,US +3633831384,3633831395,AU +3633831396,3633874431,US +3633874432,3633874687,GB +3633874688,3633881087,US 3633881088,3633885183,AN 3633885184,3633889279,US 3633889280,3633893375,CA @@ -135265,7 +152994,9 @@ 3634136104,3634136111,CA 3634136112,3634138127,US 3634138128,3634138143,CA -3634138144,3634204255,US +3634138144,3634189055,US +3634189056,3634189311,GB +3634189312,3634204255,US 3634204256,3634204263,AT 3634204264,3634204591,US 3634204592,3634204607,GB @@ -135305,17 +153036,13 @@ 3635110304,3635113983,CA 3635113984,3635142655,US 3635142656,3635146751,CA -3635146752,3635314687,US +3635146752,3635159039,US +3635159040,3635163135,CA +3635163136,3635314687,US 3635314688,3635322879,CA 3635322880,3635425279,US 3635425280,3635429375,CA -3635429376,3635464031,US -3635464032,3635464063,GB -3635464064,3635464127,US -3635464128,3635464135,GB -3635464136,3635464223,US -3635464224,3635464239,GB -3635464240,3635466239,US +3635429376,3635466239,US 3635466240,3635470335,CA 3635470336,3635527679,US 3635527680,3635527935,PR @@ -135344,16 +153071,78 @@ 3635532288,3635532303,ES 3635532304,3635532831,US 3635532832,3635532863,VE -3635532864,3635532927,SV -3635532928,3635532999,US +3635532864,3635532999,US 3635533000,3635533007,NO 3635533008,3635533535,US 3635533536,3635533551,IN -3635533552,3635658751,US -3635658752,3635660799,CN -3635660800,3635829631,US -3635829632,3635829663,CA -3635829664,3635847791,US +3635533552,3635643391,US +3635643392,3635643647,JP +3635643648,3635643679,US +3635643680,3635643681,JP +3635643682,3635643710,US +3635643711,3635643903,JP +3635643904,3635644159,US +3635644160,3635644255,JP +3635644256,3635644319,US +3635644320,3635644671,JP +3635644672,3635645439,US +3635645440,3635645696,JP +3635645697,3635645728,US +3635645729,3635645760,JP +3635645761,3635645776,US +3635645777,3635645951,JP +3635645952,3635646335,US +3635646336,3635646367,JP +3635646368,3635648767,US +3635648768,3635649023,JP +3635649024,3635650559,US +3635650560,3635650815,HK +3635650816,3635651071,US +3635651072,3635651327,HK +3635651328,3635651583,US +3635651584,3635651839,HK +3635651840,3635652607,US +3635652608,3635652639,HK +3635652640,3635652815,US +3635652816,3635652831,HK +3635652832,3635653071,US +3635653072,3635653119,HK +3635653120,3635653151,US +3635653152,3635653183,HK +3635653184,3635653631,US +3635653632,3635653695,JP +3635653696,3635653727,US +3635653728,3635653743,JP +3635653744,3635653775,US +3635653776,3635653791,JP +3635653792,3635653887,US +3635653888,3635653983,JP +3635653984,3635654015,US +3635654016,3635654143,JP +3635654144,3635654303,US +3635654304,3635654335,JP +3635654336,3635654655,US +3635654656,3635654911,HK +3635654912,3635655167,US +3635655168,3635655935,HK +3635655936,3635656191,US +3635656192,3635656223,HK +3635656224,3635656319,US +3635656320,3635656447,HK +3635656448,3635656703,CA +3635656704,3635656967,JP +3635656968,3635657023,US +3635657024,3635657215,JP +3635657216,3635659263,US +3635659264,3635660031,ID +3635660032,3635660287,CN +3635660288,3635660799,US +3635660800,3635662847,HK +3635662848,3635670527,US +3635670528,3635671039,TL +3635671040,3635674623,US +3635674624,3635675135,HK +3635675136,3635847791,US 3635847792,3635847807,CA 3635847808,3635856511,US 3635856512,3635856543,CA @@ -135377,7 +153166,21 @@ 3636019200,3636021775,CA 3636021776,3636021791,US 3636021792,3636027391,CA -3636027392,3636064255,US +3636027392,3636027647,US +3636027648,3636028352,SG +3636028353,3636028384,US +3636028385,3636029951,SG +3636029952,3636030207,US +3636030208,3636031231,SG +3636031232,3636031999,US +3636032000,3636032511,SG +3636032512,3636032767,US +3636032768,3636033535,SG +3636033536,3636033791,US +3636033792,3636034303,SG +3636034304,3636035327,US +3636035328,3636035583,SG +3636035584,3636064255,US 3636064256,3636068351,CA 3636068352,3636150495,US 3636150496,3636150527,CA @@ -135386,13 +153189,12 @@ 3636150840,3636150911,US 3636150912,3636150935,CA 3636150936,3636150943,US -3636150944,3636151007,CA +3636150944,3636150991,CA +3636150992,3636151007,US 3636151008,3636151023,BS 3636151024,3636151031,CA 3636151032,3636151039,US -3636151040,3636151167,CA -3636151168,3636151199,US -3636151200,3636151455,CA +3636151040,3636151455,CA 3636151456,3636151479,US 3636151480,3636151488,CA 3636151489,3636151535,US @@ -135435,9 +153237,7 @@ 3636156160,3636156191,US 3636156192,3636156255,CA 3636156256,3636156256,US -3636156257,3636156271,CA -3636156272,3636156279,US -3636156280,3636156415,CA +3636156257,3636156415,CA 3636156416,3636156927,US 3636156928,3636157063,CA 3636157064,3636157167,US @@ -135472,8 +153272,8 @@ 3636160416,3636160431,US 3636160432,3636160831,CA 3636160832,3636160895,US -3636160896,3636160927,CA -3636160928,3636160975,US +3636160896,3636160943,CA +3636160944,3636160975,US 3636160976,3636161279,CA 3636161280,3636161327,US 3636161328,3636161535,CA @@ -135481,7 +153281,10 @@ 3636161792,3636161871,CA 3636161872,3636161885,US 3636161886,3636161943,CA -3636161944,3636162015,US +3636161944,3636161951,US +3636161952,3636161967,CA +3636161968,3636161983,CN +3636161984,3636162015,US 3636162016,3636162559,CA 3636162560,3636163583,US 3636163584,3636164095,CA @@ -135497,21 +153300,9 @@ 3636166144,3636166655,CA 3636166656,3636206079,US 3636206080,3636206335,AU -3636206336,3636265535,US -3636265536,3636265599,DE -3636265600,3636266879,US +3636206336,3636266879,US 3636266880,3636266911,HK -3636266912,3636277759,US -3636277760,3636278015,FR -3636278016,3636283391,US -3636283392,3636283647,FR -3636283648,3636284415,US -3636284416,3636284671,FR -3636284672,3636290815,US -3636290816,3636291327,FR -3636291328,3636296703,US -3636296704,3636297727,FR -3636297728,3636396031,US +3636266912,3636396031,US 3636396032,3636461567,CA 3636461568,3636577647,US 3636577648,3636577663,CA @@ -135526,15 +153317,8 @@ 3636627200,3636627455,BR 3636627456,3636628479,MX 3636628480,3636628991,PE -3636628992,3636633887,US -3636633952,3636633983,CR -3636633984,3636634015,US -3636634016,3636635135,CR -3636635136,3636635391,US -3636635392,3636635775,CR -3636635904,3636636415,US -3636636416,3636636543,CR -3636636544,3636822015,US +3636628992,3636633599,US +3636637696,3636822015,US 3636822016,3636854783,CA 3636854784,3636887551,US 3636887552,3636895743,CA @@ -135549,9 +153333,7 @@ 3636904544,3636904575,IN 3636904576,3636904607,US 3636904608,3636904671,IN -3636904672,3636904703,US -3636904704,3636904959,MY -3636904960,3636905471,US +3636904672,3636905471,US 3636905472,3636905727,CA 3636905728,3636905791,US 3636905792,3636905823,IN @@ -135589,8 +153371,7 @@ 3636909696,3636909727,CA 3636909728,3636909759,US 3636909760,3636909791,CA -3636909792,3636909855,US -3636909856,3636909887,CN +3636909792,3636909887,US 3636909888,3636909951,IT 3636909952,3636909983,US 3636909984,3636910015,TZ @@ -135696,25 +153477,17 @@ 3637073168,3637073183,AD 3637073184,3637073215,US 3637073216,3637073231,CY -3637073232,3637073935,US +3637073232,3637073727,US +3637073728,3637073791,CY +3637073792,3637073935,US 3637073936,3637073959,AD 3637073960,3637074239,US 3637074240,3637074303,PA 3637074304,3637074687,US 3637074688,3637074703,CA -3637074704,3637074751,US -3637074752,3637074815,PA -3637074816,3637074943,US +3637074704,3637074943,US 3637074944,3637074959,CA -3637074960,3637074975,US -3637074976,3637075007,PA -3637075008,3637075231,US -3637075232,3637075263,PA -3637075264,3637075487,US -3637075488,3637075519,PA -3637075520,3637075743,US -3637075744,3637075775,PA -3637075776,3637075967,US +3637074960,3637075967,US 3637075968,3637080063,CA 3637080064,3637389335,US 3637389336,3637389343,CA @@ -135734,15 +153507,20 @@ 3637667519,3637669887,CA 3637669888,3637706751,US 3637706752,3637739519,CA -3637739520,3638165503,US +3637739520,3637827327,US +3637827328,3637827583,VI +3637827584,3638165503,US 3638165504,3638181887,CA 3638181888,3638198951,US 3638198952,3638198959,BM 3638198960,3638198983,US 3638198984,3638198991,ES -3638198992,3638199711,US +3638198992,3638199167,US +3638199168,3638199295,CN +3638199296,3638199711,US 3638199712,3638199743,DE -3638199744,3638199815,US +3638199744,3638199807,US +3638199808,3638199815,CN 3638199816,3638199823,AU 3638199824,3638200007,US 3638200008,3638200015,JP @@ -135821,7 +153599,11 @@ 3638249216,3638249471,GB 3638249472,3638249751,US 3638249752,3638249791,GB -3638249792,3638250535,US +3638249792,3638249983,US +3638249984,3638249991,GB +3638249992,3638249999,US +3638250000,3638250031,GB +3638250032,3638250535,US 3638250536,3638250543,GB 3638250544,3638250559,US 3638250560,3638250623,GB @@ -135851,7 +153633,16 @@ 3638399488,3638399615,CH 3638399616,3638399743,US 3638399744,3638399999,CH -3638400000,3638509295,US +3638400000,3638400063,CA +3638400064,3638400271,US +3638400272,3638400279,CA +3638400280,3638400559,US +3638400560,3638400567,PA +3638400568,3638400575,US +3638400576,3638400607,CA +3638400608,3638400639,US +3638400640,3638400767,CA +3638400768,3638509295,US 3638509296,3638509311,GB 3638509312,3638509567,US 3638509568,3638526911,CA @@ -135977,11 +153768,19 @@ 3639439632,3639439639,RO 3639439640,3639440767,US 3639440768,3639440895,IN -3639440896,3639508991,US -3639541760,3639558143,US +3639440896,3639498767,US +3639498768,3639498783,SI +3639498784,3639498791,US +3639498792,3639498799,NL +3639498800,3639513087,US +3639513088,3639513119,AE +3639513120,3639513239,US +3639513240,3639513243,AE +3639513244,3639533567,US +3639533568,3639537663,CA +3639537664,3639558143,US 3639558144,3639566335,CA -3639566336,3639582719,US -3639590912,3639593983,US +3639566336,3639593983,US 3639593984,3639595007,GB 3639595008,3639607295,US 3639607296,3639611391,CA @@ -136078,7 +153877,11 @@ 3639730176,3639734271,CA 3639734272,3639886591,US 3639886592,3639886599,SG -3639886600,3639892359,US +3639886600,3639888962,US +3639888963,3639888963,ID +3639888964,3639888986,US +3639888987,3639888987,ID +3639888988,3639892359,US 3639892360,3639892367,ID 3639892368,3639892375,US 3639892376,3639892383,ID @@ -136086,15 +153889,7 @@ 3639892416,3639892431,MX 3639892432,3639892815,US 3639892816,3639892831,MX -3639892832,3639893007,US -3639893008,3639893023,DE -3639893024,3639893039,US -3639893040,3639893071,DE -3639893072,3639893087,US -3639893088,3639893119,DE -3639893120,3639893167,US -3639893168,3639893183,DE -3639893184,3639893207,US +3639892832,3639893207,US 3639893208,3639893215,DE 3639893216,3639893503,US 3639893504,3639893519,ID @@ -136109,7 +153904,9 @@ 3640007312,3640007319,HK 3640007320,3640007359,US 3640007360,3640007367,SO -3640007368,3640013767,US +3640007368,3640013095,US +3640013096,3640013103,CA +3640013104,3640013767,US 3640013768,3640013775,GI 3640013776,3640023079,US 3640023080,3640023087,EG @@ -136119,14 +153916,18 @@ 3640023272,3640023279,HK 3640023280,3640027415,US 3640027416,3640027423,GB -3640027424,3640028279,US -3640028280,3640028287,AF -3640028288,3640028295,US +3640027424,3640028207,US +3640028208,3640028215,GB +3640028216,3640028247,US +3640028248,3640028255,IN +3640028256,3640028295,US 3640028296,3640028303,CA 3640028304,3640028311,GB 3640028312,3640028335,US 3640028336,3640028343,CA -3640028344,3640028591,US +3640028344,3640028447,US +3640028448,3640028455,GB +3640028456,3640028591,US 3640028592,3640028599,CA 3640028600,3640057855,US 3640057856,3640066047,CA @@ -136221,7 +154022,9 @@ 3640450048,3640451071,US 3640451072,3640459263,A2 3640459264,3640557567,US -3640557568,3640560511,CA +3640557568,3640559567,CA +3640559568,3640559575,US +3640559576,3640560511,CA 3640560512,3640560527,US 3640560528,3640564455,CA 3640564456,3640564463,US @@ -136237,25 +154040,15 @@ 3641078560,3641078567,BE 3641078568,3641085687,DE 3641085688,3641085695,CZ -3641085696,3641087695,DE -3641087696,3641087703,GB -3641087704,3641098191,DE -3641098192,3641098207,ES -3641098208,3641102607,DE -3641102608,3641102615,FR -3641102616,3641103719,DE +3641085696,3641103719,DE 3641103720,3641103727,HU 3641103728,3641106951,DE 3641106952,3641106959,CH -3641106960,3641134367,DE -3641134368,3641134375,BE -3641134376,3641140671,DE +3641106960,3641140671,DE 3641140672,3641140679,US 3641140680,3641147519,DE 3641147520,3641147527,AT -3641147528,3641150303,DE -3641150304,3641150311,US -3641150312,3641157951,DE +3641147528,3641157951,DE 3641157952,3641157959,AT 3641157960,3641158031,DE 3641158032,3641158055,FR @@ -136319,26 +154112,23 @@ 3641353184,3641353215,NG 3641353216,3641353231,GB 3641353232,3641353247,IQ -3641353248,3641353263,GB -3641353264,3641353727,A2 +3641353248,3641353727,A2 3641353728,3641353759,NG 3641353760,3641353775,GB 3641353776,3641353807,NG 3641353808,3641353831,GB 3641353832,3641353839,A2 3641353840,3641353855,GB -3641353856,3641353983,A2 +3641353856,3641353879,NG +3641353880,3641353983,A2 3641353984,3641354239,AF -3641354240,3641354255,GB -3641354256,3641354311,A2 +3641354240,3641354311,A2 3641354312,3641354319,GB 3641354320,3641354327,A2 3641354328,3641354335,GB 3641354336,3641354339,A2 3641354340,3641354367,GB -3641354368,3641354383,A2 -3641354384,3641354479,IT -3641354480,3641354495,A2 +3641354368,3641354495,A2 3641354496,3641354751,GB 3641354752,3641355263,NG 3641355264,3641355519,AO @@ -136348,7 +154138,9 @@ 3641355776,3641356031,LB 3641356032,3641356191,A2 3641356192,3641356207,NG -3641356208,3641357855,A2 +3641356208,3641357823,A2 +3641357824,3641357831,NG +3641357832,3641357855,A2 3641357856,3641357879,GB 3641357880,3641357887,A2 3641357888,3641357927,GB @@ -136356,9 +154148,7 @@ 3641358336,3641359359,GB 3641359360,3641359615,IQ 3641359616,3641359639,GB -3641359640,3641359647,A2 -3641359648,3641359664,GB -3641359665,3641359871,A2 +3641359640,3641359871,A2 3641359872,3641360383,GB 3641360384,3641368575,RO 3641368576,3641372671,GB @@ -136416,7 +154206,7 @@ 3641565184,3641567343,SE 3641567344,3641567351,FI 3641567352,3641568967,SE -3641568968,3641568975,NO +3641568968,3641568975,DK 3641568976,3641573375,SE 3641573376,3641577471,NO 3641577472,3641581567,RU @@ -136447,16 +154237,15 @@ 3641670656,3641670783,SO 3641670784,3641670791,NG 3641670792,3641670911,GB -3641670912,3641671679,LS +3641670912,3641671167,LS +3641671168,3641671423,ZW +3641671424,3641671679,GB 3641671680,3641679871,RU -3641679872,3641680127,DK -3641680128,3641681151,GB -3641681152,3641681407,SE -3641681408,3641681663,FR -3641681664,3641683967,EU +3641679872,3641683967,A1 3641683968,3641688063,KZ 3641688064,3641692159,RU 3641692160,3641696255,IT +3641696256,3641700351,BE 3641700352,3641704447,SE 3641704448,3641708543,FR 3641708544,3641712639,RU @@ -136471,110 +154260,7 @@ 3641749504,3641753599,CZ 3641753600,3641757695,SE 3641757696,3641761791,GB -3641761792,3641761795,CY -3641761796,3641761851,GR -3641761852,3641761855,CY -3641761856,3641761863,GR -3641761864,3641761867,CY -3641761868,3641761895,GR -3641761896,3641761899,CY -3641761900,3641761923,GR -3641761924,3641761927,CY -3641761928,3641761935,GR -3641761936,3641761939,CY -3641761940,3641761967,GR -3641761968,3641761971,CY -3641761972,3641762007,GR -3641762008,3641762011,CY -3641762012,3641762047,GR -3641762048,3641762571,CY -3641762572,3641762575,GR -3641762576,3641762607,CY -3641762608,3641762611,GR -3641762612,3641762647,CY -3641762648,3641762655,GR -3641762656,3641762687,CY -3641762688,3641762691,GR -3641762692,3641762703,CY -3641762704,3641762711,GR -3641762712,3641762731,CY -3641762732,3641762743,GR -3641762744,3641762755,CY -3641762756,3641762759,GR -3641762760,3641762907,CY -3641762908,3641762911,GR -3641762912,3641762943,CY -3641762944,3641762947,GR -3641762948,3641762951,CY -3641762952,3641762999,GR -3641763000,3641763003,CY -3641763004,3641763023,GR -3641763024,3641763035,CY -3641763036,3641763063,GR -3641763064,3641763331,CY -3641763332,3641763339,GR -3641763340,3641763343,CY -3641763344,3641763347,GR -3641763348,3641763367,CY -3641763368,3641763371,GR -3641763372,3641763427,CY -3641763428,3641763431,GR -3641763432,3641763439,CY -3641763440,3641763443,GR -3641763444,3641763451,CY -3641763452,3641763455,GR -3641763456,3641763475,CY -3641763476,3641763479,GR -3641763480,3641763491,CY -3641763492,3641763503,GR -3641763504,3641763511,CY -3641763512,3641763519,GR -3641763520,3641763582,CY -3641763583,3641763583,GR -3641763584,3641764099,CY -3641764100,3641764103,GR -3641764104,3641764111,CY -3641764112,3641764115,GR -3641764116,3641764223,CY -3641764224,3641764227,GR -3641764228,3641764231,CY -3641764232,3641764239,GR -3641764240,3641764279,CY -3641764280,3641764291,GR -3641764292,3641764303,CY -3641764304,3641764307,GR -3641764308,3641764319,CY -3641764320,3641764327,GR -3641764328,3641764347,CY -3641764348,3641764351,GR -3641764352,3641764607,CY -3641764608,3641764699,GR -3641764700,3641764703,CY -3641764704,3641764711,GR -3641764712,3641764715,CY -3641764716,3641764779,GR -3641764780,3641764783,CY -3641764784,3641764787,GR -3641764788,3641764799,CY -3641764800,3641764847,GR -3641764848,3641764856,CY -3641764857,3641764863,GR -3641764864,3641764875,CY -3641764876,3641764927,GR -3641764928,3641764935,CY -3641764936,3641764943,GR -3641764944,3641764951,CY -3641764952,3641764963,GR -3641764964,3641764967,CY -3641764968,3641764975,GR -3641764976,3641764979,CY -3641764980,3641765023,GR -3641765024,3641765031,CY -3641765032,3641765083,GR -3641765084,3641765087,CY -3641765088,3641765119,GR -3641765120,3641765631,CY -3641765632,3641765887,GR +3641761792,3641765887,CY 3641765888,3641769983,ES 3641769984,3641774079,NO 3641774080,3641778175,DE @@ -136644,15 +154330,18 @@ 3641925632,3641933823,RU 3641933824,3641937919,GB 3641937920,3641942015,IT -3641942016,3641950207,DE +3641942016,3641947495,DE +3641947496,3641947503,US +3641947504,3641950207,DE 3641950208,3641954303,FR -3641954304,3641957887,MD -3641957888,3641957951,GB -3641957952,3641958143,MD -3641958144,3641958207,GB -3641958208,3641958399,MD -3641958400,3641960699,BE -3641960700,3641960703,NL +3641954304,3641956863,MD +3641956864,3641957631,GB +3641957632,3641957887,MD +3641957888,3641958399,GB +3641958400,3641960447,BE +3641960448,3641960519,NL +3641960520,3641960527,BE +3641960528,3641960703,NL 3641960704,3641961727,BE 3641961728,3641961743,NL 3641961744,3641961791,BE @@ -136683,7 +154372,9 @@ 3642029057,3642029311,NG 3642029312,3642029312,A2 3642029313,3642029567,GB -3642029568,3642031359,NG +3642029568,3642030591,NG +3642030592,3642030847,GN +3642030848,3642031359,NG 3642031360,3642031615,GB 3642031616,3642031616,A2 3642031617,3642031743,SL @@ -136700,10 +154391,11 @@ 3642064896,3642068991,SE 3642068992,3642073087,AL 3642073088,3642077183,LV -3642077184,3642081271,BE +3642077184,3642078999,BE +3642079000,3642079007,NL +3642079008,3642081271,BE 3642081272,3642081278,US -3642081279,3642081279,BE -3642081280,3642085375,NL +3642081279,3642085375,NL 3642085376,3642089471,RU 3642089472,3642093567,SE 3642093568,3642097663,NL @@ -136756,7 +154448,17 @@ 3642113792,3642113823,BE 3642113824,3642113855,NL 3642113856,3642113919,BE -3642113920,3642118143,NL +3642113920,3642114591,NL +3642114592,3642114815,NO +3642114816,3642114831,NL +3642114832,3642115095,NO +3642115096,3642115103,NL +3642115104,3642116095,NO +3642116096,3642117119,NL +3642117120,3642117375,NO +3642117376,3642117631,NL +3642117632,3642117887,NO +3642117888,3642118143,NL 3642118144,3642122239,GB 3642122240,3642126335,ES 3642126336,3642130431,IL @@ -136803,10 +154505,9 @@ 3642249216,3642253311,FR 3642253312,3642257407,FI 3642257408,3642261503,RU -3642265600,3642266111,AE -3642266112,3642266367,IR -3642266368,3642266623,AE -3642266624,3642269695,IR +3642261504,3642265599,BA +3642265600,3642265855,AE +3642265856,3642269695,IR 3642269696,3642273791,UA 3642273792,3642277887,RU 3642277888,3642290175,DE @@ -136849,7 +154550,8 @@ 3642415636,3642415651,GB 3642415652,3642415655,MT 3642415656,3642417151,GB -3642417152,3642421247,IT +3642417152,3642419199,DE +3642419200,3642421247,GB 3642421248,3642423091,A2 3642423092,3642423099,NG 3642423100,3642424151,A2 @@ -136863,7 +154565,7 @@ 3642429440,3642433535,GB 3642433536,3642435583,CY 3642435584,3642436607,RU -3642436608,3642437119,GR +3642436608,3642437119,CY 3642437120,3642437631,GB 3642437632,3642439423,CY 3642439424,3642439459,RU @@ -136906,7 +154608,9 @@ 3642539976,3642540031,IS 3642540032,3642540063,SE 3642540064,3642540079,NO -3642540080,3642544127,SE +3642540080,3642540135,SE +3642540136,3642540143,NO +3642540144,3642544127,SE 3642544128,3642552319,RU 3642552320,3642552639,UA 3642552640,3642552655,EE @@ -136916,17 +154620,25 @@ 3642552672,3642552687,SE 3642552688,3642552831,UA 3642552832,3642552847,EE -3642552848,3642553095,UA -3642553096,3642553139,LV -3642553140,3642553143,UA -3642553144,3642553161,LV +3642552848,3642553087,UA +3642553088,3642553091,LV +3642553092,3642553095,UA +3642553096,3642553099,LV +3642553100,3642553103,UA +3642553104,3642553161,LV 3642553162,3642553163,UA 3642553164,3642553175,LV 3642553176,3642553183,UA -3642553184,3642553215,LV -3642553216,3642553279,UA -3642553280,3642553343,LV -3642553344,3642553371,RU +3642553184,3642553223,LV +3642553224,3642553279,UA +3642553280,3642553285,LV +3642553286,3642553289,UA +3642553290,3642553295,LV +3642553296,3642553311,UA +3642553312,3642553343,LV +3642553344,3642553363,RU +3642553364,3642553367,UA +3642553368,3642553371,RU 3642553372,3642553379,UA 3642553380,3642553383,RU 3642553384,3642553407,UA @@ -136941,8 +154653,7 @@ 3642553472,3642553519,RU 3642553520,3642553523,UA 3642553524,3642553535,RU -3642553536,3642553543,DE -3642553544,3642553547,UA +3642553536,3642553547,UA 3642553548,3642553567,RU 3642553568,3642553571,UA 3642553572,3642553575,RU @@ -136951,36 +154662,41 @@ 3642553590,3642553591,UA 3642553592,3642553599,RU 3642553600,3642553855,UA -3642553856,3642553927,RU -3642553928,3642553935,UA +3642553856,3642553929,RU +3642553930,3642553935,UA 3642553936,3642553959,RU 3642553960,3642554111,UA 3642554112,3642554119,RU 3642554120,3642554127,UA -3642554128,3642554151,RU -3642554152,3642554187,UA -3642554188,3642554207,RU +3642554128,3642554159,RU +3642554160,3642554187,UA +3642554188,3642554193,RU +3642554194,3642554195,UA +3642554196,3642554207,RU 3642554208,3642554219,UA 3642554220,3642554223,RU 3642554224,3642554367,UA -3642554368,3642554559,LT -3642554560,3642554575,UA +3642554368,3642554427,LT +3642554428,3642554431,UA +3642554432,3642554447,LT +3642554448,3642554463,UA +3642554464,3642554573,LT +3642554574,3642554575,UA 3642554576,3642554623,LT 3642554624,3642554631,UA 3642554632,3642554671,LV 3642554672,3642554675,UA -3642554676,3642554687,LV -3642554688,3642554751,UA -3642554752,3642554791,LV -3642554792,3642554807,UA +3642554676,3642554703,LV +3642554704,3642554751,UA +3642554752,3642554795,LV +3642554796,3642554807,UA 3642554808,3642554831,LV -3642554832,3642554847,UA -3642554848,3642554879,LV +3642554832,3642554851,UA +3642554852,3642554879,LV 3642554880,3642554911,DE 3642554912,3642554919,NL 3642554920,3642554931,DE -3642554932,3642554951,UA -3642554952,3642554959,GE +3642554932,3642554959,UA 3642554960,3642554963,DE 3642554964,3642554967,UA 3642554968,3642554971,LV @@ -137003,7 +154719,10 @@ 3642555068,3642555069,NL 3642555070,3642555071,DE 3642555072,3642555087,GE -3642555088,3642555135,UA +3642555088,3642555103,DE +3642555104,3642555111,CZ +3642555112,3642555119,UA +3642555120,3642555135,DE 3642555136,3642555153,LT 3642555154,3642555167,UA 3642555168,3642555183,LT @@ -137012,36 +154731,40 @@ 3642555224,3642555227,LV 3642555228,3642555289,LT 3642555290,3642555295,UA -3642555296,3642555391,LT +3642555296,3642555359,LT +3642555360,3642555375,UA +3642555376,3642555391,LT 3642555392,3642555431,PL 3642555432,3642555437,UA 3642555438,3642555439,PL 3642555440,3642555443,UA -3642555444,3642555471,PL -3642555472,3642555475,UA -3642555476,3642555493,PL -3642555494,3642555495,UA -3642555496,3642555503,PL +3642555444,3642555463,PL +3642555464,3642555475,UA +3642555476,3642555503,PL 3642555504,3642555647,UA 3642555648,3642555683,SE -3642555684,3642555687,UA -3642555688,3642555695,SE +3642555684,3642555685,GB +3642555686,3642555691,UA +3642555692,3642555695,SE 3642555696,3642555703,UA 3642555704,3642555707,FI 3642555708,3642555711,SE 3642555712,3642555727,RU -3642555728,3642555735,UA +3642555728,3642555735,SE 3642555736,3642555743,GB 3642555744,3642555759,SE -3642555760,3642555771,GB +3642555760,3642555771,UA 3642555772,3642555775,SE 3642555776,3642555783,UA 3642555784,3642555787,GB 3642555788,3642555789,UA 3642555790,3642555791,SE -3642555792,3642556159,UA +3642555792,3642555795,CZ +3642555796,3642556159,UA 3642556160,3642556415,LV -3642556416,3642560511,CZ +3642556416,3642558975,CZ +3642558976,3642559487,HR +3642559488,3642560511,CZ 3642560512,3642564607,KG 3642564608,3642568703,DE 3642568704,3642572799,RU @@ -137074,7 +154797,9 @@ 3642675200,3642679295,BG 3642679296,3642683391,DE 3642683392,3642687487,RU -3642687488,3642691583,GB +3642687488,3642691071,GB +3642691072,3642691327,LU +3642691328,3642691583,GB 3642691584,3642695679,DE 3642695680,3642699775,SK 3642699776,3642703871,CZ @@ -137087,7 +154812,9 @@ 3642736640,3642740735,CZ 3642740736,3642744831,DE 3642744832,3642753023,TR -3642753024,3643801599,GB +3642753024,3642830671,GB +3642830672,3642830687,A2 +3642830688,3643801599,GB 3643801600,3644063743,DE 3644063744,3644325887,EG 3644325888,3644588031,IT @@ -137176,7 +154903,9 @@ 3645104128,3645112319,NL 3645112320,3645113735,DE 3645113736,3645113743,MK -3645113744,3645116415,DE +3645113744,3645114079,DE +3645114080,3645114095,IL +3645114096,3645116415,DE 3645116416,3645120511,GB 3645120512,3645124607,SE 3645124608,3645128703,NL @@ -137184,7 +154913,9 @@ 3645132800,3645136895,HR 3645136896,3645145087,NO 3645145088,3645149183,GB -3645149184,3645149887,DE +3645149184,3645149487,DE +3645149488,3645149495,GB +3645149496,3645149887,DE 3645149888,3645149951,HK 3645149952,3645150559,DE 3645150560,3645150591,HK @@ -137212,8 +154943,8 @@ 3645183744,3645183871,GB 3645183872,3645183903,FR 3645183904,3645183935,IE -3645183936,3645184256,FR -3645184257,3645184447,GB +3645183936,3645184255,FR +3645184256,3645184447,GB 3645184448,3645186047,FR 3645186048,3645190143,GB 3645190144,3645194239,FI @@ -137256,8 +154987,8 @@ 3645321216,3645325311,BA 3645325312,3645329407,IT 3645329408,3645333503,CH -3645333504,3645334031,DE -3645334032,3645334271,EU +3645333504,3645334039,DE +3645334040,3645334271,EU 3645334272,3645336927,DE 3645336928,3645336935,EU 3645336936,3645336991,DE @@ -137267,9 +154998,7 @@ 3645337088,3645337599,DE 3645337600,3645337631,FR 3645337632,3645337663,BE -3645337664,3645338399,FR -3645338400,3645338431,BE -3645338432,3645339295,FR +3645337664,3645339295,FR 3645339296,3645339359,BE 3645339360,3645339391,FR 3645339392,3645339647,NL @@ -137308,7 +155037,10 @@ 3645435904,3645439999,GB 3645440000,3645444095,SE 3645444096,3645448191,SK -3645448192,3645456383,DE +3645448192,3645454335,DE +3645454336,3645455359,RU +3645455360,3645455487,DE +3645455488,3645456383,RU 3645456384,3645460479,GB 3645460480,3645464575,UA 3645464576,3645468671,SE @@ -137329,17 +155061,14 @@ 3645507596,3645507599,DE 3645507600,3645507607,AT 3645507608,3645509631,DE -3645509632,3645513727,GB +3645509632,3645511679,NL +3645511680,3645513727,TR 3645513728,3645517823,RU 3645517824,3645521919,IE 3645521920,3645526015,PL 3645526016,3645530111,SE 3645530112,3645534207,FR -3645534208,3645544959,RU -3645544960,3645544991,KZ -3645544992,3645545087,RU -3645545088,3645545215,TJ -3645545216,3645550591,RU +3645534208,3645550591,RU 3645550592,3645558783,DE 3645558784,3645562879,DK 3645562880,3645563135,ZW @@ -137357,14 +155086,26 @@ 3645583360,3645587455,PL 3645587456,3645594711,SK 3645594712,3645594719,SR -3645594720,3645595647,SK +3645594720,3645594743,SK +3645594744,3645594751,SR +3645594752,3645594799,SK +3645594800,3645594815,SR +3645594816,3645594863,SK +3645594864,3645594871,SR +3645594872,3645595647,SK 3645595648,3645597751,SE 3645597752,3645597759,GB 3645597760,3645601471,SE 3645601472,3645601487,NO -3645601488,3645601759,SE +3645601488,3645601503,SE +3645601504,3645601507,GB +3645601508,3645601759,SE 3645601760,3645601775,FR -3645601776,3645603839,SE +3645601776,3645601779,GB +3645601780,3645601783,US +3645601784,3645601799,SE +3645601800,3645601803,GB +3645601804,3645603839,SE 3645603840,3645612031,BG 3645612032,3645616127,GB 3645616128,3645620223,AT @@ -137470,9 +155211,7 @@ 3645763663,3645763663,HU 3645763664,3645763665,DE 3645763666,3645763666,NL -3645763667,3645763667,DE -3645763668,3645763668,IT -3645763669,3645763670,DE +3645763667,3645763670,DE 3645763671,3645763671,FR 3645763672,3645763672,DE 3645763673,3645763673,BE @@ -137493,10 +155232,9 @@ 3645763691,3645763691,CH 3645763692,3645763692,DE 3645763693,3645763693,NL -3645763694,3645763694,IE -3645763695,3645763696,DE +3645763694,3645763696,DE 3645763697,3645763697,NL -3645763698,3645763698,LU +3645763698,3645763698,DE 3645763699,3645763699,BE 3645763700,3645763700,NL 3645763701,3645763701,DE @@ -137789,9 +155527,7 @@ 3645764087,3645764087,CH 3645764088,3645764091,DE 3645764092,3645764092,FR -3645764093,3645764093,DE -3645764094,3645764094,IT -3645764095,3645764097,DE +3645764093,3645764097,DE 3645764098,3645764098,IT 3645764099,3645764099,DE 3645764100,3645764100,BE @@ -137873,8 +155609,8 @@ 3645764189,3645764189,FR 3645764190,3645764190,IT 3645764191,3645764191,GB -3645764192,3645764192,DE -3645764193,3645764194,ES +3645764192,3645764193,DE +3645764194,3645764194,ES 3645764195,3645764195,DE 3645764196,3645764196,IT 3645764197,3645764197,DE @@ -137932,8 +155668,8 @@ 3645764262,3645764262,BE 3645764263,3645764264,IT 3645764265,3645764265,TR -3645764266,3645764268,DE -3645764269,3645764270,ES +3645764266,3645764269,DE +3645764270,3645764270,ES 3645764271,3645764271,IT 3645764272,3645764272,DE 3645764273,3645764273,IT @@ -138122,8 +155858,8 @@ 3645764516,3645764516,NL 3645764517,3645764518,DE 3645764519,3645764522,NL -3645764523,3645764523,DE -3645764524,3645764531,NL +3645764523,3645764524,DE +3645764525,3645764531,NL 3645764532,3645764533,DE 3645764534,3645764535,NL 3645764536,3645764536,IT @@ -138334,9 +156070,7 @@ 3645889920,3645890559,DE 3645890560,3645894655,RU 3645894656,3645898751,NL -3645898752,3646501711,DE -3646501712,3646501719,US -3646501720,3646513103,DE +3645898752,3646513103,DE 3646513104,3646513111,CA 3646513112,3646947327,DE 3646947328,3647209471,PL @@ -138359,7 +156093,9 @@ 3647886188,3647886207,GB 3647886208,3647886271,DE 3647886272,3647886303,GB -3647886304,3647889663,DE +3647886304,3647888143,DE +3647888144,3647888151,IT +3647888152,3647889663,DE 3647889664,3647889671,BE 3647889672,3647890463,DE 3647890464,3647890471,FR @@ -138369,7 +156105,9 @@ 3647916800,3647917055,SE 3647917056,3647917599,DE 3647917600,3647917615,US -3647917616,3647936871,DE +3647917616,3647922959,DE +3647922960,3647922975,GB +3647922976,3647936871,DE 3647936872,3647936879,FR 3647936880,3647954231,DE 3647954232,3647954239,GB @@ -138412,10 +156150,8 @@ 3647965296,3647965303,DE 3647965304,3647965311,ES 3647965312,3647965319,DE -3647965320,3647965359,ES -3647965360,3647965375,DE -3647965376,3647965407,ES -3647965408,3647965439,DE +3647965320,3647965431,ES +3647965432,3647965439,DE 3647965440,3647965695,ES 3647965696,3647966207,CH 3647966208,3647966575,GB @@ -138435,7 +156171,11 @@ 3647972264,3647972351,GB 3647972352,3647973679,IT 3647973680,3647973695,DE -3647973696,3647973783,IT +3647973696,3647973703,IT +3647973704,3647973711,BE +3647973712,3647973727,IT +3647973728,3647973743,DE +3647973744,3647973783,IT 3647973784,3647973791,DE 3647973792,3647973967,IT 3647973968,3647973975,DE @@ -138443,7 +156183,9 @@ 3647974048,3647974055,DE 3647974056,3647974399,IT 3647974400,3647976447,ES -3647976448,3647976559,BE +3647976448,3647976455,BE +3647976456,3647976463,DE +3647976464,3647976559,BE 3647976560,3647976575,FR 3647976576,3647976647,BE 3647976648,3647976663,DE @@ -138457,9 +156199,9 @@ 3647976792,3647976799,DE 3647976800,3647976927,BE 3647976928,3647976935,DE -3647976936,3647977079,BE -3647977080,3647977087,DE -3647977088,3647977151,BE +3647976936,3647977119,BE +3647977120,3647977135,DE +3647977136,3647977151,BE 3647977152,3647977215,DE 3647977216,3647977471,BE 3647977472,3647977791,GB @@ -138471,24 +156213,60 @@ 3647978776,3647978783,DE 3647978784,3647978895,NL 3647978896,3647978911,DE -3647978912,3647978935,NL -3647978936,3647979007,DE +3647978912,3647979007,NL 3647979008,3647979136,IT 3647979137,3647979519,DE -3647979520,3647980543,FR +3647979520,3647980215,FR +3647980216,3647980223,DE +3647980224,3647980239,FR +3647980240,3647980247,DE +3647980248,3647980471,FR +3647980472,3647980479,DE +3647980480,3647980495,FR +3647980496,3647980503,DE +3647980504,3647980543,FR 3647980544,3647981055,GB 3647981056,3647981567,IE 3647981568,3647982591,BE 3647982592,3647983615,IT 3647983616,3647984639,NL 3647984640,3647985151,DK -3647985152,3647985663,BE +3647985152,3647985415,BE +3647985416,3647985423,AT +3647985424,3647985663,BE 3647985664,3647985919,ES 3647985920,3647985935,BE -3647985936,3647986687,ES -3647986688,3647995903,DE -3647995904,3648004095,RU -3648004096,3648004607,GB +3647985936,3647986431,ES +3647986432,3647986687,FR +3647986688,3647986943,DE +3647986944,3647986951,ES +3647986952,3647986975,DE +3647986976,3647987071,ES +3647987072,3647987087,DE +3647987088,3647987119,ES +3647987120,3647987127,DE +3647987128,3647987183,ES +3647987184,3647987191,DE +3647987192,3647987199,ES +3647987200,3647987455,DE +3647987456,3647987487,ES +3647987488,3647987495,DE +3647987496,3647987527,ES +3647987528,3647987535,GB +3647987536,3647987543,DE +3647987544,3647987711,ES +3647987712,3647988735,IT +3647988736,3647988991,DE +3647988992,3647989263,BE +3647989264,3647989311,DE +3647989312,3647989327,BE +3647989328,3647989375,DE +3647989376,3647989759,BE +3647989760,3647990271,DE +3647990272,3647990783,ES +3647990784,3647995903,DE +3647995904,3648004223,RU +3648004224,3648004607,GB 3648004608,3648006271,RU 3648006272,3648006399,GB 3648006400,3648007167,RU @@ -138517,11 +156295,11 @@ 3648035040,3648035071,NL 3648035072,3648036863,EU 3648036864,3648040959,CZ -3648040960,3648041020,BE -3648041021,3648041021,FR -3648041022,3648041052,BE -3648041053,3648041053,NL -3648041054,3648045055,BE +3648040960,3648041024,BE +3648041025,3648041028,FR +3648041029,3648041047,BE +3648041048,3648041055,NL +3648041056,3648045055,BE 3648045056,3648049151,FI 3648049152,3648053247,UA 3648053248,3648057343,FR @@ -138536,8 +156314,7 @@ 3648078496,3648078527,BE 3648078528,3648078591,BF 3648078592,3648078847,CG -3648078848,3648079103,BE -3648079104,3648080383,UG +3648078848,3648080383,BE 3648080384,3648080511,TZ 3648080512,3648080543,BF 3648080544,3648080639,TZ @@ -138553,15 +156330,16 @@ 3648081056,3648081407,BE 3648081408,3648082175,MW 3648082176,3648082239,BE -3648082240,3648082687,ZM -3648082688,3648085759,BE -3648085760,3648086015,LR +3648082240,3648082311,NE +3648082312,3648082431,BE +3648082432,3648082479,ZM +3648082480,3648084991,BE +3648084992,3648085759,GB +3648085760,3648086015,ZM 3648086016,3648090111,AT 3648090112,3648094207,RU 3648094208,3648102399,PL -3648102400,3648104767,GB -3648104768,3648104783,IE -3648104784,3648104791,GB +3648102400,3648104791,GB 3648104792,3648104799,IE 3648104800,3648106495,GB 3648106496,3648110591,DE @@ -138588,11 +156366,18 @@ 3648176128,3648178687,FR 3648178688,3648178815,LU 3648178816,3648180223,FR -3648180224,3648180767,DE +3648180224,3648180735,DE +3648180736,3648180751,IT +3648180752,3648180767,DE 3648180768,3648180799,AT -3648180800,3648181023,DE +3648180800,3648180991,DE +3648180992,3648181007,CY +3648181008,3648181015,DK +3648181016,3648181023,DE 3648181024,3648181055,AT -3648181056,3648181215,DE +3648181056,3648181063,DE +3648181064,3648181071,DK +3648181072,3648181215,DE 3648181216,3648181231,RU 3648181232,3648181247,DE 3648181248,3648181279,IT @@ -138602,16 +156387,16 @@ 3648181376,3648181407,RU 3648181408,3648181423,DE 3648181424,3648181439,CH -3648181440,3648181519,DE -3648181520,3648181527,RU -3648181528,3648181551,DE +3648181440,3648181551,DE 3648181552,3648181567,RU 3648181568,3648181631,DE 3648181632,3648181647,AT 3648181648,3648181887,DE 3648181888,3648181903,AT -3648181904,3648182143,DE -3648182144,3648182159,NL +3648181904,3648182111,DE +3648182112,3648182127,CY +3648182128,3648182143,DE +3648182144,3648182159,BR 3648182160,3648182175,DE 3648182176,3648182207,RU 3648182208,3648182271,GB @@ -138629,13 +156414,16 @@ 3648182848,3648182879,AT 3648182880,3648183551,DE 3648183552,3648183679,BR -3648183680,3648183871,DE +3648183680,3648183807,DK +3648183808,3648183871,DE 3648183872,3648183935,GB 3648183936,3648184319,DE 3648184320,3648192511,RU 3648192512,3648196607,DE 3648196608,3648200703,IT -3648200704,3648208895,SE +3648200704,3648208479,SE +3648208480,3648208511,DK +3648208512,3648208895,SE 3648208896,3648212991,DE 3648212992,3648217087,RU 3648217088,3648221183,UA @@ -138643,7 +156431,12 @@ 3648225280,3648231263,DE 3648231264,3648231295,NL 3648231296,3648233471,DE -3648233472,3648237567,FR +3648233472,3648236667,FR +3648236668,3648236668,GB +3648236669,3648236669,NL +3648236670,3648236670,DE +3648236671,3648236671,SE +3648236672,3648237567,FR 3648237568,3648241663,RU 3648241664,3648245759,NL 3648245760,3648249855,RO @@ -138683,7 +156476,11 @@ 3648348160,3648352255,DE 3648352256,3648356351,RU 3648356352,3648360447,PL -3648360448,3648364543,FR +3648360448,3648362251,FR +3648362252,3648362255,GB +3648362256,3648362263,FR +3648362264,3648362271,GB +3648362272,3648364543,FR 3648364544,3648368639,CH 3648368640,3648372735,RU 3648372736,3648376831,LU @@ -138699,14 +156496,13 @@ 3648417808,3648417815,GB 3648417816,3648417831,AT 3648417832,3648417839,GB -3648417840,3648417879,AT -3648417880,3648417919,GB +3648417840,3648417855,AT +3648417856,3648417919,GB 3648417920,3648418047,AT 3648418048,3648418079,GB 3648418080,3648418247,ES 3648418248,3648418255,CH -3648418256,3648418263,ES -3648418264,3648418271,GB +3648418256,3648418271,GB 3648418272,3648418303,ES 3648418304,3648419327,GB 3648419328,3648419455,FR @@ -138714,7 +156510,9 @@ 3648419520,3648419583,ES 3648419584,3648419839,GB 3648419840,3648419901,BE -3648419902,3648420095,GB +3648419902,3648419903,GB +3648419904,3648419967,BE +3648419968,3648420095,GB 3648420096,3648420351,NL 3648420352,3648420863,GB 3648420864,3648421119,US @@ -138723,12 +156521,12 @@ 3648421632,3648421887,CH 3648421888,3648425983,GB 3648425984,3648430079,IT -3648430080,3648434175,NL +3648430080,3648432127,NL +3648432128,3648433151,DE +3648433152,3648434175,NL 3648434176,3648438271,RU 3648438272,3648442367,CH -3648442368,3648443743,SE -3648443744,3648443759,PA -3648443760,3648446463,SE +3648442368,3648446463,SE 3648446464,3648447055,FR 3648447056,3648447063,ES 3648447064,3648449119,FR @@ -138742,9 +156540,7 @@ 3648465272,3648465823,FI 3648465824,3648465855,AX 3648465856,3648466943,FI -3648466944,3648469263,DE -3648469264,3648469271,NL -3648469272,3648469295,DE +3648466944,3648469295,DE 3648469296,3648469311,AT 3648469312,3648471039,DE 3648471040,3648475135,PL @@ -138790,8 +156586,15 @@ 3649709824,3649765375,GB 3649765376,3649830911,EG 3649830912,3649835007,NL -3649835008,3649839103,ES -3649839104,3649847295,GB +3649835008,3649838079,ES +3649838080,3649839103,NL +3649839104,3649840127,GB +3649840128,3649840383,NL +3649840384,3649843455,GB +3649843456,3649845247,NL +3649845248,3649845759,GB +3649845760,3649847039,NL +3649847040,3649847295,GB 3649847296,3649855487,DE 3649855488,3649856511,GB 3649856512,3649857023,US @@ -138806,7 +156609,7 @@ 3650093056,3650097151,JO 3650097152,3650101247,SK 3650101248,3650105343,DE -3650105344,3650109439,CH +3650105344,3650109439,HU 3650109440,3650113535,NO 3650113536,3650117631,GB 3650117632,3650121727,RU @@ -138839,12 +156642,16 @@ 3650228224,3650228735,US 3650228736,3650228991,A2 3650228992,3650232319,US -3650232320,3650236415,RU +3650232320,3650233343,RU +3650233344,3650233599,CY +3650233600,3650236415,RU 3650236416,3650240511,GB 3650240512,3650244607,EE 3650244608,3650256895,GB 3650256896,3650265087,DE -3650265088,3650269183,CH +3650265088,3650265559,CH +3650265560,3650265571,DE +3650265572,3650269183,CH 3650269184,3650273071,GB 3650273072,3650273279,IR 3650273280,3650277375,IT @@ -138878,8 +156685,7 @@ 3650344560,3650344575,AT 3650344576,3650344879,CH 3650344880,3650344911,PT -3650344912,3650345879,CH -3650345880,3650345887,IM +3650344912,3650345887,CH 3650345888,3650345903,AT 3650345904,3650345935,CH 3650345936,3650345951,PT @@ -138934,7 +156740,8 @@ 3650367488,3650371583,RU 3650371584,3650375679,ES 3650375680,3650379775,NL -3650379776,3650387967,IT +3650379776,3650381823,DE +3650381824,3650387967,IT 3650387968,3650392063,DE 3650392064,3650396159,NO 3650396160,3650404351,NL @@ -138943,7 +156750,9 @@ 3650416640,3650420735,BE 3650420736,3650424831,ES 3650424832,3650428927,RU -3650428928,3650433023,NL +3650428928,3650432431,NL +3650432432,3650432447,DE +3650432448,3650433023,NL 3650433024,3650437119,FI 3650437120,3650441215,NL 3650441216,3650445311,IT @@ -138955,9 +156764,9 @@ 3650465792,3650469887,RU 3650469888,3650478079,NL 3650478080,3650482175,AT -3650482176,3650484687,PL -3650484688,3650484695,SE -3650484696,3650486271,PL +3650482176,3650484639,PL +3650484640,3650484671,US +3650484672,3650486271,PL 3650486272,3650502655,RU 3650502656,3650510847,SE 3650510848,3650519039,GB @@ -139012,7 +156821,9 @@ 3650923104,3650923135,FR 3650923136,3650926591,GB 3650926592,3650929663,ES -3650929664,3650945023,GB +3650929664,3650931967,GB +3650931968,3650932223,ES +3650932224,3650945023,GB 3650945024,3651010559,DK 3651010560,3651076095,GB 3651076096,3651077375,DE @@ -139051,7 +156862,9 @@ 3651087872,3651088127,DE 3651088128,3651088383,IE 3651088384,3651088639,GR -3651088640,3651090919,DE +3651088640,3651090767,DE +3651090768,3651090775,GB +3651090776,3651090919,DE 3651090920,3651090959,IE 3651090960,3651098111,DE 3651098112,3651098367,IE @@ -139104,7 +156917,11 @@ 3651204096,3651204223,ES 3651204224,3651204351,DE 3651204352,3651204607,PL -3651204608,3651207167,DE +3651204608,3651205119,ES +3651205120,3651205375,GB +3651205376,3651206143,ES +3651206144,3651206399,PL +3651206400,3651207167,DE 3651207168,3651207199,GB 3651207200,3651207223,EU 3651207224,3651207295,GB @@ -139173,8 +156990,7 @@ 3651682304,3651686399,RU 3651686400,3651690495,NO 3651690496,3651694591,FR -3651694592,3651694719,GH -3651694720,3651694847,PT +3651694592,3651694847,PT 3651694848,3651694975,NG 3651694976,3651695103,PT 3651695104,3651695359,CV @@ -139223,16 +157039,13 @@ 3651870720,3651874815,IT 3651874816,3651878911,PL 3651878912,3651883007,RU -3651883008,3651885823,BE -3651885824,3651885847,CD -3651885848,3651885851,BE -3651885852,3651885855,CD -3651885856,3651885867,BE -3651885868,3651885875,CD -3651885876,3651885903,BE -3651885904,3651885919,CD -3651885920,3651886335,BE -3651886336,3651886347,CD +3651883008,3651885871,CD +3651885872,3651885895,BE +3651885896,3651885899,CD +3651885900,3651885903,BE +3651885904,3651885927,CD +3651885928,3651886079,BE +3651886080,3651886347,CD 3651886348,3651886379,BE 3651886380,3651886383,CD 3651886384,3651886391,BE @@ -139250,8 +157063,8 @@ 3651886472,3651886479,BE 3651886480,3651886495,CD 3651886496,3651886511,BE -3651886512,3651886527,CD -3651886528,3651886591,BE +3651886512,3651886543,CD +3651886544,3651886591,BE 3651886592,3651886847,CD 3651886848,3651887103,BE 3651887104,3651891199,GB @@ -139259,7 +157072,9 @@ 3651895296,3651899391,GB 3651899392,3651903487,RU 3651903488,3651907583,IT -3651907584,3651908991,IQ +3651907584,3651908095,IQ +3651908096,3651908863,AE +3651908864,3651908991,IQ 3651908992,3651909311,DE 3651909312,3651909375,IQ 3651909376,3651909631,DE @@ -139338,9 +157153,9 @@ 3651942816,3651944447,DE 3651944448,3651948543,ES 3651948544,3651952639,FO -3651952640,3651954175,IR -3651954176,3651954431,AE -3651954432,3651958271,IR +3651952640,3651953663,IR +3651953664,3651954687,AE +3651954688,3651958271,IR 3651958272,3651958783,AE 3651958784,3651959039,IR 3651959040,3651960831,AE @@ -139411,19 +157226,19 @@ 3652034560,3652046847,PL 3652046848,3652050271,IE 3652050272,3652050299,GB -3652050300,3652050315,IE -3652050316,3652050323,GB -3652050324,3652050499,IE +3652050300,3652050327,IE +3652050328,3652050343,GB +3652050344,3652050499,IE 3652050500,3652050503,GB 3652050504,3652050527,IE 3652050528,3652050535,GB 3652050536,3652050567,IE 3652050568,3652050615,GB 3652050616,3652050619,IE -3652050620,3652050671,GB -3652050672,3652050787,IE -3652050788,3652050791,GB -3652050792,3652050943,IE +3652050620,3652050627,GB +3652050628,3652050631,IE +3652050632,3652050671,GB +3652050672,3652050943,IE 3652050944,3652055039,LI 3652055040,3652059135,NO 3652059136,3652063231,RU @@ -139471,7 +157286,9 @@ 3652985040,3652985047,FR 3652985048,3653029775,DE 3653029776,3653029791,LU -3653029792,3653039103,DE +3653029792,3653031727,DE +3653031728,3653031735,LU +3653031736,3653039103,DE 3653039104,3653039359,IT 3653039360,3653039999,DE 3653040000,3653040015,LU @@ -139488,7 +157305,7 @@ 3653386240,3653390335,DE 3653390336,3653394431,FR 3653394432,3653402623,NL -3653402624,3653403135,AT +3653402624,3653403135,A2 3653403136,3653403647,CD 3653403648,3653403903,ZW 3653403904,3653403911,A2 @@ -139554,35 +157371,31 @@ 3653407072,3653407103,A2 3653407104,3653407111,UG 3653407112,3653407119,ZM -3653407120,3653407127,ZW -3653407128,3653407167,A2 +3653407120,3653407135,A2 +3653407136,3653407151,MZ +3653407152,3653407167,A2 3653407168,3653407231,NG 3653407232,3653407391,A2 3653407392,3653407399,NG -3653407400,3653407423,A2 -3653407424,3653407487,ZW -3653407488,3653407615,A2 +3653407400,3653407615,A2 3653407616,3653407639,NG 3653407640,3653407647,ZM 3653407648,3653407679,A2 3653407680,3653407695,UG 3653407696,3653407703,CD 3653407704,3653407711,NG -3653407712,3653407727,A2 -3653407728,3653407743,ZW +3653407712,3653407743,A2 3653407744,3653407999,AT 3653408000,3653408023,A2 3653408024,3653408031,UG -3653408032,3653408047,ZW -3653408048,3653408063,A2 +3653408032,3653408063,A2 3653408064,3653408071,ZM 3653408072,3653408079,NG 3653408080,3653408119,A2 3653408120,3653408127,NG 3653408128,3653408143,A2 3653408144,3653408151,NG -3653408152,3653408167,A2 -3653408168,3653408175,ZW +3653408152,3653408175,A2 3653408176,3653408183,US 3653408184,3653408191,MW 3653408192,3653408199,A2 @@ -139602,13 +157415,9 @@ 3653409064,3653409071,CD 3653409072,3653409087,A2 3653409088,3653409095,CD -3653409096,3653409103,A2 -3653409104,3653409111,MW -3653409112,3653409127,A2 -3653409128,3653409143,CD -3653409144,3653409191,A2 -3653409192,3653409199,NG -3653409200,3653409223,A2 +3653409096,3653409127,A2 +3653409128,3653409135,CD +3653409136,3653409223,A2 3653409224,3653409231,NG 3653409232,3653409279,A2 3653409280,3653409311,TZ @@ -139642,7 +157451,7 @@ 3653410248,3653410255,ZM 3653410256,3653410263,A2 3653410264,3653410271,NG -3653410272,3653410279,SD +3653410272,3653410279,A2 3653410280,3653410287,IQ 3653410288,3653410295,A2 3653410296,3653410303,MW @@ -139657,7 +157466,8 @@ 3653439488,3653443583,FR 3653443584,3653444351,DE 3653444352,3653444383,IT -3653444384,3653447679,DE +3653444384,3653447167,DE +3653447168,3653447679,NL 3653447680,3653451775,LV 3653451776,3653464063,RU 3653464064,3653468159,NL @@ -139672,11 +157482,7 @@ 3653472592,3653472767,AF 3653472768,3653472775,NL 3653472776,3653472791,AF -3653472792,3653472799,NL -3653472800,3653472807,AF -3653472808,3653472815,NL -3653472816,3653472823,AF -3653472824,3653472831,NL +3653472792,3653472831,NL 3653472832,3653472871,AF 3653472872,3653472879,NL 3653472880,3653472915,AF @@ -139724,7 +157530,9 @@ 3653525504,3653529599,RU 3653529600,3653533695,CZ 3653533696,3653537791,IT -3653537792,3653541887,AT +3653537792,3653539031,AT +3653539032,3653539039,US +3653539040,3653541887,AT 3653541888,3653545983,UA 3653545984,3653550079,CH 3653550080,3653554175,GB @@ -139740,7 +157548,8 @@ 3653586944,3653591039,DE 3653591040,3653595135,LU 3653595136,3653599231,RU -3653599232,3653603327,BG +3653599232,3653601279,CH +3653601280,3653603327,BA 3653603328,3653607423,CZ 3653607424,3653611519,PL 3653611520,3653615615,HU @@ -139750,15 +157559,19 @@ 3653623552,3653623807,US 3653623808,3653636095,RU 3653636096,3653640191,NL -3653640192,3653644031,GB -3653644032,3653644047,BE -3653644048,3653644271,GB -3653644272,3653644275,BE -3653644276,3653648383,GB +3653640192,3653648383,GB 3653648384,3653652479,SE 3653652480,3653656575,RU 3653656576,3653660671,GB 3653660672,3653664767,CZ +3653664768,3653664895,DE +3653664896,3653664911,FR +3653664912,3653665023,NL +3653665024,3653665087,DE +3653665088,3653665151,NL +3653665152,3653665279,DE +3653665280,3653665791,NL +3653665792,3653668863,DE 3653668864,3653672959,SE 3653672960,3653681151,RU 3653681152,3653685247,ES @@ -139785,11 +157598,7 @@ 3653722112,3653730303,LV 3653730304,3653734399,BA 3653734400,3653738495,KE -3653738496,3653740295,GB -3653740296,3653740303,US -3653740304,3653744895,GB -3653744896,3653744959,AE -3653744960,3653746687,GB +3653738496,3653746687,GB 3653746688,3653750783,DE 3653750784,3653753087,RU 3653753088,3653753215,VG @@ -139812,11 +157621,16 @@ 3654062080,3654066027,GB 3654066028,3654066031,MC 3654066032,3654287359,GB -3654287360,3654607871,SE +3654287360,3654607103,SE +3654607104,3654607359,DE +3654607360,3654607871,SE 3654607872,3654608127,NO -3654608128,3654608895,SE +3654608128,3654608383,SE +3654608384,3654608895,PL 3654608896,3654609919,NO -3654609920,3654613007,SE +3654609920,3654610431,SE +3654610432,3654610943,FR +3654610944,3654613007,SE 3654613008,3654613015,RU 3654613016,3654613055,SE 3654613056,3654613071,RU @@ -139824,9 +157638,7 @@ 3654613088,3654613151,RU 3654613152,3654613247,SE 3654613248,3654614015,NO -3654614016,3654614031,SE -3654614032,3654614047,US -3654614048,3654614079,SE +3654614016,3654614079,SE 3654614080,3654614271,FI 3654614272,3654614527,SE 3654614528,3654614783,RU @@ -139839,10 +157651,7 @@ 3656229704,3656229711,ES 3656229712,3656233999,DE 3656234000,3656234007,NL -3656234008,3656236527,DE -3656236528,3656236535,GB -3656236536,3656236543,US -3656236544,3656633487,DE +3656234008,3656633487,DE 3656633488,3656633495,GB 3656633496,3656633503,US 3656633504,3656650583,DE @@ -139878,7 +157687,6 @@ 3663990784,3663991295,HK 3663991296,3663991551,MY 3663991552,3663991807,AU -3663991808,3663992063,JP 3663992064,3663992319,NZ 3663992320,3663992575,MY 3663992576,3663993599,NZ @@ -139920,6 +157728,9 @@ 3664007168,3664008191,AU 3664008192,3664008447,MN 3664008448,3664008703,PK +3664008704,3664008959,MY +3664008960,3664009215,AU +3664009216,3664052223,CN 3664052224,3664084991,NZ 3664084992,3664117759,KR 3664117760,3664248831,HK @@ -139937,12 +157748,9 @@ 3669614592,3669616639,NZ 3669616640,3669618687,AU 3669618688,3669620735,BD -3669620736,3669622783,JP 3669622784,3669688319,SG 3669688320,3669753855,TW -3669753856,3669822719,HK -3669822720,3669822735,US -3669822736,3670015999,HK +3669753856,3670015999,HK 3670016000,3671064575,CN 3671064576,3671130111,MY 3671130112,3671195647,KR @@ -139958,9 +157766,7 @@ 3673817088,3673882623,HK 3673882624,3673948159,JP 3673948160,3674210303,HK -3674210304,3674431743,JP -3674431744,3674431999,UA -3674432000,3678404607,JP +3674210304,3678404607,JP 3678404608,3678535679,IN 3678535680,3678666751,JP 3678666752,3678928895,TW @@ -140153,9 +157959,11 @@ 3742973952,3742982143,SG 3742982144,3742986239,ID 3742986240,3742988287,AU +3742988288,3742990335,VU 3742990336,3743006719,JP 3743006720,3743014911,TH 3743014912,3743016959,AU +3743016960,3743019007,SG 3743019008,3743022079,MY 3743022080,3743023103,SG 3743023104,3743027199,TW @@ -140165,11 +157973,14 @@ 3743039488,3743055871,TW 3743055872,3743088639,KR 3743088640,3743096831,AU +3743096832,3743105023,TW 3743105024,3743106047,AU -3743107072,3743109119,JP +3743106048,3743109119,JP 3743109120,3743113215,BD 3743113216,3743115263,AU +3743115264,3743117311,VN 3743117312,3743118335,BD +3743118336,3743119359,JP 3743119360,3743120383,IN 3743120384,3743121407,JP 3743121408,3743125503,MY @@ -140177,16 +157988,19 @@ 3743129600,3743130623,HK 3743130624,3743133695,SG 3743133696,3743134719,AU +3743134720,3743135743,JP 3743135744,3743136767,CN 3743136768,3743137791,MY 3743137792,3743154175,TH 3743154176,3743186943,MY 3743186944,3743219711,KR 3743219712,3743252479,JP -3743252480,3743260671,NC +3743252480,3743264767,NC +3743264768,3743268863,JP 3743268864,3743277055,IN 3743277056,3743281151,PK 3743281152,3743282175,AU +3743282176,3743283199,JP 3743283200,3743284223,HK 3743284224,3743285247,PK 3743285248,3743416319,IN @@ -140194,8 +158008,9 @@ 3745513472,3749838847,CN 3749838848,3749839871,SG 3749839872,3749840895,IN -3749840896,3749841919,PH -3749841920,3749847039,AU +3749841920,3749842943,AU +3749843968,3749846015,AU +3749846016,3749847039,IN 3749847040,3749855231,HK 3749855232,3749969919,KR 3749969920,3750232063,JP @@ -140206,9 +158021,11 @@ 3752133632,3752134655,ID 3752134656,3752136703,TW 3752136704,3752137727,NZ +3752137728,3752138751,JP 3752138752,3752140799,IN 3752140800,3752148991,JP 3752148992,3752153087,NZ +3752153088,3752157183,JP 3752157184,3752165375,AU 3752165376,3752198143,KR 3752198144,3752329215,CN @@ -140233,6 +158050,7 @@ 3755978752,3755986943,CN 3755986944,3755988991,JP 3755988992,3755990015,HK +3755990016,3755991039,SG 3755991040,3755999231,JP 3755999232,3757047807,IN 3757047808,3757834239,CN @@ -140244,6 +158062,10 @@ 3758080000,3758088191,KR 3758088192,3758090239,ID 3758090240,3758091263,AU +3758091264,3758092287,CN 3758092288,3758093311,HK 3758093312,3758094335,IN 3758094336,3758095359,AU +3758095360,3758095871,CN +3758095872,3758096127,SG +3758096128,3758096383,AU diff -Nru tor-0.2.1.30/src/config/Makefile.in tor-0.2.2.35/src/config/Makefile.in --- tor-0.2.1.30/src/config/Makefile.in 2011-02-23 08:25:53.000000000 +0000 +++ tor-0.2.2.35/src/config/Makefile.in 2011-12-15 17:01:54.000000000 +0000 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,8 +17,9 @@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -43,6 +45,7 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/orconfig.h CONFIG_CLEAN_FILES = torrc.sample +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -50,14 +53,30 @@ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(confdir)" "$(DESTDIR)$(tordatadir)" -confDATA_INSTALL = $(INSTALL_DATA) -tordataDATA_INSTALL = $(INSTALL_DATA) DATA = $(conf_DATA) $(tordata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AR = @AR@ +ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -92,15 +111,19 @@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ +OPENSSL = @OPENSSL@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ +SHA1SUM = @SHA1SUM@ SHELL = @SHELL@ STRIP = @STRIP@ TORGROUP = @TORGROUP@ @@ -115,6 +138,7 @@ TOR_LIB_GDI = @TOR_LIB_GDI@ TOR_LIB_WS32 = @TOR_LIB_WS32@ TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ +TOR_ZLIB_LIBS = @TOR_ZLIB_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -163,6 +187,7 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ confdir = $(sysconfdir)/tor @@ -178,14 +203,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/config/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/config/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/config/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/config/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -203,42 +228,49 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): torrc.sample: $(top_builddir)/config.status $(srcdir)/torrc.sample.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-confDATA: $(conf_DATA) @$(NORMAL_INSTALL) test -z "$(confdir)" || $(MKDIR_P) "$(DESTDIR)$(confdir)" - @list='$(conf_DATA)'; for p in $$list; do \ + @list='$(conf_DATA)'; test -n "$(confdir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(confDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(confdir)/$$f'"; \ - $(confDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(confdir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(confdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(confdir)" || exit $$?; \ done uninstall-confDATA: @$(NORMAL_UNINSTALL) - @list='$(conf_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(confdir)/$$f'"; \ - rm -f "$(DESTDIR)$(confdir)/$$f"; \ - done + @list='$(conf_DATA)'; test -n "$(confdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(confdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(confdir)" && rm -f $$files install-tordataDATA: $(tordata_DATA) @$(NORMAL_INSTALL) test -z "$(tordatadir)" || $(MKDIR_P) "$(DESTDIR)$(tordatadir)" - @list='$(tordata_DATA)'; for p in $$list; do \ + @list='$(tordata_DATA)'; test -n "$(tordatadir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(tordataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(tordatadir)/$$f'"; \ - $(tordataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(tordatadir)/$$f"; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tordatadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(tordatadir)" || exit $$?; \ done uninstall-tordataDATA: @$(NORMAL_UNINSTALL) - @list='$(tordata_DATA)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(tordatadir)/$$f'"; \ - rm -f "$(DESTDIR)$(tordatadir)/$$f"; \ - done + @list='$(tordata_DATA)'; test -n "$(tordatadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(tordatadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(tordatadir)" && rm -f $$files tags: TAGS TAGS: @@ -262,13 +294,17 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -299,6 +335,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -317,6 +354,8 @@ html: html-am +html-am: + info: info-am info-am: @@ -325,18 +364,28 @@ install-dvi: install-dvi-am +install-dvi-am: + install-exec-am: install-html: install-html-am +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-pdf: install-pdf-am +install-pdf-am: + install-ps: install-ps-am +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -376,6 +425,7 @@ # If we don't have it, fake it. fallback-consensus: touch fallback-consensus + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru tor-0.2.1.30/src/config/torrc.sample.in tor-0.2.2.35/src/config/torrc.sample.in --- tor-0.2.1.30/src/config/torrc.sample.in 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/config/torrc.sample.in 2011-12-15 16:26:49.000000000 +0000 @@ -1,5 +1,5 @@ ## Configuration file for a typical Tor user -## Last updated 12 April 2009 for Tor 0.2.1.14-rc. +## Last updated 16 July 2009 for Tor 0.2.2.1-alpha. ## (May or may not work for much older or much newer versions of Tor.) ## ## Lines that begin with "## " try to explain what's going on. Lines @@ -95,9 +95,22 @@ ## Define these to limit how much relayed traffic you will allow. Your ## own traffic is still unthrottled. Note that RelayBandwidthRate must -## be at least 20 KBytes. -#RelayBandwidthRate 100 KBytes # Throttle traffic to 100KB/s (800Kbps) -#RelayBandwidthBurst 200 KBytes # But allow bursts up to 200KB/s (1600Kbps) +## be at least 20 KB. +#RelayBandwidthRate 100 KB # Throttle traffic to 100KB/s (800Kbps) +#RelayBandwidthBurst 200 KB # But allow bursts up to 200KB/s (1600Kbps) + +## Use these to restrict the maximum traffic per day, week, or month. +## Note that this threshold applies to sent _and_ to received bytes, +## not to their sum: Setting "4 GB" may allow up to 8 GB +## total before hibernating. +## +## Set a maximum of 4 gigabytes each way per period. +#AccountingMax 4 GB +## Each period starts daily at midnight (AccountingMax is per day) +#AccountingStart day 00:00 +## Each period starts on the 3rd of the month at 15:00 (AccountingMax +## is per month) +#AccountingStart month 3 15:00 ## Contact info to be published in the directory, so we can contact you ## if your relay is misconfigured or something else goes wrong. Google @@ -116,8 +129,9 @@ #DirListenAddress 0.0.0.0:9091 ## Uncomment to return an arbitrary blob of html on your DirPort. Now you ## can explain what Tor is if anybody wonders why your IP address is -## contacting them. See contrib/tor-exit-notice.html for a sample. -#DirPortFrontPage /etc/tor/exit-notice.html +## contacting them. See contrib/tor-exit-notice.html in Tor's source +## distribution for a sample. +#DirPortFrontPage @CONFDIR@/tor-exit-notice.html ## Uncomment this if you run more than one Tor relay, and add the identity ## key fingerprint of each Tor relay you control, even if they're on diff -Nru tor-0.2.1.30/src/Makefile.am tor-0.2.2.35/src/Makefile.am --- tor-0.2.1.30/src/Makefile.am 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/Makefile.am 2011-12-15 16:26:49.000000000 +0000 @@ -1,5 +1,5 @@ # leave in dependency order, since common must be built first -SUBDIRS = common or tools win32 config -DIST_SUBDIRS = common or tools win32 config +SUBDIRS = common or test tools win32 config +DIST_SUBDIRS = common or test tools win32 config diff -Nru tor-0.2.1.30/src/Makefile.in tor-0.2.2.35/src/Makefile.in --- tor-0.2.1.30/src/Makefile.in 2011-02-23 08:25:53.000000000 +0000 +++ tor-0.2.2.35/src/Makefile.in 2011-12-15 17:01:54.000000000 +0000 @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,8 +16,9 @@ @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c @@ -41,6 +43,7 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/orconfig.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ @@ -52,11 +55,42 @@ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +A2X = @A2X@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ +AR = @AR@ +ASCIIDOC = @ASCIIDOC@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -91,15 +125,19 @@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ +OPENSSL = @OPENSSL@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ +SED = @SED@ SET_MAKE = @SET_MAKE@ +SHA1SUM = @SHA1SUM@ SHELL = @SHELL@ STRIP = @STRIP@ TORGROUP = @TORGROUP@ @@ -114,6 +152,7 @@ TOR_LIB_GDI = @TOR_LIB_GDI@ TOR_LIB_WS32 = @TOR_LIB_WS32@ TOR_OPENSSL_LIBS = @TOR_OPENSSL_LIBS@ +TOR_ZLIB_LIBS = @TOR_ZLIB_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ @@ -162,12 +201,13 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # leave in dependency order, since common must be built first -SUBDIRS = common or tools win32 config -DIST_SUBDIRS = common or tools win32 config +SUBDIRS = common or test tools win32 config +DIST_SUBDIRS = common or test tools win32 config all: all-recursive .SUFFIXES: @@ -175,14 +215,14 @@ @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -200,6 +240,7 @@ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -208,7 +249,7 @@ # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -225,7 +266,7 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ @@ -233,7 +274,7 @@ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -259,16 +300,16 @@ else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -276,14 +317,14 @@ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -295,7 +336,7 @@ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -304,29 +345,34 @@ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -347,29 +393,44 @@ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -399,6 +460,7 @@ distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -417,6 +479,8 @@ html: html-recursive +html-am: + info: info-recursive info-am: @@ -425,18 +489,28 @@ install-dvi: install-dvi-recursive +install-dvi-am: + install-exec-am: install-html: install-html-recursive +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: install-pdf: install-pdf-recursive +install-pdf-am: + install-ps: install-ps-recursive +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -457,8 +531,8 @@ uninstall-am: -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ @@ -473,6 +547,7 @@ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff -Nru tor-0.2.1.30/src/or/buffers.c tor-0.2.2.35/src/or/buffers.c --- tor-0.2.1.30/src/or/buffers.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/buffers.c 2011-12-15 16:38:40.000000000 +0000 @@ -12,6 +12,14 @@ **/ #define BUFFERS_PRIVATE #include "or.h" +#include "buffers.h" +#include "config.h" +#include "connection_edge.h" +#include "connection_or.h" +#include "control.h" +#include "reasons.h" +#include "../common/util.h" +#include "../common/torlog.h" #ifdef HAVE_UNISTD_H #include #endif @@ -145,10 +153,13 @@ /** Deallocate a chunk or put it on a freelist */ static void -chunk_free(chunk_t *chunk) +chunk_free_unchecked(chunk_t *chunk) { - size_t alloc = CHUNK_ALLOC_SIZE(chunk->memlen); - chunk_freelist_t *freelist = get_freelist(alloc); + size_t alloc; + chunk_freelist_t *freelist; + + alloc = CHUNK_ALLOC_SIZE(chunk->memlen); + freelist = get_freelist(alloc); if (freelist && freelist->cur_length < freelist->max_length) { chunk->next = freelist->head; freelist->head = chunk; @@ -193,7 +204,7 @@ } #else static void -chunk_free(chunk_t *chunk) +chunk_free_unchecked(chunk_t *chunk) { tor_free(chunk); } @@ -259,13 +270,22 @@ int n_to_free = free_all ? freelists[i].cur_length : (freelists[i].lowest_length - slack); int n_to_skip = freelists[i].cur_length - n_to_free; + int orig_length = freelists[i].cur_length; int orig_n_to_free = n_to_free, n_freed=0; int orig_n_to_skip = n_to_skip; int new_length = n_to_skip; chunk_t **chp = &freelists[i].head; chunk_t *chunk; while (n_to_skip) { - tor_assert((*chp)->next); + if (! (*chp)->next) { + log_warn(LD_BUG, "I wanted to skip %d chunks in the freelist for " + "%d-byte chunks, but only found %d. (Length %d)", + orig_n_to_skip, (int)freelists[i].alloc_size, + orig_n_to_skip-n_to_skip, freelists[i].cur_length); + assert_freelist_ok(&freelists[i]); + goto done; + } + // tor_assert((*chp)->next); chp = &(*chp)->next; --n_to_skip; } @@ -290,13 +310,15 @@ } // tor_assert(!n_to_free); freelists[i].cur_length = new_length; - log_info(LD_MM, "Cleaned freelist for %d-byte chunks: kept %d, " - "dropped %d.", - (int)freelists[i].alloc_size, orig_n_to_skip, orig_n_to_free); + log_info(LD_MM, "Cleaned freelist for %d-byte chunks: original " + "length %d, kept %d, dropped %d.", + (int)freelists[i].alloc_size, orig_length, + orig_n_to_skip, orig_n_to_free); } freelists[i].lowest_length = freelists[i].cur_length; assert_freelist_ok(&freelists[i]); } + done: enable_control_logging(); #else (void) free_all; @@ -375,9 +397,10 @@ if (buf->head->memlen >= capacity) { /* We don't need to grow the first chunk, but we might need to repack it.*/ - if (CHUNK_REMAINING_CAPACITY(buf->head) < capacity-buf->datalen) + size_t needed = capacity - buf->head->datalen; + if (CHUNK_REMAINING_CAPACITY(buf->head) < needed) chunk_repack(buf->head); - tor_assert(CHUNK_REMAINING_CAPACITY(buf->head) >= capacity-buf->datalen); + tor_assert(CHUNK_REMAINING_CAPACITY(buf->head) >= needed); } else { chunk_t *newhead; size_t newsize; @@ -404,7 +427,7 @@ dest->next = src->next; if (buf->tail == src) buf->tail = dest; - chunk_free(src); + chunk_free_unchecked(src); } else { memcpy(CHUNK_WRITE_PTR(dest), src->data, n); dest->datalen += n; @@ -450,7 +473,7 @@ buf->head = victim->next; if (buf->tail == victim) buf->tail = NULL; - chunk_free(victim); + chunk_free_unchecked(victim); } } check(); @@ -484,7 +507,7 @@ buf->datalen = 0; for (chunk = buf->head; chunk; chunk = next) { next = chunk->next; - chunk_free(chunk); + chunk_free_unchecked(chunk); } buf->head = buf->tail = NULL; } @@ -523,6 +546,8 @@ void buf_free(buf_t *buf) { + if (!buf) + return; buf_clear(buf); buf->magic = 0xdeadbeef; tor_free(buf); @@ -563,7 +588,7 @@ * *reached_eof to 1. Return -1 on error, 0 on eof or blocking, * and the number of bytes read otherwise. */ static INLINE int -read_to_chunk(buf_t *buf, chunk_t *chunk, int fd, size_t at_most, +read_to_chunk(buf_t *buf, chunk_t *chunk, tor_socket_t fd, size_t at_most, int *reached_eof, int *socket_error) { ssize_t read_result; @@ -642,12 +667,12 @@ * (because of EOF), set *reached_eof to 1 and return 0. Return -1 on * error; else return the number of bytes read. */ -/* XXXX021 indicate "read blocked" somehow? */ +/* XXXX023 indicate "read blocked" somehow? */ int -read_to_buf(int s, size_t at_most, buf_t *buf, int *reached_eof, +read_to_buf(tor_socket_t s, size_t at_most, buf_t *buf, int *reached_eof, int *socket_error) { - /* XXXX021 It's stupid to overload the return values for these functions: + /* XXXX023 It's stupid to overload the return values for these functions: * "error status" and "number of bytes read" are not mutually exclusive. */ int r = 0; @@ -743,7 +768,7 @@ * written on success, 0 on blocking, -1 on failure. */ static INLINE int -flush_chunk(int s, buf_t *buf, chunk_t *chunk, size_t sz, +flush_chunk(tor_socket_t s, buf_t *buf, chunk_t *chunk, size_t sz, size_t *buf_flushlen) { ssize_t write_result; @@ -830,9 +855,9 @@ * -1 on failure. Return 0 if write() would block. */ int -flush_buf(int s, buf_t *buf, size_t sz, size_t *buf_flushlen) +flush_buf(tor_socket_t s, buf_t *buf, size_t sz, size_t *buf_flushlen) { - /* XXXX021 It's stupid to overload the return values for these functions: + /* XXXX023 It's stupid to overload the return values for these functions: * "error status" and "number of bytes flushed" are not mutually exclusive. */ int r; @@ -1275,6 +1300,47 @@ return 1; } +/** + * Wait this many seconds before warning the user about using SOCKS unsafely + * again (requires that WarnUnsafeSocks is turned on). */ +#define SOCKS_WARN_INTERVAL 5 + +/** Warn that the user application has made an unsafe socks request using + * protocol socks_protocol on port port. Don't warn more than + * once per SOCKS_WARN_INTERVAL, unless safe_socks is set. */ +static void +log_unsafe_socks_warning(int socks_protocol, const char *address, + uint16_t port, int safe_socks) +{ + static ratelim_t socks_ratelim = RATELIM_INIT(SOCKS_WARN_INTERVAL); + + or_options_t *options = get_options(); + char *m = NULL; + if (! options->WarnUnsafeSocks) + return; + if (safe_socks || (m = rate_limit_log(&socks_ratelim, approx_time()))) { + log_warn(LD_APP, + "Your application (using socks%d to port %d) is giving " + "Tor only an IP address. Applications that do DNS resolves " + "themselves may leak information. Consider using Socks4A " + "(e.g. via privoxy or socat) instead. For more information, " + "please see https://wiki.torproject.org/TheOnionRouter/" + "TorFAQ#SOCKSAndDNS.%s%s", + socks_protocol, + (int)port, + safe_socks ? " Rejecting." : "", + m ? m : ""); + tor_free(m); + } + control_event_client_status(LOG_WARN, + "DANGEROUS_SOCKS PROTOCOL=SOCKS%d ADDRESS=%s:%d", + socks_protocol, address, (int)port); +} + +/** Do not attempt to parse socks messages longer than this. This value is + * actually significantly higher than the longest possible socks message. */ +#define MAX_SOCKS_MESSAGE_LEN 512 + /** There is a (possibly incomplete) socks handshake on buf, of one * of the forms * - socks4: "socksheader username\\0" @@ -1313,14 +1379,10 @@ char *next, *startaddr; struct in_addr in; - /* If the user connects with socks4 or the wrong variant of socks5, - * then log a warning to let him know that it might be unwise. */ - static int have_warned_about_unsafe_socks = 0; - if (buf->datalen < 2) /* version and another byte */ return 0; - buf_pullup(buf, 128, 0); + buf_pullup(buf, MAX_SOCKS_MESSAGE_LEN, 0); tor_assert(buf->head && buf->head->datalen >= 2); socksver = *buf->head->data; @@ -1396,21 +1458,8 @@ req->port = ntohs(get_uint16(buf->head->data+4+addrlen)); buf_remove_from_front(buf, 6+addrlen); if (req->command != SOCKS_COMMAND_RESOLVE_PTR && - !addressmap_have_mapping(req->address,0) && - !have_warned_about_unsafe_socks) { - log_warn(LD_APP, - "Your application (using socks5 to port %d) is giving " - "Tor only an IP address. Applications that do DNS resolves " - "themselves may leak information. Consider using Socks4A " - "(e.g. via privoxy or socat) instead. For more information, " - "please see http://wiki.noreply.org/noreply/TheOnionRouter/" - "TorFAQ#SOCKSAndDNS.%s", req->port, - safe_socks ? " Rejecting." : ""); - /*have_warned_about_unsafe_socks = 1;*/ - /*(for now, warn every time)*/ - control_event_client_status(LOG_WARN, - "DANGEROUS_SOCKS PROTOCOL=SOCKS5 ADDRESS=%s:%d", - req->address, req->port); + !addressmap_have_mapping(req->address,0)) { + log_unsafe_socks_warning(5, req->address, req->port, safe_socks); if (safe_socks) return -1; } @@ -1475,8 +1524,8 @@ return -1; } - req->port = ntohs(*(uint16_t*)(buf->head->data+2)); - destip = ntohl(*(uint32_t*)(buf->head->data+4)); + req->port = ntohs(get_uint16(buf->head->data+2)); + destip = ntohl(get_uint32(buf->head->data+4)); if ((!req->port && req->command!=SOCKS_COMMAND_RESOLVE) || !destip) { log_warn(LD_APP,"socks4: Port or DestIP is zero. Rejecting."); return -1; @@ -1491,7 +1540,8 @@ return -1; } log_debug(LD_APP, - "socks4: successfully read destip (%s)", safe_str(tmpbuf)); + "socks4: successfully read destip (%s)", + safe_str_client(tmpbuf)); socks4_prot = socks4; } @@ -1509,20 +1559,9 @@ startaddr = NULL; if (socks4_prot != socks4a && - !addressmap_have_mapping(tmpbuf,0) && - !have_warned_about_unsafe_socks) { - log_warn(LD_APP, - "Your application (using socks4 to port %d) is giving Tor " - "only an IP address. Applications that do DNS resolves " - "themselves may leak information. Consider using Socks4A " - "(e.g. via privoxy or socat) instead. For more information, " - "please see http://wiki.noreply.org/noreply/TheOnionRouter/" - "TorFAQ#SOCKSAndDNS.%s", req->port, - safe_socks ? " Rejecting." : ""); - /*have_warned_about_unsafe_socks = 1;*/ /*(for now, warn every time)*/ - control_event_client_status(LOG_WARN, - "DANGEROUS_SOCKS PROTOCOL=SOCKS4 ADDRESS=%s:%d", - tmpbuf, req->port); + !addressmap_have_mapping(tmpbuf,0)) { + log_unsafe_socks_warning(4, tmpbuf, req->port, safe_socks); + if (safe_socks) return -1; } @@ -1614,6 +1653,132 @@ } } +/** Inspect a reply from SOCKS server stored in buf according + * to state, removing the protocol data upon success. Return 0 on + * incomplete response, 1 on success and -1 on error, in which case + * reason is set to a descriptive message (free() when finished + * with it). + * + * As a special case, 2 is returned when user/pass is required + * during SOCKS5 handshake and user/pass is configured. + */ +int +fetch_from_buf_socks_client(buf_t *buf, int state, char **reason) +{ + unsigned char *data; + size_t addrlen; + + if (buf->datalen < 2) + return 0; + + buf_pullup(buf, MAX_SOCKS_MESSAGE_LEN, 0); + tor_assert(buf->head && buf->head->datalen >= 2); + + data = (unsigned char *) buf->head->data; + + switch (state) { + case PROXY_SOCKS4_WANT_CONNECT_OK: + /* Wait for the complete response */ + if (buf->head->datalen < 8) + return 0; + + if (data[1] != 0x5a) { + *reason = tor_strdup(socks4_response_code_to_string(data[1])); + return -1; + } + + /* Success */ + buf_remove_from_front(buf, 8); + return 1; + + case PROXY_SOCKS5_WANT_AUTH_METHOD_NONE: + /* we don't have any credentials */ + if (data[1] != 0x00) { + *reason = tor_strdup("server doesn't support any of our " + "available authentication methods"); + return -1; + } + + log_info(LD_NET, "SOCKS 5 client: continuing without authentication"); + buf_clear(buf); + return 1; + + case PROXY_SOCKS5_WANT_AUTH_METHOD_RFC1929: + /* we have a username and password. return 1 if we can proceed without + * providing authentication, or 2 otherwise. */ + switch (data[1]) { + case 0x00: + log_info(LD_NET, "SOCKS 5 client: we have auth details but server " + "doesn't require authentication."); + buf_clear(buf); + return 1; + case 0x02: + log_info(LD_NET, "SOCKS 5 client: need authentication."); + buf_clear(buf); + return 2; + /* fall through */ + } + + *reason = tor_strdup("server doesn't support any of our available " + "authentication methods"); + return -1; + + case PROXY_SOCKS5_WANT_AUTH_RFC1929_OK: + /* handle server reply to rfc1929 authentication */ + if (data[1] != 0x00) { + *reason = tor_strdup("authentication failed"); + return -1; + } + + log_info(LD_NET, "SOCKS 5 client: authentication successful."); + buf_clear(buf); + return 1; + + case PROXY_SOCKS5_WANT_CONNECT_OK: + /* response is variable length. BND.ADDR, etc, isn't needed + * (don't bother with buf_pullup()), but make sure to eat all + * the data used */ + + /* wait for address type field to arrive */ + if (buf->datalen < 4) + return 0; + + switch (data[3]) { + case 0x01: /* ip4 */ + addrlen = 4; + break; + case 0x04: /* ip6 */ + addrlen = 16; + break; + case 0x03: /* fqdn (can this happen here?) */ + if (buf->datalen < 5) + return 0; + addrlen = 1 + data[4]; + break; + default: + *reason = tor_strdup("invalid response to connect request"); + return -1; + } + + /* wait for address and port */ + if (buf->datalen < 6 + addrlen) + return 0; + + if (data[1] != 0x00) { + *reason = tor_strdup(socks5_response_code_to_string(data[1])); + return -1; + } + + buf_remove_from_front(buf, 6 + addrlen); + return 1; + } + + /* shouldn't get here... */ + tor_assert(0); + + return -1; +} + /** Return 1 iff buf looks more like it has an (obsolete) v0 controller * command on it than any valid v1 controller command. */ int diff -Nru tor-0.2.1.30/src/or/buffers.h tor-0.2.2.35/src/or/buffers.h --- tor-0.2.1.30/src/or/buffers.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/buffers.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,58 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file buffers.h + * \brief Header file for buffers.c. + **/ + +#ifndef _TOR_BUFFERS_H +#define _TOR_BUFFERS_H + +buf_t *buf_new(void); +buf_t *buf_new_with_capacity(size_t size); +void buf_free(buf_t *buf); +void buf_clear(buf_t *buf); +void buf_shrink(buf_t *buf); +void buf_shrink_freelists(int free_all); +void buf_dump_freelist_sizes(int severity); + +size_t buf_datalen(const buf_t *buf); +size_t buf_allocation(const buf_t *buf); +size_t buf_slack(const buf_t *buf); + +int read_to_buf(tor_socket_t s, size_t at_most, buf_t *buf, int *reached_eof, + int *socket_error); +int read_to_buf_tls(tor_tls_t *tls, size_t at_most, buf_t *buf); + +int flush_buf(tor_socket_t s, buf_t *buf, size_t sz, size_t *buf_flushlen); +int flush_buf_tls(tor_tls_t *tls, buf_t *buf, size_t sz, size_t *buf_flushlen); + +int write_to_buf(const char *string, size_t string_len, buf_t *buf); +int write_to_buf_zlib(buf_t *buf, tor_zlib_state_t *state, + const char *data, size_t data_len, int done); +int move_buf_to_buf(buf_t *buf_out, buf_t *buf_in, size_t *buf_flushlen); +int fetch_from_buf(char *string, size_t string_len, buf_t *buf); +int fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out, int linkproto); +int fetch_from_buf_http(buf_t *buf, + char **headers_out, size_t max_headerlen, + char **body_out, size_t *body_used, size_t max_bodylen, + int force_complete); +int fetch_from_buf_socks(buf_t *buf, socks_request_t *req, + int log_sockstype, int safe_socks); +int fetch_from_buf_socks_client(buf_t *buf, int state, char **reason); +int fetch_from_buf_line(buf_t *buf, char *data_out, size_t *data_len); + +int peek_buf_has_control0_command(buf_t *buf); + +void assert_buf_ok(buf_t *buf); + +#ifdef BUFFERS_PRIVATE +int buf_find_string_offset(const buf_t *buf, const char *s, size_t n); +#endif + +#endif + diff -Nru tor-0.2.1.30/src/or/circuitbuild.c tor-0.2.2.35/src/or/circuitbuild.c --- tor-0.2.1.30/src/or/circuitbuild.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/circuitbuild.c 2011-12-15 16:28:37.000000000 +0000 @@ -9,55 +9,1456 @@ * \brief The actual details of building circuits. **/ +#define CIRCUIT_PRIVATE + #include "or.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "circuituse.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "connection_or.h" +#include "control.h" +#include "directory.h" +#include "main.h" +#include "networkstatus.h" +#include "onion.h" +#include "policies.h" +#include "relay.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" +#include "routerparse.h" +#include "crypto.h" +#undef log +#include + +#ifndef MIN +#define MIN(a,b) ((a)<(b)?(a):(b)) +#endif + +#define CBT_BIN_TO_MS(bin) ((bin)*CBT_BIN_WIDTH + (CBT_BIN_WIDTH/2)) + +/********* START VARIABLES **********/ +/** Global list of circuit build times */ +// XXXX023: Add this as a member for entry_guard_t instead of global? +// Then we could do per-guard statistics, as guards are likely to +// vary in their own latency. The downside of this is that guards +// can change frequently, so we'd be building a lot more circuits +// most likely. +/* XXXX023 Make this static; add accessor functions. */ +circuit_build_times_t circ_times; + +/** A global list of all circuits at this hop. */ +extern circuit_t *global_circuitlist; + +/** An entry_guard_t represents our information about a chosen long-term + * first hop, known as a "helper" node in the literature. We can't just + * use a routerinfo_t, since we want to remember these even when we + * don't have a directory. */ +typedef struct { + char nickname[MAX_NICKNAME_LEN+1]; + char identity[DIGEST_LEN]; + time_t chosen_on_date; /**< Approximately when was this guard added? + * "0" if we don't know. */ + char *chosen_by_version; /**< What tor version added this guard? NULL + * if we don't know. */ + unsigned int made_contact : 1; /**< 0 if we have never connected to this + * router, 1 if we have. */ + unsigned int can_retry : 1; /**< Should we retry connecting to this entry, + * in spite of having it marked as unreachable?*/ + time_t bad_since; /**< 0 if this guard is currently usable, or the time at + * which it was observed to become (according to the + * directory or the user configuration) unusable. */ + time_t unreachable_since; /**< 0 if we can connect to this guard, or the + * time at which we first noticed we couldn't + * connect to it. */ + time_t last_attempted; /**< 0 if we can connect to this guard, or the time + * at which we last failed to connect to it. */ +} entry_guard_t; + +/** A list of our chosen entry guards. */ +static smartlist_t *entry_guards = NULL; +/** A value of 1 means that the entry_guards list has changed + * and those changes need to be flushed to disk. */ +static int entry_guards_dirty = 0; + +/** If set, we're running the unit tests: we should avoid clobbering + * our state file or accessing get_options() or get_or_state() */ +static int unit_tests = 0; + +/********* END VARIABLES ************/ + +static int circuit_deliver_create_cell(circuit_t *circ, + uint8_t cell_type, const char *payload); +static int onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit); +static crypt_path_t *onion_next_hop_in_cpath(crypt_path_t *cpath); +static int onion_extend_cpath(origin_circuit_t *circ); +static int count_acceptable_routers(smartlist_t *routers); +static int onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice); + +static void entry_guards_changed(void); + +/** + * This function decides if CBT learning should be disabled. It returns + * true if one or more of the following four conditions are met: + * + * 1. If the cbtdisabled consensus parameter is set. + * 2. If the torrc option LearnCircuitBuildTimeout is false. + * 3. If we are a directory authority + * 4. If we fail to write circuit build time history to our state file. + */ +static int +circuit_build_times_disabled(void) +{ + if (unit_tests) { + return 0; + } else { + int consensus_disabled = networkstatus_get_param(NULL, "cbtdisabled", + 0, 0, 1); + int config_disabled = !get_options()->LearnCircuitBuildTimeout; + int dirauth_disabled = get_options()->AuthoritativeDir; + int state_disabled = did_last_state_file_write_fail() ? 1 : 0; + + if (consensus_disabled || config_disabled || dirauth_disabled || + state_disabled) { + log_info(LD_CIRC, + "CircuitBuildTime learning is disabled. " + "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d", + consensus_disabled, config_disabled, dirauth_disabled, + state_disabled); + return 1; + } else { + return 0; + } + } +} + +/** + * Retrieve and bounds-check the cbtmaxtimeouts consensus paramter. + * + * Effect: When this many timeouts happen in the last 'cbtrecentcount' + * circuit attempts, the client should discard all of its history and + * begin learning a fresh timeout value. + */ +static int32_t +circuit_build_times_max_timeouts(void) +{ + return networkstatus_get_param(NULL, "cbtmaxtimeouts", + CBT_DEFAULT_MAX_RECENT_TIMEOUT_COUNT, + CBT_MIN_MAX_RECENT_TIMEOUT_COUNT, + CBT_MAX_MAX_RECENT_TIMEOUT_COUNT); +} + +/** + * Retrieve and bounds-check the cbtnummodes consensus paramter. + * + * Effect: This value governs how many modes to use in the weighted + * average calculation of Pareto parameter Xm. A value of 3 introduces + * some bias (2-5% of CDF) under ideal conditions, but allows for better + * performance in the event that a client chooses guard nodes of radically + * different performance characteristics. + */ +static int32_t +circuit_build_times_default_num_xm_modes(void) +{ + int32_t num = networkstatus_get_param(NULL, "cbtnummodes", + CBT_DEFAULT_NUM_XM_MODES, + CBT_MIN_NUM_XM_MODES, + CBT_MAX_NUM_XM_MODES); + return num; +} + +/** + * Retrieve and bounds-check the cbtmincircs consensus paramter. + * + * Effect: This is the minimum number of circuits to build before + * computing a timeout. + */ +static int32_t +circuit_build_times_min_circs_to_observe(void) +{ + int32_t num = networkstatus_get_param(NULL, "cbtmincircs", + CBT_DEFAULT_MIN_CIRCUITS_TO_OBSERVE, + CBT_MIN_MIN_CIRCUITS_TO_OBSERVE, + CBT_MAX_MIN_CIRCUITS_TO_OBSERVE); + return num; +} + +/** Return true iff cbt has recorded enough build times that we + * want to start acting on the timeout it implies. */ +int +circuit_build_times_enough_to_compute(circuit_build_times_t *cbt) +{ + return cbt->total_build_times >= circuit_build_times_min_circs_to_observe(); +} + +/** + * Retrieve and bounds-check the cbtquantile consensus paramter. + * + * Effect: This is the position on the quantile curve to use to set the + * timeout value. It is a percent (10-99). + */ +double +circuit_build_times_quantile_cutoff(void) +{ + int32_t num = networkstatus_get_param(NULL, "cbtquantile", + CBT_DEFAULT_QUANTILE_CUTOFF, + CBT_MIN_QUANTILE_CUTOFF, + CBT_MAX_QUANTILE_CUTOFF); + return num/100.0; +} + +int +circuit_build_times_get_bw_scale(networkstatus_t *ns) +{ + return networkstatus_get_param(ns, "bwweightscale", + BW_WEIGHT_SCALE, + BW_MIN_WEIGHT_SCALE, + BW_MAX_WEIGHT_SCALE); +} + +/** + * Retrieve and bounds-check the cbtclosequantile consensus paramter. + * + * Effect: This is the position on the quantile curve to use to set the + * timeout value to use to actually close circuits. It is a percent + * (0-99). + */ +static double +circuit_build_times_close_quantile(void) +{ + int32_t param; + /* Cast is safe - circuit_build_times_quantile_cutoff() is capped */ + int32_t min = (int)tor_lround(100*circuit_build_times_quantile_cutoff()); + param = networkstatus_get_param(NULL, "cbtclosequantile", + CBT_DEFAULT_CLOSE_QUANTILE, + CBT_MIN_CLOSE_QUANTILE, + CBT_MAX_CLOSE_QUANTILE); + if (param < min) { + log_warn(LD_DIR, "Consensus parameter cbtclosequantile is " + "too small, raising to %d", min); + param = min; + } + return param / 100.0; +} + +/** + * Retrieve and bounds-check the cbttestfreq consensus paramter. + * + * Effect: Describes how often in seconds to build a test circuit to + * gather timeout values. Only applies if less than 'cbtmincircs' + * have been recorded. + */ +static int32_t +circuit_build_times_test_frequency(void) +{ + int32_t num = networkstatus_get_param(NULL, "cbttestfreq", + CBT_DEFAULT_TEST_FREQUENCY, + CBT_MIN_TEST_FREQUENCY, + CBT_MAX_TEST_FREQUENCY); + return num; +} + +/** + * Retrieve and bounds-check the cbtmintimeout consensus parameter. + * + * Effect: This is the minimum allowed timeout value in milliseconds. + * The minimum is to prevent rounding to 0 (we only check once + * per second). + */ +static int32_t +circuit_build_times_min_timeout(void) +{ + int32_t num = networkstatus_get_param(NULL, "cbtmintimeout", + CBT_DEFAULT_TIMEOUT_MIN_VALUE, + CBT_MIN_TIMEOUT_MIN_VALUE, + CBT_MAX_TIMEOUT_MIN_VALUE); + return num; +} + +/** + * Retrieve and bounds-check the cbtinitialtimeout consensus paramter. + * + * Effect: This is the timeout value to use before computing a timeout, + * in milliseconds. + */ +int32_t +circuit_build_times_initial_timeout(void) +{ + int32_t min = circuit_build_times_min_timeout(); + int32_t param = networkstatus_get_param(NULL, "cbtinitialtimeout", + CBT_DEFAULT_TIMEOUT_INITIAL_VALUE, + CBT_MIN_TIMEOUT_INITIAL_VALUE, + CBT_MAX_TIMEOUT_INITIAL_VALUE); + if (param < min) { + log_warn(LD_DIR, "Consensus parameter cbtinitialtimeout is too small, " + "raising to %d", min); + param = min; + } + return param; +} + +/** + * Retrieve and bounds-check the cbtrecentcount consensus paramter. + * + * Effect: This is the number of circuit build times to keep track of + * for deciding if we hit cbtmaxtimeouts and need to reset our state + * and learn a new timeout. + */ +static int32_t +circuit_build_times_recent_circuit_count(networkstatus_t *ns) +{ + return networkstatus_get_param(ns, "cbtrecentcount", + CBT_DEFAULT_RECENT_CIRCUITS, + CBT_MIN_RECENT_CIRCUITS, + CBT_MAX_RECENT_CIRCUITS); +} + +/** + * This function is called when we get a consensus update. + * + * It checks to see if we have changed any consensus parameters + * that require reallocation or discard of previous stats. + */ +void +circuit_build_times_new_consensus_params(circuit_build_times_t *cbt, + networkstatus_t *ns) +{ + int32_t num = circuit_build_times_recent_circuit_count(ns); + + if (num > 0 && num != cbt->liveness.num_recent_circs) { + int8_t *recent_circs; + log_notice(LD_CIRC, "The Tor Directory Consensus has changed how many " + "circuits we must track to detect network failures from %d " + "to %d.", cbt->liveness.num_recent_circs, num); + + tor_assert(cbt->liveness.timeouts_after_firsthop); + + /* + * Technically this is a circular array that we are reallocating + * and memcopying. However, since it only consists of either 1s + * or 0s, and is only used in a statistical test to determine when + * we should discard our history after a sufficient number of 1's + * have been reached, it is fine if order is not preserved or + * elements are lost. + * + * cbtrecentcount should only be changing in cases of severe network + * distress anyway, so memory correctness here is paramount over + * doing acrobatics to preserve the array. + */ + recent_circs = tor_malloc_zero(sizeof(int8_t)*num); + memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop, + sizeof(int8_t)*MIN(num, cbt->liveness.num_recent_circs)); + + // Adjust the index if it needs it. + if (num < cbt->liveness.num_recent_circs) { + cbt->liveness.after_firsthop_idx = MIN(num-1, + cbt->liveness.after_firsthop_idx); + } + + tor_free(cbt->liveness.timeouts_after_firsthop); + cbt->liveness.timeouts_after_firsthop = recent_circs; + cbt->liveness.num_recent_circs = num; + } +} + +/** Make a note that we're running unit tests (rather than running Tor + * itself), so we avoid clobbering our state file. */ +void +circuitbuild_running_unit_tests(void) +{ + unit_tests = 1; +} + +/** + * Return the initial default or configured timeout in milliseconds + */ +static double +circuit_build_times_get_initial_timeout(void) +{ + double timeout; + if (!unit_tests && get_options()->CircuitBuildTimeout) { + timeout = get_options()->CircuitBuildTimeout*1000; + if (timeout < circuit_build_times_min_timeout()) { + log_warn(LD_CIRC, "Config CircuitBuildTimeout too low. Setting to %ds", + circuit_build_times_min_timeout()/1000); + timeout = circuit_build_times_min_timeout(); + } + } else { + timeout = circuit_build_times_initial_timeout(); + } + return timeout; +} + +/** + * Reset the build time state. + * + * Leave estimated parameters, timeout and network liveness intact + * for future use. + */ +void +circuit_build_times_reset(circuit_build_times_t *cbt) +{ + memset(cbt->circuit_build_times, 0, sizeof(cbt->circuit_build_times)); + cbt->total_build_times = 0; + cbt->build_times_idx = 0; + cbt->have_computed_timeout = 0; +} + +/** + * Initialize the buildtimes structure for first use. + * + * Sets the initial timeout values based on either the config setting, + * the consensus param, or the default (CBT_DEFAULT_TIMEOUT_INITIAL_VALUE). + */ +void +circuit_build_times_init(circuit_build_times_t *cbt) +{ + memset(cbt, 0, sizeof(*cbt)); + cbt->liveness.num_recent_circs = + circuit_build_times_recent_circuit_count(NULL); + cbt->liveness.timeouts_after_firsthop = tor_malloc_zero(sizeof(int8_t)* + cbt->liveness.num_recent_circs); + cbt->close_ms = cbt->timeout_ms = circuit_build_times_get_initial_timeout(); + control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET); +} + +#if 0 +/** + * Rewind our build time history by n positions. + */ +static void +circuit_build_times_rewind_history(circuit_build_times_t *cbt, int n) +{ + int i = 0; + + cbt->build_times_idx -= n; + cbt->build_times_idx %= CBT_NCIRCUITS_TO_OBSERVE; + + for (i = 0; i < n; i++) { + cbt->circuit_build_times[(i+cbt->build_times_idx) + %CBT_NCIRCUITS_TO_OBSERVE]=0; + } + + if (cbt->total_build_times > n) { + cbt->total_build_times -= n; + } else { + cbt->total_build_times = 0; + } + + log_info(LD_CIRC, + "Rewound history by %d places. Current index: %d. " + "Total: %d", n, cbt->build_times_idx, cbt->total_build_times); +} +#endif + +/** + * Add a new build time value time to the set of build times. Time + * units are milliseconds. + * + * circuit_build_times cbt is a circular array, so loop around when + * array is full. + */ +int +circuit_build_times_add_time(circuit_build_times_t *cbt, build_time_t time) +{ + if (time <= 0 || time > CBT_BUILD_TIME_MAX) { + log_warn(LD_BUG, "Circuit build time is too large (%u)." + "This is probably a bug.", time); + tor_fragile_assert(); + return -1; + } + + log_debug(LD_CIRC, "Adding circuit build time %u", time); + + cbt->circuit_build_times[cbt->build_times_idx] = time; + cbt->build_times_idx = (cbt->build_times_idx + 1) % CBT_NCIRCUITS_TO_OBSERVE; + if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE) + cbt->total_build_times++; + + if ((cbt->total_build_times % CBT_SAVE_STATE_EVERY) == 0) { + /* Save state every n circuit builds */ + if (!unit_tests && !get_options()->AvoidDiskWrites) + or_state_mark_dirty(get_or_state(), 0); + } + + return 0; +} + +/** + * Return maximum circuit build time + */ +static build_time_t +circuit_build_times_max(circuit_build_times_t *cbt) +{ + int i = 0; + build_time_t max_build_time = 0; + for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (cbt->circuit_build_times[i] > max_build_time + && cbt->circuit_build_times[i] != CBT_BUILD_ABANDONED) + max_build_time = cbt->circuit_build_times[i]; + } + return max_build_time; +} + +#if 0 +/** Return minimum circuit build time */ +build_time_t +circuit_build_times_min(circuit_build_times_t *cbt) +{ + int i = 0; + build_time_t min_build_time = CBT_BUILD_TIME_MAX; + for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (cbt->circuit_build_times[i] && /* 0 <-> uninitialized */ + cbt->circuit_build_times[i] < min_build_time) + min_build_time = cbt->circuit_build_times[i]; + } + if (min_build_time == CBT_BUILD_TIME_MAX) { + log_warn(LD_CIRC, "No build times less than CBT_BUILD_TIME_MAX!"); + } + return min_build_time; +} +#endif + +/** + * Calculate and return a histogram for the set of build times. + * + * Returns an allocated array of histrogram bins representing + * the frequency of index*CBT_BIN_WIDTH millisecond + * build times. Also outputs the number of bins in nbins. + * + * The return value must be freed by the caller. + */ +static uint32_t * +circuit_build_times_create_histogram(circuit_build_times_t *cbt, + build_time_t *nbins) +{ + uint32_t *histogram; + build_time_t max_build_time = circuit_build_times_max(cbt); + int i, c; + + *nbins = 1 + (max_build_time / CBT_BIN_WIDTH); + histogram = tor_malloc_zero(*nbins * sizeof(build_time_t)); + + // calculate histogram + for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (cbt->circuit_build_times[i] == 0 + || cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED) + continue; /* 0 <-> uninitialized */ + + c = (cbt->circuit_build_times[i] / CBT_BIN_WIDTH); + histogram[c]++; + } + + return histogram; +} + +/** + * Return the Pareto start-of-curve parameter Xm. + * + * Because we are not a true Pareto curve, we compute this as the + * weighted average of the N most frequent build time bins. N is either + * 1 if we don't have enough circuit build time data collected, or + * determined by the consensus parameter cbtnummodes (default 3). + */ +static build_time_t +circuit_build_times_get_xm(circuit_build_times_t *cbt) +{ + build_time_t i, nbins; + build_time_t *nth_max_bin; + int32_t bin_counts=0; + build_time_t ret = 0; + uint32_t *histogram = circuit_build_times_create_histogram(cbt, &nbins); + int n=0; + int num_modes = circuit_build_times_default_num_xm_modes(); + + tor_assert(nbins > 0); + tor_assert(num_modes > 0); + + // Only use one mode if < 1000 buildtimes. Not enough data + // for multiple. + if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE) + num_modes = 1; + + nth_max_bin = (build_time_t*)tor_malloc_zero(num_modes*sizeof(build_time_t)); + + /* Determine the N most common build times */ + for (i = 0; i < nbins; i++) { + if (histogram[i] >= histogram[nth_max_bin[0]]) { + nth_max_bin[0] = i; + } + + for (n = 1; n < num_modes; n++) { + if (histogram[i] >= histogram[nth_max_bin[n]] && + (!histogram[nth_max_bin[n-1]] + || histogram[i] < histogram[nth_max_bin[n-1]])) { + nth_max_bin[n] = i; + } + } + } + + for (n = 0; n < num_modes; n++) { + bin_counts += histogram[nth_max_bin[n]]; + ret += CBT_BIN_TO_MS(nth_max_bin[n])*histogram[nth_max_bin[n]]; + log_info(LD_CIRC, "Xm mode #%d: %u %u", n, CBT_BIN_TO_MS(nth_max_bin[n]), + histogram[nth_max_bin[n]]); + } + + /* The following assert is safe, because we don't get called when we + * haven't observed at least CBT_MIN_MIN_CIRCUITS_TO_OBSERVE circuits. */ + tor_assert(bin_counts > 0); + + ret /= bin_counts; + tor_free(histogram); + tor_free(nth_max_bin); + + return ret; +} + +/** + * Output a histogram of current circuit build times to + * the or_state_t state structure. + */ +void +circuit_build_times_update_state(circuit_build_times_t *cbt, + or_state_t *state) +{ + uint32_t *histogram; + build_time_t i = 0; + build_time_t nbins = 0; + config_line_t **next, *line; + + histogram = circuit_build_times_create_histogram(cbt, &nbins); + // write to state + config_free_lines(state->BuildtimeHistogram); + next = &state->BuildtimeHistogram; + *next = NULL; + + state->TotalBuildTimes = cbt->total_build_times; + state->CircuitBuildAbandonedCount = 0; + + for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED) + state->CircuitBuildAbandonedCount++; + } + + for (i = 0; i < nbins; i++) { + // compress the histogram by skipping the blanks + if (histogram[i] == 0) continue; + *next = line = tor_malloc_zero(sizeof(config_line_t)); + line->key = tor_strdup("CircuitBuildTimeBin"); + line->value = tor_malloc(25); + tor_snprintf(line->value, 25, "%d %d", + CBT_BIN_TO_MS(i), histogram[i]); + next = &(line->next); + } + + if (!unit_tests) { + if (!get_options()->AvoidDiskWrites) + or_state_mark_dirty(get_or_state(), 0); + } + + tor_free(histogram); +} + +/** + * Shuffle the build times array. + * + * Adapted from http://en.wikipedia.org/wiki/Fisher-Yates_shuffle + */ +static void +circuit_build_times_shuffle_and_store_array(circuit_build_times_t *cbt, + build_time_t *raw_times, + uint32_t num_times) +{ + uint32_t n = num_times; + if (num_times > CBT_NCIRCUITS_TO_OBSERVE) { + log_notice(LD_CIRC, "The number of circuit times that this Tor version " + "uses to calculate build times is less than the number stored " + "in your state file. Decreasing the circuit time history from " + "%lu to %d.", (unsigned long)num_times, + CBT_NCIRCUITS_TO_OBSERVE); + } + + if (n > INT_MAX-1) { + log_warn(LD_CIRC, "For some insane reasons, you had %lu circuit build " + "observations in your state file. That's far too many; probably " + "there's a bug here.", (unsigned long)n); + n = INT_MAX-1; + } + + /* This code can only be run on a compact array */ + while (n-- > 1) { + int k = crypto_rand_int(n + 1); /* 0 <= k <= n. */ + build_time_t tmp = raw_times[k]; + raw_times[k] = raw_times[n]; + raw_times[n] = tmp; + } + + /* Since the times are now shuffled, take a random CBT_NCIRCUITS_TO_OBSERVE + * subset (ie the first CBT_NCIRCUITS_TO_OBSERVE values) */ + for (n = 0; n < MIN(num_times, CBT_NCIRCUITS_TO_OBSERVE); n++) { + circuit_build_times_add_time(cbt, raw_times[n]); + } +} + +/** + * Filter old synthetic timeouts that were created before the + * new right-censored Pareto calculation was deployed. + * + * Once all clients before 0.2.1.13-alpha are gone, this code + * will be unused. + */ +static int +circuit_build_times_filter_timeouts(circuit_build_times_t *cbt) +{ + int num_filtered=0, i=0; + double timeout_rate = 0; + build_time_t max_timeout = 0; + + timeout_rate = circuit_build_times_timeout_rate(cbt); + max_timeout = (build_time_t)cbt->close_ms; + + for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (cbt->circuit_build_times[i] > max_timeout) { + build_time_t replaced = cbt->circuit_build_times[i]; + num_filtered++; + cbt->circuit_build_times[i] = CBT_BUILD_ABANDONED; + + log_debug(LD_CIRC, "Replaced timeout %d with %d", replaced, + cbt->circuit_build_times[i]); + } + } + + log_info(LD_CIRC, + "We had %d timeouts out of %d build times, " + "and filtered %d above the max of %u", + (int)(cbt->total_build_times*timeout_rate), + cbt->total_build_times, num_filtered, max_timeout); + + return num_filtered; +} + +/** + * Load histogram from state, shuffling the resulting array + * after we do so. Use this result to estimate parameters and + * calculate the timeout. + * + * Return -1 on error. + */ +int +circuit_build_times_parse_state(circuit_build_times_t *cbt, + or_state_t *state) +{ + int tot_values = 0; + uint32_t loaded_cnt = 0, N = 0; + config_line_t *line; + unsigned int i; + build_time_t *loaded_times; + int err = 0; + circuit_build_times_init(cbt); + + if (circuit_build_times_disabled()) { + return 0; + } + + /* build_time_t 0 means uninitialized */ + loaded_times = tor_malloc_zero(sizeof(build_time_t)*state->TotalBuildTimes); + + for (line = state->BuildtimeHistogram; line; line = line->next) { + smartlist_t *args = smartlist_create(); + smartlist_split_string(args, line->value, " ", + SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); + if (smartlist_len(args) < 2) { + log_warn(LD_GENERAL, "Unable to parse circuit build times: " + "Too few arguments to CircuitBuildTime"); + err = 1; + SMARTLIST_FOREACH(args, char*, cp, tor_free(cp)); + smartlist_free(args); + break; + } else { + const char *ms_str = smartlist_get(args,0); + const char *count_str = smartlist_get(args,1); + uint32_t count, k; + build_time_t ms; + int ok; + ms = (build_time_t)tor_parse_ulong(ms_str, 0, 0, + CBT_BUILD_TIME_MAX, &ok, NULL); + if (!ok) { + log_warn(LD_GENERAL, "Unable to parse circuit build times: " + "Unparsable bin number"); + err = 1; + SMARTLIST_FOREACH(args, char*, cp, tor_free(cp)); + smartlist_free(args); + break; + } + count = (uint32_t)tor_parse_ulong(count_str, 0, 0, + UINT32_MAX, &ok, NULL); + if (!ok) { + log_warn(LD_GENERAL, "Unable to parse circuit build times: " + "Unparsable bin count"); + err = 1; + SMARTLIST_FOREACH(args, char*, cp, tor_free(cp)); + smartlist_free(args); + break; + } + + if (loaded_cnt+count+state->CircuitBuildAbandonedCount + > state->TotalBuildTimes) { + log_warn(LD_CIRC, + "Too many build times in state file. " + "Stopping short before %d", + loaded_cnt+count); + SMARTLIST_FOREACH(args, char*, cp, tor_free(cp)); + smartlist_free(args); + break; + } + + for (k = 0; k < count; k++) { + loaded_times[loaded_cnt++] = ms; + } + N++; + SMARTLIST_FOREACH(args, char*, cp, tor_free(cp)); + smartlist_free(args); + } + } + + log_info(LD_CIRC, + "Adding %d timeouts.", state->CircuitBuildAbandonedCount); + for (i=0; i < state->CircuitBuildAbandonedCount; i++) { + loaded_times[loaded_cnt++] = CBT_BUILD_ABANDONED; + } + + if (loaded_cnt != state->TotalBuildTimes) { + log_warn(LD_CIRC, + "Corrupt state file? Build times count mismatch. " + "Read %d times, but file says %d", loaded_cnt, + state->TotalBuildTimes); + err = 1; + circuit_build_times_reset(cbt); + goto done; + } + + circuit_build_times_shuffle_and_store_array(cbt, loaded_times, loaded_cnt); + + /* Verify that we didn't overwrite any indexes */ + for (i=0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (!cbt->circuit_build_times[i]) + break; + tot_values++; + } + log_info(LD_CIRC, + "Loaded %d/%d values from %d lines in circuit time histogram", + tot_values, cbt->total_build_times, N); + + if (cbt->total_build_times != tot_values + || cbt->total_build_times > CBT_NCIRCUITS_TO_OBSERVE) { + log_warn(LD_CIRC, + "Corrupt state file? Shuffled build times mismatch. " + "Read %d times, but file says %d", tot_values, + state->TotalBuildTimes); + err = 1; + circuit_build_times_reset(cbt); + goto done; + } + + circuit_build_times_set_timeout(cbt); + + if (!state->CircuitBuildAbandonedCount && cbt->total_build_times) { + circuit_build_times_filter_timeouts(cbt); + } + + done: + tor_free(loaded_times); + return err ? -1 : 0; +} + +/** + * Estimates the Xm and Alpha parameters using + * http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation + * + * The notable difference is that we use mode instead of min to estimate Xm. + * This is because our distribution is frechet-like. We claim this is + * an acceptable approximation because we are only concerned with the + * accuracy of the CDF of the tail. + */ +int +circuit_build_times_update_alpha(circuit_build_times_t *cbt) +{ + build_time_t *x=cbt->circuit_build_times; + double a = 0; + int n=0,i=0,abandoned_count=0; + build_time_t max_time=0; + + /* http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation */ + /* We sort of cheat here and make our samples slightly more pareto-like + * and less frechet-like. */ + cbt->Xm = circuit_build_times_get_xm(cbt); + + tor_assert(cbt->Xm > 0); + + for (i=0; i< CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (!x[i]) { + continue; + } + + if (x[i] < cbt->Xm) { + a += tor_mathlog(cbt->Xm); + } else if (x[i] == CBT_BUILD_ABANDONED) { + abandoned_count++; + } else { + a += tor_mathlog(x[i]); + if (x[i] > max_time) + max_time = x[i]; + } + n++; + } + + /* + * We are erring and asserting here because this can only happen + * in codepaths other than startup. The startup state parsing code + * performs this same check, and resets state if it hits it. If we + * hit it at runtime, something serious has gone wrong. + */ + if (n!=cbt->total_build_times) { + log_err(LD_CIRC, "Discrepancy in build times count: %d vs %d", n, + cbt->total_build_times); + } + tor_assert(n==cbt->total_build_times); + + if (max_time <= 0) { + /* This can happen if Xm is actually the *maximum* value in the set. + * It can also happen if we've abandoned every single circuit somehow. + * In either case, tell the caller not to compute a new build timeout. */ + log_warn(LD_BUG, + "Could not determine largest build time (%d). " + "Xm is %dms and we've abandoned %d out of %d circuits.", max_time, + cbt->Xm, abandoned_count, n); + return 0; + } + + a += abandoned_count*tor_mathlog(max_time); + + a -= n*tor_mathlog(cbt->Xm); + // Estimator comes from Eq #4 in: + // "Bayesian estimation based on trimmed samples from Pareto populations" + // by Arturo J. Fernández. We are right-censored only. + a = (n-abandoned_count)/a; + + cbt->alpha = a; + + return 1; +} + +/** + * This is the Pareto Quantile Function. It calculates the point x + * in the distribution such that F(x) = quantile (ie quantile*100% + * of the mass of the density function is below x on the curve). + * + * We use it to calculate the timeout and also to generate synthetic + * values of time for circuits that timeout before completion. + * + * See http://en.wikipedia.org/wiki/Quantile_function, + * http://en.wikipedia.org/wiki/Inverse_transform_sampling and + * http://en.wikipedia.org/wiki/Pareto_distribution#Generating_a_ + * random_sample_from_Pareto_distribution + * That's right. I'll cite wikipedia all day long. + * + * Return value is in milliseconds. + */ +double +circuit_build_times_calculate_timeout(circuit_build_times_t *cbt, + double quantile) +{ + double ret; + tor_assert(quantile >= 0); + tor_assert(1.0-quantile > 0); + tor_assert(cbt->Xm > 0); + + ret = cbt->Xm/pow(1.0-quantile,1.0/cbt->alpha); + if (ret > INT32_MAX) { + ret = INT32_MAX; + } + tor_assert(ret > 0); + return ret; +} + +/** Pareto CDF */ +double +circuit_build_times_cdf(circuit_build_times_t *cbt, double x) +{ + double ret; + tor_assert(cbt->Xm > 0); + ret = 1.0-pow(cbt->Xm/x,cbt->alpha); + tor_assert(0 <= ret && ret <= 1.0); + return ret; +} + +/** + * Generate a synthetic time using our distribution parameters. + * + * The return value will be within the [q_lo, q_hi) quantile points + * on the CDF. + */ +build_time_t +circuit_build_times_generate_sample(circuit_build_times_t *cbt, + double q_lo, double q_hi) +{ + double randval = crypto_rand_double(); + build_time_t ret; + double u; + + /* Generate between [q_lo, q_hi) */ + /*XXXX This is what nextafter is supposed to be for; we should use it on the + * platforms that support it. */ + q_hi -= 1.0/(INT32_MAX); + + tor_assert(q_lo >= 0); + tor_assert(q_hi < 1); + tor_assert(q_lo < q_hi); + + u = q_lo + (q_hi-q_lo)*randval; + + tor_assert(0 <= u && u < 1.0); + /* circuit_build_times_calculate_timeout returns <= INT32_MAX */ + ret = (build_time_t) + tor_lround(circuit_build_times_calculate_timeout(cbt, u)); + tor_assert(ret > 0); + return ret; +} + +/** + * Estimate an initial alpha parameter by solving the quantile + * function with a quantile point and a specific timeout value. + */ +void +circuit_build_times_initial_alpha(circuit_build_times_t *cbt, + double quantile, double timeout_ms) +{ + // Q(u) = Xm/((1-u)^(1/a)) + // Q(0.8) = Xm/((1-0.8))^(1/a)) = CircBuildTimeout + // CircBuildTimeout = Xm/((1-0.8))^(1/a)) + // CircBuildTimeout = Xm*((1-0.8))^(-1/a)) + // ln(CircBuildTimeout) = ln(Xm)+ln(((1-0.8)))*(-1/a) + // -ln(1-0.8)/(ln(CircBuildTimeout)-ln(Xm))=a + tor_assert(quantile >= 0); + tor_assert(cbt->Xm > 0); + cbt->alpha = tor_mathlog(1.0-quantile)/ + (tor_mathlog(cbt->Xm)-tor_mathlog(timeout_ms)); + tor_assert(cbt->alpha > 0); +} + +/** + * Returns true if we need circuits to be built + */ +int +circuit_build_times_needs_circuits(circuit_build_times_t *cbt) +{ + /* Return true if < MIN_CIRCUITS_TO_OBSERVE */ + return !circuit_build_times_enough_to_compute(cbt); +} + +/** + * Returns true if we should build a timeout test circuit + * right now. + */ +int +circuit_build_times_needs_circuits_now(circuit_build_times_t *cbt) +{ + return circuit_build_times_needs_circuits(cbt) && + approx_time()-cbt->last_circ_at > circuit_build_times_test_frequency(); +} + +/** + * Called to indicate that the network showed some signs of liveness, + * i.e. we received a cell. + * + * This is used by circuit_build_times_network_check_live() to decide + * if we should record the circuit build timeout or not. + * + * This function is called every time we receive a cell. Avoid + * syscalls, events, and other high-intensity work. + */ +void +circuit_build_times_network_is_live(circuit_build_times_t *cbt) +{ + time_t now = approx_time(); + if (cbt->liveness.nonlive_timeouts > 0) { + log_notice(LD_CIRC, + "Tor now sees network activity. Restoring circuit build " + "timeout recording. Network was down for %d seconds " + "during %d circuit attempts.", + (int)(now - cbt->liveness.network_last_live), + cbt->liveness.nonlive_timeouts); + } + cbt->liveness.network_last_live = now; + cbt->liveness.nonlive_timeouts = 0; +} + +/** + * Called to indicate that we completed a circuit. Because this circuit + * succeeded, it doesn't count as a timeout-after-the-first-hop. + * + * This is used by circuit_build_times_network_check_changed() to determine + * if we had too many recent timeouts and need to reset our learned timeout + * to something higher. + */ +void +circuit_build_times_network_circ_success(circuit_build_times_t *cbt) +{ + cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx] = 0; + cbt->liveness.after_firsthop_idx++; + cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs; +} + +/** + * A circuit just timed out. If it failed after the first hop, record it + * in our history for later deciding if the network speed has changed. + * + * This is used by circuit_build_times_network_check_changed() to determine + * if we had too many recent timeouts and need to reset our learned timeout + * to something higher. + */ +static void +circuit_build_times_network_timeout(circuit_build_times_t *cbt, + int did_onehop) +{ + if (did_onehop) { + cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]=1; + cbt->liveness.after_firsthop_idx++; + cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs; + } +} + +/** + * A circuit was just forcibly closed. If there has been no recent network + * activity at all, but this circuit was launched back when we thought the + * network was live, increment the number of "nonlive" circuit timeouts. + * + * This is used by circuit_build_times_network_check_live() to decide + * if we should record the circuit build timeout or not. + */ +static void +circuit_build_times_network_close(circuit_build_times_t *cbt, + int did_onehop, time_t start_time) +{ + time_t now = time(NULL); + /* + * Check if this is a timeout that was for a circuit that spent its + * entire existence during a time where we have had no network activity. + */ + if (cbt->liveness.network_last_live < start_time) { + if (did_onehop) { + char last_live_buf[ISO_TIME_LEN+1]; + char start_time_buf[ISO_TIME_LEN+1]; + char now_buf[ISO_TIME_LEN+1]; + format_local_iso_time(last_live_buf, cbt->liveness.network_last_live); + format_local_iso_time(start_time_buf, start_time); + format_local_iso_time(now_buf, now); + log_warn(LD_BUG, + "Circuit somehow completed a hop while the network was " + "not live. Network was last live at %s, but circuit launched " + "at %s. It's now %s.", last_live_buf, start_time_buf, + now_buf); + } + cbt->liveness.nonlive_timeouts++; + if (cbt->liveness.nonlive_timeouts == 1) { + log_notice(LD_CIRC, + "Tor has not observed any network activity for the past %d " + "seconds. Disabling circuit build timeout recording.", + (int)(now - cbt->liveness.network_last_live)); + } else { + log_info(LD_CIRC, + "Got non-live timeout. Current count is: %d", + cbt->liveness.nonlive_timeouts); + } + } +} + +/** + * When the network is not live, we do not record circuit build times. + * + * The network is considered not live if there has been at least one + * circuit build that began and ended (had its close_ms measurement + * period expire) since we last received a cell. + * + * Also has the side effect of rewinding the circuit time history + * in the case of recent liveness changes. + */ +int +circuit_build_times_network_check_live(circuit_build_times_t *cbt) +{ + if (cbt->liveness.nonlive_timeouts > 0) { + return 0; + } + + return 1; +} + +/** + * Returns true if we have seen more than MAX_RECENT_TIMEOUT_COUNT of + * the past RECENT_CIRCUITS time out after the first hop. Used to detect + * if the network connection has changed significantly, and if so, + * resets our circuit build timeout to the default. + * + * Also resets the entire timeout history in this case and causes us + * to restart the process of building test circuits and estimating a + * new timeout. + */ +int +circuit_build_times_network_check_changed(circuit_build_times_t *cbt) +{ + int total_build_times = cbt->total_build_times; + int timeout_count=0; + int i; + + /* how many of our recent circuits made it to the first hop but then + * timed out? */ + for (i = 0; i < cbt->liveness.num_recent_circs; i++) { + timeout_count += cbt->liveness.timeouts_after_firsthop[i]; + } + + /* If 80% of our recent circuits are timing out after the first hop, + * we need to re-estimate a new initial alpha and timeout. */ + if (timeout_count < circuit_build_times_max_timeouts()) { + return 0; + } + + circuit_build_times_reset(cbt); + memset(cbt->liveness.timeouts_after_firsthop, 0, + sizeof(*cbt->liveness.timeouts_after_firsthop)* + cbt->liveness.num_recent_circs); + cbt->liveness.after_firsthop_idx = 0; + + /* 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 */ + if (cbt->timeout_ms >= circuit_build_times_get_initial_timeout()) { + if (cbt->timeout_ms > INT32_MAX/2 || cbt->close_ms > INT32_MAX/2) { + log_warn(LD_CIRC, "Insanely large circuit build timeout value. " + "(timeout = %fmsec, close = %fmsec)", + cbt->timeout_ms, cbt->close_ms); + } else { + cbt->timeout_ms *= 2; + cbt->close_ms *= 2; + } + } else { + cbt->close_ms = cbt->timeout_ms + = circuit_build_times_get_initial_timeout(); + } + + control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET); + + log_notice(LD_CIRC, + "Your network connection speed appears to have changed. Resetting " + "timeout to %lds after %d timeouts and %d buildtimes.", + tor_lround(cbt->timeout_ms/1000), timeout_count, + total_build_times); + + return 1; +} + +/** + * Count the number of timeouts in a set of cbt data. + */ +double +circuit_build_times_timeout_rate(const circuit_build_times_t *cbt) +{ + int i=0,timeouts=0; + for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (cbt->circuit_build_times[i] >= cbt->timeout_ms) { + timeouts++; + } + } + + if (!cbt->total_build_times) + return 0; + + return ((double)timeouts)/cbt->total_build_times; +} -/********* START VARIABLES **********/ +/** + * Count the number of closed circuits in a set of cbt data. + */ +double +circuit_build_times_close_rate(const circuit_build_times_t *cbt) +{ + int i=0,closed=0; + for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) { + if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED) { + closed++; + } + } -/** A global list of all circuits at this hop. */ -extern circuit_t *global_circuitlist; + if (!cbt->total_build_times) + return 0; -/** An entry_guard_t represents our information about a chosen long-term - * first hop, known as a "helper" node in the literature. We can't just - * use a routerinfo_t, since we want to remember these even when we - * don't have a directory. */ -typedef struct { - char nickname[MAX_NICKNAME_LEN+1]; - char identity[DIGEST_LEN]; - time_t chosen_on_date; /**< Approximately when was this guard added? - * "0" if we don't know. */ - char *chosen_by_version; /**< What tor version added this guard? NULL - * if we don't know. */ - unsigned int made_contact : 1; /**< 0 if we have never connected to this - * router, 1 if we have. */ - unsigned int can_retry : 1; /**< Should we retry connecting to this entry, - * in spite of having it marked as unreachable?*/ - time_t bad_since; /**< 0 if this guard is currently usable, or the time at - * which it was observed to become (according to the - * directory or the user configuration) unusable. */ - time_t unreachable_since; /**< 0 if we can connect to this guard, or the - * time at which we first noticed we couldn't - * connect to it. */ - time_t last_attempted; /**< 0 if we can connect to this guard, or the time - * at which we last failed to connect to it. */ -} entry_guard_t; + return ((double)closed)/cbt->total_build_times; +} -/** A list of our chosen entry guards. */ -static smartlist_t *entry_guards = NULL; -/** A value of 1 means that the entry_guards list has changed - * and those changes need to be flushed to disk. */ -static int entry_guards_dirty = 0; +/** + * Store a timeout as a synthetic value. + * + * Returns true if the store was successful and we should possibly + * update our timeout estimate. + */ +int +circuit_build_times_count_close(circuit_build_times_t *cbt, + int did_onehop, + time_t start_time) +{ + if (circuit_build_times_disabled()) { + cbt->close_ms = cbt->timeout_ms + = circuit_build_times_get_initial_timeout(); + return 0; + } -/********* END VARIABLES ************/ + /* Record this force-close to help determine if the network is dead */ + circuit_build_times_network_close(cbt, did_onehop, start_time); -static int circuit_deliver_create_cell(circuit_t *circ, - uint8_t cell_type, const char *payload); -static int onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit); -static crypt_path_t *onion_next_hop_in_cpath(crypt_path_t *cpath); -static int onion_extend_cpath(origin_circuit_t *circ); -static int count_acceptable_routers(smartlist_t *routers); -static int onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice); + /* Only count timeouts if network is live.. */ + if (!circuit_build_times_network_check_live(cbt)) { + return 0; + } -static void entry_guards_changed(void); + circuit_build_times_add_time(cbt, CBT_BUILD_ABANDONED); + return 1; +} + +/** + * Update timeout counts to determine if we need to expire + * our build time history due to excessive timeouts. + * + * We do not record any actual time values at this stage; + * we are only interested in recording the fact that a timeout + * happened. We record the time values via + * circuit_build_times_count_close() and circuit_build_times_add_time(). + */ +void +circuit_build_times_count_timeout(circuit_build_times_t *cbt, + int did_onehop) +{ + if (circuit_build_times_disabled()) { + cbt->close_ms = cbt->timeout_ms + = circuit_build_times_get_initial_timeout(); + return; + } + + /* Register the fact that a timeout just occurred. */ + circuit_build_times_network_timeout(cbt, did_onehop); + + /* If there are a ton of timeouts, we should reset + * the circuit build timeout. */ + circuit_build_times_network_check_changed(cbt); +} + +/** + * Estimate a new timeout based on history and set our timeout + * variable accordingly. + */ +static int +circuit_build_times_set_timeout_worker(circuit_build_times_t *cbt) +{ + build_time_t max_time; + if (!circuit_build_times_enough_to_compute(cbt)) + return 0; + + if (!circuit_build_times_update_alpha(cbt)) + return 0; + + cbt->timeout_ms = circuit_build_times_calculate_timeout(cbt, + circuit_build_times_quantile_cutoff()); + + cbt->close_ms = circuit_build_times_calculate_timeout(cbt, + circuit_build_times_close_quantile()); + + max_time = circuit_build_times_max(cbt); + + /* Sometimes really fast guard nodes give us such a steep curve + * that this ends up being not that much greater than timeout_ms. + * Make it be at least 1 min to handle this case. */ + cbt->close_ms = MAX(cbt->close_ms, circuit_build_times_initial_timeout()); + + if (cbt->timeout_ms > max_time) { + log_info(LD_CIRC, + "Circuit build timeout of %dms is beyond the maximum build " + "time we have ever observed. Capping it to %dms.", + (int)cbt->timeout_ms, max_time); + cbt->timeout_ms = max_time; + } + + if (max_time < INT32_MAX/2 && cbt->close_ms > 2*max_time) { + log_info(LD_CIRC, + "Circuit build measurement period of %dms is more than twice " + "the maximum build time we have ever observed. Capping it to " + "%dms.", (int)cbt->close_ms, 2*max_time); + cbt->close_ms = 2*max_time; + } + + cbt->have_computed_timeout = 1; + return 1; +} + +/** + * Exposed function to compute a new timeout. Dispatches events and + * also filters out extremely high timeout values. + */ +void +circuit_build_times_set_timeout(circuit_build_times_t *cbt) +{ + long prev_timeout = tor_lround(cbt->timeout_ms/1000); + double timeout_rate; + + if (!circuit_build_times_set_timeout_worker(cbt)) + return; + + if (cbt->timeout_ms < circuit_build_times_min_timeout()) { + log_warn(LD_CIRC, "Set buildtimeout to low value %fms. Setting to %dms", + cbt->timeout_ms, circuit_build_times_min_timeout()); + cbt->timeout_ms = circuit_build_times_min_timeout(); + if (cbt->close_ms < cbt->timeout_ms) { + /* This shouldn't happen because of MAX() in timeout_worker above, + * but doing it just in case */ + cbt->close_ms = circuit_build_times_initial_timeout(); + } + } + + control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_COMPUTED); + + timeout_rate = circuit_build_times_timeout_rate(cbt); + + if (prev_timeout > tor_lround(cbt->timeout_ms/1000)) { + log_info(LD_CIRC, + "Based on %d circuit times, it looks like we don't need to " + "wait so long for circuits to finish. We will now assume a " + "circuit is too slow to use after waiting %ld seconds.", + cbt->total_build_times, + tor_lround(cbt->timeout_ms/1000)); + log_info(LD_CIRC, + "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f", + cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha, + timeout_rate); + } else if (prev_timeout < tor_lround(cbt->timeout_ms/1000)) { + log_info(LD_CIRC, + "Based on %d circuit times, it looks like we need to wait " + "longer for circuits to finish. We will now assume a " + "circuit is too slow to use after waiting %ld seconds.", + cbt->total_build_times, + tor_lround(cbt->timeout_ms/1000)); + log_info(LD_CIRC, + "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f", + cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha, + timeout_rate); + } else { + log_info(LD_CIRC, + "Set circuit build timeout to %lds (%fms, %fms, Xm: %d, a: %f," + " r: %f) based on %d circuit times", + tor_lround(cbt->timeout_ms/1000), + cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha, timeout_rate, + cbt->total_build_times); + } +} /** Iterate over values of circ_id, starting from conn-\>next_circ_id, * and with the high bit specified by conn-\>circ_id_type, until we get @@ -100,7 +1501,7 @@ } /** If verbose is false, allocate and return a comma-separated list of - * the currently built elements of circuit_t. If verbose is true, also + * the currently built elements of circ. If verbose is true, also * list information about link status in a more verbose format using spaces. * If verbose_names is false, give nicknames for Named routers and hex * digests for others; if verbose_names is true, use $DIGEST=Name style @@ -112,21 +1513,21 @@ crypt_path_t *hop; smartlist_t *elements; const char *states[] = {"closed", "waiting for keys", "open"}; - char buf[128]; char *s; elements = smartlist_create(); if (verbose) { const char *nickname = build_state_get_exit_nickname(circ->build_state); - tor_snprintf(buf, sizeof(buf), "%s%s circ (length %d%s%s):", + char *cp; + tor_asprintf(&cp, "%s%s circ (length %d%s%s):", circ->build_state->is_internal ? "internal" : "exit", circ->build_state->need_uptime ? " (high-uptime)" : "", circ->build_state->desired_path_len, - circ->_base.state == CIRCUIT_STATE_OPEN ? "" : ", exit ", + circ->_base.state == CIRCUIT_STATE_OPEN ? "" : ", last hop ", circ->_base.state == CIRCUIT_STATE_OPEN ? "" : (nickname?nickname:"*unnamed*")); - smartlist_add(elements, tor_strdup(buf)); + smartlist_add(elements, cp); } hop = circ->cpath; @@ -148,8 +1549,7 @@ router_get_verbose_nickname(elt, ri); } else if ((rs = router_get_consensus_status_by_id(id))) { routerstatus_get_verbose_nickname(elt, rs); - } else if (hop->extend_info->nickname && - is_legal_nickname(hop->extend_info->nickname)) { + } else if (is_legal_nickname(hop->extend_info->nickname)) { elt[0] = '$'; base16_encode(elt+1, HEX_DIGEST_LEN+1, id, DIGEST_LEN); elt[HEX_DIGEST_LEN+1]= '~'; @@ -190,7 +1590,7 @@ } /** If verbose is false, allocate and return a comma-separated - * list of the currently built elements of circuit_t. If + * list of the currently built elements of circ. If * verbose is true, also list information about link status in * a more verbose format using spaces. */ @@ -201,7 +1601,7 @@ } /** Allocate and return a comma-separated list of the currently built elements - * of circuit_t, giving each as a verbose nickname. + * of circ, giving each as a verbose nickname. */ char * circuit_list_path_for_controller(origin_circuit_t *circ) @@ -210,19 +1610,19 @@ } /** Log, at severity severity, the nicknames of each router in - * circ's cpath. Also log the length of the cpath, and the intended + * circ's cpath. Also log the length of the cpath, and the intended * exit point. */ void circuit_log_path(int severity, unsigned int domain, origin_circuit_t *circ) { char *s = circuit_list_path(circ,1); - log(severity,domain,"%s",s); + tor_log(severity,domain,"%s",s); tor_free(s); } /** Tell the rep(utation)hist(ory) module about the status of the links - * in circ. Hops that have become OPEN are marked as successfully + * in circ. Hops that have become OPEN are marked as successfully * extended; the _first_ hop that isn't open (if any) is marked as * unable to extend. */ @@ -269,7 +1669,7 @@ onion_populate_cpath(origin_circuit_t *circ) { int r; -again: + again: r = onion_extend_cpath(circ); if (r < 0) { log_info(LD_CIRC,"Generating cpath hop failed."); @@ -361,9 +1761,9 @@ if (!n_conn) { /* not currently connected in a useful way. */ - const char *name = firsthop->extend_info->nickname ? - firsthop->extend_info->nickname : fmt_addr(&firsthop->extend_info->addr); - log_info(LD_CIRC, "Next router is %s: %s ", safe_str(name), msg?msg:"???"); + log_info(LD_CIRC, "Next router is %s: %s", + safe_str_client(extend_info_describe(firsthop->extend_info)), + msg?msg:"???"); circ->_base.n_hop = extend_info_dup(firsthop->extend_info); if (should_launch) { @@ -430,7 +1830,7 @@ continue; } else { /* We expected a key. See if it's the right one. */ - if (memcmp(or_conn->identity_digest, + if (tor_memneq(or_conn->identity_digest, circ->n_hop->identity_digest, DIGEST_LEN)) continue; } @@ -506,7 +1906,8 @@ cell.circ_id = circ->n_circ_id; memcpy(cell.payload, payload, ONIONSKIN_CHALLENGE_LEN); - append_cell_to_circuit_queue(circ, circ->n_conn, &cell, CELL_DIRECTION_OUT); + append_cell_to_circuit_queue(circ, circ->n_conn, &cell, + CELL_DIRECTION_OUT, 0); if (CIRCUIT_IS_ORIGIN(circ)) { /* mark it so it gets better rate limiting treatment. */ @@ -536,7 +1937,7 @@ "CHECKING_REACHABILITY DIRADDRESS=%s:%d", me->address, me->dir_port); } - log(LOG_NOTICE, LD_OR, "Now checking whether ORPort %s:%d%s %s reachable... " + log_notice(LD_OR, "Now checking whether ORPort %s:%d%s %s reachable... " "(this may take up to %d minutes -- look for log " "messages indicating success)", me->address, me->or_port, @@ -560,15 +1961,28 @@ return 1; /* our hand is forced: only a create_fast will work. */ if (!options->FastFirstHopPK) return 0; /* we prefer to avoid create_fast */ - if (server_mode(options)) { + if (public_server_mode(options)) { /* We're a server, and we know an onion key. We can choose. - * Prefer to blend in. */ + * Prefer to blend our circuit into the other circuits we are + * creating on behalf of others. */ return 0; } return 1; } +/** Return true if circ is the type of circuit we want to count + * timeouts from. In particular, we want it to have not completed yet + * (already completing indicates we cannibalized it), and we want it to + * have exactly three hops. + */ +int +circuit_timeout_want_to_count_circ(origin_circuit_t *circ) +{ + return !circ->has_opened + && circ->build_state->desired_path_len == DEFAULT_ROUTE_LEN; +} + /** This is the backbone function for building circuits. * * If circ's first hop is closed, then we need to build a create @@ -633,7 +2047,7 @@ circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_BUILDING); log_info(LD_CIRC,"First hop: finished sending %s cell to '%s'", fast ? "CREATE_FAST" : "CREATE", - router ? router->nickname : ""); + router ? router_describe(router) : ""); } else { tor_assert(circ->cpath->state == CPATH_STATE_OPEN); tor_assert(circ->_base.state == CIRCUIT_STATE_BUILDING); @@ -642,15 +2056,43 @@ if (!hop) { /* done building the circuit. whew. */ circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_OPEN); + if (circuit_timeout_want_to_count_circ(circ)) { + struct timeval end; + long timediff; + tor_gettimeofday(&end); + timediff = tv_mdiff(&circ->_base.timestamp_created, &end); + + /* + * If the circuit build time is much greater than we would have cut + * it off at, we probably had a suspend event along this codepath, + * and we should discard the value. + */ + if (timediff < 0 || timediff > 2*circ_times.close_ms+1000) { + log_notice(LD_CIRC, "Strange value for circuit build time: %ldmsec. " + "Assuming clock jump. Purpose %d (%s)", timediff, + circ->_base.purpose, + circuit_purpose_to_string(circ->_base.purpose)); + } else if (!circuit_build_times_disabled()) { + /* Only count circuit times if the network is live */ + if (circuit_build_times_network_check_live(&circ_times)) { + circuit_build_times_add_time(&circ_times, (build_time_t)timediff); + circuit_build_times_set_timeout(&circ_times); + } + + if (circ->_base.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) { + circuit_build_times_network_circ_success(&circ_times); + } + } + } log_info(LD_CIRC,"circuit built!"); circuit_reset_failure_count(0); if (circ->build_state->onehop_tunnel) control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_STATUS, 0); - if (!has_completed_circuit && !circ->build_state->onehop_tunnel) { + if (!can_complete_circuit && !circ->build_state->onehop_tunnel) { or_options_t *options = get_options(); - has_completed_circuit=1; + can_complete_circuit=1; /* FFFF Log a count of known routers here */ - log(LOG_NOTICE, LD_GENERAL, + log_notice(LD_GENERAL, "Tor has successfully opened a circuit. " "Looks like client functionality is working."); control_event_bootstrap(BOOTSTRAP_STATUS_DONE, 0); @@ -662,6 +2104,10 @@ } circuit_rep_hist_note_result(circ); circuit_has_opened(circ); /* do other actions as necessary */ + + /* We're done with measurement circuits here. Just close them */ + if (circ->_base.purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) + circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED); return 0; } @@ -705,13 +2151,13 @@ circuit_note_clock_jumped(int seconds_elapsed) { int severity = server_mode(get_options()) ? LOG_WARN : LOG_NOTICE; - log(severity, LD_GENERAL, "Your system clock just jumped %d seconds %s; " + tor_log(severity, LD_GENERAL, "Your system clock just jumped %d seconds %s; " "assuming established circuits no longer work.", seconds_elapsed >=0 ? seconds_elapsed : -seconds_elapsed, seconds_elapsed >=0 ? "forward" : "backward"); control_event_general_status(LOG_WARN, "CLOCK_JUMPED TIME=%d", seconds_elapsed); - has_completed_circuit=0; /* so it'll log when it works again */ + can_complete_circuit=0; /* so it'll log when it works again */ control_event_client_status(severity, "CIRCUIT_NOT_ESTABLISHED REASON=%s", "CLOCK_JUMPED"); circuit_mark_all_unused_circs(); @@ -793,7 +2239,7 @@ /* 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. */ - if (!memcmp(id_digest, TO_OR_CIRCUIT(circ)->p_conn->identity_digest, + if (tor_memeq(id_digest, TO_OR_CIRCUIT(circ)->p_conn->identity_digest, DIGEST_LEN)) { log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, "Client asked me to extend back to the previous hop."); @@ -944,10 +2390,9 @@ return -END_CIRC_REASON_TORPROTOCOL; } - if (hop->dh_handshake_state) { - crypto_dh_free(hop->dh_handshake_state); /* don't need it anymore */ - hop->dh_handshake_state = NULL; - } + crypto_dh_free(hop->dh_handshake_state); /* don't need it anymore */ + hop->dh_handshake_state = NULL; + memset(hop->fast_handshake_state, 0, sizeof(hop->fast_handshake_state)); if (circuit_init_cpath_crypto(hop, keys, 0)<0) { @@ -1035,8 +2480,8 @@ cell_type == CELL_CREATED ? ONIONSKIN_REPLY_LEN : DIGEST_LEN*2); log_debug(LD_CIRC,"init digest forward 0x%.8x, backward 0x%.8x.", - (unsigned int)*(uint32_t*)(keys), - (unsigned int)*(uint32_t*)(keys+20)); + (unsigned int)get_uint32(keys), + (unsigned int)get_uint32(keys+20)); if (circuit_init_cpath_crypto(tmp_cpath, keys, 0)<0) { log_warn(LD_BUG,"Circuit initialization failed"); tor_free(tmp_cpath); @@ -1057,7 +2502,7 @@ circ->is_first_hop = (cell_type == CELL_CREATED_FAST); append_cell_to_circuit_queue(TO_CIRCUIT(circ), - circ->p_conn, &cell, CELL_DIRECTION_IN); + circ->p_conn, &cell, CELL_DIRECTION_IN, 0); log_debug(LD_CIRC,"Finished sending 'created' cell."); if (!is_local_addr(&circ->p_conn->_base.addr) && @@ -1086,7 +2531,7 @@ tor_assert(routers); - routelen = 3; + routelen = DEFAULT_ROUTE_LEN; if (exit && purpose != CIRCUIT_PURPOSE_TESTING && purpose != CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) @@ -1151,6 +2596,8 @@ smartlist_t *LongLivedServices = get_options()->LongLivedPorts; tor_assert(need_uptime); tor_assert(need_capacity); + // Always predict need_capacity + *need_capacity = 1; enough = (smartlist_len(sl) == 0); for (i = 0; i < smartlist_len(sl); ++i) { port = smartlist_get(sl, i); @@ -1173,6 +2620,8 @@ for (i = 0; i < smartlist_len(needed_ports); ++i) { addr_policy_result_t r; + /* alignment issues aren't a worry for this dereference, since + needed_ports is explicitly a smartlist of uint16_t's */ port = *(uint16_t *)smartlist_get(needed_ports, i); tor_assert(port); r = compare_addr_to_addr_policy(0, port, router->exit_policy); @@ -1255,9 +2704,24 @@ n_supported[i] = -1; continue; /* skip routers that are known to be down or bad exits */ } + + if (options->_ExcludeExitNodesUnion && + routerset_contains_router(options->_ExcludeExitNodesUnion, router)) { + n_supported[i] = -1; + continue; /* user asked us not to use it, no matter what */ + } + if (options->ExitNodes && + !routerset_contains_router(options->ExitNodes, router)) { + n_supported[i] = -1; + continue; /* not one of our chosen exit nodes */ + } + if (router_is_unreliable(router, need_uptime, need_capacity, 0)) { n_supported[i] = -1; - continue; /* skip routers that are not suitable */ + continue; /* skip routers that are not suitable. Don't worry if + * this makes us reject all the possible routers: if so, + * we'll retry later in this function with need_update and + * need_capacity set to 0. */ } if (!(router->is_valid || options->_AllowInvalid & ALLOW_INVALID_EXIT)) { /* if it's invalid and we don't want it */ @@ -1316,28 +2780,21 @@ /* If any routers definitely support any pending connections, choose one * at random. */ if (best_support > 0) { - smartlist_t *supporting = smartlist_create(), *use = smartlist_create(); + smartlist_t *supporting = smartlist_create(); for (i = 0; i < smartlist_len(dir->routers); i++) if (n_supported[i] == best_support) smartlist_add(supporting, smartlist_get(dir->routers, i)); - routersets_get_disjunction(use, supporting, options->ExitNodes, - options->_ExcludeExitNodesUnion, 1); - if (smartlist_len(use) == 0 && !options->StrictExitNodes) { - routersets_get_disjunction(use, supporting, NULL, - options->_ExcludeExitNodesUnion, 1); - } - router = routerlist_sl_choose_by_bandwidth(use, WEIGHT_FOR_EXIT); - smartlist_free(use); + router = routerlist_sl_choose_by_bandwidth(supporting, WEIGHT_FOR_EXIT); smartlist_free(supporting); } else { /* Either there are no pending connections, or no routers even seem to * possibly support any of them. Choose a router at random that satisfies * at least one predicted exit port. */ - int try; - smartlist_t *needed_ports, *supporting, *use; + int attempt; + smartlist_t *needed_ports, *supporting; if (best_support == -1) { if (need_uptime || need_capacity) { @@ -1349,54 +2806,45 @@ tor_free(n_supported); return choose_good_exit_server_general(dir, 0, 0); } - log_notice(LD_CIRC, "All routers are down or won't exit -- choosing a " - "doomed exit at random."); + log_notice(LD_CIRC, "All routers are down or won't exit%s -- " + "choosing a doomed exit at random.", + options->_ExcludeExitNodesUnion ? " or are Excluded" : ""); } supporting = smartlist_create(); - use = smartlist_create(); needed_ports = circuit_get_unhandled_ports(time(NULL)); - for (try = 0; try < 2; try++) { + for (attempt = 0; attempt < 2; attempt++) { /* try once to pick only from routers that satisfy a needed port, * then if there are none, pick from any that support exiting. */ for (i = 0; i < smartlist_len(dir->routers); i++) { router = smartlist_get(dir->routers, i); if (n_supported[i] != -1 && - (try || router_handles_some_port(router, needed_ports))) { + (attempt || router_handles_some_port(router, needed_ports))) { // log_fn(LOG_DEBUG,"Try %d: '%s' is a possibility.", // try, router->nickname); smartlist_add(supporting, router); } } - routersets_get_disjunction(use, supporting, options->ExitNodes, - options->_ExcludeExitNodesUnion, 1); - if (smartlist_len(use) == 0 && !options->StrictExitNodes) { - routersets_get_disjunction(use, supporting, NULL, - options->_ExcludeExitNodesUnion, 1); - } - /* XXX sometimes the above results in null, when the requested - * exit node is down. we should pick it anyway. */ - router = routerlist_sl_choose_by_bandwidth(use, WEIGHT_FOR_EXIT); + router = routerlist_sl_choose_by_bandwidth(supporting, WEIGHT_FOR_EXIT); if (router) break; smartlist_clear(supporting); - smartlist_clear(use); } SMARTLIST_FOREACH(needed_ports, uint16_t *, cp, tor_free(cp)); smartlist_free(needed_ports); - smartlist_free(use); smartlist_free(supporting); } tor_free(n_supported); if (router) { - log_info(LD_CIRC, "Chose exit server '%s'", router->nickname); + log_info(LD_CIRC, "Chose exit server '%s'", router_describe(router)); return router; } - if (options->StrictExitNodes) { + if (options->ExitNodes) { log_warn(LD_CIRC, - "No specified exit routers seem to be running, and " - "StrictExitNodes is set: can't choose an exit."); + "No specified %sexit routers seem to be running: " + "can't choose an exit.", + options->_ExcludeExitNodesUnion ? "non-excluded " : ""); } return NULL; } @@ -1427,15 +2875,13 @@ if (options->_AllowInvalid & ALLOW_INVALID_MIDDLE) flags |= CRN_ALLOW_INVALID; if (is_internal) /* pick it like a middle hop */ - return router_choose_random_node(NULL, NULL, - options->ExcludeNodes, flags); + return router_choose_random_node(NULL, options->ExcludeNodes, flags); else return choose_good_exit_server_general(dir,need_uptime,need_capacity); case CIRCUIT_PURPOSE_C_ESTABLISH_REND: if (options->_AllowInvalid & ALLOW_INVALID_RENDEZVOUS) flags |= CRN_ALLOW_INVALID; - return router_choose_random_node(NULL, NULL, - options->ExcludeNodes, flags); + return router_choose_random_node(NULL, options->ExcludeNodes, flags); } log_warn(LD_BUG,"Unhandled purpose %d", purpose); tor_fragile_assert(); @@ -1450,7 +2896,6 @@ or_options_t *options = get_options(); routerset_t *rs = options->ExcludeNodes; const char *description; - int domain = LD_CIRC; uint8_t purpose = circ->_base.purpose; if (circ->build_state->onehop_tunnel) @@ -1463,13 +2908,14 @@ case CIRCUIT_PURPOSE_INTRO_POINT: case CIRCUIT_PURPOSE_REND_POINT_WAITING: case CIRCUIT_PURPOSE_REND_ESTABLISHED: - log_warn(LD_BUG, "Called on non-origin circuit (purpose %d)", - (int)purpose); + log_warn(LD_BUG, "Called on non-origin circuit (purpose %d, %s)", + (int)purpose, + circuit_purpose_to_string(purpose)); return; case CIRCUIT_PURPOSE_C_GENERAL: if (circ->build_state->is_internal) return; - description = "Requested exit node"; + description = "requested exit node"; rs = options->_ExcludeExitNodesUnion; break; case CIRCUIT_PURPOSE_C_INTRODUCING: @@ -1484,22 +2930,34 @@ case CIRCUIT_PURPOSE_C_REND_READY: case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED: case CIRCUIT_PURPOSE_C_REND_JOINED: - description = "Chosen rendezvous point"; - domain = LD_BUG; + description = "chosen rendezvous point"; break; case CIRCUIT_PURPOSE_CONTROLLER: rs = options->_ExcludeExitNodesUnion; - description = "Controller-selected circuit target"; + description = "controller-selected circuit target"; break; } if (routerset_contains_extendinfo(rs, exit)) { - log_fn(LOG_WARN, domain, "%s '%s' is in ExcludeNodes%s. Using anyway " - "(circuit purpose %d).", - description,exit->nickname, - rs==options->ExcludeNodes?"":" or ExcludeExitNodes", - (int)purpose); - circuit_log_path(LOG_WARN, domain, circ); + /* We should never get here if StrictNodes is set to 1. */ + if (options->StrictNodes) { + log_warn(LD_BUG, "Using %s '%s' which is listed in ExcludeNodes%s, " + "even though StrictNodes is set. Please report. " + "(Circuit purpose: %s)", + description, extend_info_describe(exit), + rs==options->ExcludeNodes?"":" or ExcludeExitNodes", + circuit_purpose_to_string(purpose)); + } else { + log_warn(LD_CIRC, "Using %s '%s' which is listed in " + "ExcludeNodes%s, because no better options were available. To " + "prevent this (and possibly break your Tor functionality), " + "set the StrictNodes configuration option. " + "(Circuit purpose: %s)", + description, extend_info_describe(exit), + rs==options->ExcludeNodes?"":" or ExcludeExitNodes", + circuit_purpose_to_string(purpose)); + } + circuit_log_path(LOG_WARN, LD_CIRC, circ); } return; @@ -1526,7 +2984,8 @@ if (exit) { /* the circuit-builder pre-requested one */ warn_if_last_router_excluded(circ, exit); - log_info(LD_CIRC,"Using requested exit node '%s'", exit->nickname); + log_info(LD_CIRC,"Using requested exit node '%s'", + extend_info_describe(exit)); exit = extend_info_dup(exit); } else { /* we have to decide one */ routerinfo_t *router = @@ -1555,8 +3014,7 @@ state = circ->build_state; tor_assert(state); - if (state->chosen_exit) - extend_info_free(state->chosen_exit); + extend_info_free(state->chosen_exit); state->chosen_exit = extend_info_dup(exit); ++circ->build_state->desired_path_len; @@ -1576,8 +3034,8 @@ circuit_append_new_exit(circ, exit); circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_BUILDING); if ((err_reason = circuit_send_next_onion_skin(circ))<0) { - log_warn(LD_CIRC, "Couldn't extend circuit to new point '%s'.", - exit->nickname); + log_warn(LD_CIRC, "Couldn't extend circuit to new point %s.", + extend_info_describe(exit)); circuit_mark_for_close(TO_CIRCUIT(circ), -err_reason); return -1; } @@ -1678,8 +3136,7 @@ flags |= CRN_NEED_CAPACITY; if (options->_AllowInvalid & ALLOW_INVALID_MIDDLE) flags |= CRN_ALLOW_INVALID; - choice = router_choose_random_node(NULL, - excluded, options->ExcludeNodes, flags); + choice = router_choose_random_node(excluded, options->ExcludeNodes, flags); smartlist_free(excluded); return choice; } @@ -1743,11 +3200,7 @@ if (options->_AllowInvalid & ALLOW_INVALID_ENTRY) flags |= CRN_ALLOW_INVALID; - choice = router_choose_random_node( - NULL, - excluded, - options->ExcludeNodes, - flags); + choice = router_choose_random_node(excluded, options->ExcludeNodes, flags); smartlist_free(excluded); return choice; } @@ -1806,7 +3259,8 @@ } log_debug(LD_CIRC,"Chose router %s for hop %d (exit is %s)", - info->nickname, cur_len+1, build_state_get_exit_nickname(state)); + extend_info_describe(info), + cur_len+1, build_state_get_exit_nickname(state)); onion_append_hop(&circ->cpath, info); extend_info_free(info); @@ -1868,9 +3322,9 @@ void extend_info_free(extend_info_t *info) { - tor_assert(info); - if (info->onion_key) - crypto_free_pk_env(info->onion_key); + if (!info) + return; + crypto_free_pk_env(info->onion_key); tor_free(info); } @@ -1929,8 +3383,6 @@ char buf[HEX_DIGEST_LEN+1]; int changed = 0; - tor_assert(options); - *reason = NULL; /* Do we want to mark this guard as bad? */ @@ -1940,6 +3392,8 @@ *reason = "down"; else if (options->UseBridges && ri->purpose != ROUTER_PURPOSE_BRIDGE) *reason = "not a bridge"; + else if (options->UseBridges && !routerinfo_is_a_configured_bridge(ri)) + *reason = "not a configured bridge"; else if (!options->UseBridges && !ri->is_possible_guard && !routerset_contains_router(options->EntryNodes,ri)) *reason = "not recommended as a guard"; @@ -1993,35 +3447,63 @@ * - Listed as either up or never yet contacted; * - Present in the routerlist; * - Listed as 'stable' or 'fast' by the current dirserver consensus, - * if demanded by need_uptime or need_capacity; - * (This check is currently redundant with the Guard flag, but in - * the future that might change. Best to leave it in for now.) + * if demanded by need_uptime or need_capacity + * (unless it's a configured EntryNode); * - Allowed by our current ReachableORAddresses config option; and - * - Currently thought to be reachable by us (unless assume_reachable + * - Currently thought to be reachable by us (unless assume_reachable * is true). + * + * If the answer is no, set *msg to an explanation of why. */ static INLINE routerinfo_t * entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity, - int assume_reachable) + int assume_reachable, const char **msg) { routerinfo_t *r; - if (e->bad_since) + or_options_t *options = get_options(); + tor_assert(msg); + + if (e->bad_since) { + *msg = "bad"; return NULL; + } /* no good if it's unreachable, unless assume_unreachable or can_retry. */ if (!assume_reachable && !e->can_retry && - e->unreachable_since && !entry_is_time_to_retry(e, time(NULL))) + e->unreachable_since && !entry_is_time_to_retry(e, time(NULL))) { + *msg = "unreachable"; return NULL; + } r = router_get_by_digest(e->identity); - if (!r) - return NULL; - if (get_options()->UseBridges && r->purpose != ROUTER_PURPOSE_BRIDGE) + if (!r) { + *msg = "no descriptor"; return NULL; - if (!get_options()->UseBridges && r->purpose != ROUTER_PURPOSE_GENERAL) + } + if (options->UseBridges) { + if (r->purpose != ROUTER_PURPOSE_BRIDGE) { + *msg = "not a bridge"; + return NULL; + } + if (!routerinfo_is_a_configured_bridge(r)) { + *msg = "not a configured bridge"; + return NULL; + } + } else if (r->purpose != ROUTER_PURPOSE_GENERAL) { + *msg = "not general-purpose"; return NULL; - if (router_is_unreliable(r, need_uptime, need_capacity, 0)) + } + if (options->EntryNodes && + routerset_contains_router(options->EntryNodes, r)) { + /* they asked for it, they get it */ + need_uptime = need_capacity = 0; + } + if (router_is_unreliable(r, need_uptime, need_capacity, 0)) { + *msg = "not fast/stable"; return NULL; - if (!fascist_firewall_allows_or(r)) + } + if (!fascist_firewall_allows_or(r)) { + *msg = "unreachable by config"; return NULL; + } return r; } @@ -2030,11 +3512,12 @@ num_live_entry_guards(void) { int n = 0; + const char *msg; if (! entry_guards) return 0; SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry, { - if (entry_is_live(entry, 0, 1, 0)) + if (entry_is_live(entry, 0, 1, 0, &msg)) ++n; }); return n; @@ -2046,7 +3529,7 @@ is_an_entry_guard(const char *digest) { SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry, - if (!memcmp(digest, entry->identity, DIGEST_LEN)) + if (tor_memeq(digest, entry->identity, DIGEST_LEN)) return entry; ); return NULL; @@ -2058,17 +3541,26 @@ log_entry_guards(int severity) { smartlist_t *elements = smartlist_create(); - char buf[1024]; char *s; - SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, + SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) { - tor_snprintf(buf, sizeof(buf), "%s (%s%s)", - e->nickname, - entry_is_live(e, 0, 1, 0) ? "up " : "down ", - e->made_contact ? "made-contact" : "never-contacted"); - smartlist_add(elements, tor_strdup(buf)); - }); + const char *msg = NULL; + char *cp; + if (entry_is_live(e, 0, 1, 0, &msg)) + tor_asprintf(&cp, "%s [%s] (up %s)", + e->nickname, + hex_str(e->identity, DIGEST_LEN), + e->made_contact ? "made-contact" : "never-contacted"); + else + tor_asprintf(&cp, "%s [%s] (%s, %s)", + e->nickname, + hex_str(e->identity, DIGEST_LEN), + msg, + e->made_contact ? "made-contact" : "never-contacted"); + smartlist_add(elements, cp); + } + SMARTLIST_FOREACH_END(e); s = smartlist_join_strings(elements, ",", 0, NULL); SMARTLIST_FOREACH(elements, char*, cp, tor_free(cp)); @@ -2091,12 +3583,13 @@ **/ #if 0 int n = 0; + const char *msg; or_options_t *options = get_options(); if (!entry_guards) return; SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry, { - if (entry_is_live(entry, 0, 1, 0)) { + if (entry_is_live(entry, 0, 1, 0, &msg)) { if (n++ == options->NumEntryGuards) { control_event_guard(entry->nickname, entry->identity, "DEFERRED"); return; @@ -2135,7 +3628,8 @@ return NULL; } entry = tor_malloc_zero(sizeof(entry_guard_t)); - log_info(LD_CIRC, "Chose '%s' as new entry guard.", router->nickname); + log_info(LD_CIRC, "Chose '%s' as new entry guard.", + router_describe(router)); strlcpy(entry->nickname, router->nickname, sizeof(entry->nickname)); memcpy(entry->identity, router->cache_info.identity_digest, DIGEST_LEN); /* Choose expiry time smudged over the past month. The goal here @@ -2158,9 +3652,8 @@ /** If the use of entry guards is configured, choose more entry guards * until we have enough in the list. */ static void -pick_entry_guards(void) +pick_entry_guards(or_options_t *options) { - or_options_t *options = get_options(); int changed = 0; tor_assert(entry_guards); @@ -2182,7 +3675,8 @@ static void entry_guard_free(entry_guard_t *e) { - tor_assert(e); + if (!e) + return; tor_free(e->chosen_by_version); tor_free(e); } @@ -2191,10 +3685,9 @@ * or which was selected by a version of Tor that's known to select * entry guards badly. */ static int -remove_obsolete_entry_guards(void) +remove_obsolete_entry_guards(time_t now) { int changed = 0, i; - time_t now = time(NULL); for (i = 0; i < smartlist_len(entry_guards); ++i) { entry_guard_t *entry = smartlist_get(entry_guards, i); @@ -2254,11 +3747,10 @@ * long that we don't think they'll come up again. Return 1 if we * removed any, or 0 if we did nothing. */ static int -remove_dead_entry_guards(void) +remove_dead_entry_guards(time_t now) { char dbuf[HEX_DIGEST_LEN+1]; char tbuf[ISO_TIME_LEN+1]; - time_t now = time(NULL); int i; int changed = 0; @@ -2293,19 +3785,16 @@ * think that things are unlisted. */ void -entry_guards_compute_status(void) +entry_guards_compute_status(or_options_t *options, time_t now) { - time_t now; int changed = 0; - int severity = LOG_DEBUG; - or_options_t *options; digestmap_t *reasons; + if (! entry_guards) return; - options = get_options(); - - now = time(NULL); + if (options->EntryNodes) /* reshuffle the entry guard list if needed */ + entry_nodes_should_be_added(); reasons = digestmap_new(); SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) @@ -2322,21 +3811,23 @@ } SMARTLIST_FOREACH_END(entry); - if (remove_dead_entry_guards()) + if (remove_dead_entry_guards(now)) changed = 1; - severity = changed ? LOG_DEBUG : LOG_INFO; - if (changed) { SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) { const char *reason = digestmap_get(reasons, entry->identity); - log_info(LD_CIRC, "Summary: Entry '%s' is %s, %s%s%s, and %s.", + const char *live_msg = ""; + routerinfo_t *r = entry_is_live(entry, 0, 1, 0, &live_msg); + log_info(LD_CIRC, "Summary: Entry %s [%s] is %s, %s%s%s, and %s%s.", entry->nickname, + hex_str(entry->identity, DIGEST_LEN), entry->unreachable_since ? "unreachable" : "reachable", entry->bad_since ? "unusable" : "usable", reason ? ", ": "", reason ? reason : "", - entry_is_live(entry, 0, 1, 0) ? "live" : "not live"); + r ? "live" : "not live / ", + r ? "" : live_msg); } SMARTLIST_FOREACH_END(entry); log_info(LD_CIRC, " (%d/%d entry guards are usable/new)", num_live_entry_guards(), smartlist_len(entry_guards)); @@ -2355,7 +3846,7 @@ * If mark_relay_status, also call router_set_status() on this * relay. * - * XXX022 change succeeded and mark_relay_status into 'int flags'. + * XXX023 change succeeded and mark_relay_status into 'int flags'. */ int entry_guard_register_connect_status(const char *digest, int succeeded, @@ -2373,7 +3864,7 @@ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, { - if (!memcmp(e->identity, digest, DIGEST_LEN)) { + if (tor_memeq(e->identity, digest, DIGEST_LEN)) { entry = e; idx = e_sl_idx; break; @@ -2407,6 +3898,7 @@ "Removing from the list. %d/%d entry guards usable/new.", entry->nickname, buf, num_live_entry_guards()-1, smartlist_len(entry_guards)-1); + control_event_guard(entry->nickname, entry->identity, "DROPPED"); entry_guard_free(entry); smartlist_del_keeporder(entry_guards, idx); log_entry_guards(LOG_INFO); @@ -2443,7 +3935,8 @@ if (e == entry) break; if (e->made_contact) { - routerinfo_t *r = entry_is_live(e, 0, 1, 1); + const char *msg; + routerinfo_t *r = entry_is_live(e, 0, 1, 1, &msg); if (r && e->unreachable_since) { refuse_conn = 1; e->can_retry = 1; @@ -2474,16 +3967,16 @@ void entry_nodes_should_be_added(void) { - log_info(LD_CIRC, "New EntryNodes config option detected. Will use."); + log_info(LD_CIRC, "EntryNodes config option set. Putting configured " + "relays at the front of the entry guard list."); should_add_entry_nodes = 1; } /** Add all nodes in EntryNodes that aren't currently guard nodes to the list * of guard nodes, at the front. */ static void -entry_guards_prepend_from_config(void) +entry_guards_prepend_from_config(or_options_t *options) { - or_options_t *options = get_options(); smartlist_t *entry_routers, *entry_fps; smartlist_t *old_entry_guards_on_list, *old_entry_guards_not_on_list; tor_assert(entry_guards); @@ -2498,7 +3991,7 @@ return; } - if (options->EntryNodes) { + { char *string = routerset_to_string(options->EntryNodes); log_info(LD_CIRC,"Adding configured EntryNodes '%s'.", string); tor_free(string); @@ -2511,13 +4004,14 @@ /* Split entry guards into those on the list and those not. */ - /* XXXX022 Now that we allow countries and IP ranges in EntryNodes, this is + /* XXXX023 Now that we allow countries and IP ranges in EntryNodes, this is * potentially an enormous list. For now, we disable such values for * EntryNodes in options_validate(); really, this wants a better solution. * Perhaps we should do this calculation once whenever the list of routers * changes or the entrynodes setting changes. */ - routerset_get_all_routers(entry_routers, options->EntryNodes, 0); + routerset_get_all_routers(entry_routers, options->EntryNodes, + options->ExcludeNodes, 0); SMARTLIST_FOREACH(entry_routers, routerinfo_t *, ri, smartlist_add(entry_fps,ri->cache_info.identity_digest)); SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, { @@ -2542,13 +4036,10 @@ SMARTLIST_FOREACH(entry_routers, routerinfo_t *, ri, { add_an_entry_guard(ri, 0); }); - /* Finally, the remaining EntryNodes, unless we're strict */ - if (options->StrictEntryNodes) { - SMARTLIST_FOREACH(old_entry_guards_not_on_list, entry_guard_t *, e, - entry_guard_free(e)); - } else { - smartlist_add_all(entry_guards, old_entry_guards_not_on_list); - } + /* Finally, free the remaining previously configured guards that are not in + * EntryNodes. */ + SMARTLIST_FOREACH(old_entry_guards_not_on_list, entry_guard_t *, e, + entry_guard_free(e)); smartlist_free(entry_routers); smartlist_free(entry_fps); @@ -2557,16 +4048,18 @@ entry_guards_changed(); } -/** Return 1 if we're fine adding arbitrary routers out of the - * directory to our entry guard list. Else return 0. */ +/** Return 0 if we're fine adding arbitrary routers out of the + * directory to our entry guard list, or return 1 if we have a + * list already and we must stick to it. + */ int -entry_list_can_grow(or_options_t *options) +entry_list_is_constrained(or_options_t *options) { - if (options->StrictEntryNodes) - return 0; + if (options->EntryNodes) + return 1; if (options->UseBridges) - return 0; - return 1; + return 1; + return 0; } /** Pick a live (up and listed) entry guard from entry_guards. If @@ -2584,10 +4077,9 @@ routerinfo_t *r = NULL; int need_uptime = state ? state->need_uptime : 0; int need_capacity = state ? state->need_capacity : 0; - int consider_exit_family = 0; + int preferred_min, consider_exit_family = 0; if (chosen_exit) { - smartlist_add(exit_family, chosen_exit); routerlist_add_family(exit_family, chosen_exit); consider_exit_family = 1; } @@ -2596,38 +4088,67 @@ entry_guards = smartlist_create(); if (should_add_entry_nodes) - entry_guards_prepend_from_config(); + entry_guards_prepend_from_config(options); - if (entry_list_can_grow(options) && - (! entry_guards || - smartlist_len(entry_guards) < options->NumEntryGuards)) - pick_entry_guards(); + if (!entry_list_is_constrained(options) && + smartlist_len(entry_guards) < options->NumEntryGuards) + pick_entry_guards(options); retry: smartlist_clear(live_entry_guards); - SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry, + SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) { - r = entry_is_live(entry, need_uptime, need_capacity, 0); - if (r && (!consider_exit_family || !smartlist_isin(exit_family, r))) { - smartlist_add(live_entry_guards, r); - if (!entry->made_contact) { - /* Always start with the first not-yet-contacted entry - * guard. Otherwise we might add several new ones, pick - * the second new one, and now we've expanded our entry - * guard list without needing to. */ - goto choose_and_finish; + const char *msg; + r = entry_is_live(entry, need_uptime, need_capacity, 0, &msg); + if (!r) + continue; /* down, no point */ + if (r == chosen_exit) + continue; /* don't pick the same node for entry and exit */ + if (consider_exit_family && smartlist_isin(exit_family, r)) + continue; /* avoid relays that are family members of our exit */ +#if 0 /* since EntryNodes is always strict now, this clause is moot */ + if (options->EntryNodes && + !routerset_contains_router(options->EntryNodes, r)) { + /* We've come to the end of our preferred entry nodes. */ + if (smartlist_len(live_entry_guards)) + goto choose_and_finish; /* only choose from the ones we like */ + if (options->StrictNodes) { + /* in theory this case should never happen, since + * entry_guards_prepend_from_config() drops unwanted relays */ + tor_fragile_assert(); + } else { + log_info(LD_CIRC, + "No relays from EntryNodes available. Using others."); } - if (smartlist_len(live_entry_guards) >= options->NumEntryGuards) - break; /* we have enough */ } - }); +#endif + smartlist_add(live_entry_guards, r); + if (!entry->made_contact) { + /* Always start with the first not-yet-contacted entry + * guard. Otherwise we might add several new ones, pick + * the second new one, and now we've expanded our entry + * guard list without needing to. */ + goto choose_and_finish; + } + if (smartlist_len(live_entry_guards) >= options->NumEntryGuards) + break; /* we have enough */ + } + SMARTLIST_FOREACH_END(entry); + + if (entry_list_is_constrained(options)) { + /* If we prefer the entry nodes we've got, and we have at least + * one choice, that's great. Use it. */ + preferred_min = 1; + } else { + /* Try to have at least 2 choices available. This way we don't + * get stuck with a single live-but-crummy entry and just keep + * using him. + * (We might get 2 live-but-crummy entry guards, but so be it.) */ + preferred_min = 2; + } - /* Try to have at least 2 choices available. This way we don't - * get stuck with a single live-but-crummy entry and just keep - * using him. - * (We might get 2 live-but-crummy entry guards, but so be it.) */ - if (smartlist_len(live_entry_guards) < 2) { - if (entry_list_can_grow(options)) { + if (smartlist_len(live_entry_guards) < preferred_min) { + if (!entry_list_is_constrained(options)) { /* still no? try adding a new entry then */ /* XXX if guard doesn't imply fast and stable, then we need * to tell add_an_entry_guard below what we want, or it might @@ -2652,26 +4173,31 @@ need_capacity = 0; goto retry; } - if (!r && !entry_list_can_grow(options) && consider_exit_family) { - /* still no? if we're using bridges or have strictentrynodes - * set, and our chosen exit is in the same family as all our - * bridges/entry guards, then be flexible about families. */ +#if 0 + /* Removing this retry logic: if we only allow one exit, and it is in the + same family as all our entries, then we are just plain not going to win + here. */ + if (!r && entry_list_is_constrained(options) && consider_exit_family) { + /* still no? if we're using bridges, + * and our chosen exit is in the same family as all our + * bridges, then be flexible about families. */ consider_exit_family = 0; goto retry; } +#endif /* live_entry_guards may be empty below. Oh well, we tried. */ } choose_and_finish: - if (entry_list_can_grow(options)) { + if (entry_list_is_constrained(options)) { + /* We need to weight by bandwidth, because our bridges or entryguards + * were not already selected proportional to their bandwidth. */ + r = routerlist_sl_choose_by_bandwidth(live_entry_guards, WEIGHT_FOR_GUARD); + } else { /* We choose uniformly at random here, because choose_good_entry_server() * already weights its choices by bandwidth, so we don't want to * *double*-weight our guard selection. */ r = smartlist_choose(live_entry_guards); - } else { - /* We need to weight by bandwidth, because our bridges or entryguards - * were not already selected proportional to their bandwidth. */ - r = routerlist_sl_choose_by_bandwidth(live_entry_guards, WEIGHT_FOR_GUARD); } smartlist_free(live_entry_guards); smartlist_free(exit_family); @@ -2803,9 +4329,9 @@ } entry_guards = new_entry_guards; entry_guards_dirty = 0; - /* XXX022 hand new_entry_guards to this func, and move it up a + /* XXX023 hand new_entry_guards to this func, and move it up a * few lines, so we don't have to re-dirty it */ - if (remove_obsolete_entry_guards()) + if (remove_obsolete_entry_guards(now)) entry_guards_dirty = 1; } digestmap_free(added_by, _tor_free); @@ -2904,9 +4430,11 @@ * */ int getinfo_helper_entry_guards(control_connection_t *conn, - const char *question, char **answer) + const char *question, char **answer, + const char **errmsg) { - int use_long_names = conn->use_long_names; + (void) conn; + (void) errmsg; if (!strcmp(question,"entry-guards") || !strcmp(question,"helper-nodes")) { @@ -2915,12 +4443,13 @@ char nbuf[MAX_VERBOSE_NICKNAME_LEN+1]; if (!entry_guards) entry_guards = smartlist_create(); - SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, - { + SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) { size_t len = MAX_VERBOSE_NICKNAME_LEN+ISO_TIME_LEN+32; char *c = tor_malloc(len); const char *status = NULL; time_t when = 0; + routerinfo_t *ri; + if (!e->made_contact) { status = "never-connected"; } else if (e->bad_since) { @@ -2929,19 +4458,17 @@ } else { status = "up"; } - if (use_long_names) { - routerinfo_t *ri = router_get_by_digest(e->identity); - if (ri) { - router_get_verbose_nickname(nbuf, ri); - } else { - nbuf[0] = '$'; - base16_encode(nbuf+1, sizeof(nbuf)-1, e->identity, DIGEST_LEN); - /* e->nickname field is not very reliable if we don't know about - * this router any longer; don't include it. */ - } + + ri = router_get_by_digest(e->identity); + if (ri) { + router_get_verbose_nickname(nbuf, ri); } else { - base16_encode(nbuf, sizeof(nbuf), e->identity, DIGEST_LEN); + nbuf[0] = '$'; + base16_encode(nbuf+1, sizeof(nbuf)-1, e->identity, DIGEST_LEN); + /* e->nickname field is not very reliable if we don't know about + * this router any longer; don't include it. */ } + if (when) { format_iso_time(tbuf, when); tor_snprintf(c, len, "%s %s %s\n", nbuf, status, tbuf); @@ -2949,7 +4476,7 @@ tor_snprintf(c, len, "%s %s\n", nbuf, status); } smartlist_add(sl, c); - }); + } SMARTLIST_FOREACH_END(e); *answer = smartlist_join_strings(sl, "", 0, NULL); SMARTLIST_FOREACH(sl, char *, c, tor_free(c)); smartlist_free(sl); @@ -2965,6 +4492,9 @@ tor_addr_t addr; /** TLS port for the bridge. */ uint16_t port; + /** Boolean: We are re-parsing our bridge list, and we are going to remove + * this one if we don't find it in the list of configured bridges. */ + unsigned marked_for_removal : 1; /** Expected identity digest, or all zero bytes if we don't know what the * digest should be. */ char identity[DIGEST_LEN]; @@ -2973,11 +4503,39 @@ } bridge_info_t; /** A list of configured bridges. Whenever we actually get a descriptor - * for one, we add it as an entry guard. */ + * for one, we add it as an entry guard. Note that the order of bridges + * in this list does not necessarily correspond to the order of bridges + * in the torrc. */ static smartlist_t *bridge_list = NULL; -/** Initialize the bridge list to empty, creating it if needed. */ +/** Mark every entry of the bridge list to be removed on our next call to + * sweep_bridge_list unless it has first been un-marked. */ +void +mark_bridge_list(void) +{ + if (!bridge_list) + bridge_list = smartlist_create(); + SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b, + b->marked_for_removal = 1); +} + +/** Remove every entry of the bridge list that was marked with + * mark_bridge_list if it has not subsequently been un-marked. */ void +sweep_bridge_list(void) +{ + if (!bridge_list) + bridge_list = smartlist_create(); + SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b) { + if (b->marked_for_removal) { + SMARTLIST_DEL_CURRENT(bridge_list, b); + tor_free(b); + } + } SMARTLIST_FOREACH_END(b); +} + +/** Initialize the bridge list to empty, creating it if needed. */ +static void clear_bridge_list(void) { if (!bridge_list) @@ -2990,37 +4548,75 @@ * (either by comparing keys if possible, else by comparing addr/port). * Else return NULL. */ static bridge_info_t * -routerinfo_get_configured_bridge(routerinfo_t *ri) +get_configured_bridge_by_addr_port_digest(const tor_addr_t *addr, + uint16_t port, + const char *digest) { if (!bridge_list) return NULL; SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) { if (tor_digest_is_zero(bridge->identity) && - tor_addr_eq_ipv4h(&bridge->addr, ri->addr) && - bridge->port == ri->or_port) + !tor_addr_compare(&bridge->addr, addr, CMP_EXACT) && + bridge->port == port) return bridge; - if (!memcmp(bridge->identity, ri->cache_info.identity_digest, - DIGEST_LEN)) + if (digest && tor_memeq(bridge->identity, digest, DIGEST_LEN)) return bridge; } SMARTLIST_FOREACH_END(bridge); return NULL; } +/** Wrapper around get_configured_bridge_by_addr_port_digest() to look + * it up via router descriptor ri. */ +static bridge_info_t * +get_configured_bridge_by_routerinfo(routerinfo_t *ri) +{ + tor_addr_t addr; + tor_addr_from_ipv4h(&addr, ri->addr); + return get_configured_bridge_by_addr_port_digest(&addr, + ri->or_port, ri->cache_info.identity_digest); +} + /** Return 1 if ri is one of our known bridges, else 0. */ int routerinfo_is_a_configured_bridge(routerinfo_t *ri) { - return routerinfo_get_configured_bridge(ri) ? 1 : 0; + return get_configured_bridge_by_routerinfo(ri) ? 1 : 0; +} + +/** We made a connection to a router at addr:port + * without knowing its digest. Its digest turned out to be digest. + * If it was a bridge, and we still don't know its digest, record it. + */ +void +learned_router_identity(const tor_addr_t *addr, uint16_t port, + const char *digest) +{ + 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); + log_notice(LD_DIR, "Learned fingerprint %s for bridge %s:%d", + hex_str(digest, DIGEST_LEN), fmt_addr(addr), port); + } } /** Remember a new bridge at addr:port. If digest - * is set, it tells us the identity key too. */ + * is set, it tells us the identity key too. If we already had the + * bridge in our list, unmark it, and don't actually add anything new. */ void -bridge_add_from_config(const tor_addr_t *addr, uint16_t port, char *digest) +bridge_add_from_config(const tor_addr_t *addr, uint16_t port, + const char *digest) { - bridge_info_t *b = tor_malloc_zero(sizeof(bridge_info_t)); + bridge_info_t *b; + + if ((b = get_configured_bridge_by_addr_port_digest(addr, port, digest))) { + b->marked_for_removal = 0; + return; + } + + b = tor_malloc_zero(sizeof(bridge_info_t)); tor_addr_copy(&b->addr, addr); b->port = port; if (digest) @@ -3028,34 +4624,61 @@ b->fetch_status.schedule = DL_SCHED_BRIDGE; if (!bridge_list) bridge_list = smartlist_create(); + smartlist_add(bridge_list, b); } +/** Return true iff routerset contains the bridge bridge. */ +static int +routerset_contains_bridge(const routerset_t *routerset, + const bridge_info_t *bridge) +{ + int result; + extend_info_t *extinfo; + tor_assert(bridge); + if (!routerset) + return 0; + + extinfo = extend_info_alloc( + NULL, bridge->identity, NULL, &bridge->addr, bridge->port); + result = routerset_contains_extendinfo(routerset, extinfo); + extend_info_free(extinfo); + return result; +} + /** If digest is one of our known bridges, return it. */ static bridge_info_t * find_bridge_by_digest(const char *digest) { SMARTLIST_FOREACH(bridge_list, bridge_info_t *, bridge, { - if (!memcmp(bridge->identity, digest, DIGEST_LEN)) + if (tor_memeq(bridge->identity, digest, DIGEST_LEN)) return bridge; }); return NULL; } -/** We need to ask bridge for its server descriptor. address - * is a helpful string describing this bridge. */ +/** We need to ask bridge for its server descriptor. */ static void launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge) { char *address; + or_options_t *options = get_options(); if (connection_get_by_type_addr_port_purpose( CONN_TYPE_DIR, &bridge->addr, bridge->port, DIR_PURPOSE_FETCH_SERVERDESC)) return; /* it's already on the way */ + if (routerset_contains_bridge(options->ExcludeNodes, bridge)) { + download_status_mark_impossible(&bridge->fetch_status); + log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.", + safe_str_client(fmt_addr(&bridge->addr))); + return; + } + address = tor_dup_addr(&bridge->addr); + directory_initiate_command(address, &bridge->addr, bridge->port, 0, 0, /* does not matter */ @@ -3082,9 +4705,8 @@ * descriptor, fetch a new copy of its descriptor -- either directly * from the bridge or via a bridge authority. */ void -fetch_bridge_descriptors(time_t now) +fetch_bridge_descriptors(or_options_t *options, time_t now) { - or_options_t *options = get_options(); int num_bridge_auths = get_n_authorities(BRIDGE_AUTHORITY); int ask_bridge_directly; int can_use_bridge_authority; @@ -3097,6 +4719,12 @@ if (!download_status_is_ready(&bridge->fetch_status, now, IMPOSSIBLE_TO_DOWNLOAD)) continue; /* don't bother, no need to retry yet */ + if (routerset_contains_bridge(options->ExcludeNodes, bridge)) { + download_status_mark_impossible(&bridge->fetch_status); + log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.", + safe_str_client(fmt_addr(&bridge->addr))); + continue; + } /* schedule another fetch as if this one will fail, in case it does */ download_status_failed(&bridge->fetch_status, 0); @@ -3143,6 +4771,29 @@ SMARTLIST_FOREACH_END(bridge); } +/** If our bridge is configured to be a different address than + * the bridge gives in its routerinfo ri, rewrite the routerinfo + * we received to use the address we meant to use. Now we handle + * multihomed bridges better. + */ +static void +rewrite_routerinfo_address_for_bridge(bridge_info_t *bridge, routerinfo_t *ri) +{ + tor_addr_t addr; + tor_addr_from_ipv4h(&addr, ri->addr); + + if (!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) && + bridge->port == ri->or_port) + return; /* they match, so no need to do anything */ + + ri->addr = tor_addr_to_ipv4h(&bridge->addr); + tor_free(ri->address); + ri->address = tor_dup_ip(ri->addr); + ri->or_port = bridge->port; + log_info(LD_DIR, "Adjusted bridge '%s' to match configured address %s:%d.", + ri->nickname, ri->address, ri->or_port); +} + /** We just learned a descriptor for a bridge. See if that * digest is in our entry guard list, and add it if not. */ void @@ -3152,7 +4803,7 @@ tor_assert(ri->purpose == ROUTER_PURPOSE_BRIDGE); if (get_options()->UseBridges) { int first = !any_bridge_descriptors_known(); - bridge_info_t *bridge = routerinfo_get_configured_bridge(ri); + bridge_info_t *bridge = get_configured_bridge_by_routerinfo(ri); time_t now = time(NULL); ri->is_running = 1; @@ -3161,6 +4812,8 @@ if (!from_cache) download_status_reset(&bridge->fetch_status); + rewrite_routerinfo_address_for_bridge(bridge, ri); + add_an_entry_guard(ri, 1); log_notice(LD_DIR, "new bridge descriptor '%s' (%s)", ri->nickname, from_cache ? "cached" : "fresh"); @@ -3200,7 +4853,8 @@ conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC && TO_DIR_CONN(conn)->router_purpose == ROUTER_PURPOSE_BRIDGE && !conn->marked_for_close && - conn->linked && !conn->linked_conn->marked_for_close) { + conn->linked && + conn->linked_conn && !conn->linked_conn->marked_for_close) { log_debug(LD_DIR, "found one: %s", conn->address); return 1; } @@ -3208,26 +4862,38 @@ return 0; } -/** Return 1 if we have at least one descriptor for a bridge and - * all descriptors we know are down. Else return 0. If act is - * 1, then mark the down bridges up; else just observe and report. */ +/** Return 1 if we have at least one descriptor for an entry guard + * (bridge or member of EntryNodes) and all descriptors we know are + * down. Else return 0. If act is 1, then mark the down guards + * up; else just observe and report. */ static int -bridges_retry_helper(int act) +entries_retry_helper(or_options_t *options, int act) { routerinfo_t *ri; int any_known = 0; int any_running = 0; + int purpose = options->UseBridges ? + ROUTER_PURPOSE_BRIDGE : ROUTER_PURPOSE_GENERAL; if (!entry_guards) entry_guards = smartlist_create(); SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, { ri = router_get_by_digest(e->identity); - if (ri && ri->purpose == ROUTER_PURPOSE_BRIDGE) { + if (ri && ri->purpose == purpose) { any_known = 1; if (ri->is_running) - any_running = 1; /* some bridge is both known and running */ - else if (act) { /* mark it for retry */ - ri->is_running = 1; + any_running = 1; /* some entry is both known and running */ + else if (act) { + /* Mark all current connections to this OR as unhealthy, since + * otherwise there could be one that started 30 seconds + * ago, and in 30 seconds it will time out, causing us to mark + * 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(ri->cache_info.identity_digest, 1); + + /* mark this entry node for retry */ + router_set_status(ri->cache_info.identity_digest, 1); e->can_retry = 1; e->bad_since = 0; } @@ -3238,19 +4904,21 @@ return any_known && !any_running; } -/** Do we know any descriptors for our bridges, and are they all - * down? */ +/** Do we know any descriptors for our bridges / entrynodes, and are + * all the ones we have descriptors for down? */ int -bridges_known_but_down(void) +entries_known_but_down(or_options_t *options) { - return bridges_retry_helper(0); + tor_assert(entry_list_is_constrained(options)); + return entries_retry_helper(options, 0); } -/** Mark all down known bridges up. */ +/** Mark all down known bridges / entrynodes up. */ void -bridges_retry_all(void) +entries_retry_all(or_options_t *options) { - bridges_retry_helper(1); + tor_assert(entry_list_is_constrained(options)); + entries_retry_helper(options, 1); } /** Release all storage held by the list of entry guards and related diff -Nru tor-0.2.1.30/src/or/circuitbuild.h tor-0.2.2.35/src/or/circuitbuild.h --- tor-0.2.1.30/src/or/circuitbuild.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/circuitbuild.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,128 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file circuitbuild.h + * \brief Header file for circuitbuild.c. + **/ + +#ifndef _TOR_CIRCUITBUILD_H +#define _TOR_CIRCUITBUILD_H + +char *circuit_list_path(origin_circuit_t *circ, int verbose); +char *circuit_list_path_for_controller(origin_circuit_t *circ); +void circuit_log_path(int severity, unsigned int domain, + origin_circuit_t *circ); +void circuit_rep_hist_note_result(origin_circuit_t *circ); +origin_circuit_t *origin_circuit_init(uint8_t purpose, int flags); +origin_circuit_t *circuit_establish_circuit(uint8_t purpose, + extend_info_t *exit, + int flags); +int circuit_handle_first_hop(origin_circuit_t *circ); +void circuit_n_conn_done(or_connection_t *or_conn, int status); +int inform_testing_reachability(void); +int circuit_timeout_want_to_count_circ(origin_circuit_t *circ); +int circuit_send_next_onion_skin(origin_circuit_t *circ); +void circuit_note_clock_jumped(int seconds_elapsed); +int circuit_extend(cell_t *cell, circuit_t *circ); +int circuit_init_cpath_crypto(crypt_path_t *cpath, const char *key_data, + int reverse); +int circuit_finish_handshake(origin_circuit_t *circ, uint8_t cell_type, + const uint8_t *reply); +int circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer); +int onionskin_answer(or_circuit_t *circ, uint8_t cell_type, + const char *payload, const char *keys); +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_alloc(const char *nickname, const char *digest, + crypto_pk_env_t *onion_key, + const tor_addr_t *addr, uint16_t port); +extend_info_t *extend_info_from_router(routerinfo_t *r); +extend_info_t *extend_info_dup(extend_info_t *info); +void extend_info_free(extend_info_t *info); +routerinfo_t *build_state_get_exit_router(cpath_build_state_t *state); +const char *build_state_get_exit_nickname(cpath_build_state_t *state); + +void entry_guards_compute_status(or_options_t *options, time_t now); +int entry_guard_register_connect_status(const char *digest, int succeeded, + int mark_relay_status, time_t now); +void entry_nodes_should_be_added(void); +int entry_list_is_constrained(or_options_t *options); +routerinfo_t *choose_random_entry(cpath_build_state_t *state); +int entry_guards_parse_state(or_state_t *state, int set, char **msg); +void entry_guards_update_state(or_state_t *state); +int getinfo_helper_entry_guards(control_connection_t *conn, + const char *question, char **answer, + const char **errmsg); + +void mark_bridge_list(void); +void sweep_bridge_list(void); +int routerinfo_is_a_configured_bridge(routerinfo_t *ri); +void learned_router_identity(const tor_addr_t *addr, uint16_t port, + const char *digest); +void bridge_add_from_config(const tor_addr_t *addr, uint16_t port, + const char *digest); +void retry_bridge_descriptor_fetch_directly(const char *digest); +void fetch_bridge_descriptors(or_options_t *options, time_t now); +void learned_bridge_descriptor(routerinfo_t *ri, int from_cache); +int any_bridge_descriptors_known(void); +int any_pending_bridge_descriptor_fetches(void); +int entries_known_but_down(or_options_t *options); +void entries_retry_all(or_options_t *options); + +void entry_guards_free_all(void); + +extern circuit_build_times_t circ_times; +int circuit_build_times_enough_to_compute(circuit_build_times_t *cbt); +void circuit_build_times_update_state(circuit_build_times_t *cbt, + or_state_t *state); +int circuit_build_times_parse_state(circuit_build_times_t *cbt, + or_state_t *state); +void circuit_build_times_count_timeout(circuit_build_times_t *cbt, + int did_onehop); +int circuit_build_times_count_close(circuit_build_times_t *cbt, + int did_onehop, time_t start_time); +void circuit_build_times_set_timeout(circuit_build_times_t *cbt); +int circuit_build_times_add_time(circuit_build_times_t *cbt, + build_time_t time); +int circuit_build_times_needs_circuits(circuit_build_times_t *cbt); + +int circuit_build_times_needs_circuits_now(circuit_build_times_t *cbt); +void circuit_build_times_init(circuit_build_times_t *cbt); +void circuit_build_times_new_consensus_params(circuit_build_times_t *cbt, + networkstatus_t *ns); +double circuit_build_times_timeout_rate(const circuit_build_times_t *cbt); +double circuit_build_times_close_rate(const circuit_build_times_t *cbt); + +#ifdef CIRCUIT_PRIVATE +double circuit_build_times_calculate_timeout(circuit_build_times_t *cbt, + double quantile); +build_time_t circuit_build_times_generate_sample(circuit_build_times_t *cbt, + double q_lo, double q_hi); +void circuit_build_times_initial_alpha(circuit_build_times_t *cbt, + double quantile, double time_ms); +int circuit_build_times_update_alpha(circuit_build_times_t *cbt); +double circuit_build_times_cdf(circuit_build_times_t *cbt, double x); +void circuitbuild_running_unit_tests(void); +void circuit_build_times_reset(circuit_build_times_t *cbt); + +/* Network liveness functions */ +int circuit_build_times_network_check_changed(circuit_build_times_t *cbt); +#endif + +/* Network liveness functions */ +void circuit_build_times_network_is_live(circuit_build_times_t *cbt); +int circuit_build_times_network_check_live(circuit_build_times_t *cbt); +void circuit_build_times_network_circ_success(circuit_build_times_t *cbt); + +int circuit_build_times_get_bw_scale(networkstatus_t *ns); + +#endif + diff -Nru tor-0.2.1.30/src/or/circuitlist.c tor-0.2.2.35/src/or/circuitlist.c --- tor-0.2.1.30/src/or/circuitlist.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/circuitlist.c 2011-12-15 16:28:37.000000000 +0000 @@ -10,6 +10,21 @@ **/ #include "or.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "circuituse.h" +#include "connection.h" +#include "config.h" +#include "connection_edge.h" +#include "connection_or.h" +#include "control.h" +#include "networkstatus.h" +#include "onion.h" +#include "relay.h" +#include "rendclient.h" +#include "rendcommon.h" +#include "rephist.h" +#include "routerlist.h" #include "ht.h" /********* START VARIABLES **********/ @@ -241,7 +256,7 @@ continue; } else { /* We expected a key. See if it's the right one. */ - if (memcmp(or_conn->identity_digest, + if (tor_memneq(or_conn->identity_digest, circ->n_hop->identity_digest, DIGEST_LEN)) continue; } @@ -259,8 +274,10 @@ circuit_get_all_pending_on_or_conn(sl, or_conn); cnt = smartlist_len(sl); smartlist_free(sl); - log_debug(LD_CIRC,"or_conn to %s, %d pending circs", - or_conn->nickname ? or_conn->nickname : "NULL", cnt); + log_debug(LD_CIRC,"or_conn to %s at %s, %d pending circs", + or_conn->nickname ? or_conn->nickname : "NULL", + or_conn->_base.address, + cnt); return cnt; } @@ -352,6 +369,8 @@ case CIRCUIT_PURPOSE_TESTING: return "TESTING"; + case CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT: + return "MEASURE_TIMEOUT"; case CIRCUIT_PURPOSE_CONTROLLER: return "CONTROLLER"; @@ -361,13 +380,71 @@ } } +/** Return a human-readable string for the circuit purpose purpose. */ +const char * +circuit_purpose_to_string(uint8_t purpose) +{ + static char buf[32]; + + switch (purpose) + { + case CIRCUIT_PURPOSE_OR: + return "Circuit at relay"; + case CIRCUIT_PURPOSE_INTRO_POINT: + return "Acting as intro point"; + case CIRCUIT_PURPOSE_REND_POINT_WAITING: + return "Acting as rendevous (pending)"; + case CIRCUIT_PURPOSE_REND_ESTABLISHED: + return "Acting as rendevous (established)"; + case CIRCUIT_PURPOSE_C_GENERAL: + return "General-purpose client"; + case CIRCUIT_PURPOSE_C_INTRODUCING: + return "Hidden service client: Connecting to intro point"; + case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT: + return "Hidden service client: Waiting for ack from intro point"; + case CIRCUIT_PURPOSE_C_INTRODUCE_ACKED: + return "Hidden service client: Received ack from intro point"; + case CIRCUIT_PURPOSE_C_ESTABLISH_REND: + return "Hidden service client: Establishing rendezvous point"; + case CIRCUIT_PURPOSE_C_REND_READY: + return "Hidden service client: Pending rendezvous point"; + case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED: + return "Hidden service client: Pending rendezvous point (ack received)"; + case CIRCUIT_PURPOSE_C_REND_JOINED: + return "Hidden service client: Active rendezvous point"; + case CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT: + return "Measuring circuit timeout"; + + case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO: + return "Hidden service: Establishing introduction point"; + case CIRCUIT_PURPOSE_S_INTRO: + return "Hidden service: Introduction point"; + case CIRCUIT_PURPOSE_S_CONNECT_REND: + return "Hidden service: Connecting to rendezvous point"; + case CIRCUIT_PURPOSE_S_REND_JOINED: + return "Hidden service: Active rendezvous point"; + + case CIRCUIT_PURPOSE_TESTING: + return "Testing circuit"; + + case CIRCUIT_PURPOSE_CONTROLLER: + return "Circuit made by controller"; + + default: + tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose); + return buf; + } +} + /** Pick a reasonable package_window to start out for our circuits. * Originally this was hard-coded at 1000, but now the consensus votes * on the answer. See proposal 168. */ int32_t circuit_initial_package_window(void) { - int32_t num = networkstatus_get_param(NULL, "circwindow", CIRCWINDOW_START); + int32_t num = networkstatus_get_param(NULL, "circwindow", CIRCWINDOW_START, + CIRCWINDOW_START_MIN, + CIRCWINDOW_START_MAX); /* If the consensus tells us a negative number, we'd assert. */ if (num < 0) num = CIRCWINDOW_START; @@ -379,11 +456,17 @@ static void init_circuit_base(circuit_t *circ) { - circ->timestamp_created = time(NULL); + tor_gettimeofday(&circ->timestamp_created); circ->package_window = circuit_initial_package_window(); circ->deliver_window = CIRCWINDOW_START; + /* Initialize the cell_ewma_t structure */ + circ->n_cell_ewma.last_adjusted_tick = cell_ewma_get_tick(); + circ->n_cell_ewma.cell_count = 0.0; + circ->n_cell_ewma.heap_index = -1; + circ->n_cell_ewma.is_for_p_conn = 0; + circuit_add(circ); } @@ -408,6 +491,8 @@ init_circuit_base(TO_CIRCUIT(circ)); + circ_times.last_circ_at = approx_time(); + return circ; } @@ -429,6 +514,16 @@ init_circuit_base(TO_CIRCUIT(circ)); + /* Initialize the cell_ewma_t structure */ + + /* Initialize the cell counts to 0 */ + circ->p_cell_ewma.cell_count = 0.0; + circ->p_cell_ewma.last_adjusted_tick = cell_ewma_get_tick(); + circ->p_cell_ewma.is_for_p_conn = 1; + + /* It's not in any heap yet. */ + circ->p_cell_ewma.heap_index = -1; + return circ; } @@ -439,39 +534,37 @@ { void *mem; size_t memlen; - tor_assert(circ); + if (!circ) + return; + if (CIRCUIT_IS_ORIGIN(circ)) { origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ); mem = ocirc; memlen = sizeof(origin_circuit_t); tor_assert(circ->magic == ORIGIN_CIRCUIT_MAGIC); if (ocirc->build_state) { - if (ocirc->build_state->chosen_exit) extend_info_free(ocirc->build_state->chosen_exit); - if (ocirc->build_state->pending_final_cpath) circuit_free_cpath_node(ocirc->build_state->pending_final_cpath); } tor_free(ocirc->build_state); circuit_free_cpath(ocirc->cpath); - if (ocirc->intro_key) - crypto_free_pk_env(ocirc->intro_key); - if (ocirc->rend_data) - rend_data_free(ocirc->rend_data); + + crypto_free_pk_env(ocirc->intro_key); + rend_data_free(ocirc->rend_data); } else { or_circuit_t *ocirc = TO_OR_CIRCUIT(circ); + /* Remember cell statistics for this circuit before deallocating. */ + if (get_options()->CellStatistics) + rep_hist_buffer_stats_add_circ(circ, time(NULL)); mem = ocirc; memlen = sizeof(or_circuit_t); tor_assert(circ->magic == OR_CIRCUIT_MAGIC); - if (ocirc->p_crypto) - crypto_free_cipher_env(ocirc->p_crypto); - if (ocirc->p_digest) - crypto_free_digest_env(ocirc->p_digest); - if (ocirc->n_crypto) - crypto_free_cipher_env(ocirc->n_crypto); - if (ocirc->n_digest) - crypto_free_digest_env(ocirc->n_digest); + crypto_free_cipher_env(ocirc->p_crypto); + crypto_free_digest_env(ocirc->p_digest); + crypto_free_cipher_env(ocirc->n_crypto); + crypto_free_digest_env(ocirc->n_digest); if (ocirc->rend_splice) { or_circuit_t *other = ocirc->rend_splice; @@ -487,8 +580,7 @@ cell_queue_clear(ô->p_conn_cells); } - if (circ->n_hop) - extend_info_free(circ->n_hop); + extend_info_free(circ->n_hop); tor_free(circ->n_conn_onionskin); /* Remove from map. */ @@ -498,7 +590,7 @@ * "active" checks will be violated. */ cell_queue_clear(&circ->n_conn_cells); - memset(circ, 0xAA, memlen); /* poison memory */ + memset(mem, 0xAA, memlen); /* poison memory */ tor_free(mem); } @@ -541,10 +633,10 @@ circuit_free(global_circuitlist); global_circuitlist = next; } - if (circuits_pending_or_conns) { - smartlist_free(circuits_pending_or_conns); - circuits_pending_or_conns = NULL; - } + + smartlist_free(circuits_pending_or_conns); + circuits_pending_or_conns = NULL; + HT_CLEAR(orconn_circid_map, &orconn_circid_circuit_map); } @@ -552,18 +644,15 @@ static void circuit_free_cpath_node(crypt_path_t *victim) { - if (victim->f_crypto) - crypto_free_cipher_env(victim->f_crypto); - if (victim->b_crypto) - crypto_free_cipher_env(victim->b_crypto); - if (victim->f_digest) - crypto_free_digest_env(victim->f_digest); - if (victim->b_digest) - crypto_free_digest_env(victim->b_digest); - if (victim->dh_handshake_state) - crypto_dh_free(victim->dh_handshake_state); - if (victim->extend_info) - extend_info_free(victim->extend_info); + if (!victim) + return; + + crypto_free_cipher_env(victim->f_crypto); + crypto_free_cipher_env(victim->b_crypto); + crypto_free_digest_env(victim->f_digest); + crypto_free_digest_env(victim->b_digest); + crypto_dh_free(victim->dh_handshake_state); + extend_info_free(victim->extend_info); memset(victim, 0xBB, sizeof(crypt_path_t)); /* poison memory */ tor_free(victim); @@ -577,9 +666,10 @@ const char *type, int this_circid, int other_circid) { log(severity, LD_CIRC, "Conn %d has %s circuit: circID %d (other side %d), " - "state %d (%s), born %d:", + "state %d (%s), born %ld:", conn_array_index, type, this_circid, other_circid, circ->state, - circuit_state_to_string(circ->state), (int)circ->timestamp_created); + circuit_state_to_string(circ->state), + (long)circ->timestamp_created.tv_sec); if (CIRCUIT_IS_ORIGIN(circ)) { /* circ starts at this node */ circuit_log_path(severity, LD_CIRC, TO_ORIGIN_CIRCUIT(circ)); } @@ -631,7 +721,7 @@ tor_addr_eq(&circ->n_hop->addr, &conn->addr) && circ->n_hop->port == conn->port && conn->type == CONN_TYPE_OR && - !memcmp(TO_OR_CONN(conn)->identity_digest, + tor_memeq(TO_OR_CONN(conn)->identity_digest, circ->n_hop->identity_digest, DIGEST_LEN)) { circuit_dump_details(severity, circ, conn->conn_array_index, (circ->state == CIRCUIT_STATE_OPEN && @@ -685,8 +775,8 @@ return found->circuit; return NULL; - /* The rest of this checks for bugs. Disabled by default. */ + /* We comment it out because coverity complains otherwise. { circuit_t *circ; for (circ=global_circuitlist;circ;circ = circ->next) { @@ -705,7 +795,7 @@ } } return NULL; - } + } */ } /** Return a circ such that: @@ -776,7 +866,7 @@ } /** Return a circ such that: - * - circ-\>rend_data-\>query is equal to rend_query, and + * - circ-\>rend_data-\>onion_address is equal to rend_query, and * - circ-\>purpose is equal to purpose. * * Return NULL if no such circuit exists. @@ -825,7 +915,7 @@ if (!digest) return TO_ORIGIN_CIRCUIT(circ); else if (TO_ORIGIN_CIRCUIT(circ)->rend_data && - !memcmp(TO_ORIGIN_CIRCUIT(circ)->rend_data->rend_pk_digest, + tor_memeq(TO_ORIGIN_CIRCUIT(circ)->rend_data->rend_pk_digest, digest, DIGEST_LEN)) return TO_ORIGIN_CIRCUIT(circ); } @@ -843,7 +933,7 @@ for (circ = global_circuitlist; circ; circ = circ->next) { if (! circ->marked_for_close && circ->purpose == purpose && - ! memcmp(TO_OR_CIRCUIT(circ)->rend_token, token, len)) + tor_memeq(TO_OR_CIRCUIT(circ)->rend_token, token, len)) return TO_OR_CIRCUIT(circ); } return NULL; @@ -891,6 +981,11 @@ int need_uptime = (flags & CIRCLAUNCH_NEED_UPTIME) != 0; int need_capacity = (flags & CIRCLAUNCH_NEED_CAPACITY) != 0; int internal = (flags & CIRCLAUNCH_IS_INTERNAL) != 0; + or_options_t *options = get_options(); + + /* Make sure we're not trying to create a onehop circ by + * cannibalization. */ + tor_assert(!(flags & CIRCLAUNCH_ONEHOP_TUNNEL)); log_debug(LD_CIRC, "Hunting for a circ to cannibalize: purpose %d, uptime %d, " @@ -907,14 +1002,15 @@ if ((!need_uptime || circ->build_state->need_uptime) && (!need_capacity || circ->build_state->need_capacity) && (internal == circ->build_state->is_internal) && - circ->remaining_relay_early_cells) { + circ->remaining_relay_early_cells && + !circ->build_state->onehop_tunnel) { if (info) { /* need to make sure we don't duplicate hops */ crypt_path_t *hop = circ->cpath; routerinfo_t *ri1 = router_get_by_digest(info->identity_digest); do { routerinfo_t *ri2; - if (!memcmp(hop->extend_info->identity_digest, + if (tor_memeq(hop->extend_info->identity_digest, info->identity_digest, DIGEST_LEN)) goto next; if (ri1 && @@ -924,6 +1020,19 @@ hop=hop->next; } while (hop!=circ->cpath); } + if (options->ExcludeNodes) { + /* Make sure no existing nodes in the circuit are excluded for + * general use. (This may be possible if StrictNodes is 0, and we + * thought we needed to use an otherwise excluded node for, say, a + * directory operation.) */ + crypt_path_t *hop = circ->cpath; + do { + if (routerset_contains_extendinfo(options->ExcludeNodes, + hop->extend_info)) + goto next; + hop = hop->next; + } while (hop != circ->cpath); + } if (!best || (best->build_state->need_uptime && !need_uptime)) best = circ; next: ; @@ -986,6 +1095,7 @@ * This is useful for letting the user change pseudonyms, so new * streams will not be linkable to old streams. */ +/* XXX023 this is a bad name for what this function does */ void circuit_expire_all_dirty_circs(void) { @@ -996,6 +1106,8 @@ if (CIRCUIT_IS_ORIGIN(circ) && !circ->marked_for_close && circ->timestamp_dirty) + /* XXXX023 This is a screwed-up way to say "This is too dirty + * for new circuits. */ circ->timestamp_dirty -= options->MaxCircuitDirtiness; } } @@ -1083,14 +1195,16 @@ tor_assert(ocirc->rend_data); /* treat this like getting a nack from it */ log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). " - "Removing from descriptor.", - safe_str(ocirc->rend_data->onion_address), - safe_str(build_state_get_exit_nickname(ocirc->build_state))); + "Removing from descriptor.", + safe_str_client(ocirc->rend_data->onion_address), + safe_str_client(build_state_get_exit_nickname(ocirc->build_state))); rend_client_remove_intro_point(ocirc->build_state->chosen_exit, ocirc->rend_data); } - if (circ->n_conn) + if (circ->n_conn) { + circuit_clear_cell_queue(circ, circ->n_conn); connection_or_send_destroy(circ->n_circ_id, circ->n_conn, reason); + } if (! CIRCUIT_IS_ORIGIN(circ)) { or_circuit_t *or_circ = TO_OR_CIRCUIT(circ); @@ -1114,8 +1228,10 @@ conn->on_circuit = NULL; } - if (or_circ->p_conn) + if (or_circ->p_conn) { + circuit_clear_cell_queue(circ, or_circ->p_conn); connection_or_send_destroy(or_circ->p_circ_id, or_circ->p_conn, reason); + } } else { origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ); edge_connection_t *conn; @@ -1236,11 +1352,6 @@ tor_assert(c == c2); } } -#if 0 /* false now that rendezvous exits are attached to p_streams */ - if (origin_circ) - for (conn = origin_circ->p_streams; conn; conn = conn->next_stream) - tor_assert(conn->_base.type == CONN_TYPE_AP); -#endif if (or_circ) for (conn = or_circ->n_streams; conn; conn = conn->next_stream) tor_assert(conn->_base.type == CONN_TYPE_EXIT); diff -Nru tor-0.2.1.30/src/or/circuitlist.h tor-0.2.2.35/src/or/circuitlist.h --- tor-0.2.1.30/src/or/circuitlist.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/circuitlist.h 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,61 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file circuitlist.h + * \brief Header file for circuitlist.c. + **/ + +#ifndef _TOR_CIRCUITLIST_H +#define _TOR_CIRCUITLIST_H + +circuit_t * _circuit_get_global_list(void); +const char *circuit_state_to_string(int state); +const char *circuit_purpose_to_controller_string(uint8_t purpose); +const char *circuit_purpose_to_string(uint8_t purpose); +void circuit_dump_by_conn(connection_t *conn, int severity); +void circuit_set_p_circid_orconn(or_circuit_t *circ, circid_t id, + or_connection_t *conn); +void circuit_set_n_circid_orconn(circuit_t *circ, circid_t id, + or_connection_t *conn); +void circuit_set_state(circuit_t *circ, uint8_t state); +void circuit_close_all_marked(void); +int32_t circuit_initial_package_window(void); +origin_circuit_t *origin_circuit_new(void); +or_circuit_t *or_circuit_new(circid_t p_circ_id, or_connection_t *p_conn); +circuit_t *circuit_get_by_circid_orconn(circid_t circ_id, + or_connection_t *conn); +int circuit_id_in_use_on_orconn(circid_t circ_id, or_connection_t *conn); +circuit_t *circuit_get_by_edge_conn(edge_connection_t *conn); +void circuit_unlink_all_from_or_conn(or_connection_t *conn, int reason); +origin_circuit_t *circuit_get_by_global_id(uint32_t id); +origin_circuit_t *circuit_get_by_rend_query_and_purpose(const char *rend_query, + uint8_t purpose); +origin_circuit_t *circuit_get_next_by_pk_and_purpose(origin_circuit_t *start, + const char *digest, uint8_t purpose); +or_circuit_t *circuit_get_rendezvous(const char *cookie); +or_circuit_t *circuit_get_intro_point(const char *digest); +origin_circuit_t *circuit_find_to_cannibalize(uint8_t purpose, + extend_info_t *info, int flags); +void circuit_mark_all_unused_circs(void); +void circuit_expire_all_dirty_circs(void); +void _circuit_mark_for_close(circuit_t *circ, int reason, + int line, const char *file); +int circuit_get_cpath_len(origin_circuit_t *circ); +crypt_path_t *circuit_get_cpath_hop(origin_circuit_t *circ, int hopnum); +void circuit_get_all_pending_on_or_conn(smartlist_t *out, + or_connection_t *or_conn); +int circuit_count_pending_on_or_conn(or_connection_t *or_conn); + +#define circuit_mark_for_close(c, reason) \ + _circuit_mark_for_close((c), (reason), __LINE__, _SHORT_FILE_) + +void assert_cpath_layer_ok(const crypt_path_t *cp); +void assert_circuit_ok(const circuit_t *c); +void circuit_free_all(void); + +#endif + diff -Nru tor-0.2.1.30/src/or/circuituse.c tor-0.2.2.35/src/or/circuituse.c --- tor-0.2.1.30/src/or/circuituse.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/circuituse.c 2011-12-15 16:28:37.000000000 +0000 @@ -10,6 +10,20 @@ **/ #include "or.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "circuituse.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "control.h" +#include "policies.h" +#include "rendclient.h" +#include "rendcommon.h" +#include "rendservice.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" /********* START VARIABLES **********/ @@ -17,7 +31,7 @@ /********* END VARIABLES ************/ -static void circuit_expire_old_circuits_clientside(time_t now); +static void circuit_expire_old_circuits_clientside(void); static void circuit_increment_failure_count(void); /** Return 1 if circ could be returned by circuit_get_best(). @@ -59,7 +73,8 @@ return 0; } - if (purpose == CIRCUIT_PURPOSE_C_GENERAL) + if (purpose == CIRCUIT_PURPOSE_C_GENERAL || + purpose == CIRCUIT_PURPOSE_C_REND_JOINED) if (circ->timestamp_dirty && circ->timestamp_dirty+get_options()->MaxCircuitDirtiness <= now) return 0; @@ -94,7 +109,7 @@ char digest[DIGEST_LEN]; if (hexdigest_to_digest(conn->chosen_exit_name, digest) < 0) return 0; /* broken digest, we don't want it */ - if (memcmp(digest, build_state->chosen_exit->identity_digest, + if (tor_memneq(digest, build_state->chosen_exit->identity_digest, DIGEST_LEN)) return 0; /* this is a circuit to somewhere else */ if (tor_digest_is_zero(digest)) { @@ -148,10 +163,14 @@ return 1; } else { if (a->timestamp_dirty || - a->timestamp_created > b->timestamp_created) + timercmp(&a->timestamp_created, &b->timestamp_created, >)) return 1; if (CIRCUIT_IS_ORIGIN(b) && TO_ORIGIN_CIRCUIT(b)->build_state->is_internal) + /* XXX023 what the heck is this internal thing doing here. I + * think we can get rid of it. circuit_is_acceptable() already + * makes sure that is_internal is exactly what we need it to + * be. -RD */ return 1; } break; @@ -190,7 +209,7 @@ int need_uptime, int need_internal) { circuit_t *circ, *best=NULL; - time_t now = time(NULL); + struct timeval now; int intro_going_on_but_too_old = 0; tor_assert(conn); @@ -199,17 +218,16 @@ purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT || purpose == CIRCUIT_PURPOSE_C_REND_JOINED); + tor_gettimeofday(&now); + for (circ=global_circuitlist;circ;circ = circ->next) { if (!circuit_is_acceptable(circ,conn,must_be_open,purpose, - need_uptime,need_internal,now)) + need_uptime,need_internal,now.tv_sec)) continue; -/* XXX022 make this 15 be a function of circuit finishing times we've - * seen lately, a la Fallon Chen's GSoC work -RD */ -#define REND_PARALLEL_INTRO_DELAY 15 if (purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT && - !must_be_open && circ->state != CIRCUIT_STATE_OPEN && - circ->timestamp_created + REND_PARALLEL_INTRO_DELAY < now) { + !must_be_open && circ->state != CIRCUIT_STATE_OPEN && + tv_mdiff(&now, &circ->timestamp_created) > circ_times.timeout_ms) { intro_going_on_but_too_old = 1; continue; } @@ -229,50 +247,70 @@ return best ? TO_ORIGIN_CIRCUIT(best) : NULL; } +#if 0 /** Check whether, according to the policies in options, the * circuit circ makes sense. */ -/* XXXX currently only checks Exclude{Exit}Nodes. It should check more. */ +/* XXXX currently only checks Exclude{Exit}Nodes; it should check more. + * Also, it doesn't have the right definition of an exit circuit. Also, + * it's never called. */ int circuit_conforms_to_options(const origin_circuit_t *circ, const or_options_t *options) { const crypt_path_t *cpath, *cpath_next = NULL; - for (cpath = circ->cpath; cpath && cpath_next != circ->cpath; - cpath = cpath_next) { + /* first check if it includes any excluded nodes */ + for (cpath = circ->cpath; cpath_next != circ->cpath; cpath = cpath_next) { cpath_next = cpath->next; - if (routerset_contains_extendinfo(options->ExcludeNodes, cpath->extend_info)) return 0; + } - if (cpath->next == circ->cpath) { - /* This is apparently the exit node. */ + /* then consider the final hop */ + if (routerset_contains_extendinfo(options->ExcludeExitNodes, + circ->cpath->prev->extend_info)) + return 0; - if (routerset_contains_extendinfo(options->ExcludeExitNodes, - cpath->extend_info)) - return 0; - } - } return 1; } +#endif /** Close all circuits that start at us, aren't open, and were born * at least CircuitBuildTimeout seconds ago. */ void -circuit_expire_building(time_t now) +circuit_expire_building(void) { - circuit_t *victim, *circ = global_circuitlist; - time_t general_cutoff = now - get_options()->CircuitBuildTimeout; - time_t begindir_cutoff = now - get_options()->CircuitBuildTimeout/2; - time_t introcirc_cutoff = begindir_cutoff; + circuit_t *victim, *next_circ = global_circuitlist; + /* circ_times.timeout_ms and circ_times.close_ms are from + * circuit_build_times_get_initial_timeout() if we haven't computed + * custom timeouts yet */ + struct timeval general_cutoff, begindir_cutoff, fourhop_cutoff, + cannibalize_cutoff, close_cutoff, extremely_old_cutoff; + struct timeval now; cpath_build_state_t *build_state; - while (circ) { - time_t cutoff; - victim = circ; - circ = circ->next; + tor_gettimeofday(&now); +#define SET_CUTOFF(target, msec) do { \ + long ms = tor_lround(msec); \ + struct timeval diff; \ + diff.tv_sec = ms / 1000; \ + diff.tv_usec = (int)((ms % 1000) * 1000); \ + timersub(&now, &diff, &target); \ + } while (0) + + SET_CUTOFF(general_cutoff, circ_times.timeout_ms); + SET_CUTOFF(begindir_cutoff, circ_times.timeout_ms / 2.0); + SET_CUTOFF(fourhop_cutoff, circ_times.timeout_ms * (4/3.0)); + SET_CUTOFF(cannibalize_cutoff, circ_times.timeout_ms / 2.0); + SET_CUTOFF(close_cutoff, circ_times.close_ms); + SET_CUTOFF(extremely_old_cutoff, circ_times.close_ms*2 + 1000); + + while (next_circ) { + struct timeval cutoff; + victim = next_circ; + next_circ = next_circ->next; if (!CIRCUIT_IS_ORIGIN(victim) || /* didn't originate here */ victim->marked_for_close) /* don't mess with marked circs */ continue; @@ -280,21 +318,21 @@ build_state = TO_ORIGIN_CIRCUIT(victim)->build_state; if (build_state && build_state->onehop_tunnel) cutoff = begindir_cutoff; - else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING) - cutoff = introcirc_cutoff; + else if (build_state && build_state->desired_path_len == 4 + && !TO_ORIGIN_CIRCUIT(victim)->has_opened) + cutoff = fourhop_cutoff; + else if (TO_ORIGIN_CIRCUIT(victim)->has_opened) + cutoff = cannibalize_cutoff; + else if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) + cutoff = close_cutoff; else cutoff = general_cutoff; - if (victim->timestamp_created > cutoff) + + if (timercmp(&victim->timestamp_created, &cutoff, >)) continue; /* it's still young, leave it alone */ #if 0 /* some debug logs, to help track bugs */ - if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING && - victim->timestamp_created <= introcirc_cutoff && - victim->timestamp_created > general_cutoff) - log_info(LD_REND|LD_CIRC, "Timing out introduction circuit which we " - "would not have done if it had been a general circuit."); - if (victim->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING && victim->purpose <= CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) { if (!victim->timestamp_dirty) @@ -330,7 +368,7 @@ * because that's set when they switch purposes */ if (TO_ORIGIN_CIRCUIT(victim)->rend_data || - victim->timestamp_dirty > cutoff) + victim->timestamp_dirty > cutoff.tv_sec) continue; break; case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED: @@ -339,10 +377,60 @@ * make an introduction attempt. so timestamp_dirty * will reflect the time since the last attempt. */ - if (victim->timestamp_dirty > cutoff) + if (victim->timestamp_dirty > cutoff.tv_sec) continue; break; } + } else { /* circuit not open, consider recording failure as timeout */ + int first_hop_succeeded = TO_ORIGIN_CIRCUIT(victim)->cpath && + TO_ORIGIN_CIRCUIT(victim)->cpath->state == CPATH_STATE_OPEN; + + if (TO_ORIGIN_CIRCUIT(victim)->p_streams != NULL) { + log_warn(LD_BUG, "Circuit %d (purpose %d, %s) has timed out, " + "yet has attached streams!", + TO_ORIGIN_CIRCUIT(victim)->global_identifier, + victim->purpose, + circuit_purpose_to_string(victim->purpose)); + tor_fragile_assert(); + continue; + } + + if (circuit_timeout_want_to_count_circ(TO_ORIGIN_CIRCUIT(victim)) && + circuit_build_times_enough_to_compute(&circ_times)) { + /* Circuits are allowed to last longer for measurement. + * Switch their purpose and wait. */ + if (victim->purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) { + control_event_circuit_status(TO_ORIGIN_CIRCUIT(victim), + CIRC_EVENT_FAILED, + END_CIRC_REASON_TIMEOUT); + victim->purpose = CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT; + /* Record this failure to check for too many timeouts + * in a row. This function does not record a time value yet + * (we do that later); it only counts the fact that we did + * have a timeout. */ + circuit_build_times_count_timeout(&circ_times, + first_hop_succeeded); + continue; + } + + /* + * If the circuit build time is much greater than we would have cut + * it off at, we probably had a suspend event along this codepath, + * and we should discard the value. + */ + if (timercmp(&victim->timestamp_created, &extremely_old_cutoff, <)) { + log_notice(LD_CIRC, + "Extremely large value for circuit build timeout: %lds. " + "Assuming clock jump. Purpose %d (%s)", + (long)(now.tv_sec - victim->timestamp_created.tv_sec), + victim->purpose, + circuit_purpose_to_string(victim->purpose)); + } else if (circuit_build_times_count_close(&circ_times, + first_hop_succeeded, + victim->timestamp_created.tv_sec)) { + circuit_build_times_set_timeout(&circ_times); + } + } } if (victim->n_conn) @@ -357,7 +445,10 @@ circuit_state_to_string(victim->state), victim->purpose); circuit_log_path(LOG_INFO,LD_CIRC,TO_ORIGIN_CIRCUIT(victim)); - circuit_mark_for_close(victim, END_CIRC_REASON_TIMEOUT); + if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) + circuit_mark_for_close(victim, END_CIRC_REASON_MEASUREMENT_EXPIRED); + else + circuit_mark_for_close(victim, END_CIRC_REASON_TIMEOUT); } } @@ -431,11 +522,11 @@ } /** Don't keep more than this many unused open circuits around. */ -#define MAX_UNUSED_OPEN_CIRCUITS 12 +#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. - * But if we have too many, close the not-so-useful ones. + * But put an upper bound on the total number of circuits. */ static void circuit_predict_and_launch_new(void) @@ -517,6 +608,19 @@ circuit_launch_by_router(CIRCUIT_PURPOSE_C_GENERAL, NULL, flags); 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. */ + if (num < MAX_UNUSED_OPEN_CIRCUITS-2 && + circuit_build_times_needs_circuits_now(&circ_times)) { + flags = CIRCLAUNCH_NEED_CAPACITY; + log_info(LD_CIRC, + "Have %d clean circs need another buildtime test circ.", num); + circuit_launch_by_router(CIRCUIT_PURPOSE_C_GENERAL, NULL, flags); + return; + } } /** Build a new test circuit every 5 minutes */ @@ -544,7 +648,7 @@ time_to_new_circuit = now + options->NewCircuitPeriod; if (proxy_mode(get_options())) addressmap_clean(now); - circuit_expire_old_circuits_clientside(now); + circuit_expire_old_circuits_clientside(); #if 0 /* disable for now, until predict-and-launch-new can cull leftovers */ circ = circuit_get_youngest_clean_open(CIRCUIT_PURPOSE_C_GENERAL); @@ -624,37 +728,77 @@ tor_fragile_assert(); } +/** If we haven't yet decided on a good timeout value for circuit + * building, we close idles circuits aggressively so we can get more + * data points. */ +#define IDLE_TIMEOUT_WHILE_LEARNING (10*60) + /** Find each circuit that has been unused for too long, or dirty * for too long and has no streams on it: mark it for close. */ static void -circuit_expire_old_circuits_clientside(time_t now) +circuit_expire_old_circuits_clientside(void) { circuit_t *circ; - time_t cutoff = now - get_options()->CircuitIdleTimeout; + struct timeval cutoff, now; + + tor_gettimeofday(&now); + cutoff = now; + + if (circuit_build_times_needs_circuits(&circ_times)) { + /* Circuits should be shorter lived if we need more of them + * for learning a good build timeout */ + cutoff.tv_sec -= IDLE_TIMEOUT_WHILE_LEARNING; + } else { + cutoff.tv_sec -= get_options()->CircuitIdleTimeout; + } for (circ = global_circuitlist; circ; circ = circ->next) { - if (circ->marked_for_close || ! CIRCUIT_IS_ORIGIN(circ)) + if (circ->marked_for_close || !CIRCUIT_IS_ORIGIN(circ)) continue; /* If the circuit has been dirty for too long, and there are no streams * on it, mark it for close. */ if (circ->timestamp_dirty && - circ->timestamp_dirty + get_options()->MaxCircuitDirtiness < now && + circ->timestamp_dirty + get_options()->MaxCircuitDirtiness < + now.tv_sec && !TO_ORIGIN_CIRCUIT(circ)->p_streams /* nothing attached */ ) { - log_debug(LD_CIRC, "Closing n_circ_id %d (dirty %d secs ago, " + log_debug(LD_CIRC, "Closing n_circ_id %d (dirty %ld sec ago, " "purpose %d)", - circ->n_circ_id, (int)(now - circ->timestamp_dirty), + circ->n_circ_id, (long)(now.tv_sec - circ->timestamp_dirty), circ->purpose); circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); - } else if (!circ->timestamp_dirty && - circ->state == CIRCUIT_STATE_OPEN && - circ->purpose == CIRCUIT_PURPOSE_C_GENERAL) { - if (circ->timestamp_created < cutoff) { - log_debug(LD_CIRC, - "Closing circuit that has been unused for %d seconds.", - (int)(now - circ->timestamp_created)); - circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); + } else if (!circ->timestamp_dirty && circ->state == CIRCUIT_STATE_OPEN) { + if (timercmp(&circ->timestamp_created, &cutoff, <)) { + if (circ->purpose == CIRCUIT_PURPOSE_C_GENERAL || + circ->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT || + circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO || + circ->purpose == CIRCUIT_PURPOSE_TESTING || + (circ->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING && + circ->purpose <= CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED) || + circ->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) { + log_debug(LD_CIRC, + "Closing circuit that has been unused for %ld msec.", + tv_mdiff(&circ->timestamp_created, &now)); + circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); + } else if (!TO_ORIGIN_CIRCUIT(circ)->is_ancient) { + /* Server-side rend joined circuits can end up really old, because + * they are reused by clients for longer than normal. The client + * controls their lifespan. (They never become dirty, because + * connection_exit_begin_conn() never marks anything as dirty.) + * Similarly, server-side intro circuits last a long time. */ + if (circ->purpose != CIRCUIT_PURPOSE_S_REND_JOINED && + circ->purpose != CIRCUIT_PURPOSE_S_INTRO) { + log_notice(LD_CIRC, + "Ancient non-dirty circuit %d is still around after " + "%ld milliseconds. Purpose: %d (%s)", + TO_ORIGIN_CIRCUIT(circ)->global_identifier, + tv_mdiff(&circ->timestamp_created, &now), + circ->purpose, + circuit_purpose_to_string(circ->purpose)); + TO_ORIGIN_CIRCUIT(circ)->is_ancient = 1; + } + } } } } @@ -794,6 +938,11 @@ { control_event_circuit_status(circ, CIRC_EVENT_BUILT, 0); + /* Remember that this circuit has finished building. Now if we start + * it building again later (e.g. by extending it), we will know not + * to consider its build time. */ + circ->has_opened = 1; + switch (TO_CIRCUIT(circ)->purpose) { case CIRCUIT_PURPOSE_C_ESTABLISH_REND: rend_client_rendcirc_has_opened(circ); @@ -846,15 +995,29 @@ * to blame, blame it. Also, avoid this relay for a while, and * fail any one-hop directory fetches destined for it. */ const char *n_conn_id = circ->cpath->extend_info->identity_digest; + int already_marked = 0; if (circ->_base.n_conn) { or_connection_t *n_conn = circ->_base.n_conn; + if (n_conn->is_bad_for_new_circs) { + /* We only want to blame this router when a fresh healthy + * connection fails. So don't mark this router as newly failed, + * since maybe this was just an old circuit attempt that's + * finally timing out now. Also, there's no need to blow away + * circuits/streams/etc, since the failure of an unhealthy conn + * doesn't tell us much about whether a healthy conn would + * succeed. */ + already_marked = 1; + } log_info(LD_OR, "Our circuit failed to get a response from the first hop " "(%s:%d). I'm going to try to rotate to a better connection.", n_conn->_base.address, n_conn->_base.port); n_conn->is_bad_for_new_circs = 1; + } else { + log_info(LD_OR, + "Our circuit died before the first hop with no connection"); } - if (n_conn_id) { + if (n_conn_id && !already_marked) { entry_guard_register_connect_status(n_conn_id, 0, 1, time(NULL)); /* if there are any one-hop streams waiting on this circuit, fail * them now so they can retry elsewhere. */ @@ -936,8 +1099,8 @@ if (exit) info = extend_info_from_router(exit); circ = circuit_launch_by_extend_info(purpose, info, flags); - if (info) - extend_info_free(info); + + extend_info_free(info); return circ; } @@ -969,13 +1132,14 @@ * internal circs rather than exit circs? -RD */ circ = circuit_find_to_cannibalize(purpose, extend_info, flags); if (circ) { - log_info(LD_CIRC,"Cannibalizing circ '%s' for purpose %d", - build_state_get_exit_nickname(circ->build_state), purpose); + log_info(LD_CIRC,"Cannibalizing circ '%s' for purpose %d (%s)", + build_state_get_exit_nickname(circ->build_state), purpose, + circuit_purpose_to_string(purpose)); circ->_base.purpose = purpose; /* reset the birth date of this circ, else expire_building * will see it and think it's been trying to build since it * began. */ - circ->_base.timestamp_created = time(NULL); + tor_gettimeofday(&circ->_base.timestamp_created); switch (purpose) { case CIRCUIT_PURPOSE_C_ESTABLISH_REND: case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO: @@ -1080,15 +1244,17 @@ int severity = LOG_NOTICE; /* FFFF if this is a tunneled directory fetch, don't yell * as loudly. the user doesn't even know it's happening. */ - if (options->UseBridges && bridges_known_but_down()) { + if (entry_list_is_constrained(options) && + entries_known_but_down(options)) { log_fn(severity, LD_APP|LD_DIR, - "Application request when we're believed to be " - "offline. Optimistically trying known bridges again."); - bridges_retry_all(); + "Application request when we haven't used client functionality " + "lately. Optimistically trying known %s again.", + options->UseBridges ? "bridges" : "entrynodes"); + entries_retry_all(options); } else if (!options->UseBridges || any_bridge_descriptors_known()) { log_fn(severity, LD_APP|LD_DIR, - "Application request when we're believed to be " - "offline. Optimistically trying directory fetches again."); + "Application request when we haven't used client functionality " + "lately. Optimistically trying directory fetches again."); routerlist_retry_directory_downloads(time(NULL)); } } @@ -1111,17 +1277,19 @@ need_uptime)) { log_notice(LD_APP, "No Tor server allows exit to %s:%d. Rejecting.", - safe_str(conn->socks_request->address), + safe_str_client(conn->socks_request->address), conn->socks_request->port); return -1; } } else { - /* XXXX022 Duplicates checks in connection_ap_handshake_attach_circuit */ + /* XXXX023 Duplicates checks in connection_ap_handshake_attach_circuit: + * refactor into a single function? */ routerinfo_t *router = router_get_by_nickname(conn->chosen_exit_name, 1); int opt = conn->chosen_exit_optional; if (router && !connection_ap_can_use_exit(conn, router)) { log_fn(opt ? LOG_INFO : LOG_WARN, LD_APP, - "Requested exit point '%s' would refuse request. %s.", + "Requested exit point '%s' is excluded or " + "would refuse request. %s.", conn->chosen_exit_name, opt ? "Trying others" : "Closing"); if (opt) { conn->chosen_exit_optional = 0; @@ -1152,19 +1320,14 @@ if (!extend_info) { log_info(LD_REND, "No intro points for '%s': re-fetching service descriptor.", - safe_str(conn->rend_data->onion_address)); - /* Fetch both, v0 and v2 rend descriptors in parallel. Use whichever - * arrives first. Exception: When using client authorization, only - * fetch v2 descriptors.*/ + safe_str_client(conn->rend_data->onion_address)); rend_client_refetch_v2_renddesc(conn->rend_data); - if (conn->rend_data->auth_type == REND_NO_AUTH) - rend_client_refetch_renddesc(conn->rend_data->onion_address); conn->_base.state = AP_CONN_STATE_RENDDESC_WAIT; return 0; } - log_info(LD_REND,"Chose '%s' as intro point for '%s'.", - extend_info->nickname, - safe_str(conn->rend_data->onion_address)); + log_info(LD_REND,"Chose %s as intro point for '%s'.", + extend_info_describe(extend_info), + safe_str_client(conn->rend_data->onion_address)); } /* If we have specified a particular exit node for our @@ -1193,7 +1356,7 @@ } if (tor_addr_from_str(&addr, conn->socks_request->address) < 0) { log_info(LD_DIR, "Broken address %s on tunnel conn. Closing.", - escaped_safe_str(conn->socks_request->address)); + escaped_safe_str_client(conn->socks_request->address)); return -1; } extend_info = extend_info_alloc(conn->chosen_exit_name+1, @@ -1235,10 +1398,20 @@ flags); } - if (extend_info) - extend_info_free(extend_info); + extend_info_free(extend_info); - if (desired_circuit_purpose != CIRCUIT_PURPOSE_C_GENERAL) { + if (desired_circuit_purpose == CIRCUIT_PURPOSE_C_GENERAL) { + /* We just caused a circuit to get built because of this stream. + * If this stream has caused a _lot_ of circuits to be built, that's + * a bad sign: we should tell the user. */ + if (conn->num_circuits_launched < NUM_CIRCUITS_LAUNCHED_THRESHOLD && + ++conn->num_circuits_launched == NUM_CIRCUITS_LAUNCHED_THRESHOLD) + log_info(LD_CIRC, "The application request to %s:%d has launched " + "%d circuits without finding one it likes.", + escaped_safe_str_client(conn->socks_request->address), + conn->socks_request->port, + conn->num_circuits_launched); + } else { /* help predict this next time */ rep_hist_note_used_internal(time(NULL), need_uptime, 1); if (circ) { @@ -1302,15 +1475,35 @@ } } -/** If an exit wasn't specifically chosen, save the history for future - * use. */ +/** Return true iff address is matched by one of the entries in + * TrackHostExits. */ +int +hostname_in_track_host_exits(or_options_t *options, const char *address) +{ + if (!options->TrackHostExits) + return 0; + SMARTLIST_FOREACH_BEGIN(options->TrackHostExits, const char *, cp) { + if (cp[0] == '.') { /* match end */ + if (cp[1] == '\0' || + !strcasecmpend(address, cp) || + !strcasecmp(address, &cp[1])) + return 1; + } else if (strcasecmp(cp, address) == 0) { + return 1; + } + } SMARTLIST_FOREACH_END(cp); + return 0; +} + +/** If an exit wasn't explicitly specified for conn, consider saving + * the exit that we *did* choose for use by future connections to + * conn's destination. + */ static void consider_recording_trackhost(edge_connection_t *conn, origin_circuit_t *circ) { - int found_needle = 0; or_options_t *options = get_options(); - size_t len; - char *new_address; + char *new_address = NULL; char fp[HEX_DIGEST_LEN+1]; /* Search the addressmap for this conn's destination. */ @@ -1320,18 +1513,8 @@ options->TrackHostExitsExpire)) return; /* nothing to track, or already mapped */ - SMARTLIST_FOREACH(options->TrackHostExits, const char *, cp, { - if (cp[0] == '.') { /* match end */ - if (cp[1] == '\0' || - !strcasecmpend(conn->socks_request->address, cp) || - !strcasecmp(conn->socks_request->address, &cp[1])) - found_needle = 1; - } else if (strcasecmp(cp, conn->socks_request->address) == 0) { - found_needle = 1; - } - }); - - if (!found_needle || !circ->build_state->chosen_exit) + if (!hostname_in_track_host_exits(options, conn->socks_request->address) || + !circ->build_state->chosen_exit) return; /* write down the fingerprint of the chosen exit, not the nickname, @@ -1340,12 +1523,7 @@ circ->build_state->chosen_exit->identity_digest, DIGEST_LEN); /* Add this exit/hostname pair to the addressmap. */ - len = strlen(conn->socks_request->address) + 1 /* '.' */ + - strlen(fp) + 1 /* '.' */ + - strlen("exit") + 1 /* '\0' */; - new_address = tor_malloc(len); - - tor_snprintf(new_address, len, "%s.%s.exit", + tor_asprintf(&new_address, "%s.%s.exit", conn->socks_request->address, fp); addressmap_register(conn->socks_request->address, new_address, @@ -1418,7 +1596,7 @@ LOG_INFO : LOG_NOTICE; log_fn(severity, LD_APP, "Tried for %d seconds to get a connection to %s:%d. Giving up.", - conn_age, safe_str(conn->socks_request->address), + conn_age, safe_str_client(conn->socks_request->address), conn->socks_request->port); return -1; } @@ -1447,7 +1625,8 @@ } if (router && !connection_ap_can_use_exit(conn, router)) { log_fn(opt ? LOG_INFO : LOG_WARN, LD_APP, - "Requested exit point '%s' would refuse request. %s.", + "Requested exit point '%s' is excluded or " + "would refuse request. %s.", conn->chosen_exit_name, opt ? "Trying others" : "Closing"); if (opt) { conn->chosen_exit_optional = 0; @@ -1461,7 +1640,7 @@ /* find the circuit that we should use, if there is one. */ retval = circuit_get_open_circ_or_launch( conn, CIRCUIT_PURPOSE_C_GENERAL, &circ); - if (retval < 1) // XXX021 if we totally fail, this still returns 0 -RD + if (retval < 1) // XXX022 if we totally fail, this still returns 0 -RD return retval; log_debug(LD_APP|LD_CIRC, @@ -1560,14 +1739,21 @@ "introduction. (stream %d sec old)", introcirc->_base.n_circ_id, rendcirc->_base.n_circ_id, conn_age); - if (rend_client_send_introduction(introcirc, rendcirc) < 0) { + switch (rend_client_send_introduction(introcirc, rendcirc)) { + case 0: /* success */ + rendcirc->_base.timestamp_dirty = time(NULL); + introcirc->_base.timestamp_dirty = time(NULL); + assert_circuit_ok(TO_CIRCUIT(rendcirc)); + assert_circuit_ok(TO_CIRCUIT(introcirc)); + return 0; + case -1: /* transient error */ + return 0; + case -2: /* permanent error */ + return -1; + default: /* oops */ + tor_fragile_assert(); return -1; } - rendcirc->_base.timestamp_dirty = time(NULL); - introcirc->_base.timestamp_dirty = time(NULL); - assert_circuit_ok(TO_CIRCUIT(rendcirc)); - assert_circuit_ok(TO_CIRCUIT(introcirc)); - return 0; } } diff -Nru tor-0.2.1.30/src/or/circuituse.h tor-0.2.2.35/src/or/circuituse.h --- tor-0.2.1.30/src/or/circuituse.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/circuituse.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,57 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file circuituse.h + * \brief Header file for circuituse.c. + **/ + +#ifndef _TOR_CIRCUITUSE_H +#define _TOR_CIRCUITUSE_H + +void circuit_expire_building(void); +void circuit_remove_handled_ports(smartlist_t *needed_ports); +int circuit_stream_is_being_handled(edge_connection_t *conn, uint16_t port, + int min); +#if 0 +int circuit_conforms_to_options(const origin_circuit_t *circ, + const or_options_t *options); +#endif +void circuit_build_needed_circs(time_t now); +void circuit_detach_stream(circuit_t *circ, edge_connection_t *conn); + +void circuit_expire_old_circuits_serverside(time_t now); + +void reset_bandwidth_test(void); +int circuit_enough_testing_circs(void); + +void circuit_has_opened(origin_circuit_t *circ); +void circuit_build_failed(origin_circuit_t *circ); + +/** Flag to set when a circuit should have only a single hop. */ +#define CIRCLAUNCH_ONEHOP_TUNNEL (1<<0) +/** Flag to set when a circuit needs to be built of high-uptime nodes */ +#define CIRCLAUNCH_NEED_UPTIME (1<<1) +/** Flag to set when a circuit needs to be built of high-capacity nodes */ +#define CIRCLAUNCH_NEED_CAPACITY (1<<2) +/** Flag to set when the last hop of a circuit doesn't need to be an + * exit node. */ +#define CIRCLAUNCH_IS_INTERNAL (1<<3) +origin_circuit_t *circuit_launch_by_extend_info(uint8_t purpose, + extend_info_t *info, + int flags); +origin_circuit_t *circuit_launch_by_router(uint8_t purpose, + routerinfo_t *exit, int flags); +void circuit_reset_failure_count(int timeout); +int connection_ap_handshake_attach_chosen_circuit(edge_connection_t *conn, + origin_circuit_t *circ, + crypt_path_t *cpath); +int connection_ap_handshake_attach_circuit(edge_connection_t *conn); + +int hostname_in_track_host_exits(or_options_t *options, const char *address); + +#endif + diff -Nru tor-0.2.1.30/src/or/command.c tor-0.2.2.35/src/or/command.c --- tor-0.2.1.30/src/or/command.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/command.c 2011-12-15 16:28:37.000000000 +0000 @@ -16,6 +16,19 @@ */ #include "or.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "command.h" +#include "connection.h" +#include "connection_or.h" +#include "config.h" +#include "control.h" +#include "cpuworker.h" +#include "hibernate.h" +#include "onion.h" +#include "relay.h" +#include "router.h" +#include "routerlist.h" /** How many CELL_PADDING cells have we received, ever? */ uint64_t stats_n_padding_cells_processed = 0; @@ -119,6 +132,9 @@ #define PROCESS_CELL(tp, cl, cn) command_process_ ## tp ## _cell(cl, cn) #endif + if (conn->_base.marked_for_close) + return; + /* Reject all but VERSIONS and NETINFO when handshaking. */ if (handshaking && cell->command != CELL_VERSIONS && cell->command != CELL_NETINFO) @@ -192,6 +208,9 @@ } #endif + if (conn->_base.marked_for_close) + return; + /* reject all when not handshaking. */ if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING) return; @@ -219,6 +238,7 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn) { or_circuit_t *circ; + or_options_t *options = get_options(); int id_is_high; if (we_are_hibernating()) { @@ -230,9 +250,11 @@ return; } - if (!server_mode(get_options())) { + if (!server_mode(options) || + (!public_server_mode(options) && conn->is_outgoing)) { log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, - "Received create cell (type %d) from %s:%d, but we're a client. " + "Received create cell (type %d) from %s:%d, but we're connected " + "to it as a client. " "Sending back a destroy.", (int)cell->command, conn->_base.address, conn->_base.port); connection_or_send_destroy(cell->circ_id, conn, @@ -261,8 +283,8 @@ cell->circ_id, (int)(time(NULL) - conn->_base.timestamp_created)); if (router) log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, - "Details: nickname \"%s\", platform %s.", - router->nickname, escaped(router->platform)); + "Details: router %s, platform %s.", + router_describe(router), escaped(router->platform)); return; } @@ -275,7 +297,14 @@ /* hand it off to the cpuworkers, and then return. */ if (assign_onionskin_to_cpuworker(NULL, circ, onionskin) < 0) { - log_warn(LD_GENERAL,"Failed to hand off onionskin. Closing."); +#define WARN_HANDOFF_FAILURE_INTERVAL (6*60*60) + static ratelim_t handoff_warning = + RATELIM_INIT(WARN_HANDOFF_FAILURE_INTERVAL); + char *m; + if ((m = rate_limit_log(&handoff_warning, approx_time()))) { + log_warn(LD_GENERAL,"Failed to hand off onionskin. Closing.%s",m); + tor_free(m); + } circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); return; } @@ -285,7 +314,13 @@ * a CPU worker. */ char keys[CPATH_KEY_MATERIAL_LEN]; char reply[DIGEST_LEN*2]; + tor_assert(cell->command == CELL_CREATE_FAST); + + /* Make sure we never try to use the OR connection on which we + * received this cell to satisfy an EXTEND request, */ + conn->is_connection_with_client = 1; + if (fast_server_handshake(cell->payload, (uint8_t*)reply, (uint8_t*)keys, sizeof(keys))<0) { log_warn(LD_OR,"Failed to generate key material. Closing."); @@ -396,15 +431,18 @@ * gotten no more than MAX_RELAY_EARLY_CELLS_PER_CIRCUIT of them. */ if (cell->command == CELL_RELAY_EARLY) { if (direction == CELL_DIRECTION_IN) { - /* XXX Allow an unlimited number of inbound relay_early cells for - * now, for hidden service compatibility. See bug 1038. -RD */ + /* Allow an unlimited number of inbound relay_early cells, + * for hidden service compatibility. There isn't any way to make + * a long circuit through inbound relay_early cells anyway. See + * bug 1038. -RD */ } else { or_circuit_t *or_circ = TO_OR_CIRCUIT(circ); if (or_circ->remaining_relay_early_cells == 0) { log_fn(LOG_PROTOCOL_WARN, LD_OR, "Received too many RELAY_EARLY cells on circ %d from %s:%d." " Closing circuit.", - cell->circ_id, safe_str(conn->_base.address), conn->_base.port); + cell->circ_id, safe_str(conn->_base.address), + conn->_base.port); circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL); return; } @@ -512,7 +550,8 @@ conn->handshake_state->received_versions = 1; log_info(LD_OR, "Negotiated version %d with %s:%d; sending NETINFO.", - highest_supported_version, safe_str(conn->_base.address), + highest_supported_version, + safe_str_client(conn->_base.address), conn->_base.port); tor_assert(conn->link_proto >= 2); @@ -621,14 +660,15 @@ /* XXX maybe act on my_apparent_addr, if the source is sufficiently * trustworthy. */ + (void)my_apparent_addr; if (connection_or_set_state_open(conn)<0) connection_mark_for_close(TO_CONN(conn)); else log_info(LD_OR, "Got good NETINFO cell from %s:%d; OR connection is now " "open, using protocol version %d", - safe_str(conn->_base.address), conn->_base.port, - (int)conn->link_proto); + safe_str_client(conn->_base.address), + conn->_base.port, (int)conn->link_proto); assert_connection_ok(TO_CONN(conn),time(NULL)); } diff -Nru tor-0.2.1.30/src/or/command.h tor-0.2.2.35/src/or/command.h --- tor-0.2.1.30/src/or/command.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/command.h 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,25 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file command.h + * \brief Header file for command.c. + **/ + +#ifndef _TOR_COMMAND_H +#define _TOR_COMMAND_H + +void command_process_cell(cell_t *cell, or_connection_t *conn); +void command_process_var_cell(var_cell_t *cell, or_connection_t *conn); + +extern uint64_t stats_n_padding_cells_processed; +extern uint64_t stats_n_create_cells_processed; +extern uint64_t stats_n_created_cells_processed; +extern uint64_t stats_n_relay_cells_processed; +extern uint64_t stats_n_destroy_cells_processed; + +#endif + diff -Nru tor-0.2.1.30/src/or/config.c tor-0.2.2.35/src/or/config.c --- tor-0.2.1.30/src/or/config.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/config.c 2011-12-15 16:28:37.000000000 +0000 @@ -12,15 +12,41 @@ #define CONFIG_PRIVATE #include "or.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "connection_or.h" +#include "control.h" +#include "cpuworker.h" +#include "dirserv.h" +#include "dirvote.h" +#include "dns.h" +#include "geoip.h" +#include "hibernate.h" +#include "main.h" +#include "networkstatus.h" +#include "policies.h" +#include "relay.h" +#include "rendclient.h" +#include "rendservice.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" #ifdef MS_WINDOWS #include #endif +#include "procmon.h" + /** Enumeration of types which option values can take */ typedef enum config_type_t { CONFIG_TYPE_STRING = 0, /**< An arbitrary string. */ CONFIG_TYPE_FILENAME, /**< A filename: some prefixes get expanded. */ CONFIG_TYPE_UINT, /**< A non-negative integer less than MAX_INT */ + CONFIG_TYPE_PORT, /**< A port from 1...65535, 0 for "not set", or + * "auto". */ CONFIG_TYPE_INTERVAL, /**< A number of seconds, with optional units*/ CONFIG_TYPE_MEMUNIT, /**< A number of bytes, with optional units*/ CONFIG_TYPE_DOUBLE, /**< A floating-point value */ @@ -61,11 +87,12 @@ PLURAL(LongLivedPort), PLURAL(HiddenServiceNode), PLURAL(HiddenServiceExcludeNode), - PLURAL(NumCpu), + PLURAL(NumCPU), PLURAL(RendNode), PLURAL(RendExcludeNode), PLURAL(StrictEntryNode), PLURAL(StrictExitNode), + PLURAL(StrictNode), { "l", "Log", 1, 0}, { "AllowUnverifiedNodes", "AllowInvalidNodes", 0, 0}, { "AutomapHostSuffixes", "AutomapHostsSuffixes", 0, 0}, @@ -83,10 +110,12 @@ { "NumEntryNodes", "NumEntryGuards", 0, 0}, { "ResolvConf", "ServerDNSResolvConfFile", 0, 1}, { "SearchDomains", "ServerDNSSearchDomains", 0, 1}, - { "ServerDNSAllowBrokenResolvConf", "ServerDNSAllowBrokenConfig", 0, 0 }, + { "ServerDNSAllowBrokenResolvConf", "ServerDNSAllowBrokenConfig", 0, 0}, { "PreferTunnelledDirConns", "PreferTunneledDirConns", 0, 0}, { "BridgeAuthoritativeDirectory", "BridgeAuthoritativeDir", 0, 0}, { "HashedControlPassword", "__HashedControlSessionPassword", 1, 0}, + { "StrictEntryNodes", "StrictNodes", 0, 1}, + { "StrictExitNodes", "StrictNodes", 0, 1}, { NULL, NULL, 0, 0}, }; @@ -134,6 +163,7 @@ V(AccountingMax, MEMUNIT, "0 bytes"), V(AccountingStart, STRING, NULL), V(Address, STRING, NULL), + V(AllowDotExit, BOOL, "0"), V(AllowInvalidNodes, CSV, "middle,rendezvous"), V(AllowNonRFC953Hostnames, BOOL, "0"), V(AllowSingleHopCircuits, BOOL, "0"), @@ -145,6 +175,8 @@ V(AuthDirBadDir, LINELIST, NULL), V(AuthDirBadExit, LINELIST, NULL), V(AuthDirInvalid, LINELIST, NULL), + V(AuthDirFastGuarantee, MEMUNIT, "20 KB"), + V(AuthDirGuardBWGuarantee, MEMUNIT, "250 KB"), V(AuthDirReject, LINELIST, NULL), V(AuthDirRejectUnlisted, BOOL, "0"), V(AuthDirListBadDirs, BOOL, "0"), @@ -162,17 +194,26 @@ V(BridgePassword, STRING, NULL), V(BridgeRecordUsageByCountry, BOOL, "1"), V(BridgeRelay, BOOL, "0"), - V(CircuitBuildTimeout, INTERVAL, "1 minute"), + V(CellStatistics, BOOL, "0"), + V(LearnCircuitBuildTimeout, BOOL, "1"), + V(CircuitBuildTimeout, INTERVAL, "0"), V(CircuitIdleTimeout, INTERVAL, "1 hour"), + V(CircuitStreamTimeout, INTERVAL, "0"), + V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/ V(ClientDNSRejectInternalAddresses, BOOL,"1"), + V(ClientRejectInternalAddresses, BOOL, "1"), V(ClientOnly, BOOL, "0"), + V(ConsensusParams, STRING, NULL), V(ConnLimit, UINT, "1000"), V(ConstrainedSockets, BOOL, "0"), V(ConstrainedSockSize, MEMUNIT, "8192"), V(ContactInfo, STRING, NULL), V(ControlListenAddress, LINELIST, NULL), - V(ControlPort, UINT, "0"), + V(ControlPort, PORT, "0"), + V(ControlPortFileGroupReadable,BOOL, "0"), + V(ControlPortWriteToFile, FILENAME, NULL), V(ControlSocket, LINELIST, NULL), + V(ControlSocketsGroupWritable, BOOL, "0"), V(CookieAuthentication, BOOL, "0"), V(CookieAuthFileGroupReadable, BOOL, "0"), V(CookieAuthFile, STRING, NULL), @@ -183,21 +224,22 @@ V(DirListenAddress, LINELIST, NULL), OBSOLETE("DirFetchPeriod"), V(DirPolicy, LINELIST, NULL), - V(DirPort, UINT, "0"), + V(DirPort, PORT, "0"), V(DirPortFrontPage, FILENAME, NULL), OBSOLETE("DirPostPeriod"), -#ifdef ENABLE_GEOIP_STATS - V(DirRecordUsageByCountry, BOOL, "0"), - V(DirRecordUsageGranularity, UINT, "4"), - V(DirRecordUsageRetainIPs, INTERVAL, "14 days"), - V(DirRecordUsageSaveInterval, INTERVAL, "6 hours"), -#endif + OBSOLETE("DirRecordUsageByCountry"), + OBSOLETE("DirRecordUsageGranularity"), + OBSOLETE("DirRecordUsageRetainIPs"), + OBSOLETE("DirRecordUsageSaveInterval"), + V(DirReqStatistics, BOOL, "1"), VAR("DirServer", LINELIST, DirServers, NULL), - V(DNSPort, UINT, "0"), + V(DisableAllSwap, BOOL, "0"), + V(DNSPort, PORT, "0"), V(DNSListenAddress, LINELIST, NULL), V(DownloadExtraInfo, BOOL, "0"), V(EnforceDistinctSubnets, BOOL, "1"), V(EntryNodes, ROUTERSET, NULL), + V(EntryStatistics, BOOL, "0"), V(TestingEstimatedDescriptorPropagationTime, INTERVAL, "10 minutes"), V(ExcludeNodes, ROUTERSET, NULL), V(ExcludeExitNodes, ROUTERSET, NULL), @@ -205,23 +247,36 @@ V(ExitNodes, ROUTERSET, NULL), V(ExitPolicy, LINELIST, NULL), V(ExitPolicyRejectPrivate, BOOL, "1"), + V(ExitPortStatistics, BOOL, "0"), + V(ExtraInfoStatistics, BOOL, "1"), + +#if defined (WINCE) + V(FallbackNetworkstatusFile, FILENAME, "fallback-consensus"), +#else V(FallbackNetworkstatusFile, FILENAME, SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "fallback-consensus"), +#endif V(FascistFirewall, BOOL, "0"), V(FirewallPorts, CSV, ""), V(FastFirstHopPK, BOOL, "1"), V(FetchDirInfoEarly, BOOL, "0"), + V(FetchDirInfoExtraEarly, BOOL, "0"), V(FetchServerDescriptors, BOOL, "1"), V(FetchHidServDescriptors, BOOL, "1"), V(FetchUselessDescriptors, BOOL, "0"), + V(FetchV2Networkstatus, BOOL, "0"), #ifdef WIN32 V(GeoIPFile, FILENAME, ""), #else V(GeoIPFile, FILENAME, SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "geoip"), #endif + V(GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays, + BOOL, "0"), OBSOLETE("Group"), V(HardwareAccel, BOOL, "0"), + V(AccelName, STRING, NULL), + V(AccelDir, FILENAME, NULL), V(HashedControlPassword, LINELIST, NULL), V(HidServDirectoryV2, BOOL, "1"), VAR("HiddenServiceDir", LINELIST_S, RendConfigLines, NULL), @@ -233,14 +288,19 @@ VAR("HiddenServiceAuthorizeClient",LINELIST_S,RendConfigLines, NULL), V(HidServAuth, LINELIST, NULL), V(HSAuthoritativeDir, BOOL, "0"), - V(HSAuthorityRecordStats, BOOL, "0"), - V(HttpProxy, STRING, NULL), - V(HttpProxyAuthenticator, STRING, NULL), - V(HttpsProxy, STRING, NULL), - V(HttpsProxyAuthenticator, STRING, NULL), + OBSOLETE("HSAuthorityRecordStats"), + V(HTTPProxy, STRING, NULL), + V(HTTPProxyAuthenticator, STRING, NULL), + V(HTTPSProxy, STRING, NULL), + V(HTTPSProxyAuthenticator, STRING, NULL), + V(Socks4Proxy, STRING, NULL), + V(Socks5Proxy, STRING, NULL), + V(Socks5ProxyUsername, STRING, NULL), + V(Socks5ProxyPassword, STRING, NULL), OBSOLETE("IgnoreVersion"), V(KeepalivePeriod, INTERVAL, "5 minutes"), VAR("Log", LINELIST, Logs, NULL), + V(LogMessageDomains, BOOL, "0"), OBSOLETE("LinkPadding"), OBSOLETE("LogLevel"), OBSOLETE("LogFile"), @@ -254,17 +314,20 @@ V(MyFamily, STRING, NULL), V(NewCircuitPeriod, INTERVAL, "30 seconds"), VAR("NamingAuthoritativeDirectory",BOOL, NamingAuthoritativeDir, "0"), - V(NatdListenAddress, LINELIST, NULL), - V(NatdPort, UINT, "0"), + V(NATDListenAddress, LINELIST, NULL), + V(NATDPort, PORT, "0"), V(Nickname, STRING, NULL), - V(NoPublish, BOOL, "0"), + V(WarnUnsafeSocks, BOOL, "1"), + OBSOLETE("NoPublish"), VAR("NodeFamily", LINELIST, NodeFamilies, NULL), - V(NumCpus, UINT, "1"), + V(NumCPUs, UINT, "1"), V(NumEntryGuards, UINT, "3"), V(ORListenAddress, LINELIST, NULL), - V(ORPort, UINT, "0"), + V(ORPort, PORT, "0"), V(OutboundBindAddress, STRING, NULL), OBSOLETE("PathlenCoinWeight"), + V(PerConnBWBurst, MEMUNIT, "0"), + V(PerConnBWRate, MEMUNIT, "0"), V(PidFile, STRING, NULL), V(TestingTorNetwork, BOOL, "0"), V(PreferTunneledDirConns, BOOL, "1"), @@ -278,6 +341,7 @@ V(RecommendedClientVersions, LINELIST, NULL), V(RecommendedServerVersions, LINELIST, NULL), OBSOLETE("RedirectExit"), + V(RefuseUnknownExits, STRING, "auto"), V(RejectPlaintextPorts, CSV, ""), V(RelayBandwidthBurst, MEMUNIT, "0"), V(RelayBandwidthRate, MEMUNIT, "0"), @@ -287,8 +351,9 @@ V(RephistTrackTime, INTERVAL, "24 hours"), OBSOLETE("RouterFile"), V(RunAsDaemon, BOOL, "0"), - V(RunTesting, BOOL, "0"), - V(SafeLogging, BOOL, "1"), +// V(RunTesting, BOOL, "0"), + OBSOLETE("RunTesting"), // currently unused + V(SafeLogging, STRING, "1"), V(SafeSocks, BOOL, "0"), V(ServerDNSAllowBrokenConfig, BOOL, "1"), V(ServerDNSAllowNonRFC953Hostnames, BOOL,"0"), @@ -301,11 +366,10 @@ V(ShutdownWaitLength, INTERVAL, "30 seconds"), V(SocksListenAddress, LINELIST, NULL), V(SocksPolicy, LINELIST, NULL), - V(SocksPort, UINT, "9050"), + V(SocksPort, PORT, "9050"), V(SocksTimeout, INTERVAL, "2 minutes"), OBSOLETE("StatusFetchPeriod"), - V(StrictEntryNodes, BOOL, "0"), - V(StrictExitNodes, BOOL, "0"), + V(StrictNodes, BOOL, "0"), OBSOLETE("SysLog"), V(TestSocks, BOOL, "0"), OBSOLETE("TestVia"), @@ -313,7 +377,7 @@ V(TrackHostExitsExpire, INTERVAL, "30 minutes"), OBSOLETE("TrafficShaping"), V(TransListenAddress, LINELIST, NULL), - V(TransPort, UINT, "0"), + V(TransPort, PORT, "0"), V(TunnelDirConns, BOOL, "1"), V(UpdateBridgesFromAuthority, BOOL, "0"), V(UseBridges, BOOL, "0"), @@ -330,6 +394,7 @@ V(V3AuthDistDelay, INTERVAL, "5 minutes"), V(V3AuthNIntervalsValid, UINT, "3"), V(V3AuthUseLegacyKey, BOOL, "0"), + V(V3BandwidthsFile, FILENAME, NULL), VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"), V(VirtualAddrNetwork, STRING, "127.192.0.0/10"), V(WarnPlaintextPorts, CSV, "23,109,110,143"), @@ -339,7 +404,11 @@ VAR("__LeaveStreamsUnattached",BOOL, LeaveStreamsUnattached, "0"), VAR("__HashedControlSessionPassword", LINELIST, HashedControlSessionPassword, NULL), - V(MinUptimeHidServDirectoryV2, INTERVAL, "24 hours"), + VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL), + V(MinUptimeHidServDirectoryV2, INTERVAL, "25 hours"), + V(VoteOnHidServDirectoriesV2, BOOL, "1"), + V(_UsingTestNetworkDefaults, BOOL, "0"), + { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } }; @@ -353,6 +422,7 @@ V(AuthDirMaxServersPerAddr, UINT, "0"), V(AuthDirMaxServersPerAuthAddr,UINT, "0"), V(ClientDNSRejectInternalAddresses, BOOL,"0"), + V(ClientRejectInternalAddresses, BOOL, "0"), V(ExitPolicyRejectPrivate, BOOL, "0"), V(V3AuthVotingInterval, INTERVAL, "5 minutes"), V(V3AuthVoteDelay, INTERVAL, "20 seconds"), @@ -362,6 +432,8 @@ V(TestingV3AuthInitialDistDelay, INTERVAL, "20 seconds"), V(TestingAuthDirTimeToLearnReachability, INTERVAL, "0 minutes"), V(TestingEstimatedDescriptorPropagationTime, INTERVAL, "0 minutes"), + V(MinUptimeHidServDirectoryV2, INTERVAL, "0 minutes"), + V(_UsingTestNetworkDefaults, BOOL, "1"), { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } }; #undef VAR @@ -377,6 +449,9 @@ V(AccountingExpectedUsage, MEMUNIT, NULL), V(AccountingIntervalStart, ISOTIME, NULL), V(AccountingSecondsActive, INTERVAL, NULL), + V(AccountingSecondsToReachSoftLimit,INTERVAL, NULL), + V(AccountingSoftLimitHitAt, ISOTIME, NULL), + V(AccountingBytesAtSoftLimit, MEMUNIT, NULL), VAR("EntryGuard", LINELIST_S, EntryGuards, NULL), VAR("EntryGuardDownSince", LINELIST_S, EntryGuards, NULL), @@ -387,15 +462,30 @@ V(BWHistoryReadEnds, ISOTIME, NULL), V(BWHistoryReadInterval, UINT, "900"), V(BWHistoryReadValues, CSV, ""), + V(BWHistoryReadMaxima, CSV, ""), V(BWHistoryWriteEnds, ISOTIME, NULL), V(BWHistoryWriteInterval, UINT, "900"), V(BWHistoryWriteValues, CSV, ""), + V(BWHistoryWriteMaxima, CSV, ""), + V(BWHistoryDirReadEnds, ISOTIME, NULL), + V(BWHistoryDirReadInterval, UINT, "900"), + V(BWHistoryDirReadValues, CSV, ""), + V(BWHistoryDirReadMaxima, CSV, ""), + V(BWHistoryDirWriteEnds, ISOTIME, NULL), + V(BWHistoryDirWriteInterval, UINT, "900"), + V(BWHistoryDirWriteValues, CSV, ""), + V(BWHistoryDirWriteMaxima, CSV, ""), V(TorVersion, STRING, NULL), V(LastRotatedOnionKey, ISOTIME, NULL), V(LastWritten, ISOTIME, NULL), + V(TotalBuildTimes, UINT, NULL), + V(CircuitBuildAbandonedCount, UINT, "0"), + VAR("CircuitBuildTimeBin", LINELIST_S, BuildtimeHistogram, NULL), + VAR("BuildtimeHistogram", LINELIST_V, BuildtimeHistogram, NULL), + { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL } }; @@ -410,213 +500,6 @@ const char *description; } config_var_description_t; -/** Descriptions of the configuration options, to be displayed by online - * option browsers */ -/* XXXX022 did anybody want this? at all? If not, kill it.*/ -static config_var_description_t options_description[] = { - /* ==== general options */ - { "AvoidDiskWrites", "If non-zero, try to write to disk less frequently than" - " we would otherwise." }, - { "BandwidthRate", "A token bucket limits the average incoming bandwidth on " - "this node to the specified number of bytes per second." }, - { "BandwidthBurst", "Limit the maximum token buffer size (also known as " - "burst) to the given number of bytes." }, - { "ConnLimit", "Minimum number of simultaneous sockets we must have." }, - { "ConstrainedSockets", "Shrink tx and rx buffers for sockets to avoid " - "system limits on vservers and related environments. See man page for " - "more information regarding this option." }, - { "ConstrainedSockSize", "Limit socket buffers to this size when " - "ConstrainedSockets is enabled." }, - /* ControlListenAddress */ - { "ControlPort", "If set, Tor will accept connections from the same machine " - "(localhost only) on this port, and allow those connections to control " - "the Tor process using the Tor Control Protocol (described in " - "control-spec.txt).", }, - { "CookieAuthentication", "If this option is set to 1, don't allow any " - "connections to the control port except when the connecting process " - "can read a file that Tor creates in its data directory." }, - { "DataDirectory", "Store working data, state, keys, and caches here." }, - { "DirServer", "Tor only trusts directories signed with one of these " - "servers' keys. Used to override the standard list of directory " - "authorities." }, - /* { "FastFirstHopPK", "" }, */ - /* FetchServerDescriptors, FetchHidServDescriptors, - * FetchUselessDescriptors */ - { "HardwareAccel", "If set, Tor tries to use hardware crypto accelerators " - "when it can." }, - /* HashedControlPassword */ - { "HTTPProxy", "Force Tor to make all HTTP directory requests through this " - "host:port (or host:80 if port is not set)." }, - { "HTTPProxyAuthenticator", "A username:password pair to be used with " - "HTTPProxy." }, - { "HTTPSProxy", "Force Tor to make all TLS (SSL) connections through this " - "host:port (or host:80 if port is not set)." }, - { "HTTPSProxyAuthenticator", "A username:password pair to be used with " - "HTTPSProxy." }, - { "KeepalivePeriod", "Send a padding cell every N seconds to keep firewalls " - "from closing our connections while Tor is not in use." }, - { "Log", "Where to send logging messages. Format is " - "minSeverity[-maxSeverity] (stderr|stdout|syslog|file FILENAME)." }, - { "OutboundBindAddress", "Make all outbound connections originate from the " - "provided IP address (only useful for multiple network interfaces)." }, - { "PIDFile", "On startup, write our PID to this file. On clean shutdown, " - "remove the file." }, - { "PreferTunneledDirConns", "If non-zero, avoid directory servers that " - "don't support tunneled connections." }, - /* PreferTunneledDirConns */ - /* ProtocolWarnings */ - /* RephistTrackTime */ - { "RunAsDaemon", "If set, Tor forks and daemonizes to the background when " - "started. Unix only." }, - { "SafeLogging", "If set to 0, Tor logs potentially sensitive strings " - "rather than replacing them with the string [scrubbed]." }, - { "TunnelDirConns", "If non-zero, when a directory server we contact " - "supports it, we will build a one-hop circuit and make an encrypted " - "connection via its ORPort." }, - { "User", "On startup, setuid to this user." }, - - /* ==== client options */ - { "AllowInvalidNodes", "Where on our circuits should Tor allow servers " - "that the directory authorities haven't called \"valid\"?" }, - { "AllowNonRFC953Hostnames", "If set to 1, we don't automatically reject " - "hostnames for having invalid characters." }, - /* CircuitBuildTimeout, CircuitIdleTimeout */ - { "ClientOnly", "If set to 1, Tor will under no circumstances run as a " - "server, even if ORPort is enabled." }, - { "EntryNodes", "A list of preferred entry nodes to use for the first hop " - "in circuits, when possible." }, - /* { "EnforceDistinctSubnets" , "" }, */ - { "ExitNodes", "A list of preferred nodes to use for the last hop in " - "circuits, when possible." }, - { "ExcludeNodes", "A list of nodes never to use when building a circuit." }, - { "FascistFirewall", "If set, Tor will only create outgoing connections to " - "servers running on the ports listed in FirewallPorts." }, - { "FirewallPorts", "A list of ports that we can connect to. Only used " - "when FascistFirewall is set." }, - { "LongLivedPorts", "A list of ports for services that tend to require " - "high-uptime connections." }, - { "MapAddress", "Force Tor to treat all requests for one address as if " - "they were for another." }, - { "NewCircuitPeriod", "Force Tor to consider whether to build a new circuit " - "every NUM seconds." }, - { "MaxCircuitDirtiness", "Do not attach new streams to a circuit that has " - "been used more than this many seconds ago." }, - /* NatdPort, NatdListenAddress */ - { "NodeFamily", "A list of servers that constitute a 'family' and should " - "never be used in the same circuit." }, - { "NumEntryGuards", "How many entry guards should we keep at a time?" }, - /* PathlenCoinWeight */ - { "ReachableAddresses", "Addresses we can connect to, as IP/bits:port-port. " - "By default, we assume all addresses are reachable." }, - /* reachablediraddresses, reachableoraddresses. */ - /* SafeSOCKS */ - { "SOCKSPort", "The port where we listen for SOCKS connections from " - "applications." }, - { "SOCKSListenAddress", "Bind to this address to listen to connections from " - "SOCKS-speaking applications." }, - { "SOCKSPolicy", "Set an entry policy to limit which addresses can connect " - "to the SOCKSPort." }, - /* SocksTimeout */ - { "StrictExitNodes", "If set, Tor will fail to operate when none of the " - "configured ExitNodes can be used." }, - { "StrictEntryNodes", "If set, Tor will fail to operate when none of the " - "configured EntryNodes can be used." }, - /* TestSocks */ - { "TrackHostsExit", "Hosts and domains which should, if possible, be " - "accessed from the same exit node each time we connect to them." }, - { "TrackHostsExitExpire", "Time after which we forget which exit we were " - "using to connect to hosts in TrackHostsExit." }, - /* "TransPort", "TransListenAddress */ - { "UseEntryGuards", "Set to 0 if we want to pick from the whole set of " - "servers for the first position in each circuit, rather than picking a " - "set of 'Guards' to prevent profiling attacks." }, - - /* === server options */ - { "Address", "The advertised (external) address we should use." }, - /* Accounting* options. */ - /* AssumeReachable */ - { "ContactInfo", "Administrative contact information to advertise for this " - "server." }, - { "ExitPolicy", "Address/port ranges for which to accept or reject outgoing " - "connections on behalf of Tor users." }, - /* { "ExitPolicyRejectPrivate, "" }, */ - { "MaxAdvertisedBandwidth", "If set, we will not advertise more than this " - "amount of bandwidth for our bandwidth rate, regardless of how much " - "bandwidth we actually detect." }, - { "MaxOnionsPending", "Reject new attempts to extend circuits when we " - "already have this many pending." }, - { "MyFamily", "Declare a list of other servers as belonging to the same " - "family as this one, so that clients will not use two from the same " - "family in the same circuit." }, - { "Nickname", "Set the server nickname." }, - { "NoPublish", "{DEPRECATED}" }, - { "NumCPUs", "How many processes to use at once for public-key crypto." }, - { "ORPort", "Advertise this port to listen for connections from Tor clients " - "and servers." }, - { "ORListenAddress", "Bind to this address to listen for connections from " - "clients and servers, instead of the default 0.0.0.0:ORPort." }, - { "PublishServerDescriptor", "Set to 0 to keep the server from " - "uploading info to the directory authorities." }, - /* ServerDNS: DetectHijacking, ResolvConfFile, SearchDomains */ - { "ShutdownWaitLength", "Wait this long for clients to finish when " - "shutting down because of a SIGINT." }, - - /* === directory cache options */ - { "DirPort", "Serve directory information from this port, and act as a " - "directory cache." }, - { "DirPortFrontPage", "Serve a static html disclaimer on DirPort." }, - { "DirListenAddress", "Bind to this address to listen for connections from " - "clients and servers, instead of the default 0.0.0.0:DirPort." }, - { "DirPolicy", "Set a policy to limit who can connect to the directory " - "port." }, - - /* Authority options: AuthDirBadExit, AuthDirInvalid, AuthDirReject, - * AuthDirRejectUnlisted, AuthDirListBadExits, AuthoritativeDirectory, - * DirAllowPrivateAddresses, HSAuthoritativeDir, - * NamingAuthoritativeDirectory, RecommendedVersions, - * RecommendedClientVersions, RecommendedServerVersions, RendPostPeriod, - * RunTesting, V1AuthoritativeDirectory, VersioningAuthoritativeDirectory, */ - - /* Hidden service options: HiddenService: dir,excludenodes, nodes, - * options, port. PublishHidServDescriptor */ - - /* Nonpersistent options: __LeaveStreamsUnattached, __AllDirActionsPrivate */ - { NULL, NULL }, -}; - -/** Online description of state variables. */ -static config_var_description_t state_description[] = { - { "AccountingBytesReadInInterval", - "How many bytes have we read in this accounting period?" }, - { "AccountingBytesWrittenInInterval", - "How many bytes have we written in this accounting period?" }, - { "AccountingExpectedUsage", - "How many bytes did we expect to use per minute? (0 for no estimate.)" }, - { "AccountingIntervalStart", "When did this accounting period begin?" }, - { "AccountingSecondsActive", "How long have we been awake in this period?" }, - - { "BWHistoryReadEnds", "When does the last-recorded read-interval end?" }, - { "BWHistoryReadInterval", "How long is each read-interval (in seconds)?" }, - { "BWHistoryReadValues", "Number of bytes read in each interval." }, - { "BWHistoryWriteEnds", "When does the last-recorded write-interval end?" }, - { "BWHistoryWriteInterval", "How long is each write-interval (in seconds)?"}, - { "BWHistoryWriteValues", "Number of bytes written in each interval." }, - - { "EntryGuard", "One of the nodes we have chosen as a fixed entry" }, - { "EntryGuardDownSince", - "The last entry guard has been unreachable since this time." }, - { "EntryGuardUnlistedSince", - "The last entry guard has been unusable since this time." }, - - { "LastRotatedOnionKey", - "The last time at which we changed the medium-term private key used for " - "building circuits." }, - { "LastWritten", "When was this state file last regenerated?" }, - - { "TorVersion", "Which version of Tor generated this state file?" }, - { NULL, NULL }, -}; - /** Type of a callback to validate whether a given configuration is * well-formed and consistent. See options_trial_assign() for documentation * of arguments. */ @@ -635,8 +518,6 @@ config_var_t *vars; /**< List of variables we recognize, their default * values, and where we stick them in the structure. */ validate_fn_t validate_fn; /**< Function to validate config. */ - /** Documentation for configuration variables. */ - config_var_description_t *descriptions; /** If present, extra is a LINELIST variable for unrecognized * lines. Otherwise, unrecognized lines are an error. */ config_var_t *extra; @@ -693,27 +574,13 @@ static int or_state_load(void); static int options_init_logs(or_options_t *options, int validate_only); -static int is_listening_on_low_port(uint16_t port_option, +static int is_listening_on_low_port(int port_option, const config_line_t *listen_options); static uint64_t config_parse_memunit(const char *s, int *ok); static int config_parse_interval(const char *s, int *ok); static void init_libevent(void); static int opt_streq(const char *s1, const char *s2); -/** Versions of libevent. */ -typedef enum { - /* Note: we compare these, so it's important that "old" precede everything, - * and that "other" come last. */ - LE_OLD=0, LE_10C, LE_10D, LE_10E, LE_11, LE_11A, LE_11B, LE_12, LE_12A, - LE_13, LE_13A, LE_13B, LE_13C, LE_13D, LE_13E, - LE_140, LE_141, LE_142, LE_143, LE_144, LE_145, LE_146, LE_147, LE_148, - LE_1499, - LE_OTHER -} le_version_t; -static le_version_t decode_libevent_version(const char *v, int *bincompat_out); -#if defined(HAVE_EVENT_GET_VERSION) && defined(HAVE_EVENT_GET_METHOD) -static void check_libevent_version(const char *m, int server); -#endif /** Magic value for or_options_t. */ #define OR_OPTIONS_MAGIC 9090909 @@ -726,7 +593,6 @@ _option_abbrevs, _option_vars, (validate_fn_t)options_validate, - options_description, NULL }; @@ -747,7 +613,6 @@ _state_abbrevs, _state_vars, (validate_fn_t)or_state_validate, - state_description, &state_extra_var, }; @@ -812,13 +677,13 @@ "Acting on config options left us in a broken state. Dying."); exit(1); } - if (old_options) - config_free(&options_format, old_options); + + config_free(&options_format, old_options); return 0; } -extern const char tor_svn_revision[]; /* from tor_main.c */ +extern const char tor_git_revision[]; /* from tor_main.c */ /** The version of this Tor process, as parsed. */ static char *_version = NULL; @@ -827,7 +692,16 @@ const char * get_version(void) { - return VERSION; + if (_version == NULL) { + if (strlen(tor_git_revision)) { + size_t len = strlen(VERSION)+strlen(tor_git_revision)+16; + _version = tor_malloc(len); + tor_snprintf(_version, len, "%s (git-%s)", VERSION, tor_git_revision); + } else { + _version = tor_strdup(VERSION); + } + } + return _version; } /** Release additional memory allocated in options @@ -835,8 +709,10 @@ static void or_options_free(or_options_t *options) { - if (options->_ExcludeExitNodesUnion) - routerset_free(options->_ExcludeExitNodesUnion); + if (!options) + return; + + routerset_free(options->_ExcludeExitNodesUnion); config_free(&options_format, options); } @@ -845,43 +721,72 @@ void config_free_all(void) { - if (global_options) { - or_options_free(global_options); - global_options = NULL; - } - if (global_state) { - config_free(&state_format, global_state); - global_state = NULL; - } - if (global_cmdline_options) { - config_free_lines(global_cmdline_options); - global_cmdline_options = NULL; - } + or_options_free(global_options); + global_options = NULL; + + config_free(&state_format, global_state); + global_state = NULL; + + config_free_lines(global_cmdline_options); + global_cmdline_options = NULL; + tor_free(torrc_fname); tor_free(_version); tor_free(global_dirfrontpagecontents); } -/** If options->SafeLogging is on, return a not very useful string, - * else return address. +/** Make address -- a piece of information related to our operation as + * a client -- safe to log according to the settings in options->SafeLogging, + * and return it. + * + * (We return "[scrubbed]" if SafeLogging is "1", and address otherwise.) + */ +const char * +safe_str_client(const char *address) +{ + tor_assert(address); + if (get_options()->_SafeLogging == SAFELOG_SCRUB_ALL) + return "[scrubbed]"; + else + return address; +} + +/** Make address -- a piece of information of unspecified sensitivity + * -- safe to log according to the settings in options->SafeLogging, and + * return it. + * + * (We return "[scrubbed]" if SafeLogging is anything besides "0", and address + * otherwise.) */ const char * safe_str(const char *address) { tor_assert(address); - if (get_options()->SafeLogging) + if (get_options()->_SafeLogging != SAFELOG_SCRUB_NONE) return "[scrubbed]"; else return address; } +/** Equivalent to escaped(safe_str_client(address)). See reentrancy note on + * escaped(): don't use this outside the main thread, or twice in the same + * log statement. */ +const char * +escaped_safe_str_client(const char *address) +{ + if (get_options()->_SafeLogging == SAFELOG_SCRUB_ALL) + return "[scrubbed]"; + else + return escaped(address); +} + /** Equivalent to escaped(safe_str(address)). See reentrancy note on * escaped(): don't use this outside the main thread, or twice in the same * log statement. */ const char * escaped_safe_str(const char *address) { - if (get_options()->SafeLogging) + if (get_options()->_SafeLogging != SAFELOG_SCRUB_NONE) return "[scrubbed]"; else return escaped(address); @@ -1056,9 +961,15 @@ } #ifndef HAVE_SYS_UN_H - if (options->ControlSocket) { - *msg = tor_strdup("Unix domain sockets (ControlSocket) not supported" - " on this OS/with this build."); + if (options->ControlSocket || options->ControlSocketsGroupWritable) { + *msg = tor_strdup("Unix domain sockets (ControlSocket) not supported " + "on this OS/with this build."); + goto rollback; + } +#else + if (options->ControlSocketsGroupWritable && !options->ControlSocket) { + *msg = tor_strdup("Setting ControlSocketGroupWritable without setting" + "a ControlSocket makes no sense."); goto rollback; } #endif @@ -1080,10 +991,12 @@ } /* Launch the listeners. (We do this before we setuid, so we can bind to - * ports under 1024.) */ - if (retry_all_listeners(replaced_listeners, new_listeners) < 0) { - *msg = tor_strdup("Failed to bind one of the listener ports."); - goto rollback; + * ports under 1024.) We don't want to rebind if we're hibernating. */ + if (!we_are_hibernating()) { + if (retry_all_listeners(replaced_listeners, new_listeners) < 0) { + *msg = tor_strdup("Failed to bind one of the listener ports."); + goto rollback; + } } } @@ -1097,6 +1010,15 @@ } #endif + /* Attempt to lock all current and future memory with mlockall() only once */ + if (options->DisableAllSwap) { + if (tor_mlockall() == -1) { + *msg = tor_strdup("DisableAllSwap failure. Do you have proper " + "permissions?"); + goto done; + } + } + /* Setuid/setgid as appropriate */ if (options->User) { if (switch_id(options->User) != 0) { @@ -1108,26 +1030,27 @@ /* Ensure data directory is private; create if possible. */ if (check_private_dir(options->DataDirectory, - running_tor ? CPD_CREATE : CPD_CHECK)<0) { - char buf[1024]; - int tmp = tor_snprintf(buf, sizeof(buf), + running_tor ? CPD_CREATE : CPD_CHECK, + options->User)<0) { + tor_asprintf(msg, "Couldn't access/create private data directory \"%s\"", options->DataDirectory); - *msg = tor_strdup(tmp >= 0 ? buf : "internal error"); goto done; /* No need to roll back, since you can't change the value. */ } + /* Write control ports to disk as appropriate */ + control_ports_write_to_file(); + if (directory_caches_v2_dir_info(options)) { size_t len = strlen(options->DataDirectory)+32; char *fn = tor_malloc(len); tor_snprintf(fn, len, "%s"PATH_SEPARATOR"cached-status", options->DataDirectory); - if (check_private_dir(fn, running_tor ? CPD_CREATE : CPD_CHECK) < 0) { - char buf[1024]; - int tmp = tor_snprintf(buf, sizeof(buf), + if (check_private_dir(fn, running_tor ? CPD_CREATE : CPD_CHECK, + options->User) < 0) { + tor_asprintf(msg, "Couldn't access/create private data directory \"%s\"", fn); - *msg = tor_strdup(tmp >= 0 ? buf : "internal error"); tor_free(fn); goto done; } @@ -1227,7 +1150,6 @@ bw = options->MaxAdvertisedBandwidth; if (options->RelayBandwidthRate > 0 && bw > options->RelayBandwidthRate) bw = options->RelayBandwidthRate; - /* ensure_bandwidth_cap() makes sure that this cast can't overflow. */ return (uint32_t)bw; } @@ -1260,6 +1182,8 @@ or_options_t *options = get_options(); int running_tor = options->command == CMD_RUN_TOR; char *msg; + const int transition_affects_workers = + old_options && options_transition_affects_workers(old_options, options); if (running_tor && !have_lockfile()) { if (try_locking(options, 1) < 0) @@ -1270,7 +1194,7 @@ return -1; if (options->Bridges) { - clear_bridge_list(); + mark_bridge_list(); for (cl = options->Bridges; cl; cl = cl->next) { if (parse_bridge_line(cl->value, 0)<0) { log_warn(LD_BUG, @@ -1278,6 +1202,7 @@ return -1; } } + sweep_bridge_list(); } if (running_tor && rend_config_services(options, 0)<0) { @@ -1305,14 +1230,25 @@ return 0; /* Finish backgrounding the process */ - if (running_tor && options->RunAsDaemon) { + if (options->RunAsDaemon) { /* We may be calling this for the n'th time (on SIGHUP), but it's safe. */ finish_daemon(options->DataDirectory); } + /* We want to reinit keys as needed before we do much of anything else: + keys are important, and other things can depend on them. */ + if (transition_affects_workers || + (options->V3AuthoritativeDir && (!old_options || + !old_options->V3AuthoritativeDir))) { + if (init_keys() < 0) { + log_warn(LD_BUG,"Error initializing keys; exiting"); + return -1; + } + } + /* Write our PID to the PID file. If we do not have write permissions we * will log a warning */ - if (running_tor && options->PidFile) + if (options->PidFile) write_pidfile(options->PidFile); /* Register addressmap directives */ @@ -1331,6 +1267,8 @@ return -1; } + monitor_owning_controller_process(options->OwningControllerProcess); + /* reload keys as needed for rendezvous services. */ if (rend_service_load_keys()<0) { log_warn(LD_GENERAL,"Error loading rendezvous service keys"); @@ -1345,30 +1283,99 @@ if (accounting_is_enabled(options)) configure_accounting(time(NULL)); + /* parse RefuseUnknownExits tristate */ + if (!strcmp(options->RefuseUnknownExits, "0")) + options->RefuseUnknownExits_ = 0; + else if (!strcmp(options->RefuseUnknownExits, "1")) + options->RefuseUnknownExits_ = 1; + else if (!strcmp(options->RefuseUnknownExits, "auto")) + options->RefuseUnknownExits_ = -1; + else { + /* Should have caught this in options_validate */ + return -1; + } + + /* Change the cell EWMA settings */ + cell_ewma_set_scale_factor(options, networkstatus_get_latest_consensus()); + /* Check for transitions that need action. */ if (old_options) { - if (options->UseEntryGuards && !old_options->UseEntryGuards) { + int revise_trackexithosts = 0; + int revise_automap_entries = 0; + if ((options->UseEntryGuards && !old_options->UseEntryGuards) || + options->UseBridges != old_options->UseBridges || + (options->UseBridges && + !config_lines_eq(options->Bridges, old_options->Bridges)) || + !routerset_equal(old_options->ExcludeNodes,options->ExcludeNodes) || + !routerset_equal(old_options->ExcludeExitNodes, + options->ExcludeExitNodes) || + !routerset_equal(old_options->EntryNodes, options->EntryNodes) || + !routerset_equal(old_options->ExitNodes, options->ExitNodes) || + options->StrictNodes != old_options->StrictNodes) { log_info(LD_CIRC, - "Switching to entry guards; abandoning previous circuits"); + "Changed to using entry guards or bridges, or changed " + "preferred or excluded node lists. " + "Abandoning previous circuits."); circuit_mark_all_unused_circs(); circuit_expire_all_dirty_circs(); + revise_trackexithosts = 1; } + if (!smartlist_strings_eq(old_options->TrackHostExits, + options->TrackHostExits)) + revise_trackexithosts = 1; + + if (revise_trackexithosts) + addressmap_clear_excluded_trackexithosts(options); + + if (!options->AutomapHostsOnResolve) { + if (old_options->AutomapHostsOnResolve) + revise_automap_entries = 1; + } else { + if (!smartlist_strings_eq(old_options->AutomapHostsSuffixes, + options->AutomapHostsSuffixes)) + revise_automap_entries = 1; + else if (!opt_streq(old_options->VirtualAddrNetwork, + options->VirtualAddrNetwork)) + revise_automap_entries = 1; + } + + if (revise_automap_entries) + 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 + * 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. */ +#define RELAY_BRIDGE_STATS_DELAY (6 * 60 * 60) + if (! bool_eq(options->BridgeRelay, old_options->BridgeRelay)) { - log_info(LD_GENERAL, "Bridge status changed. Forgetting GeoIP stats."); - geoip_remove_old_clients(time(NULL)+(2*60*60)); + int was_relay = 0; + if (options->BridgeRelay) { + time_t int_start = time(NULL); + if (old_options->ORPort == options->ORPort) { + int_start += RELAY_BRIDGE_STATS_DELAY; + was_relay = 1; + } + geoip_bridge_stats_init(int_start); + log_info(LD_CONFIG, "We are acting as a bridge now. Starting new " + "GeoIP stats interval%s.", was_relay ? " in 6 " + "hours from now" : ""); + } else { + geoip_bridge_stats_term(); + log_info(LD_GENERAL, "We are no longer acting as a bridge. " + "Forgetting GeoIP stats."); + } } - if (options_transition_affects_workers(old_options, options)) { + if (transition_affects_workers) { log_info(LD_GENERAL, "Worker-related options changed. Rotating workers."); + if (server_mode(options) && !server_mode(old_options)) { - if (init_keys() < 0) { - log_warn(LD_BUG,"Error initializing keys; exiting"); - return -1; - } ip_address_changed(0); - if (has_completed_circuit || !any_predicted_circuits(time(NULL))) + if (can_complete_circuit || !any_predicted_circuits(time(NULL))) inform_testing_reachability(); } cpuworkers_rotate(); @@ -1379,8 +1386,9 @@ return -1; } - if (options->V3AuthoritativeDir && !old_options->V3AuthoritativeDir) - init_keys(); + if (options->PerConnBWRate != old_options->PerConnBWRate || + options->PerConnBWBurst != old_options->PerConnBWBurst) + connection_or_update_token_buckets(get_connection_array(), options); } /* Maybe load geoip file */ @@ -1389,7 +1397,7 @@ || !geoip_is_loaded())) { /* XXXX Don't use this "" junk; make our filename options * understand prefixes somehow. -NM */ - /* XXXX021 Reload GeoIPFile on SIGHUP. -NM */ + /* XXXX023 Reload GeoIPFile on SIGHUP. -NM */ char *actual_fname = tor_strdup(options->GeoIPFile); #ifdef WIN32 if (!strcmp(actual_fname, "")) { @@ -1403,17 +1411,80 @@ geoip_load_file(actual_fname, options); tor_free(actual_fname); } -#ifdef ENABLE_GEOIP_STATS - log_warn(LD_CONFIG, "We are configured to measure GeoIP statistics, but " - "the way these statistics are measured has changed " - "significantly in later versions of Tor. The results may not be " - "as expected if you are used to later versions. Be sure you " - "know what you are doing."); -#endif + + if (options->CellStatistics || options->DirReqStatistics || + options->EntryStatistics || options->ExitPortStatistics) { + time_t now = time(NULL); + int print_notice = 0; + + /* If we aren't acting as a server, we can't collect stats anyway. */ + if (!server_mode(options)) { + options->CellStatistics = 0; + options->DirReqStatistics = 0; + options->EntryStatistics = 0; + options->ExitPortStatistics = 0; + } + + if ((!old_options || !old_options->CellStatistics) && + options->CellStatistics) { + rep_hist_buffer_stats_init(now); + print_notice = 1; + } + if ((!old_options || !old_options->DirReqStatistics) && + options->DirReqStatistics) { + if (geoip_is_loaded()) { + geoip_dirreq_stats_init(now); + print_notice = 1; + } else { + options->DirReqStatistics = 0; + log_notice(LD_CONFIG, "Configured to measure directory request " + "statistics, but no GeoIP database found! " + "Please specify a GeoIP database using the " + "GeoIPFile option!"); + } + } + if ((!old_options || !old_options->EntryStatistics) && + options->EntryStatistics && !should_record_bridge_info(options)) { + if (geoip_is_loaded()) { + geoip_entry_stats_init(now); + print_notice = 1; + } else { + options->EntryStatistics = 0; + log_notice(LD_CONFIG, "Configured to measure entry node " + "statistics, but no GeoIP database found! " + "Please specify a GeoIP database using the " + "GeoIPFile option!"); + } + } + if ((!old_options || !old_options->ExitPortStatistics) && + options->ExitPortStatistics) { + rep_hist_exit_stats_init(now); + print_notice = 1; + } + if (print_notice) + log_notice(LD_CONFIG, "Configured to measure statistics. Look for " + "the *-stats files that will first be written to the " + "data directory in 24 hours from now."); + } + + if (old_options && old_options->CellStatistics && + !options->CellStatistics) + rep_hist_buffer_stats_term(); + if (old_options && old_options->DirReqStatistics && + !options->DirReqStatistics) + geoip_dirreq_stats_term(); + if (old_options && old_options->EntryStatistics && + !options->EntryStatistics) + geoip_entry_stats_term(); + if (old_options && old_options->ExitPortStatistics && + !options->ExitPortStatistics) + rep_hist_exit_stats_term(); + /* Check if we need to parse and add the EntryNodes config option. */ if (options->EntryNodes && (!old_options || - (!routerset_equal(old_options->EntryNodes,options->EntryNodes)))) + !routerset_equal(old_options->EntryNodes,options->EntryNodes) || + !routerset_equal(old_options->ExcludeNodes,options->ExcludeNodes))) entry_nodes_should_be_added(); /* Since our options changed, we might need to regenerate and upload our @@ -1421,7 +1492,7 @@ */ if (!old_options || options_transition_affects_descriptor(old_options, options)) - mark_my_descriptor_dirty(); + mark_my_descriptor_dirty("config change"); /* We may need to reschedule some directory stuff if our status changed. */ if (old_options) { @@ -1482,7 +1553,10 @@ fmt->abbrevs[i].abbreviated, fmt->abbrevs[i].full); } - return fmt->abbrevs[i].full; + /* Keep going through the list in case we want to rewrite it more. + * (We could imagine recursing here, but I don't want to get the + * user into an infinite loop if we craft our list wrong.) */ + option = fmt->abbrevs[i].full; } } return option; @@ -1527,7 +1601,10 @@ *new = tor_malloc_zero(sizeof(config_line_t)); s = argv[i]; - while (*s == '-') + /* Each keyword may be prefixed with one or two dashes. */ + if (*s == '-') + s++; + if (*s == '-') s++; (*new)->key = tor_strdup(expand_abbrev(&options_format, s, 1, 1)); @@ -1619,19 +1696,6 @@ } } -/** Return the description for a given configuration variable, or NULL if no - * description exists. */ -static const char * -config_find_description(config_format_t *fmt, const char *name) -{ - int i; - for (i=0; fmt->descriptions[i].name; ++i) { - if (!strcasecmp(name, fmt->descriptions[i].name)) - return fmt->descriptions[i].description; - } - return NULL; -} - /** If key is a configuration option, return the corresponding * config_var_t. Otherwise, if key is a non-standard abbreviation, * warn, and return the corresponding config_var_t. Otherwise return NULL. @@ -1662,6 +1726,16 @@ return NULL; } +/** Return the number of option entries in fmt. */ +static int +config_count_options(config_format_t *fmt) +{ + int i; + for (i=0; fmt->vars[i].name; ++i) + ; + return i; +} + /* * Functions to assign config options. */ @@ -1675,8 +1749,7 @@ config_assign_value(config_format_t *fmt, or_options_t *options, config_line_t *c, char **msg) { - int i, r, ok; - char buf[1024]; + int i, ok; config_var_t *var; void *lvalue; @@ -1689,13 +1762,20 @@ switch (var->type) { + case CONFIG_TYPE_PORT: + if (!strcasecmp(c->value, "auto")) { + *(int *)lvalue = CFG_AUTO_PORT; + break; + } + /* fall through */ case CONFIG_TYPE_UINT: - i = (int)tor_parse_long(c->value, 10, 0, INT_MAX, &ok, NULL); + i = (int)tor_parse_long(c->value, 10, 0, + var->type==CONFIG_TYPE_PORT ? 65535 : INT_MAX, + &ok, NULL); if (!ok) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "Int keyword '%s %s' is malformed or out of bounds.", c->key, c->value); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } *(int *)lvalue = i; @@ -1704,10 +1784,9 @@ case CONFIG_TYPE_INTERVAL: { i = config_parse_interval(c->value, &ok); if (!ok) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "Interval '%s %s' is malformed or out of bounds.", c->key, c->value); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } *(int *)lvalue = i; @@ -1717,10 +1796,9 @@ case CONFIG_TYPE_MEMUNIT: { uint64_t u64 = config_parse_memunit(c->value, &ok); if (!ok) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "Value '%s %s' is malformed or out of bounds.", c->key, c->value); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } *(uint64_t *)lvalue = u64; @@ -1730,10 +1808,9 @@ case CONFIG_TYPE_BOOL: i = (int)tor_parse_long(c->value, 10, 0, 1, &ok, NULL); if (!ok) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "Boolean '%s %s' expects 0 or 1.", c->key, c->value); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } *(int *)lvalue = i; @@ -1751,9 +1828,8 @@ case CONFIG_TYPE_ISOTIME: if (parse_iso_time(c->value, (time_t *)lvalue)) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "Invalid time '%s' for keyword '%s'", c->value, c->key); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } break; @@ -1764,9 +1840,8 @@ } *(routerset_t**)lvalue = routerset_new(); if (routerset_parse(*(routerset_t**)lvalue, c->value, c->key)<0) { - tor_snprintf(buf, sizeof(buf), "Invalid exit list '%s' for option '%s'", + tor_asprintf(msg, "Invalid exit list '%s' for option '%s'", c->value, c->key); - *msg = tor_strdup(buf); return -1; } break; @@ -1791,9 +1866,8 @@ log_warn(LD_CONFIG, "Skipping obsolete configuration option '%s'", c->key); break; case CONFIG_TYPE_LINELIST_V: - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "You may not provide a value for virtual option '%s'", c->key); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; default: tor_assert(0); @@ -1814,7 +1888,7 @@ static int config_assign_line(config_format_t *fmt, or_options_t *options, config_line_t *c, int use_defaults, - int clear_first, char **msg) + int clear_first, bitarray_t *options_seen, char **msg) { config_var_t *var; @@ -1829,13 +1903,12 @@ config_line_append((config_line_t**)lvalue, c->key, c->value); return 0; } else { - char buf[1024]; - int tmp = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "Unknown option '%s'. Failing.", c->key); - *msg = tor_strdup(tmp >= 0 ? buf : "internal error"); return -1; } } + /* Put keyword into canonical case. */ if (strcmp(var->name, c->key)) { tor_free(c->key); @@ -1858,6 +1931,18 @@ return 0; } + if (options_seen && (var->type != CONFIG_TYPE_LINELIST && + var->type != CONFIG_TYPE_LINELIST_S)) { + /* We're tracking which options we've seen, and this option is not + * supposed to occur more than once. */ + int var_index = (int)(var - fmt->vars); + if (bitarray_is_set(options_seen, var_index)) { + log_warn(LD_CONFIG, "Option '%s' used more than once; all but the last " + "value will be ignored.", var->name); + } + bitarray_set(options_seen, var_index); + } + if (config_assign_value(fmt, options, c, msg) < 0) return -2; return 0; @@ -1958,7 +2043,6 @@ { config_var_t *var; const void *value; - char buf[32]; config_line_t *result; tor_assert(options && key); @@ -1995,23 +2079,27 @@ } escape_val = 0; /* Can't need escape. */ break; + case CONFIG_TYPE_PORT: + if (*(int*)value == CFG_AUTO_PORT) { + result->value = tor_strdup("auto"); + escape_val = 0; + break; + } + /* fall through */ case CONFIG_TYPE_INTERVAL: case CONFIG_TYPE_UINT: /* This means every or_options_t uint or bool element * needs to be an int. Not, say, a uint16_t or char. */ - tor_snprintf(buf, sizeof(buf), "%d", *(int*)value); - result->value = tor_strdup(buf); + tor_asprintf(&result->value, "%d", *(int*)value); escape_val = 0; /* Can't need escape. */ break; case CONFIG_TYPE_MEMUNIT: - tor_snprintf(buf, sizeof(buf), U64_FORMAT, + tor_asprintf(&result->value, U64_FORMAT, U64_PRINTF_ARG(*(uint64_t*)value)); - result->value = tor_strdup(buf); escape_val = 0; /* Can't need escape. */ break; case CONFIG_TYPE_DOUBLE: - tor_snprintf(buf, sizeof(buf), "%f", *(double*)value); - result->value = tor_strdup(buf); + tor_asprintf(&result->value, "%f", *(double*)value); escape_val = 0; /* Can't need escape. */ break; case CONFIG_TYPE_BOOL: @@ -2130,6 +2218,8 @@ int use_defaults, int clear_first, char **msg) { config_line_t *p; + bitarray_t *options_seen; + const int n_options = config_count_options(fmt); CHECK(fmt, options); @@ -2149,14 +2239,18 @@ config_reset_line(fmt, options, p->key, use_defaults); } + options_seen = bitarray_init_zero(n_options); /* pass 3: assign. */ while (list) { int r; if ((r=config_assign_line(fmt, options, list, use_defaults, - clear_first, msg))) + clear_first, options_seen, msg))) { + bitarray_free(options_seen); return r; + } list = list->next; } + bitarray_free(options_seen); return 0; } @@ -2221,6 +2315,7 @@ break; case CONFIG_TYPE_INTERVAL: case CONFIG_TYPE_UINT: + case CONFIG_TYPE_PORT: case CONFIG_TYPE_BOOL: *(int*)lvalue = 0; break; @@ -2299,20 +2394,10 @@ smartlist_t *lines = smartlist_create(); for (i = 0; _option_vars[i].name; ++i) { config_var_t *var = &_option_vars[i]; - const char *desc; if (var->type == CONFIG_TYPE_OBSOLETE || var->type == CONFIG_TYPE_LINELIST_V) continue; - desc = config_find_description(&options_format, var->name); printf("%s\n", var->name); - if (desc) { - wrap_string(lines, desc, 76, " ", " "); - SMARTLIST_FOREACH(lines, char *, cp, { - printf("%s", cp); - tor_free(cp); - }); - smartlist_clear(lines); - } } smartlist_free(lines); } @@ -2331,7 +2416,7 @@ uint32_t *addr_out, char **hostname_out) { struct in_addr in; - uint32_t addr; + uint32_t addr; /* host order */ char hostname[256]; int explicit_ip=1; int explicit_hostname=1; @@ -2361,8 +2446,8 @@ if (tor_inet_aton(hostname, &in) == 0) { /* then we have to resolve it */ explicit_ip = 0; - if (tor_lookup_hostname(hostname, &addr)) { - uint32_t interface_ip; + if (tor_lookup_hostname(hostname, &addr)) { /* failed to resolve */ + uint32_t interface_ip; /* host order */ if (explicit_hostname) { log_fn(warn_severity, LD_CONFIG, @@ -2383,7 +2468,7 @@ log_fn(notice_severity, LD_CONFIG, "Learned IP address '%s' for " "local interface. Using that.", tmpbuf); strlcpy(hostname, "", sizeof(hostname)); - } else { + } else { /* resolved hostname into addr */ in.s_addr = htonl(addr); if (!explicit_hostname && @@ -2486,7 +2571,7 @@ if (get_options()->EnforceDistinctSubnets == 0) return 0; if (tor_addr_family(addr) == AF_INET) { - /*XXXX022 IP6 what corresponds to an /24? */ + /*XXXX023 IP6 what corresponds to an /24? */ uint32_t ip = tor_addr_to_ipv4h(addr); /* It's possible that this next check will hit before the first time @@ -2503,61 +2588,16 @@ return 0; } -/** Called when we don't have a nickname set. Try to guess a good nickname - * based on the hostname, and return it in a newly allocated string. If we - * can't, return NULL and let the caller warn if it wants to. */ -static char * -get_default_nickname(void) -{ - static const char * const bad_default_nicknames[] = { - "localhost", - NULL, - }; - char localhostname[256]; - char *cp, *out, *outp; - int i; - - if (gethostname(localhostname, sizeof(localhostname)) < 0) - return NULL; - - /* Put it in lowercase; stop at the first dot. */ - if ((cp = strchr(localhostname, '.'))) - *cp = '\0'; - tor_strlower(localhostname); - - /* Strip invalid characters. */ - cp = localhostname; - out = outp = tor_malloc(strlen(localhostname) + 1); - while (*cp) { - if (strchr(LEGAL_NICKNAME_CHARACTERS, *cp)) - *outp++ = *cp++; - else - cp++; - } - *outp = '\0'; - - /* Enforce length. */ - if (strlen(out) > MAX_NICKNAME_LEN) - out[MAX_NICKNAME_LEN]='\0'; - - /* Check for dumb names. */ - for (i = 0; bad_default_nicknames[i]; ++i) { - if (!strcmp(out, bad_default_nicknames[i])) { - tor_free(out); - return NULL; - } - } - - return out; -} - /** Release storage held by options. */ static void config_free(config_format_t *fmt, void *options) { int i; - tor_assert(options); + if (!options) + return; + + tor_assert(fmt); for (i=0; fmt->vars[i].name; ++i) option_clear(fmt, options, &(fmt->vars[i])); @@ -2655,10 +2695,12 @@ * it is, or 0 if it isn't or the concept of a low port isn't applicable for * the platform we're on. */ static int -is_listening_on_low_port(uint16_t port_option, +is_listening_on_low_port(int port_option, const config_line_t *listen_options) { #ifdef MS_WINDOWS + (void) port_option; + (void) listen_options; return 0; /* No port is too low for windows. */ #else const config_line_t *l; @@ -2708,7 +2750,6 @@ config_line_t *line, *assigned; char *result; int i; - const char *desc; char *msg = NULL; defaults = config_alloc(fmt); @@ -2736,24 +2777,13 @@ option_is_same(fmt, options, defaults, fmt->vars[i].name)) comment_option = 1; - desc = config_find_description(fmt, fmt->vars[i].name); line = assigned = get_assigned_option(fmt, options, fmt->vars[i].name, 1); - if (line && desc) { - /* Only dump the description if there's something to describe. */ - wrap_string(elements, desc, 78, "# ", "# "); - } - for (; line; line = line->next) { - size_t len = strlen(line->key) + strlen(line->value) + 5; char *tmp; - tmp = tor_malloc(len); - if (tor_snprintf(tmp, len, "%s%s %s\n", - comment_option ? "# " : "", - line->key, line->value)<0) { - log_err(LD_BUG,"Internal error writing option value"); - tor_assert(0); - } + tor_asprintf(&tmp, "%s%s %s\n", + comment_option ? "# " : "", + line->key, line->value); smartlist_add(elements, tmp); } config_free_lines(assigned); @@ -2762,13 +2792,8 @@ if (fmt->extra) { line = *(config_line_t**)STRUCT_VAR_P(options, fmt->extra->var_offset); for (; line; line = line->next) { - size_t len = strlen(line->key) + strlen(line->value) + 3; char *tmp; - tmp = tor_malloc(len); - if (tor_snprintf(tmp, len, "%s %s\n", line->key, line->value)<0) { - log_err(LD_BUG,"Internal error writing option value"); - tor_assert(0); - } + tor_asprintf(&tmp, "%s %s\n", line->key, line->value); smartlist_add(elements, tmp); } } @@ -2784,7 +2809,7 @@ * the configuration in options. If minimal is true, do not * include options that are the same as Tor's defaults. */ -static char * +char * options_dump(or_options_t *options, int minimal) { return config_dump(&options_format, options, minimal, 0); @@ -2797,7 +2822,6 @@ validate_ports_csv(smartlist_t *sl, const char *name, char **msg) { int i; - char buf[1024]; tor_assert(name); if (!sl) @@ -2807,9 +2831,7 @@ { i = atoi(cp); if (i < 1 || i > 65535) { - int r = tor_snprintf(buf, sizeof(buf), - "Port '%s' out of range in %s", cp, name); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); + tor_asprintf(msg, "Port '%s' out of range in %s", cp, name); return -1; } }); @@ -2823,18 +2845,15 @@ static int ensure_bandwidth_cap(uint64_t *value, const char *desc, char **msg) { - int r; - char buf[1024]; if (*value > ROUTER_MAX_DECLARED_BANDWIDTH) { /* This handles an understandable special case where somebody says "2gb" * whereas our actual maximum is 2gb-1 (INT_MAX) */ --*value; } if (*value > ROUTER_MAX_DECLARED_BANDWIDTH) { - r = tor_snprintf(buf, sizeof(buf), "%s ("U64_FORMAT") must be at most %d", - desc, U64_PRINTF_ARG(*value), - ROUTER_MAX_DECLARED_BANDWIDTH); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); + tor_asprintf(msg, "%s ("U64_FORMAT") must be at most %d", + desc, U64_PRINTF_ARG(*value), + ROUTER_MAX_DECLARED_BANDWIDTH); return -1; } return 0; @@ -2887,15 +2906,14 @@ /** Highest allowable value for RendPostPeriod. */ #define MAX_DIR_PERIOD (MIN_ONION_KEY_LIFETIME/2) -/** Lowest allowable value for CircuitBuildTimeout; values too low will - * increase network load because of failing connections being retried, and - * might prevent users from connecting to the network at all. */ -#define MIN_CIRCUIT_BUILD_TIMEOUT 30 - /** Lowest allowable value for MaxCircuitDirtiness; if this is too low, Tor * will generate too many circuits and potentially overload the network. */ #define MIN_MAX_CIRCUIT_DIRTINESS 10 +/** Lowest allowable value for CircuitStreamTimeout; if this is too low, Tor + * will generate too many circuits and potentially overload the network. */ +#define MIN_CIRCUIT_STREAM_TIMEOUT 10 + /** Return 0 if every setting in options is reasonable, and a * permissible transition from old_options. Else return -1. * Should have no side effects, except for normalizing the contents of @@ -2912,10 +2930,9 @@ options_validate(or_options_t *old_options, or_options_t *options, int from_setconf, char **msg) { - int i, r; + int i; config_line_t *cl; const char *uname = get_uname(); - char buf[1024]; #define REJECT(arg) \ STMT_BEGIN *msg = tor_strdup(arg); return -1; STMT_END #define COMPLAIN(arg) STMT_BEGIN log(LOG_WARN, LD_CONFIG, arg); STMT_END @@ -2923,16 +2940,13 @@ tor_assert(msg); *msg = NULL; - if (options->ORPort < 0 || options->ORPort > 65535) - REJECT("ORPort option out of bounds."); - if (server_mode(options) && (!strcmpstart(uname, "Windows 95") || !strcmpstart(uname, "Windows 98") || !strcmpstart(uname, "Windows Me"))) { log(LOG_WARN, LD_CONFIG, "Tor is running as a server, but you are " "running %s; this probably won't work. See " - "http://wiki.noreply.org/noreply/TheOnionRouter/TorFAQ#ServerOS " + "https://wiki.torproject.org/TheOnionRouter/TorFAQ#ServerOS " "for details.", uname); } @@ -2951,8 +2965,8 @@ if (options->TransPort == 0 && options->TransListenAddress != NULL) REJECT("TransPort must be defined if TransListenAddress is defined."); - if (options->NatdPort == 0 && options->NatdListenAddress != NULL) - REJECT("NatdPort must be defined if NatdListenAddress is defined."); + if (options->NATDPort == 0 && options->NATDListenAddress != NULL) + REJECT("NATDPort must be defined if NATDListenAddress is defined."); /* Don't gripe about SocksPort 0 with SocksListenAddress set; a standard * configuration does this. */ @@ -2971,8 +2985,8 @@ old = old_options ? old_options->TransListenAddress : NULL; tp = "transparent proxy"; } else { - opt = options->NatdListenAddress; - old = old_options ? old_options->NatdListenAddress : NULL; + opt = options->NATDListenAddress; + old = old_options ? old_options->NATDListenAddress : NULL; tp = "natd proxy"; } @@ -2999,21 +3013,13 @@ if (options->Nickname == NULL) { if (server_mode(options)) { - if (!(options->Nickname = get_default_nickname())) { - log_notice(LD_CONFIG, "Couldn't pick a nickname based on " - "our hostname; using %s instead.", UNNAMED_ROUTER_NICKNAME); options->Nickname = tor_strdup(UNNAMED_ROUTER_NICKNAME); - } else { - log_notice(LD_CONFIG, "Choosing default nickname '%s'", - options->Nickname); - } } } else { if (!is_legal_nickname(options->Nickname)) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "Nickname '%s' is wrong length or contains illegal characters.", options->Nickname); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } } @@ -3030,14 +3036,6 @@ if (options_init_logs(options, 1)<0) /* Validate the log(s) */ REJECT("Failed to validate Log options. See logs for details."); - if (options->NoPublish) { - log(LOG_WARN, LD_CONFIG, - "NoPublish is obsolete. Use PublishServerDescriptor instead."); - SMARTLIST_FOREACH(options->PublishServerDescriptor, char *, s, - tor_free(s)); - smartlist_clear(options->PublishServerDescriptor); - } - if (authdir_mode(options)) { /* confirm that our address isn't broken, so we can complain now */ uint32_t tmp; @@ -3045,37 +3043,25 @@ REJECT("Failed to resolve/guess local address. See logs for details."); } + if (strcmp(options->RefuseUnknownExits, "0") && + strcmp(options->RefuseUnknownExits, "1") && + strcmp(options->RefuseUnknownExits, "auto")) { + REJECT("RefuseUnknownExits must be 0, 1, or auto"); + } + #ifndef MS_WINDOWS if (options->RunAsDaemon && torrc_fname && path_is_relative(torrc_fname)) REJECT("Can't use a relative path to torrc when RunAsDaemon is set."); #endif - if (options->SocksPort < 0 || options->SocksPort > 65535) - REJECT("SocksPort option out of bounds."); - - if (options->DNSPort < 0 || options->DNSPort > 65535) - REJECT("DNSPort option out of bounds."); - - if (options->TransPort < 0 || options->TransPort > 65535) - REJECT("TransPort option out of bounds."); - - if (options->NatdPort < 0 || options->NatdPort > 65535) - REJECT("NatdPort option out of bounds."); - if (options->SocksPort == 0 && options->TransPort == 0 && - options->NatdPort == 0 && options->ORPort == 0 && + options->NATDPort == 0 && options->ORPort == 0 && options->DNSPort == 0 && !options->RendConfigLines) log(LOG_WARN, LD_CONFIG, - "SocksPort, TransPort, NatdPort, DNSPort, and ORPort are all " + "SocksPort, TransPort, NATDPort, DNSPort, and ORPort are all " "undefined, and there aren't any hidden services configured. " "Tor will still run, but probably won't do anything."); - if (options->ControlPort < 0 || options->ControlPort > 65535) - REJECT("ControlPort option out of bounds."); - - if (options->DirPort < 0 || options->DirPort > 65535) - REJECT("DirPort option out of bounds."); - #ifndef USE_TRANSPARENT if (options->TransPort || options->TransListenAddress) REJECT("TransPort and TransListenAddress are disabled in this build."); @@ -3100,19 +3086,11 @@ routerset_union(options->_ExcludeExitNodesUnion,options->ExcludeNodes); } - if (options->StrictExitNodes && - (!options->ExitNodes) && - (!old_options || - (old_options->StrictExitNodes != options->StrictExitNodes) || - (!routerset_equal(old_options->ExitNodes,options->ExitNodes)))) - COMPLAIN("StrictExitNodes set, but no ExitNodes listed."); - - if (options->StrictEntryNodes && - (!options->EntryNodes) && - (!old_options || - (old_options->StrictEntryNodes != options->StrictEntryNodes) || - (!routerset_equal(old_options->EntryNodes,options->EntryNodes)))) - COMPLAIN("StrictEntryNodes set, but no EntryNodes listed."); + if (options->ExcludeNodes && options->StrictNodes) { + COMPLAIN("You have asked to exclude certain relays from all positions " + "in your circuits. Expect hidden services and other Tor " + "features to be broken in unpredictable ways."); + } if (options->EntryNodes && !routerset_is_list(options->EntryNodes)) { /* XXXX fix this; see entry_guards_prepend_from_config(). */ @@ -3150,6 +3128,10 @@ options->V3AuthoritativeDir)) REJECT("AuthoritativeDir is set, but none of " "(Bridge/HS/V1/V2/V3)AuthoritativeDir is set."); + /* If we have a v3bandwidthsfile and it's broken, complain on startup */ + if (options->V3BandwidthsFile && !old_options) { + dirserv_read_measured_bandwidths(options->V3BandwidthsFile, NULL); + } } if (options->AuthoritativeDir && !options->DirPort) @@ -3161,15 +3143,18 @@ if (options->AuthoritativeDir && options->ClientOnly) REJECT("Running as authoritative directory, but ClientOnly also set."); - if (options->HSAuthorityRecordStats && !options->HSAuthoritativeDir) - REJECT("HSAuthorityRecordStats is set but we're not running as " - "a hidden service authority."); + if (options->FetchDirInfoExtraEarly && !options->FetchDirInfoEarly) + REJECT("FetchDirInfoExtraEarly requires that you also set " + "FetchDirInfoEarly"); + + if (options->HSAuthoritativeDir && proxy_mode(options)) + REJECT("Running as authoritative v0 HS directory, but also configured " + "as a client."); if (options->ConnLimit <= 0) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "ConnLimit must be greater than 0, but was set to %d", options->ConnLimit); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } @@ -3274,6 +3259,12 @@ REJECT("Servers must be able to freely connect to the rest " "of the Internet, so they must not set UseBridges."); + /* If both of these are set, we'll end up with funny behavior where we + * demand enough entrynodes be up and running else we won't build + * circuits, yet we never actually use them. */ + if (options->UseBridges && options->EntryNodes) + REJECT("You cannot set both UseBridges and EntryNodes."); + options->_AllowInvalid = 0; if (options->AllowInvalidNodes) { SMARTLIST_FOREACH(options->AllowInvalidNodes, const char *, cp, { @@ -3288,18 +3279,29 @@ else if (!strcasecmp(cp, "rendezvous")) options->_AllowInvalid |= ALLOW_INVALID_RENDEZVOUS; else { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "Unrecognized value '%s' in AllowInvalidNodes", cp); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } }); } + if (!options->SafeLogging || + !strcasecmp(options->SafeLogging, "0")) { + options->_SafeLogging = SAFELOG_SCRUB_NONE; + } else if (!strcasecmp(options->SafeLogging, "relay")) { + options->_SafeLogging = SAFELOG_SCRUB_RELAY; + } else if (!strcasecmp(options->SafeLogging, "1")) { + options->_SafeLogging = SAFELOG_SCRUB_ALL; + } else { + tor_asprintf(msg, + "Unrecognized value '%s' in SafeLogging", + escaped(options->SafeLogging)); + return -1; + } + if (compute_publishserverdescriptor(options) < 0) { - r = tor_snprintf(buf, sizeof(buf), - "Unrecognized value in PublishServerDescriptor"); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); + tor_asprintf(msg, "Unrecognized value in PublishServerDescriptor"); return -1; } @@ -3312,6 +3314,12 @@ "PublishServerDescriptor line."); } + if (options->BridgeRelay && options->DirPort) { + log_warn(LD_CONFIG, "Can't set a DirPort on a bridge relay; disabling " + "DirPort"); + options->DirPort = 0; + } + if (options->MinUptimeHidServDirectoryV2 < 0) { log_warn(LD_CONFIG, "MinUptimeHidServDirectoryV2 option must be at " "least 0 seconds. Changing to 0."); @@ -3319,29 +3327,30 @@ } if (options->RendPostPeriod < MIN_REND_POST_PERIOD) { - log(LOG_WARN,LD_CONFIG,"RendPostPeriod option is too short; " - "raising to %d seconds.", MIN_REND_POST_PERIOD); + log_warn(LD_CONFIG, "RendPostPeriod option is too short; " + "raising to %d seconds.", MIN_REND_POST_PERIOD); options->RendPostPeriod = MIN_REND_POST_PERIOD; } if (options->RendPostPeriod > MAX_DIR_PERIOD) { - log(LOG_WARN, LD_CONFIG, "RendPostPeriod is too large; clipping to %ds.", - MAX_DIR_PERIOD); + log_warn(LD_CONFIG, "RendPostPeriod is too large; clipping to %ds.", + MAX_DIR_PERIOD); options->RendPostPeriod = MAX_DIR_PERIOD; } - if (options->CircuitBuildTimeout < MIN_CIRCUIT_BUILD_TIMEOUT) { - log(LOG_WARN, LD_CONFIG, "CircuitBuildTimeout option is too short; " - "raising to %d seconds.", MIN_CIRCUIT_BUILD_TIMEOUT); - options->CircuitBuildTimeout = MIN_CIRCUIT_BUILD_TIMEOUT; - } - if (options->MaxCircuitDirtiness < MIN_MAX_CIRCUIT_DIRTINESS) { - log(LOG_WARN, LD_CONFIG, "MaxCircuitDirtiness option is too short; " - "raising to %d seconds.", MIN_MAX_CIRCUIT_DIRTINESS); + log_warn(LD_CONFIG, "MaxCircuitDirtiness option is too short; " + "raising to %d seconds.", MIN_MAX_CIRCUIT_DIRTINESS); options->MaxCircuitDirtiness = MIN_MAX_CIRCUIT_DIRTINESS; } + if (options->CircuitStreamTimeout && + options->CircuitStreamTimeout < MIN_CIRCUIT_STREAM_TIMEOUT) { + log_warn(LD_CONFIG, "CircuitStreamTimeout option is too short; " + "raising to %d seconds.", MIN_CIRCUIT_STREAM_TIMEOUT); + options->CircuitStreamTimeout = MIN_CIRCUIT_STREAM_TIMEOUT; + } + if (options->KeepalivePeriod < 1) REJECT("KeepalivePeriod option must be positive."); @@ -3360,6 +3369,18 @@ if (ensure_bandwidth_cap(&options->RelayBandwidthBurst, "RelayBandwidthBurst", msg) < 0) return -1; + if (ensure_bandwidth_cap(&options->PerConnBWRate, + "PerConnBWRate", msg) < 0) + return -1; + if (ensure_bandwidth_cap(&options->PerConnBWBurst, + "PerConnBWBurst", msg) < 0) + return -1; + if (ensure_bandwidth_cap(&options->AuthDirFastGuarantee, + "AuthDirFastGuarantee", msg) < 0) + return -1; + if (ensure_bandwidth_cap(&options->AuthDirGuardBWGuarantee, + "AuthDirGuardBWGuarantee", msg) < 0) + return -1; if (options->RelayBandwidthRate && !options->RelayBandwidthBurst) options->RelayBandwidthBurst = options->RelayBandwidthRate; @@ -3368,31 +3389,28 @@ if (server_mode(options)) { if (options->BandwidthRate < ROUTER_REQUIRED_MIN_BANDWIDTH) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "BandwidthRate is set to %d bytes/second. " "For servers, it must be at least %d.", (int)options->BandwidthRate, ROUTER_REQUIRED_MIN_BANDWIDTH); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } else if (options->MaxAdvertisedBandwidth < ROUTER_REQUIRED_MIN_BANDWIDTH/2) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "MaxAdvertisedBandwidth is set to %d bytes/second. " "For servers, it must be at least %d.", (int)options->MaxAdvertisedBandwidth, ROUTER_REQUIRED_MIN_BANDWIDTH/2); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } if (options->RelayBandwidthRate && options->RelayBandwidthRate < ROUTER_REQUIRED_MIN_BANDWIDTH) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "RelayBandwidthRate is set to %d bytes/second. " "For servers, it must be at least %d.", (int)options->RelayBandwidthRate, ROUTER_REQUIRED_MIN_BANDWIDTH); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } } @@ -3414,34 +3432,73 @@ if (accounting_parse_options(options, 1)<0) REJECT("Failed to parse accounting options. See logs for details."); - if (options->HttpProxy) { /* parse it now */ - if (parse_addr_port(LOG_WARN, options->HttpProxy, NULL, - &options->HttpProxyAddr, &options->HttpProxyPort) < 0) - REJECT("HttpProxy failed to parse or resolve. Please fix."); - if (options->HttpProxyPort == 0) { /* give it a default */ - options->HttpProxyPort = 80; + if (options->HTTPProxy) { /* parse it now */ + if (tor_addr_port_parse(options->HTTPProxy, + &options->HTTPProxyAddr, &options->HTTPProxyPort) < 0) + REJECT("HTTPProxy failed to parse or resolve. Please fix."); + if (options->HTTPProxyPort == 0) { /* give it a default */ + options->HTTPProxyPort = 80; } } - if (options->HttpProxyAuthenticator) { - if (strlen(options->HttpProxyAuthenticator) >= 48) - REJECT("HttpProxyAuthenticator is too long (>= 48 chars)."); + if (options->HTTPProxyAuthenticator) { + if (strlen(options->HTTPProxyAuthenticator) >= 512) + REJECT("HTTPProxyAuthenticator is too long (>= 512 chars)."); } - if (options->HttpsProxy) { /* parse it now */ - if (parse_addr_port(LOG_WARN, options->HttpsProxy, NULL, - &options->HttpsProxyAddr, &options->HttpsProxyPort) <0) - REJECT("HttpsProxy failed to parse or resolve. Please fix."); - if (options->HttpsProxyPort == 0) { /* give it a default */ - options->HttpsProxyPort = 443; + if (options->HTTPSProxy) { /* parse it now */ + if (tor_addr_port_parse(options->HTTPSProxy, + &options->HTTPSProxyAddr, &options->HTTPSProxyPort) <0) + REJECT("HTTPSProxy failed to parse or resolve. Please fix."); + if (options->HTTPSProxyPort == 0) { /* give it a default */ + options->HTTPSProxyPort = 443; } } - if (options->HttpsProxyAuthenticator) { - if (strlen(options->HttpsProxyAuthenticator) >= 48) - REJECT("HttpsProxyAuthenticator is too long (>= 48 chars)."); + if (options->HTTPSProxyAuthenticator) { + if (strlen(options->HTTPSProxyAuthenticator) >= 512) + REJECT("HTTPSProxyAuthenticator is too long (>= 512 chars)."); } + if (options->Socks4Proxy) { /* parse it now */ + if (tor_addr_port_parse(options->Socks4Proxy, + &options->Socks4ProxyAddr, + &options->Socks4ProxyPort) <0) + REJECT("Socks4Proxy failed to parse or resolve. Please fix."); + if (options->Socks4ProxyPort == 0) { /* give it a default */ + options->Socks4ProxyPort = 1080; + } + } + + if (options->Socks5Proxy) { /* parse it now */ + if (tor_addr_port_parse(options->Socks5Proxy, + &options->Socks5ProxyAddr, + &options->Socks5ProxyPort) <0) + REJECT("Socks5Proxy failed to parse or resolve. Please fix."); + if (options->Socks5ProxyPort == 0) { /* give it a default */ + options->Socks5ProxyPort = 1080; + } + } + + if (options->Socks4Proxy && options->Socks5Proxy) + REJECT("You cannot specify both Socks4Proxy and SOCKS5Proxy"); + + if (options->Socks5ProxyUsername) { + size_t len; + + len = strlen(options->Socks5ProxyUsername); + if (len < 1 || len > 255) + REJECT("Socks5ProxyUsername must be between 1 and 255 characters."); + + if (!options->Socks5ProxyPassword) + REJECT("Socks5ProxyPassword must be included with Socks5ProxyUsername."); + + len = strlen(options->Socks5ProxyPassword); + if (len < 1 || len > 255) + REJECT("Socks5ProxyPassword must be between 1 and 255 characters."); + } else if (options->Socks5ProxyPassword) + REJECT("Socks5ProxyPassword must be included with Socks5ProxyUsername."); + if (options->HashedControlPassword) { smartlist_t *sl = decode_hashed_passwords(options->HashedControlPassword); if (!sl) { @@ -3463,6 +3520,16 @@ } } + if (options->OwningControllerProcess) { + const char *validate_pspec_msg = NULL; + if (tor_validate_process_specifier(options->OwningControllerProcess, + &validate_pspec_msg)) { + tor_asprintf(msg, "Bad OwningControllerProcess: %s", + validate_pspec_msg); + return -1; + } + } + if (options->ControlListenAddress) { int all_are_local = 1; config_line_t *ln; @@ -3505,6 +3572,12 @@ "upgrade your Tor controller as soon as possible."); } + if (options->CookieAuthFileGroupReadable && !options->CookieAuthFile) { + log_warn(LD_CONFIG, "CookieAuthFileGroupReadable is set, but will have " + "no effect: you must specify an explicit CookieAuthFile to " + "have it group-readable."); + } + if (options->UseEntryGuards && ! options->NumEntryGuards) REJECT("Cannot enable UseEntryGuards with NumEntryGuards set to 0"); @@ -3538,11 +3611,10 @@ if (options->ConstrainedSockSize < MIN_CONSTRAINED_TCP_BUFFER || options->ConstrainedSockSize > MAX_CONSTRAINED_TCP_BUFFER || options->ConstrainedSockSize % 1024) { - r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "ConstrainedSockSize is invalid. Must be a value between %d and %d " "in 1024 byte increments.", MIN_CONSTRAINED_TCP_BUFFER, MAX_CONSTRAINED_TCP_BUFFER); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } if (options->DirPort) { @@ -3590,6 +3662,12 @@ if (options->PreferTunneledDirConns && !options->TunnelDirConns) REJECT("Must set TunnelDirConns if PreferTunneledDirConns is set."); + if ((options->Socks4Proxy || options->Socks5Proxy) && + !options->HTTPProxy && !options->PreferTunneledDirConns) + REJECT("When Socks4Proxy or Socks5Proxy is configured, " + "PreferTunneledDirConns and TunnelDirConns must both be " + "set to 1, or HTTPProxy must be configured."); + if (options->AutomapHostsSuffixes) { SMARTLIST_FOREACH(options->AutomapHostsSuffixes, char *, suf, { @@ -3604,12 +3682,19 @@ "a non-default set of DirServers."); } - /*XXXX022 checking for defaults manually like this is a bit fragile.*/ + if (options->AllowSingleHopExits && !options->DirServers) { + COMPLAIN("You have set AllowSingleHopExits; now your relay will allow " + "others to make one-hop exits. However, since by default most " + "clients avoid relays that set this option, most clients will " + "ignore you."); + } + + /*XXXX023 checking for defaults manually like this is a bit fragile.*/ /* Keep changes to hard-coded values synchronous to man page and default * values table. */ if (options->TestingV3AuthInitialVotingInterval != 30*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) { REJECT("TestingV3AuthInitialVotingInterval may only be changed in testing " "Tor networks!"); } else if (options->TestingV3AuthInitialVotingInterval < MIN_VOTE_INTERVAL) { @@ -3620,7 +3705,8 @@ } if (options->TestingV3AuthInitialVoteDelay != 5*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) { + REJECT("TestingV3AuthInitialVoteDelay may only be changed in testing " "Tor networks!"); } else if (options->TestingV3AuthInitialVoteDelay < MIN_VOTE_SECONDS) { @@ -3628,7 +3714,7 @@ } if (options->TestingV3AuthInitialDistDelay != 5*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) { REJECT("TestingV3AuthInitialDistDelay may only be changed in testing " "Tor networks!"); } else if (options->TestingV3AuthInitialDistDelay < MIN_DIST_SECONDS) { @@ -3643,7 +3729,7 @@ } if (options->TestingAuthDirTimeToLearnReachability != 30*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) { REJECT("TestingAuthDirTimeToLearnReachability may only be changed in " "testing Tor networks!"); } else if (options->TestingAuthDirTimeToLearnReachability < 0) { @@ -3653,7 +3739,7 @@ } if (options->TestingEstimatedDescriptorPropagationTime != 10*60 && - !options->TestingTorNetwork) { + !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) { REJECT("TestingEstimatedDescriptorPropagationTime may only be changed in " "testing Tor networks!"); } else if (options->TestingEstimatedDescriptorPropagationTime < 0) { @@ -3669,6 +3755,26 @@ "testing Tor network!"); } + if (options->AccelName && !options->HardwareAccel) + options->HardwareAccel = 1; + if (options->AccelDir && !options->AccelName) + REJECT("Can't use hardware crypto accelerator dir without engine name."); + + if (options->PublishServerDescriptor) + SMARTLIST_FOREACH(options->PublishServerDescriptor, const char *, pubdes, { + if (!strcmp(pubdes, "1") || !strcmp(pubdes, "0")) + if (smartlist_len(options->PublishServerDescriptor) > 1) { + COMPLAIN("You have passed a list of multiple arguments to the " + "PublishServerDescriptor option that includes 0 or 1. " + "0 or 1 should only be used as the sole argument. " + "This configuration will be rejected in a future release."); + break; + } + }); + + if (options->BridgeRelay == 1 && options->ORPort == 0) + REJECT("BridgeRelay is 1, ORPort is 0. This is an invalid combination."); + return 0; #undef REJECT #undef COMPLAIN @@ -3707,12 +3813,10 @@ } if (strcmp(old->DataDirectory,new_val->DataDirectory)!=0) { - char buf[1024]; - int r = tor_snprintf(buf, sizeof(buf), + tor_asprintf(msg, "While Tor is running, changing DataDirectory " "(\"%s\"->\"%s\") is not allowed.", old->DataDirectory, new_val->DataDirectory); - *msg = tor_strdup(r >= 0 ? buf : "internal error"); return -1; } @@ -3721,19 +3825,22 @@ return -1; } - if (!opt_streq(old->Group, new_val->Group)) { - *msg = tor_strdup("While Tor is running, changing Group is not allowed."); + if ((old->HardwareAccel != new_val->HardwareAccel) + || !opt_streq(old->AccelName, new_val->AccelName) + || !opt_streq(old->AccelDir, new_val->AccelDir)) { + *msg = tor_strdup("While Tor is running, changing OpenSSL hardware " + "acceleration engine is not allowed."); return -1; } - if (old->HardwareAccel != new_val->HardwareAccel) { - *msg = tor_strdup("While Tor is running, changing HardwareAccel is " - "not allowed."); + if (old->TestingTorNetwork != new_val->TestingTorNetwork) { + *msg = tor_strdup("While Tor is running, changing TestingTorNetwork " + "is not allowed."); return -1; } - if (old->TestingTorNetwork != new_val->TestingTorNetwork) { - *msg = tor_strdup("While Tor is running, changing TestingTorNetwork " + if (old->DisableAllSwap != new_val->DisableAllSwap) { + *msg = tor_strdup("While Tor is running, changing DisableAllSwap " "is not allowed."); return -1; } @@ -3748,13 +3855,15 @@ or_options_t *new_options) { if (!opt_streq(old_options->DataDirectory, new_options->DataDirectory) || - old_options->NumCpus != new_options->NumCpus || + old_options->NumCPUs != new_options->NumCPUs || old_options->ORPort != new_options->ORPort || old_options->ServerDNSSearchDomains != new_options->ServerDNSSearchDomains || - old_options->SafeLogging != new_options->SafeLogging || + old_options->_SafeLogging != new_options->_SafeLogging || old_options->ClientOnly != new_options->ClientOnly || - !config_lines_eq(old_options->Logs, new_options->Logs)) + public_server_mode(old_options) != public_server_mode(new_options) || + !config_lines_eq(old_options->Logs, new_options->Logs) || + old_options->LogMessageDomains != new_options->LogMessageDomains) return 1; /* Check whether log options match. */ @@ -3780,7 +3889,6 @@ old_options->ORPort != new_options->ORPort || old_options->DirPort != new_options->DirPort || old_options->ClientOnly != new_options->ClientOnly || - old_options->NoPublish != new_options->NoPublish || old_options->_PublishServerDescriptor != new_options->_PublishServerDescriptor || get_effective_bwrate(old_options) != get_effective_bwrate(new_options) || @@ -3803,6 +3911,7 @@ { static int is_set = 0; static char path[MAX_PATH+1]; + TCHAR tpath[MAX_PATH] = {0}; LPITEMIDLIST idl; IMalloc *m; @@ -3820,7 +3929,7 @@ #define APPDATA_PATH CSIDL_APPDATA #endif if (!SUCCEEDED(SHGetSpecialFolderLocation(NULL, APPDATA_PATH, &idl))) { - GetCurrentDirectory(MAX_PATH, path); + getcwd(path,MAX_PATH); is_set = 1; log_warn(LD_CONFIG, "I couldn't find your application data folder: are you " @@ -3829,8 +3938,15 @@ return path; } /* Convert the path from an "ID List" (whatever that is!) to a path. */ - result = SHGetPathFromIDList(idl, path); - /* Now we need to free the */ + result = SHGetPathFromIDList(idl, tpath); +#ifdef UNICODE + wcstombs(path,tpath,MAX_PATH); +#else + strlcpy(path,tpath,sizeof(path)); +#endif + + /* Now we need to free the memory that the path-idl was stored in. In + * typical Windows fashion, we can't just call 'free()' on it. */ SHGetMalloc(&m); if (m) { m->lpVtbl->Free(m, idl); @@ -3878,10 +3994,7 @@ SMARTLIST_FOREACH(sl, const char *, s, { if (!is_legal_nickname_or_hexdigest(s)) { - char buf[1024]; - int tmp = tor_snprintf(buf, sizeof(buf), - "Invalid nickname '%s' in %s line", s, name); - *msg = tor_strdup(tmp >= 0 ? buf : "internal error"); + tor_asprintf(msg, "Invalid nickname '%s' in %s line", s, name); r = -1; break; } @@ -3905,13 +4018,7 @@ log(LOG_WARN, LD_CONFIG, "Duplicate -f options on command line."); tor_free(fname); } -#ifdef MS_WINDOWS - /* XXX one day we might want to extend expand_filename to work - * under Windows as well. */ - fname = tor_strdup(argv[i+1]); -#else fname = expand_filename(argv[i+1]); -#endif *using_default_torrc = 0; ++i; } else if (!strcmp(argv[i],"--ignore-missing-torrc")) { @@ -4017,6 +4124,12 @@ printf("Tor version %s.\n",get_version()); exit(0); } + if (argc > 1 && (!strcmp(argv[1],"--digests"))) { + printf("Tor version %s.\n",get_version()); + printf("%s", libor_get_digests()); + printf("%s", tor_get_digests()); + exit(0); + } /* Go through command-line variables */ if (!global_cmdline_options) { @@ -4184,12 +4297,9 @@ err: config_free(&options_format, newoptions); if (*msg) { - int len = (int)strlen(*msg)+256; - char *newmsg = tor_malloc(len); - - tor_snprintf(newmsg, len, "Failed to parse/validate config: %s", *msg); - tor_free(*msg); - *msg = newmsg; + char *old_msg = *msg; + tor_asprintf(msg, "Failed to parse/validate config: %s", old_msg); + tor_free(old_msg); } return err; } @@ -4309,11 +4419,13 @@ if (smartlist_len(elts) == 2 && !strcasecmp(smartlist_get(elts,0), "file")) { if (!validate_only) { - if (add_file_log(severity, smartlist_get(elts, 1)) < 0) { + char *fname = expand_filename(smartlist_get(elts, 1)); + if (add_file_log(severity, fname) < 0) { log_warn(LD_CONFIG, "Couldn't open file for 'Log %s': %s", opt->value, strerror(errno)); ok = 0; } + tor_free(fname); } goto cleanup; } @@ -4329,6 +4441,9 @@ } smartlist_free(elts); + if (ok && !validate_only) + logs_set_domain_logging(options->LogMessageDomains); + return ok?0:-1; } @@ -4577,7 +4692,7 @@ } /** Check and normalize the value of options->DataDirectory; return 0 if it - * sane, -1 otherwise. */ + * is sane, -1 otherwise. */ static int validate_data_directory(or_options_t *options) { @@ -4609,14 +4724,13 @@ { char *old_val=NULL, *new_val=NULL, *new_conf=NULL; int rename_old = 0, r; - size_t len; tor_assert(fname); switch (file_status(fname)) { case FN_FILE: old_val = read_file_to_str(fname, 0, NULL); - if (strcmpstart(old_val, GENERATED_FILE_PREFIX)) { + if (!old_val || strcmpstart(old_val, GENERATED_FILE_PREFIX)) { rename_old = 1; } tor_free(old_val); @@ -4636,9 +4750,7 @@ goto err; } - len = strlen(new_conf)+256; - new_val = tor_malloc(len); - tor_snprintf(new_val, len, "%s\n%s\n\n%s", + tor_asprintf(&new_val, "%s\n%s\n\n%s", GENERATED_FILE_PREFIX, GENERATED_FILE_COMMENT, new_conf); if (rename_old) { @@ -4688,22 +4800,19 @@ int options_save_current(void) { - if (torrc_fname) { - /* This fails if we can't write to our configuration file. - * - * If we try falling back to datadirectory or something, we have a better - * chance of saving the configuration, but a better chance of doing - * something the user never expected. Let's just warn instead. */ - return write_configuration_file(torrc_fname, get_options()); - } - return write_configuration_file(get_default_conf_file(), get_options()); + /* This fails if we can't write to our configuration file. + * + * If we try falling back to datadirectory or something, we have a better + * chance of saving the configuration, but a better chance of doing + * something the user never expected. */ + return write_configuration_file(get_torrc_fname(), get_options()); } /** Mapping from a unit name to a multiplier for converting that unit into a - * base unit. */ + * base unit. Used by config_parse_unit. */ struct unit_table_t { - const char *unit; - uint64_t multiplier; + const char *unit; /**< The name of the unit */ + uint64_t multiplier; /**< How many of the base unit appear in this unit */ }; /** Table to map the names of memory units to the number of bytes they @@ -4761,30 +4870,47 @@ static uint64_t config_parse_units(const char *val, struct unit_table_t *u, int *ok) { - uint64_t v; + uint64_t v = 0; + double d = 0; + int use_float = 0; char *cp; tor_assert(ok); v = tor_parse_uint64(val, 10, 0, UINT64_MAX, ok, &cp); - if (!*ok) - return 0; + if (!*ok || (cp && *cp == '.')) { + d = tor_parse_double(val, 0, UINT64_MAX, ok, &cp); + if (!*ok) + goto done; + use_float = 1; + } + if (!cp) { *ok = 1; - return v; + v = use_float ? DBL_TO_U64(d) : v; + goto done; } - while (TOR_ISSPACE(*cp)) - ++cp; + + cp = (char*) eat_whitespace(cp); + for ( ;u->unit;++u) { if (!strcasecmp(u->unit, cp)) { - v *= u->multiplier; + if (use_float) + v = u->multiplier * d; + else + v *= u->multiplier; *ok = 1; - return v; + goto done; } } log_warn(LD_CONFIG, "Unknown unit '%s'.", cp); *ok = 0; - return 0; + done: + + if (*ok) + return v; + else + return 0; } /** Parse a string in the format "number unit", where unit is a unit of @@ -4794,7 +4920,8 @@ static uint64_t config_parse_memunit(const char *s, int *ok) { - return config_parse_units(s, memory_units, ok); + uint64_t u = config_parse_units(s, memory_units, ok); + return u; } /** Parse a string in the format "number unit", where unit is a unit of time. @@ -4816,256 +4943,37 @@ return (int)r; } -/* This is what passes for version detection on OSX. We set - * MACOSX_KQUEUE_IS_BROKEN to true iff we're on a version of OSX before - * 10.4.0 (aka 1040). */ -#ifdef __APPLE__ -#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ -#define MACOSX_KQUEUE_IS_BROKEN \ - (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1040) -#else -#define MACOSX_KQUEUE_IS_BROKEN 0 -#endif -#endif - /** * Initialize the libevent library. */ static void init_libevent(void) { + const char *badness=NULL; + configure_libevent_logging(); /* If the kernel complains that some method (say, epoll) doesn't * exist, we don't care about it, since libevent will cope. */ suppress_libevent_log_msg("Function not implemented"); -#ifdef __APPLE__ - if (MACOSX_KQUEUE_IS_BROKEN || - decode_libevent_version(event_get_version(), NULL) < LE_11B) { - setenv("EVENT_NOKQUEUE","1",1); - } -#endif - /* In libevent versions before 2.0, it's hard to keep binary compatibility - * between upgrades, and unpleasant to detect when the version we compiled - * against is unlike the version we have linked against. Here's how. */ -#if defined(_EVENT_VERSION) && defined(HAVE_EVENT_GET_VERSION) - /* We have a header-file version and a function-call version. Easy. */ - if (strcmp(_EVENT_VERSION, event_get_version())) { - int compat1 = -1, compat2 = -1; - int verybad, prettybad ; - decode_libevent_version(_EVENT_VERSION, &compat1); - decode_libevent_version(event_get_version(), &compat2); - verybad = compat1 != compat2; - prettybad = (compat1 == -1 || compat2 == -1) && compat1 != compat2; - - log(verybad ? LOG_WARN : (prettybad ? LOG_NOTICE : LOG_INFO), - LD_GENERAL, "We were compiled with headers from version %s " - "of Libevent, but we're using a Libevent library that says it's " - "version %s.", _EVENT_VERSION, event_get_version()); - if (verybad) - log_warn(LD_GENERAL, "This will almost certainly make Tor crash."); - else if (prettybad) - log_notice(LD_GENERAL, "If Tor crashes, this might be why."); - else - log_info(LD_GENERAL, "I think these versions are binary-compatible."); - } -#elif defined(HAVE_EVENT_GET_VERSION) - /* event_get_version but no _EVENT_VERSION. We might be in 1.4.0-beta or - earlier, where that's normal. To see whether we were compiled with an - earlier version, let's see whether the struct event defines MIN_HEAP_IDX. - */ -#ifdef HAVE_STRUCT_EVENT_MIN_HEAP_IDX - /* The header files are 1.4.0-beta or later. If the version is not - * 1.4.0-beta, we are incompatible. */ - { - if (strcmp(event_get_version(), "1.4.0-beta")) { - log_warn(LD_GENERAL, "It's a little hard to tell, but you seem to have " - "Libevent 1.4.0-beta header files, whereas you have linked " - "against Libevent %s. This will probably make Tor crash.", - event_get_version()); - } - } -#else - /* Our headers are 1.3e or earlier. If the library version is not 1.4.x or - later, we're probably fine. */ - { - const char *v = event_get_version(); - if ((v[0] == '1' && v[2] == '.' && v[3] > '3') || v[0] > '1') { - log_warn(LD_GENERAL, "It's a little hard to tell, but you seem to have " - "Libevent header file from 1.3e or earlier, whereas you have " - "linked against Libevent %s. This will probably make Tor " - "crash.", event_get_version()); - } - } -#endif + tor_check_libevent_header_compatibility(); -#elif defined(_EVENT_VERSION) -#warn "_EVENT_VERSION is defined but not get_event_version(): Libevent is odd." -#else - /* Your libevent is ancient. */ -#endif + tor_libevent_initialize(); - event_init(); suppress_libevent_log_msg(NULL); -#if defined(HAVE_EVENT_GET_VERSION) && defined(HAVE_EVENT_GET_METHOD) - /* Making this a NOTICE for now so we can link bugs to a libevent versions - * or methods better. */ - log(LOG_NOTICE, LD_GENERAL, - "Initialized libevent version %s using method %s. Good.", - event_get_version(), event_get_method()); - check_libevent_version(event_get_method(), get_options()->ORPort != 0); -#else - log(LOG_NOTICE, LD_GENERAL, - "Initialized old libevent (version 1.0b or earlier)."); - log(LOG_WARN, LD_GENERAL, - "You have a *VERY* old version of libevent. It is likely to be buggy; " - "please build Tor with a more recent version."); -#endif -} - -/** Table mapping return value of event_get_version() to le_version_t. */ -static const struct { - const char *name; le_version_t version; int bincompat; -} le_version_table[] = { - /* earlier versions don't have get_version. */ - { "1.0c", LE_10C, 1}, - { "1.0d", LE_10D, 1}, - { "1.0e", LE_10E, 1}, - { "1.1", LE_11, 1 }, - { "1.1a", LE_11A, 1 }, - { "1.1b", LE_11B, 1 }, - { "1.2", LE_12, 1 }, - { "1.2a", LE_12A, 1 }, - { "1.3", LE_13, 1 }, - { "1.3a", LE_13A, 1 }, - { "1.3b", LE_13B, 1 }, - { "1.3c", LE_13C, 1 }, - { "1.3d", LE_13D, 1 }, - { "1.3e", LE_13E, 1 }, - { "1.4.0-beta", LE_140, 2 }, - { "1.4.1-beta", LE_141, 2 }, - { "1.4.2-rc", LE_142, 2 }, - { "1.4.3-stable", LE_143, 2 }, - { "1.4.4-stable", LE_144, 2 }, - { "1.4.5-stable", LE_145, 2 }, - { "1.4.6-stable", LE_146, 2 }, - { "1.4.7-stable", LE_147, 2 }, - { "1.4.8-stable", LE_148, 2 }, - { "1.4.99-trunk", LE_1499, 3 }, - { NULL, LE_OTHER, 0 } -}; - -/** Return the le_version_t for the current version of libevent. If the - * version is very new, return LE_OTHER. If the version is so old that it - * doesn't support event_get_version(), return LE_OLD. */ -static le_version_t -decode_libevent_version(const char *v, int *bincompat_out) -{ - int i; - for (i=0; le_version_table[i].name; ++i) { - if (!strcmp(le_version_table[i].name, v)) { - if (bincompat_out) - *bincompat_out = le_version_table[i].bincompat; - return le_version_table[i].version; - } - } - if (v[0] != '1' && bincompat_out) - *bincompat_out = 100; - else if (!strcmpstart(v, "1.4") && bincompat_out) - *bincompat_out = 2; - return LE_OTHER; -} -#if defined(HAVE_EVENT_GET_VERSION) && defined(HAVE_EVENT_GET_METHOD) -/** - * Compare the given libevent method and version to a list of versions - * which are known not to work. Warn the user as appropriate. - */ -static void -check_libevent_version(const char *m, int server) -{ - int buggy = 0, iffy = 0, slow = 0, thread_unsafe = 0; - le_version_t version; - const char *v = event_get_version(); - const char *badness = NULL; - const char *sad_os = ""; - - version = decode_libevent_version(v, NULL); - - /* XXX Would it be worthwhile disabling the methods that we know - * are buggy, rather than just warning about them and then proceeding - * to use them? If so, we should probably not wrap this whole thing - * in HAVE_EVENT_GET_VERSION and HAVE_EVENT_GET_METHOD. -RD */ - /* XXXX The problem is that it's not trivial to get libevent to change it's - * method once it's initialized, and it's not trivial to tell what method it - * will use without initializing it. I guess we could preemptively disable - * buggy libevent modes based on the version _before_ initializing it, - * though, but then there's no good way (afaict) to warn "I would have used - * kqueue, but instead I'm using select." -NM */ - if (!strcmp(m, "kqueue")) { - if (version < LE_11B) - buggy = 1; - } else if (!strcmp(m, "epoll")) { - if (version < LE_11) - iffy = 1; - } else if (!strcmp(m, "poll")) { - if (version < LE_10E) - buggy = 1; - else if (version < LE_11) - slow = 1; - } else if (!strcmp(m, "select")) { - if (version < LE_11) - slow = 1; - } else if (!strcmp(m, "win32")) { - if (version < LE_11B) - buggy = 1; - } - - /* Libevent versions before 1.3b do very badly on operating systems with - * user-space threading implementations. */ -#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) - if (server && version < LE_13B) { - thread_unsafe = 1; - sad_os = "BSD variants"; - } -#elif defined(__APPLE__) || defined(__darwin__) - if (server && version < LE_13B) { - thread_unsafe = 1; - sad_os = "Mac OS X"; - } -#endif - - if (thread_unsafe) { - log(LOG_WARN, LD_GENERAL, - "Libevent version %s often crashes when running a Tor server with %s. " - "Please use the latest version of libevent (1.3b or later)",v,sad_os); - badness = "BROKEN"; - } else if (buggy) { - log(LOG_WARN, LD_GENERAL, - "There are serious bugs in using %s with libevent %s. " - "Please use the latest version of libevent.", m, v); - badness = "BROKEN"; - } else if (iffy) { - log(LOG_WARN, LD_GENERAL, - "There are minor bugs in using %s with libevent %s. " - "You may want to use the latest version of libevent.", m, v); - badness = "BUGGY"; - } else if (slow && server) { - log(LOG_WARN, LD_GENERAL, - "libevent %s can be very slow with %s. " - "When running a server, please use the latest version of libevent.", - v,m); - badness = "SLOW"; - } + tor_check_libevent_version(tor_libevent_get_method(), + get_options()->ORPort != 0, + &badness); if (badness) { + const char *v = tor_libevent_get_version_str(); + const char *m = tor_libevent_get_method(); control_event_general_status(LOG_WARN, "BAD_LIBEVENT VERSION=%s METHOD=%s BADNESS=%s RECOVERED=NO", v, m, badness); } - } -#endif /** Return the persistent state struct for this Tor. */ or_state_t * @@ -5147,22 +5055,61 @@ } /** Replace the current persistent state with new_state */ -static void +static int or_state_set(or_state_t *new_state) { char *err = NULL; + int ret = 0; tor_assert(new_state); - if (global_state) - config_free(&state_format, global_state); + config_free(&state_format, global_state); global_state = new_state; if (entry_guards_parse_state(global_state, 1, &err)<0) { log_warn(LD_GENERAL,"%s",err); tor_free(err); + ret = -1; } if (rep_hist_load_state(global_state, &err)<0) { log_warn(LD_GENERAL,"Unparseable bandwidth history state: %s",err); tor_free(err); + ret = -1; } + if (circuit_build_times_parse_state(&circ_times, global_state) < 0) { + ret = -1; + } + return ret; +} + +/** + * Save a broken state file to a backup location. + */ +static void +or_state_save_broken(char *fname) +{ + int i; + file_status_t status; + size_t len = strlen(fname)+16; + char *fname2 = tor_malloc(len); + for (i = 0; i < 100; ++i) { + tor_snprintf(fname2, len, "%s.%d", fname, i); + status = file_status(fname2); + if (status == FN_NOENT) + break; + } + if (i == 100) { + log_warn(LD_BUG, "Unable to parse state in \"%s\"; too many saved bad " + "state files to move aside. Discarding the old state file.", + fname); + unlink(fname); + } else { + log_warn(LD_BUG, "Unable to parse state in \"%s\". Moving it aside " + "to \"%s\". This could be a bug in Tor; please tell " + "the developers.", fname, fname2); + if (rename(fname, fname2) < 0) { + log_warn(LD_BUG, "Weirdly, I couldn't even move the state aside. The " + "OS gave an error of %s", strerror(errno)); + } + } + tor_free(fname2); } /** Reload the persistent state from disk, generating a new state as needed. @@ -5224,31 +5171,8 @@ " This is a bug in Tor."); goto done; } else if (badstate && contents) { - int i; - file_status_t status; - size_t len = strlen(fname)+16; - char *fname2 = tor_malloc(len); - for (i = 0; i < 100; ++i) { - tor_snprintf(fname2, len, "%s.%d", fname, i); - status = file_status(fname2); - if (status == FN_NOENT) - break; - } - if (i == 100) { - log_warn(LD_BUG, "Unable to parse state in \"%s\"; too many saved bad " - "state files to move aside. Discarding the old state file.", - fname); - unlink(fname); - } else { - log_warn(LD_BUG, "Unable to parse state in \"%s\". Moving it aside " - "to \"%s\". This could be a bug in Tor; please tell " - "the developers.", fname, fname2); - if (rename(fname, fname2) < 0) { - log_warn(LD_BUG, "Weirdly, I couldn't even move the state aside. The " - "OS gave an error of %s", strerror(errno)); - } - } - tor_free(fname2); + or_state_save_broken(fname); + tor_free(contents); config_free(&state_format, new_state); @@ -5260,7 +5184,9 @@ } else { log_info(LD_GENERAL, "Initialized state"); } - or_state_set(new_state); + if (or_state_set(new_state) == -1) { + or_state_save_broken(fname); + } new_state = NULL; if (!contents) { global_state->next_write = 0; @@ -5277,13 +5203,32 @@ return r; } +/** Did the last time we tried to write the state file fail? If so, we + * should consider disabling such features as preemptive circuit generation + * to compute circuit-build-time. */ +static int last_state_file_write_failed = 0; + +/** Return whether the state file failed to write last time we tried. */ +int +did_last_state_file_write_fail(void) +{ + return last_state_file_write_failed; +} + +/** If writing the state to disk fails, try again after this many seconds. */ +#define STATE_WRITE_RETRY_INTERVAL 3600 + +/** If we're a relay, how often should we checkpoint our state file even + * if nothing else dirties it? This will checkpoint ongoing stats like + * bandwidth used, per-country user stats, etc. */ +#define STATE_RELAY_CHECKPOINT_INTERVAL (12*60*60) + /** Write the persistent state to disk. Return 0 for success, <0 on failure. */ int or_state_save(time_t now) { char *state, *contents; char tbuf[ISO_TIME_LEN+1]; - size_t len; char *fname; tor_assert(global_state); @@ -5295,20 +5240,18 @@ * to avoid redundant writes. */ entry_guards_update_state(global_state); rep_hist_update_state(global_state); + circuit_build_times_update_state(&circ_times, global_state); if (accounting_is_enabled(get_options())) accounting_run_housekeeping(now); - global_state->LastWritten = time(NULL); + global_state->LastWritten = now; + tor_free(global_state->TorVersion); - len = strlen(get_version())+8; - global_state->TorVersion = tor_malloc(len); - tor_snprintf(global_state->TorVersion, len, "Tor %s", get_version()); + tor_asprintf(&global_state->TorVersion, "Tor %s", get_version()); state = config_dump(&state_format, global_state, 1, 0); - len = strlen(state)+256; - contents = tor_malloc(len); - format_local_iso_time(tbuf, time(NULL)); - tor_snprintf(contents, len, + format_local_iso_time(tbuf, now); + tor_asprintf(&contents, "# Tor state file last generated on %s local time\n" "# Other times below are in GMT\n" "# You *do not* need to edit this file.\n\n%s", @@ -5318,15 +5261,25 @@ if (write_str_to_file(fname, contents, 0)<0) { log_warn(LD_FS, "Unable to write state to file \"%s\"; " "will try again later", fname); + last_state_file_write_failed = 1; tor_free(fname); tor_free(contents); + /* Try again after STATE_WRITE_RETRY_INTERVAL (or sooner, if the state + * changes sooner). */ + global_state->next_write = now + STATE_WRITE_RETRY_INTERVAL; return -1; } + + last_state_file_write_failed = 0; log_info(LD_GENERAL, "Saved state to \"%s\"", fname); tor_free(fname); tor_free(contents); - global_state->next_write = TIME_MAX; + if (server_mode(get_options())) + global_state->next_write = now + STATE_RELAY_CHECKPOINT_INTERVAL; + else + global_state->next_write = TIME_MAX; + return 0; } @@ -5353,22 +5306,23 @@ * types. */ int getinfo_helper_config(control_connection_t *conn, - const char *question, char **answer) + const char *question, char **answer, + const char **errmsg) { (void) conn; + (void) errmsg; if (!strcmp(question, "config/names")) { smartlist_t *sl = smartlist_create(); int i; for (i = 0; _option_vars[i].name; ++i) { config_var_t *var = &_option_vars[i]; - const char *type, *desc; + const char *type; char *line; - size_t len; - desc = config_find_description(&options_format, var->name); switch (var->type) { case CONFIG_TYPE_STRING: type = "String"; break; case CONFIG_TYPE_FILENAME: type = "Filename"; break; case CONFIG_TYPE_UINT: type = "Integer"; break; + case CONFIG_TYPE_PORT: type = "Port"; break; case CONFIG_TYPE_INTERVAL: type = "TimeInterval"; break; case CONFIG_TYPE_MEMUNIT: type = "DataSize"; break; case CONFIG_TYPE_DOUBLE: type = "Float"; break; @@ -5385,14 +5339,7 @@ } if (!type) continue; - len = strlen(var->name)+strlen(type)+16; - if (desc) - len += strlen(desc); - line = tor_malloc(len); - if (desc) - tor_snprintf(line, len, "%s %s %s\n",var->name,type,desc); - else - tor_snprintf(line, len, "%s %s\n",var->name,type); + tor_asprintf(&line, "%s %s\n",var->name,type); smartlist_add(sl, line); } *answer = smartlist_join_strings(sl, "", 0, NULL); diff -Nru tor-0.2.1.30/src/or/config_codedigest.c tor-0.2.2.35/src/or/config_codedigest.c --- tor-0.2.1.30/src/or/config_codedigest.c 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/config_codedigest.c 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,11 @@ + +const char *tor_get_digests(void); + +const char * +tor_get_digests(void) +{ + return "" +#include "or_sha1.i" + ; +} + diff -Nru tor-0.2.1.30/src/or/config.h tor-0.2.2.35/src/or/config.h --- tor-0.2.1.30/src/or/config.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/config.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,79 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file config.h + * \brief Header file for config.c. + **/ + +#ifndef _TOR_CONFIG_H +#define _TOR_CONFIG_H + +const char *get_dirportfrontpage(void); +or_options_t *get_options(void); +int set_options(or_options_t *new_val, char **msg); +void config_free_all(void); +const char *safe_str_client(const char *address); +const char *safe_str(const char *address); +const char *escaped_safe_str_client(const char *address); +const char *escaped_safe_str(const char *address); +const char *get_version(void); + +int config_get_lines(const char *string, config_line_t **result); +void config_free_lines(config_line_t *front); +setopt_err_t options_trial_assign(config_line_t *list, int use_defaults, + int clear_first, char **msg); +int resolve_my_address(int warn_severity, or_options_t *options, + uint32_t *addr, char **hostname_out); +int is_local_addr(const tor_addr_t *addr) ATTR_PURE; +void options_init(or_options_t *options); +char *options_dump(or_options_t *options, int minimal); +int options_init_from_torrc(int argc, char **argv); +setopt_err_t options_init_from_string(const char *cf, + int command, const char *command_arg, char **msg); +int option_is_recognized(const char *key); +const char *option_get_canonical_name(const char *key); +config_line_t *option_get_assignment(or_options_t *options, + const char *key); +int options_save_current(void); +const char *get_torrc_fname(void); +char *options_get_datadir_fname2_suffix(or_options_t *options, + const char *sub1, const char *sub2, + const char *suffix); +#define get_datadir_fname2_suffix(sub1, sub2, suffix) \ + options_get_datadir_fname2_suffix(get_options(), (sub1), (sub2), (suffix)) +/** Return a newly allocated string containing datadir/sub1. See + * get_datadir_fname2_suffix. */ +#define get_datadir_fname(sub1) get_datadir_fname2_suffix((sub1), NULL, NULL) +/** Return a newly allocated string containing datadir/sub1/sub2. See + * get_datadir_fname2_suffix. */ +#define get_datadir_fname2(sub1,sub2) \ + get_datadir_fname2_suffix((sub1), (sub2), NULL) +/** Return a newly allocated string containing datadir/sub1suffix. See + * get_datadir_fname2_suffix. */ +#define get_datadir_fname_suffix(sub1, suffix) \ + get_datadir_fname2_suffix((sub1), NULL, (suffix)) + +or_state_t *get_or_state(void); +int did_last_state_file_write_fail(void); +int or_state_save(time_t now); + +int options_need_geoip_info(or_options_t *options, const char **reason_out); +int getinfo_helper_config(control_connection_t *conn, + const char *question, char **answer, + const char **errmsg); + +const char *tor_get_digests(void); +uint32_t get_effective_bwrate(or_options_t *options); +uint32_t get_effective_bwburst(or_options_t *options); + +#ifdef CONFIG_PRIVATE +/* Used only by config.c and test.c */ +or_options_t *options_new(void); +#endif + +#endif + diff -Nru tor-0.2.1.30/src/or/connection.c tor-0.2.2.35/src/or/connection.c --- tor-0.2.1.30/src/or/connection.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/connection.c 2011-12-15 16:28:37.000000000 +0000 @@ -11,9 +11,33 @@ **/ #include "or.h" +#include "buffers.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "circuituse.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "connection_or.h" +#include "control.h" +#include "cpuworker.h" +#include "directory.h" +#include "dirserv.h" +#include "dns.h" +#include "dnsserv.h" +#include "geoip.h" +#include "main.h" +#include "policies.h" +#include "reasons.h" +#include "relay.h" +#include "rendclient.h" +#include "rendcommon.h" +#include "rephist.h" +#include "router.h" +#include "routerparse.h" static connection_t *connection_create_listener( - struct sockaddr *listensockaddr, + const struct sockaddr *listensockaddr, socklen_t listensocklen, int type, char* address); static void connection_init(time_t now, connection_t *conn, int type, @@ -21,16 +45,21 @@ static int connection_init_accepted_conn(connection_t *conn, uint8_t listener_type); static int connection_handle_listener_read(connection_t *conn, int new_type); -static int connection_read_bucket_should_increase(or_connection_t *conn); +static int connection_bucket_should_increase(int bucket, + or_connection_t *conn); static int connection_finished_flushing(connection_t *conn); static int connection_flushed_some(connection_t *conn); static int connection_finished_connecting(connection_t *conn); static int connection_reached_eof(connection_t *conn); -static int connection_read_to_buf(connection_t *conn, int *max_to_read, +static int connection_read_to_buf(connection_t *conn, ssize_t *max_to_read, int *socket_error); static int connection_process_inbuf(connection_t *conn, int package_partial); -static void client_check_address_changed(int sock); -static void set_constrained_socket_buffers(int sock, int size); +static void client_check_address_changed(tor_socket_t sock); +static void set_constrained_socket_buffers(tor_socket_t sock, int size); + +static const char *connection_proxy_state_to_string(int state); +static int connection_read_https_proxy_response(connection_t *conn); +static void connection_send_socks5_connect(connection_t *conn); /** The last IPv4 address that our network interface seemed to have been * binding to, in host order. We use this to detect when our IP changes. */ @@ -92,8 +121,7 @@ case CONN_TYPE_OR: switch (state) { case OR_CONN_STATE_CONNECTING: return "connect()ing"; - case OR_CONN_STATE_PROXY_FLUSHING: return "proxy flushing"; - case OR_CONN_STATE_PROXY_READING: return "proxy reading"; + case OR_CONN_STATE_PROXY_HANDSHAKING: return "handshaking (proxy)"; case OR_CONN_STATE_TLS_HANDSHAKING: return "handshaking (TLS)"; case OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING: return "renegotiating (TLS)"; @@ -177,6 +205,9 @@ or_conn->timestamp_last_added_nonpadding = time(NULL); or_conn->next_circ_id = crypto_rand_int(1<<15); + or_conn->active_circuit_pqueue = smartlist_create(); + or_conn->active_circuit_pqueue_last_recalibrated = cell_ewma_get_tick(); + return or_conn; } @@ -202,6 +233,7 @@ tor_malloc_zero(sizeof(control_connection_t)); connection_init(time(NULL), TO_CONN(control_conn), CONN_TYPE_CONTROL, socket_family); + log_notice(LD_CONTROL, "New control connection opened."); return control_conn; } @@ -299,25 +331,6 @@ conn_b->linked_conn = conn_a; } -/** Tell libevent that we don't care about conn any more. */ -void -connection_unregister_events(connection_t *conn) -{ - if (conn->read_event) { - if (event_del(conn->read_event)) - log_warn(LD_BUG, "Error removing read event for %d", conn->s); - tor_free(conn->read_event); - } - if (conn->write_event) { - if (event_del(conn->write_event)) - log_warn(LD_BUG, "Error removing write event for %d", conn->s); - tor_free(conn->write_event); - } - if (conn->dns_server_port) { - dnsserv_close_listener(conn); - } -} - /** Deallocate memory used by conn. Deallocate its buffers if * necessary, close its socket if necessary, and mark the directory as dirty * if conn is an OR or OP connection. @@ -327,6 +340,9 @@ { void *mem; size_t memlen; + if (!conn) + return; + switch (conn->type) { case CONN_TYPE_OR: tor_assert(conn->magic == OR_CONNECTION_MAGIC); @@ -384,14 +400,11 @@ if (connection_speaks_cells(conn)) { or_connection_t *or_conn = TO_OR_CONN(conn); - if (or_conn->tls) { - tor_tls_free(or_conn->tls); - or_conn->tls = NULL; - } - if (or_conn->handshake_state) { - or_handshake_state_free(or_conn->handshake_state); - or_conn->handshake_state = NULL; - } + tor_tls_free(or_conn->tls); + or_conn->tls = NULL; + or_handshake_state_free(or_conn->handshake_state); + or_conn->handshake_state = NULL; + smartlist_free(or_conn->active_circuit_pqueue); tor_free(or_conn->nickname); } if (CONN_IS_EDGE(conn)) { @@ -401,8 +414,8 @@ memset(edge_conn->socks_request, 0xcc, sizeof(socks_request_t)); tor_free(edge_conn->socks_request); } - if (edge_conn->rend_data) - rend_data_free(edge_conn->rend_data); + + rend_data_free(edge_conn->rend_data); } if (conn->type == CONN_TYPE_CONTROL) { control_connection_t *control_conn = TO_CONTROL_CONN(conn); @@ -415,20 +428,19 @@ if (conn->type == CONN_TYPE_DIR) { dir_connection_t *dir_conn = TO_DIR_CONN(conn); tor_free(dir_conn->requested_resource); - if (dir_conn->zlib_state) - tor_zlib_free(dir_conn->zlib_state); + + tor_zlib_free(dir_conn->zlib_state); if (dir_conn->fingerprint_stack) { SMARTLIST_FOREACH(dir_conn->fingerprint_stack, char *, cp, tor_free(cp)); smartlist_free(dir_conn->fingerprint_stack); } - if (dir_conn->cached_dir) - cached_dir_decref(dir_conn->cached_dir); - if (dir_conn->rend_data) - rend_data_free(dir_conn->rend_data); + + cached_dir_decref(dir_conn->cached_dir); + rend_data_free(dir_conn->rend_data); } - if (conn->s >= 0) { - log_debug(LD_NET,"closing fd %d.",conn->s); + if (SOCKET_OK(conn->s)) { + log_debug(LD_NET,"closing fd %d.",(int)conn->s); tor_close_socket(conn->s); conn->s = -1; } @@ -439,7 +451,7 @@ connection_or_remove_from_identity_map(TO_OR_CONN(conn)); } - memset(conn, 0xAA, memlen); /* poison memory */ + memset(mem, 0xCC, memlen); /* poison memory */ tor_free(mem); } @@ -448,7 +460,8 @@ void connection_free(connection_t *conn) { - tor_assert(conn); + if (!conn) + return; tor_assert(!connection_is_on_closeable_list(conn)); tor_assert(!connection_in_array(conn)); if (conn->linked_conn) { @@ -466,8 +479,7 @@ } } if (conn->type == CONN_TYPE_CONTROL) { - TO_CONTROL_CONN(conn)->event_mask = 0; - control_update_global_event_mask(); + connection_control_closed(TO_CONTROL_CONN(conn)); } connection_unregister_events(conn); _connection_free(conn); @@ -544,13 +556,6 @@ * failed: forget about this router, and maybe try again. */ connection_dir_request_failed(dir_conn); } - if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC && dir_conn->rend_data) { - /* Give it a try. However, there is no re-fetching for v0 rend - * descriptors; if the response is empty or the descriptor is - * unusable, close pending connections (unless a v2 request is - * still in progress). */ - rend_client_desc_trynow(dir_conn->rend_data->onion_address, 0); - } /* If we were trying to fetch a v2 rend desc and did not succeed, * retry as needed. (If a fetch is successful, the connection state * is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC to mark that @@ -573,7 +578,7 @@ or_options_t *options = get_options(); rep_hist_note_connect_failed(or_conn->identity_digest, now); entry_guard_register_connect_status(or_conn->identity_digest,0, - !options->HttpsProxy, now); + !options->HTTPSProxy, now); if (conn->state >= OR_CONN_STATE_TLS_HANDSHAKING) { int reason = tls_error_to_orconn_end_reason(or_conn->tls_error); control_event_or_conn_status(or_conn, OR_CONN_EVENT_FAILED, @@ -589,7 +594,7 @@ rep_hist_note_disconnect(or_conn->identity_digest, now); control_event_or_conn_status(or_conn, OR_CONN_EVENT_CLOSED, tls_error_to_orconn_end_reason(or_conn->tls_error)); - } else if (or_conn->identity_digest) { + } else if (!tor_digest_is_zero(or_conn->identity_digest)) { rep_hist_note_connection_died(or_conn->identity_digest, now); control_event_or_conn_status(or_conn, OR_CONN_EVENT_CLOSED, tls_error_to_orconn_end_reason(or_conn->tls_error)); @@ -657,14 +662,14 @@ } if (conn->outbuf_flushlen) { log_info(LD_NET,"fd %d, type %s, state %s, %d bytes on outbuf.", - conn->s, conn_type_to_string(conn->type), + (int)conn->s, conn_type_to_string(conn->type), conn_state_to_string(conn->type, conn->state), (int)conn->outbuf_flushlen); } connection_unregister_events(conn); - if (conn->s >= 0) + if (SOCKET_OK(conn->s)) tor_close_socket(conn->s); conn->s = -1; if (conn->linked) @@ -734,7 +739,7 @@ log_fn(severity, LD_NET, "Giving up on marked_for_close conn that's been flushing " "for 15s (fd %d, type %s, state %s).", - conn->s, conn_type_to_string(conn->type), + (int)conn->s, conn_type_to_string(conn->type), conn_state_to_string(conn->type, conn->state)); conn->hold_open_until_flushed = 0; } @@ -753,7 +758,7 @@ * The listenaddr struct has to be freed by the caller. */ static struct sockaddr_in * -create_inet_sockaddr(const char *listenaddress, uint16_t listenport, +create_inet_sockaddr(const char *listenaddress, int listenport, char **readable_address, socklen_t *socklen_out) { struct sockaddr_in *listenaddr = NULL; uint32_t addr; @@ -765,8 +770,10 @@ "Error parsing/resolving ListenAddress %s", listenaddress); goto err; } - if (usePort==0) - usePort = listenport; + if (usePort==0) { + if (listenport != CFG_AUTO_PORT) + usePort = listenport; + } listenaddr = tor_malloc_zero(sizeof(struct sockaddr_in)); listenaddr->sin_addr.s_addr = htonl(addr); @@ -804,7 +811,13 @@ sockaddr = tor_malloc_zero(sizeof(struct sockaddr_un)); sockaddr->sun_family = AF_UNIX; - strncpy(sockaddr->sun_path, listenaddress, sizeof(sockaddr->sun_path)); + if (strlcpy(sockaddr->sun_path, listenaddress, sizeof(sockaddr->sun_path)) + >= sizeof(sockaddr->sun_path)) { + log_warn(LD_CONFIG, "Unix socket path '%s' is too long to fit.", + escaped(listenaddress)); + tor_free(sockaddr); + return NULL; + } if (readable_address) *readable_address = tor_strdup(listenaddress); @@ -833,16 +846,72 @@ warn_too_many_conns(void) { #define WARN_TOO_MANY_CONNS_INTERVAL (6*60*60) - static time_t last_warned = 0; - time_t now = time(NULL); - int n_conns = get_n_open_sockets(); - if (last_warned + WARN_TOO_MANY_CONNS_INTERVAL < now) { + static ratelim_t last_warned = RATELIM_INIT(WARN_TOO_MANY_CONNS_INTERVAL); + char *m; + if ((m = rate_limit_log(&last_warned, approx_time()))) { + int n_conns = get_n_open_sockets(); log_warn(LD_NET,"Failing because we have %d connections already. Please " - "raise your ulimit -n.", n_conns); - last_warned = now; + "raise your ulimit -n.%s", n_conns, m); + tor_free(m); + control_event_general_status(LOG_WARN, "TOO_MANY_CONNECTIONS CURRENT=%d", + n_conns); } - control_event_general_status(LOG_WARN, "TOO_MANY_CONNECTIONS CURRENT=%d", - n_conns); +} + +#ifdef HAVE_SYS_UN_H +/** Check whether we should be willing to open an AF_UNIX socket in + * path. Return 0 if we should go ahead and -1 if we shouldn't. */ +static int +check_location_for_unix_socket(or_options_t *options, const char *path) +{ + int r = -1; + char *p = tor_strdup(path); + cpd_check_t flags = CPD_CHECK_MODE_ONLY; + if (get_parent_directory(p)<0) + goto done; + + if (options->ControlSocketsGroupWritable) + flags |= CPD_GROUP_OK; + + if (check_private_dir(p, flags, options->User) < 0) { + char *escpath, *escdir; + escpath = esc_for_log(path); + escdir = esc_for_log(p); + log_warn(LD_GENERAL, "Before Tor can create a control socket in %s, the " + "directory %s needs to exist, and to be accessible only by the " + "user%s account that is running Tor. (On some Unix systems, " + "anybody who can list a socket can conect to it, so Tor is " + "being careful.)", escpath, escdir, + options->ControlSocketsGroupWritable ? " and group" : ""); + tor_free(escpath); + tor_free(escdir); + goto done; + } + + r = 0; + done: + tor_free(p); + return r; +} +#endif + +/** Tell the TCP stack that it shouldn't wait for a long time after + * sock has closed before reusing its port. */ +static void +make_socket_reuseable(tor_socket_t sock) +{ +#ifdef MS_WINDOWS + (void) sock; +#else + int one=1; + + /* REUSEADDR on normal places means you can rebind to the port + * right after somebody else has let it go. But REUSEADDR on win32 + * means you can bind to the port _even when somebody else + * already has it bound_. So, don't do that on Win32. */ + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*) &one, + (socklen_t)sizeof(one)); +#endif } /** Bind a new non-blocking socket listening to the socket described @@ -852,12 +921,13 @@ * to the conn. */ static connection_t * -connection_create_listener(struct sockaddr *listensockaddr, socklen_t socklen, +connection_create_listener(const struct sockaddr *listensockaddr, + socklen_t socklen, int type, char* address) { connection_t *conn; - int s; /* the socket we're going to make */ - uint16_t usePort = 0; + tor_socket_t s; /* the socket we're going to make */ + uint16_t usePort = 0, gotPort = 0; int start_reading = 0; if (get_n_open_sockets() >= get_options()->_ConnLimit-1) { @@ -866,35 +936,25 @@ } if (listensockaddr->sa_family == AF_INET) { + tor_addr_t addr; int is_tcp = (type != CONN_TYPE_AP_DNS_LISTENER); -#ifndef MS_WINDOWS - int one=1; -#endif if (is_tcp) start_reading = 1; - usePort = ntohs( (uint16_t) - ((struct sockaddr_in *)listensockaddr)->sin_port); + tor_addr_from_sockaddr(&addr, listensockaddr, &usePort); log_notice(LD_NET, "Opening %s on %s:%d", - conn_type_to_string(type), address, usePort); + conn_type_to_string(type), fmt_addr(&addr), usePort); s = tor_open_socket(PF_INET, is_tcp ? SOCK_STREAM : SOCK_DGRAM, is_tcp ? IPPROTO_TCP: IPPROTO_UDP); - if (s < 0) { + if (!SOCKET_OK(s)) { log_warn(LD_NET,"Socket creation failed."); goto err; } -#ifndef MS_WINDOWS - /* REUSEADDR on normal places means you can rebind to the port - * right after somebody else has let it go. But REUSEADDR on win32 - * means you can bind to the port _even when somebody else - * already has it bound_. So, don't do that on Win32. */ - setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (void*) &one, - (socklen_t)sizeof(one)); -#endif + make_socket_reuseable(s); if (bind(s,listensockaddr,socklen) < 0) { const char *helpfulhint = ""; @@ -915,6 +975,21 @@ goto err; } } + + if (usePort != 0) { + gotPort = usePort; + } else { + tor_addr_t addr2; + struct sockaddr_storage ss; + socklen_t ss_len=sizeof(ss); + if (getsockname(s, (struct sockaddr*)&ss, &ss_len)<0) { + log_warn(LD_NET, "getsockname() couldn't learn address for %s: %s", + conn_type_to_string(type), + tor_socket_strerror(tor_socket_errno(s))); + gotPort = 0; + } + tor_addr_from_sockaddr(&addr2, (struct sockaddr*)&ss, &gotPort); + } #ifdef HAVE_SYS_UN_H } else if (listensockaddr->sa_family == AF_UNIX) { start_reading = 1; @@ -923,6 +998,9 @@ * and listeners at the same time */ tor_assert(type == CONN_TYPE_CONTROL_LISTENER); + if (check_location_for_unix_socket(get_options(), address) < 0) + goto err; + log_notice(LD_NET, "Opening %s on %s", conn_type_to_string(type), address); @@ -942,6 +1020,15 @@ tor_socket_strerror(tor_socket_errno(s))); goto err; } + if (get_options()->ControlSocketsGroupWritable) { + /* We need to use chmod; fchmod doesn't work on sockets on all + * platforms. */ + if (chmod(address, 0660) < 0) { + log_warn(LD_FS,"Unable to make %s group-writable.", address); + tor_close_socket(s); + goto err; + } + } if (listen(s,SOMAXCONN) < 0) { log_warn(LD_NET, "Could not listen on %s: %s", address, @@ -962,7 +1049,7 @@ conn->socket_family = listensockaddr->sa_family; conn->s = s; conn->address = tor_strdup(address); - conn->port = usePort; + conn->port = gotPort; if (connection_add(conn) < 0) { /* no space, forget it */ log_warn(LD_NET,"connection_add for listener failed. Giving up."); @@ -970,8 +1057,9 @@ goto err; } - log_debug(LD_NET,"%s listening on port %u.", - conn_type_to_string(type), usePort); + log_fn(usePort==gotPort ? LOG_DEBUG : LOG_NOTICE, LD_NET, + "%s listening on port %u.", + conn_type_to_string(type), gotPort); conn->state = LISTENER_STATE_READY; if (start_reading) { @@ -1051,7 +1139,7 @@ static int connection_handle_listener_read(connection_t *conn, int new_type) { - int news; /* the new socket */ + tor_socket_t news; /* the new socket */ connection_t *newconn; /* information about the remote peer when connecting to other routers */ char addrbuf[256]; @@ -1064,7 +1152,7 @@ memset(addrbuf, 0, sizeof(addrbuf)); news = tor_accept_socket(conn->s,remote,&remotelen); - if (news < 0) { /* accept() error */ + if (!SOCKET_OK(news)) { /* accept() error */ int e = tor_socket_errno(conn->s); if (ERRNO_IS_ACCEPT_EAGAIN(e)) { return 0; /* he hung up before we could accept(). that's fine. */ @@ -1080,8 +1168,9 @@ } log_debug(LD_NET, "Connection accepted on socket %d (child of fd %d).", - news,conn->s); + (int)news,(int)conn->s); + make_socket_reuseable(news); set_socket_nonblocking(news); if (options->ConstrainedSockets) @@ -1172,7 +1261,8 @@ } if (connection_init_accepted_conn(newconn, conn->type) < 0) { - connection_mark_for_close(newconn); + if (! newconn->marked_for_close) + connection_mark_for_close(newconn); return 0; } return 0; @@ -1198,9 +1288,11 @@ conn->state = AP_CONN_STATE_SOCKS_WAIT; break; case CONN_TYPE_AP_TRANS_LISTENER: + TO_EDGE_CONN(conn)->is_transparent_ap = 1; conn->state = AP_CONN_STATE_CIRCUIT_WAIT; return connection_ap_process_transparent(TO_EDGE_CONN(conn)); case CONN_TYPE_AP_NATD_LISTENER: + TO_EDGE_CONN(conn)->is_transparent_ap = 1; conn->state = AP_CONN_STATE_NATD_WAIT; break; } @@ -1229,9 +1321,10 @@ connection_connect(connection_t *conn, const char *address, const tor_addr_t *addr, uint16_t port, int *socket_error) { - int s, inprogress = 0; + tor_socket_t s; + int inprogress = 0; char addrbuf[256]; - struct sockaddr *dest_addr = (struct sockaddr*) addrbuf; + struct sockaddr *dest_addr; socklen_t dest_addr_len; or_options_t *options = get_options(); int protocol_family; @@ -1254,7 +1347,7 @@ return -1; } - if (options->OutboundBindAddress) { + if (options->OutboundBindAddress && !tor_addr_is_loopback(addr)) { struct sockaddr_in ext_addr; memset(&ext_addr, 0, sizeof(ext_addr)); @@ -1285,7 +1378,10 @@ dest_addr_len = tor_addr_to_sockaddr(addr, port, dest_addr, sizeof(addrbuf)); tor_assert(dest_addr_len > 0); - log_debug(LD_NET,"Connecting to %s:%u.",escaped_safe_str(address),port); + log_debug(LD_NET, "Connecting to %s:%u.", + escaped_safe_str_client(address), port); + + make_socket_reuseable(s); if (connect(s, dest_addr, dest_addr_len) < 0) { int e = tor_socket_errno(s); @@ -1293,7 +1389,8 @@ /* yuck. kill it. */ *socket_error = e; log_info(LD_NET, - "connect() to %s:%u failed: %s",escaped_safe_str(address), + "connect() to %s:%u failed: %s", + escaped_safe_str_client(address), port, tor_socket_strerror(e)); tor_close_socket(s); return -1; @@ -1307,7 +1404,8 @@ /* it succeeded. we're connected. */ log_fn(inprogress?LOG_DEBUG:LOG_INFO, LD_NET, - "Connection to %s:%u %s (sock %d).",escaped_safe_str(address), + "Connection to %s:%u %s (sock %d).", + escaped_safe_str_client(address), port, inprogress?"in progress":"established", s); conn->s = s; if (connection_add(conn) < 0) /* no space, forget it */ @@ -1315,6 +1413,363 @@ return inprogress ? 0 : 1; } +/** Convert state number to string representation for logging purposes. + */ +static const char * +connection_proxy_state_to_string(int state) +{ + static const char *unknown = "???"; + static const char *states[] = { + "PROXY_NONE", + "PROXY_HTTPS_WANT_CONNECT_OK", + "PROXY_SOCKS4_WANT_CONNECT_OK", + "PROXY_SOCKS5_WANT_AUTH_METHOD_NONE", + "PROXY_SOCKS5_WANT_AUTH_METHOD_RFC1929", + "PROXY_SOCKS5_WANT_AUTH_RFC1929_OK", + "PROXY_SOCKS5_WANT_CONNECT_OK", + "PROXY_CONNECTED", + }; + + if (state < PROXY_NONE || state > PROXY_CONNECTED) + return unknown; + + return states[state]; +} + +/** Write a proxy request of type (socks4, socks5, https) to conn + * for conn->addr:conn->port, authenticating with the auth details given + * in the configuration (if available). SOCKS 5 and HTTP CONNECT proxies + * support authentication. + * + * Returns -1 if conn->addr is incompatible with the proxy protocol, and + * 0 otherwise. + * + * Use connection_read_proxy_handshake() to complete the handshake. + */ +int +connection_proxy_connect(connection_t *conn, int type) +{ + or_options_t *options; + + tor_assert(conn); + + options = get_options(); + + switch (type) { + case PROXY_CONNECT: { + char buf[1024]; + char *base64_authenticator=NULL; + const char *authenticator = options->HTTPSProxyAuthenticator; + + /* Send HTTP CONNECT and authentication (if available) in + * one request */ + + if (authenticator) { + base64_authenticator = alloc_http_authenticator(authenticator); + if (!base64_authenticator) + log_warn(LD_OR, "Encoding https authenticator failed"); + } + + if (base64_authenticator) { + tor_snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.1\r\n" + "Proxy-Authorization: Basic %s\r\n\r\n", + fmt_addr(&conn->addr), + conn->port, base64_authenticator); + tor_free(base64_authenticator); + } else { + tor_snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.0\r\n\r\n", + fmt_addr(&conn->addr), conn->port); + } + + connection_write_to_buf(buf, strlen(buf), conn); + conn->proxy_state = PROXY_HTTPS_WANT_CONNECT_OK; + break; + } + + case PROXY_SOCKS4: { + unsigned char buf[9]; + uint16_t portn; + uint32_t ip4addr; + + /* Send a SOCKS4 connect request with empty user id */ + + if (tor_addr_family(&conn->addr) != AF_INET) { + log_warn(LD_NET, "SOCKS4 client is incompatible with IPv6"); + return -1; + } + + ip4addr = tor_addr_to_ipv4n(&conn->addr); + portn = htons(conn->port); + + buf[0] = 4; /* version */ + buf[1] = SOCKS_COMMAND_CONNECT; /* command */ + memcpy(buf + 2, &portn, 2); /* port */ + memcpy(buf + 4, &ip4addr, 4); /* addr */ + buf[8] = 0; /* userid (empty) */ + + connection_write_to_buf((char *)buf, sizeof(buf), conn); + conn->proxy_state = PROXY_SOCKS4_WANT_CONNECT_OK; + break; + } + + case PROXY_SOCKS5: { + unsigned char buf[4]; /* fields: vers, num methods, method list */ + + /* Send a SOCKS5 greeting (connect request must wait) */ + + buf[0] = 5; /* version */ + + /* number of auth methods */ + if (options->Socks5ProxyUsername) { + buf[1] = 2; + buf[2] = 0x00; /* no authentication */ + buf[3] = 0x02; /* rfc1929 Username/Passwd auth */ + conn->proxy_state = PROXY_SOCKS5_WANT_AUTH_METHOD_RFC1929; + } else { + buf[1] = 1; + buf[2] = 0x00; /* no authentication */ + conn->proxy_state = PROXY_SOCKS5_WANT_AUTH_METHOD_NONE; + } + + connection_write_to_buf((char *)buf, 2 + buf[1], conn); + break; + } + + default: + log_err(LD_BUG, "Invalid proxy protocol, %d", type); + tor_fragile_assert(); + return -1; + } + + log_debug(LD_NET, "set state %s", + connection_proxy_state_to_string(conn->proxy_state)); + + return 0; +} + +/** Read conn's inbuf. If the http response from the proxy is all + * here, make sure it's good news, then return 1. If it's bad news, + * return -1. Else return 0 and hope for better luck next time. + */ +static int +connection_read_https_proxy_response(connection_t *conn) +{ + char *headers; + char *reason=NULL; + int status_code; + time_t date_header; + + switch (fetch_from_buf_http(conn->inbuf, + &headers, MAX_HEADERS_SIZE, + NULL, NULL, 10000, 0)) { + case -1: /* overflow */ + log_warn(LD_PROTOCOL, + "Your https proxy sent back an oversized response. Closing."); + return -1; + case 0: + log_info(LD_NET,"https proxy response not all here yet. Waiting."); + return 0; + /* case 1, fall through */ + } + + if (parse_http_response(headers, &status_code, &date_header, + NULL, &reason) < 0) { + log_warn(LD_NET, + "Unparseable headers from proxy (connecting to '%s'). Closing.", + conn->address); + tor_free(headers); + return -1; + } + if (!reason) reason = tor_strdup("[no reason given]"); + + if (status_code == 200) { + log_info(LD_NET, + "HTTPS connect to '%s' successful! (200 %s) Starting TLS.", + conn->address, escaped(reason)); + tor_free(reason); + return 1; + } + /* else, bad news on the status code */ + switch (status_code) { + case 403: + log_warn(LD_NET, + "The https proxy refused to allow connection to %s " + "(status code %d, %s). Closing.", + conn->address, status_code, escaped(reason)); + break; + default: + log_warn(LD_NET, + "The https proxy sent back an unexpected status code %d (%s). " + "Closing.", + status_code, escaped(reason)); + break; + } + tor_free(reason); + return -1; +} + +/** Send SOCKS5 CONNECT command to conn, copying conn->addr + * and conn->port into the request. + */ +static void +connection_send_socks5_connect(connection_t *conn) +{ + unsigned char buf[1024]; + size_t reqsize = 6; + uint16_t port = htons(conn->port); + + buf[0] = 5; /* version */ + buf[1] = SOCKS_COMMAND_CONNECT; /* command */ + buf[2] = 0; /* reserved */ + + if (tor_addr_family(&conn->addr) == AF_INET) { + uint32_t addr = tor_addr_to_ipv4n(&conn->addr); + + buf[3] = 1; + reqsize += 4; + memcpy(buf + 4, &addr, 4); + memcpy(buf + 8, &port, 2); + } else { /* AF_INET6 */ + buf[3] = 4; + reqsize += 16; + memcpy(buf + 4, tor_addr_to_in6(&conn->addr), 16); + memcpy(buf + 20, &port, 2); + } + + connection_write_to_buf((char *)buf, reqsize, conn); + + conn->proxy_state = PROXY_SOCKS5_WANT_CONNECT_OK; +} + +/** Call this from connection_*_process_inbuf() to advance the proxy + * handshake. + * + * No matter what proxy protocol is used, if this function returns 1, the + * handshake is complete, and the data remaining on inbuf may contain the + * start of the communication with the requested server. + * + * Returns 0 if the current buffer contains an incomplete response, and -1 + * on error. + */ +int +connection_read_proxy_handshake(connection_t *conn) +{ + int ret = 0; + char *reason = NULL; + + log_debug(LD_NET, "enter state %s", + connection_proxy_state_to_string(conn->proxy_state)); + + switch (conn->proxy_state) { + case PROXY_HTTPS_WANT_CONNECT_OK: + ret = connection_read_https_proxy_response(conn); + if (ret == 1) + conn->proxy_state = PROXY_CONNECTED; + break; + + case PROXY_SOCKS4_WANT_CONNECT_OK: + ret = fetch_from_buf_socks_client(conn->inbuf, + conn->proxy_state, + &reason); + if (ret == 1) + conn->proxy_state = PROXY_CONNECTED; + break; + + case PROXY_SOCKS5_WANT_AUTH_METHOD_NONE: + ret = fetch_from_buf_socks_client(conn->inbuf, + conn->proxy_state, + &reason); + /* no auth needed, do connect */ + if (ret == 1) { + connection_send_socks5_connect(conn); + ret = 0; + } + break; + + case PROXY_SOCKS5_WANT_AUTH_METHOD_RFC1929: + ret = fetch_from_buf_socks_client(conn->inbuf, + conn->proxy_state, + &reason); + + /* send auth if needed, otherwise do connect */ + if (ret == 1) { + connection_send_socks5_connect(conn); + ret = 0; + } else if (ret == 2) { + unsigned char buf[1024]; + size_t reqsize, usize, psize; + const char *user, *pass; + + user = get_options()->Socks5ProxyUsername; + pass = get_options()->Socks5ProxyPassword; + tor_assert(user && pass); + + /* XXX len of user and pass must be <= 255 !!! */ + usize = strlen(user); + psize = strlen(pass); + tor_assert(usize <= 255 && psize <= 255); + reqsize = 3 + usize + psize; + + buf[0] = 1; /* negotiation version */ + buf[1] = usize; + memcpy(buf + 2, user, usize); + buf[2 + usize] = psize; + memcpy(buf + 3 + usize, pass, psize); + + connection_write_to_buf((char *)buf, reqsize, conn); + + conn->proxy_state = PROXY_SOCKS5_WANT_AUTH_RFC1929_OK; + ret = 0; + } + break; + + case PROXY_SOCKS5_WANT_AUTH_RFC1929_OK: + ret = fetch_from_buf_socks_client(conn->inbuf, + conn->proxy_state, + &reason); + /* send the connect request */ + if (ret == 1) { + connection_send_socks5_connect(conn); + ret = 0; + } + break; + + case PROXY_SOCKS5_WANT_CONNECT_OK: + ret = fetch_from_buf_socks_client(conn->inbuf, + conn->proxy_state, + &reason); + if (ret == 1) + conn->proxy_state = PROXY_CONNECTED; + break; + + default: + log_err(LD_BUG, "Invalid proxy_state for reading, %d", + conn->proxy_state); + tor_fragile_assert(); + ret = -1; + break; + } + + log_debug(LD_NET, "leaving state %s", + connection_proxy_state_to_string(conn->proxy_state)); + + if (ret < 0) { + if (reason) { + log_warn(LD_NET, "Proxy Client: unable to connect to %s:%d (%s)", + conn->address, conn->port, escaped(reason)); + tor_free(reason); + } else { + log_warn(LD_NET, "Proxy Client: unable to connect to %s:%d", + conn->address, conn->port); + } + } else if (ret == 1) { + log_info(LD_NET, "Proxy Client: connection to %s:%d successful", + conn->address, conn->port); + } + + return ret; +} + /** * Launch any configured listener connections of type type. (A * listener is configured if port_option is non-zero. If any @@ -1384,10 +1839,23 @@ if (!parse_addr_port(LOG_WARN, wanted->value, &address, NULL, &port)) { int addr_matches = !strcasecmp(address, conn->address); + int port_matches; tor_free(address); - if (! port) - port = port_option; - if (port == conn->port && addr_matches) { + if (port) { + /* The Listener line has a port */ + port_matches = (port == conn->port); + } else if (port_option == CFG_AUTO_PORT) { + /* The Listener line has no port, and the Port line is "auto". + * "auto" matches anything; transitions from any port to + * "auto" succeed. */ + port_matches = 1; + } else { + /* The Listener line has no port, and the Port line is "auto". + * "auto" matches anything; transitions from any port to + * "auto" succeed. */ + port_matches = (port_option == conn->port); + } + if (port_matches && addr_matches) { line = wanted; break; } @@ -1435,7 +1903,7 @@ case AF_INET: listensockaddr = (struct sockaddr *) create_inet_sockaddr(cfg_line->value, - (uint16_t) port_option, + port_option, &address, &listensocklen); break; case AF_UNIX: @@ -1485,37 +1953,40 @@ smartlist_t *new_conns) { or_options_t *options = get_options(); + int retval = 0; + const uint16_t old_or_port = router_get_advertised_or_port(options); + const uint16_t old_dir_port = router_get_advertised_dir_port(options, 0); if (retry_listeners(CONN_TYPE_OR_LISTENER, options->ORListenAddress, options->ORPort, "0.0.0.0", replaced_conns, new_conns, options->ClientOnly, AF_INET)<0) - return -1; + retval = -1; if (retry_listeners(CONN_TYPE_DIR_LISTENER, options->DirListenAddress, options->DirPort, "0.0.0.0", replaced_conns, new_conns, options->ClientOnly, AF_INET)<0) - return -1; + retval = -1; if (retry_listeners(CONN_TYPE_AP_LISTENER, options->SocksListenAddress, options->SocksPort, "127.0.0.1", replaced_conns, new_conns, 0, AF_INET)<0) - return -1; + retval = -1; if (retry_listeners(CONN_TYPE_AP_TRANS_LISTENER, options->TransListenAddress, options->TransPort, "127.0.0.1", replaced_conns, new_conns, 0, AF_INET)<0) - return -1; - if (retry_listeners(CONN_TYPE_AP_NATD_LISTENER, options->NatdListenAddress, - options->NatdPort, "127.0.0.1", + retval = -1; + if (retry_listeners(CONN_TYPE_AP_NATD_LISTENER, options->NATDListenAddress, + options->NATDPort, "127.0.0.1", replaced_conns, new_conns, 0, AF_INET)<0) - return -1; + retval = -1; if (retry_listeners(CONN_TYPE_AP_DNS_LISTENER, options->DNSListenAddress, options->DNSPort, "127.0.0.1", replaced_conns, new_conns, 0, AF_INET)<0) - return -1; + retval = -1; if (retry_listeners(CONN_TYPE_CONTROL_LISTENER, options->ControlListenAddress, options->ControlPort, "127.0.0.1", @@ -1529,7 +2000,16 @@ AF_UNIX)<0) return -1; - return 0; + if (old_or_port != router_get_advertised_or_port(options) || + old_dir_port != router_get_advertised_dir_port(options, 0)) { + /* Our chosen ORPort or DirPort is not what it used to be: the + * descriptor we had (if any) should be regenerated. (We won't + * automatically notice this because of changes in the option, + * since the value could be "auto".) */ + mark_my_descriptor_dirty("Chosen Or/DirPort changed"); + } + + return retval; } /** Return 1 if we should apply rate limiting to conn, @@ -1643,6 +2123,7 @@ int base = connection_speaks_cells(conn) ? CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE; int priority = conn->type != CONN_TYPE_DIR; + int conn_bucket = (int)conn->outbuf_flushlen; int global_bucket = global_write_bucket; if (!connection_is_rate_limited(conn)) { @@ -1650,12 +2131,22 @@ return conn->outbuf_flushlen; } + if (connection_speaks_cells(conn)) { + /* use the per-conn write limit if it's lower, but if it's less + * than zero just use zero */ + or_connection_t *or_conn = TO_OR_CONN(conn); + if (conn->state == OR_CONN_STATE_OPEN) + if (or_conn->write_bucket < conn_bucket) + conn_bucket = or_conn->write_bucket >= 0 ? + or_conn->write_bucket : 0; + } + if (connection_counts_as_relayed_traffic(conn, now) && global_relayed_write_bucket <= global_write_bucket) global_bucket = global_relayed_write_bucket; - return connection_bucket_round_robin(base, priority, global_bucket, - conn->outbuf_flushlen); + return connection_bucket_round_robin(base, priority, + global_bucket, conn_bucket); } /** Return 1 if the global write buckets are low enough that we @@ -1709,14 +2200,12 @@ return 0; } -/** We just read num_read and wrote num_written onto conn. - * Decrement buckets appropriately. */ +/** We just read num_read and wrote num_written bytes + * onto conn. Decrement buckets appropriately. */ static void connection_buckets_decrement(connection_t *conn, time_t now, size_t num_read, size_t num_written) { - if (!connection_is_rate_limited(conn)) - return; /* local IPs are free */ if (num_written >= INT_MAX || num_read >= INT_MAX) { log_err(LD_BUG, "Value out of range. num_read=%lu, num_written=%lu, " "connection type=%s, state=%s", @@ -1728,10 +2217,24 @@ tor_fragile_assert(); } - if (num_read > 0) + /* Count bytes of answering direct and tunneled directory requests */ + if (conn->type == CONN_TYPE_DIR && conn->purpose == DIR_PURPOSE_SERVER) { + if (num_read > 0) + rep_hist_note_dir_bytes_read(num_read, now); + if (num_written > 0) + rep_hist_note_dir_bytes_written(num_written, now); + } + + if (!connection_is_rate_limited(conn)) + return; /* local IPs are free */ + if (num_read > 0) { rep_hist_note_bytes_read(num_read, now); - if (num_written > 0) + } + if (num_written > 0) { rep_hist_note_bytes_written(num_written, now); + } + if (conn->type == CONN_TYPE_EXIT) + rep_hist_note_exit_bytes(conn->port, num_written, num_read); if (connection_counts_as_relayed_traffic(conn, now)) { global_relayed_read_bucket -= (int)num_read; @@ -1739,8 +2242,10 @@ } global_read_bucket -= (int)num_read; global_write_bucket -= (int)num_written; - if (connection_speaks_cells(conn) && conn->state == OR_CONN_STATE_OPEN) + if (connection_speaks_cells(conn) && conn->state == OR_CONN_STATE_OPEN) { TO_OR_CONN(conn)->read_bucket -= (int)num_read; + TO_OR_CONN(conn)->write_bucket -= (int)num_written; + } } /** If we have exhausted our global buckets, or the buckets for conn, @@ -1779,12 +2284,10 @@ } else if (connection_counts_as_relayed_traffic(conn, approx_time()) && global_relayed_write_bucket <= 0) { reason = "global relayed write bucket exhausted. Pausing."; -#if 0 } else if (connection_speaks_cells(conn) && conn->state == OR_CONN_STATE_OPEN && TO_OR_CONN(conn)->write_bucket <= 0) { reason = "connection write bucket exhausted. Pausing."; -#endif } else return; /* all good, no need to stop it */ @@ -1880,14 +2383,19 @@ { if (connection_speaks_cells(conn)) { or_connection_t *or_conn = TO_OR_CONN(conn); - if (connection_read_bucket_should_increase(or_conn)) { + if (connection_bucket_should_increase(or_conn->read_bucket, or_conn)) { connection_bucket_refill_helper(&or_conn->read_bucket, or_conn->bandwidthrate, or_conn->bandwidthburst, seconds_elapsed, "or_conn->read_bucket"); - //log_fn(LOG_DEBUG,"Receiver bucket %d now %d.", i, - // conn->read_bucket); + } + if (connection_bucket_should_increase(or_conn->write_bucket, or_conn)) { + connection_bucket_refill_helper(&or_conn->write_bucket, + or_conn->bandwidthrate, + or_conn->bandwidthburst, + seconds_elapsed, + "or_conn->write_bucket"); } } @@ -1900,7 +2408,7 @@ TO_OR_CONN(conn)->read_bucket > 0)) { /* and either a non-cell conn or a cell conn with non-empty bucket */ LOG_FN_CONN(conn, (LOG_DEBUG,LD_NET, - "waking up conn (fd %d) for read", conn->s)); + "waking up conn (fd %d) for read", (int)conn->s)); conn->read_blocked_on_bw = 0; connection_start_reading(conn); } @@ -1908,27 +2416,29 @@ if (conn->write_blocked_on_bw == 1 && global_write_bucket > 0 /* and we're allowed to write */ && (!connection_counts_as_relayed_traffic(conn, now) || - global_relayed_write_bucket > 0)) { - /* even if we're relayed traffic */ + global_relayed_write_bucket > 0) /* even if it's relayed traffic */ + && (!connection_speaks_cells(conn) || + conn->state != OR_CONN_STATE_OPEN || + TO_OR_CONN(conn)->write_bucket > 0)) { LOG_FN_CONN(conn, (LOG_DEBUG,LD_NET, - "waking up conn (fd %d) for write", conn->s)); + "waking up conn (fd %d) for write", (int)conn->s)); conn->write_blocked_on_bw = 0; connection_start_writing(conn); } }); } -/** Is the receiver bucket for connection conn low enough that we +/** Is the bucket for connection conn low enough that we * should add another pile of tokens to it? */ static int -connection_read_bucket_should_increase(or_connection_t *conn) +connection_bucket_should_increase(int bucket, or_connection_t *conn) { tor_assert(conn); if (conn->_base.state != OR_CONN_STATE_OPEN) return 0; /* only open connections play the rate limiting game */ - if (conn->read_bucket >= conn->bandwidthburst) + if (bucket >= conn->bandwidthburst) return 0; return 1; @@ -1946,10 +2456,10 @@ * Mark the connection and return -1 if you want to close it, else * return 0. */ -int -connection_handle_read(connection_t *conn) +static int +connection_handle_read_impl(connection_t *conn) { - int max_to_read=-1, try_to_read; + ssize_t max_to_read=-1, try_to_read; size_t before, n_read = 0; int socket_error = 0; @@ -1975,7 +2485,7 @@ return 0; } -loop_again: + loop_again: try_to_read = max_to_read; tor_assert(!conn->marked_for_close); @@ -2016,12 +2526,16 @@ return -1; } if (conn->linked_conn) { - /* The other side's handle_write will never actually get called, so + /* The other side's handle_write() will never actually get called, so * we need to invoke the appropriate callbacks ourself. */ connection_t *linked = conn->linked_conn; if (n_read) { - /* Probably a no-op, but hey. */ + /* Probably a no-op, since linked conns typically don't count for + * bandwidth rate limiting. But do it anyway so we can keep stats + * accurately. Note that since we read the bytes from conn, and + * we're writing the bytes onto the linked connection, we count + * these as written bytes. */ connection_buckets_decrement(linked, approx_time(), 0, n_read); if (connection_flushed_some(linked) < 0) @@ -2033,7 +2547,7 @@ if (!buf_datalen(linked->outbuf) && conn->active_on_link) connection_stop_reading_from_linked_conn(conn); } - /* If we hit the EOF, call connection_reached_eof. */ + /* If we hit the EOF, call connection_reached_eof(). */ if (!conn->marked_for_close && conn->inbuf_reached_eof && connection_reached_eof(conn) < 0) { @@ -2042,6 +2556,16 @@ return 0; } +int +connection_handle_read(connection_t *conn) +{ + int res; + + tor_gettimeofday_cache_clear(); + res = connection_handle_read_impl(conn); + return res; +} + /** Pull in new bytes from conn-\>s or conn-\>linked_conn onto conn-\>inbuf, * either directly or via TLS. Reduce the token buckets by the number of bytes * read. @@ -2053,7 +2577,8 @@ * Return -1 if we want to break conn, else return 0. */ static int -connection_read_to_buf(connection_t *conn, int *max_to_read, int *socket_error) +connection_read_to_buf(connection_t *conn, ssize_t *max_to_read, + int *socket_error) { int result; ssize_t at_most = *max_to_read; @@ -2075,7 +2600,7 @@ } if (connection_speaks_cells(conn) && - conn->state > OR_CONN_STATE_PROXY_READING) { + conn->state > OR_CONN_STATE_PROXY_HANDSHAKING) { int pending; or_connection_t *or_conn = TO_OR_CONN(conn); size_t initial_size; @@ -2088,7 +2613,7 @@ log_debug(LD_NET, "%d: starting, inbuf_datalen %ld (%d pending in tls object)." " at_most %ld.", - conn->s,(long)buf_datalen(conn->inbuf), + (int)conn->s,(long)buf_datalen(conn->inbuf), tor_tls_get_pending_bytes(or_conn->tls), (long)at_most); initial_size = buf_datalen(conn->inbuf); @@ -2171,15 +2696,19 @@ n_read = (size_t) result; } - if (n_read > 0) { /* change *max_to_read */ - /*XXXX021 check for overflow*/ - *max_to_read = (int)(at_most - n_read); - } + if (n_read > 0) { + /* change *max_to_read */ + *max_to_read = at_most - n_read; - if (conn->type == CONN_TYPE_AP) { - edge_connection_t *edge_conn = TO_EDGE_CONN(conn); - /*XXXX021 check for overflow*/ - edge_conn->n_read += (int)n_read; + /* Update edge_conn->n_read */ + if (conn->type == CONN_TYPE_AP) { + edge_connection_t *edge_conn = TO_EDGE_CONN(conn); + /* Check for overflow: */ + if (PREDICT_LIKELY(UINT32_MAX - edge_conn->n_read > n_read)) + edge_conn->n_read += (int)n_read; + else + edge_conn->n_read = UINT32_MAX; + } } connection_buckets_decrement(conn, approx_time(), n_read, n_written); @@ -2225,15 +2754,15 @@ return (conn->outbuf_flushlen > 10*CELL_PAYLOAD_SIZE); } -/** Try to flush more bytes onto conn-\>s. +/** Try to flush more bytes onto conn-\>s. * * This function gets called either from conn_write() in main.c * when poll() has declared that conn wants to write, or below * from connection_write_to_buf() when an entire TLS record is ready. * - * Update conn-\>timestamp_lastwritten to now, and call flush_buf + * Update conn-\>timestamp_lastwritten to now, and call flush_buf * or flush_buf_tls appropriately. If it succeeds and there are no more - * more bytes on conn->outbuf, then call connection_finished_flushing + * more bytes on conn-\>outbuf, then call connection_finished_flushing * on it too. * * If force, then write as many bytes as possible, ignoring bandwidth @@ -2243,8 +2772,8 @@ * Mark the connection and return -1 if you want to close it, else * return 0. */ -int -connection_handle_write(connection_t *conn, int force) +static int +connection_handle_write_impl(connection_t *conn, int force) { int e; socklen_t len=(socklen_t)sizeof(e); @@ -2255,11 +2784,11 @@ tor_assert(!connection_is_listener(conn)); - if (conn->marked_for_close || conn->s < 0) + if (conn->marked_for_close || !SOCKET_OK(conn->s)) return 0; /* do nothing */ if (conn->in_flushed_some) { - log_warn(LD_BUG, "called recursively from inside conn->in_flushed_some()"); + log_warn(LD_BUG, "called recursively from inside conn->in_flushed_some"); return 0; } @@ -2303,7 +2832,7 @@ : connection_bucket_write_limit(conn, now); if (connection_speaks_cells(conn) && - conn->state > OR_CONN_STATE_PROXY_READING) { + conn->state > OR_CONN_STATE_PROXY_HANDSHAKING) { or_connection_t *or_conn = TO_OR_CONN(conn); if (conn->state == OR_CONN_STATE_TLS_HANDSHAKING || conn->state == OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING) { @@ -2322,6 +2851,13 @@ /* else open, or closing */ result = flush_buf_tls(or_conn->tls, conn->outbuf, max_to_write, &conn->outbuf_flushlen); + + /* If we just flushed the last bytes, check if this tunneled dir + * request is done. */ + if (buf_datalen(conn->outbuf) == 0 && conn->dirreq_id) + geoip_change_dirreq_state(conn->dirreq_id, DIRREQ_TUNNELED, + DIRREQ_OR_CONN_BUFFER_FLUSHED); + switch (result) { CASE_TOR_TLS_ERROR_ANY: case TOR_TLS_CLOSE: @@ -2341,8 +2877,8 @@ if (!connection_is_reading(conn)) { connection_stop_writing(conn); conn->write_blocked_on_bw = 1; - /* we'll start reading again when the next second arrives, - * and then also start writing again. + /* we'll start reading again when we get more tokens in our + * read bucket; then we'll start writing again too. */ } /* else no problem, we're already reading */ @@ -2371,10 +2907,13 @@ n_written = (size_t) result; } - if (conn->type == CONN_TYPE_AP) { + if (n_written && conn->type == CONN_TYPE_AP) { edge_connection_t *edge_conn = TO_EDGE_CONN(conn); - /*XXXX021 check for overflow.*/ - edge_conn->n_written += (int)n_written; + /* Check for overflow: */ + if (PREDICT_LIKELY(UINT32_MAX - edge_conn->n_written > n_written)) + edge_conn->n_written += (int)n_written; + else + edge_conn->n_written = UINT32_MAX; } connection_buckets_decrement(conn, approx_time(), n_read, n_written); @@ -2404,6 +2943,15 @@ return 0; } +int +connection_handle_write(connection_t *conn, int force) +{ + int res; + tor_gettimeofday_cache_clear(); + res = connection_handle_write_impl(conn, force); + return res; +} + /** OpenSSL TLS record size is 16383; this is close. The goal here is to * push data out as soon as we know there's enough for a TLS record, so * during periods of high load we won't read entire megabytes from @@ -2452,12 +3000,13 @@ /* if it failed, it means we have our package/delivery windows set wrong compared to our max outbuf size. close the whole circuit. */ log_warn(LD_NET, - "write_to_buf failed. Closing circuit (fd %d).", conn->s); + "write_to_buf failed. Closing circuit (fd %d).", (int)conn->s); circuit_mark_for_close(circuit_get_by_edge_conn(TO_EDGE_CONN(conn)), END_CIRC_REASON_INTERNAL); } else { log_warn(LD_NET, - "write_to_buf failed. Closing connection (fd %d).", conn->s); + "write_to_buf failed. Closing connection (fd %d).", + (int)conn->s); connection_mark_for_close(conn); } return; @@ -2497,7 +3046,7 @@ /* this connection is broken. remove it. */ log_warn(LD_BUG, "unhandled error on write for " "conn (type %d, fd %d); removing", - conn->type, conn->s); + conn->type, (int)conn->s); tor_fragile_assert(); /* do a close-immediate here, so we don't try to flush */ connection_close_immediate(conn); @@ -2577,13 +3126,11 @@ /** Return a connection of type type that has rendquery equal * to rendquery, and that is not marked for close. If state - * is non-zero, conn must be of that state too. If rendversion is - * nonnegative, conn must be fetching that rendversion, too. + * is non-zero, conn must be of that state too. */ connection_t * connection_get_by_type_state_rendquery(int type, int state, - const char *rendquery, - int rendversion) + const char *rendquery) { smartlist_t *conns = get_connection_array(); @@ -2598,8 +3145,6 @@ (!state || state == conn->state)) { if (type == CONN_TYPE_DIR && TO_DIR_CONN(conn)->rend_data && - (rendversion < 0 || - rendversion == TO_DIR_CONN(conn)->rend_data->rend_desc_version) && !rend_cmp_service_ids(rendquery, TO_DIR_CONN(conn)->rend_data->onion_address)) return conn; @@ -2703,8 +3248,17 @@ authenticator, authenticator_length) < 0) { tor_free(base64_authenticator); /* free and set to null */ } else { - /* remove extra \n at end of encoding */ - base64_authenticator[strlen(base64_authenticator) - 1] = 0; + int i = 0, j = 0; + ssize_t len = strlen(base64_authenticator); + + /* remove all newline occurrences within the string */ + for (i=0; i < len; ++i) { + if ('\n' != base64_authenticator[i]) { + base64_authenticator[j] = base64_authenticator[i]; + ++j; + } + } + base64_authenticator[j]='\0'; } return base64_authenticator; } @@ -2715,12 +3269,12 @@ * call init_keys(). */ static void -client_check_address_changed(int sock) +client_check_address_changed(tor_socket_t sock) { - uint32_t iface_ip, ip_out; + uint32_t iface_ip, ip_out; /* host order */ struct sockaddr_in out_addr; socklen_t out_addr_len = (socklen_t) sizeof(out_addr); - uint32_t *ip; + uint32_t *ip; /* host order */ if (!last_interface_ip) get_interface_address(LOG_INFO, &last_interface_ip); @@ -2734,7 +3288,7 @@ return; } - /* Okay. If we've used this address previously, we're okay. */ + /* If we've used this address previously, we're okay. */ ip_out = ntohl(out_addr.sin_addr.s_addr); SMARTLIST_FOREACH(outgoing_addrs, uint32_t*, ip_ptr, if (*ip_ptr == ip_out) return; @@ -2771,7 +3325,7 @@ * to the desired size to stay below system TCP buffer limits. */ static void -set_constrained_socket_buffers(int sock, int size) +set_constrained_socket_buffers(tor_socket_t sock, int size) { void *sz = (void*)&size; socklen_t sz_sz = (socklen_t) sizeof(size); @@ -2830,6 +3384,8 @@ r = connection_dirserv_flushed_some(TO_DIR_CONN(conn)); } else if (conn->type == CONN_TYPE_OR) { r = connection_or_flushed_some(TO_OR_CONN(conn)); + } else if (CONN_IS_EDGE(conn)) { + r = connection_edge_flushed_some(TO_EDGE_CONN(conn)); } conn->in_flushed_some = 0; return r; @@ -3001,7 +3557,7 @@ tor_assert(conn->linked); } if (conn->linked) - tor_assert(conn->s < 0); + tor_assert(!SOCKET_OK(conn->s)); if (conn->outbuf_flushlen > 0) { tor_assert(connection_is_writing(conn) || conn->write_blocked_on_bw || @@ -3033,7 +3589,7 @@ } // tor_assert(conn->addr && conn->port); tor_assert(conn->address); - if (conn->state > OR_CONN_STATE_PROXY_READING) + if (conn->state > OR_CONN_STATE_PROXY_HANDSHAKING) tor_assert(or_conn->tls); } diff -Nru tor-0.2.1.30/src/or/connection_edge.c tor-0.2.2.35/src/or/connection_edge.c --- tor-0.2.1.30/src/or/connection_edge.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/connection_edge.c 2011-12-15 16:28:37.000000000 +0000 @@ -10,6 +10,28 @@ **/ #include "or.h" +#include "buffers.h" +#include "circuitlist.h" +#include "circuituse.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "connection_or.h" +#include "control.h" +#include "dns.h" +#include "dnsserv.h" +#include "dirserv.h" +#include "hibernate.h" +#include "main.h" +#include "policies.h" +#include "reasons.h" +#include "relay.h" +#include "rendclient.h" +#include "rendcommon.h" +#include "rendservice.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" #ifdef HAVE_LINUX_TYPES_H #include @@ -125,7 +147,7 @@ return 0; case AP_CONN_STATE_OPEN: case EXIT_CONN_STATE_OPEN: - if (connection_edge_package_raw_inbuf(conn, package_partial) < 0) { + if (connection_edge_package_raw_inbuf(conn, package_partial, NULL) < 0) { /* (We already sent an end cell if possible) */ connection_mark_for_close(TO_CONN(conn)); return -1; @@ -279,6 +301,23 @@ return connection_edge_end(conn, reason); } +/** We just wrote some data to conn; act appropriately. + * + * (That is, if it's open, consider sending a stream-level sendme cell if we + * have just flushed enough.) + */ +int +connection_edge_flushed_some(edge_connection_t *conn) +{ + switch (conn->_base.state) { + case AP_CONN_STATE_OPEN: + case EXIT_CONN_STATE_OPEN: + connection_edge_consider_sending_sendme(conn); + break; + } + return 0; +} + /** Connection conn has finished writing and has no bytes left on * its outbuf. * @@ -330,11 +369,13 @@ tor_assert(conn->state == EXIT_CONN_STATE_CONNECTING); log_info(LD_EXIT,"Exit connection to %s:%u (%s) established.", - escaped_safe_str(conn->address),conn->port, + escaped_safe_str(conn->address), conn->port, safe_str(fmt_addr(&conn->addr))); + rep_hist_note_exit_stream_opened(conn->port); + conn->state = EXIT_CONN_STATE_OPEN; - connection_watch_events(conn, EV_READ); /* stop writing, continue reading */ + connection_watch_events(conn, READ_EVENT); /* stop writing, keep reading */ if (connection_wants_to_flush(conn)) /* in case there are any queued relay * cells */ connection_start_writing(conn); @@ -375,13 +416,16 @@ static int compute_retry_timeout(edge_connection_t *conn) { + int timeout = get_options()->CircuitStreamTimeout; + if (timeout) /* if our config options override the default, use them */ + return timeout; if (conn->num_socks_retries < 2) /* try 0 and try 1 */ return 10; return 15; } /** Find all general-purpose AP streams waiting for a response that sent their - * begin/resolve cell >=15 seconds ago. Detach from their current circuit, and + * begin/resolve cell too long ago. Detach from their current circuit, and * mark their current circuit as unsuitable for new streams. Then call * connection_ap_handshake_attach_circuit() to attach to a new circuit (if * available) or launch a new one. @@ -423,7 +467,8 @@ log_fn(severity, LD_APP, "Tried for %d seconds to get a connection to %s:%d. " "Giving up. (%s)", - seconds_since_born, safe_str(conn->socks_request->address), + seconds_since_born, + safe_str_client(conn->socks_request->address), conn->socks_request->port, conn_state_to_string(CONN_TYPE_AP, conn->_base.state)); connection_mark_unattached_ap(conn, END_STREAM_REASON_TIMEOUT); @@ -440,7 +485,7 @@ circ = circuit_get_by_edge_conn(conn); if (!circ) { /* it's vanished? */ log_info(LD_APP,"Conn is waiting (address %s), but lost its circ.", - safe_str(conn->socks_request->address)); + safe_str_client(conn->socks_request->address)); connection_mark_unattached_ap(conn, END_STREAM_REASON_TIMEOUT); continue; } @@ -450,7 +495,7 @@ "Rend stream is %d seconds late. Giving up on address" " '%s.onion'.", seconds_idle, - safe_str(conn->socks_request->address)); + safe_str_client(conn->socks_request->address)); connection_edge_end(conn, END_STREAM_REASON_TIMEOUT); connection_mark_unattached_ap(conn, END_STREAM_REASON_TIMEOUT); } @@ -458,11 +503,12 @@ } tor_assert(circ->purpose == CIRCUIT_PURPOSE_C_GENERAL); log_fn(cutoff < 15 ? LOG_INFO : severity, LD_APP, - "We tried for %d seconds to connect to '%s' using exit '%s'." + "We tried for %d seconds to connect to '%s' using exit %s." " Retrying on a new circuit.", - seconds_idle, safe_str(conn->socks_request->address), + seconds_idle, + safe_str_client(conn->socks_request->address), conn->cpath_layer ? - conn->cpath_layer->extend_info->nickname : "*unnamed*"); + extend_info_describe(conn->cpath_layer->extend_info): "*unnamed*"); /* send an end down the circuit */ connection_edge_end(conn, END_STREAM_REASON_TIMEOUT); /* un-mark it as ending, since we're going to reuse it */ @@ -471,6 +517,7 @@ /* kludge to make us not try this circuit again, yet to allow * current streams on it to survive if they can: make it * unattractive to use for new streams */ + /* XXXX023 this is a kludgy way to do this. */ tor_assert(circ->timestamp_dirty); circ->timestamp_dirty -= options->MaxCircuitDirtiness; /* give our stream another 'cutoff' seconds to try */ @@ -511,7 +558,7 @@ /** Tell any AP streams that are waiting for a one-hop tunnel to * failed_digest that they are going to fail. */ -/* XXX022 We should get rid of this function, and instead attach +/* XXX023 We should get rid of this function, and instead attach * one-hop streams to circ->p_streams so they get marked in * circuit_mark_for_close like normal p_streams. */ void @@ -530,7 +577,7 @@ if (!edge_conn->want_onehop) continue; if (hexdigest_to_digest(edge_conn->chosen_exit_name, digest) < 0 || - memcmp(digest, failed_digest, DIGEST_LEN)) + tor_memneq(digest, failed_digest, DIGEST_LEN)) continue; if (tor_digest_is_zero(digest)) { /* we don't know the digest; have to compare addr:port */ @@ -577,8 +624,8 @@ tor_assert(edge_conn->socks_request); if (edge_conn->chosen_exit_optional) { log_info(LD_APP, "Giving up on enclave exit '%s' for destination %s.", - safe_str(edge_conn->chosen_exit_name), - escaped_safe_str(edge_conn->socks_request->address)); + safe_str_client(edge_conn->chosen_exit_name), + escaped_safe_str_client(edge_conn->socks_request->address)); edge_conn->chosen_exit_optional = 0; tor_free(edge_conn->chosen_exit_name); /* clears it */ /* if this port is dangerous, warn or reject it now that we don't @@ -683,7 +730,11 @@ static void addressmap_ent_free(void *_ent) { - addressmap_entry_t *ent = _ent; + addressmap_entry_t *ent; + if (!_ent) + return; + + ent = _ent; tor_free(ent->new_address); tor_free(ent); } @@ -692,7 +743,11 @@ static void addressmap_virtaddress_ent_free(void *_ent) { - virtaddress_entry_t *ent = _ent; + virtaddress_entry_t *ent; + if (!_ent) + return; + + ent = _ent; tor_free(ent->ipv4_address); tor_free(ent->hostname_address); tor_free(ent); @@ -744,7 +799,8 @@ tor_strlower(suffix); STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) { - if (ent->source == ADDRMAPSRC_TRACKEXIT && !strcmpend(address, suffix)) { + if (ent->source == ADDRMAPSRC_TRACKEXIT && + !strcmpend(ent->new_address, suffix)) { addressmap_ent_remove(address, ent); MAP_DEL_CURRENT(address); } @@ -753,6 +809,102 @@ tor_free(suffix); } +/** Remove all TRACKEXIT mappings from the addressmap for which the target + * host is unknown or no longer allowed, or for which the source address + * is no longer in trackexithosts. */ +void +addressmap_clear_excluded_trackexithosts(or_options_t *options) +{ + const routerset_t *allow_nodes = options->ExitNodes; + const routerset_t *exclude_nodes = options->_ExcludeExitNodesUnion; + + if (!addressmap) + return; + if (routerset_is_empty(allow_nodes)) + allow_nodes = NULL; + if (allow_nodes == NULL && routerset_is_empty(exclude_nodes)) + return; + + STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) { + size_t len; + const char *target = ent->new_address, *dot; + char *nodename; + routerinfo_t *ri; /* XXX023 Use node_t. */ + + if (!target) { + /* DNS resolving in progress */ + continue; + } else if (strcmpend(target, ".exit")) { + /* Not a .exit mapping */ + continue; + } else if (ent->source != ADDRMAPSRC_TRACKEXIT) { + /* Not a trackexit mapping. */ + continue; + } + len = strlen(target); + if (len < 6) + continue; /* malformed. */ + dot = target + len - 6; /* dot now points to just before .exit */ + while (dot > target && *dot != '.') + dot--; + if (*dot == '.') dot++; + nodename = tor_strndup(dot, len-5-(dot-target));; + ri = router_get_by_nickname(nodename, 0); + tor_free(nodename); + if (!ri || + (allow_nodes && !routerset_contains_router(allow_nodes, ri)) || + routerset_contains_router(exclude_nodes, ri) || + !hostname_in_track_host_exits(options, address)) { + /* We don't know this one, or we want to be rid of it. */ + addressmap_ent_remove(address, ent); + MAP_DEL_CURRENT(address); + } + } STRMAP_FOREACH_END; +} + +/** Remove all AUTOMAP mappings from the addressmap for which the + * source address no longer matches AutomapHostsSuffixes, which is + * no longer allowed by AutomapHostsOnResolve, or for which the + * target address is no longer in the virtual network. */ +void +addressmap_clear_invalid_automaps(or_options_t *options) +{ + int clear_all = !options->AutomapHostsOnResolve; + const smartlist_t *suffixes = options->AutomapHostsSuffixes; + + if (!addressmap) + return; + + if (!suffixes) + clear_all = 1; /* This should be impossible, but let's be sure. */ + + STRMAP_FOREACH_MODIFY(addressmap, src_address, addressmap_entry_t *, ent) { + int remove = clear_all; + if (ent->source != ADDRMAPSRC_AUTOMAP) + continue; /* not an automap mapping. */ + + if (!remove) { + int suffix_found = 0; + SMARTLIST_FOREACH(suffixes, const char *, suffix, { + if (!strcasecmpend(src_address, suffix)) { + suffix_found = 1; + break; + } + }); + if (!suffix_found) + remove = 1; + } + + if (!remove && ! address_is_in_virtual_range(ent->new_address)) + remove = 1; + + if (remove) { + addressmap_ent_remove(src_address, ent); + MAP_DEL_CURRENT(src_address); + } + } STRMAP_FOREACH_END; +} + /** Remove all entries from the addressmap that were set via the * configuration file or the command line. */ void @@ -782,14 +934,11 @@ void addressmap_free_all(void) { - if (addressmap) { - strmap_free(addressmap, addressmap_ent_free); - addressmap = NULL; - } - if (virtaddress_reversemap) { - strmap_free(virtaddress_reversemap, addressmap_virtaddress_ent_free); - virtaddress_reversemap = NULL; - } + strmap_free(addressmap, addressmap_ent_free); + addressmap = NULL; + + strmap_free(virtaddress_reversemap, addressmap_virtaddress_ent_free); + virtaddress_reversemap = NULL; } /** Look at address, and rewrite it until it doesn't want any @@ -816,9 +965,9 @@ return (rewrites > 0); /* done, no rewrite needed */ } - cp = tor_strdup(escaped_safe_str(ent->new_address)); + cp = tor_strdup(escaped_safe_str_client(ent->new_address)); log_info(LD_APP, "Addressmap: rewriting %s to %s", - escaped_safe_str(address), cp); + escaped_safe_str_client(address), cp); if (ent->expires > 1 && ent->expires < expires) expires = ent->expires; tor_free(cp); @@ -826,7 +975,7 @@ } log_warn(LD_CONFIG, "Loop detected: we've rewritten %s 16 times! Using it as-is.", - escaped_safe_str(address)); + escaped_safe_str_client(address)); /* it's fine to rewrite a rewrite, but don't loop forever */ if (expires_out) *expires_out = TIME_MAX; @@ -848,9 +997,9 @@ tor_snprintf(s, len, "REVERSE[%s]", address); ent = strmap_get(addressmap, s); if (ent) { - cp = tor_strdup(escaped_safe_str(ent->new_address)); + cp = tor_strdup(escaped_safe_str_client(ent->new_address)); log_info(LD_APP, "Rewrote reverse lookup %s -> %s", - escaped_safe_str(s), cp); + escaped_safe_str_client(s), cp); tor_free(cp); strlcpy(address, ent->new_address, maxlen); r = 1; @@ -912,7 +1061,9 @@ if (expires > 1) { log_info(LD_APP,"Temporary addressmap ('%s' to '%s') not performed, " "since it's already mapped to '%s'", - safe_str(address), safe_str(new_address), safe_str(ent->new_address)); + safe_str_client(address), + safe_str_client(new_address), + safe_str_client(ent->new_address)); tor_free(new_address); return; } @@ -931,7 +1082,8 @@ ent->source = source; log_info(LD_CONFIG, "Addressmap: (re)mapped '%s' to '%s'", - safe_str(address), safe_str(ent->new_address)); + safe_str_client(address), + safe_str_client(ent->new_address)); control_event_address_mapped(address, ent->new_address, expires, NULL); } @@ -951,7 +1103,8 @@ if (ent->num_resolve_failures < SHORT_MAX) ++ent->num_resolve_failures; /* don't overflow */ log_info(LD_APP, "Address %s now has %d resolve failures.", - safe_str(address), ent->num_resolve_failures); + safe_str_client(address), + ent->num_resolve_failures); return ent->num_resolve_failures; } @@ -1247,8 +1400,10 @@ log_warn(LD_BUG, "Internal confusion: I thought that '%s' was mapped to by " "'%s', but '%s' really maps to '%s'. This is a harmless bug.", - safe_str(new_address), safe_str(*addrp), safe_str(*addrp), - ent?safe_str(ent->new_address):"(nothing)"); + safe_str_client(new_address), + safe_str_client(*addrp), + safe_str_client(*addrp), + ent?safe_str_client(ent->new_address):"(nothing)"); } tor_free(*addrp); @@ -1261,7 +1416,7 @@ log_info(LD_APP, "Registering map from %s to %s", *addrp, new_address); if (vent_needs_to_be_added) strmap_set(virtaddress_reversemap, new_address, vent); - addressmap_register(*addrp, new_address, 2, ADDRMAPSRC_CONTROLLER); + addressmap_register(*addrp, new_address, 2, ADDRMAPSRC_AUTOMAP); #if 0 { @@ -1276,7 +1431,8 @@ (type == RESOLVED_TYPE_IPV4) ? vent->ipv4_address : vent->hostname_address)); log_info(LD_APP, "Map from %s to %s okay.", - safe_str(*addrp),safe_str(new_address)); + safe_str_client(*addrp), + safe_str_client(new_address)); } #endif @@ -1391,6 +1547,26 @@ * different one? */ #define TRACKHOSTEXITS_RETRIES 5 +/** Call connection_ap_handshake_rewrite_and_attach() unless a controller + * asked us to leave streams unattached. Return 0 in that case. + * + * See connection_ap_handshake_rewrite_and_attach()'s + * documentation for arguments and return value. + */ +int +connection_ap_rewrite_and_attach_if_allowed(edge_connection_t *conn, + origin_circuit_t *circ, + crypt_path_t *cpath) +{ + or_options_t *options = get_options(); + + if (options->LeaveStreamsUnattached) { + conn->_base.state = AP_CONN_STATE_CONTROLLER_WAIT; + return 0; + } + return connection_ap_handshake_rewrite_and_attach(conn, circ, cpath); +} + /** Connection conn just finished its socks handshake, or the * controller asked us to take care of it. If circ is defined, * then that's where we'll want to attach it. Otherwise we have to @@ -1415,16 +1591,20 @@ hostname_type_t addresstype; or_options_t *options = get_options(); struct in_addr addr_tmp; + /* We set this to true if this is an address we should automatically + * remap to a local address in VirtualAddrNetwork */ int automap = 0; char orig_address[MAX_SOCKS_ADDR_LEN]; time_t map_expires = TIME_MAX; + /* This will be set to true iff the address starts out as a non-.exit + address, and we remap it to one because of an entry in the addressmap. */ int remapped_to_exit = 0; time_t now = time(NULL); tor_strlower(socks->address); /* normalize it */ strlcpy(orig_address, socks->address, sizeof(orig_address)); log_debug(LD_APP,"Client asked for %s:%d", - safe_str(socks->address), + safe_str_client(socks->address), socks->port); if (socks->command == SOCKS_COMMAND_RESOLVE && @@ -1446,7 +1626,8 @@ return -1; } log_info(LD_APP, "Automapping %s to %s", - escaped_safe_str(socks->address), safe_str(new_addr)); + escaped_safe_str_client(socks->address), + safe_str_client(new_addr)); strlcpy(socks->address, new_addr, sizeof(socks->address)); } } @@ -1503,7 +1684,7 @@ * information. */ log_warn(LD_APP,"Missing mapping for virtual address '%s'. Refusing.", - socks->address); /* don't safe_str() this yet. */ + safe_str_client(socks->address)); connection_mark_unattached_ap(conn, END_STREAM_REASON_INTERNAL); return -1; } @@ -1511,11 +1692,12 @@ /* Parse the address provided by SOCKS. Modify it in-place if it * specifies a hidden-service (.onion) or particular exit node (.exit). */ - addresstype = parse_extended_hostname(socks->address); + addresstype = parse_extended_hostname(socks->address, + remapped_to_exit || options->AllowDotExit); if (addresstype == BAD_HOSTNAME) { log_warn(LD_APP, "Invalid onion hostname %s; rejecting", - safe_str(socks->address)); + safe_str_client(socks->address)); control_event_client_status(LOG_WARN, "SOCKS_BAD_HOSTNAME HOSTNAME=%s", escaped(socks->address)); connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); @@ -1524,38 +1706,61 @@ if (addresstype == EXIT_HOSTNAME) { /* foo.exit -- modify conn->chosen_exit_node to specify the exit - * node, and conn->address to hold only the address portion.*/ + * node, and conn->address to hold only the address portion. */ char *s = strrchr(socks->address,'.'); + + /* If StrictNodes is not set, then .exit overrides ExcludeNodes. */ + routerset_t *excludeset = options->StrictNodes ? + options->_ExcludeExitNodesUnion : options->ExcludeExitNodes; + /*XXX023 make this a node_t. */ + routerinfo_t *router; + tor_assert(!automap); if (s) { + /* The address was of the form "(stuff).(name).exit */ if (s[1] != '\0') { conn->chosen_exit_name = tor_strdup(s+1); + router = router_get_by_nickname(conn->chosen_exit_name, 1); if (remapped_to_exit) /* 5 tries before it expires the addressmap */ conn->chosen_exit_retries = TRACKHOSTEXITS_RETRIES; *s = 0; } else { + /* Oops, the address was (stuff)..exit. That's not okay. */ log_warn(LD_APP,"Malformed exit address '%s.exit'. Refusing.", - safe_str(socks->address)); + safe_str_client(socks->address)); control_event_client_status(LOG_WARN, "SOCKS_BAD_HOSTNAME HOSTNAME=%s", escaped(socks->address)); connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); return -1; } } else { - routerinfo_t *r; + /* It looks like they just asked for "foo.exit". */ conn->chosen_exit_name = tor_strdup(socks->address); - r = router_get_by_nickname(conn->chosen_exit_name, 1); - *socks->address = 0; - if (r) { - strlcpy(socks->address, r->address, sizeof(socks->address)); - } else { - log_warn(LD_APP, - "Unrecognized server in exit address '%s.exit'. Refusing.", - safe_str(socks->address)); - connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); - return -1; + router = router_get_by_nickname(conn->chosen_exit_name, 1); + if (router) { + *socks->address = 0; + strlcpy(socks->address, router->address, sizeof(socks->address)); } } + /* Now make sure that the chosen exit exists... */ + if (!router) { + log_warn(LD_APP, + "Unrecognized relay in exit address '%s.exit'. Refusing.", + safe_str_client(socks->address)); + connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); + return -1; + } + /* ...and make sure that it isn't excluded. */ + if (routerset_contains_router(excludeset, router)) { + log_warn(LD_APP, + "Excluded relay in exit address '%s.exit'. Refusing.", + safe_str_client(socks->address)); + connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); + return -1; + } + /* XXXX022-1090 Should we also allow foo.bar.exit if ExitNodes is set and + Bar is not listed in it? I say yes, but our revised manpage branch + implies no. */ } if (addresstype != ONION_HOSTNAME) { @@ -1565,7 +1770,7 @@ escaped(socks->address)); log_warn(LD_APP, "Destination '%s' seems to be an invalid hostname. Failing.", - safe_str(socks->address)); + safe_str_client(socks->address)); connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); return -1; } @@ -1574,18 +1779,6 @@ uint32_t answer; struct in_addr in; /* Reply to resolves immediately if we can. */ - if (strlen(socks->address) > RELAY_PAYLOAD_SIZE) { - log_warn(LD_APP,"Address to be resolved is too large. Failing."); - control_event_client_status(LOG_WARN, "SOCKS_BAD_HOSTNAME HOSTNAME=%s", - escaped(socks->address)); - connection_ap_handshake_socks_resolved(conn, - RESOLVED_TYPE_ERROR_TRANSIENT, - 0,NULL,-1,TIME_MAX); - connection_mark_unattached_ap(conn, - END_STREAM_REASON_SOCKSPROTOCOL | - END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED); - return -1; - } if (tor_inet_aton(socks->address, &in)) { /* see if it's an IP already */ /* leave it in network order */ answer = in.s_addr; @@ -1608,6 +1801,28 @@ connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); return -1; } + if (options->ClientRejectInternalAddresses && + !conn->use_begindir && !conn->chosen_exit_name && !circ) { + tor_addr_t addr; + if (tor_addr_from_str(&addr, socks->address) >= 0 && + tor_addr_is_internal(&addr, 0)) { + /* If this is an explicit private address with no chosen exit node, + * then we really don't want to try to connect to it. That's + * probably an error. */ + if (conn->is_transparent_ap) { + log_warn(LD_NET, + "Rejecting request for anonymous connection to private " + "address %s on a TransPort or NATDPort. Possible loop " + "in your NAT rules?", safe_str_client(socks->address)); + } else { + log_warn(LD_NET, + "Rejecting SOCKS request for anonymous connection to " + "private address %s", safe_str_client(socks->address)); + } + connection_mark_unattached_ap(conn, END_STREAM_REASON_PRIVATE_ADDR); + return -1; + } + } if (!conn->use_begindir && !conn->chosen_exit_name && !circ) { /* see if we can find a suitable enclave exit */ @@ -1616,7 +1831,8 @@ if (r) { log_info(LD_APP, "Redirecting address %s to exit at enclave router %s", - safe_str(socks->address), r->nickname); + safe_str_client(socks->address), + router_describe(r)); /* use the hex digest, not nickname, in case there are two routers with this nickname */ conn->chosen_exit_name = @@ -1680,12 +1896,12 @@ strlcpy(conn->rend_data->onion_address, socks->address, sizeof(conn->rend_data->onion_address)); log_info(LD_REND,"Got a hidden service request for ID '%s'", - safe_str(conn->rend_data->onion_address)); + safe_str_client(conn->rend_data->onion_address)); /* see if we already have it cached */ r = rend_cache_lookup_entry(conn->rend_data->onion_address, -1, &entry); if (r<0) { log_warn(LD_BUG,"Invalid service name '%s'", - safe_str(conn->rend_data->onion_address)); + safe_str_client(conn->rend_data->onion_address)); connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); return -1; } @@ -1707,32 +1923,15 @@ if (r==0) { conn->_base.state = AP_CONN_STATE_RENDDESC_WAIT; log_info(LD_REND, "Unknown descriptor %s. Fetching.", - safe_str(conn->rend_data->onion_address)); - /* Fetch both, v0 and v2 rend descriptors in parallel. Use whichever - * arrives first. Exception: When using client authorization, only - * fetch v2 descriptors.*/ + safe_str_client(conn->rend_data->onion_address)); rend_client_refetch_v2_renddesc(conn->rend_data); - if (conn->rend_data->auth_type == REND_NO_AUTH) - rend_client_refetch_renddesc(conn->rend_data->onion_address); } else { /* r > 0 */ - if (now - entry->received < NUM_SECONDS_BEFORE_HS_REFETCH) { - conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT; - log_info(LD_REND, "Descriptor is here and fresh enough. Great."); - if (connection_ap_handshake_attach_circuit(conn) < 0) { - if (!conn->_base.marked_for_close) - connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH); - return -1; - } - } else { - conn->_base.state = AP_CONN_STATE_RENDDESC_WAIT; - log_info(LD_REND, "Stale descriptor %s. Re-fetching.", - safe_str(conn->rend_data->onion_address)); - /* Fetch both, v0 and v2 rend descriptors in parallel. Use whichever - * arrives first. Exception: When using client authorization, only - * fetch v2 descriptors.*/ - rend_client_refetch_v2_renddesc(conn->rend_data); - if (conn->rend_data->auth_type == REND_NO_AUTH) - rend_client_refetch_renddesc(conn->rend_data->onion_address); + conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT; + log_info(LD_REND, "Descriptor is here. Great."); + if (connection_ap_handshake_attach_circuit(conn) < 0) { + if (!conn->_base.marked_for_close) + connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH); + return -1; } } return 0; @@ -1920,24 +2119,12 @@ return -1; } /* else socks handshake is done, continue processing */ - if (hostname_is_noconnect_address(socks->address)) - { - control_event_stream_status(conn, STREAM_EVENT_NEW, 0); - control_event_stream_status(conn, STREAM_EVENT_CLOSED, 0); - connection_mark_unattached_ap(conn, END_STREAM_REASON_DONE); - return -1; - } - if (SOCKS_COMMAND_IS_CONNECT(socks->command)) control_event_stream_status(conn, STREAM_EVENT_NEW, 0); else control_event_stream_status(conn, STREAM_EVENT_NEW_RESOLVE, 0); - if (options->LeaveStreamsUnattached) { - conn->_base.state = AP_CONN_STATE_CONTROLLER_WAIT; - return 0; - } - return connection_ap_handshake_rewrite_and_attach(conn, NULL, NULL); + return connection_ap_rewrite_and_attach_if_allowed(conn, NULL, NULL); } /** connection_init_accepted_conn() found a new trans AP conn. @@ -1951,7 +2138,6 @@ connection_ap_process_transparent(edge_connection_t *conn) { socks_request_t *socks; - or_options_t *options = get_options(); tor_assert(conn); tor_assert(conn->_base.type == CONN_TYPE_AP); @@ -1975,11 +2161,7 @@ control_event_stream_status(conn, STREAM_EVENT_NEW, 0); - if (options->LeaveStreamsUnattached) { - conn->_base.state = AP_CONN_STATE_CONTROLLER_WAIT; - return 0; - } - return connection_ap_handshake_rewrite_and_attach(conn, NULL, NULL); + return connection_ap_rewrite_and_attach_if_allowed(conn, NULL, NULL); } /** connection_edge_process_inbuf() found a conn in state natd_wait. See if @@ -2000,7 +2182,6 @@ size_t tlen = 30; int err, port_ok; socks_request_t *socks; - or_options_t *options = get_options(); tor_assert(conn); tor_assert(conn->_base.type == CONN_TYPE_AP); @@ -2016,13 +2197,13 @@ if (err == 0) return 0; if (err < 0) { - log_warn(LD_APP,"Natd handshake failed (DEST too long). Closing"); + log_warn(LD_APP,"NATD handshake failed (DEST too long). Closing"); connection_mark_unattached_ap(conn, END_STREAM_REASON_INVALID_NATD_DEST); return -1; } if (strcmpstart(tmp_buf, "[DEST ")) { - log_warn(LD_APP,"Natd handshake was ill-formed; closing. The client " + log_warn(LD_APP,"NATD handshake was ill-formed; closing. The client " "said: %s", escaped(tmp_buf)); connection_mark_unattached_ap(conn, END_STREAM_REASON_INVALID_NATD_DEST); @@ -2031,7 +2212,7 @@ daddr = tbuf = &tmp_buf[0] + 6; /* after end of "[DEST " */ if (!(tbuf = strchr(tbuf, ' '))) { - log_warn(LD_APP,"Natd handshake was ill-formed; closing. The client " + log_warn(LD_APP,"NATD handshake was ill-formed; closing. The client " "said: %s", escaped(tmp_buf)); connection_mark_unattached_ap(conn, END_STREAM_REASON_INVALID_NATD_DEST); @@ -2045,7 +2226,7 @@ socks->port = (uint16_t) tor_parse_long(tbuf, 10, 1, 65535, &port_ok, &daddr); if (!port_ok) { - log_warn(LD_APP,"Natd handshake failed; port %s is ill-formed or out " + log_warn(LD_APP,"NATD handshake failed; port %s is ill-formed or out " "of range.", escaped(tbuf)); connection_mark_unattached_ap(conn, END_STREAM_REASON_INVALID_NATD_DEST); return -1; @@ -2056,13 +2237,9 @@ control_event_stream_status(conn, STREAM_EVENT_NEW, 0); - if (options->LeaveStreamsUnattached) { - conn->_base.state = AP_CONN_STATE_CONTROLLER_WAIT; - return 0; - } conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT; - return connection_ap_handshake_rewrite_and_attach(conn, NULL, NULL); + return connection_ap_rewrite_and_attach_if_allowed(conn, NULL, NULL); } /** Iterate over the two bytes of stream_id until we get one that is not @@ -2075,7 +2252,7 @@ streamid_t test_stream_id; uint32_t attempts=0; -again: + again: test_stream_id = circ->next_stream_id++; if (++attempts > 1<<16) { /* Make sure we don't loop forever if all stream_id's are used. */ @@ -2112,8 +2289,14 @@ ap_conn->stream_id = get_unique_stream_id_by_circ(circ); if (ap_conn->stream_id==0) { + /* XXXX023 Instead of closing this stream, we should make it get + * retried on another circuit. */ connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL); - circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT); + + /* Mark this circuit "unusable for new streams". */ + /* XXXX023 this is a kludgy way to do this. */ + tor_assert(circ->_base.timestamp_dirty); + circ->_base.timestamp_dirty -= get_options()->MaxCircuitDirtiness; return -1; } @@ -2171,9 +2354,14 @@ ap_conn->stream_id = get_unique_stream_id_by_circ(circ); if (ap_conn->stream_id==0) { + /* XXXX023 Instead of closing this stream, we should make it get + * retried on another circuit. */ connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL); - /*XXXX022 _close_ the circuit because it's full? That sounds dumb. */ - circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT); + + /* Mark this circuit "unusable for new streams". */ + /* XXXX023 this is a kludgy way to do this. */ + tor_assert(circ->_base.timestamp_dirty); + circ->_base.timestamp_dirty -= get_options()->MaxCircuitDirtiness; return -1; } @@ -2191,7 +2379,7 @@ r = tor_addr_parse_reverse_lookup_name(&addr, a, AF_INET, 1); if (r <= 0) { log_warn(LD_APP, "Rejecting ill-formed reverse lookup of %s", - safe_str(a)); + safe_str_client(a)); connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL); return -1; } @@ -2199,7 +2387,7 @@ r = tor_addr_to_reverse_lookup_name(inaddr_buf, sizeof(inaddr_buf), &addr); if (r < 0) { log_warn(LD_BUG, "Couldn't generate reverse lookup hostname of %s", - safe_str(a)); + safe_str_client(a)); connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL); return -1; } @@ -2209,12 +2397,6 @@ tor_assert(payload_len <= (int)sizeof(inaddr_buf)); } - if (payload_len > RELAY_PAYLOAD_SIZE) { - /* This should be impossible: we don't accept addresses this big. */ - connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL); - return -1; - } - log_debug(LD_APP, "Sending relay cell to begin stream %d.", ap_conn->stream_id); @@ -2246,7 +2428,8 @@ edge_connection_t *conn; log_info(LD_APP,"Making internal %s tunnel to %s:%d ...", - want_onehop ? "direct" : "anonymized" , safe_str(address),port); + want_onehop ? "direct" : "anonymized", + safe_str_client(address), port); conn = edge_connection_new(CONN_TYPE_AP, AF_INET); conn->_base.linked = 1; /* so that we can add it safely below. */ @@ -2336,7 +2519,7 @@ * certain errors or for values that didn't come via DNS. expires is * a time when the answer expires, or -1 or TIME_MAX if there's a good TTL. **/ -/* XXXX022 the use of the ttl and expires fields is nutty. Let's make this +/* XXXX023 the use of the ttl and expires fields is nutty. Let's make this * interface and those that use it less ugly. */ void connection_ap_handshake_socks_resolved(edge_connection_t *conn, @@ -2429,7 +2612,8 @@ } connection_ap_handshake_socks_reply(conn, buf, replylen, (answer_type == RESOLVED_TYPE_IPV4 || - answer_type == RESOLVED_TYPE_IPV6) ? + answer_type == RESOLVED_TYPE_IPV6 || + answer_type == RESOLVED_TYPE_HOSTNAME) ? 0 : END_STREAM_REASON_RESOLVEFAILED); } @@ -2512,6 +2696,7 @@ char *address=NULL; uint16_t port; or_circuit_t *or_circ = NULL; + or_options_t *options = get_options(); assert_circuit_ok(circ); if (!CIRCUIT_IS_ORIGIN(circ)) @@ -2526,7 +2711,7 @@ * that we have a stream connected to a circuit, and we don't connect to a * circuit until we have a pending/successful resolve. */ - if (!server_mode(get_options()) && + if (!server_mode(options) && circ->purpose != CIRCUIT_PURPOSE_S_REND_JOINED) { log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, "Relay begin cell at non-server. Closing."); @@ -2560,21 +2745,30 @@ tor_free(address); return 0; } - if (or_circ && or_circ->is_first_hop && - !get_options()->AllowSingleHopExits) { + if (or_circ && or_circ->p_conn && !options->AllowSingleHopExits && + (or_circ->is_first_hop || + (!connection_or_digest_is_known_relay( + or_circ->p_conn->identity_digest) && + should_refuse_unknown_exits(options)))) { /* Don't let clients use us as a single-hop proxy, unless the user - * has explicitly allowed that in the config. It attracts attackers + * has explicitly allowed that in the config. It attracts attackers * and users who'd be better off with, well, single-hop proxies. */ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, - "Attempt to open a stream on first hop of circuit. Closing."); + "Attempt by %s to open a stream %s. Closing.", + safe_str(or_circ->p_conn->_base.address), + or_circ->is_first_hop ? "on first hop of circuit" : + "from unknown relay"); relay_send_end_cell_from_edge(rh.stream_id, circ, - END_STREAM_REASON_TORPROTOCOL, NULL); + or_circ->is_first_hop ? + END_STREAM_REASON_TORPROTOCOL : + END_STREAM_REASON_MISC, + NULL); tor_free(address); return 0; } } else if (rh.command == RELAY_COMMAND_BEGIN_DIR) { - if (!directory_permits_begindir_requests(get_options()) || + if (!directory_permits_begindir_requests(options) || circ->purpose != CIRCUIT_PURPOSE_OR) { relay_send_end_cell_from_edge(rh.stream_id, circ, END_STREAM_REASON_NOTDIRECTORY, NULL); @@ -2600,6 +2794,11 @@ log_debug(LD_EXIT,"Creating new exit connection."); n_stream = edge_connection_new(CONN_TYPE_EXIT, AF_INET); + + /* Remember the tunneled request ID in the new edge connection, so that + * we can measure download times. */ + TO_CONN(n_stream)->dirreq_id = circ->dirreq_id; + n_stream->_base.purpose = EXIT_PURPOSE_CONNECT; n_stream->stream_id = rh.stream_id; @@ -2630,7 +2829,7 @@ log_debug(LD_REND,"Finished assigning addr/port"); n_stream->cpath_layer = origin_circ->cpath->prev; /* link it */ - /* add it into the linked list of n_streams on this circuit */ + /* add it into the linked list of p_streams on this circuit */ n_stream->next_stream = origin_circ->p_streams; n_stream->on_circuit = circ; origin_circ->p_streams = n_stream; @@ -2657,7 +2856,7 @@ if (rh.command == RELAY_COMMAND_BEGIN_DIR) { tor_assert(or_circ); if (or_circ->p_conn && !tor_addr_is_null(&or_circ->p_conn->real_addr)) - tor_addr_assign(&n_stream->_base.addr, &or_circ->p_conn->real_addr); + tor_addr_copy(&n_stream->_base.addr, &or_circ->p_conn->real_addr); return connection_exit_connect_dir(n_stream); } @@ -2750,7 +2949,7 @@ if (!connection_edge_is_rendezvous_stream(edge_conn) && router_compare_to_my_exit_policy(edge_conn)) { log_info(LD_EXIT,"%s:%d failed exit policy. Closing.", - escaped_safe_str(conn->address), conn->port); + escaped_safe_str_client(conn->address), conn->port); connection_edge_end(edge_conn, END_STREAM_REASON_EXITPOLICY); circuit_detach_stream(circuit_get_by_edge_conn(edge_conn), edge_conn); connection_free(conn); @@ -2762,17 +2961,17 @@ log_debug(LD_EXIT,"about to try connecting"); switch (connection_connect(conn, conn->address, addr, port, &socket_error)) { - case -1: - /* XXX021 use socket_error below rather than trying to piece things - * together from the current errno, which may have been clobbered. */ - connection_edge_end_errno(edge_conn); + case -1: { + int reason = errno_to_stream_end_reason(socket_error); + connection_edge_end(edge_conn, reason); circuit_detach_stream(circuit_get_by_edge_conn(edge_conn), edge_conn); connection_free(conn); return; + } case 0: conn->state = EXIT_CONN_STATE_CONNECTING; - connection_watch_events(conn, EV_WRITE | EV_READ); + connection_watch_events(conn, READ_EVENT | WRITE_EVENT); /* writable indicates finish; * readable/error indicates broken link in windows-land. */ return; @@ -2785,7 +2984,7 @@ log_warn(LD_BUG,"newly connected conn had data waiting!"); // connection_start_writing(conn); } - connection_watch_events(conn, EV_READ); + connection_watch_events(conn, READ_EVENT); /* also, deliver a 'connected' cell back through the circuit. */ if (connection_edge_is_rendezvous_stream(edge_conn)) { @@ -2832,13 +3031,17 @@ dirconn = dir_connection_new(AF_INET); - tor_addr_assign(&dirconn->_base.addr, &exitconn->_base.addr); + tor_addr_copy(&dirconn->_base.addr, &exitconn->_base.addr); dirconn->_base.port = 0; dirconn->_base.address = tor_strdup(exitconn->_base.address); dirconn->_base.type = CONN_TYPE_DIR; dirconn->_base.purpose = DIR_PURPOSE_SERVER; dirconn->_base.state = DIR_CONN_STATE_SERVER_COMMAND_WAIT; + /* Note that the new dir conn belongs to the same tunneled request as + * the edge conn, so that we can measure download times. */ + TO_CONN(dirconn)->dirreq_id = TO_CONN(exitconn)->dirreq_id; + connection_link_connections(TO_CONN(dirconn), TO_CONN(exitconn)); if (connection_add(TO_CONN(exitconn))<0) { @@ -2893,6 +3096,8 @@ int connection_ap_can_use_exit(edge_connection_t *conn, routerinfo_t *exit) { + or_options_t *options = get_options(); + tor_assert(conn); tor_assert(conn->_base.type == CONN_TYPE_AP); tor_assert(conn->socks_request); @@ -2904,7 +3109,7 @@ if (conn->chosen_exit_name) { routerinfo_t *chosen_exit = router_get_by_nickname(conn->chosen_exit_name, 1); - if (!chosen_exit || memcmp(chosen_exit->cache_info.identity_digest, + if (!chosen_exit || tor_memneq(chosen_exit->cache_info.identity_digest, exit->cache_info.identity_digest, DIGEST_LEN)) { /* doesn't match */ // log_debug(LD_APP,"Requested node '%s', considering node '%s'. No.", @@ -2938,20 +3143,26 @@ if (!conn->chosen_exit_name && policy_is_reject_star(exit->exit_policy)) return 0; } + if (options->_ExcludeExitNodesUnion && + routerset_contains_router(options->_ExcludeExitNodesUnion, exit)) { + /* Not a suitable exit. Refuse it. */ + return 0; + } + return 1; } /** If address is of the form "y.onion" with a well-formed handle y: * Put a NUL after y, lower-case it, and return ONION_HOSTNAME. * - * If address is of the form "y.exit": + * If address is of the form "y.exit" and allowdotexit is true: * Put a NUL after y and return EXIT_HOSTNAME. * * Otherwise: * Return NORMAL_HOSTNAME and change nothing. */ hostname_type_t -parse_extended_hostname(char *address) +parse_extended_hostname(char *address, int allowdotexit) { char *s; char query[REND_SERVICE_ID_LEN_BASE32+1]; @@ -2960,8 +3171,16 @@ if (!s) return NORMAL_HOSTNAME; /* no dot, thus normal */ if (!strcmp(s+1,"exit")) { - *s = 0; /* NUL-terminate it */ - return EXIT_HOSTNAME; /* .exit */ + if (allowdotexit) { + *s = 0; /* NUL-terminate it */ + return EXIT_HOSTNAME; /* .exit */ + } else { + log_warn(LD_APP, "The \".exit\" notation is disabled in Tor due to " + "security risks. Set AllowDotExit in your torrc to enable " + "it."); + /* FFFF send a controller event too to notify Vidalia users */ + return BAD_HOSTNAME; + } } if (strcmp(s+1,"onion")) return NORMAL_HOSTNAME; /* neither .exit nor .onion, thus normal */ @@ -2974,17 +3193,9 @@ if (rend_valid_service_id(query)) { return ONION_HOSTNAME; /* success */ } -failed: + failed: /* otherwise, return to previous state and return 0 */ *s = '.'; return BAD_HOSTNAME; } -/** Check if the address is of the form "y.noconnect" - */ -int -hostname_is_noconnect_address(const char *address) -{ - return ! strcasecmpend(address, ".noconnect"); -} - diff -Nru tor-0.2.1.30/src/or/connection_edge.h tor-0.2.2.35/src/or/connection_edge.h --- tor-0.2.1.30/src/or/connection_edge.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/connection_edge.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,102 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file connection_edge.h + * \brief Header file for connection_edge.c. + **/ + +#ifndef _TOR_CONNECTION_EDGE_H +#define _TOR_CONNECTION_EDGE_H + +#define connection_mark_unattached_ap(conn, endreason) \ + _connection_mark_unattached_ap((conn), (endreason), __LINE__, _SHORT_FILE_) + +void _connection_mark_unattached_ap(edge_connection_t *conn, int endreason, + int line, const char *file); +int connection_edge_reached_eof(edge_connection_t *conn); +int connection_edge_process_inbuf(edge_connection_t *conn, + int package_partial); +int connection_edge_destroy(circid_t circ_id, edge_connection_t *conn); +int connection_edge_end(edge_connection_t *conn, uint8_t reason); +int connection_edge_end_errno(edge_connection_t *conn); +int connection_edge_flushed_some(edge_connection_t *conn); +int connection_edge_finished_flushing(edge_connection_t *conn); +int connection_edge_finished_connecting(edge_connection_t *conn); + +int connection_ap_handshake_send_begin(edge_connection_t *ap_conn); +int connection_ap_handshake_send_resolve(edge_connection_t *ap_conn); + +edge_connection_t *connection_ap_make_link(char *address, uint16_t port, + const char *digest, + int use_begindir, int want_onehop); +void connection_ap_handshake_socks_reply(edge_connection_t *conn, char *reply, + size_t replylen, + int endreason); +void connection_ap_handshake_socks_resolved(edge_connection_t *conn, + int answer_type, + size_t answer_len, + const uint8_t *answer, + int ttl, + time_t expires); + +int connection_exit_begin_conn(cell_t *cell, circuit_t *circ); +int connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ); +void connection_exit_connect(edge_connection_t *conn); +int connection_edge_is_rendezvous_stream(edge_connection_t *conn); +int connection_ap_can_use_exit(edge_connection_t *conn, routerinfo_t *exit); +void connection_ap_expire_beginning(void); +void connection_ap_attach_pending(void); +void connection_ap_fail_onehop(const char *failed_digest, + cpath_build_state_t *build_state); +void circuit_discard_optional_exit_enclaves(extend_info_t *info); +int connection_ap_detach_retriable(edge_connection_t *conn, + origin_circuit_t *circ, + int reason); +int connection_ap_process_transparent(edge_connection_t *conn); + +int address_is_invalid_destination(const char *address, int client); + +void addressmap_init(void); +void addressmap_clear_excluded_trackexithosts(or_options_t *options); +void addressmap_clear_invalid_automaps(or_options_t *options); +void addressmap_clean(time_t now); +void addressmap_clear_configured(void); +void addressmap_clear_transient(void); +void addressmap_free_all(void); +int addressmap_rewrite(char *address, size_t maxlen, time_t *expires_out); +int addressmap_have_mapping(const char *address, int update_timeout); + +void addressmap_register(const char *address, char *new_address, + time_t expires, addressmap_entry_source_t source); +int parse_virtual_addr_network(const char *val, int validate_only, + char **msg); +int client_dns_incr_failures(const char *address); +void client_dns_clear_failures(const char *address); +void client_dns_set_addressmap(const char *address, uint32_t val, + const char *exitname, int ttl); +const char *addressmap_register_virtual_address(int type, char *new_address); +void addressmap_get_mappings(smartlist_t *sl, time_t min_expires, + time_t max_expires, int want_expiry); +int connection_ap_rewrite_and_attach_if_allowed(edge_connection_t *conn, + origin_circuit_t *circ, + crypt_path_t *cpath); +int connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn, + origin_circuit_t *circ, + crypt_path_t *cpath); + +/** Possible return values for parse_extended_hostname. */ +typedef enum hostname_type_t { + NORMAL_HOSTNAME, ONION_HOSTNAME, EXIT_HOSTNAME, BAD_HOSTNAME +} hostname_type_t; +hostname_type_t parse_extended_hostname(char *address, int allowdotexit); + +#if defined(HAVE_NET_IF_H) && defined(HAVE_NET_PFVAR_H) +int get_pf_socket(void); +#endif + +#endif + diff -Nru tor-0.2.1.30/src/or/connection.h tor-0.2.2.35/src/or/connection.h --- tor-0.2.1.30/src/or/connection.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/connection.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,100 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file connection.h + * \brief Header file for connection.c. + **/ + +#ifndef _TOR_CONNECTION_H +#define _TOR_CONNECTION_H + +const char *conn_type_to_string(int type); +const char *conn_state_to_string(int type, int state); + +dir_connection_t *dir_connection_new(int socket_family); +or_connection_t *or_connection_new(int socket_family); +edge_connection_t *edge_connection_new(int type, int socket_family); +control_connection_t *control_connection_new(int socket_family); +connection_t *connection_new(int type, int socket_family); + +void connection_link_connections(connection_t *conn_a, connection_t *conn_b); +void connection_free(connection_t *conn); +void connection_free_all(void); +void connection_about_to_close_connection(connection_t *conn); +void connection_close_immediate(connection_t *conn); +void _connection_mark_for_close(connection_t *conn,int line, const char *file); + +#define connection_mark_for_close(c) \ + _connection_mark_for_close((c), __LINE__, _SHORT_FILE_) + +void connection_expire_held_open(void); + +int connection_connect(connection_t *conn, const char *address, + const tor_addr_t *addr, + uint16_t port, int *socket_error); + +int connection_proxy_connect(connection_t *conn, int type); +int connection_read_proxy_handshake(connection_t *conn); + +int retry_all_listeners(smartlist_t *replaced_conns, + smartlist_t *new_conns); + +ssize_t connection_bucket_write_limit(connection_t *conn, time_t now); +int global_write_bucket_low(connection_t *conn, size_t attempt, int priority); +void connection_bucket_init(void); +void connection_bucket_refill(int seconds_elapsed, time_t now); + +int connection_handle_read(connection_t *conn); + +int connection_fetch_from_buf(char *string, size_t len, connection_t *conn); + +int connection_wants_to_flush(connection_t *conn); +int connection_outbuf_too_full(connection_t *conn); +int connection_handle_write(connection_t *conn, int force); +void _connection_write_to_buf_impl(const char *string, size_t len, + connection_t *conn, int zlib); +static void connection_write_to_buf(const char *string, size_t len, + connection_t *conn); +static void connection_write_to_buf_zlib(const char *string, size_t len, + dir_connection_t *conn, int done); +static INLINE void +connection_write_to_buf(const char *string, size_t len, connection_t *conn) +{ + _connection_write_to_buf_impl(string, len, conn, 0); +} +static INLINE void +connection_write_to_buf_zlib(const char *string, size_t len, + dir_connection_t *conn, int done) +{ + _connection_write_to_buf_impl(string, len, TO_CONN(conn), done ? -1 : 1); +} + +connection_t *connection_get_by_global_id(uint64_t id); + +connection_t *connection_get_by_type(int type); +connection_t *connection_get_by_type_purpose(int type, int purpose); +connection_t *connection_get_by_type_addr_port_purpose(int type, + const tor_addr_t *addr, + uint16_t port, int purpose); +connection_t *connection_get_by_type_state(int type, int state); +connection_t *connection_get_by_type_state_rendquery(int type, int state, + const char *rendquery); + +#define connection_speaks_cells(conn) ((conn)->type == CONN_TYPE_OR) +int connection_is_listener(connection_t *conn); +int connection_state_is_open(connection_t *conn); +int connection_state_is_connecting(connection_t *conn); + +char *alloc_http_authenticator(const char *authenticator); + +void assert_connection_ok(connection_t *conn, time_t now); +int connection_or_nonopen_was_started_here(or_connection_t *conn); +void connection_dump_buffer_mem_stats(int severity); +void remove_file_if_very_old(const char *fname, time_t now); + +#endif + diff -Nru tor-0.2.1.30/src/or/connection_or.c tor-0.2.2.35/src/or/connection_or.c --- tor-0.2.1.30/src/or/connection_or.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/connection_or.c 2011-12-15 16:28:37.000000000 +0000 @@ -11,6 +11,22 @@ **/ #include "or.h" +#include "buffers.h" +#include "circuitbuild.h" +#include "command.h" +#include "config.h" +#include "connection.h" +#include "connection_or.h" +#include "control.h" +#include "dirserv.h" +#include "geoip.h" +#include "main.h" +#include "networkstatus.h" +#include "reasons.h" +#include "relay.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" static int connection_tls_finish_handshake(or_connection_t *conn); static int connection_or_process_cells_from_inbuf(or_connection_t *conn); @@ -80,10 +96,8 @@ } }); - if (orconn_identity_map) { - digestmap_free(orconn_identity_map, NULL); - orconn_identity_map = NULL; - } + digestmap_free(orconn_identity_map, NULL); + orconn_identity_map = NULL; } /** Change conn->identity_digest to digest, and add conn into @@ -97,7 +111,7 @@ if (!orconn_identity_map) orconn_identity_map = digestmap_new(); - if (!memcmp(conn->identity_digest, digest, DIGEST_LEN)) + if (tor_memeq(conn->identity_digest, digest, DIGEST_LEN)) return; /* If the identity was set previously, remove the old mapping. */ @@ -116,7 +130,7 @@ #if 1 /* Testing code to check for bugs in representation. */ for (; tmp; tmp = tmp->next_with_same_id) { - tor_assert(!memcmp(tmp->identity_digest, digest, DIGEST_LEN)); + tor_assert(tor_memeq(tmp->identity_digest, digest, DIGEST_LEN)); tor_assert(tmp != conn); } #endif @@ -133,7 +147,7 @@ cell_pack(packed_cell_t *dst, const cell_t *src) { char *dest = dst->body; - *(uint16_t*)dest = htons(src->circ_id); + set_uint16(dest, htons(src->circ_id)); *(uint8_t*)(dest+2) = src->command; memcpy(dest+3, src->payload, CELL_PAYLOAD_SIZE); } @@ -144,7 +158,7 @@ static void cell_unpack(cell_t *dest, const char *src) { - dest->circ_id = ntohs(*(uint16_t*)(src)); + dest->circ_id = ntohs(get_uint16(src)); dest->command = *(uint8_t*)(src+2); memcpy(dest->payload, src+3, CELL_PAYLOAD_SIZE); } @@ -187,66 +201,6 @@ return 0; } -/** Read conn's inbuf. If the http response from the proxy is all - * here, make sure it's good news, and begin the tls handshake. If - * it's bad news, close the connection and return -1. Else return 0 - * and hope for better luck next time. - */ -static int -connection_or_read_proxy_response(or_connection_t *or_conn) -{ - char *headers; - char *reason=NULL; - int status_code; - time_t date_header; - connection_t *conn = TO_CONN(or_conn); - - switch (fetch_from_buf_http(conn->inbuf, - &headers, MAX_HEADERS_SIZE, - NULL, NULL, 10000, 0)) { - case -1: /* overflow */ - log_warn(LD_PROTOCOL, - "Your https proxy sent back an oversized response. Closing."); - return -1; - case 0: - log_info(LD_OR,"https proxy response not all here yet. Waiting."); - return 0; - /* case 1, fall through */ - } - - if (parse_http_response(headers, &status_code, &date_header, - NULL, &reason) < 0) { - log_warn(LD_OR, - "Unparseable headers from proxy (connecting to '%s'). Closing.", - conn->address); - tor_free(headers); - return -1; - } - if (!reason) reason = tor_strdup("[no reason given]"); - - if (status_code == 200) { - log_info(LD_OR, - "HTTPS connect to '%s' successful! (200 %s) Starting TLS.", - conn->address, escaped(reason)); - tor_free(reason); - if (connection_tls_start_handshake(or_conn, 0) < 0) { - /* TLS handshaking error of some kind. */ - connection_mark_for_close(conn); - - return -1; - } - return 0; - } - /* else, bad news on the status code */ - log_warn(LD_OR, - "The https proxy sent back an unexpected status code %d (%s). " - "Closing.", - status_code, escaped(reason)); - tor_free(reason); - connection_mark_for_close(conn); - return -1; -} - /** Handle any new bytes that have come in on connection conn. * If conn is in 'open' state, hand it to * connection_or_process_cells_from_inbuf() @@ -255,11 +209,24 @@ int connection_or_process_inbuf(or_connection_t *conn) { + int ret; tor_assert(conn); switch (conn->_base.state) { - case OR_CONN_STATE_PROXY_READING: - return connection_or_read_proxy_response(conn); + case OR_CONN_STATE_PROXY_HANDSHAKING: + ret = connection_read_proxy_handshake(TO_CONN(conn)); + + /* start TLS after handshake completion, or deal with error */ + if (ret == 1) { + tor_assert(TO_CONN(conn)->proxy_state == PROXY_CONNECTED); + if (connection_tls_start_handshake(conn, 0) < 0) + ret = -1; + } + if (ret < 0) { + connection_mark_for_close(TO_CONN(conn)); + } + + return ret; case OR_CONN_STATE_OPEN: case OR_CONN_STATE_OR_HANDSHAKING: return connection_or_process_cells_from_inbuf(conn); @@ -285,8 +252,7 @@ /* If we're under the low water mark, add cells until we're just over the * high water mark. */ if (datalen < OR_CONN_LOWWATER) { - ssize_t n = (OR_CONN_HIGHWATER - datalen + CELL_NETWORK_SIZE-1) - / CELL_NETWORK_SIZE; + ssize_t n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, CELL_NETWORK_SIZE); time_t now = approx_time(); while (conn->active_circuits && n > 0) { int flushed; @@ -312,11 +278,7 @@ assert_connection_ok(TO_CONN(conn),0); switch (conn->_base.state) { - case OR_CONN_STATE_PROXY_FLUSHING: - log_debug(LD_OR,"finished sending CONNECT to proxy."); - conn->_base.state = OR_CONN_STATE_PROXY_READING; - connection_stop_writing(TO_CONN(conn)); - break; + case OR_CONN_STATE_PROXY_HANDSHAKING: case OR_CONN_STATE_OPEN: case OR_CONN_STATE_OR_HANDSHAKING: connection_stop_writing(TO_CONN(conn)); @@ -334,37 +296,34 @@ int connection_or_finished_connecting(or_connection_t *or_conn) { + int proxy_type; connection_t *conn; tor_assert(or_conn); conn = TO_CONN(or_conn); tor_assert(conn->state == OR_CONN_STATE_CONNECTING); - log_debug(LD_OR,"OR connect() to router at %s:%u finished.", + log_debug(LD_HANDSHAKE,"OR connect() to router at %s:%u finished.", conn->address,conn->port); control_event_bootstrap(BOOTSTRAP_STATUS_HANDSHAKE, 0); - if (get_options()->HttpsProxy) { - char buf[1024]; - char *base64_authenticator=NULL; - const char *authenticator = get_options()->HttpsProxyAuthenticator; - - if (authenticator) { - base64_authenticator = alloc_http_authenticator(authenticator); - if (!base64_authenticator) - log_warn(LD_OR, "Encoding https authenticator failed"); - } - if (base64_authenticator) { - tor_snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.1\r\n" - "Proxy-Authorization: Basic %s\r\n\r\n", - fmt_addr(&conn->addr), - conn->port, base64_authenticator); - tor_free(base64_authenticator); - } else { - tor_snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.0\r\n\r\n", - fmt_addr(&conn->addr), conn->port); + proxy_type = PROXY_NONE; + + if (get_options()->HTTPSProxy) + proxy_type = PROXY_CONNECT; + else if (get_options()->Socks4Proxy) + proxy_type = PROXY_SOCKS4; + else if (get_options()->Socks5Proxy) + proxy_type = PROXY_SOCKS5; + + if (proxy_type != PROXY_NONE) { + /* start proxy handshake */ + if (connection_proxy_connect(conn, proxy_type) < 0) { + connection_mark_for_close(conn); + return -1; } - connection_write_to_buf(buf, strlen(buf), conn); - conn->state = OR_CONN_STATE_PROXY_FLUSHING; + + connection_start_reading(conn); + conn->state = OR_CONN_STATE_PROXY_HANDSHAKING; return 0; } @@ -376,6 +335,78 @@ return 0; } +/** Return 1 if identity digest id_digest is known to be a + * currently or recently running relay. Otherwise return 0. */ +int +connection_or_digest_is_known_relay(const char *id_digest) +{ + if (router_get_consensus_status_by_id(id_digest)) + return 1; /* It's in the consensus: "yes" */ + if (router_get_by_digest(id_digest)) + return 1; /* Not in the consensus, but we have a descriptor for + * it. Probably it was in a recent consensus. "Yes". */ + return 0; +} + +/** Set the per-conn read and write limits for conn. If it's a known + * relay, we will rely on the global read and write buckets, so give it + * per-conn limits that are big enough they'll never matter. But if it's + * not a known relay, first check if we set PerConnBwRate/Burst, then + * check if the consensus sets them, else default to 'big enough'. + * + * If reset is true, set the bucket to be full. Otherwise, just + * clip the bucket if it happens to be too full. + */ +static void +connection_or_update_token_buckets_helper(or_connection_t *conn, int reset, + or_options_t *options) +{ + int rate, burst; /* per-connection rate limiting params */ + if (connection_or_digest_is_known_relay(conn->identity_digest)) { + /* It's in the consensus, or we have a descriptor for it meaning it + * was probably in a recent consensus. It's a recognized relay: + * give it full bandwidth. */ + rate = (int)options->BandwidthRate; + burst = (int)options->BandwidthBurst; + } else { + /* Not a recognized relay. Squeeze it down based on the suggested + * bandwidth parameters in the consensus, but allow local config + * options to override. */ + rate = options->PerConnBWRate ? (int)options->PerConnBWRate : + networkstatus_get_param(NULL, "perconnbwrate", + (int)options->BandwidthRate, 1, INT32_MAX); + burst = options->PerConnBWBurst ? (int)options->PerConnBWBurst : + networkstatus_get_param(NULL, "perconnbwburst", + (int)options->BandwidthBurst, 1, INT32_MAX); + } + + conn->bandwidthrate = rate; + conn->bandwidthburst = burst; + if (reset) { /* set up the token buckets to be full */ + conn->read_bucket = conn->write_bucket = burst; + return; + } + /* If the new token bucket is smaller, take out the extra tokens. + * (If it's larger, don't -- the buckets can grow to reach the cap.) */ + if (conn->read_bucket > burst) + conn->read_bucket = burst; + if (conn->write_bucket > burst) + conn->write_bucket = burst; +} + +/** Either our set of relays or our per-conn rate limits have changed. + * Go through all the OR connections and update their token buckets to make + * sure they don't exceed their maximum values. */ +void +connection_or_update_token_buckets(smartlist_t *conns, or_options_t *options) +{ + SMARTLIST_FOREACH(conns, connection_t *, conn, + { + if (connection_speaks_cells(conn)) + connection_or_update_token_buckets_helper(TO_OR_CONN(conn), 0, options); + }); +} + /** If we don't necessarily know the router we're connecting to, but we * have an addr/port/id_digest, then fill in as much as we can. Start * by checking to see if this describes a router we know. */ @@ -385,11 +416,9 @@ const char *id_digest, int started_here) { - or_options_t *options = get_options(); routerinfo_t *r = router_get_by_digest(id_digest); - conn->bandwidthrate = (int)options->BandwidthRate; - conn->read_bucket = conn->bandwidthburst = (int)options->BandwidthBurst; connection_or_set_identity_digest(conn, id_digest); + connection_or_update_token_buckets_helper(conn, 1, get_options()); conn->_base.port = port; tor_addr_copy(&conn->_base.addr, addr); @@ -442,7 +471,7 @@ * Requires that both input connections are open; not is_bad_for_new_circs, * and not impossibly non-canonical. * - * If forgive_new_connections is true, then we do not call + * If forgive_new_connections is true, then we do not call * abetter than b simply because b has no circuits, * unless b is also relatively old. */ @@ -516,9 +545,14 @@ for (; conn; conn = conn->next_with_same_id) { tor_assert(conn->_base.magic == OR_CONNECTION_MAGIC); tor_assert(conn->_base.type == CONN_TYPE_OR); - tor_assert(!memcmp(conn->identity_digest, digest, DIGEST_LEN)); + tor_assert(tor_memeq(conn->identity_digest, digest, DIGEST_LEN)); if (conn->_base.marked_for_close) continue; + /* Never return a connection on which the other end appears to be + * a client. */ + if (conn->is_connection_with_client) { + continue; + } /* Never return a non-open connection. */ if (conn->_base.state != OR_CONN_STATE_OPEN) { /* If the address matches, don't launch a new connection for this @@ -581,11 +615,24 @@ #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 - * identity, set elements of that list as is_bad_for_new_circs() as - * appropriate. Helper for connection_or_set_bad_connections(). + * identity, set elements of that list as is_bad_for_new_circs as + * appropriate. Helper for connection_or_set_bad_connections(). + * + * Specifically, we set the is_bad_for_new_circs flag on: + * - all connections if force is true. + * - all connections that are too old. + * - all open non-canonical connections for which a canonical connection + * exists to the same router. + * - all open canonical connections for which a 'better' canonical + * connection exists to the same router. + * - all open non-canonical connections for which a 'better' non-canonical + * connection exists to the same router at the same address. + * + * See connection_or_is_better() for our idea of what makes one OR connection + * better than another. */ static void -connection_or_group_set_badness(or_connection_t *head) +connection_or_group_set_badness(or_connection_t *head, int force) { or_connection_t *or_conn = NULL, *best = NULL; int n_old = 0, n_inprogress = 0, n_canonical = 0, n_other = 0; @@ -597,8 +644,9 @@ if (or_conn->_base.marked_for_close || or_conn->is_bad_for_new_circs) continue; - if (or_conn->_base.timestamp_created + TIME_BEFORE_OR_CONN_IS_TOO_OLD - < now) { + if (force || + or_conn->_base.timestamp_created + TIME_BEFORE_OR_CONN_IS_TOO_OLD + < now) { log_info(LD_OR, "Marking OR conn to %s:%d as too old for new circuits " "(fd %d, %d secs old).", @@ -631,7 +679,7 @@ /* We have at least one open canonical connection to this router, * and this one is open but not canonical. Mark it bad. */ log_info(LD_OR, - "Marking OR conn to %s:%d as too old for new circuits: " + "Marking OR conn to %s:%d as unsuitable for new circuits: " "(fd %d, %d secs old). It is not canonical, and we have " "another connection to that OR that is.", or_conn->_base.address, or_conn->_base.port, or_conn->_base.s, @@ -671,7 +719,7 @@ even when we're being forgiving. */ if (best->is_canonical) { log_info(LD_OR, - "Marking OR conn to %s:%d as too old for new circuits: " + "Marking OR conn to %s:%d as unsuitable for new circuits: " "(fd %d, %d secs old). We have a better canonical one " "(fd %d; %d secs old).", or_conn->_base.address, or_conn->_base.port, or_conn->_base.s, @@ -681,9 +729,9 @@ } else if (!tor_addr_compare(&or_conn->real_addr, &best->real_addr, CMP_EXACT)) { log_info(LD_OR, - "Marking OR conn to %s:%d as too old for new circuits: " - "(fd %d, %d secs old). We have a better one " - "(fd %d; %d secs old).", + "Marking OR conn to %s:%d as unsuitable for new circuits: " + "(fd %d, %d secs old). We have a better one with the " + "same address (fd %d; %d secs old).", or_conn->_base.address, or_conn->_base.port, or_conn->_base.s, (int)(now - or_conn->_base.timestamp_created), best->_base.s, (int)(now - best->_base.timestamp_created)); @@ -693,27 +741,20 @@ } } -/** Go through all the OR connections, and set the is_bad_for_new_circs - * flag on: - * - all connections that are too old. - * - all open non-canonical connections for which a canonical connection - * exists to the same router. - * - all open canonical connections for which a 'better' canonical - * connection exists to the same router. - * - all open non-canonical connections for which a 'better' non-canonical - * connection exists to the same router at the same address. - * - * See connection_or_is_better() for our idea of what makes one OR connection - * better than another. +/** Go through all the OR connections (or if digest 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 force is true). */ void -connection_or_set_bad_connections(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) { - connection_or_group_set_badness(conn); + if (!digest || tor_memeq(digest, conn->identity_digest, DIGEST_LEN)) + connection_or_group_set_badness(conn, force); } DIGESTMAP_FOREACH_END; } @@ -753,6 +794,7 @@ or_connection_t *conn; or_options_t *options = get_options(); int socket_error = 0; + int using_proxy = 0; tor_addr_t addr; tor_assert(_addr); @@ -771,19 +813,29 @@ conn->_base.state = OR_CONN_STATE_CONNECTING; control_event_or_conn_status(conn, OR_CONN_EVENT_LAUNCHED, 0); - if (options->HttpsProxy) { - /* we shouldn't connect directly. use the https proxy instead. */ - tor_addr_from_ipv4h(&addr, options->HttpsProxyAddr); - port = options->HttpsProxyPort; + conn->is_outgoing = 1; + + /* use a proxy server if available */ + if (options->HTTPSProxy) { + using_proxy = 1; + tor_addr_copy(&addr, &options->HTTPSProxyAddr); + port = options->HTTPSProxyPort; + } else if (options->Socks4Proxy) { + using_proxy = 1; + tor_addr_copy(&addr, &options->Socks4ProxyAddr); + port = options->Socks4ProxyPort; + } else if (options->Socks5Proxy) { + using_proxy = 1; + tor_addr_copy(&addr, &options->Socks5ProxyAddr); + port = options->Socks5ProxyPort; } switch (connection_connect(TO_CONN(conn), conn->_base.address, &addr, port, &socket_error)) { case -1: /* If the connection failed immediately, and we're using - * an https proxy, our https proxy is down. Don't blame the - * Tor server. */ - if (!options->HttpsProxy) + * a proxy, our proxy is down. Don't blame the Tor server. */ + if (!using_proxy) entry_guard_register_connect_status(conn->identity_digest, 0, 1, time(NULL)); connection_or_connect_failed(conn, @@ -792,7 +844,7 @@ connection_free(TO_CONN(conn)); return NULL; case 0: - connection_watch_events(TO_CONN(conn), EV_READ | EV_WRITE); + connection_watch_events(TO_CONN(conn), READ_EVENT | WRITE_EVENT); /* writable indicates finish, readable indicates broken link, error indicates broken link on windows */ return conn; @@ -819,13 +871,14 @@ { conn->_base.state = OR_CONN_STATE_TLS_HANDSHAKING; conn->tls = tor_tls_new(conn->_base.s, receiving); - tor_tls_set_logged_address(conn->tls, escaped_safe_str(conn->_base.address)); if (!conn->tls) { log_warn(LD_BUG,"tor_tls_new failed. Closing."); return -1; } + tor_tls_set_logged_address(conn->tls, // XXX client and relay? + escaped_safe_str(conn->_base.address)); connection_start_reading(TO_CONN(conn)); - log_debug(LD_OR,"starting TLS handshake on fd %d", conn->_base.s); + log_debug(LD_HANDSHAKE,"starting TLS handshake on fd %d", conn->_base.s); note_crypto_pk_op(receiving ? TLS_HANDSHAKE_S : TLS_HANDSHAKE_C); if (connection_tls_continue_handshake(conn) < 0) { @@ -883,13 +936,16 @@ if (! tor_tls_used_v1_handshake(conn->tls)) { if (!tor_tls_is_server(conn->tls)) { if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) { - // log_notice(LD_OR,"Done. state was TLS_HANDSHAKING."); + log_debug(LD_OR, "Done with initial SSL handshake (client-side). " + "Requesting renegotiation."); conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING; goto again; } // log_notice(LD_OR,"Done. state was %d.", conn->_base.state); } else { /* improved handshake, but not a client. */ + log_debug(LD_OR, "Done with initial SSL handshake (server-side). " + "Expecting renegotiation."); tor_tls_set_renegotiate_callback(conn->tls, connection_or_tls_renegotiated_cb, conn); @@ -932,23 +988,26 @@ * return -1 if he is lying, broken, or otherwise something is wrong. * * If we initiated this connection (started_here is true), make sure - * the other side sent sent a correctly formed certificate. If I initiated the + * the other side sent a correctly formed certificate. If I initiated the * connection, make sure it's the right guy. * * Otherwise (if we _didn't_ initiate this connection), it's okay for * the certificate to be weird or absent. * * If we return 0, and the certificate is as expected, write a hash of the - * identity key into digest_rcvd, which must have DIGEST_LEN space in it. (If - * we return -1 this buffer is undefined.) If the certificate is invalid - * or missing on an incoming connection, we return 0 and set digest_rcvd to - * DIGEST_LEN 0 bytes. + * identity key into digest_rcvd_out, which must have DIGEST_LEN + * space in it. + * If the certificate is invalid or missing on an incoming connection, + * we return 0 and set digest_rcvd_out to DIGEST_LEN NUL bytes. + * (If we return -1, the contents of this buffer are undefined.) * * As side effects, * 1) Set conn->circ_id_type according to tor-spec.txt. * 2) If we're an authdirserver and we initiated the connection: drop all * descriptors that claim to be on that IP/port but that aren't * this guy; and note that this guy is reachable. + * 3) If this is a bridge and we didn't configure its identity + * fingerprint, remember the keyid we just learned. */ static int connection_or_check_valid_tls_handshake(or_connection_t *conn, @@ -959,19 +1018,23 @@ or_options_t *options = get_options(); int severity = server_mode(options) ? LOG_PROTOCOL_WARN : LOG_WARN; const char *safe_address = - started_here ? conn->_base.address : safe_str(conn->_base.address); + started_here ? conn->_base.address : + safe_str_client(conn->_base.address); const char *conn_type = started_here ? "outgoing" : "incoming"; + crypto_pk_env_t *our_identity = + started_here ? get_tlsclient_identity_key() : + get_server_identity_key(); int has_cert = 0, has_identity=0; check_no_tls_errors(); has_cert = tor_tls_peer_has_cert(conn->tls); if (started_here && !has_cert) { - log_info(LD_PROTOCOL,"Tried connecting to router at %s:%d, but it didn't " + log_info(LD_HANDSHAKE,"Tried connecting to router at %s:%d, but it didn't " "send a cert! Closing.", safe_address, conn->_base.port); return -1; } else if (!has_cert) { - log_debug(LD_PROTOCOL,"Got incoming connection with no certificate. " + log_debug(LD_HANDSHAKE,"Got incoming connection with no certificate. " "That's ok."); } check_no_tls_errors(); @@ -980,15 +1043,16 @@ int v = tor_tls_verify(started_here?severity:LOG_INFO, conn->tls, &identity_rcvd); if (started_here && v<0) { - log_fn(severity,LD_OR,"Tried connecting to router at %s:%d: It" + log_fn(severity,LD_HANDSHAKE,"Tried connecting to router at %s:%d: It" " has a cert but it's invalid. Closing.", safe_address, conn->_base.port); return -1; } else if (v<0) { - log_info(LD_PROTOCOL,"Incoming connection gave us an invalid cert " + log_info(LD_HANDSHAKE,"Incoming connection gave us an invalid cert " "chain; ignoring."); } else { - log_debug(LD_OR,"The certificate seems to be valid on %s connection " + log_debug(LD_HANDSHAKE, + "The certificate seems to be valid on %s connection " "with %s:%d", conn_type, safe_address, conn->_base.port); } check_no_tls_errors(); @@ -997,7 +1061,7 @@ if (identity_rcvd) { has_identity = 1; crypto_pk_get_digest(identity_rcvd, digest_rcvd_out); - if (crypto_pk_cmp_keys(get_identity_key(), identity_rcvd)<0) { + if (crypto_pk_cmp_keys(our_identity, identity_rcvd)<0) { conn->circ_id_type = CIRC_ID_TYPE_LOWER; } else { conn->circ_id_type = CIRC_ID_TYPE_HIGHER; @@ -1015,23 +1079,27 @@ conn->nickname[0] = '$'; base16_encode(conn->nickname+1, HEX_DIGEST_LEN+1, conn->identity_digest, DIGEST_LEN); - log_info(LD_OR, "Connected to router %s at %s:%d without knowing " + log_info(LD_HANDSHAKE, "Connected to router %s at %s:%d without knowing " "its key. Hoping for the best.", conn->nickname, conn->_base.address, conn->_base.port); + /* 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, + digest_rcvd_out); } if (started_here) { int as_advertised = 1; tor_assert(has_cert); tor_assert(has_identity); - if (memcmp(digest_rcvd_out, conn->identity_digest, DIGEST_LEN)) { + if (tor_memneq(digest_rcvd_out, conn->identity_digest, DIGEST_LEN)) { /* 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), digest_rcvd_out, DIGEST_LEN); base16_encode(expected, sizeof(expected), conn->identity_digest, DIGEST_LEN); - log_fn(severity, LD_OR, + log_fn(severity, LD_HANDSHAKE, "Tried connecting to router at %s:%d, but identity key was not " "as expected: wanted %s but got %s.", conn->_base.address, conn->_base.port, expected, seen); @@ -1044,9 +1112,6 @@ as_advertised = 0; } if (authdir_mode_tests_reachability(options)) { - /* We initiated this connection to address:port. Drop all routers - * with the same address:port and a different key. - */ dirserv_orconn_tls_done(conn->_base.address, conn->_base.port, digest_rcvd_out, as_advertised); } @@ -1073,8 +1138,8 @@ char digest_rcvd[DIGEST_LEN]; int started_here = connection_or_nonopen_was_started_here(conn); - log_debug(LD_OR,"tls handshake with %s done. verifying.", - safe_str(conn->_base.address)); + log_debug(LD_HANDSHAKE,"tls handshake with %s done. verifying.", + safe_str_client(conn->_base.address)); directory_set_dirty(); @@ -1082,6 +1147,8 @@ digest_rcvd) < 0) return -1; + circuit_build_times_network_is_live(&circ_times); + if (tor_tls_used_v1_handshake(conn->tls)) { conn->link_proto = 1; if (!started_here) { @@ -1117,7 +1184,8 @@ void or_handshake_state_free(or_handshake_state_t *state) { - tor_assert(state); + if (!state) + return; memset(state, 0xBE, sizeof(or_handshake_state_t)); tor_free(state); } @@ -1134,6 +1202,7 @@ control_event_or_conn_status(conn, OR_CONN_EVENT_CONNECTED, 0); if (started_here) { + circuit_build_times_network_is_live(&circ_times); rep_hist_note_connect_succeeded(conn->identity_digest, now); if (entry_guard_register_connect_status(conn->identity_digest, 1, 0, now) < 0) { @@ -1158,10 +1227,10 @@ } } } - if (conn->handshake_state) { - or_handshake_state_free(conn->handshake_state); - conn->handshake_state = NULL; - } + + or_handshake_state_free(conn->handshake_state); + conn->handshake_state = NULL; + connection_start_reading(TO_CONN(conn)); circuit_n_conn_done(conn, 1); /* send the pending creates, if any. */ @@ -1235,6 +1304,7 @@ if (connection_fetch_var_cell_from_buf(conn, &var_cell)) { if (!var_cell) return 0; /* not yet. */ + circuit_build_times_network_is_live(&circ_times); command_process_var_cell(var_cell, conn); var_cell_free(var_cell); } else { @@ -1244,6 +1314,7 @@ available? */ return 0; /* not yet */ + circuit_build_times_network_is_live(&circ_times); connection_fetch_from_buf(buf, CELL_NETWORK_SIZE, TO_CONN(conn)); /* retrieve cell info from buf (create the host-order struct from the @@ -1274,10 +1345,6 @@ cell.payload[0] = (uint8_t) reason; log_debug(LD_OR,"Sending destroy (circID %d).", circ_id); - /* XXXX It's possible that under some circumstances, we want the destroy - * to take precedence over other data waiting on the circuit's cell queue. - */ - connection_or_write_cell_to_buf(&cell, conn); return 0; } @@ -1343,7 +1410,7 @@ /* Their address. */ out = cell.payload + 4; - len = append_address_to_payload(out, &conn->_base.addr); + len = append_address_to_payload(out, &conn->real_addr); if (len<0) return -1; out += len; @@ -1357,9 +1424,8 @@ len = append_address_to_payload(out, &my_addr); if (len < 0) return -1; - out += len; } else { - *out++ = 0; + *out = 0; } connection_or_write_cell_to_buf(&cell, conn); diff -Nru tor-0.2.1.30/src/or/connection_or.h tor-0.2.2.35/src/or/connection_or.h --- tor-0.2.1.30/src/or/connection_or.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/connection_or.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,57 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file connection_or.h + * \brief Header file for connection_or.c. + **/ + +#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_map(void); +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); + +int connection_or_reached_eof(or_connection_t *conn); +int connection_or_process_inbuf(or_connection_t *conn); +int connection_or_flushed_some(or_connection_t *conn); +int connection_or_finished_flushing(or_connection_t *conn); +int connection_or_finished_connecting(or_connection_t *conn); +int connection_or_digest_is_known_relay(const char *id_digest); +void connection_or_update_token_buckets(smartlist_t *conns, + or_options_t *options); + +void connection_or_connect_failed(or_connection_t *conn, + int reason, const char *msg); +or_connection_t *connection_or_connect(const tor_addr_t *addr, uint16_t port, + const char *id_digest); + +int connection_tls_start_handshake(or_connection_t *conn, int receiving); +int connection_tls_continue_handshake(or_connection_t *conn); + +void or_handshake_state_free(or_handshake_state_t *state); +int connection_or_set_state_open(or_connection_t *conn); +void connection_or_write_cell_to_buf(const cell_t *cell, + or_connection_t *conn); +void connection_or_write_var_cell_to_buf(const var_cell_t *cell, + or_connection_t *conn); +int connection_or_send_destroy(circid_t circ_id, or_connection_t *conn, + int reason); +int connection_or_send_netinfo(or_connection_t *conn); +int is_or_protocol_version_known(uint16_t version); + +void cell_pack(packed_cell_t *dest, const cell_t *src); +void var_cell_pack_header(const var_cell_t *cell, char *hdr_out); +var_cell_t *var_cell_new(uint16_t payload_len); +void var_cell_free(var_cell_t *cell); + +#endif + diff -Nru tor-0.2.1.30/src/or/control.c tor-0.2.2.35/src/or/control.c --- tor-0.2.1.30/src/or/control.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/control.c 2011-12-15 16:28:37.000000000 +0000 @@ -11,6 +11,28 @@ #define CONTROL_PRIVATE #include "or.h" +#include "buffers.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "circuituse.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "control.h" +#include "directory.h" +#include "dirserv.h" +#include "dnsserv.h" +#include "geoip.h" +#include "hibernate.h" +#include "main.h" +#include "networkstatus.h" +#include "policies.h" +#include "reasons.h" +#include "router.h" +#include "routerlist.h" +#include "routerparse.h" + +#include "procmon.h" /** Yield true iff s is the state of a control_connection_t that has * finished authentication and is accepting commands. */ @@ -43,7 +65,8 @@ #define EVENT_STREAM_BANDWIDTH_USED 0x0014 #define EVENT_CLIENTS_SEEN 0x0015 #define EVENT_NEWCONSENSUS 0x0016 -#define _EVENT_MAX 0x0016 +#define EVENT_BUILDTIMEOUT_SET 0x0017 +#define _EVENT_MAX 0x0017 /* If _EVENT_MAX ever hits 0x0020, we need to make the mask wider. */ /** Bitfield: The bit 1<<e is set if any open control @@ -54,13 +77,9 @@ **/ typedef uint32_t event_mask_t; -/** An event mask of all the events that controller with the LONG_NAMES option - * set is interested in receiving. */ -static event_mask_t global_event_mask1long = 0; - -/** An event mask of all the events that controller with the SHORT_NAMES option - * set is interested in receiving. */ -static event_mask_t global_event_mask1short = 0; +/** An event mask of all the events that any controller is interested in + * receiving. */ +static event_mask_t global_event_mask = 0; /** True iff we have disabled log messages from being sent to the controller */ static int disable_log_messages = 0; @@ -68,13 +87,7 @@ /** Macro: true if any control connection is interested in events of type * e. */ #define EVENT_IS_INTERESTING(e) \ - ((global_event_mask1long|global_event_mask1short) & (1<<(e))) -/** Macro: true if any control connection with the LONG_NAMES option is - * interested in events of type e. */ -#define EVENT_IS_INTERESTING1L(e) (global_event_mask1long & (1<<(e))) -/** Macro: true if any control connection with the SHORT_NAMES option is - * interested in events of type e. */ -#define EVENT_IS_INTERESTING1S(e) (global_event_mask1short & (1<<(e))) + (global_event_mask & (1<<(e))) /** If we're using cookie-type authentication, how long should our cookies be? */ @@ -85,7 +98,7 @@ static int authentication_cookie_is_set = 0; /** If authentication_cookie_is_set, a secret cookie that we've stored to disk * and which we're using to authenticate controllers. (If the controller can - * read it off disk, it has permission to connect. */ + * read it off disk, it has permission to connect.) */ static char authentication_cookie[AUTHENTICATION_COOKIE_LEN]; /** A sufficiently large size to record the last bootstrap phase string. */ @@ -95,25 +108,13 @@ * of this so we can respond to getinfo status/bootstrap-phase queries. */ static char last_sent_bootstrap_message[BOOTSTRAP_MSG_LEN]; -/** Flag for event_format_t. Indicates that we should use the old - * name format of nickname|hexdigest - */ -#define SHORT_NAMES 1 -/** Flag for event_format_t. Indicates that we should use the new - * name format of $hexdigest[=~]nickname +/** Flag for event_format_t. Indicates that we should use the one standard + format. */ -#define LONG_NAMES 2 -#define ALL_NAMES (SHORT_NAMES|LONG_NAMES) -/** Flag for event_format_t. Indicates that we should use the new event - * format where extra event fields are allowed using a NAME=VAL format. */ -#define EXTENDED_FORMAT 4 -/** Flag for event_format_t. Indicates that we are using the old event format - * where extra fields aren't allowed. */ -#define NONEXTENDED_FORMAT 8 -#define ALL_FORMATS (EXTENDED_FORMAT|NONEXTENDED_FORMAT) +#define ALL_FORMATS 1 /** Bit field of flags to select how to format a controller event. Recognized - * flags are SHORT_NAMES, LONG_NAMES, EXTENDED_FORMAT, NONEXTENDED_FORMAT. */ + * flag is ALL_FORMATS. */ typedef int event_format_t; static void connection_printf_to_buf(control_connection_t *conn, @@ -123,9 +124,6 @@ static void send_control_event(uint16_t event, event_format_t which, const char *format, ...) CHECK_PRINTF(3,4); -static void send_control_event_extended(uint16_t event, event_format_t which, - const char *format, ...) - CHECK_PRINTF(3,4); static int handle_control_setconf(control_connection_t *conn, uint32_t len, char *body); static int handle_control_resetconf(control_connection_t *conn, uint32_t len, @@ -139,8 +137,6 @@ static int handle_control_authenticate(control_connection_t *conn, uint32_t len, const char *body); -static int handle_control_saveconf(control_connection_t *conn, uint32_t len, - const char *body); static int handle_control_signal(control_connection_t *conn, uint32_t len, const char *body); static int handle_control_mapaddress(control_connection_t *conn, uint32_t len, @@ -174,7 +170,7 @@ const char *body); static int write_stream_target_to_buf(edge_connection_t *conn, char *buf, size_t len); -static void orconn_target_get_name(int long_names, char *buf, size_t len, +static void orconn_target_get_name(char *buf, size_t len, or_connection_t *conn); static char *get_cookie_file(void); @@ -214,25 +210,19 @@ { smartlist_t *conns = get_connection_array(); event_mask_t old_mask, new_mask; - old_mask = global_event_mask1short; - old_mask |= global_event_mask1long; + old_mask = global_event_mask; - global_event_mask1short = 0; - global_event_mask1long = 0; + global_event_mask = 0; SMARTLIST_FOREACH(conns, connection_t *, _conn, { if (_conn->type == CONN_TYPE_CONTROL && STATE_IS_OPEN(_conn->state)) { control_connection_t *conn = TO_CONTROL_CONN(_conn); - if (conn->use_long_names) - global_event_mask1long |= conn->event_mask; - else - global_event_mask1short |= conn->event_mask; + global_event_mask |= conn->event_mask; } }); - new_mask = global_event_mask1short; - new_mask |= global_event_mask1long; + new_mask = global_event_mask; /* Handle the aftermath. Set up the log callback to tell us only what * we want to hear...*/ @@ -312,7 +302,7 @@ /** Given a len-character string in data, made of lines * terminated by CRLF, allocate a new string in *out, and copy the * contents of data into *out, adding a period before any period - * that that appears at the start of a line, and adding a period-CRLF line at + * that appears at the start of a line, and adding a period-CRLF line at * the end. Replace all LF characters sequences with CRLF. Return the number * of bytes in *out. */ @@ -346,7 +336,7 @@ } *outp++ = *data++; } - if (outp < *out+2 || memcmp(outp-2, "\r\n", 2)) { + if (outp < *out+2 || fast_memcmp(outp-2, "\r\n", 2)) { *outp++ = '\r'; *outp++ = '\n'; } @@ -491,33 +481,73 @@ } /** Acts like sprintf, but writes its formatted string to the end of - * conn-\>outbuf. The message may be truncated if it is too long, - * but it will always end with a CRLF sequence. - * - * Currently the length of the message is limited to 1024 (including the - * ending CR LF NUL ("\\r\\n\\0"). */ + * conn-\>outbuf. */ static void connection_printf_to_buf(control_connection_t *conn, const char *format, ...) { -#define CONNECTION_PRINTF_TO_BUF_BUFFERSIZE 1024 va_list ap; - char buf[CONNECTION_PRINTF_TO_BUF_BUFFERSIZE]; - int r; - size_t len; + char *buf = NULL; + int len; + va_start(ap,format); - r = tor_vsnprintf(buf, sizeof(buf), format, ap); + len = tor_vasprintf(&buf, format, ap); va_end(ap); - if (r<0) { + + if (len < 0) { log_warn(LD_BUG, "Unable to format string for controller."); return; } - len = strlen(buf); - if (memcmp("\r\n\0", buf+len-2, 3)) { - buf[CONNECTION_PRINTF_TO_BUF_BUFFERSIZE-1] = '\0'; - buf[CONNECTION_PRINTF_TO_BUF_BUFFERSIZE-2] = '\n'; - buf[CONNECTION_PRINTF_TO_BUF_BUFFERSIZE-3] = '\r'; + + connection_write_to_buf(buf, (size_t)len, TO_CONN(conn)); + + tor_free(buf); +} + +/** Write all of the open control ports to ControlPortWriteToFile */ +void +control_ports_write_to_file(void) +{ + smartlist_t *lines; + char *joined = NULL; + or_options_t *options = get_options(); + + if (!options->ControlPortWriteToFile) + return; + + lines = smartlist_create(); + + SMARTLIST_FOREACH_BEGIN(get_connection_array(), const connection_t *, conn) { + char *port_str = NULL; + if (conn->type != CONN_TYPE_CONTROL_LISTENER || conn->marked_for_close) + continue; +#ifdef AF_UNIX + if (conn->socket_family == AF_UNIX) { + tor_asprintf(&port_str, "UNIX_PORT=%s\n", conn->address); + smartlist_add(lines, port_str); + continue; + } +#endif + tor_asprintf(&port_str, "PORT=%s:%d\n", conn->address, conn->port); + smartlist_add(lines, port_str); + } SMARTLIST_FOREACH_END(conn); + + joined = smartlist_join_strings(lines, "", 0, NULL); + + if (write_str_to_file(options->ControlPortWriteToFile, joined, 0) < 0) { + log_warn(LD_CONTROL, "Writing %s failed: %s", + options->ControlPortWriteToFile, strerror(errno)); + } +#ifndef MS_WINDOWS + if (options->ControlPortFileGroupReadable) { + if (chmod(options->ControlPortWriteToFile, 0640)) { + log_warn(LD_FS,"Unable to make %s group-readable.", + options->ControlPortWriteToFile); + } } - connection_write_to_buf(buf, len, TO_CONN(conn)); +#endif + tor_free(joined); + SMARTLIST_FOREACH(lines, char *, cp, tor_free(cp)); + smartlist_free(lines); } /** Send a "DONE" message down the control connection conn. */ @@ -542,28 +572,15 @@ const char *msg) { smartlist_t *conns = get_connection_array(); + (void)which; tor_assert(event >= _EVENT_MIN && event <= _EVENT_MAX); - SMARTLIST_FOREACH(conns, connection_t *, conn, - { + SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) { if (conn->type == CONN_TYPE_CONTROL && !conn->marked_for_close && conn->state == CONTROL_CONN_STATE_OPEN) { control_connection_t *control_conn = TO_CONTROL_CONN(conn); - if (control_conn->use_long_names) { - if (!(which & LONG_NAMES)) - continue; - } else { - if (!(which & SHORT_NAMES)) - continue; - } - if (control_conn->use_extended_events) { - if (!(which & EXTENDED_FORMAT)) - continue; - } else { - if (!(which & NONEXTENDED_FORMAT)) - continue; - } + if (control_conn->event_mask & (1<event. The event's body is created by the printf-style format in - * format, and other arguments as provided. - * - * If extended is true, and the format contains a single '@' character, - * it will be replaced with a space and all text after that character will be - * sent only to controllers that have enabled extended events. - * - * Currently the length of the message is limited to 1024 (including the - * ending \\r\\n\\0). */ + * format, and other arguments as provided. */ static void -send_control_event_impl(uint16_t event, event_format_t which, int extended, - const char *format, va_list ap) +send_control_event_impl(uint16_t event, event_format_t which, + const char *format, va_list ap) { - /* This is just a little longer than the longest allowed log message */ -#define SEND_CONTROL1_EVENT_BUFFERSIZE 10064 - int r; - char buf[SEND_CONTROL1_EVENT_BUFFERSIZE]; - size_t len; - char *cp; + char *buf = NULL; + int len; - r = tor_vsnprintf(buf, sizeof(buf), format, ap); - if (r<0) { + len = tor_vasprintf(&buf, format, ap); + if (len < 0) { log_warn(LD_BUG, "Unable to format event for controller."); return; } - len = strlen(buf); - if (memcmp("\r\n\0", buf+len-2, 3)) { - /* if it is not properly terminated, do it now */ - buf[SEND_CONTROL1_EVENT_BUFFERSIZE-1] = '\0'; - buf[SEND_CONTROL1_EVENT_BUFFERSIZE-2] = '\n'; - buf[SEND_CONTROL1_EVENT_BUFFERSIZE-3] = '\r'; - } + send_control_event_string(event, which|ALL_FORMATS, buf); - if (extended && (cp = strchr(buf, '@'))) { - which &= ~ALL_FORMATS; - *cp = ' '; - send_control_event_string(event, which|EXTENDED_FORMAT, buf); - memcpy(cp, "\r\n\0", 3); - send_control_event_string(event, which|NONEXTENDED_FORMAT, buf); - } else { - send_control_event_string(event, which|ALL_FORMATS, buf); - } + tor_free(buf); } /** Send an event to all v1 controllers that are listening for code * event. The event's body is created by the printf-style format in - * format, and other arguments as provided. - * - * Currently the length of the message is limited to 1024 (including the - * ending \\n\\r\\0. */ + * format, and other arguments as provided. */ static void send_control_event(uint16_t event, event_format_t which, const char *format, ...) { va_list ap; va_start(ap, format); - send_control_event_impl(event, which, 0, format, ap); - va_end(ap); -} - -/** Send an event to all v1 controllers that are listening for code - * event. The event's body is created by the printf-style format in - * format, and other arguments as provided. - * - * If the format contains a single '@' character, it will be replaced with a - * space and all text after that character will be sent only to controllers - * that have enabled extended events. - * - * Currently the length of the message is limited to 1024 (including the - * ending \\n\\r\\0. */ -static void -send_control_event_extended(uint16_t event, event_format_t which, - const char *format, ...) -{ - va_list ap; - va_start(ap, format); - send_control_event_impl(event, which, 1, format, ap); + send_control_event_impl(event, which, format, ap); va_end(ap); } @@ -907,36 +876,37 @@ retval = options_init_from_string(body, CMD_RUN_TOR, NULL, &errstring); - if (retval != SETOPT_OK) { + if (retval != SETOPT_OK) log_warn(LD_CONTROL, "Controller gave us config file that didn't validate: %s", errstring); - switch (retval) { - case SETOPT_ERR_PARSE: - msg = "552 Invalid config file"; - break; - case SETOPT_ERR_TRANSITION: - msg = "553 Transition not allowed"; - break; - case SETOPT_ERR_SETTING: - msg = "553 Unable to set option"; - break; - case SETOPT_ERR_MISC: - default: - msg = "550 Unable to load config"; - break; - case SETOPT_OK: - tor_fragile_assert(); - break; - } + + switch (retval) { + case SETOPT_ERR_PARSE: + msg = "552 Invalid config file"; + break; + case SETOPT_ERR_TRANSITION: + msg = "553 Transition not allowed"; + break; + case SETOPT_ERR_SETTING: + msg = "553 Unable to set option"; + break; + case SETOPT_ERR_MISC: + default: + msg = "550 Unable to load config"; + break; + case SETOPT_OK: + break; + } + if (msg) { if (errstring) connection_printf_to_buf(conn, "%s: %s\r\n", msg, errstring); else connection_printf_to_buf(conn, "%s\r\n", msg); - tor_free(errstring); - return 0; + } else { + send_control_done(conn); } - send_control_done(conn); + tor_free(errstring); return 0; } @@ -948,7 +918,6 @@ { uint16_t event_code; uint32_t event_mask = 0; - unsigned int extended = 0; smartlist_t *events = smartlist_create(); (void) len; @@ -958,7 +927,6 @@ SMARTLIST_FOREACH_BEGIN(events, const char *, ev) { if (!strcasecmp(ev, "EXTENDED")) { - extended = 1; continue; } else if (!strcasecmp(ev, "CIRC")) event_code = EVENT_CIRCUIT_STATUS; @@ -1002,6 +970,8 @@ event_code = EVENT_CLIENTS_SEEN; else if (!strcasecmp(ev, "NEWCONSENSUS")) event_code = EVENT_NEWCONSENSUS; + else if (!strcasecmp(ev, "BUILDTIMEOUT_SET")) + event_code = EVENT_BUILDTIMEOUT_SET; else { connection_printf_to_buf(conn, "552 Unrecognized event \"%s\"\r\n", ev); @@ -1016,8 +986,6 @@ smartlist_free(events); conn->event_mask = event_mask; - if (extended) - conn->use_extended_events = 1; control_update_global_event_mask(); send_control_done(conn); @@ -1128,7 +1096,7 @@ goto err; } bad_cookie = 1; - } else if (memcmp(authentication_cookie, password, password_len)) { + } else if (tor_memneq(authentication_cookie, password, password_len)) { if (!also_password) { log_warn(LD_CONTROL, "Got mismatched authentication cookie"); errstr = "Authentication cookie did not match expected value."; @@ -1178,7 +1146,7 @@ SMARTLIST_FOREACH(sl, char *, expected, { secret_to_key(received,DIGEST_LEN,password,password_len,expected); - if (!memcmp(expected+S2K_SPECIFIER_LEN, received, DIGEST_LEN)) + if (tor_memeq(expected+S2K_SPECIFIER_LEN, received, DIGEST_LEN)) goto ok; }); SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp)); @@ -1281,7 +1249,29 @@ /* Flush the "done" first if the signal might make us shut down. */ if (sig == SIGTERM || sig == SIGINT) connection_handle_write(TO_CONN(conn), 1); - control_signal_act(sig); + + process_signal(sig); + + return 0; +} + +/** Called when we get a TAKEOWNERSHIP command. Mark this connection + * as an owning connection, so that we will exit if the connection + * closes. */ +static int +handle_control_takeownership(control_connection_t *conn, uint32_t len, + const char *body) +{ + (void)len; + (void)body; + + conn->is_owning_control_connection = 1; + + log_info(LD_CONTROL, "Control connection %d has taken ownership of this " + "Tor instance.", + (int)(conn->_base.s)); + + send_control_done(conn); return 0; } @@ -1328,7 +1318,7 @@ smartlist_add(reply, ans); log_warn(LD_CONTROL, "Unable to allocate address for '%s' in MapAddress msg", - safe_str(line)); + safe_str_client(line)); } else { tor_snprintf(ans, anslen, "250-%s=%s", address, to); smartlist_add(reply, ans); @@ -1345,7 +1335,8 @@ "not of expected form 'foo=bar'.", line); smartlist_add(reply, ans); log_info(LD_CONTROL, "Skipping MapAddress '%s': wrong " - "number of items.", safe_str(line)); + "number of items.", + safe_str_client(line)); } SMARTLIST_FOREACH(elts, char *, cp, tor_free(cp)); smartlist_clear(elts); @@ -1374,36 +1365,43 @@ * trivial-to-implement questions. */ static int getinfo_helper_misc(control_connection_t *conn, const char *question, - char **answer) + char **answer, const char **errmsg) { (void) conn; if (!strcmp(question, "version")) { *answer = tor_strdup(get_version()); } else if (!strcmp(question, "config-file")) { *answer = tor_strdup(get_torrc_fname()); + } else if (!strcmp(question, "config-text")) { + *answer = options_dump(get_options(), 1); } else if (!strcmp(question, "info/names")) { *answer = list_getinfo_options(); } else if (!strcmp(question, "events/names")) { *answer = tor_strdup("CIRC STREAM ORCONN BW DEBUG INFO NOTICE WARN ERR " "NEWDESC ADDRMAP AUTHDIR_NEWDESCS DESCCHANGED " "NS STATUS_GENERAL STATUS_CLIENT STATUS_SERVER " - "GUARD STREAM_BW CLIENTS_SEEN NEWCONSENSUS"); + "GUARD STREAM_BW CLIENTS_SEEN NEWCONSENSUS " + "BUILDTIMEOUT_SET"); } else if (!strcmp(question, "features/names")) { *answer = tor_strdup("VERBOSE_NAMES EXTENDED_EVENTS"); } else if (!strcmp(question, "address")) { uint32_t addr; - if (router_pick_published_address(get_options(), &addr) < 0) + if (router_pick_published_address(get_options(), &addr) < 0) { + *errmsg = "Address unknown"; return -1; + } *answer = tor_dup_ip(addr); } else if (!strcmp(question, "dir-usage")) { *answer = directory_dump_request_log(); } else if (!strcmp(question, "fingerprint")) { - routerinfo_t *me = router_get_my_routerinfo(); - if (!me) + crypto_pk_env_t *server_key; + if (!server_mode(get_options())) { + *errmsg = "Not running in server mode"; return -1; + } + server_key = get_server_identity_key(); *answer = tor_malloc(HEX_DIGEST_LEN+1); - base16_encode(*answer, HEX_DIGEST_LEN+1, me->cache_info.identity_digest, - DIGEST_LEN); + crypto_pk_get_fingerprint(server_key, *answer, 0); } return 0; } @@ -1457,12 +1455,71 @@ return tor_strndup(ri_body, ri->signed_descriptor_len); } +/** Implementation helper for GETINFO: answers requests for information about + * which ports are bound. */ +static int +getinfo_helper_listeners(control_connection_t *control_conn, + const char *question, + char **answer, const char **errmsg) +{ + int type; + smartlist_t *res; + + (void)control_conn; + (void)errmsg; + + if (!strcmp(question, "net/listeners/or")) + type = CONN_TYPE_OR_LISTENER; + else if (!strcmp(question, "net/listeners/dir")) + type = CONN_TYPE_DIR_LISTENER; + else if (!strcmp(question, "net/listeners/socks")) + type = CONN_TYPE_AP_LISTENER; + else if (!strcmp(question, "net/listeners/trans")) + type = CONN_TYPE_AP_TRANS_LISTENER; + else if (!strcmp(question, "net/listeners/natd")) + type = CONN_TYPE_AP_NATD_LISTENER; + else if (!strcmp(question, "net/listeners/dns")) + type = CONN_TYPE_AP_DNS_LISTENER; + else if (!strcmp(question, "net/listeners/control")) + type = CONN_TYPE_CONTROL_LISTENER; + else + return 0; /* unknown key */ + + res = smartlist_create(); + SMARTLIST_FOREACH_BEGIN(get_connection_array(), connection_t *, conn) { + char *addr; + struct sockaddr_storage ss; + socklen_t ss_len = sizeof(ss); + + if (conn->type != type || conn->marked_for_close || !SOCKET_OK(conn->s)) + continue; + + if (getsockname(conn->s, (struct sockaddr *)&ss, &ss_len) < 0) { + tor_asprintf(&addr, "%s:%d", conn->address, (int)conn->port); + } else { + char *tmp = tor_sockaddr_to_str((struct sockaddr *)&ss); + addr = esc_for_log(tmp); + tor_free(tmp); + } + if (addr) + smartlist_add(res, addr); + } SMARTLIST_FOREACH_END(conn); + + *answer = smartlist_join_strings(res, " ", 0, NULL); + + SMARTLIST_FOREACH(res, char *, cp, tor_free(cp)); + smartlist_free(res); + return 0; +} + /** Implementation helper for GETINFO: knows the answers for questions about * directory information. */ static int getinfo_helper_dir(control_connection_t *control_conn, - const char *question, char **answer) + const char *question, char **answer, + const char **errmsg) { + (void) control_conn; if (!strcmpstart(question, "desc/id/")) { routerinfo_t *ri = router_get_by_hexdigest(question+strlen("desc/id/")); if (ri) { @@ -1537,6 +1594,7 @@ log_warn(LD_CONTROL, "getinfo '%s': %s", question, msg); smartlist_free(descs); tor_free(url); + *errmsg = msg; return -1; } SMARTLIST_FOREACH(descs, signed_descriptor_t *, sd, @@ -1587,7 +1645,7 @@ } } else if (!strcmp(question, "dir/status-vote/current/consensus")) { /* v3 */ if (directory_caches_dir_info(get_options())) { - const cached_dir_t *consensus = dirserv_get_consensus(); + const cached_dir_t *consensus = dirserv_get_consensus("ns"); if (consensus) *answer = tor_strdup(consensus->dir); } @@ -1598,10 +1656,8 @@ } } else if (!strcmp(question, "network-status")) { /* v1 */ routerlist_t *routerlist = router_get_routerlist(); - int verbose = control_conn->use_long_names; if (!routerlist || !routerlist->routers || - list_server_status_v1(routerlist->routers, answer, - verbose ? 2 : 1) < 0) { + list_server_status_v1(routerlist->routers, answer, 1) < 0) { return -1; } } else if (!strcmpstart(question, "extra-info/digest/")) { @@ -1635,8 +1691,10 @@ * current states of things we send events about. */ static int getinfo_helper_events(control_connection_t *control_conn, - const char *question, char **answer) + const char *question, char **answer, + const char **errmsg) { + (void) control_conn; if (!strcmp(question, "circuit-status")) { circuit_t *circ; smartlist_t *status = smartlist_create(); @@ -1647,10 +1705,9 @@ const char *purpose; if (! CIRCUIT_IS_ORIGIN(circ) || circ->marked_for_close) continue; - if (control_conn->use_long_names) - path = circuit_list_path_for_controller(TO_ORIGIN_CIRCUIT(circ)); - else - path = circuit_list_path(TO_ORIGIN_CIRCUIT(circ),0); + + path = circuit_list_path_for_controller(TO_ORIGIN_CIRCUIT(circ)); + if (circ->state == CIRCUIT_STATE_OPEN) state = "BUILT"; else if (strlen(path)) @@ -1728,8 +1785,7 @@ } else if (!strcmp(question, "orconn-status")) { smartlist_t *conns = get_connection_array(); smartlist_t *status = smartlist_create(); - SMARTLIST_FOREACH(conns, connection_t *, base_conn, - { + SMARTLIST_FOREACH_BEGIN(conns, connection_t *, base_conn) { const char *state; char *s; char name[128]; @@ -1744,29 +1800,19 @@ state = "LAUNCHED"; else state = "NEW"; - orconn_target_get_name(control_conn->use_long_names, name, sizeof(name), - conn); + orconn_target_get_name(name, sizeof(name), conn); slen = strlen(name)+strlen(state)+2; s = tor_malloc(slen+1); tor_snprintf(s, slen, "%s %s", name, state); smartlist_add(status, s); - }); + } SMARTLIST_FOREACH_END(base_conn); *answer = smartlist_join_strings(status, "\r\n", 0, NULL); SMARTLIST_FOREACH(status, char *, cp, tor_free(cp)); smartlist_free(status); - } else if (!strcmpstart(question, "addr-mappings/") || - !strcmpstart(question, "address-mappings/")) { + } else if (!strcmpstart(question, "address-mappings/")) { time_t min_e, max_e; smartlist_t *mappings; - int want_expiry = !strcmpstart(question, "address-mappings/"); - if (!strcmpstart(question, "addr-mappings/")) { - /* XXXX022 This has been deprecated since 0.2.0.3-alpha, and has - generated a warning since 0.2.1.10-alpha; remove late in 0.2.2.x. */ - log_warn(LD_CONTROL, "Controller used obsolete addr-mappings/ GETINFO " - "key; use address-mappings/ instead."); - } - question += strlen(want_expiry ? "address-mappings/" - : "addr-mappings/"); + question += strlen("address-mappings/"); if (!strcmp(question, "all")) { min_e = 0; max_e = TIME_MAX; } else if (!strcmp(question, "cache")) { @@ -1779,7 +1825,7 @@ return 0; } mappings = smartlist_create(); - addressmap_get_mappings(mappings, min_e, max_e, want_expiry); + addressmap_get_mappings(mappings, min_e, max_e, 1); *answer = smartlist_join_strings(mappings, "\r\n", 0, NULL); SMARTLIST_FOREACH(mappings, char *, cp, tor_free(cp)); smartlist_free(mappings); @@ -1787,7 +1833,7 @@ /* Note that status/ is not a catch-all for events; there's only supposed * to be a status GETINFO if there's a corresponding STATUS event. */ if (!strcmp(question, "status/circuit-established")) { - *answer = tor_strdup(has_completed_circuit ? "1" : "0"); + *answer = tor_strdup(can_complete_circuit ? "1" : "0"); } else if (!strcmp(question, "status/enough-dir-info")) { *answer = tor_strdup(router_have_minimum_dir_info() ? "1" : "0"); } else if (!strcmp(question, "status/good-server-descriptor") || @@ -1846,21 +1892,12 @@ "information", question); } } else if (!strcmp(question, "status/clients-seen")) { - char geoip_start[ISO_TIME_LEN+1]; - size_t answer_len; - char *geoip_summary = extrainfo_get_client_geoip_summary(time(NULL)); - - if (!geoip_summary) + char *bridge_stats = geoip_get_bridge_stats_controller(time(NULL)); + if (!bridge_stats) { + *errmsg = "No bridge-client stats available"; return -1; - - answer_len = strlen("TimeStarted=\"\" CountrySummary=") + - ISO_TIME_LEN + strlen(geoip_summary) + 1; - *answer = tor_malloc(answer_len); - format_iso_time(geoip_start, geoip_get_history_start()); - tor_snprintf(*answer, answer_len, - "TimeStarted=\"%s\" CountrySummary=%s", - geoip_start, geoip_summary); - tor_free(geoip_summary); + } + *answer = bridge_stats; } else { return 0; } @@ -1870,11 +1907,14 @@ /** Callback function for GETINFO: on a given control connection, try to * answer the question q and store the newly-allocated answer in - * *a. If there's no answer, or an error occurs, just don't set - * a. Return 0. + * *a. If an internal error occurs, return -1 and optionally set + * *error_out to point to an error message to be delivered to the + * controller. On success, _or if the key is not recognized_, return 0. Do not + * set a if the key is not recognized. */ typedef int (*getinfo_helper_t)(control_connection_t *, - const char *q, char **a); + const char *q, char **a, + const char **error_out); /** A single item for the GETINFO question-to-answer-function table. */ typedef struct getinfo_item_t { @@ -1894,6 +1934,8 @@ static const getinfo_item_t getinfo_items[] = { ITEM("version", misc, "The current version of Tor."), ITEM("config-file", misc, "Current location of the \"torrc\" file."), + ITEM("config-text", misc, + "Return the string that would be written by a saveconf command."), ITEM("accounting/bytes", accounting, "Number of bytes read/written so far in the accounting interval."), ITEM("accounting/bytes-left", accounting, @@ -1924,6 +1966,7 @@ "All non-expired, non-superseded router descriptors."), ITEM("desc/all-recent-extrainfo-hack", dir, NULL), /* Hack. */ PREFIX("extra-info/digest/", dir, "Extra-info documents by digest."), + PREFIX("net/listeners/", listeners, "Bound addresses by type"), ITEM("ns/all", networkstatus, "Brief summary of router status (v2 directory format)"), PREFIX("ns/id/", networkstatus, @@ -1933,7 +1976,6 @@ PREFIX("ns/purpose/", networkstatus, "Brief summary of router status by purpose (v2 directory format)."), - PREFIX("unregistered-servers-", dirserv_unregistered, NULL), ITEM("network-status", dir, "Brief summary of router status (v1 directory format)"), ITEM("circuit-status", events, "List of current circuits originating here."), @@ -1945,14 +1987,6 @@ DOC("address-mappings/config", "Current address mappings from configuration."), DOC("address-mappings/control", "Current address mappings from controller."), - PREFIX("addr-mappings/", events, NULL), - DOC("addr-mappings/all", "Current address mappings without expiry times."), - DOC("addr-mappings/cache", - "Current cached DNS replies without expiry times."), - DOC("addr-mappings/config", - "Current address mappings from configuration without expiry times."), - DOC("addr-mappings/control", - "Current address mappings from controller without expiry times."), PREFIX("status/", events, NULL), DOC("status/circuit-established", "Whether we think client functionality is working."), @@ -1977,8 +2011,8 @@ "v2 networkstatus docs as retrieved from a DirPort."), ITEM("dir/status-vote/current/consensus", dir, "v3 Networkstatus consensus as retrieved from a DirPort."), - PREFIX("exit-policy/default", policies, - "The default value appended to the configured exit policy."), + ITEM("exit-policy/default", policies, + "The default value appended to the configured exit policy."), PREFIX("ip-to-country/", geoip, "Perform a GEOIP lookup"), { NULL, NULL, NULL, 0 } }; @@ -1988,18 +2022,18 @@ list_getinfo_options(void) { int i; - char buf[300]; + char *buf=NULL; smartlist_t *lines = smartlist_create(); char *ans; for (i = 0; getinfo_items[i].varname; ++i) { if (!getinfo_items[i].desc) continue; - tor_snprintf(buf, sizeof(buf), "%s%s -- %s\n", + tor_asprintf(&buf, "%s%s -- %s\n", getinfo_items[i].varname, getinfo_items[i].is_prefix ? "*" : "", getinfo_items[i].desc); - smartlist_add(lines, tor_strdup(buf)); + smartlist_add(lines, buf); } smartlist_sort_strings(lines); @@ -2016,7 +2050,8 @@ * internal error. */ static int handle_getinfo_helper(control_connection_t *control_conn, - const char *question, char **answer) + const char *question, char **answer, + const char **err_out) { int i; *answer = NULL; /* unrecognized key by default */ @@ -2029,7 +2064,7 @@ match = !strcmp(question, getinfo_items[i].varname); if (match) { tor_assert(getinfo_items[i].fn); - return getinfo_items[i].fn(control_conn, question, answer); + return getinfo_items[i].fn(control_conn, question, answer, err_out); } } @@ -2051,10 +2086,12 @@ smartlist_split_string(questions, body, " ", SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - SMARTLIST_FOREACH(questions, const char *, q, - { - if (handle_getinfo_helper(conn, q, &ans) < 0) { - connection_write_str_to_buf("551 Internal error\r\n", conn); + SMARTLIST_FOREACH_BEGIN(questions, const char *, q) { + const char *errmsg = NULL; + if (handle_getinfo_helper(conn, q, &ans, &errmsg) < 0) { + if (!errmsg) + errmsg = "Internal error"; + connection_printf_to_buf(conn, "551 %s\r\n", errmsg); goto done; } if (!ans) { @@ -2063,7 +2100,7 @@ smartlist_add(answers, tor_strdup(q)); smartlist_add(answers, ans); } - }); + } SMARTLIST_FOREACH_END(q); if (smartlist_len(unrecognized)) { for (i=0; i < smartlist_len(unrecognized)-1; ++i) connection_printf_to_buf(conn, @@ -2108,12 +2145,12 @@ static uint8_t circuit_purpose_from_string(const char *string) { - if (!strcmpstart(string, "purpose=")) + if (!strcasecmpstart(string, "purpose=")) string += strlen("purpose="); - if (!strcmp(string, "general")) + if (!strcasecmp(string, "general")) return CIRCUIT_PURPOSE_C_GENERAL; - else if (!strcmp(string, "controller")) + else if (!strcasecmp(string, "controller")) return CIRCUIT_PURPOSE_CONTROLLER; else return CIRCUIT_PURPOSE_UNKNOWN; @@ -2145,6 +2182,31 @@ return NULL; } +/** Helper. Return the first element of sl at index start_at or + * higher that starts with prefix, case-insensitive. Return NULL if no + * such element exists. */ +static const char * +find_element_starting_with(smartlist_t *sl, int start_at, const char *prefix) +{ + int i; + for (i = start_at; i < smartlist_len(sl); ++i) { + const char *elt = smartlist_get(sl, i); + if (!strcasecmpstart(elt, prefix)) + return elt; + } + return NULL; +} + +/** Helper. Return true iff s is an argument that we should treat as a + * key-value pair. */ +static int +is_keyval_pair(const char *s) +{ + /* An argument is a key-value pair if it has an =, and it isn't of the form + * $fingeprint=name */ + return strchr(s, '=') && s[0] != '$'; +} + /** Called when we get an EXTENDCIRCUIT message. Try to extend the listed * circuit, and report success or failure. */ static int @@ -2160,33 +2222,57 @@ router_nicknames = smartlist_create(); - args = getargs_helper("EXTENDCIRCUIT", conn, body, 2, -1); + args = getargs_helper("EXTENDCIRCUIT", conn, body, 1, -1); if (!args) goto done; zero_circ = !strcmp("0", (char*)smartlist_get(args,0)); - if (!zero_circ && !(circ = get_circ(smartlist_get(args,0)))) { - connection_printf_to_buf(conn, "552 Unknown circuit \"%s\"\r\n", - (char*)smartlist_get(args, 0)); - } - smartlist_split_string(router_nicknames, smartlist_get(args,1), ",", 0, 0); - if (zero_circ && smartlist_len(args)>2) { - char *purp = smartlist_get(args,2); - intended_purpose = circuit_purpose_from_string(purp); - if (intended_purpose == CIRCUIT_PURPOSE_UNKNOWN) { - connection_printf_to_buf(conn, "552 Unknown purpose \"%s\"\r\n", purp); + if (zero_circ) { + const char *purp = find_element_starting_with(args, 1, "PURPOSE="); + + if (purp) { + intended_purpose = circuit_purpose_from_string(purp); + if (intended_purpose == CIRCUIT_PURPOSE_UNKNOWN) { + connection_printf_to_buf(conn, "552 Unknown purpose \"%s\"\r\n", purp); + SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); + smartlist_free(args); + goto done; + } + } + + if ((smartlist_len(args) == 1) || + (smartlist_len(args) >= 2 && is_keyval_pair(smartlist_get(args, 1)))) { + // "EXTENDCIRCUIT 0" || EXTENDCIRCUIT 0 foo=bar" + circ = circuit_launch_by_router(intended_purpose, NULL, + CIRCLAUNCH_NEED_CAPACITY); + if (!circ) { + connection_write_str_to_buf("551 Couldn't start circuit\r\n", conn); + } else { + connection_printf_to_buf(conn, "250 EXTENDED %lu\r\n", + (unsigned long)circ->global_identifier); + } SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); smartlist_free(args); goto done; } + // "EXTENDCIRCUIT 0 router1,router2" || + // "EXTENDCIRCUIT 0 router1,router2 PURPOSE=foo" } - SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); - smartlist_free(args); - if (!zero_circ && !circ) { + + if (!zero_circ && !(circ = get_circ(smartlist_get(args,0)))) { + connection_printf_to_buf(conn, "552 Unknown circuit \"%s\"\r\n", + (char*)smartlist_get(args, 0)); + SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); + smartlist_free(args); goto done; } + smartlist_split_string(router_nicknames, smartlist_get(args,1), ",", 0, 0); + + SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); + smartlist_free(args); + routers = smartlist_create(); SMARTLIST_FOREACH(router_nicknames, const char *, n, { @@ -2244,8 +2330,7 @@ done: SMARTLIST_FOREACH(router_nicknames, char *, n, tor_free(n)); smartlist_free(router_nicknames); - if (routers) - smartlist_free(routers); + smartlist_free(routers); return 0; } @@ -2271,7 +2356,7 @@ } { - char *purp = smartlist_get(args,1); + const char *purp = find_element_starting_with(args,1,"PURPOSE="); new_purpose = circuit_purpose_from_string(purp); if (new_purpose == CIRCUIT_PURPOSE_UNKNOWN) { connection_printf_to_buf(conn, "552 Unknown purpose \"%s\"\r\n", purp); @@ -2282,7 +2367,7 @@ circ->_base.purpose = new_purpose; connection_write_str_to_buf("250 OK\r\n", conn); -done: + done: if (args) { SMARTLIST_FOREACH(args, char *, cp, tor_free(cp)); smartlist_free(args); @@ -2316,9 +2401,9 @@ } else if (!zero_circ && !(circ = get_circ(smartlist_get(args, 1)))) { connection_printf_to_buf(conn, "552 Unknown circuit \"%s\"\r\n", (char*)smartlist_get(args, 1)); - } else if (circ && smartlist_len(args) > 2) { - char *hopstring = smartlist_get(args, 2); - if (!strcasecmpstart(hopstring, "HOP=")) { + } else if (circ) { + const char *hopstring = find_element_starting_with(args,2,"HOP="); + if (hopstring) { hopstring += strlen("HOP="); hop = (int) tor_parse_ulong(hopstring, 10, 0, INT_MAX, &hop_line_ok, NULL); @@ -2365,7 +2450,7 @@ char* exit_digest; if (circ->build_state && circ->build_state->chosen_exit && - circ->build_state->chosen_exit->identity_digest) { + !tor_digest_is_zero(circ->build_state->chosen_exit->identity_digest)) { exit_digest = circ->build_state->chosen_exit->identity_digest; r = router_get_by_digest(exit_digest); } @@ -2426,9 +2511,9 @@ } } else if (!strcasecmpstart(option, "cache=")) { option += strlen("cache="); - if (!strcmp(option, "no")) + if (!strcasecmp(option, "no")) cache = 0; - else if (!strcmp(option, "yes")) + else if (!strcasecmp(option, "yes")) cache = 1; else { connection_printf_to_buf(conn, "552 Unknown cache request \"%s\"\r\n", @@ -2610,17 +2695,17 @@ args = smartlist_create(); smartlist_split_string(args, body, " ", SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); - if (smartlist_len(args) && - !strcasecmp(smartlist_get(args, 0), "mode=reverse")) { - char *cp = smartlist_get(args, 0); - smartlist_del_keeporder(args, 0); - tor_free(cp); - is_reverse = 1; + { + const char *modearg = find_element_starting_with(args, 0, "mode="); + if (modearg && !strcasecmp(modearg, "mode=reverse")) + is_reverse = 1; } failed = smartlist_create(); SMARTLIST_FOREACH(args, const char *, arg, { - if (dnsserv_launch_request(arg, is_reverse)<0) - smartlist_add(failed, (char*)arg); + if (!is_keyval_pair(arg)) { + if (dnsserv_launch_request(arg, is_reverse)<0) + smartlist_add(failed, (char*)arg); + } }); send_control_done(conn); @@ -2710,7 +2795,6 @@ const char *body) { smartlist_t *args; - int verbose_names = 0, extended_events = 0; int bad = 0; (void) len; /* body is nul-terminated; it's safe to ignore the length */ args = smartlist_create(); @@ -2718,9 +2802,9 @@ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); SMARTLIST_FOREACH(args, const char *, arg, { if (!strcasecmp(arg, "VERBOSE_NAMES")) - verbose_names = 1; + ; else if (!strcasecmp(arg, "EXTENDED_EVENTS")) - extended_events = 1; + ; else { connection_printf_to_buf(conn, "552 Unrecognized feature \"%s\"\r\n", arg); @@ -2730,12 +2814,6 @@ }); if (!bad) { - if (verbose_names) { - conn->use_long_names = 1; - control_update_global_event_mask(); - } - if (extended_events) - conn->use_extended_events = 1; send_control_done(conn); } @@ -2765,6 +2843,43 @@ return 0; } +/** Shut down this Tor instance in the same way that SIGINT would, but + * with a log message appropriate for the loss of an owning controller. */ +static void +lost_owning_controller(const char *owner_type, const char *loss_manner) +{ + int shutdown_slowly = server_mode(get_options()); + + log_notice(LD_CONTROL, "Owning controller %s has %s -- %s.", + owner_type, loss_manner, + shutdown_slowly ? "shutting down" : "exiting now"); + + /* XXXX Perhaps this chunk of code should be a separate function, + * called here and by process_signal(SIGINT). */ + + if (!shutdown_slowly) { + tor_cleanup(); + exit(0); + } + /* XXXX This will close all listening sockets except control-port + * listeners. Perhaps we should close those too. */ + hibernate_begin_shutdown(); +} + +/** Called when conn is being freed. */ +void +connection_control_closed(control_connection_t *conn) +{ + tor_assert(conn); + + conn->event_mask = 0; + control_update_global_event_mask(); + + if (conn->is_owning_control_connection) { + lost_owning_controller("connection", "closed"); + } +} + /** Return true iff cmd is allowable (or at least forgivable) at this * stage of the protocol. */ static int @@ -2862,13 +2977,13 @@ break; /* XXXX this code duplication is kind of dumb. */ if (last_idx+3 == conn->incoming_cmd_cur_len && - !memcmp(conn->incoming_cmd + last_idx, ".\r\n", 3)) { + tor_memeq(conn->incoming_cmd + last_idx, ".\r\n", 3)) { /* Just appended ".\r\n"; we're done. Remove it. */ conn->incoming_cmd[last_idx] = '\0'; conn->incoming_cmd_cur_len -= 3; break; } else if (last_idx+2 == conn->incoming_cmd_cur_len && - !memcmp(conn->incoming_cmd + last_idx, ".\n", 2)) { + tor_memeq(conn->incoming_cmd + last_idx, ".\n", 2)) { /* Just appended ".\n"; we're done. Remove it. */ conn->incoming_cmd[last_idx] = '\0'; conn->incoming_cmd_cur_len -= 2; @@ -2885,9 +3000,10 @@ && !TOR_ISSPACE(conn->incoming_cmd[cmd_len])) ++cmd_len; - data_len -= cmd_len; conn->incoming_cmd[cmd_len]='\0'; args = conn->incoming_cmd+cmd_len+1; + tor_assert(data_len>(size_t)cmd_len); + data_len -= (cmd_len+1); /* skip the command and NUL we added after it */ while (*args == ' ' || *args == '\t') { ++args; --data_len; @@ -2919,6 +3035,9 @@ return 0; } + /* XXXX Why is this not implemented as a table like the GETINFO + * items are? Even handling the plus signs at the beginnings of + * commands wouldn't be very hard with proper macros. */ cmd_data_len = (uint32_t)data_len; if (!strcasecmp(conn->incoming_cmd, "SETCONF")) { if (handle_control_setconf(conn, cmd_data_len, args)) @@ -2944,6 +3063,9 @@ } else if (!strcasecmp(conn->incoming_cmd, "SIGNAL")) { if (handle_control_signal(conn, cmd_data_len, args)) return -1; + } else if (!strcasecmp(conn->incoming_cmd, "TAKEOWNERSHIP")) { + if (handle_control_takeownership(conn, cmd_data_len, args)) + return -1; } else if (!strcasecmp(conn->incoming_cmd, "MAPADDRESS")) { if (handle_control_mapaddress(conn, cmd_data_len, args)) return -1; @@ -2999,7 +3121,6 @@ { const char *status; char extended_buf[96]; - int providing_reason=0; if (!EVENT_IS_INTERESTING(EVENT_CIRCUIT_STATUS)) return 0; tor_assert(circ); @@ -3023,7 +3144,6 @@ const char *reason_str = circuit_end_reason_to_control_string(reason_code); char *reason = NULL; size_t n=strlen(extended_buf); - providing_reason=1; if (!reason_str) { reason = tor_malloc(16); tor_snprintf(reason, 16, "UNKNOWN_%d", reason_code); @@ -3039,20 +3159,11 @@ tor_free(reason); } - if (EVENT_IS_INTERESTING1S(EVENT_CIRCUIT_STATUS)) { - char *path = circuit_list_path(circ,0); - const char *sp = strlen(path) ? " " : ""; - send_control_event_extended(EVENT_CIRCUIT_STATUS, SHORT_NAMES, - "650 CIRC %lu %s%s%s@%s\r\n", - (unsigned long)circ->global_identifier, - status, sp, path, extended_buf); - tor_free(path); - } - if (EVENT_IS_INTERESTING1L(EVENT_CIRCUIT_STATUS)) { + { char *vpath = circuit_list_path_for_controller(circ); const char *sp = strlen(vpath) ? " " : ""; - send_control_event_extended(EVENT_CIRCUIT_STATUS, LONG_NAMES, - "650 CIRC %lu %s%s%s@%s\r\n", + send_control_event(EVENT_CIRCUIT_STATUS, ALL_FORMATS, + "650 CIRC %lu %s%s%s %s\r\n", (unsigned long)circ->global_identifier, status, sp, vpath, extended_buf); tor_free(vpath); @@ -3131,26 +3242,26 @@ char *r = NULL; if (!reason_str) { r = tor_malloc(16); - tor_snprintf(r, 16, "UNKNOWN_%d", reason_code); + tor_snprintf(r, 16, " UNKNOWN_%d", reason_code); reason_str = r; } if (reason_code & END_STREAM_REASON_FLAG_REMOTE) tor_snprintf(reason_buf, sizeof(reason_buf), - "REASON=END REMOTE_REASON=%s", reason_str); + " REASON=END REMOTE_REASON=%s", reason_str); else tor_snprintf(reason_buf, sizeof(reason_buf), - "REASON=%s", reason_str); + " REASON=%s", reason_str); tor_free(r); } else if (reason_code && tp == STREAM_EVENT_REMAP) { switch (reason_code) { case REMAP_STREAM_SOURCE_CACHE: - strlcpy(reason_buf, "SOURCE=CACHE", sizeof(reason_buf)); + strlcpy(reason_buf, " SOURCE=CACHE", sizeof(reason_buf)); break; case REMAP_STREAM_SOURCE_EXIT: - strlcpy(reason_buf, "SOURCE=EXIT", sizeof(reason_buf)); + strlcpy(reason_buf, " SOURCE=EXIT", sizeof(reason_buf)); break; default: - tor_snprintf(reason_buf, sizeof(reason_buf), "REASON=UNKNOWN_%d", + tor_snprintf(reason_buf, sizeof(reason_buf), " REASON=UNKNOWN_%d", reason_code); /* XXX do we want SOURCE=UNKNOWN_%d above instead? -RD */ break; @@ -3158,8 +3269,7 @@ } if (tp == STREAM_EVENT_NEW) { - tor_snprintf(addrport_buf,sizeof(addrport_buf), "%sSOURCE_ADDR=%s:%d", - strlen(reason_buf) ? " " : "", + tor_snprintf(addrport_buf,sizeof(addrport_buf), " SOURCE_ADDR=%s:%d", TO_CONN(conn)->address, TO_CONN(conn)->port ); } else { addrport_buf[0] = '\0'; @@ -3188,8 +3298,8 @@ circ = circuit_get_by_edge_conn(conn); if (circ && CIRCUIT_IS_ORIGIN(circ)) origin_circ = TO_ORIGIN_CIRCUIT(circ); - send_control_event_extended(EVENT_STREAM_STATUS, ALL_NAMES, - "650 STREAM "U64_FORMAT" %s %lu %s@%s%s%s\r\n", + send_control_event(EVENT_STREAM_STATUS, ALL_FORMATS, + "650 STREAM "U64_FORMAT" %s %lu %s%s%s%s\r\n", U64_PRINTF_ARG(conn->_base.global_identifier), status, origin_circ? (unsigned long)origin_circ->global_identifier : 0ul, @@ -3202,30 +3312,21 @@ /** Figure out the best name for the target router of an OR connection * conn, and write it into the len-character buffer - * name. Use verbose names if long_names is set. */ + * name. */ static void -orconn_target_get_name(int long_names, - char *name, size_t len, or_connection_t *conn) +orconn_target_get_name(char *name, size_t len, or_connection_t *conn) { - if (! long_names) { - if (conn->nickname) - strlcpy(name, conn->nickname, len); - else - tor_snprintf(name, len, "%s:%d", - conn->_base.address, conn->_base.port); + routerinfo_t *ri = router_get_by_digest(conn->identity_digest); + if (ri) { + tor_assert(len > MAX_VERBOSE_NICKNAME_LEN); + router_get_verbose_nickname(name, ri); + } else if (! tor_digest_is_zero(conn->identity_digest)) { + name[0] = '$'; + base16_encode(name+1, len-1, conn->identity_digest, + DIGEST_LEN); } else { - routerinfo_t *ri = router_get_by_digest(conn->identity_digest); - if (ri) { - tor_assert(len > MAX_VERBOSE_NICKNAME_LEN); - router_get_verbose_nickname(name, ri); - } else if (! tor_digest_is_zero(conn->identity_digest)) { - name[0] = '$'; - base16_encode(name+1, len-1, conn->identity_digest, - DIGEST_LEN); - } else { - tor_snprintf(name, len, "%s:%d", - conn->_base.address, conn->_base.port); - } + tor_snprintf(name, len, "%s:%d", + conn->_base.address, conn->_base.port); } } @@ -3264,24 +3365,13 @@ reason ? " " : "", ncircs); } - if (EVENT_IS_INTERESTING1S(EVENT_OR_CONN_STATUS)) { - orconn_target_get_name(0, name, sizeof(name), conn); - send_control_event_extended(EVENT_OR_CONN_STATUS, SHORT_NAMES, - "650 ORCONN %s %s@%s%s%s\r\n", - name, status, - reason ? "REASON=" : "", - orconn_end_reason_to_control_string(reason), - ncircs_buf); - } - if (EVENT_IS_INTERESTING1L(EVENT_OR_CONN_STATUS)) { - orconn_target_get_name(1, name, sizeof(name), conn); - send_control_event_extended(EVENT_OR_CONN_STATUS, LONG_NAMES, - "650 ORCONN %s %s@%s%s%s\r\n", - name, status, - reason ? "REASON=" : "", - orconn_end_reason_to_control_string(reason), - ncircs_buf); - } + orconn_target_get_name(name, sizeof(name), conn); + send_control_event(EVENT_OR_CONN_STATUS, ALL_FORMATS, + "650 ORCONN %s %s %s%s%s\r\n", + name, status, + reason ? "REASON=" : "", + orconn_end_reason_to_control_string(reason), + ncircs_buf); return 0; } @@ -3296,7 +3386,7 @@ if (!edge_conn->n_read && !edge_conn->n_written) return 0; - send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_NAMES, + send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_FORMATS, "650 STREAM_BW "U64_FORMAT" %lu %lu\r\n", U64_PRINTF_ARG(edge_conn->_base.global_identifier), (unsigned long)edge_conn->n_read, @@ -3325,7 +3415,7 @@ if (!edge_conn->n_read && !edge_conn->n_written) continue; - send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_NAMES, + send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_FORMATS, "650 STREAM_BW "U64_FORMAT" %lu %lu\r\n", U64_PRINTF_ARG(edge_conn->_base.global_identifier), (unsigned long)edge_conn->n_read, @@ -3345,7 +3435,7 @@ control_event_bandwidth_used(uint32_t n_read, uint32_t n_written) { if (EVENT_IS_INTERESTING(EVENT_BANDWIDTH_USED)) { - send_control_event(EVENT_BANDWIDTH_USED, ALL_NAMES, + send_control_event(EVENT_BANDWIDTH_USED, ALL_FORMATS, "650 BW %lu %lu\r\n", (unsigned long)n_read, (unsigned long)n_written); @@ -3390,7 +3480,7 @@ severity <= LOG_NOTICE) { char *esc = esc_for_log(msg); ++disable_log_messages; - control_event_general_status(severity, "BUG REASON=\"%s\"", esc); + control_event_general_status(severity, "BUG REASON=%s", esc); --disable_log_messages; tor_free(esc); } @@ -3415,7 +3505,7 @@ default: s = "UnknownLogSeverity"; break; } ++disable_log_messages; - send_control_event(event, ALL_NAMES, "650 %s %s\r\n", s, b?b:msg); + send_control_event(event, ALL_FORMATS, "650 %s %s\r\n", s, b?b:msg); --disable_log_messages; tor_free(b); } @@ -3428,31 +3518,12 @@ int control_event_descriptors_changed(smartlist_t *routers) { - size_t len; char *msg; - smartlist_t *identities = NULL; - char buf[HEX_DIGEST_LEN+1]; if (!EVENT_IS_INTERESTING(EVENT_NEW_DESC)) return 0; - if (EVENT_IS_INTERESTING1S(EVENT_NEW_DESC)) { - identities = smartlist_create(); - SMARTLIST_FOREACH(routers, routerinfo_t *, r, - { - base16_encode(buf,sizeof(buf),r->cache_info.identity_digest,DIGEST_LEN); - smartlist_add(identities, tor_strdup(buf)); - }); - } - if (EVENT_IS_INTERESTING1S(EVENT_NEW_DESC)) { - char *ids = smartlist_join_strings(identities, " ", 0, &len); - size_t ids_len = strlen(ids)+32; - msg = tor_malloc(ids_len); - tor_snprintf(msg, ids_len, "650 NEWDESC %s\r\n", ids); - send_control_event_string(EVENT_NEW_DESC, SHORT_NAMES|ALL_FORMATS, msg); - tor_free(ids); - tor_free(msg); - } - if (EVENT_IS_INTERESTING1L(EVENT_NEW_DESC)) { + + { smartlist_t *names = smartlist_create(); char *ids; size_t names_len; @@ -3465,16 +3536,12 @@ names_len = strlen(ids)+32; msg = tor_malloc(names_len); tor_snprintf(msg, names_len, "650 NEWDESC %s\r\n", ids); - send_control_event_string(EVENT_NEW_DESC, LONG_NAMES|ALL_FORMATS, msg); + send_control_event_string(EVENT_NEW_DESC, ALL_FORMATS, msg); tor_free(ids); tor_free(msg); SMARTLIST_FOREACH(names, char *, cp, tor_free(cp)); smartlist_free(names); } - if (identities) { - SMARTLIST_FOREACH(identities, char *, cp, tor_free(cp)); - smartlist_free(identities); - } return 0; } @@ -3491,17 +3558,17 @@ return 0; if (expires < 3 || expires == TIME_MAX) - send_control_event_extended(EVENT_ADDRMAP, ALL_NAMES, - "650 ADDRMAP %s %s NEVER@%s\r\n", from, to, + send_control_event(EVENT_ADDRMAP, ALL_FORMATS, + "650 ADDRMAP %s %s NEVER %s\r\n", from, to, error?error:""); else { char buf[ISO_TIME_LEN+1]; char buf2[ISO_TIME_LEN+1]; format_local_iso_time(buf,expires); format_iso_time(buf2,expires); - send_control_event_extended(EVENT_ADDRMAP, ALL_NAMES, + send_control_event(EVENT_ADDRMAP, ALL_FORMATS, "650 ADDRMAP %s %s \"%s\"" - "@%s%sEXPIRES=\"%s\"\r\n", + " %s%sEXPIRES=\"%s\"\r\n", from, to, buf, error?error:"", error?" ":"", buf2); @@ -3541,9 +3608,9 @@ buf = tor_malloc(totallen); strlcpy(buf, firstline, totallen); strlcpy(buf+strlen(firstline), esc, totallen); - send_control_event_string(EVENT_AUTHDIR_NEWDESCS, ALL_NAMES|ALL_FORMATS, + send_control_event_string(EVENT_AUTHDIR_NEWDESCS, ALL_FORMATS, buf); - send_control_event_string(EVENT_AUTHDIR_NEWDESCS, ALL_NAMES|ALL_FORMATS, + send_control_event_string(EVENT_AUTHDIR_NEWDESCS, ALL_FORMATS, "650 OK\r\n"); tor_free(esc); tor_free(buf); @@ -3581,8 +3648,8 @@ SMARTLIST_FOREACH(strs, char *, cp, tor_free(cp)); smartlist_free(strs); tor_free(s); - send_control_event_string(event, ALL_NAMES|ALL_FORMATS, esc); - send_control_event_string(event, ALL_NAMES|ALL_FORMATS, + send_control_event_string(event, ALL_FORMATS, esc); + send_control_event_string(event, ALL_FORMATS, "650 OK\r\n"); tor_free(esc); @@ -3608,6 +3675,55 @@ consensus->routerstatus_list, EVENT_NEWCONSENSUS, "NEWCONSENSUS"); } +/** Called when we compute a new circuitbuildtimeout */ +int +control_event_buildtimeout_set(const circuit_build_times_t *cbt, + buildtimeout_set_event_t type) +{ + const char *type_string = NULL; + double qnt = circuit_build_times_quantile_cutoff(); + + if (!control_event_is_interesting(EVENT_BUILDTIMEOUT_SET)) + return 0; + + switch (type) { + case BUILDTIMEOUT_SET_EVENT_COMPUTED: + type_string = "COMPUTED"; + break; + case BUILDTIMEOUT_SET_EVENT_RESET: + type_string = "RESET"; + qnt = 1.0; + break; + case BUILDTIMEOUT_SET_EVENT_SUSPENDED: + type_string = "SUSPENDED"; + qnt = 1.0; + break; + case BUILDTIMEOUT_SET_EVENT_DISCARD: + type_string = "DISCARD"; + qnt = 1.0; + break; + case BUILDTIMEOUT_SET_EVENT_RESUME: + type_string = "RESUME"; + break; + default: + type_string = "UNKNOWN"; + break; + } + + send_control_event(EVENT_BUILDTIMEOUT_SET, ALL_FORMATS, + "650 BUILDTIMEOUT_SET %s TOTAL_TIMES=%lu " + "TIMEOUT_MS=%lu XM=%lu ALPHA=%f CUTOFF_QUANTILE=%f " + "TIMEOUT_RATE=%f CLOSE_MS=%lu CLOSE_RATE=%f\r\n", + type_string, (unsigned long)cbt->total_build_times, + (unsigned long)cbt->timeout_ms, + (unsigned long)cbt->Xm, cbt->alpha, qnt, + circuit_build_times_timeout_rate(cbt), + (unsigned long)cbt->close_ms, + circuit_build_times_close_rate(cbt)); + + return 0; +} + /** Called when a single local_routerstatus_t has changed: Sends an NS event * to any controller that cares. */ int @@ -3631,7 +3747,7 @@ int control_event_my_descriptor_changed(void) { - send_control_event(EVENT_DESCCHANGED, ALL_NAMES, "650 DESCCHANGED\r\n"); + send_control_event(EVENT_DESCCHANGED, ALL_FORMATS, "650 DESCCHANGED\r\n"); return 0; } @@ -3679,7 +3795,7 @@ return -1; } - send_control_event_impl(type, ALL_NAMES|ALL_FORMATS, 0, format_buf, args); + send_control_event_impl(type, ALL_FORMATS, format_buf, args); return 0; } @@ -3743,7 +3859,7 @@ if (!EVENT_IS_INTERESTING(EVENT_GUARD)) return 0; - if (EVENT_IS_INTERESTING1L(EVENT_GUARD)) { + { char buf[MAX_VERBOSE_NICKNAME_LEN+1]; routerinfo_t *ri = router_get_by_digest(digest); if (ri) { @@ -3751,13 +3867,9 @@ } else { tor_snprintf(buf, sizeof(buf), "$%s~%s", hbuf, nickname); } - send_control_event(EVENT_GUARD, LONG_NAMES, + send_control_event(EVENT_GUARD, ALL_FORMATS, "650 GUARD ENTRY %s %s\r\n", buf, status); } - if (EVENT_IS_INTERESTING1S(EVENT_GUARD)) { - send_control_event(EVENT_GUARD, SHORT_NAMES, - "650 GUARD ENTRY $%s %s\r\n", hbuf, status); - } return 0; } @@ -3814,6 +3926,75 @@ return 0; } +/** A copy of the process specifier of Tor's owning controller, or + * NULL if this Tor instance is not currently owned by a process. */ +static char *owning_controller_process_spec = NULL; + +/** A process-termination monitor for Tor's owning controller, or NULL + * if this Tor instance is not currently owned by a process. */ +static tor_process_monitor_t *owning_controller_process_monitor = NULL; + +/** Process-termination monitor callback for Tor's owning controller + * process. */ +static void +owning_controller_procmon_cb(void *unused) +{ + (void)unused; + + lost_owning_controller("process", "vanished"); +} + +/** Set process_spec as Tor's owning controller process. + * Exit on failure. */ +void +monitor_owning_controller_process(const char *process_spec) +{ + const char *msg; + + tor_assert((owning_controller_process_spec == NULL) == + (owning_controller_process_monitor == NULL)); + + if (owning_controller_process_spec != NULL) { + if ((process_spec != NULL) && !strcmp(process_spec, + owning_controller_process_spec)) { + /* Same process -- return now, instead of disposing of and + * recreating the process-termination monitor. */ + return; + } + + /* We are currently owned by a process, and we should no longer be + * owned by it. Free the process-termination monitor. */ + tor_process_monitor_free(owning_controller_process_monitor); + owning_controller_process_monitor = NULL; + + tor_free(owning_controller_process_spec); + owning_controller_process_spec = NULL; + } + + tor_assert((owning_controller_process_spec == NULL) && + (owning_controller_process_monitor == NULL)); + + if (process_spec == NULL) + return; + + owning_controller_process_spec = tor_strdup(process_spec); + owning_controller_process_monitor = + tor_process_monitor_new(tor_libevent_get_base(), + owning_controller_process_spec, + LD_CONTROL, + owning_controller_procmon_cb, NULL, + &msg); + + if (owning_controller_process_monitor == NULL) { + log_err(LD_BUG, "Couldn't create process-termination monitor for " + "owning controller: %s. Exiting.", + msg); + owning_controller_process_spec = NULL; + tor_cleanup(); + exit(0); + } +} + /** Convert the name of a bootstrapping phase s into strings * tag and summary suitable for display by the controller. */ static int @@ -3910,7 +4091,7 @@ * information and initial circuits. * * status is the new status, that is, what task we will be doing - * next. percent is zero if we just started this task, else it + * next. progress is zero if we just started this task, else it * represents progress on the task. */ void control_event_bootstrap(bootstrap_status_t status, int progress) @@ -3966,6 +4147,9 @@ char buf[BOOTSTRAP_MSG_LEN]; const char *recommendation = "ignore"; + /* bootstrap_percent must not be in "undefined" state here. */ + tor_assert(status >= 0); + if (bootstrap_percent == 100) return; /* already bootstrapped; nothing to be done here. */ @@ -4008,10 +4192,9 @@ * from recently. Send a copy to the controller in case it wants to * display it for the user. */ void -control_event_clients_seen(const char *timestarted, const char *countries) +control_event_clients_seen(const char *controller_str) { send_control_event(EVENT_CLIENTS_SEEN, 0, - "650 CLIENTS_SEEN TimeStarted=\"%s\" CountrySummary=%s\r\n", - timestarted, countries); + "650 CLIENTS_SEEN %s\r\n", controller_str); } diff -Nru tor-0.2.1.30/src/or/control.h tor-0.2.2.35/src/or/control.h --- tor-0.2.1.30/src/or/control.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/control.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,91 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file control.h + * \brief Header file for control.c. + **/ + +#ifndef _TOR_CONTROL_H +#define _TOR_CONTROL_H + +void control_update_global_event_mask(void); +void control_adjust_event_log_severity(void); + +void control_ports_write_to_file(void); + +/** Log information about the connection conn, protecting it as with + * CONN_LOG_PROTECT. Example: + * + * LOG_FN_CONN(conn, (LOG_DEBUG, "Socket %d wants to write", conn->s)); + **/ +#define LOG_FN_CONN(conn, args) \ + CONN_LOG_PROTECT(conn, log_fn args) + +int connection_control_finished_flushing(control_connection_t *conn); +int connection_control_reached_eof(control_connection_t *conn); +void connection_control_closed(control_connection_t *conn); + +int connection_control_process_inbuf(control_connection_t *conn); + +#define EVENT_AUTHDIR_NEWDESCS 0x000D +#define EVENT_NS 0x000F +int control_event_is_interesting(int event); + +int control_event_circuit_status(origin_circuit_t *circ, + circuit_status_event_t e, int reason); +int control_event_stream_status(edge_connection_t *conn, + stream_status_event_t e, + int reason); +int control_event_or_conn_status(or_connection_t *conn, + or_conn_status_event_t e, int reason); +int control_event_bandwidth_used(uint32_t n_read, uint32_t n_written); +int control_event_stream_bandwidth(edge_connection_t *edge_conn); +int control_event_stream_bandwidth_used(void); +void control_event_logmsg(int severity, unsigned int domain, const char *msg); +int control_event_descriptors_changed(smartlist_t *routers); +int control_event_address_mapped(const char *from, const char *to, + time_t expires, const char *error); +int control_event_or_authdir_new_descriptor(const char *action, + const char *desc, + size_t desclen, + const char *msg); +int control_event_my_descriptor_changed(void); +int control_event_networkstatus_changed(smartlist_t *statuses); + +int control_event_newconsensus(const networkstatus_t *consensus); +int control_event_networkstatus_changed_single(routerstatus_t *rs); +int control_event_general_status(int severity, const char *format, ...) + CHECK_PRINTF(2,3); +int control_event_client_status(int severity, const char *format, ...) + CHECK_PRINTF(2,3); +int control_event_server_status(int severity, const char *format, ...) + CHECK_PRINTF(2,3); +int control_event_guard(const char *nickname, const char *digest, + const char *status); +int control_event_buildtimeout_set(const circuit_build_times_t *cbt, + buildtimeout_set_event_t type); + +int init_cookie_authentication(int enabled); +smartlist_t *decode_hashed_passwords(config_line_t *passwords); +void disable_control_logging(void); +void enable_control_logging(void); + +void monitor_owning_controller_process(const char *process_spec); + +void control_event_bootstrap(bootstrap_status_t status, int progress); +void control_event_bootstrap_problem(const char *warn, int reason); + +void control_event_clients_seen(const char *controller_str); + +#ifdef CONTROL_PRIVATE +/* Used only by control.c and test.c */ +size_t write_escaped_data(const char *data, size_t len, char **out); +size_t read_escaped_data(const char *data, size_t len, char **out); +#endif + +#endif + diff -Nru tor-0.2.1.30/src/or/cpuworker.c tor-0.2.2.35/src/or/cpuworker.c --- tor-0.2.1.30/src/or/cpuworker.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/cpuworker.c 2011-12-15 16:28:37.000000000 +0000 @@ -13,6 +13,15 @@ **/ #include "or.h" +#include "buffers.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "config.h" +#include "connection.h" +#include "cpuworker.h" +#include "main.h" +#include "onion.h" +#include "router.h" /** The maximum number of cpuworker processes we will keep around. */ #define MAX_CPUWORKERS 16 @@ -183,7 +192,7 @@ tor_assert(0); /* don't ask me to do handshakes yet */ } -done_processing: + done_processing: conn->state = CPUWORKER_STATE_IDLE; num_cpuworkers_busy--; if (conn->timestamp_created < last_rotation_time) { @@ -217,8 +226,8 @@ { char question[ONIONSKIN_CHALLENGE_LEN]; uint8_t question_type; - int *fdarray = data; - int fd; + tor_socket_t *fdarray = data; + tor_socket_t fd; /* variables for onion processing */ char keys[CPATH_KEY_MATERIAL_LEN]; @@ -241,7 +250,7 @@ for (;;) { ssize_t r; - if ((r = recv(fd, &question_type, 1, 0)) != 1) { + if ((r = recv(fd, (void *)&question_type, 1, 0)) != 1) { // log_fn(LOG_ERR,"read type failed. Exiting."); if (r == 0) { log_info(LD_OR, @@ -308,12 +317,12 @@ static int spawn_cpuworker(void) { - int *fdarray; - int fd; + tor_socket_t *fdarray; + tor_socket_t fd; connection_t *conn; int err; - fdarray = tor_malloc(sizeof(int)*2); + fdarray = tor_malloc(sizeof(tor_socket_t)*2); if ((err = tor_socketpair(AF_UNIX, SOCK_STREAM, 0, fdarray)) < 0) { log_warn(LD_NET, "Couldn't construct socketpair for cpuworker: %s", tor_socket_strerror(-err)); @@ -358,7 +367,7 @@ static void spawn_enough_cpuworkers(void) { - int num_cpuworkers_needed = get_options()->NumCpus; + int num_cpuworkers_needed = get_options()->NumCPUs; if (num_cpuworkers_needed < MIN_CPUWORKERS) num_cpuworkers_needed = MIN_CPUWORKERS; @@ -437,9 +446,19 @@ { char qbuf[1]; char tag[TAG_LEN]; + time_t now = approx_time(); + static time_t last_culled_cpuworkers = 0; - cull_wedged_cpuworkers(); - spawn_enough_cpuworkers(); + /* Checking for wedged cpuworkers requires a linear search over all + * connections, so let's do it only once a minute. + */ +#define CULL_CPUWORKERS_INTERVAL 60 + + if (last_culled_cpuworkers + CULL_CPUWORKERS_INTERVAL <= now) { + cull_wedged_cpuworkers(); + spawn_enough_cpuworkers(); + last_culled_cpuworkers = now; + } if (1) { if (num_cpuworkers_busy == num_cpuworkers) { diff -Nru tor-0.2.1.30/src/or/cpuworker.h tor-0.2.2.35/src/or/cpuworker.h --- tor-0.2.1.30/src/or/cpuworker.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/cpuworker.h 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,25 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file cpuworker.h + * \brief Header file for cpuworker.c. + **/ + +#ifndef _TOR_CPUWORKER_H +#define _TOR_CPUWORKER_H + +void cpu_init(void); +void cpuworkers_rotate(void); +int connection_cpu_finished_flushing(connection_t *conn); +int connection_cpu_reached_eof(connection_t *conn); +int connection_cpu_process_inbuf(connection_t *conn); +int assign_onionskin_to_cpuworker(connection_t *cpuworker, + or_circuit_t *circ, + char *onionskin); + +#endif + diff -Nru tor-0.2.1.30/src/or/directory.c tor-0.2.2.35/src/or/directory.c --- tor-0.2.1.30/src/or/directory.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/directory.c 2011-12-15 16:28:37.000000000 +0000 @@ -4,6 +4,26 @@ /* See LICENSE for licensing information */ #include "or.h" +#include "buffers.h" +#include "circuitbuild.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "control.h" +#include "directory.h" +#include "dirserv.h" +#include "dirvote.h" +#include "geoip.h" +#include "main.h" +#include "networkstatus.h" +#include "policies.h" +#include "rendclient.h" +#include "rendcommon.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" +#include "routerparse.h" + #if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) #ifndef OPENBSD #include @@ -44,11 +64,13 @@ uint8_t router_purpose); static char *http_get_header(const char *headers, const char *which); static void http_set_address_origin(const char *headers, connection_t *conn); -static void connection_dir_download_networkstatus_failed( +static void connection_dir_download_v2_networkstatus_failed( dir_connection_t *conn, int status_code); static void connection_dir_download_routerdesc_failed(dir_connection_t *conn); +static void connection_dir_bridge_routerdesc_failed(dir_connection_t *conn); static void connection_dir_download_cert_failed( dir_connection_t *conn, int status_code); +static void connection_dir_retry_bridges(smartlist_t *descs); static void dir_networkstatus_download_failed(smartlist_t *failed, int status_code); static void dir_routerdesc_download_failed(smartlist_t *failed, @@ -92,17 +114,19 @@ #define ROUTERDESC_CACHE_LIFETIME (30*60) #define ROUTERDESC_BY_DIGEST_CACHE_LIFETIME (48*60*60) #define ROBOTS_CACHE_LIFETIME (24*60*60) +#define MICRODESC_CACHE_LIFETIME (48*60*60) /********* END VARIABLES ************/ -/** Return true iff the directory purpose 'purpose' must use an - * anonymous connection to a directory. */ +/** Return true iff the directory purpose dir_purpose (and if it's + * fetching descriptors, it's fetching them for router_purpose) + * must use an anonymous connection to a directory. */ static int purpose_needs_anonymity(uint8_t dir_purpose, uint8_t router_purpose) { if (get_options()->AllDirActionsPrivate) return 1; - if (router_purpose == ROUTER_PURPOSE_BRIDGE && has_completed_circuit) + if (router_purpose == ROUTER_PURPOSE_BRIDGE && can_complete_circuit) return 1; /* if no circuits yet, we may need this info to bootstrap. */ if (dir_purpose == DIR_PURPOSE_UPLOAD_DIR || dir_purpose == DIR_PURPOSE_UPLOAD_VOTE || @@ -229,10 +253,13 @@ } /** Start a connection to every suitable directory authority, using - * connection purpose 'purpose' and uploading the payload 'payload' - * (length 'payload_len'). The purpose should be one of + * connection purpose dir_purpose and uploading payload + * (of length payload_len). The dir_purpose should be one of * 'DIR_PURPOSE_UPLOAD_DIR' or 'DIR_PURPOSE_UPLOAD_RENDDESC'. * + * router_purpose describes the type of descriptor we're + * publishing, if we're publishing a descriptor -- e.g. general or bridge. + * * type specifies what sort of dir authorities (V1, V2, * HIDSERV, BRIDGE) we should upload to. * @@ -248,9 +275,12 @@ const char *payload, size_t payload_len, size_t extrainfo_len) { + or_options_t *options = get_options(); int post_via_tor; smartlist_t *dirservers = router_get_trusted_dir_servers(); int found = 0; + const int exclude_self = (dir_purpose == DIR_PURPOSE_UPLOAD_VOTE || + dir_purpose == DIR_PURPOSE_UPLOAD_SIGNATURES); tor_assert(dirservers); /* This tries dirservers which we believe to be down, but ultimately, that's * harmless, and we may as well err on the side of getting things uploaded. @@ -263,6 +293,19 @@ if ((type & ds->type) == 0) continue; + if (exclude_self && router_digest_is_me(ds->digest)) + continue; + + if (options->ExcludeNodes && options->StrictNodes && + routerset_contains_routerstatus(options->ExcludeNodes, rs)) { + log_warn(LD_DIR, "Wanted to contact authority '%s' for %s, but " + "it's in our ExcludedNodes list and StrictNodes is set. " + "Skipping.", + ds->nickname, + dir_conn_purpose_to_string(dir_purpose)); + continue; + } + found = 1; /* at least one authority of this type was listed */ if (dir_purpose == DIR_PURPOSE_UPLOAD_DIR) ds->has_accepted_serverdesc = 0; @@ -315,6 +358,7 @@ break; case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS: type = V2_AUTHORITY; + prefer_authority = 1; /* Only v2 authorities have these anyway. */ break; case DIR_PURPOSE_FETCH_SERVERDESC: type = (router_purpose == ROUTER_PURPOSE_BRIDGE ? BRIDGE_AUTHORITY : @@ -348,7 +392,7 @@ if (!get_via_tor) { if (options->UseBridges && type != BRIDGE_AUTHORITY) { /* want to ask a running bridge for which we have a descriptor. */ - /* XXX022 we assume that all of our bridges can answer any + /* XXX023 we assume that all of our bridges can answer any * possible directory question. This won't be true forever. -RD */ /* It certainly is not true with conditional consensus downloading, * so, for now, never assume the server supports that. */ @@ -472,15 +516,18 @@ time_t if_modified_since, const rend_data_t *rend_query) { + or_options_t *options = get_options(); routerinfo_t *router; char address_buf[INET_NTOA_BUF_LEN+1]; struct in_addr in; const char *address; tor_addr_t addr; router = router_get_by_digest(status->identity_digest); + if (!router && anonymized_connection) { - log_info(LD_DIR, "Not sending anonymized request to directory '%s'; we " - "don't have its router descriptor.", status->nickname); + log_info(LD_DIR, "Not sending anonymized request to directory %s; we " + "don't have its router descriptor.", + routerstatus_describe(status)); return; } else if (router) { address = router->address; @@ -490,6 +537,17 @@ address = address_buf; } tor_addr_from_ipv4h(&addr, status->addr); + + if (options->ExcludeNodes && options->StrictNodes && + routerset_contains_routerstatus(options->ExcludeNodes, status)) { + log_warn(LD_DIR, "Wanted to contact directory mirror %s for %s, but " + "it's in our ExcludedNodes list and StrictNodes is set. " + "Skipping. This choice might make your Tor not work.", + routerstatus_describe(status), + dir_conn_purpose_to_string(dir_purpose)); + return; + } + directory_initiate_command_rend(address, &addr, status->or_port, status->dir_port, status->version_supports_conditional_consensus, @@ -560,16 +618,18 @@ if (directory_conn_is_self_reachability_test(conn)) { return; /* this was a test fetch. don't retry. */ } - if (entry_list_can_grow(get_options())) + if (!entry_list_is_constrained(get_options())) router_set_status(conn->identity_digest, 0); /* don't try him again */ if (conn->_base.purpose == DIR_PURPOSE_FETCH_V2_NETWORKSTATUS) { log_info(LD_DIR, "Giving up on directory server at '%s'; retrying", conn->_base.address); - connection_dir_download_networkstatus_failed(conn, -1); + connection_dir_download_v2_networkstatus_failed(conn, -1); } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC || conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) { log_info(LD_DIR, "Giving up on directory server at '%s'; retrying", conn->_base.address); + if (conn->router_purpose == ROUTER_PURPOSE_BRIDGE) + connection_dir_bridge_routerdesc_failed(conn); connection_dir_download_routerdesc_failed(conn); } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_CONSENSUS) { networkstatus_consensus_download_failed(0); @@ -591,7 +651,7 @@ * retry the fetch now, later, or never. */ static void -connection_dir_download_networkstatus_failed(dir_connection_t *conn, +connection_dir_download_v2_networkstatus_failed(dir_connection_t *conn, int status_code) { if (!conn->requested_resource) { @@ -614,7 +674,7 @@ * failed, and possibly retry them later.*/ smartlist_t *failed = smartlist_create(); dir_split_resource_into_fingerprints(conn->requested_resource+3, - failed, NULL, 0, 0); + failed, NULL, 0); if (smartlist_len(failed)) { dir_networkstatus_download_failed(failed, status_code); SMARTLIST_FOREACH(failed, char *, cp, tor_free(cp)); @@ -623,6 +683,24 @@ } } +/** Helper: Attempt to fetch directly the descriptors of each bridge + * listed in failed. + */ +static void +connection_dir_retry_bridges(smartlist_t *descs) +{ + char digest[DIGEST_LEN]; + SMARTLIST_FOREACH(descs, const char *, cp, + { + if (base16_decode(digest, DIGEST_LEN, cp, strlen(cp))<0) { + log_warn(LD_BUG, "Malformed fingerprint in list: %s", + escaped(cp)); + continue; + } + retry_bridge_descriptor_fetch_directly(digest); + }); +} + /** Called when an attempt to download one or more router descriptors * or extra-info documents on connection conn failed. */ @@ -640,6 +718,33 @@ (void) conn; } +/** Called when an attempt to download a bridge's routerdesc from + * one of the authorities failed due to a network error. If + * possible attempt to download descriptors from the bridge directly. + */ +static void +connection_dir_bridge_routerdesc_failed(dir_connection_t *conn) +{ + smartlist_t *which = NULL; + + /* Requests for bridge descriptors are in the form 'fp/', so ignore + anything else. */ + if (!conn->requested_resource || strcmpstart(conn->requested_resource,"fp/")) + return; + + which = smartlist_create(); + dir_split_resource_into_fingerprints(conn->requested_resource + + strlen("fp/"), + which, NULL, 0); + + tor_assert(conn->_base.purpose != DIR_PURPOSE_FETCH_EXTRAINFO); + if (smartlist_len(which)) { + connection_dir_retry_bridges(which); + SMARTLIST_FOREACH(which, char *, cp, tor_free(cp)); + } + smartlist_free(which); +} + /** Called when an attempt to fetch a certificate fails. */ static void connection_dir_download_cert_failed(dir_connection_t *conn, int status) @@ -651,7 +756,7 @@ return; failed = smartlist_create(); dir_split_resource_into_fingerprints(conn->requested_resource+3, - failed, NULL, 1, 0); + failed, NULL, DSR_HEX); SMARTLIST_FOREACH(failed, char *, cp, { authority_cert_dl_failed(cp, status); @@ -667,7 +772,7 @@ * 1) If or_port is 0, or it's a direct conn and or_port is firewalled * or we're a dir mirror, no. * 2) If we prefer to avoid begindir conns, and we're not fetching or - * publishing a bridge relay descriptor, no. + * publishing a bridge relay descriptor, no. * 3) Else yes. */ static int @@ -680,8 +785,7 @@ return 0; /* We don't know an ORPort -- no chance. */ if (!anonymized_connection) if (!fascist_firewall_allows_address_or(addr, or_port) || - directory_fetches_from_authorities(options) || - (server_mode(options) && !options->Address)) + directory_fetches_from_authorities(options)) return 0; /* We're firewalled or are acting like a relay -- also no. */ if (!options->TunnelDirConns && router_purpose != ROUTER_PURPOSE_BRIDGE) @@ -746,6 +850,15 @@ log_debug(LD_DIR, "Initiating %s", dir_conn_purpose_to_string(dir_purpose)); + /* ensure that we don't make direct connections when a SOCKS server is + * configured. */ + if (!anonymized_connection && !use_begindir && !options->HTTPProxy && + (options->Socks4Proxy || options->Socks5Proxy)) { + log_warn(LD_DIR, "Cannot connect to a directory server through a " + "SOCKS proxy!"); + return; + } + conn = dir_connection_new(AF_INET); /* set up conn so it's got all the data we need to remember */ @@ -770,9 +883,9 @@ if (!anonymized_connection && !use_begindir) { /* then we want to connect to dirport directly */ - if (options->HttpProxy) { - tor_addr_from_ipv4h(&addr, options->HttpProxyAddr); - dir_port = options->HttpProxyPort; + if (options->HTTPProxy) { + tor_addr_copy(&addr, &options->HTTPProxyAddr); + dir_port = options->HTTPProxyPort; } switch (connection_connect(TO_CONN(conn), conn->_base.address, &addr, @@ -793,7 +906,7 @@ payload, payload_len, supports_conditional_consensus, if_modified_since); - connection_watch_events(TO_CONN(conn), EV_READ | EV_WRITE); + connection_watch_events(TO_CONN(conn), READ_EVENT | WRITE_EVENT); /* writable indicates finish, readable indicates broken link, error indicates broken link in windowsland. */ } @@ -832,7 +945,7 @@ payload, payload_len, supports_conditional_consensus, if_modified_since); - connection_watch_events(TO_CONN(conn), EV_READ | EV_WRITE); + connection_watch_events(TO_CONN(conn), READ_EVENT|WRITE_EVENT); connection_start_reading(TO_CONN(linked_conn)); } } @@ -880,7 +993,7 @@ if (supports_conditional_consensus) { char *authority_id_list; - smartlist_t *authority_digets = smartlist_create(); + smartlist_t *authority_digests = smartlist_create(); SMARTLIST_FOREACH(router_get_trusted_dir_servers(), trusted_dir_server_t *, ds, @@ -892,10 +1005,10 @@ hex = tor_malloc(2*CONDITIONAL_CONSENSUS_FPR_LEN+1); base16_encode(hex, 2*CONDITIONAL_CONSENSUS_FPR_LEN+1, ds->v3_identity_digest, CONDITIONAL_CONSENSUS_FPR_LEN); - smartlist_add(authority_digets, hex); + smartlist_add(authority_digests, hex); }); - smartlist_sort(authority_digets, _compare_strs); - authority_id_list = smartlist_join_strings(authority_digets, + smartlist_sort(authority_digests, _compare_strs); + authority_id_list = smartlist_join_strings(authority_digests, "+", 0, NULL); len = strlen(authority_id_list)+64; @@ -903,8 +1016,8 @@ tor_snprintf(url, len, "/tor/status-vote/current/consensus/%s.z", authority_id_list); - SMARTLIST_FOREACH(authority_digets, char *, cp, tor_free(cp)); - smartlist_free(authority_digets); + SMARTLIST_FOREACH(authority_digests, char *, cp, tor_free(cp)); + smartlist_free(authority_digests); tor_free(authority_id_list); } else { url = tor_strdup("/tor/status-vote/current/consensus.z"); @@ -913,7 +1026,7 @@ } /** Queue an appropriate HTTP command on conn-\>outbuf. The other args - * are as in directory_initiate_command. + * are as in directory_initiate_command(). */ static void directory_send_command(dir_connection_t *conn, @@ -956,9 +1069,9 @@ } /* come up with some proxy lines, if we're using one. */ - if (direct && get_options()->HttpProxy) { + if (direct && get_options()->HTTPProxy) { char *base64_authenticator=NULL; - const char *authenticator = get_options()->HttpProxyAuthenticator; + const char *authenticator = get_options()->HTTPProxyAuthenticator; tor_snprintf(proxystring, sizeof(proxystring),"http://%s", hoststring); if (authenticator) { @@ -1049,31 +1162,10 @@ httpcommand = "POST"; url = tor_strdup("/tor/post/consensus-signature"); break; - case DIR_PURPOSE_FETCH_RENDDESC: - tor_assert(resource); - tor_assert(!payload); - - /* this must be true or we wouldn't be doing the lookup */ - tor_assert(strlen(resource) <= REND_SERVICE_ID_LEN_BASE32); - /* This breaks the function abstraction. */ - conn->rend_data = tor_malloc_zero(sizeof(rend_data_t)); - strlcpy(conn->rend_data->onion_address, resource, - sizeof(conn->rend_data->onion_address)); - conn->rend_data->rend_desc_version = 0; - - httpcommand = "GET"; - /* Request the most recent versioned descriptor. */ - // (XXXX We were going to switch this to fetch rendezvous1 descriptors, - // but that never got testing, and it wasn't a good design.) - len = strlen(resource)+32; - url = tor_malloc(len); - tor_snprintf(url, len, "/tor/rendezvous/%s", resource); - break; case DIR_PURPOSE_FETCH_RENDDESC_V2: tor_assert(resource); tor_assert(strlen(resource) <= REND_DESC_ID_V2_LEN_BASE32); tor_assert(!payload); - conn->rend_data->rend_desc_version = 2; httpcommand = "GET"; len = strlen(resource) + 32; url = tor_malloc(len); @@ -1162,7 +1254,7 @@ if (s-tmp >= 3 && !strcmpstart(tmp,"://")) { tmp = strchr(tmp+3, '/'); if (tmp && tmp < s) { - log_debug(LD_DIR,"Skipping over 'http[s]://hostname' string"); + log_debug(LD_DIR,"Skipping over 'http[s]://hostname/' string"); start = tmp; } } @@ -1479,7 +1571,7 @@ } (void) skewed; /* skewed isn't used yet. */ - if (status_code == 503 && body_len < 16) { + if (status_code == 503) { routerstatus_t *rs; trusted_dir_server_t *ds; log_info(LD_DIR,"Received http status code %d (%s) from server " @@ -1493,12 +1585,6 @@ tor_free(body); tor_free(headers); tor_free(reason); return -1; - } else if (status_code == 503) { - /* XXXX022 Remove this once every server with bug 539 is obsolete. */ - log_info(LD_DIR, "Server at '%s:%d' sent us a 503 response, but included " - "a body anyway. We'll pretend it gave us a 200.", - conn->_base.address, conn->_base.port); - status_code = 200; } plausible = body_is_plausible(body, body_len, conn->_base.purpose); @@ -1565,15 +1651,21 @@ v2_networkstatus_source_t source; char *cp; log_info(LD_DIR,"Received networkstatus objects (size %d) from server " - "'%s:%d'",(int) body_len, conn->_base.address, conn->_base.port); + "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port); if (status_code != 200) { - log_warn(LD_DIR, - "Received http status code %d (%s) from server " - "'%s:%d' while fetching \"/tor/status/%s\". I'll try again soon.", - status_code, escaped(reason), conn->_base.address, - conn->_base.port, conn->requested_resource); + static ratelim_t warning_limit = RATELIM_INIT(3600); + char *m; + if ((m = rate_limit_log(&warning_limit, now))) { + log_warn(LD_DIR, + "Received http status code %d (%s) from server " + "'%s:%d' while fetching \"/tor/status/%s\". " + "I'll try again soon.%s", + status_code, escaped(reason), conn->_base.address, + conn->_base.port, conn->requested_resource, m); + tor_free(m); + } tor_free(body); tor_free(headers); tor_free(reason); - connection_dir_download_networkstatus_failed(conn, status_code); + connection_dir_download_v2_networkstatus_failed(conn, status_code); return -1; } if (conn->requested_resource && @@ -1581,7 +1673,7 @@ source = NS_FROM_DIR_BY_FP; which = smartlist_create(); dir_split_resource_into_fingerprints(conn->requested_resource+3, - which, NULL, 0, 0); + which, NULL, 0); } else if (conn->requested_resource && !strcmpstart(conn->requested_resource, "all")) { source = NS_FROM_DIR_ALL; @@ -1639,8 +1731,8 @@ return -1; } log_info(LD_DIR,"Received consensus directory (size %d) from server " - "'%s:%d'",(int) body_len, conn->_base.address, conn->_base.port); - if ((r=networkstatus_set_current_consensus(body, 0))<0) { + "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port); + if ((r=networkstatus_set_current_consensus(body, "ns", 0))<0) { log_fn(r<-1?LOG_WARN:LOG_INFO, LD_DIR, "Unable to load consensus directory downloaded from " "server '%s:%d'. I'll try again soon.", @@ -1667,9 +1759,11 @@ return -1; } log_info(LD_DIR,"Received authority certificates (size %d) from server " - "'%s:%d'",(int) body_len, conn->_base.address, conn->_base.port); + "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port); if (trusted_dirs_load_certs_from_string(body, 0, 1)<0) { log_warn(LD_DIR, "Unable to parse fetched certificates"); + /* if we fetched more than one and only some failed, the successful + * ones got flushed to disk so it's safe to call this on them */ connection_dir_download_cert_failed(conn, status_code); } else { directory_info_has_arrived(now, 0); @@ -1680,7 +1774,7 @@ const char *msg; int st; log_info(LD_DIR,"Got votes (size %d) from server %s:%d", - (int) body_len, conn->_base.address, conn->_base.port); + (int)body_len, conn->_base.address, conn->_base.port); if (status_code != 200) { log_warn(LD_DIR, "Received http status code %d (%s) from server " @@ -1700,11 +1794,11 @@ if (conn->_base.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) { const char *msg = NULL; log_info(LD_DIR,"Got detached signatures (size %d) from server %s:%d", - (int) body_len, conn->_base.address, conn->_base.port); + (int)body_len, conn->_base.address, conn->_base.port); if (status_code != 200) { log_warn(LD_DIR, - "Received http status code %d (%s) from server " - "'%s:%d' while fetching \"/tor/status-vote/consensus-signatures.z\".", + "Received http status code %d (%s) from server '%s:%d' while fetching " + "\"/tor/status-vote/next/consensus-signatures.z\".", status_code, escaped(reason), conn->_base.address, conn->_base.port); tor_free(body); tor_free(headers); tor_free(reason); @@ -1732,7 +1826,7 @@ which = smartlist_create(); dir_split_resource_into_fingerprints(conn->requested_resource + (descriptor_digests ? 2 : 3), - which, NULL, 0, 0); + which, NULL, 0); n_asked_for = smartlist_len(which); } if (status_code != 200) { @@ -1806,7 +1900,6 @@ router_get_trusteddirserver_by_digest(conn->identity_digest); char *rejected_hdr = http_get_header(headers, "X-Descriptor-Not-New: "); - int rejected = 0; if (rejected_hdr) { if (!strcmp(rejected_hdr, "Yes")) { log_info(LD_GENERAL, @@ -1814,12 +1907,11 @@ ds->nickname); /* XXXX use this information; be sure to upload next one * sooner. -NM */ - /* XXXX021 On further thought, the task above implies that we're + /* XXXX023 On further thought, the task above implies that we're * basing our regenerate-descriptor time on when we uploaded the * last descriptor, not on the published time of the last * descriptor. If those are different, that's a bad thing to * do. -NM */ - rejected = 1; } tor_free(rejected_hdr); } @@ -1909,7 +2001,8 @@ (int)body_len, status_code, escaped(reason)); switch (status_code) { case 200: - if (rend_cache_store(body, body_len, 0) < -1) { + if (rend_cache_store(body, body_len, 0, + conn->rend_data->onion_address) < -1) { log_warn(LD_REND,"Failed to parse rendezvous descriptor."); /* Any pending rendezvous attempts will notice when * connection_about_to_close_connection() @@ -1920,7 +2013,7 @@ /* Success, or at least there's a v2 descriptor already * present. Notify pending connections about this. */ conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC; - rend_client_desc_trynow(conn->rend_data->onion_address, -1); + rend_client_desc_trynow(conn->rend_data->onion_address); } break; case 404: @@ -1967,7 +2060,7 @@ log_info(LD_REND, "Successfully fetched v2 rendezvous " "descriptor."); conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC; - rend_client_desc_trynow(conn->rend_data->onion_address, -1); + rend_client_desc_trynow(conn->rend_data->onion_address); break; } break; @@ -2010,12 +2103,6 @@ "'%s:%d'. Malformed rendezvous descriptor?", escaped(reason), conn->_base.address, conn->_base.port); break; - case 503: - log_info(LD_REND,"http status 503 (%s) response from dirserver " - "'%s:%d'. Node is (currently) not acting as v2 hidden " - "service directory.", - escaped(reason), conn->_base.address, conn->_base.port); - break; default: log_warn(LD_REND,"http status %d (%s) response unexpected (server " "'%s:%d').", @@ -2322,7 +2409,7 @@ } #endif -/** Decide whether a client would accept the consensus we have +/** Decide whether a client would accept the consensus we have. * * Clients can say they only want a consensus if it's signed by more * than half the authorities in a list. They pass this list in @@ -2343,31 +2430,32 @@ int need_at_least; int have = 0; - dir_split_resource_into_fingerprints(want_url, want_authorities, NULL, 0, 0); + dir_split_resource_into_fingerprints(want_url, want_authorities, NULL, 0); need_at_least = smartlist_len(want_authorities)/2+1; - SMARTLIST_FOREACH(want_authorities, const char *, d, { + SMARTLIST_FOREACH_BEGIN(want_authorities, const char *, d) { char want_digest[DIGEST_LEN]; size_t want_len = strlen(d)/2; if (want_len > DIGEST_LEN) want_len = DIGEST_LEN; if (base16_decode(want_digest, DIGEST_LEN, d, want_len*2) < 0) { - log_warn(LD_DIR,"Failed to decode requested authority digest %s.", d); + log_fn(LOG_PROTOCOL_WARN, LD_DIR, + "Failed to decode requested authority digest %s.", d); continue; }; - SMARTLIST_FOREACH(v->voters, networkstatus_voter_info_t *, vi, { - if (vi->signature && - !memcmp(vi->identity_digest, want_digest, want_len)) { + SMARTLIST_FOREACH_BEGIN(v->voters, networkstatus_voter_info_t *, vi) { + if (smartlist_len(vi->sigs) && + tor_memeq(vi->identity_digest, want_digest, want_len)) { have++; break; }; - }); + } SMARTLIST_FOREACH_END(vi); /* early exit, if we already have enough */ if (have >= need_at_least) break; - }); + } SMARTLIST_FOREACH_END(d); SMARTLIST_FOREACH(want_authorities, char *, d, tor_free(d)); smartlist_free(want_authorities); @@ -2514,9 +2602,12 @@ /* v2 or v3 network status fetch. */ smartlist_t *dir_fps = smartlist_create(); int is_v3 = !strcmpstart(url, "/tor/status-vote"); + geoip_client_action_t act = + is_v3 ? GEOIP_CLIENT_NETWORKSTATUS : GEOIP_CLIENT_NETWORKSTATUS_V2; const char *request_type = NULL; const char *key = url + strlen("/tor/status/"); long lifetime = NETWORKSTATUS_CACHE_LIFETIME; + if (!is_v3) { dirserv_get_networkstatus_v2_fingerprints(dir_fps, key); if (!strcmpstart(key, "fp/")) @@ -2531,18 +2622,44 @@ } else { networkstatus_t *v = networkstatus_get_latest_consensus(); time_t now = time(NULL); + const char *want_fps = NULL; + char *flavor = NULL; #define CONSENSUS_URL_PREFIX "/tor/status-vote/current/consensus/" - if (v && - !strcmpstart(url, CONSENSUS_URL_PREFIX) && - !client_likes_consensus(v, url + strlen(CONSENSUS_URL_PREFIX))) { + #define CONSENSUS_FLAVORED_PREFIX "/tor/status-vote/current/consensus-" + /* figure out the flavor if any, and who we wanted to sign the thing */ + if (!strcmpstart(url, CONSENSUS_FLAVORED_PREFIX)) { + const char *f, *cp; + f = url + strlen(CONSENSUS_FLAVORED_PREFIX); + cp = strchr(f, '/'); + if (cp) { + want_fps = cp+1; + flavor = tor_strndup(f, cp-f); + } else { + flavor = tor_strdup(f); + } + } else { + if (!strcmpstart(url, CONSENSUS_URL_PREFIX)) + want_fps = url+strlen(CONSENSUS_URL_PREFIX); + } + + /* XXXX MICRODESC NM NM should check document of correct flavor */ + if (v && want_fps && + !client_likes_consensus(v, want_fps)) { write_http_status_line(conn, 404, "Consensus not signed by sufficient " "number of requested authorities"); smartlist_free(dir_fps); + geoip_note_ns_response(act, GEOIP_REJECT_NOT_ENOUGH_SIGS); + tor_free(flavor); goto done; } - smartlist_add(dir_fps, tor_memdup("\0\0\0\0\0\0\0\0\0\0" - "\0\0\0\0\0\0\0\0\0\0", 20)); + { + char *fp = tor_malloc_zero(DIGEST_LEN); + if (flavor) + strlcpy(fp, flavor, DIGEST_LEN); + tor_free(flavor); + smartlist_add(dir_fps, fp); + } request_type = compressed?"v3.z":"v3"; lifetime = (v && v->fresh_until > now) ? v->fresh_until - now : 0; } @@ -2550,6 +2667,7 @@ if (!smartlist_len(dir_fps)) { /* we failed to create/cache cp */ write_http_status_line(conn, 503, "Network status object unavailable"); smartlist_free(dir_fps); + geoip_note_ns_response(act, GEOIP_REJECT_UNAVAILABLE); goto done; } @@ -2557,11 +2675,13 @@ write_http_status_line(conn, 404, "Not found"); SMARTLIST_FOREACH(dir_fps, char *, cp, tor_free(cp)); smartlist_free(dir_fps); + geoip_note_ns_response(act, GEOIP_REJECT_NOT_FOUND); goto done; } else if (!smartlist_len(dir_fps)) { write_http_status_line(conn, 304, "Not modified"); SMARTLIST_FOREACH(dir_fps, char *, cp, tor_free(cp)); smartlist_free(dir_fps); + geoip_note_ns_response(act, GEOIP_REJECT_NOT_MODIFIED); goto done; } @@ -2573,18 +2693,25 @@ write_http_status_line(conn, 503, "Directory busy, try again later"); SMARTLIST_FOREACH(dir_fps, char *, fp, tor_free(fp)); smartlist_free(dir_fps); + geoip_note_ns_response(act, GEOIP_REJECT_BUSY); goto done; } -#ifdef ENABLE_GEOIP_STATS { - geoip_client_action_t act = - is_v3 ? GEOIP_CLIENT_NETWORKSTATUS : GEOIP_CLIENT_NETWORKSTATUS_V2; struct in_addr in; - if (tor_inet_aton((TO_CONN(conn))->address, &in)) + if (tor_inet_aton((TO_CONN(conn))->address, &in)) { geoip_note_client_seen(act, ntohl(in.s_addr), time(NULL)); + geoip_note_ns_response(act, GEOIP_SUCCESS); + /* Note that a request for a network status has started, so that we + * can measure the download time later on. */ + if (TO_CONN(conn)->dirreq_id) + geoip_start_dirreq(TO_CONN(conn)->dirreq_id, dlen, act, + DIRREQ_TUNNELED); + else + geoip_start_dirreq(TO_CONN(conn)->global_identifier, dlen, act, + DIRREQ_DIRECT); + } } -#endif // note_request(request_type,dlen); (void) request_type; @@ -2610,7 +2737,7 @@ ssize_t estimated_len = 0; smartlist_t *items = smartlist_create(); smartlist_t *dir_items = smartlist_create(); - int lifetime = 60; /* XXXX022 should actually use vote intervals. */ + int lifetime = 60; /* XXXX023 should actually use vote intervals. */ url += strlen("/tor/status-vote/"); current = !strcmpstart(url, "current/"); url = strchr(url, '/'); @@ -2620,7 +2747,7 @@ const char *item; tor_assert(!current); /* we handle current consensus specially above, * since it wants to be spooled. */ - if ((item = dirvote_get_pending_consensus())) + if ((item = dirvote_get_pending_consensus(FLAV_NS))) smartlist_add(items, (char*)item); } else if (!current && !strcmp(url, "consensus-signatures")) { /* XXXX the spec says that we should implement @@ -2646,7 +2773,8 @@ flags = DGV_BY_ID | (current ? DGV_INCLUDE_PREVIOUS : DGV_INCLUDE_PENDING); } - dir_split_resource_into_fingerprints(url, fps, NULL, 1, 1); + dir_split_resource_into_fingerprints(url, fps, NULL, + DSR_HEX|DSR_SORT_UNIQ); SMARTLIST_FOREACH(fps, char *, fp, { if ((d = dirvote_get_vote(fp, flags))) smartlist_add(dir_items, (cached_dir_t*)d); @@ -2699,6 +2827,41 @@ goto done; } + if (!strcmpstart(url, "/tor/micro/d/")) { + smartlist_t *fps = smartlist_create(); + + dir_split_resource_into_fingerprints(url+strlen("/tor/micro/d/"), + fps, NULL, + DSR_DIGEST256|DSR_BASE64|DSR_SORT_UNIQ); + + if (!dirserv_have_any_microdesc(fps)) { + write_http_status_line(conn, 404, "Not found"); + SMARTLIST_FOREACH(fps, char *, fp, tor_free(fp)); + smartlist_free(fps); + goto done; + } + dlen = dirserv_estimate_microdesc_size(fps, compressed); + if (global_write_bucket_low(TO_CONN(conn), dlen, 2)) { + log_info(LD_DIRSERV, + "Client asked for server descriptors, but we've been " + "writing too many bytes lately. Sending 503 Dir busy."); + write_http_status_line(conn, 503, "Directory busy, try again later"); + SMARTLIST_FOREACH(fps, char *, fp, tor_free(fp)); + smartlist_free(fps); + goto done; + } + + write_http_response_header(conn, -1, compressed, MICRODESC_CACHE_LIFETIME); + conn->dir_spool_src = DIR_SPOOL_MICRODESC; + conn->fingerprint_stack = fps; + + if (compressed) + conn->zlib_state = tor_zlib_new(1, ZLIB_METHOD); + + connection_dirserv_flushed_some(conn); + goto done; + } + if (!strcmpstart(url,"/tor/server/") || (!options->BridgeAuthoritativeDir && !options->BridgeRelay && !strcmpstart(url,"/tor/extra/"))) { @@ -2780,7 +2943,8 @@ } else if (!strcmpstart(url, "/tor/keys/fp/")) { smartlist_t *fps = smartlist_create(); dir_split_resource_into_fingerprints(url+strlen("/tor/keys/fp/"), - fps, NULL, 1, 1); + fps, NULL, + DSR_HEX|DSR_SORT_UNIQ); SMARTLIST_FOREACH(fps, char *, d, { authority_cert_t *c = authority_cert_get_newest_by_id(d); if (c) smartlist_add(certs, c); @@ -2790,7 +2954,8 @@ } else if (!strcmpstart(url, "/tor/keys/sk/")) { smartlist_t *fps = smartlist_create(); dir_split_resource_into_fingerprints(url+strlen("/tor/keys/sk/"), - fps, NULL, 1, 1); + fps, NULL, + DSR_HEX|DSR_SORT_UNIQ); SMARTLIST_FOREACH(fps, char *, d, { authority_cert_t *c = authority_cert_get_by_sk_digest(d); if (c) smartlist_add(certs, c); @@ -2892,18 +3057,9 @@ note_request("/tor/rendezvous?/", desc_len); /* need to send descp separately, because it may include NULs */ connection_write_to_buf(descp, desc_len, TO_CONN(conn)); - /* report successful fetch to statistic */ - if (options->HSAuthorityRecordStats) { - hs_usage_note_fetch_total(query, time(NULL)); - hs_usage_note_fetch_successful(query, time(NULL)); - } break; case 0: /* well-formed but not present */ write_http_status_line(conn, 404, "Not found"); - /* report (unsuccessful) fetch to statistic */ - if (options->HSAuthorityRecordStats) { - hs_usage_note_fetch_total(query, time(NULL)); - } break; case -1: /* not well-formed */ write_http_status_line(conn, 400, "Bad request"); @@ -3114,7 +3270,7 @@ !strcmpstart(url,"/tor/rendezvous/publish")) { /* rendezvous descriptor post */ log_info(LD_REND, "Handling rendezvous descriptor post."); - if (rend_cache_store(body, body_len, 1) < 0) { + if (rend_cache_store(body, body_len, 1, NULL) < 0) { log_fn(LOG_PROTOCOL_WARN, LD_DIRSERV, "Rejected rend descriptor (length %d) from %s.", (int)body_len, conn->_base.address); @@ -3134,6 +3290,8 @@ write_http_status_line(conn, status, "Vote stored"); } else { tor_assert(msg); + log_warn(LD_DIRSERV, "Rejected vote from %s (\"%s\").", + conn->_base.address, msg); write_http_status_line(conn, status, msg); } goto done; @@ -3180,8 +3338,8 @@ &body, &body_len, MAX_DIR_UL_SIZE, 0)) { case -1: /* overflow */ log_warn(LD_DIRSERV, - "Invalid input from address '%s'. Closing.", - conn->_base.address); + "Request too large from address '%s' to DirPort. Closing.", + safe_str(conn->_base.address)); return -1; case 0: log_debug(LD_DIRSERV,"command not all here yet."); @@ -3217,6 +3375,16 @@ tor_assert(conn); tor_assert(conn->_base.type == CONN_TYPE_DIR); + /* Note that we have finished writing the directory response. For direct + * connections this means we're done, for tunneled connections its only + * an intermediate step. */ + if (TO_CONN(conn)->dirreq_id) + geoip_change_dirreq_state(TO_CONN(conn)->dirreq_id, DIRREQ_TUNNELED, + DIRREQ_FLUSHING_DIR_CONN_FINISHED); + else + geoip_change_dirreq_state(TO_CONN(conn)->global_identifier, + DIRREQ_DIRECT, + DIRREQ_FLUSHING_DIR_CONN_FINISHED); switch (conn->_base.state) { case DIR_CONN_STATE_CLIENT_SENDING: log_debug(LD_DIR,"client finished sending command."); @@ -3399,6 +3567,14 @@ dls->next_attempt_at = time(NULL) + schedule[0]; } +/** Return the number of failures on dls since the last success (if + * any). */ +int +download_status_get_n_failures(const download_status_t *dls) +{ + return dls->n_download_failures; +} + /** Called when one or more routerdesc (or extrainfo, if was_extrainfo) * fetches have failed (with uppercase fingerprints listed in failed, * either as descriptor digests or as identity digests based on @@ -3414,16 +3590,8 @@ int server = directory_fetches_from_authorities(get_options()); if (!was_descriptor_digests) { if (router_purpose == ROUTER_PURPOSE_BRIDGE) { - tor_assert(!was_extrainfo); /* not supported yet */ - SMARTLIST_FOREACH(failed, const char *, cp, - { - if (base16_decode(digest, DIGEST_LEN, cp, strlen(cp))<0) { - log_warn(LD_BUG, "Malformed fingerprint in list: %s", - escaped(cp)); - continue; - } - retry_bridge_descriptor_fetch_directly(digest); - }); + tor_assert(!was_extrainfo); + connection_dir_retry_bridges(failed); } return; /* FFFF should implement for other-than-router-purpose someday */ } @@ -3451,17 +3619,17 @@ * every 10 or 60 seconds (FOO_DESCRIPTOR_RETRY_INTERVAL) in main.c. */ } -/** Helper. Compare two fp_pair_t objects, and return -1, 0, or 1 as - * appropriate. */ +/** Helper. Compare two fp_pair_t objects, and return negative, 0, or + * positive as appropriate. */ static int _compare_pairs(const void **a, const void **b) { const fp_pair_t *fp1 = *a, *fp2 = *b; int r; - if ((r = memcmp(fp1->first, fp2->first, DIGEST_LEN))) + if ((r = fast_memcmp(fp1->first, fp2->first, DIGEST_LEN))) return r; else - return memcmp(fp1->second, fp2->second, DIGEST_LEN); + return fast_memcmp(fp1->second, fp2->second, DIGEST_LEN); } /** Divide a string res of the form FP1-FP2+FP3-FP4...[.z], where each @@ -3516,19 +3684,37 @@ /** Given a directory resource request, containing zero * or more strings separated by plus signs, followed optionally by ".z", store * the strings, in order, into fp_out. If compressed_out is - * non-NULL, set it to 1 if the resource ends in ".z", else set it to 0. If - * decode_hex is true, then delete all elements that aren't hex digests, and - * decode the rest. If sort_uniq is true, then sort the list and remove - * all duplicates. + * non-NULL, set it to 1 if the resource ends in ".z", else set it to 0. + * + * If (flags & DSR_HEX), then delete all elements that aren't hex digests, and + * decode the rest. If (flags & DSR_BASE64), then use "-" rather than "+" as + * a separator, delete all the elements that aren't base64-encoded digests, + * and decode the rest. If (flags & DSR_DIGEST256), these digests should be + * 256 bits long; else they should be 160. + * + * If (flags & DSR_SORT_UNIQ), then sort the list and remove all duplicates. */ int dir_split_resource_into_fingerprints(const char *resource, smartlist_t *fp_out, int *compressed_out, - int decode_hex, int sort_uniq) + int flags) { + const int decode_hex = flags & DSR_HEX; + const int decode_base64 = flags & DSR_BASE64; + const int digests_are_256 = flags & DSR_DIGEST256; + const int sort_uniq = flags & DSR_SORT_UNIQ; + + const int digest_len = digests_are_256 ? DIGEST256_LEN : DIGEST_LEN; + const int hex_digest_len = digests_are_256 ? + HEX_DIGEST256_LEN : HEX_DIGEST_LEN; + const int base64_digest_len = digests_are_256 ? + BASE64_DIGEST256_LEN : BASE64_DIGEST_LEN; smartlist_t *fp_tmp = smartlist_create(); + + tor_assert(!(decode_hex && decode_base64)); tor_assert(fp_out); - smartlist_split_string(fp_tmp, resource, "+", 0, 0); + + smartlist_split_string(fp_tmp, resource, decode_base64?"-":"+", 0, 0); if (compressed_out) *compressed_out = 0; if (smartlist_len(fp_tmp)) { @@ -3540,22 +3726,25 @@ *compressed_out = 1; } } - if (decode_hex) { + if (decode_hex || decode_base64) { + const size_t encoded_len = decode_hex ? hex_digest_len : base64_digest_len; int i; char *cp, *d = NULL; for (i = 0; i < smartlist_len(fp_tmp); ++i) { cp = smartlist_get(fp_tmp, i); - if (strlen(cp) != HEX_DIGEST_LEN) { + if (strlen(cp) != encoded_len) { log_info(LD_DIR, "Skipping digest %s with non-standard length.", escaped(cp)); smartlist_del_keeporder(fp_tmp, i--); goto again; } - d = tor_malloc_zero(DIGEST_LEN); - if (base16_decode(d, DIGEST_LEN, cp, HEX_DIGEST_LEN)<0) { - log_info(LD_DIR, "Skipping non-decodable digest %s", escaped(cp)); - smartlist_del_keeporder(fp_tmp, i--); - goto again; + d = tor_malloc_zero(digest_len); + if (decode_hex ? + (base16_decode(d, digest_len, cp, hex_digest_len)<0) : + (base64_decode(d, digest_len, cp, base64_digest_len)<0)) { + log_info(LD_DIR, "Skipping non-decodable digest %s", escaped(cp)); + smartlist_del_keeporder(fp_tmp, i--); + goto again; } smartlist_set(fp_tmp, i, d); d = NULL; @@ -3565,26 +3754,18 @@ } } if (sort_uniq) { - smartlist_t *fp_tmp2 = smartlist_create(); - int i; - if (decode_hex) - smartlist_sort_digests(fp_tmp); - else + if (decode_hex || decode_base64) { + if (digests_are_256) { + smartlist_sort_digests256(fp_tmp); + smartlist_uniq_digests256(fp_tmp); + } else { + smartlist_sort_digests(fp_tmp); + smartlist_uniq_digests(fp_tmp); + } + } else { smartlist_sort_strings(fp_tmp); - if (smartlist_len(fp_tmp)) - smartlist_add(fp_tmp2, smartlist_get(fp_tmp, 0)); - for (i = 1; i < smartlist_len(fp_tmp); ++i) { - char *cp = smartlist_get(fp_tmp, i); - char *last = smartlist_get(fp_tmp2, smartlist_len(fp_tmp2)-1); - - if ((decode_hex && memcmp(cp, last, DIGEST_LEN)) - || (!decode_hex && strcasecmp(cp, last))) - smartlist_add(fp_tmp2, cp); - else - tor_free(cp); + smartlist_uniq_strings(fp_tmp); } - smartlist_free(fp_tmp); - fp_tmp = fp_tmp2; } smartlist_add_all(fp_out, fp_tmp); smartlist_free(fp_tmp); diff -Nru tor-0.2.1.30/src/or/directory.h tor-0.2.2.35/src/or/directory.h --- tor-0.2.1.30/src/or/directory.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/directory.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,110 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file directory.h + * \brief Header file for directory.c. + **/ + +#ifndef _TOR_DIRECTORY_H +#define _TOR_DIRECTORY_H + +int directories_have_accepted_server_descriptor(void); +char *authority_type_to_string(authority_type_t auth); +void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose, + authority_type_t type, const char *payload, + size_t payload_len, size_t extrainfo_len); +void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose, + const char *resource, + int pds_flags); +void directory_get_from_all_authorities(uint8_t dir_purpose, + uint8_t router_purpose, + const char *resource); +void directory_initiate_command_routerstatus(routerstatus_t *status, + uint8_t dir_purpose, + uint8_t router_purpose, + int anonymized_connection, + const char *resource, + const char *payload, + size_t payload_len, + time_t if_modified_since); +void directory_initiate_command_routerstatus_rend(routerstatus_t *status, + uint8_t dir_purpose, + uint8_t router_purpose, + int anonymized_connection, + const char *resource, + const char *payload, + size_t payload_len, + time_t if_modified_since, + const rend_data_t *rend_query); + +int parse_http_response(const char *headers, int *code, time_t *date, + compress_method_t *compression, char **response); + +int connection_dir_is_encrypted(dir_connection_t *conn); +int connection_dir_reached_eof(dir_connection_t *conn); +int connection_dir_process_inbuf(dir_connection_t *conn); +int connection_dir_finished_flushing(dir_connection_t *conn); +int connection_dir_finished_connecting(dir_connection_t *conn); +void connection_dir_request_failed(dir_connection_t *conn); +void directory_initiate_command(const char *address, const tor_addr_t *addr, + uint16_t or_port, uint16_t dir_port, + int supports_conditional_consensus, + int supports_begindir, const char *digest, + uint8_t dir_purpose, uint8_t router_purpose, + int anonymized_connection, + const char *resource, + const char *payload, size_t payload_len, + time_t if_modified_since); + +#define DSR_HEX (1<<0) +#define DSR_BASE64 (1<<1) +#define DSR_DIGEST256 (1<<2) +#define DSR_SORT_UNIQ (1<<3) +int dir_split_resource_into_fingerprints(const char *resource, + smartlist_t *fp_out, int *compressed_out, + int flags); + +int dir_split_resource_into_fingerprint_pairs(const char *res, + smartlist_t *pairs_out); +char *directory_dump_request_log(void); +void note_request(const char *key, size_t bytes); +int router_supports_extrainfo(const char *identity_digest, int is_authority); + +time_t download_status_increment_failure(download_status_t *dls, + int status_code, const char *item, + int server, time_t now); +/** Increment the failure count of the download_status_t dls, with + * the optional status code sc. */ +#define download_status_failed(dls, sc) \ + download_status_increment_failure((dls), (sc), NULL, \ + get_options()->DirPort, time(NULL)) + +void download_status_reset(download_status_t *dls); +static int download_status_is_ready(download_status_t *dls, time_t now, + int max_failures); +/** Return true iff, as of now, the resource tracked by dls is + * ready to get its download reattempted. */ +static INLINE int +download_status_is_ready(download_status_t *dls, time_t now, + int max_failures) +{ + return (dls->n_download_failures <= max_failures + && dls->next_attempt_at <= now); +} + +static void download_status_mark_impossible(download_status_t *dl); +/** Mark dl as never downloadable. */ +static INLINE void +download_status_mark_impossible(download_status_t *dl) +{ + dl->n_download_failures = IMPOSSIBLE_TO_DOWNLOAD; +} + +int download_status_get_n_failures(const download_status_t *dls); + +#endif + diff -Nru tor-0.2.1.30/src/or/dirserv.c tor-0.2.2.35/src/or/dirserv.c --- tor-0.2.1.30/src/or/dirserv.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/dirserv.c 2011-12-15 16:28:37.000000000 +0000 @@ -5,6 +5,22 @@ #define DIRSERV_PRIVATE #include "or.h" +#include "buffers.h" +#include "config.h" +#include "connection.h" +#include "connection_or.h" +#include "control.h" +#include "directory.h" +#include "dirserv.h" +#include "dirvote.h" +#include "hibernate.h" +#include "microdesc.h" +#include "networkstatus.h" +#include "policies.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" +#include "routerparse.h" /** * \file dirserv.c @@ -27,6 +43,8 @@ extern time_t time_of_process_start; /* from main.c */ +extern long stats_n_seconds_working; /* from main.c */ + /** Do we need to regenerate the v1 directory when someone asks for it? */ static time_t the_directory_is_dirty = 1; /** Do we need to regenerate the v1 runningrouters document when somebody @@ -41,7 +59,7 @@ static cached_dir_t *the_directory = NULL; /** For authoritative directories: the current (v1) network status. */ -static cached_dir_t the_runningrouters = { NULL, NULL, 0, 0, 0, -1 }; +static cached_dir_t the_runningrouters; static void directory_remove_invalid(void); static cached_dir_t *dirserv_regenerate_directory(void); @@ -63,13 +81,16 @@ time_t publish_cutoff); static int dirserv_add_extrainfo(extrainfo_t *ei, const char **msg); +/************** Measured Bandwidth parsing code ******/ +#define MAX_MEASUREMENT_AGE (3*24*60*60) /* 3 days */ + /************** Fingerprint handling code ************/ #define FP_NAMED 1 /**< Listed in fingerprint file. */ #define FP_INVALID 2 /**< Believed invalid. */ #define FP_REJECT 4 /**< We will not publish this router. */ #define FP_BADDIR 8 /**< We'll tell clients to avoid using this as a dir. */ -#define FP_BADEXIT 16 /**< We'll tell clients not to use this as an exit. */ +#define FP_BADEXIT 16 /**< We'll tell clients not to use this as an exit. */ #define FP_UNNAMED 32 /**< Another router has this name in fingerprint file. */ /** Encapsulate a nickname and an FP_* status; target of status_by_digest @@ -99,7 +120,7 @@ return list; } -/** Add the fingerprint fp for the nickname nickname to +/** Add the fingerprint fp for nickname to * the smartlist of fingerprint_entry_t's list. Return 0 if it's * new, or 1 if we replaced the old value. */ @@ -181,8 +202,7 @@ * file. The file format is line-based, with each non-blank holding one * nickname, some space, and a fingerprint for that nickname. On success, * replace the current fingerprint list with the new list and return 0. On - * failure, leave the current fingerprint list untouched, and - * return -1. */ + * failure, leave the current fingerprint list untouched, and return -1. */ int dirserv_load_fingerprint_file(void) { @@ -368,13 +388,19 @@ strmap_size(fingerprint_list->fp_by_name), digestmap_size(fingerprint_list->status_by_digest)); - /* 0.1.1.17-rc was the first version that claimed to be stable, doesn't - * crash and drop circuits all the time, and is even vaguely compatible with - * the current network */ - if (platform && !tor_version_as_new_as(platform,"0.1.1.17-rc")) { + /* Tor 0.2.0.26-rc is the oldest version that currently caches the right + * directory information. Once more of them die off, we should raise this + * minimum. */ + if (platform && !tor_version_as_new_as(platform,"0.2.0.26-rc")) { if (msg) *msg = "Tor version is far too old to work."; return FP_REJECT; + } else if (platform && tor_version_as_new_as(platform,"0.2.1.3-alpha") + && !tor_version_as_new_as(platform, "0.2.1.19")) { + /* These versions mishandled RELAY_EARLY cells on rend circuits. */ + if (msg) + *msg = "Tor version is too buggy to work."; + return FP_REJECT; } result = dirserv_get_name_status(id_digest, nickname); @@ -492,14 +518,15 @@ if (get_options()->DirAllowPrivateAddresses) return 0; /* whatever it is, we're fine with it */ if (!tor_inet_aton(ri->address, &iaddr)) { - log_info(LD_DIRSERV,"Router '%s' published non-IP address '%s'. Refusing.", - ri->nickname, ri->address); + log_info(LD_DIRSERV,"Router %s published non-IP address '%s'. Refusing.", + router_describe(ri), + ri->address); return -1; } if (is_internal_IP(ntohl(iaddr.s_addr), 0)) { log_info(LD_DIRSERV, - "Router '%s' published internal IP address '%s'. Refusing.", - ri->nickname, ri->address); + "Router %s published internal IP address '%s'. Refusing.", + router_describe(ri), ri->address); return -1; /* it's a private IP, we should reject it */ } return 0; @@ -520,7 +547,7 @@ /* Okay. Now check whether the fingerprint is recognized. */ uint32_t status = dirserv_router_get_status(ri, msg); time_t now; - int severity = complain ? LOG_NOTICE : LOG_INFO; + int severity = (complain && ri->contact_info) ? LOG_NOTICE : LOG_INFO; tor_assert(msg); if (status & FP_REJECT) return -1; /* msg is already set. */ @@ -528,10 +555,11 @@ /* Is there too much clock skew? */ now = time(NULL); if (ri->cache_info.published_on > now+ROUTER_ALLOW_SKEW) { - log_fn(severity, LD_DIRSERV, "Publication time for nickname '%s' is too " + log_fn(severity, LD_DIRSERV, "Publication time for %s is too " "far (%d minutes) in the future; possible clock skew. Not adding " "(%s)", - ri->nickname, (int)((ri->cache_info.published_on-now)/60), + router_describe(ri), + (int)((ri->cache_info.published_on-now)/60), esc_router_info(ri)); *msg = "Rejected: Your clock is set too far in the future, or your " "timezone is not correct."; @@ -539,9 +567,10 @@ } if (ri->cache_info.published_on < now-ROUTER_MAX_AGE_TO_PUBLISH) { log_fn(severity, LD_DIRSERV, - "Publication time for router with nickname '%s' is too far " + "Publication time for %s is too far " "(%d minutes) in the past. Not adding (%s)", - ri->nickname, (int)((now-ri->cache_info.published_on)/60), + router_describe(ri), + (int)((now-ri->cache_info.published_on)/60), esc_router_info(ri)); *msg = "Rejected: Server is expired, or your clock is too far in the past," " or your timezone is not correct."; @@ -549,9 +578,10 @@ } if (dirserv_router_has_valid_address(ri) < 0) { log_fn(severity, LD_DIRSERV, - "Router with nickname '%s' has invalid address '%s'. " + "Router %s has invalid address '%s'. " "Not adding (%s).", - ri->nickname, ri->address, + router_describe(ri), + ri->address, esc_router_info(ri)); *msg = "Rejected: Address is not an IP, or IP is a private address."; return -1; @@ -694,9 +724,9 @@ && router_differences_are_cosmetic(ri_old, ri) && !router_is_me(ri)) { log_info(LD_DIRSERV, - "Not replacing descriptor from '%s' (source: %s); " + "Not replacing descriptor from %s (source: %s); " "differences are cosmetic.", - ri->nickname, source); + router_describe(ri), source); *msg = "Not replacing router descriptor; no information has changed since " "the last one with this identity."; control_event_or_authdir_new_descriptor("DROPPED", @@ -712,6 +742,10 @@ desc = tor_strndup(ri->cache_info.signed_descriptor_body, desclen); nickname = tor_strdup(ri->nickname); + /* Tell if we're about to need to launch a test if we add this. */ + ri->needs_retest_if_added = + dirserv_should_launch_reachability_test(ri, ri_old); + r = router_add_to_routerlist(ri, msg, 0, 0); if (!WRA_WAS_ADDED(r)) { /* unless the routerinfo was fine, just out-of-date */ @@ -726,7 +760,7 @@ changed = smartlist_create(); smartlist_add(changed, ri); - control_event_descriptors_changed(changed); + routerlist_descriptors_added(changed, 0); smartlist_free(changed); if (!*msg) { *msg = ri->is_valid ? "Descriptor for valid server accepted" : @@ -794,10 +828,12 @@ for (i = 0; i < smartlist_len(rl->routers); ++i) { const char *msg; routerinfo_t *ent = smartlist_get(rl->routers, i); + char description[NODE_DESC_BUF_LEN]; uint32_t r = dirserv_router_get_status(ent, &msg); + router_get_description(description, ent); if (r & FP_REJECT) { - log_info(LD_DIRSERV, "Router '%s' is now rejected: %s", - ent->nickname, msg?msg:""); + log_info(LD_DIRSERV, "Router %s is now rejected: %s", + description, msg?msg:""); routerlist_remove(rl, ent, 0, time(NULL)); i--; changed = 1; @@ -805,25 +841,25 @@ } if (bool_neq((r & FP_NAMED), ent->is_named)) { log_info(LD_DIRSERV, - "Router '%s' is now %snamed.", ent->nickname, + "Router %s is now %snamed.", description, (r&FP_NAMED)?"":"un"); ent->is_named = (r&FP_NAMED)?1:0; changed = 1; } if (bool_neq((r & FP_INVALID), !ent->is_valid)) { - log_info(LD_DIRSERV, "Router '%s' is now %svalid.", ent->nickname, + log_info(LD_DIRSERV, "Router '%s' is now %svalid.", description, (r&FP_INVALID) ? "in" : ""); ent->is_valid = (r&FP_INVALID)?0:1; changed = 1; } if (bool_neq((r & FP_BADDIR), ent->is_bad_directory)) { - log_info(LD_DIRSERV, "Router '%s' is now a %s directory", ent->nickname, + log_info(LD_DIRSERV, "Router '%s' is now a %s directory", description, (r & FP_BADDIR) ? "bad" : "good"); ent->is_bad_directory = (r&FP_BADDIR) ? 1: 0; changed = 1; } if (bool_neq((r & FP_BADEXIT), ent->is_bad_exit)) { - log_info(LD_DIRSERV, "Router '%s' is now a %s exit", ent->nickname, + log_info(LD_DIRSERV, "Router '%s' is now a %s exit", description, (r & FP_BADEXIT) ? "bad" : "good"); ent->is_bad_exit = (r&FP_BADEXIT) ? 1: 0; changed = 1; @@ -835,46 +871,6 @@ routerlist_assert_ok(rl); } -/** Write a list of unregistered descriptors into a newly allocated - * string and return it. Used by dirserv operators to keep track of - * fast nodes that haven't registered. - */ -int -getinfo_helper_dirserv_unregistered(control_connection_t *control_conn, - const char *question, char **answer_out) -{ - smartlist_t *answerlist; - char buf[1024]; - char *answer; - int min_bw = atoi(question); - routerlist_t *rl = router_get_routerlist(); - - (void) control_conn; - - if (strcmpstart(question, "unregistered-servers-")) - return 0; - question += strlen("unregistered-servers-"); - - answerlist = smartlist_create(); - SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ent, { - uint32_t r = dirserv_router_get_status(ent, NULL); - if (router_get_advertised_bandwidth(ent) >= (size_t)min_bw && - !(r & FP_NAMED)) { - /* then log this one */ - tor_snprintf(buf, sizeof(buf), - "%s: BW %d on '%s'.", - ent->nickname, router_get_advertised_bandwidth(ent), - ent->platform ? ent->platform : ""); - smartlist_add(answerlist, tor_strdup(buf)); - } - }); - answer = smartlist_join_strings(answerlist, "\r\n", 0, NULL); - SMARTLIST_FOREACH(answerlist, char *, cp, tor_free(cp)); - smartlist_free(answerlist); - *answer_out = answer; - return 0; -} - /** Mark the directory as dirty -- when we're next asked for a * directory, we will rebuild it instead of reusing the most recently * generated one. @@ -933,28 +929,66 @@ return tor_strdup(buf); } +static INLINE int +running_long_enough_to_decide_unreachable(void) +{ + return time_of_process_start + + get_options()->TestingAuthDirTimeToLearnReachability < approx_time(); +} + /** Each server needs to have passed a reachability test no more * than this number of seconds ago, or he is listed as down in * the directory. */ #define REACHABLE_TIMEOUT (45*60) +/** If we tested a router and found it reachable _at least this long_ after it + * declared itself hibernating, it is probably done hibernating and we just + * missed a descriptor from it. */ +#define HIBERNATION_PUBLICATION_SKEW (60*60) + /** Treat a router as alive if * - It's me, and I'm not hibernating. * or - We've found it reachable recently. */ void dirserv_set_router_is_running(routerinfo_t *router, time_t now) { + /*XXXX023 This function is a mess. Separate out the part that calculates + whether it's reachable and the part that tells rephist that the router was + unreachable. + */ int answer; - if (router_is_me(router) && !we_are_hibernating()) + if (router_is_me(router)) { + /* We always know if we are down ourselves. */ + answer = ! we_are_hibernating(); + } else if (router->is_hibernating && + (router->cache_info.published_on + + HIBERNATION_PUBLICATION_SKEW) > router->last_reachable) { + /* A hibernating router is down unless we (somehow) had contact with it + * since it declared itself to be hibernating. */ + answer = 0; + } else if (get_options()->AssumeReachable) { + /* If AssumeReachable, everybody is up unless they say they are down! */ answer = 1; - else - answer = get_options()->AssumeReachable || - now < router->last_reachable + REACHABLE_TIMEOUT; + } else { + /* Otherwise, a router counts as up if we found it reachable in the last + REACHABLE_TIMEOUT seconds. */ + answer = (now < router->last_reachable + REACHABLE_TIMEOUT); + } - if (!answer) { - /* not considered reachable. tell rephist. */ - rep_hist_note_router_unreachable(router->cache_info.identity_digest, now); + if (!answer && running_long_enough_to_decide_unreachable()) { + /* Not considered reachable. tell rephist about that. + + Because we launch a reachability test for each router every + REACHABILITY_TEST_CYCLE_PERIOD seconds, then the router has probably + been down since at least that time after we last successfully reached + it. + */ + time_t when = now; + if (router->last_reachable && + router->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD < now) + when = router->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD; + rep_hist_note_router_unreachable(router->cache_info.identity_digest, when); } router->is_running = answer; @@ -965,7 +999,6 @@ * *router_status_out. Return 0 on success, -1 on failure. * * If for_controller is true, include the routers with very old descriptors. - * If for_controller is >1, use the verbose nickname format. */ int list_server_status_v1(smartlist_t *routers, char **router_status_out, @@ -985,23 +1018,22 @@ rs_entries = smartlist_create(); - SMARTLIST_FOREACH(routers, routerinfo_t *, ri, - { + SMARTLIST_FOREACH_BEGIN(routers, routerinfo_t *, ri) { if (authdir) { /* Update router status in routerinfo_t. */ dirserv_set_router_is_running(ri, now); } - if (for_controller == 1 || ri->cache_info.published_on >= cutoff) - smartlist_add(rs_entries, list_single_server_status(ri, ri->is_running)); - else if (for_controller > 2) { + if (for_controller) { char name_buf[MAX_VERBOSE_NICKNAME_LEN+2]; char *cp = name_buf; if (!ri->is_running) *cp++ = '!'; router_get_verbose_nickname(cp, ri); smartlist_add(rs_entries, tor_strdup(name_buf)); + } else if (ri->cache_info.published_on >= cutoff) { + smartlist_add(rs_entries, list_single_server_status(ri, ri->is_running)); } - }); + } SMARTLIST_FOREACH_END(ri); *router_status_out = smartlist_join_strings(rs_entries, " ", 0, NULL); @@ -1119,7 +1151,8 @@ return -1; } note_crypto_pk_op(SIGN_DIR); - if (router_append_dirobj_signature(buf,buf_len,digest,private_key)<0) { + if (router_append_dirobj_signature(buf,buf_len,digest,DIGEST_LEN, + private_key)<0) { tor_free(buf); return -1; } @@ -1144,18 +1177,21 @@ { routerinfo_t *me; uint32_t addr; + int refuseunknown; if (options->FetchDirInfoEarly) return 1; if (options->BridgeRelay == 1) return 0; if (server_mode(options) && router_pick_published_address(options, &addr)<0) return 1; /* we don't know our IP address; ask an authority. */ - if (options->DirPort == 0) + refuseunknown = ! router_my_exit_policy_is_reject_star() && + should_refuse_unknown_exits(options); + if (options->DirPort == 0 && !refuseunknown) return 0; if (!server_mode(options) || !advertised_server_mode()) return 0; me = router_get_my_routerinfo(); - if (!me || !me->dir_port) + if (!me || (!me->dir_port && !refuseunknown)) return 0; /* if dirport not advertised, return 0 too */ return 1; } @@ -1195,7 +1231,14 @@ int directory_caches_dir_info(or_options_t *options) { - return options->BridgeRelay != 0 || options->DirPort != 0; + if (options->BridgeRelay || options->DirPort) + return 1; + if (!server_mode(options) || !advertised_server_mode()) + return 0; + /* We need an up-to-date view of network info if we're going to try to + * block exit attempts from unknown relays. */ + return ! router_my_exit_policy_is_reject_star() && + should_refuse_unknown_exits(options); } /** Return 1 if we want to allow remote people to ask us directory @@ -1238,14 +1281,14 @@ static cached_dir_t *cached_directory = NULL; /** The v1 runningrouters document we'll serve (as a cache or as an authority) * if requested. */ -static cached_dir_t cached_runningrouters = { NULL, NULL, 0, 0, 0, -1 }; +static cached_dir_t cached_runningrouters; /** Used for other dirservers' v2 network statuses. Map from hexdigest to * cached_dir_t. */ static digestmap_t *cached_v2_networkstatus = NULL; -/** The v3 consensus network status that we're currently serving. */ -static cached_dir_t *cached_v3_networkstatus = NULL; +/** Map from flavor name to the v3 consensuses that we're currently serving. */ +static strmap_t *cached_consensuses = NULL; /** Possibly replace the contents of d with the value of * directory published on when, unless when is older than @@ -1319,7 +1362,11 @@ static void _free_cached_dir(void *_d) { - cached_dir_t *d = (cached_dir_t *)_d; + cached_dir_t *d; + if (!_d) + return; + + d = (cached_dir_t *)_d; cached_dir_decref(d); } @@ -1413,17 +1460,26 @@ } } -/** Replace the v3 consensus networkstatus that we're serving with - * networkstatus, published at published. No validation is - * performed. */ +/** Replace the v3 consensus networkstatus of type flavor_name that + * we're serving with networkstatus, published at published. No + * validation is performed. */ void -dirserv_set_cached_networkstatus_v3(const char *networkstatus, - time_t published) -{ - if (cached_v3_networkstatus) - cached_dir_decref(cached_v3_networkstatus); - cached_v3_networkstatus = new_cached_dir( - tor_strdup(networkstatus), published); +dirserv_set_cached_consensus_networkstatus(const char *networkstatus, + const char *flavor_name, + const digests_t *digests, + time_t published) +{ + cached_dir_t *new_networkstatus; + cached_dir_t *old_networkstatus; + if (!cached_consensuses) + cached_consensuses = strmap_new(); + + new_networkstatus = new_cached_dir(tor_strdup(networkstatus), published); + memcpy(&new_networkstatus->digests, digests, sizeof(digests_t)); + old_networkstatus = strmap_set(cached_consensuses, flavor_name, + new_networkstatus); + if (old_networkstatus) + cached_dir_decref(old_networkstatus); } /** Remove any v2 networkstatus from the directory cache that was published @@ -1520,7 +1576,8 @@ { char *new_directory=NULL; - if (dirserv_dump_directory_to_string(&new_directory, get_identity_key())) { + if (dirserv_dump_directory_to_string(&new_directory, + get_server_identity_key())) { log_warn(LD_BUG, "Error creating directory."); tor_free(new_directory); return NULL; @@ -1550,7 +1607,7 @@ char digest[DIGEST_LEN]; char published[ISO_TIME_LEN+1]; size_t len; - crypto_pk_env_t *private_key = get_identity_key(); + crypto_pk_env_t *private_key = get_server_identity_key(); char *identity_pkey; /* Identity key, DER64-encoded. */ size_t identity_pkey_len; @@ -1577,7 +1634,8 @@ goto err; } note_crypto_pk_op(SIGN_DIR); - if (router_append_dirobj_signature(s, len, digest, private_key)<0) + if (router_append_dirobj_signature(s, len, digest, DIGEST_LEN, + private_key)<0) goto err; set_cached_dir(&the_runningrouters, s, time(NULL)); @@ -1605,9 +1663,11 @@ /** Return the latest downloaded consensus networkstatus in encoded, signed, * optionally compressed format, suitable for sending to clients. */ cached_dir_t * -dirserv_get_consensus(void) +dirserv_get_consensus(const char *flavor_name) { - return cached_v3_networkstatus; + if (!cached_consensuses) + return NULL; + return strmap_get(cached_consensuses, flavor_name); } /** For authoritative directories: the current (v2) network status. */ @@ -1632,12 +1692,6 @@ /** If a router's MTBF is at least this value, then it is always stable. * See above. (Corresponds to about 7 days for current decay rates.) */ #define MTBF_TO_GUARANTEE_STABLE (60*60*24*5) -/** Similarly, we protect sufficiently fast nodes from being pushed - * out of the set of Fast nodes. */ -#define BANDWIDTH_TO_GUARANTEE_FAST ROUTER_REQUIRED_MIN_BANDWIDTH -/** Similarly, every node with sufficient bandwidth can be considered - * for Guard status. */ -#define BANDWIDTH_TO_GUARANTEE_GUARD (250*1024) /** Similarly, every node with at least this much weighted time known can be * considered familiar enough to be a guard. Corresponds to about 20 days for * current decay rates. @@ -1645,7 +1699,7 @@ #define TIME_KNOWN_TO_GUARANTEE_FAMILIAR (8*24*60*60) /** Similarly, every node with sufficient WFU is around enough to be a guard. */ -#define WFU_TO_GUARANTEE_GUARD (0.995) +#define WFU_TO_GUARANTEE_GUARD (0.98) /* Thresholds for server performance: set by * dirserv_compute_performance_thresholds, and used by @@ -1700,9 +1754,12 @@ { if (need_uptime) { if (!enough_mtbf_info) { - /* XXX022 Once most authorities are on v3, we should change the rule from + /* XXX023 Once most authorities are on v3, we should change the rule from * "use uptime if we don't have mtbf data" to "don't advertise Stable on - * v3 if we don't have enough mtbf data." */ + * v3 if we don't have enough mtbf data." Or maybe not, since if we ever + * hit a point where we need to reset a lot of authorities at once, + * none of them would be in a position to declare Stable. + */ long uptime = real_uptime(router, now); if ((unsigned)uptime < stable_uptime && (unsigned)uptime < UPTIME_TO_GUARANTEE_STABLE) @@ -1725,7 +1782,7 @@ /** Return true iff router should be assigned the "HSDir" flag. * Right now this means it advertises support for it, it has a high - * uptime, and it's currently considered Running. + * uptime, it has a DirPort open, and it's currently considered Running. * * This function needs to be called after router-\>is_running has * been set. @@ -1733,9 +1790,31 @@ static int dirserv_thinks_router_is_hs_dir(routerinfo_t *router, time_t now) { - long uptime = real_uptime(router, now); - return (router->wants_to_be_hs_dir && + long uptime; + + /* If we haven't been running for at least + * get_options()->MinUptimeHidServDirectoryV2 seconds, we can't + * have accurate data telling us a relay has been up for at least + * that long. We also want to allow a bit of slack: Reachability + * tests aren't instant. If we haven't been running long enough, + * trust the relay. */ + + if (stats_n_seconds_working > + get_options()->MinUptimeHidServDirectoryV2 * 1.1) + uptime = MIN(rep_hist_get_uptime(router->cache_info.identity_digest, now), + real_uptime(router, now)); + else + uptime = real_uptime(router, now); + + /* XXX We shouldn't need to check dir_port, but we do because of + * bug 1693. In the future, once relays set wants_to_be_hs_dir + * correctly, we can revert to only checking dir_port if router's + * version is too old. */ + /* XXX Unfortunately, we need to keep checking dir_port until all + * *clients* suffering from bug 2722 are obsolete. The first version + * to fix the bug was 0.2.2.25-alpha. */ + return (router->wants_to_be_hs_dir && router->dir_port && uptime > get_options()->MinUptimeHidServDirectoryV2 && router->is_running); } @@ -1756,6 +1835,7 @@ long *tks; double *mtbfs, *wfus; time_t now = time(NULL); + or_options_t *options = get_options(); /* initialize these all here, in case there are no routers */ stable_uptime = 0; @@ -1790,7 +1870,8 @@ if (router_is_active(ri, now)) { const char *id = ri->cache_info.identity_digest; uint32_t bw; - ri->is_exit = exit_policy_is_general_exit(ri->exit_policy); + ri->is_exit = (!router_exit_policy_rejects_all(ri) && + exit_policy_is_general_exit(ri->exit_policy)); uptimes[n_active] = (uint32_t)real_uptime(ri, now); mtbfs[n_active] = rep_hist_get_stability(id, now); tks [n_active] = rep_hist_get_weighted_time_known(id, now); @@ -1824,8 +1905,11 @@ if (guard_tk > TIME_KNOWN_TO_GUARANTEE_FAMILIAR) guard_tk = TIME_KNOWN_TO_GUARANTEE_FAMILIAR; - if (fast_bandwidth > BANDWIDTH_TO_GUARANTEE_FAST) - fast_bandwidth = BANDWIDTH_TO_GUARANTEE_FAST; + /* Protect sufficiently fast nodes from being pushed out of the set + * of Fast nodes. */ + if (options->AuthDirFastGuarantee && + fast_bandwidth > options->AuthDirFastGuarantee) + fast_bandwidth = (uint32_t)options->AuthDirFastGuarantee; /* Now that we have a time-known that 7/8 routers are known longer than, * fill wfus with the wfu of every such "familiar" router. */ @@ -1897,16 +1981,20 @@ * which has at least buf_len free characters. Do NUL-termination. * Use the same format as in network-status documents. If version is * non-NULL, add a "v" line for the platform. Return 0 on success, -1 on - * failure. If first_line_only is true, don't include any flags - * or version line. + * failure. + * + * The format argument has three possible values: + * NS_V2 - Output an entry suitable for a V2 NS opinion document + * NS_V3_CONSENSUS - Output the first portion of a V3 NS consensus entry + * NS_V3_CONSENSUS_MICRODESC - Output the first portion of a V3 microdesc + * consensus entry. + * NS_V3_VOTE - Output a complete V3 NS vote + * NS_CONTROL_PORT - Output a NS document for the control port */ int routerstatus_format_entry(char *buf, size_t buf_len, routerstatus_t *rs, const char *version, - int first_line_only, int v2_format) -/* XXX: first_line_only and v2_format should probably be be both - * replaced by a single purpose parameter. - */ + routerstatus_format_type_t format) { int r; struct in_addr in; @@ -1925,10 +2013,11 @@ tor_inet_ntoa(&in, ipaddr, sizeof(ipaddr)); r = tor_snprintf(buf, buf_len, - "r %s %s %s %s %s %d %d\n", + "r %s %s %s%s%s %s %d %d\n", rs->nickname, identity64, - digest64, + (format==NS_V3_CONSENSUS_MICRODESC)?"":digest64, + (format==NS_V3_CONSENSUS_MICRODESC)?"":" ", published, ipaddr, (int)rs->or_port, @@ -1937,7 +2026,12 @@ log_warn(LD_BUG, "Not enough space in buffer."); return -1; } - if (first_line_only) + + /* TODO: Maybe we want to pass in what we need to build the rest of + * this here, instead of in the caller. Then we could use the + * networkstatus_type_t values, with an additional control port value + * added -MP */ + if (format == NS_V3_CONSENSUS || format == NS_V3_CONSENSUS_MICRODESC) return 0; cp = buf + strlen(buf); @@ -1974,62 +2068,87 @@ cp += strlen(cp); } - if (!v2_format) { + if (format != NS_V2) { routerinfo_t* desc = router_get_by_digest(rs->identity_digest); + uint32_t bw; - /* Blow up more or less nicely if we didn't get anything or not the - * thing we expected. - */ - if (!desc) { - char id[HEX_DIGEST_LEN+1]; - char dd[HEX_DIGEST_LEN+1]; - - base16_encode(id, sizeof(id), rs->identity_digest, DIGEST_LEN); - base16_encode(dd, sizeof(dd), rs->descriptor_digest, DIGEST_LEN); - log_warn(LD_BUG, "Cannot get any descriptor for %s " - "(wanted descriptor %s).", - id, dd); - return -1; - }; - if (memcmp(desc->cache_info.signed_descriptor_digest, - rs->descriptor_digest, - DIGEST_LEN)) { - char rl_d[HEX_DIGEST_LEN+1]; - char rs_d[HEX_DIGEST_LEN+1]; - char id[HEX_DIGEST_LEN+1]; - - base16_encode(rl_d, sizeof(rl_d), - desc->cache_info.signed_descriptor_digest, DIGEST_LEN); - base16_encode(rs_d, sizeof(rs_d), rs->descriptor_digest, DIGEST_LEN); - base16_encode(id, sizeof(id), rs->identity_digest, DIGEST_LEN); - log_err(LD_BUG, "descriptor digest in routerlist does not match " - "the one in routerstatus: %s vs %s " - "(router %s)\n", - rl_d, rs_d, id); - - tor_assert(!memcmp(desc->cache_info.signed_descriptor_digest, - rs->descriptor_digest, - DIGEST_LEN)); - }; + if (format != NS_CONTROL_PORT) { + /* Blow up more or less nicely if we didn't get anything or not the + * thing we expected. + */ + if (!desc) { + char id[HEX_DIGEST_LEN+1]; + char dd[HEX_DIGEST_LEN+1]; + + base16_encode(id, sizeof(id), rs->identity_digest, DIGEST_LEN); + base16_encode(dd, sizeof(dd), rs->descriptor_digest, DIGEST_LEN); + log_warn(LD_BUG, "Cannot get any descriptor for %s " + "(wanted descriptor %s).", + id, dd); + return -1; + }; + + /* This assert can fire for the control port, because + * it can request NS documents before all descriptors + * have been fetched. */ + if (tor_memneq(desc->cache_info.signed_descriptor_digest, + rs->descriptor_digest, + DIGEST_LEN)) { + char rl_d[HEX_DIGEST_LEN+1]; + char rs_d[HEX_DIGEST_LEN+1]; + char id[HEX_DIGEST_LEN+1]; + + base16_encode(rl_d, sizeof(rl_d), + desc->cache_info.signed_descriptor_digest, DIGEST_LEN); + base16_encode(rs_d, sizeof(rs_d), rs->descriptor_digest, DIGEST_LEN); + base16_encode(id, sizeof(id), rs->identity_digest, DIGEST_LEN); + log_err(LD_BUG, "descriptor digest in routerlist does not match " + "the one in routerstatus: %s vs %s " + "(router %s)\n", + rl_d, rs_d, id); + + tor_assert(tor_memeq(desc->cache_info.signed_descriptor_digest, + rs->descriptor_digest, + DIGEST_LEN)); + }; + } + if (format == NS_CONTROL_PORT && rs->has_bandwidth) { + bw = rs->bandwidth; + } else { + tor_assert(desc); + bw = router_get_advertised_bandwidth_capped(desc) / 1000; + } r = tor_snprintf(cp, buf_len - (cp-buf), - "w Bandwidth=%d\n", - router_get_advertised_bandwidth_capped(desc) / 1024); + "w Bandwidth=%d\n", bw); + if (r<0) { log_warn(LD_BUG, "Not enough space in buffer."); return -1; } cp += strlen(cp); + if (format == NS_V3_VOTE && rs->has_measured_bw) { + *--cp = '\0'; /* Kill "\n" */ + r = tor_snprintf(cp, buf_len - (cp-buf), + " Measured=%d\n", rs->measured_bw); + if (r<0) { + log_warn(LD_BUG, "Not enough space in buffer for weight line."); + return -1; + } + cp += strlen(cp); + } - summary = policy_summarize(desc->exit_policy); - r = tor_snprintf(cp, buf_len - (cp-buf), "p %s\n", summary); - if (r<0) { - log_warn(LD_BUG, "Not enough space in buffer."); + if (desc) { + summary = policy_summarize(desc->exit_policy); + r = tor_snprintf(cp, buf_len - (cp-buf), "p %s\n", summary); + if (r<0) { + log_warn(LD_BUG, "Not enough space in buffer."); + tor_free(summary); + return -1; + } + cp += strlen(cp); tor_free(summary); - return -1; } - cp += strlen(cp); - tor_free(summary); } return 0; @@ -2083,9 +2202,9 @@ /* They're equal! Compare by identity digest, so there's a * deterministic order and we avoid flapping. */ - return memcmp(first->cache_info.identity_digest, - second->cache_info.identity_digest, - DIGEST_LEN); + return fast_memcmp(first->cache_info.identity_digest, + second->cache_info.identity_digest, + DIGEST_LEN); } /** Given a list of routerinfo_t in routers, return a new digestmap_t @@ -2130,11 +2249,77 @@ return omit_as_sybil; } +/** Return non-zero iff a relay running the Tor version specified in + * platform is suitable for use as a potential entry guard. */ +static int +is_router_version_good_for_possible_guard(const char *platform) +{ + static int parsed_versions_initialized = 0; + static tor_version_t first_good_0_2_1_guard_version; + static tor_version_t first_good_0_2_2_guard_version; + static tor_version_t first_good_later_guard_version; + + tor_version_t router_version; + + /* XXX023 This block should be extracted into its own function. */ + /* XXXX Begin code copied from tor_version_as_new_as (in routerparse.c) */ + { + char *s, *s2, *start; + char tmp[128]; + + tor_assert(platform); + + if (strcmpstart(platform,"Tor ")) /* nonstandard Tor; be safe and say yes */ + return 1; + + start = (char *)eat_whitespace(platform+3); + if (!*start) return 0; + s = (char *)find_whitespace(start); /* also finds '\0', which is fine */ + s2 = (char*)eat_whitespace(s); + if (!strcmpstart(s2, "(r") || !strcmpstart(s2, "(git-")) + s = (char*)find_whitespace(s2); + + if ((size_t)(s-start+1) >= sizeof(tmp)) /* too big, no */ + return 0; + strlcpy(tmp, start, s-start+1); + + if (tor_version_parse(tmp, &router_version)<0) { + log_info(LD_DIR,"Router version '%s' unparseable.",tmp); + return 1; /* be safe and say yes */ + } + } + /* XXXX End code copied from tor_version_as_new_as (in routerparse.c) */ + + if (!parsed_versions_initialized) { + /* CVE-2011-2769 was fixed on the relay side in Tor versions + * 0.2.1.31, 0.2.2.34, and 0.2.3.6-alpha. */ + tor_assert(tor_version_parse("0.2.1.31", + &first_good_0_2_1_guard_version)>=0); + tor_assert(tor_version_parse("0.2.2.34", + &first_good_0_2_2_guard_version)>=0); + tor_assert(tor_version_parse("0.2.3.6-alpha", + &first_good_later_guard_version)>=0); + + /* Don't parse these constant version strings once for every relay + * for every vote. */ + parsed_versions_initialized = 1; + } + + return ((tor_version_same_series(&first_good_0_2_1_guard_version, + &router_version) && + tor_version_compare(&first_good_0_2_1_guard_version, + &router_version) <= 0) || + (tor_version_same_series(&first_good_0_2_2_guard_version, + &router_version) && + tor_version_compare(&first_good_0_2_2_guard_version, + &router_version) <= 0) || + (tor_version_compare(&first_good_later_guard_version, + &router_version) <= 0)); +} + /** Extract status information from ri and from other authority * functions and store it in rs>. If naming, consider setting - * the named flag in rs. If not exits_can_be_guards, never mark - * an exit as a guard. If listbadexits, consider setting the badexit - * flag. + * the named flag in rs. * * We assume that ri-\>is_running has already been set, e.g. by * dirserv_set_router_is_running(ri, now); @@ -2142,11 +2327,14 @@ void set_routerstatus_from_routerinfo(routerstatus_t *rs, routerinfo_t *ri, time_t now, - int naming, int exits_can_be_guards, - int listbadexits, int listbaddirs) + int naming, int listbadexits, + int listbaddirs, int vote_on_hsdirs) { + const or_options_t *options = get_options(); int unstable_version = !tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs"); + uint32_t routerbw = router_get_advertised_bandwidth(ri); + memset(rs, 0, sizeof(routerstatus_t)); rs->is_authority = @@ -2172,11 +2360,12 @@ rs->is_valid = ri->is_valid; if (rs->is_fast && - (!rs->is_exit || exits_can_be_guards) && - (router_get_advertised_bandwidth(ri) >= BANDWIDTH_TO_GUARANTEE_GUARD || - router_get_advertised_bandwidth(ri) >= - (exits_can_be_guards ? guard_bandwidth_including_exits : - guard_bandwidth_excluding_exits))) { + ((options->AuthDirGuardBWGuarantee && + routerbw >= options->AuthDirGuardBWGuarantee) || + routerbw >= MIN(guard_bandwidth_including_exits, + guard_bandwidth_excluding_exits)) && + (options->GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays || + is_router_version_good_for_possible_guard(ri->platform))) { long tk = rep_hist_get_weighted_time_known( ri->cache_info.identity_digest, now); double wfu = rep_hist_get_weighted_fractional_uptime( @@ -2188,7 +2377,7 @@ rs->is_bad_directory = listbaddirs && ri->is_bad_directory; rs->is_bad_exit = listbadexits && ri->is_bad_exit; ri->is_hs_dir = dirserv_thinks_router_is_hs_dir(ri, now); - rs->is_hs_dir = ri->is_hs_dir; + rs->is_hs_dir = vote_on_hsdirs && ri->is_hs_dir; rs->is_v2_dir = ri->dir_port != 0; if (!strcasecmp(ri->nickname, UNNAMED_ROUTER_NICKNAME)) @@ -2232,6 +2421,177 @@ router->is_bad_exit = router->is_bad_directory = 0; } +/** + * Helper function to parse out a line in the measured bandwidth file + * into a measured_bw_line_t output structure. Returns -1 on failure + * or 0 on success. + */ +int +measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line) +{ + char *line = tor_strdup(orig_line); + char *cp = line; + int got_bw = 0; + int got_node_id = 0; + char *strtok_state; /* lame sauce d'jour */ + cp = tor_strtok_r(cp, " \t", &strtok_state); + + if (!cp) { + log_warn(LD_DIRSERV, "Invalid line in bandwidth file: %s", + escaped(orig_line)); + tor_free(line); + return -1; + } + + if (orig_line[strlen(orig_line)-1] != '\n') { + log_warn(LD_DIRSERV, "Incomplete line in bandwidth file: %s", + escaped(orig_line)); + tor_free(line); + return -1; + } + + do { + if (strcmpstart(cp, "bw=") == 0) { + int parse_ok = 0; + char *endptr; + if (got_bw) { + log_warn(LD_DIRSERV, "Double bw= in bandwidth file line: %s", + escaped(orig_line)); + tor_free(line); + return -1; + } + cp+=strlen("bw="); + + out->bw = tor_parse_long(cp, 0, 0, LONG_MAX, &parse_ok, &endptr); + if (!parse_ok || (*endptr && !TOR_ISSPACE(*endptr))) { + log_warn(LD_DIRSERV, "Invalid bandwidth in bandwidth file line: %s", + escaped(orig_line)); + tor_free(line); + return -1; + } + got_bw=1; + } else if (strcmpstart(cp, "node_id=$") == 0) { + if (got_node_id) { + log_warn(LD_DIRSERV, "Double node_id= in bandwidth file line: %s", + escaped(orig_line)); + tor_free(line); + return -1; + } + cp+=strlen("node_id=$"); + + if (strlen(cp) != HEX_DIGEST_LEN || + base16_decode(out->node_id, DIGEST_LEN, cp, HEX_DIGEST_LEN)) { + log_warn(LD_DIRSERV, "Invalid node_id in bandwidth file line: %s", + escaped(orig_line)); + tor_free(line); + return -1; + } + strlcpy(out->node_hex, cp, sizeof(out->node_hex)); + got_node_id=1; + } + } while ((cp = tor_strtok_r(NULL, " \t", &strtok_state))); + + if (got_bw && got_node_id) { + tor_free(line); + return 0; + } else { + log_warn(LD_DIRSERV, "Incomplete line in bandwidth file: %s", + escaped(orig_line)); + tor_free(line); + return -1; + } +} + +/** + * Helper function to apply a parsed measurement line to a list + * of bandwidth statuses. Returns true if a line is found, + * false otherwise. + */ +int +measured_bw_line_apply(measured_bw_line_t *parsed_line, + smartlist_t *routerstatuses) +{ + routerstatus_t *rs = NULL; + if (!routerstatuses) + return 0; + + rs = smartlist_bsearch(routerstatuses, parsed_line->node_id, + compare_digest_to_routerstatus_entry); + + if (rs) { + rs->has_measured_bw = 1; + rs->measured_bw = (uint32_t)parsed_line->bw; + } else { + log_info(LD_DIRSERV, "Node ID %s not found in routerstatus list", + parsed_line->node_hex); + } + + return rs != NULL; +} + +/** + * Read the measured bandwidth file and apply it to the list of + * routerstatuses. Returns -1 on error, 0 otherwise. + */ +int +dirserv_read_measured_bandwidths(const char *from_file, + smartlist_t *routerstatuses) +{ + char line[256]; + FILE *fp = fopen(from_file, "r"); + int applied_lines = 0; + time_t file_time; + int ok; + if (fp == NULL) { + log_warn(LD_CONFIG, "Can't open bandwidth file at configured location: %s", + from_file); + return -1; + } + + if (!fgets(line, sizeof(line), fp) + || !strlen(line) || line[strlen(line)-1] != '\n') { + log_warn(LD_DIRSERV, "Long or truncated time in bandwidth file: %s", + escaped(line)); + fclose(fp); + return -1; + } + + line[strlen(line)-1] = '\0'; + file_time = tor_parse_ulong(line, 10, 0, ULONG_MAX, &ok, NULL); + if (!ok) { + log_warn(LD_DIRSERV, "Non-integer time in bandwidth file: %s", + escaped(line)); + fclose(fp); + return -1; + } + + if ((time(NULL) - file_time) > MAX_MEASUREMENT_AGE) { + log_warn(LD_DIRSERV, "Bandwidth measurement file stale. Age: %u", + (unsigned)(time(NULL) - file_time)); + fclose(fp); + return -1; + } + + if (routerstatuses) + smartlist_sort(routerstatuses, compare_routerstatus_entries); + + while (!feof(fp)) { + measured_bw_line_t parsed_line; + if (fgets(line, sizeof(line), fp) && strlen(line)) { + if (measured_bw_line_parse(&parsed_line, line) != -1) { + if (measured_bw_line_apply(&parsed_line, routerstatuses) > 0) + applied_lines++; + } + } + } + + fclose(fp); + log_info(LD_DIRSERV, + "Bandwidth measurement file successfully read. " + "Applied %d measurements.", applied_lines); + return 0; +} + /** Return a new networkstatus_t* containing our current opinion. (For v3 * authorities) */ networkstatus_t * @@ -2249,22 +2609,19 @@ int naming = options->NamingAuthoritativeDir; int listbadexits = options->AuthDirListBadExits; int listbaddirs = options->AuthDirListBadDirs; - int exits_can_be_guards; + int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2; routerlist_t *rl = router_get_routerlist(); time_t now = time(NULL); time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH; networkstatus_voter_info_t *voter = NULL; vote_timing_t timing; digestmap_t *omit_as_sybil = NULL; - int vote_on_reachability = 1; + const int vote_on_reachability = running_long_enough_to_decide_unreachable(); + smartlist_t *microdescriptors = NULL; tor_assert(private_key); tor_assert(cert); - if (now - time_of_process_start < - options->TestingAuthDirTimeToLearnReachability) - vote_on_reachability = 0; - if (resolve_my_address(LOG_WARN, options, &addr, &hostname)<0) { log_warn(LD_NET, "Couldn't resolve my hostname"); return NULL; @@ -2299,27 +2656,25 @@ dirserv_compute_performance_thresholds(rl); - /* XXXX We should take steps to keep this from oscillating if - * total_exit_bandwidth is close to total_bandwidth/3. */ - exits_can_be_guards = total_exit_bandwidth >= (total_bandwidth / 3); - routers = smartlist_create(); smartlist_add_all(routers, rl->routers); routers_sort_by_identity(routers); omit_as_sybil = get_possible_sybil_list(routers); routerstatuses = smartlist_create(); + microdescriptors = smartlist_create(); - SMARTLIST_FOREACH(routers, routerinfo_t *, ri, { + SMARTLIST_FOREACH_BEGIN(routers, routerinfo_t *, ri) { if (ri->cache_info.published_on >= cutoff) { routerstatus_t *rs; vote_routerstatus_t *vrs; + microdesc_t *md; vrs = tor_malloc_zero(sizeof(vote_routerstatus_t)); rs = &vrs->status; set_routerstatus_from_routerinfo(rs, ri, now, - naming, exits_can_be_guards, - listbadexits, listbaddirs); + naming, listbadexits, listbaddirs, + vote_on_hsdirs); if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest)) clear_status_flags_on_sybil(rs); @@ -2328,12 +2683,39 @@ rs->is_running = 0; vrs->version = version_from_platform(ri->platform); + md = dirvote_create_microdescriptor(ri); + if (md) { + char buf[128]; + vote_microdesc_hash_t *h; + dirvote_format_microdesc_vote_line(buf, sizeof(buf), md); + h = tor_malloc(sizeof(vote_microdesc_hash_t)); + h->microdesc_hash_line = tor_strdup(buf); + h->next = NULL; + vrs->microdesc = h; + md->last_listed = now; + smartlist_add(microdescriptors, md); + } + smartlist_add(routerstatuses, vrs); } - }); + } SMARTLIST_FOREACH_END(ri); + + { + smartlist_t *added = + microdescs_add_list_to_cache(get_microdesc_cache(), + microdescriptors, SAVED_NOWHERE, 0); + smartlist_free(added); + smartlist_free(microdescriptors); + } + smartlist_free(routers); digestmap_free(omit_as_sybil, NULL); + if (options->V3BandwidthsFile) { + dirserv_read_measured_bandwidths(options->V3BandwidthsFile, + routerstatuses); + } + v3_out = tor_malloc_zero(sizeof(networkstatus_t)); v3_out->type = NS_TYPE_VOTE; @@ -2369,7 +2751,7 @@ v3_out->server_versions = server_versions; v3_out->known_flags = smartlist_create(); smartlist_split_string(v3_out->known_flags, - "Authority Exit Fast Guard HSDir Stable V2Dir Valid", + "Authority Exit Fast Guard Stable V2Dir Valid", 0, SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0); if (vote_on_reachability) smartlist_add(v3_out->known_flags, tor_strdup("Running")); @@ -2381,21 +2763,33 @@ smartlist_add(v3_out->known_flags, tor_strdup("Named")); smartlist_add(v3_out->known_flags, tor_strdup("Unnamed")); } + if (vote_on_hsdirs) + smartlist_add(v3_out->known_flags, tor_strdup("HSDir")); smartlist_sort_strings(v3_out->known_flags); + if (options->ConsensusParams) { + v3_out->net_params = smartlist_create(); + smartlist_split_string(v3_out->net_params, + options->ConsensusParams, NULL, 0, 0); + smartlist_sort_strings(v3_out->net_params); + } + voter = tor_malloc_zero(sizeof(networkstatus_voter_info_t)); voter->nickname = tor_strdup(options->Nickname); memcpy(voter->identity_digest, identity_digest, DIGEST_LEN); + voter->sigs = smartlist_create(); voter->address = hostname; voter->addr = addr; - voter->dir_port = options->DirPort; - voter->or_port = options->ORPort; + voter->dir_port = router_get_advertised_dir_port(options, 0); + voter->or_port = router_get_advertised_or_port(options); voter->contact = tor_strdup(contact); - memcpy(voter->signing_key_digest, signing_key_digest, DIGEST_LEN); if (options->V3AuthUseLegacyKey) { authority_cert_t *c = get_my_v3_legacy_cert(); if (c) { - crypto_pk_get_digest(c->identity_key, voter->legacy_id_digest); + if (crypto_pk_get_digest(c->identity_key, voter->legacy_id_digest)) { + log_warn(LD_BUG, "Unable to compute digest of legacy v3 identity key"); + memset(voter->legacy_id_digest, 0, DIGEST_LEN); + } } } @@ -2435,13 +2829,13 @@ int versioning = options->VersioningAuthoritativeDir; int listbaddirs = options->AuthDirListBadDirs; int listbadexits = options->AuthDirListBadExits; - int exits_can_be_guards; + int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2; const char *contact; char *version_lines = NULL; smartlist_t *routers = NULL; digestmap_t *omit_as_sybil = NULL; - private_key = get_identity_key(); + private_key = get_server_identity_key(); if (resolve_my_address(LOG_WARN, options, &addr, &hostname)<0) { log_warn(LD_NET, "Couldn't resolve my hostname"); @@ -2494,7 +2888,8 @@ "dir-options%s%s%s%s\n" "%s" /* client version line, server version line. */ "dir-signing-key\n%s", - hostname, ipaddr, (int)options->DirPort, + hostname, ipaddr, + (int)router_get_advertised_dir_port(options, 0), fingerprint, contact, published, @@ -2515,10 +2910,6 @@ dirserv_compute_performance_thresholds(rl); - /* XXXX We should take steps to keep this from oscillating if - * total_exit_bandwidth is close to total_bandwidth/3. */ - exits_can_be_guards = total_exit_bandwidth >= (total_bandwidth / 3); - routers = smartlist_create(); smartlist_add_all(routers, rl->routers); routers_sort_by_identity(routers); @@ -2531,13 +2922,13 @@ char *version = version_from_platform(ri->platform); set_routerstatus_from_routerinfo(&rs, ri, now, - naming, exits_can_be_guards, - listbadexits, listbaddirs); + naming, listbadexits, listbaddirs, + vote_on_hsdirs); if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest)) clear_status_flags_on_sybil(&rs); - if (routerstatus_format_entry(outp, endp-outp, &rs, version, 0, 1)) { + if (routerstatus_format_entry(outp, endp-outp, &rs, version, NS_V2)) { log_warn(LD_BUG, "Unable to print router status."); tor_free(version); goto done; @@ -2559,7 +2950,8 @@ outp += strlen(outp); note_crypto_pk_op(SIGN_DIR); - if (router_append_dirobj_signature(outp,endp-outp,digest,private_key)<0) { + if (router_append_dirobj_signature(outp,endp-outp,digest,DIGEST_LEN, + private_key)<0) { log_warn(LD_BUG, "Unable to sign router status."); goto done; } @@ -2591,10 +2983,8 @@ tor_free(status); tor_free(hostname); tor_free(identity_pkey); - if (routers) - smartlist_free(routers); - if (omit_as_sybil) - digestmap_free(omit_as_sybil, NULL); + smartlist_free(routers); + digestmap_free(omit_as_sybil, NULL); return r; } @@ -2642,7 +3032,8 @@ log_info(LD_DIRSERV, "Client requested 'all' network status objects; we have none."); } else if (!strcmpstart(key, "fp/")) { - dir_split_resource_into_fingerprints(key+3, result, NULL, 1, 1); + dir_split_resource_into_fingerprints(key+3, result, NULL, + DSR_HEX|DSR_SORT_UNIQ); } } @@ -2699,6 +3090,8 @@ SMARTLIST_FOREACH(rl->routers, routerinfo_t *, r, smartlist_add(fps_out, tor_memdup(r->cache_info.identity_digest, DIGEST_LEN))); + /* Treat "all" requests as if they were unencrypted */ + for_unencrypted_conn = 1; } else if (!strcmp(key, "authority")) { routerinfo_t *ri = router_get_my_routerinfo(); if (ri) @@ -2707,10 +3100,12 @@ } else if (!strcmpstart(key, "d/")) { by_id = 0; key += strlen("d/"); - dir_split_resource_into_fingerprints(key, fps_out, NULL, 1, 1); + dir_split_resource_into_fingerprints(key, fps_out, NULL, + DSR_HEX|DSR_SORT_UNIQ); } else if (!strcmpstart(key, "fp/")) { key += strlen("fp/"); - dir_split_resource_into_fingerprints(key, fps_out, NULL, 1, 1); + dir_split_resource_into_fingerprints(key, fps_out, NULL, + DSR_HEX|DSR_SORT_UNIQ); } else { *msg = "Key not recognized"; return -1; @@ -2775,7 +3170,8 @@ } else if (!strcmpstart(key, "/tor/server/d/")) { smartlist_t *digests = smartlist_create(); key += strlen("/tor/server/d/"); - dir_split_resource_into_fingerprints(key, digests, NULL, 1, 1); + dir_split_resource_into_fingerprints(key, digests, NULL, + DSR_HEX|DSR_SORT_UNIQ); SMARTLIST_FOREACH(digests, const char *, d, { signed_descriptor_t *sd = router_get_by_descriptor_digest(d); @@ -2788,7 +3184,8 @@ smartlist_t *digests = smartlist_create(); time_t cutoff = time(NULL) - ROUTER_MAX_AGE_TO_PUBLISH; key += strlen("/tor/server/fp/"); - dir_split_resource_into_fingerprints(key, digests, NULL, 1, 1); + dir_split_resource_into_fingerprints(key, digests, NULL, + DSR_HEX|DSR_SORT_UNIQ); SMARTLIST_FOREACH(digests, const char *, d, { if (router_digest_is_me(d)) { @@ -2839,34 +3236,83 @@ tor_assert(address); tor_assert(digest_rcvd); - SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, { + /* XXX023 Doing a loop like this is stupid. We should just look up the + * router by digest_rcvd, and see if address, orport, and as_advertised + * match up. -NM */ + SMARTLIST_FOREACH_BEGIN(rl->routers, routerinfo_t *, ri) { if (!strcasecmp(address, ri->address) && or_port == ri->or_port && as_advertised && - !memcmp(ri->cache_info.identity_digest, digest_rcvd, DIGEST_LEN)) { + fast_memeq(ri->cache_info.identity_digest, digest_rcvd, DIGEST_LEN)) { /* correct digest. mark this router reachable! */ if (!bridge_auth || ri->purpose == ROUTER_PURPOSE_BRIDGE) { - log_info(LD_DIRSERV, "Found router %s to be reachable. Yay.", - ri->nickname); - rep_hist_note_router_reachable(digest_rcvd, now); + tor_addr_t addr, *addrp=NULL; + log_info(LD_DIRSERV, "Found router %s to be reachable at %s:%d. Yay.", + router_describe(ri), + address, ri->or_port); + if (tor_addr_from_str(&addr, ri->address) != -1) + addrp = &addr; + else + log_warn(LD_BUG, "Couldn't parse IP address \"%s\"", ri->address); + rep_hist_note_router_reachable(digest_rcvd, addrp, or_port, now); ri->last_reachable = now; } } - }); + } SMARTLIST_FOREACH_END(ri); /* FFFF Maybe we should reinstate the code that dumps routers with the same * addr/port but with nonmatching keys, but instead of dumping, we should * skip testing. */ } -/** Auth dir server only: if try_all is 1, launch connections to - * all known routers; else we want to load balance such that we only +/** Called when we, as an authority, receive a new router descriptor either as + * an upload or a download. Used to decide whether to relaunch reachability + * testing for the server. */ +int +dirserv_should_launch_reachability_test(routerinfo_t *ri, routerinfo_t *ri_old) +{ + if (!authdir_mode_handles_descs(get_options(), ri->purpose)) + return 0; + if (!ri_old) { + /* New router: Launch an immediate reachability test, so we will have an + * opinion soon in case we're generating a consensus soon */ + return 1; + } + if (ri_old->is_hibernating && !ri->is_hibernating) { + /* It just came out of hibernation; launch a reachability test */ + return 1; + } + if (! routers_have_same_or_addr(ri, ri_old)) { + /* Address or port changed; launch a reachability test */ + return 1; + } + return 0; +} + +/** Helper function for dirserv_test_reachability(). Start a TLS + * connection to router, and annotate it with when we started + * the test. */ +void +dirserv_single_reachability_test(time_t now, routerinfo_t *router) +{ + tor_addr_t router_addr; + log_debug(LD_OR,"Testing reachability of %s at %s:%u.", + router->nickname, router->address, router->or_port); + /* Remember when we started trying to determine reachability */ + if (!router->testing_since) + router->testing_since = now; + tor_addr_from_ipv4h(&router_addr, router->addr); + connection_or_connect(&router_addr, router->or_port, + router->cache_info.identity_digest); +} + +/** Auth dir server only: load balance such that we only * try a few connections per call. * * The load balancing is such that if we get called once every ten - * seconds, we will cycle through all the tests in 1280 seconds (a - * bit over 20 minutes). + * seconds, we will cycle through all the tests in + * REACHABILITY_TEST_CYCLE_PERIOD seconds (a bit over 20 minutes). */ void -dirserv_test_reachability(time_t now, int try_all) +dirserv_test_reachability(time_t now) { /* XXX decide what to do here; see or-talk thread "purging old router * information, revocation." -NM @@ -2883,38 +3329,33 @@ SMARTLIST_FOREACH_BEGIN(rl->routers, routerinfo_t *, router) { const char *id_digest = router->cache_info.identity_digest; - tor_addr_t router_addr; if (router_is_me(router)) continue; if (bridge_auth && router->purpose != ROUTER_PURPOSE_BRIDGE) continue; /* bridge authorities only test reachability on bridges */ // if (router->cache_info.published_on > cutoff) // continue; - if (try_all || (((uint8_t)id_digest[0]) % 128) == ctr) { - log_debug(LD_OR,"Testing reachability of %s at %s:%u.", - router->nickname, router->address, router->or_port); - /* Remember when we started trying to determine reachability */ - if (!router->testing_since) - router->testing_since = now; - tor_addr_from_ipv4h(&router_addr, router->addr); - connection_or_connect(&router_addr, router->or_port, id_digest); + if ((((uint8_t)id_digest[0]) % REACHABILITY_MODULO_PER_TEST) == ctr) { + dirserv_single_reachability_test(now, router); } } SMARTLIST_FOREACH_END(router); - if (!try_all) /* increment ctr */ - ctr = (ctr + 1) % 128; + ctr = (ctr + 1) % REACHABILITY_MODULO_PER_TEST; /* increment ctr */ } -/** Given a fingerprint fp which is either set if we're looking - * for a v2 status, or zeroes if we're looking for a v3 status, return - * a pointer to the appropriate cached dir object, or NULL if there isn't - * one available. */ +/** Given a fingerprint fp which is either set if we're looking for a + * v2 status, or zeroes if we're looking for a v3 status, or a NUL-padded + * flavor name if we want a flavored v3 status, return a pointer to the + * appropriate cached dir object, or NULL if there isn't one available. */ static cached_dir_t * lookup_cached_dir_by_fp(const char *fp) { cached_dir_t *d = NULL; - if (tor_digest_is_zero(fp) && cached_v3_networkstatus) - d = cached_v3_networkstatus; - else if (router_digest_is_me(fp) && the_v2_networkstatus) + if (tor_digest_is_zero(fp) && cached_consensuses) + d = strmap_get(cached_consensuses, "ns"); + else if (memchr(fp, '\0', DIGEST_LEN) && cached_consensuses && + (d = strmap_get(cached_consensuses, fp))) { + /* this here interface is a nasty hack XXXX023 */; + } else if (router_digest_is_me(fp) && the_v2_networkstatus) d = the_v2_networkstatus; else if (cached_v2_networkstatus) d = digestmap_get(cached_v2_networkstatus, fp); @@ -3000,6 +3441,18 @@ return 0; } +/** Return true iff any of the 256-bit elements in fps is the digest of + * a microdescriptor we have. */ +int +dirserv_have_any_microdesc(const smartlist_t *fps) +{ + microdesc_cache_t *cache = get_microdesc_cache(); + SMARTLIST_FOREACH(fps, const char *, fp, + if (microdesc_cache_lookup_by_digest256(cache, fp)) + return 1); + return 0; +} + /** Return an approximate estimate of the number of bytes that will * be needed to transmit the server descriptors (if is_serverdescs -- * they can be either d/ or fp/ queries) or networkstatus objects (if @@ -3031,6 +3484,17 @@ return result; } +/** Given a list of microdescriptor hashes, guess how many bytes will be + * needed to transmit them, and return the guess. */ +size_t +dirserv_estimate_microdesc_size(const smartlist_t *fps, int compressed) +{ + size_t result = smartlist_len(fps) * microdesc_average_size(NULL); + if (compressed) + result /= 2; + return result; +} + /** When we're spooling data onto our outbuf, add more whenever we dip * below this threshold. */ #define DIRSERV_BUFFER_MIN 16384 @@ -3094,6 +3558,8 @@ #endif body = signed_descriptor_get_body(sd); if (conn->zlib_state) { + /* XXXX022 This 'last' business should actually happen on the last + * routerinfo, not on the last fingerprint. */ int last = ! smartlist_len(conn->fingerprint_stack); connection_write_to_buf_zlib(body, sd->signed_descriptor_len, conn, last); @@ -3117,6 +3583,44 @@ return 0; } +/** Spooling helper: called when we're sending a bunch of microdescriptors, + * and the outbuf has become too empty. Pulls some entries from + * fingerprint_stack, and writes the corresponding microdescs onto outbuf. If + * we run out of entries, flushes the zlib state and sets the spool source to + * NONE. Returns 0 on success, negative on failure. + */ +static int +connection_dirserv_add_microdescs_to_outbuf(dir_connection_t *conn) +{ + microdesc_cache_t *cache = get_microdesc_cache(); + while (smartlist_len(conn->fingerprint_stack) && + buf_datalen(conn->_base.outbuf) < DIRSERV_BUFFER_MIN) { + char *fp256 = smartlist_pop_last(conn->fingerprint_stack); + microdesc_t *md = microdesc_cache_lookup_by_digest256(cache, fp256); + tor_free(fp256); + if (!md) + continue; + if (conn->zlib_state) { + /* XXXX022 This 'last' business should actually happen on the last + * routerinfo, not on the last fingerprint. */ + int last = !smartlist_len(conn->fingerprint_stack); + connection_write_to_buf_zlib(md->body, md->bodylen, conn, last); + if (last) { + tor_zlib_free(conn->zlib_state); + conn->zlib_state = NULL; + } + } else { + connection_write_to_buf(md->body, md->bodylen, TO_CONN(conn)); + } + } + if (!smartlist_len(conn->fingerprint_stack)) { + conn->dir_spool_src = DIR_SPOOL_NONE; + smartlist_free(conn->fingerprint_stack); + conn->fingerprint_stack = NULL; + } + return 0; +} + /** Spooling helper: Called when we're sending a directory or networkstatus, * and the outbuf has become too empty. Pulls some bytes from * conn-\>cached_dir-\>dir_z, uncompresses them if appropriate, and @@ -3199,8 +3703,7 @@ } } else { connection_dirserv_finish_spooling(conn); - if (conn->fingerprint_stack) - smartlist_free(conn->fingerprint_stack); + smartlist_free(conn->fingerprint_stack); conn->fingerprint_stack = NULL; return 0; } @@ -3224,6 +3727,8 @@ case DIR_SPOOL_SERVER_BY_DIGEST: case DIR_SPOOL_SERVER_BY_FP: return connection_dirserv_add_servers_to_outbuf(conn); + case DIR_SPOOL_MICRODESC: + return connection_dirserv_add_microdescs_to_outbuf(conn); case DIR_SPOOL_CACHED_DIR: return connection_dirserv_add_dir_bytes_to_outbuf(conn); case DIR_SPOOL_NETWORKSTATUS: @@ -3245,10 +3750,10 @@ cached_dir_decref(the_v2_networkstatus); cached_dir_decref(cached_directory); clear_cached_dir(&cached_runningrouters); - if (cached_v2_networkstatus) { - digestmap_free(cached_v2_networkstatus, _free_cached_dir); - cached_v2_networkstatus = NULL; - } - cached_dir_decref(cached_v3_networkstatus); + + digestmap_free(cached_v2_networkstatus, _free_cached_dir); + cached_v2_networkstatus = NULL; + strmap_free(cached_consensuses, _free_cached_dir); + cached_consensuses = NULL; } diff -Nru tor-0.2.1.30/src/or/dirserv.h tor-0.2.2.35/src/or/dirserv.h --- tor-0.2.1.30/src/or/dirserv.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/dirserv.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,146 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file dirserv.h + * \brief Header file for dirserv.c. + **/ + +#ifndef _TOR_DIRSERV_H +#define _TOR_DIRSERV_H + +/** What fraction (1 over this number) of the relay ID space do we + * (as a directory authority) launch connections to at each reachability + * test? */ +#define REACHABILITY_MODULO_PER_TEST 128 + +/** How often (in seconds) do we launch reachability tests? */ +#define REACHABILITY_TEST_INTERVAL 10 + +/** How many seconds apart are the reachability tests for a given relay? */ +#define REACHABILITY_TEST_CYCLE_PERIOD \ + (REACHABILITY_TEST_INTERVAL*REACHABILITY_MODULO_PER_TEST) + +/** Maximum length of an exit policy summary. */ +#define MAX_EXITPOLICY_SUMMARY_LEN 1000 + +/** Maximum allowable length of a version line in a networkstatus. */ +#define MAX_V_LINE_LEN 128 +/** Length of "r Authority BadDirectory BadExit Exit Fast Guard HSDir Named + * Running Stable Unnamed V2Dir Valid\n". */ +#define MAX_FLAG_LINE_LEN 96 +/** Length of "w" line for weighting. Currently at most + * "w Bandwidth= Measured=\n" */ +#define MAX_WEIGHT_LINE_LEN (12+10+10+10+1) +/** Maximum length of an exit policy summary line. */ +#define MAX_POLICY_LINE_LEN (3+MAX_EXITPOLICY_SUMMARY_LEN) +/** Amount of space to allocate for each entry: r, s, and v lines. */ +#define RS_ENTRY_LEN \ + ( /* first line */ \ + MAX_NICKNAME_LEN+BASE64_DIGEST_LEN*2+ISO_TIME_LEN+INET_NTOA_BUF_LEN+ \ + 5*2 /* ports */ + 10 /* punctuation */ + \ + /* second line */ \ + MAX_FLAG_LINE_LEN + \ + /* weight line */ \ + MAX_WEIGHT_LINE_LEN + \ + /* p line. */ \ + MAX_POLICY_LINE_LEN + \ + /* v line. */ \ + MAX_V_LINE_LEN \ + ) + +#define UNNAMED_ROUTER_NICKNAME "Unnamed" + +int connection_dirserv_flushed_some(dir_connection_t *conn); + +int dirserv_add_own_fingerprint(const char *nickname, crypto_pk_env_t *pk); +int dirserv_load_fingerprint_file(void); +void dirserv_free_fingerprint_list(void); +const char *dirserv_get_nickname_by_digest(const char *digest); +enum was_router_added_t dirserv_add_multiple_descriptors( + const char *desc, uint8_t purpose, + const char *source, + const char **msg); +enum was_router_added_t dirserv_add_descriptor(routerinfo_t *ri, + const char **msg, + const char *source); +void dirserv_set_router_is_running(routerinfo_t *router, time_t now); +int list_server_status_v1(smartlist_t *routers, char **router_status_out, + int for_controller); +int dirserv_dump_directory_to_string(char **dir_out, + crypto_pk_env_t *private_key); + +int directory_fetches_from_authorities(or_options_t *options); +int directory_fetches_dir_info_early(or_options_t *options); +int directory_fetches_dir_info_later(or_options_t *options); +int directory_caches_v2_dir_info(or_options_t *options); +#define directory_caches_v1_dir_info(o) directory_caches_v2_dir_info(o) +int directory_caches_dir_info(or_options_t *options); +int directory_permits_begindir_requests(or_options_t *options); +int directory_permits_controller_requests(or_options_t *options); +int directory_too_idle_to_fetch_descriptors(or_options_t *options, time_t now); + +void directory_set_dirty(void); +cached_dir_t *dirserv_get_directory(void); +cached_dir_t *dirserv_get_runningrouters(void); +cached_dir_t *dirserv_get_consensus(const char *flavor_name); +void dirserv_set_cached_directory(const char *directory, time_t when, + int is_running_routers); +void dirserv_set_cached_networkstatus_v2(const char *directory, + const char *identity, + time_t published); +void dirserv_set_cached_consensus_networkstatus(const char *consensus, + const char *flavor_name, + const digests_t *digests, + time_t published); +void dirserv_clear_old_networkstatuses(time_t cutoff); +void dirserv_clear_old_v1_info(time_t now); +void dirserv_get_networkstatus_v2(smartlist_t *result, const char *key); +void dirserv_get_networkstatus_v2_fingerprints(smartlist_t *result, + const char *key); +int dirserv_get_routerdesc_fingerprints(smartlist_t *fps_out, const char *key, + const char **msg, + int for_unencrypted_conn, + int is_extrainfo); +int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key, + const char **msg); +void dirserv_orconn_tls_done(const char *address, + uint16_t or_port, + const char *digest_rcvd, + int as_advertised); +int dirserv_should_launch_reachability_test(routerinfo_t *ri, + routerinfo_t *ri_old); +void dirserv_single_reachability_test(time_t now, routerinfo_t *router); +void dirserv_test_reachability(time_t now); +int authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg, + int complain); +int dirserv_would_reject_router(routerstatus_t *rs); +int dirserv_remove_old_statuses(smartlist_t *fps, time_t cutoff); +int dirserv_have_any_serverdesc(smartlist_t *fps, int spool_src); +int dirserv_have_any_microdesc(const smartlist_t *fps); +size_t dirserv_estimate_data_size(smartlist_t *fps, int is_serverdescs, + int compressed); +size_t dirserv_estimate_microdesc_size(const smartlist_t *fps, int compressed); + +int routerstatus_format_entry(char *buf, size_t buf_len, + routerstatus_t *rs, const char *platform, + routerstatus_format_type_t format); +void dirserv_free_all(void); +void cached_dir_decref(cached_dir_t *d); +cached_dir_t *new_cached_dir(char *s, time_t published); + +#ifdef DIRSERV_PRIVATE +int measured_bw_line_parse(measured_bw_line_t *out, const char *line); + +int measured_bw_line_apply(measured_bw_line_t *parsed_line, + smartlist_t *routerstatuses); +#endif + +int dirserv_read_measured_bandwidths(const char *from_file, + smartlist_t *routerstatuses); + +#endif + diff -Nru tor-0.2.1.30/src/or/dirvote.c tor-0.2.2.35/src/or/dirvote.c --- tor-0.2.1.30/src/or/dirvote.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/dirvote.c 2011-12-15 16:28:37.000000000 +0000 @@ -5,27 +5,72 @@ #define DIRVOTE_PRIVATE #include "or.h" +#include "config.h" +#include "directory.h" +#include "dirserv.h" +#include "dirvote.h" +#include "microdesc.h" +#include "networkstatus.h" +#include "policies.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" +#include "routerparse.h" /** * \file dirvote.c * \brief Functions to compute directory consensus, and schedule voting. **/ -static int dirvote_add_signatures_to_pending_consensus( +/** A consensus that we have built and are appending signatures to. Once it's + * time to publish it, it will become an active consensus if it accumulates + * enough signatures. */ +typedef struct pending_consensus_t { + /** The body of the consensus that we're currently building. Once we + * have it built, it goes into dirserv.c */ + char *body; + /** The parsed in-progress consensus document. */ + networkstatus_t *consensus; +} pending_consensus_t; + +static int dirvote_add_signatures_to_all_pending_consensuses( const char *detached_signatures_body, const char **msg_out); +static int dirvote_add_signatures_to_pending_consensus( + pending_consensus_t *pc, + ns_detached_signatures_t *sigs, + const char **msg_out); static char *list_v3_auth_ids(void); static void dirvote_fetch_missing_votes(void); static void dirvote_fetch_missing_signatures(void); static int dirvote_perform_vote(void); static void dirvote_clear_votes(int all_votes); -static int dirvote_compute_consensus(void); +static int dirvote_compute_consensuses(void); static int dirvote_publish_consensus(void); +static char *make_consensus_method_list(int low, int high, const char *sep); + +/** The highest consensus method that we currently support. */ +#define MAX_SUPPORTED_CONSENSUS_METHOD 11 + +/** Lowest consensus method that contains a 'directory-footer' marker */ +#define MIN_METHOD_FOR_FOOTER 9 + +/** Lowest consensus method that contains bandwidth weights */ +#define MIN_METHOD_FOR_BW_WEIGHTS 9 + +/** Lowest consensus method that contains consensus params */ +#define MIN_METHOD_FOR_PARAMS 7 + +/** Lowest consensus method that generates microdescriptors */ +#define MIN_METHOD_FOR_MICRODESC 8 /* ===== * Voting * =====*/ +/* Overestimated. */ +#define MICRODESC_LINE_LEN 80 + /** Return a new string containing the string representation of the vote in * v3_ns, signed with our v3 signing key private_signing_key. * For v3 authorities. */ @@ -44,6 +89,7 @@ uint32_t addr; routerlist_t *rl = router_get_routerlist(); char *version_lines = NULL; + int r; networkstatus_voter_info_t *voter; tor_assert(private_signing_key); @@ -70,20 +116,30 @@ version_lines = tor_malloc(v_len); cp = version_lines; if (client_versions) { - tor_snprintf(cp, v_len-(cp-version_lines), + r = tor_snprintf(cp, v_len-(cp-version_lines), "client-versions %s\n", client_versions); + if (r < 0) { + log_err(LD_BUG, "Insufficient memory for client-versions line"); + tor_assert(0); + } cp += strlen(cp); } - if (server_versions) - tor_snprintf(cp, v_len-(cp-version_lines), + if (server_versions) { + r = tor_snprintf(cp, v_len-(cp-version_lines), "server-versions %s\n", server_versions); + if (r < 0) { + log_err(LD_BUG, "Insufficient memory for server-versions line"); + tor_assert(0); + } + } } else { version_lines = tor_strdup(""); } len = 8192; len += strlen(version_lines); - len += (RS_ENTRY_LEN)*smartlist_len(rl->routers); + len += (RS_ENTRY_LEN+MICRODESC_LINE_LEN)*smartlist_len(rl->routers); + len += strlen("\ndirectory-footer\n"); len += v3_ns->cert->cache_info.signed_descriptor_len; status = tor_malloc(len); @@ -93,17 +149,25 @@ char fu[ISO_TIME_LEN+1]; char vu[ISO_TIME_LEN+1]; char *flags = smartlist_join_strings(v3_ns->known_flags, " ", 0, NULL); + char *params; authority_cert_t *cert = v3_ns->cert; + char *methods = + make_consensus_method_list(1, MAX_SUPPORTED_CONSENSUS_METHOD, " "); format_iso_time(published, v3_ns->published); format_iso_time(va, v3_ns->valid_after); format_iso_time(fu, v3_ns->fresh_until); format_iso_time(vu, v3_ns->valid_until); + if (v3_ns->net_params) + params = smartlist_join_strings(v3_ns->net_params, " ", 0, NULL); + else + params = tor_strdup(""); + tor_assert(cert); - tor_snprintf(status, len, + r = tor_snprintf(status, len, "network-status-version 3\n" "vote-status %s\n" - "consensus-methods 1 2 3 4 5\n" + "consensus-methods %s\n" "published %s\n" "valid-after %s\n" "fresh-until %s\n" @@ -111,24 +175,38 @@ "voting-delay %d %d\n" "%s" /* versions */ "known-flags %s\n" + "params %s\n" "dir-source %s %s %s %s %d %d\n" "contact %s\n", v3_ns->type == NS_TYPE_VOTE ? "vote" : "opinion", + methods, published, va, fu, vu, v3_ns->vote_seconds, v3_ns->dist_seconds, version_lines, flags, + params, voter->nickname, fingerprint, voter->address, - ipaddr, voter->dir_port, voter->or_port, voter->contact); + ipaddr, voter->dir_port, voter->or_port, voter->contact); + + if (r < 0) { + log_err(LD_BUG, "Insufficient memory for network status line"); + tor_assert(0); + } + tor_free(params); tor_free(flags); + tor_free(methods); outp = status + strlen(status); endp = status + len; if (!tor_digest_is_zero(voter->legacy_id_digest)) { char fpbuf[HEX_DIGEST_LEN+1]; base16_encode(fpbuf, sizeof(fpbuf), voter->legacy_id_digest, DIGEST_LEN); - tor_snprintf(outp, endp-outp, "legacy-dir-key %s\n", fpbuf); + r = tor_snprintf(outp, endp-outp, "legacy-dir-key %s\n", fpbuf); + if (r < 0) { + log_err(LD_BUG, "Insufficient memory for legacy-dir-key line"); + tor_assert(0); + } outp += strlen(outp); } @@ -139,15 +217,32 @@ outp += cert->cache_info.signed_descriptor_len; } - SMARTLIST_FOREACH(v3_ns->routerstatus_list, vote_routerstatus_t *, vrs, - { + SMARTLIST_FOREACH_BEGIN(v3_ns->routerstatus_list, vote_routerstatus_t *, + vrs) { + vote_microdesc_hash_t *h; if (routerstatus_format_entry(outp, endp-outp, &vrs->status, - vrs->version, 0, 0) < 0) { + vrs->version, NS_V3_VOTE) < 0) { log_warn(LD_BUG, "Unable to print router status."); goto err; } outp += strlen(outp); - }); + + for (h = vrs->microdesc; h; h = h->next) { + size_t mlen = strlen(h->microdesc_hash_line); + if (outp+mlen >= endp) { + log_warn(LD_BUG, "Can't fit microdesc line in vote."); + } + memcpy(outp, h->microdesc_hash_line, mlen+1); + outp += strlen(outp); + } + } SMARTLIST_FOREACH_END(vrs); + + r = tor_snprintf(outp, endp-outp, "directory-footer\n"); + if (r < 0) { + log_err(LD_BUG, "Insufficient memory for directory-footer line"); + tor_assert(0); + } + outp += strlen(outp); { char signing_key_fingerprint[FINGERPRINT_LEN+1]; @@ -170,10 +265,10 @@ outp += strlen(outp); } - if (router_get_networkstatus_v3_hash(status, digest)<0) + if (router_get_networkstatus_v3_hash(status, digest, DIGEST_SHA1)<0) goto err; note_crypto_pk_op(SIGN_DIR); - if (router_append_dirobj_signature(outp,endp-outp,digest, + if (router_append_dirobj_signature(outp,endp-outp,digest, DIGEST_LEN, private_signing_key)<0) { log_warn(LD_BUG, "Unable to sign networkstatus vote."); goto err; @@ -216,6 +311,20 @@ return smartlist_get(vote->voters, 0); } +/** Return the signature made by voter using the algorithm + * alg, or NULL if none is found. */ +document_signature_t * +voter_get_sig_by_algorithm(const networkstatus_voter_info_t *voter, + digest_algorithm_t alg) +{ + if (!voter->sigs) + return NULL; + SMARTLIST_FOREACH(voter->sigs, document_signature_t *, sig, + if (sig->alg == alg) + return sig); + return NULL; +} + /** Temporary structure used in constructing a list of dir-source entries * for a consensus. One of these is generated for every vote, and one more * for every legacy key in each vote. */ @@ -231,7 +340,7 @@ _compare_votes_by_authority_id(const void **_a, const void **_b) { const networkstatus_t *a = *_a, *b = *_b; - return memcmp(get_voter(a)->identity_digest, + return fast_memcmp(get_voter(a)->identity_digest, get_voter(b)->identity_digest, DIGEST_LEN); } @@ -248,7 +357,7 @@ a_id = a->is_legacy ? a_v->legacy_id_digest : a_v->identity_digest; b_id = b->is_legacy ? b_v->legacy_id_digest : b_v->identity_digest; - return memcmp(a_id, b_id, DIGEST_LEN); + return fast_memcmp(a_id, b_id, DIGEST_LEN); } /** Given a sorted list of strings in, add every member to out @@ -275,34 +384,8 @@ /** Given a sorted list of strings lst, return the member that appears * most. Break ties in favor of later-occurring members. */ -static const char * -get_most_frequent_member(smartlist_t *lst) -{ - const char *most_frequent = NULL; - int most_frequent_count = 0; - - const char *cur = NULL; - int count = 0; - - SMARTLIST_FOREACH(lst, const char *, s, - { - if (cur && !strcmp(s, cur)) { - ++count; - } else { - if (count >= most_frequent_count) { - most_frequent = cur; - most_frequent_count = count; - } - cur = s; - count = 1; - } - }); - if (count >= most_frequent_count) { - most_frequent = cur; - most_frequent_count = count; - } - return most_frequent; -} +#define get_most_frequent_member(lst) \ + smartlist_get_most_frequent_string(lst) /** Return 0 if and only if a and b are routerstatuses * that come from the same routerinfo, with the same derived elements. @@ -311,11 +394,12 @@ compare_vote_rs(const vote_routerstatus_t *a, const vote_routerstatus_t *b) { int r; - if ((r = memcmp(a->status.identity_digest, b->status.identity_digest, + if ((r = fast_memcmp(a->status.identity_digest, b->status.identity_digest, DIGEST_LEN))) return r; - if ((r = memcmp(a->status.descriptor_digest, b->status.descriptor_digest, - DIGEST_LEN))) + if ((r = fast_memcmp(a->status.descriptor_digest, + b->status.descriptor_digest, + DIGEST_LEN))) return r; if ((r = (int)(b->status.published_on - a->status.published_on))) return r; @@ -344,7 +428,8 @@ * in favor of smaller descriptor digest. */ static vote_routerstatus_t * -compute_routerstatus_consensus(smartlist_t *votes) +compute_routerstatus_consensus(smartlist_t *votes, int consensus_method, + char *microdesc_digest256_out) { vote_routerstatus_t *most = NULL, *cur = NULL; int most_n = 0, cur_n = 0; @@ -360,9 +445,9 @@ if (cur && !compare_vote_rs(cur, rs)) { ++cur_n; } else { - if (cur_n > most_n || - (cur && cur_n == most_n && - cur->status.published_on > most_published)) { + if (cur && (cur_n > most_n || + (cur_n == most_n && + cur->status.published_on > most_published))) { most = cur; most_n = cur_n; most_published = cur->status.published_on; @@ -380,18 +465,45 @@ } tor_assert(most); + + if (consensus_method >= MIN_METHOD_FOR_MICRODESC && + microdesc_digest256_out) { + smartlist_t *digests = smartlist_create(); + const char *best_microdesc_digest; + SMARTLIST_FOREACH_BEGIN(votes, vote_routerstatus_t *, rs) { + char d[DIGEST256_LEN]; + if (compare_vote_rs(rs, most)) + continue; + if (!vote_routerstatus_find_microdesc_hash(d, rs, consensus_method, + DIGEST_SHA256)) + smartlist_add(digests, tor_memdup(d, sizeof(d))); + } SMARTLIST_FOREACH_END(rs); + smartlist_sort_digests256(digests); + best_microdesc_digest = smartlist_get_most_frequent_digest256(digests); + if (best_microdesc_digest) + memcpy(microdesc_digest256_out, best_microdesc_digest, DIGEST256_LEN); + SMARTLIST_FOREACH(digests, char *, cp, tor_free(cp)); + smartlist_free(digests); + } + return most; } -/** Given a list of strings in lst, set the DIGEST_LEN-byte digest at - * digest_out to the hash of the concatenation of those strings. */ +/** Given a list of strings in lst, set the len_out-byte digest + * at digest_out to the hash of the concatenation of those strings, + * computed with the algorithm alg. */ static void -hash_list_members(char *digest_out, smartlist_t *lst) +hash_list_members(char *digest_out, size_t len_out, + smartlist_t *lst, digest_algorithm_t alg) { - crypto_digest_env_t *d = crypto_new_digest_env(); + crypto_digest_env_t *d; + if (alg == DIGEST_SHA1) + d = crypto_new_digest_env(); + else + d = crypto_new_digest256_env(alg); SMARTLIST_FOREACH(lst, const char *, cp, crypto_digest_add_bytes(d, cp, strlen(cp))); - crypto_digest_get_digest(d, digest_out, DIGEST_LEN); + crypto_digest_get_digest(d, digest_out, len_out); crypto_free_digest_env(d); } @@ -455,7 +567,31 @@ static int consensus_method_is_supported(int method) { - return (method >= 1) && (method <= 5); + return (method >= 1) && (method <= MAX_SUPPORTED_CONSENSUS_METHOD); +} + +/** Return a newly allocated string holding the numbers between low and high + * (inclusive) that are supported consensus methods. */ +static char * +make_consensus_method_list(int low, int high, const char *separator) +{ + char *list; + + char b[32]; + int i; + smartlist_t *lst; + lst = smartlist_create(); + for (i = low; i <= high; ++i) { + if (!consensus_method_is_supported(i)) + continue; + tor_snprintf(b, sizeof(b), "%d", i); + smartlist_add(lst, tor_strdup(b)); + } + list = smartlist_join_strings(lst, separator, 0, NULL); + tor_assert(list); + SMARTLIST_FOREACH(lst, char *, cp, tor_free(cp)); + smartlist_free(lst); + return list; } /** Helper: given lst, a list of version strings such that every @@ -475,6 +611,728 @@ return result; } +/** Helper: given a list of valid networkstatus_t, return a new string + * containing the contents of the consensus network parameter set. + */ +/* private */ char * +dirvote_compute_params(smartlist_t *votes) +{ + int i; + int32_t *vals; + + int cur_param_len; + const char *cur_param; + const char *eq; + char *result; + + const int n_votes = smartlist_len(votes); + smartlist_t *output; + smartlist_t *param_list = smartlist_create(); + + /* We require that the parameter lists in the votes are well-formed: that + is, that their keywords are unique and sorted, and that their values are + between INT32_MIN and INT32_MAX inclusive. This should be guaranteed by + the parsing code. */ + + vals = tor_malloc(sizeof(int)*n_votes); + + SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) { + if (!v->net_params) + continue; + smartlist_add_all(param_list, v->net_params); + } SMARTLIST_FOREACH_END(v); + + if (smartlist_len(param_list) == 0) { + tor_free(vals); + smartlist_free(param_list); + return NULL; + } + + smartlist_sort_strings(param_list); + i = 0; + cur_param = smartlist_get(param_list, 0); + eq = strchr(cur_param, '='); + tor_assert(eq); + cur_param_len = (int)(eq+1 - cur_param); + + output = smartlist_create(); + + SMARTLIST_FOREACH_BEGIN(param_list, const char *, param) { + const char *next_param; + int ok=0; + eq = strchr(param, '='); + tor_assert(i= G */ + casename = "Case 2a (G scarce)"; + Wed = 0; + Wgd = weight_scale; + } + } else { // Subcase b: R+D > S + bw_weights_error_t berr = 0; + casename = "Case 2b (Wme*E == Wmd*D)"; + if (D != 0) { + Wgg = weight_scale; + Wgd = (weight_scale*(D + E - 2*G + M))/(3*D); // T/3 >= G (Ok) + Wmd = (weight_scale*(D + E + G - 2*M))/(6*D); // T/3 >= M + Wme = (weight_scale*(D + E + G - 2*M))/(6*E); + Wee = (weight_scale*(-D + 5*E - G + 2*M))/(6*E); // 2E+M >= T/3 + Wmg = 0; + Wed = weight_scale - Wgd - Wmd; + + berr = networkstatus_check_weights(Wgg, Wgd, Wmg, Wme, Wmd, Wee, Wed, + weight_scale, G, M, E, D, T, 10, 1); + } + + if (D == 0 || berr) { // Can happen if M > T/3 + casename = "Case 2b (E=G)"; + Wgg = weight_scale; + Wee = weight_scale; + Wmg = 0; + Wme = 0; + Wmd = 0; + if (D == 0) Wgd = 0; + else Wgd = (weight_scale*(D+E-G))/(2*D); + Wed = weight_scale - Wgd; + berr = networkstatus_check_weights(Wgg, Wgd, Wmg, Wme, Wmd, Wee, + Wed, weight_scale, G, M, E, D, T, 10, 1); + } + if (berr != BW_WEIGHTS_NO_ERROR && + berr != BW_WEIGHTS_BALANCE_MID_ERROR) { + log_warn(LD_DIR, "Bw Weights error %d for case %s. " + "G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT + " D="I64_FORMAT" T="I64_FORMAT, + berr, casename, + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + } + } + } else { // if (E < T/3 || G < T/3) { + int64_t S = MIN(E, G); + // Case 3: Exactly one of Guard or Exit is scarce + if (!(3*E < T || 3*G < T) || !(3*G >= T || 3*E >= T)) { + log_warn(LD_BUG, + "Bw-Weights Case 3 but with G="I64_FORMAT" M=" + I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT" T="I64_FORMAT, + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + } + + if (3*(S+D) < T) { // Subcase a: S+D < T/3 + if (G < E) { + casename = "Case 3a (G scarce)"; + Wgg = Wgd = weight_scale; + Wmd = Wed = Wmg = 0; + // Minor subcase, if E is more scarce than M, + // keep its bandwidth in place. + if (E < M) Wme = 0; + else Wme = (weight_scale*(E-M))/(2*E); + Wee = weight_scale-Wme; + } else { // G >= E + casename = "Case 3a (E scarce)"; + Wee = Wed = weight_scale; + Wmd = Wgd = Wme = 0; + // Minor subcase, if G is more scarce than M, + // keep its bandwidth in place. + if (G < M) Wmg = 0; + else Wmg = (weight_scale*(G-M))/(2*G); + Wgg = weight_scale-Wmg; + } + } else { // Subcase b: S+D >= T/3 + bw_weights_error_t berr = 0; + // D != 0 because S+D >= T/3 + if (G < E) { + casename = "Case 3b (G scarce, Wme*E == Wmd*D)"; + Wgd = (weight_scale*(D + E - 2*G + M))/(3*D); + Wmd = (weight_scale*(D + E + G - 2*M))/(6*D); + Wme = (weight_scale*(D + E + G - 2*M))/(6*E); + Wee = (weight_scale*(-D + 5*E - G + 2*M))/(6*E); + Wgg = weight_scale; + Wmg = 0; + Wed = weight_scale - Wgd - Wmd; + + berr = networkstatus_check_weights(Wgg, Wgd, Wmg, Wme, Wmd, Wee, + Wed, weight_scale, G, M, E, D, T, 10, 1); + } else { // G >= E + casename = "Case 3b (E scarce, Wme*E == Wmd*D)"; + Wgg = (weight_scale*(D + E + G + M))/(3*G); + Wmd = (weight_scale*(2*D + 2*E - G - M))/(6*D); + Wme = (weight_scale*(2*D + 2*E - G - M))/(6*E); + Wee = (weight_scale*(-2*D + 4*E + G + M))/(6*E); + Wgd = 0; + Wmg = weight_scale - Wgg; + Wed = weight_scale - Wmd; + + berr = networkstatus_check_weights(Wgg, Wgd, Wmg, Wme, Wmd, Wee, + Wed, weight_scale, G, M, E, D, T, 10, 1); + } + if (berr) { + log_warn(LD_DIR, "Bw Weights error %d for case %s. " + "G="I64_FORMAT" M="I64_FORMAT + " E="I64_FORMAT" D="I64_FORMAT" T="I64_FORMAT, + berr, casename, + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + } + } + } + + /* We cast down the weights to 32 bit ints on the assumption that + * weight_scale is ~= 10000. We need to ensure a rogue authority + * doesn't break this assumption to rig our weights */ + tor_assert(0 < weight_scale && weight_scale < INT32_MAX); + + if (Wgg < 0 || Wgg > weight_scale) { + log_warn(LD_DIR, "Bw %s: Wgg="I64_FORMAT"! G="I64_FORMAT + " M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT + " T="I64_FORMAT, + casename, I64_PRINTF_ARG(Wgg), + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + + Wgg = MAX(MIN(Wgg, weight_scale), 0); + } + if (Wgd < 0 || Wgd > weight_scale) { + log_warn(LD_DIR, "Bw %s: Wgd="I64_FORMAT"! G="I64_FORMAT + " M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT + " T="I64_FORMAT, + casename, I64_PRINTF_ARG(Wgd), + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + Wgd = MAX(MIN(Wgd, weight_scale), 0); + } + if (Wmg < 0 || Wmg > weight_scale) { + log_warn(LD_DIR, "Bw %s: Wmg="I64_FORMAT"! G="I64_FORMAT + " M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT + " T="I64_FORMAT, + casename, I64_PRINTF_ARG(Wmg), + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + Wmg = MAX(MIN(Wmg, weight_scale), 0); + } + if (Wme < 0 || Wme > weight_scale) { + log_warn(LD_DIR, "Bw %s: Wme="I64_FORMAT"! G="I64_FORMAT + " M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT + " T="I64_FORMAT, + casename, I64_PRINTF_ARG(Wme), + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + Wme = MAX(MIN(Wme, weight_scale), 0); + } + if (Wmd < 0 || Wmd > weight_scale) { + log_warn(LD_DIR, "Bw %s: Wmd="I64_FORMAT"! G="I64_FORMAT + " M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT + " T="I64_FORMAT, + casename, I64_PRINTF_ARG(Wmd), + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + Wmd = MAX(MIN(Wmd, weight_scale), 0); + } + if (Wee < 0 || Wee > weight_scale) { + log_warn(LD_DIR, "Bw %s: Wee="I64_FORMAT"! G="I64_FORMAT + " M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT + " T="I64_FORMAT, + casename, I64_PRINTF_ARG(Wee), + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + Wee = MAX(MIN(Wee, weight_scale), 0); + } + if (Wed < 0 || Wed > weight_scale) { + log_warn(LD_DIR, "Bw %s: Wed="I64_FORMAT"! G="I64_FORMAT + " M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT + " T="I64_FORMAT, + casename, I64_PRINTF_ARG(Wed), + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); + Wed = MAX(MIN(Wed, weight_scale), 0); + } + + // Add consensus weight keywords + smartlist_add(chunks, tor_strdup("bandwidth-weights ")); + /* + * Provide Wgm=Wgg, Wmm=1, Wem=Wee, Weg=Wed. May later determine + * that middle nodes need different bandwidth weights for dirport traffic, + * or that weird exit policies need special weight, or that bridges + * need special weight. + * + * NOTE: This list is sorted. + */ + r = tor_snprintf(buf, sizeof(buf), + "Wbd=%d Wbe=%d Wbg=%d Wbm=%d " + "Wdb=%d " + "Web=%d Wed=%d Wee=%d Weg=%d Wem=%d " + "Wgb=%d Wgd=%d Wgg=%d Wgm=%d " + "Wmb=%d Wmd=%d Wme=%d Wmg=%d Wmm=%d\n", + (int)Wmd, (int)Wme, (int)Wmg, (int)weight_scale, + (int)weight_scale, + (int)weight_scale, (int)Wed, (int)Wee, (int)Wed, (int)Wee, + (int)weight_scale, (int)Wgd, (int)Wgg, (int)Wgg, + (int)weight_scale, (int)Wmd, (int)Wme, (int)Wmg, (int)weight_scale); + if (r<0) { + log_warn(LD_BUG, + "Not enough space in buffer for bandwidth-weights line."); + *buf = '\0'; + } + smartlist_add(chunks, tor_strdup(buf)); + log_notice(LD_CIRC, "Computed bandwidth weights for %s with v9: " + "G="I64_FORMAT" M="I64_FORMAT" E="I64_FORMAT" D="I64_FORMAT + " T="I64_FORMAT, + casename, + I64_PRINTF_ARG(G), I64_PRINTF_ARG(M), I64_PRINTF_ARG(E), + I64_PRINTF_ARG(D), I64_PRINTF_ARG(T)); +} + /** Given a list of vote networkstatus_t in votes, our public * authority identity_key, our private authority signing_key, * and the number of total_authorities that we believe exist in our @@ -489,18 +1347,27 @@ crypto_pk_env_t *identity_key, crypto_pk_env_t *signing_key, const char *legacy_id_key_digest, - crypto_pk_env_t *legacy_signing_key) + crypto_pk_env_t *legacy_signing_key, + consensus_flavor_t flavor) { smartlist_t *chunks; char *result = NULL; int consensus_method; - time_t valid_after, fresh_until, valid_until; int vote_seconds, dist_seconds; char *client_versions = NULL, *server_versions = NULL; smartlist_t *flags; + const char *flavor_name; + int64_t G=0, M=0, E=0, D=0, T=0; /* For bandwidth weights */ + const routerstatus_format_type_t rs_format = + flavor == FLAV_NS ? NS_V3_CONSENSUS : NS_V3_CONSENSUS_MICRODESC; + char *params = NULL; + int added_weights = 0; + tor_assert(flavor == FLAV_NS || flavor == FLAV_MICRODESC); tor_assert(total_authorities >= smartlist_len(votes)); + flavor_name = networkstatus_get_flavor_name(flavor); + if (!smartlist_len(votes)) { log_warn(LD_DIR, "Can't compute a consensus from no votes."); return NULL; @@ -593,7 +1460,7 @@ chunks = smartlist_create(); { - char buf[1024]; + char *buf=NULL; char va_buf[ISO_TIME_LEN+1], fu_buf[ISO_TIME_LEN+1], vu_buf[ISO_TIME_LEN+1]; char *flaglist; @@ -602,16 +1469,20 @@ format_iso_time(vu_buf, valid_until); flaglist = smartlist_join_strings(flags, " ", 0, NULL); - smartlist_add(chunks, tor_strdup("network-status-version 3\n" - "vote-status consensus\n")); + tor_asprintf(&buf, "network-status-version 3%s%s\n" + "vote-status consensus\n", + flavor == FLAV_NS ? "" : " ", + flavor == FLAV_NS ? "" : flavor_name); + + smartlist_add(chunks, buf); if (consensus_method >= 2) { - tor_snprintf(buf, sizeof(buf), "consensus-method %d\n", + tor_asprintf(&buf, "consensus-method %d\n", consensus_method); - smartlist_add(chunks, tor_strdup(buf)); + smartlist_add(chunks, buf); } - tor_snprintf(buf, sizeof(buf), + tor_asprintf(&buf, "valid-after %s\n" "fresh-until %s\n" "valid-until %s\n" @@ -622,18 +1493,26 @@ va_buf, fu_buf, vu_buf, vote_seconds, dist_seconds, client_versions, server_versions, flaglist); - smartlist_add(chunks, tor_strdup(buf)); + smartlist_add(chunks, buf); tor_free(flaglist); } + if (consensus_method >= MIN_METHOD_FOR_PARAMS) { + params = dirvote_compute_params(votes); + if (params) { + smartlist_add(chunks, tor_strdup("params ")); + smartlist_add(chunks, params); + smartlist_add(chunks, tor_strdup("\n")); + } + } + /* Sort the votes. */ smartlist_sort(votes, _compare_votes_by_authority_id); /* Add the authority sections. */ { smartlist_t *dir_sources = smartlist_create(); - SMARTLIST_FOREACH(votes, networkstatus_t *, v, - { + SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) { dir_src_ent_t *e = tor_malloc_zero(sizeof(dir_src_ent_t)); e->v = v; e->digest = get_voter(v)->identity_digest; @@ -647,18 +1526,17 @@ e_legacy->is_legacy = 1; smartlist_add(dir_sources, e_legacy); } - }); + } SMARTLIST_FOREACH_END(v); smartlist_sort(dir_sources, _compare_dir_src_ents_by_authority_id); - SMARTLIST_FOREACH(dir_sources, const dir_src_ent_t *, e, - { - char buf[1024]; + SMARTLIST_FOREACH_BEGIN(dir_sources, const dir_src_ent_t *, e) { struct in_addr in; char ip[INET_NTOA_BUF_LEN]; char fingerprint[HEX_DIGEST_LEN+1]; char votedigest[HEX_DIGEST_LEN+1]; networkstatus_t *v = e->v; networkstatus_voter_info_t *voter = get_voter(v); + char *buf = NULL; if (e->is_legacy) tor_assert(consensus_method >= 2); @@ -669,22 +1547,22 @@ base16_encode(votedigest, sizeof(votedigest), voter->vote_digest, DIGEST_LEN); - tor_snprintf(buf, sizeof(buf), + tor_asprintf(&buf, "dir-source %s%s %s %s %s %d %d\n", voter->nickname, e->is_legacy ? "-legacy" : "", fingerprint, voter->address, ip, voter->dir_port, voter->or_port); - smartlist_add(chunks, tor_strdup(buf)); + smartlist_add(chunks, buf); if (! e->is_legacy) { - tor_snprintf(buf, sizeof(buf), + tor_asprintf(&buf, "contact %s\n" "vote-digest %s\n", voter->contact, votedigest); - smartlist_add(chunks, tor_strdup(buf)); + smartlist_add(chunks, buf); } - }); + } SMARTLIST_FOREACH_END(e); SMARTLIST_FOREACH(dir_sources, dir_src_ent_t *, e, tor_free(e)); smartlist_free(dir_sources); } @@ -701,7 +1579,10 @@ smartlist_t *versions = smartlist_create(); smartlist_t *exitsummaries = smartlist_create(); uint32_t *bandwidths = tor_malloc(sizeof(uint32_t) * smartlist_len(votes)); + uint32_t *measured_bws = tor_malloc(sizeof(uint32_t) * + smartlist_len(votes)); int num_bandwidths; + int num_mbws; int *n_voter_flags; /* n_voter_flags[j] is the number of flags that * votes[j] knows about. */ @@ -711,7 +1592,7 @@ * is the same flag as votes[j]->known_flags[b]. */ int *named_flag; /* Index of the flag "Named" for votes[j] */ int *unnamed_flag; /* Index of the flag "Unnamed" for votes[j] */ - int chosen_named_idx, chosen_unnamed_idx; + int chosen_named_idx; strmap_t *name_to_id_map = strmap_new(); char conflict[DIGEST_LEN]; @@ -729,7 +1610,6 @@ for (i = 0; i < smartlist_len(votes); ++i) unnamed_flag[i] = named_flag[i] = -1; chosen_named_idx = smartlist_string_pos(flags, "Named"); - chosen_unnamed_idx = smartlist_string_pos(flags, "Unnamed"); /* Build the flag index. */ SMARTLIST_FOREACH(votes, networkstatus_t *, v, @@ -768,7 +1648,7 @@ strmap_set_lc(name_to_id_map, rs->status.nickname, rs->status.identity_digest); } else if (d != conflict && - memcmp(d, rs->status.identity_digest, DIGEST_LEN)) { + fast_memcmp(d, rs->status.identity_digest, DIGEST_LEN)) { /* Authorities disagree about this nickname. */ strmap_set_lc(name_to_id_map, rs->status.nickname, conflict); } else { @@ -792,7 +1672,7 @@ } else if (!d) { /* We have no name officially mapped to this digest. */ strmap_set_lc(name_to_id_map, rs->status.nickname, unknown); - } else if (!memcmp(d, rs->status.identity_digest, DIGEST_LEN)) { + } else if (fast_memeq(d, rs->status.identity_digest, DIGEST_LEN)) { /* Authorities disagree about this nickname. */ strmap_set_lc(name_to_id_map, rs->status.nickname, conflict); } else { @@ -813,17 +1693,20 @@ const char *chosen_name = NULL; int exitsummary_disagreement = 0; int is_named = 0, is_unnamed = 0, is_running = 0; + int is_guard = 0, is_exit = 0, is_bad_exit = 0; int naming_conflict = 0; int n_listing = 0; int i; - char buf[256]; + char *buf=NULL; + char microdesc_digest[DIGEST256_LEN]; /* Of the next-to-be-considered digest in each voter, which is first? */ SMARTLIST_FOREACH(votes, networkstatus_t *, v, { if (index[v_sl_idx] < size[v_sl_idx]) { rs = smartlist_get(v->routerstatus_list, index[v_sl_idx]); if (!lowest_id || - memcmp(rs->status.identity_digest, lowest_id, DIGEST_LEN) < 0) + fast_memcmp(rs->status.identity_digest, + lowest_id, DIGEST_LEN) < 0) lowest_id = rs->status.identity_digest; } }); @@ -835,13 +1718,14 @@ smartlist_clear(chosen_flags); smartlist_clear(versions); num_bandwidths = 0; + num_mbws = 0; /* Okay, go through all the entries for this digest. */ SMARTLIST_FOREACH_BEGIN(votes, networkstatus_t *, v) { if (index[v_sl_idx] >= size[v_sl_idx]) continue; /* out of entries. */ rs = smartlist_get(v->routerstatus_list, index[v_sl_idx]); - if (memcmp(rs->status.identity_digest, lowest_id, DIGEST_LEN)) + if (fast_memcmp(rs->status.identity_digest, lowest_id, DIGEST_LEN)) continue; /* doesn't include this router. */ /* At this point, we know that we're looking at a routerstatus with * identity "lowest". @@ -868,6 +1752,9 @@ } /* count bandwidths */ + if (rs->status.has_measured_bw) + measured_bws[num_mbws++] = rs->status.measured_bw; + if (rs->status.has_bandwidth) bandwidths[num_bandwidths++] = rs->status.bandwidth; } SMARTLIST_FOREACH_END(v); @@ -879,9 +1766,11 @@ /* Figure out the most popular opinion of what the most recent * routerinfo and its contents are. */ - rs = compute_routerstatus_consensus(matching_descs); + memset(microdesc_digest, 0, sizeof(microdesc_digest)); + rs = compute_routerstatus_consensus(matching_descs, consensus_method, + microdesc_digest); /* Copy bits of that into rs_out. */ - tor_assert(!memcmp(lowest_id, rs->status.identity_digest, DIGEST_LEN)); + tor_assert(fast_memeq(lowest_id, rs->status.identity_digest,DIGEST_LEN)); memcpy(rs_out.identity_digest, lowest_id, DIGEST_LEN); memcpy(rs_out.descriptor_digest, rs->status.descriptor_digest, DIGEST_LEN); @@ -905,7 +1794,7 @@ const char *d = strmap_get_lc(name_to_id_map, rs_out.nickname); if (!d) { is_named = is_unnamed = 0; - } else if (!memcmp(d, lowest_id, DIGEST_LEN)) { + } else if (fast_memeq(d, lowest_id, DIGEST_LEN)) { is_named = 1; is_unnamed = 0; } else { is_named = 0; is_unnamed = 1; @@ -925,8 +1814,14 @@ } else { if (flag_counts[fl_sl_idx] > n_flag_voters[fl_sl_idx]/2) { smartlist_add(chosen_flags, (char*)fl); - if (!strcmp(fl, "Running")) + if (!strcmp(fl, "Exit")) + is_exit = 1; + else if (!strcmp(fl, "Guard")) + is_guard = 1; + else if (!strcmp(fl, "Running")) is_running = 1; + else if (!strcmp(fl, "BadExit")) + is_bad_exit = 1; } } }); @@ -945,11 +1840,36 @@ } /* Pick a bandwidth */ - if (consensus_method >= 5 && num_bandwidths > 0) { + if (consensus_method >= 6 && num_mbws > 2) { + rs_out.has_bandwidth = 1; + rs_out.bandwidth = median_uint32(measured_bws, num_mbws); + } else if (consensus_method >= 5 && num_bandwidths > 0) { rs_out.has_bandwidth = 1; rs_out.bandwidth = median_uint32(bandwidths, num_bandwidths); } + /* Fix bug 2203: Do not count BadExit nodes as Exits for bw weights */ + if (consensus_method >= 11) { + is_exit = is_exit && !is_bad_exit; + } + + if (consensus_method >= MIN_METHOD_FOR_BW_WEIGHTS) { + if (rs_out.has_bandwidth) { + T += rs_out.bandwidth; + if (is_exit && is_guard) + D += rs_out.bandwidth; + else if (is_exit) + E += rs_out.bandwidth; + else if (is_guard) + G += rs_out.bandwidth; + else + M += rs_out.bandwidth; + } else { + log_warn(LD_BUG, "Missing consensus bandwidth for router %s", + rs_out.nickname); + } + } + /* Ok, we already picked a descriptor digest we want to list * previously. Now we want to use the exit policy summary from * that descriptor. If everybody plays nice all the voters who @@ -972,11 +1892,11 @@ SMARTLIST_FOREACH(matching_descs, vote_routerstatus_t *, vsr, { /* Check if the vote where this status comes from had the * proper descriptor */ - tor_assert(!memcmp(rs_out.identity_digest, + tor_assert(fast_memeq(rs_out.identity_digest, vsr->status.identity_digest, DIGEST_LEN)); if (vsr->status.has_exitsummary && - !memcmp(rs_out.descriptor_digest, + fast_memeq(rs_out.descriptor_digest, vsr->status.descriptor_digest, DIGEST_LEN)) { tor_assert(vsr->status.exitsummary); @@ -1034,11 +1954,23 @@ } } - /* Okay!! Now we can write the descriptor... */ - /* First line goes into "buf". */ - routerstatus_format_entry(buf, sizeof(buf), &rs_out, NULL, 1, 0); - smartlist_add(chunks, tor_strdup(buf)); - /* Second line is all flags. The "\n" is missing. */ + { + char buf[4096]; + /* Okay!! Now we can write the descriptor... */ + /* First line goes into "buf". */ + routerstatus_format_entry(buf, sizeof(buf), &rs_out, NULL, + rs_format); + smartlist_add(chunks, tor_strdup(buf)); + } + /* Now an m line, if applicable. */ + if (flavor == FLAV_MICRODESC && + !tor_digest256_is_zero(microdesc_digest)) { + char m[BASE64_DIGEST256_LEN+1], *cp; + digest256_to_base64(m, microdesc_digest); + tor_asprintf(&cp, "m %s\n", m); + smartlist_add(chunks, cp); + } + /* Next line is all flags. The "\n" is missing. */ smartlist_add(chunks, smartlist_join_strings(chosen_flags, " ", 0, NULL)); /* Now the version line. */ @@ -1049,24 +1981,16 @@ smartlist_add(chunks, tor_strdup("\n")); /* Now the weight line. */ if (rs_out.has_bandwidth) { - int r = tor_snprintf(buf, sizeof(buf), - "w Bandwidth=%d\n", rs_out.bandwidth); - if (r<0) { - log_warn(LD_BUG, "Not enough space in buffer for weight line."); - *buf = '\0'; - } - smartlist_add(chunks, tor_strdup(buf)); - }; + char *cp=NULL; + tor_asprintf(&cp, "w Bandwidth=%d\n", rs_out.bandwidth); + smartlist_add(chunks, cp); + } + /* Now the exitpolicy summary line. */ - if (rs_out.has_exitsummary) { - char buf[MAX_POLICY_LINE_LEN+1]; - int r = tor_snprintf(buf, sizeof(buf), "p %s\n", rs_out.exitsummary); - if (r<0) { - log_warn(LD_BUG, "Not enough space in buffer for exitpolicy line."); - *buf = '\0'; - } - smartlist_add(chunks, tor_strdup(buf)); - }; + if (rs_out.has_exitsummary && flavor == FLAV_NS) { + tor_asprintf(&buf, "p %s\n", rs_out.exitsummary); + smartlist_add(chunks, buf); + } /* And the loop is over and we move on to the next router */ } @@ -1087,34 +2011,97 @@ smartlist_free(versions); smartlist_free(exitsummaries); tor_free(bandwidths); + tor_free(measured_bws); + } + + if (consensus_method >= MIN_METHOD_FOR_FOOTER) { + /* Starting with consensus method 9, we clearly mark the directory + * footer region */ + smartlist_add(chunks, tor_strdup("directory-footer\n")); + } + + if (consensus_method >= MIN_METHOD_FOR_BW_WEIGHTS) { + int64_t weight_scale = BW_WEIGHT_SCALE; + char *bw_weight_param = NULL; + + // Parse params, extract BW_WEIGHT_SCALE if present + // DO NOT use consensus_param_bw_weight_scale() in this code! + // The consensus is not formed yet! + if (params) { + if (strcmpstart(params, "bwweightscale=") == 0) + bw_weight_param = params; + else + bw_weight_param = strstr(params, " bwweightscale="); + } + + if (bw_weight_param) { + int ok=0; + char *eq = strchr(bw_weight_param, '='); + if (eq) { + weight_scale = tor_parse_long(eq+1, 10, INT32_MIN, INT32_MAX, &ok, + NULL); + if (!ok) { + log_warn(LD_DIR, "Bad element '%s' in bw weight param", + escaped(bw_weight_param)); + weight_scale = BW_WEIGHT_SCALE; + } + } else { + log_warn(LD_DIR, "Bad element '%s' in bw weight param", + escaped(bw_weight_param)); + weight_scale = BW_WEIGHT_SCALE; + } + } + + if (consensus_method < 10) { + networkstatus_compute_bw_weights_v9(chunks, G, M, E, D, T, weight_scale); + added_weights = 1; + } else { + added_weights = networkstatus_compute_bw_weights_v10(chunks, G, M, E, D, + T, weight_scale); + } } /* Add a signature. */ { - char digest[DIGEST_LEN]; + char digest[DIGEST256_LEN]; char fingerprint[HEX_DIGEST_LEN+1]; char signing_key_fingerprint[HEX_DIGEST_LEN+1]; + digest_algorithm_t digest_alg = + flavor == FLAV_NS ? DIGEST_SHA1 : DIGEST_SHA256; + size_t digest_len = + flavor == FLAV_NS ? DIGEST_LEN : DIGEST256_LEN; + const char *algname = crypto_digest_algorithm_get_name(digest_alg); + char *buf = NULL; + char sigbuf[4096]; - char buf[4096]; smartlist_add(chunks, tor_strdup("directory-signature ")); /* Compute the hash of the chunks. */ - hash_list_members(digest, chunks); + hash_list_members(digest, digest_len, chunks, digest_alg); /* Get the fingerprints */ crypto_pk_get_fingerprint(identity_key, fingerprint, 0); crypto_pk_get_fingerprint(signing_key, signing_key_fingerprint, 0); /* add the junk that will go at the end of the line. */ - tor_snprintf(buf, sizeof(buf), "%s %s\n", fingerprint, - signing_key_fingerprint); + if (flavor == FLAV_NS) { + tor_asprintf(&buf, "%s %s\n", fingerprint, + signing_key_fingerprint); + } else { + tor_asprintf(&buf, "%s %s %s\n", + algname, fingerprint, + signing_key_fingerprint); + } + smartlist_add(chunks, buf); /* And the signature. */ - if (router_append_dirobj_signature(buf, sizeof(buf), digest, + sigbuf[0] = '\0'; + if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf), + digest, digest_len, signing_key)) { log_warn(LD_BUG, "Couldn't sign consensus networkstatus."); return NULL; /* This leaks, but it should never happen. */ } - smartlist_add(chunks, tor_strdup(buf)); + smartlist_add(chunks, tor_strdup(sigbuf)); if (legacy_id_key_digest && legacy_signing_key && consensus_method >= 3) { smartlist_add(chunks, tor_strdup("directory-signature ")); @@ -1122,14 +2109,23 @@ legacy_id_key_digest, DIGEST_LEN); crypto_pk_get_fingerprint(legacy_signing_key, signing_key_fingerprint, 0); - tor_snprintf(buf, sizeof(buf), "%s %s\n", fingerprint, - signing_key_fingerprint); - if (router_append_dirobj_signature(buf, sizeof(buf), digest, + if (flavor == FLAV_NS) { + tor_asprintf(&buf, "%s %s\n", fingerprint, + signing_key_fingerprint); + } else { + tor_asprintf(&buf, "%s %s %s\n", + algname, fingerprint, + signing_key_fingerprint); + } + smartlist_add(chunks, buf); + sigbuf[0] = '\0'; + if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf), + digest, digest_len, legacy_signing_key)) { log_warn(LD_BUG, "Couldn't sign consensus networkstatus."); return NULL; /* This leaks, but it should never happen. */ } - smartlist_add(chunks, tor_strdup(buf)); + smartlist_add(chunks, tor_strdup(sigbuf)); } } @@ -1146,11 +2142,15 @@ networkstatus_t *c; if (!(c = networkstatus_parse_vote_from_string(result, NULL, NS_TYPE_CONSENSUS))) { - log_err(LD_BUG,"Generated a networkstatus consensus we couldn't " + log_err(LD_BUG, "Generated a networkstatus consensus we couldn't " "parse."); tor_free(result); return NULL; } + // Verify balancing parameters + if (consensus_method >= MIN_METHOD_FOR_BW_WEIGHTS && added_weights) { + networkstatus_verify_bw_weights(c); + } networkstatus_vote_free(c); } @@ -1171,10 +2171,14 @@ const char **msg_out) { int r = 0; + const char *flavor; + smartlist_t *siglist; tor_assert(sigs); tor_assert(target); tor_assert(target->type == NS_TYPE_CONSENSUS); + flavor = networkstatus_get_flavor_name(target->flavor); + /* Do the times seem right? */ if (target->valid_after != sigs->valid_after) { *msg_out = "Valid-After times do not match " @@ -1191,79 +2195,180 @@ "when adding detached signatures to consensus"; return -1; } - /* Are they the same consensus? */ - if (memcmp(target->networkstatus_digest, sigs->networkstatus_digest, - DIGEST_LEN)) { - *msg_out = "Digest mismatch when adding detached signatures to consensus"; + siglist = strmap_get(sigs->signatures, flavor); + if (!siglist) { + *msg_out = "No signatures for given consensus flavor"; return -1; } - /* For each voter in src... */ - SMARTLIST_FOREACH_BEGIN(sigs->signatures, networkstatus_voter_info_t *, - src_voter) { - char voter_identity[HEX_DIGEST_LEN+1]; - networkstatus_voter_info_t *target_voter = - networkstatus_get_voter_by_id(target, src_voter->identity_digest); - authority_cert_t *cert = NULL; - - base16_encode(voter_identity, sizeof(voter_identity), - src_voter->identity_digest, DIGEST_LEN); - log_info(LD_DIR, "Looking at signature from %s", voter_identity); - /* If the target doesn't know about this voter, then forget it. */ - if (!target_voter) { - log_info(LD_DIR, "We do not know about %s", voter_identity); - continue; + /** Make sure all the digests we know match, and at least one matches. */ + { + digests_t *digests = strmap_get(sigs->digests, flavor); + int n_matches = 0; + digest_algorithm_t alg; + if (!digests) { + *msg_out = "No digests for given consensus flavor"; + return -1; + } + for (alg = DIGEST_SHA1; alg < N_DIGEST_ALGORITHMS; ++alg) { + if (!tor_mem_is_zero(digests->d[alg], DIGEST256_LEN)) { + if (fast_memeq(target->digests.d[alg], digests->d[alg], + DIGEST256_LEN)) { + ++n_matches; + } else { + *msg_out = "Mismatched digest."; + return -1; + } } + } + if (!n_matches) { + *msg_out = "No regognized digests for given consensus flavor"; + } + } - /* If the target already has a good signature from this voter, then skip - * this one. */ - if (target_voter->good_signature) { - log_info(LD_DIR, "We already have a good signature from %s", - voter_identity); - continue; + /* For each voter in src... */ + SMARTLIST_FOREACH_BEGIN(siglist, document_signature_t *, sig) { + char voter_identity[HEX_DIGEST_LEN+1]; + networkstatus_voter_info_t *target_voter = + networkstatus_get_voter_by_id(target, sig->identity_digest); + authority_cert_t *cert = NULL; + const char *algorithm; + document_signature_t *old_sig = NULL; + + algorithm = crypto_digest_algorithm_get_name(sig->alg); + + base16_encode(voter_identity, sizeof(voter_identity), + sig->identity_digest, DIGEST_LEN); + log_info(LD_DIR, "Looking at signature from %s using %s", voter_identity, + algorithm); + /* If the target doesn't know about this voter, then forget it. */ + if (!target_voter) { + log_info(LD_DIR, "We do not know any voter with ID %s", voter_identity); + continue; + } + + old_sig = voter_get_sig_by_algorithm(target_voter, sig->alg); + + /* If the target already has a good signature from this voter, then skip + * this one. */ + if (old_sig && old_sig->good_signature) { + log_info(LD_DIR, "We already have a good signature from %s using %s", + voter_identity, algorithm); + continue; + } + + /* Try checking the signature if we haven't already. */ + if (!sig->good_signature && !sig->bad_signature) { + cert = authority_cert_get_by_digests(sig->identity_digest, + sig->signing_key_digest); + if (cert) + networkstatus_check_document_signature(target, sig, cert); + } + + /* If this signature is good, or we don't have any signature yet, + * then maybe add it. */ + if (sig->good_signature || !old_sig || old_sig->bad_signature) { + log_info(LD_DIR, "Adding signature from %s with %s", voter_identity, + algorithm); + ++r; + if (old_sig) { + smartlist_remove(target_voter->sigs, old_sig); + document_signature_free(old_sig); } + smartlist_add(target_voter->sigs, document_signature_dup(sig)); + } else { + log_info(LD_DIR, "Not adding signature from %s", voter_identity); + } + } SMARTLIST_FOREACH_END(sig); - /* Try checking the signature if we haven't already. */ - if (!src_voter->good_signature && !src_voter->bad_signature) { - cert = authority_cert_get_by_digests(src_voter->identity_digest, - src_voter->signing_key_digest); - if (cert) { - networkstatus_check_voter_signature(target, src_voter, cert); - } - } + return r; +} + +/** Return a newly allocated string containing all the signatures on + * consensus by all voters. If for_detached_signatures is true, + * then the signatures will be put in a detached signatures document, so + * prefix any non-NS-flavored signatures with "additional-signature" rather + * than "directory-signature". */ +static char * +networkstatus_format_signatures(networkstatus_t *consensus, + int for_detached_signatures) +{ + smartlist_t *elements; + char buf[4096]; + char *result = NULL; + int n_sigs = 0; + const consensus_flavor_t flavor = consensus->flavor; + const char *flavor_name = networkstatus_get_flavor_name(flavor); + const char *keyword; + + if (for_detached_signatures && flavor != FLAV_NS) + keyword = "additional-signature"; + else + keyword = "directory-signature"; - /* If this signature is good, or we don't have any signature yet, - * then add it. */ - if (src_voter->good_signature || !target_voter->signature) { - log_info(LD_DIR, "Adding signature from %s", voter_identity); - ++r; - tor_free(target_voter->signature); - target_voter->signature = - tor_memdup(src_voter->signature, src_voter->signature_len); - memcpy(target_voter->signing_key_digest, src_voter->signing_key_digest, - DIGEST_LEN); - target_voter->signature_len = src_voter->signature_len; - target_voter->good_signature = src_voter->good_signature; - target_voter->bad_signature = src_voter->bad_signature; + elements = smartlist_create(); + + SMARTLIST_FOREACH_BEGIN(consensus->voters, networkstatus_voter_info_t *, v) { + SMARTLIST_FOREACH_BEGIN(v->sigs, document_signature_t *, sig) { + char sk[HEX_DIGEST_LEN+1]; + char id[HEX_DIGEST_LEN+1]; + if (!sig->signature || sig->bad_signature) + continue; + ++n_sigs; + base16_encode(sk, sizeof(sk), sig->signing_key_digest, DIGEST_LEN); + base16_encode(id, sizeof(id), sig->identity_digest, DIGEST_LEN); + if (flavor == FLAV_NS) { + tor_snprintf(buf, sizeof(buf), + "%s %s %s\n-----BEGIN SIGNATURE-----\n", + keyword, id, sk); } else { - log_info(LD_DIR, "Not adding signature from %s", voter_identity); + const char *digest_name = + crypto_digest_algorithm_get_name(sig->alg); + tor_snprintf(buf, sizeof(buf), + "%s%s%s %s %s %s\n-----BEGIN SIGNATURE-----\n", + keyword, + for_detached_signatures ? " " : "", + for_detached_signatures ? flavor_name : "", + digest_name, id, sk); } - } SMARTLIST_FOREACH_END(src_voter); + smartlist_add(elements, tor_strdup(buf)); + base64_encode(buf, sizeof(buf), sig->signature, sig->signature_len); + strlcat(buf, "-----END SIGNATURE-----\n", sizeof(buf)); + smartlist_add(elements, tor_strdup(buf)); + } SMARTLIST_FOREACH_END(sig); + } SMARTLIST_FOREACH_END(v); - return r; + result = smartlist_join_strings(elements, "", 0, NULL); + SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp)); + smartlist_free(elements); + if (!n_sigs) + tor_free(result); + return result; } /** Return a newly allocated string holding the detached-signatures document - * corresponding to the signatures on consensus. */ + * corresponding to the signatures on consensuses, which must contain + * exactly one FLAV_NS consensus, and no more than one consensus for each + * other flavor. */ char * -networkstatus_get_detached_signatures(networkstatus_t *consensus) +networkstatus_get_detached_signatures(smartlist_t *consensuses) { smartlist_t *elements; char buf[4096]; - char *result = NULL; - int n_sigs = 0; - tor_assert(consensus); - tor_assert(consensus->type == NS_TYPE_CONSENSUS); + char *result = NULL, *sigs = NULL; + networkstatus_t *consensus_ns = NULL; + tor_assert(consensuses); + + SMARTLIST_FOREACH(consensuses, networkstatus_t *, ns, { + tor_assert(ns); + tor_assert(ns->type == NS_TYPE_CONSENSUS); + if (ns && ns->flavor == FLAV_NS) + consensus_ns = ns; + }); + if (!consensus_ns) { + log_warn(LD_BUG, "No NS consensus given."); + return NULL; + } elements = smartlist_create(); @@ -1272,10 +2377,11 @@ vu_buf[ISO_TIME_LEN+1]; char d[HEX_DIGEST_LEN+1]; - base16_encode(d, sizeof(d), consensus->networkstatus_digest, DIGEST_LEN); - format_iso_time(va_buf, consensus->valid_after); - format_iso_time(fu_buf, consensus->fresh_until); - format_iso_time(vu_buf, consensus->valid_until); + base16_encode(d, sizeof(d), + consensus_ns->digests.d[DIGEST_SHA1], DIGEST_LEN); + format_iso_time(va_buf, consensus_ns->valid_after); + format_iso_time(fu_buf, consensus_ns->fresh_until); + format_iso_time(vu_buf, consensus_ns->valid_until); tor_snprintf(buf, sizeof(buf), "consensus-digest %s\n" @@ -1285,45 +2391,89 @@ smartlist_add(elements, tor_strdup(buf)); } - SMARTLIST_FOREACH(consensus->voters, networkstatus_voter_info_t *, v, - { - char sk[HEX_DIGEST_LEN+1]; - char id[HEX_DIGEST_LEN+1]; - if (!v->signature || v->bad_signature) + /* Get all the digests for the non-FLAV_NS consensuses */ + SMARTLIST_FOREACH_BEGIN(consensuses, networkstatus_t *, ns) { + const char *flavor_name = networkstatus_get_flavor_name(ns->flavor); + int alg; + if (ns->flavor == FLAV_NS) + continue; + + /* start with SHA256; we don't include SHA1 for anything but the basic + * consensus. */ + for (alg = DIGEST_SHA256; alg < N_DIGEST_ALGORITHMS; ++alg) { + char d[HEX_DIGEST256_LEN+1]; + const char *alg_name = + crypto_digest_algorithm_get_name(alg); + if (tor_mem_is_zero(ns->digests.d[alg], DIGEST256_LEN)) continue; - ++n_sigs; - base16_encode(sk, sizeof(sk), v->signing_key_digest, DIGEST_LEN); - base16_encode(id, sizeof(id), v->identity_digest, DIGEST_LEN); - tor_snprintf(buf, sizeof(buf), - "directory-signature %s %s\n-----BEGIN SIGNATURE-----\n", - id, sk); + base16_encode(d, sizeof(d), ns->digests.d[alg], DIGEST256_LEN); + tor_snprintf(buf, sizeof(buf), "additional-digest %s %s %s\n", + flavor_name, alg_name, d); smartlist_add(elements, tor_strdup(buf)); - base64_encode(buf, sizeof(buf), v->signature, v->signature_len); - strlcat(buf, "-----END SIGNATURE-----\n", sizeof(buf)); - smartlist_add(elements, tor_strdup(buf)); - }); + } + } SMARTLIST_FOREACH_END(ns); - result = smartlist_join_strings(elements, "", 0, NULL); + /* Now get all the sigs for non-FLAV_NS consensuses */ + SMARTLIST_FOREACH_BEGIN(consensuses, networkstatus_t *, ns) { + char *sigs; + if (ns->flavor == FLAV_NS) + continue; + sigs = networkstatus_format_signatures(ns, 1); + if (!sigs) { + log_warn(LD_DIR, "Couldn't format signatures"); + goto err; + } + smartlist_add(elements, sigs); + } SMARTLIST_FOREACH_END(ns); + /* Now add the FLAV_NS consensus signatrures. */ + sigs = networkstatus_format_signatures(consensus_ns, 1); + if (!sigs) + goto err; + smartlist_add(elements, sigs); + + result = smartlist_join_strings(elements, "", 0, NULL); + err: SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp)); smartlist_free(elements); - if (!n_sigs) - tor_free(result); return result; } +/** Return a newly allocated string holding a detached-signatures document for + * all of the in-progress consensuses in the n_flavors-element array at + * pending. */ +static char * +get_detached_signatures_from_pending_consensuses(pending_consensus_t *pending, + int n_flavors) +{ + int flav; + char *signatures; + smartlist_t *c = smartlist_create(); + for (flav = 0; flav < n_flavors; ++flav) { + if (pending[flav].consensus) + smartlist_add(c, pending[flav].consensus); + } + signatures = networkstatus_get_detached_signatures(c); + smartlist_free(c); + return signatures; +} + /** Release all storage held in s. */ void ns_detached_signatures_free(ns_detached_signatures_t *s) { + if (!s) + return; if (s->signatures) { - SMARTLIST_FOREACH(s->signatures, networkstatus_voter_info_t *, v, - { - tor_free(v->signature); - tor_free(v); - }); - smartlist_free(s->signatures); + STRMAP_FOREACH(s->signatures, flavor, smartlist_t *, sigs) { + SMARTLIST_FOREACH(sigs, document_signature_t *, sig, + document_signature_free(sig)); + smartlist_free(sigs); + } STRMAP_FOREACH_END; + strmap_free(s->signatures, NULL); + strmap_free(s->digests, _tor_free); } + tor_free(s); } @@ -1513,7 +2663,7 @@ if (voting_schedule.voting_ends < now && !voting_schedule.have_built_consensus) { log_notice(LD_DIR, "Time to compute a consensus."); - dirvote_compute_consensus(); + dirvote_compute_consensuses(); /* XXXX We will want to try again later if we haven't got enough * votes yet. Implement this if it turns out to ever happen. */ voting_schedule.have_built_consensus = 1; @@ -1550,14 +2700,13 @@ /** List of pending_vote_t for the previous vote. After we've used them to * build a consensus, the votes go here for the next period. */ static smartlist_t *previous_vote_list = NULL; -/** The body of the consensus that we're currently building. Once we - * have it built, it goes into dirserv.c */ -static char *pending_consensus_body = NULL; + +static pending_consensus_t pending_consensuses[N_CONSENSUS_FLAVORS]; + /** The detached signatures for the consensus that we're currently * building. */ static char *pending_consensus_signatures = NULL; -/** The parsed in-progress consensus document. */ -static networkstatus_t *pending_consensus = NULL; + /** List of ns_detached_signatures_t: hold signatures that get posted to us * before we have generated the consensus on our own. */ static smartlist_t *pending_consensus_signature_list = NULL; @@ -1651,15 +2800,39 @@ static void dirvote_fetch_missing_signatures(void) { - if (!pending_consensus) + int need_any = 0; + int i; + for (i=0; i < N_CONSENSUS_FLAVORS; ++i) { + networkstatus_t *consensus = pending_consensuses[i].consensus; + if (!consensus || + networkstatus_check_consensus_signature(consensus, -1) == 1) { + /* We have no consensus, or we have one that's signed by everybody. */ + continue; + } + need_any = 1; + } + if (!need_any) return; - if (networkstatus_check_consensus_signature(pending_consensus, -1) == 1) - return; /* we have a signature from everybody. */ directory_get_from_all_authorities(DIR_PURPOSE_FETCH_DETACHED_SIGNATURES, 0, NULL); } +/** Release all storage held by pending consensuses (those waiting for + * signatures). */ +static void +dirvote_clear_pending_consensuses(void) +{ + int i; + for (i = 0; i < N_CONSENSUS_FLAVORS; ++i) { + pending_consensus_t *pc = &pending_consensuses[i]; + tor_free(pc->body); + + networkstatus_vote_free(pc->consensus); + pc->consensus = NULL; + } +} + /** Drop all currently pending votes, consensus, and detached signatures. */ static void dirvote_clear_votes(int all_votes) @@ -1697,12 +2870,8 @@ tor_free(cp)); smartlist_clear(pending_consensus_signature_list); } - tor_free(pending_consensus_body); tor_free(pending_consensus_signatures); - if (pending_consensus) { - networkstatus_vote_free(pending_consensus); - pending_consensus = NULL; - } + dirvote_clear_pending_consensuses(); } /** Return a newly allocated string containing the hex-encoded v3 authority @@ -1760,7 +2929,13 @@ } tor_assert(smartlist_len(vote->voters) == 1); vi = get_voter(vote); - tor_assert(vi->good_signature == 1); + { + int any_sig_good = 0; + SMARTLIST_FOREACH(vi->sigs, document_signature_t *, sig, + if (sig->good_signature) + any_sig_good = 1); + tor_assert(any_sig_good); + } ds = trusteddirserver_get_by_v3_auth_digest(vi->identity_digest); if (!ds) { char *keys = list_v3_auth_ids(); @@ -1797,15 +2972,19 @@ goto err; } + /* Fetch any new router descriptors we just learned about */ + update_consensus_router_descriptor_downloads(time(NULL), 1, vote); + /* Now see whether we already have a vote from this authority. */ SMARTLIST_FOREACH(pending_vote_list, pending_vote_t *, v, { - if (! memcmp(v->vote->cert->cache_info.identity_digest, + if (fast_memeq(v->vote->cert->cache_info.identity_digest, vote->cert->cache_info.identity_digest, DIGEST_LEN)) { networkstatus_voter_info_t *vi_old = get_voter(v->vote); - if (!memcmp(vi_old->vote_digest, vi->vote_digest, DIGEST_LEN)) { + if (fast_memeq(vi_old->vote_digest, vi->vote_digest, DIGEST_LEN)) { /* Ah, it's the same vote. Not a problem. */ - log_info(LD_DIR, "Discarding a vote we already have."); + log_info(LD_DIR, "Discarding a vote we already have (from %s).", + vi->address); if (*status_out < 200) *status_out = 200; goto discard; @@ -1832,7 +3011,7 @@ goto err; } } - }); + }); pending_vote = tor_malloc_zero(sizeof(pending_vote_t)); pending_vote->vote_body = new_cached_dir(tor_strndup(vote_body, @@ -1856,8 +3035,7 @@ *status_out = 400; discard: - if (vote) - networkstatus_vote_free(vote); + networkstatus_vote_free(vote); if (end_of_vote && !strcmpstart(end_of_vote, "network-status-version ")) { vote_body = end_of_vote; @@ -1884,14 +3062,18 @@ * pending_consensus: it won't be ready to be published until we have * everybody else's signatures collected too. (V3 Authority only) */ static int -dirvote_compute_consensus(void) +dirvote_compute_consensuses(void) { /* Have we got enough votes to try? */ - int n_votes, n_voters; + int n_votes, n_voters, n_vote_running = 0; smartlist_t *votes = NULL, *votestrings = NULL; char *consensus_body = NULL, *signatures = NULL, *votefile; networkstatus_t *consensus = NULL; authority_cert_t *my_cert; + pending_consensus_t pending[N_CONSENSUS_FLAVORS]; + int flav; + + memset(pending, 0, sizeof(pending)); if (!pending_vote_list) pending_vote_list = smartlist_create(); @@ -1900,7 +3082,20 @@ n_votes = smartlist_len(pending_vote_list); if (n_votes <= n_voters/2) { log_warn(LD_DIR, "We don't have enough votes to generate a consensus: " - "%d of %d", n_votes, n_voters/2); + "%d of %d", n_votes, n_voters/2+1); + goto err; + } + tor_assert(pending_vote_list); + SMARTLIST_FOREACH(pending_vote_list, pending_vote_t *, v, { + if (smartlist_string_isin(v->vote->known_flags, "Running")) + n_vote_running++; + }); + if (!n_vote_running) { + /* See task 1066. */ + log_warn(LD_DIR, "Nobody has voted on the Running flag. Generating " + "and publishing a consensus without Running nodes " + "would make many clients stop working. Not " + "generating a consensus!"); goto err; } @@ -1931,47 +3126,71 @@ char legacy_dbuf[DIGEST_LEN]; crypto_pk_env_t *legacy_sign=NULL; char *legacy_id_digest = NULL; + int n_generated = 0; if (get_options()->V3AuthUseLegacyKey) { authority_cert_t *cert = get_my_v3_legacy_cert(); legacy_sign = get_my_v3_legacy_signing_key(); if (cert) { - crypto_pk_get_digest(cert->identity_key, legacy_dbuf); - legacy_id_digest = legacy_dbuf; + if (crypto_pk_get_digest(cert->identity_key, legacy_dbuf)) { + log_warn(LD_BUG, + "Unable to compute digest of legacy v3 identity key"); + } else { + legacy_id_digest = legacy_dbuf; + } } } - consensus_body = networkstatus_compute_consensus( + + for (flav = 0; flav < N_CONSENSUS_FLAVORS; ++flav) { + const char *flavor_name = networkstatus_get_flavor_name(flav); + consensus_body = networkstatus_compute_consensus( votes, n_voters, my_cert->identity_key, - get_my_v3_authority_signing_key(), legacy_id_digest, legacy_sign); - } - if (!consensus_body) { - log_warn(LD_DIR, "Couldn't generate a consensus at all!"); - goto err; - } - consensus = networkstatus_parse_vote_from_string(consensus_body, NULL, - NS_TYPE_CONSENSUS); - if (!consensus) { - log_warn(LD_DIR, "Couldn't parse consensus we generated!"); - goto err; + get_my_v3_authority_signing_key(), legacy_id_digest, legacy_sign, + flav); + + if (!consensus_body) { + log_warn(LD_DIR, "Couldn't generate a %s consensus at all!", + flavor_name); + continue; + } + consensus = networkstatus_parse_vote_from_string(consensus_body, NULL, + NS_TYPE_CONSENSUS); + if (!consensus) { + log_warn(LD_DIR, "Couldn't parse %s consensus we generated!", + flavor_name); + tor_free(consensus_body); + continue; + } + + /* 'Check' our own signature, to mark it valid. */ + networkstatus_check_consensus_signature(consensus, -1); + + pending[flav].body = consensus_body; + pending[flav].consensus = consensus; + n_generated++; + consensus_body = NULL; + consensus = NULL; + } + if (!n_generated) { + log_warn(LD_DIR, "Couldn't generate any consensus flavors at all."); + goto err; + } } - /* 'Check' our own signature, to mark it valid. */ - networkstatus_check_consensus_signature(consensus, -1); - signatures = networkstatus_get_detached_signatures(consensus); + signatures = get_detached_signatures_from_pending_consensuses( + pending, N_CONSENSUS_FLAVORS); + if (!signatures) { log_warn(LD_DIR, "Couldn't extract signatures."); goto err; } - tor_free(pending_consensus_body); - pending_consensus_body = consensus_body; + dirvote_clear_pending_consensuses(); + memcpy(pending_consensuses, pending, sizeof(pending)); + tor_free(pending_consensus_signatures); pending_consensus_signatures = signatures; - if (pending_consensus) - networkstatus_vote_free(pending_consensus); - pending_consensus = consensus; - if (pending_consensus_signature_list) { int n_sigs = 0; /* we may have gotten signatures for this consensus before we built @@ -1979,7 +3198,7 @@ SMARTLIST_FOREACH(pending_consensus_signature_list, char *, sig, { const char *msg = NULL; - int r = dirvote_add_signatures_to_pending_consensus(sig, &msg); + int r = dirvote_add_signatures_to_all_pending_consensuses(sig, &msg); if (r >= 0) n_sigs += r; else @@ -2003,10 +3222,10 @@ strlen(pending_consensus_signatures), 0); log_notice(LD_DIR, "Signature(s) posted."); + smartlist_free(votes); return 0; err: - if (votes) - smartlist_free(votes); + smartlist_free(votes); tor_free(consensus_body); tor_free(signatures); networkstatus_vote_free(consensus); @@ -2015,76 +3234,62 @@ } /** Helper: we just got the detached_signatures_body sent to us as - * signatures on the currently pending consensus. Add them to the consensus + * signatures on the currently pending consensus. Add them to pc * as appropriate. Return the number of signatures added. (?) */ static int dirvote_add_signatures_to_pending_consensus( - const char *detached_signatures_body, + pending_consensus_t *pc, + ns_detached_signatures_t *sigs, const char **msg_out) { - ns_detached_signatures_t *sigs = NULL; + const char *flavor_name; int r = -1; - tor_assert(detached_signatures_body); - tor_assert(msg_out); - /* Only call if we have a pending consensus right now. */ - tor_assert(pending_consensus); - tor_assert(pending_consensus_body); + tor_assert(pc->consensus); + tor_assert(pc->body); tor_assert(pending_consensus_signatures); + flavor_name = networkstatus_get_flavor_name(pc->consensus->flavor); *msg_out = NULL; - if (!(sigs = networkstatus_parse_detached_signatures( - detached_signatures_body, NULL))) { - *msg_out = "Couldn't parse detached signatures."; - goto err; + { + smartlist_t *sig_list = strmap_get(sigs->signatures, flavor_name); + log_info(LD_DIR, "Have %d signatures for adding to %s consensus.", + sig_list ? smartlist_len(sig_list) : 0, flavor_name); } - - log_info(LD_DIR, "Have %d signatures for adding to consensus.", - smartlist_len(sigs->signatures)); - r = networkstatus_add_detached_signatures(pending_consensus, - sigs, msg_out); + r = networkstatus_add_detached_signatures(pc->consensus, sigs, msg_out); log_info(LD_DIR,"Added %d signatures to consensus.", r); if (r >= 1) { - char *new_detached = - networkstatus_get_detached_signatures(pending_consensus); - const char *src; + char *new_signatures = + networkstatus_format_signatures(pc->consensus, 0); char *dst, *dst_end; size_t new_consensus_len; - if (!new_detached) { + if (!new_signatures) { *msg_out = "No signatures to add"; goto err; } new_consensus_len = - strlen(pending_consensus_body) + strlen(new_detached) + 1; - pending_consensus_body = tor_realloc(pending_consensus_body, - new_consensus_len); - dst_end = pending_consensus_body + new_consensus_len; - dst = strstr(pending_consensus_body, "directory-signature "); + strlen(pc->body) + strlen(new_signatures) + 1; + pc->body = tor_realloc(pc->body, new_consensus_len); + dst_end = pc->body + new_consensus_len; + dst = strstr(pc->body, "directory-signature "); tor_assert(dst); - src = strstr(new_detached, "directory-signature "); - tor_assert(src); - strlcpy(dst, src, dst_end-dst); + strlcpy(dst, new_signatures, dst_end-dst); /* We remove this block once it has failed to crash for a while. But * unless it shows up in profiles, we're probably better leaving it in, * just in case we break detached signature processing at some point. */ { - ns_detached_signatures_t *sigs = - networkstatus_parse_detached_signatures(new_detached, NULL); networkstatus_t *v = networkstatus_parse_vote_from_string( - pending_consensus_body, NULL, + pc->body, NULL, NS_TYPE_CONSENSUS); - tor_assert(sigs); - ns_detached_signatures_free(sigs); tor_assert(v); networkstatus_vote_free(v); } - tor_free(pending_consensus_signatures); - pending_consensus_signatures = new_detached; *msg_out = "Signatures added"; + tor_free(new_signatures); } else if (r == 0) { *msg_out = "Signatures ignored"; } else { @@ -2096,8 +3301,62 @@ if (!*msg_out) *msg_out = "Unrecognized error while adding detached signatures."; done: - if (sigs) - ns_detached_signatures_free(sigs); + return r; +} + +static int +dirvote_add_signatures_to_all_pending_consensuses( + const char *detached_signatures_body, + const char **msg_out) +{ + int r=0, i, n_added = 0, errors = 0; + ns_detached_signatures_t *sigs; + tor_assert(detached_signatures_body); + tor_assert(msg_out); + tor_assert(pending_consensus_signatures); + + if (!(sigs = networkstatus_parse_detached_signatures( + detached_signatures_body, NULL))) { + *msg_out = "Couldn't parse detached signatures."; + goto err; + } + + for (i = 0; i < N_CONSENSUS_FLAVORS; ++i) { + int res; + pending_consensus_t *pc = &pending_consensuses[i]; + if (!pc->consensus) + continue; + res = dirvote_add_signatures_to_pending_consensus(pc, sigs, msg_out); + if (res < 0) + errors++; + else + n_added += res; + } + + if (errors && !n_added) { + r = -1; + goto err; + } + + if (n_added && pending_consensuses[FLAV_NS].consensus) { + char *new_detached = + get_detached_signatures_from_pending_consensuses( + pending_consensuses, N_CONSENSUS_FLAVORS); + if (new_detached) { + tor_free(pending_consensus_signatures); + pending_consensus_signatures = new_detached; + } + } + + r = n_added; + goto done; + err: + if (!*msg_out) + *msg_out = "Unrecognized error while adding detached signatures."; + done: + ns_detached_signatures_free(sigs); + /* XXXX NM Check how return is used. We can now have an error *and* + signatures added. */ return r; } @@ -2110,10 +3369,10 @@ const char *source, const char **msg) { - if (pending_consensus) { + if (pending_consensuses[FLAV_NS].consensus) { log_notice(LD_DIR, "Got a signature from %s. " "Adding it to the pending consensus.", source); - return dirvote_add_signatures_to_pending_consensus( + return dirvote_add_signatures_to_all_pending_consensuses( detached_signatures_body, msg); } else { log_notice(LD_DIR, "Got a signature from %s. " @@ -2132,17 +3391,25 @@ static int dirvote_publish_consensus(void) { - /* Can we actually publish it yet? */ - if (!pending_consensus || - networkstatus_check_consensus_signature(pending_consensus, 1)<0) { - log_warn(LD_DIR, "Not enough info to publish pending consensus"); - return -1; - } + int i; - if (networkstatus_set_current_consensus(pending_consensus_body, 0)) - log_warn(LD_DIR, "Error publishing consensus"); - else - log_notice(LD_DIR, "Consensus published."); + /* Now remember all the other consensuses as if we were a directory cache. */ + for (i = 0; i < N_CONSENSUS_FLAVORS; ++i) { + pending_consensus_t *pending = &pending_consensuses[i]; + const char *name; + name = networkstatus_get_flavor_name(i); + tor_assert(name); + if (!pending->consensus || + networkstatus_check_consensus_signature(pending->consensus, 1)<0) { + log_warn(LD_DIR, "Not enough info to publish pending %s consensus",name); + continue; + } + + if (networkstatus_set_current_consensus(pending->body, name, 0)) + log_warn(LD_DIR, "Error publishing %s consensus", name); + else + log_notice(LD_DIR, "Published %s consensus", name); + } return 0; } @@ -2152,20 +3419,16 @@ dirvote_free_all(void) { dirvote_clear_votes(1); - /* now empty as a result of clear_pending_votes. */ + /* now empty as a result of dirvote_clear_votes(). */ smartlist_free(pending_vote_list); pending_vote_list = NULL; smartlist_free(previous_vote_list); previous_vote_list = NULL; - tor_free(pending_consensus_body); + dirvote_clear_pending_consensuses(); tor_free(pending_consensus_signatures); - if (pending_consensus) { - networkstatus_vote_free(pending_consensus); - pending_consensus = NULL; - } if (pending_consensus_signature_list) { - /* now empty as a result of clear_pending_votes. */ + /* now empty as a result of dirvote_clear_votes(). */ smartlist_free(pending_consensus_signature_list); pending_consensus_signature_list = NULL; } @@ -2177,13 +3440,14 @@ /** Return the body of the consensus that we're currently trying to build. */ const char * -dirvote_get_pending_consensus(void) +dirvote_get_pending_consensus(consensus_flavor_t flav) { - return pending_consensus_body; + tor_assert(((int)flav) >= 0 && flav < N_CONSENSUS_FLAVORS); + return pending_consensuses[flav].body; } /** Return the signatures that we know for the consensus that we're currently - * trying to build */ + * trying to build. */ const char * dirvote_get_pending_detached_signatures(void) { @@ -2218,26 +3482,158 @@ if (by_id) { if (pending_vote_list && include_pending) { SMARTLIST_FOREACH(pending_vote_list, pending_vote_t *, pv, - if (!memcmp(get_voter(pv->vote)->identity_digest, fp, DIGEST_LEN)) + if (fast_memeq(get_voter(pv->vote)->identity_digest, fp, DIGEST_LEN)) return pv->vote_body); } if (previous_vote_list && include_previous) { SMARTLIST_FOREACH(previous_vote_list, pending_vote_t *, pv, - if (!memcmp(get_voter(pv->vote)->identity_digest, fp, DIGEST_LEN)) + if (fast_memeq(get_voter(pv->vote)->identity_digest, fp, DIGEST_LEN)) return pv->vote_body); } } else { if (pending_vote_list && include_pending) { SMARTLIST_FOREACH(pending_vote_list, pending_vote_t *, pv, - if (!memcmp(pv->vote->networkstatus_digest, fp, DIGEST_LEN)) + if (fast_memeq(pv->vote->digests.d[DIGEST_SHA1], fp, DIGEST_LEN)) return pv->vote_body); } if (previous_vote_list && include_previous) { SMARTLIST_FOREACH(previous_vote_list, pending_vote_t *, pv, - if (!memcmp(pv->vote->networkstatus_digest, fp, DIGEST_LEN)) + if (fast_memeq(pv->vote->digests.d[DIGEST_SHA1], fp, DIGEST_LEN)) return pv->vote_body); } } return NULL; } +/** Construct and return a new microdescriptor from a routerinfo ri. + * + * XXX Right now, there is only one way to generate microdescriptors from + * router descriptors. This may change in future consensus methods. If so, + * we'll need an internal way to remember which method we used, and ask for a + * particular method. + **/ +microdesc_t * +dirvote_create_microdescriptor(const routerinfo_t *ri) +{ + microdesc_t *result = NULL; + char *key = NULL, *summary = NULL, *family = NULL; + char buf[1024]; + size_t keylen; + char *out = buf, *end = buf+sizeof(buf); + + if (crypto_pk_write_public_key_to_string(ri->onion_pkey, &key, &keylen)<0) + goto done; + summary = policy_summarize(ri->exit_policy); + if (ri->declared_family) + family = smartlist_join_strings(ri->declared_family, " ", 0, NULL); + + if (tor_snprintf(out, end-out, "onion-key\n%s", key)<0) + goto done; + out += strlen(out); + if (family) { + if (tor_snprintf(out, end-out, "family %s\n", family)<0) + goto done; + out += strlen(out); + } + if (summary && strcmp(summary, "reject 1-65535")) { + if (tor_snprintf(out, end-out, "p %s\n", summary)<0) + goto done; + out += strlen(out); + } + *out = '\0'; /* Make sure it's nul-terminated. This should be a no-op */ + + { + smartlist_t *lst = microdescs_parse_from_string(buf, out, 0, 1); + if (smartlist_len(lst) != 1) { + log_warn(LD_DIR, "We generated a microdescriptor we couldn't parse."); + SMARTLIST_FOREACH(lst, microdesc_t *, md, microdesc_free(md)); + smartlist_free(lst); + goto done; + } + result = smartlist_get(lst, 0); + smartlist_free(lst); + } + + done: + tor_free(key); + tor_free(summary); + tor_free(family); + return result; +} + +/** Cached space-separated string to hold */ +static char *microdesc_consensus_methods = NULL; + +/** Format the appropriate vote line to describe the microdescriptor md + * in a consensus vote document. Write it into the out_len-byte buffer + * in out. Return -1 on failure and the number of characters written + * on success. */ +ssize_t +dirvote_format_microdesc_vote_line(char *out, size_t out_len, + const microdesc_t *md) +{ + char d64[BASE64_DIGEST256_LEN+1]; + if (!microdesc_consensus_methods) { + microdesc_consensus_methods = + make_consensus_method_list(MIN_METHOD_FOR_MICRODESC, + MAX_SUPPORTED_CONSENSUS_METHOD, + ","); + tor_assert(microdesc_consensus_methods); + } + if (digest256_to_base64(d64, md->digest)<0) + return -1; + + if (tor_snprintf(out, out_len, "m %s sha256=%s\n", + microdesc_consensus_methods, d64)<0) + return -1; + + return strlen(out); +} + +/** If vrs has a hash made for the consensus method method with + * the digest algorithm alg, decode it and copy it into + * digest256_out and return 0. Otherwise return -1. */ +int +vote_routerstatus_find_microdesc_hash(char *digest256_out, + const vote_routerstatus_t *vrs, + int method, + digest_algorithm_t alg) +{ + /* XXXX only returns the sha256 method. */ + const vote_microdesc_hash_t *h; + char mstr[64]; + size_t mlen; + char dstr[64]; + + tor_snprintf(mstr, sizeof(mstr), "%d", method); + mlen = strlen(mstr); + tor_snprintf(dstr, sizeof(dstr), " %s=", + crypto_digest_algorithm_get_name(alg)); + + for (h = vrs->microdesc; h; h = h->next) { + const char *cp = h->microdesc_hash_line; + size_t num_len; + /* cp looks like \d+(,\d+)* (digesttype=val )+ . Let's hunt for mstr in + * the first part. */ + while (1) { + num_len = strspn(cp, "1234567890"); + if (num_len == mlen && fast_memeq(mstr, cp, mlen)) { + /* This is the line. */ + char buf[BASE64_DIGEST256_LEN+1]; + /* XXXX ignores extraneous stuff if the digest is too long. This + * seems harmless enough, right? */ + cp = strstr(cp, dstr); + if (!cp) + return -1; + cp += strlen(dstr); + strlcpy(buf, cp, sizeof(buf)); + return digest256_from_base64(digest256_out, buf); + } + if (num_len == 0 || cp[num_len] != ',') + break; + cp += num_len + 1; + } + } + return -1; +} + diff -Nru tor-0.2.1.30/src/or/dirvote.h tor-0.2.2.35/src/or/dirvote.h --- tor-0.2.1.30/src/or/dirvote.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/dirvote.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,90 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file dirvote.h + * \brief Header file for dirvote.c. + **/ + +#ifndef _TOR_DIRVOTE_H +#define _TOR_DIRVOTE_H + +/** Lowest allowable value for VoteSeconds. */ +#define MIN_VOTE_SECONDS 20 +/** Lowest allowable value for DistSeconds. */ +#define MIN_DIST_SECONDS 20 +/** Smallest allowable voting interval. */ +#define MIN_VOTE_INTERVAL 300 + +void dirvote_free_all(void); + +/* vote manipulation */ +char *networkstatus_compute_consensus(smartlist_t *votes, + int total_authorities, + crypto_pk_env_t *identity_key, + crypto_pk_env_t *signing_key, + const char *legacy_identity_key_digest, + crypto_pk_env_t *legacy_signing_key, + consensus_flavor_t flavor); +int networkstatus_add_detached_signatures(networkstatus_t *target, + ns_detached_signatures_t *sigs, + const char **msg_out); +char *networkstatus_get_detached_signatures(smartlist_t *consensuses); +void ns_detached_signatures_free(ns_detached_signatures_t *s); + +/* cert manipulation */ +authority_cert_t *authority_cert_dup(authority_cert_t *cert); + +/* vote scheduling */ +void dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out); +time_t dirvote_get_start_of_next_interval(time_t now, int interval); +void dirvote_recalculate_timing(or_options_t *options, time_t now); +void dirvote_act(or_options_t *options, time_t now); + +/* invoked on timers and by outside triggers. */ +struct pending_vote_t * dirvote_add_vote(const char *vote_body, + const char **msg_out, + int *status_out); +int dirvote_add_signatures(const char *detached_signatures_body, + const char *source, + const char **msg_out); + +/* Item access */ +const char *dirvote_get_pending_consensus(consensus_flavor_t flav); +const char *dirvote_get_pending_detached_signatures(void); +#define DGV_BY_ID 1 +#define DGV_INCLUDE_PENDING 2 +#define DGV_INCLUDE_PREVIOUS 4 +const cached_dir_t *dirvote_get_vote(const char *fp, int flags); +void set_routerstatus_from_routerinfo(routerstatus_t *rs, + routerinfo_t *ri, time_t now, + int naming, int listbadexits, + int listbaddirs, int vote_on_hsdirs); +void router_clear_status_flags(routerinfo_t *ri); +networkstatus_t * +dirserv_generate_networkstatus_vote_obj(crypto_pk_env_t *private_key, + authority_cert_t *cert); + +microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri); +ssize_t dirvote_format_microdesc_vote_line(char *out, size_t out_len, + const microdesc_t *md); + +int vote_routerstatus_find_microdesc_hash(char *digest256_out, + const vote_routerstatus_t *vrs, + int method, + digest_algorithm_t alg); +document_signature_t *voter_get_sig_by_algorithm( + const networkstatus_voter_info_t *voter, + digest_algorithm_t alg); + +#ifdef DIRVOTE_PRIVATE +char *format_networkstatus_vote(crypto_pk_env_t *private_key, + networkstatus_t *v3_ns); +char *dirvote_compute_params(smartlist_t *votes); +#endif + +#endif + diff -Nru tor-0.2.1.30/src/or/dns.c tor-0.2.2.35/src/or/dns.c --- tor-0.2.1.30/src/or/dns.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/dns.c 2011-12-15 16:28:37.000000000 +0000 @@ -12,8 +12,70 @@ **/ #include "or.h" +#include "circuitlist.h" +#include "circuituse.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "control.h" +#include "dns.h" +#include "main.h" +#include "policies.h" +#include "relay.h" +#include "router.h" #include "ht.h" +#ifdef HAVE_EVENT2_DNS_H +#include +#include +#else +#include #include "eventdns.h" +#ifndef HAVE_EVDNS_SET_DEFAULT_OUTGOING_BIND_ADDRESS +#define HAVE_EVDNS_SET_DEFAULT_OUTGOING_BIND_ADDRESS +#endif +#endif + +#ifndef HAVE_EVENT2_DNS_H +struct evdns_base; +struct evdns_request; +#define evdns_base_new(x,y) tor_malloc(1) +#define evdns_base_clear_nameservers_and_suspend(base) \ + evdns_clear_nameservers_and_suspend() +#define evdns_base_search_clear(base) evdns_search_clear() +#define evdns_base_set_default_outgoing_bind_address(base, a, len) \ + evdns_set_default_outgoing_bind_address((a),(len)) +#define evdns_base_resolv_conf_parse(base, options, fname) \ + evdns_resolv_conf_parse((options), (fname)) +#define evdns_base_count_nameservers(base) \ + evdns_count_nameservers() +#define evdns_base_resume(base) \ + evdns_resume() +#define evdns_base_config_windows_nameservers(base) \ + evdns_config_windows_nameservers() +#define evdns_base_set_option_(base, opt, val) \ + evdns_set_option((opt),(val),DNS_OPTIONS_ALL) +/* Note: our internal eventdns.c, plus Libevent 1.4, used a 1 return to + * signify failure to launch a resolve. Libevent 2.0 uses a -1 return to + * signify a failure on a resolve, though if we're on Libevent 2.0, we should + * have event2/dns.h and never hit these macros. Regardless, 0 is success. */ +#define evdns_base_resolve_ipv4(base, addr, options, cb, ptr) \ + ((evdns_resolve_ipv4((addr), (options), (cb), (ptr))!=0) \ + ? NULL : ((void*)1)) +#define evdns_base_resolve_reverse(base, addr, options, cb, ptr) \ + ((evdns_resolve_reverse((addr), (options), (cb), (ptr))!=0) \ + ? NULL : ((void*)1)) +#define evdns_base_resolve_reverse_ipv6(base, addr, options, cb, ptr) \ + ((evdns_resolve_reverse_ipv6((addr), (options), (cb), (ptr))!=0) \ + ? NULL : ((void*)1)) + +#elif defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER < 0x02000303 +#define evdns_base_set_option_(base, opt, val) \ + evdns_base_set_option((base), (opt),(val),DNS_OPTIONS_ALL) + +#else +#define evdns_base_set_option_ evdns_base_set_option + +#endif /** Longest hostname we're willing to resolve. */ #define MAX_ADDRESSLEN 256 @@ -28,6 +90,9 @@ #define DNS_RESOLVE_FAILED_PERMANENT 2 #define DNS_RESOLVE_SUCCEEDED 3 +/** Our evdns_base; this structure handles all our name lookups. */ +static struct evdns_base *the_evdns_base = NULL; + /** Have we currently configured nameservers with eventdns? */ static int nameservers_configured = 0; /** Did our most recent attempt to configure nameservers with eventdns fail? */ @@ -89,6 +154,8 @@ uint32_t ttl; /**< What TTL did the nameserver tell us? */ /** Connections that want to know when we get an answer for this resolve. */ pending_connection_t *pending_connections; + /** Position of this element in the heap*/ + int minheap_idx; } cached_resolve_t; static void purge_expired_resolves(time_t now); @@ -211,8 +278,16 @@ { or_options_t *options = get_options(); if (! server_mode(options)) { - evdns_clear_nameservers_and_suspend(); - evdns_search_clear(); + + if (!the_evdns_base) { + if (!(the_evdns_base = evdns_base_new(tor_libevent_get_base(), 0))) { + log_err(LD_BUG, "Couldn't create an evdns_base"); + return -1; + } + } + + evdns_base_clear_nameservers_and_suspend(the_evdns_base); + evdns_base_search_clear(the_evdns_base); nameservers_configured = 0; tor_free(resolv_conf_fname); resolv_conf_mtime = 0; @@ -262,6 +337,8 @@ static void _free_cached_resolve(cached_resolve_t *r) { + if (!r) + return; while (r->pending_connections) { pending_connection_t *victim = r->pending_connections; r->pending_connections = victim->next; @@ -303,6 +380,7 @@ resolve->expire = expires; smartlist_pqueue_add(cached_resolve_pqueue, _compare_cached_resolves_by_expiry, + STRUCT_OFFSET(cached_resolve_t, minheap_idx), resolve); } @@ -325,8 +403,7 @@ _free_cached_resolve(item); } HT_CLEAR(cache_map, &cache_root); - if (cached_resolve_pqueue) - smartlist_free(cached_resolve_pqueue); + smartlist_free(cached_resolve_pqueue); cached_resolve_pqueue = NULL; tor_free(resolv_conf_fname); } @@ -349,7 +426,8 @@ if (resolve->expire > now) break; smartlist_pqueue_pop(cached_resolve_pqueue, - _compare_cached_resolves_by_expiry); + _compare_cached_resolves_by_expiry, + STRUCT_OFFSET(cached_resolve_t, minheap_idx)); if (resolve->state == CACHE_STATE_PENDING) { log_debug(LD_EXIT, @@ -393,7 +471,7 @@ log_err(LD_BUG, "The expired resolve we purged didn't match any in" " the cache. Tried to purge %s (%p); instead got %s (%p).", resolve->address, (void*)resolve, - removed ? removed->address : "NULL", (void*)remove); + removed ? removed->address : "NULL", (void*)removed); } tor_assert(removed == resolve); } else { @@ -611,7 +689,7 @@ * know the answer. */ if (tor_addr_from_str(&addr, exitconn->_base.address) >= 0) { if (tor_addr_family(&addr) == AF_INET) { - tor_addr_assign(&exitconn->_base.addr, &addr); + tor_addr_copy(&exitconn->_base.addr, &addr); exitconn->address_ttl = DEFAULT_DNS_TTL; return 1; } else { @@ -711,6 +789,7 @@ resolve = tor_malloc_zero(sizeof(cached_resolve_t)); resolve->magic = CACHED_RESOLVE_MAGIC; resolve->state = CACHE_STATE_PENDING; + resolve->minheap_idx = -1; resolve->is_reverse = is_reverse; strlcpy(resolve->address, exitconn->_base.address, sizeof(resolve->address)); @@ -807,7 +886,8 @@ tor_free(pend); log_debug(LD_EXIT, "First connection (fd %d) no longer waiting " "for resolve of %s", - conn->_base.s, escaped_safe_str(conn->_base.address)); + conn->_base.s, + escaped_safe_str(conn->_base.address)); return; } else { for ( ; pend->next; pend = pend->next) { @@ -1108,6 +1188,14 @@ conf_fname = "/etc/resolv.conf"; #endif + if (!the_evdns_base) { + if (!(the_evdns_base = evdns_base_new(tor_libevent_get_base(), 0))) { + log_err(LD_BUG, "Couldn't create an evdns_base"); + return -1; + } + } + +#ifdef HAVE_EVDNS_SET_DEFAULT_OUTGOING_BIND_ADDRESS if (options->OutboundBindAddress) { tor_addr_t addr; if (tor_addr_from_str(&addr, options->OutboundBindAddress) < 0) { @@ -1118,20 +1206,17 @@ struct sockaddr_storage ss; socklen = tor_addr_to_sockaddr(&addr, 0, (struct sockaddr *)&ss, sizeof(ss)); - if (socklen < 0) { + if (socklen <= 0) { log_warn(LD_BUG, "Couldn't convert outbound bind address to sockaddr." " Ignoring."); } else { - evdns_set_default_outgoing_bind_address((struct sockaddr *)&ss, - socklen); + evdns_base_set_default_outgoing_bind_address(the_evdns_base, + (struct sockaddr *)&ss, + socklen); } } } - - if (options->ServerDNSRandomizeCase) - evdns_set_option("randomize-case:", "1", DNS_OPTIONS_ALL); - else - evdns_set_option("randomize-case:", "0", DNS_OPTIONS_ALL); +#endif evdns_set_log_fn(evdns_log_cb); if (conf_fname) { @@ -1146,16 +1231,17 @@ return 0; } if (nameservers_configured) { - evdns_search_clear(); - evdns_clear_nameservers_and_suspend(); + evdns_base_search_clear(the_evdns_base); + evdns_base_clear_nameservers_and_suspend(the_evdns_base); } log_info(LD_EXIT, "Parsing resolver configuration in '%s'", conf_fname); - if ((r = evdns_resolv_conf_parse(DNS_OPTIONS_ALL, conf_fname))) { + if ((r = evdns_base_resolv_conf_parse(the_evdns_base, + DNS_OPTIONS_ALL, conf_fname))) { log_warn(LD_EXIT, "Unable to parse '%s', or no nameservers in '%s' (%d)", conf_fname, conf_fname, r); goto err; } - if (evdns_count_nameservers() == 0) { + if (evdns_base_count_nameservers(the_evdns_base) == 0) { log_warn(LD_EXIT, "Unable to find any nameservers in '%s'.", conf_fname); goto err; } @@ -1163,51 +1249,63 @@ resolv_conf_fname = tor_strdup(conf_fname); resolv_conf_mtime = st.st_mtime; if (nameservers_configured) - evdns_resume(); + evdns_base_resume(the_evdns_base); } #ifdef MS_WINDOWS else { if (nameservers_configured) { - evdns_search_clear(); - evdns_clear_nameservers_and_suspend(); + evdns_base_search_clear(the_evdns_base); + evdns_base_clear_nameservers_and_suspend(the_evdns_base); } - if (evdns_config_windows_nameservers()) { + if (evdns_base_config_windows_nameservers(the_evdns_base)) { log_warn(LD_EXIT,"Could not config nameservers."); goto err; } - if (evdns_count_nameservers() == 0) { + if (evdns_base_count_nameservers(the_evdns_base) == 0) { log_warn(LD_EXIT, "Unable to find any platform nameservers in " "your Windows configuration."); goto err; } if (nameservers_configured) - evdns_resume(); + evdns_base_resume(the_evdns_base); tor_free(resolv_conf_fname); resolv_conf_mtime = 0; } #endif - if (evdns_count_nameservers() == 1) { - evdns_set_option("max-timeouts:", "16", DNS_OPTIONS_ALL); - evdns_set_option("timeout:", "10", DNS_OPTIONS_ALL); +#define SET(k,v) evdns_base_set_option_(the_evdns_base, (k), (v)) + + if (evdns_base_count_nameservers(the_evdns_base) == 1) { + SET("max-timeouts:", "16"); + SET("timeout:", "10"); } else { - evdns_set_option("max-timeouts:", "3", DNS_OPTIONS_ALL); - evdns_set_option("timeout:", "5", DNS_OPTIONS_ALL); + SET("max-timeouts:", "3"); + SET("timeout:", "5"); } + if (options->ServerDNSRandomizeCase) + SET("randomize-case:", "1"); + else + SET("randomize-case:", "0"); + +#undef SET + dns_servers_relaunch_checks(); nameservers_configured = 1; if (nameserver_config_failed) { nameserver_config_failed = 0; - mark_my_descriptor_dirty(); + /* XXX the three calls to republish the descriptor might be producing + * descriptors that are only cosmetically different, especially on + * non-exit relays! -RD */ + mark_my_descriptor_dirty("dns resolvers back"); } return 0; err: nameservers_configured = 0; if (! nameserver_config_failed) { nameserver_config_failed = 1; - mark_my_descriptor_dirty(); + mark_my_descriptor_dirty("dns resolvers failed"); } return -1; } @@ -1292,6 +1390,7 @@ launch_resolve(edge_connection_t *exitconn) { char *addr = tor_strdup(exitconn->_base.address); + struct evdns_request *req = NULL; tor_addr_t a; int r; int options = get_options()->ServerDNSSearchDomains ? 0 @@ -1307,28 +1406,34 @@ r = tor_addr_parse_reverse_lookup_name( &a, exitconn->_base.address, AF_UNSPEC, 0); + + tor_assert(the_evdns_base); if (r == 0) { log_info(LD_EXIT, "Launching eventdns request for %s", escaped_safe_str(exitconn->_base.address)); - r = evdns_resolve_ipv4(exitconn->_base.address, options, - evdns_callback, addr); + req = evdns_base_resolve_ipv4(the_evdns_base, + exitconn->_base.address, options, + evdns_callback, addr); } else if (r == 1) { log_info(LD_EXIT, "Launching eventdns reverse request for %s", escaped_safe_str(exitconn->_base.address)); if (tor_addr_family(&a) == AF_INET) - r = evdns_resolve_reverse(tor_addr_to_in(&a), DNS_QUERY_NO_SEARCH, + req = evdns_base_resolve_reverse(the_evdns_base, + tor_addr_to_in(&a), DNS_QUERY_NO_SEARCH, evdns_callback, addr); else - r = evdns_resolve_reverse_ipv6(tor_addr_to_in6(&a), DNS_QUERY_NO_SEARCH, + req = evdns_base_resolve_reverse_ipv6(the_evdns_base, + tor_addr_to_in6(&a), DNS_QUERY_NO_SEARCH, evdns_callback, addr); } else if (r == -1) { log_warn(LD_BUG, "Somehow a malformed in-addr.arpa address reached here."); } - if (r) { - log_warn(LD_EXIT, "eventdns rejected address %s: error %d.", - escaped_safe_str(addr), r); - r = evdns_err_is_transient(r) ? -2 : -1; + r = 0; + if (!req) { + log_warn(LD_EXIT, "eventdns rejected address %s.", + escaped_safe_str(addr)); + r = -1; tor_free(addr); /* There is no evdns request in progress; stop * addr from getting leaked. */ } @@ -1420,7 +1525,7 @@ "broken.", address, n); if (!dns_is_completely_invalid) { dns_is_completely_invalid = 1; - mark_my_descriptor_dirty(); + mark_my_descriptor_dirty("dns hijacking confirmed"); } if (!dns_wildcarded_test_address_notice_given) control_event_server_status(LOG_WARN, "DNS_USELESS"); @@ -1449,8 +1554,8 @@ } log(dns_wildcard_one_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT, "Your DNS provider gave an answer for \"%s\", which " - "is not supposed to exist. Apparently they are hijacking " - "DNS failures. Trying to correct for this. We've noticed %d " + "is not supposed to exist. Apparently they are hijacking " + "DNS failures. Trying to correct for this. We've noticed %d " "possibly bad address%s so far.", string_address, strmap_size(dns_wildcard_response_count), (strmap_size(dns_wildcard_response_count) == 1) ? "" : "es"); @@ -1466,17 +1571,20 @@ launch_wildcard_check(int min_len, int max_len, const char *suffix) { char *addr; - int r; + struct evdns_request *req; addr = crypto_random_hostname(min_len, max_len, "", suffix); log_info(LD_EXIT, "Testing whether our DNS server is hijacking nonexistent " "domains with request for bogus hostname \"%s\"", addr); - r = evdns_resolve_ipv4(/* This "addr" tells us which address to resolve */ + tor_assert(the_evdns_base); + req = evdns_base_resolve_ipv4( + the_evdns_base, + /* This "addr" tells us which address to resolve */ addr, DNS_QUERY_NO_SEARCH, evdns_wildcard_check_callback, /* This "addr" is an argument to the callback*/ addr); - if (r) { + if (!req) { /* There is no evdns request in progress; stop addr from getting leaked */ tor_free(addr); } @@ -1488,6 +1596,7 @@ launch_test_addresses(int fd, short event, void *args) { or_options_t *options = get_options(); + struct evdns_request *req; (void)fd; (void)event; (void)args; @@ -1499,14 +1608,19 @@ * be an exit server.*/ if (!options->ServerDNSTestAddresses) return; - SMARTLIST_FOREACH(options->ServerDNSTestAddresses, const char *, address, - { - int r = evdns_resolve_ipv4(address, DNS_QUERY_NO_SEARCH, evdns_callback, - tor_strdup(address)); - if (r) - log_info(LD_EXIT, "eventdns rejected test address %s: error %d", - escaped_safe_str(address), r); - }); + tor_assert(the_evdns_base); + SMARTLIST_FOREACH_BEGIN(options->ServerDNSTestAddresses, + const char *, address) { + char *a = tor_strdup(address); + req = evdns_base_resolve_ipv4(the_evdns_base, + address, DNS_QUERY_NO_SEARCH, evdns_callback, a); + + if (!req) { + log_info(LD_EXIT, "eventdns rejected test address %s", + escaped_safe_str(address)); + tor_free(a); + } + } SMARTLIST_FOREACH_END(address); } #define N_WILDCARD_CHECKS 2 @@ -1547,7 +1661,7 @@ void dns_launch_correctness_checks(void) { - static struct event launch_event; + static struct event *launch_event = NULL; struct timeval timeout; if (!get_options()->ServerDNSDetectHijacking) return; @@ -1555,10 +1669,12 @@ /* Wait a while before launching requests for test addresses, so we can * get the results from checking for wildcarding. */ - evtimer_set(&launch_event, launch_test_addresses, NULL); + if (! launch_event) + launch_event = tor_evtimer_new(tor_libevent_get_base(), + launch_test_addresses, NULL); timeout.tv_sec = 30; timeout.tv_usec = 0; - if (evtimer_add(&launch_event, &timeout)<0) { + if (evtimer_add(launch_event, &timeout)<0) { log_warn(LD_BUG, "Couldn't add timer for checking for dns hijacking"); } } @@ -1574,10 +1690,9 @@ void dns_reset_correctness_checks(void) { - if (dns_wildcard_response_count) { - strmap_free(dns_wildcard_response_count, _tor_free); - dns_wildcard_response_count = NULL; - } + strmap_free(dns_wildcard_response_count, _tor_free); + dns_wildcard_response_count = NULL; + n_wildcard_requests = 0; if (dns_wildcard_list) { @@ -1622,6 +1737,30 @@ } } +/** Return the number of DNS cache entries as an int */ +static int +dns_cache_entry_count(void) +{ + return HT_SIZE(&cache_root); +} + +/** Log memory information about our internal DNS cache at level 'severity'. */ +void +dump_dns_mem_usage(int severity) +{ + /* This should never be larger than INT_MAX. */ + int hash_count = dns_cache_entry_count(); + size_t hash_mem = sizeof(struct cached_resolve_t) * hash_count; + hash_mem += HT_MEM_USAGE(&cache_root); + + /* Print out the count and estimated size of our &cache_root. It undercounts + hostnames in cached reverse resolves. + */ + log(severity, LD_MM, "Our DNS cache has %d entries.", hash_count); + log(severity, LD_MM, "Our DNS cache size is approximately %u bytes.", + (unsigned)hash_mem); +} + #ifdef DEBUG_DNS_CACHE /** Exit with an assertion if the DNS cache is corrupt. */ static void @@ -1642,7 +1781,8 @@ return; smartlist_pqueue_assert_ok(cached_resolve_pqueue, - _compare_cached_resolves_by_expiry); + _compare_cached_resolves_by_expiry, + STRUCT_OFFSET(cached_resolve_t, minheap_idx)); SMARTLIST_FOREACH(cached_resolve_pqueue, cached_resolve_t *, res, { diff -Nru tor-0.2.1.30/src/or/dns.h tor-0.2.2.35/src/or/dns.h --- tor-0.2.1.30/src/or/dns.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/dns.h 2011-12-15 16:26:49.000000000 +0000 @@ -0,0 +1,31 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file dns.h + * \brief Header file for dns.c. + **/ + +#ifndef _TOR_DNS_H +#define _TOR_DNS_H + +int dns_init(void); +int has_dns_init_failed(void); +void dns_free_all(void); +uint32_t dns_clip_ttl(uint32_t ttl); +int dns_reset(void); +void connection_dns_remove(edge_connection_t *conn); +void assert_connection_edge_not_dns_pending(edge_connection_t *conn); +void assert_all_pending_dns_resolves_ok(void); +void dns_cancel_pending_resolve(const char *question); +int dns_resolve(edge_connection_t *exitconn); +void dns_launch_correctness_checks(void); +int dns_seems_to_be_broken(void); +void dns_reset_correctness_checks(void); +void dump_dns_mem_usage(int severity); + +#endif + diff -Nru tor-0.2.1.30/src/or/dnsserv.c tor-0.2.2.35/src/or/dnsserv.c --- tor-0.2.1.30/src/or/dnsserv.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/dnsserv.c 2011-12-15 16:28:37.000000000 +0000 @@ -9,7 +9,21 @@ **/ #include "or.h" +#include "dnsserv.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "control.h" +#include "main.h" +#include "policies.h" +#ifdef HAVE_EVENT2_DNS_H +#include +#include +/* XXXX023 this implies we want an improved evdns */ +#include +#else #include "eventdns.h" +#endif /** Helper function: called by evdns whenever the client sends a request to our * DNSPort. We need to eventually answer the request req. @@ -81,16 +95,11 @@ } if (!q) { log_info(LD_APP, "None of the questions we got were ones we're willing " - "to support. Sending NODATA."); - evdns_server_request_respond(req, DNS_ERR_NONE); + "to support. Sending NOTIMPL."); + evdns_server_request_respond(req, DNS_ERR_NOTIMPL); return; } - if (q->type == EVDNS_TYPE_A) { - /* Refuse any attempt to resolve a noconnect address, right now. */ - if (hostname_is_noconnect_address(q->name)) { - err = DNS_ERR_REFUSED; - } - } else { + if (q->type != EVDNS_TYPE_A) { tor_assert(q->type == EVDNS_TYPE_PTR); } @@ -132,17 +141,18 @@ control_event_stream_status(conn, STREAM_EVENT_NEW, 0); - /* Now, throw the connection over to get rewritten (which will answer it - * immediately if it's in the cache, or completely bogus, or automapped), - * and then attached to a circuit. */ + /* Now, unless a controller asked us to leave streams unattached, + * throw the connection over to get rewritten (which will + * answer it immediately if it's in the cache, or completely bogus, or + * automapped), and then attached to a circuit. */ log_info(LD_APP, "Passing request for %s to rewrite_and_attach.", - escaped_safe_str(q->name)); + escaped_safe_str_client(q->name)); q_name = tor_strdup(q->name); /* q could be freed in rewrite_and_attach */ - connection_ap_handshake_rewrite_and_attach(conn, NULL, NULL); + connection_ap_rewrite_and_attach_if_allowed(conn, NULL, NULL); /* Now, the connection is marked if it was bad. */ - log_info(LD_APP, "Passed request for %s to rewrite_and_attach.", - escaped_safe_str(q_name)); + log_info(LD_APP, "Passed request for %s to rewrite_and_attach_if_allowed.", + escaped_safe_str_client(q_name)); tor_free(q_name); } @@ -177,17 +187,18 @@ return -1; } - /* Now, throw the connection over to get rewritten (which will answer it - * immediately if it's in the cache, or completely bogus, or automapped), - * and then attached to a circuit. */ + /* Now, unless a controller asked us to leave streams unattached, + * throw the connection over to get rewritten (which will + * answer it immediately if it's in the cache, or completely bogus, or + * automapped), and then attached to a circuit. */ log_info(LD_APP, "Passing request for %s to rewrite_and_attach.", - escaped_safe_str(name)); + escaped_safe_str_client(name)); q_name = tor_strdup(name); /* q could be freed in rewrite_and_attach */ - connection_ap_handshake_rewrite_and_attach(conn, NULL, NULL); + connection_ap_rewrite_and_attach_if_allowed(conn, NULL, NULL); /* Now, the connection is marked if it was bad. */ - log_info(LD_APP, "Passed request for %s to rewrite_and_attach.", - escaped_safe_str(q_name)); + log_info(LD_APP, "Passed request for %s to rewrite_and_attach_if_allowed.", + escaped_safe_str_client(q_name)); tor_free(q_name); return 0; } @@ -269,7 +280,7 @@ conn->socks_request->command == SOCKS_COMMAND_RESOLVE) { evdns_server_request_add_a_reply(req, name, - 1, (char*)answer, ttl); + 1, answer, ttl); } else if (answer_type == RESOLVED_TYPE_HOSTNAME && answer_len < 256 && conn->socks_request->command == SOCKS_COMMAND_RESOLVE_PTR) { @@ -295,11 +306,11 @@ dnsserv_configure_listener(connection_t *conn) { tor_assert(conn); - tor_assert(conn->s >= 0); + tor_assert(SOCKET_OK(conn->s)); tor_assert(conn->type == CONN_TYPE_AP_DNS_LISTENER); - conn->dns_server_port = evdns_add_server_port(conn->s, 0, - evdns_server_callback, NULL); + conn->dns_server_port = + tor_evdns_add_server_port(conn->s, 0, evdns_server_callback, NULL); } /** Free the evdns server port for conn, which must be an diff -Nru tor-0.2.1.30/src/or/dnsserv.h tor-0.2.2.35/src/or/dnsserv.h --- tor-0.2.1.30/src/or/dnsserv.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/dnsserv.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,26 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file dnsserv.h + * \brief Header file for dnsserv.c. + **/ + +#ifndef _TOR_DNSSERV_H +#define _TOR_DNSSERV_H + +void dnsserv_configure_listener(connection_t *conn); +void dnsserv_close_listener(connection_t *conn); +void dnsserv_resolved(edge_connection_t *conn, + int answer_type, + size_t answer_len, + const char *answer, + int ttl); +void dnsserv_reject_request(edge_connection_t *conn); +int dnsserv_launch_request(const char *name, int is_reverse); + +#endif + diff -Nru tor-0.2.1.30/src/or/eventdns.c tor-0.2.2.35/src/or/eventdns.c --- tor-0.2.1.30/src/or/eventdns.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/eventdns.c 2011-12-15 16:28:37.000000000 +0000 @@ -31,6 +31,7 @@ */ #include "eventdns_tor.h" +#include "../common/util.h" #include /* #define NDEBUG */ @@ -89,6 +90,7 @@ #include #include "eventdns.h" + #ifdef WIN32 #include #include @@ -173,8 +175,6 @@ /* these objects are kept in a circular list */ struct evdns_request *next, *prev; - u16 timeout_event_deleted; /**< Debugging: where was timeout_event - * deleted? 0 for "it's added." */ struct event timeout_event; u16 trans_id; /* the transaction id */ @@ -214,8 +214,6 @@ struct event event; /* these objects are kept in a circular list */ struct nameserver *next, *prev; - u16 timeout_event_deleted; /**< Debugging: where was timeout_event - * deleted? 0 for "it's added." */ struct event timeout_event; /* used to keep the timeout for */ /* when we next probe this server. */ /* Valid if state == 0 */ @@ -463,7 +461,7 @@ const struct sockaddr_in6 *sin1, *sin2; sin1 = (const struct sockaddr_in6 *)sa1; sin2 = (const struct sockaddr_in6 *)sa2; - if (memcmp(sin1->sin6_addr.s6_addr, sin2->sin6_addr.s6_addr, 16)) + if (tor_memneq(sin1->sin6_addr.s6_addr, sin2->sin6_addr.s6_addr, 16)) return 0; else if (include_port && sin1->sin6_port != sin2->sin6_port) return 0; @@ -474,51 +472,10 @@ return 1; } -/* for debugging bug 929. XXXX022 */ -static int -_add_timeout_event(u16 *lineno, struct event *ev, struct timeval *to) -{ - *lineno = 0; - return evtimer_add(ev, to); -} -#define add_timeout_event(s, to) \ - (_add_timeout_event(&(s)->timeout_event_deleted, &(s)->timeout_event, (to))) - -/* for debugging bug 929. XXXX022 */ -static int -_del_timeout_event(u16 *lineno, struct event *ev, int line) -{ - if (*lineno) { - log(EVDNS_LOG_DEBUG, - "Duplicate timeout event_del from line %d: first call " - "was at %d.", line, (int)*lineno); - return 0; - } else { - *lineno = (u16)line; - return event_del(ev); - } -} -#define del_timeout_event(s) \ - (_del_timeout_event(&(s)->timeout_event_deleted, &(s)->timeout_event, \ - __LINE__)) -/* For debugging bug 929/957. XXXX022 */ -static int -_del_timeout_event_if_set(u16 *lineno, struct event *ev, int line) -{ - if (*lineno == 0) { - log(EVDNS_LOG_DEBUG, - "Event that I thought was non-added as of line %d " - "was actually added on line %d", - line, (int)*lineno); - *lineno = line; - return event_del(ev); - } - return 0; -} -#define del_timeout_event_if_set(s) \ - _del_timeout_event_if_set(&(s)->timeout_event_deleted, \ - &(s)->timeout_event, \ - __LINE__) +#define add_timeout_event(s, to) \ + (event_add(&(s)->timeout_event, (to))) +#define del_timeout_event(s) \ + (event_del(&(s)->timeout_event)) /* This walks the list of inflight requests to find the */ /* one with a matching transaction id. Returns NULL on */ @@ -555,7 +512,7 @@ nameserver_probe_failed(struct nameserver *const ns) { const struct timeval * timeout; del_timeout_event(ns); - CLEAR(&ns->timeout_event); + if (ns->state == 1) { /* This can happen if the nameserver acts in a way which makes us mark */ /* it as bad and then starts sending good replies. */ @@ -567,8 +524,6 @@ global_nameserver_timeouts_length - 1)]; ns->failed_times++; - del_timeout_event_if_set(ns); - evtimer_set(&ns->timeout_event, nameserver_prod_callback, ns); if (add_timeout_event(ns, (struct timeval *) timeout) < 0) { log(EVDNS_LOG_WARN, "Error from libevent when adding timer event for %s", @@ -597,8 +552,6 @@ ns->state = 0; ns->failed_times = 1; - del_timeout_event_if_set(ns); - evtimer_set(&ns->timeout_event, nameserver_prod_callback, ns); if (add_timeout_event(ns, (struct timeval *) &global_nameserver_timeouts[0]) < 0) { log(EVDNS_LOG_WARN, "Error from libevent when adding timer event for %s", @@ -634,7 +587,6 @@ log(EVDNS_LOG_WARN, "Nameserver %s is back up", debug_ntop((struct sockaddr *)&ns->address)); del_timeout_event(ns); - CLEAR(&ns->timeout_event); ns->state = 1; ns->failed_times = 0; ns->timedout = 0; @@ -666,7 +618,6 @@ log(EVDNS_LOG_DEBUG, "Removing timeout for request %lx", (unsigned long) req); del_timeout_event(req); - CLEAR(&req->timeout_event); search_request_finished(req); global_requests_inflight--; @@ -1077,6 +1028,9 @@ GET16(answers); GET16(authority); GET16(additional); + (void)additional; + (void)authority; + (void)answers; if (flags & 0x8000) return -1; /* Must not be an answer. */ flags &= 0x0110; /* Only RD and CD get preserved. */ @@ -1294,7 +1248,8 @@ for (;;) { const int r = - (int)recvfrom(ns->socket, packet, (socklen_t)sizeof(packet), 0, + (int)recvfrom(ns->socket, (void*)packet, + (socklen_t)sizeof(packet), 0, sa, &addrlen); if (r < 0) { int err = last_error(ns->socket); @@ -1325,7 +1280,7 @@ for (;;) { addrlen = (socklen_t)sizeof(struct sockaddr_storage); - r = recvfrom(s->socket, packet, sizeof(packet), 0, + r = recvfrom(s->socket, (void*)packet, sizeof(packet), 0, (struct sockaddr*) &addr, &addrlen); if (r < 0) { int err = last_error(s->socket); @@ -1342,8 +1297,8 @@ static void server_port_flush(struct evdns_server_port *port) { - while (port->pending_replies) { - struct server_request *req = port->pending_replies; + struct server_request *req = port->pending_replies; + while (req) { ssize_t r = sendto(port->socket, req->response, req->response_len, 0, (struct sockaddr*) &req->addr, (socklen_t)req->addrlen); if (r < 0) { @@ -1355,6 +1310,9 @@ if (server_request_free(req)) { /* we released the last reference to req->port. */ return; + } else { + assert(port->pending_replies != req); + req = port->pending_replies; } } @@ -1605,7 +1563,7 @@ /* exported function */ struct evdns_server_port * -evdns_add_server_port(int socket, int is_tcp, evdns_request_callback_fn_type cb, void *user_data) +evdns_add_server_port(tor_socket_t socket, int is_tcp, evdns_request_callback_fn_type cb, void *user_data) { struct evdns_server_port *port; if (!(port = mm_malloc(sizeof(struct evdns_server_port)))) @@ -1713,7 +1671,7 @@ /* exported function */ int -evdns_server_request_add_a_reply(struct evdns_server_request *req, const char *name, int n, void *addrs, int ttl) +evdns_server_request_add_a_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl) { return evdns_server_request_add_reply( req, EVDNS_ANSWER_SECTION, name, TYPE_A, CLASS_INET, @@ -1722,7 +1680,7 @@ /* exported function */ int -evdns_server_request_add_aaaa_reply(struct evdns_server_request *req, const char *name, int n, void *addrs, int ttl) +evdns_server_request_add_aaaa_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl) { return evdns_server_request_add_reply( req, EVDNS_ANSWER_SECTION, name, TYPE_AAAA, CLASS_INET, @@ -1949,7 +1907,7 @@ if (req->port) { if (req->port->pending_replies == req) { - if (req->next_pending) + if (req->next_pending && req->next_pending != req) req->port->pending_replies = req->next_pending; else req->port->pending_replies = NULL; @@ -2044,9 +2002,8 @@ /* retransmit it */ /* Stop waiting for the timeout. No need to do this in * request_finished; that one already deletes the timeout event. - * XXXX021 port this change to libevent. */ + * XXXX023 port this change to libevent. */ del_timeout_event(req); - CLEAR(&req->timeout_event); evdns_request_transmit(req); } } @@ -2059,7 +2016,8 @@ /* 2 other failure */ static int evdns_request_transmit_to(struct evdns_request *req, struct nameserver *server) { - const ssize_t r = send(server->socket, req->request, req->request_len, 0); + const ssize_t r = send(server->socket, (void*)req->request, + req->request_len, 0); if (r < 0) { int err = last_error(server->socket); if (error_is_eagain(err)) return 1; @@ -2109,8 +2067,7 @@ /* transmitted; we need to check for timeout. */ log(EVDNS_LOG_DEBUG, "Setting timeout for request %lx", (unsigned long) req); - del_timeout_event_if_set(req); - evtimer_set(&req->timeout_event, evdns_request_timeout_callback, req); + if (add_timeout_event(req, &global_timeout) < 0) { log(EVDNS_LOG_WARN, "Error from libevent when adding timer for request %lx", @@ -2225,7 +2182,6 @@ (void) event_del(&server->event); CLEAR(&server->event); del_timeout_event(server); - CLEAR(&server->timeout_event); if (server->socket >= 0) CLOSE_SOCKET(server->socket); CLEAR(server); @@ -2243,7 +2199,6 @@ req->ns = NULL; /* ???? What to do about searches? */ del_timeout_event(req); - CLEAR(&req->timeout_event); req->trans_id = 0; req->transmit_me = 0; @@ -2292,6 +2247,21 @@ } static int +sockaddr_is_loopback(const struct sockaddr *addr) +{ + static const char LOOPBACK_S6[16] = + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1"; + if (addr->sa_family == AF_INET) { + struct sockaddr_in *sin = (struct sockaddr_in *)addr; + return (ntohl(sin->sin_addr.s_addr) & 0xff000000) == 0x7f000000; + } else if (addr->sa_family == AF_INET6) { + struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)addr; + return fast_memeq(sin6->sin6_addr.s6_addr, LOOPBACK_S6, 16); + } + return 0; +} + +static int _evdns_nameserver_add_impl(const struct sockaddr *address, socklen_t addrlen) { /* first check to see if we already have this nameserver */ @@ -2318,9 +2288,10 @@ if (!ns) return -1; memset(ns, 0, sizeof(struct nameserver)); - ns->timeout_event_deleted = __LINE__; - ns->socket = socket(PF_INET, SOCK_DGRAM, 0); + evtimer_set(&ns->timeout_event, nameserver_prod_callback, ns); + + ns->socket = socket(address->sa_family, SOCK_DGRAM, 0); if (ns->socket < 0) { err = 1; goto out1; } #ifdef WIN32 { @@ -2331,7 +2302,8 @@ fcntl(ns->socket, F_SETFL, O_NONBLOCK); #endif - if (global_bind_addr_is_set) { + if (global_bind_addr_is_set && + !sockaddr_is_loopback((struct sockaddr*)&global_bind_address)) { if (bind(ns->socket, (struct sockaddr *)&global_bind_address, global_bind_addrlen) < 0) { log(EVDNS_LOG_DEBUG, "Couldn't bind to outgoing address."); @@ -2553,7 +2525,8 @@ } memset(req, 0, sizeof(struct evdns_request)); - req->timeout_event_deleted = __LINE__; + + evtimer_set(&req->timeout_event, evdns_request_timeout_callback, req); if (global_randomize_case) { unsigned i; @@ -2941,14 +2914,6 @@ if (flags & DNS_OPTION_NAMESERVERS) evdns_nameserver_ip_add("127.0.0.1"); } -#ifndef HAVE_STRTOK_R -static char * -strtok_r(char *s, const char *delim, char **state) { - (void)state; - return strtok(s, delim); -} -#endif - /* helper version of atoi which returns -1 on error */ static int strtoint(const char *const str) { @@ -3025,9 +2990,9 @@ resolv_conf_parse_line(char *const start, int flags) { char *strtok_state; static const char *const delims = " \t"; -#define NEXT_TOKEN strtok_r(NULL, delims, &strtok_state) +#define NEXT_TOKEN tor_strtok_r(NULL, delims, &strtok_state) - char *const first_token = strtok_r(start, delims, &strtok_state); + char *const first_token = tor_strtok_r(start, delims, &strtok_state); if (!first_token) return; if (!strcmp(first_token, "nameserver") && (flags & DNS_OPTION_NAMESERVERS)) { @@ -3171,14 +3136,13 @@ IP_ADDR_STRING *ns; GetNetworkParams_fn_t fn; - /* XXXX Possibly, we should hardcode the location of this DLL. */ - if (!(handle = LoadLibrary("iphlpapi.dll"))) { + if (!(handle = load_windows_system_library(TEXT("iphlpapi.dll")))) { log(EVDNS_LOG_WARN, "Could not open iphlpapi.dll"); /* right now status = 0, doesn't that mean "good" - mikec */ status = -1; goto done; } - if (!(fn = (GetNetworkParams_fn_t) GetProcAddress(handle, "GetNetworkParams"))) { + if (!(fn = (GetNetworkParams_fn_t) GetProcAddress(handle, TEXT("GetNetworkParams")))) { log(EVDNS_LOG_WARN, "Could not get address of function."); /* same as above */ status = -1; @@ -3241,9 +3205,10 @@ } static int -config_nameserver_from_reg_key(HKEY key, const char *subkey) +config_nameserver_from_reg_key(HKEY key, const TCHAR *subkey) { char *buf; + char ansibuf[MAX_PATH] = {0}; DWORD bufsz = 0, type = 0; int status = 0; @@ -3255,24 +3220,30 @@ if (RegQueryValueEx(key, subkey, 0, &type, (LPBYTE)buf, &bufsz) == ERROR_SUCCESS && bufsz > 1) { - status = evdns_nameserver_ip_add_line(buf); + wcstombs(ansibuf,(wchar_t*)buf,MAX_PATH);/*XXXX UNICODE */ + status = evdns_nameserver_ip_add_line(ansibuf); } mm_free(buf); return status; } -#define SERVICES_KEY "System\\CurrentControlSet\\Services\\" -#define WIN_NS_9X_KEY SERVICES_KEY "VxD\\MSTCP" -#define WIN_NS_NT_KEY SERVICES_KEY "Tcpip\\Parameters" +#define SERVICES_KEY TEXT("System\\CurrentControlSet\\Services\\") +#define WIN_NS_9X_KEY SERVICES_KEY TEXT("VxD\\MSTCP") +#define WIN_NS_NT_KEY SERVICES_KEY TEXT("Tcpip\\Parameters") static int load_nameservers_from_registry(void) { int found = 0; int r; + OSVERSIONINFO info; + memset(&info, 0, sizeof(info)); + info.dwOSVersionInfoSize = sizeof (info); + GetVersionEx(&info); + #define TRY(k, name) \ - if (!found && config_nameserver_from_reg_key(k,name) == 0) { \ + if (!found && config_nameserver_from_reg_key(k,TEXT(name)) == 0) { \ log(EVDNS_LOG_DEBUG,"Found nameservers in %s/%s",#k,name); \ found = 1; \ } else if (!found) { \ @@ -3280,7 +3251,7 @@ #k,#name); \ } - if (((int)GetVersion()) > 0) { /* NT */ + if (info.dwMajorVersion >= 5) { /* NT */ HKEY nt_key = 0, interfaces_key = 0; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, @@ -3288,7 +3259,7 @@ log(EVDNS_LOG_DEBUG,"Couldn't open nt key, %d",(int)GetLastError()); return -1; } - r = RegOpenKeyEx(nt_key, "Interfaces", 0, + r = RegOpenKeyEx(nt_key, TEXT("Interfaces"), 0, KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS, &interfaces_key); if (r != ERROR_SUCCESS) { @@ -3384,8 +3355,7 @@ if (server->socket >= 0) CLOSE_SOCKET(server->socket); (void) event_del(&server->event); - if (server->state == 0) - del_timeout_event(server); + del_timeout_event(server); CLEAR(server); mm_free(server); if (server_next == server_head) diff -Nru tor-0.2.1.30/src/or/eventdns.h tor-0.2.2.35/src/or/eventdns.h --- tor-0.2.1.30/src/or/eventdns.h 2010-12-16 21:18:55.000000000 +0000 +++ tor-0.2.2.35/src/or/eventdns.h 2011-12-15 16:26:49.000000000 +0000 @@ -319,12 +319,12 @@ #define EVDNS_CLASS_INET 1 -struct evdns_server_port *evdns_add_server_port(int socket, int is_tcp, evdns_request_callback_fn_type callback, void *user_data); +struct evdns_server_port *evdns_add_server_port(tor_socket_t socket, int is_tcp, evdns_request_callback_fn_type callback, void *user_data); void evdns_close_server_port(struct evdns_server_port *port); int evdns_server_request_add_reply(struct evdns_server_request *req, int section, const char *name, int type, int class, int ttl, int datalen, int is_name, const char *data); -int evdns_server_request_add_a_reply(struct evdns_server_request *req, const char *name, int n, void *addrs, int ttl); -int evdns_server_request_add_aaaa_reply(struct evdns_server_request *req, const char *name, int n, void *addrs, int ttl); +int evdns_server_request_add_a_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl); +int evdns_server_request_add_aaaa_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl); int evdns_server_request_add_ptr_reply(struct evdns_server_request *req, struct in_addr *in, const char *inaddr_name, const char *hostname, int ttl); int evdns_server_request_add_cname_reply(struct evdns_server_request *req, const char *name, const char *cname, int ttl); diff -Nru tor-0.2.1.30/src/or/geoip.c tor-0.2.2.35/src/or/geoip.c --- tor-0.2.1.30/src/or/geoip.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/geoip.c 2011-12-15 16:28:37.000000000 +0000 @@ -3,15 +3,23 @@ /** * \file geoip.c - * \brief Functions related to maintaining an IP-to-country database and to - * summarizing client connections by country. + * \brief Functions related to maintaining an IP-to-country database; + * to summarizing client connections by country to entry guards, bridges, + * and directory servers; and for statistics on answering network status + * requests. */ #define GEOIP_PRIVATE #include "or.h" #include "ht.h" +#include "config.h" +#include "control.h" +#include "dnsserv.h" +#include "geoip.h" +#include "routerlist.h" static void clear_geoip_db(void); +static void init_geoip_countries(void); /** An entry from the GeoIP file: maps an IP range to a country. */ typedef struct geoip_entry_t { @@ -20,16 +28,11 @@ intptr_t country; /**< An index into geoip_countries */ } geoip_entry_t; -/** For how many periods should we remember per-country request history? */ -#define REQUEST_HIST_LEN 3 -/** How long are the periods for which we should remember request history? */ -#define REQUEST_HIST_PERIOD (8*60*60) - /** A per-country record for GeoIP request history. */ typedef struct geoip_country_t { char countrycode[3]; - uint32_t n_v2_ns_requests[REQUEST_HIST_LEN]; - uint32_t n_v3_ns_requests[REQUEST_HIST_LEN]; + uint32_t n_v2_ns_requests; + uint32_t n_v3_ns_requests; } geoip_country_t; /** A list of geoip_country_t */ @@ -42,7 +45,7 @@ static smartlist_t *geoip_entries = NULL; /** Return the index of the country's entry in the GeoIP DB - * if it is a valid 2-letter country code, otherwise return zero. + * if it is a valid 2-letter country code, otherwise return -1. */ country_t geoip_get_country(const char *country) @@ -101,11 +104,11 @@ { unsigned int low, high; char b[3]; - if (!geoip_countries) { - geoip_countries = smartlist_create(); + if (!geoip_countries) + init_geoip_countries(); + if (!geoip_entries) geoip_entries = smartlist_create(); - country_idxplus1_by_lc_code = strmap_new(); - } + while (TOR_ISSPACE(*line)) ++line; if (*line == '#') @@ -142,6 +145,7 @@ static int _geoip_compare_key_to_entry(const void *_key, const void **_member) { + /* No alignment issue here, since _key really is a pointer to uint32_t */ const uint32_t addr = *(uint32_t *)_key; const geoip_entry_t *entry = *_member; if (addr < entry->ip_low) @@ -160,6 +164,24 @@ return options->BridgeRelay && options->BridgeRecordUsageByCountry; } +/** Set up a new list of geoip countries with no countries (yet) set in it, + * except for the unknown country. + */ +static void +init_geoip_countries(void) +{ + geoip_country_t *geoip_unresolved; + geoip_countries = smartlist_create(); + /* Add a geoip_country_t for requests that could not be resolved to a + * country as first element (index 0) to geoip_countries. */ + geoip_unresolved = tor_malloc_zero(sizeof(geoip_country_t)); + strlcpy(geoip_unresolved->countrycode, "??", + sizeof(geoip_unresolved->countrycode)); + smartlist_add(geoip_countries, geoip_unresolved); + country_idxplus1_by_lc_code = strmap_new(); + strmap_set_lc(country_idxplus1_by_lc_code, "??", (void*)(1)); +} + /** Clear the GeoIP database and reload it from the file * filename. Return 0 on success, -1 on failure. * @@ -185,16 +207,14 @@ filename, msg); return -1; } - if (!geoip_countries) { - geoip_countries = smartlist_create(); - country_idxplus1_by_lc_code = strmap_new(); - } + if (!geoip_countries) + init_geoip_countries(); if (geoip_entries) { SMARTLIST_FOREACH(geoip_entries, geoip_entry_t *, e, tor_free(e)); smartlist_free(geoip_entries); } geoip_entries = smartlist_create(); - log_notice(LD_GENERAL, "Parsing GEOIP file."); + log_notice(LD_GENERAL, "Parsing GEOIP file %s.", filename); while (!feof(f)) { char buf[512]; if (fgets(buf, (int)sizeof(buf), f) == NULL) @@ -215,9 +235,10 @@ } /** Given an IP address in host order, return a number representing the - * country to which that address belongs, or -1 for unknown. The return value - * will always be less than geoip_get_n_countries(). To decode it, - * call geoip_get_country_name(). + * country to which that address belongs, -1 for "No geoip information + * available", or 0 for the 'unknown country'. The return value will always + * be less than geoip_get_n_countries(). To decode it, call + * geoip_get_country_name(). */ int geoip_get_country_by_ip(uint32_t ipaddr) @@ -226,13 +247,15 @@ if (!geoip_entries) return -1; ent = smartlist_bsearch(geoip_entries, &ipaddr, _geoip_compare_key_to_entry); - return ent ? (int)ent->country : -1; + return ent ? (int)ent->country : 0; } /** Return the number of countries recognized by the GeoIP database. */ int geoip_get_n_countries(void) { + if (!geoip_countries) + init_geoip_countries(); return (int) smartlist_len(geoip_countries); } @@ -261,23 +284,22 @@ typedef struct clientmap_entry_t { HT_ENTRY(clientmap_entry_t) node; uint32_t ipaddr; - time_t last_seen; /* The last 2 bits of this value hold the client - * operation. */ + /** Time when we last saw this IP address, in MINUTES since the epoch. + * + * (This will run out of space around 4011 CE. If Tor is still in use around + * 4000 CE, please remember to add more bits to last_seen_in_minutes.) */ + unsigned int last_seen_in_minutes:30; + unsigned int action:2; } clientmap_entry_t; -#define ACTION_MASK 3 +/** Largest allowable value for last_seen_in_minutes. (It's a 30-bit field, + * so it can hold up to (1u<<30)-1, or 0x3fffffffu. + */ +#define MAX_LAST_SEEN_IN_MINUTES 0X3FFFFFFFu /** Map from client IP address to last time seen. */ static HT_HEAD(clientmap, clientmap_entry_t) client_history = HT_INITIALIZER(); -/** Time at which we started tracking client IP history. */ -static time_t client_history_starts = 0; - -/** When did the current period of checking per-country request history - * start? */ -static time_t current_request_period_starts = 0; -/** How many older request periods are we remembering? */ -static int n_old_request_periods = 0; /** Hashtable helper: compute a hash of a clientmap_entry_t. */ static INLINE unsigned @@ -289,7 +311,7 @@ static INLINE int clientmap_entries_eq(const clientmap_entry_t *a, const clientmap_entry_t *b) { - return a->ipaddr == b->ipaddr; + return a->ipaddr == b->ipaddr && a->action == b->action; } HT_PROTOTYPE(clientmap, clientmap_entry_t, node, clientmap_entry_hash, @@ -297,8 +319,87 @@ HT_GENERATE(clientmap, clientmap_entry_t, node, clientmap_entry_hash, clientmap_entries_eq, 0.6, malloc, realloc, free); +/** Clear history of connecting clients used by entry and bridge stats. */ +static void +client_history_clear(void) +{ + clientmap_entry_t **ent, **next, *this; + for (ent = HT_START(clientmap, &client_history); ent != NULL; + ent = next) { + if ((*ent)->action == GEOIP_CLIENT_CONNECT) { + this = *ent; + next = HT_NEXT_RMV(clientmap, &client_history, ent); + tor_free(this); + } else { + next = HT_NEXT(clientmap, &client_history, ent); + } + } +} + +/** How often do we update our estimate which share of v2 and v3 directory + * requests is sent to us? We could as well trigger updates of shares from + * network status updates, but that means adding a lot of calls into code + * that is independent from geoip stats (and keeping them up-to-date). We + * are perfectly fine with an approximation of 15-minute granularity. */ +#define REQUEST_SHARE_INTERVAL (15 * 60) + +/** When did we last determine which share of v2 and v3 directory requests + * is sent to us? */ +static time_t last_time_determined_shares = 0; + +/** Sum of products of v2 shares times the number of seconds for which we + * consider these shares as valid. */ +static double v2_share_times_seconds; + +/** Sum of products of v3 shares times the number of seconds for which we + * consider these shares as valid. */ +static double v3_share_times_seconds; + +/** Number of seconds we are determining v2 and v3 shares. */ +static int share_seconds; + +/** Try to determine which fraction of v2 and v3 directory requests aimed at + * caches will be sent to us at time now and store that value in + * order to take a mean value later on. */ +static void +geoip_determine_shares(time_t now) +{ + double v2_share = 0.0, v3_share = 0.0; + if (router_get_my_share_of_directory_requests(&v2_share, &v3_share) < 0) + return; + if (last_time_determined_shares) { + v2_share_times_seconds += v2_share * + ((double) (now - last_time_determined_shares)); + v3_share_times_seconds += v3_share * + ((double) (now - last_time_determined_shares)); + share_seconds += (int)(now - last_time_determined_shares); + } + last_time_determined_shares = now; +} + +/** Calculate which fraction of v2 and v3 directory requests aimed at caches + * have been sent to us since the last call of this function up to time + * now. Set *v2_share_out and *v3_share_out to the + * fractions of v2 and v3 protocol shares we expect to have seen. Reset + * counters afterwards. Return 0 on success, -1 on failure (e.g. when zero + * seconds have passed since the last call).*/ +static int +geoip_get_mean_shares(time_t now, double *v2_share_out, + double *v3_share_out) +{ + geoip_determine_shares(now); + if (!share_seconds) + return -1; + *v2_share_out = v2_share_times_seconds / ((double) share_seconds); + *v3_share_out = v3_share_times_seconds / ((double) share_seconds); + v2_share_times_seconds = v3_share_times_seconds = 0.0; + share_seconds = 0; + return 0; +} + /** Note that we've seen a client connect from the IP addr (host order) - * at time now. Ignored by all but bridges. */ + * at time now. Ignored by all but bridges and directories if + * configured accordingly. */ void geoip_note_client_seen(geoip_client_action_t action, uint32_t addr, time_t now) @@ -306,72 +407,46 @@ or_options_t *options = get_options(); clientmap_entry_t lookup, *ent; if (action == GEOIP_CLIENT_CONNECT) { - if (!(options->BridgeRelay && options->BridgeRecordUsageByCountry)) - return; - /* Did we recently switch from bridge to relay or back? */ - if (client_history_starts > now) + /* Only remember statistics as entry guard or as bridge. */ + if (!options->EntryStatistics && + (!(options->BridgeRelay && options->BridgeRecordUsageByCountry))) return; } else { -#ifndef ENABLE_GEOIP_STATS - return; -#else if (options->BridgeRelay || options->BridgeAuthoritativeDir || - !options->DirRecordUsageByCountry) + !options->DirReqStatistics) return; -#endif } - /* Rotate the current request period. */ - while (current_request_period_starts + REQUEST_HIST_PERIOD < now) { - if (!geoip_countries) - geoip_countries = smartlist_create(); - if (!current_request_period_starts) { - current_request_period_starts = now; - break; - } - SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, { - memmove(&c->n_v2_ns_requests[0], &c->n_v2_ns_requests[1], - sizeof(uint32_t)*(REQUEST_HIST_LEN-1)); - memmove(&c->n_v3_ns_requests[0], &c->n_v3_ns_requests[1], - sizeof(uint32_t)*(REQUEST_HIST_LEN-1)); - c->n_v2_ns_requests[REQUEST_HIST_LEN-1] = 0; - c->n_v3_ns_requests[REQUEST_HIST_LEN-1] = 0; - }); - current_request_period_starts += REQUEST_HIST_PERIOD; - if (n_old_request_periods < REQUEST_HIST_LEN-1) - ++n_old_request_periods; - } - - /* We use the low 3 bits of the time to encode the action. Since we're - * potentially remembering tons of clients, we don't want to make - * clientmap_entry_t larger than it has to be. */ - now = (now & ~ACTION_MASK) | (((int)action) & ACTION_MASK); lookup.ipaddr = addr; + lookup.action = (int)action; ent = HT_FIND(clientmap, &client_history, &lookup); - if (ent) { - ent->last_seen = now; - } else { + if (! ent) { ent = tor_malloc_zero(sizeof(clientmap_entry_t)); ent->ipaddr = addr; - ent->last_seen = now; + ent->action = (int)action; HT_INSERT(clientmap, &client_history, ent); } + if (now / 60 <= (int)MAX_LAST_SEEN_IN_MINUTES && now >= 0) + ent->last_seen_in_minutes = (unsigned)(now/60); + else + ent->last_seen_in_minutes = 0; if (action == GEOIP_CLIENT_NETWORKSTATUS || action == GEOIP_CLIENT_NETWORKSTATUS_V2) { int country_idx = geoip_get_country_by_ip(addr); + if (country_idx < 0) + country_idx = 0; /** unresolved requests are stored at index 0. */ if (country_idx >= 0 && country_idx < smartlist_len(geoip_countries)) { geoip_country_t *country = smartlist_get(geoip_countries, country_idx); if (action == GEOIP_CLIENT_NETWORKSTATUS) - ++country->n_v3_ns_requests[REQUEST_HIST_LEN-1]; + ++country->n_v3_ns_requests; else - ++country->n_v2_ns_requests[REQUEST_HIST_LEN-1]; + ++country->n_v2_ns_requests; } - } - if (!client_history_starts) { - client_history_starts = now; - current_request_period_starts = now; + /* Periodically determine share of requests that we should see */ + if (last_time_determined_shares + REQUEST_SHARE_INTERVAL < now) + geoip_determine_shares(now); } } @@ -380,8 +455,8 @@ static int _remove_old_client_helper(struct clientmap_entry_t *ent, void *_cutoff) { - time_t cutoff = *(time_t*)_cutoff; - if (ent->last_seen < cutoff) { + time_t cutoff = *(time_t*)_cutoff / 60; + if (ent->last_seen_in_minutes < cutoff) { tor_free(ent); return 1; } else { @@ -389,18 +464,45 @@ } } -/** Forget about all clients that haven't connected since cutoff. - * If cutoff is in the future, clients won't be added to the history - * until this time is reached. This is useful to prevent relays that switch - * to bridges from reporting unbelievable numbers of clients. */ +/** Forget about all clients that haven't connected since cutoff. */ void geoip_remove_old_clients(time_t cutoff) { clientmap_HT_FOREACH_FN(&client_history, _remove_old_client_helper, &cutoff); - if (client_history_starts < cutoff) - client_history_starts = cutoff; +} + +/** How many responses are we giving to clients requesting v2 network + * statuses? */ +static uint32_t ns_v2_responses[GEOIP_NS_RESPONSE_NUM]; + +/** How many responses are we giving to clients requesting v3 network + * statuses? */ +static uint32_t ns_v3_responses[GEOIP_NS_RESPONSE_NUM]; + +/** Note that we've rejected a client's request for a v2 or v3 network + * status, encoded in action for reason reason at time + * now. */ +void +geoip_note_ns_response(geoip_client_action_t action, + geoip_ns_response_t response) +{ + static int arrays_initialized = 0; + if (!get_options()->DirReqStatistics) + return; + if (!arrays_initialized) { + memset(ns_v2_responses, 0, sizeof(ns_v2_responses)); + memset(ns_v3_responses, 0, sizeof(ns_v3_responses)); + arrays_initialized = 1; + } + tor_assert(action == GEOIP_CLIENT_NETWORKSTATUS || + action == GEOIP_CLIENT_NETWORKSTATUS_V2); + tor_assert(response < GEOIP_NS_RESPONSE_NUM); + if (action == GEOIP_CLIENT_NETWORKSTATUS) + ns_v3_responses[response]++; + else + ns_v2_responses[response]++; } /** Do not mention any country from which fewer than this number of IPs have @@ -414,13 +516,6 @@ * multiple of this value. */ #define IP_GRANULARITY 8 -/** Return the time at which we started recording geoip data. */ -time_t -geoip_get_history_start(void) -{ - return client_history_starts; -} - /** Helper type: used to sort per-country totals by value. */ typedef struct c_hist_t { char country[3]; /**< Two-letter country code. */ @@ -442,97 +537,320 @@ return strcmp(a->country, b->country); } -/** How long do we have to have observed per-country request history before we - * are willing to talk about it? */ -#define GEOIP_MIN_OBSERVATION_TIME (12*60*60) +/** When there are incomplete directory requests at the end of a 24-hour + * period, consider those requests running for longer than this timeout as + * failed, the others as still running. */ +#define DIRREQ_TIMEOUT (10*60) + +/** Entry in a map from either conn->global_identifier for direct requests + * or a unique circuit identifier for tunneled requests to request time, + * response size, and completion time of a network status request. Used to + * measure download times of requests to derive average client + * bandwidths. */ +typedef struct dirreq_map_entry_t { + HT_ENTRY(dirreq_map_entry_t) node; + /** Unique identifier for this network status request; this is either the + * conn->global_identifier of the dir conn (direct request) or a new + * locally unique identifier of a circuit (tunneled request). This ID is + * only unique among other direct or tunneled requests, respectively. */ + uint64_t dirreq_id; + unsigned int state:3; /**< State of this directory request. */ + unsigned int type:1; /**< Is this a direct or a tunneled request? */ + unsigned int completed:1; /**< Is this request complete? */ + unsigned int action:2; /**< Is this a v2 or v3 request? */ + /** When did we receive the request and started sending the response? */ + struct timeval request_time; + size_t response_size; /**< What is the size of the response in bytes? */ + struct timeval completion_time; /**< When did the request succeed? */ +} dirreq_map_entry_t; + +/** Map of all directory requests asking for v2 or v3 network statuses in + * the current geoip-stats interval. Values are + * of type *dirreq_map_entry_t. */ +static HT_HEAD(dirreqmap, dirreq_map_entry_t) dirreq_map = + HT_INITIALIZER(); -/** Return the lowest x such that x is at least number, and x modulo - * divisor == 0. */ -static INLINE unsigned -round_to_next_multiple_of(unsigned number, unsigned divisor) +static int +dirreq_map_ent_eq(const dirreq_map_entry_t *a, + const dirreq_map_entry_t *b) { - number += divisor - 1; - number -= number % divisor; - return number; + return a->dirreq_id == b->dirreq_id && a->type == b->type; } -/** Return a newly allocated comma-separated string containing entries for all - * the countries from which we've seen enough clients connect. The entry - * format is cc=num where num is the number of IPs we've seen connecting from - * that country, and cc is a lowercased country code. Returns NULL if we don't - * want to export geoip data yet. */ -char * -geoip_get_client_history(time_t now, geoip_client_action_t action) +static unsigned +dirreq_map_ent_hash(const dirreq_map_entry_t *entry) +{ + unsigned u = (unsigned) entry->dirreq_id; + u += entry->type << 20; + return u; +} + +HT_PROTOTYPE(dirreqmap, dirreq_map_entry_t, node, dirreq_map_ent_hash, + dirreq_map_ent_eq); +HT_GENERATE(dirreqmap, dirreq_map_entry_t, node, dirreq_map_ent_hash, + dirreq_map_ent_eq, 0.6, malloc, realloc, free); + +/** Helper: Put entry into map of directory requests using + * type and dirreq_id as key parts. If there is + * already an entry for that key, print out a BUG warning and return. */ +static void +_dirreq_map_put(dirreq_map_entry_t *entry, dirreq_type_t type, + uint64_t dirreq_id) +{ + dirreq_map_entry_t *old_ent; + tor_assert(entry->type == type); + tor_assert(entry->dirreq_id == dirreq_id); + + /* XXXX we could switch this to HT_INSERT some time, since it seems that + * this bug doesn't happen. But since this function doesn't seem to be + * critical-path, it's sane to leave it alone. */ + old_ent = HT_REPLACE(dirreqmap, &dirreq_map, entry); + if (old_ent && old_ent != entry) { + log_warn(LD_BUG, "Error when putting directory request into local " + "map. There was already an entry for the same identifier."); + return; + } +} + +/** Helper: Look up and return an entry in the map of directory requests + * using type and dirreq_id as key parts. If there + * is no such entry, return NULL. */ +static dirreq_map_entry_t * +_dirreq_map_get(dirreq_type_t type, uint64_t dirreq_id) +{ + dirreq_map_entry_t lookup; + lookup.type = type; + lookup.dirreq_id = dirreq_id; + return HT_FIND(dirreqmap, &dirreq_map, &lookup); +} + +/** Note that an either direct or tunneled (see type) directory + * request for a network status with unique ID dirreq_id of size + * response_size and action action (either v2 or v3) has + * started. */ +void +geoip_start_dirreq(uint64_t dirreq_id, size_t response_size, + geoip_client_action_t action, dirreq_type_t type) +{ + dirreq_map_entry_t *ent; + if (!get_options()->DirReqStatistics) + return; + ent = tor_malloc_zero(sizeof(dirreq_map_entry_t)); + ent->dirreq_id = dirreq_id; + tor_gettimeofday(&ent->request_time); + ent->response_size = response_size; + ent->action = action; + ent->type = type; + _dirreq_map_put(ent, type, dirreq_id); +} + +/** Change the state of the either direct or tunneled (see type) + * directory request with dirreq_id to new_state and + * possibly mark it as completed. If no entry can be found for the given + * key parts (e.g., if this is a directory request that we are not + * measuring, or one that was started in the previous measurement period), + * or if the state cannot be advanced to new_state, do nothing. */ +void +geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type, + dirreq_state_t new_state) +{ + dirreq_map_entry_t *ent; + if (!get_options()->DirReqStatistics) + return; + ent = _dirreq_map_get(type, dirreq_id); + if (!ent) + return; + if (new_state == DIRREQ_IS_FOR_NETWORK_STATUS) + return; + if (new_state - 1 != ent->state) + return; + ent->state = new_state; + if ((type == DIRREQ_DIRECT && + new_state == DIRREQ_FLUSHING_DIR_CONN_FINISHED) || + (type == DIRREQ_TUNNELED && + new_state == DIRREQ_OR_CONN_BUFFER_FLUSHED)) { + tor_gettimeofday(&ent->completion_time); + ent->completed = 1; + } +} + +/** Return a newly allocated comma-separated string containing statistics + * on network status downloads. The string contains the number of completed + * requests, timeouts, and still running requests as well as the download + * times by deciles and quartiles. Return NULL if we have not observed + * requests for long enough. */ +static char * +geoip_get_dirreq_history(geoip_client_action_t action, + dirreq_type_t type) { char *result = NULL; - if (!geoip_is_loaded()) + smartlist_t *dirreq_completed = NULL; + uint32_t complete = 0, timeouts = 0, running = 0; + int bufsize = 1024, written; + dirreq_map_entry_t **ptr, **next, *ent; + struct timeval now; + + tor_gettimeofday(&now); + if (action != GEOIP_CLIENT_NETWORKSTATUS && + action != GEOIP_CLIENT_NETWORKSTATUS_V2) return NULL; - if (client_history_starts < (now - GEOIP_MIN_OBSERVATION_TIME)) { - char buf[32]; - smartlist_t *chunks = NULL; - smartlist_t *entries = NULL; - int n_countries = geoip_get_n_countries(); - int i; - clientmap_entry_t **ent; - unsigned *counts = tor_malloc_zero(sizeof(unsigned)*n_countries); - unsigned total = 0; - unsigned granularity = IP_GRANULARITY; -#ifdef ENABLE_GEOIP_STATS - if (get_options()->DirRecordUsageByCountry) - granularity = get_options()->DirRecordUsageGranularity; -#endif - HT_FOREACH(ent, clientmap, &client_history) { - int country; - if (((*ent)->last_seen & ACTION_MASK) != (int)action) - continue; - country = geoip_get_country_by_ip((*ent)->ipaddr); - if (country < 0) - continue; - tor_assert(0 <= country && country < n_countries); - ++counts[country]; - ++total; - } - /* Don't record anything if we haven't seen enough IPs. */ - if (total < MIN_IPS_TO_NOTE_ANYTHING) - goto done; - /* Make a list of c_hist_t */ - entries = smartlist_create(); - for (i = 0; i < n_countries; ++i) { - unsigned c = counts[i]; - const char *countrycode; - c_hist_t *ent; - /* Only report a country if it has a minimum number of IPs. */ - if (c >= MIN_IPS_TO_NOTE_COUNTRY) { - c = round_to_next_multiple_of(c, granularity); - countrycode = geoip_get_country_name(i); - ent = tor_malloc(sizeof(c_hist_t)); - strlcpy(ent->country, countrycode, sizeof(ent->country)); - ent->total = c; - smartlist_add(entries, ent); + dirreq_completed = smartlist_create(); + for (ptr = HT_START(dirreqmap, &dirreq_map); ptr; ptr = next) { + ent = *ptr; + if (ent->action != action || ent->type != type) { + next = HT_NEXT(dirreqmap, &dirreq_map, ptr); + continue; + } else { + if (ent->completed) { + smartlist_add(dirreq_completed, ent); + complete++; + next = HT_NEXT_RMV(dirreqmap, &dirreq_map, ptr); + } else { + if (tv_mdiff(&ent->request_time, &now) / 1000 > DIRREQ_TIMEOUT) + timeouts++; + else + running++; + next = HT_NEXT_RMV(dirreqmap, &dirreq_map, ptr); + tor_free(ent); } } - /* Sort entries. Note that we must do this _AFTER_ rounding, or else - * the sort order could leak info. */ - smartlist_sort(entries, _c_hist_compare); - - /* Build the result. */ - chunks = smartlist_create(); - SMARTLIST_FOREACH(entries, c_hist_t *, ch, { - tor_snprintf(buf, sizeof(buf), "%s=%u", ch->country, ch->total); - smartlist_add(chunks, tor_strdup(buf)); - }); - result = smartlist_join_strings(chunks, ",", 0, NULL); - done: - tor_free(counts); - if (chunks) { - SMARTLIST_FOREACH(chunks, char *, c, tor_free(c)); - smartlist_free(chunks); - } - if (entries) { - SMARTLIST_FOREACH(entries, c_hist_t *, c, tor_free(c)); - smartlist_free(entries); + } +#define DIR_REQ_GRANULARITY 4 + complete = round_uint32_to_next_multiple_of(complete, + DIR_REQ_GRANULARITY); + timeouts = round_uint32_to_next_multiple_of(timeouts, + DIR_REQ_GRANULARITY); + running = round_uint32_to_next_multiple_of(running, + DIR_REQ_GRANULARITY); + result = tor_malloc_zero(bufsize); + written = tor_snprintf(result, bufsize, "complete=%u,timeout=%u," + "running=%u", complete, timeouts, running); + if (written < 0) { + tor_free(result); + goto done; + } + +#define MIN_DIR_REQ_RESPONSES 16 + if (complete >= MIN_DIR_REQ_RESPONSES) { + uint32_t *dltimes; + /* We may have rounded 'completed' up. Here we want to use the + * real value. */ + complete = smartlist_len(dirreq_completed); + dltimes = tor_malloc_zero(sizeof(uint32_t) * complete); + SMARTLIST_FOREACH_BEGIN(dirreq_completed, dirreq_map_entry_t *, ent) { + uint32_t bytes_per_second; + uint32_t time_diff = (uint32_t) tv_mdiff(&ent->request_time, + &ent->completion_time); + if (time_diff == 0) + time_diff = 1; /* Avoid DIV/0; "instant" answers are impossible + * by law of nature or something, but a milisecond + * is a bit greater than "instantly" */ + bytes_per_second = (uint32_t)(1000 * ent->response_size / time_diff); + dltimes[ent_sl_idx] = bytes_per_second; + } SMARTLIST_FOREACH_END(ent); + median_uint32(dltimes, complete); /* sorts as a side effect. */ + written = tor_snprintf(result + written, bufsize - written, + ",min=%u,d1=%u,d2=%u,q1=%u,d3=%u,d4=%u,md=%u," + "d6=%u,d7=%u,q3=%u,d8=%u,d9=%u,max=%u", + dltimes[0], + dltimes[1*complete/10-1], + dltimes[2*complete/10-1], + dltimes[1*complete/4-1], + dltimes[3*complete/10-1], + dltimes[4*complete/10-1], + dltimes[5*complete/10-1], + dltimes[6*complete/10-1], + dltimes[7*complete/10-1], + dltimes[3*complete/4-1], + dltimes[8*complete/10-1], + dltimes[9*complete/10-1], + dltimes[complete-1]); + if (written<0) + tor_free(result); + tor_free(dltimes); + } + done: + SMARTLIST_FOREACH(dirreq_completed, dirreq_map_entry_t *, ent, + tor_free(ent)); + smartlist_free(dirreq_completed); + return result; +} + +/** Return a newly allocated comma-separated string containing entries for + * all the countries from which we've seen enough clients connect as a + * bridge, directory server, or entry guard. The entry format is cc=num + * where num is the number of IPs we've seen connecting from that country, + * and cc is a lowercased country code. Returns NULL if we don't want + * to export geoip data yet. */ +char * +geoip_get_client_history(geoip_client_action_t action) +{ + char *result = NULL; + unsigned granularity = IP_GRANULARITY; + smartlist_t *chunks = NULL; + smartlist_t *entries = NULL; + int n_countries = geoip_get_n_countries(); + int i; + clientmap_entry_t **ent; + unsigned *counts = NULL; + unsigned total = 0; + + if (!geoip_is_loaded()) + return NULL; + + counts = tor_malloc_zero(sizeof(unsigned)*n_countries); + HT_FOREACH(ent, clientmap, &client_history) { + int country; + if ((*ent)->action != (int)action) + continue; + country = geoip_get_country_by_ip((*ent)->ipaddr); + if (country < 0) + country = 0; /** unresolved requests are stored at index 0. */ + tor_assert(0 <= country && country < n_countries); + ++counts[country]; + ++total; + } + /* Don't record anything if we haven't seen enough IPs. */ + if (total < MIN_IPS_TO_NOTE_ANYTHING) + goto done; + /* Make a list of c_hist_t */ + entries = smartlist_create(); + for (i = 0; i < n_countries; ++i) { + unsigned c = counts[i]; + const char *countrycode; + c_hist_t *ent; + /* Only report a country if it has a minimum number of IPs. */ + if (c >= MIN_IPS_TO_NOTE_COUNTRY) { + c = round_to_next_multiple_of(c, granularity); + countrycode = geoip_get_country_name(i); + ent = tor_malloc(sizeof(c_hist_t)); + strlcpy(ent->country, countrycode, sizeof(ent->country)); + ent->total = c; + smartlist_add(entries, ent); } } + /* Sort entries. Note that we must do this _AFTER_ rounding, or else + * the sort order could leak info. */ + smartlist_sort(entries, _c_hist_compare); + + /* Build the result. */ + chunks = smartlist_create(); + SMARTLIST_FOREACH(entries, c_hist_t *, ch, { + char *buf=NULL; + tor_asprintf(&buf, "%s=%u", ch->country, ch->total); + smartlist_add(chunks, buf); + }); + result = smartlist_join_strings(chunks, ",", 0, NULL); + done: + tor_free(counts); + if (chunks) { + SMARTLIST_FOREACH(chunks, char *, c, tor_free(c)); + smartlist_free(chunks); + } + if (entries) { + SMARTLIST_FOREACH(entries, c_hist_t *, c, tor_free(c)); + smartlist_free(entries); + } return result; } @@ -540,18 +858,12 @@ * for action in a format suitable for an extra-info document, or NULL * on failure. */ char * -geoip_get_request_history(time_t now, geoip_client_action_t action) +geoip_get_request_history(geoip_client_action_t action) { smartlist_t *entries, *strings; char *result; unsigned granularity = IP_GRANULARITY; -#ifdef ENABLE_GEOIP_STATS - if (get_options()->DirRecordUsageByCountry) - granularity = get_options()->DirRecordUsageGranularity; -#endif - if (client_history_starts >= (now - GEOIP_MIN_OBSERVATION_TIME)) - return NULL; if (action != GEOIP_CLIENT_NETWORKSTATUS && action != GEOIP_CLIENT_NETWORKSTATUS_V2) return NULL; @@ -560,13 +872,10 @@ entries = smartlist_create(); SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, { - uint32_t *n = (action == GEOIP_CLIENT_NETWORKSTATUS) - ? c->n_v3_ns_requests : c->n_v2_ns_requests; uint32_t tot = 0; - int i; c_hist_t *ent; - for (i=0; i < REQUEST_HIST_LEN; ++i) - tot += n[i]; + tot = (action == GEOIP_CLIENT_NETWORKSTATUS) ? + c->n_v3_ns_requests : c->n_v2_ns_requests; if (!tot) continue; ent = tor_malloc_zero(sizeof(c_hist_t)); @@ -578,9 +887,9 @@ strings = smartlist_create(); SMARTLIST_FOREACH(entries, c_hist_t *, ent, { - char buf[32]; - tor_snprintf(buf, sizeof(buf), "%s=%u", ent->country, ent->total); - smartlist_add(strings, tor_strdup(buf)); + char *buf = NULL; + tor_asprintf(&buf, "%s=%u", ent->country, ent->total); + smartlist_add(strings, buf); }); result = smartlist_join_strings(strings, ",", 0, NULL); SMARTLIST_FOREACH(strings, char *, cp, tor_free(cp)); @@ -590,69 +899,450 @@ return result; } -/** Store all our geoip statistics into $DATADIR/geoip-stats. */ +/** Start time of directory request stats or 0 if we're not collecting + * directory request statistics. */ +static time_t start_of_dirreq_stats_interval; + +/** Initialize directory request stats. */ +void +geoip_dirreq_stats_init(time_t now) +{ + start_of_dirreq_stats_interval = now; +} + +/** Stop collecting directory request stats in a way that we can re-start + * doing so in geoip_dirreq_stats_init(). */ void -dump_geoip_stats(void) +geoip_dirreq_stats_term(void) { -#ifdef ENABLE_GEOIP_STATS - time_t now = time(NULL); - time_t request_start; - char *filename = get_datadir_fname("geoip-stats"); + SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, { + c->n_v2_ns_requests = c->n_v3_ns_requests = 0; + }); + { + clientmap_entry_t **ent, **next, *this; + for (ent = HT_START(clientmap, &client_history); ent != NULL; + ent = next) { + if ((*ent)->action == GEOIP_CLIENT_NETWORKSTATUS || + (*ent)->action == GEOIP_CLIENT_NETWORKSTATUS_V2) { + this = *ent; + next = HT_NEXT_RMV(clientmap, &client_history, ent); + tor_free(this); + } else { + next = HT_NEXT(clientmap, &client_history, ent); + } + } + } + v2_share_times_seconds = v3_share_times_seconds = 0.0; + last_time_determined_shares = 0; + share_seconds = 0; + memset(ns_v2_responses, 0, sizeof(ns_v2_responses)); + memset(ns_v3_responses, 0, sizeof(ns_v3_responses)); + { + dirreq_map_entry_t **ent, **next, *this; + for (ent = HT_START(dirreqmap, &dirreq_map); ent != NULL; ent = next) { + this = *ent; + next = HT_NEXT_RMV(dirreqmap, &dirreq_map, ent); + tor_free(this); + } + } + start_of_dirreq_stats_interval = 0; +} + +/** Write dirreq statistics to $DATADIR/stats/dirreq-stats and return when + * we would next want to write. */ +time_t +geoip_dirreq_stats_write(time_t now) +{ + char *statsdir = NULL, *filename = NULL; char *data_v2 = NULL, *data_v3 = NULL; - char since[ISO_TIME_LEN+1], written[ISO_TIME_LEN+1]; + char written[ISO_TIME_LEN+1]; open_file_t *open_file = NULL; double v2_share = 0.0, v3_share = 0.0; FILE *out; + int i; + + if (!start_of_dirreq_stats_interval) + return 0; /* Not initialized. */ + if (start_of_dirreq_stats_interval + WRITE_STATS_INTERVAL > now) + goto done; /* Not ready to write. */ + + /* Discard all items in the client history that are too old. */ + geoip_remove_old_clients(start_of_dirreq_stats_interval); - data_v2 = geoip_get_client_history(now, GEOIP_CLIENT_NETWORKSTATUS_V2); - data_v3 = geoip_get_client_history(now, GEOIP_CLIENT_NETWORKSTATUS); - format_iso_time(since, geoip_get_history_start()); + statsdir = get_datadir_fname("stats"); + if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) + goto done; + filename = get_datadir_fname2("stats", "dirreq-stats"); + data_v2 = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS_V2); + data_v3 = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS); format_iso_time(written, now); - out = start_writing_to_stdio_file(filename, OPEN_FLAGS_REPLACE, + out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND | O_TEXT, 0600, &open_file); if (!out) goto done; - if (fprintf(out, "written %s\nstarted-at %s\nns-ips %s\nns-v2-ips %s\n", - written, since, + if (fprintf(out, "dirreq-stats-end %s (%d s)\ndirreq-v3-ips %s\n" + "dirreq-v2-ips %s\n", written, + (unsigned) (now - start_of_dirreq_stats_interval), data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0) goto done; tor_free(data_v2); tor_free(data_v3); - request_start = current_request_period_starts - - (n_old_request_periods * REQUEST_HIST_PERIOD); - format_iso_time(since, request_start); - data_v2 = geoip_get_request_history(now, GEOIP_CLIENT_NETWORKSTATUS_V2); - data_v3 = geoip_get_request_history(now, GEOIP_CLIENT_NETWORKSTATUS); - if (fprintf(out, "requests-start %s\nn-ns-reqs %s\nn-v2-ns-reqs %s\n", - since, + data_v2 = geoip_get_request_history(GEOIP_CLIENT_NETWORKSTATUS_V2); + data_v3 = geoip_get_request_history(GEOIP_CLIENT_NETWORKSTATUS); + if (fprintf(out, "dirreq-v3-reqs %s\ndirreq-v2-reqs %s\n", data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0) goto done; - if (!router_get_my_share_of_directory_requests(&v2_share, &v3_share)) { - if (fprintf(out, "v2-ns-share %0.2lf%%\n", v2_share*100) < 0) + tor_free(data_v2); + tor_free(data_v3); + SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, { + c->n_v2_ns_requests = c->n_v3_ns_requests = 0; + }); +#define RESPONSE_GRANULARITY 8 + for (i = 0; i < GEOIP_NS_RESPONSE_NUM; i++) { + ns_v2_responses[i] = round_uint32_to_next_multiple_of( + ns_v2_responses[i], RESPONSE_GRANULARITY); + ns_v3_responses[i] = round_uint32_to_next_multiple_of( + ns_v3_responses[i], RESPONSE_GRANULARITY); + } +#undef RESPONSE_GRANULARITY + if (fprintf(out, "dirreq-v3-resp ok=%u,not-enough-sigs=%u,unavailable=%u," + "not-found=%u,not-modified=%u,busy=%u\n", + ns_v3_responses[GEOIP_SUCCESS], + ns_v3_responses[GEOIP_REJECT_NOT_ENOUGH_SIGS], + ns_v3_responses[GEOIP_REJECT_UNAVAILABLE], + ns_v3_responses[GEOIP_REJECT_NOT_FOUND], + ns_v3_responses[GEOIP_REJECT_NOT_MODIFIED], + ns_v3_responses[GEOIP_REJECT_BUSY]) < 0) + goto done; + if (fprintf(out, "dirreq-v2-resp ok=%u,unavailable=%u," + "not-found=%u,not-modified=%u,busy=%u\n", + ns_v2_responses[GEOIP_SUCCESS], + ns_v2_responses[GEOIP_REJECT_UNAVAILABLE], + ns_v2_responses[GEOIP_REJECT_NOT_FOUND], + ns_v2_responses[GEOIP_REJECT_NOT_MODIFIED], + ns_v2_responses[GEOIP_REJECT_BUSY]) < 0) + goto done; + memset(ns_v2_responses, 0, sizeof(ns_v2_responses)); + memset(ns_v3_responses, 0, sizeof(ns_v3_responses)); + if (!geoip_get_mean_shares(now, &v2_share, &v3_share)) { + if (fprintf(out, "dirreq-v2-share %0.2lf%%\n", v2_share*100) < 0) goto done; - if (fprintf(out, "v3-ns-share %0.2lf%%\n", v3_share*100) < 0) + if (fprintf(out, "dirreq-v3-share %0.2lf%%\n", v3_share*100) < 0) goto done; } + data_v2 = geoip_get_dirreq_history(GEOIP_CLIENT_NETWORKSTATUS_V2, + DIRREQ_DIRECT); + data_v3 = geoip_get_dirreq_history(GEOIP_CLIENT_NETWORKSTATUS, + DIRREQ_DIRECT); + if (fprintf(out, "dirreq-v3-direct-dl %s\ndirreq-v2-direct-dl %s\n", + data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0) + goto done; + tor_free(data_v2); + tor_free(data_v3); + data_v2 = geoip_get_dirreq_history(GEOIP_CLIENT_NETWORKSTATUS_V2, + DIRREQ_TUNNELED); + data_v3 = geoip_get_dirreq_history(GEOIP_CLIENT_NETWORKSTATUS, + DIRREQ_TUNNELED); + if (fprintf(out, "dirreq-v3-tunneled-dl %s\ndirreq-v2-tunneled-dl %s\n", + data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0) + goto done; + finish_writing_to_file(open_file); open_file = NULL; + + start_of_dirreq_stats_interval = now; + done: if (open_file) abort_writing_to_file(open_file); tor_free(filename); + tor_free(statsdir); tor_free(data_v2); tor_free(data_v3); -#endif + return start_of_dirreq_stats_interval + WRITE_STATS_INTERVAL; +} + +/** Start time of bridge stats or 0 if we're not collecting bridge + * statistics. */ +static time_t start_of_bridge_stats_interval; + +/** Initialize bridge stats. */ +void +geoip_bridge_stats_init(time_t now) +{ + start_of_bridge_stats_interval = now; +} + +/** Stop collecting bridge stats in a way that we can re-start doing so in + * geoip_bridge_stats_init(). */ +void +geoip_bridge_stats_term(void) +{ + client_history_clear(); + start_of_bridge_stats_interval = 0; +} + +/** Validate a bridge statistics string as it would be written to a + * current extra-info descriptor. Return 1 if the string is valid and + * recent enough, or 0 otherwise. */ +static int +validate_bridge_stats(const char *stats_str, time_t now) +{ + char stats_end_str[ISO_TIME_LEN+1], stats_start_str[ISO_TIME_LEN+1], + *eos; + + const char *BRIDGE_STATS_END = "bridge-stats-end "; + const char *BRIDGE_IPS = "bridge-ips "; + const char *BRIDGE_IPS_EMPTY_LINE = "bridge-ips\n"; + const char *tmp; + time_t stats_end_time; + int seconds; + tor_assert(stats_str); + + /* Parse timestamp and number of seconds from + "bridge-stats-end YYYY-MM-DD HH:MM:SS (N s)" */ + tmp = find_str_at_start_of_line(stats_str, BRIDGE_STATS_END); + if (!tmp) + return 0; + tmp += strlen(BRIDGE_STATS_END); + + if (strlen(tmp) < ISO_TIME_LEN + 6) + return 0; + strlcpy(stats_end_str, tmp, sizeof(stats_end_str)); + if (parse_iso_time(stats_end_str, &stats_end_time) < 0) + return 0; + if (stats_end_time < now - (25*60*60) || + stats_end_time > now + (1*60*60)) + return 0; + seconds = (int)strtol(tmp + ISO_TIME_LEN + 2, &eos, 10); + if (!eos || seconds < 23*60*60) + return 0; + format_iso_time(stats_start_str, stats_end_time - seconds); + + /* Parse: "bridge-ips CC=N,CC=N,..." */ + tmp = find_str_at_start_of_line(stats_str, BRIDGE_IPS); + if (!tmp) { + /* Look if there is an empty "bridge-ips" line */ + tmp = find_str_at_start_of_line(stats_str, BRIDGE_IPS_EMPTY_LINE); + if (!tmp) + return 0; + } + + return 1; +} + +/** Most recent bridge statistics formatted to be written to extra-info + * descriptors. */ +static char *bridge_stats_extrainfo = NULL; + +/** Return a newly allocated string holding our bridge usage stats by country + * in a format suitable for inclusion in an extrainfo document. Return NULL on + * failure. */ +static char * +format_bridge_stats_extrainfo(time_t now) +{ + char *out = NULL, *data = NULL; + long duration = now - start_of_bridge_stats_interval; + char written[ISO_TIME_LEN+1]; + + if (duration < 0) + return NULL; + + format_iso_time(written, now); + data = geoip_get_client_history(GEOIP_CLIENT_CONNECT); + + tor_asprintf(&out, + "bridge-stats-end %s (%ld s)\n" + "bridge-ips %s\n", + written, duration, + data ? data : ""); + tor_free(data); + + return out; +} + +/** Return a newly allocated string holding our bridge usage stats by country + * in a format suitable for the answer to a controller request. Return NULL on + * failure. */ +static char * +format_bridge_stats_controller(time_t now) +{ + char *out = NULL, *data = NULL; + char started[ISO_TIME_LEN+1]; + (void) now; + + format_iso_time(started, start_of_bridge_stats_interval); + data = geoip_get_client_history(GEOIP_CLIENT_CONNECT); + + tor_asprintf(&out, + "TimeStarted=\"%s\" CountrySummary=%s", + started, data ? data : ""); + tor_free(data); + return out; +} + +/** Write bridge statistics to $DATADIR/stats/bridge-stats and return + * when we should next try to write statistics. */ +time_t +geoip_bridge_stats_write(time_t now) +{ + char *filename = NULL, *val = NULL, *statsdir = NULL; + + /* Check if 24 hours have passed since starting measurements. */ + if (now < start_of_bridge_stats_interval + WRITE_STATS_INTERVAL) + return start_of_bridge_stats_interval + WRITE_STATS_INTERVAL; + + /* Discard all items in the client history that are too old. */ + geoip_remove_old_clients(start_of_bridge_stats_interval); + + /* Generate formatted string */ + val = format_bridge_stats_extrainfo(now); + if (val == NULL) + goto done; + + /* Update the stored value. */ + tor_free(bridge_stats_extrainfo); + bridge_stats_extrainfo = val; + start_of_bridge_stats_interval = now; + + /* Write it to disk. */ + statsdir = get_datadir_fname("stats"); + if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) + goto done; + filename = get_datadir_fname2("stats", "bridge-stats"); + + write_str_to_file(filename, bridge_stats_extrainfo, 0); + + /* Tell the controller, "hey, there are clients!" */ + { + char *controller_str = format_bridge_stats_controller(now); + if (controller_str) + control_event_clients_seen(controller_str); + tor_free(controller_str); + } + done: + tor_free(filename); + tor_free(statsdir); + + return start_of_bridge_stats_interval + WRITE_STATS_INTERVAL; +} + +/** Try to load the most recent bridge statistics from disk, unless we + * have finished a measurement interval lately, and check whether they + * are still recent enough. */ +static void +load_bridge_stats(time_t now) +{ + char *fname, *contents; + if (bridge_stats_extrainfo) + return; + + fname = get_datadir_fname2("stats", "bridge-stats"); + contents = read_file_to_str(fname, RFTS_IGNORE_MISSING, NULL); + if (contents && validate_bridge_stats(contents, now)) + bridge_stats_extrainfo = contents; + + tor_free(fname); +} + +/** Return most recent bridge statistics for inclusion in extra-info + * descriptors, or NULL if we don't have recent bridge statistics. */ +const char * +geoip_get_bridge_stats_extrainfo(time_t now) +{ + load_bridge_stats(now); + return bridge_stats_extrainfo; +} + +/** Return a new string containing the recent bridge statistics to be returned + * to controller clients, or NULL if we don't have any bridge statistics. */ +char * +geoip_get_bridge_stats_controller(time_t now) +{ + return format_bridge_stats_controller(now); +} + +/** Start time of entry stats or 0 if we're not collecting entry + * statistics. */ +static time_t start_of_entry_stats_interval; + +/** Initialize entry stats. */ +void +geoip_entry_stats_init(time_t now) +{ + start_of_entry_stats_interval = now; +} + +/** Stop collecting entry stats in a way that we can re-start doing so in + * geoip_entry_stats_init(). */ +void +geoip_entry_stats_term(void) +{ + client_history_clear(); + start_of_entry_stats_interval = 0; +} + +/** Write entry statistics to $DATADIR/stats/entry-stats and return time + * when we would next want to write. */ +time_t +geoip_entry_stats_write(time_t now) +{ + char *statsdir = NULL, *filename = NULL; + char *data = NULL; + char written[ISO_TIME_LEN+1]; + open_file_t *open_file = NULL; + FILE *out; + + if (!start_of_entry_stats_interval) + return 0; /* Not initialized. */ + if (start_of_entry_stats_interval + WRITE_STATS_INTERVAL > now) + goto done; /* Not ready to write. */ + + /* Discard all items in the client history that are too old. */ + geoip_remove_old_clients(start_of_entry_stats_interval); + + statsdir = get_datadir_fname("stats"); + if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) + goto done; + filename = get_datadir_fname2("stats", "entry-stats"); + data = geoip_get_client_history(GEOIP_CLIENT_CONNECT); + format_iso_time(written, now); + out = start_writing_to_stdio_file(filename, OPEN_FLAGS_APPEND | O_TEXT, + 0600, &open_file); + if (!out) + goto done; + if (fprintf(out, "entry-stats-end %s (%u s)\nentry-ips %s\n", + written, (unsigned) (now - start_of_entry_stats_interval), + data ? data : "") < 0) + goto done; + + start_of_entry_stats_interval = now; + + finish_writing_to_file(open_file); + open_file = NULL; + done: + if (open_file) + abort_writing_to_file(open_file); + tor_free(filename); + tor_free(statsdir); + tor_free(data); + return start_of_entry_stats_interval + WRITE_STATS_INTERVAL; } /** Helper used to implement GETINFO ip-to-country/... controller command. */ int getinfo_helper_geoip(control_connection_t *control_conn, - const char *question, char **answer) + const char *question, char **answer, + const char **errmsg) { (void)control_conn; - if (geoip_is_loaded() && !strcmpstart(question, "ip-to-country/")) { + if (!geoip_is_loaded()) { + *errmsg = "GeoIP data not loaded"; + return -1; + } + if (!strcmpstart(question, "ip-to-country/")) { int c; uint32_t ip; struct in_addr in; @@ -674,8 +1364,8 @@ SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, tor_free(c)); smartlist_free(geoip_countries); } - if (country_idxplus1_by_lc_code) - strmap_free(country_idxplus1_by_lc_code, NULL); + + strmap_free(country_idxplus1_by_lc_code, NULL); if (geoip_entries) { SMARTLIST_FOREACH(geoip_entries, geoip_entry_t *, ent, tor_free(ent)); smartlist_free(geoip_entries); @@ -689,13 +1379,24 @@ void geoip_free_all(void) { - clientmap_entry_t **ent, **next, *this; - for (ent = HT_START(clientmap, &client_history); ent != NULL; ent = next) { - this = *ent; - next = HT_NEXT_RMV(clientmap, &client_history, ent); - tor_free(this); + { + clientmap_entry_t **ent, **next, *this; + for (ent = HT_START(clientmap, &client_history); ent != NULL; ent = next) { + this = *ent; + next = HT_NEXT_RMV(clientmap, &client_history, ent); + tor_free(this); + } + HT_CLEAR(clientmap, &client_history); + } + { + dirreq_map_entry_t **ent, **next, *this; + for (ent = HT_START(dirreqmap, &dirreq_map); ent != NULL; ent = next) { + this = *ent; + next = HT_NEXT_RMV(dirreqmap, &dirreq_map, ent); + tor_free(this); + } + HT_CLEAR(dirreqmap, &dirreq_map); } - HT_CLEAR(clientmap, &client_history); clear_geoip_db(); } diff -Nru tor-0.2.1.30/src/or/geoip.h tor-0.2.2.35/src/or/geoip.h --- tor-0.2.1.30/src/or/geoip.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/geoip.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,57 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file geoip.h + * \brief Header file for geoip.c. + **/ + +#ifndef _TOR_GEOIP_H +#define _TOR_GEOIP_H + +#ifdef GEOIP_PRIVATE +int geoip_parse_entry(const char *line); +#endif +int should_record_bridge_info(or_options_t *options); +int geoip_load_file(const char *filename, or_options_t *options); +int geoip_get_country_by_ip(uint32_t ipaddr); +int geoip_get_n_countries(void); +const char *geoip_get_country_name(country_t num); +int geoip_is_loaded(void); +country_t geoip_get_country(const char *countrycode); + +void geoip_note_client_seen(geoip_client_action_t action, + uint32_t addr, time_t now); +void geoip_remove_old_clients(time_t cutoff); + +void geoip_note_ns_response(geoip_client_action_t action, + geoip_ns_response_t response); +char *geoip_get_client_history(geoip_client_action_t action); +char *geoip_get_request_history(geoip_client_action_t action); +int getinfo_helper_geoip(control_connection_t *control_conn, + const char *question, char **answer, + const char **errmsg); +void geoip_free_all(void); + +void geoip_start_dirreq(uint64_t dirreq_id, size_t response_size, + geoip_client_action_t action, dirreq_type_t type); +void geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type, + dirreq_state_t new_state); + +void geoip_dirreq_stats_init(time_t now); +time_t geoip_dirreq_stats_write(time_t now); +void geoip_dirreq_stats_term(void); +void geoip_entry_stats_init(time_t now); +time_t geoip_entry_stats_write(time_t now); +void geoip_entry_stats_term(void); +void geoip_bridge_stats_init(time_t now); +time_t geoip_bridge_stats_write(time_t now); +void geoip_bridge_stats_term(void); +const char *geoip_get_bridge_stats_extrainfo(time_t); +char *geoip_get_bridge_stats_controller(time_t); + +#endif + diff -Nru tor-0.2.1.30/src/or/hibernate.c tor-0.2.2.35/src/or/hibernate.c --- tor-0.2.1.30/src/or/hibernate.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/hibernate.c 2011-12-15 16:28:37.000000000 +0000 @@ -22,6 +22,12 @@ */ #include "or.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "hibernate.h" +#include "main.h" +#include "router.h" /** Possible values of hibernate_state */ typedef enum { @@ -89,6 +95,13 @@ static uint64_t n_bytes_written_in_interval = 0; /** How many seconds have we been running this interval? */ static uint32_t n_seconds_active_in_interval = 0; +/** How many seconds were we active in this interval before we hit our soft + * limit? */ +static int n_seconds_to_hit_soft_limit = 0; +/** When in this interval was the soft limit hit. */ +static time_t soft_limit_hit_at = 0; +/** How many bytes had we read/written when we hit the soft limit? */ +static uint64_t n_bytes_at_soft_limit = 0; /** When did this accounting interval start? */ static time_t interval_start_time = 0; /** When will this accounting interval end? */ @@ -182,6 +195,9 @@ case UNIT_DAY: d = 0; break; + /* Coverity dislikes unreachable default cases; some compilers warn on + * switch statements missing a case. Tell Coverity not to worry. */ + /* coverity[dead_error_begin] */ default: tor_assert(0); } @@ -332,29 +348,58 @@ return edge_of_accounting_period_containing(now, 1); } +/** Return the length of the accounting period containing the time + * now. */ +static long +length_of_accounting_period_containing(time_t now) +{ + return edge_of_accounting_period_containing(now, 1) - + edge_of_accounting_period_containing(now, 0); +} + /** Initialize the accounting subsystem. */ void configure_accounting(time_t now) { + time_t s_now; /* Try to remember our recorded usage. */ if (!interval_start_time) read_bandwidth_usage(); /* If we fail, we'll leave values at zero, and * reset below.*/ - if (!interval_start_time || - start_of_accounting_period_after(interval_start_time) <= now) { - /* We didn't have recorded usage, or we don't have recorded usage - * for this interval. Start a new interval. */ + + s_now = start_of_accounting_period_containing(now); + + if (!interval_start_time) { + /* We didn't have recorded usage; Start a new interval. */ log_info(LD_ACCT, "Starting new accounting interval."); reset_accounting(now); - } else if (interval_start_time == - start_of_accounting_period_containing(interval_start_time)) { + } else if (s_now == interval_start_time) { log_info(LD_ACCT, "Continuing accounting interval."); /* We are in the interval we thought we were in. Do nothing.*/ interval_end_time = start_of_accounting_period_after(interval_start_time); } else { - log_warn(LD_ACCT, - "Mismatched accounting interval; starting a fresh one."); - reset_accounting(now); + long duration = + length_of_accounting_period_containing(interval_start_time); + double delta = ((double)(s_now - interval_start_time)) / duration; + 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. */ + log_info(LD_ACCT, "Accounting interval moved by %.02f%%; " + "that's fine.", delta*100); + interval_end_time = start_of_accounting_period_after(now); + } else if (delta >= 0.99) { + /* This is the regular time-moved-forward case; don't be too noisy + * about it or people will complain */ + log_info(LD_ACCT, "Accounting interval elapsed; starting a new one"); + reset_accounting(now); + } else { + log_warn(LD_ACCT, + "Mismatched accounting interval: moved by %.02f%%. " + "Starting a fresh one.", delta*100); + reset_accounting(now); + } } accounting_set_wakeup_time(); } @@ -365,23 +410,42 @@ static void update_expected_bandwidth(void) { - uint64_t used, expected; - uint64_t max_configured = (get_options()->BandwidthRate * 60); - - if (n_seconds_active_in_interval < 1800) { + uint64_t expected; + or_options_t *options= get_options(); + uint64_t max_configured = (options->RelayBandwidthRate > 0 ? + options->RelayBandwidthRate : + options->BandwidthRate) * 60; + +#define MIN_TIME_FOR_MEASUREMENT (1800) + + if (soft_limit_hit_at > interval_start_time && n_bytes_at_soft_limit && + (soft_limit_hit_at - interval_start_time) > MIN_TIME_FOR_MEASUREMENT) { + /* If we hit our soft limit last time, only count the bytes up to that + * time. This is a better predictor of our actual bandwidth than + * considering the entirety of the last interval, since we likely started + * using bytes very slowly once we hit our soft limit. */ + expected = n_bytes_at_soft_limit / + (soft_limit_hit_at - interval_start_time); + expected /= 60; + } else if (n_seconds_active_in_interval >= MIN_TIME_FOR_MEASUREMENT) { + /* Otherwise, we either measured enough time in the last interval but + * never hit our soft limit, or we're using a state file from a Tor that + * doesn't know to store soft-limit info. Just take rate at which + * we were reading/writing in the last interval as our expected rate. + */ + uint64_t used = MAX(n_bytes_written_in_interval, + n_bytes_read_in_interval); + expected = used / (n_seconds_active_in_interval / 60); + } else { /* If we haven't gotten enough data last interval, set 'expected' * to 0. This will set our wakeup to the start of the interval. * Next interval, we'll choose our starting time based on how much * we sent this interval. */ expected = 0; - } else { - used = n_bytes_written_in_interval < n_bytes_read_in_interval ? - n_bytes_read_in_interval : n_bytes_written_in_interval; - expected = used / (n_seconds_active_in_interval / 60); - if (expected > max_configured) - expected = max_configured; } + if (expected > max_configured) + expected = max_configured; expected_bandwidth_usage = expected; } @@ -399,6 +463,9 @@ n_bytes_read_in_interval = 0; n_bytes_written_in_interval = 0; n_seconds_active_in_interval = 0; + n_bytes_at_soft_limit = 0; + soft_limit_hit_at = 0; + n_seconds_to_hit_soft_limit = 0; } /** Return true iff we should save our bandwidth usage to disk. */ @@ -449,35 +516,39 @@ static void accounting_set_wakeup_time(void) { - char buf[ISO_TIME_LEN+1]; char digest[DIGEST_LEN]; crypto_digest_env_t *d_env; int time_in_interval; uint64_t time_to_exhaust_bw; int time_to_consider; - if (! identity_key_is_set()) { + if (! server_identity_key_is_set()) { if (init_keys() < 0) { log_err(LD_BUG, "Error initializing keys"); tor_assert(0); } } - format_iso_time(buf, interval_start_time); - crypto_pk_get_digest(get_identity_key(), digest); - - d_env = crypto_new_digest_env(); - crypto_digest_add_bytes(d_env, buf, ISO_TIME_LEN); - crypto_digest_add_bytes(d_env, digest, DIGEST_LEN); - crypto_digest_get_digest(d_env, digest, DIGEST_LEN); - crypto_free_digest_env(d_env); + if (server_identity_key_is_set()) { + char buf[ISO_TIME_LEN+1]; + format_iso_time(buf, interval_start_time); + + crypto_pk_get_digest(get_server_identity_key(), digest); + + d_env = crypto_new_digest_env(); + crypto_digest_add_bytes(d_env, buf, ISO_TIME_LEN); + crypto_digest_add_bytes(d_env, digest, DIGEST_LEN); + crypto_digest_get_digest(d_env, digest, DIGEST_LEN); + crypto_free_digest_env(d_env); + } else { + crypto_rand(digest, DIGEST_LEN); + } if (!expected_bandwidth_usage) { char buf1[ISO_TIME_LEN+1]; char buf2[ISO_TIME_LEN+1]; format_local_iso_time(buf1, interval_start_time); format_local_iso_time(buf2, interval_end_time); - time_to_exhaust_bw = GUESS_TIME_TO_USE_BANDWIDTH; interval_wakeup_time = interval_start_time; log_notice(LD_ACCT, @@ -492,8 +563,8 @@ time_to_exhaust_bw = (get_options()->AccountingMax/expected_bandwidth_usage)*60; - if (time_to_exhaust_bw > TIME_MAX) { - time_to_exhaust_bw = TIME_MAX; + if (time_to_exhaust_bw > INT_MAX) { + time_to_exhaust_bw = INT_MAX; time_to_consider = 0; } else { time_to_consider = time_in_interval - (int)time_to_exhaust_bw; @@ -511,8 +582,6 @@ * to be chosen than the last half. */ interval_wakeup_time = interval_start_time + (get_uint32(digest) % time_to_consider); - - format_iso_time(buf, interval_wakeup_time); } { @@ -559,6 +628,10 @@ state->AccountingSecondsActive = n_seconds_active_in_interval; state->AccountingExpectedUsage = expected_bandwidth_usage; + state->AccountingSecondsToReachSoftLimit = n_seconds_to_hit_soft_limit; + state->AccountingSoftLimitHitAt = soft_limit_hit_at; + state->AccountingBytesAtSoftLimit = n_bytes_at_soft_limit; + or_state_mark_dirty(state, now+(get_options()->AvoidDiskWrites ? 7200 : 60)); @@ -582,10 +655,6 @@ if (!state) return -1; - /* Okay; it looks like the state file is more up-to-date than the - * bw_accounting file, or the bw_accounting file is nonexistent, - * or the bw_accounting file is corrupt. - */ log_info(LD_ACCT, "Reading bandwidth accounting data from state file"); n_bytes_read_in_interval = state->AccountingBytesReadInInterval; n_bytes_written_in_interval = state->AccountingBytesWrittenInInterval; @@ -593,6 +662,21 @@ interval_start_time = state->AccountingIntervalStart; expected_bandwidth_usage = state->AccountingExpectedUsage; + /* Older versions of Tor (before 0.2.2.17-alpha or so) didn't generate these + * fields. If you switch back and forth, you might get an + * AccountingSoftLimitHitAt value from long before the most recent + * interval_start_time. If that's so, then ignore the softlimit-related + * values. */ + if (state->AccountingSoftLimitHitAt > interval_start_time) { + soft_limit_hit_at = state->AccountingSoftLimitHitAt; + n_bytes_at_soft_limit = state->AccountingBytesAtSoftLimit; + n_seconds_to_hit_soft_limit = state->AccountingSecondsToReachSoftLimit; + } else { + soft_limit_hit_at = 0; + n_bytes_at_soft_limit = 0; + n_seconds_to_hit_soft_limit = 0; + } + { char tbuf1[ISO_TIME_LEN+1]; char tbuf2[ISO_TIME_LEN+1]; @@ -632,8 +716,27 @@ static int hibernate_soft_limit_reached(void) { - uint64_t soft_limit = DBL_TO_U64(U64_TO_DBL(get_options()->AccountingMax) - * .95); + const uint64_t acct_max = get_options()->AccountingMax; +#define SOFT_LIM_PCT (.95) +#define SOFT_LIM_BYTES (500*1024*1024) +#define SOFT_LIM_MINUTES (3*60) + /* The 'soft limit' is a fair bit more complicated now than once it was. + * We want to stop accepting connections when ALL of the following are true: + * - We expect to use up the remaining bytes in under 3 hours + * - We have used up 95% of our bytes. + * - We have less than 500MB of bytes left. + */ + uint64_t soft_limit = DBL_TO_U64(U64_TO_DBL(acct_max) * SOFT_LIM_PCT); + if (acct_max > SOFT_LIM_BYTES && acct_max - SOFT_LIM_BYTES > soft_limit) { + soft_limit = acct_max - SOFT_LIM_BYTES; + } + if (expected_bandwidth_usage) { + const uint64_t expected_usage = + expected_bandwidth_usage * SOFT_LIM_MINUTES; + if (acct_max > expected_usage && acct_max - expected_usage > soft_limit) + soft_limit = acct_max - expected_usage; + } + if (!soft_limit) return 0; return n_bytes_read_in_interval >= soft_limit @@ -658,6 +761,14 @@ exit(0); } + if (new_state == HIBERNATE_STATE_LOWBANDWIDTH && + hibernate_state == HIBERNATE_STATE_LIVE) { + soft_limit_hit_at = now; + n_seconds_to_hit_soft_limit = n_seconds_active_in_interval; + n_bytes_at_soft_limit = MAX(n_bytes_read_in_interval, + n_bytes_written_in_interval); + } + /* close listeners. leave control listener(s). */ while ((conn = connection_get_by_type(CONN_TYPE_OR_LISTENER)) || (conn = connection_get_by_type(CONN_TYPE_AP_LISTENER)) || @@ -673,7 +784,8 @@ /* XXX upload rendezvous service descriptors with no intro points */ if (new_state == HIBERNATE_STATE_EXITING) { - log_notice(LD_GENERAL,"Interrupt: will shut down in %d seconds. Interrupt " + log_notice(LD_GENERAL,"Interrupt: we have stopped accepting new " + "connections, and will shut down in %d seconds. Interrupt " "again to exit now.", options->ShutdownWaitLength); shutdown_time = time(NULL) + options->ShutdownWaitLength; } else { /* soft limit reached */ @@ -830,7 +942,8 @@ if (hibernate_state == HIBERNATE_STATE_LIVE) { if (hibernate_soft_limit_reached()) { log_notice(LD_ACCT, - "Bandwidth soft limit reached; commencing hibernation."); + "Bandwidth soft limit reached; commencing hibernation. " + "No new connections will be accepted"); hibernate_begin(HIBERNATE_STATE_LOWBANDWIDTH, now); } else if (accounting_enabled && now < interval_wakeup_time) { format_local_iso_time(buf,interval_wakeup_time); @@ -860,9 +973,11 @@ * NULL. */ int getinfo_helper_accounting(control_connection_t *conn, - const char *question, char **answer) + const char *question, char **answer, + const char **errmsg) { (void) conn; + (void) errmsg; if (!strcmp(question, "accounting/enabled")) { *answer = tor_strdup(accounting_is_enabled(get_options()) ? "1" : "0"); } else if (!strcmp(question, "accounting/hibernating")) { diff -Nru tor-0.2.1.30/src/or/hibernate.h tor-0.2.2.35/src/or/hibernate.h --- tor-0.2.1.30/src/or/hibernate.h 1970-01-01 00:00:00.000000000 +0000 +++ tor-0.2.2.35/src/or/hibernate.h 2011-12-15 16:28:37.000000000 +0000 @@ -0,0 +1,29 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2011, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file hibernate.h + * \brief Header file for hibernate.c. + **/ + +#ifndef _TOR_HIBERNATE_H +#define _TOR_HIBERNATE_H + +int accounting_parse_options(or_options_t *options, int validate_only); +int accounting_is_enabled(or_options_t *options); +void configure_accounting(time_t now); +void accounting_run_housekeeping(time_t now); +void accounting_add_bytes(size_t n_read, size_t n_written, int seconds); +int accounting_record_bandwidth_usage(time_t now, or_state_t *state); +void hibernate_begin_shutdown(void); +int we_are_hibernating(void); +void consider_hibernation(time_t now); +int getinfo_helper_accounting(control_connection_t *conn, + const char *question, char **answer, + const char **errmsg); + +#endif + diff -Nru tor-0.2.1.30/src/or/main.c tor-0.2.2.35/src/or/main.c --- tor-0.2.1.30/src/or/main.c 2011-02-23 08:25:40.000000000 +0000 +++ tor-0.2.2.35/src/or/main.c 2011-12-15 16:28:37.000000000 +0000 @@ -12,22 +12,59 @@ #define MAIN_PRIVATE #include "or.h" +#include "buffers.h" +#include "circuitbuild.h" +#include "circuitlist.h" +#include "circuituse.h" +#include "command.h" +#include "config.h" +#include "connection.h" +#include "connection_edge.h" +#include "connection_or.h" +#include "control.h" +#include "cpuworker.h" +#include "directory.h" +#include "dirserv.h" +#include "dirvote.h" +#include "dns.h" +#include "dnsserv.h" +#include "geoip.h" +#include "hibernate.h" +#include "main.h" +#include "microdesc.h" +#include "networkstatus.h" +#include "ntmain.h" +#include "onion.h" +#include "policies.h" +#include "relay.h" +#include "rendclient.h" +#include "rendcommon.h" +#include "rendservice.h" +#include "rephist.h" +#include "router.h" +#include "routerlist.h" +#include "routerparse.h" #ifdef USE_DMALLOC #include #include #endif #include "memarea.h" +#ifdef HAVE_EVENT2_EVENT_H +#include +#else +#include +#endif + void evdns_shutdown(int); /********* PROTOTYPES **********/ static void dumpmemusage(int severity); static void dumpstats(int severity); /* log stats */ -static void conn_read_callback(int fd, short event, void *_conn); -static void conn_write_callback(int fd, short event, void *_conn); -static void signal_callback(int fd, short events, void *arg); -static void second_elapsed_callback(int fd, short event, void *args); +static void conn_read_callback(evutil_socket_t fd, short event, void *_conn); +static void conn_write_callback(evutil_socket_t fd, short event, void *_conn); +static void second_elapsed_callback(periodic_timer_t *timer, void *args); static int conn_close_if_marked(int i); static void connection_start_reading_from_linked_conn(connection_t *conn); static int connection_should_read_from_linked_conn(connection_t *conn); @@ -81,8 +118,12 @@ static int called_loop_once = 0; /** We set this to 1 when we've opened a circuit, so we can print a log - * entry to inform the user that Tor is working. */ -int has_completed_circuit=0; + * entry to inform the user that Tor is working. We set it to 0 when + * we think the fact that we once opened a circuit doesn't mean we can do so + * any longer (a big time jump happened, when we notice our directory is + * heinously out-of-date, etc. + */ +int can_complete_circuit=0; /** How often do we check for router descriptors that we should download * when we have too little directory info? */ @@ -117,7 +158,7 @@ connection_add(connection_t *conn) { tor_assert(conn); - tor_assert(conn->s >= 0 || + tor_assert(SOCKET_OK(conn->s) || conn->linked || (conn->type == CONN_TYPE_AP && TO_EDGE_CONN(conn)->is_dns_request)); @@ -126,22 +167,39 @@ conn->conn_array_index = smartlist_len(connection_array); smartlist_add(connection_array, conn); - if (conn->s >= 0 || conn->linked) { - conn->read_event = tor_malloc_zero(sizeof(struct event)); - conn->write_event = tor_malloc_zero(sizeof(struct event)); - event_set(conn->read_event, conn->s, EV_READ|EV_PERSIST, - conn_read_callback, conn); - event_set(conn->write_event, conn->s, EV_WRITE|EV_PERSIST, - conn_write_callback, conn); + if (SOCKET_OK(conn->s) || conn->linked) { + conn->read_event = tor_event_new(tor_libevent_get_base(), + conn->s, EV_READ|EV_PERSIST, conn_read_callback, conn); + conn->write_event = tor_event_new(tor_libevent_get_base(), + conn->s, EV_WRITE|EV_PERSIST, conn_write_callback, conn); } log_debug(LD_NET,"new conn type %s, socket %d, address %s, n_conns %d.", - conn_type_to_string(conn->type), conn->s, conn->address, + conn_type_to_string(conn->type), (int)conn->s, conn->address, smartlist_len(connection_array)); return 0; } +/** Tell libevent that we don't care about conn any more. */ +void +connection_unregister_events(connection_t *conn) +{ + if (conn->read_event) { + if (event_del(conn->read_event)) + log_warn(LD_BUG, "Error removing read event for %d", (int)conn->s); + tor_free(conn->read_event); + } + if (conn->write_event) { + if (event_del(conn->write_event)) + log_warn(LD_BUG, "Error removing write event for %d", (int)conn->s); + tor_free(conn->write_event); + } + if (conn->dns_server_port) { + dnsserv_close_listener(conn); + } +} + /** Remove the connection from the global list, and remove the * corresponding poll entry. Calling this function will shift the last * connection (if any) into the position occupied by conn. @@ -155,7 +213,7 @@ tor_assert(conn); log_debug(LD_NET,"removing socket %d (type %s), n_conns now %d", - conn->s, conn_type_to_string(conn->type), + (int)conn->s, conn_type_to_string(conn->type), smartlist_len(connection_array)); tor_assert(conn->conn_array_index >= 0); @@ -246,17 +304,17 @@ } /** Set the event mask on conn to events. (The event - * mask is a bitmask whose bits are EV_READ and EV_WRITE.) + * mask is a bitmask whose bits are READ_EVENT and WRITE_EVENT) */ void -connection_watch_events(connection_t *conn, short events) +connection_watch_events(connection_t *conn, watchable_events_t events) { - if (events & EV_READ) + if (events & READ_EVENT) connection_start_reading(conn); else connection_stop_reading(conn); - if (events & EV_WRITE) + if (events & WRITE_EVENT) connection_start_writing(conn); else connection_stop_writing(conn); @@ -286,7 +344,7 @@ if (event_del(conn->read_event)) log_warn(LD_NET, "Error from libevent setting read event state for %d " "to unwatched: %s", - conn->s, + (int)conn->s, tor_socket_strerror(tor_socket_errno(conn->s))); } } @@ -306,7 +364,7 @@ if (event_add(conn->read_event, NULL)) log_warn(LD_NET, "Error from libevent setting read event state for %d " "to watched: %s", - conn->s, + (int)conn->s, tor_socket_strerror(tor_socket_errno(conn->s))); } } @@ -336,7 +394,7 @@ if (event_del(conn->write_event)) log_warn(LD_NET, "Error from libevent setting write event state for %d " "to unwatched: %s", - conn->s, + (int)conn->s, tor_socket_strerror(tor_socket_errno(conn->s))); } } @@ -357,7 +415,7 @@ if (event_add(conn->write_event, NULL)) log_warn(LD_NET, "Error from libevent setting write event state for %d " "to watched: %s", - conn->s, + (int)conn->s, tor_socket_strerror(tor_socket_errno(conn->s))); } } @@ -393,11 +451,11 @@ smartlist_add(active_linked_connection_lst, conn); if (!called_loop_once) { /* This is the first event on the list; we won't be in LOOP_ONCE mode, - * so we need to make sure that the event_loop() actually exits at the - * end of its run through the current connections and - * lets us activate read events for linked connections. */ + * so we need to make sure that the event_base_loop() actually exits at + * the end of its run through the current connections and lets us + * activate read events for linked connections. */ struct timeval tv = { 0, 0 }; - event_loopexit(&tv); + tor_event_base_loopexit(tor_libevent_get_base(), &tv); } } else { tor_assert(smartlist_isin(active_linked_connection_lst, conn)); @@ -443,13 +501,13 @@ /** Libevent callback: this gets invoked when (connection_t*)conn has * some data to read. */ static void -conn_read_callback(int fd, short event, void *_conn) +conn_read_callback(evutil_socket_t fd, short event, void *_conn) { connection_t *conn = _conn; (void)fd; (void)event; - log_debug(LD_NET,"socket %d wants to read.",conn->s); + log_debug(LD_NET,"socket %d wants to read.",(int)conn->s); /* assert_connection_ok(conn, time(NULL)); */ @@ -458,7 +516,7 @@ #ifndef MS_WINDOWS log_warn(LD_BUG,"Unhandled error on read for %s connection " "(fd %d); removing", - conn_type_to_string(conn->type), conn->s); + conn_type_to_string(conn->type), (int)conn->s); tor_fragile_assert(); #endif if (CONN_IS_EDGE(conn)) @@ -475,13 +533,14 @@ /** Libevent callback: this gets invoked when (connection_t*)conn has * some data to write. */ static void -conn_write_callback(int fd, short events, void *_conn) +conn_write_callback(evutil_socket_t fd, short events, void *_conn) { connection_t *conn = _conn; (void)fd; (void)events; - LOG_FN_CONN(conn, (LOG_DEBUG, LD_NET, "socket %d wants to write.",conn->s)); + LOG_FN_CONN(conn, (LOG_DEBUG, LD_NET, "socket %d wants to write.", + (int)conn->s)); /* assert_connection_ok(conn, time(NULL)); */ @@ -490,7 +549,7 @@ /* this connection is broken. remove it. */ log_fn(LOG_WARN,LD_BUG, "unhandled error on write for %s connection (fd %d); removing", - conn_type_to_string(conn->type), conn->s); + conn_type_to_string(conn->type), (int)conn->s); tor_fragile_assert(); if (CONN_IS_EDGE(conn)) { /* otherwise we cry wolf about duplicate close */ @@ -531,8 +590,9 @@ assert_connection_ok(conn, now); /* assert_all_pending_dns_resolves_ok(); */ - log_debug(LD_NET,"Cleaning up connection (fd %d).",conn->s); - if ((conn->s >= 0 || conn->linked_conn) && connection_wants_to_flush(conn)) { + log_debug(LD_NET,"Cleaning up connection (fd %d).",(int)conn->s); + if ((SOCKET_OK(conn->s) || conn->linked_conn) + && connection_wants_to_flush(conn)) { /* s == -1 means it's an incomplete edge connection, or that the socket * has already been closed as unflushable. */ ssize_t sz = connection_bucket_write_limit(conn, now); @@ -540,8 +600,8 @@ log_info(LD_NET, "Conn (addr %s, fd %d, type %s, state %d) marked, but wants " "to flush %d bytes. (Marked at %s:%d)", - escaped_safe_str(conn->address), - conn->s, conn_type_to_string(conn->type), conn->state, + escaped_safe_str_client(conn->address), + (int)conn->s, conn_type_to_string(conn->type), conn->state, (int)conn->outbuf_flushlen, conn->marked_for_close_file, conn->marked_for_close); if (conn->linked_conn) { @@ -572,7 +632,7 @@ if (retval > 0) { LOG_FN_CONN(conn, (LOG_INFO,LD_NET, "Holding conn (fd %d) open for more flushing.", - conn->s)); + (int)conn->s)); conn->timestamp_lastwritten = now; /* reset so we can flush more */ } return 0; @@ -593,8 +653,8 @@ "something is wrong with theirs. " "(fd %d, type %s, state %d, marked at %s:%d).", (int)buf_datalen(conn->outbuf), - escaped_safe_str(conn->address), conn->s, - conn_type_to_string(conn->type), conn->state, + escaped_safe_str_client(conn->address), + (int)conn->s, conn_type_to_string(conn->type), conn->state, conn->marked_for_close_file, conn->marked_for_close); } @@ -623,7 +683,7 @@ log_notice(LD_NET, "Is your network connection down? " "Failing connection to '%s:%d'.", - safe_str(edge_conn->socks_request->address), + safe_str_client(edge_conn->socks_request->address), edge_conn->socks_request->port); connection_mark_unattached_ap(edge_conn, END_STREAM_REASON_NET_UNREACHABLE); @@ -651,7 +711,7 @@ /* if we have enough dir info, then update our guard status with * whatever we just learned. */ - entry_guards_compute_status(); + entry_guards_compute_status(options, now); /* Don't even bother trying to get extrainfo until the rest of our * directory info is up-to-date */ if (options->DownloadExtraInfo) @@ -659,7 +719,7 @@ } if (server_mode(options) && !we_are_hibernating() && !from_cache && - (has_completed_circuit || !any_predicted_circuits(now))) + (can_complete_circuit || !any_predicted_circuits(now))) consider_testing_reachability(1, 1); } @@ -701,7 +761,7 @@ (!DIR_CONN_IS_SERVER(conn) && conn->timestamp_lastread + DIR_CONN_MAX_STALL < now))) { log_info(LD_DIR,"Expiring wedged directory conn (fd %d, purpose %d)", - conn->s, conn->purpose); + (int)conn->s, conn->purpose); /* This check is temporary; it's to let us know whether we should consider * parsing partial serverdesc responses. */ if (conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC && @@ -722,13 +782,14 @@ the connection or send a keepalive, depending. */ or_conn = TO_OR_CONN(conn); + tor_assert(conn->outbuf); if (or_conn->is_bad_for_new_circs && !or_conn->n_circuits) { /* It's bad for new circuits, and has no unmarked circuits on it: * mark it now. */ log_info(LD_OR, "Expiring non-used OR connection to fd %d (%s:%d) [Too old].", - conn->s, conn->address, conn->port); + (int)conn->s, conn->address, conn->port); if (conn->state == OR_CONN_STATE_CONNECTING) connection_or_connect_failed(TO_OR_CONN(conn), END_OR_CONN_REASON_TIMEOUT, @@ -739,7 +800,7 @@ if (past_keepalive) { /* We never managed to actually get this connection open and happy. */ log_info(LD_OR,"Expiring non-open OR connection to fd %d (%s:%d).", - conn->s,conn->address, conn->port); + (int)conn->s,conn->address, conn->port); connection_mark_for_close(conn); } } else if (we_are_hibernating() && !or_conn->n_circuits && @@ -747,14 +808,14 @@ /* We're hibernating, there's no circuits, and nothing to flush.*/ log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) " "[Hibernating or exiting].", - conn->s,conn->address, conn->port); + (int)conn->s,conn->address, conn->port); connection_mark_for_close(conn); conn->hold_open_until_flushed = 1; } else if (!or_conn->n_circuits && now >= or_conn->timestamp_last_added_nonpadding + IDLE_OR_CONN_TIMEOUT) { log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) " - "[idle %d].", conn->s,conn->address, conn->port, + "[idle %d].", (int)conn->s,conn->address, conn->port, (int)(now - or_conn->timestamp_last_added_nonpadding)); connection_mark_for_close(conn); conn->hold_open_until_flushed = 1; @@ -764,7 +825,7 @@ log_fn(LOG_PROTOCOL_WARN,LD_PROTOCOL, "Expiring stuck OR connection to fd %d (%s:%d). (%d bytes to " "flush; %d seconds since last write)", - conn->s, conn->address, conn->port, + (int)conn->s, conn->address, conn->port, (int)buf_datalen(conn->outbuf), (int)(now-conn->timestamp_lastwritten)); connection_mark_for_close(conn); @@ -778,13 +839,21 @@ } } -/** Honor a NEWNYM request: make future requests unlinkability to past +/** Honor a NEWNYM request: make future requests unlinkable to past * requests. */ static void signewnym_impl(time_t now) { + or_options_t *options = get_options(); + if (!proxy_mode(options)) { + log_info(LD_CONTROL, "Ignoring SIGNAL NEWNYM because client functionality " + "is disabled."); + return; + } + circuit_expire_all_dirty_circs(); addressmap_clear_transient(); + rend_client_purge_state(); time_of_last_signewnym = now; signewnym_is_pending = 0; } @@ -804,16 +873,19 @@ static time_t time_to_try_getting_descriptors = 0; static time_t time_to_reset_descriptor_failures = 0; static time_t time_to_add_entropy = 0; - static time_t time_to_write_hs_statistics = 0; static time_t time_to_write_bridge_status_file = 0; static time_t time_to_downrate_stability = 0; static time_t time_to_save_stability = 0; static time_t time_to_clean_caches = 0; static time_t time_to_recheck_bandwidth = 0; static time_t time_to_check_for_expired_networkstatus = 0; - static time_t time_to_dump_geoip_stats = 0; + static time_t time_to_write_stats_files = 0; + static time_t time_to_write_bridge_stats = 0; + static time_t time_to_launch_reachability_tests = 0; + static int should_init_bridge_stats = 1; static time_t time_to_retry_dns_init = 0; or_options_t *options = get_options(); + int is_server = server_mode(options); int i; int have_dir_info; @@ -831,11 +903,14 @@ signewnym_impl(now); } + /* 0c. If we've deferred log messages for the controller, handle them now */ + flush_pending_log_callbacks(); + /** 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys, * shut down and restart all cpuworkers, and update the directory if * necessary. */ - if (server_mode(options) && + if (is_server && get_onion_key_set_at()+MIN_ONION_KEY_LIFETIME < now) { log_info(LD_GENERAL,"Rotating onion key."); rotate_onion_key(); @@ -850,8 +925,6 @@ if (time_to_try_getting_descriptors < now) { update_router_descriptor_downloads(now); update_extrainfo_downloads(now); - if (options->UseBridges) - fetch_bridge_descriptors(now); if (router_have_minimum_dir_info()) time_to_try_getting_descriptors = now + LAZY_DESCRIPTOR_RETRY_INTERVAL; else @@ -864,12 +937,19 @@ now + DESCRIPTOR_FAILURE_RESET_INTERVAL; } - /** 1b. Every MAX_SSL_KEY_LIFETIME seconds, we change our TLS context. */ + if (options->UseBridges) + fetch_bridge_descriptors(options, now); + + /** 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our + * TLS context. */ if (!last_rotated_x509_certificate) last_rotated_x509_certificate = now; - if (last_rotated_x509_certificate+MAX_SSL_KEY_LIFETIME < now) { + if (last_rotated_x509_certificate+MAX_SSL_KEY_LIFETIME_INTERNAL < now) { log_info(LD_GENERAL,"Rotating tls context."); - if (tor_tls_context_new(get_identity_key(), MAX_SSL_KEY_LIFETIME) < 0) { + if (tor_tls_context_init(public_server_mode(options), + get_tlsclient_identity_key(), + is_server ? get_server_identity_key() : NULL, + MAX_SSL_KEY_LIFETIME_ADVERTISED) < 0) { log_warn(LD_BUG, "Error reinitializing TLS context"); /* XXX is it a bug here, that we just keep going? -RD */ } @@ -894,10 +974,12 @@ if (accounting_is_enabled(options)) accounting_run_housekeeping(now); - if (now % 10 == 0 && (authdir_mode_tests_reachability(options)) && - !we_are_hibernating()) { + if (time_to_launch_reachability_tests < now && + (authdir_mode_tests_reachability(options)) && + !we_are_hibernating()) { + time_to_launch_reachability_tests = now + REACHABILITY_TEST_INTERVAL; /* try to determine reachability of the other Tor relays */ - dirserv_test_reachability(now, 0); + dirserv_test_reachability(now); } /** 1d. Periodically, we discount older stability information so that new @@ -939,11 +1021,56 @@ time_to_check_for_expired_networkstatus = now + CHECK_EXPIRED_NS_INTERVAL; } - if (time_to_dump_geoip_stats < now) { -#define DUMP_GEOIP_STATS_INTERVAL (60*60); - if (time_to_dump_geoip_stats) - dump_geoip_stats(); - time_to_dump_geoip_stats = now + DUMP_GEOIP_STATS_INTERVAL; + /* 1g. Check whether we should write statistics to disk. + */ + if (time_to_write_stats_files < now) { +#define CHECK_WRITE_STATS_INTERVAL (60*60) + time_t next_time_to_write_stats_files = (time_to_write_stats_files > 0 ? + time_to_write_stats_files : now) + CHECK_WRITE_STATS_INTERVAL; + if (options->CellStatistics) { + time_t next_write = + rep_hist_buffer_stats_write(time_to_write_stats_files); + if (next_write && next_write < next_time_to_write_stats_files) + next_time_to_write_stats_files = next_write; + } + if (options->DirReqStatistics) { + time_t next_write = geoip_dirreq_stats_write(time_to_write_stats_files); + if (next_write && next_write < next_time_to_write_stats_files) + next_time_to_write_stats_files = next_write; + } + if (options->EntryStatistics) { + time_t next_write = geoip_entry_stats_write(time_to_write_stats_files); + if (next_write && next_write < next_time_to_write_stats_files) + next_time_to_write_stats_files = next_write; + } + if (options->ExitPortStatistics) { + time_t next_write = rep_hist_exit_stats_write(time_to_write_stats_files); + if (next_write && next_write < next_time_to_write_stats_files) + next_time_to_write_stats_files = next_write; + } + time_to_write_stats_files = next_time_to_write_stats_files; + } + + /* 1h. Check whether we should write bridge statistics to disk. + */ + if (should_record_bridge_info(options)) { + if (time_to_write_bridge_stats < now) { + if (should_init_bridge_stats) { + /* (Re-)initialize bridge statistics. */ + geoip_bridge_stats_init(now); + time_to_write_bridge_stats = now + WRITE_STATS_INTERVAL; + should_init_bridge_stats = 0; + } else { + /* Possibly write bridge statistics to disk and ask when to write + * them next time. */ + time_to_write_bridge_stats = geoip_bridge_stats_write( + time_to_write_bridge_stats); + } + } + } else if (!should_init_bridge_stats) { + /* Bridge mode was turned off. Ensure that stats are re-initialized + * next time bridge mode is turned on. */ + should_init_bridge_stats = 1; } /* Remove old information from rephist and the rend cache. */ @@ -951,6 +1078,8 @@ rep_history_clean(now - options->RephistTrackTime); rend_cache_clean(); rend_cache_clean_v2_descs_as_dir(); + if (authdir_mode_v3(options)) + microdesc_cache_rebuild(NULL, 0); #define CLEAN_CACHES_INTERVAL (30*60) time_to_clean_caches = now + CLEAN_CACHES_INTERVAL; } @@ -991,7 +1120,7 @@ /* also, check religiously for reachability, if it's within the first * 20 minutes of our uptime. */ if (server_mode(options) && - (has_completed_circuit || !any_predicted_circuits(now)) && + (can_complete_circuit || !any_predicted_circuits(now)) && !we_are_hibernating()) { if (stats_n_seconds_working < TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT) { consider_testing_reachability(1, dirport_reachability_count==0); @@ -1034,7 +1163,12 @@ * We do this before step 4, so it can try building more if * it's not comfortable with the number of available circuits. */ - circuit_expire_building(now); + /* XXXX022 If our circuit build timeout is much lower than a second, maybe + * we should do this more often? -NM + * It can't be lower than 1.5 seconds currently; see + * circuit_build_times_min_timeout(). -RD + */ + circuit_expire_building(); /** 3b. Also look at pending streams and prune the ones that 'began' * a long time ago but haven't gotten a 'connected' yet. @@ -1067,7 +1201,7 @@ circuit_expire_old_circuits_serverside(now); /** 5. We do housekeeping for each connection... */ - connection_or_set_bad_connections(); + connection_or_set_bad_connections(NULL, 0); for (i=0;i