Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
bind.34939
bind-9.16-CVE-2024-1737.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bind-9.16-CVE-2024-1737.patch of Package bind.34939
commit de5626034971337f07a9e49ba4e49d592b6bf8fc Author: Nicki Křížek <nicki@isc.org> Date: Wed Jul 24 10:09:58 2024 +0000 [9.16] [CVE-2024-1737] Previously, the number of RRs in the RRSets were internally unlimited. As the data structure that holds the RRs is just a linked list, and there are places where we just walk through all of the RRs, adding an RRSet with huge number of RRs inside would slow down processing of said RRSets. Add a configurable limit to cap the number of the RRs in a single RRSet. This is enforced at the database (rbtdb, qpzone, qpcache) level and configured with new max-records-per-rrset configuration option that can be configured globally, per-view and per-zone. (cherry picked from commit c5c4d00c38530390c9e1ae4c98b65fbbadfe9e5e) Not a backport, closes https://gitlab.isc.org/isc-projects/bind9/-/issues/3405 for 9.16 Merge branch '3405-limit-the-number-of-resource-records-in-rrset-9.16' into 'bind-9.16' See merge request isc-projects/bind9!9170 [9.16][CVE-2024-1737 (part 2)] Be smarter about refusing to add many RR types to the database Add HTTPS, SVCB, SRV, PTR, NAPTR, DNSKEY and TXT records to the list of the priority types that are put at the beginning of the slabheader list for faster access and to avoid eviction when there are more types than the max-types-per-name limit. (cherry picked from commit b27c6bcce894786a8e082eafd59eccbf6f2731cb) --- Backport of MR https://gitlab.isc.org/isc-private/bind9/-/merge_requests/712 Related https://gitlab.isc.org/isc-projects/bind9/-/issues/3405 Merge branch '3405-limit-the-number-of-resource-records-in-rrset-nxdomain-9.16' into 'bind-9.16' See merge request isc-projects/bind9!9172 [9.16] chg: usr: Backport max-records-per-type to BIND 9.16 This aligns the fix for large number of RRs in RRSet with 9.18 and up by backporting to `max-records-per-type` configuration option to BIND 9.16. Merge branch 'ondrej/max-records-per-type-backport-9.16' into 'bind-9.16' See merge request isc-projects/bind9!9177 [9.16] chg: usr: Backport max-types-per-name to BIND 9.16 This aligns the fix for large number of RRs in RRSet with 9.18 and up by backporting to `max-records-per-type` configuration option to BIND 9.16. Merge branch 'ondrej/max-types-per-rr-backport-9.16' into 'bind-9.16' See merge request isc-projects/bind9!9178 diff --git a/bin/named/config.c b/bin/named/config.c index 36f0be6594..8953c07ba5 100644 --- a/bin/named/config.c +++ b/bin/named/config.c @@ -227,8 +227,10 @@ options {\n\ # max-ixfr-log-size <obsolete>\n\ max-journal-size default;\n\ max-records 0;\n\ + max-records-per-type 100;\n\ max-refresh-time 2419200; /* 4 weeks */\n\ max-retry-time 1209600; /* 2 weeks */\n\ + max-types-per-name 100;\n\ max-transfer-idle-in 60;\n\ max-transfer-idle-out 60;\n\ max-transfer-time-in 120;\n\ diff --git a/bin/named/server.c b/bin/named/server.c index b293cced03..2cee24327d 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -5288,6 +5288,24 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config, dns_resolver_setclientsperquery(view->resolver, cfg_obj_asuint32(obj), max_clients_per_query); + /* + * This is used for the cache and also as a default value + * for zone databases. + */ + obj = NULL; + result = named_config_get(maps, "max-records-per-type", &obj); + INSIST(result == ISC_R_SUCCESS); + dns_view_setmaxrrperset(view, cfg_obj_asuint32(obj)); + + /* + * This is used for the cache and also as a default value + * for zone databases. + */ + obj = NULL; + result = named_config_get(maps, "max-types-per-name", &obj); + INSIST(result == ISC_R_SUCCESS); + dns_view_setmaxtypepername(view, cfg_obj_asuint32(obj)); + obj = NULL; result = named_config_get(maps, "max-recursion-depth", &obj); INSIST(result == ISC_R_SUCCESS); diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c index 1a4777f09b..8f15da65bd 100644 --- a/bin/named/zoneconf.c +++ b/bin/named/zoneconf.c @@ -1089,6 +1089,22 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig, dns_zone_setmaxrecords(zone, 0); } + obj = NULL; + result = named_config_get(maps, "max-records-per-type", &obj); + INSIST(result == ISC_R_SUCCESS && obj != NULL); + dns_zone_setmaxrrperset(mayberaw, cfg_obj_asuint32(obj)); + if (zone != mayberaw) { + dns_zone_setmaxrrperset(zone, 0); + } + + obj = NULL; + result = named_config_get(maps, "max-types-per-name", &obj); + INSIST(result == ISC_R_SUCCESS && obj != NULL); + dns_zone_setmaxtypepername(mayberaw, cfg_obj_asuint32(obj)); + if (zone != mayberaw) { + dns_zone_setmaxtypepername(zone, 0); + } + if (raw != NULL && filename != NULL) { #define SIGNED ".signed" size_t signedlen = strlen(filename) + sizeof(SIGNED); diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c index cbeff6172b..eeae331225 100644 --- a/bin/tests/system/dyndb/driver/db.c +++ b/bin/tests/system/dyndb/driver/db.c @@ -590,7 +590,9 @@ static dns_dbmethods_t sampledb_methods = { NULL, /* setservestalettl */ NULL, /* getservestalettl */ NULL, /* setgluecachestats */ - NULL /* adjusthashsize */ + NULL, /* adjusthashsize */ + NULL, /* setmaxrrperset */ + NULL /* setmaxtypepername */ }; /* Auxiliary driver functions. */ diff --git a/bin/tests/system/limits/ns1/named.conf.in b/bin/tests/system/limits/ns1/named.conf.in index 2395de25d3..3b60edd65f 100644 --- a/bin/tests/system/limits/ns1/named.conf.in +++ b/bin/tests/system/limits/ns1/named.conf.in @@ -20,6 +20,7 @@ options { recursion no; notify yes; minimal-responses no; + max-records-per-type 0; }; zone "." { diff --git a/bin/tests/system/masterformat/clean.sh b/bin/tests/system/masterformat/clean.sh index e2f81faa2a..5c0e77c2cb 100755 --- a/bin/tests/system/masterformat/clean.sh +++ b/bin/tests/system/masterformat/clean.sh @@ -14,6 +14,13 @@ rm -f ./ns1/example.db.compat rm -f ./ns1/example.db.serial.raw rm -f ./ns1/large.db ./ns1/large.db.raw rm -f ./ns1/example.db.map ./ns1/signed.db.map +rm -f ./ns1/huge.db ./ns1/huge.db.raw +rm -f ./ns1/uber.db ./ns1/uber.db.raw +rm -f ./ns1/255types.db ./ns1/255types.db.raw +rm -f ./ns1/on-limit.db ./ns1/on-limit.db.raw +rm -f ./ns1/over-limit.db ./ns1/over-limit.db.raw +rm -f ./ns1/under-limit.db ./ns1/under-limit.db.raw +rm -f ./ns2/under-limit.bk rm -f ./ns1/session.key rm -f ./dig.out.* rm -f ./dig.out diff --git a/bin/tests/system/masterformat/ns1/compile.sh b/bin/tests/system/masterformat/ns1/compile.sh index 1340343e6a..3439c0c378 100755 --- a/bin/tests/system/masterformat/ns1/compile.sh +++ b/bin/tests/system/masterformat/ns1/compile.sh @@ -23,10 +23,13 @@ $CHECKZONE -D -F raw=1 -o example.db.raw1 example-explicit \ $CHECKZONE -D -F raw=0 -o example.db.compat example-compat \ example.db > /dev/null 2>&1 $CHECKZONE -D -F raw -L 3333 -o example.db.serial.raw example \ - example.db > /dev/null 2>&1 -$CHECKZONE -D -F raw -o large.db.raw large large.db > /dev/null 2>&1 + example.db > /dev/null 2>&1 +$CHECKZONE -D -F raw -o under-limit.db.raw under-limit under-limit.db >/dev/null 2>&1 $CHECKZONE -D -F map -o example.db.map example-map \ - example.db > /dev/null 2>&1 + example.db > /dev/null 2>&1 +$CHECKZONE -D -F raw -o on-limit.db.raw on-limit on-limit.db >/dev/null 2>&1 +$CHECKZONE -D -F raw -o over-limit.db.raw over-limit over-limit.db >/dev/null 2>&1 +$CHECKZONE -D -F raw -o 255types.db.raw 255types 255types.db >/dev/null 2>&1 $KEYGEN -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" -f KSK signed > /dev/null 2>&1 $KEYGEN -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" signed > /dev/null 2>&1 diff --git a/bin/tests/system/masterformat/ns1/large.db.in b/bin/tests/system/masterformat/ns1/empty.db.in similarity index 100% rename from bin/tests/system/masterformat/ns1/large.db.in rename to bin/tests/system/masterformat/ns1/empty.db.in diff --git a/bin/tests/system/masterformat/ns1/named.conf.in b/bin/tests/system/masterformat/ns1/named.conf.in index c1d92b7ffb..8ea7c72eba 100644 --- a/bin/tests/system/masterformat/ns1/named.conf.in +++ b/bin/tests/system/masterformat/ns1/named.conf.in @@ -20,6 +20,8 @@ options { notify no; session-keyfile "session.key"; servfail-ttl 0; + max-records-per-type 2050; + max-types-per-name 500; }; key rndc_key { @@ -68,9 +70,31 @@ zone "transfer4" { }; -zone "large" { +zone "under-limit" { type master; - file "large.db.raw"; + file "under-limit.db.raw"; + masterfile-format raw; + allow-transfer { any; }; +}; + +zone "on-limit" { + type master; + file "on-limit.db.raw"; + masterfile-format raw; + allow-transfer { any; }; +}; + + +zone "over-limit" { + type master; + file "over-limit.db.raw"; + masterfile-format raw; + allow-transfer { any; }; +}; + +zone "255types" { + type master; + file "255types.db.raw"; masterfile-format raw; allow-transfer { any; }; }; diff --git a/bin/tests/system/masterformat/ns2/named.conf.in b/bin/tests/system/masterformat/ns2/named.conf.in index fb519466f4..1d90d8e2a2 100644 --- a/bin/tests/system/masterformat/ns2/named.conf.in +++ b/bin/tests/system/masterformat/ns2/named.conf.in @@ -19,6 +19,8 @@ options { recursion no; notify no; servfail-ttl 0; + max-records-per-type 2000; + max-types-per-name 200; }; zone "example" { @@ -53,9 +55,23 @@ zone "transfer4" { file "transfer.db.full"; }; -zone "large" { - type slave; +zone "under-limit" { + type secondary; + masters { 10.53.0.1; }; + masterfile-format raw; + file "under-limit.bk"; +}; + +zone "on-limit" { + type secondary; + masters { 10.53.0.1; }; + masterfile-format raw; + file "on-limit.bk"; +}; + +zone "255types" { + type secondary; masters { 10.53.0.1; }; masterfile-format raw; - file "large.bk"; + file "255types.bk"; }; diff --git a/bin/tests/system/masterformat/setup.sh b/bin/tests/system/masterformat/setup.sh index c1530f892b..08a11670be 100755 --- a/bin/tests/system/masterformat/setup.sh +++ b/bin/tests/system/masterformat/setup.sh @@ -20,10 +20,34 @@ copy_setports ns3/named.conf.in ns3/named.conf cp ns1/example.db ns2/ cp ns2/formerly-text.db.in ns2/formerly-text.db -cp ns1/large.db.in ns1/large.db +cp ns1/empty.db.in ns1/under-limit.db + +# counts are set with respect to these limits in named.conf: +# max-records-per-type 2050; +# max-types-per-name 500; +awk 'END { + for (i = 0; i < 500; i++ ) { print "500-txt TXT", i; } + for (i = 0; i < 1000; i++ ) { print "1000-txt TXT", i; } + for (i = 0; i < 2000; i++ ) { print "2000-txt TXT", i; } +}' </dev/null >>ns1/under-limit.db +cp ns1/empty.db.in ns1/on-limit.db +awk 'END { + for (i = 0; i < 500; i++ ) { print "500-txt TXT", i; } + for (i = 0; i < 1000; i++ ) { print "1000-txt TXT", i; } + for (i = 0; i < 2000; i++ ) { print "2000-txt TXT", i; } + for (i = 0; i < 2050; i++ ) { print "2050-txt TXT", i; } +}' </dev/null >>ns1/on-limit.db +cp ns1/empty.db.in ns1/over-limit.db awk 'END { - for (i = 0; i < 512; i++ ) { print "a TXT", i; } - for (i = 0; i < 1024; i++ ) { print "b TXT", i; } - for (i = 0; i < 2000; i++ ) { print "c TXT", i; } -}' < /dev/null >> ns1/large.db + for (i = 0; i < 500; i++ ) { print "500-txt TXT", i; } + for (i = 0; i < 1000; i++ ) { print "1000-txt TXT", i; } + for (i = 0; i < 2000; i++ ) { print "2000-txt TXT", i; } + for (i = 0; i < 2050; i++ ) { print "2050-txt TXT", i; } + for (i = 0; i < 2100; i++ ) { print "2100-txt TXT", i; } +}' </dev/null >>ns1/over-limit.db +cp ns1/empty.db.in ns1/255types.db +for ntype in $(seq 65280 65534); do + echo "m TYPE${ntype} \# 0" +done >>ns1/255types.db +echo "m TXT bunny" >>ns1/255types.db cd ns1 && $SHELL compile.sh diff --git a/bin/tests/system/masterformat/tests.sh b/bin/tests/system/masterformat/tests.sh index 4cf6f2cdce..eb22164b71 100755 --- a/bin/tests/system/masterformat/tests.sh +++ b/bin/tests/system/masterformat/tests.sh @@ -143,10 +143,9 @@ n=$((n+1)) status=$((status+ret)) echo_i "waiting for transfers to complete" -for i in 0 1 2 3 4 5 6 7 8 9 -do - test -f ns2/transfer.db.raw -a -f ns2/transfer.db.txt && break - sleep 1 +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + test -f ns2/transfer.db.raw -a -f ns2/transfer.db.txt && break + sleep 1 done echo_i "checking that slave was saved in raw format by default ($n)" @@ -171,35 +170,111 @@ n=$((n+1)) [ $ret -eq 0 ] || echo_i "failed" status=$((status+ret)) -echo_i "checking that slave formerly in text format is now raw ($n)" -for i in 0 1 2 3 4 5 6 7 8 9 -do - ret=0 - israw ns2/formerly-text.db > /dev/null 2>&1 || ret=1 - [ "$(rawversion ns2/formerly-text.db)" -eq 1 ] || ret=1 - [ $ret -eq 0 ] && break - sleep 1 +echo_i "checking that secondary formerly in text format is now raw ($n)" +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 + israw ns2/formerly-text.db >/dev/null 2>&1 || ret=1 + [ "$(rawversion ns2/formerly-text.db)" -eq 1 ] || ret=1 + [ $ret -eq 0 ] && break + sleep 1 done n=$((n+1)) [ $ret -eq 0 ] || echo_i "failed" status=$((status+ret)) -echo_i "checking that large rdatasets loaded ($n)" -for i in 0 1 2 3 4 5 6 7 8 9 -do -ret=0 -for a in a b c -do - $DIG +tcp txt "${a}.large" @10.53.0.2 -p "${PORT}" > "dig.out.ns2.test$n" - grep "status: NOERROR" "dig.out.ns2.test$n" > /dev/null || ret=1 -done -[ $ret -eq 0 ] && break -sleep 1 +echo_i "checking that under-limit rdatasets loaded ($n)" +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 + for rrcount in 500-txt 1000-txt 2000-txt; do + $DIG +tcp txt "${rrcount}.under-limit" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$rrcount.test$n" + grep "status: NOERROR" "dig.out.ns1.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 done n=$((n+1)) [ $ret -eq 0 ] || echo_i "failed" status=$((status+ret)) +echo_i "checking that under-limit rdatasets transfered ($n)" +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 + for rrcount in 500-txt 1000-txt 2000-txt; do + $DIG +tcp txt "${rrcount}.under-limit" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.$rrcount.test$n" + grep "status: NOERROR" "dig.out.ns2.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +done +n=$((n + 1)) +[ $ret -eq 0 ] || echo_i "failed" +status=$((status + ret)) + +echo_i "checking that on-limit rdatasets loaded ($n)" +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 + for rrcount in 500-txt 1000-txt 2000-txt 2050-txt; do + $DIG +tcp txt "${rrcount}.on-limit" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$rrcount.test$n" + grep "status: NOERROR" "dig.out.ns1.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +done +n=$((n + 1)) +[ $ret -eq 0 ] || echo_i "failed" +status=$((status + ret)) + +echo_i "checking that on-limit rdatasets not transfered ($n)" +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 + for rrcount in 500-txt 1000-txt 2000-txt 2050-txt; do + $DIG +tcp txt "${rrcount}.on-limit" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.$rrcount.test$n" + grep "status: SERVFAIL" "dig.out.ns2.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +done +n=$((n + 1)) +[ $ret -eq 0 ] || echo_i "failed" +status=$((status + ret)) + +echo_i "checking that over-limit rdatasets not loaded ($n)" +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 + for rrcount in 500-txt 1000-txt 2000-txt 2050-txt 2100-txt; do + $DIG +tcp txt "${rrcount}.over-limit" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.$rrcount.test$n" + grep "status: SERVFAIL" "dig.out.ns1.$rrcount.test$n" >/dev/null || ret=1 + done + [ $ret -eq 0 ] && break + sleep 1 +done +n=$((n + 1)) +[ $ret -eq 0 ] || echo_i "failed" +status=$((status + ret)) + +echo_i "checking that 255 types are loaded ($n)" +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + ret=0 + $DIG +tcp TXT "m.255types" @10.53.0.1 -p "${PORT}" >"dig.out.ns1.test$n" + grep "status: NOERROR" "dig.out.ns1.test$n" >/dev/null || ret=1 + [ $ret -eq 0 ] && break + sleep 1 +done +n=$((n + 1)) +[ $ret -eq 0 ] || echo_i "failed" +status=$((status + ret)) + +echo_i "checking that 255 types types are not transfered ($n)" +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + $DIG +tcp TXT "m.255types" @10.53.0.2 -p "${PORT}" >"dig.out.ns2.test$n" + grep "status: SERVFAIL" "dig.out.ns2.test$n" >/dev/null || ret=1 + [ $ret -eq 0 ] && break + sleep 1 +done +n=$((n + 1)) +[ $ret -eq 0 ] || echo_i "failed" +status=$((status + ret)) + echo_i "checking format transitions: text->raw->map->text ($n)" ret=0 $CHECKZONE -D -f text -F text -o baseline.txt example.nil ns1/example.db > /dev/null @@ -264,11 +339,11 @@ $PERL $SYSTEMTESTTOP/stop.pl --use-rndc --port ${CONTROLPORT} masterformat ns3 rm ns3/*.jnl restart #shellcheck disable=SC2034 -for i in 0 1 2 3 4 5 6 7 8 9; do - lret=0 - dig_with_opts +comm @10.53.0.3 moretext.dynamic txt > "dig.out.dynamic2.ns3.test$n" - grep "more text" "dig.out.dynamic2.ns3.test$n" > /dev/null 2>&1 || lret=1 - [ $lret -eq 0 ] && break; +for _attempt in 0 1 2 3 4 5 6 7 8 9; do + lret=0 + dig_with_opts +comm @10.53.0.3 moretext.dynamic txt >"dig.out.dynamic2.ns3.test$n" + grep "more text" "dig.out.dynamic2.ns3.test$n" >/dev/null 2>&1 || lret=1 + [ $lret -eq 0 ] && break done [ $lret -eq 1 ] && ret=1 n=$((n+1)) diff --git a/bin/tests/system/reclimit/clean.sh b/bin/tests/system/reclimit/clean.sh index 1d5c9cee49..0037616675 100644 --- a/bin/tests/system/reclimit/clean.sh +++ b/bin/tests/system/reclimit/clean.sh @@ -9,12 +9,16 @@ # See the COPYRIGHT file distributed with this work for additional # information regarding copyright ownership. -rm -f dig.out* -rm -f ans?/ans.run -rm -f ans2/ans.limit -rm -f ans4/ans.limit -rm -f ns?/named.memstats -rm -f ns?/named.run -rm -f ns*/named.conf -rm -f ns*/named.lock -rm -f ns*/managed-keys.bind* +rm -f ./dig.out* +rm -f ./dsset-signed. +rm -f ./ans?/ans.run +rm -f ./ans2/ans.limit +rm -f ./ans4/ans.limit +rm -f ./ns?/named.memstats +rm -f ./ns?/named.run +rm -f ./ns*/named.conf +rm -f ./ns*/named.lock +rm -f ./ns*/managed-keys.bind* +rm -f ./ns*/signed.db* +rm -f ./ns*/*.db.signed +rm -f ./ns*/Ksigned.*.key ./ns*/Ksigned.*.private diff --git a/bin/tests/system/reclimit/ns1/big.db b/bin/tests/system/reclimit/ns1/big.db new file mode 100644 index 0000000000..cefe8458f7 --- /dev/null +++ b/bin/tests/system/reclimit/ns1/big.db @@ -0,0 +1,2774 @@ +; Copyright (C) Internet Systems Consortium, Inc. ("ISC") +; +; SPDX-License-Identifier: MPL-2.0 +; +; This Source Code Form is subject to the terms of the Mozilla Public +; License, v. 2.0. If a copy of the MPL was not distributed with this +; file, you can obtain one at https://mozilla.org/MPL/2.0/. +; +; See the COPYRIGHT file distributed with this work for additional +; information regarding copyright ownership. + +$TTL 60 + +big. IN SOA ns.big. hostmaster.ns.big. 1 0 0 0 60 +big. IN NS ns.big. +ns.big. IN A 10.53.0.1 + +biganswer.big. IN A 10.10.1.1 +biganswer.big. IN A 10.10.1.2 +biganswer.big. IN A 10.10.1.3 +biganswer.big. IN A 10.10.1.4 +biganswer.big. IN A 10.10.1.5 +biganswer.big. IN A 10.10.1.6 +biganswer.big. IN A 10.10.1.7 +biganswer.big. IN A 10.10.1.8 +biganswer.big. IN A 10.10.1.9 +biganswer.big. IN A 10.10.1.10 +biganswer.big. IN A 10.10.1.11 +biganswer.big. IN A 10.10.1.12 +biganswer.big. IN A 10.10.1.13 +biganswer.big. IN A 10.10.1.14 +biganswer.big. IN A 10.10.1.15 +biganswer.big. IN A 10.10.1.16 +biganswer.big. IN A 10.10.1.17 +biganswer.big. IN A 10.10.1.18 +biganswer.big. IN A 10.10.1.19 +biganswer.big. IN A 10.10.1.20 +biganswer.big. IN A 10.10.1.21 +biganswer.big. IN A 10.10.1.22 +biganswer.big. IN A 10.10.1.23 +biganswer.big. IN A 10.10.1.24 +biganswer.big. IN A 10.10.1.25 +biganswer.big. IN A 10.10.1.26 +biganswer.big. IN A 10.10.1.27 +biganswer.big. IN A 10.10.1.28 +biganswer.big. IN A 10.10.1.29 +biganswer.big. IN A 10.10.1.30 +biganswer.big. IN A 10.10.1.31 +biganswer.big. IN A 10.10.1.32 +biganswer.big. IN A 10.10.1.33 +biganswer.big. IN A 10.10.1.34 +biganswer.big. IN A 10.10.1.35 +biganswer.big. IN A 10.10.1.36 +biganswer.big. IN A 10.10.1.37 +biganswer.big. IN A 10.10.1.38 +biganswer.big. IN A 10.10.1.39 +biganswer.big. IN A 10.10.1.40 +biganswer.big. IN A 10.10.1.41 +biganswer.big. IN A 10.10.1.42 +biganswer.big. IN A 10.10.1.43 +biganswer.big. IN A 10.10.1.44 +biganswer.big. IN A 10.10.1.45 +biganswer.big. IN A 10.10.1.46 +biganswer.big. IN A 10.10.1.47 +biganswer.big. IN A 10.10.1.48 +biganswer.big. IN A 10.10.1.49 +biganswer.big. IN A 10.10.1.50 +biganswer.big. IN A 10.10.2.1 +biganswer.big. IN A 10.10.2.2 +biganswer.big. IN A 10.10.2.3 +biganswer.big. IN A 10.10.2.4 +biganswer.big. IN A 10.10.2.5 +biganswer.big. IN A 10.10.2.6 +biganswer.big. IN A 10.10.2.7 +biganswer.big. IN A 10.10.2.8 +biganswer.big. IN A 10.10.2.9 +biganswer.big. IN A 10.10.2.10 +biganswer.big. IN A 10.10.2.11 +biganswer.big. IN A 10.10.2.12 +biganswer.big. IN A 10.10.2.13 +biganswer.big. IN A 10.10.2.14 +biganswer.big. IN A 10.10.2.15 +biganswer.big. IN A 10.10.2.16 +biganswer.big. IN A 10.10.2.17 +biganswer.big. IN A 10.10.2.18 +biganswer.big. IN A 10.10.2.19 +biganswer.big. IN A 10.10.2.20 +biganswer.big. IN A 10.10.2.21 +biganswer.big. IN A 10.10.2.22 +biganswer.big. IN A 10.10.2.23 +biganswer.big. IN A 10.10.2.24 +biganswer.big. IN A 10.10.2.25 +biganswer.big. IN A 10.10.2.26 +biganswer.big. IN A 10.10.2.27 +biganswer.big. IN A 10.10.2.28 +biganswer.big. IN A 10.10.2.29 +biganswer.big. IN A 10.10.2.30 +biganswer.big. IN A 10.10.2.31 +biganswer.big. IN A 10.10.2.32 +biganswer.big. IN A 10.10.2.33 +biganswer.big. IN A 10.10.2.34 +biganswer.big. IN A 10.10.2.35 +biganswer.big. IN A 10.10.2.36 +biganswer.big. IN A 10.10.2.37 +biganswer.big. IN A 10.10.2.38 +biganswer.big. IN A 10.10.2.39 +biganswer.big. IN A 10.10.2.40 +biganswer.big. IN A 10.10.2.41 +biganswer.big. IN A 10.10.2.42 +biganswer.big. IN A 10.10.2.43 +biganswer.big. IN A 10.10.2.44 +biganswer.big. IN A 10.10.2.45 +biganswer.big. IN A 10.10.2.46 +biganswer.big. IN A 10.10.2.47 +biganswer.big. IN A 10.10.2.48 +biganswer.big. IN A 10.10.2.49 +biganswer.big. IN A 10.10.2.50 +biganswer.big. IN A 10.10.3.1 +biganswer.big. IN A 10.10.3.2 +biganswer.big. IN A 10.10.3.3 +biganswer.big. IN A 10.10.3.4 +biganswer.big. IN A 10.10.3.5 +biganswer.big. IN A 10.10.3.6 +biganswer.big. IN A 10.10.3.7 +biganswer.big. IN A 10.10.3.8 +biganswer.big. IN A 10.10.3.9 +biganswer.big. IN A 10.10.3.10 +biganswer.big. IN A 10.10.3.11 +biganswer.big. IN A 10.10.3.12 +biganswer.big. IN A 10.10.3.13 +biganswer.big. IN A 10.10.3.14 +biganswer.big. IN A 10.10.3.15 +biganswer.big. IN A 10.10.3.16 +biganswer.big. IN A 10.10.3.17 +biganswer.big. IN A 10.10.3.18 +biganswer.big. IN A 10.10.3.19 +biganswer.big. IN A 10.10.3.20 +biganswer.big. IN A 10.10.3.21 +biganswer.big. IN A 10.10.3.22 +biganswer.big. IN A 10.10.3.23 +biganswer.big. IN A 10.10.3.24 +biganswer.big. IN A 10.10.3.25 +biganswer.big. IN A 10.10.3.26 +biganswer.big. IN A 10.10.3.27 +biganswer.big. IN A 10.10.3.28 +biganswer.big. IN A 10.10.3.29 +biganswer.big. IN A 10.10.3.30 +biganswer.big. IN A 10.10.3.31 +biganswer.big. IN A 10.10.3.32 +biganswer.big. IN A 10.10.3.33 +biganswer.big. IN A 10.10.3.34 +biganswer.big. IN A 10.10.3.35 +biganswer.big. IN A 10.10.3.36 +biganswer.big. IN A 10.10.3.37 +biganswer.big. IN A 10.10.3.38 +biganswer.big. IN A 10.10.3.39 +biganswer.big. IN A 10.10.3.40 +biganswer.big. IN A 10.10.3.41 +biganswer.big. IN A 10.10.3.42 +biganswer.big. IN A 10.10.3.43 +biganswer.big. IN A 10.10.3.44 +biganswer.big. IN A 10.10.3.45 +biganswer.big. IN A 10.10.3.46 +biganswer.big. IN A 10.10.3.47 +biganswer.big. IN A 10.10.3.48 +biganswer.big. IN A 10.10.3.49 +biganswer.big. IN A 10.10.3.50 +biganswer.big. IN A 10.10.4.1 +biganswer.big. IN A 10.10.4.2 +biganswer.big. IN A 10.10.4.3 +biganswer.big. IN A 10.10.4.4 +biganswer.big. IN A 10.10.4.5 +biganswer.big. IN A 10.10.4.6 +biganswer.big. IN A 10.10.4.7 +biganswer.big. IN A 10.10.4.8 +biganswer.big. IN A 10.10.4.9 +biganswer.big. IN A 10.10.4.10 +biganswer.big. IN A 10.10.4.11 +biganswer.big. IN A 10.10.4.12 +biganswer.big. IN A 10.10.4.13 +biganswer.big. IN A 10.10.4.14 +biganswer.big. IN A 10.10.4.15 +biganswer.big. IN A 10.10.4.16 +biganswer.big. IN A 10.10.4.17 +biganswer.big. IN A 10.10.4.18 +biganswer.big. IN A 10.10.4.19 +biganswer.big. IN A 10.10.4.20 +biganswer.big. IN A 10.10.4.21 +biganswer.big. IN A 10.10.4.22 +biganswer.big. IN A 10.10.4.23 +biganswer.big. IN A 10.10.4.24 +biganswer.big. IN A 10.10.4.25 +biganswer.big. IN A 10.10.4.26 +biganswer.big. IN A 10.10.4.27 +biganswer.big. IN A 10.10.4.28 +biganswer.big. IN A 10.10.4.29 +biganswer.big. IN A 10.10.4.30 +biganswer.big. IN A 10.10.4.31 +biganswer.big. IN A 10.10.4.32 +biganswer.big. IN A 10.10.4.33 +biganswer.big. IN A 10.10.4.34 +biganswer.big. IN A 10.10.4.35 +biganswer.big. IN A 10.10.4.36 +biganswer.big. IN A 10.10.4.37 +biganswer.big. IN A 10.10.4.38 +biganswer.big. IN A 10.10.4.39 +biganswer.big. IN A 10.10.4.40 +biganswer.big. IN A 10.10.4.41 +biganswer.big. IN A 10.10.4.42 +biganswer.big. IN A 10.10.4.43 +biganswer.big. IN A 10.10.4.44 +biganswer.big. IN A 10.10.4.45 +biganswer.big. IN A 10.10.4.46 +biganswer.big. IN A 10.10.4.47 +biganswer.big. IN A 10.10.4.48 +biganswer.big. IN A 10.10.4.49 +biganswer.big. IN A 10.10.4.50 +biganswer.big. IN A 10.10.5.1 +biganswer.big. IN A 10.10.5.2 +biganswer.big. IN A 10.10.5.3 +biganswer.big. IN A 10.10.5.4 +biganswer.big. IN A 10.10.5.5 +biganswer.big. IN A 10.10.5.6 +biganswer.big. IN A 10.10.5.7 +biganswer.big. IN A 10.10.5.8 +biganswer.big. IN A 10.10.5.9 +biganswer.big. IN A 10.10.5.10 +biganswer.big. IN A 10.10.5.11 +biganswer.big. IN A 10.10.5.12 +biganswer.big. IN A 10.10.5.13 +biganswer.big. IN A 10.10.5.14 +biganswer.big. IN A 10.10.5.15 +biganswer.big. IN A 10.10.5.16 +biganswer.big. IN A 10.10.5.17 +biganswer.big. IN A 10.10.5.18 +biganswer.big. IN A 10.10.5.19 +biganswer.big. IN A 10.10.5.20 +biganswer.big. IN A 10.10.5.21 +biganswer.big. IN A 10.10.5.22 +biganswer.big. IN A 10.10.5.23 +biganswer.big. IN A 10.10.5.24 +biganswer.big. IN A 10.10.5.25 +biganswer.big. IN A 10.10.5.26 +biganswer.big. IN A 10.10.5.27 +biganswer.big. IN A 10.10.5.28 +biganswer.big. IN A 10.10.5.29 +biganswer.big. IN A 10.10.5.30 +biganswer.big. IN A 10.10.5.31 +biganswer.big. IN A 10.10.5.32 +biganswer.big. IN A 10.10.5.33 +biganswer.big. IN A 10.10.5.34 +biganswer.big. IN A 10.10.5.35 +biganswer.big. IN A 10.10.5.36 +biganswer.big. IN A 10.10.5.37 +biganswer.big. IN A 10.10.5.38 +biganswer.big. IN A 10.10.5.39 +biganswer.big. IN A 10.10.5.40 +biganswer.big. IN A 10.10.5.41 +biganswer.big. IN A 10.10.5.42 +biganswer.big. IN A 10.10.5.43 +biganswer.big. IN A 10.10.5.44 +biganswer.big. IN A 10.10.5.45 +biganswer.big. IN A 10.10.5.46 +biganswer.big. IN A 10.10.5.47 +biganswer.big. IN A 10.10.5.48 +biganswer.big. IN A 10.10.5.49 +biganswer.big. IN A 10.10.5.50 +biganswer.big. IN A 10.10.6.1 +biganswer.big. IN A 10.10.6.2 +biganswer.big. IN A 10.10.6.3 +biganswer.big. IN A 10.10.6.4 +biganswer.big. IN A 10.10.6.5 +biganswer.big. IN A 10.10.6.6 +biganswer.big. IN A 10.10.6.7 +biganswer.big. IN A 10.10.6.8 +biganswer.big. IN A 10.10.6.9 +biganswer.big. IN A 10.10.6.10 +biganswer.big. IN A 10.10.6.11 +biganswer.big. IN A 10.10.6.12 +biganswer.big. IN A 10.10.6.13 +biganswer.big. IN A 10.10.6.14 +biganswer.big. IN A 10.10.6.15 +biganswer.big. IN A 10.10.6.16 +biganswer.big. IN A 10.10.6.17 +biganswer.big. IN A 10.10.6.18 +biganswer.big. IN A 10.10.6.19 +biganswer.big. IN A 10.10.6.20 +biganswer.big. IN A 10.10.6.21 +biganswer.big. IN A 10.10.6.22 +biganswer.big. IN A 10.10.6.23 +biganswer.big. IN A 10.10.6.24 +biganswer.big. IN A 10.10.6.25 +biganswer.big. IN A 10.10.6.26 +biganswer.big. IN A 10.10.6.27 +biganswer.big. IN A 10.10.6.28 +biganswer.big. IN A 10.10.6.29 +biganswer.big. IN A 10.10.6.30 +biganswer.big. IN A 10.10.6.31 +biganswer.big. IN A 10.10.6.32 +biganswer.big. IN A 10.10.6.33 +biganswer.big. IN A 10.10.6.34 +biganswer.big. IN A 10.10.6.35 +biganswer.big. IN A 10.10.6.36 +biganswer.big. IN A 10.10.6.37 +biganswer.big. IN A 10.10.6.38 +biganswer.big. IN A 10.10.6.39 +biganswer.big. IN A 10.10.6.40 +biganswer.big. IN A 10.10.6.41 +biganswer.big. IN A 10.10.6.42 +biganswer.big. IN A 10.10.6.43 +biganswer.big. IN A 10.10.6.44 +biganswer.big. IN A 10.10.6.45 +biganswer.big. IN A 10.10.6.46 +biganswer.big. IN A 10.10.6.47 +biganswer.big. IN A 10.10.6.48 +biganswer.big. IN A 10.10.6.49 +biganswer.big. IN A 10.10.6.50 +biganswer.big. IN A 10.10.7.1 +biganswer.big. IN A 10.10.7.2 +biganswer.big. IN A 10.10.7.3 +biganswer.big. IN A 10.10.7.4 +biganswer.big. IN A 10.10.7.5 +biganswer.big. IN A 10.10.7.6 +biganswer.big. IN A 10.10.7.7 +biganswer.big. IN A 10.10.7.8 +biganswer.big. IN A 10.10.7.9 +biganswer.big. IN A 10.10.7.10 +biganswer.big. IN A 10.10.7.11 +biganswer.big. IN A 10.10.7.12 +biganswer.big. IN A 10.10.7.13 +biganswer.big. IN A 10.10.7.14 +biganswer.big. IN A 10.10.7.15 +biganswer.big. IN A 10.10.7.16 +biganswer.big. IN A 10.10.7.17 +biganswer.big. IN A 10.10.7.18 +biganswer.big. IN A 10.10.7.19 +biganswer.big. IN A 10.10.7.20 +biganswer.big. IN A 10.10.7.21 +biganswer.big. IN A 10.10.7.22 +biganswer.big. IN A 10.10.7.23 +biganswer.big. IN A 10.10.7.24 +biganswer.big. IN A 10.10.7.25 +biganswer.big. IN A 10.10.7.26 +biganswer.big. IN A 10.10.7.27 +biganswer.big. IN A 10.10.7.28 +biganswer.big. IN A 10.10.7.29 +biganswer.big. IN A 10.10.7.30 +biganswer.big. IN A 10.10.7.31 +biganswer.big. IN A 10.10.7.32 +biganswer.big. IN A 10.10.7.33 +biganswer.big. IN A 10.10.7.34 +biganswer.big. IN A 10.10.7.35 +biganswer.big. IN A 10.10.7.36 +biganswer.big. IN A 10.10.7.37 +biganswer.big. IN A 10.10.7.38 +biganswer.big. IN A 10.10.7.39 +biganswer.big. IN A 10.10.7.40 +biganswer.big. IN A 10.10.7.41 +biganswer.big. IN A 10.10.7.42 +biganswer.big. IN A 10.10.7.43 +biganswer.big. IN A 10.10.7.44 +biganswer.big. IN A 10.10.7.45 +biganswer.big. IN A 10.10.7.46 +biganswer.big. IN A 10.10.7.47 +biganswer.big. IN A 10.10.7.48 +biganswer.big. IN A 10.10.7.49 +biganswer.big. IN A 10.10.7.50 +biganswer.big. IN A 10.10.8.1 +biganswer.big. IN A 10.10.8.2 +biganswer.big. IN A 10.10.8.3 +biganswer.big. IN A 10.10.8.4 +biganswer.big. IN A 10.10.8.5 +biganswer.big. IN A 10.10.8.6 +biganswer.big. IN A 10.10.8.7 +biganswer.big. IN A 10.10.8.8 +biganswer.big. IN A 10.10.8.9 +biganswer.big. IN A 10.10.8.10 +biganswer.big. IN A 10.10.8.11 +biganswer.big. IN A 10.10.8.12 +biganswer.big. IN A 10.10.8.13 +biganswer.big. IN A 10.10.8.14 +biganswer.big. IN A 10.10.8.15 +biganswer.big. IN A 10.10.8.16 +biganswer.big. IN A 10.10.8.17 +biganswer.big. IN A 10.10.8.18 +biganswer.big. IN A 10.10.8.19 +biganswer.big. IN A 10.10.8.20 +biganswer.big. IN A 10.10.8.21 +biganswer.big. IN A 10.10.8.22 +biganswer.big. IN A 10.10.8.23 +biganswer.big. IN A 10.10.8.24 +biganswer.big. IN A 10.10.8.25 +biganswer.big. IN A 10.10.8.26 +biganswer.big. IN A 10.10.8.27 +biganswer.big. IN A 10.10.8.28 +biganswer.big. IN A 10.10.8.29 +biganswer.big. IN A 10.10.8.30 +biganswer.big. IN A 10.10.8.31 +biganswer.big. IN A 10.10.8.32 +biganswer.big. IN A 10.10.8.33 +biganswer.big. IN A 10.10.8.34 +biganswer.big. IN A 10.10.8.35 +biganswer.big. IN A 10.10.8.36 +biganswer.big. IN A 10.10.8.37 +biganswer.big. IN A 10.10.8.38 +biganswer.big. IN A 10.10.8.39 +biganswer.big. IN A 10.10.8.40 +biganswer.big. IN A 10.10.8.41 +biganswer.big. IN A 10.10.8.42 +biganswer.big. IN A 10.10.8.43 +biganswer.big. IN A 10.10.8.44 +biganswer.big. IN A 10.10.8.45 +biganswer.big. IN A 10.10.8.46 +biganswer.big. IN A 10.10.8.47 +biganswer.big. IN A 10.10.8.48 +biganswer.big. IN A 10.10.8.49 +biganswer.big. IN A 10.10.8.50 +biganswer.big. IN A 10.10.9.1 +biganswer.big. IN A 10.10.9.2 +biganswer.big. IN A 10.10.9.3 +biganswer.big. IN A 10.10.9.4 +biganswer.big. IN A 10.10.9.5 +biganswer.big. IN A 10.10.9.6 +biganswer.big. IN A 10.10.9.7 +biganswer.big. IN A 10.10.9.8 +biganswer.big. IN A 10.10.9.9 +biganswer.big. IN A 10.10.9.10 +biganswer.big. IN A 10.10.9.11 +biganswer.big. IN A 10.10.9.12 +biganswer.big. IN A 10.10.9.13 +biganswer.big. IN A 10.10.9.14 +biganswer.big. IN A 10.10.9.15 +biganswer.big. IN A 10.10.9.16 +biganswer.big. IN A 10.10.9.17 +biganswer.big. IN A 10.10.9.18 +biganswer.big. IN A 10.10.9.19 +biganswer.big. IN A 10.10.9.20 +biganswer.big. IN A 10.10.9.21 +biganswer.big. IN A 10.10.9.22 +biganswer.big. IN A 10.10.9.23 +biganswer.big. IN A 10.10.9.24 +biganswer.big. IN A 10.10.9.25 +biganswer.big. IN A 10.10.9.26 +biganswer.big. IN A 10.10.9.27 +biganswer.big. IN A 10.10.9.28 +biganswer.big. IN A 10.10.9.29 +biganswer.big. IN A 10.10.9.30 +biganswer.big. IN A 10.10.9.31 +biganswer.big. IN A 10.10.9.32 +biganswer.big. IN A 10.10.9.33 +biganswer.big. IN A 10.10.9.34 +biganswer.big. IN A 10.10.9.35 +biganswer.big. IN A 10.10.9.36 +biganswer.big. IN A 10.10.9.37 +biganswer.big. IN A 10.10.9.38 +biganswer.big. IN A 10.10.9.39 +biganswer.big. IN A 10.10.9.40 +biganswer.big. IN A 10.10.9.41 +biganswer.big. IN A 10.10.9.42 +biganswer.big. IN A 10.10.9.43 +biganswer.big. IN A 10.10.9.44 +biganswer.big. IN A 10.10.9.45 +biganswer.big. IN A 10.10.9.46 +biganswer.big. IN A 10.10.9.47 +biganswer.big. IN A 10.10.9.48 +biganswer.big. IN A 10.10.9.49 +biganswer.big. IN A 10.10.9.50 +biganswer.big. IN A 10.10.10.1 +biganswer.big. IN A 10.10.10.2 +biganswer.big. IN A 10.10.10.3 +biganswer.big. IN A 10.10.10.4 +biganswer.big. IN A 10.10.10.5 +biganswer.big. IN A 10.10.10.6 +biganswer.big. IN A 10.10.10.7 +biganswer.big. IN A 10.10.10.8 +biganswer.big. IN A 10.10.10.9 +biganswer.big. IN A 10.10.10.10 +biganswer.big. IN A 10.10.10.11 +biganswer.big. IN A 10.10.10.12 +biganswer.big. IN A 10.10.10.13 +biganswer.big. IN A 10.10.10.14 +biganswer.big. IN A 10.10.10.15 +biganswer.big. IN A 10.10.10.16 +biganswer.big. IN A 10.10.10.17 +biganswer.big. IN A 10.10.10.18 +biganswer.big. IN A 10.10.10.19 +biganswer.big. IN A 10.10.10.20 +biganswer.big. IN A 10.10.10.21 +biganswer.big. IN A 10.10.10.22 +biganswer.big. IN A 10.10.10.23 +biganswer.big. IN A 10.10.10.24 +biganswer.big. IN A 10.10.10.25 +biganswer.big. IN A 10.10.10.26 +biganswer.big. IN A 10.10.10.27 +biganswer.big. IN A 10.10.10.28 +biganswer.big. IN A 10.10.10.29 +biganswer.big. IN A 10.10.10.30 +biganswer.big. IN A 10.10.10.31 +biganswer.big. IN A 10.10.10.32 +biganswer.big. IN A 10.10.10.33 +biganswer.big. IN A 10.10.10.34 +biganswer.big. IN A 10.10.10.35 +biganswer.big. IN A 10.10.10.36 +biganswer.big. IN A 10.10.10.37 +biganswer.big. IN A 10.10.10.38 +biganswer.big. IN A 10.10.10.39 +biganswer.big. IN A 10.10.10.40 +biganswer.big. IN A 10.10.10.41 +biganswer.big. IN A 10.10.10.42 +biganswer.big. IN A 10.10.10.43 +biganswer.big. IN A 10.10.10.44 +biganswer.big. IN A 10.10.10.45 +biganswer.big. IN A 10.10.10.46 +biganswer.big. IN A 10.10.10.47 +biganswer.big. IN A 10.10.10.48 +biganswer.big. IN A 10.10.10.49 +biganswer.big. IN A 10.10.10.50 +biganswer.big. IN A 10.10.11.1 +biganswer.big. IN A 10.10.11.2 +biganswer.big. IN A 10.10.11.3 +biganswer.big. IN A 10.10.11.4 +biganswer.big. IN A 10.10.11.5 +biganswer.big. IN A 10.10.11.6 +biganswer.big. IN A 10.10.11.7 +biganswer.big. IN A 10.10.11.8 +biganswer.big. IN A 10.10.11.9 +biganswer.big. IN A 10.10.11.10 +biganswer.big. IN A 10.10.11.11 +biganswer.big. IN A 10.10.11.12 +biganswer.big. IN A 10.10.11.13 +biganswer.big. IN A 10.10.11.14 +biganswer.big. IN A 10.10.11.15 +biganswer.big. IN A 10.10.11.16 +biganswer.big. IN A 10.10.11.17 +biganswer.big. IN A 10.10.11.18 +biganswer.big. IN A 10.10.11.19 +biganswer.big. IN A 10.10.11.20 +biganswer.big. IN A 10.10.11.21 +biganswer.big. IN A 10.10.11.22 +biganswer.big. IN A 10.10.11.23 +biganswer.big. IN A 10.10.11.24 +biganswer.big. IN A 10.10.11.25 +biganswer.big. IN A 10.10.11.26 +biganswer.big. IN A 10.10.11.27 +biganswer.big. IN A 10.10.11.28 +biganswer.big. IN A 10.10.11.29 +biganswer.big. IN A 10.10.11.30 +biganswer.big. IN A 10.10.11.31 +biganswer.big. IN A 10.10.11.32 +biganswer.big. IN A 10.10.11.33 +biganswer.big. IN A 10.10.11.34 +biganswer.big. IN A 10.10.11.35 +biganswer.big. IN A 10.10.11.36 +biganswer.big. IN A 10.10.11.37 +biganswer.big. IN A 10.10.11.38 +biganswer.big. IN A 10.10.11.39 +biganswer.big. IN A 10.10.11.40 +biganswer.big. IN A 10.10.11.41 +biganswer.big. IN A 10.10.11.42 +biganswer.big. IN A 10.10.11.43 +biganswer.big. IN A 10.10.11.44 +biganswer.big. IN A 10.10.11.45 +biganswer.big. IN A 10.10.11.46 +biganswer.big. IN A 10.10.11.47 +biganswer.big. IN A 10.10.11.48 +biganswer.big. IN A 10.10.11.49 +biganswer.big. IN A 10.10.11.50 +biganswer.big. IN A 10.10.12.1 +biganswer.big. IN A 10.10.12.2 +biganswer.big. IN A 10.10.12.3 +biganswer.big. IN A 10.10.12.4 +biganswer.big. IN A 10.10.12.5 +biganswer.big. IN A 10.10.12.6 +biganswer.big. IN A 10.10.12.7 +biganswer.big. IN A 10.10.12.8 +biganswer.big. IN A 10.10.12.9 +biganswer.big. IN A 10.10.12.10 +biganswer.big. IN A 10.10.12.11 +biganswer.big. IN A 10.10.12.12 +biganswer.big. IN A 10.10.12.13 +biganswer.big. IN A 10.10.12.14 +biganswer.big. IN A 10.10.12.15 +biganswer.big. IN A 10.10.12.16 +biganswer.big. IN A 10.10.12.17 +biganswer.big. IN A 10.10.12.18 +biganswer.big. IN A 10.10.12.19 +biganswer.big. IN A 10.10.12.20 +biganswer.big. IN A 10.10.12.21 +biganswer.big. IN A 10.10.12.22 +biganswer.big. IN A 10.10.12.23 +biganswer.big. IN A 10.10.12.24 +biganswer.big. IN A 10.10.12.25 +biganswer.big. IN A 10.10.12.26 +biganswer.big. IN A 10.10.12.27 +biganswer.big. IN A 10.10.12.28 +biganswer.big. IN A 10.10.12.29 +biganswer.big. IN A 10.10.12.30 +biganswer.big. IN A 10.10.12.31 +biganswer.big. IN A 10.10.12.32 +biganswer.big. IN A 10.10.12.33 +biganswer.big. IN A 10.10.12.34 +biganswer.big. IN A 10.10.12.35 +biganswer.big. IN A 10.10.12.36 +biganswer.big. IN A 10.10.12.37 +biganswer.big. IN A 10.10.12.38 +biganswer.big. IN A 10.10.12.39 +biganswer.big. IN A 10.10.12.40 +biganswer.big. IN A 10.10.12.41 +biganswer.big. IN A 10.10.12.42 +biganswer.big. IN A 10.10.12.43 +biganswer.big. IN A 10.10.12.44 +biganswer.big. IN A 10.10.12.45 +biganswer.big. IN A 10.10.12.46 +biganswer.big. IN A 10.10.12.47 +biganswer.big. IN A 10.10.12.48 +biganswer.big. IN A 10.10.12.49 +biganswer.big. IN A 10.10.12.50 +biganswer.big. IN A 10.10.13.1 +biganswer.big. IN A 10.10.13.2 +biganswer.big. IN A 10.10.13.3 +biganswer.big. IN A 10.10.13.4 +biganswer.big. IN A 10.10.13.5 +biganswer.big. IN A 10.10.13.6 +biganswer.big. IN A 10.10.13.7 +biganswer.big. IN A 10.10.13.8 +biganswer.big. IN A 10.10.13.9 +biganswer.big. IN A 10.10.13.10 +biganswer.big. IN A 10.10.13.11 +biganswer.big. IN A 10.10.13.12 +biganswer.big. IN A 10.10.13.13 +biganswer.big. IN A 10.10.13.14 +biganswer.big. IN A 10.10.13.15 +biganswer.big. IN A 10.10.13.16 +biganswer.big. IN A 10.10.13.17 +biganswer.big. IN A 10.10.13.18 +biganswer.big. IN A 10.10.13.19 +biganswer.big. IN A 10.10.13.20 +biganswer.big. IN A 10.10.13.21 +biganswer.big. IN A 10.10.13.22 +biganswer.big. IN A 10.10.13.23 +biganswer.big. IN A 10.10.13.24 +biganswer.big. IN A 10.10.13.25 +biganswer.big. IN A 10.10.13.26 +biganswer.big. IN A 10.10.13.27 +biganswer.big. IN A 10.10.13.28 +biganswer.big. IN A 10.10.13.29 +biganswer.big. IN A 10.10.13.30 +biganswer.big. IN A 10.10.13.31 +biganswer.big. IN A 10.10.13.32 +biganswer.big. IN A 10.10.13.33 +biganswer.big. IN A 10.10.13.34 +biganswer.big. IN A 10.10.13.35 +biganswer.big. IN A 10.10.13.36 +biganswer.big. IN A 10.10.13.37 +biganswer.big. IN A 10.10.13.38 +biganswer.big. IN A 10.10.13.39 +biganswer.big. IN A 10.10.13.40 +biganswer.big. IN A 10.10.13.41 +biganswer.big. IN A 10.10.13.42 +biganswer.big. IN A 10.10.13.43 +biganswer.big. IN A 10.10.13.44 +biganswer.big. IN A 10.10.13.45 +biganswer.big. IN A 10.10.13.46 +biganswer.big. IN A 10.10.13.47 +biganswer.big. IN A 10.10.13.48 +biganswer.big. IN A 10.10.13.49 +biganswer.big. IN A 10.10.13.50 +biganswer.big. IN A 10.10.14.1 +biganswer.big. IN A 10.10.14.2 +biganswer.big. IN A 10.10.14.3 +biganswer.big. IN A 10.10.14.4 +biganswer.big. IN A 10.10.14.5 +biganswer.big. IN A 10.10.14.6 +biganswer.big. IN A 10.10.14.7 +biganswer.big. IN A 10.10.14.8 +biganswer.big. IN A 10.10.14.9 +biganswer.big. IN A 10.10.14.10 +biganswer.big. IN A 10.10.14.11 +biganswer.big. IN A 10.10.14.12 +biganswer.big. IN A 10.10.14.13 +biganswer.big. IN A 10.10.14.14 +biganswer.big. IN A 10.10.14.15 +biganswer.big. IN A 10.10.14.16 +biganswer.big. IN A 10.10.14.17 +biganswer.big. IN A 10.10.14.18 +biganswer.big. IN A 10.10.14.19 +biganswer.big. IN A 10.10.14.20 +biganswer.big. IN A 10.10.14.21 +biganswer.big. IN A 10.10.14.22 +biganswer.big. IN A 10.10.14.23 +biganswer.big. IN A 10.10.14.24 +biganswer.big. IN A 10.10.14.25 +biganswer.big. IN A 10.10.14.26 +biganswer.big. IN A 10.10.14.27 +biganswer.big. IN A 10.10.14.28 +biganswer.big. IN A 10.10.14.29 +biganswer.big. IN A 10.10.14.30 +biganswer.big. IN A 10.10.14.31 +biganswer.big. IN A 10.10.14.32 +biganswer.big. IN A 10.10.14.33 +biganswer.big. IN A 10.10.14.34 +biganswer.big. IN A 10.10.14.35 +biganswer.big. IN A 10.10.14.36 +biganswer.big. IN A 10.10.14.37 +biganswer.big. IN A 10.10.14.38 +biganswer.big. IN A 10.10.14.39 +biganswer.big. IN A 10.10.14.40 +biganswer.big. IN A 10.10.14.41 +biganswer.big. IN A 10.10.14.42 +biganswer.big. IN A 10.10.14.43 +biganswer.big. IN A 10.10.14.44 +biganswer.big. IN A 10.10.14.45 +biganswer.big. IN A 10.10.14.46 +biganswer.big. IN A 10.10.14.47 +biganswer.big. IN A 10.10.14.48 +biganswer.big. IN A 10.10.14.49 +biganswer.big. IN A 10.10.14.50 +biganswer.big. IN A 10.10.15.1 +biganswer.big. IN A 10.10.15.2 +biganswer.big. IN A 10.10.15.3 +biganswer.big. IN A 10.10.15.4 +biganswer.big. IN A 10.10.15.5 +biganswer.big. IN A 10.10.15.6 +biganswer.big. IN A 10.10.15.7 +biganswer.big. IN A 10.10.15.8 +biganswer.big. IN A 10.10.15.9 +biganswer.big. IN A 10.10.15.10 +biganswer.big. IN A 10.10.15.11 +biganswer.big. IN A 10.10.15.12 +biganswer.big. IN A 10.10.15.13 +biganswer.big. IN A 10.10.15.14 +biganswer.big. IN A 10.10.15.15 +biganswer.big. IN A 10.10.15.16 +biganswer.big. IN A 10.10.15.17 +biganswer.big. IN A 10.10.15.18 +biganswer.big. IN A 10.10.15.19 +biganswer.big. IN A 10.10.15.20 +biganswer.big. IN A 10.10.15.21 +biganswer.big. IN A 10.10.15.22 +biganswer.big. IN A 10.10.15.23 +biganswer.big. IN A 10.10.15.24 +biganswer.big. IN A 10.10.15.25 +biganswer.big. IN A 10.10.15.26 +biganswer.big. IN A 10.10.15.27 +biganswer.big. IN A 10.10.15.28 +biganswer.big. IN A 10.10.15.29 +biganswer.big. IN A 10.10.15.30 +biganswer.big. IN A 10.10.15.31 +biganswer.big. IN A 10.10.15.32 +biganswer.big. IN A 10.10.15.33 +biganswer.big. IN A 10.10.15.34 +biganswer.big. IN A 10.10.15.35 +biganswer.big. IN A 10.10.15.36 +biganswer.big. IN A 10.10.15.37 +biganswer.big. IN A 10.10.15.38 +biganswer.big. IN A 10.10.15.39 +biganswer.big. IN A 10.10.15.40 +biganswer.big. IN A 10.10.15.41 +biganswer.big. IN A 10.10.15.42 +biganswer.big. IN A 10.10.15.43 +biganswer.big. IN A 10.10.15.44 +biganswer.big. IN A 10.10.15.45 +biganswer.big. IN A 10.10.15.46 +biganswer.big. IN A 10.10.15.47 +biganswer.big. IN A 10.10.15.48 +biganswer.big. IN A 10.10.15.49 +biganswer.big. IN A 10.10.15.50 +biganswer.big. IN A 10.10.16.1 +biganswer.big. IN A 10.10.16.2 +biganswer.big. IN A 10.10.16.3 +biganswer.big. IN A 10.10.16.4 +biganswer.big. IN A 10.10.16.5 +biganswer.big. IN A 10.10.16.6 +biganswer.big. IN A 10.10.16.7 +biganswer.big. IN A 10.10.16.8 +biganswer.big. IN A 10.10.16.9 +biganswer.big. IN A 10.10.16.10 +biganswer.big. IN A 10.10.16.11 +biganswer.big. IN A 10.10.16.12 +biganswer.big. IN A 10.10.16.13 +biganswer.big. IN A 10.10.16.14 +biganswer.big. IN A 10.10.16.15 +biganswer.big. IN A 10.10.16.16 +biganswer.big. IN A 10.10.16.17 +biganswer.big. IN A 10.10.16.18 +biganswer.big. IN A 10.10.16.19 +biganswer.big. IN A 10.10.16.20 +biganswer.big. IN A 10.10.16.21 +biganswer.big. IN A 10.10.16.22 +biganswer.big. IN A 10.10.16.23 +biganswer.big. IN A 10.10.16.24 +biganswer.big. IN A 10.10.16.25 +biganswer.big. IN A 10.10.16.26 +biganswer.big. IN A 10.10.16.27 +biganswer.big. IN A 10.10.16.28 +biganswer.big. IN A 10.10.16.29 +biganswer.big. IN A 10.10.16.30 +biganswer.big. IN A 10.10.16.31 +biganswer.big. IN A 10.10.16.32 +biganswer.big. IN A 10.10.16.33 +biganswer.big. IN A 10.10.16.34 +biganswer.big. IN A 10.10.16.35 +biganswer.big. IN A 10.10.16.36 +biganswer.big. IN A 10.10.16.37 +biganswer.big. IN A 10.10.16.38 +biganswer.big. IN A 10.10.16.39 +biganswer.big. IN A 10.10.16.40 +biganswer.big. IN A 10.10.16.41 +biganswer.big. IN A 10.10.16.42 +biganswer.big. IN A 10.10.16.43 +biganswer.big. IN A 10.10.16.44 +biganswer.big. IN A 10.10.16.45 +biganswer.big. IN A 10.10.16.46 +biganswer.big. IN A 10.10.16.47 +biganswer.big. IN A 10.10.16.48 +biganswer.big. IN A 10.10.16.49 +biganswer.big. IN A 10.10.16.50 +biganswer.big. IN A 10.10.17.1 +biganswer.big. IN A 10.10.17.2 +biganswer.big. IN A 10.10.17.3 +biganswer.big. IN A 10.10.17.4 +biganswer.big. IN A 10.10.17.5 +biganswer.big. IN A 10.10.17.6 +biganswer.big. IN A 10.10.17.7 +biganswer.big. IN A 10.10.17.8 +biganswer.big. IN A 10.10.17.9 +biganswer.big. IN A 10.10.17.10 +biganswer.big. IN A 10.10.17.11 +biganswer.big. IN A 10.10.17.12 +biganswer.big. IN A 10.10.17.13 +biganswer.big. IN A 10.10.17.14 +biganswer.big. IN A 10.10.17.15 +biganswer.big. IN A 10.10.17.16 +biganswer.big. IN A 10.10.17.17 +biganswer.big. IN A 10.10.17.18 +biganswer.big. IN A 10.10.17.19 +biganswer.big. IN A 10.10.17.20 +biganswer.big. IN A 10.10.17.21 +biganswer.big. IN A 10.10.17.22 +biganswer.big. IN A 10.10.17.23 +biganswer.big. IN A 10.10.17.24 +biganswer.big. IN A 10.10.17.25 +biganswer.big. IN A 10.10.17.26 +biganswer.big. IN A 10.10.17.27 +biganswer.big. IN A 10.10.17.28 +biganswer.big. IN A 10.10.17.29 +biganswer.big. IN A 10.10.17.30 +biganswer.big. IN A 10.10.17.31 +biganswer.big. IN A 10.10.17.32 +biganswer.big. IN A 10.10.17.33 +biganswer.big. IN A 10.10.17.34 +biganswer.big. IN A 10.10.17.35 +biganswer.big. IN A 10.10.17.36 +biganswer.big. IN A 10.10.17.37 +biganswer.big. IN A 10.10.17.38 +biganswer.big. IN A 10.10.17.39 +biganswer.big. IN A 10.10.17.40 +biganswer.big. IN A 10.10.17.41 +biganswer.big. IN A 10.10.17.42 +biganswer.big. IN A 10.10.17.43 +biganswer.big. IN A 10.10.17.44 +biganswer.big. IN A 10.10.17.45 +biganswer.big. IN A 10.10.17.46 +biganswer.big. IN A 10.10.17.47 +biganswer.big. IN A 10.10.17.48 +biganswer.big. IN A 10.10.17.49 +biganswer.big. IN A 10.10.17.50 +biganswer.big. IN A 10.10.18.1 +biganswer.big. IN A 10.10.18.2 +biganswer.big. IN A 10.10.18.3 +biganswer.big. IN A 10.10.18.4 +biganswer.big. IN A 10.10.18.5 +biganswer.big. IN A 10.10.18.6 +biganswer.big. IN A 10.10.18.7 +biganswer.big. IN A 10.10.18.8 +biganswer.big. IN A 10.10.18.9 +biganswer.big. IN A 10.10.18.10 +biganswer.big. IN A 10.10.18.11 +biganswer.big. IN A 10.10.18.12 +biganswer.big. IN A 10.10.18.13 +biganswer.big. IN A 10.10.18.14 +biganswer.big. IN A 10.10.18.15 +biganswer.big. IN A 10.10.18.16 +biganswer.big. IN A 10.10.18.17 +biganswer.big. IN A 10.10.18.18 +biganswer.big. IN A 10.10.18.19 +biganswer.big. IN A 10.10.18.20 +biganswer.big. IN A 10.10.18.21 +biganswer.big. IN A 10.10.18.22 +biganswer.big. IN A 10.10.18.23 +biganswer.big. IN A 10.10.18.24 +biganswer.big. IN A 10.10.18.25 +biganswer.big. IN A 10.10.18.26 +biganswer.big. IN A 10.10.18.27 +biganswer.big. IN A 10.10.18.28 +biganswer.big. IN A 10.10.18.29 +biganswer.big. IN A 10.10.18.30 +biganswer.big. IN A 10.10.18.31 +biganswer.big. IN A 10.10.18.32 +biganswer.big. IN A 10.10.18.33 +biganswer.big. IN A 10.10.18.34 +biganswer.big. IN A 10.10.18.35 +biganswer.big. IN A 10.10.18.36 +biganswer.big. IN A 10.10.18.37 +biganswer.big. IN A 10.10.18.38 +biganswer.big. IN A 10.10.18.39 +biganswer.big. IN A 10.10.18.40 +biganswer.big. IN A 10.10.18.41 +biganswer.big. IN A 10.10.18.42 +biganswer.big. IN A 10.10.18.43 +biganswer.big. IN A 10.10.18.44 +biganswer.big. IN A 10.10.18.45 +biganswer.big. IN A 10.10.18.46 +biganswer.big. IN A 10.10.18.47 +biganswer.big. IN A 10.10.18.48 +biganswer.big. IN A 10.10.18.49 +biganswer.big. IN A 10.10.18.50 +biganswer.big. IN A 10.10.19.1 +biganswer.big. IN A 10.10.19.2 +biganswer.big. IN A 10.10.19.3 +biganswer.big. IN A 10.10.19.4 +biganswer.big. IN A 10.10.19.5 +biganswer.big. IN A 10.10.19.6 +biganswer.big. IN A 10.10.19.7 +biganswer.big. IN A 10.10.19.8 +biganswer.big. IN A 10.10.19.9 +biganswer.big. IN A 10.10.19.10 +biganswer.big. IN A 10.10.19.11 +biganswer.big. IN A 10.10.19.12 +biganswer.big. IN A 10.10.19.13 +biganswer.big. IN A 10.10.19.14 +biganswer.big. IN A 10.10.19.15 +biganswer.big. IN A 10.10.19.16 +biganswer.big. IN A 10.10.19.17 +biganswer.big. IN A 10.10.19.18 +biganswer.big. IN A 10.10.19.19 +biganswer.big. IN A 10.10.19.20 +biganswer.big. IN A 10.10.19.21 +biganswer.big. IN A 10.10.19.22 +biganswer.big. IN A 10.10.19.23 +biganswer.big. IN A 10.10.19.24 +biganswer.big. IN A 10.10.19.25 +biganswer.big. IN A 10.10.19.26 +biganswer.big. IN A 10.10.19.27 +biganswer.big. IN A 10.10.19.28 +biganswer.big. IN A 10.10.19.29 +biganswer.big. IN A 10.10.19.30 +biganswer.big. IN A 10.10.19.31 +biganswer.big. IN A 10.10.19.32 +biganswer.big. IN A 10.10.19.33 +biganswer.big. IN A 10.10.19.34 +biganswer.big. IN A 10.10.19.35 +biganswer.big. IN A 10.10.19.36 +biganswer.big. IN A 10.10.19.37 +biganswer.big. IN A 10.10.19.38 +biganswer.big. IN A 10.10.19.39 +biganswer.big. IN A 10.10.19.40 +biganswer.big. IN A 10.10.19.41 +biganswer.big. IN A 10.10.19.42 +biganswer.big. IN A 10.10.19.43 +biganswer.big. IN A 10.10.19.44 +biganswer.big. IN A 10.10.19.45 +biganswer.big. IN A 10.10.19.46 +biganswer.big. IN A 10.10.19.47 +biganswer.big. IN A 10.10.19.48 +biganswer.big. IN A 10.10.19.49 +biganswer.big. IN A 10.10.19.50 +biganswer.big. IN A 10.10.20.1 +biganswer.big. IN A 10.10.20.2 +biganswer.big. IN A 10.10.20.3 +biganswer.big. IN A 10.10.20.4 +biganswer.big. IN A 10.10.20.5 +biganswer.big. IN A 10.10.20.6 +biganswer.big. IN A 10.10.20.7 +biganswer.big. IN A 10.10.20.8 +biganswer.big. IN A 10.10.20.9 +biganswer.big. IN A 10.10.20.10 +biganswer.big. IN A 10.10.20.11 +biganswer.big. IN A 10.10.20.12 +biganswer.big. IN A 10.10.20.13 +biganswer.big. IN A 10.10.20.14 +biganswer.big. IN A 10.10.20.15 +biganswer.big. IN A 10.10.20.16 +biganswer.big. IN A 10.10.20.17 +biganswer.big. IN A 10.10.20.18 +biganswer.big. IN A 10.10.20.19 +biganswer.big. IN A 10.10.20.20 +biganswer.big. IN A 10.10.20.21 +biganswer.big. IN A 10.10.20.22 +biganswer.big. IN A 10.10.20.23 +biganswer.big. IN A 10.10.20.24 +biganswer.big. IN A 10.10.20.25 +biganswer.big. IN A 10.10.20.26 +biganswer.big. IN A 10.10.20.27 +biganswer.big. IN A 10.10.20.28 +biganswer.big. IN A 10.10.20.29 +biganswer.big. IN A 10.10.20.30 +biganswer.big. IN A 10.10.20.31 +biganswer.big. IN A 10.10.20.32 +biganswer.big. IN A 10.10.20.33 +biganswer.big. IN A 10.10.20.34 +biganswer.big. IN A 10.10.20.35 +biganswer.big. IN A 10.10.20.36 +biganswer.big. IN A 10.10.20.37 +biganswer.big. IN A 10.10.20.38 +biganswer.big. IN A 10.10.20.39 +biganswer.big. IN A 10.10.20.40 +biganswer.big. IN A 10.10.20.41 +biganswer.big. IN A 10.10.20.42 +biganswer.big. IN A 10.10.20.43 +biganswer.big. IN A 10.10.20.44 +biganswer.big. IN A 10.10.20.45 +biganswer.big. IN A 10.10.20.46 +biganswer.big. IN A 10.10.20.47 +biganswer.big. IN A 10.10.20.48 +biganswer.big. IN A 10.10.20.49 +biganswer.big. IN A 10.10.20.50 +biganswer.big. IN A 10.10.21.1 +biganswer.big. IN A 10.10.21.2 +biganswer.big. IN A 10.10.21.3 +biganswer.big. IN A 10.10.21.4 +biganswer.big. IN A 10.10.21.5 +biganswer.big. IN A 10.10.21.6 +biganswer.big. IN A 10.10.21.7 +biganswer.big. IN A 10.10.21.8 +biganswer.big. IN A 10.10.21.9 +biganswer.big. IN A 10.10.21.10 +biganswer.big. IN A 10.10.21.11 +biganswer.big. IN A 10.10.21.12 +biganswer.big. IN A 10.10.21.13 +biganswer.big. IN A 10.10.21.14 +biganswer.big. IN A 10.10.21.15 +biganswer.big. IN A 10.10.21.16 +biganswer.big. IN A 10.10.21.17 +biganswer.big. IN A 10.10.21.18 +biganswer.big. IN A 10.10.21.19 +biganswer.big. IN A 10.10.21.20 +biganswer.big. IN A 10.10.21.21 +biganswer.big. IN A 10.10.21.22 +biganswer.big. IN A 10.10.21.23 +biganswer.big. IN A 10.10.21.24 +biganswer.big. IN A 10.10.21.25 +biganswer.big. IN A 10.10.21.26 +biganswer.big. IN A 10.10.21.27 +biganswer.big. IN A 10.10.21.28 +biganswer.big. IN A 10.10.21.29 +biganswer.big. IN A 10.10.21.30 +biganswer.big. IN A 10.10.21.31 +biganswer.big. IN A 10.10.21.32 +biganswer.big. IN A 10.10.21.33 +biganswer.big. IN A 10.10.21.34 +biganswer.big. IN A 10.10.21.35 +biganswer.big. IN A 10.10.21.36 +biganswer.big. IN A 10.10.21.37 +biganswer.big. IN A 10.10.21.38 +biganswer.big. IN A 10.10.21.39 +biganswer.big. IN A 10.10.21.40 +biganswer.big. IN A 10.10.21.41 +biganswer.big. IN A 10.10.21.42 +biganswer.big. IN A 10.10.21.43 +biganswer.big. IN A 10.10.21.44 +biganswer.big. IN A 10.10.21.45 +biganswer.big. IN A 10.10.21.46 +biganswer.big. IN A 10.10.21.47 +biganswer.big. IN A 10.10.21.48 +biganswer.big. IN A 10.10.21.49 +biganswer.big. IN A 10.10.21.50 +biganswer.big. IN A 10.10.22.1 +biganswer.big. IN A 10.10.22.2 +biganswer.big. IN A 10.10.22.3 +biganswer.big. IN A 10.10.22.4 +biganswer.big. IN A 10.10.22.5 +biganswer.big. IN A 10.10.22.6 +biganswer.big. IN A 10.10.22.7 +biganswer.big. IN A 10.10.22.8 +biganswer.big. IN A 10.10.22.9 +biganswer.big. IN A 10.10.22.10 +biganswer.big. IN A 10.10.22.11 +biganswer.big. IN A 10.10.22.12 +biganswer.big. IN A 10.10.22.13 +biganswer.big. IN A 10.10.22.14 +biganswer.big. IN A 10.10.22.15 +biganswer.big. IN A 10.10.22.16 +biganswer.big. IN A 10.10.22.17 +biganswer.big. IN A 10.10.22.18 +biganswer.big. IN A 10.10.22.19 +biganswer.big. IN A 10.10.22.20 +biganswer.big. IN A 10.10.22.21 +biganswer.big. IN A 10.10.22.22 +biganswer.big. IN A 10.10.22.23 +biganswer.big. IN A 10.10.22.24 +biganswer.big. IN A 10.10.22.25 +biganswer.big. IN A 10.10.22.26 +biganswer.big. IN A 10.10.22.27 +biganswer.big. IN A 10.10.22.28 +biganswer.big. IN A 10.10.22.29 +biganswer.big. IN A 10.10.22.30 +biganswer.big. IN A 10.10.22.31 +biganswer.big. IN A 10.10.22.32 +biganswer.big. IN A 10.10.22.33 +biganswer.big. IN A 10.10.22.34 +biganswer.big. IN A 10.10.22.35 +biganswer.big. IN A 10.10.22.36 +biganswer.big. IN A 10.10.22.37 +biganswer.big. IN A 10.10.22.38 +biganswer.big. IN A 10.10.22.39 +biganswer.big. IN A 10.10.22.40 +biganswer.big. IN A 10.10.22.41 +biganswer.big. IN A 10.10.22.42 +biganswer.big. IN A 10.10.22.43 +biganswer.big. IN A 10.10.22.44 +biganswer.big. IN A 10.10.22.45 +biganswer.big. IN A 10.10.22.46 +biganswer.big. IN A 10.10.22.47 +biganswer.big. IN A 10.10.22.48 +biganswer.big. IN A 10.10.22.49 +biganswer.big. IN A 10.10.22.50 +biganswer.big. IN A 10.10.23.1 +biganswer.big. IN A 10.10.23.2 +biganswer.big. IN A 10.10.23.3 +biganswer.big. IN A 10.10.23.4 +biganswer.big. IN A 10.10.23.5 +biganswer.big. IN A 10.10.23.6 +biganswer.big. IN A 10.10.23.7 +biganswer.big. IN A 10.10.23.8 +biganswer.big. IN A 10.10.23.9 +biganswer.big. IN A 10.10.23.10 +biganswer.big. IN A 10.10.23.11 +biganswer.big. IN A 10.10.23.12 +biganswer.big. IN A 10.10.23.13 +biganswer.big. IN A 10.10.23.14 +biganswer.big. IN A 10.10.23.15 +biganswer.big. IN A 10.10.23.16 +biganswer.big. IN A 10.10.23.17 +biganswer.big. IN A 10.10.23.18 +biganswer.big. IN A 10.10.23.19 +biganswer.big. IN A 10.10.23.20 +biganswer.big. IN A 10.10.23.21 +biganswer.big. IN A 10.10.23.22 +biganswer.big. IN A 10.10.23.23 +biganswer.big. IN A 10.10.23.24 +biganswer.big. IN A 10.10.23.25 +biganswer.big. IN A 10.10.23.26 +biganswer.big. IN A 10.10.23.27 +biganswer.big. IN A 10.10.23.28 +biganswer.big. IN A 10.10.23.29 +biganswer.big. IN A 10.10.23.30 +biganswer.big. IN A 10.10.23.31 +biganswer.big. IN A 10.10.23.32 +biganswer.big. IN A 10.10.23.33 +biganswer.big. IN A 10.10.23.34 +biganswer.big. IN A 10.10.23.35 +biganswer.big. IN A 10.10.23.36 +biganswer.big. IN A 10.10.23.37 +biganswer.big. IN A 10.10.23.38 +biganswer.big. IN A 10.10.23.39 +biganswer.big. IN A 10.10.23.40 +biganswer.big. IN A 10.10.23.41 +biganswer.big. IN A 10.10.23.42 +biganswer.big. IN A 10.10.23.43 +biganswer.big. IN A 10.10.23.44 +biganswer.big. IN A 10.10.23.45 +biganswer.big. IN A 10.10.23.46 +biganswer.big. IN A 10.10.23.47 +biganswer.big. IN A 10.10.23.48 +biganswer.big. IN A 10.10.23.49 +biganswer.big. IN A 10.10.23.50 +biganswer.big. IN A 10.10.24.1 +biganswer.big. IN A 10.10.24.2 +biganswer.big. IN A 10.10.24.3 +biganswer.big. IN A 10.10.24.4 +biganswer.big. IN A 10.10.24.5 +biganswer.big. IN A 10.10.24.6 +biganswer.big. IN A 10.10.24.7 +biganswer.big. IN A 10.10.24.8 +biganswer.big. IN A 10.10.24.9 +biganswer.big. IN A 10.10.24.10 +biganswer.big. IN A 10.10.24.11 +biganswer.big. IN A 10.10.24.12 +biganswer.big. IN A 10.10.24.13 +biganswer.big. IN A 10.10.24.14 +biganswer.big. IN A 10.10.24.15 +biganswer.big. IN A 10.10.24.16 +biganswer.big. IN A 10.10.24.17 +biganswer.big. IN A 10.10.24.18 +biganswer.big. IN A 10.10.24.19 +biganswer.big. IN A 10.10.24.20 +biganswer.big. IN A 10.10.24.21 +biganswer.big. IN A 10.10.24.22 +biganswer.big. IN A 10.10.24.23 +biganswer.big. IN A 10.10.24.24 +biganswer.big. IN A 10.10.24.25 +biganswer.big. IN A 10.10.24.26 +biganswer.big. IN A 10.10.24.27 +biganswer.big. IN A 10.10.24.28 +biganswer.big. IN A 10.10.24.29 +biganswer.big. IN A 10.10.24.30 +biganswer.big. IN A 10.10.24.31 +biganswer.big. IN A 10.10.24.32 +biganswer.big. IN A 10.10.24.33 +biganswer.big. IN A 10.10.24.34 +biganswer.big. IN A 10.10.24.35 +biganswer.big. IN A 10.10.24.36 +biganswer.big. IN A 10.10.24.37 +biganswer.big. IN A 10.10.24.38 +biganswer.big. IN A 10.10.24.39 +biganswer.big. IN A 10.10.24.40 +biganswer.big. IN A 10.10.24.41 +biganswer.big. IN A 10.10.24.42 +biganswer.big. IN A 10.10.24.43 +biganswer.big. IN A 10.10.24.44 +biganswer.big. IN A 10.10.24.45 +biganswer.big. IN A 10.10.24.46 +biganswer.big. IN A 10.10.24.47 +biganswer.big. IN A 10.10.24.48 +biganswer.big. IN A 10.10.24.49 +biganswer.big. IN A 10.10.24.50 +biganswer.big. IN A 10.10.25.1 +biganswer.big. IN A 10.10.25.2 +biganswer.big. IN A 10.10.25.3 +biganswer.big. IN A 10.10.25.4 +biganswer.big. IN A 10.10.25.5 +biganswer.big. IN A 10.10.25.6 +biganswer.big. IN A 10.10.25.7 +biganswer.big. IN A 10.10.25.8 +biganswer.big. IN A 10.10.25.9 +biganswer.big. IN A 10.10.25.10 +biganswer.big. IN A 10.10.25.11 +biganswer.big. IN A 10.10.25.12 +biganswer.big. IN A 10.10.25.13 +biganswer.big. IN A 10.10.25.14 +biganswer.big. IN A 10.10.25.15 +biganswer.big. IN A 10.10.25.16 +biganswer.big. IN A 10.10.25.17 +biganswer.big. IN A 10.10.25.18 +biganswer.big. IN A 10.10.25.19 +biganswer.big. IN A 10.10.25.20 +biganswer.big. IN A 10.10.25.21 +biganswer.big. IN A 10.10.25.22 +biganswer.big. IN A 10.10.25.23 +biganswer.big. IN A 10.10.25.24 +biganswer.big. IN A 10.10.25.25 +biganswer.big. IN A 10.10.25.26 +biganswer.big. IN A 10.10.25.27 +biganswer.big. IN A 10.10.25.28 +biganswer.big. IN A 10.10.25.29 +biganswer.big. IN A 10.10.25.30 +biganswer.big. IN A 10.10.25.31 +biganswer.big. IN A 10.10.25.32 +biganswer.big. IN A 10.10.25.33 +biganswer.big. IN A 10.10.25.34 +biganswer.big. IN A 10.10.25.35 +biganswer.big. IN A 10.10.25.36 +biganswer.big. IN A 10.10.25.37 +biganswer.big. IN A 10.10.25.38 +biganswer.big. IN A 10.10.25.39 +biganswer.big. IN A 10.10.25.40 +biganswer.big. IN A 10.10.25.41 +biganswer.big. IN A 10.10.25.42 +biganswer.big. IN A 10.10.25.43 +biganswer.big. IN A 10.10.25.44 +biganswer.big. IN A 10.10.25.45 +biganswer.big. IN A 10.10.25.46 +biganswer.big. IN A 10.10.25.47 +biganswer.big. IN A 10.10.25.48 +biganswer.big. IN A 10.10.25.49 +biganswer.big. IN A 10.10.25.50 +biganswer.big. IN A 10.10.26.1 +biganswer.big. IN A 10.10.26.2 +biganswer.big. IN A 10.10.26.3 +biganswer.big. IN A 10.10.26.4 +biganswer.big. IN A 10.10.26.5 +biganswer.big. IN A 10.10.26.6 +biganswer.big. IN A 10.10.26.7 +biganswer.big. IN A 10.10.26.8 +biganswer.big. IN A 10.10.26.9 +biganswer.big. IN A 10.10.26.10 +biganswer.big. IN A 10.10.26.11 +biganswer.big. IN A 10.10.26.12 +biganswer.big. IN A 10.10.26.13 +biganswer.big. IN A 10.10.26.14 +biganswer.big. IN A 10.10.26.15 +biganswer.big. IN A 10.10.26.16 +biganswer.big. IN A 10.10.26.17 +biganswer.big. IN A 10.10.26.18 +biganswer.big. IN A 10.10.26.19 +biganswer.big. IN A 10.10.26.20 +biganswer.big. IN A 10.10.26.21 +biganswer.big. IN A 10.10.26.22 +biganswer.big. IN A 10.10.26.23 +biganswer.big. IN A 10.10.26.24 +biganswer.big. IN A 10.10.26.25 +biganswer.big. IN A 10.10.26.26 +biganswer.big. IN A 10.10.26.27 +biganswer.big. IN A 10.10.26.28 +biganswer.big. IN A 10.10.26.29 +biganswer.big. IN A 10.10.26.30 +biganswer.big. IN A 10.10.26.31 +biganswer.big. IN A 10.10.26.32 +biganswer.big. IN A 10.10.26.33 +biganswer.big. IN A 10.10.26.34 +biganswer.big. IN A 10.10.26.35 +biganswer.big. IN A 10.10.26.36 +biganswer.big. IN A 10.10.26.37 +biganswer.big. IN A 10.10.26.38 +biganswer.big. IN A 10.10.26.39 +biganswer.big. IN A 10.10.26.40 +biganswer.big. IN A 10.10.26.41 +biganswer.big. IN A 10.10.26.42 +biganswer.big. IN A 10.10.26.43 +biganswer.big. IN A 10.10.26.44 +biganswer.big. IN A 10.10.26.45 +biganswer.big. IN A 10.10.26.46 +biganswer.big. IN A 10.10.26.47 +biganswer.big. IN A 10.10.26.48 +biganswer.big. IN A 10.10.26.49 +biganswer.big. IN A 10.10.26.50 +biganswer.big. IN A 10.10.27.1 +biganswer.big. IN A 10.10.27.2 +biganswer.big. IN A 10.10.27.3 +biganswer.big. IN A 10.10.27.4 +biganswer.big. IN A 10.10.27.5 +biganswer.big. IN A 10.10.27.6 +biganswer.big. IN A 10.10.27.7 +biganswer.big. IN A 10.10.27.8 +biganswer.big. IN A 10.10.27.9 +biganswer.big. IN A 10.10.27.10 +biganswer.big. IN A 10.10.27.11 +biganswer.big. IN A 10.10.27.12 +biganswer.big. IN A 10.10.27.13 +biganswer.big. IN A 10.10.27.14 +biganswer.big. IN A 10.10.27.15 +biganswer.big. IN A 10.10.27.16 +biganswer.big. IN A 10.10.27.17 +biganswer.big. IN A 10.10.27.18 +biganswer.big. IN A 10.10.27.19 +biganswer.big. IN A 10.10.27.20 +biganswer.big. IN A 10.10.27.21 +biganswer.big. IN A 10.10.27.22 +biganswer.big. IN A 10.10.27.23 +biganswer.big. IN A 10.10.27.24 +biganswer.big. IN A 10.10.27.25 +biganswer.big. IN A 10.10.27.26 +biganswer.big. IN A 10.10.27.27 +biganswer.big. IN A 10.10.27.28 +biganswer.big. IN A 10.10.27.29 +biganswer.big. IN A 10.10.27.30 +biganswer.big. IN A 10.10.27.31 +biganswer.big. IN A 10.10.27.32 +biganswer.big. IN A 10.10.27.33 +biganswer.big. IN A 10.10.27.34 +biganswer.big. IN A 10.10.27.35 +biganswer.big. IN A 10.10.27.36 +biganswer.big. IN A 10.10.27.37 +biganswer.big. IN A 10.10.27.38 +biganswer.big. IN A 10.10.27.39 +biganswer.big. IN A 10.10.27.40 +biganswer.big. IN A 10.10.27.41 +biganswer.big. IN A 10.10.27.42 +biganswer.big. IN A 10.10.27.43 +biganswer.big. IN A 10.10.27.44 +biganswer.big. IN A 10.10.27.45 +biganswer.big. IN A 10.10.27.46 +biganswer.big. IN A 10.10.27.47 +biganswer.big. IN A 10.10.27.48 +biganswer.big. IN A 10.10.27.49 +biganswer.big. IN A 10.10.27.50 +biganswer.big. IN A 10.10.28.1 +biganswer.big. IN A 10.10.28.2 +biganswer.big. IN A 10.10.28.3 +biganswer.big. IN A 10.10.28.4 +biganswer.big. IN A 10.10.28.5 +biganswer.big. IN A 10.10.28.6 +biganswer.big. IN A 10.10.28.7 +biganswer.big. IN A 10.10.28.8 +biganswer.big. IN A 10.10.28.9 +biganswer.big. IN A 10.10.28.10 +biganswer.big. IN A 10.10.28.11 +biganswer.big. IN A 10.10.28.12 +biganswer.big. IN A 10.10.28.13 +biganswer.big. IN A 10.10.28.14 +biganswer.big. IN A 10.10.28.15 +biganswer.big. IN A 10.10.28.16 +biganswer.big. IN A 10.10.28.17 +biganswer.big. IN A 10.10.28.18 +biganswer.big. IN A 10.10.28.19 +biganswer.big. IN A 10.10.28.20 +biganswer.big. IN A 10.10.28.21 +biganswer.big. IN A 10.10.28.22 +biganswer.big. IN A 10.10.28.23 +biganswer.big. IN A 10.10.28.24 +biganswer.big. IN A 10.10.28.25 +biganswer.big. IN A 10.10.28.26 +biganswer.big. IN A 10.10.28.27 +biganswer.big. IN A 10.10.28.28 +biganswer.big. IN A 10.10.28.29 +biganswer.big. IN A 10.10.28.30 +biganswer.big. IN A 10.10.28.31 +biganswer.big. IN A 10.10.28.32 +biganswer.big. IN A 10.10.28.33 +biganswer.big. IN A 10.10.28.34 +biganswer.big. IN A 10.10.28.35 +biganswer.big. IN A 10.10.28.36 +biganswer.big. IN A 10.10.28.37 +biganswer.big. IN A 10.10.28.38 +biganswer.big. IN A 10.10.28.39 +biganswer.big. IN A 10.10.28.40 +biganswer.big. IN A 10.10.28.41 +biganswer.big. IN A 10.10.28.42 +biganswer.big. IN A 10.10.28.43 +biganswer.big. IN A 10.10.28.44 +biganswer.big. IN A 10.10.28.45 +biganswer.big. IN A 10.10.28.46 +biganswer.big. IN A 10.10.28.47 +biganswer.big. IN A 10.10.28.48 +biganswer.big. IN A 10.10.28.49 +biganswer.big. IN A 10.10.28.50 +biganswer.big. IN A 10.10.29.1 +biganswer.big. IN A 10.10.29.2 +biganswer.big. IN A 10.10.29.3 +biganswer.big. IN A 10.10.29.4 +biganswer.big. IN A 10.10.29.5 +biganswer.big. IN A 10.10.29.6 +biganswer.big. IN A 10.10.29.7 +biganswer.big. IN A 10.10.29.8 +biganswer.big. IN A 10.10.29.9 +biganswer.big. IN A 10.10.29.10 +biganswer.big. IN A 10.10.29.11 +biganswer.big. IN A 10.10.29.12 +biganswer.big. IN A 10.10.29.13 +biganswer.big. IN A 10.10.29.14 +biganswer.big. IN A 10.10.29.15 +biganswer.big. IN A 10.10.29.16 +biganswer.big. IN A 10.10.29.17 +biganswer.big. IN A 10.10.29.18 +biganswer.big. IN A 10.10.29.19 +biganswer.big. IN A 10.10.29.20 +biganswer.big. IN A 10.10.29.21 +biganswer.big. IN A 10.10.29.22 +biganswer.big. IN A 10.10.29.23 +biganswer.big. IN A 10.10.29.24 +biganswer.big. IN A 10.10.29.25 +biganswer.big. IN A 10.10.29.26 +biganswer.big. IN A 10.10.29.27 +biganswer.big. IN A 10.10.29.28 +biganswer.big. IN A 10.10.29.29 +biganswer.big. IN A 10.10.29.30 +biganswer.big. IN A 10.10.29.31 +biganswer.big. IN A 10.10.29.32 +biganswer.big. IN A 10.10.29.33 +biganswer.big. IN A 10.10.29.34 +biganswer.big. IN A 10.10.29.35 +biganswer.big. IN A 10.10.29.36 +biganswer.big. IN A 10.10.29.37 +biganswer.big. IN A 10.10.29.38 +biganswer.big. IN A 10.10.29.39 +biganswer.big. IN A 10.10.29.40 +biganswer.big. IN A 10.10.29.41 +biganswer.big. IN A 10.10.29.42 +biganswer.big. IN A 10.10.29.43 +biganswer.big. IN A 10.10.29.44 +biganswer.big. IN A 10.10.29.45 +biganswer.big. IN A 10.10.29.46 +biganswer.big. IN A 10.10.29.47 +biganswer.big. IN A 10.10.29.48 +biganswer.big. IN A 10.10.29.49 +biganswer.big. IN A 10.10.29.50 +biganswer.big. IN A 10.10.30.1 +biganswer.big. IN A 10.10.30.2 +biganswer.big. IN A 10.10.30.3 +biganswer.big. IN A 10.10.30.4 +biganswer.big. IN A 10.10.30.5 +biganswer.big. IN A 10.10.30.6 +biganswer.big. IN A 10.10.30.7 +biganswer.big. IN A 10.10.30.8 +biganswer.big. IN A 10.10.30.9 +biganswer.big. IN A 10.10.30.10 +biganswer.big. IN A 10.10.30.11 +biganswer.big. IN A 10.10.30.12 +biganswer.big. IN A 10.10.30.13 +biganswer.big. IN A 10.10.30.14 +biganswer.big. IN A 10.10.30.15 +biganswer.big. IN A 10.10.30.16 +biganswer.big. IN A 10.10.30.17 +biganswer.big. IN A 10.10.30.18 +biganswer.big. IN A 10.10.30.19 +biganswer.big. IN A 10.10.30.20 +biganswer.big. IN A 10.10.30.21 +biganswer.big. IN A 10.10.30.22 +biganswer.big. IN A 10.10.30.23 +biganswer.big. IN A 10.10.30.24 +biganswer.big. IN A 10.10.30.25 +biganswer.big. IN A 10.10.30.26 +biganswer.big. IN A 10.10.30.27 +biganswer.big. IN A 10.10.30.28 +biganswer.big. IN A 10.10.30.29 +biganswer.big. IN A 10.10.30.30 +biganswer.big. IN A 10.10.30.31 +biganswer.big. IN A 10.10.30.32 +biganswer.big. IN A 10.10.30.33 +biganswer.big. IN A 10.10.30.34 +biganswer.big. IN A 10.10.30.35 +biganswer.big. IN A 10.10.30.36 +biganswer.big. IN A 10.10.30.37 +biganswer.big. IN A 10.10.30.38 +biganswer.big. IN A 10.10.30.39 +biganswer.big. IN A 10.10.30.40 +biganswer.big. IN A 10.10.30.41 +biganswer.big. IN A 10.10.30.42 +biganswer.big. IN A 10.10.30.43 +biganswer.big. IN A 10.10.30.44 +biganswer.big. IN A 10.10.30.45 +biganswer.big. IN A 10.10.30.46 +biganswer.big. IN A 10.10.30.47 +biganswer.big. IN A 10.10.30.48 +biganswer.big. IN A 10.10.30.49 +biganswer.big. IN A 10.10.30.50 +biganswer.big. IN A 10.10.31.1 +biganswer.big. IN A 10.10.31.2 +biganswer.big. IN A 10.10.31.3 +biganswer.big. IN A 10.10.31.4 +biganswer.big. IN A 10.10.31.5 +biganswer.big. IN A 10.10.31.6 +biganswer.big. IN A 10.10.31.7 +biganswer.big. IN A 10.10.31.8 +biganswer.big. IN A 10.10.31.9 +biganswer.big. IN A 10.10.31.10 +biganswer.big. IN A 10.10.31.11 +biganswer.big. IN A 10.10.31.12 +biganswer.big. IN A 10.10.31.13 +biganswer.big. IN A 10.10.31.14 +biganswer.big. IN A 10.10.31.15 +biganswer.big. IN A 10.10.31.16 +biganswer.big. IN A 10.10.31.17 +biganswer.big. IN A 10.10.31.18 +biganswer.big. IN A 10.10.31.19 +biganswer.big. IN A 10.10.31.20 +biganswer.big. IN A 10.10.31.21 +biganswer.big. IN A 10.10.31.22 +biganswer.big. IN A 10.10.31.23 +biganswer.big. IN A 10.10.31.24 +biganswer.big. IN A 10.10.31.25 +biganswer.big. IN A 10.10.31.26 +biganswer.big. IN A 10.10.31.27 +biganswer.big. IN A 10.10.31.28 +biganswer.big. IN A 10.10.31.29 +biganswer.big. IN A 10.10.31.30 +biganswer.big. IN A 10.10.31.31 +biganswer.big. IN A 10.10.31.32 +biganswer.big. IN A 10.10.31.33 +biganswer.big. IN A 10.10.31.34 +biganswer.big. IN A 10.10.31.35 +biganswer.big. IN A 10.10.31.36 +biganswer.big. IN A 10.10.31.37 +biganswer.big. IN A 10.10.31.38 +biganswer.big. IN A 10.10.31.39 +biganswer.big. IN A 10.10.31.40 +biganswer.big. IN A 10.10.31.41 +biganswer.big. IN A 10.10.31.42 +biganswer.big. IN A 10.10.31.43 +biganswer.big. IN A 10.10.31.44 +biganswer.big. IN A 10.10.31.45 +biganswer.big. IN A 10.10.31.46 +biganswer.big. IN A 10.10.31.47 +biganswer.big. IN A 10.10.31.48 +biganswer.big. IN A 10.10.31.49 +biganswer.big. IN A 10.10.31.50 +biganswer.big. IN A 10.10.32.1 +biganswer.big. IN A 10.10.32.2 +biganswer.big. IN A 10.10.32.3 +biganswer.big. IN A 10.10.32.4 +biganswer.big. IN A 10.10.32.5 +biganswer.big. IN A 10.10.32.6 +biganswer.big. IN A 10.10.32.7 +biganswer.big. IN A 10.10.32.8 +biganswer.big. IN A 10.10.32.9 +biganswer.big. IN A 10.10.32.10 +biganswer.big. IN A 10.10.32.11 +biganswer.big. IN A 10.10.32.12 +biganswer.big. IN A 10.10.32.13 +biganswer.big. IN A 10.10.32.14 +biganswer.big. IN A 10.10.32.15 +biganswer.big. IN A 10.10.32.16 +biganswer.big. IN A 10.10.32.17 +biganswer.big. IN A 10.10.32.18 +biganswer.big. IN A 10.10.32.19 +biganswer.big. IN A 10.10.32.20 +biganswer.big. IN A 10.10.32.21 +biganswer.big. IN A 10.10.32.22 +biganswer.big. IN A 10.10.32.23 +biganswer.big. IN A 10.10.32.24 +biganswer.big. IN A 10.10.32.25 +biganswer.big. IN A 10.10.32.26 +biganswer.big. IN A 10.10.32.27 +biganswer.big. IN A 10.10.32.28 +biganswer.big. IN A 10.10.32.29 +biganswer.big. IN A 10.10.32.30 +biganswer.big. IN A 10.10.32.31 +biganswer.big. IN A 10.10.32.32 +biganswer.big. IN A 10.10.32.33 +biganswer.big. IN A 10.10.32.34 +biganswer.big. IN A 10.10.32.35 +biganswer.big. IN A 10.10.32.36 +biganswer.big. IN A 10.10.32.37 +biganswer.big. IN A 10.10.32.38 +biganswer.big. IN A 10.10.32.39 +biganswer.big. IN A 10.10.32.40 +biganswer.big. IN A 10.10.32.41 +biganswer.big. IN A 10.10.32.42 +biganswer.big. IN A 10.10.32.43 +biganswer.big. IN A 10.10.32.44 +biganswer.big. IN A 10.10.32.45 +biganswer.big. IN A 10.10.32.46 +biganswer.big. IN A 10.10.32.47 +biganswer.big. IN A 10.10.32.48 +biganswer.big. IN A 10.10.32.49 +biganswer.big. IN A 10.10.32.50 +biganswer.big. IN A 10.10.33.1 +biganswer.big. IN A 10.10.33.2 +biganswer.big. IN A 10.10.33.3 +biganswer.big. IN A 10.10.33.4 +biganswer.big. IN A 10.10.33.5 +biganswer.big. IN A 10.10.33.6 +biganswer.big. IN A 10.10.33.7 +biganswer.big. IN A 10.10.33.8 +biganswer.big. IN A 10.10.33.9 +biganswer.big. IN A 10.10.33.10 +biganswer.big. IN A 10.10.33.11 +biganswer.big. IN A 10.10.33.12 +biganswer.big. IN A 10.10.33.13 +biganswer.big. IN A 10.10.33.14 +biganswer.big. IN A 10.10.33.15 +biganswer.big. IN A 10.10.33.16 +biganswer.big. IN A 10.10.33.17 +biganswer.big. IN A 10.10.33.18 +biganswer.big. IN A 10.10.33.19 +biganswer.big. IN A 10.10.33.20 +biganswer.big. IN A 10.10.33.21 +biganswer.big. IN A 10.10.33.22 +biganswer.big. IN A 10.10.33.23 +biganswer.big. IN A 10.10.33.24 +biganswer.big. IN A 10.10.33.25 +biganswer.big. IN A 10.10.33.26 +biganswer.big. IN A 10.10.33.27 +biganswer.big. IN A 10.10.33.28 +biganswer.big. IN A 10.10.33.29 +biganswer.big. IN A 10.10.33.30 +biganswer.big. IN A 10.10.33.31 +biganswer.big. IN A 10.10.33.32 +biganswer.big. IN A 10.10.33.33 +biganswer.big. IN A 10.10.33.34 +biganswer.big. IN A 10.10.33.35 +biganswer.big. IN A 10.10.33.36 +biganswer.big. IN A 10.10.33.37 +biganswer.big. IN A 10.10.33.38 +biganswer.big. IN A 10.10.33.39 +biganswer.big. IN A 10.10.33.40 +biganswer.big. IN A 10.10.33.41 +biganswer.big. IN A 10.10.33.42 +biganswer.big. IN A 10.10.33.43 +biganswer.big. IN A 10.10.33.44 +biganswer.big. IN A 10.10.33.45 +biganswer.big. IN A 10.10.33.46 +biganswer.big. IN A 10.10.33.47 +biganswer.big. IN A 10.10.33.48 +biganswer.big. IN A 10.10.33.49 +biganswer.big. IN A 10.10.33.50 +biganswer.big. IN A 10.10.34.1 +biganswer.big. IN A 10.10.34.2 +biganswer.big. IN A 10.10.34.3 +biganswer.big. IN A 10.10.34.4 +biganswer.big. IN A 10.10.34.5 +biganswer.big. IN A 10.10.34.6 +biganswer.big. IN A 10.10.34.7 +biganswer.big. IN A 10.10.34.8 +biganswer.big. IN A 10.10.34.9 +biganswer.big. IN A 10.10.34.10 +biganswer.big. IN A 10.10.34.11 +biganswer.big. IN A 10.10.34.12 +biganswer.big. IN A 10.10.34.13 +biganswer.big. IN A 10.10.34.14 +biganswer.big. IN A 10.10.34.15 +biganswer.big. IN A 10.10.34.16 +biganswer.big. IN A 10.10.34.17 +biganswer.big. IN A 10.10.34.18 +biganswer.big. IN A 10.10.34.19 +biganswer.big. IN A 10.10.34.20 +biganswer.big. IN A 10.10.34.21 +biganswer.big. IN A 10.10.34.22 +biganswer.big. IN A 10.10.34.23 +biganswer.big. IN A 10.10.34.24 +biganswer.big. IN A 10.10.34.25 +biganswer.big. IN A 10.10.34.26 +biganswer.big. IN A 10.10.34.27 +biganswer.big. IN A 10.10.34.28 +biganswer.big. IN A 10.10.34.29 +biganswer.big. IN A 10.10.34.30 +biganswer.big. IN A 10.10.34.31 +biganswer.big. IN A 10.10.34.32 +biganswer.big. IN A 10.10.34.33 +biganswer.big. IN A 10.10.34.34 +biganswer.big. IN A 10.10.34.35 +biganswer.big. IN A 10.10.34.36 +biganswer.big. IN A 10.10.34.37 +biganswer.big. IN A 10.10.34.38 +biganswer.big. IN A 10.10.34.39 +biganswer.big. IN A 10.10.34.40 +biganswer.big. IN A 10.10.34.41 +biganswer.big. IN A 10.10.34.42 +biganswer.big. IN A 10.10.34.43 +biganswer.big. IN A 10.10.34.44 +biganswer.big. IN A 10.10.34.45 +biganswer.big. IN A 10.10.34.46 +biganswer.big. IN A 10.10.34.47 +biganswer.big. IN A 10.10.34.48 +biganswer.big. IN A 10.10.34.49 +biganswer.big. IN A 10.10.34.50 +biganswer.big. IN A 10.10.35.1 +biganswer.big. IN A 10.10.35.2 +biganswer.big. IN A 10.10.35.3 +biganswer.big. IN A 10.10.35.4 +biganswer.big. IN A 10.10.35.5 +biganswer.big. IN A 10.10.35.6 +biganswer.big. IN A 10.10.35.7 +biganswer.big. IN A 10.10.35.8 +biganswer.big. IN A 10.10.35.9 +biganswer.big. IN A 10.10.35.10 +biganswer.big. IN A 10.10.35.11 +biganswer.big. IN A 10.10.35.12 +biganswer.big. IN A 10.10.35.13 +biganswer.big. IN A 10.10.35.14 +biganswer.big. IN A 10.10.35.15 +biganswer.big. IN A 10.10.35.16 +biganswer.big. IN A 10.10.35.17 +biganswer.big. IN A 10.10.35.18 +biganswer.big. IN A 10.10.35.19 +biganswer.big. IN A 10.10.35.20 +biganswer.big. IN A 10.10.35.21 +biganswer.big. IN A 10.10.35.22 +biganswer.big. IN A 10.10.35.23 +biganswer.big. IN A 10.10.35.24 +biganswer.big. IN A 10.10.35.25 +biganswer.big. IN A 10.10.35.26 +biganswer.big. IN A 10.10.35.27 +biganswer.big. IN A 10.10.35.28 +biganswer.big. IN A 10.10.35.29 +biganswer.big. IN A 10.10.35.30 +biganswer.big. IN A 10.10.35.31 +biganswer.big. IN A 10.10.35.32 +biganswer.big. IN A 10.10.35.33 +biganswer.big. IN A 10.10.35.34 +biganswer.big. IN A 10.10.35.35 +biganswer.big. IN A 10.10.35.36 +biganswer.big. IN A 10.10.35.37 +biganswer.big. IN A 10.10.35.38 +biganswer.big. IN A 10.10.35.39 +biganswer.big. IN A 10.10.35.40 +biganswer.big. IN A 10.10.35.41 +biganswer.big. IN A 10.10.35.42 +biganswer.big. IN A 10.10.35.43 +biganswer.big. IN A 10.10.35.44 +biganswer.big. IN A 10.10.35.45 +biganswer.big. IN A 10.10.35.46 +biganswer.big. IN A 10.10.35.47 +biganswer.big. IN A 10.10.35.48 +biganswer.big. IN A 10.10.35.49 +biganswer.big. IN A 10.10.35.50 +biganswer.big. IN A 10.10.36.1 +biganswer.big. IN A 10.10.36.2 +biganswer.big. IN A 10.10.36.3 +biganswer.big. IN A 10.10.36.4 +biganswer.big. IN A 10.10.36.5 +biganswer.big. IN A 10.10.36.6 +biganswer.big. IN A 10.10.36.7 +biganswer.big. IN A 10.10.36.8 +biganswer.big. IN A 10.10.36.9 +biganswer.big. IN A 10.10.36.10 +biganswer.big. IN A 10.10.36.11 +biganswer.big. IN A 10.10.36.12 +biganswer.big. IN A 10.10.36.13 +biganswer.big. IN A 10.10.36.14 +biganswer.big. IN A 10.10.36.15 +biganswer.big. IN A 10.10.36.16 +biganswer.big. IN A 10.10.36.17 +biganswer.big. IN A 10.10.36.18 +biganswer.big. IN A 10.10.36.19 +biganswer.big. IN A 10.10.36.20 +biganswer.big. IN A 10.10.36.21 +biganswer.big. IN A 10.10.36.22 +biganswer.big. IN A 10.10.36.23 +biganswer.big. IN A 10.10.36.24 +biganswer.big. IN A 10.10.36.25 +biganswer.big. IN A 10.10.36.26 +biganswer.big. IN A 10.10.36.27 +biganswer.big. IN A 10.10.36.28 +biganswer.big. IN A 10.10.36.29 +biganswer.big. IN A 10.10.36.30 +biganswer.big. IN A 10.10.36.31 +biganswer.big. IN A 10.10.36.32 +biganswer.big. IN A 10.10.36.33 +biganswer.big. IN A 10.10.36.34 +biganswer.big. IN A 10.10.36.35 +biganswer.big. IN A 10.10.36.36 +biganswer.big. IN A 10.10.36.37 +biganswer.big. IN A 10.10.36.38 +biganswer.big. IN A 10.10.36.39 +biganswer.big. IN A 10.10.36.40 +biganswer.big. IN A 10.10.36.41 +biganswer.big. IN A 10.10.36.42 +biganswer.big. IN A 10.10.36.43 +biganswer.big. IN A 10.10.36.44 +biganswer.big. IN A 10.10.36.45 +biganswer.big. IN A 10.10.36.46 +biganswer.big. IN A 10.10.36.47 +biganswer.big. IN A 10.10.36.48 +biganswer.big. IN A 10.10.36.49 +biganswer.big. IN A 10.10.36.50 +biganswer.big. IN A 10.10.37.1 +biganswer.big. IN A 10.10.37.2 +biganswer.big. IN A 10.10.37.3 +biganswer.big. IN A 10.10.37.4 +biganswer.big. IN A 10.10.37.5 +biganswer.big. IN A 10.10.37.6 +biganswer.big. IN A 10.10.37.7 +biganswer.big. IN A 10.10.37.8 +biganswer.big. IN A 10.10.37.9 +biganswer.big. IN A 10.10.37.10 +biganswer.big. IN A 10.10.37.11 +biganswer.big. IN A 10.10.37.12 +biganswer.big. IN A 10.10.37.13 +biganswer.big. IN A 10.10.37.14 +biganswer.big. IN A 10.10.37.15 +biganswer.big. IN A 10.10.37.16 +biganswer.big. IN A 10.10.37.17 +biganswer.big. IN A 10.10.37.18 +biganswer.big. IN A 10.10.37.19 +biganswer.big. IN A 10.10.37.20 +biganswer.big. IN A 10.10.37.21 +biganswer.big. IN A 10.10.37.22 +biganswer.big. IN A 10.10.37.23 +biganswer.big. IN A 10.10.37.24 +biganswer.big. IN A 10.10.37.25 +biganswer.big. IN A 10.10.37.26 +biganswer.big. IN A 10.10.37.27 +biganswer.big. IN A 10.10.37.28 +biganswer.big. IN A 10.10.37.29 +biganswer.big. IN A 10.10.37.30 +biganswer.big. IN A 10.10.37.31 +biganswer.big. IN A 10.10.37.32 +biganswer.big. IN A 10.10.37.33 +biganswer.big. IN A 10.10.37.34 +biganswer.big. IN A 10.10.37.35 +biganswer.big. IN A 10.10.37.36 +biganswer.big. IN A 10.10.37.37 +biganswer.big. IN A 10.10.37.38 +biganswer.big. IN A 10.10.37.39 +biganswer.big. IN A 10.10.37.40 +biganswer.big. IN A 10.10.37.41 +biganswer.big. IN A 10.10.37.42 +biganswer.big. IN A 10.10.37.43 +biganswer.big. IN A 10.10.37.44 +biganswer.big. IN A 10.10.37.45 +biganswer.big. IN A 10.10.37.46 +biganswer.big. IN A 10.10.37.47 +biganswer.big. IN A 10.10.37.48 +biganswer.big. IN A 10.10.37.49 +biganswer.big. IN A 10.10.37.50 +biganswer.big. IN A 10.10.38.1 +biganswer.big. IN A 10.10.38.2 +biganswer.big. IN A 10.10.38.3 +biganswer.big. IN A 10.10.38.4 +biganswer.big. IN A 10.10.38.5 +biganswer.big. IN A 10.10.38.6 +biganswer.big. IN A 10.10.38.7 +biganswer.big. IN A 10.10.38.8 +biganswer.big. IN A 10.10.38.9 +biganswer.big. IN A 10.10.38.10 +biganswer.big. IN A 10.10.38.11 +biganswer.big. IN A 10.10.38.12 +biganswer.big. IN A 10.10.38.13 +biganswer.big. IN A 10.10.38.14 +biganswer.big. IN A 10.10.38.15 +biganswer.big. IN A 10.10.38.16 +biganswer.big. IN A 10.10.38.17 +biganswer.big. IN A 10.10.38.18 +biganswer.big. IN A 10.10.38.19 +biganswer.big. IN A 10.10.38.20 +biganswer.big. IN A 10.10.38.21 +biganswer.big. IN A 10.10.38.22 +biganswer.big. IN A 10.10.38.23 +biganswer.big. IN A 10.10.38.24 +biganswer.big. IN A 10.10.38.25 +biganswer.big. IN A 10.10.38.26 +biganswer.big. IN A 10.10.38.27 +biganswer.big. IN A 10.10.38.28 +biganswer.big. IN A 10.10.38.29 +biganswer.big. IN A 10.10.38.30 +biganswer.big. IN A 10.10.38.31 +biganswer.big. IN A 10.10.38.32 +biganswer.big. IN A 10.10.38.33 +biganswer.big. IN A 10.10.38.34 +biganswer.big. IN A 10.10.38.35 +biganswer.big. IN A 10.10.38.36 +biganswer.big. IN A 10.10.38.37 +biganswer.big. IN A 10.10.38.38 +biganswer.big. IN A 10.10.38.39 +biganswer.big. IN A 10.10.38.40 +biganswer.big. IN A 10.10.38.41 +biganswer.big. IN A 10.10.38.42 +biganswer.big. IN A 10.10.38.43 +biganswer.big. IN A 10.10.38.44 +biganswer.big. IN A 10.10.38.45 +biganswer.big. IN A 10.10.38.46 +biganswer.big. IN A 10.10.38.47 +biganswer.big. IN A 10.10.38.48 +biganswer.big. IN A 10.10.38.49 +biganswer.big. IN A 10.10.38.50 +biganswer.big. IN A 10.10.39.1 +biganswer.big. IN A 10.10.39.2 +biganswer.big. IN A 10.10.39.3 +biganswer.big. IN A 10.10.39.4 +biganswer.big. IN A 10.10.39.5 +biganswer.big. IN A 10.10.39.6 +biganswer.big. IN A 10.10.39.7 +biganswer.big. IN A 10.10.39.8 +biganswer.big. IN A 10.10.39.9 +biganswer.big. IN A 10.10.39.10 +biganswer.big. IN A 10.10.39.11 +biganswer.big. IN A 10.10.39.12 +biganswer.big. IN A 10.10.39.13 +biganswer.big. IN A 10.10.39.14 +biganswer.big. IN A 10.10.39.15 +biganswer.big. IN A 10.10.39.16 +biganswer.big. IN A 10.10.39.17 +biganswer.big. IN A 10.10.39.18 +biganswer.big. IN A 10.10.39.19 +biganswer.big. IN A 10.10.39.20 +biganswer.big. IN A 10.10.39.21 +biganswer.big. IN A 10.10.39.22 +biganswer.big. IN A 10.10.39.23 +biganswer.big. IN A 10.10.39.24 +biganswer.big. IN A 10.10.39.25 +biganswer.big. IN A 10.10.39.26 +biganswer.big. IN A 10.10.39.27 +biganswer.big. IN A 10.10.39.28 +biganswer.big. IN A 10.10.39.29 +biganswer.big. IN A 10.10.39.30 +biganswer.big. IN A 10.10.39.31 +biganswer.big. IN A 10.10.39.32 +biganswer.big. IN A 10.10.39.33 +biganswer.big. IN A 10.10.39.34 +biganswer.big. IN A 10.10.39.35 +biganswer.big. IN A 10.10.39.36 +biganswer.big. IN A 10.10.39.37 +biganswer.big. IN A 10.10.39.38 +biganswer.big. IN A 10.10.39.39 +biganswer.big. IN A 10.10.39.40 +biganswer.big. IN A 10.10.39.41 +biganswer.big. IN A 10.10.39.42 +biganswer.big. IN A 10.10.39.43 +biganswer.big. IN A 10.10.39.44 +biganswer.big. IN A 10.10.39.45 +biganswer.big. IN A 10.10.39.46 +biganswer.big. IN A 10.10.39.47 +biganswer.big. IN A 10.10.39.48 +biganswer.big. IN A 10.10.39.49 +biganswer.big. IN A 10.10.39.50 +biganswer.big. IN A 10.10.40.1 +biganswer.big. IN A 10.10.40.2 +biganswer.big. IN A 10.10.40.3 +biganswer.big. IN A 10.10.40.4 +biganswer.big. IN A 10.10.40.5 +biganswer.big. IN A 10.10.40.6 +biganswer.big. IN A 10.10.40.7 +biganswer.big. IN A 10.10.40.8 +biganswer.big. IN A 10.10.40.9 +biganswer.big. IN A 10.10.40.10 +biganswer.big. IN A 10.10.40.11 +biganswer.big. IN A 10.10.40.12 +biganswer.big. IN A 10.10.40.13 +biganswer.big. IN A 10.10.40.14 +biganswer.big. IN A 10.10.40.15 +biganswer.big. IN A 10.10.40.16 +biganswer.big. IN A 10.10.40.17 +biganswer.big. IN A 10.10.40.18 +biganswer.big. IN A 10.10.40.19 +biganswer.big. IN A 10.10.40.20 +biganswer.big. IN A 10.10.40.21 +biganswer.big. IN A 10.10.40.22 +biganswer.big. IN A 10.10.40.23 +biganswer.big. IN A 10.10.40.24 +biganswer.big. IN A 10.10.40.25 +biganswer.big. IN A 10.10.40.26 +biganswer.big. IN A 10.10.40.27 +biganswer.big. IN A 10.10.40.28 +biganswer.big. IN A 10.10.40.29 +biganswer.big. IN A 10.10.40.30 +biganswer.big. IN A 10.10.40.31 +biganswer.big. IN A 10.10.40.32 +biganswer.big. IN A 10.10.40.33 +biganswer.big. IN A 10.10.40.34 +biganswer.big. IN A 10.10.40.35 +biganswer.big. IN A 10.10.40.36 +biganswer.big. IN A 10.10.40.37 +biganswer.big. IN A 10.10.40.38 +biganswer.big. IN A 10.10.40.39 +biganswer.big. IN A 10.10.40.40 +biganswer.big. IN A 10.10.40.41 +biganswer.big. IN A 10.10.40.42 +biganswer.big. IN A 10.10.40.43 +biganswer.big. IN A 10.10.40.44 +biganswer.big. IN A 10.10.40.45 +biganswer.big. IN A 10.10.40.46 +biganswer.big. IN A 10.10.40.47 +biganswer.big. IN A 10.10.40.48 +biganswer.big. IN A 10.10.40.49 +biganswer.big. IN A 10.10.40.50 +biganswer.big. IN A 10.10.41.1 +biganswer.big. IN A 10.10.41.2 +biganswer.big. IN A 10.10.41.3 +biganswer.big. IN A 10.10.41.4 +biganswer.big. IN A 10.10.41.5 +biganswer.big. IN A 10.10.41.6 +biganswer.big. IN A 10.10.41.7 +biganswer.big. IN A 10.10.41.8 +biganswer.big. IN A 10.10.41.9 +biganswer.big. IN A 10.10.41.10 +biganswer.big. IN A 10.10.41.11 +biganswer.big. IN A 10.10.41.12 +biganswer.big. IN A 10.10.41.13 +biganswer.big. IN A 10.10.41.14 +biganswer.big. IN A 10.10.41.15 +biganswer.big. IN A 10.10.41.16 +biganswer.big. IN A 10.10.41.17 +biganswer.big. IN A 10.10.41.18 +biganswer.big. IN A 10.10.41.19 +biganswer.big. IN A 10.10.41.20 +biganswer.big. IN A 10.10.41.21 +biganswer.big. IN A 10.10.41.22 +biganswer.big. IN A 10.10.41.23 +biganswer.big. IN A 10.10.41.24 +biganswer.big. IN A 10.10.41.25 +biganswer.big. IN A 10.10.41.26 +biganswer.big. IN A 10.10.41.27 +biganswer.big. IN A 10.10.41.28 +biganswer.big. IN A 10.10.41.29 +biganswer.big. IN A 10.10.41.30 +biganswer.big. IN A 10.10.41.31 +biganswer.big. IN A 10.10.41.32 +biganswer.big. IN A 10.10.41.33 +biganswer.big. IN A 10.10.41.34 +biganswer.big. IN A 10.10.41.35 +biganswer.big. IN A 10.10.41.36 +biganswer.big. IN A 10.10.41.37 +biganswer.big. IN A 10.10.41.38 +biganswer.big. IN A 10.10.41.39 +biganswer.big. IN A 10.10.41.40 +biganswer.big. IN A 10.10.41.41 +biganswer.big. IN A 10.10.41.42 +biganswer.big. IN A 10.10.41.43 +biganswer.big. IN A 10.10.41.44 +biganswer.big. IN A 10.10.41.45 +biganswer.big. IN A 10.10.41.46 +biganswer.big. IN A 10.10.41.47 +biganswer.big. IN A 10.10.41.48 +biganswer.big. IN A 10.10.41.49 +biganswer.big. IN A 10.10.41.50 +biganswer.big. IN A 10.10.42.1 +biganswer.big. IN A 10.10.42.2 +biganswer.big. IN A 10.10.42.3 +biganswer.big. IN A 10.10.42.4 +biganswer.big. IN A 10.10.42.5 +biganswer.big. IN A 10.10.42.6 +biganswer.big. IN A 10.10.42.7 +biganswer.big. IN A 10.10.42.8 +biganswer.big. IN A 10.10.42.9 +biganswer.big. IN A 10.10.42.10 +biganswer.big. IN A 10.10.42.11 +biganswer.big. IN A 10.10.42.12 +biganswer.big. IN A 10.10.42.13 +biganswer.big. IN A 10.10.42.14 +biganswer.big. IN A 10.10.42.15 +biganswer.big. IN A 10.10.42.16 +biganswer.big. IN A 10.10.42.17 +biganswer.big. IN A 10.10.42.18 +biganswer.big. IN A 10.10.42.19 +biganswer.big. IN A 10.10.42.20 +biganswer.big. IN A 10.10.42.21 +biganswer.big. IN A 10.10.42.22 +biganswer.big. IN A 10.10.42.23 +biganswer.big. IN A 10.10.42.24 +biganswer.big. IN A 10.10.42.25 +biganswer.big. IN A 10.10.42.26 +biganswer.big. IN A 10.10.42.27 +biganswer.big. IN A 10.10.42.28 +biganswer.big. IN A 10.10.42.29 +biganswer.big. IN A 10.10.42.30 +biganswer.big. IN A 10.10.42.31 +biganswer.big. IN A 10.10.42.32 +biganswer.big. IN A 10.10.42.33 +biganswer.big. IN A 10.10.42.34 +biganswer.big. IN A 10.10.42.35 +biganswer.big. IN A 10.10.42.36 +biganswer.big. IN A 10.10.42.37 +biganswer.big. IN A 10.10.42.38 +biganswer.big. IN A 10.10.42.39 +biganswer.big. IN A 10.10.42.40 +biganswer.big. IN A 10.10.42.41 +biganswer.big. IN A 10.10.42.42 +biganswer.big. IN A 10.10.42.43 +biganswer.big. IN A 10.10.42.44 +biganswer.big. IN A 10.10.42.45 +biganswer.big. IN A 10.10.42.46 +biganswer.big. IN A 10.10.42.47 +biganswer.big. IN A 10.10.42.48 +biganswer.big. IN A 10.10.42.49 +biganswer.big. IN A 10.10.42.50 +biganswer.big. IN A 10.10.43.1 +biganswer.big. IN A 10.10.43.2 +biganswer.big. IN A 10.10.43.3 +biganswer.big. IN A 10.10.43.4 +biganswer.big. IN A 10.10.43.5 +biganswer.big. IN A 10.10.43.6 +biganswer.big. IN A 10.10.43.7 +biganswer.big. IN A 10.10.43.8 +biganswer.big. IN A 10.10.43.9 +biganswer.big. IN A 10.10.43.10 +biganswer.big. IN A 10.10.43.11 +biganswer.big. IN A 10.10.43.12 +biganswer.big. IN A 10.10.43.13 +biganswer.big. IN A 10.10.43.14 +biganswer.big. IN A 10.10.43.15 +biganswer.big. IN A 10.10.43.16 +biganswer.big. IN A 10.10.43.17 +biganswer.big. IN A 10.10.43.18 +biganswer.big. IN A 10.10.43.19 +biganswer.big. IN A 10.10.43.20 +biganswer.big. IN A 10.10.43.21 +biganswer.big. IN A 10.10.43.22 +biganswer.big. IN A 10.10.43.23 +biganswer.big. IN A 10.10.43.24 +biganswer.big. IN A 10.10.43.25 +biganswer.big. IN A 10.10.43.26 +biganswer.big. IN A 10.10.43.27 +biganswer.big. IN A 10.10.43.28 +biganswer.big. IN A 10.10.43.29 +biganswer.big. IN A 10.10.43.30 +biganswer.big. IN A 10.10.43.31 +biganswer.big. IN A 10.10.43.32 +biganswer.big. IN A 10.10.43.33 +biganswer.big. IN A 10.10.43.34 +biganswer.big. IN A 10.10.43.35 +biganswer.big. IN A 10.10.43.36 +biganswer.big. IN A 10.10.43.37 +biganswer.big. IN A 10.10.43.38 +biganswer.big. IN A 10.10.43.39 +biganswer.big. IN A 10.10.43.40 +biganswer.big. IN A 10.10.43.41 +biganswer.big. IN A 10.10.43.42 +biganswer.big. IN A 10.10.43.43 +biganswer.big. IN A 10.10.43.44 +biganswer.big. IN A 10.10.43.45 +biganswer.big. IN A 10.10.43.46 +biganswer.big. IN A 10.10.43.47 +biganswer.big. IN A 10.10.43.48 +biganswer.big. IN A 10.10.43.49 +biganswer.big. IN A 10.10.43.50 +biganswer.big. IN A 10.10.44.1 +biganswer.big. IN A 10.10.44.2 +biganswer.big. IN A 10.10.44.3 +biganswer.big. IN A 10.10.44.4 +biganswer.big. IN A 10.10.44.5 +biganswer.big. IN A 10.10.44.6 +biganswer.big. IN A 10.10.44.7 +biganswer.big. IN A 10.10.44.8 +biganswer.big. IN A 10.10.44.9 +biganswer.big. IN A 10.10.44.10 +biganswer.big. IN A 10.10.44.11 +biganswer.big. IN A 10.10.44.12 +biganswer.big. IN A 10.10.44.13 +biganswer.big. IN A 10.10.44.14 +biganswer.big. IN A 10.10.44.15 +biganswer.big. IN A 10.10.44.16 +biganswer.big. IN A 10.10.44.17 +biganswer.big. IN A 10.10.44.18 +biganswer.big. IN A 10.10.44.19 +biganswer.big. IN A 10.10.44.20 +biganswer.big. IN A 10.10.44.21 +biganswer.big. IN A 10.10.44.22 +biganswer.big. IN A 10.10.44.23 +biganswer.big. IN A 10.10.44.24 +biganswer.big. IN A 10.10.44.25 +biganswer.big. IN A 10.10.44.26 +biganswer.big. IN A 10.10.44.27 +biganswer.big. IN A 10.10.44.28 +biganswer.big. IN A 10.10.44.29 +biganswer.big. IN A 10.10.44.30 +biganswer.big. IN A 10.10.44.31 +biganswer.big. IN A 10.10.44.32 +biganswer.big. IN A 10.10.44.33 +biganswer.big. IN A 10.10.44.34 +biganswer.big. IN A 10.10.44.35 +biganswer.big. IN A 10.10.44.36 +biganswer.big. IN A 10.10.44.37 +biganswer.big. IN A 10.10.44.38 +biganswer.big. IN A 10.10.44.39 +biganswer.big. IN A 10.10.44.40 +biganswer.big. IN A 10.10.44.41 +biganswer.big. IN A 10.10.44.42 +biganswer.big. IN A 10.10.44.43 +biganswer.big. IN A 10.10.44.44 +biganswer.big. IN A 10.10.44.45 +biganswer.big. IN A 10.10.44.46 +biganswer.big. IN A 10.10.44.47 +biganswer.big. IN A 10.10.44.48 +biganswer.big. IN A 10.10.44.49 +biganswer.big. IN A 10.10.44.50 +biganswer.big. IN A 10.10.45.1 +biganswer.big. IN A 10.10.45.2 +biganswer.big. IN A 10.10.45.3 +biganswer.big. IN A 10.10.45.4 +biganswer.big. IN A 10.10.45.5 +biganswer.big. IN A 10.10.45.6 +biganswer.big. IN A 10.10.45.7 +biganswer.big. IN A 10.10.45.8 +biganswer.big. IN A 10.10.45.9 +biganswer.big. IN A 10.10.45.10 +biganswer.big. IN A 10.10.45.11 +biganswer.big. IN A 10.10.45.12 +biganswer.big. IN A 10.10.45.13 +biganswer.big. IN A 10.10.45.14 +biganswer.big. IN A 10.10.45.15 +biganswer.big. IN A 10.10.45.16 +biganswer.big. IN A 10.10.45.17 +biganswer.big. IN A 10.10.45.18 +biganswer.big. IN A 10.10.45.19 +biganswer.big. IN A 10.10.45.20 +biganswer.big. IN A 10.10.45.21 +biganswer.big. IN A 10.10.45.22 +biganswer.big. IN A 10.10.45.23 +biganswer.big. IN A 10.10.45.24 +biganswer.big. IN A 10.10.45.25 +biganswer.big. IN A 10.10.45.26 +biganswer.big. IN A 10.10.45.27 +biganswer.big. IN A 10.10.45.28 +biganswer.big. IN A 10.10.45.29 +biganswer.big. IN A 10.10.45.30 +biganswer.big. IN A 10.10.45.31 +biganswer.big. IN A 10.10.45.32 +biganswer.big. IN A 10.10.45.33 +biganswer.big. IN A 10.10.45.34 +biganswer.big. IN A 10.10.45.35 +biganswer.big. IN A 10.10.45.36 +biganswer.big. IN A 10.10.45.37 +biganswer.big. IN A 10.10.45.38 +biganswer.big. IN A 10.10.45.39 +biganswer.big. IN A 10.10.45.40 +biganswer.big. IN A 10.10.45.41 +biganswer.big. IN A 10.10.45.42 +biganswer.big. IN A 10.10.45.43 +biganswer.big. IN A 10.10.45.44 +biganswer.big. IN A 10.10.45.45 +biganswer.big. IN A 10.10.45.46 +biganswer.big. IN A 10.10.45.47 +biganswer.big. IN A 10.10.45.48 +biganswer.big. IN A 10.10.45.49 +biganswer.big. IN A 10.10.45.50 +biganswer.big. IN A 10.10.46.1 +biganswer.big. IN A 10.10.46.2 +biganswer.big. IN A 10.10.46.3 +biganswer.big. IN A 10.10.46.4 +biganswer.big. IN A 10.10.46.5 +biganswer.big. IN A 10.10.46.6 +biganswer.big. IN A 10.10.46.7 +biganswer.big. IN A 10.10.46.8 +biganswer.big. IN A 10.10.46.9 +biganswer.big. IN A 10.10.46.10 +biganswer.big. IN A 10.10.46.11 +biganswer.big. IN A 10.10.46.12 +biganswer.big. IN A 10.10.46.13 +biganswer.big. IN A 10.10.46.14 +biganswer.big. IN A 10.10.46.15 +biganswer.big. IN A 10.10.46.16 +biganswer.big. IN A 10.10.46.17 +biganswer.big. IN A 10.10.46.18 +biganswer.big. IN A 10.10.46.19 +biganswer.big. IN A 10.10.46.20 +biganswer.big. IN A 10.10.46.21 +biganswer.big. IN A 10.10.46.22 +biganswer.big. IN A 10.10.46.23 +biganswer.big. IN A 10.10.46.24 +biganswer.big. IN A 10.10.46.25 +biganswer.big. IN A 10.10.46.26 +biganswer.big. IN A 10.10.46.27 +biganswer.big. IN A 10.10.46.28 +biganswer.big. IN A 10.10.46.29 +biganswer.big. IN A 10.10.46.30 +biganswer.big. IN A 10.10.46.31 +biganswer.big. IN A 10.10.46.32 +biganswer.big. IN A 10.10.46.33 +biganswer.big. IN A 10.10.46.34 +biganswer.big. IN A 10.10.46.35 +biganswer.big. IN A 10.10.46.36 +biganswer.big. IN A 10.10.46.37 +biganswer.big. IN A 10.10.46.38 +biganswer.big. IN A 10.10.46.39 +biganswer.big. IN A 10.10.46.40 +biganswer.big. IN A 10.10.46.41 +biganswer.big. IN A 10.10.46.42 +biganswer.big. IN A 10.10.46.43 +biganswer.big. IN A 10.10.46.44 +biganswer.big. IN A 10.10.46.45 +biganswer.big. IN A 10.10.46.46 +biganswer.big. IN A 10.10.46.47 +biganswer.big. IN A 10.10.46.48 +biganswer.big. IN A 10.10.46.49 +biganswer.big. IN A 10.10.46.50 +biganswer.big. IN A 10.10.47.1 +biganswer.big. IN A 10.10.47.2 +biganswer.big. IN A 10.10.47.3 +biganswer.big. IN A 10.10.47.4 +biganswer.big. IN A 10.10.47.5 +biganswer.big. IN A 10.10.47.6 +biganswer.big. IN A 10.10.47.7 +biganswer.big. IN A 10.10.47.8 +biganswer.big. IN A 10.10.47.9 +biganswer.big. IN A 10.10.47.10 +biganswer.big. IN A 10.10.47.11 +biganswer.big. IN A 10.10.47.12 +biganswer.big. IN A 10.10.47.13 +biganswer.big. IN A 10.10.47.14 +biganswer.big. IN A 10.10.47.15 +biganswer.big. IN A 10.10.47.16 +biganswer.big. IN A 10.10.47.17 +biganswer.big. IN A 10.10.47.18 +biganswer.big. IN A 10.10.47.19 +biganswer.big. IN A 10.10.47.20 +biganswer.big. IN A 10.10.47.21 +biganswer.big. IN A 10.10.47.22 +biganswer.big. IN A 10.10.47.23 +biganswer.big. IN A 10.10.47.24 +biganswer.big. IN A 10.10.47.25 +biganswer.big. IN A 10.10.47.26 +biganswer.big. IN A 10.10.47.27 +biganswer.big. IN A 10.10.47.28 +biganswer.big. IN A 10.10.47.29 +biganswer.big. IN A 10.10.47.30 +biganswer.big. IN A 10.10.47.31 +biganswer.big. IN A 10.10.47.32 +biganswer.big. IN A 10.10.47.33 +biganswer.big. IN A 10.10.47.34 +biganswer.big. IN A 10.10.47.35 +biganswer.big. IN A 10.10.47.36 +biganswer.big. IN A 10.10.47.37 +biganswer.big. IN A 10.10.47.38 +biganswer.big. IN A 10.10.47.39 +biganswer.big. IN A 10.10.47.40 +biganswer.big. IN A 10.10.47.41 +biganswer.big. IN A 10.10.47.42 +biganswer.big. IN A 10.10.47.43 +biganswer.big. IN A 10.10.47.44 +biganswer.big. IN A 10.10.47.45 +biganswer.big. IN A 10.10.47.46 +biganswer.big. IN A 10.10.47.47 +biganswer.big. IN A 10.10.47.48 +biganswer.big. IN A 10.10.47.49 +biganswer.big. IN A 10.10.47.50 +biganswer.big. IN A 10.10.48.1 +biganswer.big. IN A 10.10.48.2 +biganswer.big. IN A 10.10.48.3 +biganswer.big. IN A 10.10.48.4 +biganswer.big. IN A 10.10.48.5 +biganswer.big. IN A 10.10.48.6 +biganswer.big. IN A 10.10.48.7 +biganswer.big. IN A 10.10.48.8 +biganswer.big. IN A 10.10.48.9 +biganswer.big. IN A 10.10.48.10 +biganswer.big. IN A 10.10.48.11 +biganswer.big. IN A 10.10.48.12 +biganswer.big. IN A 10.10.48.13 +biganswer.big. IN A 10.10.48.14 +biganswer.big. IN A 10.10.48.15 +biganswer.big. IN A 10.10.48.16 +biganswer.big. IN A 10.10.48.17 +biganswer.big. IN A 10.10.48.18 +biganswer.big. IN A 10.10.48.19 +biganswer.big. IN A 10.10.48.20 +biganswer.big. IN A 10.10.48.21 +biganswer.big. IN A 10.10.48.22 +biganswer.big. IN A 10.10.48.23 +biganswer.big. IN A 10.10.48.24 +biganswer.big. IN A 10.10.48.25 +biganswer.big. IN A 10.10.48.26 +biganswer.big. IN A 10.10.48.27 +biganswer.big. IN A 10.10.48.28 +biganswer.big. IN A 10.10.48.29 +biganswer.big. IN A 10.10.48.30 +biganswer.big. IN A 10.10.48.31 +biganswer.big. IN A 10.10.48.32 +biganswer.big. IN A 10.10.48.33 +biganswer.big. IN A 10.10.48.34 +biganswer.big. IN A 10.10.48.35 +biganswer.big. IN A 10.10.48.36 +biganswer.big. IN A 10.10.48.37 +biganswer.big. IN A 10.10.48.38 +biganswer.big. IN A 10.10.48.39 +biganswer.big. IN A 10.10.48.40 +biganswer.big. IN A 10.10.48.41 +biganswer.big. IN A 10.10.48.42 +biganswer.big. IN A 10.10.48.43 +biganswer.big. IN A 10.10.48.44 +biganswer.big. IN A 10.10.48.45 +biganswer.big. IN A 10.10.48.46 +biganswer.big. IN A 10.10.48.47 +biganswer.big. IN A 10.10.48.48 +biganswer.big. IN A 10.10.48.49 +biganswer.big. IN A 10.10.48.50 +biganswer.big. IN A 10.10.49.1 +biganswer.big. IN A 10.10.49.2 +biganswer.big. IN A 10.10.49.3 +biganswer.big. IN A 10.10.49.4 +biganswer.big. IN A 10.10.49.5 +biganswer.big. IN A 10.10.49.6 +biganswer.big. IN A 10.10.49.7 +biganswer.big. IN A 10.10.49.8 +biganswer.big. IN A 10.10.49.9 +biganswer.big. IN A 10.10.49.10 +biganswer.big. IN A 10.10.49.11 +biganswer.big. IN A 10.10.49.12 +biganswer.big. IN A 10.10.49.13 +biganswer.big. IN A 10.10.49.14 +biganswer.big. IN A 10.10.49.15 +biganswer.big. IN A 10.10.49.16 +biganswer.big. IN A 10.10.49.17 +biganswer.big. IN A 10.10.49.18 +biganswer.big. IN A 10.10.49.19 +biganswer.big. IN A 10.10.49.20 +biganswer.big. IN A 10.10.49.21 +biganswer.big. IN A 10.10.49.22 +biganswer.big. IN A 10.10.49.23 +biganswer.big. IN A 10.10.49.24 +biganswer.big. IN A 10.10.49.25 +biganswer.big. IN A 10.10.49.26 +biganswer.big. IN A 10.10.49.27 +biganswer.big. IN A 10.10.49.28 +biganswer.big. IN A 10.10.49.29 +biganswer.big. IN A 10.10.49.30 +biganswer.big. IN A 10.10.49.31 +biganswer.big. IN A 10.10.49.32 +biganswer.big. IN A 10.10.49.33 +biganswer.big. IN A 10.10.49.34 +biganswer.big. IN A 10.10.49.35 +biganswer.big. IN A 10.10.49.36 +biganswer.big. IN A 10.10.49.37 +biganswer.big. IN A 10.10.49.38 +biganswer.big. IN A 10.10.49.39 +biganswer.big. IN A 10.10.49.40 +biganswer.big. IN A 10.10.49.41 +biganswer.big. IN A 10.10.49.42 +biganswer.big. IN A 10.10.49.43 +biganswer.big. IN A 10.10.49.44 +biganswer.big. IN A 10.10.49.45 +biganswer.big. IN A 10.10.49.46 +biganswer.big. IN A 10.10.49.47 +biganswer.big. IN A 10.10.49.48 +biganswer.big. IN A 10.10.49.49 +biganswer.big. IN A 10.10.49.50 +biganswer.big. IN A 10.10.50.1 +biganswer.big. IN A 10.10.50.2 +biganswer.big. IN A 10.10.50.3 +biganswer.big. IN A 10.10.50.4 +biganswer.big. IN A 10.10.50.5 +biganswer.big. IN A 10.10.50.6 +biganswer.big. IN A 10.10.50.7 +biganswer.big. IN A 10.10.50.8 +biganswer.big. IN A 10.10.50.9 +biganswer.big. IN A 10.10.50.10 +biganswer.big. IN A 10.10.50.11 +biganswer.big. IN A 10.10.50.12 +biganswer.big. IN A 10.10.50.13 +biganswer.big. IN A 10.10.50.14 +biganswer.big. IN A 10.10.50.15 +biganswer.big. IN A 10.10.50.16 +biganswer.big. IN A 10.10.50.17 +biganswer.big. IN A 10.10.50.18 +biganswer.big. IN A 10.10.50.19 +biganswer.big. IN A 10.10.50.20 +biganswer.big. IN A 10.10.50.21 +biganswer.big. IN A 10.10.50.22 +biganswer.big. IN A 10.10.50.23 +biganswer.big. IN A 10.10.50.24 +biganswer.big. IN A 10.10.50.25 +biganswer.big. IN A 10.10.50.26 +biganswer.big. IN A 10.10.50.27 +biganswer.big. IN A 10.10.50.28 +biganswer.big. IN A 10.10.50.29 +biganswer.big. IN A 10.10.50.30 +biganswer.big. IN A 10.10.50.31 +biganswer.big. IN A 10.10.50.32 +biganswer.big. IN A 10.10.50.33 +biganswer.big. IN A 10.10.50.34 +biganswer.big. IN A 10.10.50.35 +biganswer.big. IN A 10.10.50.36 +biganswer.big. IN A 10.10.50.37 +biganswer.big. IN A 10.10.50.38 +biganswer.big. IN A 10.10.50.39 +biganswer.big. IN A 10.10.50.40 +biganswer.big. IN A 10.10.50.41 +biganswer.big. IN A 10.10.50.42 +biganswer.big. IN A 10.10.50.43 +biganswer.big. IN A 10.10.50.44 +biganswer.big. IN A 10.10.50.45 +biganswer.big. IN A 10.10.50.46 +biganswer.big. IN A 10.10.50.47 +biganswer.big. IN A 10.10.50.48 +biganswer.big. IN A 10.10.50.49 +biganswer.big. IN A 10.10.50.50 + +manytypes.big. IN TYPE65280 \# 0 +manytypes.big. IN TYPE65281 \# 0 +manytypes.big. IN TYPE65282 \# 0 +manytypes.big. IN TYPE65283 \# 0 +manytypes.big. IN TYPE65284 \# 0 +manytypes.big. IN TYPE65285 \# 0 +manytypes.big. IN TYPE65286 \# 0 +manytypes.big. IN TYPE65287 \# 0 +manytypes.big. IN TYPE65288 \# 0 +manytypes.big. IN TYPE65289 \# 0 +manytypes.big. IN TYPE65290 \# 0 +manytypes.big. IN TYPE65291 \# 0 +manytypes.big. IN TYPE65292 \# 0 +manytypes.big. IN TYPE65293 \# 0 +manytypes.big. IN TYPE65294 \# 0 +manytypes.big. IN TYPE65295 \# 0 +manytypes.big. IN TYPE65296 \# 0 +manytypes.big. IN TYPE65297 \# 0 +manytypes.big. IN TYPE65298 \# 0 +manytypes.big. IN TYPE65299 \# 0 +manytypes.big. IN TYPE65300 \# 0 +manytypes.big. IN TYPE65301 \# 0 +manytypes.big. IN TYPE65302 \# 0 +manytypes.big. IN TYPE65303 \# 0 +manytypes.big. IN TYPE65304 \# 0 +manytypes.big. IN TYPE65305 \# 0 +manytypes.big. IN TYPE65306 \# 0 +manytypes.big. IN TYPE65307 \# 0 +manytypes.big. IN TYPE65308 \# 0 +manytypes.big. IN TYPE65309 \# 0 +manytypes.big. IN TYPE65310 \# 0 +manytypes.big. IN TYPE65311 \# 0 +manytypes.big. IN TYPE65312 \# 0 +manytypes.big. IN TYPE65313 \# 0 +manytypes.big. IN TYPE65314 \# 0 +manytypes.big. IN TYPE65315 \# 0 +manytypes.big. IN TYPE65316 \# 0 +manytypes.big. IN TYPE65317 \# 0 +manytypes.big. IN TYPE65318 \# 0 +manytypes.big. IN TYPE65319 \# 0 +manytypes.big. IN TYPE65320 \# 0 +manytypes.big. IN TYPE65321 \# 0 +manytypes.big. IN TYPE65322 \# 0 +manytypes.big. IN TYPE65323 \# 0 +manytypes.big. IN TYPE65324 \# 0 +manytypes.big. IN TYPE65325 \# 0 +manytypes.big. IN TYPE65326 \# 0 +manytypes.big. IN TYPE65327 \# 0 +manytypes.big. IN TYPE65328 \# 0 +manytypes.big. IN TYPE65329 \# 0 +manytypes.big. IN TYPE65330 \# 0 +manytypes.big. IN TYPE65331 \# 0 +manytypes.big. IN TYPE65332 \# 0 +manytypes.big. IN TYPE65333 \# 0 +manytypes.big. IN TYPE65334 \# 0 +manytypes.big. IN TYPE65335 \# 0 +manytypes.big. IN TYPE65336 \# 0 +manytypes.big. IN TYPE65337 \# 0 +manytypes.big. IN TYPE65338 \# 0 +manytypes.big. IN TYPE65339 \# 0 +manytypes.big. IN TYPE65340 \# 0 +manytypes.big. IN TYPE65341 \# 0 +manytypes.big. IN TYPE65342 \# 0 +manytypes.big. IN TYPE65343 \# 0 +manytypes.big. IN TYPE65344 \# 0 +manytypes.big. IN TYPE65345 \# 0 +manytypes.big. IN TYPE65346 \# 0 +manytypes.big. IN TYPE65347 \# 0 +manytypes.big. IN TYPE65348 \# 0 +manytypes.big. IN TYPE65349 \# 0 +manytypes.big. IN TYPE65350 \# 0 +manytypes.big. IN TYPE65351 \# 0 +manytypes.big. IN TYPE65352 \# 0 +manytypes.big. IN TYPE65353 \# 0 +manytypes.big. IN TYPE65354 \# 0 +manytypes.big. IN TYPE65355 \# 0 +manytypes.big. IN TYPE65356 \# 0 +manytypes.big. IN TYPE65357 \# 0 +manytypes.big. IN TYPE65358 \# 0 +manytypes.big. IN TYPE65359 \# 0 +manytypes.big. IN TYPE65360 \# 0 +manytypes.big. IN TYPE65361 \# 0 +manytypes.big. IN TYPE65362 \# 0 +manytypes.big. IN TYPE65363 \# 0 +manytypes.big. IN TYPE65364 \# 0 +manytypes.big. IN TYPE65365 \# 0 +manytypes.big. IN TYPE65366 \# 0 +manytypes.big. IN TYPE65367 \# 0 +manytypes.big. IN TYPE65368 \# 0 +manytypes.big. IN TYPE65369 \# 0 +manytypes.big. IN TYPE65370 \# 0 +manytypes.big. IN TYPE65371 \# 0 +manytypes.big. IN TYPE65372 \# 0 +manytypes.big. IN TYPE65373 \# 0 +manytypes.big. IN TYPE65374 \# 0 +manytypes.big. IN TYPE65375 \# 0 +manytypes.big. IN TYPE65376 \# 0 +manytypes.big. IN TYPE65377 \# 0 +manytypes.big. IN TYPE65378 \# 0 +manytypes.big. IN TYPE65379 \# 0 +manytypes.big. IN TYPE65380 \# 0 +manytypes.big. IN TYPE65381 \# 0 +manytypes.big. IN TYPE65382 \# 0 +manytypes.big. IN TYPE65383 \# 0 +manytypes.big. IN TYPE65384 \# 0 +manytypes.big. IN TYPE65385 \# 0 +manytypes.big. IN TYPE65386 \# 0 +manytypes.big. IN TYPE65387 \# 0 +manytypes.big. IN TYPE65388 \# 0 +manytypes.big. IN TYPE65389 \# 0 +manytypes.big. IN TYPE65390 \# 0 +manytypes.big. IN TYPE65391 \# 0 +manytypes.big. IN TYPE65392 \# 0 +manytypes.big. IN TYPE65393 \# 0 +manytypes.big. IN TYPE65394 \# 0 +manytypes.big. IN TYPE65395 \# 0 +manytypes.big. IN TYPE65396 \# 0 +manytypes.big. IN TYPE65397 \# 0 +manytypes.big. IN TYPE65398 \# 0 +manytypes.big. IN TYPE65399 \# 0 +manytypes.big. IN TYPE65400 \# 0 +manytypes.big. IN TYPE65401 \# 0 +manytypes.big. IN TYPE65402 \# 0 +manytypes.big. IN TYPE65403 \# 0 +manytypes.big. IN TYPE65404 \# 0 +manytypes.big. IN TYPE65405 \# 0 +manytypes.big. IN TYPE65406 \# 0 +manytypes.big. IN TYPE65407 \# 0 +manytypes.big. IN TYPE65408 \# 0 +manytypes.big. IN TYPE65409 \# 0 +manytypes.big. IN TYPE65410 \# 0 +manytypes.big. IN TYPE65411 \# 0 +manytypes.big. IN TYPE65412 \# 0 +manytypes.big. IN TYPE65413 \# 0 +manytypes.big. IN TYPE65414 \# 0 +manytypes.big. IN TYPE65415 \# 0 +manytypes.big. IN TYPE65416 \# 0 +manytypes.big. IN TYPE65417 \# 0 +manytypes.big. IN TYPE65418 \# 0 +manytypes.big. IN TYPE65419 \# 0 +manytypes.big. IN TYPE65420 \# 0 +manytypes.big. IN TYPE65421 \# 0 +manytypes.big. IN TYPE65422 \# 0 +manytypes.big. IN TYPE65423 \# 0 +manytypes.big. IN TYPE65424 \# 0 +manytypes.big. IN TYPE65425 \# 0 +manytypes.big. IN TYPE65426 \# 0 +manytypes.big. IN TYPE65427 \# 0 +manytypes.big. IN TYPE65428 \# 0 +manytypes.big. IN TYPE65429 \# 0 +manytypes.big. IN TYPE65430 \# 0 +manytypes.big. IN TYPE65431 \# 0 +manytypes.big. IN TYPE65432 \# 0 +manytypes.big. IN TYPE65433 \# 0 +manytypes.big. IN TYPE65434 \# 0 +manytypes.big. IN TYPE65435 \# 0 +manytypes.big. IN TYPE65436 \# 0 +manytypes.big. IN TYPE65437 \# 0 +manytypes.big. IN TYPE65438 \# 0 +manytypes.big. IN TYPE65439 \# 0 +manytypes.big. IN TYPE65440 \# 0 +manytypes.big. IN TYPE65441 \# 0 +manytypes.big. IN TYPE65442 \# 0 +manytypes.big. IN TYPE65443 \# 0 +manytypes.big. IN TYPE65444 \# 0 +manytypes.big. IN TYPE65445 \# 0 +manytypes.big. IN TYPE65446 \# 0 +manytypes.big. IN TYPE65447 \# 0 +manytypes.big. IN TYPE65448 \# 0 +manytypes.big. IN TYPE65449 \# 0 +manytypes.big. IN TYPE65450 \# 0 +manytypes.big. IN TYPE65451 \# 0 +manytypes.big. IN TYPE65452 \# 0 +manytypes.big. IN TYPE65453 \# 0 +manytypes.big. IN TYPE65454 \# 0 +manytypes.big. IN TYPE65455 \# 0 +manytypes.big. IN TYPE65456 \# 0 +manytypes.big. IN TYPE65457 \# 0 +manytypes.big. IN TYPE65458 \# 0 +manytypes.big. IN TYPE65459 \# 0 +manytypes.big. IN TYPE65460 \# 0 +manytypes.big. IN TYPE65461 \# 0 +manytypes.big. IN TYPE65462 \# 0 +manytypes.big. IN TYPE65463 \# 0 +manytypes.big. IN TYPE65464 \# 0 +manytypes.big. IN TYPE65465 \# 0 +manytypes.big. IN TYPE65466 \# 0 +manytypes.big. IN TYPE65467 \# 0 +manytypes.big. IN TYPE65468 \# 0 +manytypes.big. IN TYPE65469 \# 0 +manytypes.big. IN TYPE65470 \# 0 +manytypes.big. IN TYPE65471 \# 0 +manytypes.big. IN TYPE65472 \# 0 +manytypes.big. IN TYPE65473 \# 0 +manytypes.big. IN TYPE65474 \# 0 +manytypes.big. IN TYPE65475 \# 0 +manytypes.big. IN TYPE65476 \# 0 +manytypes.big. IN TYPE65477 \# 0 +manytypes.big. IN TYPE65478 \# 0 +manytypes.big. IN TYPE65479 \# 0 +manytypes.big. IN TYPE65480 \# 0 +manytypes.big. IN TYPE65481 \# 0 +manytypes.big. IN TYPE65482 \# 0 +manytypes.big. IN TYPE65483 \# 0 +manytypes.big. IN TYPE65484 \# 0 +manytypes.big. IN TYPE65485 \# 0 +manytypes.big. IN TYPE65486 \# 0 +manytypes.big. IN TYPE65487 \# 0 +manytypes.big. IN TYPE65488 \# 0 +manytypes.big. IN TYPE65489 \# 0 +manytypes.big. IN TYPE65490 \# 0 +manytypes.big. IN TYPE65491 \# 0 +manytypes.big. IN TYPE65492 \# 0 +manytypes.big. IN TYPE65493 \# 0 +manytypes.big. IN TYPE65494 \# 0 +manytypes.big. IN TYPE65495 \# 0 +manytypes.big. IN TYPE65496 \# 0 +manytypes.big. IN TYPE65497 \# 0 +manytypes.big. IN TYPE65498 \# 0 +manytypes.big. IN TYPE65499 \# 0 +manytypes.big. IN TYPE65500 \# 0 +manytypes.big. IN TYPE65501 \# 0 +manytypes.big. IN TYPE65502 \# 0 +manytypes.big. IN TYPE65503 \# 0 +manytypes.big. IN TYPE65504 \# 0 +manytypes.big. IN TYPE65505 \# 0 +manytypes.big. IN TYPE65506 \# 0 +manytypes.big. IN TYPE65507 \# 0 +manytypes.big. IN TYPE65508 \# 0 +manytypes.big. IN TYPE65509 \# 0 +manytypes.big. IN TYPE65510 \# 0 +manytypes.big. IN TYPE65511 \# 0 +manytypes.big. IN TYPE65512 \# 0 +manytypes.big. IN TYPE65513 \# 0 +manytypes.big. IN TYPE65514 \# 0 +manytypes.big. IN TYPE65515 \# 0 +manytypes.big. IN TYPE65516 \# 0 +manytypes.big. IN TYPE65517 \# 0 +manytypes.big. IN TYPE65518 \# 0 +manytypes.big. IN TYPE65519 \# 0 +manytypes.big. IN TYPE65520 \# 0 +manytypes.big. IN TYPE65521 \# 0 +manytypes.big. IN TYPE65522 \# 0 +manytypes.big. IN TYPE65523 \# 0 +manytypes.big. IN TYPE65524 \# 0 +manytypes.big. IN TYPE65525 \# 0 +manytypes.big. IN TYPE65526 \# 0 +manytypes.big. IN TYPE65527 \# 0 +manytypes.big. IN TYPE65528 \# 0 +manytypes.big. IN TYPE65529 \# 0 +manytypes.big. IN TYPE65530 \# 0 +manytypes.big. IN TYPE65531 \# 0 +manytypes.big. IN TYPE65532 \# 0 +manytypes.big. IN TYPE65533 \# 0 +manytypes.big. IN TYPE65534 \# 0 +manytypes.big. IN A 10.53.0.1 diff --git a/bin/tests/system/reclimit/ns1/named.conf.in b/bin/tests/system/reclimit/ns1/named.conf.in index 00fa44b3ba..e07cbe9258 100644 --- a/bin/tests/system/reclimit/ns1/named.conf.in +++ b/bin/tests/system/reclimit/ns1/named.conf.in @@ -20,6 +20,18 @@ options { listen-on-v6 { none; }; recursion no; dnssec-validation no; + max-records-per-type 0; + max-types-per-name 0; }; zone "." { type master; file "root.db"; }; + +zone "big." { + type master; + file "big.db"; +}; + +zone "signed." { + type master; + file "signed.db.signed"; +}; diff --git a/bin/tests/system/reclimit/ns1/root.db b/bin/tests/system/reclimit/ns1/root.db index 3a6f7880ba..d0aa5296bf 100644 --- a/bin/tests/system/reclimit/ns1/root.db +++ b/bin/tests/system/reclimit/ns1/root.db @@ -17,3 +17,9 @@ example.net. 60 IN NS direct.example.net. direct.example.net. 60 IN A 10.53.0.2 example.com. 60 IN NS direct.example.com. direct.example.com. 60 IN A 10.53.0.4 + +big. IN NS ns.big. +ns.big. 60 IN A 10.53.0.1 + +signed. IN NS ns.signed. +ns.signed. 60 IN A 10.53.0.1 diff --git a/bin/tests/system/reclimit/ns3/named5.conf.in b/bin/tests/system/reclimit/ns3/named5.conf.in new file mode 100644 index 0000000000..7cf0633a00 --- /dev/null +++ b/bin/tests/system/reclimit/ns3/named5.conf.in @@ -0,0 +1,43 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +options { + directory "."; + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port @PORT@; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + servfail-ttl 0; + qname-minimization disabled; + max-recursion-depth 12; + recursion yes; + dnssec-validation yes; + max-records-per-type 0; + max-types-per-name 10; +}; + +trust-anchors { }; + +key rndc_key { + secret "1234abcd8765"; + algorithm @DEFAULT_HMAC@; +}; + +controls { + inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; +}; + +zone "." { type hint; file "hints.db"; }; diff --git a/bin/tests/system/reclimit/ns3/named6.conf.in b/bin/tests/system/reclimit/ns3/named6.conf.in new file mode 100644 index 0000000000..e1607e275d --- /dev/null +++ b/bin/tests/system/reclimit/ns3/named6.conf.in @@ -0,0 +1,43 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +options { + directory "."; + query-source address 10.53.0.3; + notify-source 10.53.0.3; + transfer-source 10.53.0.3; + port @PORT@; + pid-file "named.pid"; + listen-on { 10.53.0.3; }; + listen-on-v6 { none; }; + servfail-ttl 0; + qname-minimization disabled; + max-recursion-depth 12; + recursion yes; + dnssec-validation yes; + max-records-per-type 0; + max-types-per-name 0; +}; + +trust-anchors { }; + +key rndc_key { + secret "1234abcd8765"; + algorithm @DEFAULT_HMAC@; +}; + +controls { + inet 10.53.0.3 port @CONTROLPORT@ allow { any; } keys { rndc_key; }; +}; + +zone "." { type hint; file "hints.db"; }; diff --git a/bin/tests/system/reclimit/setup.sh b/bin/tests/system/reclimit/setup.sh index d09a01250f..c16829916b 100644 --- a/bin/tests/system/reclimit/setup.sh +++ b/bin/tests/system/reclimit/setup.sh @@ -14,3 +14,8 @@ SYSTEMTESTTOP=.. copy_setports ns1/named.conf.in ns1/named.conf copy_setports ns3/named1.conf.in ns3/named.conf + +sed -e s/big[.]/signed./g <ns1/big.db >ns1/signed.db +$KEYGEN -K ns1 -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" -f KSK signed >/dev/null 2>&1 +$KEYGEN -K ns1 -q -a "$DEFAULT_ALGORITHM" -b "$DEFAULT_BITS" signed >/dev/null 2>&1 +$SIGNER -K ns1 -S -f ns1/signed.db.signed -o signed ns1/signed.db >/dev/null diff --git a/bin/tests/system/reclimit/tests.sh b/bin/tests/system/reclimit/tests.sh index 9a30a20445..14aa1f9301 100644 --- a/bin/tests/system/reclimit/tests.sh +++ b/bin/tests/system/reclimit/tests.sh @@ -12,7 +12,9 @@ SYSTEMTESTTOP=.. . $SYSTEMTESTTOP/conf.sh -DIGOPTS="-p ${PORT}" +dig_with_opts() { + $DIG -p "${PORT}" +retries=0 "$@" +} status=0 n=0 @@ -23,6 +25,10 @@ ns3_reset() { $RNDC -c ../common/rndc.conf -s 10.53.0.3 -p ${CONTROLPORT} flush | sed 's/^/I:ns3 /' } +ns3_flush() { + $RNDC -c ../common/rndc.conf -s 10.53.0.3 -p ${CONTROLPORT} flush | sed 's/^/I:ns3 /' +} + ns3_sends_aaaa_queries() { if grep "started AAAA fetch" ns3/named.run >/dev/null; then return 0 @@ -61,14 +67,14 @@ echo_i "set max-recursion-depth=12" n=`expr $n + 1` echo_i "attempt excessive-depth lookup ($n)" ret=0 -echo "1000" > ans2/ans.limit -echo "1000" > ans4/ans.limit -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.3 indirect1.example.org > dig.out.1.test$n || ret=1 -grep "status: SERVFAIL" dig.out.1.test$n > /dev/null || ret=1 -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 +echo "1000" >ans2/ans.limit +echo "1000" >ans4/ans.limit +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.3 indirect1.example.org >dig.out.1.test$n || ret=1 +grep "status: SERVFAIL" dig.out.1.test$n >/dev/null || ret=1 +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 check_query_count dig.out.2.test$n dig.out.4.test$n 27 14 if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` @@ -79,12 +85,12 @@ ret=0 echo "12" > ans2/ans.limit echo "12" > ans4/ans.limit ns3_reset ns3/named1.conf.in -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.3 indirect2.example.org > dig.out.1.test$n || ret=1 -grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1 -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.3 indirect2.example.org >dig.out.1.test$n || ret=1 +grep "status: NOERROR" dig.out.1.test$n >/dev/null || ret=1 +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 check_query_count dig.out.2.test$n dig.out.4.test$n 50 26 if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` @@ -96,12 +102,12 @@ echo_i "attempt excessive-depth lookup ($n)" ret=0 echo "12" > ans2/ans.limit ns3_reset ns3/named2.conf.in -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.3 indirect3.example.org > dig.out.1.test$n || ret=1 -grep "status: SERVFAIL" dig.out.1.test$n > /dev/null || ret=1 -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.3 indirect3.example.org >dig.out.1.test$n || ret=1 +grep "status: SERVFAIL" dig.out.1.test$n >/dev/null || ret=1 +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 check_query_count dig.out.2.test$n dig.out.4.test$n 13 7 if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` @@ -112,12 +118,12 @@ ret=0 echo "5" > ans2/ans.limit echo "5" > ans4/ans.limit ns3_reset ns3/named2.conf.in -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.3 indirect4.example.org > dig.out.1.test$n || ret=1 -grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1 -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.3 indirect4.example.org >dig.out.1.test$n || ret=1 +grep "status: NOERROR" dig.out.1.test$n >/dev/null || ret=1 +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 check_query_count dig.out.2.test$n dig.out.4.test$n 22 12 if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` @@ -130,16 +136,19 @@ ret=0 echo "13" > ans2/ans.limit echo "13" > ans4/ans.limit ns3_reset ns3/named3.conf.in -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.4 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.3 indirect5.example.org > dig.out.1.test$n || ret=1 +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.4 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.3 indirect5.example.org >dig.out.1.test$n || ret=1 if ns3_sends_aaaa_queries; then grep "status: SERVFAIL" dig.out.1.test$n > /dev/null || ret=1 fi -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -$DIG $DIGOPTS +short @10.53.0.4 count txt > dig.out.4.test$n || ret=1 -eval count=`cat dig.out.2.test$n` -[ $count -le 50 ] || { ret=1; echo_i "count ($count) !<= 50"; } +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +dig_with_opts +short @10.53.0.4 count txt >dig.out.4.test$n || ret=1 +eval count=$(cat dig.out.2.test$n) +[ $count -le 50 ] || { + ret=1 + echo_i "count ($count) !<= 50" +} if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` @@ -148,12 +157,15 @@ echo_i "attempt permissible lookup ($n)" ret=0 echo "12" > ans2/ans.limit ns3_reset ns3/named3.conf.in -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.3 indirect6.example.org > dig.out.1.test$n || ret=1 -grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1 -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -eval count=`cat dig.out.2.test$n` -[ $count -le 50 ] || { ret=1; echo_i "count ($count) !<= 50"; } +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.3 indirect6.example.org >dig.out.1.test$n || ret=1 +grep "status: NOERROR" dig.out.1.test$n >/dev/null || ret=1 +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +eval count=$(cat dig.out.2.test$n) +[ $count -le 50 ] || { + ret=1 + echo_i "count ($count) !<= 50" +} if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` @@ -164,14 +176,17 @@ echo_i "attempt excessive-queries lookup ($n)" ret=0 echo "11" > ans2/ans.limit ns3_reset ns3/named4.conf.in -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.3 indirect7.example.org > dig.out.1.test$n || ret=1 +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.3 indirect7.example.org >dig.out.1.test$n || ret=1 if ns3_sends_aaaa_queries; then grep "status: SERVFAIL" dig.out.1.test$n > /dev/null || ret=1 fi -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -eval count=`cat dig.out.2.test$n` -[ $count -le 40 ] || { ret=1; echo_i "count ($count) !<= 40"; } +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +eval count=$(cat dig.out.2.test$n) +[ $count -le 40 ] || { + ret=1 + echo_i "count ($count) !<= 40" +} if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` @@ -180,12 +195,15 @@ echo_i "attempt permissible lookup ($n)" ret=0 echo "9" > ans2/ans.limit ns3_reset ns3/named4.conf.in -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS @10.53.0.3 indirect8.example.org > dig.out.1.test$n || ret=1 -grep "status: NOERROR" dig.out.1.test$n > /dev/null || ret=1 -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -eval count=`cat dig.out.2.test$n` -[ $count -le 40 ] || { ret=1; echo_i "count ($count) !<= 40"; } +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts @10.53.0.3 indirect8.example.org >dig.out.1.test$n || ret=1 +grep "status: NOERROR" dig.out.1.test$n >/dev/null || ret=1 +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +eval count=$(cat dig.out.2.test$n) +[ $count -le 40 ] || { + ret=1 + echo_i "count ($count) !<= 40" +} if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` @@ -193,17 +211,271 @@ n=`expr $n + 1` echo_i "attempting NS explosion ($n)" ret=0 ns3_reset ns3/named4.conf.in -$DIG $DIGOPTS @10.53.0.2 reset > /dev/null || ret=1 -$DIG $DIGOPTS +short @10.53.0.3 ns1.1.example.net > dig.out.1.test$n || ret=1 -$DIG $DIGOPTS +short @10.53.0.2 count txt > dig.out.2.test$n || ret=1 -eval count=`cat dig.out.2.test$n` +dig_with_opts @10.53.0.2 reset >/dev/null || ret=1 +dig_with_opts +short @10.53.0.3 ns1.1.example.net >dig.out.1.test$n || ret=1 +dig_with_opts +short @10.53.0.2 count txt >dig.out.2.test$n || ret=1 +eval count=$(cat dig.out.2.test$n) [ $count -lt 50 ] || ret=1 -$DIG $DIGOPTS +short @10.53.0.7 count txt > dig.out.3.test$n || ret=1 -eval count=`cat dig.out.3.test$n` -[ $count -lt 50 ] || { ret=1; echo_i "count ($count) !<= 50"; } +dig_with_opts +short @10.53.0.7 count txt >dig.out.3.test$n || ret=1 +eval count=$(cat dig.out.3.test$n) +[ $count -lt 50 ] || { + ret=1 + echo_i "count ($count) !<= 50" +} if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` -#grep "duplicate query" ns3/named.run +n=$((n + 1)) +echo_i "checking RRset that exceeds max-records-per-type ($n)" +ret=0 +dig_with_opts @10.53.0.3 biganswer.big >dig.out.1.test$n || ret=1 +grep 'status: SERVFAIL' dig.out.1.test$n >/dev/null || ret=1 +ns3_reset ns3/named5.conf.in +dig_with_opts @10.53.0.3 biganswer.big >dig.out.2.test$n || ret=1 +grep 'status: NOERROR' dig.out.2.test$n >/dev/null || ret=1 +if [ $ret != 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + +check_manytypes() ( + i=$1 + name=$2 + type=$3 + expected=$4 + exname=$5 + extype=$6 + ttl=$7 + neq_ttl=$8 + + if ! dig_with_opts @10.53.0.3 IN "$type" "$name" >"dig.out.$i.$type.test$n"; then + exit 1 + fi + + if ! grep 'status: '"${expected}"'' "dig.out.$i.$type.test$n" >/dev/null; then + exit 1 + fi + + if [ -n "$ttl" ] && ! grep -q "^$exname.[[:space:]]*${ttl}[[:space:]]*IN[[:space:]]*$extype" "dig.out.$i.$type.test$n"; then + exit 1 + fi + + if [ -n "${neq_ttl}" ] && grep -q "^$exname.[[:space:]]*${neq_ttl}[[:space:]]*IN[[:space:]]*$type" "dig.out.$i.$type.test$n"; then + exit 1 + fi + + exit 0 +) + +n=$((n + 1)) +ret=0 +echo_i "checking that priority names under the max-types-per-name limit get cached ($n)" + +# Query for NXDOMAIN for items on our priority list - these should get cached +for rrtype in AAAA MX NS; do + check_manytypes 1 manytypes.big "${rrtype}" NOERROR big SOA 60 || ret=1 +done +# Wait at least 1 second +for rrtype in AAAA MX NS; do + check_manytypes 2 manytypes.big "${rrtype}" NOERROR big SOA "" 60 || ret=1 +done + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +ns3_flush + +n=$((n + 1)) +ret=0 +echo_i "checking that NXDOMAIN names under the max-types-per-name limit get cached ($n)" + +# Query for 10 NXDOMAIN types +for ntype in $(seq 65270 65279); do + check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR big SOA 60 || ret=1 +done +# Wait at least 1 second +sleep 1 +# Query for 10 NXDOMAIN types again - these should be cached +for ntype in $(seq 65270 65279); do + check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR big SOA "" 60 || ret=1 +done + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +n=$((n + 1)) +ret=0 +echo_i "checking that existing names under the max-types-per-name limit get cached ($n)" + +# Limited to 10 types - these should be cached and the previous record should be evicted +for ntype in $(seq 65280 65289); do + check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 +done +# Wait at least one second +sleep 1 +# Limited to 10 types - these should be cached +for ntype in $(seq 65280 65289); do + check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" "" 60 || ret=1 +done + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +n=$((n + 1)) +ret=0 +echo_i "checking that NXDOMAIN names over the max-types-per-name limit don't get cached ($n)" + +# Query for 10 NXDOMAIN types +for ntype in $(seq 65270 65279); do + check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR big SOA 0 || ret=1 +done +# Wait at least 1 second +sleep 1 +# Query for 10 NXDOMAIN types again - these should not be cached +for ntype in $(seq 65270 65279); do + check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR big SOA 0 || ret=1 +done + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +n=$((n + 1)) +ret=0 +echo_i "checking that priority NXDOMAIN names over the max-types-per-name limit get cached ($n)" + +# Query for NXDOMAIN for items on our priority list - these should get cached +for rrtype in AAAA MX NS; do + check_manytypes 1 manytypes.big "${rrtype}" NOERROR big SOA 60 || ret=1 +done +# Wait at least 1 second +for rrtype in AAAA MX NS; do + check_manytypes 2 manytypes.big "${rrtype}" NOERROR big SOA "" 60 || ret=1 +done + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +n=$((n + 1)) +ret=0 +echo_i "checking that priority name over the max-types-per-name get cached ($n)" + +# Query for an item on our priority list - it should get cached +check_manytypes 1 manytypes.big "A" NOERROR manytypes.big A 60 || ret=1 +# Wait at least 1 second +sleep 1 +# Query the same name again - it should be in the cache +check_manytypes 2 manytypes.big "A" NOERROR big manytypes.A "" 60 || ret=1 + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +ns3_flush + +n=$((n + 1)) +ret=0 +echo_i "checking that priority name over the max-types-per-name don't get evicted ($n)" + +# Query for an item on our priority list - it should get cached +check_manytypes 1 manytypes.big "A" NOERROR manytypes.big A 60 || ret=1 +# Query for 10 more types - this should not evict A record +for ntype in $(seq 65280 65289); do + check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR manytypes.big || ret=1 +done +# Wait at least 1 second +sleep 1 +# Query the same name again - it should be in the cache +check_manytypes 2 manytypes.big "A" NOERROR manytypes.big A "" 60 || ret=1 +# This one was first in the list and should have been evicted +check_manytypes 2 manytypes.big "TYPE65280" NOERROR manytypes.big TYPE65280 60 || ret=1 + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +ns3_flush + +n=$((n + 1)) +ret=0 +echo_i "checking that non-priority types cause eviction ($n)" + +# Everything on top of that will cause the cache eviction +for ntype in $(seq 65280 65299); do + check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 +done +# Wait at least one second +sleep 1 +# These should have TTL != 60 now +for ntype in $(seq 65290 65299); do + check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" "" 60 || ret=1 +done +# These should have been evicted +for ntype in $(seq 65280 65289); do + check_manytypes 3 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 +done +# These should have been evicted by the previous block +for ntype in $(seq 65290 65299); do + check_manytypes 4 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 +done + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +ns3_flush + +n=$((n + 1)) +ret=0 +echo_i "checking that signed names under the max-types-per-name limit get cached ($n)" + +# Go through the 10 items, this should result in 20 items (type + rrsig(type)) +for ntype in $(seq 65280 65289); do + check_manytypes 1 manytypes.signed "TYPE${ntype}" NOERROR manytypes.signed "TYPE${ntype}" 60 || ret=1 +done + +# Wait at least one second +sleep 1 + +# These should have TTL != 60 now +for ntype in $(seq 65285 65289); do + check_manytypes 2 manytypes.signed "TYPE${ntype}" NOERROR manytypes.signed "TYPE${ntype}" "" 60 || ret=1 +done + +# These should have been evicted +for ntype in $(seq 65280 65284); do + check_manytypes 3 manytypes.signed "TYPE${ntype}" NOERROR manytypes.signed "TYPE${ntype}" 60 || ret=1 +done + +# These should have been evicted by the previous block +for ntype in $(seq 65285 65289); do + check_manytypes 4 manytypes.signed "TYPE${ntype}" NOERROR manytypes.signed "TYPE${ntype}" 60 || ret=1 +done + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) +if [ $status -ne 0 ]; then exit 1; fi + +n=$((n + 1)) +ret=0 +echo_i "checking that lifting the limit will allow everything to get cached ($n)" + +# Lift the limit +ns3_reset ns3/named6.conf.in + +for ntype in $(seq 65280 65534); do + check_manytypes 1 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" 60 || ret=1 +done +# Wait at least one second +sleep 1 +for ntype in $(seq 65280 65534); do + check_manytypes 2 manytypes.big "TYPE${ntype}" NOERROR manytypes.big "TYPE${ntype}" "" 60 || ret=1 +done + +if [ $ret -ne 0 ]; then echo_i "failed"; fi +status=$((status + ret)) + echo_i "exit status: $status" [ $status -eq 0 ] || exit 1 diff --git a/bin/tests/system/resolver/tests.sh b/bin/tests/system/resolver/tests.sh index 363adba4ec..2692b22c30 100755 --- a/bin/tests/system/resolver/tests.sh +++ b/bin/tests/system/resolver/tests.sh @@ -554,15 +554,20 @@ n=`expr $n + 1` echo_i "check prefetch qtype * (${n})" ret=0 $DIG $DIGOPTS @10.53.0.5 fetchall.tld any > dig.out.1.${n} || ret=1 -ttl1=`awk '/"A" "short" "ttl"/ { print $2 - 3 }' dig.out.1.${n}` +ttl1=$(awk '/^fetchall.tld/ { print $2 - 3; exit }' dig.out.1.${n}) # sleep so we are in prefetch range sleep ${ttl1:-0} # trigger prefetch $DIG $DIGOPTS @10.53.0.5 fetchall.tld any > dig.out.2.${n} || ret=1 -ttl2=`awk '/"A" "short" "ttl"/ { print $2 }' dig.out.2.${n}` +ttl2=$(awk '/^fetchall.tld/ { print $2; exit }' dig.out.2.${n}) sleep 1 +# check that prefetch occurred; +# note that only the first record is prefetched, +# because of the order of the records in the cache # check that the nameserver is still alive $DIG $DIGOPTS @10.53.0.5 fetchall.tld any > dig.out.3.${n} || ret=1 +ttl3=$(awk '/^fetchall.tld/ { print $2; exit }' dig.out.3.${n}) +test "${ttl3:-0}" -gt "${ttl2:-1}" || ret=1 if [ $ret != 0 ]; then echo_i "failed"; fi status=`expr $status + $ret` diff --git a/configure b/configure index 7374fc4584..fd3f088ac2 100755 --- a/configure +++ b/configure @@ -12307,7 +12307,7 @@ fi XTARGETS= if test "$enable_developer" = "yes"; then : - STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1" + STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1 -DDNS_RDATASET_MAX_RECORDS=5000 -DDNS_RBTDB_MAX_RTYPES=5000" test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes test "${enable_querytrace+set}" = set || enable_querytrace=yes test "${with_cmocka+set}" = set || with_cmocka=yes diff --git a/configure.ac b/configure.ac index 740935d156..e4207ff35a 100644 --- a/configure.ac +++ b/configure.ac @@ -90,7 +90,7 @@ AC_ARG_ENABLE([developer], XTARGETS= AS_IF([test "$enable_developer" = "yes"], - [STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1" + [STD_CDEFINES="$STD_CDEFINES -DISC_MEM_DEFAULTFILL=1 -DISC_LIST_CHECKINIT=1 -DDNS_RDATASET_MAX_RECORDS=5000 -DDNS_RBTDB_MAX_RTYPES=5000" test "${enable_fixed_rrset+set}" = set || enable_fixed_rrset=yes test "${enable_querytrace+set}" = set || enable_querytrace=yes test "${with_cmocka+set}" = set || with_cmocka=yes diff --git a/doc/arm/reference.rst b/doc/arm/reference.rst index f02da92a5a..9b7f60a48d 100644 --- a/doc/arm/reference.rst +++ b/doc/arm/reference.rst @@ -2822,6 +2822,30 @@ system. This sets the maximum number of records permitted in a zone. The default is zero, which means the maximum is unlimited. +``max-records-per-type`` + This sets the maximum number of resource records that can be stored + in an RRset in a database. When configured in ``options`` + or ``view``, it controls the cache database; it also sets + the default value for zone databases, which can be overridden by setting + it at the ``zone`` level. + + If set to a positive value, any attempt to cache or to add to a zone + an RRset with more than the specified number of records will result in + a failure. If set to 0, there is no cap on RRset size. The default is + 100. + +``max-types-per-name`` + This sets the maximum number of resource record types that can be stored + for a single owner name in a database. When configured in ``options`` + or ``view``, it controls the cache database, and also sets + the default value for zone databases, which can be overridden by setting + it at the ``zone`` level + + If set to a positive value, any attempt to cache or to add to a zone an owner + name with more than the specified number of resource record types will result + in a failure. If set to 0, there is no cap on RR types number. The default is + 100. + ``recursive-clients`` This sets the maximum number (a "hard quota") of simultaneous recursive lookups the server performs on behalf of clients. The default is diff --git a/doc/misc/master.zoneopt b/doc/misc/master.zoneopt index 335306f210..706541b533 100644 --- a/doc/misc/master.zoneopt +++ b/doc/misc/master.zoneopt @@ -37,8 +37,10 @@ zone <string> [ <class> ] { masterfile-style ( full | relative ); max-journal-size ( default | unlimited | <sizeval> ); max-records <integer>; + max-records-per-type <integer>; max-transfer-idle-out <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-zone-ttl ( unlimited | <duration> ); notify ( explicit | master-only | <boolean> ); notify-delay <integer>; diff --git a/doc/misc/mirror.zoneopt b/doc/misc/mirror.zoneopt index 6184d371d5..f4619cf7cc 100644 --- a/doc/misc/mirror.zoneopt +++ b/doc/misc/mirror.zoneopt @@ -18,12 +18,14 @@ zone <string> [ <class> ] { masters [ port <integer> ] [ dscp <integer> ] { ( <masters> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ]; ... }; max-journal-size ( default | unlimited | <sizeval> ); max-records <integer>; + max-records-per-type <integer>; max-refresh-time <integer>; max-retry-time <integer>; max-transfer-idle-in <integer>; max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; min-refresh-time <integer>; min-retry-time <integer>; multi-master <boolean>; diff --git a/doc/misc/options b/doc/misc/options index 77fed61410..18abf63132 100644 --- a/doc/misc/options +++ b/doc/misc/options @@ -176,7 +176,7 @@ options { unlimited | <integer> ) ] [ suffix ( increment | timestamp ) ]; // not configured dnstap-version ( <quoted_string> | none ); // not configured - dscp <integer>; + dscp <integer>; // deprecated dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port <integer> ] [ dscp <integer> ] | <ipv4_address> [ port <integer> ] [ dscp <integer> ] | <ipv6_address> [ port @@ -242,6 +242,7 @@ options { max-journal-size ( default | unlimited | <sizeval> ); max-ncache-ttl <duration>; max-records <integer>; + max-records-per-type <integer>; max-recursion-depth <integer>; max-recursion-queries <integer>; max-refresh-time <integer>; @@ -252,6 +253,7 @@ options { max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-udp-size <integer>; max-zone-ttl ( unlimited | <duration> ); memstatistics <boolean>; @@ -603,6 +605,7 @@ view <string> [ <class> ] { max-journal-size ( default | unlimited | <sizeval> ); max-ncache-ttl <duration>; max-records <integer>; + max-records-per-type <integer>; max-recursion-depth <integer>; max-recursion-queries <integer>; max-refresh-time <integer>; @@ -612,6 +615,7 @@ view <string> [ <class> ] { max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-udp-size <integer>; max-zone-ttl ( unlimited | <duration> ); message-compression <boolean>; @@ -827,12 +831,14 @@ view <string> [ <class> ] { <sizeval> ); // ancient max-journal-size ( default | unlimited | <sizeval> ); max-records <integer>; + max-records-per-type <integer>; max-refresh-time <integer>; max-retry-time <integer>; max-transfer-idle-in <integer>; max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-zone-ttl ( unlimited | <duration> ); min-refresh-time <integer>; min-retry-time <integer>; @@ -931,12 +937,14 @@ zone <string> [ <class> ] { max-ixfr-log-size ( default | unlimited | <sizeval> ); // ancient max-journal-size ( default | unlimited | <sizeval> ); max-records <integer>; + max-records-per-type <integer>; max-refresh-time <integer>; max-retry-time <integer>; max-transfer-idle-in <integer>; max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-zone-ttl ( unlimited | <duration> ); min-refresh-time <integer>; min-retry-time <integer>; diff --git a/doc/misc/options.active b/doc/misc/options.active index 500fcd8138..baa7b1d23b 100644 --- a/doc/misc/options.active +++ b/doc/misc/options.active @@ -163,7 +163,7 @@ options { unlimited | <integer> ) ] [ suffix ( increment | timestamp ) ]; // not configured dnstap-version ( <quoted_string> | none ); // not configured - dscp <integer>; + dscp <integer>; // deprecated dual-stack-servers [ port <integer> ] { ( <quoted_string> [ port <integer> ] [ dscp <integer> ] | <ipv4_address> [ port <integer> ] [ dscp <integer> ] | <ipv6_address> [ port @@ -217,6 +217,7 @@ options { max-journal-size ( default | unlimited | <sizeval> ); max-ncache-ttl <duration>; max-records <integer>; + max-records-per-type <integer>; max-recursion-depth <integer>; max-recursion-queries <integer>; max-refresh-time <integer>; @@ -227,6 +228,7 @@ options { max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-udp-size <integer>; max-zone-ttl ( unlimited | <duration> ); memstatistics <boolean>; @@ -541,6 +543,7 @@ view <string> [ <class> ] { max-journal-size ( default | unlimited | <sizeval> ); max-ncache-ttl <duration>; max-records <integer>; + max-records-per-type <integer>; max-recursion-depth <integer>; max-recursion-queries <integer>; max-refresh-time <integer>; @@ -550,6 +553,7 @@ view <string> [ <class> ] { max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-udp-size <integer>; max-zone-ttl ( unlimited | <duration> ); message-compression <boolean>; @@ -748,12 +752,14 @@ view <string> [ <class> ] { port <integer> ] ) [ key <string> ]; ... }; max-journal-size ( default | unlimited | <sizeval> ); max-records <integer>; + max-records-per-type <integer>; max-refresh-time <integer>; max-retry-time <integer>; max-transfer-idle-in <integer>; max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-zone-ttl ( unlimited | <duration> ); min-refresh-time <integer>; min-retry-time <integer>; @@ -845,12 +851,14 @@ zone <string> [ <class> ] { <integer> ] ) [ key <string> ]; ... }; max-journal-size ( default | unlimited | <sizeval> ); max-records <integer>; + max-records-per-type <integer>; max-refresh-time <integer>; max-retry-time <integer>; max-transfer-idle-in <integer>; max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; max-zone-ttl ( unlimited | <duration> ); min-refresh-time <integer>; min-retry-time <integer>; diff --git a/doc/misc/redirect.zoneopt b/doc/misc/redirect.zoneopt index 2a755de9d8..ed8822b5ea 100644 --- a/doc/misc/redirect.zoneopt +++ b/doc/misc/redirect.zoneopt @@ -8,6 +8,8 @@ zone <string> [ <class> ] { masterfile-style ( full | relative ); masters [ port <integer> ] [ dscp <integer> ] { ( <masters> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ]; ... }; max-records <integer>; + max-records-per-type <integer>; + max-types-per-name <integer>; max-zone-ttl ( unlimited | <duration> ); zone-statistics ( full | terse | none | <boolean> ); }; diff --git a/doc/misc/slave.zoneopt b/doc/misc/slave.zoneopt index 2dc3fd535c..7f806e4aef 100644 --- a/doc/misc/slave.zoneopt +++ b/doc/misc/slave.zoneopt @@ -30,12 +30,14 @@ zone <string> [ <class> ] { masters [ port <integer> ] [ dscp <integer> ] { ( <masters> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ]; ... }; max-journal-size ( default | unlimited | <sizeval> ); max-records <integer>; + max-records-per-type <integer>; max-refresh-time <integer>; max-retry-time <integer>; max-transfer-idle-in <integer>; max-transfer-idle-out <integer>; max-transfer-time-in <integer>; max-transfer-time-out <integer>; + max-types-per-name <integer>; min-refresh-time <integer>; min-retry-time <integer>; multi-master <boolean>; diff --git a/doc/misc/static-stub.zoneopt b/doc/misc/static-stub.zoneopt index f89d46248a..102b980c7a 100644 --- a/doc/misc/static-stub.zoneopt +++ b/doc/misc/static-stub.zoneopt @@ -5,6 +5,8 @@ zone <string> [ <class> ] { forward ( first | only ); forwarders [ port <integer> ] [ dscp <integer> ] { ( <ipv4_address> | <ipv6_address> ) [ port <integer> ] [ dscp <integer> ]; ... }; max-records <integer>; + max-records-per-type <integer>; + max-types-per-name <integer>; server-addresses { ( <ipv4_address> | <ipv6_address> ); ... }; server-names { <string>; ... }; zone-statistics ( full | terse | none | <boolean> ); diff --git a/doc/misc/stub.zoneopt b/doc/misc/stub.zoneopt index b18b102912..c3112189a1 100644 --- a/doc/misc/stub.zoneopt +++ b/doc/misc/stub.zoneopt @@ -13,10 +13,12 @@ zone <string> [ <class> ] { masterfile-style ( full | relative ); masters [ port <integer> ] [ dscp <integer> ] { ( <masters> | <ipv4_address> [ port <integer> ] | <ipv6_address> [ port <integer> ] ) [ key <string> ]; ... }; max-records <integer>; + max-records-per-type <integer>; max-refresh-time <integer>; max-retry-time <integer>; max-transfer-idle-in <integer>; max-transfer-time-in <integer>; + max-types-per-name <integer>; min-refresh-time <integer>; min-retry-time <integer>; multi-master <boolean>; diff --git a/lib/dns/cache.c b/lib/dns/cache.c index d32e903d08..73ff094d2b 100644 --- a/lib/dns/cache.c +++ b/lib/dns/cache.c @@ -147,6 +147,9 @@ struct dns_cache { /* Locked by 'filelock'. */ char *filename; /* Access to the on-disk cache file is also locked by 'filelock'. */ + + uint32_t maxrrperset; + uint32_t maxtypepername; }; /*** @@ -174,6 +177,8 @@ cache_create_db(dns_cache_t *cache, dns_db_t **db) { cache->db_argv, db); if (result == ISC_R_SUCCESS) { dns_db_setservestalettl(*db, cache->serve_stale_ttl); + dns_db_setmaxrrperset(*db, cache->maxrrperset); + dns_db_setmaxtypepername(*db, cache->maxtypepername); } return (result); } @@ -1253,6 +1258,26 @@ dns_cache_updatestats(dns_cache_t *cache, isc_result_t result) { } } +void +dns_cache_setmaxrrperset(dns_cache_t *cache, uint32_t value) { + REQUIRE(VALID_CACHE(cache)); + + cache->maxrrperset = value; + if (cache->db != NULL) { + dns_db_setmaxrrperset(cache->db, value); + } +} + +void +dns_cache_setmaxtypepername(dns_cache_t *cache, uint32_t value) { + REQUIRE(VALID_CACHE(cache)); + + cache->maxtypepername = value; + if (cache->db != NULL) { + dns_db_setmaxtypepername(cache->db, value); + } +} + /* * XXX: Much of the following code has been copied in from statschannel.c. * We should refactor this into a generic function in stats.c that can be diff --git a/lib/dns/db.c b/lib/dns/db.c index 148230f486..462b5d05de 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -1100,3 +1100,21 @@ dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats) { return (ISC_R_NOTIMPLEMENTED); } + +void +dns_db_setmaxrrperset(dns_db_t *db, uint32_t value) { + REQUIRE(DNS_DB_VALID(db)); + + if (db->methods->setmaxrrperset != NULL) { + (db->methods->setmaxrrperset)(db, value); + } +} + +void +dns_db_setmaxtypepername(dns_db_t *db, uint32_t value) { + REQUIRE(DNS_DB_VALID(db)); + + if (db->methods->setmaxtypepername != NULL) { + (db->methods->setmaxtypepername)(db, value); + } +} diff --git a/lib/dns/dnsrps.c b/lib/dns/dnsrps.c index 65509f1a0d..835a44c98f 100644 --- a/lib/dns/dnsrps.c +++ b/lib/dns/dnsrps.c @@ -968,7 +968,9 @@ static dns_dbmethods_t rpsdb_db_methods = { NULL, /* setservestalettl */ NULL, /* getservestalettl */ NULL, /* setgluecachestats */ - NULL /* adjusthashsize */ + NULL, /* adjusthashsize */ + NULL, /* setmaxrrperset */ + NULL /* setmaxtypepername */ }; static dns_rdatasetmethods_t rpsdb_rdataset_methods = { diff --git a/lib/dns/ecdb.c b/lib/dns/ecdb.c index 1fb553e9ca..d276f3ea56 100644 --- a/lib/dns/ecdb.c +++ b/lib/dns/ecdb.c @@ -426,7 +426,7 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, } result = dns_rdataslab_fromrdataset(rdataset, mctx, &r, - sizeof(rdatasetheader_t)); + sizeof(rdatasetheader_t), 0); if (result != ISC_R_SUCCESS) { goto unlock; } @@ -556,7 +556,12 @@ static dns_dbmethods_t ecdb_methods = { NULL, /* getsize */ NULL, /* setservestalettl */ NULL, /* getservestalettl */ - NULL /* setgluecachestats */ + NULL, /* setservestalerefresh */ + NULL, /* getservestalerefresh */ + NULL, /* setgluecachestats */ + NULL, /* adjusthashsize */ + NULL, /* setmaxrrperset */ + NULL /* setmaxtypepername */ }; static isc_result_t diff --git a/lib/dns/include/dns/cache.h b/lib/dns/include/dns/cache.h index f64a626193..f1b69ab9a3 100644 --- a/lib/dns/include/dns/cache.h +++ b/lib/dns/include/dns/cache.h @@ -315,6 +315,18 @@ dns_cache_updatestats(dns_cache_t *cache, isc_result_t result); * Update cache statistics based on result code in 'result' */ +void +dns_cache_setmaxrrperset(dns_cache_t *cache, uint32_t value); +/*%< + * Set the maximum resource records per RRSet that can be cached. + */ + +void +dns_cache_setmaxtypepername(dns_cache_t *cache, uint32_t value); +/*%< + * Set the maximum resource record types per owner name that can be cached. + */ + #ifdef HAVE_LIBXML2 int dns_cache_renderxml(dns_cache_t *cache, void *writer0); diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index 30d9cc65f0..77c7344570 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -180,6 +180,8 @@ typedef struct dns_dbmethods { isc_result_t (*getservestalettl)(dns_db_t *db, dns_ttl_t *ttl); isc_result_t (*setgluecachestats)(dns_db_t *db, isc_stats_t *stats); isc_result_t (*adjusthashsize)(dns_db_t *db, size_t size); + void (*setmaxrrperset)(dns_db_t *db, uint32_t value); + void (*setmaxtypepername)(dns_db_t *db, uint32_t value); } dns_dbmethods_t; typedef isc_result_t (*dns_dbcreatefunc_t)(isc_mem_t * mctx, @@ -1716,6 +1718,23 @@ dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats); * dns_rdatasetstats_create(); otherwise NULL. */ +void +dns_db_setmaxrrperset(dns_db_t *db, uint32_t value); +/*%< + * Set the maximum permissible number of RRs per RRset. If 'value' + * is nonzero, then any subsequent attempt to add an rdataset with + * more than 'value' RRs will return ISC_R_NOSPACE. + */ + +void +dns_db_setmaxtypepername(dns_db_t *db, uint32_t value); +/*%< + * Set the maximum permissible number of RR types per owner name. + * + * If 'value' is nonzero, then any subsequent attempt to add an rdataset with a + * RR type that would exceed the number of already stored RR types will return + * ISC_R_NOSPACE. + */ ISC_LANG_ENDDECLS #endif /* DNS_DB_H */ diff --git a/lib/dns/include/dns/rdataslab.h b/lib/dns/include/dns/rdataslab.h index 81b3494e8d..aa82f70382 100644 --- a/lib/dns/include/dns/rdataslab.h +++ b/lib/dns/include/dns/rdataslab.h @@ -65,7 +65,8 @@ ISC_LANG_BEGINDECLS isc_result_t dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, - isc_region_t *region, unsigned int reservelen); + isc_region_t *region, unsigned int reservelen, + uint32_t limit); /*%< * Slabify a rdataset. The slab area will be allocated and returned * in 'region'. @@ -121,7 +122,8 @@ isc_result_t dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab, unsigned int reservelen, isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_rdatatype_t type, - unsigned int flags, unsigned char **tslabp); + unsigned int flags, uint32_t maxrrperset, + unsigned char **tslabp); /*%< * Merge 'oslab' and 'nslab'. */ diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h index dcd0de10d8..60251abec1 100644 --- a/lib/dns/include/dns/view.h +++ b/lib/dns/include/dns/view.h @@ -184,7 +184,9 @@ struct dns_view { dns_dlzdblist_t dlz_searched; dns_dlzdblist_t dlz_unsearched; uint32_t fail_ttl; - dns_badcache_t * failcache; + dns_badcache_t *failcache; + uint32_t maxrrperset; + uint32_t maxtypepername; /* * Configurable data for server use only, @@ -1329,6 +1331,27 @@ dns_view_setviewrevert(dns_view_t *view); *\li 'view' to be valid. */ +bool +dns_view_staleanswerenabled(dns_view_t *view); +/*%< + * Check if stale answers are enabled for this view. + * + * Requires: + *\li 'view' to be valid. + */ + +void +dns_view_setmaxrrperset(dns_view_t *view, uint32_t value); +/*%< + * Set the maximum resource records per RRSet that can be cached. + */ + +void +dns_view_setmaxtypepername(dns_view_t *view, uint32_t value); +/*%< + * Set the maximum resource record types per owner name that can be cached. + */ + ISC_LANG_ENDDECLS #endif /* DNS_VIEW_H */ diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h index e3b41dc308..ff346243b6 100644 --- a/lib/dns/include/dns/zone.h +++ b/lib/dns/include/dns/zone.h @@ -153,6 +153,19 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx); *\li #ISC_R_UNEXPECTED */ +isc_result_t +dns_zone_makedb(dns_zone_t *zone, dns_db_t **dbp); +/*%< + * Creates a new empty database for the 'zone'. + * + * Requires: + *\li 'zone' to be a valid zone. + *\li 'dbp' to point to NULL pointer. + * + * Returns: + *\li dns_db_create() error codes. + */ + void dns_zone_setclass(dns_zone_t *zone, dns_rdataclass_t rdclass); /*%< @@ -321,6 +334,32 @@ dns_zone_getmaxrecords(dns_zone_t *zone); *\li uint32_t maxrecords. */ +void +dns_zone_setmaxrrperset(dns_zone_t *zone, uint32_t maxrrperset); +/*%< + * Sets the maximum number of records per rrset permitted in a zone. + * 0 implies unlimited. + * + * Requires: + *\li 'zone' to be valid initialised zone. + * + * Returns: + *\li void + */ + +void +dns_zone_setmaxtypepername(dns_zone_t *zone, uint32_t maxtypepername); +/*%< + * Sets the maximum number of resource record types per owner name + * permitted in a zone. 0 implies unlimited. + * + * Requires: + *\li 'zone' to be valid initialised zone. + * + * Returns: + *\li void + */ + void dns_zone_setmaxttl(dns_zone_t *zone, uint32_t maxttl); /*%< diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index 924202b020..1f1bcc58b1 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -464,6 +464,8 @@ struct dns_rbtdb { rbtdb_serial_t current_serial; rbtdb_serial_t least_serial; rbtdb_serial_t next_serial; + uint32_t maxrrperset; + uint32_t maxtypepername; rbtdb_version_t *current_version; rbtdb_version_t *future_version; rbtdb_versionlist_t open_versions; @@ -942,6 +944,44 @@ set_ttl(dns_rbtdb_t *rbtdb, rdatasetheader_t *header, dns_ttl_t newttl) { } } +static bool +prio_type(rbtdb_rdatatype_t type) { + switch (type) { + case dns_rdatatype_soa: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_soa): + case dns_rdatatype_a: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_a): + case dns_rdatatype_mx: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_mx): + case dns_rdatatype_aaaa: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_aaaa): + case dns_rdatatype_nsec: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec): + case dns_rdatatype_nsec3: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_nsec3): + case dns_rdatatype_ns: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ns): + case dns_rdatatype_ds: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ds): + case dns_rdatatype_cname: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_cname): + case dns_rdatatype_dname: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_dname): + case dns_rdatatype_dnskey: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_dnskey): + case dns_rdatatype_srv: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_srv): + case dns_rdatatype_txt: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_txt): + case dns_rdatatype_ptr: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_ptr): + case dns_rdatatype_naptr: + case RBTDB_RDATATYPE_VALUE(dns_rdatatype_rrsig, dns_rdatatype_naptr): + return (true); + } + return (false); +} + /*% * These functions allow the heap code to rank the priority of each * element. It returns true if v1 happens "sooner" than v2. @@ -6085,6 +6125,24 @@ update_recordsandbytes(bool add, rbtdb_version_t *rbtversion, RWUNLOCK(&rbtversion->rwlock, isc_rwlocktype_write); } +static bool +overmaxtype(dns_rbtdb_t *rbtdb, uint32_t ntypes) { + if (rbtdb->maxtypepername == 0) { + return (false); + } + + return (ntypes >= rbtdb->maxtypepername); +} + +static bool +prio_header(rdatasetheader_t *header) { + if (NEGATIVE(header) && prio_type(RBTDB_RDATATYPE_EXT(header->type))) { + return (true); + } + + return (prio_type(header->type)); +} + /* * write lock on rbtnode must be held. */ @@ -6096,6 +6154,7 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename, rbtdb_changed_t *changed = NULL; rdatasetheader_t *topheader = NULL, *topheader_prev = NULL; rdatasetheader_t *header = NULL, *sigheader = NULL; + rdatasetheader_t *prioheader = NULL, *expireheader = NULL; unsigned char *merged = NULL; isc_result_t result; bool header_nx; @@ -6105,6 +6164,7 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename, rbtdb_rdatatype_t negtype, sigtype; dns_trust_t trust; int idx; + uint32_t ntypes = 0; /* * Add an rdatasetheader_t to a node. @@ -6178,6 +6238,7 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename, topheader = topheader->next) { if (topheader->type == sigtype) { sigheader = topheader; + break; } } negtype = RBTDB_RDATATYPE_VALUE(covers, 0); @@ -6236,7 +6297,17 @@ add32(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode, const dns_name_t *nodename, } for (topheader = rbtnode->data; topheader != NULL; - topheader = topheader->next) { + topheader = topheader->next) + { + if (IS_CACHE(rbtdb) && ACTIVE(topheader, now)) { + ++ntypes; + expireheader = topheader; + } else if (!IS_CACHE(rbtdb)) { + ++ntypes; + } + if (prio_header(topheader)) { + prioheader = topheader; + } if (topheader->type == newheader->type || topheader->type == negtype) { break; @@ -6323,7 +6394,7 @@ find_header: rbtdb->common.mctx, rbtdb->common.rdclass, (dns_rdatatype_t)header->type, flags, - &merged); + rbtdb->maxrrperset, &merged); } if (result == ISC_R_SUCCESS) { /* @@ -6618,9 +6689,52 @@ find_header: /* * No rdatasets of the given type exist at the node. */ - newheader->next = rbtnode->data; + if (!IS_CACHE(rbtdb) && overmaxtype(rbtdb, ntypes)) { + free_rdataset(rbtdb, rbtdb->common.mctx, + newheader); + return (DNS_R_TOOMANYRECORDS); + } + newheader->down = NULL; - rbtnode->data = newheader; + + if (prio_header(newheader)) { + /* This is a priority type, prepend it */ + newheader->next = rbtnode->data; + rbtnode->data = newheader; + } else if (prioheader != NULL) { + /* Append after the priority headers */ + newheader->next = prioheader->next; + prioheader->next = newheader; + } else { + /* There were no priority headers */ + newheader->next = rbtnode->data; + rbtnode->data = newheader; + } + + if (IS_CACHE(rbtdb) && overmaxtype(rbtdb, ntypes)) { + if (expireheader == NULL) { + expireheader = newheader; + } + if (NEGATIVE(newheader) && + !prio_header(newheader)) + { + /* + * Add the new non-priority negative + * header to the database only + * temporarily. + */ + expireheader = newheader; + } + + set_ttl(rbtdb, expireheader, 0); + mark_header_ancient(rbtdb, expireheader); + /* + * FIXME: In theory, we should mark the RRSIG + * and the header at the same time, but there is + * no direct link between those two header, so + * we would have to check the whole list again. + */ + } } } @@ -6665,7 +6779,7 @@ delegating_type(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node, static inline isc_result_t addnoqname(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, - dns_rdataset_t *rdataset) { + uint32_t maxrrperset, dns_rdataset_t *rdataset) { struct noqname *noqname; isc_mem_t *mctx = rbtdb->common.mctx; dns_name_t name; @@ -6686,12 +6800,12 @@ addnoqname(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, noqname->negsig = NULL; noqname->type = neg.type; dns_name_dup(&name, mctx, &noqname->name); - result = dns_rdataslab_fromrdataset(&neg, mctx, &r, 0); + result = dns_rdataslab_fromrdataset(&neg, mctx, &r, 0, maxrrperset); if (result != ISC_R_SUCCESS) { goto cleanup; } noqname->neg = r.base; - result = dns_rdataslab_fromrdataset(&negsig, mctx, &r, 0); + result = dns_rdataslab_fromrdataset(&negsig, mctx, &r, 0, maxrrperset); if (result != ISC_R_SUCCESS) { goto cleanup; } @@ -6710,7 +6824,7 @@ cleanup: static inline isc_result_t addclosest(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, - dns_rdataset_t *rdataset) { + uint32_t maxrrperset, dns_rdataset_t *rdataset) { struct noqname *closest; isc_mem_t *mctx = rbtdb->common.mctx; dns_name_t name; @@ -6731,12 +6845,12 @@ addclosest(dns_rbtdb_t *rbtdb, rdatasetheader_t *newheader, closest->negsig = NULL; closest->type = neg.type; dns_name_dup(&name, mctx, &closest->name); - result = dns_rdataslab_fromrdataset(&neg, mctx, &r, 0); + result = dns_rdataslab_fromrdataset(&neg, mctx, &r, 0, maxrrperset); if (result != ISC_R_SUCCESS) { goto cleanup; } closest->neg = r.base; - result = dns_rdataslab_fromrdataset(&negsig, mctx, &r, 0); + result = dns_rdataslab_fromrdataset(&negsig, mctx, &r, 0, maxrrperset); if (result != ISC_R_SUCCESS) { goto cleanup; } @@ -6806,7 +6920,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, } result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, - ®ion, sizeof(rdatasetheader_t)); + ®ion, sizeof(rdatasetheader_t), + rbtdb->maxrrperset); if (result != ISC_R_SUCCESS) { return (result); } @@ -6862,7 +6977,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, RDATASET_ATTR_SET(newheader, RDATASET_ATTR_OPTOUT); } if ((rdataset->attributes & DNS_RDATASETATTR_NOQNAME) != 0) { - result = addnoqname(rbtdb, newheader, rdataset); + result = addnoqname(rbtdb, newheader, + rbtdb->maxrrperset, rdataset); if (result != ISC_R_SUCCESS) { free_rdataset(rbtdb, rbtdb->common.mctx, newheader); @@ -6870,7 +6986,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, } } if ((rdataset->attributes & DNS_RDATASETATTR_CLOSEST) != 0) { - result = addclosest(rbtdb, newheader, rdataset); + result = addclosest(rbtdb, newheader, + rbtdb->maxrrperset, rdataset); if (result != ISC_R_SUCCESS) { free_rdataset(rbtdb, rbtdb->common.mctx, newheader); @@ -7037,7 +7154,8 @@ subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, nodefullname(db, node, nodename); result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, - ®ion, sizeof(rdatasetheader_t)); + ®ion, sizeof(rdatasetheader_t), + 0); if (result != ISC_R_SUCCESS) { return (result); } @@ -7444,7 +7562,8 @@ loading_addrdataset(void *arg, const dns_name_t *name, } result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx, - ®ion, sizeof(rdatasetheader_t)); + ®ion, sizeof(rdatasetheader_t), + rbtdb->maxrrperset); if (result != ISC_R_SUCCESS) { return (result); } @@ -8382,6 +8501,24 @@ setgluecachestats(dns_db_t *db, isc_stats_t *stats) { return (ISC_R_SUCCESS); } +static void +setmaxrrperset(dns_db_t *db, uint32_t maxrrperset) { + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + + REQUIRE(VALID_RBTDB(rbtdb)); + + rbtdb->maxrrperset = maxrrperset; +} + +static void +setmaxtypepername(dns_db_t *db, uint32_t maxtypepername) { + dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; + + REQUIRE(VALID_RBTDB(rbtdb)); + + rbtdb->maxtypepername = maxtypepername; +} + static dns_stats_t * getrrsetstats(dns_db_t *db) { dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db; @@ -8480,7 +8617,9 @@ static dns_dbmethods_t zone_methods = { attach, NULL, /* setservestalettl */ NULL, /* getservestalettl */ setgluecachestats, - adjusthashsize }; + adjusthashsize, + setmaxrrperset, + setmaxtypepername }; static dns_dbmethods_t cache_methods = { attach, detach, @@ -8530,7 +8669,9 @@ static dns_dbmethods_t cache_methods = { attach, setservestalettl, getservestalettl, NULL, - adjusthashsize }; + adjusthashsize, + setmaxrrperset, + setmaxtypepername }; isc_result_t dns_rbtdb_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type, diff --git a/lib/dns/rdataslab.c b/lib/dns/rdataslab.c index bd7deb2fe1..bcd2ef4b2b 100644 --- a/lib/dns/rdataslab.c +++ b/lib/dns/rdataslab.c @@ -110,9 +110,14 @@ fillin_offsets(unsigned char *offsetbase, unsigned int *offsettable, } #endif /* if DNS_RDATASET_FIXED */ +#ifndef DNS_RDATASET_MAX_RECORDS +#define DNS_RDATASET_MAX_RECORDS 100 +#endif /* DNS_RDATASET_MAX_RECORDS */ + isc_result_t dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, - isc_region_t *region, unsigned int reservelen) { + isc_region_t *region, unsigned int reservelen, + uint32_t maxrrperset) { /* * Use &removed as a sentinel pointer for duplicate * rdata as rdata.data == NULL is valid. @@ -154,6 +159,10 @@ dns_rdataslab_fromrdataset(dns_rdataset_t *rdataset, isc_mem_t *mctx, return (ISC_R_SUCCESS); } + if (maxrrperset > 0 && nitems > maxrrperset) { + return (DNS_R_TOOMANYRECORDS); + } + if (nitems > 0xffff) { return (ISC_R_NOSPACE); } @@ -480,7 +489,8 @@ isc_result_t dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab, unsigned int reservelen, isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_rdatatype_t type, - unsigned int flags, unsigned char **tslabp) { + unsigned int flags, uint32_t maxrrperset, + unsigned char **tslabp) { unsigned char *ocurrent, *ostart, *ncurrent, *tstart, *tcurrent, *data; unsigned int ocount, ncount, count, olength, tlength, tcount, length; dns_rdata_t ordata = DNS_RDATA_INIT; @@ -520,6 +530,10 @@ dns_rdataslab_merge(unsigned char *oslab, unsigned char *nslab, #endif /* if DNS_RDATASET_FIXED */ INSIST(ocount > 0 && ncount > 0); + if (maxrrperset > 0 && ocount + ncount > maxrrperset) { + return (DNS_R_TOOMANYRECORDS); + } + #if DNS_RDATASET_FIXED oncount = ncount; #endif /* if DNS_RDATASET_FIXED */ diff --git a/lib/dns/sdb.c b/lib/dns/sdb.c index 2ea775b405..a0f6401951 100644 --- a/lib/dns/sdb.c +++ b/lib/dns/sdb.c @@ -1310,7 +1310,9 @@ static dns_dbmethods_t sdb_methods = { NULL, /* setservestalettl */ NULL, /* getservestalettl */ NULL, /* setgluecachestats */ - NULL /* adjusthashsize */ + NULL, /* adjusthashsize */ + NULL, /* setmaxrrperset */ + NULL /* setmaxtypepername */ }; static isc_result_t diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 2271de67ea..79fbb7a649 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -1282,7 +1282,9 @@ static dns_dbmethods_t sdlzdb_methods = { NULL, /* setservestalettl */ NULL, /* getservestalettl */ NULL, /* setgluecachestats */ - NULL /* adjusthashsize */ + NULL, /* adjusthashsize */ + NULL, /* setmaxrrperset */ + NULL /* setmaxtypepername */ }; /* diff --git a/lib/dns/view.c b/lib/dns/view.c index c5b76a4171..8dd8120209 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -862,6 +862,9 @@ dns_view_setcache(dns_view_t *view, dns_cache_t *cache, bool shared) { dns_cache_attach(cache, &view->cache); dns_cache_attachdb(cache, &view->cachedb); INSIST(DNS_DB_VALID(view->cachedb)); + + dns_cache_setmaxrrperset(view->cache, view->maxrrperset); + dns_cache_setmaxtypepername(view->cache, view->maxtypepername); } bool @@ -2495,3 +2498,43 @@ dns_view_setviewrevert(dns_view_t *view) { dns_zt_setviewrevert(zonetable); } } + +bool +dns_view_staleanswerenabled(dns_view_t *view) { + uint32_t stale_ttl = 0; + bool result = false; + + REQUIRE(DNS_VIEW_VALID(view)); + + if (dns_db_getservestalettl(view->cachedb, &stale_ttl) != ISC_R_SUCCESS) + { + return (false); + } + if (stale_ttl > 0) { + if (view->staleanswersok == dns_stale_answer_yes) { + result = true; + } else if (view->staleanswersok == dns_stale_answer_conf) { + result = view->staleanswersenable; + } + } + + return (result); +} + +void +dns_view_setmaxrrperset(dns_view_t *view, uint32_t value) { + REQUIRE(DNS_VIEW_VALID(view)); + view->maxrrperset = value; + if (view->cache != NULL) { + dns_cache_setmaxrrperset(view->cache, value); + } +} + +void +dns_view_setmaxtypepername(dns_view_t *view, uint32_t value) { + REQUIRE(DNS_VIEW_VALID(view)); + view->maxtypepername = value; + if (view->cache != NULL) { + dns_cache_setmaxtypepername(view->cache, value); + } +} diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c index 7c69cb4661..0c753374ec 100644 --- a/lib/dns/xfrin.c +++ b/lib/dns/xfrin.c @@ -200,8 +200,6 @@ xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_task_t *task, static isc_result_t axfr_init(dns_xfrin_ctx_t *xfr); static isc_result_t -axfr_makedb(dns_xfrin_ctx_t *xfr, dns_db_t **dbp); -static isc_result_t axfr_putdata(dns_xfrin_ctx_t *xfr, dns_diffop_t op, dns_name_t *name, dns_ttl_t ttl, dns_rdata_t *rdata); static isc_result_t @@ -274,7 +272,11 @@ axfr_init(dns_xfrin_ctx_t *xfr) { dns_db_detach(&xfr->db); } - CHECK(axfr_makedb(xfr, &xfr->db)); + CHECK(dns_zone_makedb(xfr->zone, &xfr->db)); + + dns_zone_rpz_enable_db(xfr->zone, xfr->db); + dns_zone_catz_enable_db(xfr->zone, xfr->db); + dns_rdatacallbacks_init(&xfr->axfr); CHECK(dns_db_beginload(xfr->db, &xfr->axfr)); result = ISC_R_SUCCESS; @@ -282,22 +284,6 @@ failure: return (result); } -static isc_result_t -axfr_makedb(dns_xfrin_ctx_t *xfr, dns_db_t **dbp) { - isc_result_t result; - - result = dns_db_create(xfr->mctx, /* XXX */ - "rbt", /* XXX guess */ - &xfr->name, dns_dbtype_zone, xfr->rdclass, 0, - NULL, /* XXX guess */ - dbp); - if (result == ISC_R_SUCCESS) { - dns_zone_rpz_enable_db(xfr->zone, *dbp); - dns_zone_catz_enable_db(xfr->zone, *dbp); - } - return (result); -} - static isc_result_t axfr_putdata(dns_xfrin_ctx_t *xfr, dns_diffop_t op, dns_name_t *name, dns_ttl_t ttl, dns_rdata_t *rdata) { diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 697a835e77..31e435453d 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -254,6 +254,8 @@ struct dns_zone { uint32_t minretry; uint32_t maxrecords; + uint32_t maxrrperset; + uint32_t maxtypepername; isc_sockaddr_t *masters; isc_dscp_t *masterdscps; @@ -2194,31 +2196,13 @@ zone_load(dns_zone_t *zone, unsigned int flags, bool locked) { dns_zone_logc(zone, DNS_LOGCATEGORY_ZONELOAD, ISC_LOG_DEBUG(1), "starting load"); - result = dns_db_create(zone->mctx, zone->db_argv[0], &zone->origin, - (zone->type == dns_zone_stub) ? dns_dbtype_stub - : dns_dbtype_zone, - zone->rdclass, zone->db_argc - 1, - zone->db_argv + 1, &db); - + result = dns_zone_makedb(zone, &db); if (result != ISC_R_SUCCESS) { dns_zone_logc(zone, DNS_LOGCATEGORY_ZONELOAD, ISC_LOG_ERROR, "loading zone: creating database: %s", isc_result_totext(result)); goto cleanup; } - dns_db_settask(db, zone->task); - - if (zone->type == dns_zone_master || zone->type == dns_zone_slave || - zone->type == dns_zone_mirror) - { - result = dns_db_setgluecachestats(db, zone->gluecachestats); - if (result == ISC_R_NOTIMPLEMENTED) { - result = ISC_R_SUCCESS; - } - if (result != ISC_R_SUCCESS) { - goto cleanup; - } - } if (!dns_db_ispersistent(db)) { if (zone->masterfile != NULL) { @@ -9633,6 +9617,7 @@ cleanup: } dns_diff_clear(&_sig_diff); + dns_diff_clear(&post_diff); for (i = 0; i < nkeys; i++) { dst_key_free(&zone_keys[i]); @@ -11716,6 +11701,26 @@ dns_zone_setmaxrecords(dns_zone_t *zone, uint32_t val) { zone->maxrecords = val; } +void +dns_zone_setmaxrrperset(dns_zone_t *zone, uint32_t val) { + REQUIRE(DNS_ZONE_VALID(zone)); + + zone->maxrrperset = val; + if (zone->db != NULL) { + dns_db_setmaxrrperset(zone->db, val); + } +} + +void +dns_zone_setmaxtypepername(dns_zone_t *zone, uint32_t val) { + REQUIRE(DNS_ZONE_VALID(zone)); + + zone->maxtypepername = val; + if (zone->db != NULL) { + dns_db_setmaxtypepername(zone->db, val); + } +} + static bool notify_isqueued(dns_zone_t *zone, unsigned int flags, dns_name_t *name, isc_sockaddr_t *addr, dns_tsigkey_t *key) { @@ -13727,6 +13732,9 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) { goto cleanup; } dns_db_settask(stub->db, zone->task); + dns_db_setmaxrrperset(stub->db, zone->maxrrperset); + dns_db_setmaxtypepername(stub->db, + zone->maxtypepername); } result = dns_db_newversion(stub->db, &stub->version); @@ -16412,6 +16420,8 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, bool dump) { } zone_attachdb(zone, db); dns_db_settask(zone->db, zone->task); + dns_db_setmaxrrperset(zone->db, zone->maxrrperset); + dns_db_setmaxtypepername(zone->db, zone->maxtypepername); DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED | DNS_ZONEFLG_NEEDNOTIFY); return (ISC_R_SUCCESS); @@ -20991,3 +21001,45 @@ done: return (result); } + +isc_result_t +dns_zone_makedb(dns_zone_t *zone, dns_db_t **dbp) { + REQUIRE(DNS_ZONE_VALID(zone)); + REQUIRE(dbp != NULL && *dbp == NULL); + + dns_db_t *db = NULL; + + isc_result_t result = dns_db_create( + zone->mctx, zone->db_argv[0], &zone->origin, + (zone->type == dns_zone_stub) ? dns_dbtype_stub + : dns_dbtype_zone, + zone->rdclass, zone->db_argc - 1, zone->db_argv + 1, &db); + if (result != ISC_R_SUCCESS) { + return (result); + } + + switch (zone->type) { + case dns_zone_master: + case dns_zone_slave: + case dns_zone_mirror: + result = dns_db_setgluecachestats(db, zone->gluecachestats); + if (result == ISC_R_NOTIMPLEMENTED) { + result = ISC_R_SUCCESS; + } + if (result != ISC_R_SUCCESS) { + dns_db_detach(&db); + return (result); + } + break; + default: + break; + } + + dns_db_settask(db, zone->task); + dns_db_setmaxrrperset(db, zone->maxrrperset); + dns_db_setmaxtypepername(db, zone->maxtypepername); + + *dbp = db; + + return (ISC_R_SUCCESS); +} diff --git a/lib/isccfg/namedconf.c b/lib/isccfg/namedconf.c index 83090832d2..20bc294f3e 100644 --- a/lib/isccfg/namedconf.c +++ b/lib/isccfg/namedconf.c @@ -2169,8 +2169,14 @@ static cfg_clausedef_t zone_clauses[] = { { "max-journal-size", &cfg_type_size, CFG_ZONE_MASTER | CFG_ZONE_SLAVE | CFG_ZONE_MIRROR }, { "max-records", &cfg_type_uint32, - CFG_ZONE_MASTER | CFG_ZONE_SLAVE | CFG_ZONE_MIRROR | CFG_ZONE_STUB | - CFG_ZONE_STATICSTUB | CFG_ZONE_REDIRECT }, + CFG_ZONE_MASTER | CFG_ZONE_SLAVE | CFG_ZONE_MIRROR | + CFG_ZONE_STUB | CFG_ZONE_STATICSTUB | CFG_ZONE_REDIRECT }, + { "max-records-per-type", &cfg_type_uint32, + CFG_ZONE_MASTER | CFG_ZONE_SLAVE | CFG_ZONE_MIRROR | + CFG_ZONE_STUB | CFG_ZONE_STATICSTUB | CFG_ZONE_REDIRECT }, + { "max-types-per-name", &cfg_type_uint32, + CFG_ZONE_MASTER | CFG_ZONE_SLAVE | CFG_ZONE_MIRROR | + CFG_ZONE_STUB | CFG_ZONE_STATICSTUB | CFG_ZONE_REDIRECT }, { "max-refresh-time", &cfg_type_uint32, CFG_ZONE_SLAVE | CFG_ZONE_MIRROR | CFG_ZONE_STUB }, { "max-retry-time", &cfg_type_uint32, diff --git a/lib/ns/update.c b/lib/ns/update.c index 83c9e94a39..10dfe65854 100644 --- a/lib/ns/update.c +++ b/lib/ns/update.c @@ -3084,9 +3084,18 @@ update_action(isc_task_t *task, isc_event_t *event) { dns_diff_clear(&ctx.add_diff); goto failure; } - CHECK(update_one_rr(db, ver, &diff, - DNS_DIFFOP_ADD, - name, ttl, &rdata)); + result = update_one_rr( + db, ver, &diff, DNS_DIFFOP_ADD, + name, ttl, &rdata); + if (result != ISC_R_SUCCESS) { + update_log(client, zone, + LOGLEVEL_PROTOCOL, + "adding an RR " + "failed: %s", + isc_result_totext( + result)); + goto failure; + } } } } else if (update_class == dns_rdataclass_any) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor