diff options
Diffstat (limited to 'src')
71 files changed, 10981 insertions, 4490 deletions
diff --git a/src/common/aes.c b/src/common/aes.c index ef94d8a75c..35c2d1e3a5 100644 --- a/src/common/aes.c +++ b/src/common/aes.c @@ -56,7 +56,14 @@ ENABLE_GCC_WARNING(redundant-decls) * gives us, and the best possible counter-mode implementation, and combine * them. */ -#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_NOPATCH(1,0,1) && \ +#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_NOPATCH(1,1,0) + +/* With newer OpenSSL versions, the older fallback modes don't compile. So + * don't use them, even if we lack specific acceleration. */ + +#define USE_EVP_AES_CTR + +#elif OPENSSL_VERSION_NUMBER >= OPENSSL_V_NOPATCH(1,0,1) && \ (defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || \ defined(_M_AMD64) || defined(_M_X64) || defined(__INTEL__)) \ diff --git a/src/common/compat.c b/src/common/compat.c index 4f2f9778f2..8d6a491c42 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -532,7 +532,10 @@ tor_vasprintf(char **strp, const char *fmt, va_list args) /* On Windows, _vsnprintf won't tell us the length of the string if it * overflows, so we need to use _vcsprintf to tell how much to allocate */ int len, r; - len = _vscprintf(fmt, args); + va_list tmp_args; + va_copy(tmp_args, args); + len = _vscprintf(fmt, tmp_args); + va_end(tmp_args); if (len < 0) { *strp = NULL; return -1; diff --git a/src/common/crypto.c b/src/common/crypto.c index 56409b47e2..fff516cc8e 100644 --- a/src/common/crypto.c +++ b/src/common/crypto.c @@ -743,14 +743,13 @@ crypto_pk_write_key_to_string_impl(crypto_pk_t *env, char **dest, } BIO_get_mem_ptr(b, &buf); - (void)BIO_set_close(b, BIO_NOCLOSE); /* so BIO_free doesn't free buf */ - BIO_free(b); *dest = tor_malloc(buf->length+1); memcpy(*dest, buf->data, buf->length); (*dest)[buf->length] = 0; /* nul terminate it */ *len = buf->length; - BUF_MEM_free(buf); + + BIO_free(b); return 0; } diff --git a/src/common/util.c b/src/common/util.c index b1159e5334..cb5f12821e 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -2191,11 +2191,13 @@ file_status(const char *fname) } } -/** Check whether <b>dirname</b> exists and is private. If yes return 0. If - * it does not exist, and <b>check</b>&CPD_CREATE is set, try to create it - * and return 0 on success. If it does not exist, and - * <b>check</b>&CPD_CHECK, and we think we can create it, return 0. Else - * return -1. If CPD_GROUP_OK is set, then it's okay if the directory +/** Check whether <b>dirname</b> exists and is private. If yes return 0. + * If <b>dirname</b> does not exist: + * - if <b>check</b>&CPD_CREATE, try to create it and return 0 on success. + * - if <b>check</b>&CPD_CHECK, and we think we can create it, return 0. + * - if <b>check</b>&CPD_CHECK is false, and the directory exists, return 0. + * - otherwise, return -1. + * If CPD_GROUP_OK is set, then it's okay if the directory * is group-readable, but in all cases we create the directory mode 0700. * If CPD_GROUP_READ is set, existing directory behaves as CPD_GROUP_OK and * if the directory is created it will use mode 0750 with group read diff --git a/src/config/geoip b/src/config/geoip index 6968b02258..966c440827 100644 --- a/src/config/geoip +++ b/src/config/geoip @@ -1,4 +1,4 @@ -# Last updated based on October 4 2016 Maxmind GeoLite2 Country +# Last updated based on November 3 2016 Maxmind GeoLite2 Country # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz # gunzip GeoLite2-Country.mmdb.gz # python mmdb-convert.py GeoLite2-Country.mmdb @@ -95,7 +95,6 @@ 34646528,34647551,DE 34648576,34649087,GR 34659328,34660351,GR -34664448,34668543,DE 34673664,34674687,DE 34733056,34734079,DE 34754560,34758655,GR @@ -590,7 +589,9 @@ 86457472,86457519,ES 86457520,86457799,FR 86457800,86457803,ES -86457804,86467320,FR +86457804,86467207,FR +86467208,86467211,IE +86467212,86467320,FR 86467321,86467321,FI 86467322,86467999,FR 86468000,86468003,PL @@ -1029,8 +1030,8 @@ 92576256,92576511,AE 92576512,92576767,DE 92576768,92577023,CH -92577024,92577279,DE -92577280,92585983,AT +92577024,92577535,DE +92577536,92585983,AT 92585984,92602367,SA 92602368,92604415,BA 92604416,92606463,PL @@ -1495,7 +1496,9 @@ 93941760,93945855,CH 93945856,93962239,UA 93962240,93972479,GB -93972480,93973759,SE +93972480,93973247,SE +93973248,93973503,GB +93973504,93973759,SE 93973760,93974015,PL 93974016,93974527,SE 93974528,93976575,CH @@ -1524,7 +1527,9 @@ 94180352,94180607,PT 94180608,94181631,SE 94181632,94181887,CZ -94181888,94183423,SE +94181888,94182399,SE +94182400,94182655,GB +94182656,94183423,SE 94183424,94183935,RU 94183936,94184191,SE 94184192,94184447,RU @@ -1533,7 +1538,7 @@ 94188032,94188287,SE 94188288,94188543,FR 94188544,94189311,SE -94189312,94189567,LI +94189312,94189567,IE 94189568,94191615,SE 94191616,94193663,GB 94193664,94195711,SI @@ -1575,7 +1580,9 @@ 94502912,94568447,OM 94568448,94633983,SA 94633984,94896127,RU -94896128,95158271,IT +94896128,94931351,IT +94931352,94931352,SM +94931353,95158271,IT 95158272,95166463,RU 95166464,95168511,RS 95168512,95170559,NL @@ -1735,8 +1742,7 @@ 96172800,96173055,GP 96173056,96174079,MF 96174080,96206847,HU -96206848,96303103,RU -96303104,96305151,LT +96206848,96305151,RU 96305152,96321535,DE 96321536,96323583,RU 96323584,96323711,ZA @@ -2119,7 +2125,9 @@ 100329472,100331519,RU 100331520,100335615,TR 100335616,100401151,KZ -100532224,100548863,RO +100532224,100532479,RO +100532480,100532735,US +100532736,100548863,RO 100548864,100548875,TR 100548876,100548876,RO 100548877,100548964,TR @@ -2272,9 +2280,7 @@ 204048032,204048047,PR 204048048,209921023,US 209921024,209921535,AU -209921536,211597719,US -211597720,211597727,VI -211597728,212791831,US +209921536,212791831,US 212791832,212791839,VI 212791840,214698239,US 214698240,214698255,VI @@ -2336,7 +2342,11 @@ 224264192,224280575,HK 224280576,224296959,IE 224296960,224395263,NL -224395264,225050623,US +224395264,224707743,US +224707744,224707775,IE +224707776,224708735,US +224708736,224708767,KR +224708768,225050623,US 225050624,225051647,IN 225051648,225052159,SG 225052160,225052671,JP @@ -2360,12 +2370,15 @@ 225070592,225070599,PR 225070600,225070623,US 225070624,225070655,PR -225070656,225073151,US +225070656,225070847,US +225070848,225071103,PR +225071104,225073151,US 225073152,225073663,IE 225073664,225074687,KR 225074688,225076735,US 225076736,225077247,NL -225077248,234881023,US +225077248,225077759,IE +225077760,234881023,US 234881024,234883071,CN 234883072,234884095,JP 234884096,234885119,CN @@ -2388,9 +2401,7 @@ 234951680,234952703,HK 234952704,234953727,CN 234953728,234954751,SG -234954752,234958591,NZ -234958592,234958847,AU -234958848,234971135,NZ +234954752,234971135,NZ 234971136,234972159,CN 234972160,234973183,BD 234973184,234974207,PK @@ -2477,7 +2488,8 @@ 257532672,257534463,US 257534464,257534719,IN 257534720,257597439,US -257597440,257598463,ES +257597440,257597959,ES +257597968,257598463,ES 257598464,264485119,US 264485376,264997119,US 264997376,265003519,US @@ -2501,8 +2513,8 @@ 266067968,266076159,AU 266076160,266598655,US 266598656,266598911,BR -266598912,288153599,US -288153600,288161791,CA +266598912,288151551,US +288151552,288161791,CA 288161792,288167423,US 288167424,288167935,CA 288167936,288169471,US @@ -2596,9 +2608,9 @@ 289961472,289963007,US 289963008,289964031,FR 289964032,289980415,IE -289980416,290201599,US -290201600,290209791,IN -290209792,290265087,US +289980416,290193407,US +290193408,290258943,IN +290258944,290265087,US 290265088,290267135,RU 290267136,290269183,US 290269184,290270207,PL @@ -2638,7 +2650,29 @@ 300666880,300670975,NL 300670976,300675071,IE 300675072,300679167,IL -300679168,301989023,US +300679168,301801983,US +301801984,301802239,GB +301802240,301802495,US +301802496,301802751,GB +301802752,301803007,US +301803008,301803263,SE +301803264,301806591,US +301806592,301806847,NL +301806848,301807103,US +301807104,301807359,DE +301807360,301807615,US +301807616,301807871,DE +301807872,301810175,US +301810176,301810431,AU +301810432,301810687,US +301810688,301810943,JP +301810944,301811199,US +301811200,301811455,JP +301811456,301814271,US +301814272,301814527,SG +301814528,301814783,US +301814784,301815039,HK +301815040,301989023,US 301989024,301989031,MO 301989032,301989119,US 301989120,301989375,AU @@ -3377,10 +3411,13 @@ 395837440,395968511,US 395968512,395968767,CA 396034048,396034303,US -396099584,396624127,US +396099584,396754943,US 396754944,396755199,CA +396820480,396820735,US 396886016,397410303,US -397410304,397672447,CA +397410304,397410559,CA +397475840,397476095,US +397541376,397672447,CA 397672448,397672703,US 397803520,397803775,CA 397934592,397934847,US @@ -3553,36 +3590,18 @@ 400883888,400883895,BG 400883896,400883919,US 400883920,400883927,GB -400883928,400884335,US -400884336,400884351,PT -400884352,400884479,US +400883928,400884479,US 400884480,400884735,TR 400884736,400884991,GB -400884992,400885095,US -400885096,400885119,GB -400885120,400887039,US -400887040,400887055,AR -400887056,400887551,US +400884992,400885103,US +400885104,400885111,GB +400885112,400887551,US 400887552,400887807,GB 400887808,400888575,US 400888576,400888831,GB -400888832,400889471,US -400889472,400889487,IE -400889488,400890527,US -400890528,400890543,IT -400890544,400891263,US -400891264,400891279,AT -400891280,400891471,US -400891472,400891487,GR -400891488,400892671,US -400892672,400892687,GB -400892688,400893055,US -400893056,400893071,GB -400893072,400895551,US +400888832,400895551,US 400895552,400895615,GB -400895616,400895663,US -400895664,400895679,DK -400895680,400897535,US +400895616,400897535,US 400897536,400897791,GB 400897792,400911103,US 400911104,400911359,PA @@ -3646,32 +3665,12 @@ 401293312,401297407,CA 401297408,401342463,US 401342464,401346559,BB -401346560,401375999,US -401376000,401376015,DE -401376016,401378303,US +401346560,401378303,US 401378304,401378559,EG -401378560,401380479,US -401380480,401380495,FR -401380496,401385343,US -401385344,401385359,ES -401385360,401386367,US -401386368,401386383,BE -401386384,401386495,US +401378560,401386495,US 401386496,401387007,SE 401387008,401387263,RU -401387264,401396351,US -401396352,401396367,JP -401396368,401397327,US -401397328,401397343,NO -401397344,401399167,US -401399168,401399183,TH -401399184,401399727,US -401399728,401399743,PE -401399744,401400703,US -401400704,401400719,KR -401400720,401402079,US -401402080,401402095,AR -401402096,401547263,US +401387264,401547263,US 401547264,401555455,CA 401555456,402096639,US 402096640,402096895,FR @@ -3737,17 +3736,13 @@ 402239474,402239474,CA 402239475,402243583,US 402243584,402247679,CA -402247680,402260271,US +402247680,402249215,US +402249216,402249727,GB +402249728,402260271,US 402260272,402260279,GB -402260280,402260863,US -402260864,402260879,SE -402260880,402264111,US -402264112,402264127,AT -402264128,402279935,US +402260280,402279935,US 402279936,402280063,CA -402280064,402287263,US -402287264,402287279,IE -402287280,402366463,US +402280064,402366463,US 402366464,402374655,CA 402374656,402399231,US 402399232,402403327,CA @@ -3759,35 +3754,7 @@ 402410240,402410751,TR 402410752,402411263,US 402411264,402411519,TR -402411520,402522719,US -402522720,402522735,DE -402522736,402523231,US -402523232,402523247,ES -402523248,402523743,US -402523744,402523759,NL -402523760,402526655,US -402526656,402526671,GB -402526672,402527423,US -402527424,402527439,FR -402527440,402533823,US -402533824,402533839,BE -402533840,402533951,US -402533952,402533967,JP -402533968,402534207,US -402534208,402534223,TH -402534224,402536319,US -402536320,402536335,KR -402536336,402536511,US -402536512,402536527,SE -402536528,402538623,US -402538624,402538639,AU -402538640,402538815,US -402538816,402538831,CH -402538832,402543167,US -402543168,402543183,FJ -402543184,402543423,US -402543424,402543439,PT -402543440,402550015,US +402411520,402550015,US 402550016,402550271,CA 402550272,402550783,GB 402550784,402591663,US @@ -4202,8 +4169,7 @@ 460983296,460984319,HK 460984320,460988415,PG 460988416,460994559,JP -460994560,460994815,HK -460994816,460995071,MY +460994560,460995071,HK 460995072,460995583,SG 460995584,460996607,IN 460996608,461008895,JP @@ -4329,7 +4295,9 @@ 520488960,520489471,UA 520489472,520489727,EG 520489728,520489983,GR -520489984,520490495,RU +520489984,520490020,RU +520490021,520490021,NL +520490022,520490495,RU 520490496,520490751,RO 520490752,520491007,RU 520491008,520491263,LI @@ -4370,7 +4338,7 @@ 520501248,520501503,LU 520501504,520501759,NO 520501760,520502015,PK -520502016,520502271,GB +520502016,520502271,SI 520502272,520502527,IE 520502528,520502783,BG 520502784,520503295,GB @@ -4424,7 +4392,9 @@ 520949760,520951807,RU 520951808,520953855,IE 520953856,520962047,RU -520962048,520963407,IE +520962048,520962310,IE +520962311,520962311,US +520962312,520963407,IE 520963408,520963408,US 520963409,520963583,IE 520963584,520963839,US @@ -4436,7 +4406,9 @@ 520978432,520980479,RU 520980480,520982527,IT 520982528,520984575,RU -520984576,520986623,GB +520984576,520984641,GB +520984642,520984643,US +520984644,520986623,GB 520986624,520988671,PS 520988672,520990719,DE 520990720,520992767,RU @@ -4845,8 +4817,7 @@ 529849856,529850111,CZ 529850112,529850367,RU 529850368,529855487,ES -529855488,529856511,RU -529856512,529857535,KZ +529855488,529857535,RU 529857536,529858559,UA 529858560,529924095,NL 529924096,529989631,DE @@ -4945,7 +4916,9 @@ 531428440,531428447,IT 531428448,531428487,GB 531428488,531428495,IT -531428496,531429135,GB +531428496,531428599,GB +531428600,531428607,IT +531428608,531429135,GB 531429136,531429143,IT 531429144,531429407,GB 531429408,531429415,IT @@ -5015,7 +4988,8 @@ 532324352,532328447,NL 532328448,532330495,PS 532330496,532332543,CZ -532332544,532340735,PL +532332544,532340479,SK +532340480,532340735,PL 532340736,532341503,GB 532341504,532341759,DE 532341760,532343967,GB @@ -5627,7 +5601,21 @@ 622415872,622417919,MK 622417920,622419967,IM 622419968,622428159,UA -622428160,622460927,GB +622428160,622430207,DE +622430208,622432255,IE +622432256,622434303,IT +622434304,622436351,DE +622436352,622438399,IE +622438400,622439423,IT +622439424,622444543,DE +622444544,622449663,IE +622449664,622451711,ES +622451712,622452735,DE +622452736,622454783,IT +622454784,622456831,DE +622456832,622458879,IT +622458880,622459903,ES +622459904,622460927,IE 622460928,622477311,AZ 622477312,622479359,AL 622479360,622481407,GB @@ -5749,7 +5737,9 @@ 623822336,623822847,NL 623822848,623824895,GB 623824896,623826943,CZ -623826944,623837183,UA +623826944,623827967,UA +623827968,623828991,BG +623828992,623837183,UA 623837184,623902719,PL 623902720,623919103,CZ 623919104,623935487,NL @@ -6037,9 +6027,7 @@ 624671288,624671291,ES 624671292,624671455,FR 624671456,624671471,ES -624671472,624672015,FR -624672016,624672019,GB -624672020,624672127,FR +624671472,624672127,FR 624672128,624672131,GB 624672132,624672547,FR 624672548,624672551,ES @@ -6084,9 +6072,7 @@ 624676716,624676719,ES 624676720,624676923,FR 624676924,624676927,ES -624676928,624676947,FR -624676948,624676951,GB -624676952,624677463,FR +624676928,624677463,FR 624677464,624677467,ES 624677468,624677471,GB 624677472,624677583,FR @@ -6185,9 +6171,7 @@ 624685816,624685823,GB 624685824,624685919,FR 624685920,624685923,ES -624685924,624686111,FR -624686112,624686127,GB -624686128,624686627,FR +624685924,624686627,FR 624686628,624686631,ES 624686632,624686667,FR 624686668,624686671,ES @@ -6828,7 +6812,9 @@ 635200664,635200671,IT 635200672,635200727,GB 635200728,635200735,IT -635200736,635200911,GB +635200736,635200847,GB +635200848,635200855,IT +635200856,635200911,GB 635200912,635200919,IT 635200920,635200991,GB 635200992,635200999,IT @@ -6977,8 +6963,7 @@ 636968457,636968959,DE 636968960,636974079,TR 636974080,636974591,GB -636974592,636974847,NL -636974848,636975103,TR +636974592,636975103,TR 636975104,636977151,ES 636977152,637140991,PL 637140992,637206527,SE @@ -7044,7 +7029,9 @@ 641761536,641761791,CA 641761792,641763327,US 641763328,641767423,CA -641767424,641770495,US +641767424,641769471,US +641769472,641769727,CA +641769728,641770495,US 641770496,641772543,CA 641772544,641773055,US 641773056,641774335,CA @@ -7107,8 +7094,7 @@ 643346944,643362815,US 643362816,643363327,CA 643363328,644051967,US -644051968,644052223,FR -644052224,644052479,MF +644051968,644052479,MF 644052480,644052735,GP 644052736,644052991,MF 644052992,644055295,US @@ -7182,7 +7168,9 @@ 644835072,644835327,CA 644835328,644836351,US 644836352,644837375,CA -644837376,644838911,US +644837376,644838336,US +644838337,644838337,CA +644838338,644838911,US 644838912,644839679,CA 644839680,644840447,US 644840448,644841471,CA @@ -7206,7 +7194,9 @@ 644980736,644980991,CA 644980992,644981759,US 644981760,644982783,CA -644982784,644987135,US +644982784,644986111,US +644986112,644986367,CA +644986368,644987135,US 644987136,644987903,CA 644987904,645185535,US 645185536,645193727,CA @@ -7316,9 +7306,7 @@ 676176192,676176255,US 676176256,676176383,HK 676176384,676176639,IE -676176640,676177756,US -676177757,676177757,RE -676177758,676192767,US +676176640,676192767,US 676192768,676192895,HK 676192896,676193023,IE 676193024,676249599,US @@ -7554,9 +7542,15 @@ 677643264,677644287,HK 677644288,677646335,US 677646336,677646511,MY -677646512,677649407,US +677646512,677646591,US +677646592,677646847,MY +677646848,677647359,US +677647360,677647615,KR +677647616,677649407,US 677649408,677649631,SG -677649632,677679103,US +677649632,677649663,US +677649664,677649919,SG +677649920,677679103,US 677679104,677679263,AU 677679264,677679439,US 677679440,677679615,AU @@ -7617,11 +7611,23 @@ 677723504,677723671,NL 677723672,677723679,US 677723680,677723695,NL -677723696,677724159,US +677723696,677723775,US +677723776,677723903,NL +677723904,677724159,US 677724160,677724271,FI -677724272,677725183,US +677724272,677724415,US +677724416,677724671,FI +677724672,677725183,US 677725184,677725279,AT -677725280,677773311,US +677725280,677725439,US +677725440,677725695,AT +677725696,677727231,US +677727232,677728255,AT +677728256,677739519,US +677739520,677739775,NL +677739776,677740031,IE +677740032,677740543,FI +677740544,677773311,US 677773312,677774335,NL 677774336,677776383,BR 677776384,677781503,NL @@ -7784,7 +7790,47 @@ 677847568,677847583,AT 677847584,677847599,NL 677847600,677847615,FI -677847616,678150143,US +677847616,677848319,US +677848320,677848335,FI +677848336,677848351,US +677848352,677848367,IE +677848368,677848399,US +677848400,677848415,NL +677848416,677848431,IE +677848432,677848447,AT +677848448,677848463,FI +677848464,677848479,NL +677848480,677848495,IE +677848496,677848511,AT +677848512,677848527,FI +677848528,677848543,NL +677848544,677848559,IE +677848560,677848575,AT +677848576,677848591,FI +677848592,677848607,US +677848608,677848623,IE +677848624,677848639,US +677848640,677848655,FI +677848656,677848671,NL +677848672,677848687,IE +677848688,677848703,AT +677848704,677848719,FI +677848720,677848735,NL +677848736,677848751,IE +677848752,677848767,AT +677848768,677848783,FI +677848784,677848799,NL +677848800,677848815,IE +677848816,677848831,AT +677848832,677848847,FI +677848848,677848863,NL +677848864,677848879,IE +677848880,677848895,AT +677848896,677848911,FI +677848912,677848927,NL +677848928,677848943,IE +677848944,677848959,AT +677848960,678150143,US 678150144,678150271,FI 678150272,678151167,US 678151168,678151295,NL @@ -7799,7 +7845,9 @@ 678202112,678202367,NL 678202368,678203135,IE 678203136,678203391,NL -678203392,678428671,US +678203392,678205183,US +678205184,678205439,NL +678205440,678428671,US 678428672,678436863,IE 678436864,678437887,US 678437888,678438015,IE @@ -8071,9 +8119,7 @@ 693045248,693046271,KE 693046272,693047295,ZW 693047296,693049343,ZA -693049344,693049344,SD -693049345,693049347,SS -693049348,693050367,SD +693049344,693050367,SS 693050368,693051391,ZW 693051392,693052415,BW 693052416,693054463,ZA @@ -8813,7 +8859,7 @@ 736289920,736290047,JP 736290048,736290303,AU 736290304,736290559,MY -736290560,736290815,US +736290560,736290815,KR 736290816,736291839,TW 736291840,736300031,CN 736300032,736301055,HK @@ -8828,9 +8874,7 @@ 736329728,736331775,IN 736331776,736334847,CN 736334848,736335871,ID -736335872,736344063,CN -736344064,736345087,IN -736345088,736354303,CN +736335872,736354303,CN 736354304,736355327,IN 736355328,736356351,SG 736356352,736357375,CN @@ -8862,7 +8906,8 @@ 736403200,736403327,AU 736403328,736403455,PK 736403456,736404479,KR -736405504,736408575,IN +736405504,736406527,IN +736407552,736408575,IN 736408576,736409599,HK 736409600,736410623,US 736410624,736411647,CN @@ -9084,7 +9129,8 @@ 737222656,737223679,TW 737223680,737224703,IN 737224704,737224959,MY -737224960,737225215,IN +737224960,737224971,AU +737224972,737225215,IN 737225216,737225223,AU 737225224,737225727,IN 737225728,737225983,KR @@ -9124,7 +9170,7 @@ 737298432,737305599,CN 737305600,737306623,PK 737306624,737307647,IN -737307648,737308671,ID +737307648,737308671,MY 737308672,737309695,KR 737309696,737312767,IN 737312768,737313791,HK @@ -9265,7 +9311,7 @@ 737541120,737542143,SG 737542144,737567743,CN 737567744,737570815,IN -737570816,737571839,SG +737570816,737571839,CN 737571840,737572863,HK 737572864,737574911,IN 737574912,737575935,JP @@ -9403,7 +9449,9 @@ 737811456,737814527,CN 737814528,737815551,IN 737815552,737816575,TW -737816576,737817599,HK +737816576,737816831,HK +737816832,737817087,JP +737817088,737817599,HK 737817600,737818623,AU 737818624,737821695,HK 737821696,737822719,AU @@ -9460,7 +9508,6 @@ 737889280,737890303,HK 737890304,737894399,IN 737894400,737895423,ID -737895424,737896447,IN 737896448,737897471,HK 737897472,737898495,AU 737898496,737899519,MY @@ -9665,7 +9712,9 @@ 757072640,757072703,US 757072704,757072719,NL 757072720,757072727,US -757072728,757073007,NL +757072728,757072775,NL +757072776,757072783,US +757072784,757073007,NL 757073008,757073023,US 757073024,757073047,NL 757073048,757073055,US @@ -9679,7 +9728,9 @@ 757088256,757096447,US 757096448,757104639,SG 757104640,757108223,US -757108224,757108735,NL +757108224,757108415,NL +757108416,757108479,US +757108480,757108735,NL 757108736,757110783,FR 757110784,757112831,DE 757112832,757113343,US @@ -9696,7 +9747,9 @@ 757122560,757125119,US 757125120,757125151,NL 757125152,757125215,US -757125216,757125631,NL +757125216,757125247,NL +757125248,757125279,US +757125280,757125631,NL 757125632,757131263,US 757131264,757133311,NL 757133312,757135359,AU @@ -9879,19 +9932,13 @@ 758693888,758700031,US 758700032,758702079,CA 758702080,758710271,NL -758710272,758747327,US -758747328,758747343,IT -758747344,758747391,US +758710272,758747391,US 758747392,758747647,LT 758747648,758750463,US 758750464,758750719,IN 758750720,758761727,US 758761728,758762239,LT -758762240,758765663,US -758765664,758765679,GR -758765680,758766207,US -758766208,758766223,DK -758766224,758779903,US +758762240,758779903,US 758779904,758783999,CA 758784000,758785023,US 758785024,758785535,CA @@ -10066,11 +10113,7 @@ 759249920,759250943,AU 759693312,759693959,US 759693960,759693975,GR -759693976,759696479,US -759696480,759696495,NO -759696496,759699295,US -759699296,759699311,PE -759699312,759726079,US +759693976,759726079,US 759726080,759791615,CA 759791616,759824639,US 759824640,759824895,SA @@ -10120,15 +10163,21 @@ 759848960,759860735,CA 759860736,759860991,US 759860992,759955455,CA -759955456,759980031,US +759955456,759975935,US +759975936,759977471,DE +759977472,759980031,US 759980032,759983103,JP -759983104,759983615,US -759983616,759984127,JP +759983104,759983135,US +759983136,759984127,JP 759984128,759988223,US -759988224,759989247,GB -759989248,760004607,US -760004608,760005631,JP -760005632,760111103,US +759988224,759990271,GB +759990272,759992319,US +759992320,759994367,SG +759994368,760004607,US +760004608,760006911,JP +760006912,760007039,US +760007040,760007103,JP +760007104,760111103,US 760111104,760119295,CA 760119296,760127487,US 760127488,760152063,CA @@ -10273,7 +10322,7 @@ 762514432,762515455,BD 762515456,762516479,IN 762516480,762517503,AU -762517504,762517759,US +762517504,762517759,TH 762517760,762518015,KR 762518016,762518079,VN 762518080,762518111,ID @@ -10485,7 +10534,7 @@ 762869760,762871807,IN 762871808,762872831,MY 762872832,762873855,JP -762873856,762874879,NZ +762873856,762874879,IN 762874880,762875903,CN 762875904,762876927,IN 762876928,762877951,SG @@ -10588,7 +10637,9 @@ 763073536,763076607,CN 763076608,763077631,IN 763077632,763083775,CN -763083776,763086847,HK +763083776,763084287,HK +763084288,763084543,LT +763084544,763086847,HK 763086848,763087871,MO 763087872,763088895,CN 763088896,763089919,JP @@ -10781,6 +10832,7 @@ 768606208,768868351,GH 768868352,769130495,ZM 769130496,769392639,MA +769515520,769523711,BJ 769523712,769535999,ZA 769536000,769540095,GH 769540096,769548287,ZA @@ -10795,7 +10847,15 @@ 771237376,771237887,MY 771237888,771238911,IN 771238912,771239935,US -771239936,771241983,AU +771239936,771240959,AU +771240960,771241214,US +771241215,771241215,AU +771241216,771241470,US +771241471,771241471,AU +771241472,771241726,US +771241727,771241727,AU +771241728,771241982,US +771241983,771241983,AU 771241984,771245055,IN 771245056,771246079,HK 771246080,771247103,KR @@ -10839,7 +10899,8 @@ 771341312,771348479,CN 771348480,771348991,ID 771348992,771349503,IN -771349504,771350527,ID +771349504,771350271,ID +771350272,771350527,US 771350528,771355647,IN 771355648,771356671,HK 771356672,771361791,IN @@ -11524,7 +11585,7 @@ 774373376,774389759,RS 774389760,774406143,BG 774406144,774416383,IT -774416384,774422527,LB +774416384,774422527,SY 774422528,774438911,OM 774438912,774455295,DE 774455296,774471679,RU @@ -11727,9 +11788,7 @@ 778670752,778670755,DE 778670756,778670975,FR 778670976,778670976,DE -778670977,778671179,FR -778671180,778671183,ES -778671184,778671201,FR +778670977,778671201,FR 778671202,778671202,ES 778671203,778671915,FR 778671916,778671919,GB @@ -11896,9 +11955,7 @@ 778695088,778695103,PT 778695104,778695203,FR 778695204,778695207,ES -778695208,778695347,FR -778695348,778695351,ES -778695352,778695375,FR +778695208,778695375,FR 778695376,778695391,FI 778695392,778695471,FR 778695472,778695475,ES @@ -12136,12 +12193,7 @@ 782745600,782761983,CZ 782761984,783024127,PL 783024128,783040511,RU -783040512,783045631,UA -783045632,783046143,BZ -783046144,783046655,UA -783046656,783047423,BZ -783047424,783047679,RU -783047680,783048703,BZ +783040512,783048703,UA 783048704,783056895,RU 783056896,783065087,UA 783065088,783073279,RU @@ -12303,7 +12355,14 @@ 784169472,784171007,DE 784171008,784203775,PT 784203776,784236543,GR -784236544,784269311,GB +784236544,784237567,IT +784237568,784238591,ES +784238592,784239615,US +784239616,784240639,GB +784240640,784241151,SG +784241152,784242175,AU +784242176,784242687,HK +784242688,784269311,GB 784269312,784302079,BY 784302080,784334847,RU 784334848,784457727,FR @@ -12458,9 +12517,7 @@ 786920192,786920199,IT 786920200,786920223,GB 786920224,786920231,IT -786920232,786920343,GB -786920344,786920351,IT -786920352,786920615,GB +786920232,786920615,GB 786920616,786920623,IT 786920624,786920839,GB 786920840,786920847,IT @@ -12638,7 +12695,9 @@ 787715328,787715583,YE 787715584,787715839,BH 787715840,787718143,NL -787718144,787742719,RU +787718144,787741951,RU +787741952,787742207,BZ +787742208,787742719,RU 787742720,787750143,NL 787750144,787750159,BD 787750160,787750175,BT @@ -12862,21 +12921,14 @@ 792723456,793247743,DE 793247744,793313279,NZ 793313280,793378815,DE -793378816,794367999,US -794368000,794369023,HK -794369024,794369288,US +793378816,794329087,US +794329088,794361855,SG +794361856,794369288,HK 794369289,794369289,CN -794369290,794428331,US -794428332,794428332,HK -794428333,794428792,US -794428793,794428793,HK -794428794,794428984,US -794428985,794428985,HK -794428986,794429148,US -794429149,794429149,HK -794429150,794440519,US -794440520,794440520,HK -794440521,794558463,US +794369290,794378239,HK +794378240,794427391,US +794427392,794460159,HK +794460160,794558463,US 794558464,796917759,CN 796917760,797442047,CA 797442048,800522240,US @@ -13123,7 +13175,8 @@ 856203264,856219647,DE 856219648,856227839,US 856227840,856621055,GB -856621056,856686591,FR +856621056,856637439,NL +856637440,856686591,FR 856686592,857997311,GB 857997312,858062847,SA 858062848,858128383,IE @@ -13302,7 +13355,9 @@ 872354368,872354399,PT 872354400,872354752,FR 872354753,872354753,BE -872354754,872355071,FR +872354754,872354780,FR +872354781,872354781,BE +872354782,872355071,FR 872355072,872355103,ES 872355104,872355679,FR 872355680,872355711,PT @@ -13422,7 +13477,8 @@ 875560960,875823103,IE 875823104,876150783,US 876150784,876347391,DE -876347392,876478463,US +876347392,876412927,CA +876412928,876478463,US 876478464,876740607,AU 876740608,876806143,IN 876806144,876871679,BR @@ -13447,15 +13503,16 @@ 878462976,878463999,BR 878464000,878465023,US 878465024,878466047,JP -878466048,878468095,US -878468096,878469119,AU -878469120,878508031,US +878466048,878467071,CA +878467072,878508031,US 878508032,878509055,IN 878509056,878510079,US 878510080,878510335,IE 878510336,878510591,US 878510592,878510847,IE -878510848,878512127,US +878510848,878511359,US +878511360,878511615,CA +878511616,878512127,US 878512128,878513151,SG 878513152,878514175,US 878514176,878514431,IE @@ -13468,7 +13525,19 @@ 878578432,878578687,SG 878578688,878578943,US 878578944,878579199,AU -878579200,878625791,US +878579200,878579455,CA +878579456,878579967,US +878579968,878580223,DE +878580224,878580735,US +878580736,878580991,KR +878580992,878581247,BR +878581248,878581759,US +878581760,878582783,IE +878582784,878591999,US +878592000,878593023,CA +878593024,878596095,US +878596096,878604287,CA +878604288,878625791,US 878625792,878626047,IE 878626048,878626319,US 878626320,878626335,BR @@ -13478,7 +13547,8 @@ 878626384,878626399,IN 878626400,878626415,SG 878626416,878626431,AU -878626432,878626815,US +878626432,878626447,CA +878626448,878626815,US 878626816,878627071,JP 878627072,878627839,US 878627840,878628351,DE @@ -13500,7 +13570,10 @@ 878667776,878668799,IE 878668800,878673919,US 878673920,878675967,AU -878675968,878690303,US +878675968,878676735,BR +878676736,878678271,US +878678272,878679039,CA +878679040,878690303,US 878690304,878694399,KR 878694400,878695423,US 878695424,878696447,SG @@ -13513,7 +13586,8 @@ 878703872,878704639,US 878704640,878704895,DE 878704896,878705151,IN -878705152,878705663,US +878705152,878705407,CA +878705408,878705663,US 878705664,878705919,KR 878705920,878706431,US 878706432,878706447,BR @@ -13531,7 +13605,10 @@ 879788160,879788287,IE 879788288,879788543,GB 879788544,879788671,NL -879788672,879796223,US +879788672,879788799,IE +879788800,879788927,NL +879788928,879789055,IE +879789056,879796223,US 879796224,879796479,GB 879796480,879796735,NL 879796736,879796991,IE @@ -13540,7 +13617,10 @@ 879804480,879804543,IE 879804544,879804671,GB 879804672,879804735,NL -879804736,879808511,US +879804736,879804799,IE +879804800,879804863,NL +879804864,879804927,IE +879804928,879808511,US 879808512,879808639,GB 879808640,879808767,NL 879808768,879808895,IE @@ -13548,7 +13628,10 @@ 879820800,879820927,KR 879820928,879821055,HK 879821056,879821311,SG -879821312,879829119,US +879821312,879821439,KR +879821440,879821567,HK +879821568,879821695,SG +879821696,879829119,US 879829120,879829247,SG 879829248,879829375,JP 879829376,879829503,HK @@ -13559,7 +13642,10 @@ 879837184,879837247,KR 879837248,879837311,HK 879837312,879837439,SG -879837440,879841343,US +879837440,879837503,KR +879837504,879837567,HK +879837568,879837631,SG +879837632,879841343,US 879841344,879841407,SG 879841408,879841471,JP 879841472,879841535,HK @@ -13576,7 +13662,8 @@ 880872192,880872447,CA 880872448,880876543,US 880876544,880877567,CA -880878080,880879233,US +880878080,880878591,CA +880878592,880879233,US 880879234,880879234,CA 880879235,880881663,US 880881664,880885759,PR @@ -13626,9 +13713,14 @@ 886767616,886772735,JP 886772736,886775807,US 886775808,886778879,SG -886778880,886785023,US +886778880,886779903,DE +886779904,886781951,US +886781952,886783487,KR +886783488,886785023,IN 886785024,886786047,JP -886786048,886833151,US +886786048,886787071,DE +886787072,886788095,SG +886788096,886833151,US 886833152,886964223,SG 886964224,887078911,US 887078912,887083007,NL @@ -13676,8 +13768,8 @@ 888274944,888291327,CA 888291328,888348671,US 888348672,888356863,JP -888356864,888365055,AU -888365056,888475647,US +888356864,888373247,AU +888373248,888475647,US 888475648,888477695,AU 888477696,888478719,US 888478720,888480767,CA @@ -13687,9 +13779,13 @@ 888483840,888484863,NL 888484864,888485887,US 888485888,888486143,HK -888486144,888569855,US +888486144,888487935,US +888487936,888488191,GB +888488192,888569855,US 888569856,888573951,HK -888573952,889192447,US +888573952,888578047,US +888578048,888586239,JP +888586240,889192447,US 889192448,897238054,DE 897238056,905969663,DE 905969664,910163967,US @@ -14233,7 +14329,14 @@ 999827456,999828479,IN 999828480,999828735,HK 999828736,999828991,PH -999828992,999830527,HK +999828992,999829311,MY +999829312,999829343,CN +999829344,999829375,MM +999829376,999829407,HK +999829408,999829439,KR +999829440,999829471,VN +999829472,999829503,ID +999829504,999830527,HK 999830528,999832575,IN 999832576,999833599,BD 999833600,999837695,CN @@ -14437,11 +14540,9 @@ 1025297408,1025299455,AU 1025299456,1025299711,CN 1025299712,1025300735,AU -1025300736,1025300831,US -1025300832,1025300863,AU -1025300864,1025300991,US -1025300992,1025301119,AU -1025301120,1025301247,US +1025300736,1025300991,US +1025300992,1025301055,AU +1025301056,1025301247,US 1025301248,1025301503,GB 1025301504,1025302271,AU 1025302272,1025302527,GB @@ -15159,6 +15260,7 @@ 1047758911,1047758911,CZ 1047759119,1047759119,AT 1047759125,1047759125,AT +1047759754,1047759754,FR 1047759834,1047759834,CZ 1047781856,1047781871,DE 1047782690,1047782690,GB @@ -15393,7 +15495,10 @@ 1052016640,1052017535,GB 1052017536,1052017567,DE 1052017568,1052024831,GB -1052041216,1052045311,GB +1052041216,1052041471,DE +1052041472,1052043215,GB +1052043216,1052043231,DE +1052043232,1052045311,GB 1052045312,1052046079,DE 1052049408,1052057599,PL 1052057600,1052065791,RU @@ -16563,7 +16668,9 @@ 1065873408,1065877503,PR 1065877504,1065906175,US 1065906176,1065908223,KY -1065908224,1066254975,US +1065908224,1066214399,US +1066214400,1066214911,NL +1066214912,1066254975,US 1066254976,1066255103,GB 1066255104,1066311679,US 1066311680,1066311954,CA @@ -17019,7 +17126,9 @@ 1076032256,1076032511,CA 1076032512,1076035519,US 1076035520,1076035583,IN -1076035584,1076049151,US +1076035584,1076046847,US +1076046848,1076047103,CA +1076047104,1076049151,US 1076049152,1076049407,DE 1076049408,1076049919,US 1076049920,1076050175,IL @@ -17027,7 +17136,9 @@ 1076174848,1076178943,BM 1076178944,1076183807,US 1076183808,1076184063,CA -1076184064,1076193375,US +1076184064,1076191743,US +1076191744,1076191999,CN +1076192000,1076193375,US 1076193376,1076193383,PG 1076193384,1076194559,US 1076194560,1076194815,CA @@ -17075,22 +17186,32 @@ 1077059584,1077444607,US 1077444608,1077452799,CA 1077452800,1077460991,JP -1077460992,1077469183,US +1077460992,1077465855,US +1077465856,1077466111,CA +1077466112,1077469183,US 1077469184,1077477375,CA 1077477376,1077506047,US 1077506048,1077510143,LS -1077510144,1077512191,US +1077510144,1077511167,US +1077511168,1077511423,UY +1077511424,1077512191,US 1077512192,1077514239,SE 1077514240,1077641215,US 1077641216,1077657599,CA 1077657600,1077841151,US 1077841152,1077841407,GB 1077841408,1077857279,US -1077857280,1077857283,FR +1077857280,1077857280,FR +1077857281,1077857281,MF +1077857282,1077857283,FR 1077857284,1077857284,MF 1077857285,1077857304,FR 1077857305,1077857305,MF -1077857306,1077857535,FR +1077857306,1077857307,FR +1077857308,1077857308,MF +1077857309,1077857379,FR +1077857380,1077857380,MF +1077857381,1077857535,FR 1077857536,1077865983,US 1077865984,1077866239,CA 1077866240,1077963775,US @@ -17156,9 +17277,7 @@ 1078287808,1078287839,CA 1078287840,1078287871,US 1078287872,1078288383,CA -1078288384,1078349311,US -1078349312,1078349823,PH -1078349824,1078429695,US +1078288384,1078429695,US 1078429696,1078429951,GR 1078429952,1078438399,US 1078438400,1078438655,CA @@ -17208,9 +17327,7 @@ 1078782464,1078782719,PA 1078782720,1078895103,US 1078895104,1078895359,CN -1078895360,1078956799,US -1078956800,1078957055,GB -1078957056,1079320575,US +1078895360,1079320575,US 1079320576,1079322831,CA 1079322832,1079322839,US 1079322840,1079328767,CA @@ -17257,9 +17374,7 @@ 1079413760,1079414271,CA 1079414272,1079415039,US 1079415040,1079415295,HN -1079415296,1079417087,US -1079417088,1079418879,CA -1079418880,1079418887,US +1079415296,1079418887,US 1079418888,1079418895,CA 1079418896,1079422975,US 1079422976,1079423999,CA @@ -17304,12 +17419,18 @@ 1080024320,1080024575,CA 1080024576,1080033279,US 1080033280,1080164351,KY -1080164352,1080193023,CA -1080193024,1080197119,US -1080197120,1080217599,CA -1080217600,1080229887,US -1080229888,1080291327,CA -1080291328,1080498664,US +1080164352,1080168447,CA +1080168448,1080172543,US +1080172544,1080176639,CA +1080176640,1080197119,US +1080197120,1080213503,CA +1080213504,1080229887,US +1080229888,1080233983,CA +1080233984,1080238079,US +1080238080,1080258559,CA +1080258560,1080262655,US +1080262656,1080279039,CA +1080279040,1080498664,US 1080498666,1080501503,US 1080501760,1080516607,US 1080516608,1080524799,GB @@ -17335,7 +17456,11 @@ 1080968448,1080969471,DE 1080969472,1080969727,BH 1080969728,1080983551,DE -1080983552,1080999935,US +1080983552,1080987647,US +1080987648,1080988671,DE +1080988672,1080989951,US +1080989952,1080990207,DE +1080990208,1080999935,US 1080999936,1081016319,CA 1081016320,1081037311,US 1081037312,1081037567,CA @@ -17449,7 +17574,9 @@ 1085915136,1085923327,PR 1085923328,1085997055,US 1085997056,1086013439,CA -1086013440,1086042111,US +1086013440,1086027263,US +1086027264,1086027519,CA +1086027520,1086042111,US 1086042112,1086046207,CA 1086046208,1086050815,US 1086050816,1086051327,CA @@ -17492,7 +17619,9 @@ 1087501472,1087501479,GB 1087501480,1087501535,US 1087501536,1087501695,HK -1087501696,1087508161,US +1087501696,1087501775,US +1087501776,1087501799,HK +1087501800,1087508161,US 1087508162,1087508162,JP 1087508163,1087514623,US 1087514624,1087516671,BB @@ -17599,7 +17728,19 @@ 1089266432,1089266943,GB 1089266944,1089306623,US 1089306624,1089339391,PR -1089339392,1089526783,US +1089339392,1089462271,US +1089462272,1089462394,CA +1089462395,1089462395,US +1089462396,1089462411,CA +1089462412,1089462412,US +1089462413,1089462436,CA +1089462437,1089462437,US +1089462438,1089462527,CA +1089462528,1089462783,US +1089462784,1089463039,CA +1089463040,1089463295,US +1089463296,1089464319,CA +1089464320,1089526783,US 1089526784,1089527039,VE 1089527040,1089579519,US 1089579520,1089580031,VE @@ -17634,7 +17775,9 @@ 1091807232,1091807487,CA 1091807488,1091807999,US 1091808000,1091808255,CA -1091808256,1091812351,US +1091808256,1091809535,US +1091809536,1091809791,CA +1091809792,1091812351,US 1091812352,1091812607,CN 1091812608,1091960831,US 1091960832,1092026367,CA @@ -18083,7 +18226,13 @@ 1110451456,1110451711,CA 1110451712,1110451967,US 1110451968,1110453247,CA -1110453248,1110463999,US +1110453248,1110462143,US +1110462144,1110462207,CA +1110462208,1110462271,US +1110462272,1110462335,CA +1110462336,1110462847,US +1110462848,1110463103,CA +1110463104,1110463999,US 1110464000,1110464767,CA 1110464768,1110465023,US 1110465024,1110465535,CA @@ -18181,7 +18330,8 @@ 1113854208,1113854463,CA 1113854464,1113854975,US 1113854976,1113855487,CA -1113855488,1113983250,US +1113855488,1113983249,US +1113983250,1113983250,RU 1113983251,1113983251,KG 1113983252,1113984643,US 1113984644,1113984645,DE @@ -18696,7 +18846,15 @@ 1123180544,1123184639,CA 1123184640,1123336191,US 1123336192,1123352575,CA -1123352576,1123534847,US +1123352576,1123394807,US +1123394808,1123394815,CA +1123394816,1123395455,US +1123395456,1123395471,CA +1123395472,1123395615,US +1123395616,1123395616,CA +1123395617,1123395807,US +1123395808,1123395839,CA +1123395840,1123534847,US 1123534848,1123536895,AW 1123536896,1123589631,US 1123589632,1123589887,DE @@ -18792,7 +18950,9 @@ 1125514240,1125514495,CY 1125514496,1125514751,US 1125514752,1125515263,CA -1125515264,1125531647,US +1125515264,1125523455,US +1125523456,1125530623,NL +1125530624,1125531647,US 1125531648,1125543887,CA 1125543888,1125543903,US 1125543904,1125543935,CA @@ -19052,11 +19212,7 @@ 1156243456,1156245503,CA 1156245504,1156249599,US 1156249600,1156250623,CA -1156250624,1156263935,US -1156263936,1156265215,CA -1156265216,1156265727,US -1156265728,1156265983,CA -1156265984,1156296703,US +1156250624,1156296703,US 1156296704,1156300799,CA 1156300800,1157753087,US 1157753088,1157753343,GB @@ -19170,7 +19326,9 @@ 1159560208,1159560215,MO 1159560216,1159668479,US 1159668480,1159668735,CA -1159668736,1159694591,US +1159668736,1159685377,US +1159685378,1159685379,NL +1159685380,1159694591,US 1159694592,1159694847,CA 1159694848,1159700479,US 1159700480,1159725055,CA @@ -19268,11 +19426,7 @@ 1161617408,1161625599,CA 1161625600,1161631623,US 1161631624,1161631631,KW -1161631632,1161631839,US -1161631840,1161631871,AT -1161631872,1161632071,US -1161632072,1161632075,AT -1161632076,1161649407,US +1161631632,1161649407,US 1161649408,1161649663,AR 1161649664,1161764863,US 1161764864,1161773055,CA @@ -19699,7 +19853,9 @@ 1177165088,1177354239,US 1177354240,1177419775,PR 1177419776,1177550847,US -1177550848,1178075135,CA +1177550848,1177606655,CA +1177606656,1177606911,US +1177606912,1178075135,CA 1178075136,1178599423,US 1178599424,1179910143,CA 1179910144,1189672191,US @@ -19832,7 +19988,9 @@ 1210420480,1210421503,US 1210421504,1210421551,CA 1210421552,1210449919,US -1210449920,1210545471,CA +1210449920,1210503167,CA +1210503168,1210503423,US +1210503424,1210545471,CA 1210545472,1210545503,US 1210545504,1210557823,CA 1210557824,1210558079,US @@ -19921,9 +20079,7 @@ 1219256320,1219264511,CA 1219264512,1219272703,US 1219272704,1219276799,CA -1219276800,1219290623,US -1219290624,1219290751,AU -1219290752,1219295295,US +1219276800,1219295295,US 1219295296,1219295359,GR 1219295360,1224091903,US 1224091904,1224092159,NL @@ -20026,7 +20182,9 @@ 1246937088,1246945279,CA 1246945280,1247101439,US 1247101440,1247101695,CA -1247101696,1247124479,US +1247101696,1247123967,US +1247123968,1247124223,CA +1247124224,1247124479,US 1247124480,1247124991,PR 1247124992,1247129599,US 1247129600,1247133695,NL @@ -20443,8 +20601,8 @@ 1280126976,1280131071,JP 1280131072,1280139263,CA 1280139264,1280242175,US -1280242176,1280242176,CA -1280242177,1291845631,US +1280242176,1280242431,CA +1280242432,1291845631,US 1291845632,1292894207,DE 1292894208,1293156351,NO 1293156352,1293549567,DE @@ -20953,9 +21111,7 @@ 1298137088,1298661375,GB 1298661376,1298677759,FR 1298677760,1298694143,IR -1298694144,1298701823,US -1298701824,1298702079,SG -1298702080,1298710527,US +1298694144,1298710527,US 1298710528,1298726911,CZ 1298726912,1298743295,RS 1298743296,1298759679,FI @@ -20995,7 +21151,11 @@ 1299103744,1299120127,NO 1299120128,1299136511,SI 1299136512,1299169279,HU -1299169280,1299174399,FR +1299169280,1299171839,GB +1299171840,1299172351,US +1299172352,1299172863,GB +1299172864,1299173375,NL +1299173376,1299174399,FR 1299174400,1299178495,GB 1299178496,1299185663,FR 1299185664,1299447807,PL @@ -21047,8 +21207,7 @@ 1306451968,1306460159,PL 1306460160,1306468351,IT 1306468352,1306476543,FI -1306476544,1306489855,RU -1306489856,1306492927,LT +1306476544,1306492927,RU 1306492928,1306501119,TR 1306501120,1306509311,NO 1306509312,1306525695,PL @@ -21064,10 +21223,7 @@ 1307107328,1307115519,DE 1307115520,1307123711,RU 1307123712,1307131903,NL -1307131904,1307139071,EE -1307139072,1307139327,SE -1307139328,1307139839,EE -1307139840,1307140095,SE +1307131904,1307140095,EE 1307140096,1307148287,FR 1307148288,1307156479,GB 1307156480,1307172863,RU @@ -21190,7 +21346,9 @@ 1307734016,1307734701,NL 1307734703,1307738111,NL 1307738112,1307742207,IT -1307742208,1307746303,HU +1307742208,1307744255,HU +1307744256,1307745279,GB +1307745280,1307746303,HU 1307746304,1307750399,UA 1307750400,1307754495,IT 1307754496,1307758591,GB @@ -21233,7 +21391,9 @@ 1307819396,1307819399,DE 1307819400,1307819407,NL 1307819408,1307819431,DE -1307819432,1307819519,NL +1307819432,1307819439,FI +1307819440,1307819447,LU +1307819448,1307819519,NL 1307819520,1307820031,GB 1307820032,1307824127,ES 1307824128,1307828223,HU @@ -21616,7 +21776,9 @@ 1317404672,1317437439,IT 1317437440,1317470207,HR 1317470208,1317470463,CY -1317470464,1317502975,TR +1317470464,1317474303,TR +1317474304,1317478399,CY +1317478400,1317502975,TR 1317502976,1317535743,IE 1317535744,1317552127,GB 1317552128,1317568511,ES @@ -21932,16 +22094,14 @@ 1334165504,1334173695,PL 1334173696,1334181887,LT 1334181888,1334190079,RU -1334190080,1334198271,BG +1334190080,1334194175,KZ +1334194176,1334198271,BG 1334198272,1334206463,RU 1334206464,1334214655,FI 1334214656,1334222847,JO 1334222848,1334231039,BG 1334231040,1334239231,RU -1334239232,1334239487,IS -1334239488,1334239551,CH -1334239552,1334242815,IS -1334242816,1334243327,CH +1334239232,1334243327,CH 1334243328,1334247423,IS 1334247424,1334255615,NO 1334255616,1334263807,IT @@ -22045,7 +22205,9 @@ 1334767616,1334771711,SE 1334771712,1334779903,RU 1334779904,1334783999,UA -1334784000,1334788095,GB +1334784000,1334784255,GB +1334784256,1334784511,RO +1334784512,1334788095,GB 1334788096,1334792191,RU 1334792192,1334793320,GB 1334793321,1334793321,IR @@ -23143,7 +23305,9 @@ 1354665224,1354694655,DE 1354694656,1354760191,IR 1354760192,1355022335,GB -1355022336,1355284479,DK +1355022336,1355083555,DK +1355083556,1355083559,US +1355083560,1355284479,DK 1355284480,1355415551,BE 1355415552,1355546623,NO 1355546624,1355808767,IT @@ -23193,6 +23357,7 @@ 1357335808,1357336063,IT 1357337600,1357337635,NL 1357337640,1357337647,NL +1357337664,1357337727,NL 1357340672,1357341695,GB 1357342976,1357343231,GB 1357343488,1357343503,GB @@ -23228,8 +23393,9 @@ 1357373520,1357373535,FI 1357373536,1357373539,ES 1357373540,1357373543,PT -1357373544,1357373555,GB -1357373560,1357375487,GB +1357373544,1357375215,GB +1357375216,1357375223,ES +1357375224,1357375487,GB 1357377536,1357378623,FR 1357378816,1357379071,FR 1357381632,1357414399,NO @@ -23606,7 +23772,8 @@ 1359134464,1359134719,GR 1359134720,1359147960,CZ 1359147961,1359147961,PT -1359147962,1359151103,CZ +1359147962,1359150550,CZ +1359150552,1359151103,CZ 1359151104,1359167487,DE 1359167488,1359172095,GB 1359172352,1359183871,GB @@ -23774,16 +23941,7 @@ 1360379904,1360383999,PL 1360384000,1360388095,SE 1360388096,1360392191,RU -1360392192,1360393223,EE -1360393224,1360393615,SE -1360393616,1360393619,EE -1360393620,1360394239,SE -1360394240,1360394495,EE -1360394496,1360394751,SE -1360394752,1360395263,EE -1360395264,1360395519,SE -1360395520,1360395775,EE -1360395776,1360396287,SE +1360392192,1360396287,EE 1360396288,1360400383,RU 1360400384,1360404479,BH 1360404480,1360404991,GB @@ -23926,7 +24084,9 @@ 1360986632,1360986635,US 1360986636,1360986755,GB 1360986756,1360986763,US -1360986764,1360989929,GB +1360986764,1360989653,GB +1360989654,1360989654,FR +1360989655,1360989929,GB 1360989930,1360989930,FR 1360989931,1360989935,GB 1360989936,1360989943,FR @@ -24257,7 +24417,8 @@ 1370259456,1370292223,SE 1370292224,1370302463,NL 1370302464,1370302975,ES -1370302976,1370312703,NL +1370302976,1370303487,NO +1370303488,1370312703,NL 1370312704,1370316799,CH 1370316800,1370324991,NL 1370324992,1370357759,DE @@ -24438,7 +24599,9 @@ 1381367808,1381498879,ES 1381498880,1381761023,IT 1381761024,1382023167,NL -1382023168,1382039551,SE +1382023168,1382027327,SE +1382027328,1382027343,DK +1382027344,1382039551,SE 1382039552,1382055935,DE 1382055936,1382072319,FR 1382072320,1382088703,RU @@ -24787,7 +24950,9 @@ 1386455040,1386456063,DK 1386456064,1386457087,GB 1386457088,1386459135,PS -1386459136,1386477567,GB +1386459136,1386471423,GB +1386471424,1386473471,PS +1386473472,1386477567,GB 1386477568,1386477823,US 1386477824,1386478079,IL 1386478080,1386478335,US @@ -25215,7 +25380,9 @@ 1401708288,1401708543,DE 1401708544,1401712895,SE 1401712896,1401713151,DE -1401713152,1401727743,SE +1401713152,1401718111,SE +1401718112,1401718112,DK +1401718113,1401727743,SE 1401727744,1401727999,GB 1401728000,1401740543,SE 1401740544,1401740799,DE @@ -26147,9 +26314,7 @@ 1417526689,1417526689,ES 1417526690,1417526783,US 1417526784,1417674751,ES -1417674752,1418088959,DE -1418088960,1418089471,PL -1418089472,1421869055,DE +1417674752,1421869055,DE 1421869056,1422393343,BE 1422393344,1422413567,DE 1422413568,1422413695,AT @@ -26397,7 +26562,9 @@ 1427570688,1427636223,FI 1427636224,1427668991,DK 1427668992,1427701759,SE -1427701760,1427741372,DE +1427701760,1427740810,DE +1427740811,1427740811,FR +1427740812,1427741372,DE 1427741373,1427741373,AT 1427741374,1427767295,DE 1427767296,1427800063,BE @@ -26551,9 +26718,7 @@ 1433608448,1433608627,NL 1433608628,1433608628,BE 1433608629,1433608703,NL -1433608704,1433608959,GB -1433608960,1433609215,PL -1433609216,1433609471,GB +1433608704,1433609471,GB 1433609472,1433609727,SE 1433609728,1433609983,GB 1433609984,1433610239,IT @@ -26597,7 +26762,7 @@ 1433837568,1433839615,DE 1433839616,1433841663,GB 1433841664,1433843711,RU -1433843712,1433845759,HR +1433843712,1433845759,AT 1433845760,1433847807,BG 1433847808,1433849855,SE 1433849856,1433851903,BE @@ -26639,7 +26804,9 @@ 1433921737,1433923583,CH 1433923584,1433925631,BE 1433925632,1433927679,GB -1433927680,1434189823,RO +1433927680,1433971711,RO +1433971712,1433972223,LU +1433972224,1434189823,RO 1434189824,1434451967,AT 1434451968,1434517503,PL 1434517504,1434550271,DK @@ -26746,7 +26913,9 @@ 1438186496,1438187519,CH 1438187520,1438253055,IR 1438253056,1438318591,RO -1438318592,1438384127,BG +1438318592,1438320127,BG +1438320128,1438320383,NL +1438320384,1438384127,BG 1438384128,1438400511,FI 1438400512,1438433279,SE 1438433280,1438515199,GB @@ -26771,7 +26940,9 @@ 1438573376,1438573439,KR 1438573440,1438573503,PT 1438573504,1438573567,DK -1438573568,1438574591,DE +1438573568,1438574079,DE +1438574080,1438574335,GB +1438574336,1438574591,DE 1438574592,1438578687,PL 1438578688,1438579967,DE 1438579968,1438580095,NZ @@ -26993,11 +27164,9 @@ 1440284672,1440317439,FI 1440317440,1440317695,BG 1440317696,1440317951,DE -1440317952,1440318975,BG -1440318976,1440319487,DE -1440319488,1440319999,BG -1440320000,1440321023,DE -1440321024,1440321535,BG +1440317952,1440319999,BG +1440320000,1440320511,DE +1440320512,1440321535,BG 1440321536,1440323583,DE 1440323584,1440325631,BG 1440325632,1440333823,DE @@ -27168,7 +27337,8 @@ 1449664000,1449664511,RO 1449664512,1449668607,IR 1449668608,1449672703,SE -1449672704,1449676799,RO +1449672704,1449675775,RO +1449675776,1449676799,US 1449676800,1449684991,IR 1449684992,1449688575,RO 1449688576,1449688831,GB @@ -27392,9 +27562,7 @@ 1459617792,1461714943,IT 1461714944,1462763519,IE 1462763520,1463812095,DK -1463812096,1463873535,BE -1463873536,1463874559,FR -1463874560,1463988223,BE +1463812096,1463988223,BE 1463988224,1463988735,FR 1463988736,1464074239,BE 1464074240,1464336383,IL @@ -27512,7 +27680,9 @@ 1467584512,1467593727,BG 1467593728,1467598335,DE 1467598336,1467598847,BG -1467598848,1467601407,DE +1467598848,1467599871,DE +1467599872,1467600895,BG +1467600896,1467601407,DE 1467601408,1467604991,BG 1467604992,1467744255,DE 1467744256,1467777023,GB @@ -27577,7 +27747,9 @@ 1475131392,1475133439,RU 1475133440,1475135487,CZ 1475135488,1475137535,CH -1475137536,1475139583,GB +1475137536,1475138815,GB +1475138816,1475139071,IR +1475139072,1475139583,GB 1475139584,1475141631,ES 1475141632,1475143679,FI 1475143680,1475145727,JO @@ -27690,7 +27862,15 @@ 1475510272,1475543039,GB 1475543040,1475545087,RO 1475545088,1475559423,KZ -1475559424,1475571711,GR +1475559424,1475560191,GR +1475560192,1475562111,BG +1475562112,1475562239,GR +1475562240,1475562367,BG +1475562368,1475562495,GR +1475562496,1475562751,BG +1475562752,1475563263,GR +1475563264,1475563519,BG +1475563520,1475571711,GR 1475571712,1475572735,BG 1475572736,1475575807,GR 1475575808,1475592191,AT @@ -27816,7 +27996,9 @@ 1476012032,1476012095,RS 1476012096,1476012287,XK 1476012288,1476013055,RS -1476013056,1476013823,XK +1476013056,1476013311,XK +1476013312,1476013567,RS +1476013568,1476013823,XK 1476013824,1476014079,RS 1476014080,1476014127,XK 1476014128,1476014135,RS @@ -27849,7 +28031,9 @@ 1476173824,1476182015,BG 1476182016,1476186367,GB 1476186368,1476186383,IE -1476186384,1476190207,GB +1476186384,1476189382,GB +1476189383,1476189383,IE +1476189384,1476190207,GB 1476190208,1476198399,BY 1476198400,1476206591,RU 1476206592,1476214783,GE @@ -28134,7 +28318,9 @@ 1490328576,1490337791,GB 1490337792,1490354175,RU 1490354176,1490386943,SA -1490386944,1490403327,IT +1490386944,1490391039,IT +1490391040,1490395135,CH +1490395136,1490403327,IT 1490403328,1490419711,BG 1490419712,1490420735,DE 1490420736,1490421759,IR @@ -28346,7 +28532,8 @@ 1495300096,1495300351,SE 1495300352,1495300607,US 1495300608,1495300863,SE -1495300864,1495304191,RO +1495300864,1495303167,RO +1495303168,1495304191,US 1495304192,1495306239,MD 1495306240,1495306573,GB 1495306574,1495306574,RO @@ -28638,7 +28825,7 @@ 1495620608,1495621375,GB 1495621376,1495621631,RO 1495621632,1495621887,GB -1495621888,1495622143,TR +1495621888,1495622143,BG 1495622144,1495623167,RO 1495623168,1495623679,IR 1495623680,1495624191,MD @@ -28675,7 +28862,8 @@ 1495672320,1495672575,NL 1495672576,1495672831,MD 1495672832,1495674879,ES -1495674880,1495678975,RO +1495674880,1495677951,RO +1495677952,1495678975,US 1495678976,1495679999,MD 1495680000,1495682047,RO 1495682048,1495683071,MD @@ -28816,7 +29004,8 @@ 1495867392,1495867903,IR 1495867904,1495869439,RO 1495869440,1495870463,IR -1495870464,1495871743,RO +1495870464,1495871487,RO +1495871488,1495871743,ES 1495871744,1495872511,GB 1495872512,1495874047,RO 1495874048,1495874559,IR @@ -28863,7 +29052,9 @@ 1495959552,1495960575,IR 1495960576,1495960831,US 1495960832,1495961087,SE -1495961088,1495963135,RO +1495961088,1495961599,RO +1495961600,1495962623,US +1495962624,1495963135,RO 1495963136,1495963647,IR 1495963648,1495964415,GB 1495964672,1495965695,RO @@ -29003,8 +29194,7 @@ 1496158208,1496160255,RO 1496160256,1496162303,IR 1496162304,1496175615,RO -1496175616,1496176639,IT -1496176640,1496177663,RO +1496175616,1496177663,IT 1496177664,1496178687,ES 1496178688,1496178943,RO 1496178944,1496179199,BG @@ -29030,7 +29220,9 @@ 1496202240,1496202751,IR 1496202752,1496203263,RO 1496203264,1496207359,IT -1496207360,1496210943,RO +1496207360,1496209407,RO +1496209408,1496209663,US +1496209664,1496210943,RO 1496210944,1496211455,IR 1496211456,1496213503,RO 1496213504,1496215551,IT @@ -29050,7 +29242,9 @@ 1496242176,1496243199,IR 1496243200,1496253439,RO 1496253440,1496254463,ES -1496254464,1496262655,RO +1496254464,1496260607,RO +1496260608,1496261119,IT +1496261120,1496262655,RO 1496262656,1496263167,BG 1496263168,1496268543,RO 1496268544,1496268799,GB @@ -29224,39 +29418,35 @@ 1502981888,1502982143,NL 1502982144,1502986239,IE 1502986240,1502986255,DE -1502986256,1502986495,NL +1502986256,1502986495,TR 1502986496,1502986511,DE 1502986512,1502986751,PL 1502986752,1502987279,DE 1502987280,1502987296,NL 1502987297,1502987535,DE -1502987536,1502987551,NL -1502987552,1502987583,DE -1502987584,1502987647,NL -1502987648,1502987775,DE -1502987776,1502988031,NL +1502987536,1502987551,AE +1502987552,1502987775,DE +1502987776,1502988031,TR 1502988032,1502989055,DE -1502989056,1502989567,NL +1502989056,1502989567,TR 1502989568,1502990847,DE 1502990848,1502991103,PL 1502991104,1502991359,DE -1502991360,1502991615,NL -1502991616,1502992255,DE -1502992256,1502992383,NL -1502992384,1502994687,DE -1502994688,1502994943,NL +1502991360,1502991615,PL +1502991616,1502994687,DE +1502994688,1502994943,PL 1502994944,1502995967,DE -1502995968,1502996479,NL +1502995968,1502996479,PL 1502996480,1502996735,DE -1502996736,1502997759,NL +1502996736,1502997247,PL +1502997248,1502997503,LT +1502997504,1502997759,HK 1502997760,1502999855,DE 1502999856,1502999871,NL -1502999872,1502999999,DE -1503000000,1503000063,NL +1502999872,1503000063,DE 1503000064,1503000319,PL 1503000320,1503000831,DE -1503000832,1503001087,NL -1503001088,1503001343,PL +1503000832,1503001343,PL 1503001344,1503002623,DE 1503002624,1503006719,GE 1503006720,1503010815,GB @@ -29750,7 +29940,9 @@ 1509515264,1509519359,HR 1509519360,1509535743,RU 1509535744,1509537791,IT -1509537792,1509539839,HR +1509537792,1509538815,AT +1509538816,1509539327,HR +1509539328,1509539839,AT 1509539840,1509543935,AM 1509543936,1509548031,LB 1509548032,1509564415,RU @@ -30057,8 +30249,8 @@ 1518540800,1518541479,SE 1518541480,1518541480,DE 1518541481,1518542847,SE -1518542848,1518551039,LT -1518551040,1518567423,SE +1518542848,1518565375,LT +1518565376,1518567423,SE 1518567424,1518583807,LV 1518583808,1518600191,HR 1518600192,1518633215,SE @@ -30069,8 +30261,7 @@ 1518665728,1518723071,LV 1518723072,1518727167,EE 1518727168,1518731263,SE -1518731264,1518772223,LT -1518772224,1518780415,SE +1518731264,1518780415,LT 1518780416,1518796799,HR 1518796800,1518927871,SE 1518927872,1518961663,LT @@ -30178,9 +30369,7 @@ 1532682240,1532690431,LV 1532690432,1532755967,FR 1532755968,1532756991,DE -1532756992,1532774399,BG -1532774400,1532782591,DE -1532782592,1532784639,BG +1532756992,1532784639,BG 1532784640,1532785151,TR 1532785152,1532787711,BG 1532787712,1532789759,DE @@ -30309,8 +30498,10 @@ 1533771520,1533771775,GB 1533771776,1533804543,IR 1533804544,1533805567,RU -1533805568,1533806591,NL -1533806592,1533818879,GB +1533805568,1533807615,NL +1533807616,1533808639,US +1533808640,1533809663,SG +1533809664,1533818879,GB 1533818880,1533819903,NL 1533819904,1533820927,RU 1533820928,1533833215,DE @@ -30478,10 +30669,7 @@ 1534918656,1534984191,GB 1534984192,1534988287,NO 1534988288,1535049727,ES -1535049728,1535050239,CZ -1535050240,1535068159,SK -1535068160,1535068415,CZ -1535068416,1535115263,SK +1535049728,1535115263,SK 1535115264,1535116287,AT 1535116288,1535148031,SE 1535148032,1535197183,AT @@ -30616,7 +30804,9 @@ 1535569344,1535569407,PL 1535569408,1535571519,FR 1535571520,1535571583,ES -1535571584,1535573211,FR +1535571584,1535572799,FR +1535572800,1535572831,IE +1535572832,1535573211,FR 1535573212,1535573215,GB 1535573216,1535573307,FR 1535573308,1535573311,NL @@ -30733,9 +30923,9 @@ 1536456192,1536456447,XK 1536456448,1536458751,RS 1536458752,1536475135,BG -1536475136,1536476545,NL -1536476546,1536476546,GB -1536476547,1536479231,NL +1536475136,1536476159,NL +1536476160,1536476671,GB +1536476672,1536479231,NL 1536479232,1536483327,GB 1536483328,1536491519,NL 1536491520,1536499711,NO @@ -31039,7 +31229,7 @@ 1539471360,1539471871,RU 1539471872,1539472383,PL 1539472896,1539473407,GB -1539473408,1539473919,NL +1539473408,1539473919,FR 1539473920,1539474431,KW 1539474432,1539474943,DE 1539474944,1539475455,UA @@ -31261,7 +31451,6 @@ 1539651584,1539652607,UA 1539652608,1539653631,IL 1539653632,1539654655,RU -1539654656,1539655679,UA 1539655680,1539656703,NL 1539656704,1539657727,RU 1539657728,1539658751,UA @@ -32169,7 +32358,8 @@ 1540305408,1540305919,GB 1540305920,1540306431,PL 1540306432,1540306943,UA -1540306944,1540307455,GB +1540306944,1540307199,GB +1540307200,1540307455,BE 1540307456,1540307967,RU 1540307968,1540308479,UA 1540308480,1540308991,RS @@ -32507,7 +32697,6 @@ 1540435200,1540435455,RO 1540435456,1540435967,GR 1540436224,1540436479,SI -1540436480,1540436735,GB 1540436736,1540436991,UA 1540436992,1540437247,DE 1540437248,1540437503,CH @@ -32712,8 +32901,8 @@ 1540534272,1540535295,UA 1540535296,1540536319,SK 1540536320,1540537343,RU -1540537344,1540539391,UA -1540539392,1540542463,RU +1540537344,1540538367,UA +1540538368,1540542463,RU 1540542464,1540543487,PL 1540543488,1540544511,DE 1540544512,1540545535,RU @@ -34419,7 +34608,7 @@ 1541405440,1541405951,RU 1541405952,1541406207,FR 1541406208,1541406463,RU -1541406464,1541406719,AT +1541406464,1541406719,GB 1541406720,1541407231,LV 1541407232,1541407743,UA 1541407744,1541408255,FI @@ -35996,7 +36185,7 @@ 1542395136,1542395391,ES 1542395392,1542395647,RU 1542395648,1542395903,AT -1542395904,1542396159,RU +1542395904,1542396159,GR 1542396160,1542396415,NO 1542396416,1542396927,RU 1542396928,1542397951,PL @@ -36285,7 +36474,8 @@ 1542599680,1542600703,UA 1542600704,1542602751,PL 1542602752,1542619135,MD -1542619136,1542627327,ES +1542619136,1542619391,GB +1542619392,1542627327,ES 1542627328,1542627583,NL 1542627584,1542627839,RU 1542627840,1542628095,FR @@ -36301,7 +36491,7 @@ 1542640896,1542641151,RU 1542641152,1542641663,IN 1542641664,1542641919,RO -1542641920,1542642175,AE +1542641920,1542642175,OM 1542642176,1542642431,PL 1542642688,1542643199,PL 1542643200,1542643455,UA @@ -36828,7 +37018,7 @@ 1550998784,1551007743,RO 1551007744,1551106047,MD 1551106048,1551237119,DE -1551263886,1551263886,GR +1551237120,1551302655,GR 1551368192,1551499263,NL 1551503360,1551504383,GB 1551504384,1551505407,FR @@ -36956,7 +37146,8 @@ 1558180864,1558183935,IT 1558183936,1558708223,DE 1558708224,1558904831,GB -1558904832,1558937599,IE +1558904832,1558921215,IE +1558921216,1558937599,HU 1558937600,1558970367,NL 1558970368,1559236607,GB 1559236608,1559240703,IL @@ -37041,7 +37232,9 @@ 1560135680,1560135807,UA 1560135808,1560135935,CZ 1560135936,1560139775,GB -1560139776,1560150015,CZ +1560139776,1560141823,CZ +1560141824,1560143871,GB +1560143872,1560150015,CZ 1560150016,1560182783,NL 1560182784,1560215551,SE 1560215552,1560281087,RU @@ -37313,7 +37506,9 @@ 1567698944,1567699967,ES 1567699968,1567702015,RO 1567702016,1567703039,TR -1567703040,1567709183,MD +1567703040,1567705087,MD +1567705088,1567707135,BG +1567707136,1567709183,MD 1567709184,1567709439,RO 1567709440,1567709695,IT 1567709696,1567710207,RO @@ -37322,7 +37517,7 @@ 1567711488,1567711743,PL 1567711744,1567712511,RO 1567712512,1567712767,PL -1567712768,1567713023,BG +1567712768,1567713023,GB 1567713024,1567714815,RO 1567714816,1567715327,GB 1567715328,1567717375,MD @@ -37380,7 +37575,7 @@ 1567809536,1567811583,ES 1567811584,1567812095,RO 1567812096,1567812607,GB -1567812608,1567813631,RO +1567812608,1567813631,US 1567813632,1567814655,ES 1567814656,1567816703,RO 1567816704,1567817727,ES @@ -37419,7 +37614,8 @@ 1567857664,1567858687,ES 1567858688,1567860735,SE 1567860736,1567861247,BE -1567861248,1567866879,RO +1567861248,1567861759,IT +1567861760,1567866879,RO 1567866880,1567867135,IN 1567867136,1567867391,RO 1567867392,1567867519,GB @@ -37710,8 +37906,7 @@ 1571535360,1571535617,CZ 1571535618,1571535618,RU 1571535619,1571535871,CZ -1571535872,1571539967,RU -1571539968,1571540223,UA +1571535872,1571540223,RU 1571540224,1571540693,CZ 1571540694,1571540695,RU 1571540696,1571540696,CZ @@ -37775,7 +37970,6 @@ 1571731456,1571733503,CH 1571733504,1571735551,FI 1571735552,1571737599,NL -1571737600,1571737855,GB 1571738112,1571738367,NL 1571739648,1571741695,GB 1571741696,1571743743,RU @@ -37823,8 +38017,8 @@ 1572035328,1572035455,US 1572035456,1572035583,RU 1572035584,1572036607,GB -1572036608,1572042751,RU -1572042752,1572043263,GB +1572036608,1572039679,RU +1572039680,1572043263,GB 1572043264,1572043775,RU 1572043776,1572044799,GB 1572044800,1572061183,IT @@ -37835,7 +38029,8 @@ 1572098048,1572100095,DK 1572100096,1572102143,CH 1572102144,1572110335,BA -1572110336,1572112383,GB +1572110336,1572110591,US +1572110592,1572112383,GB 1572112384,1572114431,RU 1572114432,1572116479,BA 1572116480,1572118527,DE @@ -38189,9 +38384,7 @@ 1578595480,1578595487,GB 1578595488,1578595643,FR 1578595644,1578595647,GB -1578595648,1578595683,FR -1578595684,1578595687,GB -1578595688,1578595711,FR +1578595648,1578595711,FR 1578595712,1578595743,GB 1578595744,1578595807,FR 1578595808,1578595823,ES @@ -38292,7 +38485,9 @@ 1580075008,1580075199,SE 1580075200,1580075231,PT 1580075232,1580076031,SE -1580076032,1580081151,PT +1580076032,1580077055,PT +1580077056,1580078079,ES +1580078080,1580081151,PT 1580081152,1580083199,TR 1580083200,1580087565,US 1580087566,1580087566,SE @@ -38326,7 +38521,9 @@ 1580130304,1580135423,SE 1580135424,1580135679,GB 1580135680,1580138495,SE -1580138496,1580204031,IT +1580138496,1580199935,IT +1580199936,1580200191,US +1580200192,1580204031,IT 1580204032,1580335103,SA 1580335104,1580466175,RU 1580466176,1580597247,RO @@ -38368,7 +38565,9 @@ 1582301184,1583349759,IT 1583349760,1583611903,SA 1583611904,1583615999,LV -1583616000,1583620095,NL +1583616000,1583617791,NL +1583617792,1583618047,US +1583618048,1583620095,NL 1583620096,1583624191,IT 1583624192,1583625727,RS 1583625728,1583626239,XK @@ -38403,8 +38602,7 @@ 1583742976,1583747071,TR 1583747072,1583751167,RU 1583751168,1583755263,NO -1583755264,1583755519,NL -1583755520,1583756031,SC +1583755264,1583756031,SC 1583756032,1583756287,NL 1583756288,1583759359,SC 1583759360,1583763455,TR @@ -38441,9 +38639,7 @@ 1583781672,1583781679,IT 1583781680,1583781863,GB 1583781864,1583781871,IT -1583781872,1583782399,GB -1583782400,1583782407,IT -1583782408,1583782415,GB +1583781872,1583782415,GB 1583782416,1583782423,IT 1583782424,1583782431,GB 1583782432,1583782439,IT @@ -38461,7 +38657,9 @@ 1583796224,1583800319,DE 1583800320,1583804415,ME 1583804416,1583808511,GB -1583808512,1583811583,MD +1583808512,1583810559,MD +1583810560,1583810815,US +1583810816,1583811583,MD 1583811584,1583811839,RU 1583811840,1583812607,MD 1583812608,1583816351,NL @@ -38652,8 +38850,8 @@ 1586233344,1586241535,FR 1586241536,1586249727,SE 1586249728,1586257919,SI -1586257920,1586264575,SE -1586264576,1586265087,LV +1586257920,1586264063,SE +1586264064,1586265087,LV 1586265088,1586266111,SE 1586266112,1586274303,RU 1586274304,1586282495,BE @@ -38759,7 +38957,7 @@ 1588593920,1588594687,RO 1588594688,1588602879,IR 1588602880,1588603135,RO -1588603136,1588603391,BG +1588603136,1588603391,MD 1588603392,1588604927,RO 1588604928,1588609023,IR 1588609024,1588613119,MD @@ -38772,7 +38970,8 @@ 1588621312,1588625407,MD 1588625408,1588627455,RO 1588627456,1588629503,ES -1588629504,1588637695,RO +1588629504,1588636671,RO +1588636672,1588637695,US 1588637696,1588638719,ES 1588638720,1588640767,RO 1588640768,1588641279,LT @@ -38803,7 +39002,7 @@ 1588684800,1588685055,TH 1588685056,1588685311,VG 1588685312,1588689407,RO -1588689408,1588689663,BG +1588689408,1588689663,GB 1588689664,1588689919,RU 1588689920,1588690687,GB 1588690688,1588690943,RO @@ -39147,8 +39346,10 @@ 1596858368,1596858879,CZ 1596858880,1596859391,RU 1596859392,1596860415,CZ -1596860416,1596862463,BY -1596862464,1596866559,RU +1596860416,1596861439,BY +1596861440,1596861951,UA +1596861952,1596862207,BY +1596862208,1596866559,RU 1596866560,1596868607,UZ 1596868608,1596869631,RU 1596869632,1596870655,UA @@ -39166,7 +39367,7 @@ 1596880896,1596881407,UA 1596881408,1596881919,CZ 1596881920,1596882175,IT -1596882176,1596882431,CZ +1596882176,1596882431,RU 1596882432,1596882687,UA 1596882688,1596882943,CZ 1596882944,1596886015,RU @@ -39196,7 +39397,9 @@ 1596928000,1596929535,RU 1596929536,1596930047,CZ 1596930048,1596930303,UA -1596930304,1596931071,CZ +1596930304,1596930382,CZ +1596930383,1596930383,TM +1596930384,1596931071,CZ 1596931072,1596931583,BY 1596931584,1596932095,CZ 1596932096,1596940287,RU @@ -39355,9 +39558,7 @@ 1602248704,1602250751,BE 1602250752,1602252799,NO 1602252800,1602254847,SE -1602254848,1602255359,LU -1602255360,1602255615,US -1602255616,1602256895,LU +1602254848,1602256895,LU 1602256896,1602258943,GB 1602258944,1602260991,RU 1602260992,1602263039,FR @@ -39580,24 +39781,7 @@ 1603813376,1603829759,CH 1603829760,1603846143,NL 1603846144,1603862527,GB -1603862528,1603864575,EE -1603864576,1603865599,SE -1603865600,1603867263,EE -1603867264,1603867311,SE -1603867312,1603867327,EE -1603867328,1603867391,SE -1603867392,1603867519,EE -1603867520,1603867897,SE -1603867898,1603867898,EE -1603867899,1603867903,SE -1603867904,1603868543,EE -1603868544,1603868671,SE -1603868672,1603869696,EE -1603869697,1603869711,SE -1603869712,1603869712,EE -1603869713,1603875391,SE -1603875392,1603875455,EE -1603875456,1603878911,SE +1603862528,1603878911,EE 1603878912,1603895295,MD 1603895296,1603928063,RU 1603928064,1603944447,DK @@ -39653,21 +39837,24 @@ 1604861952,1604870143,RS 1604870144,1604878335,HR 1604878336,1604886527,DE -1604886528,1604886783,NL +1604886528,1604886655,NL +1604886656,1604886783,RU 1604886784,1604887039,DE -1604887040,1604887295,NL -1604887296,1604887807,DE -1604887808,1604888063,NL -1604888064,1604888831,TR -1604888832,1604889599,NL -1604889600,1604889855,DE -1604889856,1604891391,NL -1604891392,1604891967,DE -1604891968,1604892159,NL +1604887040,1604887295,GB +1604887296,1604888063,DE +1604888064,1604889599,TR +1604889600,1604890111,DE +1604890112,1604890367,RU +1604890368,1604890879,TR +1604890880,1604891967,DE +1604891968,1604892159,RU 1604892160,1604892927,DE -1604892928,1604893375,NL -1604893376,1604893439,DE -1604893440,1604894719,NL +1604892928,1604893183,HK +1604893184,1604893311,DE +1604893312,1604893375,NL +1604893376,1604893951,DE +1604893952,1604894463,TR +1604894464,1604894719,DE 1604894720,1604902911,CZ 1604902912,1604911103,BG 1604911104,1604919295,UA @@ -39722,9 +39909,9 @@ 1605111200,1605111207,IT 1605111208,1605111279,GB 1605111280,1605111287,IT -1605111288,1605111351,GB -1605111352,1605111359,IT -1605111360,1605111935,GB +1605111288,1605111903,GB +1605111904,1605111911,IT +1605111912,1605111935,GB 1605111936,1605111943,IT 1605111944,1605113383,GB 1605113384,1605113391,IT @@ -40348,15 +40535,13 @@ 1728307200,1728308223,BD 1728308224,1728309247,IN 1728309248,1728310271,NZ -1728310272,1728311295,AU +1728310272,1728310783,AU +1728310784,1728311295,US 1728311296,1728312319,MP 1728312320,1728315391,VN 1728315392,1728316415,ID 1728316416,1728317439,MY -1728317440,1728318463,JP -1728318464,1728319439,SG -1728319440,1728319447,JP -1728319448,1728319487,SG +1728317440,1728319487,JP 1728319488,1728320511,AU 1728320512,1728322559,HK 1728322560,1728323583,MY @@ -40693,8 +40878,7 @@ 1728618496,1728619519,MY 1728619520,1728620543,IN 1728620544,1728622591,AU -1728622592,1728623615,SG -1728623616,1728624639,JP +1728622592,1728624639,JP 1728625664,1728626175,IN 1728626176,1728626431,JP 1728626432,1728626687,HK @@ -40758,7 +40942,7 @@ 1728685056,1728686079,JP 1728686080,1728687103,AU 1728687104,1728688127,JP -1728688128,1728689151,HK +1728688128,1728689151,KR 1728689152,1728689407,JP 1728689408,1728689663,BD 1728689664,1728689919,PK @@ -40995,7 +41179,6 @@ 1728894464,1728894975,SG 1728894976,1728895999,HK 1728896000,1728897023,ID -1728897024,1728898047,JP 1728898048,1728899071,BD 1728899072,1728900095,CN 1728900096,1728901119,BD @@ -41040,7 +41223,7 @@ 1728939008,1728939519,BD 1728939520,1728939775,PH 1728939776,1728940031,IN -1728940032,1728942079,JP +1728941056,1728942079,JP 1728942080,1728943103,CN 1728943104,1728944127,BD 1728944128,1728945151,JP @@ -41180,7 +41363,6 @@ 1729055744,1729056767,JP 1729056768,1729057791,IN 1729057792,1729058815,HK -1729058816,1729059839,TH 1729060864,1729061887,CN 1729061888,1729062911,SG 1729062912,1729063935,MY @@ -41299,7 +41481,9 @@ 1729166848,1729167359,HK 1729167360,1729168383,IN 1729169408,1729170431,TW -1729170432,1729171455,HK +1729170432,1729170687,HK +1729170688,1729170719,CN +1729170720,1729171455,HK 1729171456,1729171967,AU 1729171968,1729172223,IN 1729172224,1729172479,MY @@ -41798,9 +41982,7 @@ 1729676288,1729677311,AU 1729677312,1729677439,IN 1729677440,1729677567,NL -1729677568,1729677823,IN -1729677824,1729678079,NL -1729678080,1729678335,IN +1729677568,1729678335,IN 1729678336,1729679359,HK 1729679360,1729680383,AU 1729680384,1729681407,ID @@ -41860,7 +42042,6 @@ 1729744896,1729745919,ID 1729745920,1729746943,AU 1729746944,1729747967,CN -1729747968,1729748223,IN 1729748224,1729748479,AU 1729748480,1729748991,ID 1729748992,1729750015,IN @@ -41984,7 +42165,7 @@ 1729864704,1729866751,IN 1729866752,1729867775,AU 1729867776,1729869823,HK -1729869824,1729870079,US +1729869824,1729870079,JP 1729870080,1729870847,CN 1729870848,1729871871,AU 1729872896,1729873919,AU @@ -42090,7 +42271,7 @@ 1729957888,1729958911,CN 1729958912,1729959935,PH 1729959936,1729960959,SG -1729960960,1729961471,IN +1729960960,1729961215,IN 1729961472,1729961983,NZ 1729961984,1729964031,IN 1729964032,1729965055,AU @@ -42100,7 +42281,7 @@ 1729968128,1729969151,MY 1729969152,1729970175,LK 1729970176,1729971199,AU -1729971200,1729972223,SG +1729971200,1729972223,JP 1729972224,1729973247,HK 1729973248,1729974271,AU 1729974272,1729975295,PH @@ -42318,7 +42499,7 @@ 1730390016,1730391039,BD 1730391040,1730392063,HK 1730392064,1730393087,AU -1730393088,1730394111,SG +1730393088,1730394111,CN 1730394112,1730395135,HK 1730395136,1730396159,JP 1730396160,1730398207,IN @@ -42494,7 +42675,7 @@ 1730615296,1730616319,HK 1730616320,1730617343,IN 1730618368,1730619391,KR -1730619392,1730619903,HK +1730619392,1730619903,TW 1730619904,1730620415,SG 1730620416,1730621439,NZ 1730621440,1730622719,ID @@ -43218,7 +43399,6 @@ 1731565612,1731565613,JP 1731565614,1731566079,HK 1731566080,1731566591,PH -1731566592,1731567615,IN 1731567616,1731568639,CN 1731568640,1731569663,IN 1731569664,1731570687,VN @@ -43296,9 +43476,9 @@ 1731657728,1731658751,TH 1731658752,1731659775,JP 1731659776,1731660031,HK -1731660032,1731660287,SG +1731660032,1731660287,ID 1731660288,1731660543,MY -1731660544,1731660799,BN +1731660544,1731660799,SG 1731660800,1731661823,JP 1731661824,1731662847,AU 1731663872,1731665919,HK @@ -43363,7 +43543,8 @@ 1731716096,1731717119,CN 1731717120,1731718143,AU 1731718144,1731720191,CN -1731720192,1731723263,IN +1731720192,1731721215,IN +1731722240,1731723263,IN 1731723264,1731724287,AU 1731724288,1731725311,BD 1731725312,1731726335,CN @@ -43430,8 +43611,7 @@ 1731804160,1731805183,KR 1731806208,1731806463,AU 1731806464,1731807231,IN -1731807232,1731807999,SG -1731808000,1731808255,DK +1731807232,1731808255,SG 1731808256,1731809279,CN 1731809280,1731811583,IN 1731811584,1731811839,AU @@ -43873,7 +44053,7 @@ 1732507648,1732507902,AU 1732507903,1732507903,PH 1732507904,1732508671,AU -1732508672,1732509695,HK +1732508672,1732509695,CN 1732509696,1732510719,ID 1732510720,1732511743,BD 1732511744,1732512767,IN @@ -43897,8 +44077,7 @@ 1732537856,1732538367,BZ 1732538368,1732539391,IN 1732539392,1732540415,BD -1732540416,1732540671,NZ -1732540672,1732541439,US +1732540416,1732541439,US 1732541440,1732541695,AU 1732541696,1732542463,SG 1732542464,1732543487,CN @@ -43961,8 +44140,11 @@ 1732612096,1732613119,IN 1732613120,1732614143,BD 1732614144,1732615167,CN -1732615168,1732615679,SE -1732615680,1732615935,FI +1732615168,1732615423,MX +1732615424,1732615551,SK +1732615552,1732615679,IE +1732615680,1732615807,FI +1732615808,1732615935,SE 1732615936,1732616191,NO 1732616192,1732617215,VG 1732617216,1732618239,AU @@ -44070,7 +44252,8 @@ 1732730880,1732737023,IN 1732737024,1732740095,CN 1732740096,1732741119,SG -1732741120,1732742143,HK +1732741120,1732741631,KR +1732741632,1732742143,HK 1732742144,1732743167,TW 1732743168,1732744191,CN 1732744192,1732746239,HK @@ -44099,7 +44282,7 @@ 1732768768,1732769791,SG 1732769792,1732770815,MM 1732770816,1732771327,HK -1732771328,1732771583,MY +1732771328,1732771583,SG 1732771584,1732771839,ID 1732771840,1732772863,PK 1732772864,1732773375,SG @@ -44127,7 +44310,7 @@ 1732811776,1732812799,IN 1732812800,1732813311,HK 1732813312,1732813823,MY -1732813824,1732814847,CN +1732813824,1732814847,MO 1732814848,1732815871,IN 1732815872,1732816895,CN 1732816896,1732817919,IN @@ -44175,7 +44358,8 @@ 1732880384,1732881407,CN 1732881408,1732882431,IN 1732882432,1732883455,CN -1732883456,1732887039,IN +1732883456,1732884479,IN +1732885504,1732887039,IN 1732887040,1732887551,HK 1732887552,1732888575,BD 1732888576,1732889599,AU @@ -44334,6 +44518,114 @@ 1733062656,1733063679,HK 1733063680,1733064703,TH 1733064704,1733065727,IN +1733065728,1733065983,SG +1733065984,1733066751,AU +1733066752,1733067775,IN +1733067776,1733068799,ID +1733068800,1733070847,IN +1733070848,1733071871,NZ +1733071872,1733072895,ID +1733072896,1733073919,BD +1733073920,1733074175,AU +1733074176,1733074431,FJ +1733074432,1733074943,AU +1733074944,1733075455,PH +1733075456,1733076479,AU +1733076480,1733076991,IN +1733076992,1733079039,ID +1733079040,1733079807,AU +1733079808,1733080063,MM +1733080064,1733081087,TH +1733081088,1733081599,MM +1733081600,1733084159,IN +1733084160,1733085183,BD +1733085184,1733086463,ID +1733086464,1733086719,NZ +1733086720,1733089279,IN +1733089280,1733092351,CN +1733092352,1733094399,IN +1733094400,1733096447,BD +1733096448,1733097215,AU +1733097216,1733097471,NZ +1733097472,1733100543,IN +1733100544,1733101055,NZ +1733101056,1733101311,PH +1733101312,1733101567,AU +1733101568,1733102591,PK +1733102592,1733102847,NZ +1733102848,1733103103,AU +1733103104,1733103615,IN +1733103616,1733104639,BD +1733104640,1733105663,IN +1733105664,1733106175,PG +1733106176,1733106687,IN +1733106688,1733107711,CN +1733107712,1733111807,IN +1733111808,1733112831,ID +1733112832,1733114879,CN +1733114880,1733115903,BD +1733115904,1733116927,LK +1733116928,1733117951,AU +1733117952,1733118975,CN +1733118976,1733119999,ID +1733120000,1733120255,AU +1733120256,1733120511,IN +1733120512,1733121023,TH +1733121024,1733122047,KR +1733122048,1733124095,CN +1733124096,1733125119,IN +1733125120,1733126143,BD +1733126144,1733127167,ID +1733127168,1733128191,IN +1733128192,1733128447,SG +1733128448,1733128703,AU +1733128704,1733128959,IN +1733128960,1733129215,AU +1733129216,1733130239,TH +1733130240,1733131263,AU +1733131264,1733132287,IN +1733132288,1733132543,AU +1733132544,1733132799,PH +1733132800,1733133311,SG +1733133312,1733134335,CN +1733134336,1733135359,IN +1733135360,1733136383,SG +1733136384,1733137407,AU +1733137408,1733138431,CN +1733138432,1733139455,IN +1733139456,1733140479,ID +1733140480,1733143551,VN +1733143552,1733146623,IN +1733146624,1733146879,HK +1733146880,1733147135,ID +1733147136,1733147647,IN +1733147648,1733148671,BD +1733148672,1733149695,HK +1733149696,1733150207,IN +1733150208,1733150975,AU +1733150976,1733151231,MM +1733151232,1733151743,AU +1733151744,1733152767,ID +1733152768,1733155839,IN +1733155840,1733156863,CN +1733156864,1733157119,AU +1733157120,1733157375,FJ +1733157376,1733157887,ID +1733157888,1733158911,IN +1733158912,1733159935,AU +1733159936,1733163007,IN +1733163008,1733164031,ID +1733164032,1733164543,BD +1733164544,1733167103,IN +1733167104,1733168127,ID +1733168128,1733171199,IN +1733171200,1733172223,ID +1733172224,1733173247,IN +1733173248,1733174271,MY +1733174272,1733175295,ID +1733175296,1733176319,HK +1733176320,1733176831,ID +1733176832,1733177087,IN 1740636160,1740644351,CN 1740644352,1740645375,IN 1740645376,1740647423,HK @@ -44394,7 +44686,6 @@ 1740711936,1740713983,CN 1740713984,1740719103,IN 1740719104,1740720127,HK -1740720128,1740721151,JP 1740721152,1740721407,AU 1740721408,1740721663,IN 1740721664,1740721919,AU @@ -44412,7 +44703,6 @@ 1740744192,1740744703,AU 1740744704,1740745727,BD 1740745728,1740746751,HK -1740746752,1740747775,JP 1740747776,1740748799,KH 1740748800,1740749823,JP 1740749824,1740751871,CN @@ -44559,7 +44849,7 @@ 1740931072,1740932095,PH 1740932096,1740933119,IN 1740933120,1740934143,PH -1740934144,1740935167,AU +1740934144,1740935167,SG 1740935168,1740936191,IN 1740936192,1740937215,AU 1740938240,1740938495,AU @@ -44593,7 +44883,6 @@ 1740971008,1740975103,IN 1740975104,1740976127,PK 1740976128,1740976639,BD -1740976640,1740976895,SG 1740976896,1740977151,IN 1740977152,1740977663,NZ 1740977664,1740977919,GB @@ -44923,8 +45212,7 @@ 1741521920,1741522943,BD 1741522944,1741523967,CN 1741523968,1741528063,IN -1741528064,1741528575,HK -1741528576,1741529087,PH +1741528064,1741529087,PH 1741529088,1741529599,TH 1741529600,1741529855,CN 1741529856,1741530111,IN @@ -44973,7 +45261,6 @@ 1741586432,1741591551,IN 1741591552,1741592575,CN 1741592576,1741593087,MN -1741593088,1741593599,AU 1741593600,1741594111,HK 1741594112,1741594367,MY 1741594368,1741596671,IN @@ -45171,8 +45458,7 @@ 1741816832,1741817855,PK 1741817856,1741818367,PH 1741818368,1741818879,AU -1741818880,1741819135,US -1741819136,1741819391,PK +1741818880,1741819391,PK 1741819392,1741819903,US 1741819904,1741820927,BD 1741820928,1741821951,PH @@ -45256,8 +45542,13 @@ 1741914112,1741917183,IN 1741917184,1741917951,AU 1741917952,1741918207,ID -1741918208,1741918719,IT -1741918720,1741919231,GR +1741918208,1741918463,IT +1741918464,1741918591,ES +1741918592,1741918719,PT +1741918720,1741918847,SI +1741918848,1741918975,GR +1741918976,1741919103,CZ +1741919104,1741919231,HU 1741919232,1741920255,NP 1741920256,1741921279,IN 1741921280,1741922303,CN @@ -45274,7 +45565,14 @@ 1741931520,1741932031,IN 1741932032,1741932287,HK 1741932288,1741932543,AU -1741932544,1741933567,PK +1741932544,1741932798,US +1741932799,1741932799,PK +1741932800,1741933054,US +1741933055,1741933055,PK +1741933056,1741933310,US +1741933311,1741933311,PK +1741933312,1741933566,US +1741933567,1741933567,PK 1741933568,1741934591,BD 1741934592,1741935615,AU 1741935616,1741936639,VN @@ -45528,8 +45826,14 @@ 1742257152,1742257407,ID 1742257408,1742257663,NZ 1742257664,1742258175,AU -1742258176,1742259199,US -1742259200,1742260223,AU +1742258176,1742259454,US +1742259455,1742259455,AU +1742259456,1742259710,US +1742259711,1742259711,AU +1742259712,1742259966,US +1742259967,1742259967,AU +1742259968,1742260222,US +1742260223,1742260223,AU 1742260224,1742260735,IN 1742260736,1742261247,KR 1742261248,1742264319,IN @@ -45679,8 +45983,8 @@ 1742559232,1742589951,CN 1742589952,1742590975,IN 1742590976,1742596095,VN -1742596096,1742596607,IN -1742596608,1742598143,AU +1742596096,1742597119,IN +1742597120,1742598143,AU 1742598144,1742599167,SG 1742599168,1742599423,IN 1742599424,1742599679,AU @@ -46055,7 +46359,6 @@ 1743093760,1743094015,SG 1743094016,1743094271,IN 1743094272,1743094527,NZ -1743094528,1743094783,IN 1743094784,1743095807,TW 1743095808,1743096831,CN 1743096832,1743098879,HK @@ -46201,7 +46504,8 @@ 1743240192,1743241215,SG 1743241216,1743242239,JP 1743242240,1743244287,ID -1743244288,1743245311,AU +1743244288,1743244799,AU +1743244800,1743245311,AF 1743245312,1743248383,IN 1743248384,1743248895,SG 1743248896,1743249407,IN @@ -46269,7 +46573,8 @@ 1743309824,1743310335,NZ 1743310336,1743311871,AU 1743311872,1743312895,CN -1743312896,1743313919,AU +1743312896,1743313663,AU +1743313664,1743313919,MY 1743313920,1743314943,HK 1743314944,1743315199,IN 1743315200,1743315455,PK @@ -46732,7 +47037,6 @@ 1743888384,1743889407,CN 1743889408,1743890431,HK 1743890432,1743891455,IN -1743891456,1743892479,JP 1743892480,1743892991,AU 1743892992,1743893503,ID 1743893504,1743894527,IN @@ -47626,10 +47930,11 @@ 1744809984,1744811007,HK 1744811008,1744812031,IN 1744812032,1744813055,CN -1744813056,1744816127,IN +1744813056,1744814079,IN 1744816128,1744817151,CN 1744818176,1744820223,CN -1744820224,1744823295,IN +1744820224,1744821247,IN +1744822272,1744823295,IN 1744823296,1744824319,CN 1744824320,1744825343,IN 1744825344,1744826367,VN @@ -48201,7 +48506,9 @@ 1753532416,1753532671,JP 1753532672,1753538815,US 1753538816,1753539071,PH -1753539072,1753547007,US +1753539072,1753539583,US +1753539584,1753539839,CH +1753539840,1753547007,US 1753547008,1753547263,DE 1753547264,1753735167,US 1753735168,1753743359,IE @@ -48258,13 +48565,7 @@ 1754258432,1754258687,MG 1754258688,1754258943,US 1754258944,1754259199,TN -1754259200,1754294047,US -1754294048,1754294063,GB -1754294064,1754312447,US -1754312448,1754312463,GB -1754312464,1754315471,US -1754315472,1754315487,DE -1754315488,1754333183,US +1754259200,1754333183,US 1754333184,1754337279,CA 1754337280,1754394367,US 1754394368,1754394623,CA @@ -48429,9 +48730,13 @@ 1755322368,1755322879,NZ 1755322880,1755323135,US 1755323136,1755323391,ES -1755323392,1755365375,US +1755323392,1755356159,US +1755356160,1755356415,AU +1755356416,1755365375,US 1755365376,1755373567,CA -1755373568,1755391231,US +1755373568,1755374847,US +1755374848,1755375103,DE +1755375104,1755391231,US 1755391232,1755391487,BD 1755391488,1755405951,US 1755405952,1755406015,CN @@ -48494,7 +48799,7 @@ 1755828992,1755829247,PK 1755829248,1755829503,KZ 1755829504,1755829759,OM -1755829760,1755830015,CN +1755829760,1755830015,GB 1755830016,1755830271,ST 1755830272,1755830527,LR 1755830528,1755830783,JP @@ -48502,7 +48807,7 @@ 1755831040,1755831295,MU 1755831296,1755831551,GQ 1755831552,1755831807,MK -1755831808,1755832063,TL +1755831808,1755832063,GB 1755832064,1755832319,ML 1755832320,1755832575,DZ 1755832576,1755832831,MM @@ -48515,14 +48820,14 @@ 1755834368,1755834623,TN 1755834624,1755834879,AS 1755834880,1755835135,PG -1755835136,1755835391,PR +1755835136,1755835391,GB 1755835392,1755835647,BA 1755835648,1755835903,US 1755835904,1755836159,GN 1755836160,1755836415,FJ 1755836416,1755836671,MH 1755836672,1755836927,SL -1755836928,1755837183,LK +1755836928,1755837183,GB 1755837184,1755837439,MG 1755837440,1755837695,ME 1755837696,1755837951,MR @@ -48803,13 +49108,9 @@ 1759547392,1759548415,NL 1759548416,1759709183,US 1759709184,1759709439,LT -1759709440,1759723231,US -1759723232,1759723247,ES -1759723248,1759727103,US +1759709440,1759727103,US 1759727104,1759727359,IN -1759727360,1759749935,US -1759749936,1759749951,FR -1759749952,1760047103,US +1759727360,1760047103,US 1760047104,1760051199,CA 1760051200,1760083967,US 1760083968,1760086015,SE @@ -48932,16 +49233,19 @@ 1761075200,1761083391,CA 1761083392,1761181695,US 1761181696,1761181951,MX -1761181952,1761183743,US +1761181952,1761182207,US +1761182208,1761182463,GB +1761182464,1761183487,US +1761183488,1761183743,GB 1761183744,1761183999,AU 1761184000,1761185023,US 1761185024,1761185279,RU -1761185280,1761185535,US +1761185280,1761185535,GB 1761185536,1761185791,AE 1761185792,1761186047,MX 1761186048,1761186303,US 1761186304,1761186559,DE -1761186560,1761186815,US +1761186560,1761186815,GB 1761186816,1761187071,MX 1761187072,1761187327,US 1761187328,1761187583,PK @@ -49082,8 +49386,7 @@ 1762791424,1762795519,DJ 1762795520,1762799615,TZ 1762799616,1762803711,MZ -1762803712,1762815999,ZA -1762816000,1762820095,FR +1762803712,1762820095,ZA 1762820096,1762942975,MU 1762942976,1762947071,NL 1762947072,1762951167,SE @@ -49130,7 +49433,8 @@ 1763479552,1763483647,GB 1763483648,1763573759,MU 1763573760,1763577855,US -1763577856,1763598335,MU +1763577856,1763581951,ZA +1763581952,1763598335,MU 1763598336,1763602431,IN 1763602432,1763606527,NL 1763606528,1763610623,MU @@ -49173,8 +49477,7 @@ 1777049600,1777053695,ZA 1777053696,1777057791,BF 1777057792,1777061887,NG -1777061888,1777062143,SS -1777062144,1777063935,SD +1777061888,1777063935,SS 1777063936,1777065983,MZ 1777065984,1777070079,GQ 1777070080,1777074175,BW @@ -49255,7 +49558,9 @@ 1804863744,1804863999,CN 1804864000,1805000058,US 1805000059,1805000059,CA -1805000060,1805016063,US +1805000060,1805010175,US +1805010176,1805010431,CA +1805010432,1805016063,US 1805016064,1805016319,EE 1805016320,1805016575,RU 1805016576,1805016831,NZ @@ -49263,9 +49568,9 @@ 1805017088,1805021183,CN 1805021184,1805033983,US 1805033984,1805038591,TR -1805038592,1805045759,US -1805045760,1805046271,DE -1805046272,1805048831,US +1805038592,1805046271,US +1805046272,1805046783,GB +1805046784,1805048831,US 1805048832,1805049343,NL 1805049344,1805049855,DE 1805049856,1805058047,CA @@ -49281,17 +49586,7 @@ 1805171232,1805171239,CA 1805171240,1805171607,US 1805171608,1805171615,CA -1805171616,1805171743,US -1805171744,1805171759,BE -1805171760,1805183007,US -1805183008,1805183023,JP -1805183024,1805185343,US -1805185344,1805185359,TH -1805185360,1805187567,US -1805187568,1805187583,KR -1805187584,1805188143,US -1805188144,1805188159,GB -1805188160,1805190399,US +1805171616,1805190399,US 1805190400,1805190655,ES 1805190656,1805190911,DE 1805190912,1805194239,US @@ -49747,7 +50042,7 @@ 1833370624,1833370879,CN 1833370880,1833371135,US 1833371136,1833371391,RU -1833371392,1833371647,NL +1833371392,1833371647,BR 1833371648,1833373695,RU 1833373696,1833377791,DE 1833377792,1833379839,KZ @@ -49966,8 +50261,8 @@ 1835920840,1835920847,IT 1835920848,1835921079,GB 1835921080,1835921087,IT -1835921088,1835921119,GB -1835921120,1835921127,IT +1835921088,1835921111,GB +1835921112,1835921127,IT 1835921128,1835921159,GB 1835921160,1835921167,IT 1835921168,1835922415,GB @@ -49986,13 +50281,13 @@ 1835923512,1835923527,IT 1835923528,1835923679,GB 1835923680,1835923687,IT -1835923688,1835923855,GB +1835923688,1835923719,GB +1835923720,1835923727,IT +1835923728,1835923855,GB 1835923856,1835923863,IT 1835923864,1835924375,GB 1835924376,1835924383,IT -1835924384,1835924879,GB -1835924880,1835924887,IT -1835924888,1835925007,GB +1835924384,1835925007,GB 1835925008,1835925015,IT 1835925016,1835925159,GB 1835925160,1835925167,IT @@ -50795,9 +51090,7 @@ 1844838400,1844903935,GB 1844903936,1844969471,NO 1844969472,1844973567,EE -1844973568,1844984063,RU -1844984064,1844984319,KZ -1844984320,1844994047,RU +1844973568,1844994047,RU 1844994048,1845002239,EE 1845002240,1845006335,RU 1845006336,1845010431,KZ @@ -50807,7 +51100,8 @@ 1845024256,1845024767,GB 1845024768,1845025535,RU 1845025536,1845025791,KZ -1845025792,1845027583,RU +1845025792,1845026303,UZ +1845026304,1845027583,RU 1845027584,1845027839,ES 1845027840,1845029887,RU 1845029888,1845030143,KZ @@ -51283,7 +51577,9 @@ 1897170944,1897172991,ID 1897172992,1897175039,PH 1897175040,1897176063,JP -1897176064,1897177087,SG +1897176064,1897176575,SG +1897176576,1897176831,JP +1897176832,1897177087,US 1897177088,1897201663,JP 1897201664,1897209855,KR 1897209856,1897213951,AU @@ -52467,9 +52763,7 @@ 2001829888,2001841247,HK 2001841248,2001841248,SA 2001841249,2001846271,HK -2001846272,2001855119,SG -2001855120,2001855135,US -2001855136,2001855231,SG +2001846272,2001855231,SG 2001855232,2001855263,US 2001855264,2001855743,SG 2001855744,2001855999,HK @@ -52484,8 +52778,8 @@ 2001857536,2001857791,SG 2001857792,2001858047,HK 2001858048,2001858319,SG -2001858320,2001858367,US -2001858368,2001858639,SG +2001858320,2001858335,US +2001858336,2001858639,SG 2001858640,2001858655,US 2001858656,2001859071,SG 2001859072,2001859327,HK @@ -53011,7 +53305,9 @@ 2059964416,2059966463,ID 2059966464,2059968511,TW 2059968512,2059976703,AU -2059976704,2059995135,JP +2059976704,2059990899,JP +2059990900,2059990900,PH +2059990901,2059995135,JP 2059995136,2059997183,VN 2059997184,2060001279,MN 2060001280,2060002559,HK @@ -53258,7 +53554,8 @@ 2080776192,2080777215,HK 2080777216,2080778239,GB 2080778240,2080780287,US -2080780288,2080781311,ID +2080780288,2080780799,ID +2080780800,2080781311,MY 2080781312,2080784383,SG 2080784384,2080800767,CN 2080800768,2080817151,PH @@ -53561,7 +53858,9 @@ 2113693880,2113693887,AU 2113693888,2113694175,JP 2113694176,2113694191,HK -2113694192,2113716223,JP +2113694192,2113695279,JP +2113695280,2113695287,SG +2113695288,2113716223,JP 2113716224,2113724927,SG 2113724928,2113725183,IN 2113725184,2113728511,SG @@ -53589,7 +53888,8 @@ 2147497216,2147497471,RO 2147497472,2147498239,DE 2147498240,2147498495,RO -2147498496,2147501055,DE +2147498496,2147500031,DE +2147500032,2147501055,NL 2147501056,2147501311,SK 2147501312,2147502079,NL 2147502080,2147504127,DK @@ -54004,7 +54304,9 @@ 2187067392,2187132927,CH 2187132928,2187263999,US 2187264000,2187329535,AU -2187329536,2187460607,US +2187329536,2187331583,US +2187331584,2187332607,CA +2187332608,2187460607,US 2187460608,2187526143,FR 2187526144,2187591679,US 2187591680,2187657215,SE @@ -54202,8 +54504,7 @@ 2197798912,2197815295,IR 2197815296,2197816319,BO 2197816320,2197828607,BR -2197828608,2197829119,CL -2197829120,2197829631,AR +2197828608,2197829631,CL 2197829632,2197833727,BR 2197833728,2197834751,CR 2197834752,2197841919,BR @@ -54215,7 +54516,9 @@ 2197849088,2197850111,BR 2197850112,2197851135,CO 2197851136,2197858303,BR -2197858304,2197859327,CO +2197858304,2197858431,CO +2197858432,2197858447,CW +2197858448,2197859327,CO 2197859328,2197860351,CL 2197860352,2197865471,BR 2197865472,2197865983,ES @@ -54258,7 +54561,9 @@ 2204172288,2204237823,SE 2204237824,2204303359,US 2204303360,2204368895,DE -2204368896,2204369919,PA +2204368896,2204369407,PA +2204369408,2204369663,US +2204369664,2204369919,PA 2204369920,2204376063,BR 2204376064,2204377087,CL 2204377088,2204378111,BR @@ -54953,7 +55258,11 @@ 2255749120,2255814655,US 2255814656,2255880191,CA 2255880192,2255945727,US -2255945728,2256011263,DE +2255945728,2255998975,DE +2255998976,2256000031,FR +2256000032,2256000047,DE +2256000048,2256000063,FR +2256000064,2256011263,DE 2256011264,2256535551,US 2256535552,2256543743,GB 2256543744,2256551935,US @@ -55139,13 +55448,9 @@ 2258608672,2258608687,JP 2258608688,2258610175,AU 2258610176,2258610431,IN -2258610432,2258610703,AU -2258610704,2258610719,TW -2258610720,2258610751,AU -2258610752,2258610755,TW -2258610756,2258610759,AU -2258610760,2258610783,TW -2258610784,2258611071,AU +2258610432,2258610687,AU +2258610688,2258610943,TW +2258610944,2258611071,AU 2258611072,2258611103,JP 2258611104,2258611119,AU 2258611120,2258611167,JP @@ -55309,7 +55614,10 @@ 2281007104,2281007359,IN 2281007360,2281023487,US 2281023488,2281023743,IN -2281023744,2281701375,US +2281023744,2281029645,US +2281029647,2281037837,US +2281037839,2281044031,US +2281044064,2281701375,US 2281701376,2281705471,CH 2281705472,2281709567,US 2281709568,2281725951,CN @@ -55321,10 +55629,8 @@ 2281750528,2281758719,CN 2281758720,2282226019,US 2282226021,2282226175,US -2282226176,2282226243,AU -2282226246,2282226246,AU -2282226247,2282226247,US -2282226248,2282226431,AU +2282226176,2282226239,AU +2282226256,2282226431,AU 2282226432,2282226943,US 2282227200,2282264063,US 2282264320,2282264575,US @@ -55452,15 +55758,22 @@ 2303000576,2303190527,US 2303190784,2303262719,US 2303262720,2303328255,GB -2303328256,2303330591,FR +2303328256,2303330303,PL +2303330304,2303330591,FR 2303330592,2303330623,GB -2303330624,2303332799,FR +2303330624,2303331263,FR +2303331264,2303331327,FI +2303331328,2303331903,FR +2303331904,2303331967,ES +2303331968,2303332799,FR 2303332800,2303332831,GB 2303332832,2303334271,FR 2303334272,2303334399,ES 2303334400,2303340639,FR 2303340640,2303340671,FI -2303340672,2303343039,FR +2303340672,2303342459,FR +2303342460,2303342463,DE +2303342464,2303343039,FR 2303343040,2303343103,PT 2303343104,2303343487,FR 2303343488,2303343615,IE @@ -55472,23 +55785,23 @@ 2303349120,2303349247,ES 2303349248,2303349383,FR 2303349384,2303349391,NL -2303349392,2303353215,FR +2303349392,2303350783,FR +2303350784,2303351039,ES +2303351040,2303351055,FR +2303351056,2303351071,GB +2303351072,2303353215,FR 2303353216,2303353343,GB -2303353344,2303355087,FR -2303355088,2303355103,GB -2303355104,2303361079,FR +2303353344,2303353783,FR +2303353784,2303353787,GB +2303353788,2303361079,FR 2303361080,2303361087,GB 2303361088,2303361535,FR 2303361536,2303361599,GB 2303361600,2303362063,FR 2303362064,2303362079,DE -2303362080,2303376847,FR -2303376848,2303376863,GB -2303376864,2303377311,FR +2303362080,2303377311,FR 2303377312,2303377343,GB -2303377344,2303382031,FR -2303382032,2303382047,GB -2303382048,2303382879,FR +2303377344,2303382879,FR 2303382880,2303382895,ES 2303382896,2303383503,FR 2303383504,2303383519,GB @@ -55539,7 +55852,9 @@ 2306998272,2307129343,US 2307129344,2307194879,SG 2307194880,2307260415,NO -2307260416,2307358719,US +2307260416,2307278847,US +2307278848,2307280895,AU +2307280896,2307358719,US 2307358720,2307391487,IE 2307391488,2307522559,US 2307522560,2307588095,CH @@ -55735,7 +56050,9 @@ 2319165440,2319167487,AR 2319167488,2319168511,HN 2319169536,2319174655,BR -2319174656,2319175679,HN +2319174656,2319175647,HN +2319175648,2319175663,BR +2319175664,2319175679,HN 2319175680,2319184895,BR 2319184896,2319185919,AR 2319185920,2319187967,BR @@ -55745,10 +56062,10 @@ 2319450112,2319581183,US 2319581184,2319646719,IT 2319646720,2319728639,US -2319728640,2319736831,DE -2319736832,2319745023,US -2319745024,2319753215,GB -2319753216,2319843327,US +2319728640,2319740927,DE +2319740928,2319745023,US +2319745024,2319757311,GB +2319757312,2319843327,US 2319843328,2319908863,IT 2319908864,2319974399,AU 2319974400,2320039935,US @@ -55817,7 +56134,9 @@ 2321743872,2321744895,SV 2321744896,2321745919,AR 2321745920,2321753087,BR -2321753088,2321753599,HN +2321753088,2321753359,HN +2321753360,2321753375,NL +2321753376,2321753599,HN 2321753600,2321753607,NL 2321753608,2321753927,HN 2321753928,2321753935,NL @@ -55864,8 +56183,12 @@ 2321809408,2321874943,ES 2321874944,2321940479,JP 2321940480,2322006015,FR -2322006016,2322071551,SE -2322071552,2322130431,GB +2322006016,2322010383,SE +2322010384,2322010399,US +2322010400,2322071551,SE +2322071552,2322129919,GB +2322129920,2322130175,IN +2322130176,2322130431,GB 2322130432,2322130687,SG 2322130688,2322137087,GB 2322137088,2322202623,US @@ -55986,19 +56309,9 @@ 2323315712,2323316735,MX 2323316736,2323382271,US 2323382272,2323447807,NO -2323447808,2323645215,US -2323645216,2323645231,AU -2323645232,2323649983,US -2323649984,2323649999,NL -2323650000,2323650007,US +2323447808,2323650007,US 2323650008,2323650015,RO -2323650016,2323655455,US -2323655456,2323655471,CH -2323655472,2323661663,US -2323661664,2323661679,FJ -2323661680,2323672799,US -2323672800,2323672815,SE -2323672816,2323690495,US +2323650016,2323690495,US 2323690496,2323690751,IN 2323690752,2323699711,US 2323699712,2323700735,NL @@ -56069,7 +56382,9 @@ 2327494656,2327496703,BR 2327496704,2327497727,MX 2327497728,2327498751,BR -2327498752,2327499655,HN +2327498752,2327499055,HN +2327499056,2327499063,CL +2327499064,2327499655,HN 2327499656,2327499663,CL 2327499664,2327499775,HN 2327499776,2327501823,AR @@ -56087,7 +56402,9 @@ 2328231936,2328297471,GB 2328313856,2328317951,NL 2328342528,2328342783,DE -2328362752,2328494079,DE +2328362752,2328485437,DE +2328485438,2328485438,NL +2328485439,2328494079,DE 2328494080,2328559615,US 2328559616,2328625151,BE 2328625152,2328627199,AR @@ -56226,7 +56543,14 @@ 2332387328,2332388351,BD 2332388352,2332389375,CN 2332389376,2332390399,AU -2332390400,2332391423,PK +2332390400,2332390654,US +2332390655,2332390655,PK +2332390656,2332390910,US +2332390911,2332390911,PK +2332390912,2332391166,US +2332391167,2332391167,PK +2332391168,2332391422,US +2332391423,2332391423,PK 2332391424,2332392447,BD 2332392448,2332393471,AU 2332393472,2332394495,CN @@ -56347,8 +56671,9 @@ 2342453248,2342518783,CN 2342518784,2342584319,FR 2342584320,2342649855,US -2342649856,2342658047,SG -2342658048,2342682623,US +2342649856,2342666239,SG +2342666240,2342674431,JP +2342674432,2342682623,US 2342682624,2342699007,DE 2342699008,2342715391,GB 2342715392,2342780927,AU @@ -56713,7 +57038,7 @@ 2378203648,2378210559,FI 2378210560,2378211071,NO 2378211072,2378235903,FI -2378235904,2378301439,US +2378235904,2378301439,ES 2378301440,2378303231,FR 2378303488,2378366975,FR 2378366976,2378432511,US @@ -56789,10 +57114,7 @@ 2382657536,2382657791,US 2382657792,2382658559,CN 2382658560,2382658815,CA -2382658816,2382658975,CN -2382658976,2382659007,US -2382659008,2382659071,CN -2382659072,2382675967,US +2382658816,2382675967,US 2382675968,2382676107,CA 2382676108,2382676111,US 2382676112,2382677987,CA @@ -57007,7 +57329,8 @@ 2411003904,2411363583,US 2411363584,2411363839,GB 2411363840,2411462655,US -2411462656,2411593727,AU +2411462656,2411528191,AU +2411528192,2411593727,JP 2411593728,2411749375,US 2411749376,2411753471,MY 2411753472,2411757567,SG @@ -57535,7 +57858,7 @@ 2449485568,2449485823,PL 2449485824,2449487871,IE 2449487872,2449488383,GB -2449488384,2449488895,RO +2449488384,2449488895,LU 2449488896,2449489919,KZ 2449489920,2449490943,FR 2449490944,2449491199,DE @@ -57547,7 +57870,7 @@ 2449506304,2449522687,LU 2449522688,2449526783,KZ 2449526784,2449527807,IT -2449527808,2449530879,RO +2449527808,2449530879,LU 2449530880,2449539071,DE 2449539072,2449604607,US 2449604608,2449670143,NO @@ -57681,6 +58004,26 @@ 2456748032,2456813567,US 2456846336,2456846591,FR 2456846592,2456846847,CZ +2456862720,2456862975,NL +2456862976,2456863743,US +2456863744,2456863999,DE +2456864000,2456864255,HK +2456864256,2456864511,US +2456864512,2456864767,GB +2456864768,2456865791,US +2456865792,2456866047,AU +2456866048,2456866559,CA +2456866560,2456866815,ZA +2456866816,2456867071,JP +2456875264,2456875775,CA +2456875776,2456876031,JP +2456876032,2456876287,NL +2456876288,2456876543,US +2456876544,2456876799,ZA +2456876800,2456877311,US +2456877312,2456877567,AU +2456877568,2456877823,US +2456877824,2456878079,HK 2456879104,2457075711,US 2457075712,2457141247,AU 2457206784,2457272319,AU @@ -57705,7 +58048,8 @@ 2457375744,2457376767,RU 2457376768,2457378815,DE 2457378816,2457379839,NL -2457379840,2457389055,RU +2457379840,2457380095,CZ +2457380096,2457389055,RU 2457389056,2457391103,CZ 2457391104,2457393151,RU 2457393152,2457396223,CZ @@ -58038,7 +58382,8 @@ 2471219456,2471219679,FR 2471219691,2471219691,GB 2471219712,2471223295,IL -2471223296,2471231487,CH +2471223296,2471227391,CH +2471227392,2471231487,US 2471231488,2471297023,AU 2471297024,2471362559,GB 2471428096,2471690239,US @@ -58261,7 +58606,8 @@ 2495349053,2495349247,DE 2495349248,2495351039,US 2495351296,2495353143,US -2495353145,2495412223,US +2495353145,2495411195,US +2495411197,2495412223,US 2495412480,2495807487,US 2495807488,2495873023,AU 2495873024,2495938559,CH @@ -58484,8 +58830,8 @@ 2502041600,2502045695,ES 2502045696,2502047743,US 2502047744,2502049791,ES -2502049792,2502164991,US -2502164992,2502165503,GB +2502049792,2502164479,US +2502164480,2502165503,GB 2502165504,2503016447,US 2503016448,2503147519,IL 2503147520,2503344127,US @@ -58519,7 +58865,8 @@ 2503917568,2503933951,BG 2503933952,2504180735,US 2504180736,2504180991,ES -2504180992,2504470527,US +2504180992,2504468479,US +2504468480,2504470527,ES 2504470528,2504472575,IT 2504472576,2504472831,US 2504472832,2504473599,ES @@ -58530,7 +58877,9 @@ 2504491008,2504499199,IT 2504499200,2504499711,IE 2504499712,2504500223,GB -2504500224,2504507391,IE +2504500224,2504501247,IE +2504501248,2504503295,ES +2504503296,2504507391,IE 2504507392,2504918642,US 2504918643,2504918643,IL 2504918644,2504919670,US @@ -58572,8 +58921,8 @@ 2505482240,2505484287,NL 2505484288,2505488383,US 2505488384,2505490431,FR -2505490432,2505490687,HR -2505490688,2505502719,US +2505490432,2505498623,HR +2505498624,2505502719,US 2505502720,2505504767,UA 2505504768,2505506815,FI 2505506816,2505572351,US @@ -59151,7 +59500,9 @@ 2538656960,2538656975,ES 2538656976,2538657135,FR 2538657136,2538657139,RO -2538657140,2538657967,FR +2538657140,2538657439,FR +2538657440,2538657443,ES +2538657444,2538657967,FR 2538657968,2538657983,IE 2538657984,2538658347,FR 2538658348,2538658351,DE @@ -59234,7 +59585,9 @@ 2548831506,2548831506,FR 2548831507,2548831534,AT 2548831535,2548831535,FR -2548831536,2548831963,AT +2548831536,2548831735,AT +2548831736,2548831736,FR +2548831737,2548831963,AT 2548831964,2548831964,US 2548831965,2548832017,AT 2548832018,2548832018,ES @@ -59254,13 +59607,18 @@ 2548879360,2548883455,GB 2548883456,2548887551,SK 2548887552,2548891647,MK -2548891648,2548908157,BG -2548908158,2548908158,ES -2548908159,2548928511,BG +2548891648,2548905983,BG +2548905984,2548907007,ES +2548907008,2548908031,BG +2548908032,2548908543,ES +2548908544,2548924927,BG +2548924928,2548926463,ES +2548926464,2548928511,BG 2548928512,2548932607,KZ 2548932608,2548934655,NL 2548934656,2548936703,RU -2548936704,2548938495,SE +2548936704,2548938239,SE +2548938240,2548938495,GB 2548938496,2548938751,CH 2548938752,2548939519,SE 2548939520,2548939775,ES @@ -59310,9 +59668,7 @@ 2549882384,2549882399,FI 2549882400,2549882879,SE 2549882880,2549884927,CH -2549884928,2549886207,DE -2549886208,2549886463,CH -2549886464,2549891071,DE +2549884928,2549891071,DE 2549891072,2549899263,RU 2549899264,2549901311,PS 2549901312,2549903359,RU @@ -59431,9 +59787,11 @@ 2569863168,2569885183,US 2569885184,2569885439,CH 2569885440,2569928703,US -2569928704,2569936891,CH -2569936892,2569936892,US -2569936893,2569994239,CH +2569928704,2569936383,CH +2569936384,2569936895,US +2569936896,2569970175,CH +2569970176,2569970687,US +2569970688,2569994239,CH 2569994496,2570125311,US 2570125312,2570190847,BE 2570190848,2572681215,US @@ -59612,7 +59970,7 @@ 2584748800,2584749055,US 2584749056,2584749119,MY 2584749120,2584749311,ZA -2584749312,2584749567,US +2584749312,2584749567,NL 2584749568,2584749631,MY 2584749632,2584749823,ZA 2584749824,2584750079,US @@ -59782,7 +60140,9 @@ 2586828800,2586828863,CH 2586828864,2586829311,US 2586829312,2586829823,CH -2586829824,2586869759,US +2586829824,2586854399,US +2586854400,2586855423,ES +2586855424,2586869759,US 2586869760,2586870015,ES 2586870016,2586870271,US 2586870272,2586875903,ES @@ -59792,7 +60152,8 @@ 2586876928,2586882559,ES 2586882560,2586883071,US 2586883072,2586884095,ES -2586884096,2586952191,US +2586884096,2586889601,US +2586889603,2586952191,US 2586952192,2586952447,FR 2586952448,2586952703,US 2586952704,2586953471,FR @@ -59929,7 +60290,13 @@ 2588075008,2588076031,MU 2588076032,2588078079,GA 2588078080,2588078335,KE -2588078336,2588080127,MU +2588078336,2588078591,ZA +2588078592,2588078847,FR +2588078848,2588079103,TZ +2588079104,2588079359,ZA +2588079360,2588079615,DJ +2588079616,2588079871,GB +2588079872,2588080127,MU 2588080128,2588082175,ZA 2588082176,2588147711,RE 2588147712,2588164095,CI @@ -60083,7 +60450,7 @@ 2592027648,2592028671,US 2592028672,2592028799,NG 2592028800,2592028927,KE -2592028928,2592029183,US +2592028928,2592029183,ZA 2592029184,2592029311,CI 2592029312,2592030207,ZA 2592030208,2592030335,GH @@ -60095,7 +60462,9 @@ 2592038912,2592043007,DZ 2592043008,2592047103,ZA 2592047104,2592079871,AO -2596274176,2598371327,SC +2596274176,2596339711,SC +2596339712,2597322751,ZA +2597322752,2598371327,US 2598371328,2598895615,UG 2599419904,2600468479,DZ 2600468480,2600534015,ZM @@ -60364,7 +60733,8 @@ 2618228736,2618294271,US 2618359808,2618425343,PL 2618425344,2618490879,FR -2618490880,2618687487,US +2618490880,2618564235,US +2618564240,2618687487,US 2618687488,2618753023,AU 2618753024,2618884095,US 2618884096,2618949631,CH @@ -60442,8 +60812,8 @@ 2621689280,2621689343,CZ 2621689344,2621689599,AU 2621689600,2621689855,CA -2621689856,2621690879,SG -2621690880,2621693951,CY +2621689856,2621691903,SG +2621691904,2621693951,CY 2621693952,2621698047,DE 2621698048,2621702143,GB 2621702144,2621767679,US @@ -60574,7 +60944,9 @@ 2624847872,2624913407,NO 2624913408,2624978943,US 2624978944,2625044479,FR -2625044480,2625961983,US +2625044480,2625134559,US +2625134560,2625134591,UA +2625134592,2625961983,US 2625961984,2626027519,LU 2626027520,2626093055,US 2626093056,2626158591,CH @@ -60719,7 +61091,11 @@ 2637733376,2637733631,SG 2637733632,2637742079,US 2637742080,2637744127,IE -2637744128,2637746751,US +2637744128,2637746175,US +2637746176,2637746183,FI +2637746184,2637746191,IE +2637746192,2637746199,NL +2637746200,2637746751,US 2637746752,2637746759,SG 2637746760,2637756415,US 2637756416,2637757439,NL @@ -60748,7 +61124,9 @@ 2640183296,2640248831,FI 2640248832,2640314367,US 2640314368,2640379903,GB -2640379904,2640406527,NL +2640379904,2640402431,NL +2640402432,2640404479,ES +2640404480,2640406527,NL 2640406528,2640408575,DE 2640408576,2640410623,NL 2640410624,2640411135,US @@ -60972,7 +61350,8 @@ 2652512256,2652520447,CA 2652520448,2652528639,US 2652528640,2652528895,AR -2652528896,2652541183,US +2652528896,2652537607,US +2652537616,2652541183,US 2652541184,2652541439,NL 2652541440,2653089791,US 2653090048,2653159423,US @@ -61075,7 +61454,12 @@ 2659385344,2659450879,FI 2659450880,2659516415,HK 2659516416,2659581951,CH -2659581952,2660040703,US +2659581952,2659991552,US +2659991553,2660007935,PS +2660007936,2660016127,SG +2660016128,2660024319,ID +2660024320,2660032511,AU +2660032512,2660040703,NZ 2660040704,2660106239,CA 2660106240,2660171775,US 2660171776,2660237311,GB @@ -61191,7 +61575,9 @@ 2667565431,2667566335,AT 2667566336,2667566591,US 2667566592,2667566847,DE -2667566848,2667567103,AT +2667566848,2667566925,AT +2667566926,2667566926,FR +2667566927,2667567103,AT 2667567104,2667569151,SE 2667569152,2667571199,GB 2667571200,2667573247,ES @@ -61261,7 +61647,9 @@ 2671711480,2671711483,DE 2671711484,2671711573,US 2671711574,2671711574,GB -2671711575,2671718827,US +2671711575,2671712029,US +2671712030,2671712030,AR +2671712031,2671718827,US 2671718828,2671718831,GB 2671718832,2671720289,US 2671720290,2671720290,GB @@ -61287,7 +61675,8 @@ 2673737728,2673803263,US 2673803264,2673868799,FR 2673868800,2674130943,US -2674130944,2674163711,NL +2674130944,2674139135,DE +2674139136,2674163711,NL 2674163712,2674164175,GB 2674164176,2674164191,FR 2674164192,2674171903,GB @@ -61309,7 +61698,8 @@ 2674917376,2675048447,US 2675048448,2675113983,GB 2675113984,2675245055,US -2675245056,2675310591,NZ +2675245056,2675302399,NZ +2675302400,2675310591,HK 2675310592,2675574239,US 2675574240,2675574271,IT 2675574272,2675574895,US @@ -61606,7 +61996,9 @@ 2684157952,2684159999,NL 2684160000,2684162047,NO 2684162048,2684164095,EE -2684164096,2684166143,SE +2684164096,2684165119,SE +2684165120,2684165375,GB +2684165376,2684166143,SE 2684166144,2684170239,TR 2684170240,2684178431,GB 2684178432,2684180479,TR @@ -61658,7 +62050,7 @@ 2685463296,2685468671,CN 2685468672,2685599743,JP 2685599744,2685607935,US -2685612032,2685613055,CN +2685612032,2685613055,MO 2685613056,2685614079,TW 2685628416,2685632511,ZA 2685652992,2685656063,CN @@ -61938,7 +62330,8 @@ 2705688320,2705688575,DE 2705688576,2705691647,US 2705691648,2705692671,GB -2705692672,2705710079,US +2705692672,2705706522,US +2705706524,2705710079,US 2705710080,2705711103,IN 2705711104,2705784831,US 2705784832,2705850367,GB @@ -62025,7 +62418,9 @@ 2713387008,2713452543,CA 2713452544,2713583615,US 2713583616,2713649151,AR -2713649152,2713976831,US +2713649152,2713947395,US +2713947396,2713947396,DE +2713947397,2713976831,US 2713976832,2714042367,VE 2714042368,2714238975,US 2714238976,2714304511,TH @@ -62077,7 +62472,9 @@ 2714405072,2714405087,JP 2714405088,2714405151,US 2714405152,2714405167,JP -2714405168,2714407113,US +2714405168,2714405727,US +2714405728,2714405759,JP +2714405760,2714407113,US 2714407114,2714407114,JP 2714407115,2714407160,US 2714407161,2714407161,JP @@ -62102,13 +62499,13 @@ 2714419776,2714419871,US 2714419872,2714419903,SG 2714419904,2714420479,US -2714420480,2714420511,JP +2714420480,2714420511,SG 2714420512,2714421439,US 2714421440,2714421471,SG 2714421472,2714421567,US 2714421568,2714421599,SG 2714421600,2714422879,US -2714422880,2714422911,CA +2714422880,2714422911,SG 2714422912,2714428767,US 2714428768,2714428783,JP 2714428784,2714430719,US @@ -62946,7 +63343,9 @@ 2760120840,2760120843,PT 2760120844,2760121663,FR 2760121664,2760121727,ES -2760121728,2760130399,FR +2760121728,2760129999,FR +2760130000,2760130015,ES +2760130016,2760130399,FR 2760130400,2760130431,ES 2760130432,2760130559,GB 2760130560,2760132159,FR @@ -62983,9 +63382,7 @@ 2760150263,2760150263,PL 2760150264,2760150871,FR 2760150872,2760150872,DE -2760150873,2760151055,FR -2760151056,2760151071,ES -2760151072,2760151208,FR +2760150873,2760151208,FR 2760151209,2760151209,CZ 2760151210,2760151335,FR 2760151336,2760151339,GB @@ -63108,7 +63505,7 @@ 2761984000,2761985023,KM 2761985024,2761986047,BJ 2761986048,2761987071,LY -2761987072,2761988095,ZA +2761987072,2761989119,ZA 2761989120,2761990143,CG 2761990144,2761992191,UG 2761992192,2761996287,ZA @@ -63151,6 +63548,7 @@ 2769092608,2769158143,US 2769158144,2769223679,JP 2769289216,2769321983,LY +2769321984,2769338367,ZA 2769340416,2769342463,ZA 2769342464,2769346559,BF 2769346560,2769354751,ZA @@ -63166,7 +63564,7 @@ 2770993152,2771124223,IN 2771124224,2771451903,US 2771517440,2771648511,TN -2771648512,2771910655,ZA +2771648512,2771910655,US 2771910656,2772434943,ZM 2772434944,2772762623,US 2772762624,2772828159,AU @@ -63234,7 +63632,9 @@ 2779381760,2779906047,US 2779906048,2779971583,CA 2779971584,2780037119,US -2780037120,2780075007,ZA +2780037120,2780039167,ZA +2780039168,2780043263,US +2780043264,2780075007,ZA 2780075008,2780075263,US 2780075264,2780075394,ZA 2780075395,2780075395,US @@ -63310,9 +63710,7 @@ 2782855168,2782990335,US 2782990336,2782990847,GB 2782990848,2782995455,US -2782995456,2782995526,CA -2782995527,2782995527,US -2782995528,2782996479,CA +2782995456,2782996479,CA 2782996480,2783002623,US 2783002624,2783002879,DK 2783002880,2783003135,US @@ -63340,9 +63738,7 @@ 2783313920,2783379455,US 2783379456,2783380991,SC 2783380992,2783381503,NZ -2783381504,2783381759,SC -2783381760,2783382015,US -2783382016,2783382527,SC +2783381504,2783382527,SC 2783382528,2783383551,US 2783383552,2783387647,CA 2783387648,2783391743,GB @@ -63450,7 +63846,9 @@ 2803826688,2803892223,US 2803892224,2805465087,CA 2805465088,2805989375,UY -2805989376,2806644735,US +2805989376,2806012937,US +2806012938,2806012938,HK +2806012939,2806644735,US 2806644736,2806710271,CA 2806710272,2807103487,US 2807103488,2807169023,NL @@ -63485,7 +63883,9 @@ 2807607296,2807611391,CA 2807611392,2807824383,US 2807824384,2807889919,CA -2807889920,2808545279,US +2807889920,2808217599,US +2808217600,2808283135,GB +2808283136,2808545279,US 2808545280,2808610815,AU 2808610816,2808872959,US 2808872960,2808938495,UY @@ -63681,7 +64081,9 @@ 2818620416,2818623487,BR 2818623488,2818625535,AR 2818625536,2818626559,BR -2818626560,2818627583,HN +2818626560,2818626783,HN +2818626784,2818626799,BR +2818626800,2818627583,HN 2818627584,2818628607,BR 2818628608,2818629631,MX 2818629632,2818634751,BR @@ -63694,13 +64096,7 @@ 2822590464,2822591629,IE 2822591630,2822591630,US 2822591631,2822602751,IE -2822602752,2822643903,US -2822643904,2822643967,SG -2822643968,2822644479,US -2822644480,2822644735,SG -2822644736,2822646783,US -2822646784,2822647295,SG -2822647296,2822701055,US +2822602752,2822701055,US 2822701056,2822709247,NL 2822709248,2822723583,IE 2822723584,2822724095,US @@ -63746,7 +64142,11 @@ 2824492032,2824493055,AR 2824493056,2824494079,BR 2824494080,2824495103,VE -2824495104,2824496127,HN +2824495104,2824495263,HN +2824495264,2824495279,DE +2824495280,2824496087,HN +2824496088,2824496095,NL +2824496096,2824496127,HN 2824496128,2824498175,BR 2824498176,2824499199,HN 2824499200,2824503295,BR @@ -64016,6 +64416,8 @@ 2831537152,2831538175,BR 2831538176,2831539199,AR 2831539200,2831544319,BR +2831544320,2831545343,BO +2831545344,2831546367,BR 2831546368,2831547391,AR 2831547392,2831548415,BR 2831548416,2831613951,AU @@ -64166,13 +64568,17 @@ 2837970944,2838036479,US 2838036480,2838233087,CH 2838233088,2838237183,GB -2838237184,2838255167,US +2838237184,2838247551,US +2838247552,2838247583,NL +2838247584,2838255167,US 2838255168,2838255199,JP 2838255200,2838260095,US 2838260096,2838260127,IE 2838260128,2838261759,US 2838261760,2838265855,GB -2838265856,2838298623,US +2838265856,2838266751,US +2838266752,2838266783,NL +2838266784,2838298623,US 2838298624,2838298655,NL 2838298656,2838298687,US 2838298688,2838298975,NL @@ -64189,9 +64595,7 @@ 2838301120,2838301183,US 2838301184,2838301695,NL 2838301696,2838301951,US -2838301952,2838302095,NL -2838302096,2838302111,US -2838302112,2838304127,NL +2838301952,2838304127,NL 2838304128,2838304159,US 2838304160,2838304223,NL 2838304224,2838304255,US @@ -64199,13 +64603,19 @@ 2838304320,2838304383,US 2838304384,2838307055,NL 2838307056,2838307063,US -2838307064,2838307311,NL +2838307064,2838307295,NL +2838307296,2838307303,US +2838307304,2838307311,NL 2838307312,2838307327,US 2838307328,2838315023,NL 2838315024,2838315039,US 2838315040,2838315279,NL 2838315280,2838315295,US -2838315296,2838315695,NL +2838315296,2838315391,NL +2838315392,2838315407,US +2838315408,2838315567,NL +2838315568,2838315583,US +2838315584,2838315695,NL 2838315696,2838315711,US 2838315712,2838315740,NL 2838315741,2838315741,US @@ -64217,13 +64627,11 @@ 2838316624,2838316631,US 2838316632,2838316767,NL 2838316768,2838316783,US -2838316784,2838317901,NL -2838317902,2838317903,US -2838317904,2838318511,NL +2838316784,2838318511,NL 2838318512,2838318527,US -2838318528,2838319079,NL -2838319080,2838319087,US -2838319088,2838320543,NL +2838318528,2838320191,NL +2838320192,2838320192,US +2838320193,2838320543,NL 2838320544,2838320551,US 2838320552,2838320927,NL 2838320928,2838320943,US @@ -64231,17 +64639,17 @@ 2838320960,2838320975,US 2838320976,2838321471,NL 2838321472,2838321535,US -2838321536,2838323007,NL -2838323008,2838323039,US -2838323040,2838323071,NL +2838321536,2838323071,NL 2838323072,2838323103,US 2838323104,2838323455,NL 2838323456,2838323487,US 2838323488,2838323535,NL -2838323536,2838323551,US -2838323552,2838324039,NL +2838323536,2838323583,US +2838323584,2838324039,NL 2838324040,2838324047,US -2838324048,2838324415,NL +2838324048,2838324063,NL +2838324064,2838324065,US +2838324066,2838324415,NL 2838324416,2838324423,US 2838324424,2838325343,NL 2838325344,2838325375,US @@ -64249,11 +64657,9 @@ 2838325440,2838325471,JP 2838325472,2838325983,NL 2838325984,2838326015,US -2838326016,2838327071,NL -2838327072,2838327103,US -2838327104,2838327967,NL -2838327968,2838327999,US -2838328000,2838328079,NL +2838326016,2838327087,NL +2838327088,2838327103,US +2838327104,2838328079,NL 2838328080,2838328095,US 2838328096,2838328259,NL 2838328260,2838328260,US @@ -64275,23 +64681,29 @@ 2838333904,2838333919,US 2838333920,2838334335,NL 2838334336,2838334351,US -2838334352,2838335007,NL -2838335008,2838335023,US -2838335024,2838337279,NL +2838334352,2838337279,NL 2838337280,2838337295,US -2838337296,2838337761,NL +2838337296,2838337759,NL +2838337760,2838337761,IN 2838337762,2838337763,US -2838337764,2838338271,NL +2838337764,2838338177,NL +2838338178,2838338179,IN +2838338180,2838338271,NL 2838338272,2838338303,JP 2838338304,2838338567,NL 2838338568,2838338575,US -2838338576,2838338773,NL +2838338576,2838338703,NL +2838338704,2838338719,IN +2838338720,2838338771,NL +2838338772,2838338773,IN 2838338774,2838338783,US 2838338784,2838338815,NL 2838338816,2838338823,US 2838338824,2838339743,NL -2838339744,2838339751,US -2838339752,2838340015,NL +2838339744,2838339759,US +2838339760,2838339871,NL +2838339872,2838339903,US +2838339904,2838340015,NL 2838340016,2838340031,US 2838340032,2838340351,NL 2838340352,2838340383,US @@ -64305,9 +64717,7 @@ 2838340960,2838340991,US 2838340992,2838341951,NL 2838341952,2838341967,US -2838341968,2838342751,NL -2838342752,2838342783,US -2838342784,2838343071,NL +2838341968,2838343071,NL 2838343072,2838343103,US 2838343104,2838344451,NL 2838344452,2838344455,US @@ -64343,7 +64753,9 @@ 2838348064,2838348079,US 2838348080,2838348231,NL 2838348232,2838348239,US -2838348240,2838348655,NL +2838348240,2838348415,NL +2838348416,2838348431,US +2838348432,2838348655,NL 2838348656,2838348671,US 2838348672,2838348759,NL 2838348760,2838348799,US @@ -64352,14 +64764,16 @@ 2838349376,2838349519,NL 2838349520,2838349535,US 2838349536,2838349807,NL -2838349808,2838349839,US -2838349840,2838350911,NL +2838349808,2838349823,US +2838349824,2838350911,NL 2838350912,2838350927,US 2838350928,2838351295,NL 2838351296,2838351327,US 2838351328,2838351623,NL 2838351624,2838351631,US -2838351632,2838352575,NL +2838351632,2838351711,NL +2838351712,2838351743,CO +2838351744,2838352575,NL 2838352576,2838352583,US 2838352584,2838352639,NL 2838352640,2838352655,CO @@ -64375,8 +64789,8 @@ 2838358688,2838358719,US 2838358720,2838358975,NL 2838358976,2838359007,US -2838359008,2838360031,NL -2838360032,2838360063,US +2838359008,2838360047,NL +2838360048,2838360063,US 2838360064,2838360639,NL 2838360640,2838360735,US 2838360736,2838360767,NL @@ -64393,9 +64807,7 @@ 2838363200,2838363231,US 2838363232,2838363455,NL 2838363456,2838363487,US -2838363488,2838363935,NL -2838363936,2838363967,US -2838363968,2838364159,NL +2838363488,2838364159,NL 2838364160,2838396927,US 2838396928,2838397007,NL 2838397008,2838397023,US @@ -64405,21 +64817,23 @@ 2838397248,2838397279,JP 2838397280,2838397311,NL 2838397312,2838397343,US -2838397344,2838397823,NL -2838397824,2838397951,US -2838397952,2838400191,NL +2838397344,2838398399,NL +2838398400,2838398431,US +2838398432,2838398575,NL +2838398576,2838398591,US +2838398592,2838400191,NL 2838400192,2838400195,US 2838400196,2838400703,NL 2838400704,2838400735,US -2838400736,2838400927,NL -2838400928,2838400959,US +2838400736,2838400895,NL +2838400896,2838400959,US 2838400960,2838401023,NL 2838401024,2838405119,GB 2838405120,2838405183,NL 2838405184,2838405215,US -2838405216,2838405983,NL -2838405984,2838406015,US -2838406016,2838406087,NL +2838405216,2838405767,NL +2838405768,2838405775,US +2838405776,2838406087,NL 2838406088,2838406095,US 2838406096,2838406271,NL 2838406272,2838406279,US @@ -64435,9 +64849,15 @@ 2838408864,2838408895,US 2838408896,2838409439,NL 2838409440,2838409471,US -2838409472,2838430271,NL -2838430272,2838430279,US -2838430280,2838431039,NL +2838409472,2838409479,NL +2838409480,2838409487,US +2838409488,2838410719,NL +2838410720,2838410751,US +2838410752,2838410895,NL +2838410896,2838410911,US +2838410912,2838429983,NL +2838429984,2838430015,US +2838430016,2838431039,NL 2838431040,2838431135,US 2838431136,2838431903,NL 2838431904,2838431935,US @@ -64445,23 +64865,31 @@ 2838432000,2838432127,US 2838432128,2838433183,NL 2838433184,2838433199,US -2838433200,2838433375,NL -2838433376,2838433407,US -2838433408,2838433519,NL -2838433520,2838433527,US -2838433528,2838433599,NL +2838433200,2838433201,NL +2838433202,2838433202,US +2838433203,2838433519,NL +2838433520,2838433535,US +2838433536,2838433599,NL 2838433600,2838433607,US -2838433608,2838433663,NL -2838433664,2838433695,US -2838433696,2838433791,NL -2838433792,2838433823,US -2838433824,2838433919,NL +2838433608,2838433791,NL +2838433792,2838433855,US +2838433856,2838433919,NL 2838433920,2838433951,US 2838433952,2838434271,NL 2838434272,2838434303,US 2838434304,2838434311,NL 2838434312,2838434319,US -2838434320,2838560767,NL +2838434320,2838435519,NL +2838435520,2838435551,US +2838435552,2838436815,NL +2838436816,2838436831,US +2838436832,2838437359,NL +2838437360,2838437361,US +2838437362,2838438127,NL +2838438128,2838438135,US +2838438136,2838438415,NL +2838438416,2838438431,US +2838438432,2838560767,NL 2838560768,2838626303,CH 2838626304,2838626575,US 2838626576,2838626591,CN @@ -64473,7 +64901,9 @@ 2838631968,2838631999,DE 2838632000,2838632095,US 2838632096,2838632127,DE -2838632128,2838642719,US +2838632128,2838633295,US +2838633296,2838633311,SA +2838633312,2838642719,US 2838642720,2838642723,GB 2838642724,2838643407,US 2838643408,2838643408,GB @@ -64481,7 +64911,9 @@ 2838643488,2838643519,HK 2838643520,2838643696,US 2838643697,2838643697,GB -2838643698,2838645839,US +2838643698,2838643951,US +2838643952,2838643967,NL +2838643968,2838645839,US 2838645840,2838645855,GB 2838645856,2838646207,US 2838646208,2838646239,GB @@ -64503,7 +64935,9 @@ 2838657296,2838657299,GB 2838657300,2838657343,US 2838657344,2838657351,GB -2838657352,2838663167,US +2838657352,2838658607,US +2838658608,2838658623,NL +2838658624,2838663167,US 2838663168,2838663175,NL 2838663176,2838663807,US 2838663808,2838663809,BO @@ -64513,7 +64947,13 @@ 2838664128,2838664135,ES 2838664136,2838664167,US 2838664168,2838664175,VN -2838664176,2838708223,US +2838664176,2838665759,US +2838665760,2838665791,JP +2838665792,2838667103,US +2838667104,2838667135,NL +2838667136,2838675519,US +2838675520,2838675527,GR +2838675528,2838708223,US 2838708224,2838724607,NO 2838724608,2838757375,US 2838757376,2838822911,CH @@ -64535,9 +64975,13 @@ 2838871296,2838871311,CA 2838871312,2838871327,US 2838871328,2838871343,CA -2838871344,2838881055,US +2838871344,2838871503,US +2838871504,2838871511,CA +2838871512,2838881055,US 2838881056,2838881087,AT -2838881088,2838887271,US +2838881088,2838881407,US +2838881408,2838881423,IN +2838881424,2838887271,US 2838887272,2838887279,IN 2838887280,2838887455,US 2838887456,2838887487,BO @@ -64561,9 +65005,13 @@ 2838931017,2838931023,CZ 2838931024,2838931667,US 2838931668,2838931671,CZ -2838931672,2838938991,US +2838931672,2838933919,US +2838933920,2838933951,NL +2838933952,2838938991,US 2838938992,2838939007,AU -2838939008,2838946735,US +2838939008,2838942753,US +2838942754,2838942755,IN +2838942756,2838946735,US 2838946736,2838946751,CA 2838946752,2838957535,US 2838957536,2838957551,HK @@ -64577,9 +65025,7 @@ 2838960830,2838960831,CZ 2838960832,2838961023,US 2838961024,2838961031,CZ -2838961032,2838965215,US -2838965216,2838965247,NL -2838965248,2838968671,US +2838961032,2838968671,US 2838968672,2838968687,CN 2838968688,2838969535,US 2838969536,2838969536,IL @@ -64593,7 +65039,9 @@ 2838989672,2838989679,CA 2838989680,2838990719,US 2838990720,2838990751,CA -2838990752,2838996063,US +2838990752,2838995823,US +2838995824,2838995839,NL +2838995840,2838996063,US 2838996064,2838996095,HK 2838996096,2838998015,US 2838998016,2838998047,CA @@ -64784,7 +65232,8 @@ 2856058880,2856124415,CH 2856124416,2856184831,US 2856184832,2856185855,GB -2856185856,2856438783,US +2856185856,2856353796,US +2856353798,2856438783,US 2856438784,2856439039,BR 2856439040,2856439295,US 2856439296,2856439551,BR @@ -64795,23 +65244,40 @@ 2856779776,2857082879,US 2857082880,2857086975,CA 2857086976,2857238527,US -2857238528,2857247743,BR +2857238528,2857248767,BR +2857249792,2857250815,AR 2857250816,2857252863,BR 2857252864,2857253887,CO 2857253888,2857256959,BR 2857256960,2857257983,AR -2857260032,2857261055,BR +2857257984,2857261055,BR 2857261056,2857262079,AR -2857262080,2857264127,BR +2857262080,2857266175,BR 2857266176,2857267199,AR 2857267200,2857268223,CL 2857268224,2857270271,BR 2857270272,2857271295,AR -2857272320,2857273343,BR +2857271296,2857273343,BR 2857273344,2857274367,AR 2857274368,2857281535,BR +2857283584,2857285631,BR 2857285632,2857285887,AR -2857287680,2857291775,AR +2857286144,2857286655,BR +2857286656,2857287679,MX +2857287680,2857288703,AR +2857288704,2857289727,BR +2857289728,2857290751,AR +2857291776,2857293823,BR +2857294848,2857295871,AR +2857295872,2857308159,BR +2857308160,2857309183,AR +2857309184,2857313279,BR +2857313280,2857314303,PE +2857314304,2857315327,CL +2857315328,2857317375,BR +2857323520,2857324031,BR +2857324032,2857324543,US +2857336832,2857369599,BR 2857631744,2857633791,BR 2857633792,2857634815,TT 2857634816,2857643007,BR @@ -64956,6 +65422,7 @@ 2867457024,2867462143,BR 2867462144,2867593215,US 2867593216,2867724287,CH +2867724288,2867789823,BR 2867855360,2868117503,US 2868379648,2868380159,IN 2868380160,2868380671,BR @@ -65088,7 +65555,8 @@ 2868623360,2868623871,PH 2868623872,2868624383,IN 2868624384,2868625407,ES -2868625408,2868649983,US +2868625408,2868628639,US +2868628672,2868649983,US 2868649984,2868651263,DE 2868651264,2868651391,US 2868651392,2868652031,DE @@ -65258,7 +65726,10 @@ 2890152960,2890153983,GR 2890153984,2890161151,US 2890161152,2890162175,ES -2890162176,2890956799,US +2890162176,2890163199,US +2890163200,2890164223,PT +2890164224,2890165247,TH +2890165248,2890956799,US 2890956800,2890989567,AE 2890989568,2891017215,US 2891017216,2891017471,JP @@ -65413,21 +65884,22 @@ 2892996608,2892996863,CA 2892996864,2892997119,AU 2892997120,2892997375,CA -2892997376,2892997887,AU -2892997888,2892998655,GB +2892997376,2892997631,BG +2892997632,2892997887,AU +2892997888,2892998143,JP +2892998144,2892998655,GB 2892998656,2892998911,HK 2892998912,2892999167,MX -2892999168,2892999423,MT +2892999168,2892999423,CR 2892999424,2892999551,TW 2892999552,2893000191,US 2893000192,2893000447,JP -2893000448,2893000703,US -2893000704,2893000959,HK +2893000448,2893000959,HK 2893000960,2893001215,CA 2893001216,2893001727,GB 2893001728,2893001983,IT 2893001984,2893002239,US -2893002240,2893002495,CH +2893002240,2893002495,EE 2893002496,2893003007,US 2893003008,2893003263,KR 2893003264,2893003775,GB @@ -65444,7 +65916,8 @@ 2893006848,2893007103,DE 2893007104,2893007359,US 2893007360,2893007615,IE -2893007616,2893009663,US +2893007616,2893007871,DE +2893007872,2893009663,US 2893009664,2893010175,GB 2893010176,2893010943,US 2893010944,2893011199,AT @@ -65457,7 +65930,9 @@ 2893012736,2893015039,US 2893015040,2893015295,CA 2893015296,2893015551,BS -2893015552,2893676543,US +2893015552,2893016575,US +2893016576,2893016831,SE +2893016832,2893676543,US 2893676544,2893807615,JP 2893807616,2894921727,US 2894921728,2895118335,GB @@ -65566,7 +66041,9 @@ 2915516928,2915517439,US 2915517440,2915518463,DK 2915518464,2915520511,GB -2915520512,2915520671,AU +2915520512,2915520642,AU +2915520643,2915520643,US +2915520644,2915520671,AU 2915520672,2915520703,US 2915520704,2915521023,AU 2915521024,2915521279,JP @@ -65590,8 +66067,8 @@ 2915528864,2915528879,NL 2915528880,2915528927,US 2915528928,2915528943,NL -2915528944,2915528991,US -2915528992,2915529023,NL +2915528944,2915528959,US +2915528960,2915529023,NL 2915529024,2915529183,US 2915529184,2915529215,NL 2915529216,2915795013,US @@ -65675,7 +66152,9 @@ 2917268480,2917269113,JM 2917269114,2917269114,TC 2917269115,2917269503,JM -2917269504,2917449727,US +2917269504,2917445887,US +2917445888,2917446143,DE +2917446144,2917449727,US 2917449728,2917457919,PR 2917457920,2917458943,US 2917458944,2917466111,PR @@ -65730,13 +66209,17 @@ 2918023168,2918043647,US 2918043648,2918047743,CA 2918047744,2918051839,US -2918051840,2918121471,CA +2918051840,2918110463,CA +2918110464,2918110719,US +2918110720,2918121471,CA 2918121472,2918154239,US 2918154240,2918170623,CA 2918170624,2918171391,US 2918171392,2918171647,SG 2918171648,2918171903,US -2918171904,2918172416,SG +2918171904,2918172159,SG +2918172160,2918172415,US +2918172416,2918172416,SG 2918172417,2918174463,US 2918174464,2918174719,MX 2918174720,2918187007,US @@ -65789,7 +66272,9 @@ 2918596608,2918604799,CA 2918604800,2918612991,US 2918612992,2918621183,CA -2918621184,2918653951,US +2918621184,2918628351,US +2918628352,2918628607,DE +2918628608,2918653951,US 2918653952,2918662143,CA 2918662144,2918678527,US 2918678528,2918686719,CA @@ -65828,7 +66313,9 @@ 2919174144,2919178239,CA 2919178240,2919186431,US 2919186432,2919190527,CA -2919190528,2919204747,US +2919190528,2919204543,US +2919204544,2919204551,NL +2919204552,2919204747,US 2919204748,2919204755,NL 2919204756,2919205027,US 2919205028,2919205031,NL @@ -65880,7 +66367,11 @@ 2927578624,2927578879,SG 2927578880,2927581183,US 2927581184,2927581439,SG -2927581440,2927981567,US +2927581440,2927582863,US +2927582864,2927582879,SG +2927582880,2927582935,US +2927582936,2927582943,SG +2927582944,2927981567,US 2927981568,2927982591,SG 2927982592,2928175551,US 2928175552,2928175559,VN @@ -66160,7 +66651,9 @@ 2954824288,2954824319,ES 2954824320,2954824415,FR 2954824416,2954824431,GB -2954824432,2954824687,FR +2954824432,2954824639,FR +2954824640,2954824655,GB +2954824656,2954824687,FR 2954824688,2954824703,FI 2954824704,2954824923,FR 2954824924,2954824927,ES @@ -66687,7 +67180,7 @@ 2956544000,2956546047,RU 2956546048,2956548095,FR 2956548096,2956549119,SE -2956549120,2956550143,HR +2956549120,2956550143,SI 2956550144,2956554239,ES 2956554240,2956558335,IT 2956558336,2956574719,DE @@ -67198,7 +67691,7 @@ 2960980480,2960980991,SE 2960980992,2960981247,PT 2960981248,2960982015,NL -2960982016,2960990207,RO +2960982016,2960990207,DE 2960990208,2960998399,UA 2960998400,2961057023,RU 2961057024,2961057279,IE @@ -67207,26 +67700,26 @@ 2961057792,2961061887,RU 2961061888,2961062911,PL 2961062912,2961063935,UA -2961063936,2961064191,DE +2961063936,2961064191,US 2961064192,2961064447,NL 2961064448,2961064703,RU 2961064704,2961064959,BG 2961064960,2961065215,HK 2961065216,2961065471,AU -2961065472,2961065727,BR +2961065472,2961065727,SE 2961065728,2961066239,HK 2961066240,2961066751,DE 2961066752,2961067007,BG -2961067008,2961067519,DE +2961067008,2961067263,US +2961067264,2961067519,DE 2961067520,2961067775,GB 2961067776,2961068543,DE 2961068544,2961068799,NL 2961068800,2961069055,IT 2961069056,2961069311,SE 2961069312,2961069567,NL -2961069568,2961069823,IN -2961069824,2961070079,DE -2961070080,2961072127,US +2961069568,2961069823,SE +2961069824,2961072127,US 2961072128,2961088511,UA 2961088512,2961088767,SE 2961088768,2961089023,RU @@ -67287,7 +67780,7 @@ 2967421184,2967421439,BG 2967421440,2967421695,RO 2967421696,2967421951,ES -2967421952,2967422975,RO +2967421952,2967422975,US 2967422976,2967425023,KZ 2967425024,2967427071,IR 2967427072,2967428095,NL @@ -67295,14 +67788,15 @@ 2967430144,2967430302,KZ 2967430303,2967430303,US 2967430304,2967431167,KZ -2967431168,2967432191,RO +2967431168,2967432191,US 2967432192,2967432447,GB 2967432448,2967432959,RO 2967432960,2967433727,CH 2967433728,2967434239,RO 2967434240,2967435007,GB 2967435008,2967435263,IE -2967435264,2967441407,RO +2967435264,2967437311,RO +2967437312,2967441407,PL 2967441408,2967445503,MD 2967445504,2967446015,GB 2967446016,2967446527,RO @@ -67358,7 +67852,9 @@ 2969567232,2975594495,BR 2975594496,2975596543,PE 2975596544,2984247295,BR -2984247296,2984935423,MX +2984247296,2984607743,MX +2984607744,2984615935,US +2984615936,2984935423,MX 2984935424,2984936447,AR 2984936448,2984937471,BR 2984937472,2984937607,HN @@ -67756,9 +68252,7 @@ 2988479156,2988479159,ES 2988479160,2988479343,FR 2988479344,2988479359,GB -2988479360,2988479555,FR -2988479556,2988479559,IE -2988479560,2988479603,FR +2988479360,2988479603,FR 2988479604,2988479607,GB 2988479608,2988479727,FR 2988479728,2988479735,DE @@ -67968,9 +68462,7 @@ 2988502882,2988502882,IT 2988502883,2988502983,FR 2988502984,2988502991,ES -2988502992,2988503035,FR -2988503036,2988503039,GB -2988503040,2988503375,FR +2988502992,2988503375,FR 2988503376,2988503383,PT 2988503384,2988503471,FR 2988503472,2988503487,ES @@ -68641,8 +69133,12 @@ 2996682752,2996699135,DK 2996699136,2996764671,UA 2996764672,2996768767,GB -2996768768,2996772863,RU -2996772864,2996776959,UA +2996768768,2996773375,RU +2996773376,2996773631,UA +2996773632,2996773887,KZ +2996773888,2996774143,UA +2996774144,2996774655,RU +2996774656,2996776959,UA 2996776960,2996781055,RU 2996781056,2996785151,RO 2996785152,2996789247,RU @@ -68699,8 +69195,7 @@ 2997513355,2997515683,FR 2997515684,2997515684,GB 2997515685,2997518335,FR -2997518336,2997520383,DE -2997520384,2997520895,NL +2997518336,2997520895,NL 2997520896,2997521151,MT 2997521152,2997521407,US 2997521408,2997521663,UY @@ -69081,8 +69576,7 @@ 3002603520,3002605567,SE 3002605568,3002607615,GB 3002607616,3002609663,IR -3002609664,3002609919,US -3002609920,3002611711,IT +3002609664,3002611711,IT 3002611712,3002613759,CZ 3002613760,3002615807,RU 3002615808,3002617855,PL @@ -69374,9 +69868,7 @@ 3005901312,3005901567,PA 3005901568,3005902079,CO 3005902080,3005902335,PA -3005902336,3005904127,CO -3005904128,3005904383,PA -3005904384,3005905407,CO +3005902336,3005905407,CO 3005905408,3005905663,PA 3005905664,3005906943,CO 3005906944,3005911039,PA @@ -69429,28 +69921,24 @@ 3006288384,3006289151,CR 3006289152,3006289407,PA 3006289408,3006290687,CR -3006290688,3006291199,PA -3006291200,3006291967,CR -3006291968,3006296575,PA -3006296576,3006296831,CR -3006296832,3006308351,PA +3006290688,3006290943,PA +3006290944,3006291967,CR +3006291968,3006308351,PA 3006308352,3006308863,CR 3006308864,3006309631,PA 3006309632,3006310655,CR 3006310656,3006310911,PA 3006310912,3006312447,CR 3006312448,3006312703,PA -3006312704,3006314751,CR -3006314752,3006315263,PA +3006312704,3006315007,CR +3006315008,3006315263,PA 3006315264,3006315775,CR 3006315776,3006316031,PA 3006316032,3006316543,CR 3006316544,3006321151,PA 3006321152,3006321407,CR 3006321408,3006321663,PA -3006321664,3006323711,CR -3006323712,3006323967,PA -3006323968,3006324735,CR +3006321664,3006324735,CR 3006324736,3006328831,PA 3006328832,3006330623,NI 3006330624,3006330879,PA @@ -69511,7 +69999,9 @@ 3007096832,3007098879,AR 3007098880,3007099463,HN 3007099464,3007099471,IN -3007099472,3007100055,HN +3007099472,3007099631,HN +3007099632,3007099639,GB +3007099640,3007100055,HN 3007100056,3007100063,BR 3007100064,3007100407,HN 3007100408,3007100415,PH @@ -69818,10 +70308,11 @@ 3025602560,3025602815,SG 3025602816,3025603071,IN 3025603072,3025603091,HK -3025603092,3025603095,CN -3025603096,3025603103,IN +3025603092,3025603102,CN +3025603103,3025603103,IN 3025603104,3025603215,HK -3025603216,3025603327,IN +3025603216,3025603223,CN +3025603224,3025603327,IN 3025603328,3025603335,GU 3025603336,3025603583,IN 3025603584,3025603839,SG @@ -69848,8 +70339,8 @@ 3025613068,3025613071,IN 3025613072,3025613087,SG 3025613088,3025613119,IN -3025613120,3025613167,SG -3025613168,3025613183,IN +3025613120,3025613175,SG +3025613176,3025613183,IN 3025613184,3025613311,SG 3025613312,3025616895,IN 3025616896,3025617439,SG @@ -69860,11 +70351,12 @@ 3025617504,3025617663,IN 3025617664,3025617919,SG 3025617920,3025618175,MY -3025618176,3025618431,IN +3025618176,3025618179,TH +3025618180,3025618431,IN 3025618432,3025618687,TW 3025618688,3025618943,IN -3025618944,3025619519,SG -3025619520,3025619583,IN +3025618944,3025619535,SG +3025619536,3025619583,IN 3025619584,3025619711,SG 3025619712,3025619967,IN 3025619968,3025620223,TW @@ -69959,17 +70451,16 @@ 3025639680,3025639807,HK 3025639808,3025639839,IN 3025639840,3025639871,HK -3025639872,3025639879,CN -3025639880,3025639887,IN +3025639872,3025639887,CN 3025639888,3025639903,HK 3025639904,3025639967,IN 3025639968,3025639999,SG 3025640000,3025640191,IN 3025640192,3025640447,JP -3025640448,3025640831,MY -3025640832,3025641727,IN -3025641728,3025641743,HK -3025641744,3025641759,IN +3025640448,3025640835,MY +3025640836,3025641727,IN +3025641728,3025641751,HK +3025641752,3025641759,IN 3025641760,3025641775,HK 3025641776,3025641983,IN 3025641984,3025642495,HK @@ -70235,7 +70726,7 @@ 3035331584,3035332607,JP 3035332608,3035333631,AU 3035333632,3035334655,HK -3035334656,3035334911,NL +3035334656,3035334911,DE 3035334912,3035335423,JP 3035335424,3035335679,US 3035335680,3035337727,JP @@ -70360,7 +70851,9 @@ 3048293600,3048293615,ES 3048293616,3048295343,BZ 3048295344,3048295351,CA -3048295352,3048297407,BZ +3048295352,3048295631,BZ +3048295632,3048295647,CA +3048295648,3048297407,BZ 3048297408,3048297423,CA 3048297424,3048298687,BZ 3048298688,3048298719,US @@ -70382,7 +70875,9 @@ 3048304664,3048304671,CR 3048304672,3048304919,BZ 3048304920,3048304927,CR -3048304928,3048305063,BZ +3048304928,3048304999,BZ +3048305000,3048305007,CR +3048305008,3048305063,BZ 3048305064,3048305071,CR 3048305072,3048305471,BZ 3048305472,3048305487,US @@ -70390,7 +70885,9 @@ 3048305504,3048305519,US 3048305520,3048305983,BZ 3048305984,3048305991,US -3048305992,3048307607,BZ +3048305992,3048306671,BZ +3048306672,3048306679,US +3048306680,3048307607,BZ 3048307608,3048307615,CA 3048307616,3048307967,BZ 3048307968,3048307983,CA @@ -70705,7 +71202,9 @@ 3050805312,3050805375,FI 3050805376,3050805759,US 3050805760,3050805791,DK -3050805792,3050829567,US +3050805792,3050827775,US +3050827776,3050828799,IL +3050828800,3050829567,US 3050829568,3050829823,UA 3050829824,3050831871,US 3050831872,3051356159,BR @@ -70730,8 +71229,8 @@ 3051394304,3051395071,US 3051395072,3051395583,NL 3051395584,3051395839,PA -3051395840,3051396095,US -3051396096,3051397119,PA +3051395840,3051396351,US +3051396352,3051397119,PA 3051397120,3051398143,CO 3051398144,3051399167,AR 3051399168,3051400191,DO @@ -70843,8 +71342,9 @@ 3056772096,3056773119,JP 3056773120,3056774143,WS 3056774144,3056775167,JP -3056775168,3056775423,AF -3056775424,3056779263,NO +3056775168,3056778751,NO +3056778752,3056779007,AU +3056779008,3056779263,NO 3056779264,3056791551,JP 3056791552,3056795647,ID 3056795648,3056861183,CN @@ -71447,7 +71947,8 @@ 3104026624,3104027647,NL 3104027648,3104028671,RU 3104028672,3104029695,DE -3104029696,3104030719,IT +3104029696,3104029951,AM +3104029952,3104030719,IT 3104030720,3104031743,HR 3104031744,3104032767,FR 3104032768,3104033791,IR @@ -71841,7 +72342,8 @@ 3104432128,3104433151,DE 3104433152,3104434175,RU 3104434176,3104435199,GB -3104435200,3104438271,RO +3104435200,3104437247,RO +3104437248,3104438271,LU 3104438272,3104439295,FR 3104439296,3104440319,NL 3104440320,3104441343,RU @@ -71863,7 +72365,8 @@ 3104455299,3104455679,NL 3104455680,3104456703,RU 3104456704,3104457727,IL -3104457728,3104458495,DE +3104457728,3104457983,SC +3104457984,3104458495,DE 3104458496,3104459775,IR 3104459776,3104460799,IT 3104460800,3104462847,ES @@ -71898,9 +72401,7 @@ 3104495616,3104496639,JO 3104496640,3104497663,DK 3104497664,3104498687,CH -3104498688,3104499063,NL -3104499064,3104499071,US -3104499072,3104500735,NL +3104498688,3104500735,NL 3104500736,3104501759,CZ 3104501760,3104502783,LY 3104502784,3104503807,DE @@ -72248,7 +72749,9 @@ 3104851968,3104852991,DE 3104852992,3104854015,AT 3104854016,3104855039,GI -3104855040,3104856063,SE +3104855040,3104855295,SE +3104855296,3104855551,GB +3104855552,3104856063,SE 3104856064,3104857087,IL 3104857088,3104858111,SE 3104858112,3104859135,FI @@ -72575,7 +73078,7 @@ 3105182720,3105183743,PL 3105183744,3105184767,SE 3105184768,3105185791,RO -3105185792,3105186815,HR +3105185792,3105186815,AT 3105186816,3105187839,DE 3105187840,3105188863,US 3105188864,3105189887,GB @@ -72695,7 +73198,6 @@ 3105308672,3105309695,RU 3105309696,3105310719,ES 3105310720,3105311743,TR -3105311744,3105312767,SA 3105312768,3105313791,RU 3105313792,3105314815,IT 3105314816,3105315839,GR @@ -72841,9 +73343,7 @@ 3105446912,3105447935,CH 3105447936,3105448959,DE 3105448960,3105449983,TR -3105449984,3105450495,AE -3105450496,3105450751,ES -3105450752,3105451007,AE +3105449984,3105451007,AE 3105451008,3105452031,PL 3105452032,3105453055,ES 3105453056,3105454079,UA @@ -72924,12 +73424,9 @@ 3105531904,3105532927,RU 3105532928,3105533951,RS 3105533952,3105534975,BA -3105534976,3105535103,US -3105535104,3105535231,ZA -3105535232,3105535773,US -3105535775,3105535794,US +3105534976,3105535231,ZA +3105535232,3105535487,US 3105535795,3105535795,RU -3105535796,3105535999,US 3105536000,3105537023,AZ 3105537024,3105538047,AT 3105538048,3105539071,RU @@ -73177,7 +73674,6 @@ 3105790976,3105791999,DE 3105792000,3105793023,DK 3105793024,3105794047,NL -3105794048,3105795071,GB 3105795072,3105796095,LU 3105796096,3105797119,NL 3105797120,3105798143,IT @@ -73508,7 +74004,7 @@ 3106103296,3106104319,NL 3106104320,3106105343,UA 3106105344,3106106367,AE -3106106368,3106106623,DE +3106106368,3106106623,US 3106106624,3106107391,BG 3106107392,3106108415,NL 3106108416,3106110463,RU @@ -74248,7 +74744,7 @@ 3106816000,3106817023,NL 3106817024,3106818047,IT 3106818048,3106819071,IE -3106819072,3106820095,BE +3106819072,3106820095,IL 3106820096,3106821247,CH 3106821248,3106821375,PL 3106821376,3106821631,US @@ -75316,7 +75812,8 @@ 3107899392,3107899903,RU 3107899904,3107900159,KZ 3107900160,3107900415,RU -3107900416,3107901439,SE +3107900416,3107900927,DE +3107900928,3107901439,SE 3107901440,3107902463,NL 3107902464,3107904511,GB 3107904512,3107907583,FR @@ -75794,7 +76291,7 @@ 3108396032,3108397055,ES 3108397056,3108398079,TR 3108398080,3108399103,PT -3108399104,3108400127,NL +3108399104,3108400127,RU 3108400128,3108401151,UA 3108401152,3108402175,NL 3108403200,3108404223,DE @@ -75812,7 +76309,7 @@ 3108416512,3108417535,ES 3108417536,3108418559,FR 3108418560,3108419583,PL -3108419584,3108420607,RU +3108419584,3108420607,NL 3108420608,3108421631,MD 3108421632,3108422655,GB 3108422656,3108423679,IR @@ -75846,7 +76343,7 @@ 3108456448,3108457471,GB 3108457472,3108459519,RU 3108459520,3108460543,DE -3108460544,3108461567,RO +3108460544,3108461567,RS 3108461568,3108462591,DE 3108462592,3108463615,RU 3108463616,3108464639,GB @@ -76118,10 +76615,7 @@ 3108758528,3108759551,DE 3108759552,3108760575,CZ 3108760576,3108761599,LV -3108761600,3108761791,GB -3108761792,3108761855,AT -3108761856,3108762047,GB -3108762048,3108762111,AT +3108761600,3108762111,AT 3108762112,3108762623,GB 3108762624,3108763647,NL 3108763648,3108764671,RU @@ -76783,7 +77277,8 @@ 3109413888,3109414911,CH 3109414912,3109415935,FR 3109415936,3109416959,TR -3109416960,3109417983,FR +3109416960,3109417964,NL +3109417965,3109417983,FR 3109417984,3109419007,GB 3109419008,3109420031,CH 3109420032,3109421055,IT @@ -76822,7 +77317,9 @@ 3109456896,3109457919,PS 3109457920,3109458943,RU 3109458944,3109459711,SE -3109459712,3109459967,GB +3109459712,3109459869,GB +3109459870,3109459870,LV +3109459871,3109459967,GB 3109459968,3109460991,TR 3109460992,3109462015,DE 3109462016,3109463039,LB @@ -76831,7 +77328,9 @@ 3109465088,3109466111,DE 3109466112,3109467135,FR 3109467136,3109468159,IR -3109468160,3109469183,ES +3109468160,3109468415,ES +3109468416,3109468543,GB +3109468544,3109469183,ES 3109469184,3109470207,DE 3109470208,3109471231,AM 3109471232,3109472255,FR @@ -76849,6 +77348,7 @@ 3109486592,3109487615,DE 3109487616,3109488639,BE 3109488640,3109489663,NL +3109489664,3109490687,SK 3109490688,3109491711,AT 3109491712,3109492735,DE 3109492736,3109493759,TR @@ -77115,7 +77615,8 @@ 3109763072,3109765119,IT 3109765120,3109766143,NO 3109766144,3109767167,ES -3109767168,3109768191,UA +3109767168,3109767935,UA +3109767936,3109768191,NL 3109768192,3109769215,GB 3109769216,3109770239,AT 3109770240,3109771263,GB @@ -77235,7 +77736,9 @@ 3109891072,3109892095,ES 3109892096,3109893119,FI 3109893120,3109894143,TR -3109894144,3109895167,DE +3109894144,3109894399,DE +3109894400,3109894655,HK +3109894656,3109895167,DE 3109895168,3109896191,CZ 3109896192,3109897215,HU 3109897216,3109898239,TR @@ -77372,7 +77875,11 @@ 3109994496,3109994751,BG 3109994752,3109995007,IT 3109995008,3109995136,DE -3109995137,3109995519,GB +3109995137,3109995285,GB +3109995286,3109995287,US +3109995288,3109995313,GB +3109995314,3109995315,US +3109995316,3109995519,GB 3109995520,3109996543,NL 3109996544,3109997567,IE 3109997568,3109998591,GB @@ -77637,22 +78144,18 @@ 3110274048,3110277119,RU 3110277120,3110278143,LB 3110278144,3110279167,TR -3110279168,3110279183,PL -3110279184,3110279199,GB -3110279200,3110279215,DE -3110279216,3110279423,GB -3110279424,3110279439,ES -3110279440,3110279455,GB -3110279456,3110279471,NL -3110279472,3110279679,GB -3110279680,3110279695,ES -3110279696,3110279711,GB -3110279712,3110279727,NL -3110279728,3110279935,GB -3110279936,3110279951,PL -3110279952,3110279967,GB -3110279968,3110279983,DE -3110279984,3110280191,GB +3110279168,3110279199,PL +3110279200,3110279231,DE +3110279232,3110279423,GB +3110279424,3110279455,ES +3110279456,3110279487,NL +3110279488,3110279679,GB +3110279680,3110279711,ES +3110279712,3110279743,NL +3110279744,3110279935,GB +3110279936,3110279967,PL +3110279968,3110279999,DE +3110280000,3110280191,GB 3110280192,3110281215,RU 3110281216,3110282239,LB 3110282240,3110283263,SE @@ -78113,7 +78616,6 @@ 3110758400,3110759423,RU 3110759424,3110760447,AT 3110760448,3110761471,HU -3110761472,3110762495,IQ 3110762496,3110763007,NL 3110763008,3110763263,RO 3110763264,3110763519,NL @@ -78421,10 +78923,7 @@ 3111102464,3111103487,DE 3111103488,3111104511,DK 3111104512,3111105535,CH -3111105536,3111105567,RO -3111105568,3111105791,LT -3111105792,3111105855,IL -3111105856,3111106559,LT +3111105536,3111106559,LT 3111106560,3111107583,ES 3111107584,3111108607,HR 3111108608,3111109631,DE @@ -78639,7 +79138,7 @@ 3111315456,3111316479,IT 3111316480,3111317503,NL 3111317504,3111318527,SY -3111318528,3111319551,RU +3111318528,3111319551,UA 3111319552,3111320575,SE 3111320576,3111321599,LB 3111321600,3111322623,CZ @@ -78666,7 +79165,8 @@ 3111343104,3111344127,GB 3111344128,3111344383,NL 3111344384,3111344639,DE -3111344640,3111345151,NL +3111344640,3111344895,NL +3111344896,3111345151,US 3111345152,3111346175,RO 3111346176,3111347199,RU 3111347200,3111348223,LB @@ -78891,7 +79391,7 @@ 3111580672,3111581695,AT 3111581696,3111582719,DK 3111582720,3111583743,IL -3111583744,3111584767,BG +3111583744,3111584767,RU 3111584768,3111585791,IR 3111585792,3111586815,DE 3111586816,3111587839,PL @@ -79124,7 +79624,8 @@ 3111822336,3111824383,NL 3111824384,3111825407,PL 3111825408,3111825919,GB -3111825920,3111826431,RU +3111825920,3111826175,LT +3111826176,3111826431,RU 3111826432,3111827455,DE 3111827456,3111828479,ES 3111828480,3111829503,DK @@ -79263,7 +79764,8 @@ 3111986176,3111987199,RU 3111987200,3111988223,NL 3111988224,3111989247,KZ -3111989248,3111990271,RU +3111989248,3111990015,RU +3111990016,3111990271,US 3111990272,3111991295,FR 3111991296,3111992319,RU 3111992320,3111993343,RS @@ -79330,9 +79832,11 @@ 3112034336,3112034336,IL 3112034337,3112034337,AE 3112034338,3112034338,SA -3112034339,3112034579,DE +3112034339,3112034569,DE +3112034570,3112034573,US +3112034574,3112034579,DE 3112034580,3112034580,VE -3112034581,3112034581,PE +3112034581,3112034581,CO 3112034582,3112034582,BR 3112034583,3112034583,PE 3112034584,3112034584,BO @@ -79342,7 +79846,9 @@ 3112034588,3112034588,UY 3112034589,3112034589,MX 3112034590,3112034815,DE -3112034816,3112035091,US +3112034816,3112034835,US +3112034836,3112034836,CA +3112034837,3112035091,US 3112035092,3112035092,CA 3112035093,3112035327,US 3112035328,3112036351,RU @@ -79376,10 +79882,10 @@ 3112074240,3112075263,IR 3112075264,3112076287,RU 3112076288,3112077311,IR -3112077312,3112078335,GB +3112077312,3112078335,ES 3112078336,3112079359,IT 3112079360,3112080383,IR -3112080384,3112081407,GB +3112080384,3112081407,ES 3112081408,3112082431,DK 3112082432,3112083455,IR 3112083456,3112085503,GB @@ -79397,12 +79903,12 @@ 3112096768,3112097791,DE 3112097792,3112098815,TR 3112098816,3112099839,CH -3112099840,3112100863,GB +3112099840,3112100863,ES 3112100864,3112102911,FR -3112102912,3112103935,GB +3112102912,3112103935,ES 3112103936,3112104959,DE 3112104960,3112105983,FR -3112105984,3112107007,GB +3112105984,3112107007,ES 3112107008,3112108031,UA 3112108032,3112109055,LT 3112109056,3112110079,FR @@ -79434,7 +79940,10 @@ 3112137728,3112138751,ES 3112138752,3112139775,PL 3112139776,3112140799,LB -3112140800,3112141823,ES +3112140800,3112141569,ES +3112141570,3112141570,FR +3112141571,3112141571,DE +3112141572,3112141823,ES 3112141824,3112142847,IT 3112142848,3112143871,NL 3112143872,3112144895,GB @@ -79609,7 +80118,8 @@ 3112328192,3112329215,GB 3112329216,3112330239,DK 3112330240,3112331263,GB -3112331264,3112332287,RU +3112331264,3112331519,RU +3112331520,3112332287,NL 3112332288,3112333311,PL 3112333312,3112334335,RU 3112334336,3112335359,FR @@ -79900,7 +80410,10 @@ 3112653824,3112654847,IR 3112654848,3112655871,PL 3112655872,3112656895,IT -3112656896,3112657919,CY +3112656896,3112657151,CY +3112657152,3112657407,TR +3112657408,3112657663,CY +3112657664,3112657919,TR 3112657920,3112658943,IT 3112658944,3112659967,GB 3112659968,3112660991,TR @@ -79921,7 +80434,10 @@ 3112676352,3112677375,RU 3112677376,3112678399,FR 3112678400,3112679423,RU -3112679424,3112680447,NO +3112679424,3112679679,NO +3112679680,3112679935,FI +3112679936,3112680191,SE +3112680192,3112680447,DK 3112680448,3112681471,IQ 3112681472,3112682495,PL 3112682496,3112683519,CZ @@ -80069,7 +80585,9 @@ 3112833024,3112834047,ES 3112834048,3112835071,CH 3112835072,3112836095,DE -3112836096,3112837119,ES +3112836096,3112836607,ES +3112836608,3112836863,SE +3112836864,3112837119,ES 3112837120,3112838143,NO 3112838144,3112839167,IT 3112839168,3112840191,GR @@ -80172,7 +80690,9 @@ 3112946688,3112947711,DE 3112947712,3112948735,AT 3112948736,3112949759,RU -3112949760,3112950783,CZ +3112949760,3112950271,CZ +3112950272,3112950527,SK +3112950528,3112950783,CZ 3112950784,3112951807,JO 3112951808,3112952831,SK 3112952832,3112953855,IL @@ -80198,7 +80718,9 @@ 3112970240,3112971263,SK 3112971264,3112972287,FR 3112972288,3112973311,US -3112973312,3112974335,SE +3112973312,3112973567,SE +3112973568,3112973823,DE +3112973824,3112974335,SE 3112974336,3112975359,IR 3112975360,3112977407,ES 3112977408,3112978431,FR @@ -80331,7 +80853,7 @@ 3113102336,3113103359,ES 3113103360,3113104383,SK 3113104384,3113105407,FR -3113105408,3113106431,PS +3113105408,3113106431,US 3113106432,3113107455,ES 3113107456,3113108479,RU 3113108480,3113109503,IT @@ -80350,7 +80872,8 @@ 3113123840,3113124863,GB 3113124864,3113125887,RU 3113125888,3113126911,FR -3113126912,3113127423,DE +3113126912,3113127167,GB +3113127168,3113127423,NL 3113127424,3113127935,AT 3113127936,3113128959,NL 3113128960,3113129983,CH @@ -80537,7 +81060,8 @@ 3113297888,3113297919,GB 3113297920,3113298943,ES 3113298944,3113299199,MD -3113299200,3113300991,GB +3113299200,3113299455,NL +3113299456,3113300991,GB 3113300992,3113303039,RU 3113303040,3113304063,NL 3113304064,3113304895,DE @@ -80579,7 +81103,10 @@ 3113339904,3113340927,HU 3113340928,3113341951,NL 3113341952,3113342975,IL -3113342976,3113343999,US +3113342976,3113343231,GB +3113343232,3113343487,DE +3113343488,3113343743,FR +3113343744,3113343999,IT 3113344000,3113345023,DE 3113345024,3113347071,ES 3113347072,3113348095,CY @@ -80587,7 +81114,7 @@ 3113349120,3113350143,DE 3113350144,3113351167,NL 3113351168,3113352191,FR -3113352192,3113353215,UA +3113352192,3113353215,NL 3113353216,3113354239,KZ 3113354240,3113355263,CZ 3113355264,3113356287,PL @@ -80596,7 +81123,7 @@ 3113358336,3113359359,CZ 3113359360,3113360383,FR 3113360384,3113361407,BG -3113361408,3113362431,US +3113361408,3113362431,RO 3113362432,3113363455,DE 3113363456,3113364479,FR 3113364480,3113365503,GB @@ -80659,7 +81186,7 @@ 3113425408,3113425919,CZ 3113425920,3113426943,KW 3113426944,3113427967,IM -3113427968,3113428991,GB +3113427968,3113428991,RU 3113428992,3113430015,IR 3113430016,3113431039,CZ 3113431040,3113432063,MD @@ -80680,8 +81207,7 @@ 3113447424,3113448447,NL 3113448448,3113449471,IT 3113449472,3113450495,EE -3113450496,3113451519,GB -3113451520,3113452543,RU +3113450496,3113452543,RU 3113452544,3113453567,GB 3113453568,3113454591,IS 3113454592,3113455615,RO @@ -80715,7 +81241,7 @@ 3113487360,3113488383,IR 3113488384,3113489407,NO 3113489408,3113490431,NL -3113490432,3113491455,GB +3113490432,3113491455,RU 3113491456,3113492479,GE 3113492480,3113493503,TR 3113493504,3113494527,RU @@ -81313,7 +81839,8 @@ 3114038272,3114039295,GB 3114039296,3114040319,CZ 3114040320,3114041343,DE -3114041344,3114042367,SK +3114041344,3114041855,HU +3114041856,3114042367,SK 3114042368,3114043391,IT 3114043392,3114045439,GB 3114045440,3114046463,AT @@ -81484,7 +82011,10 @@ 3114194944,3114195967,BY 3114195968,3114196991,GR 3114196992,3114198015,DE -3114198016,3114199039,AT +3114198016,3114198336,AT +3114198337,3114198400,DE +3114198401,3114198527,US +3114198528,3114199039,AT 3114199040,3114201087,IT 3114201088,3114203135,GB 3114203136,3114203647,NL @@ -81511,7 +82041,9 @@ 3114222592,3114223615,GB 3114223616,3114224639,TR 3114224640,3114225663,GB -3114225664,3114226687,RU +3114225664,3114226175,NL +3114226176,3114226431,RU +3114226432,3114226687,US 3114226688,3114228735,IR 3114228736,3114229759,CZ 3114229760,3114230783,FR @@ -81552,8 +82084,7 @@ 3114264576,3114265599,GB 3114265600,3114266623,FI 3114266624,3114267647,NL -3114267648,3114268159,US -3114268160,3114268671,BR +3114267648,3114268671,US 3114268672,3114269695,BE 3114269696,3114270719,ES 3114270720,3114271743,DE @@ -81651,7 +82182,7 @@ 3114373120,3114374143,DE 3114374144,3114375167,GB 3114375168,3114377215,DE -3114377216,3114377471,PL +3114377216,3114377471,TR 3114377472,3114377727,UA 3114377728,3114378239,TR 3114378240,3114379263,GB @@ -81710,7 +82241,8 @@ 3114431488,3114432511,DE 3114432512,3114433535,MC 3114433536,3114434559,IL -3114434560,3114435583,NL +3114434560,3114434815,NL +3114434816,3114435583,US 3114435584,3114436607,MD 3114436608,3114437631,AZ 3114437632,3114438655,MD @@ -81735,7 +82267,7 @@ 3114458112,3114459135,RO 3114459136,3114460159,GB 3114460160,3114461183,DK -3114461184,3114462207,RU +3114461184,3114462207,NL 3114462208,3114463231,GR 3114463232,3114464255,US 3114464256,3114465279,BE @@ -82013,7 +82545,8 @@ 3114768384,3114769407,IL 3114769408,3114770431,DE 3114770432,3114771455,UA -3114771456,3114772479,DK +3114771456,3114771967,US +3114771968,3114772479,DK 3114772480,3114773503,GB 3114773504,3114774527,DE 3114774528,3114775551,SE @@ -82055,8 +82588,7 @@ 3114812416,3114813439,IL 3114813440,3114814463,NO 3114814464,3114815487,IT -3114815488,3114815743,BE -3114815744,3114816511,DE +3114815488,3114816511,DE 3114816512,3114817535,NL 3114817536,3114818559,IT 3114818560,3114819583,GB @@ -82116,13 +82648,11 @@ 3114877952,3114878975,EE 3114878976,3114879999,SE 3114880000,3114881023,FR -3114881024,3114881535,GB -3114881536,3114882047,NL +3114881024,3114882047,NL 3114882048,3114883071,CH 3114883072,3114884095,FR 3114884096,3114885119,CH -3114885120,3114885375,DE -3114885376,3114886143,PT +3114885120,3114886143,PT 3114886144,3114887167,RU 3114887168,3114888191,DE 3114888192,3114890239,NL @@ -82131,7 +82661,7 @@ 3114893312,3114894335,TR 3114894336,3114895359,US 3114895360,3114896383,ES -3114896384,3114897407,US +3114896384,3114897407,LT 3114897408,3114898431,GB 3114898432,3114899455,IL 3114899456,3114900479,RU @@ -82155,7 +82685,8 @@ 3114917888,3114918911,IT 3114918912,3114919167,CH 3114919168,3114919423,GI -3114919424,3114919935,CH +3114919424,3114919679,UA +3114919680,3114919935,CH 3114919936,3114920959,GB 3114920960,3114921983,IT 3114921984,3114923007,CH @@ -82172,11 +82703,10 @@ 3114933248,3114934271,DK 3114934272,3114935295,PL 3114935296,3114937343,DE -3114937344,3114938366,IR -3114938367,3114938367,IQ +3114937344,3114938367,IR 3114938368,3114939391,CH 3114939392,3114940415,RU -3114940416,3114941439,DE +3114940416,3114941439,IL 3114941440,3114942463,GB 3114942464,3114943487,DE 3114943488,3114944511,NL @@ -82194,7 +82724,7 @@ 3114955776,3114956799,AE 3114956800,3114957823,DE 3114957824,3114958847,RO -3114958848,3114959871,BZ +3114958848,3114959871,NL 3114959872,3114960895,CH 3114960896,3114961919,IT 3114961920,3114962943,GR @@ -82210,6 +82740,300 @@ 3114972160,3114973183,SE 3114973184,3114974207,MD 3114974208,3114975231,GB +3114975232,3114976255,RU +3114976256,3114977279,DE +3114977280,3114978303,PL +3114978304,3114979327,RU +3114979328,3114980351,NL +3114980352,3114984447,RO +3114984448,3114985471,CZ +3114985472,3114986495,CY +3114986496,3114987519,IR +3114987520,3114988543,CZ +3114988544,3114989567,DE +3114989568,3114990591,NO +3114990592,3114991615,LT +3114991616,3114992639,GB +3114992640,3114993663,FR +3114993664,3114994687,ES +3114994688,3114995711,RU +3114995712,3114996735,MD +3114996736,3114997759,FR +3114997760,3114998783,TR +3114998784,3114999807,DE +3114999808,3115000831,NL +3115000832,3115001855,IT +3115001856,3115002879,NL +3115002880,3115003903,DE +3115003904,3115004927,NL +3115004928,3115005951,IR +3115005952,3115006975,GB +3115006976,3115007999,RS +3115008000,3115009023,BE +3115009024,3115010047,MD +3115010048,3115011071,SY +3115011072,3115012095,DE +3115012096,3115013119,RU +3115013120,3115014143,FR +3115014144,3115016191,TR +3115016192,3115017215,DE +3115017216,3115018239,RU +3115018240,3115019263,ES +3115019264,3115020287,LB +3115020288,3115021311,FR +3115021312,3115022335,AE +3115022336,3115023359,GB +3115023360,3115024383,CZ +3115024384,3115025407,NL +3115025408,3115026431,SY +3115026432,3115027455,DE +3115027456,3115028479,SK +3115028480,3115029503,AL +3115029504,3115030527,RU +3115030528,3115031551,SA +3115031552,3115032575,FR +3115032576,3115033599,RU +3115033600,3115034623,ES +3115034624,3115035647,BE +3115035648,3115036671,FO +3115036672,3115037695,FI +3115037696,3115038719,HR +3115038720,3115039743,RO +3115039744,3115040767,GB +3115040768,3115041791,RU +3115041792,3115042815,DK +3115042816,3115043839,GE +3115043840,3115044863,DE +3115044864,3115045887,NL +3115045888,3115046911,IT +3115046912,3115047935,DE +3115047936,3115048959,GB +3115048960,3115049983,DE +3115049984,3115051007,MD +3115051008,3115052031,LV +3115052032,3115055103,NL +3115055104,3115056127,DE +3115056128,3115057151,NL +3115057152,3115058175,IR +3115058176,3115059199,BE +3115059200,3115060223,DE +3115060224,3115062271,FR +3115062272,3115063295,GB +3115063296,3115064319,EE +3115064320,3115066367,MD +3115066368,3115066879,NL +3115066880,3115067391,US +3115067392,3115068415,DE +3115068416,3115069439,HU +3115069440,3115070463,NL +3115070464,3115072511,DE +3115072512,3115073535,ES +3115073536,3115074559,DE +3115074560,3115075583,IR +3115075584,3115076607,SY +3115076608,3115077631,SE +3115077632,3115078655,IL +3115078656,3115079679,PL +3115079680,3115080703,MD +3115080704,3115081727,LI +3115081728,3115082751,ES +3115082752,3115083775,UA +3115083776,3115084799,SK +3115084800,3115085823,NL +3115085824,3115086847,GB +3115086848,3115087871,PL +3115087872,3115088895,GB +3115088896,3115089919,DE +3115089920,3115090943,RU +3115090944,3115091967,NL +3115091968,3115092991,RU +3115092992,3115094015,IT +3115094016,3115095039,NL +3115095040,3115096063,DE +3115096064,3115097087,FR +3115097088,3115098111,LT +3115098112,3115100159,NL +3115100160,3115101183,ES +3115101184,3115102207,GB +3115102208,3115103231,ES +3115103232,3115104255,IT +3115104256,3115105279,ES +3115105280,3115106303,US +3115106304,3115107327,DE +3115107328,3115108351,CH +3115108352,3115110399,IT +3115110400,3115111423,PL +3115111424,3115112447,IR +3115112448,3115114495,NL +3115114496,3115115519,FR +3115115520,3115116543,IQ +3115116544,3115117567,FR +3115117568,3115118591,SY +3115118592,3115119615,PL +3115119616,3115120639,GB +3115120640,3115121663,PL +3115121664,3115122687,CZ +3115122688,3115123711,RU +3115123712,3115124735,SE +3115124736,3115125759,GB +3115125760,3115126783,NL +3115126784,3115127807,RO +3115127808,3115128831,NL +3115128832,3115129855,DE +3115129856,3115130879,BA +3115130880,3115131903,DE +3115131904,3115132927,RU +3115132928,3115133951,KW +3115133952,3115134975,ES +3115134976,3115135999,GB +3115136000,3115137023,SI +3115137024,3115138047,JO +3115138048,3115139071,LB +3115139072,3115140095,GB +3115140096,3115141119,FR +3115141120,3115142143,RU +3115142144,3115143167,DE +3115143168,3115144191,RU +3115144192,3115145215,IT +3115145216,3115146239,CH +3115146240,3115147263,RU +3115147264,3115148287,FR +3115148288,3115149311,UA +3115149312,3115150335,IR +3115150336,3115151359,DE +3115151360,3115152383,RU +3115152384,3115154431,GB +3115154432,3115155455,FR +3115155456,3115156479,DE +3115156480,3115157503,NL +3115157504,3115159551,AT +3115159552,3115160575,MD +3115160576,3115161599,CZ +3115161600,3115162623,FI +3115162624,3115164671,RU +3115164672,3115165695,IE +3115165696,3115166719,IR +3115166720,3115167743,SY +3115167744,3115168767,RU +3115168768,3115169791,LU +3115169792,3115170815,IE +3115170816,3115171839,TR +3115171840,3115172863,GB +3115172864,3115173887,SE +3115173888,3115174911,FR +3115174912,3115175935,RS +3115175936,3115176959,FI +3115176960,3115177983,IT +3115177984,3115179007,NL +3115179008,3115180031,SE +3115180032,3115182079,DE +3115182080,3115183103,NL +3115183104,3115184127,IT +3115184128,3115185151,DE +3115185152,3115186175,MD +3115186176,3115187199,CZ +3115187200,3115188223,FR +3115188224,3115189247,IT +3115189248,3115190271,BE +3115190272,3115191295,SE +3115191296,3115192319,PL +3115192320,3115193343,HU +3115193344,3115194367,TR +3115194368,3115195391,FI +3115195392,3115195647,DE +3115195648,3115196415,TR +3115196416,3115197439,LI +3115197440,3115198463,DE +3115198464,3115199487,NL +3115199488,3115200511,CZ +3115200512,3115201535,DE +3115201536,3115202559,FR +3115202560,3115203583,GR +3115203584,3115204607,DE +3115204608,3115205631,BE +3115205632,3115206655,TR +3115206656,3115207679,DE +3115207680,3115208703,GB +3115208704,3115209727,ES +3115209728,3115210751,NO +3115210752,3115211775,FR +3115211776,3115212799,CZ +3115212800,3115213823,GE +3115213824,3115214847,UA +3115214848,3115215871,CH +3115215872,3115216895,GB +3115216896,3115217919,PL +3115217920,3115218943,DK +3115218944,3115219967,PL +3115219968,3115220991,NL +3115220992,3115222015,RU +3115222016,3115223039,IR +3115223040,3115224063,RU +3115224064,3115225087,SE +3115225088,3115226111,UA +3115226112,3115227135,DE +3115227136,3115228159,PL +3115228160,3115229183,IL +3115229184,3115230207,EE +3115230208,3115231231,RU +3115231232,3115232255,CZ +3115232256,3115233279,UA +3115233280,3115234303,IS +3115234304,3115235327,ES +3115235328,3115236351,BE +3115236352,3115237375,NL +3115237376,3115238399,RU +3115238400,3115239423,BE +3115239424,3115240447,IR +3115240448,3115241471,DE +3115241472,3115242495,AL +3115242496,3115243519,ES +3115243520,3115244543,CH +3115244544,3115245567,UA +3115245568,3115246591,GB +3115246592,3115247615,SY +3115247616,3115248639,GB +3115248640,3115249663,SY +3115249664,3115250687,LB +3115250688,3115251711,SE +3115251712,3115252735,IR +3115252736,3115253759,DE +3115253760,3115254783,SI +3115254784,3115255807,NL +3115255808,3115256831,TR +3115256832,3115257855,GB +3115257856,3115258879,RU +3115258880,3115259903,AT +3115259904,3115260927,NL +3115260928,3115261951,GB +3115261952,3115262975,MD +3115262976,3115263999,GB +3115264000,3115265023,CY +3115265024,3115266047,RU +3115266048,3115267071,GB +3115267072,3115268095,SY +3115268096,3115269119,DE +3115269120,3115270143,ES +3115270144,3115271167,NO +3115271168,3115272191,NL +3115272192,3115273215,RU +3115273216,3115274239,HK +3115274240,3115275263,MD +3115275264,3115276287,CZ +3115276288,3115277311,NL +3115277312,3115278335,ES +3115278336,3115279359,NO +3115279360,3115280383,GB +3115280384,3115281407,PL +3115281408,3115282431,IL +3115282432,3115283455,GB +3115283456,3115284479,RU +3115284480,3115285503,FR +3115285504,3115286527,IT +3115286528,3115287551,RU +3115287552,3115288575,SK +3115288576,3115289599,GB +3117416448,3117417471,FR 3120562176,3120594943,CO 3120594944,3120599039,AR 3120599040,3120601087,EC @@ -82236,7 +83060,9 @@ 3120736256,3120736511,EC 3120736512,3120736767,BZ 3120736768,3120737023,RU -3120737024,3120738303,BZ +3120737024,3120737279,BZ +3120737280,3120737535,RU +3120737536,3120738303,BZ 3120738304,3120742399,CW 3120742400,3120754687,PY 3120754688,3120755711,CR @@ -82314,7 +83140,9 @@ 3123445760,3123576831,TT 3123576832,3123707903,EC 3123707904,3124232191,UY -3124232192,3124764671,AR +3124232192,3124760600,AR +3124760601,3124760601,MX +3124760602,3124764671,AR 3124764672,3124772863,MX 3124772864,3124783103,AR 3124783104,3124785151,GT @@ -82425,13 +83253,19 @@ 3132227584,3132293119,EC 3132293120,3132295647,HN 3132295648,3132295679,UY -3132295680,3132297839,HN +3132295680,3132297791,HN +3132297792,3132297807,US +3132297808,3132297839,HN 3132297840,3132297855,US -3132297856,3132300383,HN +3132297856,3132297887,HN +3132297888,3132297903,US +3132297904,3132300383,HN 3132300384,3132300391,US 3132300392,3132302319,HN 3132302320,3132302335,NL -3132302336,3132304303,HN +3132302336,3132302975,HN +3132302976,3132302983,NL +3132302984,3132304303,HN 3132304304,3132304311,DE 3132304312,3132306239,HN 3132306240,3132306271,DE @@ -82516,10 +83350,17 @@ 3156901888,3156906239,NL 3156906240,3156910079,LU 3156910080,3156912127,NL -3156912128,3156922367,LU +3156912128,3156916223,LU +3156916224,3156917247,GB +3156917248,3156920319,LU +3156920320,3156921343,SG +3156921344,3156922367,HK 3156922368,3156922623,NL 3156922624,3156922879,US -3156922880,3156924415,LU +3156922880,3156923135,LU +3156923136,3156923391,RU +3156923392,3156923647,SG +3156923648,3156924415,LU 3156924416,3156925439,NL 3156925440,3156926463,SG 3156926464,3156927743,NL @@ -82634,8 +83475,8 @@ 3158638592,3158704127,LT 3158704128,3158835199,KW 3158835200,3158851583,IQ -3158851584,3158852863,NL -3158852864,3158853119,ES +3158851584,3158852607,NL +3158852608,3158853119,ES 3158853120,3158853631,NL 3158853632,3158855679,RU 3158855680,3158859903,NL @@ -82726,8 +83567,7 @@ 3160227840,3160229887,IR 3160229888,3160231935,ES 3160231936,3160233983,BE -3160233984,3160234239,NL -3160234240,3160236031,GE +3160233984,3160236031,GE 3160236032,3160238079,BE 3160238080,3160240127,RU 3160240128,3160242175,BE @@ -82863,8 +83703,7 @@ 3161989376,3161989631,TR 3161989632,3161990143,NL 3161990144,3161991167,TR -3161991168,3161992191,NL -3161992192,3161993215,DE +3161991168,3161993215,NL 3161993216,3161997311,RU 3161997312,3162005503,DK 3162005504,3162013695,RS @@ -82948,14 +83787,17 @@ 3162676224,3162677247,KZ 3162677248,3162679039,RU 3162679040,3162679295,KZ -3162679296,3162681343,RU +3162679296,3162680319,RU +3162680320,3162680575,UZ +3162680576,3162681343,RU 3162681344,3162682367,UA 3162682368,3162682879,MD 3162682880,3162683135,GB 3162683136,3162683391,ES 3162683392,3162685439,RU 3162685440,3162693631,EE -3162693632,3162701823,RU +3162693632,3162701567,RU +3162701568,3162701823,UZ 3162701824,3162734591,MD 3162734592,3162767359,RU 3162767360,3162800127,SA @@ -83040,7 +83882,9 @@ 3164945984,3164945999,FR 3164946000,3164946015,ES 3164946016,3164946047,GB -3164946048,3164946351,FR +3164946048,3164946159,FR +3164946160,3164946175,GB +3164946176,3164946351,FR 3164946352,3164946367,GB 3164946368,3164946435,FR 3164946436,3164946439,PT @@ -83266,8 +84110,7 @@ 3165452800,3165453055,AT 3165453056,3165453311,US 3165453312,3165453567,PE -3165453568,3165453823,IL -3165453824,3165454335,AT +3165453568,3165454335,AT 3165454336,3165519871,RO 3165519872,3165585407,DE 3165585408,3165650943,CZ @@ -83314,7 +84157,8 @@ 3167760384,3167762431,GB 3167762432,3167772671,IR 3167772672,3167773695,MD -3167773696,3167774207,RO +3167773696,3167773951,ES +3167773952,3167774207,RO 3167774208,3167774335,KR 3167774336,3167774463,PH 3167774464,3167774719,RO @@ -83327,7 +84171,9 @@ 3167777792,3167778815,RO 3167778816,3167780863,MD 3167780864,3167783935,RO -3167783936,3167784959,ES +3167783936,3167784447,ES +3167784448,3167784703,CA +3167784704,3167784959,ES 3167784960,3167797247,IR 3167797248,3167798271,MD 3167798272,3167798783,RO @@ -83550,8 +84396,7 @@ 3168230400,3168230655,GB 3168230656,3168232447,RO 3168232448,3168233471,SY -3168233472,3168234495,RO -3168234496,3168235519,ES +3168233472,3168235519,ES 3168235520,3168237567,RO 3168237568,3168239615,PS 3168239616,3168243711,IR @@ -83574,9 +84419,7 @@ 3168796672,3168829439,FR 3168829440,3168862207,RO 3168862208,3168894975,RU -3168894976,3168927231,PS -3168927232,3168927487,IL -3168927488,3168927743,PS +3168894976,3168927743,PS 3168927744,3168960511,RU 3168960512,3168993279,NL 3168993280,3169026047,RU @@ -83634,7 +84477,7 @@ 3169863424,3169863679,RO 3169863680,3169864703,BG 3169864704,3169867775,RO -3169867776,3169868031,BG +3169867776,3169868031,GB 3169868032,3169869823,RO 3169869824,3169878015,MD 3169878016,3169882111,RO @@ -83837,9 +84680,11 @@ 3187946976,3187946979,HN 3187946980,3187947983,GT 3187947984,3187947987,HN -3187947988,3187948031,GT -3187948032,3187948159,HN -3187948160,3187948479,GT +3187947988,3187947999,GT +3187948000,3187948159,HN +3187948160,3187948367,GT +3187948368,3187948375,HN +3187948376,3187948479,GT 3187948480,3187948543,HN 3187948544,3187948799,GT 3187948800,3187948927,HN @@ -83907,7 +84752,8 @@ 3188269824,3188270079,PA 3188270080,3188270335,MX 3188270336,3188270719,PA -3188270720,3188270847,MX +3188270720,3188270783,MX +3188270784,3188270847,PA 3188270848,3188271103,BR 3188271104,3188273151,MX 3188273152,3188275199,PA @@ -84102,7 +84948,9 @@ 3193582592,3193583103,EC 3193583104,3193589503,CO 3193589504,3193589759,EC -3193589760,3193591807,CO +3193589760,3193590527,CO +3193590528,3193590655,EC +3193590656,3193591807,CO 3193591808,3193592063,EC 3193592064,3193592319,CO 3193592320,3193592575,EC @@ -84111,7 +84959,9 @@ 3193595648,3193599743,CO 3193599744,3193600255,EC 3193600256,3193604351,CO -3193604352,3193605631,EC +3193604352,3193604607,EC +3193604608,3193604863,CO +3193604864,3193605631,EC 3193605632,3193606143,CO 3193606144,3193606399,EC 3193606400,3193606655,CO @@ -84245,7 +85095,9 @@ 3194130048,3194130175,CO 3194130176,3194130303,CL 3194130304,3194130431,AR -3194130432,3194132991,BR +3194130432,3194130687,BR +3194130688,3194130943,AR +3194130944,3194132991,BR 3194132992,3194133247,CL 3194133248,3194134527,BR 3194134528,3194135551,AR @@ -84387,7 +85239,14 @@ 3194805248,3194806271,CR 3194806272,3194814463,AR 3194814464,3194818559,PA -3194818560,3194830847,AR +3194818560,3194818815,CO +3194818816,3194819071,AR +3194819072,3194819583,CO +3194819584,3194819839,AR +3194819840,3194820095,CO +3194820096,3194820351,AR +3194820352,3194820607,CO +3194820608,3194830847,AR 3194830848,3194838015,BR 3194838016,3194839039,MX 3194839040,3194863615,CO @@ -84558,11 +85417,17 @@ 3195781120,3195785215,PA 3195785216,3195785311,HN 3195785312,3195785343,CA -3195785344,3195786015,HN +3195785344,3195785375,HN +3195785376,3195785407,DE +3195785408,3195785815,HN +3195785816,3195785823,DE +3195785824,3195786015,HN 3195786016,3195786023,ES 3195786024,3195786191,HN 3195786192,3195786199,US -3195786200,3195786527,HN +3195786200,3195786479,HN +3195786480,3195786487,CA +3195786488,3195786527,HN 3195786528,3195786543,US 3195786544,3195786991,HN 3195786992,3195787007,CA @@ -84576,7 +85441,9 @@ 3195788160,3195788167,CA 3195788168,3195788415,HN 3195788416,3195788423,US -3195788424,3195789087,HN +3195788424,3195788919,HN +3195788920,3195788927,CA +3195788928,3195789087,HN 3195789088,3195789119,CA 3195789120,3195789311,HN 3195789312,3195793407,PA @@ -84585,7 +85452,8 @@ 3195803648,3195804671,CL 3195804672,3195805695,VE 3195805696,3195807743,NI -3195807744,3195808383,BZ +3195807744,3195807871,US +3195807872,3195808383,BZ 3195808384,3195808895,US 3195808896,3195809151,BZ 3195809152,3195809279,US @@ -84733,17 +85601,15 @@ 3201904640,3201905663,CO 3201905664,3201906111,AR 3201906112,3201906175,CO -3201906176,3201907359,AR -3201907360,3201907391,CO -3201907392,3201907923,AR -3201907924,3201907927,CO -3201907928,3201908223,AR -3201908224,3201908735,CO +3201906176,3201906687,AR +3201906688,3201908735,CO 3201908736,3201917007,AR 3201917008,3201917023,CO 3201917024,3201917527,AR 3201917528,3201917535,CO -3201917536,3201925119,AR +3201917536,3201917951,AR +3201917952,3201918975,CO +3201918976,3201925119,AR 3201925120,3201957887,CL 3201957888,3202088959,PA 3202088960,3202127999,AR @@ -84786,9 +85652,13 @@ 3203563776,3203564031,PA 3203564032,3203564543,CO 3203564544,3203565055,DO -3203565056,3203566591,CO +3203565056,3203565567,CO +3203565568,3203566079,CR +3203566080,3203566591,CO 3203566592,3203566847,PA -3203566848,3203568639,CO +3203566848,3203566975,CO +3203566976,3203567103,DO +3203567104,3203568639,CO 3203568640,3203569663,SV 3203569664,3203570303,CO 3203570304,3203570431,SV @@ -84817,21 +85687,23 @@ 3210742562,3210742567,CL 3210742568,3210742575,US 3210742576,3210742591,BR -3210742592,3210742655,CL -3210742656,3210742783,US +3210742592,3210742783,FR 3210742784,3210743039,CL 3210743040,3210743055,GR 3210743056,3210743079,CL 3210743080,3210743087,US -3210743088,3210743295,CL +3210743088,3210743103,CL +3210743104,3210743295,FR 3210743296,3210743551,US 3210743552,3210743567,TH -3210743568,3210743807,BR +3210743568,3210743615,BR +3210743616,3210743679,FR +3210743680,3210743807,BR 3210743808,3210744063,US 3210744064,3210744079,TR 3210744080,3210744095,CL 3210744096,3210744127,BR -3210744128,3210744191,CL +3210744128,3210744191,FR 3210744192,3210744575,US 3210744576,3210744591,BE 3210744592,3210744703,BR @@ -84855,7 +85727,9 @@ 3210747136,3210748159,US 3210748160,3210748175,JP 3210748176,3210748287,BR -3210748288,3210752255,US +3210748288,3210748415,US +3210748416,3210748671,GB +3210748672,3210752255,US 3210752256,3210752511,CN 3210752512,3210755839,US 3210755840,3210755855,MY @@ -84941,11 +85815,11 @@ 3210786592,3210787071,CL 3210787072,3210788863,US 3210788864,3210789119,HR -3210789120,3210791935,US -3210791936,3210792447,CL -3210792448,3210792959,US +3210789120,3210792959,US 3210792960,3210793471,CL -3210793472,3210798847,US +3210793472,3210795007,US +3210795008,3210796031,IL +3210796032,3210798847,US 3210798848,3210799103,ES 3210799104,3210802943,US 3210802944,3210803039,CL @@ -85026,7 +85900,7 @@ 3211083792,3211083839,CL 3211083840,3211083855,GB 3211083856,3211083903,DE -3211083904,3211084031,CL +3211083904,3211084031,FR 3211084032,3211084287,DE 3211084288,3211084303,NL 3211084304,3211084351,DE @@ -85194,17 +86068,29 @@ 3211171792,3211171807,ES 3211171808,3211172047,HN 3211172048,3211172063,NL -3211172064,3211174687,HN +3211172064,3211173183,HN +3211173184,3211173199,NL +3211173200,3211173279,HN +3211173280,3211173295,NL +3211173296,3211174415,HN +3211174416,3211174431,CA +3211174432,3211174687,HN 3211174688,3211174703,CA 3211174704,3211174719,HN 3211174720,3211174735,CA 3211174736,3211175199,HN 3211175200,3211175215,BR -3211175216,3211178583,HN +3211175216,3211175295,HN +3211175296,3211175327,BR +3211175328,3211177831,HN +3211177832,3211177839,CR +3211177840,3211178583,HN 3211178584,3211178591,ES 3211178592,3211178671,HN -3211178672,3211178687,ES -3211178688,3211181119,HN +3211178672,3211178703,ES +3211178704,3211180887,HN +3211180888,3211180895,CR +3211180896,3211181119,HN 3211181120,3211181135,CR 3211181136,3211182079,HN 3211182080,3211194367,CO @@ -85231,9 +86117,7 @@ 3219673088,3219673151,US 3219673152,3219673983,BR 3219673984,3219674015,SG -3219674016,3219674111,BR -3219674112,3219675135,US -3219675136,3219687679,BR +3219674016,3219687679,BR 3219687680,3219687935,US 3219687936,3219688447,IE 3219688448,3219688703,HK @@ -85280,9 +86164,17 @@ 3219851264,3219852287,NL 3219852288,3219853311,IE 3219853312,3219881983,BR -3219881984,3219914751,IE +3219881984,3219899391,IE +3219899392,3219902463,BR +3219902464,3219906559,IE +3219906560,3219914495,BR +3219914496,3219914751,IE 3219914752,3220029439,US -3220029440,3220037631,IE +3220029440,3220030207,IE +3220030208,3220030463,BR +3220030464,3220030719,IE +3220030720,3220033535,BR +3220033536,3220037631,IE 3220037632,3220039679,US 3220039680,3220040703,NL 3220040704,3220041215,JP @@ -85542,7 +86434,8 @@ 3223258624,3223258879,CA 3223258880,3223260671,US 3223260672,3223260927,DE -3223260928,3223262975,US +3223260928,3223262719,US +3223262720,3223262975,DE 3223262976,3223263231,BE 3223263232,3223263743,US 3223263744,3223263999,NL @@ -86368,7 +87261,8 @@ 3225923328,3225923583,IN 3225923584,3225923839,SE 3225923840,3225924095,GB -3225924096,3225930239,SE +3225924096,3225929983,SE +3225929984,3225930239,US 3225930240,3225930495,FR 3225930496,3225932543,SE 3225932544,3225932799,IM @@ -87011,12 +87905,37 @@ 3227581696,3227582207,ZA 3227582208,3227638271,US 3227638272,3227638527,CA -3227638528,3227647999,US -3227648000,3227659775,FI +3227638528,3227648255,US +3227648256,3227649023,FI +3227649024,3227649791,US +3227649792,3227650559,FI +3227650560,3227650815,US +3227650816,3227651071,FI +3227651072,3227653375,US +3227653376,3227654143,FI +3227654144,3227655935,US +3227655936,3227656703,FI +3227656704,3227656959,US +3227656960,3227657215,FI +3227657216,3227657471,US +3227657472,3227657983,FI +3227657984,3227658495,US +3227658496,3227659263,FI +3227659264,3227659775,US 3227659776,3227660031,JP -3227660032,3227660543,FI +3227660032,3227660287,FI +3227660288,3227660543,US 3227660544,3227660799,EE -3227660800,3227678719,FI +3227660800,3227661823,US +3227661824,3227662335,FI +3227662336,3227663615,US +3227663616,3227664127,FI +3227664128,3227664383,US +3227664384,3227672575,FI +3227672576,3227673087,US +3227673088,3227674111,FI +3227674112,3227674623,US +3227674624,3227678719,FI 3227678720,3227680767,LU 3227680768,3227713535,FI 3227713536,3227720131,CA @@ -87850,11 +88769,12 @@ 3229838336,3229838591,GB 3229838592,3229838847,CA 3229838848,3229844479,US -3229844480,3229844735,BE +3229844480,3229844735,FR 3229844736,3229844991,US 3229844992,3229845247,BL 3229845248,3229845503,US -3229845504,3229846527,CA +3229845504,3229846015,GB +3229846016,3229846527,CA 3229847296,3229849599,US 3229849600,3229849855,AU 3229849856,3229864703,US @@ -88643,7 +89563,8 @@ 3231513088,3231514879,US 3231514880,3231515647,NO 3231515648,3231516671,US -3231516672,3231519231,SE +3231516672,3231518468,SE +3231518470,3231519231,SE 3231519232,3231526935,US 3231526936,3231526943,CA 3231526944,3231527119,US @@ -88697,7 +89618,8 @@ 3231583232,3231584255,CA 3231584256,3231588863,US 3231588864,3231589119,GB -3231589120,3231591679,US +3231589120,3231590911,US +3231590944,3231591679,US 3231591680,3231591935,AU 3231591936,3231593983,US 3231593984,3231594495,GB @@ -88935,7 +89857,9 @@ 3232093677,3232093695,SE 3232093952,3232095231,SE 3232095232,3232096255,GB -3232096256,3232097279,SE +3232096256,3232096767,SE +3232096768,3232097023,DK +3232097024,3232097279,SE 3232097280,3232097535,IT 3232097536,3232098047,SE 3232098048,3232098303,FR @@ -88962,7 +89886,13 @@ 3232141312,3232141823,UA 3232141824,3232142335,DE 3232142336,3232143359,ES -3232143360,3232156159,DE +3232143360,3232155968,DE +3232155969,3232155969,GI +3232155970,3232156060,DE +3232156061,3232156061,GI +3232156062,3232156068,DE +3232156069,3232156069,GI +3232156070,3232156159,DE 3232156160,3232156671,PL 3232157696,3232159743,DE 3232159744,3232160767,PL @@ -89077,13 +90007,17 @@ 3233456448,3233456639,US 3233456640,3233456655,CA 3233456656,3233456671,US -3233456672,3233456975,CA +3233456672,3233456943,CA +3233456944,3233456959,US +3233456960,3233456975,CA 3233456976,3233456991,US 3233456992,3233457023,CA 3233457024,3233457039,US 3233457040,3233457151,CA 3233457152,3233457407,US -3233457408,3233457663,RO +3233457408,3233457631,RO +3233457632,3233457647,US +3233457648,3233457663,RO 3233457664,3233458687,US 3233458688,3233458943,HU 3233458944,3233458959,BG @@ -89643,7 +90577,8 @@ 3235844096,3235856383,US 3235856384,3235872767,BO 3235872768,3235876607,US -3235876864,3235906303,US +3235876864,3235876882,US +3235876884,3235906303,US 3235906304,3235906559,CA 3235906560,3235908863,US 3235908864,3235909119,CA @@ -89813,9 +90748,7 @@ 3236416256,3236416511,AU 3236416512,3236418559,US 3236418560,3236418815,AU -3236418816,3236424959,US -3236424960,3236425215,MU -3236425472,3236427519,US +3236418816,3236427519,US 3236427520,3236427775,CA 3236427776,3236429311,US 3236429312,3236429567,MU @@ -89929,16 +90862,16 @@ 3237036800,3237038079,US 3237038080,3237038335,CA 3237038336,3237038847,US -3237038848,3237038911,AE +3237038848,3237038863,AE +3237038864,3237038879,US +3237038880,3237038911,AE 3237038912,3237038927,US 3237038928,3237039103,AE 3237039104,3237039183,US 3237039184,3237039199,IN 3237039200,3237039215,US 3237039216,3237039295,IN -3237039296,3237039311,US -3237039312,3237039327,IN -3237039328,3237039343,US +3237039296,3237039343,US 3237039344,3237039359,IN 3237039360,3237039615,US 3237039616,3237039871,CA @@ -89956,7 +90889,9 @@ 3237048832,3237049087,IN 3237049088,3237049599,CA 3237049600,3237050111,US -3237050112,3237050303,GB +3237050112,3237050159,GB +3237050160,3237050175,US +3237050176,3237050303,GB 3237050304,3237051135,US 3237051136,3237051391,CA 3237051392,3237051903,US @@ -90456,7 +91391,8 @@ 3238018560,3238018815,FR 3238018816,3238019071,DE 3238019072,3238035711,PL -3238035712,3238037503,RU +3238035712,3238035967,DE +3238035968,3238037503,RU 3238037504,3238039039,LV 3238039040,3238039551,UA 3238039552,3238039807,PL @@ -90471,7 +91407,7 @@ 3238044672,3238045183,FI 3238045184,3238047743,RU 3238047744,3238048255,GB -3238048256,3238048767,RU +3238048256,3238048767,NL 3238048768,3238049791,CH 3238049792,3238050303,RU 3238050304,3238050815,DE @@ -90814,7 +91750,7 @@ 3239302144,3239303167,PL 3239303168,3239304191,FR 3239304192,3239305215,HR -3239305216,3239306239,NL +3239305216,3239306239,GB 3239306240,3239307263,UA 3239307264,3239308287,EG 3239308288,3239309311,DE @@ -91882,7 +92818,7 @@ 3241040896,3241062399,AT 3241063424,3241063679,IT 3241063680,3241063935,PL -3241063936,3241064191,FR +3241063936,3241064191,DE 3241064192,3241064447,GB 3241064448,3241064703,DE 3241064704,3241065471,PL @@ -92064,7 +93000,8 @@ 3242475520,3242483711,LV 3242483712,3242524671,BG 3242524672,3242590207,NO -3242590208,3242655743,IT +3242590208,3242622975,FR +3242622976,3242655743,IT 3242655744,3242721279,NO 3242721280,3242852351,CH 3242852352,3242917887,BE @@ -92493,7 +93430,7 @@ 3244897536,3244897791,RU 3244897792,3244898047,GB 3244898048,3244898303,DE -3244898304,3244898559,UA +3244898304,3244898559,IR 3244898560,3244898815,GI 3244898816,3244899071,RO 3244899072,3244899327,RU @@ -93560,7 +94497,19 @@ 3248553728,3248553983,RU 3248553984,3248554239,RO 3248557056,3248558079,UA -3248558080,3248575487,NO +3248558080,3248560127,NO +3248560896,3248561151,NO +3248561664,3248561952,NO +3248561953,3248561953,DK +3248561954,3248561954,FI +3248561955,3248561955,NO +3248561956,3248561956,SE +3248561957,3248562080,NO +3248562081,3248562081,DK +3248562082,3248562082,FI +3248562083,3248562083,NO +3248562084,3248562084,SE +3248562085,3248575487,NO 3248575488,3248576511,CZ 3248576512,3248599039,NO 3248599040,3248603135,SE @@ -94599,9 +95548,7 @@ 3251372032,3251634175,IT 3251634176,3251896319,FI 3251896320,3252158463,NO -3252158464,3252166655,SE -3252166656,3252170751,LT -3252170752,3252174847,SE +3252158464,3252174847,LT 3252174848,3252176127,NL 3252176128,3252177919,SE 3252177920,3252178943,HR @@ -94612,11 +95559,7 @@ 3252196352,3252197119,LT 3252197120,3252197375,SE 3252197376,3252207615,HR -3252207616,3252211711,LT -3252211712,3252213759,SE -3252213760,3252214271,NO -3252214272,3252215807,SE -3252215808,3252219903,LT +3252207616,3252219903,LT 3252219904,3252221183,SE 3252221184,3252222463,LT 3252222464,3252223487,SE @@ -94647,7 +95590,6 @@ 3252318720,3252318975,GP 3252318976,3252319231,PL 3252319232,3252319743,AT -3252319744,3252319999,UA 3252320256,3252320511,CZ 3252320768,3252321023,GR 3252321280,3252321791,GR @@ -94727,13 +95669,12 @@ 3252449792,3252450047,DK 3252450048,3252450879,FR 3252450880,3252450911,NO -3252450912,3252452543,FR -3252452544,3252452551,SS -3252452552,3252461567,FR -3252461568,3252469759,NO +3252450912,3252461567,FR +3252461568,3252469503,NO +3252469504,3252469759,FR 3252469760,3252473855,NL -3252473856,3252475903,NO -3252475904,3252477951,FR +3252473856,3252476927,US +3252476928,3252477951,FR 3252477952,3252486143,NO 3252486144,3252490239,BE 3252490240,3252496127,SE @@ -94961,10 +95902,9 @@ 3253412608,3253414655,SE 3253414656,3253414911,IT 3253414912,3253416447,SE -3253416448,3253416959,GB -3253416960,3253418495,SE -3253418496,3253418751,DK -3253418752,3253419519,SE +3253416448,3253416703,GB +3253416704,3253416959,US +3253416960,3253419519,SE 3253419520,3253419775,GB 3253419776,3253428223,SE 3253428224,3253428479,DE @@ -95190,7 +96130,9 @@ 3253746176,3253760511,GB 3253760512,3253760767,FR 3253760768,3253761407,GB -3253761408,3253761471,ES +3253761408,3253761416,ES +3253761417,3253761417,GB +3253761418,3253761471,ES 3253761472,3253761535,GB 3253761536,3253762047,US 3253762048,3253762303,GB @@ -95250,7 +96192,9 @@ 3253776160,3253776175,DE 3253776176,3253776809,GB 3253776810,3253776810,CH -3253776811,3253778231,GB +3253776811,3253777791,GB +3253777792,3253777855,FR +3253777856,3253778231,GB 3253778232,3253778239,FR 3253778240,3253778271,GB 3253778272,3253778287,DE @@ -95258,7 +96202,9 @@ 3253778392,3253778399,IT 3253778400,3253778751,GB 3253778752,3253778879,BE -3253778880,3253796863,GB +3253778880,3253779215,GB +3253779216,3253779247,DE +3253779248,3253796863,GB 3253796864,3253862399,SE 3253862400,3253862655,GB 3253862656,3253882879,FR @@ -95970,9 +96916,7 @@ 3255743232,3255743487,IT 3255743488,3255743743,DE 3255743744,3255743999,US -3255744000,3255751167,SE -3255751168,3255751423,DK -3255751424,3255752959,SE +3255744000,3255752959,SE 3255752960,3255753215,LI 3255753216,3255762431,SE 3255762432,3255762943,BE @@ -96198,7 +97142,9 @@ 3256946176,3256946431,RO 3256946432,3256946687,UA 3256947200,3256947711,DE -3256948736,3256958975,GB +3256948736,3256950015,GB +3256950272,3256950527,NO +3256950528,3256958975,GB 3256958976,3256959999,RO 3256960000,3256960255,SA 3256960256,3256960511,HU @@ -96720,7 +97666,7 @@ 3258859776,3258860031,GB 3258860544,3258900479,GB 3258902528,3258902783,GB -3258903040,3258903295,NL +3258903040,3258903295,FR 3258903296,3258903551,GB 3258903552,3258903807,DE 3258903808,3258904063,AT @@ -96865,9 +97811,7 @@ 3259367424,3259432959,GB 3259432960,3259435263,SE 3259435264,3259435519,IT -3259435520,3259436031,SE -3259436032,3259436543,NO -3259436544,3259438079,SE +3259435520,3259438079,SE 3259438080,3259438335,ES 3259438336,3259438591,SE 3259438592,3259439103,NO @@ -97367,16 +98311,14 @@ 3262472232,3262472235,AT 3262472236,3262472247,DE 3262472248,3262472251,IT -3262472252,3262472271,DE -3262472272,3262472275,IT +3262472252,3262472275,DE 3262472276,3262472279,BE 3262472280,3262472307,DE 3262472308,3262472311,ES 3262472312,3262472315,NL 3262472316,3262472351,DE 3262472352,3262472355,NL -3262472356,3262472359,DE -3262472360,3262472363,NL +3262472356,3262472363,DE 3262472364,3262472367,GB 3262472368,3262472371,NL 3262472372,3262472375,FR @@ -97498,7 +98440,9 @@ 3262473486,3262473486,CA 3262473487,3262473516,US 3262473517,3262473517,CN -3262473518,3262473526,US +3262473518,3262473518,DE +3262473519,3262473525,US +3262473526,3262473526,DE 3262473527,3262473527,CN 3262473528,3262473538,US 3262473539,3262473539,DE @@ -97510,7 +98454,9 @@ 3262473549,3262473549,CA 3262473550,3262473557,US 3262473558,3262473558,DE -3262473559,3262473567,US +3262473559,3262473559,US +3262473560,3262473560,DE +3262473561,3262473567,US 3262473568,3262473568,CA 3262473569,3262473570,US 3262473571,3262473571,DE @@ -97529,7 +98475,9 @@ 3262473693,3262473729,DE 3262473730,3262473735,US 3262473736,3262473736,CA -3262473737,3262473771,US +3262473737,3262473737,US +3262473738,3262473738,DE +3262473739,3262473771,US 3262473772,3262473772,DE 3262473773,3262473785,US 3262473786,3262473855,DE @@ -97741,7 +98689,13 @@ 3262474816,3262474895,DE 3262474896,3262475007,JP 3262475008,3262475009,DE -3262475010,3262475023,US +3262475010,3262475011,US +3262475012,3262475012,DE +3262475013,3262475019,US +3262475020,3262475020,DE +3262475021,3262475021,US +3262475022,3262475022,DE +3262475023,3262475023,US 3262475024,3262475024,CO 3262475025,3262475025,US 3262475026,3262475027,DE @@ -97778,22 +98732,24 @@ 3262475168,3262475168,DE 3262475169,3262475174,US 3262475175,3262475175,DE -3262475176,3262475185,US +3262475176,3262475179,US +3262475180,3262475180,DE +3262475181,3262475185,US 3262475186,3262475186,DE 3262475187,3262475189,US 3262475190,3262475190,MX 3262475191,3262475191,BR 3262475192,3262475192,MX 3262475193,3262475201,US -3262475202,3262475205,BR +3262475202,3262475203,BR +3262475204,3262475204,DE +3262475205,3262475205,BR 3262475206,3262475209,US 3262475210,3262475210,BR 3262475211,3262475213,US 3262475214,3262475214,DE 3262475215,3262475222,US -3262475223,3262475263,DE -3262475264,3262475267,MU -3262475268,3262475271,US +3262475223,3262475271,DE 3262475272,3262475275,IT 3262475276,3262475279,US 3262475280,3262475283,DE @@ -97835,22 +98791,32 @@ 3262475532,3262475535,US 3262475536,3262475543,DE 3262475544,3262475559,US -3262475560,3262475575,DE -3262475576,3262475591,US -3262475592,3262475595,BR +3262475560,3262475579,DE +3262475580,3262475583,US +3262475584,3262475587,DE +3262475588,3262475591,US +3262475592,3262475595,DE 3262475596,3262475607,US 3262475608,3262475631,DE 3262475632,3262475635,US -3262475636,3262475639,DE -3262475640,3262475683,US -3262475684,3262475687,BR -3262475688,3262475691,DE +3262475636,3262475643,DE +3262475644,3262475651,US +3262475652,3262475655,DE +3262475656,3262475671,US +3262475672,3262475691,DE 3262475692,3262475695,BR -3262475696,3262475715,US -3262475716,3262475719,DE -3262475720,3262475723,BR -3262475724,3262475775,US -3262475776,3262475783,DE +3262475696,3262475699,US +3262475700,3262475711,DE +3262475712,3262475715,US +3262475716,3262475723,DE +3262475724,3262475727,US +3262475728,3262475735,DE +3262475736,3262475743,US +3262475744,3262475751,DE +3262475752,3262475763,US +3262475764,3262475767,DE +3262475768,3262475771,US +3262475772,3262475783,DE 3262475784,3262475787,BE 3262475788,3262475791,DE 3262475792,3262475807,AE @@ -97881,28 +98847,21 @@ 3262476020,3262476023,FR 3262476024,3262476027,DE 3262476028,3262476031,FR -3262476032,3262476039,DE -3262476040,3262476043,CH -3262476044,3262476047,DE +3262476032,3262476047,DE 3262476048,3262476055,IL -3262476056,3262476059,PE -3262476060,3262476063,US -3262476064,3262476071,DE -3262476072,3262476075,US -3262476076,3262476087,DE +3262476056,3262476087,DE 3262476088,3262476091,DK 3262476092,3262476095,NL -3262476096,3262476103,US -3262476104,3262476107,DE +3262476096,3262476099,US +3262476100,3262476107,DE 3262476108,3262476111,BE 3262476112,3262476119,DE 3262476120,3262476123,FR -3262476124,3262476131,DE -3262476132,3262476135,AR -3262476136,3262476139,US +3262476124,3262476139,DE 3262476140,3262476143,BE 3262476144,3262476147,CH -3262476148,3262476155,US +3262476148,3262476151,DE +3262476152,3262476155,US 3262476156,3262476159,BE 3262476160,3262476163,GR 3262476164,3262476171,DE @@ -97913,8 +98872,7 @@ 3262476188,3262476195,DE 3262476196,3262476199,US 3262476200,3262476203,GB -3262476204,3262476207,NA -3262476208,3262476211,US +3262476204,3262476211,DE 3262476212,3262476215,CL 3262476216,3262476223,FR 3262476224,3262476227,DE @@ -97926,17 +98884,14 @@ 3262476248,3262476251,NL 3262476252,3262476255,DE 3262476256,3262476259,US -3262476260,3262476267,DE -3262476268,3262476271,US -3262476272,3262476275,DE +3262476260,3262476275,DE 3262476276,3262476279,CA 3262476280,3262476283,BE 3262476284,3262476291,DE 3262476292,3262476295,ZA -3262476296,3262476299,US +3262476296,3262476299,DE 3262476300,3262476303,DO -3262476304,3262476307,US -3262476308,3262476315,DE +3262476304,3262476315,DE 3262476316,3262476319,BE 3262476320,3262476323,DE 3262476324,3262476327,IT @@ -97945,38 +98900,31 @@ 3262476340,3262476343,ES 3262476344,3262476351,DE 3262476352,3262476355,AR -3262476356,3262476363,US +3262476356,3262476359,DE +3262476360,3262476363,US 3262476364,3262476367,DE 3262476368,3262476371,US 3262476372,3262476375,DE -3262476376,3262476387,US +3262476376,3262476379,US +3262476380,3262476383,DE +3262476384,3262476387,US 3262476388,3262476395,DE 3262476396,3262476399,AT -3262476400,3262476411,DE -3262476412,3262476415,US -3262476416,3262476419,DE -3262476420,3262476423,CH +3262476400,3262476423,DE 3262476424,3262476427,ES 3262476428,3262476431,US 3262476432,3262476435,IT 3262476436,3262476439,AT -3262476440,3262476443,DE -3262476444,3262476447,AT -3262476448,3262476455,DE -3262476456,3262476459,CA +3262476440,3262476459,DE 3262476460,3262476463,DK 3262476464,3262476471,DE 3262476472,3262476475,CA -3262476476,3262476483,US -3262476484,3262476487,DE -3262476488,3262476491,US +3262476476,3262476479,US +3262476480,3262476491,DE 3262476492,3262476495,BE -3262476496,3262476499,US -3262476500,3262476503,DE +3262476496,3262476503,DE 3262476504,3262476507,CH -3262476508,3262476511,DE -3262476512,3262476515,US -3262476516,3262476519,DE +3262476508,3262476519,DE 3262476520,3262476523,GB 3262476524,3262476527,MX 3262476528,3262476531,DE @@ -97984,27 +98932,23 @@ 3262476536,3262476539,US 3262476540,3262476543,DE 3262476544,3262476547,DK -3262476548,3262476551,AR +3262476548,3262476551,DE 3262476552,3262476555,IT 3262476556,3262476559,FR -3262476560,3262476567,DE -3262476568,3262476571,US -3262476572,3262476575,DE -3262476576,3262476587,US +3262476560,3262476579,DE +3262476580,3262476587,US 3262476588,3262476591,ES 3262476592,3262476595,GB 3262476596,3262476603,DE 3262476604,3262476607,NL -3262476608,3262476615,DE -3262476616,3262476619,TR +3262476608,3262476619,DE 3262476620,3262476623,NL -3262476624,3262476627,US -3262476628,3262476635,DE +3262476624,3262476635,DE 3262476636,3262476639,DK -3262476640,3262476647,DE -3262476648,3262476651,US +3262476640,3262476651,DE 3262476652,3262476655,FR -3262476656,3262476667,US +3262476656,3262476663,US +3262476664,3262476667,DE 3262476668,3262476671,GB 3262476672,3262476675,SE 3262476676,3262476679,DE @@ -98013,97 +98957,73 @@ 3262476688,3262476691,DE 3262476692,3262476695,FR 3262476696,3262476707,DE -3262476708,3262476715,US +3262476708,3262476711,US +3262476712,3262476715,DE 3262476716,3262476719,FR 3262476720,3262476723,IT 3262476724,3262476727,FR -3262476728,3262476731,US -3262476732,3262476735,DE +3262476728,3262476735,DE 3262476736,3262476739,CA 3262476740,3262476743,DE 3262476744,3262476747,CH 3262476748,3262476751,BE -3262476752,3262476759,DE -3262476760,3262476763,US -3262476764,3262476771,DE -3262476772,3262476779,US -3262476780,3262476783,DE +3262476752,3262476771,DE +3262476772,3262476775,US +3262476776,3262476783,DE 3262476784,3262476787,IT 3262476788,3262476791,US 3262476792,3262476795,ES -3262476796,3262476799,DE -3262476800,3262476803,CA -3262476804,3262476807,TR -3262476808,3262476827,DE +3262476796,3262476827,DE 3262476828,3262476831,LU -3262476832,3262476839,DE -3262476840,3262476843,IT -3262476844,3262476847,DE -3262476848,3262476851,CH -3262476852,3262476855,US +3262476832,3262476855,DE 3262476856,3262476859,ES -3262476860,3262476863,DE -3262476864,3262476867,US -3262476868,3262476883,DE +3262476860,3262476883,DE 3262476884,3262476887,FR 3262476888,3262476899,DE 3262476900,3262476903,FR -3262476904,3262476907,DE -3262476908,3262476911,NL +3262476904,3262476911,DE 3262476912,3262476915,CH -3262476916,3262476919,DE -3262476920,3262476923,US -3262476924,3262476935,DE +3262476916,3262476935,DE 3262476936,3262476939,AT 3262476940,3262476951,DE 3262476952,3262476955,NL -3262476956,3262476971,DE -3262476972,3262476975,US +3262476956,3262476975,DE 3262476976,3262476979,BE 3262476980,3262476995,DE 3262476996,3262476999,IT -3262477000,3262477007,DE -3262477008,3262477011,CA -3262477012,3262477015,DE +3262477000,3262477015,DE 3262477016,3262477019,CH 3262477020,3262477027,DE 3262477028,3262477035,FR 3262477036,3262477039,DK 3262477040,3262477043,US -3262477044,3262477059,DE -3262477060,3262477063,US -3262477064,3262477067,DE -3262477068,3262477071,AT -3262477072,3262477075,PT -3262477076,3262477083,FR +3262477044,3262477075,DE +3262477076,3262477079,FR +3262477080,3262477083,DE 3262477084,3262477087,NL 3262477088,3262477091,DE 3262477092,3262477095,BE -3262477096,3262477107,DE -3262477108,3262477111,ES -3262477112,3262477151,DE +3262477096,3262477151,DE 3262477152,3262477155,CH 3262477156,3262477159,ES 3262477160,3262477163,US 3262477164,3262477167,DE 3262477168,3262477171,NL -3262477172,3262477175,DE -3262477176,3262477187,US +3262477172,3262477183,DE +3262477184,3262477187,US 3262477188,3262477191,DE 3262477192,3262477195,GB 3262477196,3262477199,PL 3262477200,3262477203,GB -3262477204,3262477207,US -3262477208,3262477211,DE +3262477204,3262477211,DE 3262477212,3262477215,AT -3262477216,3262477219,US -3262477220,3262477223,DE +3262477216,3262477223,DE 3262477224,3262477227,BE 3262477228,3262477231,GB 3262477232,3262477239,DE 3262477240,3262477243,CA 3262477244,3262477247,US -3262477248,3262477251,AR +3262477248,3262477251,DE 3262477252,3262477255,ES 3262477256,3262477259,DE 3262477260,3262477263,GB @@ -98114,11 +99034,9 @@ 3262477280,3262477283,DE 3262477284,3262477287,FR 3262477288,3262477291,BM -3262477292,3262477295,US -3262477296,3262477299,DE +3262477292,3262477299,DE 3262477300,3262477303,IT -3262477304,3262477307,FR -3262477308,3262477311,DE +3262477304,3262477311,DE 3262477312,3262477315,ES 3262477316,3262477319,DE 3262477320,3262477327,US @@ -98161,9 +99079,7 @@ 3262477588,3262477591,FR 3262477592,3262477595,GB 3262477596,3262477599,CH -3262477600,3262477611,DE -3262477612,3262477615,US -3262477616,3262477623,DE +3262477600,3262477623,DE 3262477624,3262477627,FR 3262477628,3262477631,CH 3262477632,3262477659,DE @@ -98312,7 +99228,8 @@ 3262478956,3262478956,DE 3262478957,3262478957,PT 3262478958,3262478958,SE -3262478959,3262478961,NL +3262478959,3262478959,DE +3262478960,3262478961,NL 3262478962,3262478966,DE 3262478967,3262478967,NL 3262478968,3262478968,ES @@ -98324,8 +99241,7 @@ 3262478974,3262478974,GB 3262478975,3262478980,DE 3262478981,3262478981,IT -3262478982,3262478982,DE -3262478983,3262478983,NL +3262478982,3262478983,DE 3262478984,3262478984,CH 3262478985,3262478985,PT 3262478986,3262478986,DE @@ -98876,8 +99792,8 @@ 3262479824,3262479824,GB 3262479825,3262479825,DE 3262479826,3262479826,BE -3262479827,3262479827,DE -3262479828,3262479829,CH +3262479827,3262479828,DE +3262479829,3262479829,CH 3262479830,3262479832,DE 3262479833,3262479833,ES 3262479834,3262479834,DE @@ -98936,8 +99852,7 @@ 3262480189,3262480189,CH 3262480190,3262480190,DE 3262480191,3262480191,NO -3262480192,3262480193,DE -3262480194,3262480194,NL +3262480192,3262480194,DE 3262480195,3262480195,GB 3262480196,3262480197,DE 3262480198,3262480198,NL @@ -99073,7 +99988,9 @@ 3262664704,3262665727,DE 3262665984,3262666751,DE 3262667008,3262670847,DE -3262670848,3262690815,NL +3262670848,3262688767,NL +3262688768,3262689023,DE +3262689024,3262690815,NL 3262690816,3262691583,DE 3262691584,3262693375,NL 3262693376,3262701567,DE @@ -99083,7 +100000,9 @@ 3262732800,3262733055,DE 3262733056,3262753791,NL 3262753792,3262754815,DE -3262754816,3262832639,NL +3262754816,3262761727,NL +3262761728,3262761983,DE +3262761984,3262832639,NL 3262832640,3262840319,DE 3262840320,3262906367,NL 3262906368,3262954495,CH @@ -99183,7 +100102,9 @@ 3263105280,3263105535,NL 3263105536,3263108351,DE 3263108352,3263108607,US -3263108608,3263121407,DE +3263108608,3263109951,DE +3263109952,3263109959,FR +3263109960,3263121407,DE 3263121664,3263137791,DE 3263137792,3263138303,PL 3263138304,3263138559,DE @@ -99203,7 +100124,8 @@ 3263446528,3263447039,DE 3263447040,3263449599,SE 3263449600,3263450111,GB -3263450112,3263458047,SE +3263450112,3263450367,DK +3263450368,3263458047,SE 3263458048,3263458303,DE 3263458304,3263459583,SE 3263459584,3263459839,FR @@ -102120,9 +103042,10 @@ 3275424480,3275424487,GB 3275424496,3275424639,GB 3275424648,3275424703,GB -3275424712,3275424735,GB +3275424712,3275424743,GB 3275424752,3275424871,GB 3275424880,3275424895,GB +3275424904,3275424911,GB 3275424960,3275425135,GB 3275425144,3275425311,GB 3275425328,3275425343,GB @@ -102147,7 +103070,8 @@ 3275439104,3275439679,GB 3275439688,3275439935,GB 3275439944,3275439951,GB -3275439968,3275441407,GB +3275439968,3275440655,GB +3275440672,3275441407,GB 3275441424,3275441439,GB 3275441472,3275441535,GB 3275441600,3275441823,GB @@ -102238,7 +103162,7 @@ 3275475408,3275475447,GB 3275475456,3275475719,GB 3275475728,3275475791,GB -3275475800,3275475835,GB +3275475800,3275475831,GB 3275475840,3275475871,GB 3275475876,3275475879,GB 3275475928,3275475935,GB @@ -102516,9 +103440,7 @@ 3276014240,3276014247,FR 3276014248,3276014463,GB 3276014464,3276014479,FR -3276014480,3276014799,GB -3276014800,3276014815,FR -3276014816,3276014951,GB +3276014480,3276014951,GB 3276014952,3276014959,ES 3276014960,3276018383,GB 3276018384,3276018399,FR @@ -102530,7 +103452,9 @@ 3276023808,3276024831,FR 3276024832,3276025159,GB 3276025160,3276025167,FR -3276025168,3276028279,GB +3276025168,3276028031,GB +3276028032,3276028039,FR +3276028040,3276028279,GB 3276028280,3276028287,FR 3276028288,3276028383,GB 3276028384,3276028391,FR @@ -103161,7 +104085,9 @@ 3276886650,3276886650,DE 3276886651,3276886911,GB 3276886912,3276886927,DE -3276886928,3276890175,GB +3276886928,3276889087,GB +3276889088,3276889215,IT +3276889216,3276890175,GB 3276890176,3276890191,US 3276890192,3276892159,GB 3276892160,3276893183,IT @@ -103204,7 +104130,9 @@ 3276912672,3276912687,IT 3276912688,3276912879,GB 3276912880,3276912895,IT -3276912896,3276917231,GB +3276912896,3276917183,GB +3276917184,3276917215,ES +3276917216,3276917231,GB 3276917232,3276917247,FR 3276917248,3276917735,GB 3276917736,3276917739,ES @@ -103659,9 +104587,7 @@ 3278913536,3278921727,CH 3278921728,3278929919,RU 3278929920,3278938111,TR -3278938112,3278938119,DE -3278938120,3278938123,DK -3278938124,3278938151,DE +3278938112,3278938151,DE 3278938152,3278938155,GB 3278938156,3278938159,DE 3278938160,3278938163,ES @@ -103674,17 +104600,15 @@ 3278938196,3278938199,NL 3278938200,3278938203,CH 3278938204,3278938207,DE -3278938208,3278938219,IT -3278938220,3278938223,FR -3278938224,3278938227,DE +3278938208,3278938215,IT +3278938216,3278938227,DE 3278938228,3278938231,FR 3278938232,3278938235,DE 3278938236,3278938239,FR 3278938240,3278938243,LI 3278938244,3278938247,IT 3278938248,3278938251,AT -3278938252,3278938255,GR -3278938256,3278938259,DE +3278938252,3278938259,DE 3278938260,3278938263,CH 3278938264,3278938267,DE 3278938268,3278938275,FR @@ -103707,9 +104631,7 @@ 3278938360,3278938363,DK 3278938364,3278938367,BH 3278938368,3278938375,FR -3278938376,3278938379,DE -3278938380,3278938383,FR -3278938384,3278938399,DE +3278938376,3278938399,DE 3278938400,3278938403,AT 3278938404,3278938407,DE 3278938408,3278938411,CH @@ -103725,28 +104647,24 @@ 3278938452,3278938455,DE 3278938456,3278938459,ES 3278938460,3278938463,FR -3278938464,3278938467,DE -3278938468,3278938471,NL -3278938472,3278938487,DE +3278938464,3278938487,DE 3278938488,3278938491,NL 3278938492,3278938495,ES 3278938496,3278938499,NL 3278938500,3278938507,DE 3278938508,3278938511,IT -3278938512,3278938515,DE -3278938516,3278938523,NL +3278938512,3278938519,DE +3278938520,3278938523,NL 3278938524,3278938527,FR 3278938528,3278938531,NO -3278938532,3278938535,DK -3278938536,3278938563,DE +3278938532,3278938563,DE 3278938564,3278938567,FR 3278938568,3278938583,DE 3278938584,3278938587,GB 3278938588,3278938591,CH 3278938592,3278938595,DE 3278938596,3278938599,DK -3278938600,3278938603,DE -3278938604,3278938607,IT +3278938600,3278938607,DE 3278938608,3278938611,AT 3278938612,3278938615,NL 3278938616,3278938619,DK @@ -104576,8 +105494,8 @@ 3278942968,3278942968,NL 3278942969,3278942969,AT 3278942970,3278942970,ES -3278942971,3278942972,IT -3278942973,3278942977,DE +3278942971,3278942971,IT +3278942972,3278942977,DE 3278942978,3278942978,BE 3278942979,3278942979,FR 3278942980,3278942980,IT @@ -104796,7 +105714,7 @@ 3278943298,3278943298,PT 3278943299,3278943299,DK 3278943300,3278943300,GB -3278943301,3278943301,CH +3278943301,3278943301,DE 3278943302,3278943302,BE 3278943303,3278943303,DE 3278943304,3278943304,FR @@ -105874,7 +106792,7 @@ 3278945900,3278945900,FR 3278945901,3278945904,DE 3278945905,3278945905,PT -3278945906,3278945906,FR +3278945906,3278945906,DE 3278945907,3278945907,GB 3278945908,3278945908,DE 3278945909,3278945909,FR @@ -107031,7 +107949,7 @@ 3284092928,3284093439,UA 3284093440,3284093951,IR 3284093952,3284094975,RU -3284094976,3284095487,UA +3284094976,3284095487,DE 3284095488,3284095999,RU 3284096000,3284096511,IT 3284096512,3284097023,GB @@ -107453,6 +108371,8 @@ 3285925008,3285925055,DE 3285925060,3285925063,CH 3285925064,3285925071,RU +3285925072,3285925079,PL +3285925080,3285925087,IT 3285925164,3285925171,CH 3285926432,3285926463,CH 3285926592,3285926623,DE @@ -107470,7 +108390,7 @@ 3285940736,3285940767,IT 3285941248,3285941503,ES 3285943808,3285944063,CH -3285947136,3285947151,NL +3285947136,3285947159,NL 3285949604,3285949607,CH 3285949856,3285949887,ES 3285950208,3285950463,IT @@ -107859,7 +108779,7 @@ 3287215360,3287215615,GB 3287215616,3287215871,DE 3287215872,3287216127,RU -3287216128,3287216639,GB +3287216384,3287216639,GB 3287217152,3287217407,NL 3287217408,3287217663,PL 3287217664,3287217919,RU @@ -107969,7 +108889,9 @@ 3287572480,3287580671,DE 3287580672,3287588863,LV 3287588864,3287597055,BE -3287597056,3287605247,GI +3287597056,3287603082,GI +3287603083,3287603083,US +3287603084,3287605247,GI 3287605248,3287630335,DE 3287630336,3287631359,PL 3287631360,3287631871,IR @@ -107999,7 +108921,7 @@ 3287663616,3287663871,NL 3287663872,3287664127,PT 3287664128,3287664383,PL -3287664384,3287664639,NL +3287664384,3287664639,DE 3287664640,3287664895,UA 3287664896,3287665151,GB 3287665152,3287665407,NO @@ -108285,8 +109207,8 @@ 3288534528,3288535039,EG 3288535040,3288539135,CW 3288539136,3288543487,US -3288543744,3288543996,US -3288543998,3288544498,US +3288543744,3288543983,US +3288544000,3288544498,US 3288544500,3288544767,US 3288544768,3288545023,MX 3288545024,3288545279,FR @@ -108462,6 +109384,7 @@ 3289235456,3289237503,GH 3289237504,3289238015,ZA 3289238016,3289238271,KE +3289238272,3289238527,UG 3289238528,3289238783,AO 3289238784,3289239039,ZA 3289239040,3289239295,EG @@ -108605,6 +109528,10 @@ 3291043072,3291043327,ZA 3291043328,3291043583,TZ 3291043584,3291043839,KE +3291043840,3291044095,ZW +3291044096,3291044351,KE +3291044864,3291045119,AO +3291045120,3291045375,KE 3291045376,3291045631,NG 3291045632,3291045887,TN 3291045888,3291078655,ZA @@ -108732,7 +109659,9 @@ 3291385856,3291386879,NG 3291386880,3291387903,SC 3291387904,3291388927,BJ -3291388928,3291389951,GA +3291388928,3291389307,GA +3291389308,3291389311,KM +3291389312,3291389951,GA 3291389952,3291397119,ZA 3291397120,3291398143,EG 3291398144,3291406335,ZM @@ -108790,6 +109719,8 @@ 3291552256,3291552511,NG 3291552768,3291554047,NG 3291554304,3291554559,MZ +3291554816,3291555071,CD +3291555328,3291555583,CM 3291611136,3291611647,ZA 3291611648,3291611903,MU 3291676672,3291742207,ZA @@ -108798,7 +109729,15 @@ 3291742592,3291742719,IE 3291742720,3291750399,US 3291750400,3291750655,GB -3291750656,3291906047,US +3291750656,3291817471,US +3291817472,3291817983,NL +3291817984,3291819263,US +3291819264,3291819775,NL +3291819776,3291821055,US +3291821056,3291821567,NL +3291821568,3291823103,US +3291823104,3291823359,DE +3291823360,3291906047,US 3291906048,3291907071,LK 3291907072,3291939063,US 3291939064,3291939064,GB @@ -109189,9 +110128,18 @@ 3292266496,3292266751,TZ 3292267008,3292267263,KE 3292267520,3292267775,BW +3292268032,3292268287,CM 3292332032,3292334079,MU 3292334080,3292336127,TZ -3292356608,3292364799,ZA +3292336128,3292340223,ZA +3292340224,3292344319,GH +3292344320,3292345343,ZA +3292345344,3292346367,KE +3292346368,3292348415,ZA +3292349440,3292350463,ZA +3292350464,3292351487,CD +3292351488,3292352511,AO +3292352512,3292364799,ZA 3292364800,3292385279,SC 3292385280,3292387327,BW 3292387328,3292389375,NG @@ -109230,8 +110178,8 @@ 3301172224,3301175295,ZA 3301175296,3301179391,EG 3301179392,3301179903,RU -3301179904,3301180927,SC -3301180928,3301185535,US +3301179904,3301181183,SC +3301181184,3301185535,US 3301185536,3301187583,GB 3301187584,3301189631,FR 3301189632,3301191679,US @@ -109618,12 +110566,18 @@ 3302993920,3302998015,MA 3302998016,3303010303,ZA 3303010304,3303012351,RW +3303012352,3303013375,ZA 3303013376,3303013631,SN 3303013632,3303014399,KE 3303014400,3304062975,TN 3304062976,3304456191,SC 3304456192,3304521727,NG -3304521728,3304587263,SC +3304521728,3304528895,US +3304528896,3304529919,SC +3304529920,3304535295,US +3304535296,3304536063,SC +3304536064,3304538111,CA +3304538112,3304587263,SC 3304587264,3304669183,ZA 3304669184,3304685567,TZ 3304685568,3304701951,ZA @@ -109803,8 +110757,7 @@ 3320300544,3320301567,ZA 3320301568,3320302591,SO 3320302592,3320303615,GM -3320303616,3320304127,SC -3320304128,3320304639,GH +3320303616,3320304639,SC 3320304640,3320305663,ZW 3320305664,3320306687,MZ 3320306688,3320307711,LR @@ -110144,9 +111097,7 @@ 3322706576,3322706591,CA 3322706592,3322706631,US 3322706632,3322706639,GB -3322706640,3322706687,US -3322706688,3322706815,RO -3322706816,3322707359,US +3322706640,3322707359,US 3322707360,3322707391,PK 3322707392,3322765415,US 3322765416,3322765431,IN @@ -110438,7 +111389,9 @@ 3323241720,3323241727,SA 3323241728,3323241983,CA 3323241984,3323242559,US -3323242560,3323242623,GB +3323242560,3323242575,GB +3323242576,3323242591,US +3323242592,3323242623,GB 3323242624,3323242719,AE 3323242720,3323243087,US 3323243088,3323243095,IE @@ -110488,7 +111441,9 @@ 3323246464,3323246591,CN 3323246592,3323246847,CA 3323246848,3323247359,US -3323247360,3323247487,CA +3323247360,3323247423,CA +3323247424,3323247439,US +3323247440,3323247487,CA 3323247488,3323270420,US 3323270421,3323270421,CH 3323270422,3323339263,US @@ -110898,8 +111853,8 @@ 3323689664,3323689715,CA 3323689716,3323689719,US 3323689720,3323689747,CA -3323689748,3323689751,IN -3323689752,3323689863,CA +3323689748,3323689750,IN +3323689751,3323689863,CA 3323689864,3323689871,PE 3323689872,3323689879,IT 3323689880,3323689927,CA @@ -111501,7 +112456,9 @@ 3324820688,3324820719,CN 3324820720,3324822015,US 3324822016,3324822527,CA -3324822528,3324843799,US +3324822528,3324824575,US +3324824576,3324824831,DE +3324824832,3324843799,US 3324843802,3324844543,US 3324844800,3324937999,US 3324938000,3324938007,PK @@ -112748,8 +113705,7 @@ 3325296640,3325303807,US 3325303808,3325304831,AS 3325304832,3325305087,CA -3325305088,3325307647,US -3325307648,3325307903,BB +3325305088,3325307903,US 3325307904,3325308927,GB 3325308928,3325313023,CA 3325313024,3325323687,US @@ -113261,11 +114217,9 @@ 3332003712,3332003839,IT 3332003840,3332004607,US 3332004608,3332004639,AU -3332004640,3332004864,US -3332004865,3332004927,CA +3332004640,3332004927,US 3332004928,3332004959,AU -3332004960,3332005118,CA -3332005119,3332005438,US +3332004960,3332005438,US 3332005439,3332005503,IN 3332005504,3332005630,CA 3332005631,3332028415,US @@ -113585,7 +114539,8 @@ 3335480192,3335480319,IT 3335480320,3335524351,US 3335524352,3335524607,AU -3335524608,3335573759,US +3335524608,3335527235,US +3335527238,3335573759,US 3335573760,3335574015,IN 3335574016,3335581695,US 3335581952,3335582463,US @@ -113752,8 +114707,8 @@ 3337949184,3337957375,US 3337957376,3337959423,CA 3337959424,3337960447,US -3337960448,3337961487,CA -3337961488,3337961519,US +3337960448,3337961471,CA +3337961472,3337961519,US 3337961520,3337961527,RO 3337961528,3337961535,US 3337961536,3337961543,AZ @@ -113989,7 +114944,21 @@ 3339091968,3339092991,NL 3339092992,3339093503,US 3339093504,3339094015,NL -3339094016,3339147007,US +3339094016,3339137279,US +3339137280,3339137535,FR +3339137536,3339138815,US +3339138816,3339139071,NL +3339139072,3339139327,SE +3339139328,3339139583,JP +3339139584,3339139839,GB +3339139840,3339140095,US +3339140096,3339140351,SG +3339140352,3339140607,HK +3339140608,3339142655,US +3339142912,3339143167,DE +3339143168,3339143423,US +3339143424,3339143679,ES +3339143680,3339147007,US 3339147008,3339147775,CA 3339147776,3339148031,MS 3339148032,3339153407,US @@ -114190,8 +115159,8 @@ 3339963168,3339963199,SC 3339963200,3339965439,US 3339965440,3339968511,CA -3339968512,3339975679,US -3339975680,3339976703,CA +3339968512,3339975935,US +3339975936,3339976703,CA 3339976704,3340059343,US 3340059344,3340059359,CA 3340059360,3340080127,US @@ -114581,7 +115550,8 @@ 3342795264,3342831103,US 3342831104,3342831359,IN 3342831360,3342878967,US -3342878976,3343013887,US +3342878976,3342979587,US +3342979592,3343013887,US 3343013888,3343015695,CA 3343015696,3343015727,US 3343015728,3343015935,CA @@ -114613,7 +115583,9 @@ 3343047800,3343047847,US 3343047848,3343047855,IT 3343047856,3343047863,US -3343047864,3343047871,RU +3343047864,3343047865,RU +3343047866,3343047866,US +3343047867,3343047871,RU 3343047872,3343055871,US 3343055872,3343056895,CA 3343056896,3343108095,US @@ -114931,8 +115903,7 @@ 3345332432,3345332435,VN 3345332436,3345332439,US 3345332440,3345332447,NL -3345332448,3345332451,CY -3345332452,3345332455,US +3345332448,3345332455,US 3345332456,3345332459,MY 3345332460,3345332487,US 3345332488,3345332495,IN @@ -114979,18 +115950,13 @@ 3345398784,3345399807,BS 3345399808,3345401855,PR 3345401856,3345403903,CA -3345403904,3345408005,US -3345408006,3345408009,CZ -3345408010,3345408017,US +3345403904,3345408017,US 3345408018,3345408021,GB 3345408022,3345408092,US 3345408093,3345408094,GB -3345408095,3345408098,VE -3345408099,3345408110,US +3345408095,3345408110,US 3345408111,3345408114,AU -3345408115,3345408161,US -3345408162,3345408165,CA -3345408166,3345408189,US +3345408115,3345408189,US 3345408190,3345408193,AR 3345408194,3345408225,US 3345408226,3345408227,GB @@ -114998,8 +115964,8 @@ 3345408236,3345408239,CN 3345408240,3345408319,US 3345408320,3345408323,GB -3345408324,3345408386,US -3345408387,3345408394,GB +3345408324,3345408390,US +3345408391,3345408394,GB 3345408395,3345408415,US 3345408416,3345408420,AU 3345408421,3345408424,US @@ -115027,9 +115993,7 @@ 3345408698,3345408701,GB 3345408702,3345408784,US 3345408785,3345408788,CA -3345408789,3345408888,US -3345408889,3345408892,MX -3345408893,3345408903,US +3345408789,3345408903,US 3345408904,3345408907,GB 3345408908,3345409033,US 3345409034,3345409037,CA @@ -115155,13 +116119,14 @@ 3346232768,3346232831,US 3346232832,3346232895,GB 3346232896,3346232911,UA -3346232912,3346232919,IN -3346232920,3346232959,US +3346232912,3346232959,US 3346232960,3346232991,GB 3346232992,3346233023,US 3346233024,3346233087,GB 3346233088,3346233256,US -3346233257,3346233268,AR +3346233257,3346233266,AR +3346233267,3346233267,US +3346233268,3346233268,AR 3346233269,3346233279,US 3346233280,3346233311,GB 3346233312,3346234367,US @@ -116109,7 +117074,7 @@ 3351706624,3351850239,US 3351850496,3351855615,US 3351855616,3351855871,GB -3351855872,3351860223,US +3351856128,3351860223,US 3351860224,3351861247,KY 3351861248,3351869439,US 3351869440,3351871487,CA @@ -116734,7 +117699,8 @@ 3355249664,3355260927,US 3355260928,3355262719,CA 3355262720,3355272189,US -3355272191,3355310591,US +3355272191,3355309823,US +3355309828,3355310591,US 3355310592,3355311103,CA 3355311104,3355319295,US 3355319296,3355320319,CA @@ -116825,7 +117791,9 @@ 3355449344,3355450367,CU 3355450368,3355451391,EC 3355451392,3355458559,BR -3355458560,3355459071,HN +3355458560,3355458591,HN +3355458592,3355458599,US +3355458600,3355459071,HN 3355459072,3355459327,BR 3355459328,3355459583,EC 3355459584,3355459839,PA @@ -117141,7 +118109,7 @@ 3356134656,3356134911,PY 3356134912,3356135167,DO 3356135168,3356135423,MX -3356135424,3356135679,BR +3356135424,3356135679,PA 3356135680,3356135935,CR 3356135936,3356136191,BR 3356136192,3356137471,EC @@ -117328,8 +118296,8 @@ 3356420096,3356420351,CO 3356420352,3356420863,CL 3356420864,3356421375,CO -3356421376,3356421631,CL -3356421632,3356422143,CO +3356421376,3356421503,CL +3356421504,3356422143,CO 3356422144,3356425471,CL 3356425472,3356425599,CO 3356425600,3356426239,CL @@ -117385,6 +118353,7 @@ 3356999168,3357003007,MX 3357003008,3357003263,BR 3357003264,3357003519,CL +3357003520,3357003775,AR 3357003776,3357007871,MX 3357007872,3357011967,BR 3357011968,3357015551,MX @@ -117541,7 +118510,9 @@ 3357479864,3357479867,CO 3357479868,3357479871,AR 3357479872,3357479879,CO -3357479880,3357480103,AR +3357479880,3357480031,AR +3357480032,3357480039,CO +3357480040,3357480103,AR 3357480104,3357480111,CO 3357480112,3357480159,AR 3357480160,3357480175,CO @@ -117628,7 +118599,7 @@ 3357646848,3357647871,MX 3357647872,3357648895,BR 3357648896,3357650431,MX -3357650432,3357650943,BR +3357650432,3357650687,BR 3357650944,3357657855,MX 3357657856,3357658111,AR 3357658112,3357670655,MX @@ -117658,7 +118629,9 @@ 3357778416,3357778423,SV 3357778424,3357784319,GT 3357784320,3357784335,SV -3357784336,3357786111,GT +3357784336,3357784503,GT +3357784504,3357784511,SV +3357784512,3357786111,GT 3357786112,3357802495,VE 3357802496,3357868031,MX 3357868032,3357933567,PE @@ -117743,8 +118716,8 @@ 3358523392,3358523903,VE 3358523904,3358526463,AR 3358526464,3358527487,VE -3358527488,3358530303,AR -3358530304,3358530943,VE +3358527488,3358530815,AR +3358530816,3358530943,VE 3358530944,3358531071,AR 3358531072,3358531583,VE 3358531584,3358531839,AR @@ -117753,10 +118726,8 @@ 3358532864,3358533631,VE 3358533632,3358533887,AR 3358533888,3358534399,VE -3358534400,3358534655,AR -3358534656,3358534911,VE -3358534912,3358537727,AR -3358537728,3358539519,VE +3358534400,3358538751,AR +3358538752,3358539519,VE 3358539520,3358543615,AR 3358543616,3358543871,VE 3358543872,3358544127,MX @@ -118165,8 +119136,8 @@ 3362692608,3362692863,BR 3362692864,3362695167,AR 3362695168,3362697215,CO -3362697216,3362701311,AR -3362701312,3362709503,CO +3362697216,3362703359,AR +3362703360,3362709503,CO 3362709504,3362711551,AR 3362711552,3362713599,EC 3362713600,3362714623,VE @@ -118385,8 +119356,7 @@ 3381448704,3381452799,BR 3381452800,3381453823,AR 3381453824,3381455871,BR -3381455872,3381456383,US -3381456384,3381456895,CO +3381455872,3381456895,US 3381456896,3381460991,BR 3381460992,3381944319,MX 3381944320,3381946367,BR @@ -118451,7 +119421,9 @@ 3382662144,3382665215,BR 3382665216,3382669311,MX 3382669312,3382669567,SV -3382669568,3382670335,GT +3382669568,3382669823,GT +3382669824,3382670079,HN +3382670080,3382670335,GT 3382670336,3382672383,BR 3382672384,3382677503,MX 3382677504,3382681599,BR @@ -118568,7 +119540,9 @@ 3387260928,3387293695,DO 3387293696,3387359231,PE 3387359232,3387424767,AR -3387424768,3387555839,CO +3387424768,3387502599,CO +3387502600,3387502607,JP +3387502608,3387555839,CO 3387555840,3387568127,AR 3387568128,3387572223,PE 3387572224,3387576319,CO @@ -123349,7 +124323,7 @@ 3411609088,3411611647,HK 3411611648,3411615743,ID 3411615744,3411623935,JP -3411623936,3411640319,AU +3411623936,3411632127,AU 3411640320,3411641343,JP 3411641344,3411641599,IN 3411641600,3411641855,CN @@ -124290,7 +125264,8 @@ 3417354240,3417356287,ID 3417356288,3417357311,AU 3417357312,3417357567,NZ -3417357568,3417358335,PK +3417357568,3417357823,AU +3417357824,3417358335,PK 3417358336,3417374719,HK 3417374720,3417440255,PH 3417440256,3417833471,JP @@ -125461,7 +126436,11 @@ 3438034944,3438051327,BS 3438051328,3438084095,US 3438084096,3438116863,CA -3438116864,3438215423,US +3438116864,3438132559,US +3438132560,3438132575,CA +3438132576,3438137183,US +3438137184,3438137191,CA +3438137192,3438215423,US 3438215424,3438215935,CA 3438215936,3438216191,US 3438216192,3438217983,CA @@ -125534,7 +126513,8 @@ 3449001247,3449098239,US 3449098240,3449098495,GB 3449098752,3449099263,DE -3449099776,3449100799,US +3449099776,3449100287,US +3449100288,3449100799,HK 3449100800,3449101311,AU 3449101312,3449101823,US 3449102336,3449159679,US @@ -126764,8 +127744,7 @@ 3464201216,3464201471,JP 3464201472,3464201727,GR 3464201728,3464201983,EG -3464201984,3464202239,ES -3464202240,3464202495,CA +3464201984,3464202495,CA 3464202496,3464202751,FR 3464202752,3464203007,IT 3464203008,3464203263,SE @@ -126777,19 +127756,7 @@ 3464205824,3464205951,AF 3464205952,3464206079,UZ 3464206080,3464206207,TJ -3464206208,3464206214,US -3464206215,3464206215,KG -3464206216,3464206216,US -3464206217,3464206217,KG -3464206218,3464206220,US -3464206221,3464206222,KG -3464206223,3464206229,US -3464206230,3464206230,KG -3464206231,3464206232,US -3464206233,3464206233,KG -3464206234,3464206234,US -3464206235,3464206235,KG -3464206236,3464206335,US +3464206208,3464206335,KG 3464206336,3464206463,KZ 3464206464,3464206591,TM 3464206592,3464206719,LA @@ -127136,7 +128103,9 @@ 3468545792,3468546047,SG 3468546048,3468597759,US 3468597760,3468598015,SG -3468598016,3468598271,US +3468598016,3468598143,US +3468598144,3468598175,SG +3468598176,3468598271,US 3468598272,3468599039,SG 3468599040,3468599295,HK 3468599296,3468613631,US @@ -128500,7 +129469,8 @@ 3494968320,3494972415,CA 3494972416,3494979583,US 3494979584,3494981631,CA -3494981632,3494999039,US +3494981632,3494985975,US +3494985977,3494999039,US 3494999040,3494999551,ID 3494999552,3495000063,CN 3495000064,3495001087,CA @@ -129389,7 +130359,19 @@ 3513495680,3513495743,PR 3513495744,3513495807,VI 3513495808,3513495871,UM -3513495872,3513500415,US +3513495872,3513496063,US +3513496064,3513496067,CA +3513496068,3513496071,MX +3513496072,3513496075,PR +3513496076,3513496079,VI +3513496080,3513496083,UM +3513496084,3513497087,US +3513497088,3513497151,CA +3513497152,3513497215,MX +3513497216,3513497279,PR +3513497280,3513497343,VI +3513497344,3513497407,UM +3513497408,3513500415,US 3513500416,3513500671,AU 3513500672,3513778175,US 3513778176,3513794559,CA @@ -129736,7 +130718,9 @@ 3519884288,3519901695,CA 3519901696,3519930367,US 3519934464,3519938559,CA -3519938560,3519971071,US +3519938560,3519967231,US +3519967232,3519969279,CA +3519969280,3519971071,US 3519971072,3519971327,CA 3519971328,3520020479,US 3520020480,3520036863,CA @@ -130038,7 +131022,9 @@ 3524794240,3524794303,SG 3524794304,3524794367,JP 3524794368,3524801023,SG -3524801024,3524801287,JP +3524801024,3524801055,JP +3524801056,3524801087,SG +3524801088,3524801287,JP 3524801288,3524801295,SG 3524801296,3524801535,JP 3524801536,3524801791,SG @@ -130229,9 +131215,7 @@ 3534760448,3534760959,NZ 3534760960,3534761983,AU 3534761984,3534763775,HK -3534764032,3534786303,HK -3534786304,3534786335,PH -3534786336,3534786815,HK +3534764032,3534786815,HK 3534786816,3534787327,MY 3534787328,3534787583,TH 3534787584,3534863443,HK @@ -130399,9 +131383,9 @@ 3557336272,3557336279,BE 3557339164,3557339164,BE 3557343232,3557351423,DE -3557351424,3557356799,RU -3557356800,3557357055,UA -3557357056,3557359615,RU +3557351424,3557356543,RU +3557356544,3557357311,UA +3557357312,3557359615,RU 3557359616,3557359991,JE 3557359992,3557359999,GB 3557360000,3557360047,JE @@ -130544,7 +131528,9 @@ 3558170624,3558178815,GB 3558178816,3558187007,BG 3558187008,3558195199,DE -3558195200,3558197247,GB +3558195200,3558196327,GB +3558196328,3558196335,IT +3558196336,3558197247,GB 3558197248,3558199295,US 3558199296,3558203391,GB 3558203392,3558211583,ES @@ -130563,7 +131549,9 @@ 3558244352,3558252543,IT 3558252544,3558260735,KE 3558260736,3558268927,UA -3558268928,3558276351,GI +3558268928,3558275839,GI +3558275840,3558276095,HK +3558276096,3558276351,GI 3558276352,3558276863,GB 3558276864,3558277119,GI 3558277120,3558285951,GB @@ -132749,7 +133737,9 @@ 3560946748,3560946748,DE 3560946749,3560946760,US 3560946761,3560946761,DE -3560946762,3560946767,US +3560946762,3560946762,US +3560946763,3560946763,DE +3560946764,3560946767,US 3560946768,3560946768,CA 3560946769,3560946769,US 3560946770,3560946825,DE @@ -132905,11 +133895,15 @@ 3561496576,3561497599,GB 3561497600,3561498111,NL 3561498112,3561498367,DE -3561498368,3561498623,GB +3561498368,3561498495,GB +3561498496,3561498559,NL +3561498560,3561498623,GB 3561498624,3561500671,NL 3561500672,3561502719,GB 3561502720,3561503743,NL -3561503744,3561504767,GB +3561503744,3561504383,GB +3561504384,3561504511,NL +3561504512,3561504767,GB 3561504768,3561512959,DE 3561512960,3561521151,SI 3561521152,3561529343,GE @@ -133103,9 +134097,9 @@ 3562799104,3562807295,HU 3562807296,3562815487,ES 3562815488,3562823679,NL -3562823680,3562825727,RU -3562825728,3562829823,GB -3562829824,3562831359,RU +3562823680,3562827775,RU +3562827776,3562830847,NL +3562830848,3562831359,RU 3562831360,3562831615,FR 3562831616,3562848255,RU 3562848256,3562856447,HR @@ -133427,9 +134421,7 @@ 3564691456,3564692735,GI 3564692736,3564692991,GB 3564692992,3564699647,GI -3564699648,3564709119,GB -3564709120,3564709375,US -3564709376,3564716031,GB +3564699648,3564716031,GB 3564716032,3564724223,IT 3564724224,3564732415,NL 3564732416,3564733183,GB @@ -134356,13 +135348,55 @@ 3575624960,3575631103,GB 3575631360,3575638181,GB 3575638183,3575644159,GB -3575644160,3575676927,FR -3575676928,3575693311,DK +3575644160,3575646975,FR +3575646976,3575647231,GB +3575647232,3575648223,FR +3575648224,3575648255,PT +3575648256,3575652991,FR +3575652992,3575653119,GB +3575653120,3575653759,FR +3575653760,3575653887,ES +3575653888,3575655039,FR +3575655040,3575655103,ES +3575655104,3575656287,FR +3575656288,3575656319,PT +3575656320,3575657087,FR +3575657088,3575657215,ES +3575657216,3575657983,FR +3575657984,3575658239,ES +3575658240,3575658303,FR +3575658304,3575658367,FI +3575658368,3575659007,FR +3575659008,3575659071,ES +3575659072,3575659167,FR +3575659168,3575659183,FI +3575659184,3575659863,FR +3575659864,3575659867,GB +3575659868,3575660159,FR +3575660160,3575660223,ES +3575660224,3575660351,FR +3575660352,3575660415,PT +3575660416,3575669375,FR +3575669376,3575669503,IE +3575669504,3575670911,FR +3575670912,3575671039,ES +3575671040,3575671103,GB +3575671104,3575671615,FR +3575671616,3575671679,FI +3575671680,3575671855,FR +3575671856,3575671871,GB +3575671872,3575672879,FR +3575672880,3575672895,GB +3575672896,3575673087,FR +3575673088,3575673343,GB +3575673344,3575693311,FR 3575693312,3575697407,DE 3575697408,3575701503,IT -3575701504,3575707647,DK +3575701504,3575703551,DK +3575703552,3575705599,SE +3575705600,3575707647,DK 3575707648,3575708671,LU -3575708672,3575709695,DK +3575708672,3575709695,IQ 3575709696,3575742463,AT 3575742464,3575775231,RU 3575775232,3575824383,NL @@ -134524,8 +135558,8 @@ 3576106944,3576107863,GB 3576107864,3576107871,FR 3576107872,3576109991,GB -3576109992,3576109999,NL -3576110000,3576110939,GB +3576109992,3576110015,NL +3576110016,3576110939,GB 3576110940,3576110943,NL 3576110944,3576111103,GB 3576111104,3576116127,FR @@ -134852,8 +135886,7 @@ 3580203008,3580203647,SE 3580203648,3580203775,AT 3580203776,3580204031,SE -3580204032,3580204287,LT -3580204288,3580204543,SE +3580204032,3580204543,LT 3580204544,3580205055,NL 3580205056,3580206079,SE 3580206080,3580207103,HR @@ -134955,9 +135988,7 @@ 3581214720,3581231103,NL 3581239296,3581241343,NL 3581255680,3581258751,FR -3581280256,3581334911,BE -3581334912,3581335039,FR -3581335040,3581411327,BE +3581280256,3581411327,BE 3581411328,3581673471,GB 3581673472,3581935615,NL 3581935616,3581943807,RU @@ -135095,7 +136126,9 @@ 3582861312,3582869503,RU 3582869504,3582877695,NO 3582877696,3582885887,AT -3582885888,3582894079,TR +3582885888,3582892031,TR +3582892032,3582892543,US +3582892544,3582894079,TR 3582894080,3582902271,CH 3582902272,3582910463,RU 3582910464,3582916607,SI @@ -135203,6 +136236,7 @@ 3583740928,3583741183,GB 3583742976,3583743487,PL 3583743616,3583743743,GB +3583744112,3583744127,SE 3583744128,3583744255,PL 3583744320,3583744383,GB 3583744512,3583744767,GB @@ -135447,7 +136481,9 @@ 3585523712,3585531903,LV 3585531904,3585540095,AT 3585540096,3585548287,DE -3585548288,3585556479,RU +3585548288,3585553151,RU +3585553152,3585553407,NL +3585553408,3585556479,RU 3585556480,3585564671,DE 3585564672,3585572863,RU 3585572864,3585581055,IT @@ -135529,9 +136565,7 @@ 3585851392,3585859583,SE 3585859584,3585860607,AF 3585860608,3585861631,RU -3585861632,3585862143,EE -3585862144,3585862399,GI -3585862400,3585863679,EE +3585861632,3585863679,EE 3585863680,3585865471,NL 3585865472,3585865727,LB 3585865728,3585865983,UA @@ -135956,7 +136990,9 @@ 3589580800,3589582847,NL 3589582848,3589582975,GB 3589582976,3589583103,NL -3589583104,3589586943,GB +3589583104,3589585919,GB +3589585920,3589585983,NL +3589585984,3589586943,GB 3589586944,3589587199,DE 3589587200,3589587455,NL 3589587456,3589587967,CH @@ -135965,7 +137001,11 @@ 3589599232,3589601279,SE 3589601280,3589603327,RS 3589603328,3589668863,FR -3589668864,3589677055,RU +3589668864,3589670911,LT +3589670912,3589672959,RU +3589672960,3589675007,LT +3589675008,3589676031,RU +3589676032,3589677055,LT 3589677056,3589685247,FR 3589685248,3589718015,GB 3589718016,3589722023,BE @@ -136213,9 +137253,7 @@ 3625508864,3625512959,CA 3625512960,3625631743,US 3625631744,3625639935,CA -3625639936,3625913343,US -3625913344,3625913599,GB -3625913600,3625961983,US +3625639936,3625961983,US 3625961984,3625962239,GB 3625962240,3626091519,US 3626091520,3626092031,AR @@ -136365,7 +137403,20 @@ 3629318144,3629326335,CA 3629326336,3629539327,US 3629539328,3629547519,CA -3629547520,3629662207,US +3629547520,3629613055,US +3629613056,3629613311,SE +3629613312,3629614591,US +3629614592,3629614847,DE +3629614848,3629615103,NL +3629615104,3629615359,US +3629615360,3629615615,GB +3629615616,3629615871,JP +3629615872,3629616127,ES +3629616128,3629616383,US +3629616384,3629616639,FR +3629616640,3629616895,SG +3629616896,3629617151,HK +3629617152,3629662207,US 3629662208,3629662463,GB 3629662464,3629737215,US 3629737216,3629737471,CA @@ -136545,15 +137596,28 @@ 3631665152,3631667199,CA 3631667200,3631667455,US 3631667456,3631668735,CA -3631668736,3631669807,US +3631668736,3631669775,US +3631669776,3631669783,BO +3631669784,3631669791,US +3631669792,3631669799,BO +3631669800,3631669807,US 3631669808,3631669823,EC -3631669824,3631670527,US +3631669824,3631669839,BO +3631669840,3631669887,US +3631669888,3631669919,BO +3631669920,3631669951,EC +3631669952,3631670527,US 3631670528,3631670783,NG 3631670784,3631671039,EC 3631671040,3631672063,US 3631672064,3631672575,PY 3631672576,3631672831,NG -3631672832,3631806207,US +3631672832,3631673231,US +3631673232,3631673247,EC +3631673248,3631673263,JM +3631673264,3631673295,BB +3631673296,3631673311,EC +3631673312,3631806207,US 3631806208,3631806463,NL 3631806464,3631841279,US 3631841280,3631874047,CA @@ -137013,8 +138077,8 @@ 3639737375,3639737599,GB 3639737600,3639737629,US 3639737630,3639737630,GB -3639737631,3639868223,US -3639868224,3639868415,MX +3639737631,3639868159,US +3639868160,3639868415,MX 3639868416,3639902207,US 3639902208,3639918591,PE 3639918592,3639934975,AR @@ -138619,7 +139683,9 @@ 3645767435,3645767435,DE 3645767436,3645767448,US 3645767449,3645767449,DE -3645767450,3645767455,US +3645767450,3645767450,US +3645767451,3645767451,DE +3645767452,3645767455,US 3645767456,3645767502,DE 3645767503,3645767503,US 3645767504,3645767679,DE @@ -138701,7 +139767,9 @@ 3647974008,3647974015,IT 3647974016,3647974055,DE 3647974056,3647974063,IT -3647974064,3647975255,DE +3647974064,3647974071,DE +3647974072,3647974079,IT +3647974080,3647975255,DE 3647975256,3647975263,ES 3647975264,3647975423,DE 3647975424,3647976447,ES @@ -138744,9 +139812,7 @@ 3648016384,3648020479,GB 3648020480,3648024575,IT 3648024576,3648028671,NL -3648028672,3648030207,HU -3648030208,3648030463,RO -3648030464,3648032767,HU +3648028672,3648032767,HU 3648032768,3648036863,IE 3648036864,3648040959,CZ 3648040960,3648045055,BE @@ -139118,7 +140184,9 @@ 3650939616,3650943999,GB 3650944000,3650944530,FR 3650944531,3650944531,GB -3650944532,3650945023,FR +3650944532,3650944708,FR +3650944709,3650944709,GB +3650944710,3650945023,FR 3650945024,3651010559,DK 3651010560,3651076095,GB 3651076096,3651108863,DE @@ -139239,9 +140307,7 @@ 3651954688,3651960831,IR 3651960832,3651964927,GB 3651964928,3651969023,SK -3651969024,3651971613,DE -3651971614,3651971614,TR -3651971615,3651977215,DE +3651969024,3651977215,DE 3651977216,3651985407,IT 3651985408,3651997695,PL 3651997696,3652001791,RU @@ -139648,7 +140714,7 @@ 3707207680,3707208703,BD 3707208704,3707209727,NZ 3707209728,3707211775,CN -3707211776,3707215871,LK +3707211776,3707215871,VN 3707215872,3707217919,BD 3707217920,3707219967,ID 3707219968,3707222015,AU @@ -139779,7 +140845,6 @@ 3743019008,3743022079,MY 3743022080,3743023103,BD 3743023104,3743027199,TW -3743027200,3743031295,SG 3743031296,3743035391,IN 3743035392,3743039487,HK 3743039488,3743055871,TW diff --git a/src/config/geoip6 b/src/config/geoip6 index e2d878bc9c..fa4fffe2e6 100644 --- a/src/config/geoip6 +++ b/src/config/geoip6 @@ -1,4 +1,4 @@ -# Last updated based on October 4 2016 Maxmind GeoLite2 Country +# Last updated based on November 3 2016 Maxmind GeoLite2 Country # wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz # gunzip GeoLite2-Country.mmdb.gz # python mmdb-convert.py GeoLite2-Country.mmdb @@ -65,73 +65,28 @@ 2001:3d0::,2001:3d0:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:3d8::,2001:3d8:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:3e0::,2001:3e0:ffff:ffff:ffff:ffff:ffff:ffff,JP -2001:3e8::,2001:3e8::7fff:ffff:ffff:ffff:ffff,US -2001:3e8:0:8000::,2001:3e8:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:3e8::,2001:3e8:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:400::,2001:400:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:408::,2001:408:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:410::,2001:410:ffff:ffff:ffff:ffff:ffff:ffff,CA 2001:418::,2001:418:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:420::,2001:420:283f:ffff:ffff:ffff:ffff:ffff,US 2001:420:2840::,2001:420:2840:7fff:ffff:ffff:ffff:ffff,CA -2001:420:2840:8000::,2001:420:4049:ffff:ffff:ffff:ffff:ffff,US -2001:420:404a::,2001:420:404a:7fff:ffff:ffff:ffff:ffff,GB -2001:420:404a:8000::,2001:420:404e:ffff:ffff:ffff:ffff:ffff,US -2001:420:404f::,2001:420:404f:7fff:ffff:ffff:ffff:ffff,NL -2001:420:404f:8000::,2001:420:4441:ffff:ffff:ffff:ffff:ffff,US -2001:420:4442::,2001:420:4442:7fff:ffff:ffff:ffff:ffff,NL -2001:420:4442:8000::,2001:420:4490:ffff:ffff:ffff:ffff:ffff,US -2001:420:4491::,2001:420:4491:7fff:ffff:ffff:ffff:ffff,NL -2001:420:4491:8000::,2001:420:4497:ffff:ffff:ffff:ffff:ffff,US -2001:420:4498::,2001:420:4498:7fff:ffff:ffff:ffff:ffff,NL -2001:420:4498:8000::,2001:420:44b7:ffff:ffff:ffff:ffff:ffff,US -2001:420:44b8::,2001:420:44b8:7fff:ffff:ffff:ffff:ffff,UA -2001:420:44b8:8000::,2001:420:44c0:ffff:ffff:ffff:ffff:ffff,US -2001:420:44c1::,2001:420:44c1:7fff:ffff:ffff:ffff:ffff,NO -2001:420:44c1:8000::,2001:420:44d2:ffff:ffff:ffff:ffff:ffff,US -2001:420:44d3::,2001:420:44d3:7fff:ffff:ffff:ffff:ffff,SE -2001:420:44d3:8000::,2001:420:44d9:ffff:ffff:ffff:ffff:ffff,US -2001:420:44da::,2001:420:44da:7fff:ffff:ffff:ffff:ffff,ES -2001:420:44da:8000::,2001:420:4510:ffff:ffff:ffff:ffff:ffff,US -2001:420:4511::,2001:420:4511:7fff:ffff:ffff:ffff:ffff,BE -2001:420:4511:8000::,2001:420:4803:ffff:ffff:ffff:ffff:ffff,US -2001:420:4804::,2001:420:4804:7fff:ffff:ffff:ffff:ffff,BE -2001:420:4804:8000::,2001:420:4c41:ffff:ffff:ffff:ffff:ffff,US -2001:420:4c42::,2001:420:4c42:7fff:ffff:ffff:ffff:ffff,SA -2001:420:4c42:8000::,2001:420:5040:ffff:ffff:ffff:ffff:ffff,US +2001:420:2840:8000::,2001:420:4481:ffff:ffff:ffff:ffff:ffff,US +2001:420:4482::,2001:420:4482:7fff:ffff:ffff:ffff:ffff,IL +2001:420:4482:8000::,2001:420:5040:ffff:ffff:ffff:ffff:ffff,US 2001:420:5041::,2001:420:5041:7fff:ffff:ffff:ffff:ffff,AU 2001:420:5041:8000::,2001:420:5042:ffff:ffff:ffff:ffff:ffff,US 2001:420:5043::,2001:420:5043:7fff:ffff:ffff:ffff:ffff,AU -2001:420:5043:8000::,2001:420:5044:ffff:ffff:ffff:ffff:ffff,US -2001:420:5045::,2001:420:5045:7fff:ffff:ffff:ffff:ffff,AU -2001:420:5045:8000::,2001:420:5045:ffff:ffff:ffff:ffff:ffff,US -2001:420:5046::,2001:420:5046:7fff:ffff:ffff:ffff:ffff,AU -2001:420:5046:8000::,2001:420:5046:ffff:ffff:ffff:ffff:ffff,US -2001:420:5047::,2001:420:5047:7fff:ffff:ffff:ffff:ffff,AU -2001:420:5047:8000::,2001:420:5049:ffff:ffff:ffff:ffff:ffff,US +2001:420:5043:8000::,2001:420:5049:ffff:ffff:ffff:ffff:ffff,US 2001:420:504a::,2001:420:504a:7fff:ffff:ffff:ffff:ffff,AU -2001:420:504a:8000::,2001:420:5240:ffff:ffff:ffff:ffff:ffff,US -2001:420:5241::,2001:420:5241:7fff:ffff:ffff:ffff:ffff,IN -2001:420:5241:8000::,2001:420:5243:ffff:ffff:ffff:ffff:ffff,US -2001:420:5244::,2001:420:5244:7fff:ffff:ffff:ffff:ffff,IN -2001:420:5244:8000::,2001:420:5245:ffff:ffff:ffff:ffff:ffff,US -2001:420:5246::,2001:420:5246:7fff:ffff:ffff:ffff:ffff,IN -2001:420:5246:8000::,2001:420:5443:ffff:ffff:ffff:ffff:ffff,US +2001:420:504a:8000::,2001:420:5443:ffff:ffff:ffff:ffff:ffff,US 2001:420:5444::,2001:420:5444:7fff:ffff:ffff:ffff:ffff,IN 2001:420:5444:8000::,2001:420:5445:ffff:ffff:ffff:ffff:ffff,US 2001:420:5446::,2001:420:5446:7fff:ffff:ffff:ffff:ffff,IN -2001:420:5446:8000::,2001:420:5446:ffff:ffff:ffff:ffff:ffff,US -2001:420:5447::,2001:420:5447:7fff:ffff:ffff:ffff:ffff,IN -2001:420:5447:8000::,2001:420:5500:ffff:ffff:ffff:ffff:ffff,US -2001:420:5501::,2001:420:5501:7fff:ffff:ffff:ffff:ffff,IN -2001:420:5501:8000::,2001:420:5502:ffff:ffff:ffff:ffff:ffff,US +2001:420:5446:8000::,2001:420:5502:ffff:ffff:ffff:ffff:ffff,US 2001:420:5503::,2001:420:5503:7fff:ffff:ffff:ffff:ffff,IN -2001:420:5503:8000::,2001:420:5505:ffff:ffff:ffff:ffff:ffff,US -2001:420:5506::,2001:420:5506:7fff:ffff:ffff:ffff:ffff,IN -2001:420:5506:8000::,2001:420:5880:ffff:ffff:ffff:ffff:ffff,US -2001:420:5881::,2001:420:5881:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5881:8000::,2001:420:5882:ffff:ffff:ffff:ffff:ffff,US -2001:420:5883::,2001:420:5883:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5883:8000::,2001:420:5888:ffff:ffff:ffff:ffff:ffff,US +2001:420:5503:8000::,2001:420:5888:ffff:ffff:ffff:ffff:ffff,US 2001:420:5889::,2001:420:5889:7fff:ffff:ffff:ffff:ffff,CN 2001:420:5889:8000::,2001:420:588a:ffff:ffff:ffff:ffff:ffff,US 2001:420:588b::,2001:420:588b:7fff:ffff:ffff:ffff:ffff,CN @@ -141,27 +96,17 @@ 2001:420:5894::,2001:420:5894:7fff:ffff:ffff:ffff:ffff,CN 2001:420:5894:8000::,2001:420:5894:ffff:ffff:ffff:ffff:ffff,US 2001:420:5895::,2001:420:5895:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5895:8000::,2001:420:5895:ffff:ffff:ffff:ffff:ffff,US -2001:420:5896::,2001:420:5896:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5896:8000::,2001:420:5898:ffff:ffff:ffff:ffff:ffff,US +2001:420:5895:8000::,2001:420:5898:ffff:ffff:ffff:ffff:ffff,US 2001:420:5899::,2001:420:5899:7fff:ffff:ffff:ffff:ffff,CN 2001:420:5899:8000::,2001:420:5899:ffff:ffff:ffff:ffff:ffff,US 2001:420:589a::,2001:420:589a:7fff:ffff:ffff:ffff:ffff,CN -2001:420:589a:8000::,2001:420:5a3f:ffff:ffff:ffff:ffff:ffff,US -2001:420:5a40::,2001:420:5a40:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5a40:8000::,2001:420:5a43:ffff:ffff:ffff:ffff:ffff,US -2001:420:5a44::,2001:420:5a44:7fff:ffff:ffff:ffff:ffff,CN -2001:420:5a44:8000::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US +2001:420:589a:8000::,2001:420:5c3f:ffff:ffff:ffff:ffff:ffff,US 2001:420:5c40::,2001:420:5c40:7fff:ffff:ffff:ffff:ffff,SG -2001:420:5c40:8000::,2001:420:5c40:ffff:ffff:ffff:ffff:ffff,US -2001:420:5c41::,2001:420:5c41:7fff:ffff:ffff:ffff:ffff,SG -2001:420:5c41:8000::,2001:420:5c43:ffff:ffff:ffff:ffff:ffff,US -2001:420:5c44::,2001:420:5c44:7fff:ffff:ffff:ffff:ffff,SG -2001:420:5c44:8000::,2001:420:5c46:ffff:ffff:ffff:ffff:ffff,US -2001:420:5c47::,2001:420:5c47:7fff:ffff:ffff:ffff:ffff,SG -2001:420:5c47:8000::,2001:420:5e3f:ffff:ffff:ffff:ffff:ffff,US +2001:420:5c40:8000::,2001:420:5e3f:ffff:ffff:ffff:ffff:ffff,US 2001:420:5e40::,2001:420:5e40:7fff:ffff:ffff:ffff:ffff,JP -2001:420:5e40:8000::,2001:420:c0cf:ffff:ffff:ffff:ffff:ffff,US +2001:420:5e40:8000::,2001:420:c0bf:ffff:ffff:ffff:ffff:ffff,US +2001:420:c0c0::,2001:420:c0c0:7fff:ffff:ffff:ffff:ffff,NL +2001:420:c0c0:8000::,2001:420:c0cf:ffff:ffff:ffff:ffff:ffff,US 2001:420:c0d0::,2001:420:c0d0:7fff:ffff:ffff:ffff:ffff,AU 2001:420:c0d0:8000::,2001:420:c0d3:ffff:ffff:ffff:ffff:ffff,US 2001:420:c0d4::,2001:420:c0d4:7fff:ffff:ffff:ffff:ffff,SG @@ -188,23 +133,20 @@ 2001:468::,2001:468:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:470::,2001:470:0:284::,US 2001:470:0:284::1,2001:470:0:284::1,AT -2001:470:0:284::2,2001:470:4:5ff:ffff:ffff:ffff:ffff,US -2001:470:4:600::,2001:470:4:7ff:ffff:ffff:ffff:ffff,CN -2001:470:4:800::,2001:470:5:317:ffff:ffff:ffff:ffff,US +2001:470:0:284::2,2001:470:5:317:ffff:ffff:ffff:ffff,US 2001:470:5:318::,2001:470:5:318:ffff:ffff:ffff:ffff,AR -2001:470:5:319::,2001:470:5:ffff:ffff:ffff:ffff:ffff,US -2001:470:6::,2001:470:6:7fff:ffff:ffff:ffff:ffff,MX -2001:470:6:8000::,2001:470:9:ffff:ffff:ffff:ffff:ffff,US -2001:470:a::,2001:470:a:7fff:ffff:ffff:ffff:ffff,CA -2001:470:a:8000::,2001:470:18:ffff:ffff:ffff:ffff:ffff,US -2001:470:19::,2001:470:19:7fff:ffff:ffff:ffff:ffff,HK -2001:470:19:8000::,2001:470:1c:ffff:ffff:ffff:ffff:ffff,US +2001:470:5:319::,2001:470:d:fff:ffff:ffff:ffff:ffff,US +2001:470:d:1000::,2001:470:d:1fff:ffff:ffff:ffff:ffff,CN +2001:470:d:2000::,2001:470:18:ffff:ffff:ffff:ffff:ffff,US +2001:470:19::,2001:470:19:3ff:ffff:ffff:ffff:ffff,CN +2001:470:19:400::,2001:470:19:7ff:ffff:ffff:ffff:ffff,US +2001:470:19:800::,2001:470:19:fff:ffff:ffff:ffff:ffff,CN +2001:470:19:1000::,2001:470:19:1fff:ffff:ffff:ffff:ffff,HK +2001:470:19:2000::,2001:470:1c:ffff:ffff:ffff:ffff:ffff,US 2001:470:1d::,2001:470:1d:7fff:ffff:ffff:ffff:ffff,CA 2001:470:1d:8000::,2001:470:23:429:ffff:ffff:ffff:ffff,US 2001:470:23:42a::,2001:470:23:42a:ffff:ffff:ffff:ffff,RU -2001:470:23:42b::,2001:470:23:7ff:ffff:ffff:ffff:ffff,US -2001:470:23:800::,2001:470:23:fff:ffff:ffff:ffff:ffff,KR -2001:470:23:1000::,2001:470:26:65b:ffff:ffff:ffff:ffff,US +2001:470:23:42b::,2001:470:26:65b:ffff:ffff:ffff:ffff,US 2001:470:26:65c::,2001:470:26:65c:ffff:ffff:ffff:ffff,CH 2001:470:26:65d::,2001:470:26:b6c:ffff:ffff:ffff:ffff,US 2001:470:26:b6d::,2001:470:26:b6d:ffff:ffff:ffff:ffff,AT @@ -216,69 +158,43 @@ 2001:470:28:1a6::,2001:470:28:1a6:ffff:ffff:ffff:ffff,RU 2001:470:28:1a7::,2001:470:28:2df:ffff:ffff:ffff:ffff,US 2001:470:28:2e0::,2001:470:28:2e0:ffff:ffff:ffff:ffff,SE -2001:470:28:2e1::,2001:470:28:9c1:ffff:ffff:ffff:ffff,US -2001:470:28:9c2::,2001:470:28:9c2:ffff:ffff:ffff:ffff,SE -2001:470:28:9c3::,2001:470:28:a2b:ffff:ffff:ffff:ffff,US +2001:470:28:2e1::,2001:470:28:8ff:ffff:ffff:ffff:ffff,US +2001:470:28:900::,2001:470:28:906:ffff:ffff:ffff:ffff,SE +2001:470:28:907::,2001:470:28:907:ffff:ffff:ffff:ffff,RU +2001:470:28:908::,2001:470:28:9ff:ffff:ffff:ffff:ffff,SE +2001:470:28:a00::,2001:470:28:a2b:ffff:ffff:ffff:ffff,US 2001:470:28:a2c::,2001:470:28:a2c:ffff:ffff:ffff:ffff,SE -2001:470:28:a2d::,2001:470:6f:49e:ffff:ffff:ffff:ffff,US +2001:470:28:a2d::,2001:470:6c:ffff:ffff:ffff:ffff:ffff,US +2001:470:6d::,2001:470:6d:7fff:ffff:ffff:ffff:ffff,RU +2001:470:6d:8000::,2001:470:6f:49e:ffff:ffff:ffff:ffff,US 2001:470:6f:49f::,2001:470:6f:49f:ffff:ffff:ffff:ffff,SK -2001:470:6f:4a0::,2001:470:70:6ff:ffff:ffff:ffff:ffff,US -2001:470:70:700::,2001:470:70:7ff:ffff:ffff:ffff:ffff,RU -2001:470:70:800::,2001:470:71:5ff:ffff:ffff:ffff:ffff,US +2001:470:6f:4a0::,2001:470:71:5ff:ffff:ffff:ffff:ffff,US 2001:470:71:600::,2001:470:71:600:ffff:ffff:ffff:ffff,PL 2001:470:71:601::,2001:470:71:60b:ffff:ffff:ffff:ffff,US 2001:470:71:60c::,2001:470:71:60c:ffff:ffff:ffff:ffff,PL 2001:470:71:60d::,2001:470:d2:ffff:ffff:ffff:ffff:ffff,US 2001:470:d3::,2001:470:d3:7fff:ffff:ffff:ffff:ffff,DE -2001:470:d3:8000::,2001:470:1857:ffff:ffff:ffff:ffff:ffff,US -2001:470:1858::,2001:470:1858:7fff:ffff:ffff:ffff:ffff,GB -2001:470:1858:8000::,2001:470:18a4:ffff:ffff:ffff:ffff:ffff,US -2001:470:18a5::,2001:470:18a5:7fff:ffff:ffff:ffff:ffff,GB -2001:470:18a5:8000::,2001:470:18aa:ffff:ffff:ffff:ffff:ffff,US +2001:470:d3:8000::,2001:470:18aa:ffff:ffff:ffff:ffff:ffff,US 2001:470:18ab::,2001:470:18ab:ffff:ffff:ffff:ffff:ffff,GB -2001:470:18ac::,2001:470:18ae:ffff:ffff:ffff:ffff:ffff,US -2001:470:18af::,2001:470:18af:7fff:ffff:ffff:ffff:ffff,GB -2001:470:18af:8000::,2001:470:18b6:ffff:ffff:ffff:ffff:ffff,US -2001:470:18b7::,2001:470:18b7:7fff:ffff:ffff:ffff:ffff,GB -2001:470:18b7:8000::,2001:470:18be:ffff:ffff:ffff:ffff:ffff,US -2001:470:18bf::,2001:470:18bf:7fff:ffff:ffff:ffff:ffff,GB -2001:470:18bf:8000::,2001:470:18c1:7fff:ffff:ffff:ffff:ffff,US -2001:470:18c1:8000::,2001:470:18c1:ffff:ffff:ffff:ffff:ffff,GB -2001:470:18c2::,2001:470:18c2:ffff:ffff:ffff:ffff:ffff,US -2001:470:18c3::,2001:470:18c3:7fff:ffff:ffff:ffff:ffff,GB -2001:470:18c3:8000::,2001:470:18cc:ffff:ffff:ffff:ffff:ffff,US -2001:470:18cd::,2001:470:18cd:7fff:ffff:ffff:ffff:ffff,GB -2001:470:18cd:8000::,2001:470:1920:ffff:ffff:ffff:ffff:ffff,US -2001:470:1921::,2001:470:1921:7fff:ffff:ffff:ffff:ffff,GB -2001:470:1921:8000::,2001:470:1985:ffff:ffff:ffff:ffff:ffff,US -2001:470:1986::,2001:470:1986:7fff:ffff:ffff:ffff:ffff,GB -2001:470:1986:8000::,2001:470:19a5:ffff:ffff:ffff:ffff:ffff,US -2001:470:19a6::,2001:470:19a6:7fff:ffff:ffff:ffff:ffff,GB -2001:470:19a6:8000::,2001:470:19b9:ffff:ffff:ffff:ffff:ffff,US -2001:470:19ba::,2001:470:19ba:7fff:ffff:ffff:ffff:ffff,GB -2001:470:19ba:8000::,2001:470:19d9:ffff:ffff:ffff:ffff:ffff,US -2001:470:19da::,2001:470:19da:7fff:ffff:ffff:ffff:ffff,GB -2001:470:19da:8000::,2001:470:1a10:ffff:ffff:ffff:ffff:ffff,US -2001:470:1a11::,2001:470:1a11:7fff:ffff:ffff:ffff:ffff,GB -2001:470:1a11:8000::,2001:470:1a2d:7fff:ffff:ffff:ffff:ffff,US -2001:470:1a2d:8000::,2001:470:1a2d:ffff:ffff:ffff:ffff:ffff,GB -2001:470:1a2e::,2001:470:1b2d:ffff:ffff:ffff:ffff:ffff,US +2001:470:18ac::,2001:470:1b2d:ffff:ffff:ffff:ffff:ffff,US 2001:470:1b2e::,2001:470:1b2e:ffff:ffff:ffff:ffff:ffff,GB -2001:470:1b2f::,2001:470:1f07:ffff:ffff:ffff:ffff:ffff,US -2001:470:1f08::,2001:470:1f08:7ff:ffff:ffff:ffff:ffff,GB -2001:470:1f08:800::,2001:470:1f08:aff:ffff:ffff:ffff:ffff,US -2001:470:1f08:b00::,2001:470:1f08:bff:ffff:ffff:ffff:ffff,IE -2001:470:1f08:c00::,2001:470:1f08:fff:ffff:ffff:ffff:ffff,US -2001:470:1f08:1000::,2001:470:1f08:1fff:ffff:ffff:ffff:ffff,GB -2001:470:1f08:2000::,2001:470:1f09:114:ffff:ffff:ffff:ffff,US -2001:470:1f09:115::,2001:470:1f09:115:ffff:ffff:ffff:ffff,GB -2001:470:1f09:116::,2001:470:1f09:2b5:ffff:ffff:ffff:ffff,US -2001:470:1f09:2b6::,2001:470:1f09:2b6:ffff:ffff:ffff:ffff,GB -2001:470:1f09:2b7::,2001:470:1f09:414:ffff:ffff:ffff:ffff,US +2001:470:1b2f::,2001:470:1f08:136:ffff:ffff:ffff:ffff,US +2001:470:1f08:137::,2001:470:1f08:137:ffff:ffff:ffff:ffff,GB +2001:470:1f08:138::,2001:470:1f08:415::1,US +2001:470:1f08:415::2,2001:470:1f08:415::2,GB +2001:470:1f08:415::3,2001:470:1f08:7ff:ffff:ffff:ffff:ffff,US +2001:470:1f08:800::,2001:470:1f08:fff:ffff:ffff:ffff:ffff,GB +2001:470:1f08:1000::,2001:470:1f08:ffff:ffff:ffff:ffff:ffff,US +2001:470:1f09::,2001:470:1f09:3ff:ffff:ffff:ffff:ffff,GB +2001:470:1f09:400::,2001:470:1f09:414:ffff:ffff:ffff:ffff,US 2001:470:1f09:415::,2001:470:1f09:415:ffff:ffff:ffff:ffff,GB -2001:470:1f09:416::,2001:470:1f09:ffff:ffff:ffff:ffff:ffff,US -2001:470:1f0a::,2001:470:1f0a:1ff:ffff:ffff:ffff:ffff,DE -2001:470:1f0a:200::,2001:470:1f0b:30e:ffff:ffff:ffff:ffff,US +2001:470:1f09:416::,2001:470:1f09:8ff:ffff:ffff:ffff:ffff,US +2001:470:1f09:900::,2001:470:1f09:bff:ffff:ffff:ffff:ffff,GB +2001:470:1f09:c00::,2001:470:1f09:fff:ffff:ffff:ffff:ffff,US +2001:470:1f09:1000::,2001:470:1f09:1fff:ffff:ffff:ffff:ffff,GB +2001:470:1f09:2000::,2001:470:1f09:ffff:ffff:ffff:ffff:ffff,US +2001:470:1f0a::,2001:470:1f0a:7fff:ffff:ffff:ffff:ffff,RU +2001:470:1f0a:8000::,2001:470:1f0b:30e:ffff:ffff:ffff:ffff,US 2001:470:1f0b:30f::,2001:470:1f0b:30f:ffff:ffff:ffff:ffff,DE 2001:470:1f0b:310::,2001:470:1f0b:4b0:ffff:ffff:ffff:ffff,US 2001:470:1f0b:4b1::,2001:470:1f0b:4b1:ffff:ffff:ffff:ffff,UA @@ -286,91 +202,43 @@ 2001:470:1f0b:77a::,2001:470:1f0b:77a:ffff:ffff:ffff:ffff,DE 2001:470:1f0b:77b::,2001:470:1f0b:784:ffff:ffff:ffff:ffff,US 2001:470:1f0b:785::,2001:470:1f0b:785:ffff:ffff:ffff:ffff,PL -2001:470:1f0b:786::,2001:470:1f11:ffff:ffff:ffff:ffff:ffff,US -2001:470:1f12::,2001:470:1f12:7fff:ffff:ffff:ffff:ffff,ES -2001:470:1f12:8000::,2001:470:1f13:7ff:ffff:ffff:ffff:ffff,US -2001:470:1f13:800::,2001:470:1f13:bff:ffff:ffff:ffff:ffff,FR -2001:470:1f13:c00::,2001:470:1f13:11ff:ffff:ffff:ffff:ffff,US -2001:470:1f13:1200::,2001:470:1f13:13ff:ffff:ffff:ffff:ffff,FR -2001:470:1f13:1400::,2001:470:1f15:b3:ffff:ffff:ffff:ffff,US +2001:470:1f0b:786::,2001:470:1f0b:be6:ffff:ffff:ffff:ffff,US +2001:470:1f0b:be7::,2001:470:1f0b:be7:ffff:ffff:ffff:ffff,RU +2001:470:1f0b:be8::,2001:470:1f14:ffff:ffff:ffff:ffff:ffff,US +2001:470:1f15::,2001:470:1f15:b3:ffff:ffff:ffff:ffff,RU 2001:470:1f15:b4::,2001:470:1f15:b4:ffff:ffff:ffff:ffff,NL -2001:470:1f15:b5::,2001:470:1f15:44f:ffff:ffff:ffff:ffff,US +2001:470:1f15:b5::,2001:470:1f15:44f:ffff:ffff:ffff:ffff,RU 2001:470:1f15:450::,2001:470:1f15:450:ffff:ffff:ffff:ffff,NL -2001:470:1f15:451::,2001:470:1f15:5ab:ffff:ffff:ffff:ffff,US +2001:470:1f15:451::,2001:470:1f15:5ab:ffff:ffff:ffff:ffff,RU 2001:470:1f15:5ac::,2001:470:1f15:5ac:ffff:ffff:ffff:ffff,NL -2001:470:1f15:5ad::,2001:470:1f15:9c5:ffff:ffff:ffff:ffff,US +2001:470:1f15:5ad::,2001:470:1f15:9c5:ffff:ffff:ffff:ffff,RU 2001:470:1f15:9c6::,2001:470:1f15:9c6:ffff:ffff:ffff:ffff,AT -2001:470:1f15:9c7::,2001:470:1f15:a5e:ffff:ffff:ffff:ffff,US +2001:470:1f15:9c7::,2001:470:1f15:a5e:ffff:ffff:ffff:ffff,RU 2001:470:1f15:a5f::,2001:470:1f15:a60:ffff:ffff:ffff:ffff,NL -2001:470:1f15:a61::,2001:470:1f15:110b:ffff:ffff:ffff:ffff,US +2001:470:1f15:a61::,2001:470:1f15:110b:ffff:ffff:ffff:ffff,RU 2001:470:1f15:110c::,2001:470:1f15:110c:ffff:ffff:ffff:ffff,BE -2001:470:1f15:110d::,2001:470:1f16:ffff:ffff:ffff:ffff:ffff,US -2001:470:1f17::,2001:470:1f17:7fff:ffff:ffff:ffff:ffff,CA -2001:470:1f17:8000::,2001:470:1f1b:ff:ffff:ffff:ffff:ffff,US -2001:470:1f1b:100::,2001:470:1f1b:1ff:ffff:ffff:ffff:ffff,MK -2001:470:1f1b:200::,2001:470:1f1b:ffff:ffff:ffff:ffff:ffff,US -2001:470:1f1c::,2001:470:1f1c:7fff:ffff:ffff:ffff:ffff,GB -2001:470:1f1c:8000::,2001:470:1f1d:195:ffff:ffff:ffff:ffff,US -2001:470:1f1d:196::,2001:470:1f1d:196:ffff:ffff:ffff:ffff,GB -2001:470:1f1d:197::,2001:470:1f1d:929:ffff:ffff:ffff:ffff,US -2001:470:1f1d:92a::,2001:470:1f1d:92a:ffff:ffff:ffff:ffff,GB -2001:470:1f1d:92b::,2001:470:2050:ffff:ffff:ffff:ffff:ffff,US -2001:470:2051::,2001:470:2051:7fff:ffff:ffff:ffff:ffff,RO -2001:470:2051:8000::,2001:470:206d:ffff:ffff:ffff:ffff:ffff,US -2001:470:206e::,2001:470:206e:7fff:ffff:ffff:ffff:ffff,RO -2001:470:206e:8000::,2001:470:207f:ffff:ffff:ffff:ffff:ffff,US +2001:470:1f15:110d::,2001:470:1f15:7fff:ffff:ffff:ffff:ffff,RU +2001:470:1f15:8000::,2001:470:1f1c:ffff:ffff:ffff:ffff:ffff,US +2001:470:1f1d::,2001:470:1f1d:7fff:ffff:ffff:ffff:ffff,GB +2001:470:1f1d:8000::,2001:470:207f:ffff:ffff:ffff:ffff:ffff,US 2001:470:2080::,2001:470:2080:7fff:ffff:ffff:ffff:ffff,UA 2001:470:2080:8000::,2001:470:2092:ffff:ffff:ffff:ffff:ffff,US 2001:470:2093::,2001:470:2093:7fff:ffff:ffff:ffff:ffff,SI -2001:470:2093:8000::,2001:470:20c1:ffff:ffff:ffff:ffff:ffff,US -2001:470:20c2::,2001:470:20c2:7fff:ffff:ffff:ffff:ffff,HU -2001:470:20c2:8000::,2001:470:20f1:ffff:ffff:ffff:ffff:ffff,US -2001:470:20f2::,2001:470:20f2:7fff:ffff:ffff:ffff:ffff,HU -2001:470:20f2:8000::,2001:470:2112:ffff:ffff:ffff:ffff:ffff,US -2001:470:2113::,2001:470:2113:7fff:ffff:ffff:ffff:ffff,RU -2001:470:2113:8000::,2001:470:2184:ffff:ffff:ffff:ffff:ffff,US -2001:470:2185::,2001:470:2185:7fff:ffff:ffff:ffff:ffff,AT -2001:470:2185:8000::,2001:470:2894:ffff:ffff:ffff:ffff:ffff,US +2001:470:2093:8000::,2001:470:2894:ffff:ffff:ffff:ffff:ffff,US 2001:470:2895::,2001:470:2895:7fff:ffff:ffff:ffff:ffff,CN -2001:470:2895:8000::,2001:470:28d8:ffff:ffff:ffff:ffff:ffff,US -2001:470:28d9::,2001:470:28d9:7fff:ffff:ffff:ffff:ffff,CN -2001:470:28d9:8000::,2001:470:3049:ffff:ffff:ffff:ffff:ffff,US -2001:470:304a::,2001:470:304a:7fff:ffff:ffff:ffff:ffff,MX -2001:470:304a:8000::,2001:470:3918:ffff:ffff:ffff:ffff:ffff,US +2001:470:2895:8000::,2001:470:3918:ffff:ffff:ffff:ffff:ffff,US 2001:470:3919::,2001:470:3919:7fff:ffff:ffff:ffff:ffff,AU 2001:470:3919:8000::,2001:470:49e5:7fff:ffff:ffff:ffff:ffff,US 2001:470:49e5:8000::,2001:470:49e5:ffff:ffff:ffff:ffff:ffff,CN -2001:470:49e6::,2001:470:4a63:ffff:ffff:ffff:ffff:ffff,US -2001:470:4a64::,2001:470:4a64:7fff:ffff:ffff:ffff:ffff,NZ -2001:470:4a64:8000::,2001:470:5004:ffff:ffff:ffff:ffff:ffff,US -2001:470:5005::,2001:470:5005:7fff:ffff:ffff:ffff:ffff,DE -2001:470:5005:8000::,2001:470:51e8:ffff:ffff:ffff:ffff:ffff,US -2001:470:51e9::,2001:470:51e9:7fff:ffff:ffff:ffff:ffff,DE -2001:470:51e9:8000::,2001:470:52c5:ffff:ffff:ffff:ffff:ffff,US -2001:470:52c6::,2001:470:52c6:7fff:ffff:ffff:ffff:ffff,DE -2001:470:52c6:8000::,2001:470:532d:ffff:ffff:ffff:ffff:ffff,US -2001:470:532e::,2001:470:532e:7fff:ffff:ffff:ffff:ffff,RU -2001:470:532e:8000::,2001:470:53a7:ffff:ffff:ffff:ffff:ffff,US +2001:470:49e6::,2001:470:53a7:ffff:ffff:ffff:ffff:ffff,US 2001:470:53a8::,2001:470:53a8:7fff:ffff:ffff:ffff:ffff,DE -2001:470:53a8:8000::,2001:470:5853:ffff:ffff:ffff:ffff:ffff,US -2001:470:5854::,2001:470:5854:7fff:ffff:ffff:ffff:ffff,CZ -2001:470:5854:8000::,2001:470:5877:ffff:ffff:ffff:ffff:ffff,US -2001:470:5878::,2001:470:5878:7fff:ffff:ffff:ffff:ffff,CZ -2001:470:5878:8000::,2001:470:587d:ffff:ffff:ffff:ffff:ffff,US +2001:470:53a8:8000::,2001:470:587d:ffff:ffff:ffff:ffff:ffff,US 2001:470:587e::,2001:470:587e:7fff:ffff:ffff:ffff:ffff,CZ 2001:470:587e:8000::,2001:470:591a:ffff:ffff:ffff:ffff:ffff,US 2001:470:591b::,2001:470:591b:7fff:ffff:ffff:ffff:ffff,CZ 2001:470:591b:8000::,2001:470:591c:ffff:ffff:ffff:ffff:ffff,US 2001:470:591d::,2001:470:591d:ffff:ffff:ffff:ffff:ffff,CZ -2001:470:591e::,2001:470:595e:ffff:ffff:ffff:ffff:ffff,US -2001:470:595f::,2001:470:595f:7fff:ffff:ffff:ffff:ffff,CZ -2001:470:595f:8000::,2001:470:59bd:7fff:ffff:ffff:ffff:ffff,US -2001:470:59bd:8000::,2001:470:59bd:ffff:ffff:ffff:ffff:ffff,SK -2001:470:59be::,2001:470:59c0:ffff:ffff:ffff:ffff:ffff,US -2001:470:59c1::,2001:470:59c1:7fff:ffff:ffff:ffff:ffff,CZ -2001:470:59c1:8000::,2001:470:59ce:ffff:ffff:ffff:ffff:ffff,US -2001:470:59cf::,2001:470:59cf:7fff:ffff:ffff:ffff:ffff,CZ -2001:470:59cf:8000::,2001:470:59d7:ffff:ffff:ffff:ffff:ffff,US +2001:470:591e::,2001:470:59d7:ffff:ffff:ffff:ffff:ffff,US 2001:470:59d8::,2001:470:59d8:7fff:ffff:ffff:ffff:ffff,CZ 2001:470:59d8:8000::,2001:470:5a34:ffff:ffff:ffff:ffff:ffff,US 2001:470:5a35::,2001:470:5a35:ffff:ffff:ffff:ffff:ffff,CZ @@ -378,527 +246,117 @@ 2001:470:5a3a::,2001:470:5a3a:ffff:ffff:ffff:ffff:ffff,CZ 2001:470:5a3b::,2001:470:5a80:ffff:ffff:ffff:ffff:ffff,US 2001:470:5a81::,2001:470:5a81:ffff:ffff:ffff:ffff:ffff,CZ -2001:470:5a82::,2001:470:5aed:ffff:ffff:ffff:ffff:ffff,US -2001:470:5aee::,2001:470:5aee:7fff:ffff:ffff:ffff:ffff,AT -2001:470:5aee:8000::,2001:470:6004:ffff:ffff:ffff:ffff:ffff,US -2001:470:6005::,2001:470:6005:7fff:ffff:ffff:ffff:ffff,PL -2001:470:6005:8000::,2001:470:60a2:ffff:ffff:ffff:ffff:ffff,US -2001:470:60a3::,2001:470:60a3:7fff:ffff:ffff:ffff:ffff,BY -2001:470:60a3:8000::,2001:470:60f4:7fff:ffff:ffff:ffff:ffff,US -2001:470:60f4:8000::,2001:470:60f4:ffff:ffff:ffff:ffff:ffff,PL -2001:470:60f5::,2001:470:613f:ffff:ffff:ffff:ffff:ffff,US -2001:470:6140::,2001:470:6140:7fff:ffff:ffff:ffff:ffff,PL -2001:470:6140:8000::,2001:470:618d:ffff:ffff:ffff:ffff:ffff,US -2001:470:618e::,2001:470:618e:7fff:ffff:ffff:ffff:ffff,PL -2001:470:618e:8000::,2001:470:619f:ffff:ffff:ffff:ffff:ffff,US -2001:470:61a0::,2001:470:61a0:7fff:ffff:ffff:ffff:ffff,RU -2001:470:61a0:8000::,2001:470:6228:ffff:ffff:ffff:ffff:ffff,US +2001:470:5a82::,2001:470:6228:ffff:ffff:ffff:ffff:ffff,US 2001:470:6229::,2001:470:6229:7fff:ffff:ffff:ffff:ffff,PL -2001:470:6229:8000::,2001:470:62ca:ffff:ffff:ffff:ffff:ffff,US -2001:470:62cb::,2001:470:62cb:7fff:ffff:ffff:ffff:ffff,RU -2001:470:62cb:8000::,2001:470:632d:ffff:ffff:ffff:ffff:ffff,US +2001:470:6229:8000::,2001:470:632d:ffff:ffff:ffff:ffff:ffff,US 2001:470:632e::,2001:470:632e:7fff:ffff:ffff:ffff:ffff,RU -2001:470:632e:8000::,2001:470:6808:7fff:ffff:ffff:ffff:ffff,US -2001:470:6808:8000::,2001:470:6808:ffff:ffff:ffff:ffff:ffff,GB -2001:470:6809::,2001:470:688b:ffff:ffff:ffff:ffff:ffff,US -2001:470:688c::,2001:470:688c:7fff:ffff:ffff:ffff:ffff,GB -2001:470:688c:8000::,2001:470:68df:ffff:ffff:ffff:ffff:ffff,US -2001:470:68e0::,2001:470:68e0:7fff:ffff:ffff:ffff:ffff,IL -2001:470:68e0:8000::,2001:470:68e9:ffff:ffff:ffff:ffff:ffff,US -2001:470:68ea::,2001:470:68ea:7fff:ffff:ffff:ffff:ffff,GB -2001:470:68ea:8000::,2001:470:6914:ffff:ffff:ffff:ffff:ffff,US -2001:470:6915::,2001:470:6915:7fff:ffff:ffff:ffff:ffff,ES -2001:470:6915:8000::,2001:470:6924:ffff:ffff:ffff:ffff:ffff,US -2001:470:6925::,2001:470:6925:7fff:ffff:ffff:ffff:ffff,ES -2001:470:6925:8000::,2001:470:69f8:ffff:ffff:ffff:ffff:ffff,US -2001:470:69f9::,2001:470:69f9:7fff:ffff:ffff:ffff:ffff,BE -2001:470:69f9:8000::,2001:470:6a20:ffff:ffff:ffff:ffff:ffff,US -2001:470:6a21::,2001:470:6a21:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6a21:8000::,2001:470:6a4d:ffff:ffff:ffff:ffff:ffff,US -2001:470:6a4e::,2001:470:6a4e:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6a4e:8000::,2001:470:6a62:ffff:ffff:ffff:ffff:ffff,US -2001:470:6a63::,2001:470:6a63:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6a63:8000::,2001:470:6aaf:ffff:ffff:ffff:ffff:ffff,US -2001:470:6ab0::,2001:470:6ab0:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6ab0:8000::,2001:470:6af6:ffff:ffff:ffff:ffff:ffff,US -2001:470:6af7::,2001:470:6af7:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6af7:8000::,2001:470:6b28:ffff:ffff:ffff:ffff:ffff,US -2001:470:6b29::,2001:470:6b29:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6b29:8000::,2001:470:6b2e:ffff:ffff:ffff:ffff:ffff,US -2001:470:6b2f::,2001:470:6b2f:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6b2f:8000::,2001:470:6b38:ffff:ffff:ffff:ffff:ffff,US -2001:470:6b39::,2001:470:6b39:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6b39:8000::,2001:470:6bb1:ffff:ffff:ffff:ffff:ffff,US -2001:470:6bb2::,2001:470:6bb2:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6bb2:8000::,2001:470:6bba:ffff:ffff:ffff:ffff:ffff,US -2001:470:6bbb::,2001:470:6bbb:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6bbb:8000::,2001:470:6c0d:ffff:ffff:ffff:ffff:ffff,US +2001:470:632e:8000::,2001:470:6924:ffff:ffff:ffff:ffff:ffff,US +2001:470:6925::,2001:470:6925:7fff:ffff:ffff:ffff:ffff,NL +2001:470:6925:8000::,2001:470:6c0d:ffff:ffff:ffff:ffff:ffff,US 2001:470:6c0e::,2001:470:6c0e:7fff:ffff:ffff:ffff:ffff,GB 2001:470:6c0e:8000::,2001:470:6c1b:ffff:ffff:ffff:ffff:ffff,US 2001:470:6c1c::,2001:470:6c1c:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6c1c:8000::,2001:470:6c1c:ffff:ffff:ffff:ffff:ffff,US -2001:470:6c1d::,2001:470:6c1d:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6c1d:8000::,2001:470:6c2a:ffff:ffff:ffff:ffff:ffff,US -2001:470:6c2b::,2001:470:6c2b:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6c2b:8000::,2001:470:6c5a:ffff:ffff:ffff:ffff:ffff,US -2001:470:6c5b::,2001:470:6c5b:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6c5b:8000::,2001:470:6c7f:ffff:ffff:ffff:ffff:ffff,US -2001:470:6c80::,2001:470:6c80:7fff:ffff:ffff:ffff:ffff,RU -2001:470:6c80:8000::,2001:470:6c8e:ffff:ffff:ffff:ffff:ffff,US -2001:470:6c8f::,2001:470:6c8f:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6c8f:8000::,2001:470:6c9b:7fff:ffff:ffff:ffff:ffff,US -2001:470:6c9b:8000::,2001:470:6c9b:ffff:ffff:ffff:ffff:ffff,GB -2001:470:6c9c::,2001:470:6caa:ffff:ffff:ffff:ffff:ffff,US -2001:470:6cab::,2001:470:6cab:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6cab:8000::,2001:470:6cee:ffff:ffff:ffff:ffff:ffff,US -2001:470:6cef::,2001:470:6cef:7fff:ffff:ffff:ffff:ffff,ES -2001:470:6cef:8000::,2001:470:6d0d:ffff:ffff:ffff:ffff:ffff,US -2001:470:6d0e::,2001:470:6d0e:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6d0e:8000::,2001:470:6d37:ffff:ffff:ffff:ffff:ffff,US -2001:470:6d38::,2001:470:6d38:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6d38:8000::,2001:470:6d44:ffff:ffff:ffff:ffff:ffff,US -2001:470:6d45::,2001:470:6d45:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6d45:8000::,2001:470:6d54:ffff:ffff:ffff:ffff:ffff,US -2001:470:6d55::,2001:470:6d55:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6d55:8000::,2001:470:6d5b:ffff:ffff:ffff:ffff:ffff,US -2001:470:6d5c::,2001:470:6d5c:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6d5c:8000::,2001:470:6d70:ffff:ffff:ffff:ffff:ffff,US -2001:470:6d71::,2001:470:6d71:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6d71:8000::,2001:470:6d75:ffff:ffff:ffff:ffff:ffff,US -2001:470:6d76::,2001:470:6d76:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6d76:8000::,2001:470:6d7a:ffff:ffff:ffff:ffff:ffff,US -2001:470:6d7b::,2001:470:6d7b:7fff:ffff:ffff:ffff:ffff,GB -2001:470:6d7b:8000::,2001:470:7000:ffff:ffff:ffff:ffff:ffff,US -2001:470:7001::,2001:470:7001:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7001:8000::,2001:470:7007:ffff:ffff:ffff:ffff:ffff,US -2001:470:7008::,2001:470:7008:7fff:ffff:ffff:ffff:ffff,AT -2001:470:7008:8000::,2001:470:700d:ffff:ffff:ffff:ffff:ffff,US -2001:470:700e::,2001:470:700e:7fff:ffff:ffff:ffff:ffff,DE -2001:470:700e:8000::,2001:470:703f:7fff:ffff:ffff:ffff:ffff,US -2001:470:703f:8000::,2001:470:703f:ffff:ffff:ffff:ffff:ffff,DE -2001:470:7040::,2001:470:7073:7fff:ffff:ffff:ffff:ffff,US -2001:470:7073:8000::,2001:470:7073:ffff:ffff:ffff:ffff:ffff,DE -2001:470:7074::,2001:470:70a1:7fff:ffff:ffff:ffff:ffff,US +2001:470:6c1c:8000::,2001:470:70a1:7fff:ffff:ffff:ffff:ffff,US 2001:470:70a1:8000::,2001:470:70a1:ffff:ffff:ffff:ffff:ffff,RU -2001:470:70a2::,2001:470:70a7:ffff:ffff:ffff:ffff:ffff,US -2001:470:70a8::,2001:470:70a8:7fff:ffff:ffff:ffff:ffff,DE -2001:470:70a8:8000::,2001:470:70aa:ffff:ffff:ffff:ffff:ffff,US +2001:470:70a2::,2001:470:70aa:ffff:ffff:ffff:ffff:ffff,US 2001:470:70ab::,2001:470:70ab:7fff:ffff:ffff:ffff:ffff,DE -2001:470:70ab:8000::,2001:470:70be:ffff:ffff:ffff:ffff:ffff,US -2001:470:70bf::,2001:470:70bf:7fff:ffff:ffff:ffff:ffff,DE -2001:470:70bf:8000::,2001:470:710f:ffff:ffff:ffff:ffff:ffff,US +2001:470:70ab:8000::,2001:470:710f:ffff:ffff:ffff:ffff:ffff,US 2001:470:7110::,2001:470:7110:7fff:ffff:ffff:ffff:ffff,RU 2001:470:7110:8000::,2001:470:7147:7fff:ffff:ffff:ffff:ffff,US 2001:470:7147:8000::,2001:470:7147:ffff:ffff:ffff:ffff:ffff,RU 2001:470:7148::,2001:470:7170:ffff:ffff:ffff:ffff:ffff,US 2001:470:7171::,2001:470:7171:ffff:ffff:ffff:ffff:ffff,DE -2001:470:7172::,2001:470:7179:ffff:ffff:ffff:ffff:ffff,US -2001:470:717a::,2001:470:717a:7fff:ffff:ffff:ffff:ffff,DE -2001:470:717a:8000::,2001:470:7192:ffff:ffff:ffff:ffff:ffff,US -2001:470:7193::,2001:470:7193:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7193:8000::,2001:470:7194:ffff:ffff:ffff:ffff:ffff,US -2001:470:7195::,2001:470:7195:7fff:ffff:ffff:ffff:ffff,AT -2001:470:7195:8000::,2001:470:71d4:ffff:ffff:ffff:ffff:ffff,US -2001:470:71d5::,2001:470:71d5:7fff:ffff:ffff:ffff:ffff,UA -2001:470:71d5:8000::,2001:470:71f7:ffff:ffff:ffff:ffff:ffff,US -2001:470:71f8::,2001:470:71f8:7fff:ffff:ffff:ffff:ffff,DE -2001:470:71f8:8000::,2001:470:7241:ffff:ffff:ffff:ffff:ffff,US -2001:470:7242::,2001:470:7242:7fff:ffff:ffff:ffff:ffff,RU -2001:470:7242:8000::,2001:470:7263:ffff:ffff:ffff:ffff:ffff,US -2001:470:7264::,2001:470:7264:7fff:ffff:ffff:ffff:ffff,AT -2001:470:7264:8000::,2001:470:7280:ffff:ffff:ffff:ffff:ffff,US -2001:470:7281::,2001:470:7281:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7281:8000::,2001:470:7286:ffff:ffff:ffff:ffff:ffff,US +2001:470:7172::,2001:470:7286:ffff:ffff:ffff:ffff:ffff,US 2001:470:7287::,2001:470:7287:ffff:ffff:ffff:ffff:ffff,PL -2001:470:7288::,2001:470:72bd:ffff:ffff:ffff:ffff:ffff,US -2001:470:72be::,2001:470:72be:7fff:ffff:ffff:ffff:ffff,DE -2001:470:72be:8000::,2001:470:72da:ffff:ffff:ffff:ffff:ffff,US -2001:470:72db::,2001:470:72db:7fff:ffff:ffff:ffff:ffff,RU -2001:470:72db:8000::,2001:470:7309:ffff:ffff:ffff:ffff:ffff,US +2001:470:7288::,2001:470:7309:ffff:ffff:ffff:ffff:ffff,US 2001:470:730a::,2001:470:730a:7fff:ffff:ffff:ffff:ffff,DE -2001:470:730a:8000::,2001:470:7333:ffff:ffff:ffff:ffff:ffff,US -2001:470:7334::,2001:470:7334:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7334:8000::,2001:470:7354:ffff:ffff:ffff:ffff:ffff,US -2001:470:7355::,2001:470:7355:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7355:8000::,2001:470:7368:ffff:ffff:ffff:ffff:ffff,US -2001:470:7369::,2001:470:7369:7fff:ffff:ffff:ffff:ffff,TR -2001:470:7369:8000::,2001:470:7383:ffff:ffff:ffff:ffff:ffff,US -2001:470:7384::,2001:470:7384:7fff:ffff:ffff:ffff:ffff,BG -2001:470:7384:8000::,2001:470:73db:ffff:ffff:ffff:ffff:ffff,US -2001:470:73dc::,2001:470:73dc:7fff:ffff:ffff:ffff:ffff,DE -2001:470:73dc:8000::,2001:470:73e8:7fff:ffff:ffff:ffff:ffff,US -2001:470:73e8:8000::,2001:470:73e8:ffff:ffff:ffff:ffff:ffff,DE -2001:470:73e9::,2001:470:7403:ffff:ffff:ffff:ffff:ffff,US -2001:470:7404::,2001:470:7404:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7404:8000::,2001:470:742b:7fff:ffff:ffff:ffff:ffff,US -2001:470:742b:8000::,2001:470:742b:ffff:ffff:ffff:ffff:ffff,RU -2001:470:742c::,2001:470:7457:ffff:ffff:ffff:ffff:ffff,US -2001:470:7458::,2001:470:7458:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7458:8000::,2001:470:7479:ffff:ffff:ffff:ffff:ffff,US -2001:470:747a::,2001:470:747a:7fff:ffff:ffff:ffff:ffff,DE -2001:470:747a:8000::,2001:470:74ab:7fff:ffff:ffff:ffff:ffff,US -2001:470:74ab:8000::,2001:470:74ab:ffff:ffff:ffff:ffff:ffff,AT -2001:470:74ac::,2001:470:74b8:ffff:ffff:ffff:ffff:ffff,US -2001:470:74b9::,2001:470:74b9:7fff:ffff:ffff:ffff:ffff,RS -2001:470:74b9:8000::,2001:470:74e0:ffff:ffff:ffff:ffff:ffff,US +2001:470:730a:8000::,2001:470:74e0:ffff:ffff:ffff:ffff:ffff,US 2001:470:74e1::,2001:470:74e1:7fff:ffff:ffff:ffff:ffff,DE -2001:470:74e1:8000::,2001:470:7552:ffff:ffff:ffff:ffff:ffff,US -2001:470:7553::,2001:470:7553:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7553:8000::,2001:470:7557:ffff:ffff:ffff:ffff:ffff,US -2001:470:7558::,2001:470:7558:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7558:8000::,2001:470:7563:7fff:ffff:ffff:ffff:ffff,US -2001:470:7563:8000::,2001:470:7563:ffff:ffff:ffff:ffff:ffff,UA -2001:470:7564::,2001:470:7594:ffff:ffff:ffff:ffff:ffff,US -2001:470:7595::,2001:470:7595:7fff:ffff:ffff:ffff:ffff,AT -2001:470:7595:8000::,2001:470:759e:ffff:ffff:ffff:ffff:ffff,US -2001:470:759f::,2001:470:759f:7fff:ffff:ffff:ffff:ffff,DE -2001:470:759f:8000::,2001:470:75c1:ffff:ffff:ffff:ffff:ffff,US -2001:470:75c2::,2001:470:75c2:7fff:ffff:ffff:ffff:ffff,DE -2001:470:75c2:8000::,2001:470:75c2:ffff:ffff:ffff:ffff:ffff,US -2001:470:75c3::,2001:470:75c3:7fff:ffff:ffff:ffff:ffff,DE -2001:470:75c3:8000::,2001:470:75f0:ffff:ffff:ffff:ffff:ffff,US -2001:470:75f1::,2001:470:75f1:7fff:ffff:ffff:ffff:ffff,DE -2001:470:75f1:8000::,2001:470:7690:ffff:ffff:ffff:ffff:ffff,US -2001:470:7691::,2001:470:7691:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7691:8000::,2001:470:7804:ffff:ffff:ffff:ffff:ffff,US -2001:470:7805::,2001:470:7805:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7805:8000::,2001:470:7826:7fff:ffff:ffff:ffff:ffff,US -2001:470:7826:8000::,2001:470:7826:ffff:ffff:ffff:ffff:ffff,NO -2001:470:7827::,2001:470:7847:ffff:ffff:ffff:ffff:ffff,US -2001:470:7848::,2001:470:7848:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7848:8000::,2001:470:7852:ffff:ffff:ffff:ffff:ffff,US -2001:470:7853::,2001:470:7853:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7853:8000::,2001:470:7853:ffff:ffff:ffff:ffff:ffff,US -2001:470:7854::,2001:470:7854:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7854:8000::,2001:470:7859:ffff:ffff:ffff:ffff:ffff,US +2001:470:74e1:8000::,2001:470:75e5:ffff:ffff:ffff:ffff:ffff,US +2001:470:75e6::,2001:470:75e6:ffff:ffff:ffff:ffff:ffff,RU +2001:470:75e7::,2001:470:7859:ffff:ffff:ffff:ffff:ffff,US 2001:470:785a::,2001:470:785a:ffff:ffff:ffff:ffff:ffff,AT -2001:470:785b::,2001:470:78c7:ffff:ffff:ffff:ffff:ffff,US -2001:470:78c8::,2001:470:78c8:7fff:ffff:ffff:ffff:ffff,NL -2001:470:78c8:8000::,2001:470:78db:ffff:ffff:ffff:ffff:ffff,US -2001:470:78dc::,2001:470:78dc:7fff:ffff:ffff:ffff:ffff,NL -2001:470:78dc:8000::,2001:470:78e3:ffff:ffff:ffff:ffff:ffff,US -2001:470:78e4::,2001:470:78e4:7fff:ffff:ffff:ffff:ffff,NL -2001:470:78e4:8000::,2001:470:78e8:ffff:ffff:ffff:ffff:ffff,US -2001:470:78e9::,2001:470:78e9:7fff:ffff:ffff:ffff:ffff,LV -2001:470:78e9:8000::,2001:470:790c:ffff:ffff:ffff:ffff:ffff,US -2001:470:790d::,2001:470:790d:7fff:ffff:ffff:ffff:ffff,NL -2001:470:790d:8000::,2001:470:798e:ffff:ffff:ffff:ffff:ffff,US -2001:470:798f::,2001:470:798f:7fff:ffff:ffff:ffff:ffff,BE -2001:470:798f:8000::,2001:470:79ec:ffff:ffff:ffff:ffff:ffff,US -2001:470:79ed::,2001:470:79ed:7fff:ffff:ffff:ffff:ffff,RU -2001:470:79ed:8000::,2001:470:7a30:ffff:ffff:ffff:ffff:ffff,US -2001:470:7a31::,2001:470:7a31:7fff:ffff:ffff:ffff:ffff,DE -2001:470:7a31:8000::,2001:470:7a87:ffff:ffff:ffff:ffff:ffff,US -2001:470:7a88::,2001:470:7a88:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7a88:8000::,2001:470:7a99:ffff:ffff:ffff:ffff:ffff,US +2001:470:785b::,2001:470:7a99:ffff:ffff:ffff:ffff:ffff,US 2001:470:7a9a::,2001:470:7a9a:ffff:ffff:ffff:ffff:ffff,NL -2001:470:7a9b::,2001:470:7aeb:7fff:ffff:ffff:ffff:ffff,US -2001:470:7aeb:8000::,2001:470:7aeb:ffff:ffff:ffff:ffff:ffff,NL -2001:470:7aec::,2001:470:7aed:ffff:ffff:ffff:ffff:ffff,US -2001:470:7aee::,2001:470:7aee:7fff:ffff:ffff:ffff:ffff,RU -2001:470:7aee:8000::,2001:470:7b22:ffff:ffff:ffff:ffff:ffff,US -2001:470:7b23::,2001:470:7b23:7fff:ffff:ffff:ffff:ffff,ES -2001:470:7b23:8000::,2001:470:7ba6:ffff:ffff:ffff:ffff:ffff,US +2001:470:7a9b::,2001:470:7ba6:ffff:ffff:ffff:ffff:ffff,US 2001:470:7ba7::,2001:470:7ba7:7fff:ffff:ffff:ffff:ffff,NL 2001:470:7ba7:8000::,2001:470:7baf:ffff:ffff:ffff:ffff:ffff,US 2001:470:7bb0::,2001:470:7bb0:7fff:ffff:ffff:ffff:ffff,BE 2001:470:7bb0:8000::,2001:470:7bbf:ffff:ffff:ffff:ffff:ffff,US 2001:470:7bc0::,2001:470:7bc0:ffff:ffff:ffff:ffff:ffff,NL -2001:470:7bc1::,2001:470:7c01:ffff:ffff:ffff:ffff:ffff,US -2001:470:7c02::,2001:470:7c02:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7c02:8000::,2001:470:7c35:ffff:ffff:ffff:ffff:ffff,US -2001:470:7c36::,2001:470:7c36:7fff:ffff:ffff:ffff:ffff,GB -2001:470:7c36:8000::,2001:470:7c4f:ffff:ffff:ffff:ffff:ffff,US -2001:470:7c50::,2001:470:7c50:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7c50:8000::,2001:470:7cad:ffff:ffff:ffff:ffff:ffff,US -2001:470:7cae::,2001:470:7cae:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7cae:8000::,2001:470:7cff:7fff:ffff:ffff:ffff:ffff,US -2001:470:7cff:8000::,2001:470:7cff:ffff:ffff:ffff:ffff:ffff,UA -2001:470:7d00::,2001:470:7d16:ffff:ffff:ffff:ffff:ffff,US -2001:470:7d17::,2001:470:7d17:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7d17:8000::,2001:470:7d59:ffff:ffff:ffff:ffff:ffff,US -2001:470:7d5a::,2001:470:7d5a:7fff:ffff:ffff:ffff:ffff,NL -2001:470:7d5a:8000::,2001:470:7e38:ffff:ffff:ffff:ffff:ffff,US +2001:470:7bc1::,2001:470:7e38:ffff:ffff:ffff:ffff:ffff,US 2001:470:7e39::,2001:470:7e39:7fff:ffff:ffff:ffff:ffff,NL 2001:470:7e39:8000::,2001:470:8091:ffff:ffff:ffff:ffff:ffff,US 2001:470:8092::,2001:470:8092:7fff:ffff:ffff:ffff:ffff,CN 2001:470:8092:8000::,2001:470:80b6:ffff:ffff:ffff:ffff:ffff,US -2001:470:80b7::,2001:470:80b7:ffff:ffff:ffff:ffff:ffff,CN -2001:470:80b8::,2001:470:80ec:ffff:ffff:ffff:ffff:ffff,US -2001:470:80ed::,2001:470:80ed:7fff:ffff:ffff:ffff:ffff,AU -2001:470:80ed:8000::,2001:470:814c:ffff:ffff:ffff:ffff:ffff,US -2001:470:814d::,2001:470:814d:7fff:ffff:ffff:ffff:ffff,AU -2001:470:814d:8000::,2001:470:81a6:ffff:ffff:ffff:ffff:ffff,US -2001:470:81a7::,2001:470:81a7:7fff:ffff:ffff:ffff:ffff,CN -2001:470:81a7:8000::,2001:470:81b0:ffff:ffff:ffff:ffff:ffff,US +2001:470:80b7::,2001:470:80b7:7fff:ffff:ffff:ffff:ffff,CN +2001:470:80b7:8000::,2001:470:81b0:ffff:ffff:ffff:ffff:ffff,US 2001:470:81b1::,2001:470:81b1:7fff:ffff:ffff:ffff:ffff,CN 2001:470:81b1:8000::,2001:470:83bb:ffff:ffff:ffff:ffff:ffff,US 2001:470:83bc::,2001:470:83bc:7fff:ffff:ffff:ffff:ffff,CN -2001:470:83bc:8000::,2001:470:8551:ffff:ffff:ffff:ffff:ffff,US -2001:470:8552::,2001:470:8552:7fff:ffff:ffff:ffff:ffff,CN -2001:470:8552:8000::,2001:470:859e:ffff:ffff:ffff:ffff:ffff,US -2001:470:859f::,2001:470:859f:7fff:ffff:ffff:ffff:ffff,AU -2001:470:859f:8000::,2001:470:8b66:ffff:ffff:ffff:ffff:ffff,US -2001:470:8b67::,2001:470:8b67:7fff:ffff:ffff:ffff:ffff,AR -2001:470:8b67:8000::,2001:470:8c6b:ffff:ffff:ffff:ffff:ffff,US -2001:470:8c6c::,2001:470:8c6c:7fff:ffff:ffff:ffff:ffff,AU -2001:470:8c6c:8000::,2001:470:90a6:ffff:ffff:ffff:ffff:ffff,US -2001:470:90a7::,2001:470:90a7:7fff:ffff:ffff:ffff:ffff,GB -2001:470:90a7:8000::,2001:470:9330:ffff:ffff:ffff:ffff:ffff,US +2001:470:83bc:8000::,2001:470:9330:ffff:ffff:ffff:ffff:ffff,US 2001:470:9331::,2001:470:9331:7fff:ffff:ffff:ffff:ffff,DK -2001:470:9331:8000::,2001:470:94f2:7fff:ffff:ffff:ffff:ffff,US -2001:470:94f2:8000::,2001:470:94f2:ffff:ffff:ffff:ffff:ffff,CZ -2001:470:94f3::,2001:470:9651:ffff:ffff:ffff:ffff:ffff,US -2001:470:9652::,2001:470:9652:7fff:ffff:ffff:ffff:ffff,GB -2001:470:9652:8000::,2001:470:9678:ffff:ffff:ffff:ffff:ffff,US -2001:470:9679::,2001:470:9679:7fff:ffff:ffff:ffff:ffff,GB -2001:470:9679:8000::,2001:470:974e:ffff:ffff:ffff:ffff:ffff,US -2001:470:974f::,2001:470:974f:7fff:ffff:ffff:ffff:ffff,GB -2001:470:974f:8000::,2001:470:9794:ffff:ffff:ffff:ffff:ffff,US +2001:470:9331:8000::,2001:470:9794:ffff:ffff:ffff:ffff:ffff,US 2001:470:9795::,2001:470:9795:ffff:ffff:ffff:ffff:ffff,GB 2001:470:9796::,2001:470:97d6:7fff:ffff:ffff:ffff:ffff,US 2001:470:97d6:8000::,2001:470:97d6:ffff:ffff:ffff:ffff:ffff,GB -2001:470:97d7::,2001:470:97f0:ffff:ffff:ffff:ffff:ffff,US -2001:470:97f1::,2001:470:97f1:7fff:ffff:ffff:ffff:ffff,GB -2001:470:97f1:8000::,2001:470:98e1:ffff:ffff:ffff:ffff:ffff,US -2001:470:98e2::,2001:470:98e2:7fff:ffff:ffff:ffff:ffff,DE -2001:470:98e2:8000::,2001:470:999c:ffff:ffff:ffff:ffff:ffff,US +2001:470:97d7::,2001:470:999c:ffff:ffff:ffff:ffff:ffff,US 2001:470:999d::,2001:470:999d:ffff:ffff:ffff:ffff:ffff,DE -2001:470:999e::,2001:470:99b8:ffff:ffff:ffff:ffff:ffff,US -2001:470:99b9::,2001:470:99b9:7fff:ffff:ffff:ffff:ffff,DE -2001:470:99b9:8000::,2001:470:9d38:ffff:ffff:ffff:ffff:ffff,US +2001:470:999e::,2001:470:9d38:ffff:ffff:ffff:ffff:ffff,US 2001:470:9d39::,2001:470:9d39:7fff:ffff:ffff:ffff:ffff,DE -2001:470:9d39:8000::,2001:470:9f5e:ffff:ffff:ffff:ffff:ffff,US -2001:470:9f5f::,2001:470:9f5f:7fff:ffff:ffff:ffff:ffff,RU -2001:470:9f5f:8000::,2001:470:a000:ffff:ffff:ffff:ffff:ffff,US -2001:470:a001::,2001:470:a001:7fff:ffff:ffff:ffff:ffff,AU -2001:470:a001:8000::,2001:470:b01d:ffff:ffff:ffff:ffff:ffff,US -2001:470:b01e::,2001:470:b01e:7fff:ffff:ffff:ffff:ffff,CA -2001:470:b01e:8000::,2001:470:b083:ffff:ffff:ffff:ffff:ffff,US -2001:470:b084::,2001:470:b084:7fff:ffff:ffff:ffff:ffff,CA -2001:470:b084:8000::,2001:470:b0e1:ffff:ffff:ffff:ffff:ffff,US +2001:470:9d39:8000::,2001:470:b0e1:ffff:ffff:ffff:ffff:ffff,US 2001:470:b0e2::,2001:470:b0e2:ffff:ffff:ffff:ffff:ffff,CA -2001:470:b0e3::,2001:470:b159:ffff:ffff:ffff:ffff:ffff,US -2001:470:b15a::,2001:470:b15a:7fff:ffff:ffff:ffff:ffff,CA -2001:470:b15a:8000::,2001:470:b160:ffff:ffff:ffff:ffff:ffff,US -2001:470:b161::,2001:470:b161:7fff:ffff:ffff:ffff:ffff,CA -2001:470:b161:8000::,2001:470:b24b:ffff:ffff:ffff:ffff:ffff,US -2001:470:b24c::,2001:470:b24c:7fff:ffff:ffff:ffff:ffff,DO -2001:470:b24c:8000::,2001:470:b27e:ffff:ffff:ffff:ffff:ffff,US -2001:470:b27f::,2001:470:b27f:7fff:ffff:ffff:ffff:ffff,CA -2001:470:b27f:8000::,2001:470:b30c:ffff:ffff:ffff:ffff:ffff,US +2001:470:b0e3::,2001:470:b30c:ffff:ffff:ffff:ffff:ffff,US 2001:470:b30d::,2001:470:b30d:7fff:ffff:ffff:ffff:ffff,CN -2001:470:b30d:8000::,2001:470:b41b:ffff:ffff:ffff:ffff:ffff,US -2001:470:b41c::,2001:470:b41c:7fff:ffff:ffff:ffff:ffff,CH -2001:470:b41c:8000::,2001:470:b44f:ffff:ffff:ffff:ffff:ffff,US -2001:470:b450::,2001:470:b450:7fff:ffff:ffff:ffff:ffff,CH -2001:470:b450:8000::,2001:470:b4a4:ffff:ffff:ffff:ffff:ffff,US -2001:470:b4a5::,2001:470:b4a5:7fff:ffff:ffff:ffff:ffff,DE -2001:470:b4a5:8000::,2001:470:b4e9:ffff:ffff:ffff:ffff:ffff,US +2001:470:b30d:8000::,2001:470:b4e9:ffff:ffff:ffff:ffff:ffff,US 2001:470:b4ea::,2001:470:b4ea:ffff:ffff:ffff:ffff:ffff,AT -2001:470:b4eb::,2001:470:b51d:ffff:ffff:ffff:ffff:ffff,US -2001:470:b51e::,2001:470:b51e:7fff:ffff:ffff:ffff:ffff,IT -2001:470:b51e:8000::,2001:470:b541:ffff:ffff:ffff:ffff:ffff,US -2001:470:b542::,2001:470:b542:7fff:ffff:ffff:ffff:ffff,CH -2001:470:b542:8000::,2001:470:b59e:ffff:ffff:ffff:ffff:ffff,US +2001:470:b4eb::,2001:470:b59e:ffff:ffff:ffff:ffff:ffff,US 2001:470:b59f::,2001:470:b59f:7fff:ffff:ffff:ffff:ffff,CH -2001:470:b59f:8000::,2001:470:b5a9:ffff:ffff:ffff:ffff:ffff,US -2001:470:b5aa::,2001:470:b5aa:7fff:ffff:ffff:ffff:ffff,RU -2001:470:b5aa:8000::,2001:470:b5e8:ffff:ffff:ffff:ffff:ffff,US -2001:470:b5e9::,2001:470:b5e9:7fff:ffff:ffff:ffff:ffff,NO -2001:470:b5e9:8000::,2001:470:b5f5:ffff:ffff:ffff:ffff:ffff,US -2001:470:b5f6::,2001:470:b5f6:7fff:ffff:ffff:ffff:ffff,DE -2001:470:b5f6:8000::,2001:470:b625:ffff:ffff:ffff:ffff:ffff,US -2001:470:b626::,2001:470:b626:7fff:ffff:ffff:ffff:ffff,DE -2001:470:b626:8000::,2001:470:b74f:ffff:ffff:ffff:ffff:ffff,US -2001:470:b750::,2001:470:b750:7fff:ffff:ffff:ffff:ffff,CH -2001:470:b750:8000::,2001:470:b7b6:ffff:ffff:ffff:ffff:ffff,US -2001:470:b7b7::,2001:470:b7b7:7fff:ffff:ffff:ffff:ffff,AT -2001:470:b7b7:8000::,2001:470:c898:ffff:ffff:ffff:ffff:ffff,US -2001:470:c899::,2001:470:c899:7fff:ffff:ffff:ffff:ffff,FR -2001:470:c899:8000::,2001:470:c8b7:7fff:ffff:ffff:ffff:ffff,US -2001:470:c8b7:8000::,2001:470:c8b7:ffff:ffff:ffff:ffff:ffff,FR -2001:470:c8b8::,2001:470:c963:ffff:ffff:ffff:ffff:ffff,US +2001:470:b59f:8000::,2001:470:b625:ffff:ffff:ffff:ffff:ffff,US +2001:470:b626::,2001:470:b626:ff:ffff:ffff:ffff:ffff,DE +2001:470:b626:100::,2001:470:c963:ffff:ffff:ffff:ffff:ffff,US 2001:470:c964::,2001:470:c964:7fff:ffff:ffff:ffff:ffff,GB -2001:470:c964:8000::,2001:470:ca83:ffff:ffff:ffff:ffff:ffff,US -2001:470:ca84::,2001:470:ca84:7fff:ffff:ffff:ffff:ffff,ES -2001:470:ca84:8000::,2001:470:ca9f:ffff:ffff:ffff:ffff:ffff,US -2001:470:caa0::,2001:470:caa0:7fff:ffff:ffff:ffff:ffff,FR -2001:470:caa0:8000::,2001:470:caeb:ffff:ffff:ffff:ffff:ffff,US -2001:470:caec::,2001:470:caec:7fff:ffff:ffff:ffff:ffff,FR -2001:470:caec:8000::,2001:470:cd93:7fff:ffff:ffff:ffff:ffff,US +2001:470:c964:8000::,2001:470:cd93:7fff:ffff:ffff:ffff:ffff,US 2001:470:cd93:8000::,2001:470:cd93:ffff:ffff:ffff:ffff:ffff,FR -2001:470:cd94::,2001:470:cda8:ffff:ffff:ffff:ffff:ffff,US -2001:470:cda9::,2001:470:cda9:7fff:ffff:ffff:ffff:ffff,FR -2001:470:cda9:8000::,2001:470:d050:ffff:ffff:ffff:ffff:ffff,US -2001:470:d051::,2001:470:d051:7fff:ffff:ffff:ffff:ffff,NL -2001:470:d051:8000::,2001:470:d075:ffff:ffff:ffff:ffff:ffff,US -2001:470:d076::,2001:470:d076:7fff:ffff:ffff:ffff:ffff,NL -2001:470:d076:8000::,2001:470:d117:ffff:ffff:ffff:ffff:ffff,US -2001:470:d118::,2001:470:d118:7fff:ffff:ffff:ffff:ffff,NL -2001:470:d118:8000::,2001:470:d175:ffff:ffff:ffff:ffff:ffff,US -2001:470:d176::,2001:470:d176:7fff:ffff:ffff:ffff:ffff,NL -2001:470:d176:8000::,2001:470:d17a:ffff:ffff:ffff:ffff:ffff,US -2001:470:d17b::,2001:470:d17b:7fff:ffff:ffff:ffff:ffff,PL -2001:470:d17b:8000::,2001:470:d19a:ffff:ffff:ffff:ffff:ffff,US -2001:470:d19b::,2001:470:d19b:7fff:ffff:ffff:ffff:ffff,BE -2001:470:d19b:8000::,2001:470:d4ec:ffff:ffff:ffff:ffff:ffff,US -2001:470:d4ed::,2001:470:d4ed:7fff:ffff:ffff:ffff:ffff,FR -2001:470:d4ed:8000::,2001:470:d6b8:ffff:ffff:ffff:ffff:ffff,US +2001:470:cd94::,2001:470:d6b8:ffff:ffff:ffff:ffff:ffff,US 2001:470:d6b9::,2001:470:d6b9:7fff:ffff:ffff:ffff:ffff,RU -2001:470:d6b9:8000::,2001:470:d6e2:ffff:ffff:ffff:ffff:ffff,US -2001:470:d6e3::,2001:470:d6e3:7fff:ffff:ffff:ffff:ffff,NL -2001:470:d6e3:8000::,2001:470:d9cc:ffff:ffff:ffff:ffff:ffff,US -2001:470:d9cd::,2001:470:d9cd:7fff:ffff:ffff:ffff:ffff,DO -2001:470:d9cd:8000::,2001:470:da01:ffff:ffff:ffff:ffff:ffff,US +2001:470:d6b9:8000::,2001:470:da01:ffff:ffff:ffff:ffff:ffff,US 2001:470:da02::,2001:470:da02:7fff:ffff:ffff:ffff:ffff,AR -2001:470:da02:8000::,2001:470:da22:ffff:ffff:ffff:ffff:ffff,US -2001:470:da23::,2001:470:da23:7fff:ffff:ffff:ffff:ffff,TT -2001:470:da23:8000::,2001:470:da99:ffff:ffff:ffff:ffff:ffff,US -2001:470:da9a::,2001:470:da9a:7fff:ffff:ffff:ffff:ffff,BS -2001:470:da9a:8000::,2001:470:da9c:ffff:ffff:ffff:ffff:ffff,US -2001:470:da9d::,2001:470:da9d:7fff:ffff:ffff:ffff:ffff,BR -2001:470:da9d:8000::,2001:470:dc00:ffff:ffff:ffff:ffff:ffff,US -2001:470:dc01::,2001:470:dc01:7fff:ffff:ffff:ffff:ffff,SE -2001:470:dc01:8000::,2001:470:dc24:ffff:ffff:ffff:ffff:ffff,US -2001:470:dc25::,2001:470:dc25:7fff:ffff:ffff:ffff:ffff,RU -2001:470:dc25:8000::,2001:470:dc5c:ffff:ffff:ffff:ffff:ffff,US +2001:470:da02:8000::,2001:470:dc5c:ffff:ffff:ffff:ffff:ffff,US 2001:470:dc5d::,2001:470:dc5d:7fff:ffff:ffff:ffff:ffff,SE -2001:470:dc5d:8000::,2001:470:dcb3:ffff:ffff:ffff:ffff:ffff,US -2001:470:dcb4::,2001:470:dcb4:7fff:ffff:ffff:ffff:ffff,NO -2001:470:dcb4:8000::,2001:470:dcd0:ffff:ffff:ffff:ffff:ffff,US -2001:470:dcd1::,2001:470:dcd1:7fff:ffff:ffff:ffff:ffff,SE -2001:470:dcd1:8000::,2001:470:dce2:ffff:ffff:ffff:ffff:ffff,US -2001:470:dce3::,2001:470:dce3:7fff:ffff:ffff:ffff:ffff,SE -2001:470:dce3:8000::,2001:470:dd03:ffff:ffff:ffff:ffff:ffff,US -2001:470:dd04::,2001:470:dd04:7fff:ffff:ffff:ffff:ffff,SE -2001:470:dd04:8000::,2001:470:dd2c:ffff:ffff:ffff:ffff:ffff,US -2001:470:dd2d::,2001:470:dd2d:7fff:ffff:ffff:ffff:ffff,SE -2001:470:dd2d:8000::,2001:470:dd3a:ffff:ffff:ffff:ffff:ffff,US -2001:470:dd3b::,2001:470:dd3b:7fff:ffff:ffff:ffff:ffff,FI -2001:470:dd3b:8000::,2001:470:dd94:ffff:ffff:ffff:ffff:ffff,US +2001:470:dc5d:8000::,2001:470:dd94:ffff:ffff:ffff:ffff:ffff,US 2001:470:dd95::,2001:470:dd95:7fff:ffff:ffff:ffff:ffff,UA -2001:470:dd95:8000::,2001:470:dda1:ffff:ffff:ffff:ffff:ffff,US -2001:470:dda2::,2001:470:dda2:7fff:ffff:ffff:ffff:ffff,SE -2001:470:dda2:8000::,2001:470:dde6:ffff:ffff:ffff:ffff:ffff,US -2001:470:dde7::,2001:470:dde7:7fff:ffff:ffff:ffff:ffff,SE -2001:470:dde7:8000::,2001:470:ddf5:ffff:ffff:ffff:ffff:ffff,US -2001:470:ddf6::,2001:470:ddf6:7fff:ffff:ffff:ffff:ffff,SE -2001:470:ddf6:8000::,2001:470:ddff:ffff:ffff:ffff:ffff:ffff,US -2001:470:de00::,2001:470:de00:7fff:ffff:ffff:ffff:ffff,RU -2001:470:de00:8000::,2001:470:de4a:ffff:ffff:ffff:ffff:ffff,US -2001:470:de4b::,2001:470:de4b:7fff:ffff:ffff:ffff:ffff,SE -2001:470:de4b:8000::,2001:470:de51:ffff:ffff:ffff:ffff:ffff,US -2001:470:de52::,2001:470:de52:7fff:ffff:ffff:ffff:ffff,SE -2001:470:de52:8000::,2001:470:de8a:ffff:ffff:ffff:ffff:ffff,US -2001:470:de8b::,2001:470:de8b:7fff:ffff:ffff:ffff:ffff,RU -2001:470:de8b:8000::,2001:470:deb5:7fff:ffff:ffff:ffff:ffff,US -2001:470:deb5:8000::,2001:470:deb5:ffff:ffff:ffff:ffff:ffff,RU -2001:470:deb6::,2001:470:debb:ffff:ffff:ffff:ffff:ffff,US -2001:470:debc::,2001:470:debc:7fff:ffff:ffff:ffff:ffff,SE -2001:470:debc:8000::,2001:470:dec3:ffff:ffff:ffff:ffff:ffff,US +2001:470:dd95:8000::,2001:470:dec3:ffff:ffff:ffff:ffff:ffff,US 2001:470:dec4::,2001:470:dec4:ffff:ffff:ffff:ffff:ffff,SE -2001:470:dec5::,2001:470:df35:ffff:ffff:ffff:ffff:ffff,US -2001:470:df36::,2001:470:df36:7fff:ffff:ffff:ffff:ffff,RU -2001:470:df36:8000::,2001:470:df40:ffff:ffff:ffff:ffff:ffff,US +2001:470:dec5::,2001:470:df40:ffff:ffff:ffff:ffff:ffff,US 2001:470:df41::,2001:470:df41:ffff:ffff:ffff:ffff:ffff,SE -2001:470:df42::,2001:470:df4e:ffff:ffff:ffff:ffff:ffff,US -2001:470:df4f::,2001:470:df4f:7fff:ffff:ffff:ffff:ffff,SE -2001:470:df4f:8000::,2001:470:df4f:ffff:ffff:ffff:ffff:ffff,US +2001:470:df42::,2001:470:df4f:ffff:ffff:ffff:ffff:ffff,US 2001:470:df50::,2001:470:df50:7fff:ffff:ffff:ffff:ffff,RU -2001:470:df50:8000::,2001:470:df6f:ffff:ffff:ffff:ffff:ffff,US -2001:470:df70::,2001:470:df70:7fff:ffff:ffff:ffff:ffff,SE -2001:470:df70:8000::,2001:470:df79:ffff:ffff:ffff:ffff:ffff,US -2001:470:df7a::,2001:470:df7a:7fff:ffff:ffff:ffff:ffff,NO -2001:470:df7a:8000::,2001:470:df7c:ffff:ffff:ffff:ffff:ffff,US +2001:470:df50:8000::,2001:470:df7c:ffff:ffff:ffff:ffff:ffff,US 2001:470:df7d::,2001:470:df7d:7fff:ffff:ffff:ffff:ffff,SE -2001:470:df7d:8000::,2001:470:dfd5:ffff:ffff:ffff:ffff:ffff,US -2001:470:dfd6::,2001:470:dfd6:7fff:ffff:ffff:ffff:ffff,NO -2001:470:dfd6:8000::,2001:470:e20e:ffff:ffff:ffff:ffff:ffff,US -2001:470:e20f::,2001:470:e20f:7fff:ffff:ffff:ffff:ffff,CA -2001:470:e20f:8000::,2001:470:e97e:ffff:ffff:ffff:ffff:ffff,US -2001:470:e97f::,2001:470:e97f:7fff:ffff:ffff:ffff:ffff,CA -2001:470:e97f:8000::,2001:470:ea08:ffff:ffff:ffff:ffff:ffff,US -2001:470:ea09::,2001:470:ea09:7fff:ffff:ffff:ffff:ffff,CA -2001:470:ea09:8000::,2001:470:ea76:ffff:ffff:ffff:ffff:ffff,US +2001:470:df7d:8000::,2001:470:dfc9:ffff:ffff:ffff:ffff:ffff,US +2001:470:dfca::,2001:470:dfca:ffff:ffff:ffff:ffff:ffff,RU +2001:470:dfcb::,2001:470:ea76:ffff:ffff:ffff:ffff:ffff,US 2001:470:ea77::,2001:470:ea77:7fff:ffff:ffff:ffff:ffff,AU -2001:470:ea77:8000::,2001:470:eae0:7fff:ffff:ffff:ffff:ffff,US -2001:470:eae0:8000::,2001:470:eae0:ffff:ffff:ffff:ffff:ffff,CA -2001:470:eae1::,2001:470:eba6:ffff:ffff:ffff:ffff:ffff,US -2001:470:eba7::,2001:470:eba7:7fff:ffff:ffff:ffff:ffff,CN -2001:470:eba7:8000::,2001:470:ecf5:ffff:ffff:ffff:ffff:ffff,US -2001:470:ecf6::,2001:470:ecf6:7fff:ffff:ffff:ffff:ffff,ID -2001:470:ecf6:8000::,2001:470:ed26:ffff:ffff:ffff:ffff:ffff,US +2001:470:ea77:8000::,2001:470:ed26:ffff:ffff:ffff:ffff:ffff,US 2001:470:ed27::,2001:470:ed27:7fff:ffff:ffff:ffff:ffff,ID -2001:470:ed27:8000::,2001:470:ed39:ffff:ffff:ffff:ffff:ffff,US -2001:470:ed3a::,2001:470:ed3a:7fff:ffff:ffff:ffff:ffff,SG -2001:470:ed3a:8000::,2001:470:ed3c:ffff:ffff:ffff:ffff:ffff,US -2001:470:ed3d::,2001:470:ed3d:7fff:ffff:ffff:ffff:ffff,SG -2001:470:ed3d:8000::,2001:470:ed42:ffff:ffff:ffff:ffff:ffff,US +2001:470:ed27:8000::,2001:470:ed42:ffff:ffff:ffff:ffff:ffff,US 2001:470:ed43::,2001:470:ed43:7fff:ffff:ffff:ffff:ffff,ID -2001:470:ed43:8000::,2001:470:ee1d:ffff:ffff:ffff:ffff:ffff,US -2001:470:ee1e::,2001:470:ee1e:7fff:ffff:ffff:ffff:ffff,ID -2001:470:ee1e:8000::,2001:470:ee2b:ffff:ffff:ffff:ffff:ffff,US -2001:470:ee2c::,2001:470:ee2c:7fff:ffff:ffff:ffff:ffff,AU -2001:470:ee2c:8000::,2001:470:ef3f:ffff:ffff:ffff:ffff:ffff,US -2001:470:ef40::,2001:470:ef40:7fff:ffff:ffff:ffff:ffff,CN -2001:470:ef40:8000::,2001:470:ef84:ffff:ffff:ffff:ffff:ffff,US +2001:470:ed43:8000::,2001:470:ef84:ffff:ffff:ffff:ffff:ffff,US 2001:470:ef85::,2001:470:ef85:7fff:ffff:ffff:ffff:ffff,CN 2001:470:ef85:8000::,2001:470:f003:ffff:ffff:ffff:ffff:ffff,US 2001:470:f004::,2001:470:f004:7fff:ffff:ffff:ffff:ffff,CN 2001:470:f004:8000::,2001:470:f088:ffff:ffff:ffff:ffff:ffff,US 2001:470:f089::,2001:470:f089:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f089:8000::,2001:470:f091:ffff:ffff:ffff:ffff:ffff,US -2001:470:f092::,2001:470:f092:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f092:8000::,2001:470:f0cc:ffff:ffff:ffff:ffff:ffff,US -2001:470:f0cd::,2001:470:f0cd:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f0cd:8000::,2001:470:f0e7:ffff:ffff:ffff:ffff:ffff,US -2001:470:f0e8::,2001:470:f0e8:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f0e8:8000::,2001:470:f1fa:ffff:ffff:ffff:ffff:ffff,US -2001:470:f1fb::,2001:470:f1fb:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f1fb:8000::,2001:470:f270:ffff:ffff:ffff:ffff:ffff,US -2001:470:f271::,2001:470:f271:7fff:ffff:ffff:ffff:ffff,AU -2001:470:f271:8000::,2001:470:f3be:7fff:ffff:ffff:ffff:ffff,US -2001:470:f3be:8000::,2001:470:f3be:ffff:ffff:ffff:ffff:ffff,CN -2001:470:f3bf::,2001:470:f4b4:7fff:ffff:ffff:ffff:ffff,US -2001:470:f4b4:8000::,2001:470:f4b4:ffff:ffff:ffff:ffff:ffff,CN -2001:470:f4b5::,2001:470:f4c3:ffff:ffff:ffff:ffff:ffff,US -2001:470:f4c4::,2001:470:f4c4:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f4c4:8000::,2001:470:f54e:ffff:ffff:ffff:ffff:ffff,US -2001:470:f54f::,2001:470:f54f:7fff:ffff:ffff:ffff:ffff,AU -2001:470:f54f:8000::,2001:470:f818:ffff:ffff:ffff:ffff:ffff,US +2001:470:f089:8000::,2001:470:f818:ffff:ffff:ffff:ffff:ffff,US 2001:470:f819::,2001:470:f819:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f819:8000::,2001:470:f825:7fff:ffff:ffff:ffff:ffff,US -2001:470:f825:8000::,2001:470:f825:ffff:ffff:ffff:ffff:ffff,HK -2001:470:f826::,2001:470:f83d:7fff:ffff:ffff:ffff:ffff,US -2001:470:f83d:8000::,2001:470:f83d:ffff:ffff:ffff:ffff:ffff,CN -2001:470:f83e::,2001:470:f83f:ffff:ffff:ffff:ffff:ffff,US -2001:470:f840::,2001:470:f840:7fff:ffff:ffff:ffff:ffff,MY -2001:470:f840:8000::,2001:470:f891:ffff:ffff:ffff:ffff:ffff,US +2001:470:f819:8000::,2001:470:f891:ffff:ffff:ffff:ffff:ffff,US 2001:470:f892::,2001:470:f892:7fff:ffff:ffff:ffff:ffff,CN -2001:470:f892:8000::,2001:470:f90f:7fff:ffff:ffff:ffff:ffff,US -2001:470:f90f:8000::,2001:470:f90f:ffff:ffff:ffff:ffff:ffff,CN -2001:470:f910::,2001:470:fa48:ffff:ffff:ffff:ffff:ffff,US -2001:470:fa49::,2001:470:fa49:7fff:ffff:ffff:ffff:ffff,CN -2001:470:fa49:8000::,2001:470:fa6b:ffff:ffff:ffff:ffff:ffff,US -2001:470:fa6c::,2001:470:fa6c:7fff:ffff:ffff:ffff:ffff,HK -2001:470:fa6c:8000::,2001:470:fabc:ffff:ffff:ffff:ffff:ffff,US -2001:470:fabd::,2001:470:fabd:7fff:ffff:ffff:ffff:ffff,HK -2001:470:fabd:8000::,2001:470:fb3b:ffff:ffff:ffff:ffff:ffff,US +2001:470:f892:8000::,2001:470:fb3b:ffff:ffff:ffff:ffff:ffff,US 2001:470:fb3c::,2001:470:fb3c:7fff:ffff:ffff:ffff:ffff,CN -2001:470:fb3c:8000::,2001:470:fb74:ffff:ffff:ffff:ffff:ffff,US -2001:470:fb75::,2001:470:fb75:7fff:ffff:ffff:ffff:ffff,HK -2001:470:fb75:8000::,2001:470:fbc0:ffff:ffff:ffff:ffff:ffff,US -2001:470:fbc1::,2001:470:fbc1:7fff:ffff:ffff:ffff:ffff,SG -2001:470:fbc1:8000::,2001:470:fc62:ffff:ffff:ffff:ffff:ffff,US -2001:470:fc63::,2001:470:fc63:7fff:ffff:ffff:ffff:ffff,CN -2001:470:fc63:8000::,2001:470:fc78:ffff:ffff:ffff:ffff:ffff,US +2001:470:fb3c:8000::,2001:470:fc78:ffff:ffff:ffff:ffff:ffff,US 2001:470:fc79::,2001:470:fc79:7fff:ffff:ffff:ffff:ffff,JP -2001:470:fc79:8000::,2001:470:fc86:7fff:ffff:ffff:ffff:ffff,US -2001:470:fc86:8000::,2001:470:fc86:ffff:ffff:ffff:ffff:ffff,JP -2001:470:fc87::,2001:470:fd82:ffff:ffff:ffff:ffff:ffff,US -2001:470:fd83::,2001:470:fd83:7fff:ffff:ffff:ffff:ffff,JP -2001:470:fd83:8000::,2001:470:fdfe:ffff:ffff:ffff:ffff:ffff,US +2001:470:fc79:8000::,2001:470:fdfe:ffff:ffff:ffff:ffff:ffff,US 2001:470:fdff::,2001:470:fdff:7fff:ffff:ffff:ffff:ffff,JP 2001:470:fdff:8000::,2001:470:fecb:ffff:ffff:ffff:ffff:ffff,US 2001:470:fecc::,2001:470:fecc:7fff:ffff:ffff:ffff:ffff,CN @@ -937,14 +395,14 @@ 2001:500:120::,2001:500:13f:ffff:ffff:ffff:ffff:ffff,US 2001:500:200::,2001:500:20f:ffff:ffff:ffff:ffff:ffff,US 2001:500:3e5::,2001:500:3e5:ffff:ffff:ffff:ffff:ffff,US -2001:500:30ff::,2001:500:30ff:ffff:ffff:ffff:ffff:ffff,US +2001:500:30ff::,2001:500:30ff:ffff:ffff:ffff:ffff:ffff,SE 2001:500:3682::,2001:500:3682:ffff:ffff:ffff:ffff:ffff,US 2001:500:4431::,2001:500:4431:ffff:ffff:ffff:ffff:ffff,US 2001:500:7967::,2001:500:7967:ffff:ffff:ffff:ffff:ffff,US 2001:500:856e::,2001:500:856e:ffff:ffff:ffff:ffff:ffff,US 2001:500:d937::,2001:500:d937:ffff:ffff:ffff:ffff:ffff,US -2001:500:ed30::,2001:500:ed30:ffff:ffff:ffff:ffff:ffff,US -2001:501:8a29::,2001:501:8a29:ffff:ffff:ffff:ffff:ffff,US +2001:500:ed30::,2001:500:ed30:ffff:ffff:ffff:ffff:ffff,SG +2001:501:8a29::,2001:501:8a29:ffff:ffff:ffff:ffff:ffff,JP 2001:501:973c::,2001:501:973c:ffff:ffff:ffff:ffff:ffff,US 2001:501:b1f9::,2001:501:b1f9:ffff:ffff:ffff:ffff:ffff,US 2001:502:8cc::,2001:502:8cc:ffff:ffff:ffff:ffff:ffff,US @@ -955,7 +413,7 @@ 2001:502:63bd::,2001:502:63bd:ffff:ffff:ffff:ffff:ffff,US 2001:502:7094::,2001:502:7094:ffff:ffff:ffff:ffff:ffff,US 2001:502:7a71::,2001:502:7a71:ffff:ffff:ffff:ffff:ffff,US -2001:502:8c25::,2001:502:8c25:ffff:ffff:ffff:ffff:ffff,US +2001:502:8c25::,2001:502:8c25:ffff:ffff:ffff:ffff:ffff,GB 2001:502:ad09::,2001:502:ad09:ffff:ffff:ffff:ffff:ffff,US 2001:502:be98::,2001:502:be98:ffff:ffff:ffff:ffff:ffff,US 2001:502:cbe4::,2001:502:cbe4:ffff:ffff:ffff:ffff:ffff,US @@ -967,15 +425,15 @@ 2001:503:231d::,2001:503:231d:ffff:ffff:ffff:ffff:ffff,US 2001:503:3227::,2001:503:3227:ffff:ffff:ffff:ffff:ffff,US 2001:503:39c1::,2001:503:39c1:ffff:ffff:ffff:ffff:ffff,US -2001:503:4872::,2001:503:4872:ffff:ffff:ffff:ffff:ffff,US -2001:503:5419::,2001:503:5419:ffff:ffff:ffff:ffff:ffff,US +2001:503:4872::,2001:503:4872:ffff:ffff:ffff:ffff:ffff,HK +2001:503:5419::,2001:503:5419:ffff:ffff:ffff:ffff:ffff,ES 2001:503:5ae2::,2001:503:5ae2:ffff:ffff:ffff:ffff:ffff,US 2001:503:6810::,2001:503:6810:ffff:ffff:ffff:ffff:ffff,US 2001:503:7bbb::,2001:503:7bbb:ffff:ffff:ffff:ffff:ffff,US -2001:503:7bbf::,2001:503:7bbf:ffff:ffff:ffff:ffff:ffff,US +2001:503:7bbf::,2001:503:7bbf:ffff:ffff:ffff:ffff:ffff,DE 2001:503:8028::,2001:503:8028:ffff:ffff:ffff:ffff:ffff,US 2001:503:83eb::,2001:503:83eb:ffff:ffff:ffff:ffff:ffff,US -2001:503:91ef::,2001:503:91ef:ffff:ffff:ffff:ffff:ffff,US +2001:503:91ef::,2001:503:91ef:ffff:ffff:ffff:ffff:ffff,FR 2001:503:a124::,2001:503:a124:ffff:ffff:ffff:ffff:ffff,US 2001:503:a83e::,2001:503:a83e:ffff:ffff:ffff:ffff:ffff,US 2001:503:ba3e::,2001:503:ba3e:ffff:ffff:ffff:ffff:ffff,US @@ -989,7 +447,7 @@ 2001:503:eea3::,2001:503:eea3:ffff:ffff:ffff:ffff:ffff,US 2001:503:f189::,2001:503:f189:ffff:ffff:ffff:ffff:ffff,US 2001:503:f261::,2001:503:f261:ffff:ffff:ffff:ffff:ffff,US -2001:503:f3da::,2001:503:f3da:ffff:ffff:ffff:ffff:ffff,US +2001:503:f3da::,2001:503:f3da:ffff:ffff:ffff:ffff:ffff,NL 2001:503:ff39::,2001:503:ff39:ffff:ffff:ffff:ffff:ffff,US 2001:504::,2001:504:1:ffff:ffff:ffff:ffff:ffff,US 2001:504:a::,2001:504:13:ffff:ffff:ffff:ffff:ffff,US @@ -1022,7 +480,7 @@ 2001:504:57::,2001:504:59:ffff:ffff:ffff:ffff:ffff,US 2001:504:60::,2001:504:62:ffff:ffff:ffff:ffff:ffff,US 2001:504:63::,2001:504:63:ffff:ffff:ffff:ffff:ffff,DM -2001:504:64::,2001:504:64:ffff:ffff:ffff:ffff:ffff,US +2001:504:64::,2001:504:65:ffff:ffff:ffff:ffff:ffff,US 2001:506::,2001:506:1:ffff:ffff:ffff:ffff:ffff,US 2001:506:8::,2001:506:8:ffff:ffff:ffff:ffff:ffff,US 2001:506:20::,2001:506:20:ffff:ffff:ffff:ffff:ffff,CA @@ -1045,17 +503,11 @@ 2001:550:0:1000::9a19:326,2001:550:0:1000::9a19:326,SI 2001:550:0:1000::9a19:327,2001:550:0:1000::9a36:2631,US 2001:550:0:1000::9a36:2632,2001:550:0:1000::9a36:2632,DE -2001:550:0:1000::9a36:2633,2001:550:906:ffff:ffff:ffff:ffff:ffff,US -2001:550:907::,2001:550:907:7fff:ffff:ffff:ffff:ffff,CA -2001:550:907:8000::,2001:550:909:ffff:ffff:ffff:ffff:ffff,US -2001:550:90a::,2001:550:90a:7fff:ffff:ffff:ffff:ffff,CA -2001:550:90a:8000::,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:550:0:1000::9a36:2633,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:558::,2001:560:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:568::,2001:569:fa50:27ff:ffff:ffff:ffff:ffff,CA -2001:569:fa50:2800::,2001:569:fa50:29ff:ffff:ffff:ffff:ffff,DE -2001:569:fa50:2a00::,2001:56a:f2dd:8fff:ffff:ffff:ffff:ffff,CA -2001:56a:f2dd:9000::,2001:56a:f2dd:9fff:ffff:ffff:ffff:ffff,US -2001:56a:f2dd:a000::,2001:56f:ffff:ffff:ffff:ffff:ffff:ffff,CA +2001:568::,2001:56a:f3ca:ffff:ffff:ffff:ffff:ffff,CA +2001:56a:f3cb::,2001:56a:f3cb:3fff:ffff:ffff:ffff:ffff,US +2001:56a:f3cb:4000::,2001:56f:ffff:ffff:ffff:ffff:ffff:ffff,CA 2001:570::,2001:570:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:578::,2001:57b:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:580::,2001:580:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -1069,15 +521,7 @@ 2001:5a8::,2001:5a8:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:5b0::,2001:5b0:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:5b8::,2001:5b8:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:5c0:1000::,2001:5c0:10ff:ffff:ffff:ffff:ffff:ffff,CA 2001:5c0:1100::,2001:5c0:1100::,US -2001:5c0:1100::1,2001:5c0:1501:7fff:ffff:ffff:ffff:ffff,CA -2001:5c0:1501:8000::,2001:5c0:1501:ffff:ffff:ffff:ffff:ffff,RU -2001:5c0:1502::,2001:5c0:1505:7fff:ffff:ffff:ffff:ffff,CA -2001:5c0:1505:8000::,2001:5c0:1505:ffff:ffff:ffff:ffff:ffff,RU -2001:5c0:1506::,2001:5c0:1508:7fff:ffff:ffff:ffff:ffff,CA -2001:5c0:1508:8000::,2001:5c0:1508:ffff:ffff:ffff:ffff:ffff,ES -2001:5c0:1509::,2001:5c0:1fff:ffff:ffff:ffff:ffff:ffff,CA 2001:5c8::,2001:5c8:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:5d0::,2001:5d0:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:5d8::,2001:5d8:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -1100,9 +544,7 @@ 2001:668:1f:3e::,2001:668:1f:3e:ffff:ffff:ffff:ffff,GB 2001:668:1f:3f::,2001:668:1f:44:ffff:ffff:ffff:ffff,DE 2001:668:1f:45::,2001:668:1f:45:ffff:ffff:ffff:ffff,GB -2001:668:1f:46::,2001:668:109:ffff:ffff:ffff:ffff:ffff,DE -2001:668:10a::,2001:668:10a:7fff:ffff:ffff:ffff:ffff,BE -2001:668:10a:8000::,2001:66f:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:668:1f:46::,2001:66f:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:670::,2001:673:ffff:ffff:ffff:ffff:ffff:ffff,FI 2001:678:1::,2001:678:1:ffff:ffff:ffff:ffff:ffff,CZ 2001:678:2::,2001:678:2:ffff:ffff:ffff:ffff:ffff,DE @@ -1261,6 +703,19 @@ 2001:678:25c::,2001:678:25c:ffff:ffff:ffff:ffff:ffff,LU 2001:678:260::,2001:678:260:ffff:ffff:ffff:ffff:ffff,CH 2001:678:264::,2001:678:264:ffff:ffff:ffff:ffff:ffff,NL +2001:678:268::,2001:678:268:ffff:ffff:ffff:ffff:ffff,GB +2001:678:26c::,2001:678:26c:ffff:ffff:ffff:ffff:ffff,UA +2001:678:270::,2001:678:270:ffff:ffff:ffff:ffff:ffff,AT +2001:678:274::,2001:678:274:ffff:ffff:ffff:ffff:ffff,DE +2001:678:278::,2001:678:278:ffff:ffff:ffff:ffff:ffff,RU +2001:678:27c::,2001:678:27c:ffff:ffff:ffff:ffff:ffff,PL +2001:678:280::,2001:678:280:ffff:ffff:ffff:ffff:ffff,RU +2001:678:284::,2001:678:284:ffff:ffff:ffff:ffff:ffff,DE +2001:678:288::,2001:678:288:ffff:ffff:ffff:ffff:ffff,PL +2001:678:28c::,2001:678:28c:ffff:ffff:ffff:ffff:ffff,CH +2001:678:290::,2001:678:290:ffff:ffff:ffff:ffff:ffff,RU +2001:678:294::,2001:678:294:ffff:ffff:ffff:ffff:ffff,CH +2001:678:298::,2001:678:298:ffff:ffff:ffff:ffff:ffff,CH 2001:67c::,2001:67c::ffff:ffff:ffff:ffff:ffff,IE 2001:67c:4::,2001:67c:4:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:8::,2001:67c:8:ffff:ffff:ffff:ffff:ffff,CH @@ -1879,7 +1334,6 @@ 2001:67c:11f4::,2001:67c:11f4:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:11f8::,2001:67c:11f8:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:11fc::,2001:67c:11fc:ffff:ffff:ffff:ffff:ffff,RU -2001:67c:1200::,2001:67c:1203:ffff:ffff:ffff:ffff:ffff,FR 2001:67c:1210::,2001:67c:1213:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1220::,2001:67c:1223:ffff:ffff:ffff:ffff:ffff,CZ 2001:67c:1230::,2001:67c:1233:ffff:ffff:ffff:ffff:ffff,US @@ -1929,7 +1383,6 @@ 2001:67c:12fc::,2001:67c:12fc:ffff:ffff:ffff:ffff:ffff,PL 2001:67c:1300::,2001:67c:1300:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:1304::,2001:67c:1304:ffff:ffff:ffff:ffff:ffff,RU -2001:67c:1308::,2001:67c:1308:ffff:ffff:ffff:ffff:ffff,MD 2001:67c:130c::,2001:67c:130c:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:1310::,2001:67c:1310:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:1314::,2001:67c:1314:ffff:ffff:ffff:ffff:ffff,CZ @@ -1946,9 +1399,7 @@ 2001:67c:1344::,2001:67c:1344:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:1348::,2001:67c:1348:ffff:ffff:ffff:ffff:ffff,FR 2001:67c:134c::,2001:67c:134c:ffff:ffff:ffff:ffff:ffff,CZ -2001:67c:1350::,2001:67c:1350:1fff:ffff:ffff:ffff:ffff,CY -2001:67c:1350:2000::,2001:67c:1350:3fff:ffff:ffff:ffff:ffff,SE -2001:67c:1350:4000::,2001:67c:1350:ffff:ffff:ffff:ffff:ffff,CY +2001:67c:1350::,2001:67c:1350:ffff:ffff:ffff:ffff:ffff,CY 2001:67c:1354::,2001:67c:1354:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:1358::,2001:67c:1358:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:135c::,2001:67c:135c:ffff:ffff:ffff:ffff:ffff,SE @@ -2182,9 +1633,7 @@ 2001:67c:1800::,2001:67c:1800:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:1804::,2001:67c:1804:ffff:ffff:ffff:ffff:ffff,RO 2001:67c:1808::,2001:67c:1809:ffff:ffff:ffff:ffff:ffff,BE -2001:67c:1810::,2001:67c:1810:efff:ffff:ffff:ffff:ffff,BE -2001:67c:1810:f000::,2001:67c:1810:f0ff:ffff:ffff:ffff:ffff,NO -2001:67c:1810:f100::,2001:67c:1810:ffff:ffff:ffff:ffff:ffff,BE +2001:67c:1810::,2001:67c:1810:ffff:ffff:ffff:ffff:ffff,BE 2001:67c:1814::,2001:67c:1814:ffff:ffff:ffff:ffff:ffff,FR 2001:67c:1818::,2001:67c:1818:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:181c::,2001:67c:181c:ffff:ffff:ffff:ffff:ffff,DE @@ -2397,9 +1846,7 @@ 2001:67c:2094::,2001:67c:2094:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:2098::,2001:67c:2098:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:209c::,2001:67c:209c:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:20a0::,2001:67c:20a0:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:20a1::,2001:67c:20a1:7fff:ffff:ffff:ffff:ffff,GB -2001:67c:20a1:8000::,2001:67c:20a1:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:20a0::,2001:67c:20a1:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:20a8::,2001:67c:20a8:ffff:ffff:ffff:ffff:ffff,NL 2001:67c:20ac::,2001:67c:20ac:ffff:ffff:ffff:ffff:ffff,CH 2001:67c:20b0::,2001:67c:20b0:ffff:ffff:ffff:ffff:ffff,RU @@ -2577,8 +2024,7 @@ 2001:67c:237c::,2001:67c:237c:ffff:ffff:ffff:ffff:ffff,DK 2001:67c:2380::,2001:67c:2380:ffff:ffff:ffff:ffff:ffff,UA 2001:67c:2384::,2001:67c:2384:ffff:ffff:ffff:ffff:ffff,SE -2001:67c:2388::,2001:67c:2388:7fff:ffff:ffff:ffff:ffff,DE -2001:67c:2388:8000::,2001:67c:2388:ffff:ffff:ffff:ffff:ffff,DK +2001:67c:2388::,2001:67c:2388:ffff:ffff:ffff:ffff:ffff,DK 2001:67c:238c::,2001:67c:238c:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:2390::,2001:67c:2390:ffff:ffff:ffff:ffff:ffff,NL 2001:67c:2394::,2001:67c:2394:ffff:ffff:ffff:ffff:ffff,DE @@ -2677,7 +2123,7 @@ 2001:67c:2538::,2001:67c:2538:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:253c::,2001:67c:253c:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2540::,2001:67c:2540:ffff:ffff:ffff:ffff:ffff,CH -2001:67c:2544::,2001:67c:2544:ffff:ffff:ffff:ffff:ffff,DE +2001:67c:2544::,2001:67c:2544:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2548::,2001:67c:2548:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:254c::,2001:67c:254c:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:2550::,2001:67c:2550:ffff:ffff:ffff:ffff:ffff,SE @@ -3253,7 +2699,6 @@ 2001:67c:2f30::,2001:67c:2f30:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f34::,2001:67c:2f34:ffff:ffff:ffff:ffff:ffff,AT 2001:67c:2f38::,2001:67c:2f38:ffff:ffff:ffff:ffff:ffff,GB -2001:67c:2f3c::,2001:67c:2f3c:ffff:ffff:ffff:ffff:ffff,GB 2001:67c:2f40::,2001:67c:2f40:ffff:ffff:ffff:ffff:ffff,BG 2001:67c:2f44::,2001:67c:2f44:ffff:ffff:ffff:ffff:ffff,DE 2001:67c:2f48::,2001:67c:2f48:ffff:ffff:ffff:ffff:ffff,UA @@ -3272,8 +2717,7 @@ 2001:67c:2f7c::,2001:67c:2f7c:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:2f80::,2001:67c:2f80:ffff:ffff:ffff:ffff:ffff,SE 2001:67c:2f84::,2001:67c:2f84:ffff:ffff:ffff:ffff:ffff,DE -2001:67c:2f88::,2001:67c:2f88:7fff:ffff:ffff:ffff:ffff,NL -2001:67c:2f88:8000::,2001:67c:2f88:ffff:ffff:ffff:ffff:ffff,ZA +2001:67c:2f88::,2001:67c:2f88:ffff:ffff:ffff:ffff:ffff,ZA 2001:67c:2f8c::,2001:67c:2f8c:ffff:ffff:ffff:ffff:ffff,IT 2001:67c:2f90::,2001:67c:2f90:ffff:ffff:ffff:ffff:ffff,RU 2001:67c:2f94::,2001:67c:2f94:ffff:ffff:ffff:ffff:ffff,CH @@ -3320,65 +2764,17 @@ 2001:6f8:202:8000::,2001:6f8:202:ffff:ffff:ffff:ffff:ffff,BE 2001:6f8:203::,2001:6f8:2ff:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:300::,2001:6f8:3ff:ffff:ffff:ffff:ffff:ffff,BE -2001:6f8:400::,2001:6f8:8ff:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:900::,2001:6f8:900:ffff:ffff:ffff:ffff:ffff,DE -2001:6f8:901::,2001:6f8:91c:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:91d::,2001:6f8:91d:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:91d:8000::,2001:6f8:926:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:927::,2001:6f8:927:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:927:8000::,2001:6f8:96b:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:96c::,2001:6f8:96c:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:96c:8000::,2001:6f8:9a7:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:9a8::,2001:6f8:9a8:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:9a8:8000::,2001:6f8:1011:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1012::,2001:6f8:1012:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1012:8000::,2001:6f8:101a:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:101b::,2001:6f8:101b:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:101b:8000::,2001:6f8:105a:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:105b::,2001:6f8:105b:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:105b:8000::,2001:6f8:10f1:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:10f2::,2001:6f8:10f2:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:10f2:8000::,2001:6f8:115b:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:115c::,2001:6f8:115c:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:115c:8000::,2001:6f8:1182:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1183::,2001:6f8:1183:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1183:8000::,2001:6f8:11ab:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:11ac::,2001:6f8:11ac:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:11ac:8000::,2001:6f8:11cf:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:11d0::,2001:6f8:11d0:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:11d0:8000::,2001:6f8:12ca:7fff:ffff:ffff:ffff:ffff,GB -2001:6f8:12ca:8000::,2001:6f8:12ca:ffff:ffff:ffff:ffff:ffff,DE -2001:6f8:12cb::,2001:6f8:12d8:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:400::,2001:6f8:900:7fff:ffff:ffff:ffff:ffff,GB +2001:6f8:900:8000::,2001:6f8:900:ffff:ffff:ffff:ffff:ffff,DE +2001:6f8:901::,2001:6f8:12d8:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:12d9::,2001:6f8:12d9:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:12d9:8000::,2001:6f8:1368:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1369::,2001:6f8:1369:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1369:8000::,2001:6f8:13e0:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:13e1::,2001:6f8:13e1:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:13e1:8000::,2001:6f8:13ff:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:12d9:8000::,2001:6f8:13ff:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:1400::,2001:6f8:14ff:ffff:ffff:ffff:ffff:ffff,BE 2001:6f8:1500::,2001:6f8:1c00:7fff:ffff:ffff:ffff:ffff,GB 2001:6f8:1c00:8000::,2001:6f8:1c00:ffff:ffff:ffff:ffff:ffff,DE -2001:6f8:1c01::,2001:6f8:1c6e:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1c6f::,2001:6f8:1c6f:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1c6f:8000::,2001:6f8:1c8a:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1c8b::,2001:6f8:1c8b:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1c8b:8000::,2001:6f8:1cba:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1cbb::,2001:6f8:1cbb:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1cbb:8000::,2001:6f8:1cbc:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1cbd::,2001:6f8:1cbd:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1cbd:8000::,2001:6f8:1cbf:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1cc0::,2001:6f8:1cc0:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1cc0:8000::,2001:6f8:1d15:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1d16::,2001:6f8:1d16:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1d16:8000::,2001:6f8:1d23:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1d24::,2001:6f8:1d24:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1d24:8000::,2001:6f8:1d57:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:1c01::,2001:6f8:1d57:ffff:ffff:ffff:ffff:ffff,GB 2001:6f8:1d58::,2001:6f8:1d58:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1d58:8000::,2001:6f8:1d58:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1d59::,2001:6f8:1d59:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1d59:8000::,2001:6f8:1df1:ffff:ffff:ffff:ffff:ffff,GB -2001:6f8:1df2::,2001:6f8:1df2:7fff:ffff:ffff:ffff:ffff,DE -2001:6f8:1df2:8000::,2001:6f8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:6f8:1d58:8000::,2001:6f8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:700::,2001:700:ffff:ffff:ffff:ffff:ffff:ffff,NO 2001:708::,2001:708:ffff:ffff:ffff:ffff:ffff:ffff,FI 2001:710::,2001:710:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -3404,7 +2800,11 @@ 2001:7b8::,2001:7bf:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:7c0::,2001:7c7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:7c8::,2001:7c8:ffff:ffff:ffff:ffff:ffff:ffff,IE -2001:7d0::,2001:7d0:ffff:ffff:ffff:ffff:ffff:ffff,EE +2001:7d0::,2001:7d0:8508:ffff:ffff:ffff:ffff:ffff,EE +2001:7d0:8509::,2001:7d0:8509:7fff:ffff:ffff:ffff:ffff,FI +2001:7d0:8509:8000::,2001:7d0:8cc1:7fff:ffff:ffff:ffff:ffff,EE +2001:7d0:8cc1:8000::,2001:7d0:8cc1:ffff:ffff:ffff:ffff:ffff,GB +2001:7d0:8cc2::,2001:7d0:ffff:ffff:ffff:ffff:ffff:ffff,EE 2001:7d8::,2001:7d8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:7e0::,2001:7e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:7e8::,2001:7e8:ffff:ffff:ffff:ffff:ffff:ffff,LU @@ -3605,17 +3005,15 @@ 2001:888::,2001:88f:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:890::,2001:891:ffff:ffff:ffff:ffff:ffff:ffff,AT 2001:898::,2001:89f:ffff:ffff:ffff:ffff:ffff:ffff,NL -2001:8a0::,2001:8a0:5225:7fff:ffff:ffff:ffff:ffff,PT -2001:8a0:5225:8000::,2001:8a0:5225:ffff:ffff:ffff:ffff:ffff,GB -2001:8a0:5226::,2001:8a0:74c5:ffff:ffff:ffff:ffff:ffff,PT -2001:8a0:74c6::,2001:8a0:74c6:7fff:ffff:ffff:ffff:ffff,ES -2001:8a0:74c6:8000::,2001:8a0:74ea:f1ff:ffff:ffff:ffff:ffff,PT -2001:8a0:74ea:f200::,2001:8a0:74ea:f3ff:ffff:ffff:ffff:ffff,GB -2001:8a0:74ea:f400::,2001:8a0:7767:2fff:ffff:ffff:ffff:ffff,PT -2001:8a0:7767:3000::,2001:8a0:7767:3fff:ffff:ffff:ffff:ffff,GB -2001:8a0:7767:4000::,2001:8a0:7d84:7fff:ffff:ffff:ffff:ffff,PT +2001:8a0::,2001:8a0:74d7:ffff:ffff:ffff:ffff:ffff,PT +2001:8a0:74d8::,2001:8a0:74d8:7fff:ffff:ffff:ffff:ffff,GB +2001:8a0:74d8:8000::,2001:8a0:74ea:7fff:ffff:ffff:ffff:ffff,PT +2001:8a0:74ea:8000::,2001:8a0:74ea:ffff:ffff:ffff:ffff:ffff,GB +2001:8a0:74eb::,2001:8a0:7d84:7fff:ffff:ffff:ffff:ffff,PT 2001:8a0:7d84:8000::,2001:8a0:7d84:ffff:ffff:ffff:ffff:ffff,NL -2001:8a0:7d85::,2001:8a7:ffff:ffff:ffff:ffff:ffff:ffff,PT +2001:8a0:7d85::,2001:8a0:fec7:ffff:ffff:ffff:ffff:ffff,PT +2001:8a0:fec8::,2001:8a0:fec8:7fff:ffff:ffff:ffff:ffff,FR +2001:8a0:fec8:8000::,2001:8a7:ffff:ffff:ffff:ffff:ffff:ffff,PT 2001:8a8::,2001:8a8:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:8b0::,2001:8b0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:8b8::,2001:8bf:ffff:ffff:ffff:ffff:ffff:ffff,FI @@ -3628,32 +3026,18 @@ 2001:8f2::,2001:8f3:ffff:ffff:ffff:ffff:ffff:ffff,CY 2001:8f8::,2001:8ff:ffff:ffff:ffff:ffff:ffff:ffff,AE 2001:900::,2001:900:ffff:ffff:ffff:ffff:ffff:ffff,FR -2001:908::,2001:908:ffff:ffff:ffff:ffff:ffff:ffff,PL -2001:910::,2001:913:fff:ffff:ffff:ffff:ffff:ffff,FR -2001:913:1000::,2001:913:1000:7fff:ffff:ffff:ffff:ffff,BE -2001:913:1000:8000::,2001:917:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:908::,2001:90f:ffff:ffff:ffff:ffff:ffff:ffff,PL +2001:910::,2001:917:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:918::,2001:918:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:920::,2001:920:1845:ffff:ffff:ffff:ffff:ffff,GB 2001:920:1846::,2001:920:1846:7fff:ffff:ffff:ffff:ffff,DE -2001:920:1846:8000::,2001:920:186a:ffff:ffff:ffff:ffff:ffff,GB -2001:920:186b::,2001:920:186b:ffff:ffff:ffff:ffff:ffff,DE +2001:920:1846:8000::,2001:920:186b:7fff:ffff:ffff:ffff:ffff,GB +2001:920:186b:8000::,2001:920:186b:ffff:ffff:ffff:ffff:ffff,DE 2001:920:186c::,2001:920:187f:ffff:ffff:ffff:ffff:ffff,GB 2001:920:1880::,2001:920:1880:7fff:ffff:ffff:ffff:ffff,DE -2001:920:1880:8000::,2001:920:18a0:ffff:ffff:ffff:ffff:ffff,GB -2001:920:18a1::,2001:920:18a1:7fff:ffff:ffff:ffff:ffff,DE -2001:920:18a1:8000::,2001:920:18ad:ffff:ffff:ffff:ffff:ffff,GB +2001:920:1880:8000::,2001:920:18ad:ffff:ffff:ffff:ffff:ffff,GB 2001:920:18ae::,2001:920:18ae:7fff:ffff:ffff:ffff:ffff,DE -2001:920:18ae:8000::,2001:920:18bf:ffff:ffff:ffff:ffff:ffff,GB -2001:920:18c0::,2001:920:18c0:ff:ffff:ffff:ffff:ffff,DE -2001:920:18c0:100::,2001:920:18c0:ffff:ffff:ffff:ffff:ffff,GB -2001:920:18c1::,2001:920:18c1:7fff:ffff:ffff:ffff:ffff,DE -2001:920:18c1:8000::,2001:920:18ef:ffff:ffff:ffff:ffff:ffff,GB -2001:920:18f0::,2001:920:18f0:7fff:ffff:ffff:ffff:ffff,DE -2001:920:18f0:8000::,2001:920:1907:ffff:ffff:ffff:ffff:ffff,GB -2001:920:1908::,2001:920:1908:7fff:ffff:ffff:ffff:ffff,DE -2001:920:1908:8000::,2001:920:5809:ffff:ffff:ffff:ffff:ffff,GB -2001:920:580a::,2001:920:580a:7fff:ffff:ffff:ffff:ffff,ES -2001:920:580a:8000::,2001:920:5845:ffff:ffff:ffff:ffff:ffff,GB +2001:920:18ae:8000::,2001:920:5845:ffff:ffff:ffff:ffff:ffff,GB 2001:920:5846::,2001:920:5846:ffff:ffff:ffff:ffff:ffff,ES 2001:920:5847::,2001:927:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:928::,2001:928:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -3673,12 +3057,8 @@ 2001:978:2300::,2001:978:2300:7fff:ffff:ffff:ffff:ffff,GB 2001:978:2300:8000::,2001:978:29ff:ffff:ffff:ffff:ffff:ffff,DE 2001:978:2a00::,2001:978:2a00:ffff:ffff:ffff:ffff:ffff,IE -2001:978:2a01::,2001:978:3bff:ffff:ffff:ffff:ffff:ffff,DE -2001:978:3c00::,2001:978:3c00:7fff:ffff:ffff:ffff:ffff,NL -2001:978:3c00:8000::,2001:978:ffff:ffff:ffff:ffff:ffff:ffff,DE -2001:980::,2001:980:89c9:ffff:ffff:ffff:ffff:ffff,NL -2001:980:89ca::,2001:980:89ca:7fff:ffff:ffff:ffff:ffff,SG -2001:980:89ca:8000::,2001:987:ffff:ffff:ffff:ffff:ffff:ffff,NL +2001:978:2a01::,2001:978:ffff:ffff:ffff:ffff:ffff:ffff,DE +2001:980::,2001:987:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:988::,2001:988:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:990::,2001:990:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:998::,2001:99b:ffff:ffff:ffff:ffff:ffff:ffff,FI @@ -3715,9 +3095,9 @@ 2001:aa8::,2001:ab7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:ab8::,2001:ab8:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:ac0::,2001:ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES -2001:ac8::,2001:ac8:1f:ffff:ffff:ffff:ffff:ffff,GB -2001:ac8:20::,2001:ac8:20:7fff:ffff:ffff:ffff:ffff,DE -2001:ac8:20:8000::,2001:ac8:26:ffff:ffff:ffff:ffff:ffff,GB +2001:ac8::,2001:ac8:20::ffff:ffff:ffff:ffff,GB +2001:ac8:20:1::,2001:ac8:20:1:ffff:ffff:ffff:ffff,DE +2001:ac8:20:2::,2001:ac8:26:ffff:ffff:ffff:ffff:ffff,GB 2001:ac8:27::,2001:ac8:27:ffff:ffff:ffff:ffff:ffff,BE 2001:ac8:28::,2001:ac8:28:ffff:ffff:ffff:ffff:ffff,CH 2001:ac8:29::,2001:ac8:29:ffff:ffff:ffff:ffff:ffff,AT @@ -3761,9 +3141,7 @@ 2001:bf8::,2001:bf8:ffff:ffff:ffff:ffff:ffff:ffff,IL 2001:c00::,2001:c00:ffff:ffff:ffff:ffff:ffff:ffff,TH 2001:c08::,2001:c08:ffff:ffff:ffff:ffff:ffff:ffff,TW -2001:c10::,2001:c10:ff08:ffff:ffff:ffff:ffff:ffff,SG -2001:c10:ff09::,2001:c10:ff09:7fff:ffff:ffff:ffff:ffff,TW -2001:c10:ff09:8000::,2001:c10:ffff:ffff:ffff:ffff:ffff:ffff,SG +2001:c10::,2001:c10:ffff:ffff:ffff:ffff:ffff:ffff,SG 2001:c18::,2001:c18:ffff:ffff:ffff:ffff:ffff:ffff,MY 2001:c20::,2001:c20:ffff:ffff:ffff:ffff:ffff:ffff,SG 2001:c28::,2001:c28:ffff:ffff:ffff:ffff:ffff:ffff,JP @@ -3805,9 +3183,7 @@ 2001:d58::,2001:d58:ffff:ffff:ffff:ffff:ffff:ffff,TW 2001:d68::,2001:d68:ffff:ffff:ffff:ffff:ffff:ffff,ID 2001:d70::,2001:d73:ffff:ffff:ffff:ffff:ffff:ffff,JP -2001:d80::,2001:d80:e07f:ffff:ffff:ffff:ffff:ffff,JP -2001:d80:e080::,2001:d80:e080:7fff:ffff:ffff:ffff:ffff,CN -2001:d80:e080:8000::,2001:d80:ffff:ffff:ffff:ffff:ffff:ffff,JP +2001:d80::,2001:d80:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:d88::,2001:d88:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:d90::,2001:d90:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:d98::,2001:d98:ffff:ffff:ffff:ffff:ffff:ffff,SG @@ -4727,7 +4103,6 @@ 2001:df3:e600::,2001:df3:e600:ffff:ffff:ffff:ffff:ffff,ID 2001:df3:e800::,2001:df3:e800:ffff:ffff:ffff:ffff:ffff,IN 2001:df3:ea00::,2001:df3:ea00:ffff:ffff:ffff:ffff:ffff,MV -2001:df3:ec00::,2001:df3:ec00:ffff:ffff:ffff:ffff:ffff,IN 2001:df3:ee00::,2001:df3:ee00:ffff:ffff:ffff:ffff:ffff,TH 2001:df3:f000::,2001:df3:f000:ffff:ffff:ffff:ffff:ffff,ID 2001:df3:f200::,2001:df3:f200:ffff:ffff:ffff:ffff:ffff,HK @@ -4922,40 +4297,76 @@ 2001:df5:7400::,2001:df5:7400:ffff:ffff:ffff:ffff:ffff,ID 2001:df5:7600::,2001:df5:7600:ffff:ffff:ffff:ffff:ffff,ID 2001:df5:7800::,2001:df5:7800:ffff:ffff:ffff:ffff:ffff,CN +2001:df5:7a00::,2001:df5:7a00:ffff:ffff:ffff:ffff:ffff,SG 2001:df5:7c00::,2001:df5:7c00:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:7e00::,2001:df5:7e00:ffff:ffff:ffff:ffff:ffff,BD 2001:df5:8000::,2001:df5:8000:ffff:ffff:ffff:ffff:ffff,SG +2001:df5:8200::,2001:df5:8200:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:8400::,2001:df5:8400:ffff:ffff:ffff:ffff:ffff,SG +2001:df5:8600::,2001:df5:8600:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:8800::,2001:df5:8800:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:8a00::,2001:df5:8a00:ffff:ffff:ffff:ffff:ffff,VN 2001:df5:8c00::,2001:df5:8c00:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:8e00::,2001:df5:8e00:ffff:ffff:ffff:ffff:ffff,IN 2001:df5:9000::,2001:df5:9000:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:9200::,2001:df5:9200:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:9600::,2001:df5:9600:ffff:ffff:ffff:ffff:ffff,ID 2001:df5:9800::,2001:df5:9800:ffff:ffff:ffff:ffff:ffff,SG +2001:df5:9a00::,2001:df5:9a00:ffff:ffff:ffff:ffff:ffff,ID 2001:df5:9c00::,2001:df5:9c00:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:9e00::,2001:df5:9e00:ffff:ffff:ffff:ffff:ffff,IN 2001:df5:a000::,2001:df5:a000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:a200::,2001:df5:a200:ffff:ffff:ffff:ffff:ffff,IN 2001:df5:a400::,2001:df5:a400:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:a600::,2001:df5:a600:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:a800::,2001:df5:a800:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:aa00::,2001:df5:aa00:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:ac00::,2001:df5:ac00:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:ae00::,2001:df5:ae00:ffff:ffff:ffff:ffff:ffff,PH 2001:df5:b000::,2001:df5:b000:ffff:ffff:ffff:ffff:ffff,NZ +2001:df5:b200::,2001:df5:b200:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:b400::,2001:df5:b400:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:b600::,2001:df5:b600:ffff:ffff:ffff:ffff:ffff,NZ 2001:df5:b800::,2001:df5:b800:ffff:ffff:ffff:ffff:ffff,HK +2001:df5:ba00::,2001:df5:ba00:ffff:ffff:ffff:ffff:ffff,IN 2001:df5:bc00::,2001:df5:bc00:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:be00::,2001:df5:be00:ffff:ffff:ffff:ffff:ffff,VN +2001:df5:c200::,2001:df5:c200:ffff:ffff:ffff:ffff:ffff,VN 2001:df5:c400::,2001:df5:c400:ffff:ffff:ffff:ffff:ffff,TH 2001:df5:c800::,2001:df5:c800:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:ca00::,2001:df5:ca00:ffff:ffff:ffff:ffff:ffff,TH 2001:df5:cc00::,2001:df5:cc00:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:ce00::,2001:df5:ce00:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:d000::,2001:df5:d000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:d200::,2001:df5:d200:ffff:ffff:ffff:ffff:ffff,ID 2001:df5:d400::,2001:df5:d400:ffff:ffff:ffff:ffff:ffff,HK 2001:df5:d401::,2001:df5:d401:ffff:ffff:ffff:ffff:ffff,JP +2001:df5:d600::,2001:df5:d600:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:d800::,2001:df5:d800:ffff:ffff:ffff:ffff:ffff,SG +2001:df5:da00::,2001:df5:da00:ffff:ffff:ffff:ffff:ffff,PH 2001:df5:dc00::,2001:df5:dc00:ffff:ffff:ffff:ffff:ffff,SG +2001:df5:de00::,2001:df5:de00:ffff:ffff:ffff:ffff:ffff,IN 2001:df5:e000::,2001:df5:e000:ffff:ffff:ffff:ffff:ffff,MY +2001:df5:e200::,2001:df5:e200:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:e600::,2001:df5:e600:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:e800::,2001:df5:e800:ffff:ffff:ffff:ffff:ffff,PH +2001:df5:ea00::,2001:df5:ea00:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:ec00::,2001:df5:ec00:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:ee00::,2001:df5:ee00:ffff:ffff:ffff:ffff:ffff,AU 2001:df5:f000::,2001:df5:f000:ffff:ffff:ffff:ffff:ffff,ID +2001:df5:f200::,2001:df5:f200:ffff:ffff:ffff:ffff:ffff,ID 2001:df5:f400::,2001:df5:f401:ffff:ffff:ffff:ffff:ffff,AU +2001:df5:f600::,2001:df5:f600:ffff:ffff:ffff:ffff:ffff,PH 2001:df5:f800::,2001:df5:f800:ffff:ffff:ffff:ffff:ffff,SE +2001:df5:fa00::,2001:df5:fa00:ffff:ffff:ffff:ffff:ffff,FJ 2001:df5:fc00::,2001:df5:fc00:ffff:ffff:ffff:ffff:ffff,IN +2001:df5:fe00::,2001:df5:fe00:ffff:ffff:ffff:ffff:ffff,ID 2001:df6::,2001:df6:3:ffff:ffff:ffff:ffff:ffff,IN +2001:df6:200::,2001:df6:200:ffff:ffff:ffff:ffff:ffff,HK 2001:df6:400::,2001:df6:400:ffff:ffff:ffff:ffff:ffff,HK +2001:df6:600::,2001:df6:600:ffff:ffff:ffff:ffff:ffff,AU 2001:df6:800::,2001:df6:80f:ffff:ffff:ffff:ffff:ffff,HK +2001:df6:a00::,2001:df6:a00:ffff:ffff:ffff:ffff:ffff,ID 2001:df6:c00::,2001:df6:c00:ffff:ffff:ffff:ffff:ffff,TH 2001:df6:1000::,2001:df6:1000:ffff:ffff:ffff:ffff:ffff,PH 2001:df6:1400::,2001:df6:1400:ffff:ffff:ffff:ffff:ffff,AU @@ -5036,7 +4447,6 @@ 2001:df7:4c00::,2001:df7:4c00:ffff:ffff:ffff:ffff:ffff,IN 2001:df7:5000::,2001:df7:5000:ffff:ffff:ffff:ffff:ffff,IN 2001:df7:5400::,2001:df7:5400:ffff:ffff:ffff:ffff:ffff,ID -2001:df7:5800::,2001:df7:5800:ffff:ffff:ffff:ffff:ffff,AU 2001:df7:5c00::,2001:df7:5c00:ffff:ffff:ffff:ffff:ffff,HK 2001:df7:6000::,2001:df7:6000:ffff:ffff:ffff:ffff:ffff,IN 2001:df7:6400::,2001:df7:6400:ffff:ffff:ffff:ffff:ffff,MY @@ -5077,7 +4487,7 @@ 2001:df7:f800::,2001:df7:f800:ffff:ffff:ffff:ffff:ffff,IN 2001:df7:fc00::,2001:df7:fc00:ffff:ffff:ffff:ffff:ffff,SG 2001:df8::,2001:df8:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:df9::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,LK +2001:df9::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,VN 2001:dfa::,2001:dfa:ffff:ffff:ffff:ffff:ffff:ffff,JP 2001:e00::,2001:e01:ffff:ffff:ffff:ffff:ffff:ffff,ID 2001:e08::,2001:e08:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -5244,9 +4654,7 @@ 2001:146a::,2001:146a::7fff:ffff:ffff:ffff:ffff,RU 2001:146a:0:8000::,2001:146a:81:ffff:ffff:ffff:ffff:ffff,CZ 2001:146a:82::,2001:146a:82:7fff:ffff:ffff:ffff:ffff,RU -2001:146a:82:8000::,2001:146a:11c3:7fff:ffff:ffff:ffff:ffff,CZ -2001:146a:11c3:8000::,2001:146a:11c3:ffff:ffff:ffff:ffff:ffff,RU -2001:146a:11c4::,2001:146b:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2001:146a:82:8000::,2001:146b:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:146c::,2001:146c:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:146d::,2001:146e:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:146f::,2001:146f:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -5286,15 +4694,7 @@ 2001:15a8::,2001:15a8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:15b0::,2001:15b0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:15b8::,2001:15b8:ffff:ffff:ffff:ffff:ffff:ffff,NL -2001:15c0::,2001:15c0:665e:ffff:ffff:ffff:ffff:ffff,SI -2001:15c0:665f::,2001:15c0:665f:7fff:ffff:ffff:ffff:ffff,AT -2001:15c0:665f:8000::,2001:15c0:66a2:ffff:ffff:ffff:ffff:ffff,SI -2001:15c0:66a3::,2001:15c0:66a3:7fff:ffff:ffff:ffff:ffff,RO -2001:15c0:66a3:8000::,2001:15c0:67cc:ffff:ffff:ffff:ffff:ffff,SI -2001:15c0:67cd::,2001:15c0:67cd:7fff:ffff:ffff:ffff:ffff,AT -2001:15c0:67cd:8000::,2001:15c0:67d0:ffff:ffff:ffff:ffff:ffff,SI -2001:15c0:67d1::,2001:15c0:67d1:7fff:ffff:ffff:ffff:ffff,AT -2001:15c0:67d1:8000::,2001:15c7:ffff:ffff:ffff:ffff:ffff:ffff,SI +2001:15c0::,2001:15c7:ffff:ffff:ffff:ffff:ffff:ffff,SI 2001:15c8::,2001:15c8:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:15d8::,2001:15df:ffff:ffff:ffff:ffff:ffff:ffff,PT 2001:15e0::,2001:15e0:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -5319,47 +4719,19 @@ 2001:1688::,2001:168f:ffff:ffff:ffff:ffff:ffff:ffff,SI 2001:1690::,2001:1690:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:1698::,2001:1698:ffff:ffff:ffff:ffff:ffff:ffff,LU -2001:16a0::,2001:16a2:a49:ffff:ffff:ffff:ffff:ffff,SA -2001:16a2:a4a::,2001:16a2:a4a:7fff:ffff:ffff:ffff:ffff,US -2001:16a2:a4a:8000::,2001:16a2:4393:7fff:ffff:ffff:ffff:ffff,SA -2001:16a2:4393:8000::,2001:16a2:4393:ffff:ffff:ffff:ffff:ffff,GB -2001:16a2:4394::,2001:16a2:4802:7fff:ffff:ffff:ffff:ffff,SA -2001:16a2:4802:8000::,2001:16a2:4802:ffff:ffff:ffff:ffff:ffff,US -2001:16a2:4803::,2001:16a2:8304:7fff:ffff:ffff:ffff:ffff,SA -2001:16a2:8304:8000::,2001:16a2:8304:ffff:ffff:ffff:ffff:ffff,CA -2001:16a2:8305::,2001:16a2:87f3:ffff:ffff:ffff:ffff:ffff,SA -2001:16a2:87f4::,2001:16a2:87f4:7fff:ffff:ffff:ffff:ffff,GB -2001:16a2:87f4:8000::,2001:16a2:8a3d:ffff:ffff:ffff:ffff:ffff,SA -2001:16a2:8a3e::,2001:16a2:8a3e:7fff:ffff:ffff:ffff:ffff,GB -2001:16a2:8a3e:8000::,2001:16a2:a5bf:7fff:ffff:ffff:ffff:ffff,SA -2001:16a2:a5bf:8000::,2001:16a2:a5bf:ffff:ffff:ffff:ffff:ffff,GB -2001:16a2:a5c0::,2001:16a7:ffff:ffff:ffff:ffff:ffff:ffff,SA +2001:16a0::,2001:16a7:ffff:ffff:ffff:ffff:ffff:ffff,SA 2001:16a8::,2001:16a8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2001:16b0::,2001:16b0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2001:16b8::,2001:16b8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:16c0::,2001:16c7:ffff:ffff:ffff:ffff:ffff:ffff,IR 2001:16d0::,2001:16d0:ffff:ffff:ffff:ffff:ffff:ffff,IT -2001:16d8::,2001:16d8:dcff:ffff:ffff:ffff:ffff:ffff,SE -2001:16d8:dd00::,2001:16d8:dd00:ffff:ffff:ffff:ffff:ffff,DK +2001:16d8::,2001:16d8:dd00:7fff:ffff:ffff:ffff:ffff,SE +2001:16d8:dd00:8000::,2001:16d8:dd00:ffff:ffff:ffff:ffff:ffff,DK 2001:16d8:dd01::,2001:16d8:dd43:ffff:ffff:ffff:ffff:ffff,SE 2001:16d8:dd44::,2001:16d8:dd44:7fff:ffff:ffff:ffff:ffff,DK -2001:16d8:dd44:8000::,2001:16d8:dd72:ffff:ffff:ffff:ffff:ffff,SE -2001:16d8:dd73::,2001:16d8:dd73:7fff:ffff:ffff:ffff:ffff,DK -2001:16d8:dd73:8000::,2001:16d8:dd84:ffff:ffff:ffff:ffff:ffff,SE -2001:16d8:dd85::,2001:16d8:dd85:7fff:ffff:ffff:ffff:ffff,DK -2001:16d8:dd85:8000::,2001:16d8:dd94:ffff:ffff:ffff:ffff:ffff,SE -2001:16d8:dd95::,2001:16d8:dd95:7fff:ffff:ffff:ffff:ffff,DK -2001:16d8:dd95:8000::,2001:16d8:dda3:ffff:ffff:ffff:ffff:ffff,SE +2001:16d8:dd44:8000::,2001:16d8:dda3:ffff:ffff:ffff:ffff:ffff,SE 2001:16d8:dda4::,2001:16d8:dda4:7fff:ffff:ffff:ffff:ffff,DK -2001:16d8:dda4:8000::,2001:16d8:ddc1:ffff:ffff:ffff:ffff:ffff,SE -2001:16d8:ddc2::,2001:16d8:ddc2:7fff:ffff:ffff:ffff:ffff,DK -2001:16d8:ddc2:8000::,2001:16d8:dde0:ffff:ffff:ffff:ffff:ffff,SE -2001:16d8:dde1::,2001:16d8:dde1:7fff:ffff:ffff:ffff:ffff,DK -2001:16d8:dde1:8000::,2001:16d8:ee8f:7fff:ffff:ffff:ffff:ffff,SE -2001:16d8:ee8f:8000::,2001:16d8:ee8f:ffff:ffff:ffff:ffff:ffff,NO -2001:16d8:ee90::,2001:16d8:eeca:ffff:ffff:ffff:ffff:ffff,SE -2001:16d8:eecb::,2001:16d8:eecb:7fff:ffff:ffff:ffff:ffff,NO -2001:16d8:eecb:8000::,2001:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE +2001:16d8:dda4:8000::,2001:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE 2001:16e0::,2001:16e7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:16e8::,2001:16e8:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:16f0::,2001:16f7:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -5427,19 +4799,17 @@ 2001:19d8::,2001:19d8:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:19e0::,2001:19e0:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:19e8::,2001:19e8:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:19f0::,2001:19f0:43ff:ffff:ffff:ffff:ffff:ffff,US -2001:19f0:4400::,2001:19f0:4400:7fff:ffff:ffff:ffff:ffff,SG -2001:19f0:4400:8000::,2001:19f0:5000:7fff:ffff:ffff:ffff:ffff,US +2001:19f0::,2001:19f0:5000:7fff:ffff:ffff:ffff:ffff,US 2001:19f0:5000:8000::,2001:19f0:5001:7fff:ffff:ffff:ffff:ffff,NL 2001:19f0:5001:8000::,2001:19f0:5800:7fff:ffff:ffff:ffff:ffff,US -2001:19f0:5800:8000::,2001:19f0:5801:7fff:ffff:ffff:ffff:ffff,AU -2001:19f0:5801:8000::,2001:19f0:6800:7fff:ffff:ffff:ffff:ffff,US -2001:19f0:6800:8000::,2001:19f0:6801:7fff:ffff:ffff:ffff:ffff,FR -2001:19f0:6801:8000::,2001:19f0:6c00:7fff:ffff:ffff:ffff:ffff,US -2001:19f0:6c00:8000::,2001:19f0:6c01:7fff:ffff:ffff:ffff:ffff,DE -2001:19f0:6c01:8000::,2001:19f0:7000:7fff:ffff:ffff:ffff:ffff,US -2001:19f0:7000:8000::,2001:19f0:7000:ffff:ffff:ffff:ffff:ffff,JP -2001:19f0:7001::,2001:19f0:7400:7fff:ffff:ffff:ffff:ffff,US +2001:19f0:5800:8000::,2001:19f0:5800:8fff:ffff:ffff:ffff:ffff,AU +2001:19f0:5800:9000::,2001:19f0:67ff:ffff:ffff:ffff:ffff:ffff,US +2001:19f0:6800::,2001:19f0:6800:7fff:ffff:ffff:ffff:ffff,FR +2001:19f0:6800:8000::,2001:19f0:6c00:7fff:ffff:ffff:ffff:ffff,US +2001:19f0:6c00:8000::,2001:19f0:6c00:ffff:ffff:ffff:ffff:ffff,DE +2001:19f0:6c01::,2001:19f0:7000:7fff:ffff:ffff:ffff:ffff,US +2001:19f0:7000:8000::,2001:19f0:7001:7fff:ffff:ffff:ffff:ffff,JP +2001:19f0:7001:8000::,2001:19f0:7400:7fff:ffff:ffff:ffff:ffff,US 2001:19f0:7400:8000::,2001:19f0:7400:ffff:ffff:ffff:ffff:ffff,GB 2001:19f0:7401::,2001:19f0:7401:7fff:ffff:ffff:ffff:ffff,US 2001:19f0:7401:8000::,2001:19f0:7402:7fff:ffff:ffff:ffff:ffff,GB @@ -5510,218 +4880,110 @@ 2001:1bf0::,2001:1bf7:ffff:ffff:ffff:ffff:ffff:ffff,EE 2001:1bf8::,2001:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,LV 2001:1c00::,2001:1dff:ffff:ffff:ffff:ffff:ffff:ffff,NL -2001:2002:2f8:8000::,2001:2002:2f9:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:3e14::,2001:2002:3e14:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:2f8::,2001:2002:2f8:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:3e14:8000::,2001:2002:3e14:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:4e42::,2001:2002:4e42:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:4e43::,2001:2002:4e43:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:4e44:8000::,2001:2002:4e46:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:4e47:8000::,2001:2002:4e48:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:4e49::,2001:2002:4e49:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:51e0::,2001:2002:51e1:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:51e2::,2001:2002:51e4:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:51e5::,2001:2002:51e5:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:51e7::,2001:2002:51e7:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:51e8:8000::,2001:2002:51e8:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:51e9:8000::,2001:2002:51eb:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:51ec::,2001:2002:51ec:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:5ae0::,2001:2002:5ae0:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:5ae2::,2001:2002:5ae3:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:5ae4:8000::,2001:2002:5ae4:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:4e44:8000::,2001:2002:4e45:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:4e46::,2001:2002:4e46:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:4e48::,2001:2002:4e48:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:4e49::,2001:2002:4e49:9fff:ffff:ffff:ffff:ffff,SE +2001:2002:51e0::,2001:2002:51e0:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:51e1:8000::,2001:2002:51e2:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:51e5::,2001:2002:51e5:bfff:ffff:ffff:ffff:ffff,SE +2001:2002:51e6:8000::,2001:2002:51e6:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:51e7:8000::,2001:2002:51e8:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:51e9:8000::,2001:2002:51ec:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:51ed:8000::,2001:2002:51ed:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:5ae0::,2001:2002:5ae0:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:5ae2:8000::,2001:2002:5ae3:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:5ae5:8000::,2001:2002:5ae6:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:5ae7:8000::,2001:2002:5ae7:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:5cfe:8000::,2001:2002:5cfe:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:c2ec:8000::,2001:2002:c2ec:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:c343::,2001:2002:c343:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:c3c6::,2001:2002:c3c6:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:c3fc::,2001:2002:c3fc:7fff:ffff:ffff:ffff:ffff,SE 2001:2002:d4b5:8000::,2001:2002:d4b5:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:d540::,2001:2002:d541:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:d542::,2001:2002:d543:7fff:ffff:ffff:ffff:ffff,SE -2001:2002:d9d0::,2001:2002:d9d0:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:d9d1:8000::,2001:2002:d9d2:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:d9d3:8000::,2001:2002:d9d3:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:d540::,2001:2002:d540:ffff:ffff:ffff:ffff:ffff,SE +2001:2002:d541:8000::,2001:2002:d542:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:d543::,2001:2002:d543:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:d9d0::,2001:2002:d9d0:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:d9d0:c000::,2001:2002:d9d1:7fff:ffff:ffff:ffff:ffff,SE +2001:2002:d9d2::,2001:2002:d9d3:ffff:ffff:ffff:ffff:ffff,SE 2001:2002:d9d4:8000::,2001:2002:d9d4:ffff:ffff:ffff:ffff:ffff,SE -2001:2002:d9d7::,2001:2002:d9d7:7fff:ffff:ffff:ffff:ffff,SE 2001:2003:50dc::,2001:2003:50dc:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:50dd::,2001:2003:50de:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:54f8:8000::,2001:2003:54fb:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:58c0::,2001:2003:58c0:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:58c1::,2001:2003:58c1:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:58c3::,2001:2003:58c3:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f01f::,2001:2003:f01f:7fff:ffff:ffff:ffff:ffff,FI +2001:2003:54f9::,2001:2003:54f9:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f041:8000::,2001:2003:f041:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f042:8000::,2001:2003:f042:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f046::,2001:2003:f046:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f04a:8000::,2001:2003:f04a:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f05b:8000::,2001:2003:f05b:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f05d:8000::,2001:2003:f05d:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f06b:8000::,2001:2003:f06c:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f072:8000::,2001:2003:f072:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f076:8000::,2001:2003:f076:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f0a5::,2001:2003:f0a5:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f0ab::,2001:2003:f0ab:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f0b6::,2001:2003:f0b6:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f0c8:8000::,2001:2003:f0c8:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f0e5:8000::,2001:2003:f0e5:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f0f2:8000::,2001:2003:f0f2:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f0f5:8000::,2001:2003:f0f5:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f13d:8000::,2001:2003:f13d:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f19b::,2001:2003:f19b:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f19c:8000::,2001:2003:f19c:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f21a::,2001:2003:f21a:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f22c::,2001:2003:f22c:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f22f::,2001:2003:f22f:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f237::,2001:2003:f237:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f23d::,2001:2003:f23d:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f250:8000::,2001:2003:f250:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f258:8000::,2001:2003:f258:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f263:8000::,2001:2003:f263:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f269:8000::,2001:2003:f269:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f294::,2001:2003:f294:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f29d:8000::,2001:2003:f29d:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f2c3:8000::,2001:2003:f2c3:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f2fb::,2001:2003:f2fb:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f306:8000::,2001:2003:f306:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f324::,2001:2003:f324:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f357:8000::,2001:2003:f357:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f368:8000::,2001:2003:f368:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f36f::,2001:2003:f36f:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f37d:8000::,2001:2003:f37d:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f386::,2001:2003:f386:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f388::,2001:2003:f388:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f38a::,2001:2003:f38a:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f39b:8000::,2001:2003:f39b:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f3b5:8000::,2001:2003:f3b5:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f3be:8000::,2001:2003:f3be:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f3d6:8000::,2001:2003:f3d7:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f3fb:8000::,2001:2003:f3fb:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f423:8000::,2001:2003:f423:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f441::,2001:2003:f442:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f447::,2001:2003:f447:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f44a:8000::,2001:2003:f44a:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f44e::,2001:2003:f44e:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f45a::,2001:2003:f45a:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f464:8000::,2001:2003:f464:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f468:8000::,2001:2003:f469:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f46d:8000::,2001:2003:f46d:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f476::,2001:2003:f476:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f48c:8000::,2001:2003:f48c:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f496:8000::,2001:2003:f496:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f4a6:8000::,2001:2003:f4a6:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f4c0:8000::,2001:2003:f4c0:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f4d9::,2001:2003:f4d9:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f4f4:8000::,2001:2003:f4f4:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f543::,2001:2003:f543:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f5bd::,2001:2003:f5bd:7fff:ffff:ffff:ffff:ffff,FI +2001:2003:f441:8000::,2001:2003:f441:ffff:ffff:ffff:ffff:ffff,FI +2001:2003:f468:8000::,2001:2003:f468:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f5c1:8000::,2001:2003:f5c1:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f5cf::,2001:2003:f5cf:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f5dc::,2001:2003:f5dc:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f603:8000::,2001:2003:f603:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f604:8000::,2001:2003:f604:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f607:8000::,2001:2003:f607:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f617::,2001:2003:f617:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f61a::,2001:2003:f61a:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f620::,2001:2003:f620:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f627:8000::,2001:2003:f627:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f639::,2001:2003:f639:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f63a:8000::,2001:2003:f63a:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f64e::,2001:2003:f64e:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f65e:8000::,2001:2003:f65e:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f662::,2001:2003:f662:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f67c:8000::,2001:2003:f67c:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f6a3:8000::,2001:2003:f6a3:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f6a9:8000::,2001:2003:f6a9:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f6ba::,2001:2003:f6ba:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f6da::,2001:2003:f6da:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f701:8000::,2001:2003:f701:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f726:8000::,2001:2003:f726:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f72a::,2001:2003:f72a:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f72c:8000::,2001:2003:f72c:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f744:8000::,2001:2003:f744:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f764::,2001:2003:f764:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f786::,2001:2003:f786:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f793::,2001:2003:f793:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f798:8000::,2001:2003:f798:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f7a3:8000::,2001:2003:f7a3:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f800::,2001:2003:f800:7fff:ffff:ffff:ffff:ffff,FI 2001:2003:f802::,2001:2003:f802:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f803:8000::,2001:2003:f803:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f81d:8000::,2001:2003:f81d:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f824::,2001:2003:f824:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f825:8000::,2001:2003:f826:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f82f:8000::,2001:2003:f82f:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f839::,2001:2003:f839:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f83c::,2001:2003:f83c:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f843:8000::,2001:2003:f843:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f849::,2001:2003:f849:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f881::,2001:2003:f881:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f882:8000::,2001:2003:f882:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f8c3:8000::,2001:2003:f8c3:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f8d4::,2001:2003:f8d4:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f8f6::,2001:2003:f8f6:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f8f9:8000::,2001:2003:f8f9:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f8ff:8000::,2001:2003:f8ff:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f969:8000::,2001:2003:f969:ffff:ffff:ffff:ffff:ffff,FI +2001:2003:f825:8000::,2001:2003:f825:ffff:ffff:ffff:ffff:ffff,FI +2001:2003:f8f6:8000::,2001:2003:f8f6:ffff:ffff:ffff:ffff:ffff,FI 2001:2003:f96e::,2001:2003:f96e:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f9b8:8000::,2001:2003:f9b8:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f9e0::,2001:2003:f9e0:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f9e1::,2001:2003:f9e1:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:f9e7:8000::,2001:2003:f9e7:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f9eb:8000::,2001:2003:f9eb:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:f9f1::,2001:2003:f9f1:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:fa17::,2001:2003:fa17:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:fa67::,2001:2003:fa67:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:fa6f:8000::,2001:2003:fa6f:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:fa91:8000::,2001:2003:fa91:ffff:ffff:ffff:ffff:ffff,FI -2001:2003:faf1::,2001:2003:faf1:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:faf7::,2001:2003:faf7:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:faf9::,2001:2003:faf9:7fff:ffff:ffff:ffff:ffff,FI -2001:2003:fb4b::,2001:2003:fb4b:7fff:ffff:ffff:ffff:ffff,FI -2001:2010:d001::,2001:2010:d001:7fff:ffff:ffff:ffff:ffff,DK -2001:2010:d002::,2001:2010:d007:7fff:ffff:ffff:ffff:ffff,DK -2001:2010:d009::,2001:2010:d00a:ffff:ffff:ffff:ffff:ffff,DK -2001:2010:d00b:8000::,2001:2010:d00c:7fff:ffff:ffff:ffff:ffff,DK -2001:2010:d00d::,2001:2010:d00d:7fff:ffff:ffff:ffff:ffff,DK +2001:2010:d002::,2001:2010:d002:7fff:ffff:ffff:ffff:ffff,DK +2001:2010:d003::,2001:2010:d004:7fff:ffff:ffff:ffff:ffff,DK +2001:2010:d007::,2001:2010:d007:7fff:ffff:ffff:ffff:ffff,DK +2001:2010:d00a:8000::,2001:2010:d00a:ffff:ffff:ffff:ffff:ffff,DK +2001:2010:d00c::,2001:2010:d00c:7fff:ffff:ffff:ffff:ffff,DK 2001:2010:d00e::,2001:2010:d00e:7fff:ffff:ffff:ffff:ffff,DK -2001:2010:d00f:8000::,2001:2010:d00f:ffff:ffff:ffff:ffff:ffff,DK -2001:2010:d012:8000::,2001:2010:d014:ffff:ffff:ffff:ffff:ffff,DK -2001:2010:d01a:8000::,2001:2010:d01c:ffff:ffff:ffff:ffff:ffff,DK -2001:2010:d01f:8000::,2001:2010:d01f:ffff:ffff:ffff:ffff:ffff,DK -2001:2010:d023:8000::,2001:2010:d023:ffff:ffff:ffff:ffff:ffff,DK -2001:2010:d029::,2001:2010:d029:7fff:ffff:ffff:ffff:ffff,DK -2001:2010:d038:8000::,2001:2010:d038:ffff:ffff:ffff:ffff:ffff,DK -2001:2010:d03a:8000::,2001:2010:d03a:ffff:ffff:ffff:ffff:ffff,DK +2001:2010:d01c:8000::,2001:2010:d01c:ffff:ffff:ffff:ffff:ffff,DK 2001:2010:d04e:8000::,2001:2010:d04e:ffff:ffff:ffff:ffff:ffff,DK 2001:2011:c002::,2001:2011:c002:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:1::,2001:2012:1:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:100::,2001:2012:103:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:104:8000::,2001:2012:118:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:119::,2001:2012:119:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:11a::,2001:2012:11a:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:200::,2001:2012:215:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:216::,2001:2012:216:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:217::,2001:2012:217:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:218:8000::,2001:2012:21a:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:21b:8000::,2001:2012:21b:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:1100::,2001:2012:1113:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:1114::,2001:2012:1114:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:1115::,2001:2012:1115:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:1116::,2001:2012:1116:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:1117:8000::,2001:2012:1118:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:1119:8000::,2001:2012:1119:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:111b::,2001:2012:111b:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:1200::,2001:2012:1214:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:1215::,2001:2012:1218:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:121a::,2001:2012:121a:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:121b:8000::,2001:2012:121c:7fff:ffff:ffff:ffff:ffff,DK -2001:2012:3ec6::,2001:2012:3ec7:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:101::,2001:2012:101:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:103::,2001:2012:103:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:104:8000::,2001:2012:105:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:106::,2001:2012:106:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:108::,2001:2012:108:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:109::,2001:2012:10a:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:10c::,2001:2012:10c:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:10d:8000::,2001:2012:10d:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:10f:8000::,2001:2012:110:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:111:8000::,2001:2012:112:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:202::,2001:2012:202:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:203:8000::,2001:2012:204:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:206:8000::,2001:2012:206:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:207:8000::,2001:2012:207:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:20b:8000::,2001:2012:20b:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:20d:8000::,2001:2012:20d:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:20e:8000::,2001:2012:20e:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:210:8000::,2001:2012:210:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:1100:8000::,2001:2012:1100:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:1102::,2001:2012:1102:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:1103:8000::,2001:2012:1103:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:1105::,2001:2012:1105:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:1106::,2001:2012:1106:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:1107::,2001:2012:1107:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:1108::,2001:2012:1108:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:1109::,2001:2012:1109:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:110a::,2001:2012:110a:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:110b::,2001:2012:110c:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:110d:8000::,2001:2012:110d:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:110e:8000::,2001:2012:110e:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:1110:8000::,2001:2012:1111:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:1201::,2001:2012:1201:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:1203::,2001:2012:1203:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:1205::,2001:2012:1205:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:1206:8000::,2001:2012:1206:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:120a:8000::,2001:2012:120b:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:120c::,2001:2012:120c:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:120e::,2001:2012:120e:7fff:ffff:ffff:ffff:ffff,DK +2001:2012:1210:8000::,2001:2012:1210:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:3ec6::,2001:2012:3ec6:ffff:ffff:ffff:ffff:ffff,DK +2001:2012:3ec7:8000::,2001:2012:3ec7:ffff:ffff:ffff:ffff:ffff,DK 2001:2012:c213:8000::,2001:2012:c213:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:c2ff::,2001:2012:c2ff:ffff:ffff:ffff:ffff:ffff,DK -2001:2012:d94a:8000::,2001:2012:d94a:ffff:ffff:ffff:ffff:ffff,DK 2001:2040:4b::,2001:2040:4b:ffff:ffff:ffff:ffff:ffff,SE 2001:2040:c006::,2001:2040:c006:ffff:ffff:ffff:ffff:ffff,SE -2001:2060:41::,2001:2060:41:7fff:ffff:ffff:ffff:ffff,FI 2001:2060:49::,2001:2060:49:7fff:ffff:ffff:ffff:ffff,FI -2001:2060:5b:8000::,2001:2060:5b:ffff:ffff:ffff:ffff:ffff,FI 2001:2060:bffb::,2001:2060:bffb:ffff:ffff:ffff:ffff:ffff,FI 2001:4000::,2001:4000:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:4010::,2001:4010:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -5790,9 +5052,7 @@ 2001:4218::,2001:4218:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2001:4220::,2001:4220:ffff:ffff:ffff:ffff:ffff:ffff,EG 2001:4228::,2001:4228:ffff:ffff:ffff:ffff:ffff:ffff,SD -2001:4238::,2001:4238:2881:ffff:ffff:ffff:ffff:ffff,MU -2001:4238:2882::,2001:4238:2882:7fff:ffff:ffff:ffff:ffff,KE -2001:4238:2882:8000::,2001:4238:ffff:ffff:ffff:ffff:ffff:ffff,MU +2001:4238::,2001:4238:ffff:ffff:ffff:ffff:ffff:ffff,MU 2001:4240::,2001:4240:ffff:ffff:ffff:ffff:ffff:ffff,TZ 2001:4248::,2001:4248:ffff:ffff:ffff:ffff:ffff:ffff,MU 2001:4250::,2001:4250:ffff:ffff:ffff:ffff:ffff:ffff,AO @@ -5896,7 +5156,7 @@ 2001:43f8:380::,2001:43f8:380:ffff:ffff:ffff:ffff:ffff,MW 2001:43f8:390::,2001:43f8:391:ffff:ffff:ffff:ffff:ffff,AO 2001:43f8:3b0::,2001:43f8:3b0:ffff:ffff:ffff:ffff:ffff,NA -2001:43f8:3c0::,2001:43f8:3c0:ffff:ffff:ffff:ffff:ffff,CD +2001:43f8:3c0::,2001:43f8:3c1:ffff:ffff:ffff:ffff:ffff,CD 2001:43f8:3d0::,2001:43f8:3d0:ffff:ffff:ffff:ffff:ffff,BF 2001:43f8:3e0::,2001:43f8:3ef:ffff:ffff:ffff:ffff:ffff,ZA 2001:43f8:400::,2001:43f8:4ff:ffff:ffff:ffff:ffff:ffff,AO @@ -5976,7 +5236,7 @@ 2001:43f8:bf0::,2001:43f8:bf0:ffff:ffff:ffff:ffff:ffff,ZA 2001:43f8:c00::,2001:43f8:c00:ffff:ffff:ffff:ffff:ffff,GH 2001:43f8:c10::,2001:43f8:c10:ffff:ffff:ffff:ffff:ffff,CG -2001:43f8:a700::,2001:43f8:a70f:ffff:ffff:ffff:ffff:ffff,MU +2001:43f8:c20::,2001:43f8:c20:ffff:ffff:ffff:ffff:ffff,KE 2001:4400::,2001:4403:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2001:4408::,2001:4408:ffff:ffff:ffff:ffff:ffff:ffff,IN 2001:4410::,2001:4410:ffff:ffff:ffff:ffff:ffff:ffff,NZ @@ -6014,17 +5274,11 @@ 2001:4810::,2001:4810:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:4818::,2001:4818:ffff:ffff:ffff:ffff:ffff:ffff,CA 2001:4828::,2001:4828:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:4830::,2001:4830:10ff:ffff:ffff:ffff:ffff:ffff,US -2001:4830:1100::,2001:4830:1100:7fff:ffff:ffff:ffff:ffff,CA -2001:4830:1100:8000::,2001:4830:1200:7fff:ffff:ffff:ffff:ffff,US +2001:4830::,2001:4830:1200:7fff:ffff:ffff:ffff:ffff,US 2001:4830:1200:8000::,2001:4830:1200:ffff:ffff:ffff:ffff:ffff,AU 2001:4830:1201::,2001:4830:1207:ffff:ffff:ffff:ffff:ffff,US 2001:4830:1208::,2001:4830:1208:7fff:ffff:ffff:ffff:ffff,AU -2001:4830:1208:8000::,2001:4830:1212:ffff:ffff:ffff:ffff:ffff,US -2001:4830:1213::,2001:4830:1213:7fff:ffff:ffff:ffff:ffff,AU -2001:4830:1213:8000::,2001:4830:1216:ffff:ffff:ffff:ffff:ffff,US -2001:4830:1217::,2001:4830:1217:7fff:ffff:ffff:ffff:ffff,AU -2001:4830:1217:8000::,2001:4830:121d:ffff:ffff:ffff:ffff:ffff,US +2001:4830:1208:8000::,2001:4830:121d:ffff:ffff:ffff:ffff:ffff,US 2001:4830:121e::,2001:4830:121e:ffff:ffff:ffff:ffff:ffff,AU 2001:4830:121f::,2001:4830:600f:ffff:ffff:ffff:ffff:ffff,US 2001:4830:6010::,2001:4830:601f:ffff:ffff:ffff:ffff:ffff,GB @@ -6039,34 +5293,16 @@ 2001:4870::,2001:4871:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:4878::,2001:4878:8203:ffff:ffff:ffff:ffff:ffff,US 2001:4878:8204::,2001:4878:8204:7fff:ffff:ffff:ffff:ffff,DE -2001:4878:8204:8000::,2001:4878:8215:ffff:ffff:ffff:ffff:ffff,US -2001:4878:8216::,2001:4878:8216:7fff:ffff:ffff:ffff:ffff,FR -2001:4878:8216:8000::,2001:4878:8216:ffff:ffff:ffff:ffff:ffff,US +2001:4878:8204:8000::,2001:4878:8216:ffff:ffff:ffff:ffff:ffff,US 2001:4878:8217::,2001:4878:8217:7fff:ffff:ffff:ffff:ffff,ES -2001:4878:8217:8000::,2001:4878:821f:ffff:ffff:ffff:ffff:ffff,US -2001:4878:8220::,2001:4878:8220:7fff:ffff:ffff:ffff:ffff,SE -2001:4878:8220:8000::,2001:4878:8224:ffff:ffff:ffff:ffff:ffff,US +2001:4878:8217:8000::,2001:4878:8224:ffff:ffff:ffff:ffff:ffff,US 2001:4878:8225::,2001:4878:8225:7fff:ffff:ffff:ffff:ffff,PL 2001:4878:8225:8000::,2001:4878:8227:ffff:ffff:ffff:ffff:ffff,US 2001:4878:8228::,2001:4878:8228:7fff:ffff:ffff:ffff:ffff,IL -2001:4878:8228:8000::,2001:4878:8233:ffff:ffff:ffff:ffff:ffff,US -2001:4878:8234::,2001:4878:8234:7fff:ffff:ffff:ffff:ffff,GB -2001:4878:8234:8000::,2001:4878:8241:ffff:ffff:ffff:ffff:ffff,US -2001:4878:8242::,2001:4878:8242:7fff:ffff:ffff:ffff:ffff,NL -2001:4878:8242:8000::,2001:4878:8245:ffff:ffff:ffff:ffff:ffff,US -2001:4878:8246::,2001:4878:8246:7fff:ffff:ffff:ffff:ffff,DK -2001:4878:8246:8000::,2001:4878:8304:ffff:ffff:ffff:ffff:ffff,US -2001:4878:8305::,2001:4878:8305:7fff:ffff:ffff:ffff:ffff,IN -2001:4878:8305:8000::,2001:4878:8320:ffff:ffff:ffff:ffff:ffff,US -2001:4878:8321::,2001:4878:8321:7fff:ffff:ffff:ffff:ffff,SG -2001:4878:8321:8000::,2001:4878:8321:ffff:ffff:ffff:ffff:ffff,US -2001:4878:8322::,2001:4878:8322:7fff:ffff:ffff:ffff:ffff,JP -2001:4878:8322:8000::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US +2001:4878:8228:8000::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:4888::,2001:4888:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:4890::,2001:4890:ffff:ffff:ffff:ffff:ffff:ffff,US -2001:4898::,2001:4898:de07:ffff:ffff:ffff:ffff:ffff,US -2001:4898:de08::,2001:4898:de08:7fff:ffff:ffff:ffff:ffff,BR -2001:4898:de08:8000::,2001:4898:e80f:ffff:ffff:ffff:ffff:ffff,US +2001:4898::,2001:4898:e80f:ffff:ffff:ffff:ffff:ffff,US 2001:4898:e810::,2001:4898:e810:7fff:ffff:ffff:ffff:ffff,BR 2001:4898:e810:8000::,2001:489a:ffff:ffff:ffff:ffff:ffff:ffff,US 2001:48a0::,2001:48a0:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -6165,9 +5401,7 @@ 2001:4b80::,2001:4b87:ffff:ffff:ffff:ffff:ffff:ffff,NO 2001:4b88::,2001:4b88:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4b90::,2001:4b90:ffff:ffff:ffff:ffff:ffff:ffff,FR -2001:4b98::,2001:4b98:dc2:7fff:ffff:ffff:ffff:ffff,FR -2001:4b98:dc2:8000::,2001:4b98:dc2:ffff:ffff:ffff:ffff:ffff,LU -2001:4b98:dc3::,2001:4b9f:ffff:ffff:ffff:ffff:ffff:ffff,FR +2001:4b98::,2001:4b9f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2001:4ba0::,2001:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2001:4ba8::,2001:4baf:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:4bb0::,2001:4bb0:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -6181,14 +5415,14 @@ 2001:4bf0::,2001:4bf0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:4bf8::,2001:4bf8:ffff:ffff:ffff:ffff:ffff:ffff,CH 2001:4c00::,2001:4c07:ffff:ffff:ffff:ffff:ffff:ffff,IT -2001:4c08::,2001:4c08:2000:ffff:ffff:ffff:ffff:ffff,GB -2001:4c08:2001::,2001:4c08:2001:7fff:ffff:ffff:ffff:ffff,NL -2001:4c08:2001:8000::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB +2001:4c08::,2001:4c08:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:4c10::,2001:4c10:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:4c20::,2001:4c20:ffff:ffff:ffff:ffff:ffff:ffff,GB 2001:4c28::,2001:4c28::ffff:ffff:ffff:ffff:ffff,NO 2001:4c28:1::,2001:4c28:1:7fff:ffff:ffff:ffff:ffff,RU -2001:4c28:1:8000::,2001:4c28:3000:632:107:167:111:91,NO +2001:4c28:1:8000::,2001:4c28:193:ffff:ffff:ffff:ffff:ffff,NO +2001:4c28:194::,2001:4c28:194:7fff:ffff:ffff:ffff:ffff,US +2001:4c28:194:8000::,2001:4c28:3000:632:107:167:111:91,NO 2001:4c28:3000:632:107:167:111:92,2001:4c28:3000:632:107:167:111:92,IN 2001:4c28:3000:632:107:167:111:93,2001:4c28:ffff:ffff:ffff:ffff:ffff:ffff,NO 2001:4c30::,2001:4c30:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -6242,41 +5476,12 @@ 2001:4de0::,2001:4de0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2001:4de8::,2001:4de8:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2001:4df0::,2001:4df0:ffff:ffff:ffff:ffff:ffff:ffff,IL -2001:5100:204::,2001:5100:204:7fff:ffff:ffff:ffff:ffff,GB 2001:8000::,2001:8fff:ffff:ffff:ffff:ffff:ffff:ffff,AU 2001:a000::,2001:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,JP -2001:b000::,2001:b011:380a:ffff:ffff:ffff:ffff:ffff,TW -2001:b011:380b::,2001:b011:380b:7fff:ffff:ffff:ffff:ffff,US -2001:b011:380b:8000::,2001:b7ff:ffff:ffff:ffff:ffff:ffff:ffff,TW +2001:b000::,2001:b7ff:ffff:ffff:ffff:ffff:ffff:ffff,TW 2003::,2003:45:2d04:7fff:ffff:ffff:ffff:ffff,DE 2003:45:2d04:8000::,2003:45:2d04:ffff:ffff:ffff:ffff:ffff,TR -2003:45:2d05::,2003:45:2d36:7fff:ffff:ffff:ffff:ffff,DE -2003:45:2d36:8000::,2003:45:2d36:ffff:ffff:ffff:ffff:ffff,TR -2003:45:2d37::,2003:4a:af14:7fff:ffff:ffff:ffff:ffff,DE -2003:4a:af14:8000::,2003:4a:af14:ffff:ffff:ffff:ffff:ffff,TR -2003:4a:af15::,2003:4a:af2b:7fff:ffff:ffff:ffff:ffff,DE -2003:4a:af2b:8000::,2003:4a:af2b:ffff:ffff:ffff:ffff:ffff,TR -2003:4a:af2c::,2003:4a:af4e:7fff:ffff:ffff:ffff:ffff,DE -2003:4a:af4e:8000::,2003:4a:af4e:ffff:ffff:ffff:ffff:ffff,TR -2003:4a:af4f::,2003:4a:af74:ffff:ffff:ffff:ffff:ffff,DE -2003:4a:af75::,2003:4a:af75:7fff:ffff:ffff:ffff:ffff,TR -2003:4a:af75:8000::,2003:55:8b08:ffff:ffff:ffff:ffff:ffff,DE -2003:55:8b09::,2003:55:8b09:7fff:ffff:ffff:ffff:ffff,IT -2003:55:8b09:8000::,2003:61:ea1b:ffff:ffff:ffff:ffff:ffff,DE -2003:61:ea1c::,2003:61:ea1c:7fff:ffff:ffff:ffff:ffff,GB -2003:61:ea1c:8000::,2003:62:4e56:7fff:ffff:ffff:ffff:ffff,DE -2003:62:4e56:8000::,2003:62:4e56:ffff:ffff:ffff:ffff:ffff,CH -2003:62:4e57::,2003:6a:7f66:7fff:ffff:ffff:ffff:ffff,DE -2003:6a:7f66:8000::,2003:6a:7f66:ffff:ffff:ffff:ffff:ffff,CH -2003:6a:7f67::,2003:86:a749:ffff:ffff:ffff:ffff:ffff,DE -2003:86:a74a::,2003:86:a74a:7fff:ffff:ffff:ffff:ffff,AT -2003:86:a74a:8000::,2003:87:2968:7fff:ffff:ffff:ffff:ffff,DE -2003:87:2968:8000::,2003:87:2968:ffff:ffff:ffff:ffff:ffff,NZ -2003:87:2969::,2003:c4:53c6:ffff:ffff:ffff:ffff:ffff,DE -2003:c4:53c7::,2003:c4:53c7:7fff:ffff:ffff:ffff:ffff,GB -2003:c4:53c7:8000::,2003:de:63c1:7fff:ffff:ffff:ffff:ffff,DE -2003:de:63c1:8000::,2003:de:63c1:ffff:ffff:ffff:ffff:ffff,LU -2003:de:63c2::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2003:45:2d05::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE 2067:8e00::,2067:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US 2160:150::,2160:150:7fff:ffff:ffff:ffff:ffff:ffff,US 2400::,2400:fff:ffff:ffff:ffff:ffff:ffff:ffff,KR @@ -6309,9 +5514,7 @@ 2400:1e80::,2400:1e80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2400:1f00::,2400:1f00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2400:1f80::,2400:1f80:ffff:ffff:ffff:ffff:ffff:ffff,HK -2400:2000::,2400:2411:80ff:ffff:ffff:ffff:ffff:ffff,JP -2400:2411:8100::,2400:2411:8100:7fff:ffff:ffff:ffff:ffff,AU -2400:2411:8100:8000::,2400:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP +2400:2000::,2400:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP 2400:3080::,2400:3080:ffff:ffff:ffff:ffff:ffff:ffff,AF 2400:3100::,2400:3100:ffff:ffff:ffff:ffff:ffff:ffff,VU 2400:3180::,2400:3180:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -6481,7 +5684,8 @@ 2400:8900:e001:294d:49c2:953c:2c0c:16a1,2400:8900:e001:294d:49c2:953c:2c0c:16a1,SG 2400:8900:e001:294d:49c2:953c:2c0c:16a2,2400:8900:ffff:ffff:ffff:ffff:ffff:ffff,JP 2400:8901::,2400:8901:ffff:ffff:ffff:ffff:ffff:ffff,SG -2400:8902::,2400:8903:ffff:ffff:ffff:ffff:ffff:ffff,US +2400:8902::,2400:8902:ffff:ffff:ffff:ffff:ffff:ffff,JP +2400:8903::,2400:8903:ffff:ffff:ffff:ffff:ffff:ffff,US 2400:8980::,2400:8980:ffff:ffff:ffff:ffff:ffff:ffff,CN 2400:8a00::,2400:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2400:8a80::,2400:8a80:ffff:ffff:ffff:ffff:ffff:ffff,PH @@ -6677,7 +5881,11 @@ 2400:cb00:8a::,2400:cb00:95:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:96::,2400:cb00:96:ffff:ffff:ffff:ffff:ffff,AO 2400:cb00:97::,2400:cb00:97:ffff:ffff:ffff:ffff:ffff,BR -2400:cb00:98::,2400:cb00:113:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:98::,2400:cb00:103:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:104::,2400:cb00:104:ffff:ffff:ffff:ffff:ffff,TH +2400:cb00:105::,2400:cb00:106:ffff:ffff:ffff:ffff:ffff,US +2400:cb00:107::,2400:cb00:107:ffff:ffff:ffff:ffff:ffff,PT +2400:cb00:108::,2400:cb00:113:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:114::,2400:cb00:114:ffff:ffff:ffff:ffff:ffff,AT 2400:cb00:115::,2400:cb00:568:ffff:ffff:ffff:ffff:ffff,US 2400:cb00:569::,2400:cb00:569:ffff:ffff:ffff:ffff:ffff,CA @@ -6902,9 +6110,7 @@ 2401:3d80::,2401:3d80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:3e00::,2401:3e00:ffff:ffff:ffff:ffff:ffff:ffff,KH 2401:3e80::,2401:3e80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2401:3f00::,2401:3f00:10:ffff:ffff:ffff:ffff:ffff,SG -2401:3f00:11::,2401:3f00:11:7fff:ffff:ffff:ffff:ffff,ID -2401:3f00:11:8000::,2401:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:3f00::,2401:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG 2401:3f80::,2401:3f80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:4000::,2401:4000:ffff:ffff:ffff:ffff:ffff:ffff,KR 2401:4080::,2401:4080:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -7131,18 +6337,16 @@ 2401:c800::,2401:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP 2401:c880::,2401:c880:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:c900::,2401:c900:1000:ffff:ffff:ffff:ffff:ffff,SG -2401:c900:1001::,2401:c900:1001:ff:ffff:ffff:ffff:ffff,JP -2401:c900:1001:100::,2401:c900:11ff:ffff:ffff:ffff:ffff:ffff,SG +2401:c900:1001::,2401:c900:1001:7fff:ffff:ffff:ffff:ffff,JP +2401:c900:1001:8000::,2401:c900:11ff:ffff:ffff:ffff:ffff:ffff,SG 2401:c900:1200::,2401:c900:1201:175:ffff:ffff:ffff:ffff,US 2401:c900:1201:176::,2401:c900:1201:176:ffff:ffff:ffff:ffff,HK 2401:c900:1201:177::,2401:c900:1201:1cb:ffff:ffff:ffff:ffff,US 2401:c900:1201:1cc::,2401:c900:1201:1cc:ffff:ffff:ffff:ffff,HK 2401:c900:1201:1cd::,2401:c900:12ff:ffff:ffff:ffff:ffff:ffff,US -2401:c900:1300::,2401:c900:1300:7fff:ffff:ffff:ffff:ffff,SG -2401:c900:1300:8000::,2401:c900:1301:7fff:ffff:ffff:ffff:ffff,AU -2401:c900:1301:8000::,2401:c900:1400:ffff:ffff:ffff:ffff:ffff,SG -2401:c900:1401::,2401:c900:1401:7fff:ffff:ffff:ffff:ffff,AU -2401:c900:1401:8000::,2401:c901:ffff:ffff:ffff:ffff:ffff:ffff,SG +2401:c900:1300::,2401:c900:1300:ffff:ffff:ffff:ffff:ffff,SG +2401:c900:1301::,2401:c900:1301:7fff:ffff:ffff:ffff:ffff,AU +2401:c900:1301:8000::,2401:c901:ffff:ffff:ffff:ffff:ffff:ffff,SG 2401:c980::,2401:c980:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2401:ca00::,2401:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:ca80::,2401:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -7249,41 +6453,41 @@ 2401:f880::,2401:f880:ffff:ffff:ffff:ffff:ffff:ffff,MY 2401:f900::,2401:f900:ffff:ffff:ffff:ffff:ffff:ffff,SG 2401:f980::,2401:f980:ffff:ffff:ffff:ffff:ffff:ffff,ID -2401:fa00::,2401:fa00::ffff:ffff:ffff:ffff:ffff,AU -2401:fa00:1::,2401:fa00:2:ffff:ffff:ffff:ffff:ffff,IN -2401:fa00:3::,2401:fa00:3:ffff:ffff:ffff:ffff:ffff,SG +2401:fa00::,2401:fa00::7fff:ffff:ffff:ffff:ffff,AU +2401:fa00:0:8000::,2401:fa00::ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:1::,2401:fa00:1:7fff:ffff:ffff:ffff:ffff,TW +2401:fa00:1:8000::,2401:fa00:3:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:4::,2401:fa00:4:ffff:ffff:ffff:ffff:ffff,JP -2401:fa00:5::,2401:fa00:5:7fff:ffff:ffff:ffff:ffff,US -2401:fa00:5:8000::,2401:fa00:5:ffff:ffff:ffff:ffff:ffff,IN -2401:fa00:6::,2401:fa00:7:ffff:ffff:ffff:ffff:ffff,US -2401:fa00:8::,2401:fa00:8:ffff:ffff:ffff:ffff:ffff,MY -2401:fa00:9::,2401:fa00:9:ffff:ffff:ffff:ffff:ffff,AU -2401:fa00:a::,2401:fa00:c:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:5::,2401:fa00:6:7fff:ffff:ffff:ffff:ffff,IN +2401:fa00:6:8000::,2401:fa00:6:ffff:ffff:ffff:ffff:ffff,AU +2401:fa00:7::,2401:fa00:8:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:9::,2401:fa00:9:7fff:ffff:ffff:ffff:ffff,AU +2401:fa00:9:8000::,2401:fa00:c:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:d::,2401:fa00:d:7fff:ffff:ffff:ffff:ffff,KR 2401:fa00:d:8000::,2401:fa00:e:ffff:ffff:ffff:ffff:ffff,IN -2401:fa00:f::,2401:fa00:f:ffff:ffff:ffff:ffff:ffff,SG -2401:fa00:10::,2401:fa00:10:ffff:ffff:ffff:ffff:ffff,IN -2401:fa00:11::,2401:fa00:11:ffff:ffff:ffff:ffff:ffff,AU +2401:fa00:f::,2401:fa00:f:7fff:ffff:ffff:ffff:ffff,SG +2401:fa00:f:8000::,2401:fa00:10:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:11::,2401:fa00:11:7fff:ffff:ffff:ffff:ffff,AU +2401:fa00:11:8000::,2401:fa00:11:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:12::,2401:fa00:12:ffff:ffff:ffff:ffff:ffff,NZ -2401:fa00:13::,2401:fa00:13:7fff:ffff:ffff:ffff:ffff,IN -2401:fa00:13:8000::,2401:fa00:13:ffff:ffff:ffff:ffff:ffff,HK -2401:fa00:14::,2401:fa00:1e:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:13::,2401:fa00:13:7fff:ffff:ffff:ffff:ffff,HK +2401:fa00:13:8000::,2401:fa00:17:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:18::,2401:fa00:18:7fff:ffff:ffff:ffff:ffff,PH +2401:fa00:18:8000::,2401:fa00:1e:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:1f::,2401:fa00:1f:7fff:ffff:ffff:ffff:ffff,JP 2401:fa00:1f:8000::,2401:fa00:23:ffff:ffff:ffff:ffff:ffff,IN -2401:fa00:24::,2401:fa00:24:ffff:ffff:ffff:ffff:ffff,MY -2401:fa00:25::,2401:fa00:25:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:24::,2401:fa00:24:7fff:ffff:ffff:ffff:ffff,MY +2401:fa00:24:8000::,2401:fa00:25:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:26::,2401:fa00:26:ffff:ffff:ffff:ffff:ffff,PH -2401:fa00:27::,2401:fa00:27:ffff:ffff:ffff:ffff:ffff,IN -2401:fa00:28::,2401:fa00:29:7fff:ffff:ffff:ffff:ffff,AU +2401:fa00:27::,2401:fa00:28:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:29::,2401:fa00:29:7fff:ffff:ffff:ffff:ffff,AU 2401:fa00:29:8000::,2401:fa00:32:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:33::,2401:fa00:33:ffff:ffff:ffff:ffff:ffff,PH 2401:fa00:34::,2401:fa00:3f:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:40::,2401:fa00:40:7fff:ffff:ffff:ffff:ffff,CN 2401:fa00:40:8000::,2401:fa00:40:ffff:ffff:ffff:ffff:ffff,IN 2401:fa00:41::,2401:fa00:41:7fff:ffff:ffff:ffff:ffff,CN -2401:fa00:41:8000::,2401:fa00:43:ffff:ffff:ffff:ffff:ffff,IN -2401:fa00:44::,2401:fa00:44:7fff:ffff:ffff:ffff:ffff,CN -2401:fa00:44:8000::,2401:fa00:ffff:ffff:ffff:ffff:ffff:ffff,IN +2401:fa00:41:8000::,2401:fa00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:fa80::,2401:fa80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2401:fb00::,2401:fb00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2401:fb80::,2401:fb80:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -7475,17 +6679,9 @@ 2402:5e80::,2402:5e80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2402:5f00::,2402:5f00:ffff:ffff:ffff:ffff:ffff:ffff,ID 2402:5f80::,2402:5f80:ffff:ffff:ffff:ffff:ffff:ffff,SG -2402:6000::,2402:6000:ff:ffff:ffff:ffff:ffff:ffff,AU -2402:6000:100::,2402:6000:100:7fff:ffff:ffff:ffff:ffff,NZ -2402:6000:100:8000::,2402:6000:100:ffff:ffff:ffff:ffff:ffff,AU +2402:6000::,2402:6000:100:ffff:ffff:ffff:ffff:ffff,AU 2402:6000:101::,2402:6000:101:7fff:ffff:ffff:ffff:ffff,NZ -2402:6000:101:8000::,2402:6000:10f:ffff:ffff:ffff:ffff:ffff,AU -2402:6000:110::,2402:6000:110:7fff:ffff:ffff:ffff:ffff,NZ -2402:6000:110:8000::,2402:6000:1ff:7fff:ffff:ffff:ffff:ffff,AU -2402:6000:1ff:8000::,2402:6000:1ff:ffff:ffff:ffff:ffff:ffff,NZ -2402:6000:200::,2402:6000:202:ffff:ffff:ffff:ffff:ffff,AU -2402:6000:203::,2402:6000:203:7fff:ffff:ffff:ffff:ffff,NZ -2402:6000:203:8000::,2402:6000:ffff:ffff:ffff:ffff:ffff:ffff,AU +2402:6000:101:8000::,2402:6000:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:6100::,2402:6100:ffff:ffff:ffff:ffff:ffff:ffff,KR 2402:6200::,2402:6200:ffff:ffff:ffff:ffff:ffff:ffff,GU 2402:6280::,2402:6280:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -7530,9 +6726,9 @@ 2402:7680::,2402:7680:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:7700::,2402:7700:ffff:ffff:ffff:ffff:ffff:ffff,JP 2402:7780::,2402:7780:ffff:ffff:ffff:ffff:ffff:ffff,IN -2402:7800::,2402:7800:204:7fff:ffff:ffff:ffff:ffff,AU -2402:7800:204:8000::,2402:7800:204:ffff:ffff:ffff:ffff:ffff,NZ -2402:7800:205::,2402:7800:ffff:ffff:ffff:ffff:ffff:ffff,AU +2402:7800::,2402:7800:fdff:ffff:ffff:ffff:ffff:ffff,AU +2402:7800:fe00::,2402:7800:fe00:7fff:ffff:ffff:ffff:ffff,NZ +2402:7800:fe00:8000::,2402:7800:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:7880::,2402:7880:ffff:ffff:ffff:ffff:ffff:ffff,SG 2402:7900::,2402:7900:ffff:ffff:ffff:ffff:ffff:ffff,AU 2402:7980::,2402:7980:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -7606,9 +6802,7 @@ 2402:9d00::,2402:9d00:ffff:ffff:ffff:ffff:ffff:ffff,KH 2402:9d80::,2402:9d80:ffff:ffff:ffff:ffff:ffff:ffff,VN 2402:9e00::,2402:9e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ -2402:9e80::,2402:9e80::ffff:ffff:ffff:ffff:ffff,HK -2402:9e80:1::,2402:9e80:1:7fff:ffff:ffff:ffff:ffff,AU -2402:9e80:1:8000::,2402:9e80:13:ffff:ffff:ffff:ffff:ffff,HK +2402:9e80::,2402:9e80:13:ffff:ffff:ffff:ffff:ffff,HK 2402:9e80:14::,2402:9e80:14:ffff:ffff:ffff:ffff:ffff,VN 2402:9e80:15::,2402:9e80:15:ffff:ffff:ffff:ffff:ffff,US 2402:9e80:16::,2402:9e80:ffff:ffff:ffff:ffff:ffff:ffff,HK @@ -8142,7 +7336,9 @@ 2403:ac00::,2403:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:ac80::,2403:ac80:ffff:ffff:ffff:ffff:ffff:ffff,JP 2403:ad00::,2403:ad00:ffff:ffff:ffff:ffff:ffff:ffff,IN -2403:ad80::,2403:ad80:ffff:ffff:ffff:ffff:ffff:ffff,HK +2403:ad80::,2403:ad80:5f:ffff:ffff:ffff:ffff:ffff,HK +2403:ad80:60::,2403:ad80:67:ffff:ffff:ffff:ffff:ffff,JP +2403:ad80:68::,2403:ad80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2403:ae00::,2403:ae00:ffff:ffff:ffff:ffff:ffff:ffff,ID 2403:ae80::,2403:ae80:ffff:ffff:ffff:ffff:ffff:ffff,NR 2403:af00::,2403:af00:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -8170,7 +7366,6 @@ 2403:ba00::,2403:ba00:ffff:ffff:ffff:ffff:ffff:ffff,ID 2403:ba80::,2403:ba80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:bb00::,2403:bb00:ffff:ffff:ffff:ffff:ffff:ffff,ID -2403:bb80::,2403:bb80:ffff:ffff:ffff:ffff:ffff:ffff,HK 2403:bc00::,2403:bc00:ffff:ffff:ffff:ffff:ffff:ffff,MY 2403:bc80::,2403:bc80:ffff:ffff:ffff:ffff:ffff:ffff,SG 2403:bd00::,2403:bd00:ffff:ffff:ffff:ffff:ffff:ffff,IN @@ -8228,15 +7423,12 @@ 2403:d680::,2403:d680:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:d700::,2403:d700:ffff:ffff:ffff:ffff:ffff:ffff,MN 2403:d780::,2403:d780:ffff:ffff:ffff:ffff:ffff:ffff,CN -2403:d800:1000::,2403:d800:1000:7fff:ffff:ffff:ffff:ffff,NZ -2403:d800:1001::,2403:d800:1001:7fff:ffff:ffff:ffff:ffff,NZ 2403:d800:1030::,2403:d800:1030:7fff:ffff:ffff:ffff:ffff,NZ -2403:d800:1031::,2403:d800:1031:7fff:ffff:ffff:ffff:ffff,NZ -2403:d800:1180::,2403:d800:1180:7fff:ffff:ffff:ffff:ffff,NZ -2403:d800:11c0::,2403:d800:11c3:7fff:ffff:ffff:ffff:ffff,NZ -2403:d800:11c4:8000::,2403:d800:11c4:ffff:ffff:ffff:ffff:ffff,NZ -2403:d800:11c5:8000::,2403:d800:11c5:ffff:ffff:ffff:ffff:ffff,NZ -2403:d800:1240::,2403:d800:1245:7fff:ffff:ffff:ffff:ffff,NZ +2403:d800:11c0::,2403:d800:11c0:7fff:ffff:ffff:ffff:ffff,NZ +2403:d800:11c1::,2403:d800:11c1:ffff:ffff:ffff:ffff:ffff,NZ +2403:d800:1240:8000::,2403:d800:1241:7fff:ffff:ffff:ffff:ffff,NZ +2403:d800:1242::,2403:d800:1242:ffff:ffff:ffff:ffff:ffff,NZ +2403:d800:1243:8000::,2403:d800:1244:7fff:ffff:ffff:ffff:ffff,NZ 2403:d880::,2403:d880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2403:d900::,2403:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU 2403:d980::,2403:d980:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -8830,11 +8022,7 @@ 2404:f801:30::,2404:f801:30::,AU 2404:f801:30::1,2404:f801:8027:ffff:ffff:ffff:ffff:ffff,SG 2404:f801:8028::,2404:f801:8028:ffff:ffff:ffff:ffff:ffff,IN -2404:f801:8029::,2404:f801:802f:ffff:ffff:ffff:ffff:ffff,SG -2404:f801:8030::,2404:f801:8030:7fff:ffff:ffff:ffff:ffff,AU -2404:f801:8030:8000::,2404:f801:804f:ffff:ffff:ffff:ffff:ffff,SG -2404:f801:8050::,2404:f801:8050:7fff:ffff:ffff:ffff:ffff,JP -2404:f801:8050:8000::,2404:f801:8057:ffff:ffff:ffff:ffff:ffff,SG +2404:f801:8029::,2404:f801:8057:ffff:ffff:ffff:ffff:ffff,SG 2404:f801:8058::,2404:f801:8058:ffff:ffff:ffff:ffff:ffff,IN 2404:f801:8059::,2404:f801:e817:ffff:ffff:ffff:ffff:ffff,SG 2404:f801:e818::,2404:f801:e818:7fff:ffff:ffff:ffff:ffff,AU @@ -8858,9 +8046,7 @@ 2405:80::,2405:80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:100::,2405:100:ffff:ffff:ffff:ffff:ffff:ffff,ID 2405:180::,2405:180:ffff:ffff:ffff:ffff:ffff:ffff,AU -2405:200::,2405:204:9106:bfff:ffff:ffff:ffff:ffff,IN -2405:204:9106:c000::,2405:204:9106:ffff:ffff:ffff:ffff:ffff,US -2405:204:9107::,2405:207:ffff:ffff:ffff:ffff:ffff:ffff,IN +2405:200::,2405:207:ffff:ffff:ffff:ffff:ffff:ffff,IN 2405:400::,2405:400:ffff:ffff:ffff:ffff:ffff:ffff,MH 2405:480::,2405:480:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:500::,2405:500:ffff:ffff:ffff:ffff:ffff:ffff,ID @@ -8878,7 +8064,6 @@ 2405:b80::,2405:b80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:c00::,2405:c00:ffff:ffff:ffff:ffff:ffff:ffff,PK 2405:c80::,2405:c80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2405:d00::,2405:d00:ffff:ffff:ffff:ffff:ffff:ffff,HK 2405:d80::,2405:d80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2405:e00::,2405:e00:ffff:ffff:ffff:ffff:ffff:ffff,JP 2405:e80::,2405:e80:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -9446,11 +8631,7 @@ 2406:1e80::,2406:1e80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2406:1f00::,2406:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2406:1f80::,2406:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CN -2406:2000::,2406:2000:ef95:ffff:ffff:ffff:ffff:ffff,TW -2406:2000:ef96::,2406:2000:ef96:7fff:ffff:ffff:ffff:ffff,HK -2406:2000:ef96:8000::,2406:2000:efa5:ffff:ffff:ffff:ffff:ffff,TW -2406:2000:efa6::,2406:2000:efa6:7fff:ffff:ffff:ffff:ffff,SG -2406:2000:efa6:8000::,2406:2000:efb9:ffff:ffff:ffff:ffff:ffff,TW +2406:2000::,2406:2000:efb9:ffff:ffff:ffff:ffff:ffff,TW 2406:2000:efba::,2406:2000:efba:7fff:ffff:ffff:ffff:ffff,HK 2406:2000:efba:8000::,2406:2000:ffff:ffff:ffff:ffff:ffff:ffff,TW 2406:2080::,2406:2080:ffff:ffff:ffff:ffff:ffff:ffff,CN @@ -10091,57 +9272,114 @@ 2407:6900::,2407:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:6980::,2407:6980:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:6a00::,2407:6a00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:6a80::,2407:6a80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:6b00::,2407:6b00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:6b80::,2407:6b80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2407:6c00::,2407:6c00:ffff:ffff:ffff:ffff:ffff:ffff,MY +2407:6c80::,2407:6c80:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:6d00::,2407:6d00:ffff:ffff:ffff:ffff:ffff:ffff,BD +2407:6d80::,2407:6d80:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2407:6e00::,2407:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:6e80::,2407:6e80:ffff:ffff:ffff:ffff:ffff:ffff,MM 2407:6f00::,2407:6f00:ffff:ffff:ffff:ffff:ffff:ffff,BD +2407:6f80::,2407:6f80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2407:7000::,2407:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2407:7080::,2407:7080:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:7100::,2407:7100:ffff:ffff:ffff:ffff:ffff:ffff,TW +2407:7180::,2407:7180:ffff:ffff:ffff:ffff:ffff:ffff,NZ 2407:7200::,2407:7200:ffff:ffff:ffff:ffff:ffff:ffff,HK +2407:7280::,2407:7280:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:7300::,2407:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:7380::,2407:7380:ffff:ffff:ffff:ffff:ffff:ffff,BD 2407:7400::,2407:7400:ffff:ffff:ffff:ffff:ffff:ffff,IN +2407:7480::,2407:7480:ffff:ffff:ffff:ffff:ffff:ffff,MY 2407:7500::,2407:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:7580::,2407:7580:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:7600::,2407:7600:ffff:ffff:ffff:ffff:ffff:ffff,ID +2407:7680::,2407:7680:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:7700::,2407:7700:ffff:ffff:ffff:ffff:ffff:ffff,MY +2407:7780::,2407:7780:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:7800::,2407:7800:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:7880::,2407:7880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:7900::,2407:7900:ffff:ffff:ffff:ffff:ffff:ffff,TH +2407:7980::,2407:7980:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:7a00::,2407:7a00:ffff:ffff:ffff:ffff:ffff:ffff,TH +2407:7a80::,2407:7a80:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:7b00::,2407:7b00:ffff:ffff:ffff:ffff:ffff:ffff,HK +2407:7b80::,2407:7b80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2407:7c00::,2407:7c00:ffff:ffff:ffff:ffff:ffff:ffff,SG +2407:7c80::,2407:7c80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:7d00::,2407:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2407:7d80::,2407:7d80:ffff:ffff:ffff:ffff:ffff:ffff,CN +2407:7e80::,2407:7e80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:7f00::,2407:7f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2407:7f80::,2407:7f80:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:8000::,2407:8000:ffff:ffff:ffff:ffff:ffff:ffff,HK +2407:8080::,2407:8080:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:8100::,2407:8100:ffff:ffff:ffff:ffff:ffff:ffff,SG +2407:8180::,2407:8180:ffff:ffff:ffff:ffff:ffff:ffff,KH 2407:8200::,2407:8200:ffff:ffff:ffff:ffff:ffff:ffff,ID +2407:8280::,2407:8280:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:8300::,2407:8300:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2407:8380::,2407:8380:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:8400::,2407:8400:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:8480::,2407:8480:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:8500::,2407:8500:ffff:ffff:ffff:ffff:ffff:ffff,SG +2407:8580::,2407:8580:ffff:ffff:ffff:ffff:ffff:ffff,PK 2407:8600::,2407:8600:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:8680::,2407:8680:ffff:ffff:ffff:ffff:ffff:ffff,JP 2407:8700::,2407:8700:ffff:ffff:ffff:ffff:ffff:ffff,IN +2407:8780::,2407:8780:ffff:ffff:ffff:ffff:ffff:ffff,BD 2407:8800::,2407:8800:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:8880::,2407:8880:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:8900::,2407:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:8980::,2407:8980:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:8a00::,2407:8a00:ffff:ffff:ffff:ffff:ffff:ffff,JP +2407:8a80::,2407:8a80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2407:8b00::,2407:8b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2407:8b80::,2407:8b80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:8c00::,2407:8c00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:8e00::,2407:8e00:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:8e80::,2407:8e80:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:8f00::,2407:8f00:ffff:ffff:ffff:ffff:ffff:ffff,JP +2407:8f80::,2407:8f80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2407:9000::,2407:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:9080::,2407:9080:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:9100::,2407:9100:ffff:ffff:ffff:ffff:ffff:ffff,KR +2407:9180::,2407:9180:ffff:ffff:ffff:ffff:ffff:ffff,CN +2407:9280::,2407:9280:ffff:ffff:ffff:ffff:ffff:ffff,BD 2407:9300::,2407:9300:ffff:ffff:ffff:ffff:ffff:ffff,IN +2407:9380::,2407:9380:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:9400::,2407:9400:ffff:ffff:ffff:ffff:ffff:ffff,MY +2407:9480::,2407:9480:ffff:ffff:ffff:ffff:ffff:ffff,TH 2407:9500::,2407:9500:ffff:ffff:ffff:ffff:ffff:ffff,NP +2407:9580::,2407:9580:ffff:ffff:ffff:ffff:ffff:ffff,JP +2407:9680::,2407:9680:ffff:ffff:ffff:ffff:ffff:ffff,CN +2407:9780::,2407:9780:ffff:ffff:ffff:ffff:ffff:ffff,US 2407:9800::,2407:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH +2407:9880::,2407:9880:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:9900::,2407:9900:ffff:ffff:ffff:ffff:ffff:ffff,JP +2407:9980::,2407:9980:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:9a00::,2407:9a00:ffff:ffff:ffff:ffff:ffff:ffff,IN +2407:9a80::,2407:9a80:ffff:ffff:ffff:ffff:ffff:ffff,SG +2407:9b80::,2407:9b80:ffff:ffff:ffff:ffff:ffff:ffff,KR 2407:9c00::,2407:9c00:ffff:ffff:ffff:ffff:ffff:ffff,PK +2407:9c80::,2407:9c80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2407:9d00::,2407:9d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ +2407:9d80::,2407:9d80:ffff:ffff:ffff:ffff:ffff:ffff,BD 2407:9e00::,2407:9e00:ffff:ffff:ffff:ffff:ffff:ffff,PK +2407:9e80::,2407:9e80:ffff:ffff:ffff:ffff:ffff:ffff,ID 2407:9f00::,2407:9f00:ffff:ffff:ffff:ffff:ffff:ffff,CN +2407:9f80::,2407:9f80:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:a000::,2407:a000:ffff:ffff:ffff:ffff:ffff:ffff,FJ +2407:a080::,2407:a080:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:a100::,2407:a100:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:a180::,2407:a180:ffff:ffff:ffff:ffff:ffff:ffff,ID 2407:a200::,2407:a200:ffff:ffff:ffff:ffff:ffff:ffff,AU +2407:a280::,2407:a280:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:a300::,2407:a300:ffff:ffff:ffff:ffff:ffff:ffff,IN +2407:a380::,2407:a380:ffff:ffff:ffff:ffff:ffff:ffff,SG +2407:a480::,2407:a480:ffff:ffff:ffff:ffff:ffff:ffff,CN 2407:a500::,2407:a500:ffff:ffff:ffff:ffff:ffff:ffff,TH 2407:a600::,2407:a600:ffff:ffff:ffff:ffff:ffff:ffff,ID 2407:a700::,2407:a700:ffff:ffff:ffff:ffff:ffff:ffff,HK @@ -10154,7 +9392,6 @@ 2407:b000::,2407:b001:ffff:ffff:ffff:ffff:ffff:ffff,JP 2407:b100::,2407:b100:ffff:ffff:ffff:ffff:ffff:ffff,BD 2407:b200::,2407:b200:ffff:ffff:ffff:ffff:ffff:ffff,KR -2407:b300::,2407:b300:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:b400::,2407:b400:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:b500::,2407:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:b600::,2407:b600:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -10196,7 +9433,6 @@ 2407:da00::,2407:da00:ffff:ffff:ffff:ffff:ffff:ffff,IN 2407:db00::,2407:db00:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:dc00::,2407:dc00:ffff:ffff:ffff:ffff:ffff:ffff,AU -2407:dd00::,2407:dd00:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:de00::,2407:de00:ffff:ffff:ffff:ffff:ffff:ffff,MY 2407:df00::,2407:df00:ffff:ffff:ffff:ffff:ffff:ffff,ID 2407:e000::,2407:e000:ffff:ffff:ffff:ffff:ffff:ffff,SG @@ -10208,7 +9444,7 @@ 2407:e600::,2407:e600:ffff:ffff:ffff:ffff:ffff:ffff,JP 2407:e700::,2407:e700:ffff:ffff:ffff:ffff:ffff:ffff,AU 2407:e800::,2407:e800:ffff:ffff:ffff:ffff:ffff:ffff,CN -2407:e900::,2407:e900:ffff:ffff:ffff:ffff:ffff:ffff,IN +2407:e900:1::,2407:e900:1:7fff:ffff:ffff:ffff:ffff,IN 2407:ea00::,2407:ea00:ffff:ffff:ffff:ffff:ffff:ffff,HK 2407:eb00::,2407:eb00:ffff:ffff:ffff:ffff:ffff:ffff,SG 2407:ec00::,2407:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU @@ -10246,11 +9482,7 @@ 240e::,240e:fff:ffff:ffff:ffff:ffff:ffff:ffff,CN 240f::,240f:ff:ffff:ffff:ffff:ffff:ffff:ffff,JP 240f:8000::,240f:80ff:ffff:ffff:ffff:ffff:ffff:ffff,CN -2600::,2600:1:c016:ffff:ffff:ffff:ffff:ffff,US -2600:1:c017::,2600:1:c017:7fff:ffff:ffff:ffff:ffff,PR -2600:1:c017:8000::,2600:1:c019:7fff:ffff:ffff:ffff:ffff,US -2600:1:c019:8000::,2600:1:c019:ffff:ffff:ffff:ffff:ffff,PR -2600:1:c01a::,2600:7:ffff:ffff:ffff:ffff:ffff:ffff,US +2600::,2600:7:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:100::,2600:10f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:200::,2600:20f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:300::,2600:400:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -10311,19 +9543,7 @@ 2600:a400::,2600:a40f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:b000::,2600:b00f:ffff:ffff:ffff:ffff:ffff:ffff,US 2600:e000::,2600:e00f:ffff:ffff:ffff:ffff:ffff:ffff,CA -2601::,2601:4:3e7f:ffff:ffff:ffff:ffff:ffff,US -2601:4:3e80::,2601:4:3e80:223:9f6:64c1:3821:9e98,GB -2601:4:3e80:223:9f6:64c1:3821:9e99,2601:4:3e80:223:9f6:64c1:3821:9e99,US -2601:4:3e80:223:9f6:64c1:3821:9e9a,2601:4:3e80:7fff:ffff:ffff:ffff:ffff,GB -2601:4:3e80:8000::,2601:9:237f:ffff:ffff:ffff:ffff:ffff,US -2601:9:2380::,2601:9:2380:7fff:ffff:ffff:ffff:ffff,GB -2601:9:2380:8000::,2601:d:c9ff:ffff:ffff:ffff:ffff:ffff,US -2601:d:ca00::,2601:d:ca00:7fff:ffff:ffff:ffff:ffff,AU -2601:d:ca00:8000::,2601:583:c100:7fff:ffff:ffff:ffff:ffff,US -2601:583:c100:8000::,2601:583:c100:ffff:ffff:ffff:ffff:ffff,RU -2601:583:c101::,2601:781:8000:ffff:ffff:ffff:ffff:ffff,US -2601:781:8001::,2601:781:8001:7fff:ffff:ffff:ffff:ffff,GB -2601:781:8001:8000::,2601:fff:ffff:ffff:ffff:ffff:ffff:ffff,US +2601::,2601:fff:ffff:ffff:ffff:ffff:ffff:ffff,US 2602::,2602:10f:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:200::,2602:200:ffff:ffff:ffff:ffff:ffff:ffff,CA 2602:210::,2602:210:ffff:ffff:ffff:ffff:ffff:ffff,CA @@ -10332,6 +9552,11 @@ 2602:233::,2602:233:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:240::,2602:25f:ffff:ffff:ffff:ffff:ffff:ffff,US 2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US +2602:ff22::,2602:ff22:fff:ffff:ffff:ffff:ffff:ffff,CA +2602:ff23::,2602:ff23:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ff24::,2602:ff24:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ff25::,2602:ff25:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ff26::,2602:ff26:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff27::,2602:ff27:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff28::,2602:ff28:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff29::,2602:ff29:fff:ffff:ffff:ffff:ffff:ffff,US @@ -10448,7 +9673,6 @@ 2602:ff9b::,2602:ff9b:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ff9c::,2602:ff9c:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:ff9d::,2602:ff9d:fff:ffff:ffff:ffff:ffff:ffff,CA -2602:ff9e::,2602:ff9e:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:ff9f::,2602:ff9f:fff:ffff:ffff:ffff:ffff:ffff,CA 2602:ffa0::,2602:ffa0:fff:ffff:ffff:ffff:ffff:ffff,VG 2602:ffa1::,2602:ffa1:fff:ffff:ffff:ffff:ffff:ffff,US @@ -10506,9 +9730,7 @@ 2602:ffd7::,2602:ffd7:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ffd8::,2602:ffd8:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ffd9::,2602:ffd9:fff:ffff:ffff:ffff:ffff:ffff,US -2602:ffda::,2602:ffda:aa9:ffff:ffff:ffff:ffff:ffff,US -2602:ffda:aaa::,2602:ffda:aaa:7fff:ffff:ffff:ffff:ffff,NL -2602:ffda:aaa:8000::,2602:ffda:fff:ffff:ffff:ffff:ffff:ffff,US +2602:ffda::,2602:ffda:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ffdb::,2602:ffdb:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ffdc::,2602:ffdc:fff:ffff:ffff:ffff:ffff:ffff,US 2602:ffdd::,2602:ffdd:fff:ffff:ffff:ffff:ffff:ffff,US @@ -10565,13 +9787,12 @@ 2603:1020:200::,2603:1020:201:ffff:ffff:ffff:ffff:ffff,NL 2603:1020:202::,2603:1023:ffff:ffff:ffff:ffff:ffff:ffff,US 2603:1024::,2603:1024:1:ffff:ffff:ffff:ffff:ffff,IE -2603:1024:2::,2603:1024:1ff:ffff:ffff:ffff:ffff:ffff,US -2603:1024:200::,2603:1024:201:ffff:ffff:ffff:ffff:ffff,NL -2603:1024:202::,2603:1025:ffff:ffff:ffff:ffff:ffff:ffff,US +2603:1024:2::,2603:1025:ffff:ffff:ffff:ffff:ffff:ffff,US 2603:1026::,2603:1026:2:ffff:ffff:ffff:ffff:ffff,IE 2603:1026:3::,2603:1026:3:ffff:ffff:ffff:ffff:ffff,FI -2603:1026:4::,2603:1026:5:ffff:ffff:ffff:ffff:ffff,IE -2603:1026:6::,2603:1026:1f:ffff:ffff:ffff:ffff:ffff,US +2603:1026:4::,2603:1026:6:ffff:ffff:ffff:ffff:ffff,IE +2603:1026:7::,2603:1026:7:ffff:ffff:ffff:ffff:ffff,FI +2603:1026:8::,2603:1026:1f:ffff:ffff:ffff:ffff:ffff,US 2603:1026:20::,2603:1026:22:ffff:ffff:ffff:ffff:ffff,IE 2603:1026:23::,2603:1026:23:ffff:ffff:ffff:ffff:ffff,FI 2603:1026:24::,2603:1026:25:ffff:ffff:ffff:ffff:ffff,IE @@ -10580,14 +9801,14 @@ 2603:1026:2b::,2603:1026:2b:ffff:ffff:ffff:ffff:ffff,FI 2603:1026:2c::,2603:1026:2d:ffff:ffff:ffff:ffff:ffff,IE 2603:1026:2e::,2603:1026:1ff:ffff:ffff:ffff:ffff:ffff,US -2603:1026:200::,2603:1026:203:ffff:ffff:ffff:ffff:ffff,NL -2603:1026:204::,2603:1026:21f:ffff:ffff:ffff:ffff:ffff,US +2603:1026:200::,2603:1026:205:ffff:ffff:ffff:ffff:ffff,NL +2603:1026:206::,2603:1026:21f:ffff:ffff:ffff:ffff:ffff,US 2603:1026:220::,2603:1026:224:ffff:ffff:ffff:ffff:ffff,NL 2603:1026:225::,2603:1026:227:ffff:ffff:ffff:ffff:ffff,US 2603:1026:228::,2603:1026:22b:ffff:ffff:ffff:ffff:ffff,NL 2603:1026:22c::,2603:1026:2ff:ffff:ffff:ffff:ffff:ffff,US -2603:1026:300::,2603:1026:300:ffff:ffff:ffff:ffff:ffff,AT -2603:1026:301::,2603:1026:31f:ffff:ffff:ffff:ffff:ffff,US +2603:1026:300::,2603:1026:301:ffff:ffff:ffff:ffff:ffff,AT +2603:1026:302::,2603:1026:31f:ffff:ffff:ffff:ffff:ffff,US 2603:1026:320::,2603:1026:320:ffff:ffff:ffff:ffff:ffff,AT 2603:1026:321::,2603:1026:327:ffff:ffff:ffff:ffff:ffff,US 2603:1026:328::,2603:1026:328:ffff:ffff:ffff:ffff:ffff,AT @@ -10625,8 +9846,8 @@ 2603:1040:204::,2603:1040:3ff:ffff:ffff:ffff:ffff:ffff,US 2603:1040:400::,2603:1040:400:ffff:ffff:ffff:ffff:ffff,JP 2603:1040:401::,2603:1045:ffff:ffff:ffff:ffff:ffff:ffff,US -2603:1046::,2603:1046:2:ffff:ffff:ffff:ffff:ffff,SG -2603:1046:3::,2603:1046:1f:ffff:ffff:ffff:ffff:ffff,US +2603:1046::,2603:1046:3:ffff:ffff:ffff:ffff:ffff,SG +2603:1046:4::,2603:1046:1f:ffff:ffff:ffff:ffff:ffff,US 2603:1046:20::,2603:1046:22:ffff:ffff:ffff:ffff:ffff,SG 2603:1046:23::,2603:1046:27:ffff:ffff:ffff:ffff:ffff,US 2603:1046:28::,2603:1046:2a:ffff:ffff:ffff:ffff:ffff,SG @@ -10635,8 +9856,8 @@ 2603:1046:101::,2603:1046:127:ffff:ffff:ffff:ffff:ffff,US 2603:1046:128::,2603:1046:128:ffff:ffff:ffff:ffff:ffff,KR 2603:1046:129::,2603:1046:1ff:ffff:ffff:ffff:ffff:ffff,US -2603:1046:200::,2603:1046:201:ffff:ffff:ffff:ffff:ffff,HK -2603:1046:202::,2603:1046:21f:ffff:ffff:ffff:ffff:ffff,US +2603:1046:200::,2603:1046:202:ffff:ffff:ffff:ffff:ffff,HK +2603:1046:203::,2603:1046:21f:ffff:ffff:ffff:ffff:ffff,US 2603:1046:220::,2603:1046:221:ffff:ffff:ffff:ffff:ffff,HK 2603:1046:222::,2603:1046:227:ffff:ffff:ffff:ffff:ffff,US 2603:1046:228::,2603:1046:229:ffff:ffff:ffff:ffff:ffff,HK @@ -10659,7 +9880,9 @@ 2603:1046:701::,2603:1046:7ff:ffff:ffff:ffff:ffff:ffff,US 2603:1046:800::,2603:1046:800:ffff:ffff:ffff:ffff:ffff,MY 2603:1046:801::,2603:1046:803:ffff:ffff:ffff:ffff:ffff,KR -2603:1046:804::,2603:1046:81f:ffff:ffff:ffff:ffff:ffff,US +2603:1046:804::,2603:1046:804:ffff:ffff:ffff:ffff:ffff,MY +2603:1046:805::,2603:1046:805:ffff:ffff:ffff:ffff:ffff,KR +2603:1046:806::,2603:1046:81f:ffff:ffff:ffff:ffff:ffff,US 2603:1046:820::,2603:1046:820:ffff:ffff:ffff:ffff:ffff,MY 2603:1046:821::,2603:1046:821:ffff:ffff:ffff:ffff:ffff,KR 2603:1046:822::,2603:1046:827:ffff:ffff:ffff:ffff:ffff,US @@ -10694,10 +9917,10 @@ 2603:1056:21::,2603:1056:27:ffff:ffff:ffff:ffff:ffff,US 2603:1056:28::,2603:1056:28:ffff:ffff:ffff:ffff:ffff,BR 2603:1056:29::,2603:1056:1ff:ffff:ffff:ffff:ffff:ffff,US -2603:1056:200::,2603:1056:200:ffff:ffff:ffff:ffff:ffff,BR -2603:1056:201::,2603:1056:3ff:ffff:ffff:ffff:ffff:ffff,US -2603:1056:400::,2603:1056:401:ffff:ffff:ffff:ffff:ffff,BR -2603:1056:402::,2603:1056:40f:ffff:ffff:ffff:ffff:ffff,US +2603:1056:200::,2603:1056:201:ffff:ffff:ffff:ffff:ffff,BR +2603:1056:202::,2603:1056:3ff:ffff:ffff:ffff:ffff:ffff,US +2603:1056:400::,2603:1056:402:ffff:ffff:ffff:ffff:ffff,BR +2603:1056:403::,2603:1056:40f:ffff:ffff:ffff:ffff:ffff,US 2603:1056:410::,2603:1056:41f:ffff:ffff:ffff:ffff:ffff,BR 2603:1056:420::,2603:1056:5ff:ffff:ffff:ffff:ffff:ffff,US 2603:1056:600::,2603:1056:600:ffff:ffff:ffff:ffff:ffff,CL @@ -10774,9 +9997,7 @@ 2604:1e80::,2604:1e80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2604:1f00::,2604:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:1f80::,2604:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CA -2604:2000::,2604:2000:f228:ffff:ffff:ffff:ffff:ffff,US -2604:2000:f229::,2604:2000:f229:7fff:ffff:ffff:ffff:ffff,QA -2604:2000:f229:8000::,2604:2000:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:2000::,2604:2000:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2080::,2604:2080:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2100::,2604:2100:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:2180::,2604:2180:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -11102,13 +10323,7 @@ 2604:c800::,2604:c800:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:c880::,2604:c880:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:c900::,2604:c900:ffff:ffff:ffff:ffff:ffff:ffff,US -2604:c980::,2604:c980:100f:ffff:ffff:ffff:ffff:ffff,US -2604:c980:1010::,2604:c980:1010:7fff:ffff:ffff:ffff:ffff,CA -2604:c980:1010:8000::,2604:c980:110f:ffff:ffff:ffff:ffff:ffff,US -2604:c980:1110::,2604:c980:1110:7fff:ffff:ffff:ffff:ffff,CA -2604:c980:1110:8000::,2604:c980:1113:ffff:ffff:ffff:ffff:ffff,US -2604:c980:1114::,2604:c980:1114:7fff:ffff:ffff:ffff:ffff,CA -2604:c980:1114:8000::,2604:c980:ffff:ffff:ffff:ffff:ffff:ffff,US +2604:c980::,2604:c980:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:ca00::,2604:ca00:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:ca80::,2604:ca80:ffff:ffff:ffff:ffff:ffff:ffff,US 2604:cb00::,2604:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -11232,7 +10447,6 @@ 2605:980::,2605:980:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a00::,2605:a00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:a80::,2605:a80:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:b00::,2605:b00:fff:ffff:ffff:ffff:ffff:ffff,US 2605:b80::,2605:b81:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:c00::,2605:c00:ffff:ffff:ffff:ffff:ffff:ffff,CA 2605:d00::,2605:d00:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -11665,13 +10879,25 @@ 2605:ee00::,2605:ee00:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:ee80::,2605:ee80:fff:ffff:ffff:ffff:ffff:ffff,US 2605:ef00::,2605:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US -2605:ef80::,2605:ef80:2ff:ffff:ffff:ffff:ffff:ffff,US +2605:ef80::,2605:ef80:13f:ffff:ffff:ffff:ffff:ffff,US +2605:ef80:140::,2605:ef80:147:ffff:ffff:ffff:ffff:ffff,CA +2605:ef80:148::,2605:ef80:14f:ffff:ffff:ffff:ffff:ffff,MX +2605:ef80:150::,2605:ef80:157:ffff:ffff:ffff:ffff:ffff,PR +2605:ef80:158::,2605:ef80:15f:ffff:ffff:ffff:ffff:ffff,VI +2605:ef80:160::,2605:ef80:167:ffff:ffff:ffff:ffff:ffff,UM +2605:ef80:168::,2605:ef80:2ff:ffff:ffff:ffff:ffff:ffff,US 2605:ef80:300::,2605:ef80:31f:ffff:ffff:ffff:ffff:ffff,CA 2605:ef80:320::,2605:ef80:33f:ffff:ffff:ffff:ffff:ffff,MX 2605:ef80:340::,2605:ef80:35f:ffff:ffff:ffff:ffff:ffff,PR 2605:ef80:360::,2605:ef80:37f:ffff:ffff:ffff:ffff:ffff,VI 2605:ef80:380::,2605:ef80:39f:ffff:ffff:ffff:ffff:ffff,UM -2605:ef80:3a0::,2605:ef80:ffff:ffff:ffff:ffff:ffff:ffff,US +2605:ef80:3a0::,2605:ef80:5ff:ffff:ffff:ffff:ffff:ffff,US +2605:ef80:600::,2605:ef80:61f:ffff:ffff:ffff:ffff:ffff,CA +2605:ef80:620::,2605:ef80:63f:ffff:ffff:ffff:ffff:ffff,MX +2605:ef80:640::,2605:ef80:65f:ffff:ffff:ffff:ffff:ffff,PR +2605:ef80:660::,2605:ef80:67f:ffff:ffff:ffff:ffff:ffff,VI +2605:ef80:680::,2605:ef80:69f:ffff:ffff:ffff:ffff:ffff,UM +2605:ef80:6a0::,2605:ef80:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:f000::,2605:f000:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:f080::,2605:f080:ffff:ffff:ffff:ffff:ffff:ffff,US 2605:f100::,2605:f100:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -11769,7 +10995,6 @@ 2606:2200::,2606:2200:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:2280::,2606:2280:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:2300::,2606:2300:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:2380::,2606:2380:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:2400::,2606:2400:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:2480::,2606:2480:ffff:ffff:ffff:ffff:ffff:ffff,GP 2606:2500::,2606:2500:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -11834,13 +11059,9 @@ 2606:2d00::,2606:2d00:fff:ffff:ffff:ffff:ffff:ffff,US 2606:2e00::,2606:2e00:8001:ffff:ffff:ffff:ffff:ffff,US 2606:2e00:8002::,2606:2e00:8002:7fff:ffff:ffff:ffff:ffff,JP -2606:2e00:8002:8000::,2606:2e00:8008:ffff:ffff:ffff:ffff:ffff,US -2606:2e00:8009::,2606:2e00:8009:7fff:ffff:ffff:ffff:ffff,DE -2606:2e00:8009:8000::,2606:2e00:800a:2:ffff:ffff:ffff:ffff,US +2606:2e00:8002:8000::,2606:2e00:800a:2:ffff:ffff:ffff:ffff,US 2606:2e00:800a:3::,2606:2e00:800a:3:ffff:ffff:ffff:ffff,HK -2606:2e00:800a:4::,2606:2e00:8010:ffff:ffff:ffff:ffff:ffff,US -2606:2e00:8011::,2606:2e00:8011:7fff:ffff:ffff:ffff:ffff,FR -2606:2e00:8011:8000::,2606:2e00:8014:ffff:ffff:ffff:ffff:ffff,US +2606:2e00:800a:4::,2606:2e00:8014:ffff:ffff:ffff:ffff:ffff,US 2606:2e00:8015::,2606:2e00:8015::ffff:ffff:ffff:ffff,AU 2606:2e00:8015:1::,2606:2e00:8015:ffff:ffff:ffff:ffff:ffff,US 2606:2e00:8016::,2606:2e00:8016::ffff:ffff:ffff:ffff,JP @@ -12072,9 +11293,7 @@ 2606:9e80::,2606:9e80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:9f00::,2606:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:9f80::,2606:9f80:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:a000::,2606:a000:61ea:7fff:ffff:ffff:ffff:ffff,US -2606:a000:61ea:8000::,2606:a000:61ea:ffff:ffff:ffff:ffff:ffff,ZA -2606:a000:61eb::,2606:a000:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:a000::,2606:a000:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a080::,2606:a080:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a100::,2606:a100:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:a180::,2606:a180:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -12170,7 +11389,7 @@ 2606:cf80::,2606:cf80:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:d000::,2606:d000:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:d080::,2606:d080:ffff:ffff:ffff:ffff:ffff:ffff,US -2606:d100::,2606:d100:ffff:ffff:ffff:ffff:ffff:ffff,US +2606:d100::,2606:d101:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:d180::,2606:d180:ffff:ffff:ffff:ffff:ffff:ffff,CA 2606:d200::,2606:d200:ffff:ffff:ffff:ffff:ffff:ffff,US 2606:d280::,2606:d280:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -12607,25 +11826,44 @@ 2607:ab00::,2607:ab00:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:ab80::,2607:ab80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:ac00::,2607:ac00:ffff:ffff:ffff:ffff:ffff:ffff,PR +2607:ac80::,2607:ac80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:ad00::,2607:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:ad80::,2607:ad80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:ae00::,2607:ae00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:ae80::,2607:ae80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:af00::,2607:af00:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:af80::,2607:af80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b000::,2607:b000:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:b080::,2607:b080:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b100::,2607:b100:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:b180::,2607:b180:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:b200::,2607:b200:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:b280::,2607:b280:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b300::,2607:b300:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:b380::,2607:b380:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b400::,2607:b400:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:b480::,2607:b480:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b500::,2607:b500:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:b580::,2607:b580:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b600::,2607:b600:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:b680::,2607:b680:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b700::,2607:b700:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b800::,2607:b800:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:b880::,2607:b880:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:b900::,2607:b900:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:b980::,2607:b980:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:ba00::,2607:ba00:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:ba80::,2607:ba80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:bb00::,2607:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:bb80::,2607:bb80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:bc00::,2607:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:bc80::,2607:bc80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:bd00::,2607:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:bd80::,2607:bd80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:be00::,2607:be00:ffff:ffff:ffff:ffff:ffff:ffff,CA +2607:be80::,2607:be80:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:bf00::,2607:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:bf80::,2607:bf80:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:c000::,2607:c000:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:c100::,2607:c100:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:c200::,2607:c200:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -12697,11 +11935,7 @@ 2607:f0b0::,2607:f0b0:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:f0c0::,2607:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f0c8::,2607:f0c8:ffff:ffff:ffff:ffff:ffff:ffff,CA -2607:f0d0::,2607:f0d0:1c00:ffff:ffff:ffff:ffff:ffff,US -2607:f0d0:1c01::,2607:f0d0:1c01:7fff:ffff:ffff:ffff:ffff,MX -2607:f0d0:1c01:8000::,2607:f0d0:3700:ffff:ffff:ffff:ffff:ffff,US -2607:f0d0:3701::,2607:f0d0:3701:7fff:ffff:ffff:ffff:ffff,CA -2607:f0d0:3701:8000::,2607:f0d1:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f0d0::,2607:f0d1:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f0d8::,2607:f0e0:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f0e8::,2607:f0e8:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f0f8::,2607:f0f8:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -12890,9 +12124,7 @@ 2607:f720::,2607:f720:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f728::,2607:f728:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f738::,2607:f738:ffff:ffff:ffff:ffff:ffff:ffff,US -2607:f740::,2607:f740:8f:ffff:ffff:ffff:ffff:ffff,US -2607:f740:90::,2607:f740:90:7fff:ffff:ffff:ffff:ffff,HK -2607:f740:90:8000::,2607:f740:ffff:ffff:ffff:ffff:ffff:ffff,US +2607:f740::,2607:f740:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f748::,2607:f748:ffff:ffff:ffff:ffff:ffff:ffff,CA 2607:f750::,2607:f750:ffff:ffff:ffff:ffff:ffff:ffff,US 2607:f758::,2607:f758:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -13375,76 +12607,44 @@ 2620:0:e80::,2620::e80:ffff:ffff:ffff:ffff:ffff,US 2620:0:e90::,2620::e90:ffff:ffff:ffff:ffff:ffff,US 2620:0:ea0::,2620::eb0:ffff:ffff:ffff:ffff:ffff,US -2620:0:ed0::,2620::ed0:3fff:ffff:ffff:ffff:ffff,US -2620:0:ed0:4000::,2620::ed0:7fff:ffff:ffff:ffff:ffff,CN -2620:0:ed0:8000::,2620::ed0:ffff:ffff:ffff:ffff:ffff,US +2620:0:ed0::,2620::ed0:ffff:ffff:ffff:ffff:ffff,US 2620:0:ee0::,2620::ee0:ffff:ffff:ffff:ffff:ffff,US 2620:0:ef0::,2620::ef0:ffff:ffff:ffff:ffff:ffff,US 2620:0:f00::,2620::f7f:ffff:ffff:ffff:ffff:ffff,US -2620:0:1000::,2620::100f:ffff:ffff:ffff:ffff:ffff,US -2620:0:1010::,2620::1010:7fff:ffff:ffff:ffff:ffff,BR -2620:0:1010:8000::,2620::1011:7fff:ffff:ffff:ffff:ffff,US -2620:0:1011:8000::,2620::1011:ffff:ffff:ffff:ffff:ffff,BR -2620:0:1012::,2620::1016:ffff:ffff:ffff:ffff:ffff,US -2620:0:1017::,2620::1017:7fff:ffff:ffff:ffff:ffff,CO -2620:0:1017:8000::,2620::1019:ffff:ffff:ffff:ffff:ffff,US -2620:0:101a::,2620::101a:7fff:ffff:ffff:ffff:ffff,BR -2620:0:101a:8000::,2620::101f:ffff:ffff:ffff:ffff:ffff,US -2620:0:1020::,2620::1020:ffff:ffff:ffff:ffff:ffff,MX -2620:0:1021::,2620::1024:ffff:ffff:ffff:ffff:ffff,US -2620:0:1025::,2620::1025:ffff:ffff:ffff:ffff:ffff,BR -2620:0:1026::,2620::1034:ffff:ffff:ffff:ffff:ffff,US +2620:0:1000::,2620::1034:ffff:ffff:ffff:ffff:ffff,US 2620:0:1035::,2620::1035:7fff:ffff:ffff:ffff:ffff,CA 2620:0:1035:8000::,2620::103f:ffff:ffff:ffff:ffff:ffff,US 2620:0:1040::,2620::1040:7fff:ffff:ffff:ffff:ffff,IE 2620:0:1040:8000::,2620::1041:ffff:ffff:ffff:ffff:ffff,US 2620:0:1042::,2620::1042:ffff:ffff:ffff:ffff:ffff,GB -2620:0:1043::,2620::1044:ffff:ffff:ffff:ffff:ffff,US -2620:0:1045::,2620::1045:ffff:ffff:ffff:ffff:ffff,IL -2620:0:1046::,2620::1046:7fff:ffff:ffff:ffff:ffff,DE -2620:0:1046:8000::,2620::1047:ffff:ffff:ffff:ffff:ffff,US -2620:0:1048::,2620::1048:7fff:ffff:ffff:ffff:ffff,IL -2620:0:1048:8000::,2620::1048:ffff:ffff:ffff:ffff:ffff,US -2620:0:1049::,2620::1049:ffff:ffff:ffff:ffff:ffff,DE +2620:0:1043::,2620::1043:7fff:ffff:ffff:ffff:ffff,SE +2620:0:1043:8000::,2620::1044:ffff:ffff:ffff:ffff:ffff,US +2620:0:1045::,2620::1045:7fff:ffff:ffff:ffff:ffff,IL +2620:0:1045:8000::,2620::1048:ffff:ffff:ffff:ffff:ffff,US +2620:0:1049::,2620::1049:7fff:ffff:ffff:ffff:ffff,DE +2620:0:1049:8000::,2620::1049:ffff:ffff:ffff:ffff:ffff,US 2620:0:104a::,2620::104a:7fff:ffff:ffff:ffff:ffff,AE -2620:0:104a:8000::,2620::104a:ffff:ffff:ffff:ffff:ffff,US -2620:0:104b::,2620::104b:7fff:ffff:ffff:ffff:ffff,NL -2620:0:104b:8000::,2620::104b:ffff:ffff:ffff:ffff:ffff,US -2620:0:104c::,2620::104c:7fff:ffff:ffff:ffff:ffff,CH -2620:0:104c:8000::,2620::104f:ffff:ffff:ffff:ffff:ffff,US -2620:0:1050::,2620::1050:ffff:ffff:ffff:ffff:ffff,GB -2620:0:1051::,2620::1051:ffff:ffff:ffff:ffff:ffff,ES +2620:0:104a:8000::,2620::104f:ffff:ffff:ffff:ffff:ffff,US +2620:0:1050::,2620::1050:7fff:ffff:ffff:ffff:ffff,GB +2620:0:1050:8000::,2620::1050:ffff:ffff:ffff:ffff:ffff,US +2620:0:1051::,2620::1051:7fff:ffff:ffff:ffff:ffff,ES +2620:0:1051:8000::,2620::1051:ffff:ffff:ffff:ffff:ffff,US 2620:0:1052::,2620::1052:7fff:ffff:ffff:ffff:ffff,IE 2620:0:1052:8000::,2620::1052:ffff:ffff:ffff:ffff:ffff,US -2620:0:1053::,2620::1053:ffff:ffff:ffff:ffff:ffff,FR -2620:0:1054::,2620::1059:ffff:ffff:ffff:ffff:ffff,US -2620:0:105a::,2620::105a:7fff:ffff:ffff:ffff:ffff,UG -2620:0:105a:8000::,2620::105e:ffff:ffff:ffff:ffff:ffff,US +2620:0:1053::,2620::1053:7fff:ffff:ffff:ffff:ffff,FR +2620:0:1053:8000::,2620::105e:ffff:ffff:ffff:ffff:ffff,US 2620:0:105f::,2620::105f:ffff:ffff:ffff:ffff:ffff,CH -2620:0:1060::,2620::1060:ffff:ffff:ffff:ffff:ffff,US -2620:0:1061::,2620::1061:7fff:ffff:ffff:ffff:ffff,CH -2620:0:1061:8000::,2620::1068:ffff:ffff:ffff:ffff:ffff,US +2620:0:1060::,2620::1068:ffff:ffff:ffff:ffff:ffff,US 2620:0:1069::,2620::1069:7fff:ffff:ffff:ffff:ffff,PL -2620:0:1069:8000::,2620::106a:ffff:ffff:ffff:ffff:ffff,US -2620:0:106b::,2620::106b:7fff:ffff:ffff:ffff:ffff,RU -2620:0:106b:8000::,2620::106e:ffff:ffff:ffff:ffff:ffff,US +2620:0:1069:8000::,2620::106e:ffff:ffff:ffff:ffff:ffff,US 2620:0:106f::,2620::106f:7fff:ffff:ffff:ffff:ffff,CZ 2620:0:106f:8000::,2620::1072:ffff:ffff:ffff:ffff:ffff,US 2620:0:1073::,2620::1073:ffff:ffff:ffff:ffff:ffff,GB -2620:0:1074::,2620::1074:7fff:ffff:ffff:ffff:ffff,IE -2620:0:1074:8000::,2620::1076:ffff:ffff:ffff:ffff:ffff,US -2620:0:1077::,2620::1077:7fff:ffff:ffff:ffff:ffff,DE -2620:0:1077:8000::,2620::1077:ffff:ffff:ffff:ffff:ffff,US -2620:0:1078::,2620::1078:7fff:ffff:ffff:ffff:ffff,GB -2620:0:1078:8000::,2620::1078:ffff:ffff:ffff:ffff:ffff,US -2620:0:1079::,2620::1079:7fff:ffff:ffff:ffff:ffff,DK -2620:0:1079:8000::,2620::107b:ffff:ffff:ffff:ffff:ffff,US -2620:0:107c::,2620::107c:7fff:ffff:ffff:ffff:ffff,GR -2620:0:107c:8000::,2620::107e:ffff:ffff:ffff:ffff:ffff,US -2620:0:107f::,2620::107f:7fff:ffff:ffff:ffff:ffff,BE -2620:0:107f:8000::,2620::10e5:ffff:ffff:ffff:ffff:ffff,US -2620:0:10e6::,2620::10e6:7fff:ffff:ffff:ffff:ffff,CL -2620:0:10e6:8000::,2620::10ff:ffff:ffff:ffff:ffff:ffff,US +2620:0:1074::,2620::1075:ffff:ffff:ffff:ffff:ffff,US +2620:0:1076::,2620::1076:7fff:ffff:ffff:ffff:ffff,TR +2620:0:1076:8000::,2620::10e7:ffff:ffff:ffff:ffff:ffff,US +2620:0:10e8::,2620::10e8:7fff:ffff:ffff:ffff:ffff,AR +2620:0:10e8:8000::,2620::10ff:ffff:ffff:ffff:ffff:ffff,US 2620:0:1400::,2620::143f:ffff:ffff:ffff:ffff:ffff,US 2620:0:1500::,2620::157f:ffff:ffff:ffff:ffff:ffff,US 2620:0:1600::,2620::167f:ffff:ffff:ffff:ffff:ffff,US @@ -13608,14 +12808,23 @@ 2620:a:4000::,2620:a:4000:ffff:ffff:ffff:ffff:ffff,US 2620:a:6000::,2620:a:6000:ffff:ffff:ffff:ffff:ffff,US 2620:a:8000::,2620:a:8000:ffff:ffff:ffff:ffff:ffff,US +2620:a:a000::,2620:a:a000:ffff:ffff:ffff:ffff:ffff,US 2620:a:c000::,2620:a:c000:ffff:ffff:ffff:ffff:ffff,US +2620:a:e000::,2620:a:e000:ffff:ffff:ffff:ffff:ffff,US 2620:b::,2620:b::ffff:ffff:ffff:ffff:ffff,US +2620:b:2000::,2620:b:2000:ffff:ffff:ffff:ffff:ffff,US 2620:b:4000::,2620:b:4000:ffff:ffff:ffff:ffff:ffff,US +2620:b:6000::,2620:b:6000:ffff:ffff:ffff:ffff:ffff,US 2620:b:8000::,2620:b:8000:ffff:ffff:ffff:ffff:ffff,US +2620:b:a000::,2620:b:a000:ffff:ffff:ffff:ffff:ffff,US 2620:b:c000::,2620:b:c000:ffff:ffff:ffff:ffff:ffff,US +2620:b:e000::,2620:b:e000:ffff:ffff:ffff:ffff:ffff,CA 2620:c::,2620:c:f:ffff:ffff:ffff:ffff:ffff,US +2620:c:2000::,2620:c:2000:ffff:ffff:ffff:ffff:ffff,US 2620:c:4000::,2620:c:4000:ffff:ffff:ffff:ffff:ffff,US +2620:c:6000::,2620:c:6000:ffff:ffff:ffff:ffff:ffff,CA 2620:c:8000::,2620:c:8000:ffff:ffff:ffff:ffff:ffff,US +2620:c:a000::,2620:c:a000:ffff:ffff:ffff:ffff:ffff,US 2620:c:c000::,2620:c:c000:ffff:ffff:ffff:ffff:ffff,US 2620:d::,2620:d::ffff:ffff:ffff:ffff:ffff,US 2620:d:4000::,2620:d:4000:ffff:ffff:ffff:ffff:ffff,US @@ -14359,7 +13568,7 @@ 2620:ca:c000::,2620:ca:c000:ffff:ffff:ffff:ffff:ffff,US 2620:cb::,2620:cb:f:ffff:ffff:ffff:ffff:ffff,US 2620:cb:4000::,2620:cb:4000:ffff:ffff:ffff:ffff:ffff,US -2620:cb:8000::,2620:cb:8000:ffff:ffff:ffff:ffff:ffff,CA +2620:cb:8000::,2620:cb:8000:ffff:ffff:ffff:ffff:ffff,US 2620:cb:c000::,2620:cb:c000:ffff:ffff:ffff:ffff:ffff,US 2620:cc::,2620:cc::ffff:ffff:ffff:ffff:ffff,US 2620:cc:4000::,2620:cc:4000:ffff:ffff:ffff:ffff:ffff,US @@ -14388,7 +13597,6 @@ 2620:d2:4000::,2620:d2:4000:ffff:ffff:ffff:ffff:ffff,US 2620:d2:8000::,2620:d2:8000:ffff:ffff:ffff:ffff:ffff,US 2620:d2:c000::,2620:d2:c000:ffff:ffff:ffff:ffff:ffff,CA -2620:d3::,2620:d3::ffff:ffff:ffff:ffff:ffff,US 2620:d3:4000::,2620:d3:4000:ffff:ffff:ffff:ffff:ffff,US 2620:d3:8000::,2620:d3:8000:ffff:ffff:ffff:ffff:ffff,US 2620:d3:c000::,2620:d3:c000:ffff:ffff:ffff:ffff:ffff,US @@ -14559,6 +13767,8 @@ 2620:fd:4000::,2620:fd:4000:ffff:ffff:ffff:ffff:ffff,US 2620:fd:8000::,2620:fd:8000:ffff:ffff:ffff:ffff:ffff,US 2620:fd:c000::,2620:fd:c000:ffff:ffff:ffff:ffff:ffff,CA +2620:fe::,2620:fe::ffff:ffff:ffff:ffff:ffff,US +2620:fe:2040::,2620:fe:2040:ffff:ffff:ffff:ffff:ffff,US 2620:fe:8000::,2620:fe:8000:ffff:ffff:ffff:ffff:ffff,US 2620:fe:c000::,2620:fe:c000:ffff:ffff:ffff:ffff:ffff,US 2620:ff::,2620:ff::ffff:ffff:ffff:ffff:ffff,US @@ -14781,11 +13991,11 @@ 2620:10d:b000::,2620:10d:b00f:ffff:ffff:ffff:ffff:ffff,US 2620:10d:c000::,2620:10d:c091:ffff:ffff:ffff:ffff:ffff,US 2620:10d:c092::,2620:10d:c092:7fff:ffff:ffff:ffff:ffff,GB -2620:10d:c092:8000::,2620:10d:c092:ffff:ffff:ffff:ffff:ffff,US -2620:10d:c093::,2620:10d:c093:7fff:ffff:ffff:ffff:ffff,GB -2620:10d:c093:8000::,2620:10d:c0c0:ffff:ffff:ffff:ffff:ffff,US -2620:10d:c0c1::,2620:10d:c0c1:7fff:ffff:ffff:ffff:ffff,GB -2620:10d:c0c1:8000::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US +2620:10d:c092:8000::,2620:10d:c0c0:ffff:ffff:ffff:ffff:ffff,US +2620:10d:c0c1::,2620:10d:c0c1:7fff:ffff:ffff:ffff:ffff,IE +2620:10d:c0c1:8000::,2620:10d:c0e0:ffff:ffff:ffff:ffff:ffff,US +2620:10d:c0e1::,2620:10d:c0e1:7fff:ffff:ffff:ffff:ffff,AU +2620:10d:c0e1:8000::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US 2620:10d:d000::,2620:10d:d00f:ffff:ffff:ffff:ffff:ffff,CA 2620:10d:e000::,2620:10d:e00f:ffff:ffff:ffff:ffff:ffff,CA 2620:10d:f000::,2620:10d:f00f:ffff:ffff:ffff:ffff:ffff,US @@ -15116,7 +14326,6 @@ 2620:122:2000::,2620:122:20ff:ffff:ffff:ffff:ffff:ffff,US 2620:122:3000::,2620:122:30ff:ffff:ffff:ffff:ffff:ffff,US 2620:122:4000::,2620:122:400f:ffff:ffff:ffff:ffff:ffff,US -2620:122:5000::,2620:122:500f:ffff:ffff:ffff:ffff:ffff,US 2620:122:6000::,2620:122:600f:ffff:ffff:ffff:ffff:ffff,US 2620:122:7000::,2620:122:70ff:ffff:ffff:ffff:ffff:ffff,US 2620:122:8000::,2620:122:800f:ffff:ffff:ffff:ffff:ffff,US @@ -15248,6 +14457,16 @@ 2620:12a:6000::,2620:12a:600f:ffff:ffff:ffff:ffff:ffff,US 2620:12a:7000::,2620:12a:70ff:ffff:ffff:ffff:ffff:ffff,US 2620:12a:8000::,2620:12a:800f:ffff:ffff:ffff:ffff:ffff,US +2620:12a:9000::,2620:12a:900f:ffff:ffff:ffff:ffff:ffff,US +2620:12a:a000::,2620:12a:a00f:ffff:ffff:ffff:ffff:ffff,CA +2620:12a:b000::,2620:12a:b00f:ffff:ffff:ffff:ffff:ffff,US +2620:12a:c000::,2620:12a:c0ff:ffff:ffff:ffff:ffff:ffff,US +2620:12a:d000::,2620:12a:d0ff:ffff:ffff:ffff:ffff:ffff,US +2620:12a:e000::,2620:12a:e00f:ffff:ffff:ffff:ffff:ffff,US +2620:12a:f000::,2620:12a:f0ff:ffff:ffff:ffff:ffff:ffff,US +2620:12b::,2620:12b:f:ffff:ffff:ffff:ffff:ffff,US +2620:12b:1000::,2620:12b:10ff:ffff:ffff:ffff:ffff:ffff,US +2620:12b:2000::,2620:12b:20ff:ffff:ffff:ffff:ffff:ffff,US 2620:140::,2620:140:3ff:ffff:ffff:ffff:ffff:ffff,US 2620:141::,2620:141:fff:ffff:ffff:ffff:ffff:ffff,US 2620:143::,2620:143:7ff:ffff:ffff:ffff:ffff:ffff,US @@ -15274,12 +14493,9 @@ 2620:159::,2620:159:fff:ffff:ffff:ffff:ffff:ffff,US 2620:15a::,2620:15a:fff:ffff:ffff:ffff:ffff:ffff,US 2620:15b::,2620:15b:fff:ffff:ffff:ffff:ffff:ffff,US -2620:15c::,2620:15c::7fff:ffff:ffff:ffff:ffff,CA -2620:15c:0:8000::,2620:15c:4:ffff:ffff:ffff:ffff:ffff,US +2620:15c::,2620:15c:4:ffff:ffff:ffff:ffff:ffff,US 2620:15c:5::,2620:15c:5:ffff:ffff:ffff:ffff:ffff,BR -2620:15c:6::,2620:15c:d:ffff:ffff:ffff:ffff:ffff,US -2620:15c:e::,2620:15c:e:ffff:ffff:ffff:ffff:ffff,MX -2620:15c:f::,2620:15c:fff:ffff:ffff:ffff:ffff:ffff,US +2620:15c:6::,2620:15c:fff:ffff:ffff:ffff:ffff:ffff,US 2620:15d::,2620:15e:fff:ffff:ffff:ffff:ffff:ffff,US 2620:15f::,2620:15f:fff:ffff:ffff:ffff:ffff:ffff,US 2620:160::,2620:160:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -15308,6 +14524,8 @@ 2620:17e::,2620:17e:fff:ffff:ffff:ffff:ffff:ffff,US 2620:17f::,2620:181:fff:ffff:ffff:ffff:ffff:ffff,US 2620:182::,2620:182:fff:ffff:ffff:ffff:ffff:ffff,US +2620:183::,2620:183:fff:ffff:ffff:ffff:ffff:ffff,US +2620:184::,2620:184:fff:ffff:ffff:ffff:ffff:ffff,US 2620:190::,2620:190:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1a0::,2620:1a0:ffff:ffff:ffff:ffff:ffff:ffff,US 2620:1b0::,2620:1b0:ffff:ffff:ffff:ffff:ffff:ffff,US @@ -15729,6 +14947,7 @@ 2801:1a:1000::,2801:1a:1000:ffff:ffff:ffff:ffff:ffff,CL 2801:1a:2000::,2801:1a:2000:ffff:ffff:ffff:ffff:ffff,SR 2801:1a:4000::,2801:1a:4000:ffff:ffff:ffff:ffff:ffff,CO +2801:1a:5000::,2801:1a:5000:ffff:ffff:ffff:ffff:ffff,AR 2801:1a:6000::,2801:1a:6000:ffff:ffff:ffff:ffff:ffff,CR 2801:1a:8000::,2801:1a:8000:ffff:ffff:ffff:ffff:ffff,CL 2801:1a:9000::,2801:1a:9000:ffff:ffff:ffff:ffff:ffff,DO @@ -15787,7 +15006,6 @@ 2801:80::,2801:80::ffff:ffff:ffff:ffff:ffff,BR 2801:80:10::,2801:80:10:ffff:ffff:ffff:ffff:ffff,BR 2801:80:20::,2801:80:30:ffff:ffff:ffff:ffff:ffff,BR -2801:80:40::,2801:80:40:ffff:ffff:ffff:ffff:ffff,BR 2801:80:50::,2801:80:50:ffff:ffff:ffff:ffff:ffff,BR 2801:80:60::,2801:80:60:ffff:ffff:ffff:ffff:ffff,BR 2801:80:70::,2801:80:70:ffff:ffff:ffff:ffff:ffff,BR @@ -16241,11 +15459,9 @@ 2803:e80::,2803:e80:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:f00::,2803:f00:48a:ffff:ffff:ffff:ffff:ffff,PE 2803:f00:48b::,2803:f00:48e:ffff:ffff:ffff:ffff:ffff,CO -2803:f00:48f::,2803:f00:4a6:ffff:ffff:ffff:ffff:ffff,PE -2803:f00:4a7::,2803:f00:4aa:ffff:ffff:ffff:ffff:ffff,CL -2803:f00:4ab::,2803:f00:68d:7fff:ffff:ffff:ffff:ffff,PE -2803:f00:68d:8000::,2803:f00:68d:ffff:ffff:ffff:ffff:ffff,CO -2803:f00:68e::,2803:f00:ffff:ffff:ffff:ffff:ffff:ffff,PE +2803:f00:48f::,2803:f00:4a9:ffff:ffff:ffff:ffff:ffff,PE +2803:f00:4aa::,2803:f00:4aa:7fff:ffff:ffff:ffff:ffff,CL +2803:f00:4aa:8000::,2803:f00:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:f40::,2803:f40:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:f80::,2803:f80:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:1000::,2803:1000:ffff:ffff:ffff:ffff:ffff:ffff,SV @@ -16373,6 +15589,7 @@ 2803:3800::,2803:3800:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:3840::,2803:3840:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3880::,2803:3880:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:38c0::,2803:38c0:ffff:ffff:ffff:ffff:ffff:ffff,BO 2803:3900::,2803:3900:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:3940::,2803:3940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:3980::,2803:3980:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -16511,7 +15728,6 @@ 2803:6540::,2803:6540:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:6580::,2803:6580:ffff:ffff:ffff:ffff:ffff:ffff,CL 2803:6600::,2803:6600:ffff:ffff:ffff:ffff:ffff:ffff,AR -2803:6640::,2803:6640:ffff:ffff:ffff:ffff:ffff:ffff,DO 2803:6680::,2803:6680:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:6700::,2803:6700:ffff:ffff:ffff:ffff:ffff:ffff,CO 2803:6740::,2803:6740:ffff:ffff:ffff:ffff:ffff:ffff,AR @@ -16569,6 +15785,7 @@ 2803:7800::,2803:7800:ffff:ffff:ffff:ffff:ffff:ffff,VE 2803:7840::,2803:7840:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7880::,2803:7880:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:78c0::,2803:78c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7900::,2803:7900:ffff:ffff:ffff:ffff:ffff:ffff,BZ 2803:7940::,2803:7940:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:7980::,2803:7980:ffff:ffff:ffff:ffff:ffff:ffff,VE @@ -16764,6 +15981,7 @@ 2803:b800::,2803:b800:ffff:ffff:ffff:ffff:ffff:ffff,CR 2803:b840::,2803:b840:ffff:ffff:ffff:ffff:ffff:ffff,PA 2803:b880::,2803:b880:ffff:ffff:ffff:ffff:ffff:ffff,AR +2803:b8c0::,2803:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b900::,2803:b900:ffff:ffff:ffff:ffff:ffff:ffff,AR 2803:b940::,2803:b940:ffff:ffff:ffff:ffff:ffff:ffff,PE 2803:ba00::,2803:ba00:ffff:ffff:ffff:ffff:ffff:ffff,GT @@ -19393,7 +18611,6 @@ 2804:2764::,2804:2764:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2768::,2804:2768:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:276c::,2804:276c:ffff:ffff:ffff:ffff:ffff:ffff,BR -2804:2770:100::,2804:2770:100:7fff:ffff:ffff:ffff:ffff,BR 2804:2774::,2804:2774:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:2778::,2804:2778:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:277c::,2804:277c:ffff:ffff:ffff:ffff:ffff:ffff,BR @@ -20273,6 +19490,17 @@ 2804:3524::,2804:3524:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:3528::,2804:3528:ffff:ffff:ffff:ffff:ffff:ffff,BR 2804:352c::,2804:352c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3530::,2804:3530:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3534::,2804:3534:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3538::,2804:3538:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:353c::,2804:353c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3540::,2804:3540:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3544::,2804:3544:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3548::,2804:3548:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:354c::,2804:354c:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3550::,2804:3550:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3554::,2804:3554:ffff:ffff:ffff:ffff:ffff:ffff,BR +2804:3558::,2804:3558:ffff:ffff:ffff:ffff:ffff:ffff,BR 2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:200::,2806:216::ffff:ffff:ffff:ffff:ffff,MX 2806:217::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX @@ -20283,7 +19511,7 @@ 2806:250::,2806:250:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:260::,2806:260:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:270::,2806:270:ffff:ffff:ffff:ffff:ffff:ffff,MX -2806:280::,2806:282:ffff:ffff:ffff:ffff:ffff:ffff,MX +2806:280::,2806:283:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:290::,2806:290:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:2a0::,2806:2a0:ffff:ffff:ffff:ffff:ffff:ffff,MX 2806:2b0::,2806:2b0:ffff:ffff:ffff:ffff:ffff:ffff,MX @@ -20325,9 +19553,7 @@ 2a00:ca8::,2a00:ca8:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:cb0::,2a00:cb0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:cb8::,2a00:cb8:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a00:cc0::,2a00:cc0:fffd:ffff:ffff:ffff:ffff:ffff,DE -2a00:cc0:fffe::,2a00:cc0:fffe:7fff:ffff:ffff:ffff:ffff,NL -2a00:cc0:fffe:8000::,2a00:cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a00:cc0::,2a00:cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:cc8::,2a00:cc8:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a00:cd0::,2a00:cd0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:cd8::,2a00:cd8:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -20433,9 +19659,7 @@ 2a00:1040::,2a00:1040:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a00:1048::,2a00:1048:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:1050::,2a00:1050:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a00:1058::,2a00:1058:111:ffff:ffff:ffff:ffff:ffff,FR -2a00:1058:112::,2a00:1058:112:7fff:ffff:ffff:ffff:ffff,GB -2a00:1058:112:8000::,2a00:1058:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a00:1058::,2a00:1058:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:1060::,2a00:1060:ffff:ffff:ffff:ffff:ffff:ffff,MT 2a00:1068::,2a00:1068:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:1070::,2a00:1070:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -20479,12 +19703,9 @@ 2a00:11b8::,2a00:11b8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:11c0::,2a00:11c0:1:ffff:ffff:ffff:ffff:ffff,AT 2a00:11c0:2::,2a00:11c0:2:7fff:ffff:ffff:ffff:ffff,FR -2a00:11c0:2:8000::,2a00:11c0:4:ffff:ffff:ffff:ffff:ffff,AT -2a00:11c0:5::,2a00:11c0:5:7fff:ffff:ffff:ffff:ffff,CH -2a00:11c0:5:8000::,2a00:11c0:7:ffff:ffff:ffff:ffff:ffff,AT +2a00:11c0:2:8000::,2a00:11c0:7:ffff:ffff:ffff:ffff:ffff,AT 2a00:11c0:8::,2a00:11c0:8:ffff:ffff:ffff:ffff:ffff,GB -2a00:11c0:9::,2a00:11c0:9:7fff:ffff:ffff:ffff:ffff,IE -2a00:11c0:9:8000::,2a00:11c0:a:ffff:ffff:ffff:ffff:ffff,AT +2a00:11c0:9::,2a00:11c0:a:ffff:ffff:ffff:ffff:ffff,AT 2a00:11c0:b::,2a00:11c0:b:ffff:ffff:ffff:ffff:ffff,IT 2a00:11c0:c::,2a00:11c0:62:ffff:ffff:ffff:ffff:ffff,AT 2a00:11c0:63::,2a00:11c0:63:ffff:ffff:ffff:ffff:ffff,NL @@ -20533,21 +19754,7 @@ 2a00:1340::,2a00:1340:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1348::,2a00:1348:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:1350::,2a00:1350:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a00:1358::,2a00:1358:e07b:7fff:ffff:ffff:ffff:ffff,GR -2a00:1358:e07b:8000::,2a00:1358:e07b:ffff:ffff:ffff:ffff:ffff,CY -2a00:1358:e07c::,2a00:1358:e0fb:ffff:ffff:ffff:ffff:ffff,GR -2a00:1358:e0fc::,2a00:1358:e0fc:7fff:ffff:ffff:ffff:ffff,CY -2a00:1358:e0fc:8000::,2a00:1358:e123:ffff:ffff:ffff:ffff:ffff,GR -2a00:1358:e124::,2a00:1358:e124:7fff:ffff:ffff:ffff:ffff,CY -2a00:1358:e124:8000::,2a00:1358:e19a:ffff:ffff:ffff:ffff:ffff,GR -2a00:1358:e19b::,2a00:1358:e19b:7fff:ffff:ffff:ffff:ffff,CY -2a00:1358:e19b:8000::,2a00:1358:e1b8:ffff:ffff:ffff:ffff:ffff,GR -2a00:1358:e1b9::,2a00:1358:e1b9:7fff:ffff:ffff:ffff:ffff,CY -2a00:1358:e1b9:8000::,2a00:1358:e1f5:7fff:ffff:ffff:ffff:ffff,GR -2a00:1358:e1f5:8000::,2a00:1358:e1f5:ffff:ffff:ffff:ffff:ffff,CY -2a00:1358:e1f6::,2a00:1358:e263:7fff:ffff:ffff:ffff:ffff,GR -2a00:1358:e263:8000::,2a00:1358:e263:ffff:ffff:ffff:ffff:ffff,CY -2a00:1358:e264::,2a00:135b:ffff:ffff:ffff:ffff:ffff:ffff,GR +2a00:1358::,2a00:135b:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a00:1360::,2a00:1360:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:1368::,2a00:1368:ffff:ffff:ffff:ffff:ffff:ffff,SI 2a00:1370::,2a00:1370:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -20604,9 +19811,7 @@ 2a00:14f0::,2a00:14f0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:14f8::,2a00:14f8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:1500::,2a00:1507:ffff:ffff:ffff:ffff:ffff:ffff,AM -2a00:1508::,2a00:1508:ade:ffff:ffff:ffff:ffff:ffff,ES -2a00:1508:adf::,2a00:1508:adf:7fff:ffff:ffff:ffff:ffff,AR -2a00:1508:adf:8000::,2a00:1508:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a00:1508::,2a00:1508:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:1510::,2a00:1510:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a00:1518::,2a00:1518:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:1520::,2a00:1520:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -21112,13 +20317,7 @@ 2a00:54c0::,2a00:54c0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a00:54e0::,2a00:54e0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:5500::,2a00:5500::7fff:ffff:ffff:ffff:ffff,AX -2a00:5500:0:8000::,2a00:5500:1:ffff:ffff:ffff:ffff:ffff,FI -2a00:5500:2::,2a00:5500:2:7fff:ffff:ffff:ffff:ffff,AX -2a00:5500:2:8000::,2a00:5500:1fff:ffff:ffff:ffff:ffff:ffff,FI -2a00:5500:2000::,2a00:5500:2000:7fff:ffff:ffff:ffff:ffff,AX -2a00:5500:2000:8000::,2a00:5500:80fd:ffff:ffff:ffff:ffff:ffff,FI -2a00:5500:80fe::,2a00:5500:80fe:ffff:ffff:ffff:ffff:ffff,AX -2a00:5500:80ff::,2a00:5500:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a00:5500:0:8000::,2a00:5500:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a00:5520::,2a00:5520:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:5540::,2a00:5540:385:ffff:ffff:ffff:ffff:ffff,GB 2a00:5540:386::,2a00:5540:387:ffff:ffff:ffff:ffff:ffff,SI @@ -21296,7 +20495,7 @@ 2a00:6b20::,2a00:6b20:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a00:6b40::,2a00:6b40:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a00:6b60::,2a00:6b60:ffff:ffff:ffff:ffff:ffff:ffff,IE -2a00:6b80::,2a00:6b80:ffff:ffff:ffff:ffff:ffff:ffff,AL +2a00:6b80::,2a00:6b87:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a00:6ba0::,2a00:6ba0:ffff:ffff:ffff:ffff:ffff:ffff,PS 2a00:6bc0::,2a00:6bc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:6be0::,2a00:6be0:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -21305,7 +20504,6 @@ 2a00:6c40::,2a00:6c40:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a00:6c60::,2a00:6c60:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:6c80::,2a00:6c80:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a00:6ca0::,2a00:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a00:6cc0::,2a00:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,LT 2a00:6ce0::,2a00:6ce0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:6d00::,2a00:6d00:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -21413,28 +20611,14 @@ 2a00:79c0::,2a00:79c0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:79e0::,2a00:79e0::ffff:ffff:ffff:ffff:ffff,CH 2a00:79e0:1::,2a00:79e0:1:7fff:ffff:ffff:ffff:ffff,CZ -2a00:79e0:1:8000::,2a00:79e0:1:ffff:ffff:ffff:ffff:ffff,PL -2a00:79e0:2::,2a00:79e0:2:7fff:ffff:ffff:ffff:ffff,CH -2a00:79e0:2:8000::,2a00:79e0:2:ffff:ffff:ffff:ffff:ffff,US +2a00:79e0:1:8000::,2a00:79e0:2:ffff:ffff:ffff:ffff:ffff,CH 2a00:79e0:3::,2a00:79e0:3:7fff:ffff:ffff:ffff:ffff,IE -2a00:79e0:3:8000::,2a00:79e0:3:ffff:ffff:ffff:ffff:ffff,CH -2a00:79e0:4::,2a00:79e0:4:7fff:ffff:ffff:ffff:ffff,US -2a00:79e0:4:8000::,2a00:79e0:4:ffff:ffff:ffff:ffff:ffff,FI -2a00:79e0:5::,2a00:79e0:5:ffff:ffff:ffff:ffff:ffff,CH -2a00:79e0:6::,2a00:79e0:6:ffff:ffff:ffff:ffff:ffff,GB -2a00:79e0:7::,2a00:79e0:9:ffff:ffff:ffff:ffff:ffff,CH -2a00:79e0:a::,2a00:79e0:a:ffff:ffff:ffff:ffff:ffff,GB -2a00:79e0:b::,2a00:79e0:b:7fff:ffff:ffff:ffff:ffff,IT -2a00:79e0:b:8000::,2a00:79e0:b:ffff:ffff:ffff:ffff:ffff,CH -2a00:79e0:c::,2a00:79e0:d:ffff:ffff:ffff:ffff:ffff,GB +2a00:79e0:3:8000::,2a00:79e0:c:ffff:ffff:ffff:ffff:ffff,CH +2a00:79e0:d::,2a00:79e0:d:ffff:ffff:ffff:ffff:ffff,GB 2a00:79e0:e::,2a00:79e0:13:ffff:ffff:ffff:ffff:ffff,CH 2a00:79e0:14::,2a00:79e0:14:ffff:ffff:ffff:ffff:ffff,ZA 2a00:79e0:15::,2a00:79e0:15:ffff:ffff:ffff:ffff:ffff,DE -2a00:79e0:16::,2a00:79e0:17:ffff:ffff:ffff:ffff:ffff,CH -2a00:79e0:18::,2a00:79e0:18:7fff:ffff:ffff:ffff:ffff,NO -2a00:79e0:18:8000::,2a00:79e0:19:ffff:ffff:ffff:ffff:ffff,CH -2a00:79e0:1a::,2a00:79e0:1a:7fff:ffff:ffff:ffff:ffff,IE -2a00:79e0:1a:8000::,2a00:79e0:1b:ffff:ffff:ffff:ffff:ffff,CH +2a00:79e0:16::,2a00:79e0:1b:ffff:ffff:ffff:ffff:ffff,CH 2a00:79e0:1c::,2a00:79e0:1c:ffff:ffff:ffff:ffff:ffff,GH 2a00:79e0:1d::,2a00:79e0:1e:ffff:ffff:ffff:ffff:ffff,CH 2a00:79e0:1f::,2a00:79e0:1f:ffff:ffff:ffff:ffff:ffff,LT @@ -21633,7 +20817,7 @@ 2a00:91e0::,2a00:91e0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:9200::,2a00:9200:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:9220::,2a00:9220:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a00:9240::,2a00:9240:ffff:ffff:ffff:ffff:ffff:ffff,HR +2a00:9240::,2a00:9240:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a00:9260::,2a00:9267:ffff:ffff:ffff:ffff:ffff:ffff,IS 2a00:9280::,2a00:9280:ffff:ffff:ffff:ffff:ffff:ffff,IS 2a00:92a0::,2a00:92a7:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -21904,7 +21088,6 @@ 2a00:b380::,2a00:b380:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a00:b3a0::,2a00:b3a0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:b3c0::,2a00:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,IS -2a00:b3e0::,2a00:b3e0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a00:b400::,2a00:b407:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:b420::,2a00:b420:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a00:b440::,2a00:b440:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -22008,7 +21191,7 @@ 2a00:c120::,2a00:c120:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:c140::,2a00:c140:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:c160::,2a00:c160:ffff:ffff:ffff:ffff:ffff:ffff,AL -2a00:c180::,2a00:c180:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a00:c180::,2a00:c187:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a00:c1a0::,2a00:c1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:c1c0::,2a00:c1c0:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a00:c1e0::,2a00:c1e7:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -22080,9 +21263,7 @@ 2a00:ca00::,2a00:ca07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a00:ca20::,2a00:ca20:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a00:ca40::,2a00:ca40:ffff:ffff:ffff:ffff:ffff:ffff,DK -2a00:ca60::,2a00:ca60:16:7fff:ffff:ffff:ffff:ffff,LU -2a00:ca60:16:8000::,2a00:ca60:16:ffff:ffff:ffff:ffff:ffff,GB -2a00:ca60:17::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a00:ca60::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a00:ca80::,2a00:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:caa0::,2a00:caa0:ffff:ffff:ffff:ffff:ffff:ffff,JO 2a00:cac0::,2a00:cac0:ffff:ffff:ffff:ffff:ffff:ffff,AT @@ -22254,7 +21435,7 @@ 2a00:df60::,2a00:df60:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:df80::,2a00:df80:ffff:ffff:ffff:ffff:ffff:ffff,HU 2a00:dfa0::,2a00:dfa0:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a00:dfc0::,2a00:dfc0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a00:dfc0::,2a00:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a00:dfe0::,2a00:dfe7:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a00:e000::,2a00:e000:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a00:e020::,2a00:e020:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -22315,8 +21496,7 @@ 2a00:e760::,2a00:e760:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a00:e780::,2a00:e780:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a00:e7a0::,2a00:e7a0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a00:e7c0::,2a00:e7c0::7fff:ffff:ffff:ffff:ffff,LT -2a00:e7c0:0:8000::,2a00:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a00:e7c0::,2a00:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a00:e7e0::,2a00:e7e0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a00:e800::,2a00:e807:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a00:e840::,2a00:e840:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -22536,17 +21716,7 @@ 2a01:c8::,2a01:c8:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:d0::,2a01:d0:896c:7fff:ffff:ffff:ffff:ffff,UA 2a01:d0:896c:8000::,2a01:d0:896c:ffff:ffff:ffff:ffff:ffff,RU -2a01:d0:896d::,2a01:d0:8de4:ffff:ffff:ffff:ffff:ffff,UA -2a01:d0:8de5::,2a01:d0:8de5:7fff:ffff:ffff:ffff:ffff,RU -2a01:d0:8de5:8000::,2a01:d0:93ff:ffff:ffff:ffff:ffff:ffff,UA -2a01:d0:9400::,2a01:d0:9400:7fff:ffff:ffff:ffff:ffff,RU -2a01:d0:9400:8000::,2a01:d0:95d7:ffff:ffff:ffff:ffff:ffff,UA -2a01:d0:95d8::,2a01:d0:95d8:7fff:ffff:ffff:ffff:ffff,RU -2a01:d0:95d8:8000::,2a01:d0:b2f5:ffff:ffff:ffff:ffff:ffff,UA -2a01:d0:b2f6::,2a01:d0:b2f6:7fff:ffff:ffff:ffff:ffff,RU -2a01:d0:b2f6:8000::,2a01:d0:bf61:ffff:ffff:ffff:ffff:ffff,UA -2a01:d0:bf62::,2a01:d0:bf62:7fff:ffff:ffff:ffff:ffff,RU -2a01:d0:bf62:8000::,2a01:d0:bfcf:ffff:ffff:ffff:ffff:ffff,UA +2a01:d0:896d::,2a01:d0:bfcf:ffff:ffff:ffff:ffff:ffff,UA 2a01:d0:bfd0::,2a01:d0:bfd0:7fff:ffff:ffff:ffff:ffff,RU 2a01:d0:bfd0:8000::,2a01:d0:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a01:d8::,2a01:d8:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -22556,9 +21726,7 @@ 2a01:f8::,2a01:f8:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a01:100::,2a01:100:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a01:108::,2a01:108:ffff:ffff:ffff:ffff:ffff:ffff,SK -2a01:110::,2a01:110:9007:ffff:ffff:ffff:ffff:ffff,GB -2a01:110:9008::,2a01:110:9008:7fff:ffff:ffff:ffff:ffff,EE -2a01:110:9008:8000::,2a01:111::c6:3fff:ffff:ffff:ffff,GB +2a01:110::,2a01:111::c6:3fff:ffff:ffff:ffff,GB 2a01:111:0:c6:4000::,2a01:111::c6:7fff:ffff:ffff:ffff,IE 2a01:111:0:c6:8000::,2a01:111::cb:bfff:ffff:ffff:ffff,GB 2a01:111:0:cb:c000::,2a01:111::cb:ffff:ffff:ffff:ffff,US @@ -22655,11 +21823,7 @@ 2a01:228::,2a01:228:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:230::,2a01:230:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:238::,2a01:23f:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a01:240::,2a01:240:fdff:ffff:ffff:ffff:ffff:ffff,FR -2a01:240:fe00::,2a01:240:fe00:7fff:ffff:ffff:ffff:ffff,ES -2a01:240:fe00:8000::,2a01:240:feda:ffff:ffff:ffff:ffff:ffff,FR -2a01:240:fedb::,2a01:240:fedb:7fff:ffff:ffff:ffff:ffff,PT -2a01:240:fedb:8000::,2a01:240:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:240::,2a01:240:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:248::,2a01:248:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:250::,2a01:250:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a01:258::,2a01:258:ffff:ffff:ffff:ffff:ffff:ffff,IE @@ -22682,20 +21846,13 @@ 2a01:2d0::,2a01:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:2d8::,2a01:2df:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:2e0::,2a01:2ef:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a01:300:1::,2a01:300:1:7fff:ffff:ffff:ffff:ffff,FR 2a01:308::,2a01:308:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:310::,2a01:310:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:320::,2a01:327:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a01:328::,2a01:328:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a01:330::,2a01:330:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:338::,2a01:338:ffff:ffff:ffff:ffff:ffff:ffff,PL -2a01:348::,2a01:348:6:5ff:ffff:ffff:ffff:ffff,GB -2a01:348:6:600::,2a01:348:6:6ff:ffff:ffff:ffff:ffff,AU -2a01:348:6:700::,2a01:348:1fe:ffff:ffff:ffff:ffff:ffff,GB -2a01:348:1ff::,2a01:348:1ff:7fff:ffff:ffff:ffff:ffff,IS -2a01:348:1ff:8000::,2a01:348:338:ffff:ffff:ffff:ffff:ffff,GB -2a01:348:339::,2a01:348:339:7fff:ffff:ffff:ffff:ffff,NL -2a01:348:339:8000::,2a01:348:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a01:348::,2a01:348:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:350::,2a01:350:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:358::,2a01:35f:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a01:360::,2a01:367:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -22711,8 +21868,6 @@ 2a01:398::,2a01:398:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:3a0::,2a01:3a7:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a01:3a8::,2a01:3a8:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a01:3b0:1::,2a01:3b0:1:7fff:ffff:ffff:ffff:ffff,DE -2a01:3b0:c08::,2a01:3b0:c08:7fff:ffff:ffff:ffff:ffff,DE 2a01:3b8::,2a01:3b8:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a01:3c8::,2a01:3c8:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a01:3d8::,2a01:3d8:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -22757,13 +21912,9 @@ 2a01:488::,2a01:488:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:490::,2a01:490:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:498::,2a01:498:ffff:ffff:ffff:ffff:ffff:ffff,BE -2a01:4a0::,2a01:4a0:17:ffff:ffff:ffff:ffff:ffff,DE -2a01:4a0:18::,2a01:4a0:18:7fff:ffff:ffff:ffff:ffff,CH -2a01:4a0:18:8000::,2a01:4a0:2c:ffff:ffff:ffff:ffff:ffff,DE +2a01:4a0::,2a01:4a0:2c:ffff:ffff:ffff:ffff:ffff,DE 2a01:4a0:2d::,2a01:4a0:2d:7fff:ffff:ffff:ffff:ffff,CH -2a01:4a0:2d:8000::,2a01:4a0:2d:ffff:ffff:ffff:ffff:ffff,DE -2a01:4a0:2e::,2a01:4a0:2e:7fff:ffff:ffff:ffff:ffff,CZ -2a01:4a0:2e:8000::,2a01:4af:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a01:4a0:2d:8000::,2a01:4af:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:4b0::,2a01:4b0:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a01:4c0::,2a01:4c0:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a01:4c8::,2a01:4cf:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -22778,7 +21929,7 @@ 2a01:510::,2a01:510:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:518::,2a01:518:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a01:520::,2a01:520:ffff:ffff:ffff:ffff:ffff:ffff,NO -2a01:528::,2a01:528:ffff:ffff:ffff:ffff:ffff:ffff,IS +2a01:528::,2a01:528:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:530::,2a01:530:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:538::,2a01:538:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:540::,2a01:540:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -22863,13 +22014,9 @@ 2a01:7e8::,2a01:7e8:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a01:7f0::,2a01:7f0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:7f8::,2a01:7f8:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a01:800::,2a01:838:fffe:ffff:ffff:ffff:ffff:ffff,DE -2a01:838:ffff::,2a01:838:ffff:7fff:ffff:ffff:ffff:ffff,MT -2a01:838:ffff:8000::,2a01:8ff:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a01:800::,2a01:8ff:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a01:c00::,2a01:c3f:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a01:e00::,2a01:e34:ec40:7fff:ffff:ffff:ffff:ffff,FR -2a01:e34:ec40:8000::,2a01:e34:ec40:ffff:ffff:ffff:ffff:ffff,CH -2a01:e34:ec41::,2a01:e3f:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:e00::,2a01:e3f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a01:1000::,2a01:17ff:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:2000::,2a01:2fff:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a01:4000::,2a01:4000:ffff:ffff:ffff:ffff:ffff:ffff,AM @@ -23379,7 +22526,7 @@ 2a01:7f80::,2a01:7f80:ffff:ffff:ffff:ffff:ffff:ffff,PS 2a01:7fa0::,2a01:7fa0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:7fc0::,2a01:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a01:7fe0::,2a01:7fe0:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a01:7fe0::,2a01:7fe7:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:8000::,2a01:8000:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:8020::,2a01:8020:ffff:ffff:ffff:ffff:ffff:ffff,EE 2a01:8040::,2a01:8047:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -23431,7 +22578,6 @@ 2a01:85c0::,2a01:85c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a01:85e0::,2a01:85e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:8600::,2a01:8600:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a01:8620::,2a01:8620:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a01:8640::,2a01:8640::ffff:ffff:ffff:ffff:ffff,NL 2a01:8640:1::,2a01:8640:1:ffff:ffff:ffff:ffff:ffff,GB 2a01:8640:2::,2a01:8640:2:ffff:ffff:ffff:ffff:ffff,NL @@ -23482,9 +22628,7 @@ 2a01:8b80::,2a01:8b80:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a01:8ba0::,2a01:8ba7:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a01:8be0::,2a01:8be7:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a01:8c00::,2a01:8c00:feff:ffff:ffff:ffff:ffff:ffff,CZ -2a01:8c00:ff00::,2a01:8c00:ff00:7fff:ffff:ffff:ffff:ffff,SK -2a01:8c00:ff00:8000::,2a01:8c00:ff00:82b0:ffff:ffff:ffff:ffff,CZ +2a01:8c00::,2a01:8c00:ff00:82b0:ffff:ffff:ffff:ffff,CZ 2a01:8c00:ff00:82b1::,2a01:8c00:ff00:82b1:ffff:ffff:ffff:ffff,US 2a01:8c00:ff00:82b2::,2a01:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a01:8c20::,2a01:8c20:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -23893,17 +23037,11 @@ 2a01:bfa0::,2a01:bfa0:ffff:ffff:ffff:ffff:ffff:ffff,KG 2a01:bfc0::,2a01:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a01:bfe0::,2a01:bfe0:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a01:c000::,2a01:c844:1011:ffff:ffff:ffff:ffff:ffff,FR -2a01:c844:1012::,2a01:c844:1012:7fff:ffff:ffff:ffff:ffff,SK -2a01:c844:1012:8000::,2a01:c844:140a:e00:50e1:6f6d:63d4:31e,FR +2a01:c000::,2a01:c844:1092:1600:f830:5237:bdc:ccd0,FR +2a01:c844:1092:1600:f830:5237:bdc:ccd1,2a01:c844:1092:1600:f830:5237:bdc:ccd1,SK +2a01:c844:1092:1600:f830:5237:bdc:ccd2,2a01:c844:140a:e00:50e1:6f6d:63d4:31e,FR 2a01:c844:140a:e00:50e1:6f6d:63d4:31f,2a01:c844:140a:e00:50e1:6f6d:63d4:31f,SK -2a01:c844:140a:e00:50e1:6f6d:63d4:320,2a01:c844:142b:7fff:ffff:ffff:ffff:ffff,FR -2a01:c844:142b:8000::,2a01:c844:142b:ffff:ffff:ffff:ffff:ffff,SK -2a01:c844:142c::,2a01:cb19:8694:7fff:ffff:ffff:ffff:ffff,FR -2a01:cb19:8694:8000::,2a01:cb19:8694:ffff:ffff:ffff:ffff:ffff,GF -2a01:cb19:8695::,2a01:cb1d:d8:7fff:ffff:ffff:ffff:ffff,FR -2a01:cb1d:d8:8000::,2a01:cb1d:d8:ffff:ffff:ffff:ffff:ffff,CA -2a01:cb1d:d9::,2a01:dfff:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a01:c844:140a:e00:50e1:6f6d:63d4:320,2a01:dfff:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02::,2a02::ffff:ffff:ffff:ffff:ffff:ffff,LU 2a02:10::,2a02:17:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:18::,2a02:18:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -23926,9 +23064,7 @@ 2a02:a0::,2a02:a0:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:a8::,2a02:a8:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:b0::,2a02:b0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a02:b8::,2a02:b8::ffff:ffff:ffff:ffff:ffff,LU -2a02:b8:1::,2a02:b8:1:7fff:ffff:ffff:ffff:ffff,FR -2a02:b8:1:8000::,2a02:b8:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a02:b8::,2a02:b8:ffff:ffff:ffff:ffff:ffff:ffff,LU 2a02:c0::,2a02:c0:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a02:c8::,2a02:c8:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a02:d0::,2a02:d0:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -23997,8 +23133,7 @@ 2a02:2b8::,2a02:2b8:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:2c0::,2a02:2c0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2c8::,2a02:2c8:ffff:ffff:ffff:ffff:ffff:ffff,NO -2a02:2d8::,2a02:2d8::7fff:ffff:ffff:ffff:ffff,RU -2a02:2d8:0:8000::,2a02:2d8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:2d8::,2a02:2d8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:2e0::,2a02:2e7:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2e8::,2a02:2e8:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:2f0::,2a02:2f7:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -24078,17 +23213,15 @@ 2a02:560::,2a02:560:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:568::,2a02:568:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:570::,2a02:570:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a02:578::,2a02:578:5002:7fff:ffff:ffff:ffff:ffff,BE -2a02:578:5002:8000::,2a02:578:5002:ffff:ffff:ffff:ffff:ffff,RU -2a02:578:5003::,2a02:578:5411:ffff:ffff:ffff:ffff:ffff,BE -2a02:578:5412::,2a02:578:5412:7fff:ffff:ffff:ffff:ffff,RU -2a02:578:5412:8000::,2a02:578:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a02:578::,2a02:578:5001:ffff:ffff:ffff:ffff:ffff,BE +2a02:578:5002::,2a02:578:5002:ffff:ffff:ffff:ffff:ffff,RU +2a02:578:5003::,2a02:578:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a02:580::,2a02:587:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a02:588::,2a02:588:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:590::,2a02:597:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:598::,2a02:598:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:5a0::,2a02:5a0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:5b0::,2a02:5b0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:5b0::,2a02:5b7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:5b8::,2a02:5b8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:5c0::,2a02:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a02:5d0::,2a02:5d7:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -24193,9 +23326,7 @@ 2a02:8f0::,2a02:8f0:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a02:8f8::,2a02:8f8:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:900::,2a02:900:ffff:ffff:ffff:ffff:ffff:ffff,BG -2a02:908::,2a02:908:189:ffff:ffff:ffff:ffff:ffff,DE -2a02:908:18a::,2a02:908:18a:7fff:ffff:ffff:ffff:ffff,RO -2a02:908:18a:8000::,2a02:908:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:908::,2a02:908:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:910::,2a02:910:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:918::,2a02:918:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:920::,2a02:920:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -24257,9 +23388,7 @@ 2a02:ae0::,2a02:ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:ae8::,2a02:aef:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:af0::,2a02:af0:ffff:ffff:ffff:ffff:ffff:ffff,AT -2a02:af8::,2a02:af8:dad9:ffff:ffff:ffff:ffff:ffff,GB -2a02:af8:dada::,2a02:af8:dada:7fff:ffff:ffff:ffff:ffff,IT -2a02:af8:dada:8000::,2a02:af8:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:af8::,2a02:af8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:b00::,2a02:b00:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:b08::,2a02:b0f:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:b10::,2a02:b10:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -24302,7 +23431,9 @@ 2a02:c60::,2a02:c60:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:c68::,2a02:c68:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:c70::,2a02:c70:ffff:ffff:ffff:ffff:ffff:ffff,FR -2a02:c78::,2a02:c7f:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a02:c78::,2a02:c7d:81fb:7fff:ffff:ffff:ffff:ffff,GB +2a02:c7d:81fb:8000::,2a02:c7d:81fb:ffff:ffff:ffff:ffff:ffff,DE +2a02:c7d:81fc::,2a02:c7f:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:c80::,2a02:c80:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a02:c88::,2a02:c88:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:c90::,2a02:c90:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -24408,11 +23539,7 @@ 2a02:fe8::,2a02:fe9:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:ff0::,2a02:ff0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a02:1000::,2a02:103f:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:1200::,2a02:1205:13e3:ffff:ffff:ffff:ffff:ffff,CH -2a02:1205:13e4::,2a02:1205:13e4:7fff:ffff:ffff:ffff:ffff,FR -2a02:1205:13e4:8000::,2a02:1206:45a0:ffff:ffff:ffff:ffff:ffff,CH -2a02:1206:45a1::,2a02:1206:45a1:7fff:ffff:ffff:ffff:ffff,DE -2a02:1206:45a1:8000::,2a02:121f:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a02:1200::,2a02:121f:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a02:1300::,2a02:1300:ffff:ffff:ffff:ffff:ffff:ffff,IS 2a02:1308::,2a02:1308:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:1310::,2a02:1310:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -24551,9 +23678,7 @@ 2a02:2150::,2a02:2150:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:2158::,2a02:2158:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a02:2160::,2a02:2160:ffff:ffff:ffff:ffff:ffff:ffff,RO -2a02:2168::,2a02:2168:3bc2:ffff:ffff:ffff:ffff:ffff,RU -2a02:2168:3bc3::,2a02:2168:3bc3:7fff:ffff:ffff:ffff:ffff,US -2a02:2168:3bc3:8000::,2a02:216f:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a02:2168::,2a02:216f:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:2170::,2a02:2170:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:2178::,2a02:217f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:2180::,2a02:2180:ffff:ffff:ffff:ffff:ffff:ffff,DK @@ -24579,7 +23704,7 @@ 2a02:2220::,2a02:2220:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:2228::,2a02:2228:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2230::,2a02:2230:ffff:ffff:ffff:ffff:ffff:ffff,SI -2a02:2240::,2a02:2240:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a02:2240::,2a02:2247:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:2248::,2a02:2248:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a02:2250::,2a02:2250:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2258::,2a02:2258:ffff:ffff:ffff:ffff:ffff:ffff,FR @@ -24763,14 +23888,12 @@ 2a02:27f8::,2a02:27f8:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:2800::,2a02:2807:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2808::,2a02:2808:1005:ffff:ffff:ffff:ffff:ffff,CZ -2a02:2808:1006::,2a02:2808:1006:ffff:ffff:ffff:ffff:ffff,RU -2a02:2808:1007::,2a02:2808:3000:ffff:ffff:ffff:ffff:ffff,CZ +2a02:2808:1006::,2a02:2808:1006:7fff:ffff:ffff:ffff:ffff,RU +2a02:2808:1006:8000::,2a02:2808:3000:ffff:ffff:ffff:ffff:ffff,CZ 2a02:2808:3001::,2a02:2808:3001:ffff:ffff:ffff:ffff:ffff,RU 2a02:2808:3002::,2a02:2808:5300:ffff:ffff:ffff:ffff:ffff,CZ 2a02:2808:5301::,2a02:2808:5301:ffff:ffff:ffff:ffff:ffff,RU -2a02:2808:5302::,2a02:2808:5400:ffff:ffff:ffff:ffff:ffff,CZ -2a02:2808:5401::,2a02:2808:5401:7fff:ffff:ffff:ffff:ffff,FI -2a02:2808:5401:8000::,2a02:2808:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a02:2808:5302::,2a02:2808:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a02:2810::,2a02:2810:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:2818::,2a02:2818:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a02:2820::,2a02:2820:ffff:ffff:ffff:ffff:ffff:ffff,CH @@ -24780,7 +23903,7 @@ 2a02:2840::,2a02:2840:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2848::,2a02:2848:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:2850::,2a02:2850:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a02:2858::,2a02:2858:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:2858::,2a02:285f:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:2860::,2a02:2867:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:2868::,2a02:2868:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a02:2870::,2a02:2870:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -24797,7 +23920,6 @@ 2a02:28c8::,2a02:28c8:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:28d0::,2a02:28d0:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a02:28d8::,2a02:28d8:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a02:28e0::,2a02:28e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:28e8::,2a02:28e8:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a02:28f0::,2a02:28f0:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:28f8::,2a02:28f8:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -24890,7 +24012,6 @@ 2a02:2c40::,2a02:2c40:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a02:2c60::,2a02:2c60:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:2c80::,2a02:2c80:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a02:2ca0:64::,2a02:2ca0:64:7fff:ffff:ffff:ffff:ffff,NL 2a02:2ca6:2e::,2a02:2ca6:2e:ffff:ffff:ffff:ffff:ffff,GB 2a02:2ca7:2e::,2a02:2ca7:2e:ffff:ffff:ffff:ffff:ffff,US 2a02:2cc0::,2a02:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -24993,7 +24114,7 @@ 2a02:4a60::,2a02:4a60:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:4a80::,2a02:4a80:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:4aa0::,2a02:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a02:4ac0::,2a02:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a02:4ac0::,2a02:4ac7:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:4ae0::,2a02:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a02:4b00::,2a02:4b07:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a02:4b40::,2a02:4b40:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -25002,7 +24123,7 @@ 2a02:4ba0::,2a02:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,BG 2a02:4bc0::,2a02:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a02:4be0::,2a02:4be0:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a02:4c00::,2a02:4c00:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:4c00::,2a02:4c07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:4c20::,2a02:4c20:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:4c40::,2a02:4c47:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:4c80::,2a02:4c80:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -25272,7 +24393,6 @@ 2a02:6da0::,2a02:6da0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:6dc0::,2a02:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:6de0::,2a02:6de0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:6e00:1::,2a02:6e00:1:7fff:ffff:ffff:ffff:ffff,RO 2a02:6e20::,2a02:6e20:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:6e40::,2a02:6e40:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:6e60::,2a02:6e60:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -25423,9 +24543,7 @@ 2a02:8020::,2a02:8023:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:8040::,2a02:8043:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a02:8060::,2a02:8061:ffff:ffff:ffff:ffff:ffff:ffff,AD -2a02:8070::,2a02:8070:898b:ffff:ffff:ffff:ffff:ffff,DE -2a02:8070:898c::,2a02:8070:898c:7fff:ffff:ffff:ffff:ffff,US -2a02:8070:898c:8000::,2a02:8071:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a02:8070::,2a02:8071:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a02:8080::,2a02:8087:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a02:80c0::,2a02:80c3:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:80e0::,2a02:80e3:ffff:ffff:ffff:ffff:ffff:ffff,BG @@ -25436,16 +24554,12 @@ 2a02:8400::,2a02:847f:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:8800::,2a02:88ff:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:9000::,2a02:91ff:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a02:a000::,2a02:a03f:265e:7fff:ffff:ffff:ffff:ffff,BE -2a02:a03f:265e:8000::,2a02:a03f:265e:ffff:ffff:ffff:ffff:ffff,FR -2a02:a03f:265f::,2a02:a03f:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a02:a000::,2a02:a03f:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a02:a200::,2a02:a21f:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:a300::,2a02:a31f:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a02:a400::,2a02:a446:a0fb:ffff:ffff:ffff:ffff:ffff,NL 2a02:a446:a0fc::,2a02:a446:a0fc:7fff:ffff:ffff:ffff:ffff,GB -2a02:a446:a0fc:8000::,2a02:a44f:1021:ffff:ffff:ffff:ffff:ffff,NL -2a02:a44f:1022::,2a02:a44f:1022:7fff:ffff:ffff:ffff:ffff,GB -2a02:a44f:1022:8000::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a02:a446:a0fc:8000::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a02:a800::,2a02:a83f:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a02:aa00::,2a02:aa1f:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a02:ab00::,2a02:ab07:ffff:ffff:ffff:ffff:ffff:ffff,SK @@ -25682,9 +24796,7 @@ 2a02:f0c0::,2a02:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,JO 2a02:f100::,2a02:f107:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a02:f140::,2a02:f147:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a02:f180::,2a02:f181:fff:ffff:ffff:ffff:ffff:ffff,FR -2a02:f181:1000::,2a02:f181:1000:7fff:ffff:ffff:ffff:ffff,GB -2a02:f181:1000:8000::,2a02:f181:2fff:ffff:ffff:ffff:ffff:ffff,FR +2a02:f180::,2a02:f181:2fff:ffff:ffff:ffff:ffff:ffff,FR 2a02:f181:3000::,2a02:f181:3000:7fff:ffff:ffff:ffff:ffff,RO 2a02:f181:3000:8000::,2a02:f187:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a02:f1c0::,2a02:f1c7:ffff:ffff:ffff:ffff:ffff:ffff,UA @@ -25837,7 +24949,7 @@ 2a03:b40::,2a03:b40:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a03:b60::,2a03:b60:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:b80::,2a03:b80:ffff:ffff:ffff:ffff:ffff:ffff,FI -2a03:ba0::,2a03:ba0:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a03:ba0::,2a03:ba7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:bc0::,2a03:bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:c00::,2a03:c00:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:c20::,2a03:c20:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -25866,9 +24978,7 @@ 2a03:f00::,2a03:f07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:f40::,2a03:f40:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a03:f60::,2a03:f60:ffff:ffff:ffff:ffff:ffff:ffff,NO -2a03:f80::,2a03:f80:3f:ffff:ffff:ffff:ffff:ffff,AT -2a03:f80:40::,2a03:f80:40:7fff:ffff:ffff:ffff:ffff,RO -2a03:f80:40:8000::,2a03:f80:43:ffff:ffff:ffff:ffff:ffff,AT +2a03:f80::,2a03:f80:43:ffff:ffff:ffff:ffff:ffff,AT 2a03:f80:44::,2a03:f80:44:ffff:ffff:ffff:ffff:ffff,IM 2a03:f80:45::,2a03:f80:47:ffff:ffff:ffff:ffff:ffff,AT 2a03:f80:48::,2a03:f80:48:7fff:ffff:ffff:ffff:ffff,PL @@ -25876,9 +24986,7 @@ 2a03:f80:56::,2a03:f80:56:ffff:ffff:ffff:ffff:ffff,CL 2a03:f80:57::,2a03:f80:353:ffff:ffff:ffff:ffff:ffff,AT 2a03:f80:354::,2a03:f80:354:ffff:ffff:ffff:ffff:ffff,IS -2a03:f80:355::,2a03:f80:851:ffff:ffff:ffff:ffff:ffff,AT -2a03:f80:852::,2a03:f80:852:7fff:ffff:ffff:ffff:ffff,HK -2a03:f80:852:8000::,2a03:f87:7:ffff:ffff:ffff:ffff:ffff,AT +2a03:f80:355::,2a03:f87:7:ffff:ffff:ffff:ffff:ffff,AT 2a03:f87:8::,2a03:f87:8:7fff:ffff:ffff:ffff:ffff,SG 2a03:f87:8:8000::,2a03:f87:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a03:fc0::,2a03:fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -25969,9 +25077,7 @@ 2a03:1ac0::,2a03:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:1ae0::,2a03:1ae0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:1b00::,2a03:1b00:ffff:ffff:ffff:ffff:ffff:ffff,RU -2a03:1b20::,2a03:1b20:3:7fff:ffff:ffff:ffff:ffff,SE -2a03:1b20:3:8000::,2a03:1b20:3:ffff:ffff:ffff:ffff:ffff,NL -2a03:1b20:4::,2a03:1b20:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a03:1b20::,2a03:1b20:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:1b40::,2a03:1b40:ffff:ffff:ffff:ffff:ffff:ffff,RS 2a03:1b60::,2a03:1b60:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:1b80::,2a03:1b87:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -26026,9 +25132,7 @@ 2a03:2200::,2a03:2200:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a03:2220::,2a03:2220:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a03:2240::,2a03:2240:ffff:ffff:ffff:ffff:ffff:ffff,IE -2a03:2260::,2a03:2260:2008:ffff:ffff:ffff:ffff:ffff,DE -2a03:2260:2009::,2a03:2260:2009:7fff:ffff:ffff:ffff:ffff,NL -2a03:2260:2009:8000::,2a03:2267:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:2260::,2a03:2267:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:2280::,2a03:2280:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:22a0::,2a03:22a0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:22c0::,2a03:22c0:ffff:ffff:ffff:ffff:ffff:ffff,PL @@ -26088,7 +25192,9 @@ 2a03:2880:2021::,2a03:2880:202f:ffff:ffff:ffff:ffff:ffff,IE 2a03:2880:2030::,2a03:2880:2030:7fff:ffff:ffff:ffff:ffff,US 2a03:2880:2030:8000::,2a03:2880:2110:7fff:ffff:ffff:ffff:ffff,IE -2a03:2880:2110:8000::,2a03:2880:2111:ffff:ffff:ffff:ffff:ffff,US +2a03:2880:2110:8000::,2a03:2880:2110:ffff:ffff:ffff:ffff:ffff,US +2a03:2880:2111::,2a03:2880:2111:7fff:ffff:ffff:ffff:ffff,IE +2a03:2880:2111:8000::,2a03:2880:2111:ffff:ffff:ffff:ffff:ffff,US 2a03:2880:2112::,2a03:2880:212f:ffff:ffff:ffff:ffff:ffff,IE 2a03:2880:2130::,2a03:2880:2130:ffff:ffff:ffff:ffff:ffff,US 2a03:2880:2131::,2a03:2887:ffff:ffff:ffff:ffff:ffff:ffff,IE @@ -26282,7 +25388,6 @@ 2a03:40a0::,2a03:40a0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:40c0::,2a03:40c0:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:40e0::,2a03:40e0:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a03:4100::,2a03:4107:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a03:4140::,2a03:4140:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:4160::,2a03:4160:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4180::,2a03:4180:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -26342,9 +25447,7 @@ 2a03:48a0::,2a03:48a0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:48c0::,2a03:48c0:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a03:48e0::,2a03:48e0:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a03:4900::,2a03:4900::ffff:ffff:ffff:ffff:ffff,RU -2a03:4900:1::,2a03:4900:1:7fff:ffff:ffff:ffff:ffff,UA -2a03:4900:1:8000::,2a03:4900:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:4900::,2a03:4900:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:4920::,2a03:4920:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:4940::,2a03:4940:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a03:4960::,2a03:4960:ffff:ffff:ffff:ffff:ffff:ffff,RS @@ -26402,7 +25505,7 @@ 2a03:4ce0::,2a03:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:4d00::,2a03:4d00:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:4d20::,2a03:4d27:ffff:ffff:ffff:ffff:ffff:ffff,FI -2a03:4d40::,2a03:4d40:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a03:4d40::,2a03:4d47:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:4d60::,2a03:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:4d80::,2a03:4d80:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:4da0::,2a03:4da0:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -26499,7 +25602,9 @@ 2a03:5980::,2a03:5980:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:59c0::,2a03:59c0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:59e0::,2a03:59e0:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a03:5a00::,2a03:5a07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:5a00::,2a03:5a00:40:ffff:ffff:ffff:ffff:ffff,RU +2a03:5a00:41::,2a03:5a00:41:ffff:ffff:ffff:ffff:ffff,NL +2a03:5a00:42::,2a03:5a07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:5a40::,2a03:5a40:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:5a60::,2a03:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:5a80::,2a03:5a80:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -26554,7 +25659,7 @@ 2a03:60e0::,2a03:60e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:6100::,2a03:6100:ffff:ffff:ffff:ffff:ffff:ffff,HR 2a03:6120::,2a03:6120:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a03:6140::,2a03:6140:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a03:6140::,2a03:6147:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:6160::,2a03:6160:ffff:ffff:ffff:ffff:ffff:ffff,AZ 2a03:6180::,2a03:6180:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:61a0::,2a03:61a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ @@ -26628,7 +25733,6 @@ 2a03:6a00::,2a03:6a07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:6a40::,2a03:6a40:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:6a60::,2a03:6a60:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a03:6a80::,2a03:6a80:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a03:6aa0::,2a03:6aa0:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:6ac0::,2a03:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,IQ 2a03:6ae0::,2a03:6ae0:ffff:ffff:ffff:ffff:ffff:ffff,IR @@ -27251,8 +26355,8 @@ 2a03:b0c0::,2a03:b0c0::ffff:ffff:ffff:ffff:ffff,NL 2a03:b0c0:1::,2a03:b0c0:1:ffff:ffff:ffff:ffff:ffff,GB 2a03:b0c0:2::,2a03:b0c0:2:ffff:ffff:ffff:ffff:ffff,NL -2a03:b0c0:3::,2a03:b0c0:3:ff:ffff:ffff:ffff:ffff,DE -2a03:b0c0:3:100::,2a03:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:b0c0:3::,2a03:b0c0:3:7fff:ffff:ffff:ffff:ffff,DE +2a03:b0c0:3:8000::,2a03:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:b0e0::,2a03:b0e0:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a03:b100::,2a03:b100:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a03:b140::,2a03:b140:ffff:ffff:ffff:ffff:ffff:ffff,IT @@ -27394,9 +26498,7 @@ 2a03:d3c0::,2a03:d3c0:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:d400::,2a03:d400:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a03:d440::,2a03:d440:ffff:ffff:ffff:ffff:ffff:ffff,HU -2a03:d480::,2a03:d480::ffff:ffff:ffff:ffff:ffff,GB -2a03:d480:1::,2a03:d480:1:7fff:ffff:ffff:ffff:ffff,IM -2a03:d480:1:8000::,2a03:d480:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a03:d480::,2a03:d480:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:d4c0::,2a03:d4c0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:d500::,2a03:d500:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a03:d540::,2a03:d540:ffff:ffff:ffff:ffff:ffff:ffff,SE @@ -27550,7 +26652,7 @@ 2a03:fa80::,2a03:fa80:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a03:fac0::,2a03:fac7:ffff:ffff:ffff:ffff:ffff:ffff,BA 2a03:fb00::,2a03:fb00:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a03:fb40::,2a03:fb40:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a03:fb40::,2a03:fb47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a03:fb80::,2a03:fb80:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a03:fbc0::,2a03:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a03:fc00::,2a03:fc07:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -27748,7 +26850,6 @@ 2a04:2b80::,2a04:2b87:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a04:2bc0::,2a04:2bc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:2c00::,2a04:2c07:ffff:ffff:ffff:ffff:ffff:ffff,UA -2a04:2c40:7::,2a04:2c40:7:7fff:ffff:ffff:ffff:ffff,FR 2a04:2c80::,2a04:2c87:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a04:2cc0::,2a04:2cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:2d00::,2a04:2d07:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -28280,8 +27381,7 @@ 2a04:acc0::,2a04:acc7:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a04:ad00::,2a04:ad07:ffff:ffff:ffff:ffff:ffff:ffff,IQ 2a04:ad40::,2a04:ad47:ffff:ffff:ffff:ffff:ffff:ffff,FI -2a04:ad80::,2a04:ad80::7fff:ffff:ffff:ffff:ffff,NL -2a04:ad80:0:8000::,2a04:ad87:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a04:ad80::,2a04:ad87:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a04:adc0::,2a04:adc7:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a04:ae00::,2a04:ae3f:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a04:b000::,2a04:b007:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -28704,9 +27804,7 @@ 2a05:1440::,2a05:1447:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a05:1480::,2a05:1487:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a05:14c0::,2a05:14c7:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a05:1500::,2a05:1500:ff:ffff:ffff:ffff:ffff:ffff,DE -2a05:1500:100::,2a05:1500:100:7fff:ffff:ffff:ffff:ffff,US -2a05:1500:100:8000::,2a05:1507:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a05:1500::,2a05:1507:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a05:1540::,2a05:1547:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a05:1580::,2a05:1587:ffff:ffff:ffff:ffff:ffff:ffff,LT 2a05:15c0::,2a05:15c7:ffff:ffff:ffff:ffff:ffff:ffff,DE @@ -28753,11 +27851,7 @@ 2a05:2180::,2a05:2187:ffff:ffff:ffff:ffff:ffff:ffff,TM 2a05:21c0::,2a05:21c7:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a05:2200::,2a05:2207:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a05:2240::,2a05:2242:436:ffff:ffff:ffff:ffff:ffff,SE -2a05:2242:437::,2a05:2242:437:7fff:ffff:ffff:ffff:ffff,NO -2a05:2242:437:8000::,2a05:2242:437:ffff:ffff:ffff:ffff:ffff,SE -2a05:2242:438::,2a05:2242:438:7fff:ffff:ffff:ffff:ffff,NO -2a05:2242:438:8000::,2a05:2247:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a05:2240::,2a05:2247:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a05:2280::,2a05:2287:ffff:ffff:ffff:ffff:ffff:ffff,SI 2a05:22c0::,2a05:22c7:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a05:2300::,2a05:2307:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -29758,9 +28852,7 @@ 2a06:1bc0::,2a06:1bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:1c00::,2a06:1c07:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a06:1c40::,2a06:1c47:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a06:1c80::,2a06:1c80::ffff:ffff:ffff:ffff:ffff,NL -2a06:1c80:1::,2a06:1c80:1:7fff:ffff:ffff:ffff:ffff,US -2a06:1c80:1:8000::,2a06:1c87:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a06:1c80::,2a06:1c87:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a06:1cc0::,2a06:1cc7:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a06:1d00::,2a06:1d07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a06:1d40::,2a06:1d47:ffff:ffff:ffff:ffff:ffff:ffff,GB @@ -30190,9 +29282,7 @@ 2a06:8187:fd04::,2a06:8187:fd98:ffff:ffff:ffff:ffff:ffff,FR 2a06:8187:fd99::,2a06:8187:fd99:ffff:ffff:ffff:ffff:ffff,LI 2a06:8187:fd9a::,2a06:8187:fdff:ffff:ffff:ffff:ffff:ffff,FR -2a06:8187:fe00::,2a06:8187:fe00:ffff:ffff:ffff:ffff:ffff,GB -2a06:8187:fe01::,2a06:8187:fe01:7fff:ffff:ffff:ffff:ffff,DE -2a06:8187:fe01:8000::,2a06:8187:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a06:8187:fe00::,2a06:8187:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:81c0::,2a06:81c7:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a06:8200::,2a06:8207:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a06:8240::,2a06:8247:ffff:ffff:ffff:ffff:ffff:ffff,MY @@ -30347,8 +29437,7 @@ 2a06:a540::,2a06:a547:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a06:a580::,2a06:a587:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a06:a5c0::,2a06:a5c7:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a06:a600::,2a06:a600::7fff:ffff:ffff:ffff:ffff,PT -2a06:a600:0:8000::,2a06:a607:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a06:a600::,2a06:a607:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a06:a640::,2a06:a647:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a06:a680::,2a06:a687:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a06:a6c0::,2a06:a6c7:ffff:ffff:ffff:ffff:ffff:ffff,ES @@ -30612,9 +29701,13 @@ 2a06:e7c0::,2a06:e7c7:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a06:e800::,2a06:e807:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a06:e840::,2a06:e847:ffff:ffff:ffff:ffff:ffff:ffff,ES -2a06:e880::,2a06:e881:1ff:ffff:ffff:ffff:ffff:ffff,CH +2a06:e880::,2a06:e881:105:ffff:ffff:ffff:ffff:ffff,CH +2a06:e881:106::,2a06:e881:106:ffff:ffff:ffff:ffff:ffff,GB +2a06:e881:107::,2a06:e881:1ff:ffff:ffff:ffff:ffff:ffff,CH 2a06:e881:200::,2a06:e881:2ff:ffff:ffff:ffff:ffff:ffff,AT -2a06:e881:300::,2a06:e887:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a06:e881:300::,2a06:e881:14ff:ffff:ffff:ffff:ffff:ffff,CH +2a06:e881:1500::,2a06:e881:150f:ffff:ffff:ffff:ffff:ffff,GB +2a06:e881:1510::,2a06:e887:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a06:e8c0::,2a06:e8c7:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a06:e900::,2a06:e907:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a06:e940::,2a06:e947:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -30725,7 +29818,9 @@ 2a07:380::,2a07:387:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a07:3c0::,2a07:3c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a07:400::,2a07:407:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a07:440::,2a07:447:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a07:440::,2a07:440:1fff:ffff:ffff:ffff:ffff:ffff,DE +2a07:440:2000::,2a07:440:2000:7fff:ffff:ffff:ffff:ffff,US +2a07:440:2000:8000::,2a07:447:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a07:480::,2a07:487:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a07:4c0::,2a07:4c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a07:500::,2a07:507:ffff:ffff:ffff:ffff:ffff:ffff,RU @@ -31000,7 +30095,6 @@ 2a07:4900::,2a07:4907:ffff:ffff:ffff:ffff:ffff:ffff,CY 2a07:4940::,2a07:4947:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a07:4980::,2a07:4987:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a07:49c0::,2a07:49c7:ffff:ffff:ffff:ffff:ffff:ffff,KZ 2a07:4a00::,2a07:4a07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a07:4a40::,2a07:4a47:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a07:4a80::,2a07:4a87:ffff:ffff:ffff:ffff:ffff:ffff,LT @@ -31235,7 +30329,7 @@ 2a07:83c0::,2a07:83c7:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a07:8400::,2a07:8407:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a07:8440::,2a07:8447:ffff:ffff:ffff:ffff:ffff:ffff,IT -2a07:8480::,2a07:8487:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a07:8480::,2a07:8487:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a07:84c0::,2a07:84c7:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a07:8500::,2a07:8507:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a07:8540::,2a07:8547:ffff:ffff:ffff:ffff:ffff:ffff,NL @@ -31682,227 +30776,364 @@ 2a0a:8b00::,2a0a:8b07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:8c00::,2a0a:8c07:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a0a:8d00::,2a0a:8d07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a0a:8e00::,2a0a:8e05:7fff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:8e05:8000::,2a0a:8e05:8000:ffff:ffff:ffff:ffff:ffff,US -2a0a:8e05:8001::,2a0a:8e07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:8e00::,2a0a:8e07:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:8f00::,2a0a:8f00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:9000::,2a0a:9007:ffff:ffff:ffff:ffff:ffff:ffff,PT 2a0a:9100::,2a0a:9107:ffff:ffff:ffff:ffff:ffff:ffff,LB -2a0a:9200::,2a0a:9205:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:9206::,2a0a:9206::ffff:ffff:ffff:ffff:ffff,US -2a0a:9206:1::,2a0a:9207:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:9200::,2a0a:9207:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:9300::,2a0a:9307:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:9400::,2a0a:9407:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a0a:9500::,2a0a:9507:ffff:ffff:ffff:ffff:ffff:ffff,FI -2a0a:9600::,2a0a:9606:7fff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:9606:8000::,2a0a:9606:8000:ffff:ffff:ffff:ffff:ffff,US -2a0a:9606:8001::,2a0a:9607:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:9600::,2a0a:9607:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:9700::,2a0a:9700:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:9800::,2a0a:9807:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:9900::,2a0a:9907:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:9a00::,2a0a:9a06:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:9a07::,2a0a:9a07::ffff:ffff:ffff:ffff:ffff,US -2a0a:9a07:1::,2a0a:9a07:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:9b00::,2a0a:9b07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:9a00::,2a0a:9a07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:9b00::,2a0a:9b07:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:9c00::,2a0a:9c07:ffff:ffff:ffff:ffff:ffff:ffff,SA 2a0a:9d00::,2a0a:9d00:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:9e00::,2a0a:9e03:7fff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:9e03:8000::,2a0a:9e03:8000:ffff:ffff:ffff:ffff:ffff,US -2a0a:9e03:8001::,2a0a:9e07:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:9f00::,2a0a:9f07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:9e00::,2a0a:9e07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:9f00::,2a0a:9f07:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:a000::,2a0a:a000:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:a100::,2a0a:a100:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:a200::,2a0a:a207:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:a300::,2a0a:a307:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a0a:a400::,2a0a:a407:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:a500::,2a0a:a507:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a0a:a600::,2a0a:a602:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:a603::,2a0a:a603::ffff:ffff:ffff:ffff:ffff,US -2a0a:a603:1::,2a0a:a607:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:a700::,2a0a:a707:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:a600::,2a0a:a607:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:a700::,2a0a:a707:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0a:a800::,2a0a:a807:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0a:a900::,2a0a:a900:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:aa00::,2a0a:aa03:ffff:ffff:ffff:ffff:ffff:ffff,CY +2a0a:ab00::,2a0a:ab07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:ac00::,2a0a:ac07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a0a:ae00::,2a0a:ae02:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:ae03::,2a0a:ae03::ffff:ffff:ffff:ffff:ffff,US -2a0a:ae03:1::,2a0a:ae07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:ad00::,2a0a:ad07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0a:ae00::,2a0a:ae07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:af00::,2a0a:af07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:b000::,2a0a:b000:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:b200::,2a0a:b202:7fff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:b202:8000::,2a0a:b202:8000:ffff:ffff:ffff:ffff:ffff,US -2a0a:b202:8001::,2a0a:b207:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:b100::,2a0a:b107:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:b200::,2a0a:b207:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:b300::,2a0a:b307:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0a:b400::,2a0a:b407:ffff:ffff:ffff:ffff:ffff:ffff,NL -2a0a:b600::,2a0a:b601:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:b602::,2a0a:b602::ffff:ffff:ffff:ffff:ffff,US -2a0a:b602:1::,2a0a:b607:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:b500::,2a0a:b507:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:b600::,2a0a:b607:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:b700::,2a0a:b707:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a0a:b800::,2a0a:b807:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:ba00::,2a0a:ba01:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:ba02::,2a0a:ba02::ffff:ffff:ffff:ffff:ffff,US -2a0a:ba02:1::,2a0a:ba07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:b900::,2a0a:b907:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:ba00::,2a0a:ba07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:bb00::,2a0a:bb07:ffff:ffff:ffff:ffff:ffff:ffff,LI 2a0a:bc00::,2a0a:bc07:ffff:ffff:ffff:ffff:ffff:ffff,GB -2a0a:be00::,2a0a:be02:7fff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:be02:8000::,2a0a:be02:8000:ffff:ffff:ffff:ffff:ffff,US -2a0a:be02:8001::,2a0a:be07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:bd00::,2a0a:bd00:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0a:be00::,2a0a:be07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:bf00::,2a0a:bf07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0a:c000::,2a0a:c007:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:c100::,2a0a:c107:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:c200::,2a0a:c207:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:c300::,2a0a:c307:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:c400::,2a0a:c407:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:c600::,2a0a:c602:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:c603::,2a0a:c603::ffff:ffff:ffff:ffff:ffff,US -2a0a:c603:1::,2a0a:c607:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:c500::,2a0a:c507:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:c600::,2a0a:c607:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:c700::,2a0a:c707:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:c800::,2a0a:c807:ffff:ffff:ffff:ffff:ffff:ffff,MD +2a0a:c900::,2a0a:c907:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:ca00::,2a0a:ca00:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a0a:cb00::,2a0a:cb07:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:cc00::,2a0a:cc07:ffff:ffff:ffff:ffff:ffff:ffff,CZ -2a0a:ce00::,2a0a:ce03:ffff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:ce04::,2a0a:ce04::ffff:ffff:ffff:ffff:ffff,US -2a0a:ce04:1::,2a0a:ce07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:cd00::,2a0a:cd00:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:ce00::,2a0a:ce07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:cf00::,2a0a:cf07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:d000::,2a0a:d007:ffff:ffff:ffff:ffff:ffff:ffff,CH -2a0a:d200::,2a0a:d204:7fff:ffff:ffff:ffff:ffff:ffff,DE -2a0a:d204:8000::,2a0a:d204:8000:ffff:ffff:ffff:ffff:ffff,US -2a0a:d204:8001::,2a0a:d207:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:d100::,2a0a:d107:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0a:d200::,2a0a:d207:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0a:d300::,2a0a:d307:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0a:d400::,2a0a:d407:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0a:d500::,2a0a:d507:ffff:ffff:ffff:ffff:ffff:ffff,FO 2a0a:d600::,2a0a:d607:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:d700::,2a0a:d707:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0a:d800::,2a0a:d807:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0a:d900::,2a0a:d900:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:da00::,2a0a:da00:ffff:ffff:ffff:ffff:ffff:ffff,KW +2a0a:db00::,2a0a:db00:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0a:dc00::,2a0a:dc07:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0a:dd00::,2a0a:dd07:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a0a:de00::,2a0a:de00:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0a:df00::,2a0a:df07:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0a:e000::,2a0a:e007:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:e100::,2a0a:e107:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a0a:e200::,2a0a:e207:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0a:e300::,2a0a:e303:ffff:ffff:ffff:ffff:ffff:ffff,HR 2a0a:e400::,2a0a:e407:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a0a:e500::,2a0a:e500:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0a:e600::,2a0a:e600:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0a:e700::,2a0a:e700:ffff:ffff:ffff:ffff:ffff:ffff,DK 2a0a:e800::,2a0a:e800:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0a:e900::,2a0a:e907:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:ea00::,2a0a:ea00:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:eb00::,2a0a:eb07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:ec00::,2a0a:ec07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0a:ed00::,2a0a:ed07:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0a:ee00::,2a0a:ee07:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a0a:ef00::,2a0a:ef07:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0a:f000::,2a0a:f000:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:f100::,2a0a:f100:ffff:ffff:ffff:ffff:ffff:ffff,LV 2a0a:f200::,2a0a:f207:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0a:f300::,2a0a:f307:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0a:f400::,2a0a:f407:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:f500::,2a0a:f500:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0a:f600::,2a0a:f607:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0a:f700::,2a0a:f707:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0a:f800::,2a0a:f807:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a0a:f900::,2a0a:f907:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0a:fa00::,2a0a:fa07:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0a:fb00::,2a0a:fb00:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0a:fc00::,2a0a:fc07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0a:fd00::,2a0a:fd00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0a:fe00::,2a0a:fe03:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0a:ff00::,2a0a:ff00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b::,2a0b:7:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a0b:100::,2a0b:107:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:200::,2a0b:207:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0b:300::,2a0b:307:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:400::,2a0b:407:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:500::,2a0b:507:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:600::,2a0b:600:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0b:700::,2a0b:707:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a0b:800::,2a0b:807:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0b:900::,2a0b:900:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a0b:a00::,2a0b:a07:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0b:b00::,2a0b:b07:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0b:c00::,2a0b:c00:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a0b:d00::,2a0b:d07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0b:e00::,2a0b:e07:ffff:ffff:ffff:ffff:ffff:ffff,FI +2a0b:f00::,2a0b:f07:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0b:1000::,2a0b:1007:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0b:1100::,2a0b:1107:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a0b:1200::,2a0b:1207:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:1300::,2a0b:1307:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:1400::,2a0b:1407:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:1500::,2a0b:1507:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0b:1600::,2a0b:1607:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0b:1700::,2a0b:1707:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0b:1800::,2a0b:1807:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:1900::,2a0b:1907:ffff:ffff:ffff:ffff:ffff:ffff,US 2a0b:1a00::,2a0b:1a07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:1b00::,2a0b:1b00:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:1c00::,2a0b:1c07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:1d00::,2a0b:1d07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0b:1e00::,2a0b:1e07:ffff:ffff:ffff:ffff:ffff:ffff,HU +2a0b:1f00::,2a0b:1f07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:2000::,2a0b:2007:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0b:2100::,2a0b:2107:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0b:2200::,2a0b:2207:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0b:2300::,2a0b:2300:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:2400::,2a0b:2400:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:2500::,2a0b:2507:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0b:2600::,2a0b:2607:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0b:2700::,2a0b:2707:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:2800::,2a0b:2807:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:2900::,2a0b:2900:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:2a00::,2a0b:2a07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:2b00::,2a0b:2b07:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0b:2c00::,2a0b:2c07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:2d00::,2a0b:2d07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:2e00::,2a0b:2e07:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:2f00::,2a0b:2f07:ffff:ffff:ffff:ffff:ffff:ffff,RO 2a0b:3000::,2a0b:3007:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0b:3100::,2a0b:3107:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:3200::,2a0b:3207:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:3300::,2a0b:3307:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:3400::,2a0b:3407:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:3500::,2a0b:3500:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:3600::,2a0b:3607:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:3700::,2a0b:3707:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:3800::,2a0b:3807:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0b:3900::,2a0b:3907:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:3a00::,2a0b:3a07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:3b00::,2a0b:3b07:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0b:3c00::,2a0b:3c07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:3d00::,2a0b:3d07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:3e00::,2a0b:3e00:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:3f00::,2a0b:3f07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0b:4000::,2a0b:4007:ffff:ffff:ffff:ffff:ffff:ffff,SK +2a0b:4100::,2a0b:4107:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0b:4200::,2a0b:4207:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:4300::,2a0b:4307:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:4400::,2a0b:4407:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:4500::,2a0b:4507:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0b:4600::,2a0b:4600:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a0b:4700::,2a0b:4707:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0b:4800::,2a0b:4807:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:4900::,2a0b:4907:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0b:4a00::,2a0b:4a07:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0b:4b00::,2a0b:4b07:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0b:4c00::,2a0b:4c07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:4d00::,2a0b:4d00:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:4e00::,2a0b:4e07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:4f00::,2a0b:4f07:ffff:ffff:ffff:ffff:ffff:ffff,IE 2a0b:5000::,2a0b:5007:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a0b:5100::,2a0b:5107:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0b:5200::,2a0b:5207:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:5300::,2a0b:5307:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:5400::,2a0b:5400:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:5500::,2a0b:5507:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0b:5600::,2a0b:5600:ffff:ffff:ffff:ffff:ffff:ffff,LT +2a0b:5700::,2a0b:5707:ffff:ffff:ffff:ffff:ffff:ffff,AT 2a0b:5800::,2a0b:5800:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:5900::,2a0b:5900:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0b:5a00::,2a0b:5a07:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0b:5b00::,2a0b:5b07:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0b:5c00::,2a0b:5c07:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0b:5d00::,2a0b:5d07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:5e00::,2a0b:5e00:ffff:ffff:ffff:ffff:ffff:ffff,BE +2a0b:5f00::,2a0b:5f07:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0b:6000::,2a0b:6007:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0b:6100::,2a0b:6107:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:6200::,2a0b:6207:ffff:ffff:ffff:ffff:ffff:ffff,GE +2a0b:6300::,2a0b:6307:ffff:ffff:ffff:ffff:ffff:ffff,AL 2a0b:6400::,2a0b:6407:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:6500::,2a0b:6507:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:6600::,2a0b:6607:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0b:6700::,2a0b:6700:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0b:6800::,2a0b:6807:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0b:6900::,2a0b:6907:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:6a00::,2a0b:6a07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:6b00::,2a0b:6b07:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a0b:6c00::,2a0b:6c07:ffff:ffff:ffff:ffff:ffff:ffff,EE +2a0b:6d00::,2a0b:6d07:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0b:6e00::,2a0b:6e07:ffff:ffff:ffff:ffff:ffff:ffff,PL +2a0b:6f00::,2a0b:6f07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:7000::,2a0b:7007:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0b:7100::,2a0b:7107:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:7200::,2a0b:7207:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:7300::,2a0b:7307:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:7400::,2a0b:7400:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0b:7500::,2a0b:7507:ffff:ffff:ffff:ffff:ffff:ffff,FR 2a0b:7600::,2a0b:7607:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a0b:7700::,2a0b:7707:ffff:ffff:ffff:ffff:ffff:ffff,IT 2a0b:7800::,2a0b:7807:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:7900::,2a0b:7907:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0b:7a00::,2a0b:7a07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:7b00::,2a0b:7b07:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0b:7c00::,2a0b:7c00:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0b:7d00::,2a0b:7d07:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0b:7e00::,2a0b:7e07:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0b:7f00::,2a0b:7f07:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0b:8000::,2a0b:8007:ffff:ffff:ffff:ffff:ffff:ffff,MC +2a0b:8100::,2a0b:8107:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0b:8200::,2a0b:8207:ffff:ffff:ffff:ffff:ffff:ffff,UA +2a0b:8300::,2a0b:8307:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:8400::,2a0b:8407:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0b:8500::,2a0b:8507:ffff:ffff:ffff:ffff:ffff:ffff,GR 2a0b:8600::,2a0b:8607:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a0b:8700::,2a0b:8707:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:8800::,2a0b:8807:ffff:ffff:ffff:ffff:ffff:ffff,RO +2a0b:8900::,2a0b:8900:ffff:ffff:ffff:ffff:ffff:ffff,GE 2a0b:8a00::,2a0b:8a07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:8b00::,2a0b:8b07:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0b:8c00::,2a0b:8c07:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:8d00::,2a0b:8d07:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0b:8e00::,2a0b:8e07:ffff:ffff:ffff:ffff:ffff:ffff,SE +2a0b:8f00::,2a0b:8f07:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:9000::,2a0b:9007:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:9100::,2a0b:9100:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0b:9200::,2a0b:9200:ffff:ffff:ffff:ffff:ffff:ffff,RS +2a0b:9300::,2a0b:9307:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0b:9400::,2a0b:9400:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0b:9500::,2a0b:9507:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0b:9600::,2a0b:9607:ffff:ffff:ffff:ffff:ffff:ffff,GB +2a0b:9700::,2a0b:9707:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:9800::,2a0b:9807:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0b:9900::,2a0b:9907:ffff:ffff:ffff:ffff:ffff:ffff,CH 2a0b:9a00::,2a0b:9a00:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:9b00::,2a0b:9b07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:9c00::,2a0b:9c07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:9d00::,2a0b:9d07:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0b:9e00::,2a0b:9e07:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0b:9f00::,2a0b:9f07:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:a000::,2a0b:a007:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:a100::,2a0b:a100:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0b:a200::,2a0b:a207:ffff:ffff:ffff:ffff:ffff:ffff,CZ +2a0b:a300::,2a0b:a307:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:a400::,2a0b:a407:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0b:a500::,2a0b:a507:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0b:a600::,2a0b:a600:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:a700::,2a0b:a707:ffff:ffff:ffff:ffff:ffff:ffff,FI 2a0b:a800::,2a0b:a800:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a0b:a900::,2a0b:a907:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0b:aa00::,2a0b:aa07:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:ab00::,2a0b:ab07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:ac00::,2a0b:ac07:ffff:ffff:ffff:ffff:ffff:ffff,LU +2a0b:ad00::,2a0b:ad07:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a0b:ae00::,2a0b:ae07:ffff:ffff:ffff:ffff:ffff:ffff,IE +2a0b:af00::,2a0b:af07:ffff:ffff:ffff:ffff:ffff:ffff,UA 2a0b:b000::,2a0b:b007:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:b100::,2a0b:b107:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0b:b200::,2a0b:b200:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:b300::,2a0b:b307:ffff:ffff:ffff:ffff:ffff:ffff,BE 2a0b:b400::,2a0b:b407:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0b:b500::,2a0b:b503:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:b600::,2a0b:b607:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0b:b700::,2a0b:b707:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:b800::,2a0b:b807:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:b900::,2a0b:b907:ffff:ffff:ffff:ffff:ffff:ffff,SE 2a0b:ba00::,2a0b:ba07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:bb00::,2a0b:bb07:ffff:ffff:ffff:ffff:ffff:ffff,IL 2a0b:bc00::,2a0b:bc07:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0b:bd00::,2a0b:bd07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:be00::,2a0b:be07:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:bf00::,2a0b:bf07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:c000::,2a0b:c007:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:c100::,2a0b:c107:ffff:ffff:ffff:ffff:ffff:ffff,IR 2a0b:c200::,2a0b:c207:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0b:c300::,2a0b:c307:ffff:ffff:ffff:ffff:ffff:ffff,SI 2a0b:c400::,2a0b:c407:ffff:ffff:ffff:ffff:ffff:ffff,CH +2a0b:c500::,2a0b:c500:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:c600::,2a0b:c607:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:c700::,2a0b:c707:ffff:ffff:ffff:ffff:ffff:ffff,TR 2a0b:c800::,2a0b:c807:ffff:ffff:ffff:ffff:ffff:ffff,AT +2a0b:c900::,2a0b:c907:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:ca00::,2a0b:ca07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:cb00::,2a0b:cb07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:cc00::,2a0b:cc00:ffff:ffff:ffff:ffff:ffff:ffff,BG +2a0b:cd00::,2a0b:cd07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:ce00::,2a0b:ce07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0b:cf00::,2a0b:cf07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:d000::,2a0b:d007:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:d100::,2a0b:d107:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0b:d200::,2a0b:d207:ffff:ffff:ffff:ffff:ffff:ffff,IL +2a0b:d300::,2a0b:d307:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:d400::,2a0b:d407:ffff:ffff:ffff:ffff:ffff:ffff,IR +2a0b:d500::,2a0b:d507:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:d600::,2a0b:d607:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:d700::,2a0b:d707:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:d800::,2a0b:d807:ffff:ffff:ffff:ffff:ffff:ffff,TR +2a0b:d900::,2a0b:d907:ffff:ffff:ffff:ffff:ffff:ffff,HK 2a0b:da00::,2a0b:da07:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:db00::,2a0b:db07:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:dc00::,2a0b:dc07:ffff:ffff:ffff:ffff:ffff:ffff,FR +2a0b:dd00::,2a0b:dd07:ffff:ffff:ffff:ffff:ffff:ffff,MD 2a0b:de00::,2a0b:de07:ffff:ffff:ffff:ffff:ffff:ffff,DE +2a0b:df00::,2a0b:df00:ffff:ffff:ffff:ffff:ffff:ffff,CZ 2a0b:e000::,2a0b:e007:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0b:e100::,2a0b:e107:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0b:e200::,2a0b:e207:ffff:ffff:ffff:ffff:ffff:ffff,RU +2a0b:e300::,2a0b:e300:ffff:ffff:ffff:ffff:ffff:ffff,NO 2a0b:e400::,2a0b:e407:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:e500::,2a0b:e501:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:e600::,2a0b:e607:ffff:ffff:ffff:ffff:ffff:ffff,HR +2a0b:e700::,2a0b:e707:ffff:ffff:ffff:ffff:ffff:ffff,PL 2a0b:e800::,2a0b:e807:ffff:ffff:ffff:ffff:ffff:ffff,ES +2a0b:e900::,2a0b:e907:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:ea00::,2a0b:ea00:ffff:ffff:ffff:ffff:ffff:ffff,IT +2a0b:eb00::,2a0b:eb07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:ec00::,2a0b:ec07:ffff:ffff:ffff:ffff:ffff:ffff,NL +2a0b:ed00::,2a0b:ed07:ffff:ffff:ffff:ffff:ffff:ffff,RU 2a0b:ee00::,2a0b:ee07:ffff:ffff:ffff:ffff:ffff:ffff,DK +2a0b:ef00::,2a0b:ef07:ffff:ffff:ffff:ffff:ffff:ffff,ES 2a0b:f000::,2a0b:f000:ffff:ffff:ffff:ffff:ffff:ffff,US +2a0b:f100::,2a0b:f107:ffff:ffff:ffff:ffff:ffff:ffff,SK 2a0b:f200::,2a0b:f200:ffff:ffff:ffff:ffff:ffff:ffff,NO +2a0b:f300::,2a0b:f307:ffff:ffff:ffff:ffff:ffff:ffff,GB 2a0b:f400::,2a0b:f400:ffff:ffff:ffff:ffff:ffff:ffff,DE 2a0b:f600::,2a0b:f607:ffff:ffff:ffff:ffff:ffff:ffff,NL 2a0b:f800::,2a0b:f800:ffff:ffff:ffff:ffff:ffff:ffff,BG @@ -31953,6 +31184,9 @@ 2c0f:f330::,2c0f:f330:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f338::,2c0f:f338:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f340::,2c0f:f340:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f348::,2c0f:f348:ffff:ffff:ffff:ffff:ffff:ffff,ET +2c0f:f350::,2c0f:f350:ffff:ffff:ffff:ffff:ffff:ffff,ZA +2c0f:f358::,2c0f:f358:ffff:ffff:ffff:ffff:ffff:ffff,KE 2c0f:f400::,2c0f:f400:ffff:ffff:ffff:ffff:ffff:ffff,ZA 2c0f:f408::,2c0f:f408:ffff:ffff:ffff:ffff:ffff:ffff,KE 2c0f:f410::,2c0f:f410:ffff:ffff:ffff:ffff:ffff:ffff,NG @@ -32105,9 +31339,7 @@ 2c0f:f8d8::,2c0f:f8d8:ffff:ffff:ffff:ffff:ffff:ffff,BW 2c0f:f8e0::,2c0f:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:f8e8::,2c0f:f8e8:ffff:ffff:ffff:ffff:ffff:ffff,GH -2c0f:f8f0::,2c0f:f8f0:b322:ffff:ffff:ffff:ffff:ffff,MU -2c0f:f8f0:b323::,2c0f:f8f0:b323:7fff:ffff:ffff:ffff:ffff,ZW -2c0f:f8f0:b323:8000::,2c0f:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:f8f0::,2c0f:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:f8f8::,2c0f:f8f8:ffff:ffff:ffff:ffff:ffff:ffff,SO 2c0f:f900::,2c0f:f900:ffff:ffff:ffff:ffff:ffff:ffff,ML 2c0f:f908::,2c0f:f908:ffff:ffff:ffff:ffff:ffff:ffff,BI @@ -32258,9 +31490,7 @@ 2c0f:fe38::,2c0f:fe38:ffff:ffff:ffff:ffff:ffff:ffff,KE 2c0f:fe40::,2c0f:fe40:8001:f:ffff:ffff:ffff:ffff,MU 2c0f:fe40:8001:10::,2c0f:fe40:8001:10:ffff:ffff:ffff:ffff,KE -2c0f:fe40:8001:11::,2c0f:fe40:80fe:ffff:ffff:ffff:ffff:ffff,MU -2c0f:fe40:80ff::,2c0f:fe40:80ff:7fff:ffff:ffff:ffff:ffff,KE -2c0f:fe40:80ff:8000::,2c0f:fe40:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:fe40:8001:11::,2c0f:fe40:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:fe50::,2c0f:fe50:ffff:ffff:ffff:ffff:ffff:ffff,DZ 2c0f:fe58::,2c0f:fe58:ffff:ffff:ffff:ffff:ffff:ffff,LS 2c0f:fe60::,2c0f:fe60:ffff:ffff:ffff:ffff:ffff:ffff,RW @@ -32275,11 +31505,7 @@ 2c0f:fea8::,2c0f:fea8:ffff:ffff:ffff:ffff:ffff:ffff,NG 2c0f:feb0::,2c0f:feb0:16:ffff:ffff:ffff:ffff:ffff,MU 2c0f:feb0:17::,2c0f:feb0:17:7fff:ffff:ffff:ffff:ffff,KE -2c0f:feb0:17:8000::,2c0f:feb0:1c:ffff:ffff:ffff:ffff:ffff,MU -2c0f:feb0:1d::,2c0f:feb0:1d:7fff:ffff:ffff:ffff:ffff,MZ -2c0f:feb0:1d:8000::,2c0f:feb0:1e:ffff:ffff:ffff:ffff:ffff,MU -2c0f:feb0:1f::,2c0f:feb0:1f:7fff:ffff:ffff:ffff:ffff,ZA -2c0f:feb0:1f:8000::,2c0f:feb1:ffff:ffff:ffff:ffff:ffff:ffff,MU +2c0f:feb0:17:8000::,2c0f:feb1:ffff:ffff:ffff:ffff:ffff:ffff,MU 2c0f:feb8::,2c0f:feb8:ffff:ffff:ffff:ffff:ffff:ffff,ZM 2c0f:fec0::,2c0f:fec0:ffff:ffff:ffff:ffff:ffff:ffff,UG 2c0f:fec8::,2c0f:fec8:ffff:ffff:ffff:ffff:ffff:ffff,SD diff --git a/src/config/torrc.minimal.in-staging b/src/config/torrc.minimal.in-staging index 5fa37c18f0..c537c51f9b 100644 --- a/src/config/torrc.minimal.in-staging +++ b/src/config/torrc.minimal.in-staging @@ -105,7 +105,7 @@ ## Define these to limit how much relayed traffic you will allow. Your ## own traffic is still unthrottled. Note that RelayBandwidthRate must -## be at least 20 kilobytes per second. +## be at least 75 kilobytes per second. ## Note that units for these config options are bytes (per second), not ## bits (per second), and that prefixes are binary prefixes, i.e. 2^10, ## 2^20, etc. diff --git a/src/config/torrc.sample.in b/src/config/torrc.sample.in index d4dfd5f6bb..5328206da9 100644 --- a/src/config/torrc.sample.in +++ b/src/config/torrc.sample.in @@ -104,7 +104,7 @@ ## Define these to limit how much relayed traffic you will allow. Your ## own traffic is still unthrottled. Note that RelayBandwidthRate must -## be at least 20 kilobytes per second. +## be at least 75 kilobytes per second. ## Note that units for these config options are bytes (per second), not ## bits (per second), and that prefixes are binary prefixes, i.e. 2^10, ## 2^20, etc. diff --git a/src/or/channel.c b/src/or/channel.c index 939b7f93e4..af5810788c 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -1738,7 +1738,7 @@ channel_get_cell_queue_entry_size(channel_t *chan, cell_queue_entry_t *q) rv = get_cell_network_size(chan->wide_circ_ids); break; default: - tor_assert(1); + tor_assert_nonfatal_unreached_once(); } return rv; diff --git a/src/or/channeltls.c b/src/or/channeltls.c index 5117672a6a..9fb309d0fd 100644 --- a/src/or/channeltls.c +++ b/src/or/channeltls.c @@ -601,7 +601,7 @@ channel_tls_get_remote_descr_method(channel_t *chan, int flags) break; default: /* Something's broken in channel.c */ - tor_assert(1); + tor_assert_nonfatal_unreached_once(); } } else { strlcpy(buf, "(No connection)", sizeof(buf)); @@ -670,7 +670,7 @@ channel_tls_is_canonical_method(channel_t *chan, int req) break; default: /* This shouldn't happen; channel.c is broken if it does */ - tor_assert(1); + tor_assert_nonfatal_unreached_once(); } } /* else return 0 for tlschan->conn == NULL */ diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c index a0988c6d93..dee103e36a 100644 --- a/src/or/circuitlist.c +++ b/src/or/circuitlist.c @@ -64,6 +64,7 @@ #include "connection_or.h" #include "control.h" #include "main.h" +#include "hs_common.h" #include "networkstatus.h" #include "nodelist.h" #include "onion.h" @@ -1352,9 +1353,11 @@ circuit_get_ready_rend_circ_by_rend_data(const rend_data_t *rend_data) if (!circ->marked_for_close && circ->purpose == CIRCUIT_PURPOSE_C_REND_READY) { origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ); - if (ocirc->rend_data && - !rend_cmp_service_ids(rend_data->onion_address, - ocirc->rend_data->onion_address) && + if (ocirc->rend_data == NULL) { + continue; + } + if (!rend_cmp_service_ids(rend_data_get_address(rend_data), + rend_data_get_address(ocirc->rend_data)) && tor_memeq(ocirc->rend_data->rend_cookie, rend_data->rend_cookie, REND_COOKIE_LEN)) @@ -1366,13 +1369,14 @@ circuit_get_ready_rend_circ_by_rend_data(const rend_data_t *rend_data) } /** Return the first circuit originating here in global_circuitlist after - * <b>start</b> whose purpose is <b>purpose</b>, and where - * <b>digest</b> (if set) matches the rend_pk_digest field. Return NULL if no - * circuit is found. If <b>start</b> is NULL, begin at the start of the list. + * <b>start</b> whose purpose is <b>purpose</b>, and where <b>digest</b> (if + * set) matches the private key digest of the rend data associated with the + * circuit. Return NULL if no circuit is found. If <b>start</b> is NULL, + * begin at the start of the list. */ origin_circuit_t * circuit_get_next_by_pk_and_purpose(origin_circuit_t *start, - const char *digest, uint8_t purpose) + const uint8_t *digest, uint8_t purpose) { int idx; smartlist_t *lst = circuit_get_global_list(); @@ -1384,17 +1388,23 @@ circuit_get_next_by_pk_and_purpose(origin_circuit_t *start, for ( ; idx < smartlist_len(lst); ++idx) { circuit_t *circ = smartlist_get(lst, idx); + origin_circuit_t *ocirc; if (circ->marked_for_close) continue; if (circ->purpose != purpose) continue; + /* At this point we should be able to get a valid origin circuit because + * the origin purpose we are looking for matches this circuit. */ + if (BUG(!CIRCUIT_PURPOSE_IS_ORIGIN(circ->purpose))) { + break; + } + ocirc = TO_ORIGIN_CIRCUIT(circ); if (!digest) - return TO_ORIGIN_CIRCUIT(circ); - else if (TO_ORIGIN_CIRCUIT(circ)->rend_data && - tor_memeq(TO_ORIGIN_CIRCUIT(circ)->rend_data->rend_pk_digest, - digest, DIGEST_LEN)) - return TO_ORIGIN_CIRCUIT(circ); + return ocirc; + if (rend_circuit_pk_digest_eq(ocirc, digest)) { + return ocirc; + } } return NULL; } @@ -1882,7 +1892,7 @@ circuit_about_to_free(circuit_t *circ) if (orig_reason != END_CIRC_REASON_IP_NOW_REDUNDANT) { /* treat this like getting a nack from it */ log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). %s", - safe_str_client(ocirc->rend_data->onion_address), + safe_str_client(rend_data_get_address(ocirc->rend_data)), safe_str_client(build_state_get_exit_nickname(ocirc->build_state)), timed_out ? "Recording timeout." : "Removing from descriptor."); rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit, @@ -1899,7 +1909,7 @@ circuit_about_to_free(circuit_t *circ) log_info(LD_REND, "Failed intro circ %s to %s " "(building circuit to intro point). " "Marking intro point as possibly unreachable.", - safe_str_client(ocirc->rend_data->onion_address), + safe_str_client(rend_data_get_address(ocirc->rend_data)), safe_str_client(build_state_get_exit_nickname( ocirc->build_state))); rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit, diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h index 2707b426ab..989c02afd5 100644 --- a/src/or/circuitlist.h +++ b/src/or/circuitlist.h @@ -45,7 +45,7 @@ origin_circuit_t *circuit_get_by_global_id(uint32_t id); origin_circuit_t *circuit_get_ready_rend_circ_by_rend_data( const rend_data_t *rend_data); origin_circuit_t *circuit_get_next_by_pk_and_purpose(origin_circuit_t *start, - const char *digest, uint8_t purpose); + const uint8_t *digest, uint8_t purpose); or_circuit_t *circuit_get_rendezvous(const uint8_t *cookie); or_circuit_t *circuit_get_intro_point(const uint8_t *digest); void circuit_set_rendezvous_cookie(or_circuit_t *circ, const uint8_t *cookie); diff --git a/src/or/circuituse.c b/src/or/circuituse.c index 11d78201f4..ba7b75ff25 100644 --- a/src/or/circuituse.c +++ b/src/or/circuituse.c @@ -40,6 +40,7 @@ #include "connection_edge.h" #include "control.h" #include "entrynodes.h" +#include "hs_common.h" #include "nodelist.h" #include "networkstatus.h" #include "policies.h" @@ -172,8 +173,8 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ, if ((edge_conn->rend_data && !origin_circ->rend_data) || (!edge_conn->rend_data && origin_circ->rend_data) || (edge_conn->rend_data && origin_circ->rend_data && - rend_cmp_service_ids(edge_conn->rend_data->onion_address, - origin_circ->rend_data->onion_address))) { + rend_cmp_service_ids(rend_data_get_address(edge_conn->rend_data), + rend_data_get_address(origin_circ->rend_data)))) { /* this circ is not for this conn */ return 0; } @@ -806,6 +807,8 @@ static time_t last_expired_clientside_circuits = 0; * As a diagnostic for bug 8387, log information about how many one-hop * circuits we have around that have been there for at least <b>age</b> * seconds. Log a few of them. + * Ignores Single Onion Service intro and Tor2web redezvous circuits, they are + * expected to be long-term one-hop circuits. */ void circuit_log_ancient_one_hop_circuits(int age) @@ -815,6 +818,7 @@ circuit_log_ancient_one_hop_circuits(int age) time_t cutoff = now - age; int n_found = 0; smartlist_t *log_these = smartlist_new(); + const or_options_t *options = get_options(); SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, circ) { const origin_circuit_t *ocirc; @@ -822,6 +826,19 @@ circuit_log_ancient_one_hop_circuits(int age) continue; if (circ->timestamp_created.tv_sec >= cutoff) continue; + /* Single Onion Services deliberately make long term one-hop intro + * connections. We only ignore active intro point connections, if we take + * a long time establishing, that's worth logging. */ + if (rend_service_allow_non_anonymous_connection(options) && + circ->purpose == CIRCUIT_PURPOSE_S_INTRO) + continue; + /* Tor2web deliberately makes long term one-hop rend connections, + * particularly when Tor2webRendezvousPoints is used. We only ignore + * active rend point connections, if we take a long time to rendezvous, + * that's worth logging. */ + if (rend_client_allow_non_anonymous_connection(options) && + circ->purpose == CIRCUIT_PURPOSE_C_REND_JOINED) + continue; ocirc = CONST_TO_ORIGIN_CIRCUIT(circ); if (ocirc->build_state && ocirc->build_state->onehop_tunnel) { @@ -857,7 +874,7 @@ circuit_log_ancient_one_hop_circuits(int age) tor_asprintf(&dirty, "Dirty since %s (%ld seconds vs %ld-second cutoff)", dirty_since, (long)(now - circ->timestamp_dirty), - (long) get_options()->MaxCircuitDirtiness); + (long) options->MaxCircuitDirtiness); } else { dirty = tor_strdup("Not marked dirty"); } @@ -2036,7 +2053,7 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn, if (!extend_info) { log_info(LD_REND, "No intro points for '%s': re-fetching service descriptor.", - safe_str_client(rend_data->onion_address)); + safe_str_client(rend_data_get_address(rend_data))); rend_client_refetch_v2_renddesc(rend_data); connection_ap_mark_as_non_pending_circuit(conn); ENTRY_TO_CONN(conn)->state = AP_CONN_STATE_RENDDESC_WAIT; @@ -2044,7 +2061,7 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn, } log_info(LD_REND,"Chose %s as intro point for '%s'.", extend_info_describe(extend_info), - safe_str_client(rend_data->onion_address)); + safe_str_client(rend_data_get_address(rend_data))); } /* If we have specified a particular exit node for our diff --git a/src/or/config.c b/src/or/config.c index fef12083e0..9553822ba3 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -550,7 +550,7 @@ static config_var_t option_vars_[] = { * When clients have authorities and fallbacks available, they use these * schedules: (we stagger the times to avoid thundering herds) */ V(ClientBootstrapConsensusAuthorityDownloadSchedule, CSV_INTERVAL, - "10, 11, 3600, 10800, 25200, 54000, 111600, 262800" /* 3 days + 1 hour */), + "6, 11, 3600, 10800, 25200, 54000, 111600, 262800" /* 3 days + 1 hour */), V(ClientBootstrapConsensusFallbackDownloadSchedule, CSV_INTERVAL, "0, 1, 4, 11, 3600, 10800, 25200, 54000, 111600, 262800"), /* When clients only have authorities available, they use this schedule: */ @@ -561,7 +561,7 @@ static config_var_t option_vars_[] = { * blackholed. Clients will try 3 directories simultaneously. * (Relays never use simultaneous connections.) */ V(ClientBootstrapConsensusMaxInProgressTries, UINT, "3"), - V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "3600, 900, 900, 3600"), + V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "1200, 900, 900, 3600"), V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "10 minutes"), V(TestingDirConnectionMaxStall, INTERVAL, "5 minutes"), V(TestingConsensusMaxDownloadTries, UINT, "8"), diff --git a/src/or/confparse.c b/src/or/confparse.c index ca54284dba..1706fa85e2 100644 --- a/src/or/confparse.c +++ b/src/or/confparse.c @@ -1224,6 +1224,8 @@ static struct unit_table_t memory_units[] = { { "gbits", 1<<27 }, { "gbit", 1<<27 }, { "tb", U64_LITERAL(1)<<40 }, + { "tbyte", U64_LITERAL(1)<<40 }, + { "tbytes", U64_LITERAL(1)<<40 }, { "terabyte", U64_LITERAL(1)<<40 }, { "terabytes", U64_LITERAL(1)<<40 }, { "terabits", U64_LITERAL(1)<<37 }, diff --git a/src/or/connection.c b/src/or/connection.c index 49cb78e389..2e3df34a5a 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -82,6 +82,7 @@ #include "ext_orport.h" #include "geoip.h" #include "main.h" +#include "hs_common.h" #include "nodelist.h" #include "policies.h" #include "reasons.h" @@ -4126,12 +4127,12 @@ connection_get_by_type_state_rendquery(int type, int state, (type == CONN_TYPE_DIR && TO_DIR_CONN(conn)->rend_data && !rend_cmp_service_ids(rendquery, - TO_DIR_CONN(conn)->rend_data->onion_address)) + rend_data_get_address(TO_DIR_CONN(conn)->rend_data))) || (CONN_IS_EDGE(conn) && TO_EDGE_CONN(conn)->rend_data && !rend_cmp_service_ids(rendquery, - TO_EDGE_CONN(conn)->rend_data->onion_address)) + rend_data_get_address(TO_EDGE_CONN(conn)->rend_data))) )); } diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 27a025173c..875c911f01 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -75,6 +75,7 @@ #include "directory.h" #include "dirserv.h" #include "hibernate.h" +#include "hs_common.h" #include "main.h" #include "nodelist.h" #include "policies.h" @@ -945,6 +946,15 @@ connection_ap_mark_as_pending_circuit_(entry_connection_t *entry_conn, untried_pending_connections = 1; smartlist_add(pending_entry_connections, entry_conn); + + /* Work-around for bug 19969: we handle pending_entry_connections at + * the end of run_main_loop_once(), but in many cases that function will + * take a very long time, if ever, to finish its call to event_base_loop(). + * + * So the fix is to tell it right now that it ought to finish its loop at + * its next available opportunity. + */ + tell_event_loop_to_finish(); } /** Mark <b>entry_conn</b> as no longer waiting for a circuit. */ @@ -1852,21 +1862,22 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn, if (rend_data == NULL) { return -1; } + const char *onion_address = rend_data_get_address(rend_data); log_info(LD_REND,"Got a hidden service request for ID '%s'", - safe_str_client(rend_data->onion_address)); + safe_str_client(onion_address)); /* Lookup the given onion address. If invalid, stop right now. * Otherwise, we might have it in the cache or not. */ unsigned int refetch_desc = 0; rend_cache_entry_t *entry = NULL; const int rend_cache_lookup_result = - rend_cache_lookup_entry(rend_data->onion_address, -1, &entry); + rend_cache_lookup_entry(onion_address, -1, &entry); if (rend_cache_lookup_result < 0) { switch (-rend_cache_lookup_result) { case EINVAL: /* We should already have rejected this address! */ log_warn(LD_BUG,"Invalid service name '%s'", - safe_str_client(rend_data->onion_address)); + safe_str_client(onion_address)); connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL); return -1; case ENOENT: @@ -1892,7 +1903,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn, connection_ap_mark_as_non_pending_circuit(conn); base_conn->state = AP_CONN_STATE_RENDDESC_WAIT; log_info(LD_REND, "Unknown descriptor %s. Fetching.", - safe_str_client(rend_data->onion_address)); + safe_str_client(onion_address)); rend_client_refetch_v2_renddesc(rend_data); return 0; } diff --git a/src/or/control.c b/src/or/control.c index 6e45fe99e9..96cc41bc4b 100644 --- a/src/or/control.c +++ b/src/or/control.c @@ -57,6 +57,7 @@ #include "entrynodes.h" #include "geoip.h" #include "hibernate.h" +#include "hs_common.h" #include "main.h" #include "networkstatus.h" #include "nodelist.h" @@ -2539,7 +2540,7 @@ circuit_describe_status_for_controller(origin_circuit_t *circ) if (circ->rend_data != NULL) { smartlist_add_asprintf(descparts, "REND_QUERY=%s", - circ->rend_data->onion_address); + rend_data_get_address(circ->rend_data)); } { @@ -6856,8 +6857,10 @@ control_event_hs_descriptor_requested(const rend_data_t *rend_query, send_control_event(EVENT_HS_DESC, "650 HS_DESC REQUESTED %s %s %s %s\r\n", - rend_hsaddress_str_or_unknown(rend_query->onion_address), - rend_auth_type_to_string(rend_query->auth_type), + rend_hsaddress_str_or_unknown( + rend_data_get_address(rend_query)), + rend_auth_type_to_string( + TO_REND_DATA_V2(rend_query)->auth_type), node_describe_longname_by_id(id_digest), desc_id_base32); } @@ -6873,11 +6876,12 @@ get_desc_id_from_query(const rend_data_t *rend_data, const char *hsdir_fp) { int replica; const char *desc_id = NULL; + const rend_data_v2_t *rend_data_v2 = TO_REND_DATA_V2(rend_data); /* Possible if the fetch was done using a descriptor ID. This means that * the HSFETCH command was used. */ - if (!tor_digest_is_zero(rend_data->desc_id_fetch)) { - desc_id = rend_data->desc_id_fetch; + if (!tor_digest_is_zero(rend_data_v2->desc_id_fetch)) { + desc_id = rend_data_v2->desc_id_fetch; goto end; } @@ -6885,7 +6889,7 @@ get_desc_id_from_query(const rend_data_t *rend_data, const char *hsdir_fp) * is the one associated with the HSDir fingerprint. */ for (replica = 0; replica < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; replica++) { - const char *digest = rend_data->descriptor_id[replica]; + const char *digest = rend_data_get_desc_id(rend_data, replica, NULL); SMARTLIST_FOREACH_BEGIN(rend_data->hsdirs_fp, char *, fingerprint) { if (tor_memcmp(fingerprint, hsdir_fp, DIGEST_LEN) == 0) { @@ -6994,7 +6998,8 @@ control_event_hs_descriptor_receive_end(const char *action, "650 HS_DESC %s %s %s %s%s%s\r\n", action, rend_hsaddress_str_or_unknown(onion_address), - rend_auth_type_to_string(rend_data->auth_type), + rend_auth_type_to_string( + TO_REND_DATA_V2(rend_data)->auth_type), node_describe_longname_by_id(id_digest), desc_id_field ? desc_id_field : "", reason_field ? reason_field : ""); @@ -7091,7 +7096,7 @@ control_event_hs_descriptor_failed(const rend_data_t *rend_data, return; } control_event_hs_descriptor_receive_end("FAILED", - rend_data->onion_address, + rend_data_get_address(rend_data), rend_data, id_digest, reason); } diff --git a/src/or/directory.c b/src/or/directory.c index fdfb3391a8..65ddd7d583 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -3,6 +3,8 @@ * Copyright (c) 2007-2016, The Tor Project, Inc. */ /* See LICENSE for licensing information */ +#define DIRECTORY_PRIVATE + #include "or.h" #include "backtrace.h" #include "buffers.h" @@ -16,6 +18,8 @@ #include "dirvote.h" #include "entrynodes.h" #include "geoip.h" +#include "hs_cache.h" +#include "hs_common.h" #include "main.h" #include "microdesc.h" #include "networkstatus.h" @@ -2385,10 +2389,10 @@ connection_dir_client_reached_eof(dir_connection_t *conn) conn->identity_digest, \ reason) ) #define SEND_HS_DESC_FAILED_CONTENT() ( \ - control_event_hs_descriptor_content(conn->rend_data->onion_address, \ - conn->requested_resource, \ - conn->identity_digest, \ - NULL) ) + control_event_hs_descriptor_content(rend_data_get_address(conn->rend_data), \ + conn->requested_resource, \ + conn->identity_digest, \ + NULL) ) tor_assert(conn->rend_data); log_info(LD_REND,"Received rendezvous descriptor (size %d, status %d " "(%s))", @@ -2461,7 +2465,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) #define SEND_HS_DESC_UPLOAD_FAILED_EVENT(reason) ( \ control_event_hs_descriptor_upload_failed( \ conn->identity_digest, \ - conn->rend_data->onion_address, \ + rend_data_get_address(conn->rend_data), \ reason) ) log_info(LD_REND,"Uploaded rendezvous descriptor (status %d " "(%s))", @@ -2475,7 +2479,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) "Uploading rendezvous descriptor: finished with status " "200 (%s)", escaped(reason)); control_event_hs_descriptor_uploaded(conn->identity_digest, - conn->rend_data->onion_address); + rend_data_get_address(conn->rend_data)); rend_service_desc_has_uploaded(conn->rend_data); break; case 400: @@ -2586,7 +2590,8 @@ connection_dir_about_to_close(dir_connection_t *dir_conn) * refetching is unnecessary.) */ if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2 && dir_conn->rend_data && - strlen(dir_conn->rend_data->onion_address) == REND_SERVICE_ID_LEN_BASE32) + strlen(rend_data_get_address(dir_conn->rend_data)) == + REND_SERVICE_ID_LEN_BASE32) rend_client_refetch_v2_renddesc(dir_conn->rend_data); } @@ -2806,8 +2811,8 @@ static int handle_get_descriptor(dir_connection_t *conn, const get_handler_args_t *args); static int handle_get_keys(dir_connection_t *conn, const get_handler_args_t *args); -static int handle_get_rendezvous2(dir_connection_t *conn, - const get_handler_args_t *args); +static int handle_get_hs_descriptor_v2(dir_connection_t *conn, + const get_handler_args_t *args); static int handle_get_robots(dir_connection_t *conn, const get_handler_args_t *args); static int handle_get_networkstatus_bridges(dir_connection_t *conn, @@ -2823,7 +2828,8 @@ static const url_table_ent_t url_table[] = { { "/tor/server/", 1, handle_get_descriptor }, { "/tor/extra/", 1, handle_get_descriptor }, { "/tor/keys/", 1, handle_get_keys }, - { "/tor/rendezvous2/", 1, handle_get_rendezvous2 }, + { "/tor/rendezvous2/", 1, handle_get_hs_descriptor_v2 }, + { "/tor/hs/3/", 1, handle_get_hs_descriptor_v3 }, { "/tor/robots.txt", 0, handle_get_robots }, { "/tor/networkstatus-bridges", 0, handle_get_networkstatus_bridges }, { NULL, 0, NULL }, @@ -3391,7 +3397,8 @@ handle_get_keys(dir_connection_t *conn, const get_handler_args_t *args) /** Helper function for GET /tor/rendezvous2/ */ static int -handle_get_rendezvous2(dir_connection_t *conn, const get_handler_args_t *args) +handle_get_hs_descriptor_v2(dir_connection_t *conn, + const get_handler_args_t *args) { const char *url = args->url; if (connection_dir_is_encrypted(conn)) { @@ -3425,6 +3432,50 @@ handle_get_rendezvous2(dir_connection_t *conn, const get_handler_args_t *args) return 0; } +/** Helper function for GET /tor/hs/3/<z>. Only for version 3. + */ +STATIC int +handle_get_hs_descriptor_v3(dir_connection_t *conn, + const get_handler_args_t *args) +{ + int retval; + const char *desc_str = NULL; + const char *pubkey_str = NULL; + const char *url = args->url; + + /* Don't serve v3 descriptors if next gen onion service is disabled. */ + if (!hs_v3_protocol_is_enabled()) { + /* 404 is used for an unrecognized URL so send back the same. */ + write_http_status_line(conn, 404, "Not found"); + goto done; + } + + /* Reject unencrypted dir connections */ + if (!connection_dir_is_encrypted(conn)) { + write_http_status_line(conn, 404, "Not found"); + goto done; + } + + /* After the path prefix follows the base64 encoded blinded pubkey which we + * use to get the descriptor from the cache. Skip the prefix and get the + * pubkey. */ + tor_assert(!strcmpstart(url, "/tor/hs/3/")); + pubkey_str = url + strlen("/tor/hs/3/"); + retval = hs_cache_lookup_as_dir(HS_VERSION_THREE, + pubkey_str, &desc_str); + if (retval < 0) { + write_http_status_line(conn, 404, "Not found"); + goto done; + } + + /* Found requested descriptor! Pass it to this nice client. */ + write_http_response_header(conn, strlen(desc_str), 0, 0); + connection_write_to_buf(desc_str, strlen(desc_str), TO_CONN(conn)); + + done: + return 0; +} + /** Helper function for GET /tor/networkstatus-bridges */ static int @@ -3480,6 +3531,90 @@ handle_get_robots(dir_connection_t *conn, const get_handler_args_t *args) return 0; } +/* Given the <b>url</b> from a POST request, try to extract the version number + * using the provided <b>prefix</b>. The version should be after the prefix and + * ending with the seperator "/". For instance: + * /tor/hs/3/publish + * + * On success, <b>end_pos</b> points to the position right after the version + * was found. On error, it is set to NULL. + * + * Return version on success else negative value. */ +STATIC int +parse_hs_version_from_post(const char *url, const char *prefix, + const char **end_pos) +{ + int ok; + unsigned long version; + const char *start; + char *end = NULL; + + tor_assert(url); + tor_assert(prefix); + tor_assert(end_pos); + + /* Check if the prefix does start the url. */ + if (strcmpstart(url, prefix)) { + goto err; + } + /* Move pointer to the end of the prefix string. */ + start = url + strlen(prefix); + /* Try this to be the HS version and if we are still at the separator, next + * will be move to the right value. */ + version = tor_parse_long(start, 10, 0, INT_MAX, &ok, &end); + if (!ok) { + goto err; + } + + *end_pos = end; + return (int) version; + err: + *end_pos = NULL; + return -1; +} + +/* Handle the POST request for a hidden service descripror. The request is in + * <b>url</b>, the body of the request is in <b>body</b>. Return 200 on success + * else return 400 indicating a bad request. */ +STATIC int +handle_post_hs_descriptor(const char *url, const char *body) +{ + int version; + const char *end_pos; + + tor_assert(url); + tor_assert(body); + + version = parse_hs_version_from_post(url, "/tor/hs/", &end_pos); + if (version < 0) { + goto err; + } + + /* We have a valid version number, now make sure it's a publish request. Use + * the end position just after the version and check for the command. */ + if (strcmpstart(end_pos, "/publish")) { + goto err; + } + + switch (version) { + case HS_VERSION_THREE: + if (hs_cache_store_as_dir(body) < 0) { + goto err; + } + log_info(LD_REND, "Publish request for HS descriptor handled " + "successfully."); + break; + default: + /* Unsupported version, return a bad request. */ + goto err; + } + + return 200; + err: + /* Bad request. */ + return 400; +} + /** Helper function: called when a dirserver gets a complete HTTP POST * request. Look for an uploaded server descriptor or rendezvous * service descriptor. On finding one, process it and write a @@ -3524,6 +3659,28 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers, goto done; } + /* Handle HS descriptor publish request. */ + /* XXX: This should be disabled with a consensus param until we want to + * the prop224 be deployed and thus use. */ + if (connection_dir_is_encrypted(conn) && !strcmpstart(url, "/tor/hs/")) { + const char *msg = "HS descriptor stored successfully."; + /* Don't accept v3 and onward publish request if next gen onion service is + * disabled. */ + if (!hs_v3_protocol_is_enabled()) { + /* 404 is used for an unrecognized URL so send back the same. */ + write_http_status_line(conn, 404, "Not found"); + goto done; + } + + /* We most probably have a publish request for an HS descriptor. */ + int code = handle_post_hs_descriptor(url, body); + if (code != 200) { + msg = "Invalid HS descriptor. Rejected."; + } + write_http_status_line(conn, code, msg); + goto done; + } + if (!authdir_mode(options)) { /* we just provide cached directories; we don't want to * receive anything. */ @@ -3814,7 +3971,10 @@ find_dl_min_and_max_delay(download_status_t *dls, const or_options_t *options, const smartlist_t *schedule = find_dl_schedule(dls, options); tor_assert(schedule != NULL && smartlist_len(schedule) >= 2); *min = *((int *)(smartlist_get(schedule, 0))); - *max = *((int *)((smartlist_get(schedule, smartlist_len(schedule) - 1)))); + if (dls->backoff == DL_SCHED_DETERMINISTIC) + *max = *((int *)((smartlist_get(schedule, smartlist_len(schedule) - 1)))); + else + *max = INT_MAX; } /** Advance one delay step. The algorithm is to use the previous delay to @@ -3837,14 +3997,26 @@ next_random_exponential_delay(int delay, int max_delay) /* How much are we willing to add to the delay? */ int max_increment; + int multiplier = 3; /* no more than quadruple the previous delay */ + if (get_options()->TestingTorNetwork) { + /* Decrease the multiplier in testing networks. This reduces the variance, + * so that bootstrap is more reliable. */ + multiplier = 2; /* no more than triple the previous delay */ + } - if (delay) - max_increment = delay; /* no more than double. */ - else - max_increment = 1; /* we're always willing to slow down a little. */ + if (delay && delay < (INT_MAX-1) / multiplier) { + max_increment = delay * multiplier; + } else if (delay) { + max_increment = INT_MAX-1; + } else { + max_increment = 1; + } + + if (BUG(max_increment < 1)) + max_increment = 1; - /* the + 1 here is so that we include the end of the interval */ - int increment = crypto_rand_int(max_increment+1); + /* the + 1 here is so that we always wait longer than last time. */ + int increment = crypto_rand_int(max_increment)+1; if (increment < max_delay - delay) return delay + increment; @@ -3888,7 +4060,7 @@ download_status_schedule_get_delay(download_status_t *dls, delay = *(int *)smartlist_get(schedule, smartlist_len(schedule) - 1); } else if (dls->backoff == DL_SCHED_RANDOM_EXPONENTIAL) { /* Check if we missed a reset somehow */ - if (dls->last_backoff_position > dls_schedule_position) { + IF_BUG_ONCE(dls->last_backoff_position > dls_schedule_position) { dls->last_backoff_position = 0; dls->last_delay_used = 0; } @@ -3920,9 +4092,9 @@ download_status_schedule_get_delay(download_status_t *dls, * non-negative allows us to safely do the wrapping check below. */ tor_assert(delay >= 0); - /* Avoid now+delay overflowing INT_MAX, by comparing with a subtraction + /* Avoid now+delay overflowing TIME_MAX, by comparing with a subtraction * that won't overflow (since delay is non-negative). */ - if (delay < INT_MAX && now <= INT_MAX - delay) { + if (delay < INT_MAX && now <= TIME_MAX - delay) { dls->next_attempt_at = now+delay; } else { dls->next_attempt_at = TIME_MAX; @@ -3974,15 +4146,16 @@ time_t download_status_increment_failure(download_status_t *dls, int status_code, const char *item, int server, time_t now) { + (void) status_code; // XXXX no longer used. + (void) server; // XXXX no longer used. int increment = -1; int min_delay = 0, max_delay = INT_MAX; tor_assert(dls); - /* only count the failure if it's permanent, or we're a server */ - if (status_code != 503 || server) { - if (dls->n_download_failures < IMPOSSIBLE_TO_DOWNLOAD-1) - ++dls->n_download_failures; + /* count the failure */ + if (dls->n_download_failures < IMPOSSIBLE_TO_DOWNLOAD-1) { + ++dls->n_download_failures; } if (dls->increment_on == DL_SCHED_INCREMENT_FAILURE) { @@ -4035,7 +4208,7 @@ download_status_increment_attempt(download_status_t *dls, const char *item, if (dls->increment_on == DL_SCHED_INCREMENT_FAILURE) { /* this schedule should retry on failure, and not launch any concurrent attempts */ - log_info(LD_BUG, "Tried to launch an attempt-based connection on a " + log_warn(LD_BUG, "Tried to launch an attempt-based connection on a " "failure-based schedule."); return TIME_MAX; } diff --git a/src/or/directory.h b/src/or/directory.h index f1cdd9fcfe..589df7b70d 100644 --- a/src/or/directory.h +++ b/src/or/directory.h @@ -114,9 +114,15 @@ static inline int download_status_is_ready(download_status_t *dls, time_t now, int max_failures) { - int under_failure_limit = (dls->n_download_failures <= max_failures - && dls->n_download_attempts <= max_failures); - return (under_failure_limit && dls->next_attempt_at <= now); + if (dls->backoff == DL_SCHED_DETERMINISTIC) { + /* Deterministic schedules can hit an endpoint; exponential backoff + * schedules just wait longer and longer. */ + int under_failure_limit = (dls->n_download_failures <= max_failures + && dls->n_download_attempts <= max_failures); + if (!under_failure_limit) + return 0; + } + return dls->next_attempt_at <= now; } static void download_status_mark_impossible(download_status_t *dl); @@ -135,8 +141,16 @@ time_t download_status_get_next_attempt_at(const download_status_t *dls); int purpose_needs_anonymity(uint8_t dir_purpose, uint8_t router_purpose, const char *resource); +#ifdef DIRECTORY_PRIVATE + +struct get_handler_args_t; +STATIC int handle_get_hs_descriptor_v3(dir_connection_t *conn, + const struct get_handler_args_t *args); + +#endif + #ifdef TOR_UNIT_TESTS -/* Used only by directory.c and test_dir.c */ +/* Used only by test_dir.c */ STATIC int parse_http_url(const char *headers, char **url); STATIC dirinfo_type_t dir_fetch_type(int dir_purpose, int router_purpose, @@ -150,6 +164,8 @@ STATIC int download_status_schedule_get_delay(download_status_t *dls, int min_delay, int max_delay, time_t now); +STATIC int handle_post_hs_descriptor(const char *url, const char *body); + STATIC char* authdir_type_to_string(dirinfo_type_t auth); STATIC const char * dir_conn_purpose_to_string(int purpose); STATIC int should_use_directory_guards(const or_options_t *options); @@ -161,6 +177,9 @@ STATIC void find_dl_min_and_max_delay(download_status_t *dls, int *min, int *max); STATIC int next_random_exponential_delay(int delay, int max_delay); +STATIC int parse_hs_version_from_post(const char *url, const char *prefix, + const char **end_pos); + #endif #endif diff --git a/src/or/hs_cache.c b/src/or/hs_cache.c new file mode 100644 index 0000000000..b7ff979e5b --- /dev/null +++ b/src/or/hs_cache.c @@ -0,0 +1,385 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file hs_cache.c + * \brief Handle hidden service descriptor caches. + **/ + +/* For unit tests.*/ +#define HS_CACHE_PRIVATE + +#include "hs_cache.h" + +#include "or.h" +#include "config.h" +#include "hs_common.h" +#include "hs_descriptor.h" +#include "rendcache.h" + +/* Directory descriptor cache. Map indexed by blinded key. */ +static digest256map_t *hs_cache_v3_dir; + +/* Remove a given descriptor from our cache. */ +static void +remove_v3_desc_as_dir(const hs_cache_dir_descriptor_t *desc) +{ + tor_assert(desc); + digest256map_remove(hs_cache_v3_dir, desc->key); +} + +/* Store a given descriptor in our cache. */ +static void +store_v3_desc_as_dir(hs_cache_dir_descriptor_t *desc) +{ + tor_assert(desc); + digest256map_set(hs_cache_v3_dir, desc->key, desc); +} + +/* Query our cache and return the entry or NULL if not found. */ +static hs_cache_dir_descriptor_t * +lookup_v3_desc_as_dir(const uint8_t *key) +{ + tor_assert(key); + return digest256map_get(hs_cache_v3_dir, key); +} + +/* Free a directory descriptor object. */ +static void +cache_dir_desc_free(hs_cache_dir_descriptor_t *desc) +{ + if (desc == NULL) { + return; + } + hs_desc_plaintext_data_free(desc->plaintext_data); + tor_free(desc->encoded_desc); + tor_free(desc); +} + +/* Helper function: Use by the free all function using the digest256map + * interface to cache entries. */ +static void +cache_dir_desc_free_(void *ptr) +{ + hs_cache_dir_descriptor_t *desc = ptr; + cache_dir_desc_free(desc); +} + +/* Create a new directory cache descriptor object from a encoded descriptor. + * On success, return the heap-allocated cache object, otherwise return NULL if + * we can't decode the descriptor. */ +static hs_cache_dir_descriptor_t * +cache_dir_desc_new(const char *desc) +{ + hs_cache_dir_descriptor_t *dir_desc; + + tor_assert(desc); + + dir_desc = tor_malloc_zero(sizeof(hs_cache_dir_descriptor_t)); + dir_desc->plaintext_data = + tor_malloc_zero(sizeof(hs_desc_plaintext_data_t)); + dir_desc->encoded_desc = tor_strdup(desc); + + if (hs_desc_decode_plaintext(desc, dir_desc->plaintext_data) < 0) { + log_debug(LD_DIR, "Unable to decode descriptor. Rejecting."); + goto err; + } + + /* The blinded pubkey is the indexed key. */ + dir_desc->key = dir_desc->plaintext_data->blinded_kp.pubkey.pubkey; + dir_desc->created_ts = time(NULL); + return dir_desc; + + err: + cache_dir_desc_free(dir_desc); + return NULL; +} + +/* Return the size of a cache entry in bytes. */ +static size_t +cache_get_entry_size(const hs_cache_dir_descriptor_t *entry) +{ + return (sizeof(*entry) + hs_desc_plaintext_obj_size(entry->plaintext_data) + + strlen(entry->encoded_desc)); +} + +/* Try to store a valid version 3 descriptor in the directory cache. Return 0 + * on success else a negative value is returned indicating that we have a + * newer version in our cache. On error, caller is responsible to free the + * given descriptor desc. */ +static int +cache_store_v3_as_dir(hs_cache_dir_descriptor_t *desc) +{ + hs_cache_dir_descriptor_t *cache_entry; + + tor_assert(desc); + + /* Verify if we have an entry in the cache for that key and if yes, check + * if we should replace it? */ + cache_entry = lookup_v3_desc_as_dir(desc->key); + if (cache_entry != NULL) { + /* Only replace descriptor if revision-counter is greater than the one + * in our cache */ + if (cache_entry->plaintext_data->revision_counter >= + desc->plaintext_data->revision_counter) { + log_info(LD_REND, "Descriptor revision counter in our cache is " + "greater or equal than the one we received. " + "Rejecting!"); + goto err; + } + /* We now know that the descriptor we just received is a new one so + * remove the entry we currently have from our cache so we can then + * store the new one. */ + remove_v3_desc_as_dir(cache_entry); + rend_cache_decrement_allocation(cache_get_entry_size(cache_entry)); + cache_dir_desc_free(cache_entry); + } + /* Store the descriptor we just got. We are sure here that either we + * don't have the entry or we have a newer descriptor and the old one + * has been removed from the cache. */ + store_v3_desc_as_dir(desc); + + /* Update our total cache size with this entry for the OOM. This uses the + * old HS protocol cache subsystem for which we are tied with. */ + rend_cache_increment_allocation(cache_get_entry_size(desc)); + + /* XXX: Update HS statistics. We should have specific stats for v3. */ + + return 0; + + err: + return -1; +} + +/* Using the query which is the base64 encoded blinded key of a version 3 + * descriptor, lookup in our directory cache the entry. If found, 1 is + * returned and desc_out is populated with a newly allocated string being the + * encoded descriptor. If not found, 0 is returned and desc_out is untouched. + * On error, a negative value is returned and desc_out is untouched. */ +static int +cache_lookup_v3_as_dir(const char *query, const char **desc_out) +{ + int found = 0; + ed25519_public_key_t blinded_key; + const hs_cache_dir_descriptor_t *entry; + + tor_assert(query); + + /* Decode blinded key using the given query value. */ + if (ed25519_public_from_base64(&blinded_key, query) < 0) { + log_info(LD_REND, "Unable to decode the v3 HSDir query %s.", + safe_str_client(query)); + goto err; + } + + entry = lookup_v3_desc_as_dir(blinded_key.pubkey); + if (entry != NULL) { + found = 1; + if (desc_out) { + *desc_out = entry->encoded_desc; + } + } + + return found; + + err: + return -1; +} + +/* Clean the v3 cache by removing any entry that has expired using the + * <b>global_cutoff</b> value. If <b>global_cutoff</b> is 0, the cleaning + * process will use the lifetime found in the plaintext data section. Return + * the number of bytes cleaned. */ +STATIC size_t +cache_clean_v3_as_dir(time_t now, time_t global_cutoff) +{ + size_t bytes_removed = 0; + + /* Code flow error if this ever happens. */ + tor_assert(global_cutoff >= 0); + + if (!hs_cache_v3_dir) { /* No cache to clean. Just return. */ + return 0; + } + + DIGEST256MAP_FOREACH_MODIFY(hs_cache_v3_dir, key, + hs_cache_dir_descriptor_t *, entry) { + size_t entry_size; + time_t cutoff = global_cutoff; + if (!cutoff) { + /* Cutoff is the lifetime of the entry found in the descriptor. */ + cutoff = now - entry->plaintext_data->lifetime_sec; + } + + /* If the entry has been created _after_ the cutoff, not expired so + * continue to the next entry in our v3 cache. */ + if (entry->created_ts > cutoff) { + continue; + } + /* Here, our entry has expired, remove and free. */ + MAP_DEL_CURRENT(key); + entry_size = cache_get_entry_size(entry); + bytes_removed += entry_size; + /* Entry is not in the cache anymore, destroy it. */ + cache_dir_desc_free(entry); + /* Update our cache entry allocation size for the OOM. */ + rend_cache_decrement_allocation(entry_size); + /* Logging. */ + { + char key_b64[BASE64_DIGEST256_LEN + 1]; + base64_encode(key_b64, sizeof(key_b64), (const char *) key, + DIGEST256_LEN, 0); + log_info(LD_REND, "Removing v3 descriptor '%s' from HSDir cache", + safe_str_client(key_b64)); + } + } DIGEST256MAP_FOREACH_END; + + return bytes_removed; +} + +/* Given an encoded descriptor, store it in the directory cache depending on + * which version it is. Return a negative value on error. On success, 0 is + * returned. */ +int +hs_cache_store_as_dir(const char *desc) +{ + hs_cache_dir_descriptor_t *dir_desc = NULL; + + tor_assert(desc); + + /* Create a new cache object. This can fail if the descriptor plaintext data + * is unparseable which in this case a log message will be triggered. */ + dir_desc = cache_dir_desc_new(desc); + if (dir_desc == NULL) { + goto err; + } + + /* Call the right function against the descriptor version. At this point, + * we are sure that the descriptor's version is supported else the + * decoding would have failed. */ + switch (dir_desc->plaintext_data->version) { + case HS_VERSION_THREE: + default: + if (cache_store_v3_as_dir(dir_desc) < 0) { + goto err; + } + break; + } + return 0; + + err: + cache_dir_desc_free(dir_desc); + return -1; +} + +/* Using the query, lookup in our directory cache the entry. If found, 1 is + * returned and desc_out is populated with a newly allocated string being + * the encoded descriptor. If not found, 0 is returned and desc_out is + * untouched. On error, a negative value is returned and desc_out is + * untouched. */ +int +hs_cache_lookup_as_dir(uint32_t version, const char *query, + const char **desc_out) +{ + int found; + + tor_assert(query); + /* This should never be called with an unsupported version. */ + tor_assert(hs_desc_is_supported_version(version)); + + switch (version) { + case HS_VERSION_THREE: + default: + found = cache_lookup_v3_as_dir(query, desc_out); + break; + } + + return found; +} + +/* Clean all directory caches using the current time now. */ +void +hs_cache_clean_as_dir(time_t now) +{ + time_t cutoff; + + /* Start with v2 cache cleaning. */ + cutoff = now - rend_cache_max_entry_lifetime(); + rend_cache_clean_v2_descs_as_dir(cutoff); + + /* Now, clean the v3 cache. Set the cutoff to 0 telling the cleanup function + * to compute the cutoff by itself using the lifetime value. */ + cache_clean_v3_as_dir(now, 0); +} + +/* Do a round of OOM cleanup on all directory caches. Return the amount of + * removed bytes. It is possible that the returned value is lower than + * min_remove_bytes if the caches get emptied out so the caller should be + * aware of this. */ +size_t +hs_cache_handle_oom(time_t now, size_t min_remove_bytes) +{ + time_t k; + size_t bytes_removed = 0; + + /* Our OOM handler called with 0 bytes to remove is a code flow error. */ + tor_assert(min_remove_bytes != 0); + + /* The algorithm is as follow. K is the oldest expected descriptor age. + * + * 1) Deallocate all entries from v2 cache that are older than K hours. + * 1.1) If the amount of remove bytes has been reached, stop. + * 2) Deallocate all entries from v3 cache that are older than K hours + * 2.1) If the amount of remove bytes has been reached, stop. + * 3) Set K = K - RendPostPeriod and repeat process until K is < 0. + * + * This ends up being O(Kn). + */ + + /* Set K to the oldest expected age in seconds which is the maximum + * lifetime of a cache entry. We'll use the v2 lifetime because it's much + * bigger than the v3 thus leading to cleaning older descriptors. */ + k = rend_cache_max_entry_lifetime(); + + do { + time_t cutoff; + + /* If K becomes negative, it means we've empty the caches so stop and + * return what we were able to cleanup. */ + if (k < 0) { + break; + } + /* Compute a cutoff value with K and the current time. */ + cutoff = now - k; + + /* Start by cleaning the v2 cache with that cutoff. */ + bytes_removed += rend_cache_clean_v2_descs_as_dir(cutoff); + + if (bytes_removed < min_remove_bytes) { + /* We haven't remove enough bytes so clean v3 cache. */ + bytes_removed += cache_clean_v3_as_dir(now, cutoff); + /* Decrement K by a post period to shorten the cutoff. */ + k -= get_options()->RendPostPeriod; + } + } while (bytes_removed < min_remove_bytes); + + return bytes_removed; +} + +/* Initialize the hidden service cache subsystem. */ +void +hs_cache_init(void) +{ + /* Calling this twice is very wrong code flow. */ + tor_assert(!hs_cache_v3_dir); + hs_cache_v3_dir = digest256map_new(); +} + +/* Cleanup the hidden service cache subsystem. */ +void +hs_cache_free_all(void) +{ + digest256map_free(hs_cache_v3_dir, cache_dir_desc_free_); + hs_cache_v3_dir = NULL; +} + diff --git a/src/or/hs_cache.h b/src/or/hs_cache.h new file mode 100644 index 0000000000..01abb8002f --- /dev/null +++ b/src/or/hs_cache.h @@ -0,0 +1,61 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file hs_cache.h + * \brief Header file for hs_cache.c + **/ + +#ifndef TOR_HS_CACHE_H +#define TOR_HS_CACHE_H + +#include <stdint.h> + +#include "crypto.h" +#include "crypto_ed25519.h" +#include "hs_common.h" +#include "hs_descriptor.h" +#include "torcert.h" + +/* Descriptor representation on the directory side which is a subset of + * information that the HSDir can decode and serve it. */ +typedef struct hs_cache_dir_descriptor_t { + /* This object is indexed using the blinded pubkey located in the plaintext + * data which is populated only once the descriptor has been successfully + * decoded and validated. This simply points to that pubkey. */ + const uint8_t *key; + + /* When does this entry has been created. Used to expire entries. */ + time_t created_ts; + + /* Descriptor plaintext information. Obviously, we can't decrypt the + * encrypted part of the descriptor. */ + hs_desc_plaintext_data_t *plaintext_data; + + /* Encoded descriptor which is basically in text form. It's a NUL terminated + * string thus safe to strlen(). */ + char *encoded_desc; +} hs_cache_dir_descriptor_t; + +/* Public API */ + +void hs_cache_init(void); +void hs_cache_free_all(void); +void hs_cache_clean_as_dir(time_t now); +size_t hs_cache_handle_oom(time_t now, size_t min_remove_bytes); + +/* Store and Lookup function. They are version agnostic that is depending on + * the requested version of the descriptor, it will be re-routed to the + * right function. */ +int hs_cache_store_as_dir(const char *desc); +int hs_cache_lookup_as_dir(uint32_t version, const char *query, + const char **desc_out); + +#ifdef HS_CACHE_PRIVATE + +STATIC size_t cache_clean_v3_as_dir(time_t now, time_t global_cutoff); + +#endif /* HS_CACHE_PRIVATE */ + +#endif /* TOR_HS_CACHE_H */ + diff --git a/src/or/hs_common.c b/src/or/hs_common.c new file mode 100644 index 0000000000..b7ee888842 --- /dev/null +++ b/src/or/hs_common.c @@ -0,0 +1,281 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file hs_common.c + * \brief Contains code shared between different HS protocol version as well + * as useful data structures and accessors used by other subsystems. + * The rendcommon.c should only contains code relating to the v2 + * protocol. + **/ + +#include "or.h" + +#include "config.h" +#include "networkstatus.h" +#include "hs_common.h" +#include "rendcommon.h" + +/* Create a new rend_data_t for a specific given <b>version</b>. + * Return a pointer to the newly allocated data structure. */ +static rend_data_t * +rend_data_alloc(uint32_t version) +{ + rend_data_t *rend_data = NULL; + + switch (version) { + case HS_VERSION_TWO: + { + rend_data_v2_t *v2 = tor_malloc_zero(sizeof(*v2)); + v2->base_.version = HS_VERSION_TWO; + v2->base_.hsdirs_fp = smartlist_new(); + rend_data = &v2->base_; + break; + } + default: + tor_assert(0); + break; + } + + return rend_data; +} + +/** Free all storage associated with <b>data</b> */ +void +rend_data_free(rend_data_t *data) +{ + if (!data) { + return; + } + /* By using our allocation function, this should always be set. */ + tor_assert(data->hsdirs_fp); + /* Cleanup the HSDir identity digest. */ + SMARTLIST_FOREACH(data->hsdirs_fp, char *, d, tor_free(d)); + smartlist_free(data->hsdirs_fp); + /* Depending on the version, cleanup. */ + switch (data->version) { + case HS_VERSION_TWO: + { + rend_data_v2_t *v2_data = TO_REND_DATA_V2(data); + tor_free(v2_data); + break; + } + default: + tor_assert(0); + } +} + +/* Allocate and return a deep copy of <b>data</b>. */ +rend_data_t * +rend_data_dup(const rend_data_t *data) +{ + rend_data_t *data_dup = NULL; + smartlist_t *hsdirs_fp = smartlist_new(); + + tor_assert(data); + tor_assert(data->hsdirs_fp); + + SMARTLIST_FOREACH(data->hsdirs_fp, char *, fp, + smartlist_add(hsdirs_fp, tor_memdup(fp, DIGEST_LEN))); + + switch (data->version) { + case HS_VERSION_TWO: + { + rend_data_v2_t *v2_data = tor_memdup(TO_REND_DATA_V2(data), + sizeof(*v2_data)); + data_dup = &v2_data->base_; + data_dup->hsdirs_fp = hsdirs_fp; + break; + } + default: + tor_assert(0); + break; + } + + return data_dup; +} + +/* Compute the descriptor ID for each HS descriptor replica and save them. A + * valid onion address must be present in the <b>rend_data</b>. + * + * Return 0 on success else -1. */ +static int +compute_desc_id(rend_data_t *rend_data) +{ + int ret = 0; + unsigned replica; + time_t now = time(NULL); + + tor_assert(rend_data); + + switch (rend_data->version) { + case HS_VERSION_TWO: + { + rend_data_v2_t *v2_data = TO_REND_DATA_V2(rend_data); + /* Compute descriptor ID for each replicas. */ + for (replica = 0; replica < ARRAY_LENGTH(v2_data->descriptor_id); + replica++) { + ret = rend_compute_v2_desc_id(v2_data->descriptor_id[replica], + v2_data->onion_address, + v2_data->descriptor_cookie, + now, replica); + if (ret < 0) { + goto end; + } + } + break; + } + default: + tor_assert(0); + } + + end: + return ret; +} + +/* Allocate and initialize a rend_data_t object for a service using the + * provided arguments. All arguments are optional (can be NULL), except from + * <b>onion_address</b> which MUST be set. + * + * Return a valid rend_data_t pointer. This only returns a version 2 object of + * rend_data_t. */ +rend_data_t * +rend_data_service_create(const char *onion_address, const char *pk_digest, + const uint8_t *cookie, rend_auth_type_t auth_type) +{ + /* Create a rend_data_t object for version 2. */ + rend_data_t *rend_data = rend_data_alloc(HS_VERSION_TWO); + rend_data_v2_t *v2= TO_REND_DATA_V2(rend_data); + + /* We need at least one else the call is wrong. */ + tor_assert(onion_address != NULL); + + if (pk_digest) { + memcpy(v2->rend_pk_digest, pk_digest, sizeof(v2->rend_pk_digest)); + } + if (cookie) { + memcpy(rend_data->rend_cookie, cookie, sizeof(rend_data->rend_cookie)); + } + + strlcpy(v2->onion_address, onion_address, sizeof(v2->onion_address)); + v2->auth_type = auth_type; + + return rend_data; +} + +/* Allocate and initialize a rend_data_t object for a client request using + * the given arguments. Either an onion address or a descriptor ID is + * needed. Both can be given but only the onion address will be used to make + * the descriptor fetch. + * + * Return a valid rend_data_t pointer or NULL on error meaning the + * descriptor IDs couldn't be computed from the given data. */ +rend_data_t * +rend_data_client_create(const char *onion_address, const char *desc_id, + const char *cookie, rend_auth_type_t auth_type) +{ + /* Create a rend_data_t object for version 2. */ + rend_data_t *rend_data = rend_data_alloc(HS_VERSION_TWO); + rend_data_v2_t *v2= TO_REND_DATA_V2(rend_data); + + /* We need at least one else the call is wrong. */ + tor_assert(onion_address != NULL || desc_id != NULL); + + if (cookie) { + memcpy(v2->descriptor_cookie, cookie, sizeof(v2->descriptor_cookie)); + } + if (desc_id) { + memcpy(v2->desc_id_fetch, desc_id, sizeof(v2->desc_id_fetch)); + } + if (onion_address) { + strlcpy(v2->onion_address, onion_address, sizeof(v2->onion_address)); + if (compute_desc_id(rend_data) < 0) { + goto error; + } + } + + v2->auth_type = auth_type; + + return rend_data; + + error: + rend_data_free(rend_data); + return NULL; +} + +/* Return the onion address from the rend data. Depending on the version, + * the size of the address can vary but it's always NUL terminated. */ +const char * +rend_data_get_address(const rend_data_t *rend_data) +{ + tor_assert(rend_data); + + switch (rend_data->version) { + case HS_VERSION_TWO: + return TO_REND_DATA_V2(rend_data)->onion_address; + default: + /* We should always have a supported version. */ + tor_assert(0); + } +} + +/* Return the descriptor ID for a specific replica number from the rend + * data. The returned data is a binary digest and depending on the version its + * size can vary. The size of the descriptor ID is put in <b>len_out</b> if + * non NULL. */ +const char * +rend_data_get_desc_id(const rend_data_t *rend_data, uint8_t replica, + size_t *len_out) +{ + tor_assert(rend_data); + + switch (rend_data->version) { + case HS_VERSION_TWO: + tor_assert(replica < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS); + if (len_out) { + *len_out = DIGEST_LEN; + } + return TO_REND_DATA_V2(rend_data)->descriptor_id[replica]; + default: + /* We should always have a supported version. */ + tor_assert(0); + } +} + +/* Return the public key digest using the given <b>rend_data</b>. The size of + * the digest is put in <b>len_out</b> (if set) which can differ depending on + * the version. */ +const uint8_t * +rend_data_get_pk_digest(const rend_data_t *rend_data, size_t *len_out) +{ + tor_assert(rend_data); + + switch (rend_data->version) { + case HS_VERSION_TWO: + { + const rend_data_v2_t *v2_data = TO_REND_DATA_V2(rend_data); + if (len_out) { + *len_out = sizeof(v2_data->rend_pk_digest); + } + return (const uint8_t *) v2_data->rend_pk_digest; + } + default: + /* We should always have a supported version. */ + tor_assert(0); + } +} + +/* Return true iff the Onion Services protocol version 3 is enabled. This only + * considers the consensus parameter. If the parameter is not found, the + * default is that it's enabled. */ +int +hs_v3_protocol_is_enabled(void) +{ + /* This consensus param controls if the the onion services version 3 is + * enabled or not which is the first version of the next generation + * (proposal 224). If this option is set to 0, the tor daemon won't support + * the protocol as either a relay, directory, service or client. By default, + * it's enabled if the parameter is not found. */ + return networkstatus_get_param(NULL, "EnableOnionServicesV3", 1, 0, 1); +} + diff --git a/src/or/hs_common.h b/src/or/hs_common.h new file mode 100644 index 0000000000..2502f35ad4 --- /dev/null +++ b/src/or/hs_common.h @@ -0,0 +1,39 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file hs_common.h + * \brief Header file containing common data for the whole HS subsytem. + **/ + +#ifndef TOR_HS_COMMON_H +#define TOR_HS_COMMON_H + +#include "or.h" + +/* Protocol version 2. Use this instead of hardcoding "2" in the code base, + * this adds a clearer semantic to the value when used. */ +#define HS_VERSION_TWO 2 +/* Version 3 of the protocol (prop224). */ +#define HS_VERSION_THREE 3 + +void rend_data_free(rend_data_t *data); +rend_data_t *rend_data_dup(const rend_data_t *data); +rend_data_t *rend_data_client_create(const char *onion_address, + const char *desc_id, + const char *cookie, + rend_auth_type_t auth_type); +rend_data_t *rend_data_service_create(const char *onion_address, + const char *pk_digest, + const uint8_t *cookie, + rend_auth_type_t auth_type); +const char *rend_data_get_address(const rend_data_t *rend_data); +const char *rend_data_get_desc_id(const rend_data_t *rend_data, + uint8_t replica, size_t *len_out); +const uint8_t *rend_data_get_pk_digest(const rend_data_t *rend_data, + size_t *len_out); + +int hs_v3_protocol_is_enabled(void); + +#endif /* TOR_HS_COMMON_H */ + diff --git a/src/or/hs_descriptor.c b/src/or/hs_descriptor.c new file mode 100644 index 0000000000..1517ccb12e --- /dev/null +++ b/src/or/hs_descriptor.c @@ -0,0 +1,1944 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file hs_descriptor.c + * \brief Handle hidden service descriptor encoding/decoding. + **/ + +/* For unit tests.*/ +#define HS_DESCRIPTOR_PRIVATE + +#include "hs_descriptor.h" + +#include "or.h" +#include "ed25519_cert.h" /* Trunnel interface. */ +#include "parsecommon.h" +#include "rendcache.h" + +/* Constant string value used for the descriptor format. */ +#define str_hs_desc "hs-descriptor" +#define str_desc_cert "descriptor-signing-key-cert" +#define str_rev_counter "revision-counter" +#define str_encrypted "encrypted" +#define str_signature "signature" +#define str_lifetime "descriptor-lifetime" +/* Constant string value for the encrypted part of the descriptor. */ +#define str_create2_formats "create2-formats" +#define str_auth_required "authentication-required" +#define str_single_onion "single-onion-service" +#define str_intro_point "introduction-point" +#define str_ip_auth_key "auth-key" +#define str_ip_enc_key "enc-key" +#define str_ip_enc_key_cert "enc-key-certification" +#define str_intro_point_start "\n" str_intro_point " " +/* Constant string value for the construction to encrypt the encrypted data + * section. */ +#define str_enc_hsdir_data "hsdir-encrypted-data" +/* Prefix required to compute/verify HS desc signatures */ +#define str_desc_sig_prefix "Tor onion service descriptor sig v3" + +/* Authentication supported types. */ +static const struct { + hs_desc_auth_type_t type; + const char *identifier; +} auth_types[] = { + { HS_DESC_AUTH_PASSWORD, "password" }, + { HS_DESC_AUTH_ED25519, "ed25519" }, + /* Indicate end of array. */ + { 0, NULL } +}; + +/* Descriptor ruleset. */ +static token_rule_t hs_desc_v3_token_table[] = { + T1_START(str_hs_desc, R_HS_DESCRIPTOR, EQ(1), NO_OBJ), + T1(str_lifetime, R3_DESC_LIFETIME, EQ(1), NO_OBJ), + T1(str_desc_cert, R3_DESC_SIGNING_CERT, NO_ARGS, NEED_OBJ), + T1(str_rev_counter, R3_REVISION_COUNTER, EQ(1), NO_OBJ), + T1(str_encrypted, R3_ENCRYPTED, NO_ARGS, NEED_OBJ), + T1_END(str_signature, R3_SIGNATURE, EQ(1), NO_OBJ), + END_OF_TABLE +}; + +/* Descriptor ruleset for the encrypted section. */ +static token_rule_t hs_desc_encrypted_v3_token_table[] = { + T1_START(str_create2_formats, R3_CREATE2_FORMATS, CONCAT_ARGS, NO_OBJ), + T01(str_auth_required, R3_AUTHENTICATION_REQUIRED, ARGS, NO_OBJ), + T01(str_single_onion, R3_SINGLE_ONION_SERVICE, ARGS, NO_OBJ), + END_OF_TABLE +}; + +/* Descriptor ruleset for the introduction points section. */ +static token_rule_t hs_desc_intro_point_v3_token_table[] = { + T1_START(str_intro_point, R3_INTRODUCTION_POINT, EQ(1), NO_OBJ), + T1(str_ip_auth_key, R3_INTRO_AUTH_KEY, NO_ARGS, NEED_OBJ), + T1(str_ip_enc_key, R3_INTRO_ENC_KEY, ARGS, OBJ_OK), + T1_END(str_ip_enc_key_cert, R3_INTRO_ENC_KEY_CERTIFICATION, + NO_ARGS, NEED_OBJ), + END_OF_TABLE +}; + +/* Free a descriptor intro point object. */ +STATIC void +desc_intro_point_free(hs_desc_intro_point_t *ip) +{ + if (!ip) { + return; + } + if (ip->link_specifiers) { + SMARTLIST_FOREACH(ip->link_specifiers, hs_desc_link_specifier_t *, + ls, tor_free(ls)); + smartlist_free(ip->link_specifiers); + } + tor_cert_free(ip->auth_key_cert); + if (ip->enc_key_type == HS_DESC_KEY_TYPE_LEGACY) { + crypto_pk_free(ip->enc_key.legacy); + } + tor_free(ip); +} + +/* Free the content of the plaintext section of a descriptor. */ +static void +desc_plaintext_data_free_contents(hs_desc_plaintext_data_t *desc) +{ + if (!desc) { + return; + } + + if (desc->encrypted_blob) { + tor_free(desc->encrypted_blob); + } + tor_cert_free(desc->signing_key_cert); + + memwipe(desc, 0, sizeof(*desc)); +} + +/* Free the content of the encrypted section of a descriptor. */ +static void +desc_encrypted_data_free_contents(hs_desc_encrypted_data_t *desc) +{ + if (!desc) { + return; + } + + if (desc->auth_types) { + SMARTLIST_FOREACH(desc->auth_types, char *, a, tor_free(a)); + smartlist_free(desc->auth_types); + } + if (desc->intro_points) { + SMARTLIST_FOREACH(desc->intro_points, hs_desc_intro_point_t *, ip, + desc_intro_point_free(ip)); + smartlist_free(desc->intro_points); + } + memwipe(desc, 0, sizeof(*desc)); +} + +/* === ENCODING === */ + +/* Encode the ed25519 certificate <b>cert</b> and put the newly allocated + * string in <b>cert_str_out</b>. Return 0 on success else a negative value. */ +STATIC int +encode_cert(const tor_cert_t *cert, char **cert_str_out) +{ + int ret = -1; + char *ed_cert_b64 = NULL; + size_t ed_cert_b64_len; + + tor_assert(cert); + tor_assert(cert_str_out); + + /* Get the encoded size and add the NUL byte. */ + ed_cert_b64_len = base64_encode_size(cert->encoded_len, + BASE64_ENCODE_MULTILINE) + 1; + ed_cert_b64 = tor_malloc_zero(ed_cert_b64_len); + + /* Base64 encode the encoded certificate. */ + if (base64_encode(ed_cert_b64, ed_cert_b64_len, + (const char *) cert->encoded, cert->encoded_len, + BASE64_ENCODE_MULTILINE) < 0) { + log_err(LD_BUG, "Couldn't base64-encode descriptor signing key cert!"); + goto err; + } + + /* Put everything together in a NUL terminated string. */ + tor_asprintf(cert_str_out, + "-----BEGIN ED25519 CERT-----\n" + "%s" + "-----END ED25519 CERT-----", + ed_cert_b64); + /* Success! */ + ret = 0; + + err: + tor_free(ed_cert_b64); + return ret; +} + +/* Encode the given link specifier objects into a newly allocated string. + * This can't fail so caller can always assume a valid string being + * returned. */ +STATIC char * +encode_link_specifiers(const smartlist_t *specs) +{ + char *encoded_b64 = NULL; + link_specifier_list_t *lslist = link_specifier_list_new(); + + tor_assert(specs); + /* No link specifiers is a code flow error, can't happen. */ + tor_assert(smartlist_len(specs) > 0); + tor_assert(smartlist_len(specs) <= UINT8_MAX); + + link_specifier_list_set_n_spec(lslist, smartlist_len(specs)); + + SMARTLIST_FOREACH_BEGIN(specs, const hs_desc_link_specifier_t *, + spec) { + link_specifier_t *ls = link_specifier_new(); + link_specifier_set_ls_type(ls, spec->type); + + switch (spec->type) { + case LS_IPV4: + link_specifier_set_un_ipv4_addr(ls, + tor_addr_to_ipv4h(&spec->u.ap.addr)); + link_specifier_set_un_ipv4_port(ls, spec->u.ap.port); + /* Four bytes IPv4 and two bytes port. */ + link_specifier_set_ls_len(ls, sizeof(spec->u.ap.addr.addr.in_addr) + + sizeof(spec->u.ap.port)); + break; + case LS_IPV6: + { + size_t addr_len = link_specifier_getlen_un_ipv6_addr(ls); + const uint8_t *in6_addr = tor_addr_to_in6_addr8(&spec->u.ap.addr); + uint8_t *ipv6_array = link_specifier_getarray_un_ipv6_addr(ls); + memcpy(ipv6_array, in6_addr, addr_len); + link_specifier_set_un_ipv6_port(ls, spec->u.ap.port); + /* Sixteen bytes IPv6 and two bytes port. */ + link_specifier_set_ls_len(ls, addr_len + sizeof(spec->u.ap.port)); + break; + } + case LS_LEGACY_ID: + { + size_t legacy_id_len = link_specifier_getlen_un_legacy_id(ls); + uint8_t *legacy_id_array = link_specifier_getarray_un_legacy_id(ls); + memcpy(legacy_id_array, spec->u.legacy_id, legacy_id_len); + link_specifier_set_ls_len(ls, legacy_id_len); + break; + } + default: + tor_assert(0); + } + + link_specifier_list_add_spec(lslist, ls); + } SMARTLIST_FOREACH_END(spec); + + { + uint8_t *encoded; + ssize_t encoded_len, encoded_b64_len, ret; + + encoded_len = link_specifier_list_encoded_len(lslist); + tor_assert(encoded_len > 0); + encoded = tor_malloc_zero(encoded_len); + ret = link_specifier_list_encode(encoded, encoded_len, lslist); + tor_assert(ret == encoded_len); + + /* Base64 encode our binary format. Add extra NUL byte for the base64 + * encoded value. */ + encoded_b64_len = base64_encode_size(encoded_len, 0) + 1; + encoded_b64 = tor_malloc_zero(encoded_b64_len); + ret = base64_encode(encoded_b64, encoded_b64_len, (const char *) encoded, + encoded_len, 0); + tor_assert(ret == (encoded_b64_len - 1)); + tor_free(encoded); + } + + link_specifier_list_free(lslist); + return encoded_b64; +} + +/* Encode an introduction point encryption key and return a newly allocated + * string with it. On failure, return NULL. */ +static char * +encode_enc_key(const ed25519_keypair_t *sig_key, + const hs_desc_intro_point_t *ip) +{ + char *encoded = NULL; + time_t now = time(NULL); + + tor_assert(sig_key); + tor_assert(ip); + + switch (ip->enc_key_type) { + case HS_DESC_KEY_TYPE_LEGACY: + { + char *key_str, b64_cert[256]; + ssize_t cert_len; + size_t key_str_len; + uint8_t *cert_data = NULL; + + /* Create cross certification cert. */ + cert_len = tor_make_rsa_ed25519_crosscert(&sig_key->pubkey, + ip->enc_key.legacy, + now + HS_DESC_CERT_LIFETIME, + &cert_data); + if (cert_len < 0) { + log_warn(LD_REND, "Unable to create legacy crosscert."); + goto err; + } + /* Encode cross cert. */ + if (base64_encode(b64_cert, sizeof(b64_cert), (const char *) cert_data, + cert_len, BASE64_ENCODE_MULTILINE) < 0) { + tor_free(cert_data); + log_warn(LD_REND, "Unable to encode legacy crosscert."); + goto err; + } + tor_free(cert_data); + /* Convert the encryption key to a string. */ + if (crypto_pk_write_public_key_to_string(ip->enc_key.legacy, &key_str, + &key_str_len) < 0) { + log_warn(LD_REND, "Unable to encode legacy encryption key."); + goto err; + } + tor_asprintf(&encoded, + "%s legacy\n%s" /* Newline is added by the call above. */ + "%s\n" + "-----BEGIN CROSSCERT-----\n" + "%s" + "-----END CROSSCERT-----", + str_ip_enc_key, key_str, + str_ip_enc_key_cert, b64_cert); + tor_free(key_str); + break; + } + case HS_DESC_KEY_TYPE_CURVE25519: + { + int signbit, ret; + char *encoded_cert, key_fp_b64[CURVE25519_BASE64_PADDED_LEN + 1]; + ed25519_keypair_t curve_kp; + + if (ed25519_keypair_from_curve25519_keypair(&curve_kp, &signbit, + &ip->enc_key.curve25519)) { + goto err; + } + tor_cert_t *cross_cert = tor_cert_create(&curve_kp, + CERT_TYPE_CROSS_HS_IP_KEYS, + &sig_key->pubkey, now, + HS_DESC_CERT_LIFETIME, + CERT_FLAG_INCLUDE_SIGNING_KEY); + memwipe(&curve_kp, 0, sizeof(curve_kp)); + if (!cross_cert) { + goto err; + } + ret = encode_cert(cross_cert, &encoded_cert); + tor_cert_free(cross_cert); + if (ret) { + goto err; + } + if (curve25519_public_to_base64(key_fp_b64, + &ip->enc_key.curve25519.pubkey) < 0) { + tor_free(encoded_cert); + goto err; + } + tor_asprintf(&encoded, + "%s ntor %s\n" + "%s\n%s", + str_ip_enc_key, key_fp_b64, + str_ip_enc_key_cert, encoded_cert); + tor_free(encoded_cert); + break; + } + default: + tor_assert(0); + } + + err: + return encoded; +} + +/* Encode an introduction point object and return a newly allocated string + * with it. On failure, return NULL. */ +static char * +encode_intro_point(const ed25519_keypair_t *sig_key, + const hs_desc_intro_point_t *ip) +{ + char *encoded_ip = NULL; + smartlist_t *lines = smartlist_new(); + + tor_assert(ip); + tor_assert(sig_key); + + /* Encode link specifier. */ + { + char *ls_str = encode_link_specifiers(ip->link_specifiers); + smartlist_add_asprintf(lines, "%s %s", str_intro_point, ls_str); + tor_free(ls_str); + } + + /* Authentication key encoding. */ + { + char *encoded_cert; + if (encode_cert(ip->auth_key_cert, &encoded_cert) < 0) { + goto err; + } + smartlist_add_asprintf(lines, "%s\n%s", str_ip_auth_key, encoded_cert); + tor_free(encoded_cert); + } + + /* Encryption key encoding. */ + { + char *encoded_enc_key = encode_enc_key(sig_key, ip); + if (encoded_enc_key == NULL) { + goto err; + } + smartlist_add_asprintf(lines, "%s", encoded_enc_key); + tor_free(encoded_enc_key); + } + + /* Join them all in one blob of text. */ + encoded_ip = smartlist_join_strings(lines, "\n", 1, NULL); + + err: + SMARTLIST_FOREACH(lines, char *, l, tor_free(l)); + smartlist_free(lines); + return encoded_ip; +} + +/* Using a given decriptor object, build the secret input needed for the + * KDF and put it in the dst pointer which is an already allocated buffer + * of size dstlen. */ +static void +build_secret_input(const hs_descriptor_t *desc, uint8_t *dst, size_t dstlen) +{ + size_t offset = 0; + + tor_assert(desc); + tor_assert(dst); + tor_assert(HS_DESC_ENCRYPTED_SECRET_INPUT_LEN <= dstlen); + + /* XXX use the destination length as the memcpy length */ + /* Copy blinded public key. */ + memcpy(dst, desc->plaintext_data.blinded_kp.pubkey.pubkey, + sizeof(desc->plaintext_data.blinded_kp.pubkey.pubkey)); + offset += sizeof(desc->plaintext_data.blinded_kp.pubkey.pubkey); + /* Copy subcredential. */ + memcpy(dst + offset, desc->subcredential, sizeof(desc->subcredential)); + offset += sizeof(desc->subcredential); + /* Copy revision counter value. */ + set_uint64(dst + offset, tor_ntohll(desc->plaintext_data.revision_counter)); + offset += sizeof(uint64_t); + tor_assert(HS_DESC_ENCRYPTED_SECRET_INPUT_LEN == offset); +} + +/* Do the KDF construction and put the resulting data in key_out which is of + * key_out_len length. It uses SHAKE-256 as specified in the spec. */ +static void +build_kdf_key(const hs_descriptor_t *desc, + const uint8_t *salt, size_t salt_len, + uint8_t *key_out, size_t key_out_len) +{ + uint8_t secret_input[HS_DESC_ENCRYPTED_SECRET_INPUT_LEN]; + crypto_xof_t *xof; + + tor_assert(desc); + tor_assert(salt); + tor_assert(key_out); + + /* Build the secret input for the KDF computation. */ + build_secret_input(desc, secret_input, sizeof(secret_input)); + + xof = crypto_xof_new(); + /* Feed our KDF. [SHAKE it like a polaroid picture --Yawning]. */ + crypto_xof_add_bytes(xof, secret_input, sizeof(secret_input)); + crypto_xof_add_bytes(xof, salt, salt_len); + crypto_xof_add_bytes(xof, (const uint8_t *) str_enc_hsdir_data, + strlen(str_enc_hsdir_data)); + /* Eat from our KDF. */ + crypto_xof_squeeze_bytes(xof, key_out, key_out_len); + crypto_xof_free(xof); + memwipe(secret_input, 0, sizeof(secret_input)); +} + +/* Using the given descriptor and salt, run it through our KDF function and + * then extract a secret key in key_out, the IV in iv_out and MAC in mac_out. + * This function can't fail. */ +static void +build_secret_key_iv_mac(const hs_descriptor_t *desc, + const uint8_t *salt, size_t salt_len, + uint8_t *key_out, size_t key_len, + uint8_t *iv_out, size_t iv_len, + uint8_t *mac_out, size_t mac_len) +{ + size_t offset = 0; + uint8_t kdf_key[HS_DESC_ENCRYPTED_KDF_OUTPUT_LEN]; + + tor_assert(desc); + tor_assert(salt); + tor_assert(key_out); + tor_assert(iv_out); + tor_assert(mac_out); + + build_kdf_key(desc, salt, salt_len, kdf_key, sizeof(kdf_key)); + /* Copy the bytes we need for both the secret key and IV. */ + memcpy(key_out, kdf_key, key_len); + offset += key_len; + memcpy(iv_out, kdf_key + offset, iv_len); + offset += iv_len; + memcpy(mac_out, kdf_key + offset, mac_len); + /* Extra precaution to make sure we are not out of bound. */ + tor_assert((offset + mac_len) == sizeof(kdf_key)); + memwipe(kdf_key, 0, sizeof(kdf_key)); +} + +/* Using a key, salt and encrypted payload, build a MAC and put it in mac_out. + * We use SHA3-256 for the MAC computation. + * This function can't fail. */ +static void +build_mac(const uint8_t *mac_key, size_t mac_key_len, + const uint8_t *salt, size_t salt_len, + const uint8_t *encrypted, size_t encrypted_len, + uint8_t *mac_out, size_t mac_len) +{ + crypto_digest_t *digest; + + const uint64_t mac_len_netorder = tor_htonll(mac_key_len); + const uint64_t salt_len_netorder = tor_htonll(salt_len); + + tor_assert(mac_key); + tor_assert(salt); + tor_assert(encrypted); + tor_assert(mac_out); + + digest = crypto_digest256_new(DIGEST_SHA3_256); + /* As specified in section 2.5 of proposal 224, first add the mac key + * then add the salt first and then the encrypted section. */ + + crypto_digest_add_bytes(digest, (const char *) &mac_len_netorder, 8); + crypto_digest_add_bytes(digest, (const char *) mac_key, mac_key_len); + crypto_digest_add_bytes(digest, (const char *) &salt_len_netorder, 8); + crypto_digest_add_bytes(digest, (const char *) salt, salt_len); + crypto_digest_add_bytes(digest, (const char *) encrypted, encrypted_len); + crypto_digest_get_digest(digest, (char *) mac_out, mac_len); + crypto_digest_free(digest); +} + +/* Given a source length, return the new size including padding for the + * plaintext encryption. */ +static size_t +compute_padded_plaintext_length(size_t plaintext_len) +{ + size_t plaintext_padded_len; + + /* Make sure we won't overflow. */ + tor_assert(plaintext_len <= + (SIZE_T_CEILING - HS_DESC_PLAINTEXT_PADDING_MULTIPLE)); + + /* Get the extra length we need to add. For example, if srclen is 234 bytes, + * this will expand to (2 * 128) == 256 thus an extra 22 bytes. */ + plaintext_padded_len = CEIL_DIV(plaintext_len, + HS_DESC_PLAINTEXT_PADDING_MULTIPLE) * + HS_DESC_PLAINTEXT_PADDING_MULTIPLE; + /* Can never be extra careful. Make sure we are _really_ padded. */ + tor_assert(!(plaintext_padded_len % HS_DESC_PLAINTEXT_PADDING_MULTIPLE)); + return plaintext_padded_len; +} + +/* Given a buffer, pad it up to the encrypted section padding requirement. Set + * the newly allocated string in padded_out and return the length of the + * padded buffer. */ +STATIC size_t +build_plaintext_padding(const char *plaintext, size_t plaintext_len, + uint8_t **padded_out) +{ + size_t padded_len; + uint8_t *padded; + + tor_assert(plaintext); + tor_assert(padded_out); + + /* Allocate the final length including padding. */ + padded_len = compute_padded_plaintext_length(plaintext_len); + tor_assert(padded_len >= plaintext_len); + padded = tor_malloc_zero(padded_len); + + memcpy(padded, plaintext, plaintext_len); + *padded_out = padded; + return padded_len; +} + +/* Using a key, IV and plaintext data of length plaintext_len, create the + * encrypted section by encrypting it and setting encrypted_out with the + * data. Return size of the encrypted data buffer. */ +static size_t +build_encrypted(const uint8_t *key, const uint8_t *iv, const char *plaintext, + size_t plaintext_len, uint8_t **encrypted_out) +{ + size_t encrypted_len; + uint8_t *padded_plaintext, *encrypted; + crypto_cipher_t *cipher; + + tor_assert(key); + tor_assert(iv); + tor_assert(plaintext); + tor_assert(encrypted_out); + + /* This creates a cipher for AES128. It can't fail. */ + cipher = crypto_cipher_new_with_iv((const char *) key, (const char *) iv); + /* This can't fail. */ + encrypted_len = build_plaintext_padding(plaintext, plaintext_len, + &padded_plaintext); + /* Extra precautions that we have a valie padding length. */ + tor_assert(encrypted_len <= HS_DESC_PADDED_PLAINTEXT_MAX_LEN); + tor_assert(!(encrypted_len % HS_DESC_PLAINTEXT_PADDING_MULTIPLE)); + /* We use a stream cipher so the encrypted length will be the same as the + * plaintext padded length. */ + encrypted = tor_malloc_zero(encrypted_len); + /* This can't fail. */ + crypto_cipher_encrypt(cipher, (char *) encrypted, + (const char *) padded_plaintext, encrypted_len); + *encrypted_out = encrypted; + /* Cleanup. */ + crypto_cipher_free(cipher); + tor_free(padded_plaintext); + return encrypted_len; +} + +/* Encrypt the given plaintext buffer and using the descriptor to get the + * keys. Set encrypted_out with the encrypted data and return the length of + * it. */ +static size_t +encrypt_descriptor_data(const hs_descriptor_t *desc, const char *plaintext, + char **encrypted_out) +{ + char *final_blob; + size_t encrypted_len, final_blob_len, offset = 0; + uint8_t *encrypted; + uint8_t salt[HS_DESC_ENCRYPTED_SALT_LEN]; + uint8_t secret_key[CIPHER_KEY_LEN], secret_iv[CIPHER_IV_LEN]; + uint8_t mac_key[DIGEST256_LEN], mac[DIGEST256_LEN]; + + tor_assert(desc); + tor_assert(plaintext); + tor_assert(encrypted_out); + + /* Get our salt. The returned bytes are already hashed. */ + crypto_strongest_rand(salt, sizeof(salt)); + + /* KDF construction resulting in a key from which the secret key, IV and MAC + * key are extracted which is what we need for the encryption. */ + build_secret_key_iv_mac(desc, salt, sizeof(salt), + secret_key, sizeof(secret_key), + secret_iv, sizeof(secret_iv), + mac_key, sizeof(mac_key)); + + /* Build the encrypted part that is do the actual encryption. */ + encrypted_len = build_encrypted(secret_key, secret_iv, plaintext, + strlen(plaintext), &encrypted); + memwipe(secret_key, 0, sizeof(secret_key)); + memwipe(secret_iv, 0, sizeof(secret_iv)); + /* This construction is specified in section 2.5 of proposal 224. */ + final_blob_len = sizeof(salt) + encrypted_len + DIGEST256_LEN; + final_blob = tor_malloc_zero(final_blob_len); + + /* Build the MAC. */ + build_mac(mac_key, sizeof(mac_key), salt, sizeof(salt), + encrypted, encrypted_len, mac, sizeof(mac)); + memwipe(mac_key, 0, sizeof(mac_key)); + + /* The salt is the first value. */ + memcpy(final_blob, salt, sizeof(salt)); + offset = sizeof(salt); + /* Second value is the encrypted data. */ + memcpy(final_blob + offset, encrypted, encrypted_len); + offset += encrypted_len; + /* Third value is the MAC. */ + memcpy(final_blob + offset, mac, sizeof(mac)); + offset += sizeof(mac); + /* Cleanup the buffers. */ + memwipe(salt, 0, sizeof(salt)); + memwipe(encrypted, 0, encrypted_len); + tor_free(encrypted); + /* Extra precaution. */ + tor_assert(offset == final_blob_len); + + *encrypted_out = final_blob; + return final_blob_len; +} + +/* Take care of encoding the encrypted data section and then encrypting it + * with the descriptor's key. A newly allocated NUL terminated string pointer + * containing the encrypted encoded blob is put in encrypted_blob_out. Return + * 0 on success else a negative value. */ +static int +encode_encrypted_data(const hs_descriptor_t *desc, + char **encrypted_blob_out) +{ + int ret = -1; + char *encoded_str, *encrypted_blob; + smartlist_t *lines = smartlist_new(); + + tor_assert(desc); + tor_assert(encrypted_blob_out); + + /* Build the start of the section prior to the introduction points. */ + { + if (!desc->encrypted_data.create2_ntor) { + log_err(LD_BUG, "HS desc doesn't have recognized handshake type."); + goto err; + } + smartlist_add_asprintf(lines, "%s %d\n", str_create2_formats, + ONION_HANDSHAKE_TYPE_NTOR); + + if (desc->encrypted_data.auth_types && + smartlist_len(desc->encrypted_data.auth_types)) { + /* Put the authentication-required line. */ + char *buf = smartlist_join_strings(desc->encrypted_data.auth_types, " ", + 0, NULL); + smartlist_add_asprintf(lines, "%s %s\n", str_auth_required, buf); + tor_free(buf); + } + + if (desc->encrypted_data.single_onion_service) { + smartlist_add_asprintf(lines, "%s\n", str_single_onion); + } + } + + /* Build the introduction point(s) section. */ + SMARTLIST_FOREACH_BEGIN(desc->encrypted_data.intro_points, + const hs_desc_intro_point_t *, ip) { + char *encoded_ip = encode_intro_point(&desc->plaintext_data.signing_kp, + ip); + if (encoded_ip == NULL) { + log_err(LD_BUG, "HS desc intro point is malformed."); + goto err; + } + smartlist_add(lines, encoded_ip); + } SMARTLIST_FOREACH_END(ip); + + /* Build the entire encrypted data section into one encoded plaintext and + * then encrypt it. */ + encoded_str = smartlist_join_strings(lines, "", 0, NULL); + + /* Encrypt the section into an encrypted blob that we'll base64 encode + * before returning it. */ + { + char *enc_b64; + ssize_t enc_b64_len, ret_len, enc_len; + + enc_len = encrypt_descriptor_data(desc, encoded_str, &encrypted_blob); + tor_free(encoded_str); + /* Get the encoded size plus a NUL terminating byte. */ + enc_b64_len = base64_encode_size(enc_len, BASE64_ENCODE_MULTILINE) + 1; + enc_b64 = tor_malloc_zero(enc_b64_len); + /* Base64 the encrypted blob before returning it. */ + ret_len = base64_encode(enc_b64, enc_b64_len, encrypted_blob, enc_len, + BASE64_ENCODE_MULTILINE); + /* Return length doesn't count the NUL byte. */ + tor_assert(ret_len == (enc_b64_len - 1)); + tor_free(encrypted_blob); + *encrypted_blob_out = enc_b64; + } + /* Success! */ + ret = 0; + + err: + SMARTLIST_FOREACH(lines, char *, l, tor_free(l)); + smartlist_free(lines); + return ret; +} + +/* Encode a v3 HS descriptor. Return 0 on success and set encoded_out to the + * newly allocated string of the encoded descriptor. On error, -1 is returned + * and encoded_out is untouched. */ +static int +desc_encode_v3(const hs_descriptor_t *desc, char **encoded_out) +{ + int ret = -1; + char *encoded_str = NULL; + size_t encoded_len; + smartlist_t *lines = smartlist_new(); + + tor_assert(desc); + tor_assert(encoded_out); + tor_assert(desc->plaintext_data.version == 3); + + /* Build the non-encrypted values. */ + { + char *encoded_cert; + /* Encode certificate then create the first line of the descriptor. */ + if (desc->plaintext_data.signing_key_cert->cert_type + != CERT_TYPE_SIGNING_HS_DESC) { + log_err(LD_BUG, "HS descriptor signing key has an unexpected cert type " + "(%d)", (int) desc->plaintext_data.signing_key_cert->cert_type); + goto err; + } + if (encode_cert(desc->plaintext_data.signing_key_cert, + &encoded_cert) < 0) { + /* The function will print error logs. */ + goto err; + } + /* Create the hs descriptor line. */ + smartlist_add_asprintf(lines, "%s %" PRIu32, str_hs_desc, + desc->plaintext_data.version); + /* Add the descriptor lifetime line (in minutes). */ + smartlist_add_asprintf(lines, "%s %" PRIu32, str_lifetime, + desc->plaintext_data.lifetime_sec / 60); + /* Create the descriptor certificate line. */ + smartlist_add_asprintf(lines, "%s\n%s", str_desc_cert, encoded_cert); + tor_free(encoded_cert); + /* Create the revision counter line. */ + smartlist_add_asprintf(lines, "%s %" PRIu64, str_rev_counter, + desc->plaintext_data.revision_counter); + } + + /* Build the encrypted data section. */ + { + char *enc_b64_blob=NULL; + if (encode_encrypted_data(desc, &enc_b64_blob) < 0) { + goto err; + } + smartlist_add_asprintf(lines, + "%s\n" + "-----BEGIN MESSAGE-----\n" + "%s" + "-----END MESSAGE-----", + str_encrypted, enc_b64_blob); + tor_free(enc_b64_blob); + } + + /* Join all lines in one string so we can generate a signature and append + * it to the descriptor. */ + encoded_str = smartlist_join_strings(lines, "\n", 1, &encoded_len); + + /* Sign all fields of the descriptor with our short term signing key. */ + { + ed25519_signature_t sig; + char ed_sig_b64[ED25519_SIG_BASE64_LEN + 1]; + if (ed25519_sign_prefixed(&sig, + (const uint8_t *) encoded_str, encoded_len, + str_desc_sig_prefix, + &desc->plaintext_data.signing_kp) < 0) { + log_warn(LD_BUG, "Can't sign encoded HS descriptor!"); + tor_free(encoded_str); + goto err; + } + if (ed25519_signature_to_base64(ed_sig_b64, &sig) < 0) { + log_warn(LD_BUG, "Can't base64 encode descriptor signature!"); + tor_free(encoded_str); + goto err; + } + /* Create the signature line. */ + smartlist_add_asprintf(lines, "%s %s", str_signature, ed_sig_b64); + } + /* Free previous string that we used so compute the signature. */ + tor_free(encoded_str); + encoded_str = smartlist_join_strings(lines, "\n", 1, NULL); + *encoded_out = encoded_str; + + /* XXX: Trigger a control port event. */ + + /* Success! */ + ret = 0; + + err: + SMARTLIST_FOREACH(lines, char *, l, tor_free(l)); + smartlist_free(lines); + return ret; +} + +/* === DECODING === */ + +/* Given an encoded string of the link specifiers, return a newly allocated + * list of decoded link specifiers. Return NULL on error. */ +STATIC smartlist_t * +decode_link_specifiers(const char *encoded) +{ + int decoded_len; + size_t encoded_len, i; + uint8_t *decoded; + smartlist_t *results = NULL; + link_specifier_list_t *specs = NULL; + + tor_assert(encoded); + + encoded_len = strlen(encoded); + decoded = tor_malloc(encoded_len); + decoded_len = base64_decode((char *) decoded, encoded_len, encoded, + encoded_len); + if (decoded_len < 0) { + goto err; + } + + if (link_specifier_list_parse(&specs, decoded, + (size_t) decoded_len) < decoded_len) { + goto err; + } + tor_assert(specs); + results = smartlist_new(); + + for (i = 0; i < link_specifier_list_getlen_spec(specs); i++) { + hs_desc_link_specifier_t *hs_spec; + link_specifier_t *ls = link_specifier_list_get_spec(specs, i); + tor_assert(ls); + + hs_spec = tor_malloc_zero(sizeof(*hs_spec)); + hs_spec->type = link_specifier_get_ls_type(ls); + switch (hs_spec->type) { + case LS_IPV4: + tor_addr_from_ipv4h(&hs_spec->u.ap.addr, + link_specifier_get_un_ipv4_addr(ls)); + hs_spec->u.ap.port = link_specifier_get_un_ipv4_port(ls); + break; + case LS_IPV6: + tor_addr_from_ipv6_bytes(&hs_spec->u.ap.addr, (const char *) + link_specifier_getarray_un_ipv6_addr(ls)); + hs_spec->u.ap.port = link_specifier_get_un_ipv6_port(ls); + break; + case LS_LEGACY_ID: + /* Both are known at compile time so let's make sure they are the same + * else we can copy memory out of bound. */ + tor_assert(link_specifier_getlen_un_legacy_id(ls) == + sizeof(hs_spec->u.legacy_id)); + memcpy(hs_spec->u.legacy_id, link_specifier_getarray_un_legacy_id(ls), + sizeof(hs_spec->u.legacy_id)); + break; + default: + goto err; + } + + smartlist_add(results, hs_spec); + } + + goto done; + err: + if (results) { + SMARTLIST_FOREACH(results, hs_desc_link_specifier_t *, s, tor_free(s)); + smartlist_free(results); + results = NULL; + } + done: + link_specifier_list_free(specs); + tor_free(decoded); + return results; +} + +/* Given a list of authentication types, decode it and put it in the encrypted + * data section. Return 1 if we at least know one of the type or 0 if we know + * none of them. */ +static int +decode_auth_type(hs_desc_encrypted_data_t *desc, const char *list) +{ + int match = 0; + + tor_assert(desc); + tor_assert(list); + + desc->auth_types = smartlist_new(); + smartlist_split_string(desc->auth_types, list, " ", 0, 0); + + /* Validate the types that we at least know about one. */ + SMARTLIST_FOREACH_BEGIN(desc->auth_types, const char *, auth) { + for (int idx = 0; auth_types[idx].identifier; idx++) { + if (!strncmp(auth, auth_types[idx].identifier, + strlen(auth_types[idx].identifier))) { + match = 1; + break; + } + } + } SMARTLIST_FOREACH_END(auth); + + return match; +} + +/* Parse a space-delimited list of integers representing CREATE2 formats into + * the bitfield in hs_desc_encrypted_data_t. Ignore unrecognized values. */ +static void +decode_create2_list(hs_desc_encrypted_data_t *desc, const char *list) +{ + smartlist_t *tokens; + + tor_assert(desc); + tor_assert(list); + + tokens = smartlist_new(); + smartlist_split_string(tokens, list, " ", 0, 0); + + SMARTLIST_FOREACH_BEGIN(tokens, char *, s) { + int ok; + unsigned long type = tor_parse_ulong(s, 10, 1, UINT16_MAX, &ok, NULL); + if (!ok) { + log_warn(LD_REND, "Unparseable value %s in create2 list", escaped(s)); + continue; + } + switch (type) { + case ONION_HANDSHAKE_TYPE_NTOR: + desc->create2_ntor = 1; + break; + default: + /* We deliberately ignore unsupported handshake types */ + continue; + } + } SMARTLIST_FOREACH_END(s); + + SMARTLIST_FOREACH(tokens, char *, s, tor_free(s)); + smartlist_free(tokens); +} + +/* Given a certificate, validate the certificate for certain conditions which + * are if the given type matches the cert's one, if the signing key is + * included and if the that key was actually used to sign the certificate. + * + * Return 1 iff if all conditions pass or 0 if one of them fails. */ +STATIC int +cert_is_valid(tor_cert_t *cert, uint8_t type, const char *log_obj_type) +{ + tor_assert(log_obj_type); + + if (cert == NULL) { + log_warn(LD_REND, "Certificate for %s couldn't be parsed.", log_obj_type); + goto err; + } + if (cert->cert_type != type) { + log_warn(LD_REND, "Invalid cert type %02x for %s.", cert->cert_type, + log_obj_type); + goto err; + } + /* All certificate must have its signing key included. */ + if (!cert->signing_key_included) { + log_warn(LD_REND, "Signing key is NOT included for %s.", log_obj_type); + goto err; + } + /* The following will not only check if the signature matches but also the + * expiration date and overall validity. */ + if (tor_cert_checksig(cert, &cert->signing_key, time(NULL)) < 0) { + log_warn(LD_REND, "Invalid signature for %s.", log_obj_type); + goto err; + } + + return 1; + err: + return 0; +} + +/* Given some binary data, try to parse it to get a certificate object. If we + * have a valid cert, validate it using the given wanted type. On error, print + * a log using the err_msg has the certificate identifier adding semantic to + * the log and cert_out is set to NULL. On success, 0 is returned and cert_out + * points to a newly allocated certificate object. */ +static int +cert_parse_and_validate(tor_cert_t **cert_out, const char *data, + size_t data_len, unsigned int cert_type_wanted, + const char *err_msg) +{ + tor_cert_t *cert; + + tor_assert(cert_out); + tor_assert(data); + tor_assert(err_msg); + + /* Parse certificate. */ + cert = tor_cert_parse((const uint8_t *) data, data_len); + if (!cert) { + log_warn(LD_REND, "Certificate for %s couldn't be parsed.", err_msg); + goto err; + } + + /* Validate certificate. */ + if (!cert_is_valid(cert, cert_type_wanted, err_msg)) { + goto err; + } + + *cert_out = cert; + return 0; + + err: + tor_cert_free(cert); + *cert_out = NULL; + return -1; +} + +/* Return true iff the given length of the encrypted data of a descriptor + * passes validation. */ +STATIC int +encrypted_data_length_is_valid(size_t len) +{ + /* Check for the minimum length possible. */ + if (len < HS_DESC_ENCRYPTED_MIN_LEN) { + log_warn(LD_REND, "Length of descriptor's encrypted data is too small. " + "Got %lu but minimum value is %d", + (unsigned long)len, HS_DESC_ENCRYPTED_MIN_LEN); + goto err; + } + + /* Encrypted data has the salt and MAC concatenated to it so remove those + * from the validation calculation. */ + len -= HS_DESC_ENCRYPTED_SALT_LEN + DIGEST256_LEN; + + /* Check that it's aligned on the block size of the crypto algorithm. */ + if (len % HS_DESC_PLAINTEXT_PADDING_MULTIPLE) { + log_warn(LD_REND, "Length of descriptor's encrypted data is invalid. " + "Got %lu which is not a multiple of %d.", + (unsigned long) len, HS_DESC_PLAINTEXT_PADDING_MULTIPLE); + goto err; + } + + /* XXX: Check maximum size. Will strongly depends on the maximum intro point + * allowed we decide on and probably if they will all have to use the legacy + * key which is bigger than the ed25519 key. */ + + return 1; + err: + return 0; +} + +/* Decrypt the encrypted section of the descriptor using the given descriptor + * object desc. A newly allocated NUL terminated string is put in + * decrypted_out. Return the length of decrypted_out on success else 0 is + * returned and decrypted_out is set to NULL. */ +static size_t +desc_decrypt_data_v3(const hs_descriptor_t *desc, char **decrypted_out) +{ + uint8_t *decrypted = NULL; + uint8_t secret_key[CIPHER_KEY_LEN], secret_iv[CIPHER_IV_LEN]; + uint8_t mac_key[DIGEST256_LEN], our_mac[DIGEST256_LEN]; + const uint8_t *salt, *encrypted, *desc_mac; + size_t encrypted_len, result_len = 0; + + tor_assert(decrypted_out); + tor_assert(desc); + tor_assert(desc->plaintext_data.encrypted_blob); + + /* Construction is as follow: SALT | ENCRYPTED_DATA | MAC */ + if (!encrypted_data_length_is_valid( + desc->plaintext_data.encrypted_blob_size)) { + goto err; + } + + /* Start of the blob thus the salt. */ + salt = desc->plaintext_data.encrypted_blob; + /* Next is the encrypted data. */ + encrypted = desc->plaintext_data.encrypted_blob + + HS_DESC_ENCRYPTED_SALT_LEN; + encrypted_len = desc->plaintext_data.encrypted_blob_size - + (HS_DESC_ENCRYPTED_SALT_LEN + DIGEST256_LEN); + + /* At the very end is the MAC. Make sure it's of the right size. */ + { + desc_mac = encrypted + encrypted_len; + size_t desc_mac_size = desc->plaintext_data.encrypted_blob_size - + (desc_mac - desc->plaintext_data.encrypted_blob); + if (desc_mac_size != DIGEST256_LEN) { + log_warn(LD_REND, "Service descriptor MAC length of encrypted data " + "is invalid (%lu, expected %u)", + (unsigned long) desc_mac_size, DIGEST256_LEN); + goto err; + } + } + + /* KDF construction resulting in a key from which the secret key, IV and MAC + * key are extracted which is what we need for the decryption. */ + build_secret_key_iv_mac(desc, salt, HS_DESC_ENCRYPTED_SALT_LEN, + secret_key, sizeof(secret_key), + secret_iv, sizeof(secret_iv), + mac_key, sizeof(mac_key)); + + /* Build MAC. */ + build_mac(mac_key, sizeof(mac_key), salt, HS_DESC_ENCRYPTED_SALT_LEN, + encrypted, encrypted_len, our_mac, sizeof(our_mac)); + memwipe(mac_key, 0, sizeof(mac_key)); + /* Verify MAC; MAC is H(mac_key || salt || encrypted) + * + * This is a critical check that is making sure the computed MAC matches the + * one in the descriptor. */ + if (!tor_memeq(our_mac, desc_mac, sizeof(our_mac))) { + log_warn(LD_REND, "Encrypted service descriptor MAC check failed"); + goto err; + } + + { + /* Decrypt. Here we are assured that the encrypted length is valid for + * decryption. */ + crypto_cipher_t *cipher; + cipher = crypto_cipher_new_with_iv((const char *) secret_key, + (const char *) secret_iv); + /* Extra byte for the NUL terminated byte. */ + decrypted = tor_malloc_zero(encrypted_len + 1); + crypto_cipher_decrypt(cipher, (char *) decrypted, + (const char *) encrypted, encrypted_len); + crypto_cipher_free(cipher); + } + + { + /* Adjust length to remove NULL padding bytes */ + uint8_t *end = memchr(decrypted, 0, encrypted_len); + result_len = encrypted_len; + if (end) { + result_len = end - decrypted; + } + } + + /* Make sure to NUL terminate the string. */ + decrypted[encrypted_len] = '\0'; + *decrypted_out = (char *) decrypted; + goto done; + + err: + if (decrypted) { + tor_free(decrypted); + } + *decrypted_out = NULL; + result_len = 0; + + done: + memwipe(secret_key, 0, sizeof(secret_key)); + memwipe(secret_iv, 0, sizeof(secret_iv)); + return result_len; +} + +/* Given the start of a section and the end of it, decode a single + * introduction point from that section. Return a newly allocated introduction + * point object containing the decoded data. Return NULL if the section can't + * be decoded. */ +STATIC hs_desc_intro_point_t * +decode_introduction_point(const hs_descriptor_t *desc, const char *start) +{ + hs_desc_intro_point_t *ip = NULL; + memarea_t *area = NULL; + smartlist_t *tokens = NULL; + tor_cert_t *cross_cert = NULL; + const directory_token_t *tok; + + tor_assert(desc); + tor_assert(start); + + area = memarea_new(); + tokens = smartlist_new(); + if (tokenize_string(area, start, start + strlen(start), + tokens, hs_desc_intro_point_v3_token_table, 0) < 0) { + log_warn(LD_REND, "Introduction point is not parseable"); + goto err; + } + + /* Ok we seem to have a well formed section containing enough tokens to + * parse. Allocate our IP object and try to populate it. */ + ip = tor_malloc_zero(sizeof(hs_desc_intro_point_t)); + + /* "introduction-point" SP link-specifiers NL */ + tok = find_by_keyword(tokens, R3_INTRODUCTION_POINT); + tor_assert(tok->n_args == 1); + ip->link_specifiers = decode_link_specifiers(tok->args[0]); + if (!ip->link_specifiers) { + log_warn(LD_REND, "Introduction point has invalid link specifiers"); + goto err; + } + + /* "auth-key" NL certificate NL */ + tok = find_by_keyword(tokens, R3_INTRO_AUTH_KEY); + tor_assert(tok->object_body); + if (strcmp(tok->object_type, "ED25519 CERT")) { + log_warn(LD_REND, "Unexpected object type for introduction auth key"); + goto err; + } + + /* Parse cert and do some validation. */ + if (cert_parse_and_validate(&ip->auth_key_cert, tok->object_body, + tok->object_size, CERT_TYPE_AUTH_HS_IP_KEY, + "introduction point auth-key") < 0) { + goto err; + } + + /* Exactly one "enc-key" ... */ + tok = find_by_keyword(tokens, R3_INTRO_ENC_KEY); + if (!strcmp(tok->args[0], "ntor")) { + /* "enc-key" SP "ntor" SP key NL */ + if (tok->n_args != 2 || tok->object_body) { + log_warn(LD_REND, "Introduction point ntor encryption key is invalid"); + goto err; + } + + if (curve25519_public_from_base64(&ip->enc_key.curve25519.pubkey, + tok->args[1]) < 0) { + log_warn(LD_REND, "Introduction point ntor encryption key is invalid"); + goto err; + } + ip->enc_key_type = HS_DESC_KEY_TYPE_CURVE25519; + } else if (!strcmp(tok->args[0], "legacy")) { + /* "enc-key" SP "legacy" NL key NL */ + if (!tok->key) { + log_warn(LD_REND, "Introduction point legacy encryption key is " + "invalid"); + goto err; + } + ip->enc_key.legacy = crypto_pk_dup_key(tok->key); + ip->enc_key_type = HS_DESC_KEY_TYPE_LEGACY; + } else { + /* Unknown key type so we can't use that introduction point. */ + log_warn(LD_REND, "Introduction point encryption key is unrecognized."); + goto err; + } + + /* "enc-key-certification" NL certificate NL */ + tok = find_by_keyword(tokens, R3_INTRO_ENC_KEY_CERTIFICATION); + tor_assert(tok->object_body); + /* Do the cross certification. */ + switch (ip->enc_key_type) { + case HS_DESC_KEY_TYPE_CURVE25519: + { + if (strcmp(tok->object_type, "ED25519 CERT")) { + log_warn(LD_REND, "Introduction point ntor encryption key " + "cross-certification has an unknown format."); + goto err; + } + if (cert_parse_and_validate(&cross_cert, tok->object_body, + tok->object_size, CERT_TYPE_CROSS_HS_IP_KEYS, + "introduction point enc-key-certification") < 0) { + goto err; + } + break; + } + case HS_DESC_KEY_TYPE_LEGACY: + if (strcmp(tok->object_type, "CROSSCERT")) { + log_warn(LD_REND, "Introduction point legacy encryption key " + "cross-certification has an unknown format."); + goto err; + } + if (rsa_ed25519_crosscert_check((const uint8_t *) tok->object_body, + tok->object_size, ip->enc_key.legacy, + &desc->plaintext_data.signing_key_cert->signed_key, + approx_time()-86400)) { + log_warn(LD_REND, "Unable to check cross-certification on the " + "introduction point legacy encryption key."); + goto err; + } + break; + default: + tor_assert(0); + break; + } + /* It is successfully cross certified. Flag the object. */ + ip->cross_certified = 1; + goto done; + + err: + desc_intro_point_free(ip); + ip = NULL; + + done: + tor_cert_free(cross_cert); + SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t)); + smartlist_free(tokens); + memarea_drop_all(area); + + return ip; +} + +/* Given a descriptor string at <b>data</b>, decode all possible introduction + * points that we can find. Add the introduction point object to desc_enc as we + * find them. Return 0 on success. + * + * On error, a negative value is returned. It is possible that some intro + * point object have been added to the desc_enc, they should be considered + * invalid. One single bad encoded introduction point will make this function + * return an error. */ +STATIC int +decode_intro_points(const hs_descriptor_t *desc, + hs_desc_encrypted_data_t *desc_enc, + const char *data) +{ + int retval = -1; + smartlist_t *chunked_desc = smartlist_new(); + smartlist_t *intro_points = smartlist_new(); + + tor_assert(desc); + tor_assert(desc_enc); + tor_assert(data); + tor_assert(desc_enc->intro_points); + + /* Take the desc string, and extract the intro point substrings out of it */ + { + /* Split the descriptor string using the intro point header as delimiter */ + smartlist_split_string(chunked_desc, data, str_intro_point_start, 0, 0); + + /* Check if there are actually any intro points included. The first chunk + * should be other descriptor fields (e.g. create2-formats), so it's not an + * intro point. */ + if (smartlist_len(chunked_desc) < 2) { + goto done; + } + } + + /* Take the intro point substrings, and prepare them for parsing */ + { + int i = 0; + /* Prepend the introduction-point header to all the chunks, since + smartlist_split_string() devoured it. */ + SMARTLIST_FOREACH_BEGIN(chunked_desc, char *, chunk) { + /* Ignore first chunk. It's other descriptor fields. */ + if (i++ == 0) { + continue; + } + + smartlist_add_asprintf(intro_points, "%s %s", str_intro_point, chunk); + } SMARTLIST_FOREACH_END(chunk); + } + + /* Parse the intro points! */ + SMARTLIST_FOREACH_BEGIN(intro_points, const char *, intro_point) { + hs_desc_intro_point_t *ip = decode_introduction_point(desc, intro_point); + if (!ip) { + /* Malformed introduction point section. Stop right away, this + * descriptor shouldn't be used. */ + goto err; + } + smartlist_add(desc_enc->intro_points, ip); + } SMARTLIST_FOREACH_END(intro_point); + + done: + retval = 0; + + err: + if (chunked_desc) { + SMARTLIST_FOREACH(chunked_desc, char *, a, tor_free(a)); + smartlist_free(chunked_desc); + } + if (intro_points) { + SMARTLIST_FOREACH(intro_points, char *, a, tor_free(a)); + smartlist_free(intro_points); + } + + return retval; +} +/* Return 1 iff the given base64 encoded signature in b64_sig from the encoded + * descriptor in encoded_desc validates the descriptor content. */ +STATIC int +desc_sig_is_valid(const char *b64_sig, const ed25519_keypair_t *signing_kp, + const char *encoded_desc, size_t encoded_len) +{ + int ret = 0; + ed25519_signature_t sig; + const char *sig_start; + + tor_assert(b64_sig); + tor_assert(signing_kp); + tor_assert(encoded_desc); + /* Verifying nothing won't end well :). */ + tor_assert(encoded_len > 0); + + /* Signature length check. */ + if (strlen(b64_sig) != ED25519_SIG_BASE64_LEN) { + log_warn(LD_REND, "Service descriptor has an invalid signature length." + "Exptected %d but got %lu", + ED25519_SIG_BASE64_LEN, (unsigned long) strlen(b64_sig)); + goto err; + } + + /* First, convert base64 blob to an ed25519 signature. */ + if (ed25519_signature_from_base64(&sig, b64_sig) != 0) { + log_warn(LD_REND, "Service descriptor does not contain a valid " + "signature"); + goto err; + } + + /* Find the start of signature. */ + sig_start = tor_memstr(encoded_desc, encoded_len, "\n" str_signature); + /* Getting here means the token parsing worked for the signature so if we + * can't find the start of the signature, we have a code flow issue. */ + if (BUG(!sig_start)) { + goto err; + } + /* Skip newline, it has to go in the signature check. */ + sig_start++; + + /* Validate signature with the full body of the descriptor. */ + if (ed25519_checksig_prefixed(&sig, + (const uint8_t *) encoded_desc, + sig_start - encoded_desc, + str_desc_sig_prefix, + &signing_kp->pubkey) != 0) { + log_warn(LD_REND, "Invalid signature on service descriptor"); + goto err; + } + /* Valid signature! All is good. */ + ret = 1; + + err: + return ret; +} + +/* Decode descriptor plaintext data for version 3. Given a list of tokens, an + * allocated plaintext object that will be populated and the encoded + * descriptor with its length. The last one is needed for signature + * verification. Unknown tokens are simply ignored so this won't error on + * unknowns but requires that all v3 token be present and valid. + * + * Return 0 on success else a negative value. */ +static int +desc_decode_plaintext_v3(smartlist_t *tokens, + hs_desc_plaintext_data_t *desc, + const char *encoded_desc, size_t encoded_len) +{ + int ok; + directory_token_t *tok; + + tor_assert(tokens); + tor_assert(desc); + /* Version higher could still use this function to decode most of the + * descriptor and then they decode the extra part. */ + tor_assert(desc->version >= 3); + + /* Descriptor lifetime parsing. */ + tok = find_by_keyword(tokens, R3_DESC_LIFETIME); + tor_assert(tok->n_args == 1); + desc->lifetime_sec = (uint32_t) tor_parse_ulong(tok->args[0], 10, 0, + UINT32_MAX, &ok, NULL); + if (!ok) { + log_warn(LD_REND, "Service descriptor lifetime value is invalid"); + goto err; + } + /* Put it from minute to second. */ + desc->lifetime_sec *= 60; + if (desc->lifetime_sec > HS_DESC_MAX_LIFETIME) { + log_warn(LD_REND, "Service descriptor lifetime is too big. " + "Got %" PRIu32 " but max is %d", + desc->lifetime_sec, HS_DESC_MAX_LIFETIME); + goto err; + } + + /* Descriptor signing certificate. */ + tok = find_by_keyword(tokens, R3_DESC_SIGNING_CERT); + tor_assert(tok->object_body); + /* Expecting a prop220 cert with the signing key extension, which contains + * the blinded public key. */ + if (strcmp(tok->object_type, "ED25519 CERT") != 0) { + log_warn(LD_REND, "Service descriptor signing cert wrong type (%s)", + escaped(tok->object_type)); + goto err; + } + if (cert_parse_and_validate(&desc->signing_key_cert, tok->object_body, + tok->object_size, CERT_TYPE_SIGNING_HS_DESC, + "service descriptor signing key") < 0) { + goto err; + } + + /* Copy the public keys into signing_kp and blinded_kp */ + memcpy(&desc->signing_kp.pubkey, &desc->signing_key_cert->signed_key, + sizeof(ed25519_public_key_t)); + memcpy(&desc->blinded_kp.pubkey, &desc->signing_key_cert->signing_key, + sizeof(ed25519_public_key_t)); + + /* Extract revision counter value. */ + tok = find_by_keyword(tokens, R3_REVISION_COUNTER); + tor_assert(tok->n_args == 1); + desc->revision_counter = tor_parse_uint64(tok->args[0], 10, 0, + UINT64_MAX, &ok, NULL); + if (!ok) { + log_warn(LD_REND, "Service descriptor revision-counter is invalid"); + goto err; + } + + /* Extract the encrypted data section. */ + tok = find_by_keyword(tokens, R3_ENCRYPTED); + tor_assert(tok->object_body); + if (strcmp(tok->object_type, "MESSAGE") != 0) { + log_warn(LD_REND, "Service descriptor encrypted data section is invalid"); + goto err; + } + /* Make sure the length of the encrypted blob is valid. */ + if (!encrypted_data_length_is_valid(tok->object_size)) { + goto err; + } + + /* Copy the encrypted blob to the descriptor object so we can handle it + * latter if needed. */ + desc->encrypted_blob = tor_memdup(tok->object_body, tok->object_size); + desc->encrypted_blob_size = tok->object_size; + + /* Extract signature and verify it. */ + tok = find_by_keyword(tokens, R3_SIGNATURE); + tor_assert(tok->n_args == 1); + /* First arg here is the actual encoded signature. */ + if (!desc_sig_is_valid(tok->args[0], &desc->signing_kp, + encoded_desc, encoded_len)) { + goto err; + } + + return 0; + + err: + return -1; +} + +/* Decode the version 3 encrypted section of the given descriptor desc. The + * desc_encrypted_out will be populated with the decoded data. Return 0 on + * success else -1. */ +static int +desc_decode_encrypted_v3(const hs_descriptor_t *desc, + hs_desc_encrypted_data_t *desc_encrypted_out) +{ + int result = -1; + char *message = NULL; + size_t message_len; + memarea_t *area = NULL; + directory_token_t *tok; + smartlist_t *tokens = NULL; + + tor_assert(desc); + tor_assert(desc_encrypted_out); + + /* Decrypt the encrypted data that is located in the plaintext section in + * the descriptor as a blob of bytes. The following functions will use the + * keys found in the same section. */ + message_len = desc_decrypt_data_v3(desc, &message); + if (!message_len) { + log_warn(LD_REND, "Service descriptor decryption failed."); + goto err; + } + tor_assert(message); + + area = memarea_new(); + tokens = smartlist_new(); + if (tokenize_string(area, message, message + message_len, + tokens, hs_desc_encrypted_v3_token_table, 0) < 0) { + log_warn(LD_REND, "Encrypted service descriptor is not parseable."); + goto err; + } + + /* CREATE2 supported cell format. It's mandatory. */ + tok = find_by_keyword(tokens, R3_CREATE2_FORMATS); + tor_assert(tok); + decode_create2_list(desc_encrypted_out, tok->args[0]); + /* Must support ntor according to the specification */ + if (!desc_encrypted_out->create2_ntor) { + log_warn(LD_REND, "Service create2-formats does not include ntor."); + goto err; + } + + /* Authentication type. It's optional but only once. */ + tok = find_opt_by_keyword(tokens, R3_AUTHENTICATION_REQUIRED); + if (tok) { + if (!decode_auth_type(desc_encrypted_out, tok->args[0])) { + log_warn(LD_REND, "Service descriptor authentication type has " + "invalid entry(ies)."); + goto err; + } + } + + /* Is this service a single onion service? */ + tok = find_opt_by_keyword(tokens, R3_SINGLE_ONION_SERVICE); + if (tok) { + desc_encrypted_out->single_onion_service = 1; + } + + /* Initialize the descriptor's introduction point list before we start + * decoding. Having 0 intro point is valid. Then decode them all. */ + desc_encrypted_out->intro_points = smartlist_new(); + if (decode_intro_points(desc, desc_encrypted_out, message) < 0) { + goto err; + } + /* Validation of maximum introduction points allowed. */ + if (smartlist_len(desc_encrypted_out->intro_points) > MAX_INTRO_POINTS) { + log_warn(LD_REND, "Service descriptor contains too many introduction " + "points. Maximum allowed is %d but we have %d", + MAX_INTRO_POINTS, + smartlist_len(desc_encrypted_out->intro_points)); + goto err; + } + + /* NOTE: Unknown fields are allowed because this function could be used to + * decode other descriptor version. */ + + result = 0; + goto done; + + err: + tor_assert(result < 0); + desc_encrypted_data_free_contents(desc_encrypted_out); + + done: + if (tokens) { + SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t)); + smartlist_free(tokens); + } + if (area) { + memarea_drop_all(area); + } + if (message) { + tor_free(message); + } + return result; +} + +/* Table of encrypted decode function version specific. The function are + * indexed by the version number so v3 callback is at index 3 in the array. */ +static int + (*decode_encrypted_handlers[])( + const hs_descriptor_t *desc, + hs_desc_encrypted_data_t *desc_encrypted) = +{ + /* v0 */ NULL, /* v1 */ NULL, /* v2 */ NULL, + desc_decode_encrypted_v3, +}; + +/* Decode the encrypted data section of the given descriptor and store the + * data in the given encrypted data object. Return 0 on success else a + * negative value on error. */ +int +hs_desc_decode_encrypted(const hs_descriptor_t *desc, + hs_desc_encrypted_data_t *desc_encrypted) +{ + int ret; + uint32_t version; + + tor_assert(desc); + /* Ease our life a bit. */ + version = desc->plaintext_data.version; + tor_assert(desc_encrypted); + /* Calling this function without an encrypted blob to parse is a code flow + * error. The plaintext parsing should never succeed in the first place + * without an encrypted section. */ + tor_assert(desc->plaintext_data.encrypted_blob); + /* Let's make sure we have a supported version as well. By correctly parsing + * the plaintext, this should not fail. */ + if (BUG(!hs_desc_is_supported_version(version))) { + ret = -1; + goto err; + } + /* Extra precaution. Having no handler for the supported version should + * never happened else we forgot to add it but we bumped the version. */ + tor_assert(ARRAY_LENGTH(decode_encrypted_handlers) >= version); + tor_assert(decode_encrypted_handlers[version]); + + /* Run the version specific plaintext decoder. */ + ret = decode_encrypted_handlers[version](desc, desc_encrypted); + if (ret < 0) { + goto err; + } + + err: + return ret; +} + +/* Table of plaintext decode function version specific. The function are + * indexed by the version number so v3 callback is at index 3 in the array. */ +static int + (*decode_plaintext_handlers[])( + smartlist_t *tokens, + hs_desc_plaintext_data_t *desc, + const char *encoded_desc, + size_t encoded_len) = +{ + /* v0 */ NULL, /* v1 */ NULL, /* v2 */ NULL, + desc_decode_plaintext_v3, +}; + +/* Fully decode the given descriptor plaintext and store the data in the + * plaintext data object. Returns 0 on success else a negative value. */ +int +hs_desc_decode_plaintext(const char *encoded, + hs_desc_plaintext_data_t *plaintext) +{ + int ok = 0, ret = -1; + memarea_t *area = NULL; + smartlist_t *tokens = NULL; + size_t encoded_len; + directory_token_t *tok; + + tor_assert(encoded); + tor_assert(plaintext); + + encoded_len = strlen(encoded); + if (encoded_len >= HS_DESC_MAX_LEN) { + log_warn(LD_REND, "Service descriptor is too big (%lu bytes)", + (unsigned long) encoded_len); + goto err; + } + + area = memarea_new(); + tokens = smartlist_new(); + /* Tokenize the descriptor so we can start to parse it. */ + if (tokenize_string(area, encoded, encoded + encoded_len, tokens, + hs_desc_v3_token_table, 0) < 0) { + log_warn(LD_REND, "Service descriptor is not parseable"); + goto err; + } + + /* Get the version of the descriptor which is the first mandatory field of + * the descriptor. From there, we'll decode the right descriptor version. */ + tok = find_by_keyword(tokens, R_HS_DESCRIPTOR); + tor_assert(tok->n_args == 1); + plaintext->version = (uint32_t) tor_parse_ulong(tok->args[0], 10, 0, + UINT32_MAX, &ok, NULL); + if (!ok) { + log_warn(LD_REND, "Service descriptor has unparseable version %s", + escaped(tok->args[0])); + goto err; + } + if (!hs_desc_is_supported_version(plaintext->version)) { + log_warn(LD_REND, "Service descriptor has unsupported version %" PRIu32, + plaintext->version); + goto err; + } + /* Extra precaution. Having no handler for the supported version should + * never happened else we forgot to add it but we bumped the version. */ + tor_assert(ARRAY_LENGTH(decode_plaintext_handlers) >= plaintext->version); + tor_assert(decode_plaintext_handlers[plaintext->version]); + + /* Run the version specific plaintext decoder. */ + ret = decode_plaintext_handlers[plaintext->version](tokens, plaintext, + encoded, encoded_len); + if (ret < 0) { + goto err; + } + /* Success. Descriptor has been populated with the data. */ + ret = 0; + + err: + if (tokens) { + SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t)); + smartlist_free(tokens); + } + if (area) { + memarea_drop_all(area); + } + return ret; +} + +/* Fully decode an encoded descriptor and set a newly allocated descriptor + * object in desc_out. Subcredentials are used if not NULL else it's ignored. + * + * Return 0 on success. A negative value is returned on error and desc_out is + * set to NULL. */ +int +hs_desc_decode_descriptor(const char *encoded, + const uint8_t *subcredential, + hs_descriptor_t **desc_out) +{ + int ret; + hs_descriptor_t *desc; + + tor_assert(encoded); + + desc = tor_malloc_zero(sizeof(hs_descriptor_t)); + + /* Subcredentials are optional. */ + if (subcredential) { + memcpy(desc->subcredential, subcredential, sizeof(desc->subcredential)); + } + + ret = hs_desc_decode_plaintext(encoded, &desc->plaintext_data); + if (ret < 0) { + goto err; + } + + ret = hs_desc_decode_encrypted(desc, &desc->encrypted_data); + if (ret < 0) { + goto err; + } + + if (desc_out) { + *desc_out = desc; + } else { + hs_descriptor_free(desc); + } + return ret; + + err: + hs_descriptor_free(desc); + if (desc_out) { + *desc_out = NULL; + } + + tor_assert(ret < 0); + return ret; +} + +/* Table of encode function version specific. The function are indexed by the + * version number so v3 callback is at index 3 in the array. */ +static int + (*encode_handlers[])( + const hs_descriptor_t *desc, + char **encoded_out) = +{ + /* v0 */ NULL, /* v1 */ NULL, /* v2 */ NULL, + desc_encode_v3, +}; + +/* Encode the given descriptor desc. On success, encoded_out points to a newly + * allocated NUL terminated string that contains the encoded descriptor as a + * string. + * + * Return 0 on success and encoded_out is a valid pointer. On error, -1 is + * returned and encoded_out is set to NULL. */ +int +hs_desc_encode_descriptor(const hs_descriptor_t *desc, char **encoded_out) +{ + int ret = -1; + + tor_assert(desc); + tor_assert(encoded_out); + + /* Make sure we support the version of the descriptor format. */ + if (!hs_desc_is_supported_version(desc->plaintext_data.version)) { + goto err; + } + /* Extra precaution. Having no handler for the supported version should + * never happened else we forgot to add it but we bumped the version. */ + tor_assert(ARRAY_LENGTH(encode_handlers) >= desc->plaintext_data.version); + tor_assert(encode_handlers[desc->plaintext_data.version]); + + ret = encode_handlers[desc->plaintext_data.version](desc, encoded_out); + if (ret < 0) { + goto err; + } + + /* Try to decode what we just encoded. Symmetry is nice! */ + ret = hs_desc_decode_descriptor(*encoded_out, desc->subcredential, NULL); + if (BUG(ret < 0)) { + goto err; + } + + return 0; + + err: + *encoded_out = NULL; + return ret; +} + +/* Free the descriptor plaintext data object. */ +void +hs_desc_plaintext_data_free(hs_desc_plaintext_data_t *desc) +{ + desc_plaintext_data_free_contents(desc); + tor_free(desc); +} + +/* Free the descriptor encrypted data object. */ +void +hs_desc_encrypted_data_free(hs_desc_encrypted_data_t *desc) +{ + desc_encrypted_data_free_contents(desc); + tor_free(desc); +} + +/* Free the given descriptor object. */ +void +hs_descriptor_free(hs_descriptor_t *desc) +{ + if (!desc) { + return; + } + + desc_plaintext_data_free_contents(&desc->plaintext_data); + desc_encrypted_data_free_contents(&desc->encrypted_data); + tor_free(desc); +} + +/* Return the size in bytes of the given plaintext data object. A sizeof() is + * not enough because the object contains pointers and the encrypted blob. + * This is particularly useful for our OOM subsystem that tracks the HSDir + * cache size for instance. */ +size_t +hs_desc_plaintext_obj_size(const hs_desc_plaintext_data_t *data) +{ + tor_assert(data); + return (sizeof(*data) + sizeof(*data->signing_key_cert) + + data->encrypted_blob_size); +} + diff --git a/src/or/hs_descriptor.h b/src/or/hs_descriptor.h new file mode 100644 index 0000000000..895bed2485 --- /dev/null +++ b/src/or/hs_descriptor.h @@ -0,0 +1,242 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file hs_descriptor.h + * \brief Header file for hs_descriptor.c + **/ + +#ifndef TOR_HS_DESCRIPTOR_H +#define TOR_HS_DESCRIPTOR_H + +#include <stdint.h> + +#include "or.h" +#include "address.h" +#include "container.h" +#include "crypto.h" +#include "crypto_ed25519.h" +#include "torcert.h" + +/* The earliest descriptor format version we support. */ +#define HS_DESC_SUPPORTED_FORMAT_VERSION_MIN 3 +/* The latest descriptor format version we support. */ +#define HS_DESC_SUPPORTED_FORMAT_VERSION_MAX 3 + +/* Maximum lifetime of a descriptor in seconds. The value is set at 12 hours + * which is 720 minutes or 43200 seconds. */ +#define HS_DESC_MAX_LIFETIME (12 * 60 * 60) +/* Lifetime of certificate in the descriptor. This defines the lifetime of the + * descriptor signing key and the cross certification cert of that key. */ +#define HS_DESC_CERT_LIFETIME (24 * 60 * 60) +/* Length of the salt needed for the encrypted section of a descriptor. */ +#define HS_DESC_ENCRYPTED_SALT_LEN 16 +/* Length of the secret input needed for the KDF construction which derives + * the encryption key for the encrypted data section of the descriptor. This + * adds up to 68 bytes being the blinded key, hashed subcredential and + * revision counter. */ +#define HS_DESC_ENCRYPTED_SECRET_INPUT_LEN \ + ED25519_PUBKEY_LEN + DIGEST256_LEN + sizeof(uint64_t) +/* Length of the KDF output value which is the length of the secret key, + * the secret IV and MAC key length which is the length of H() output. */ +#define HS_DESC_ENCRYPTED_KDF_OUTPUT_LEN \ + CIPHER_KEY_LEN + CIPHER_IV_LEN + DIGEST256_LEN +/* We need to pad the plaintext version of the encrypted data section before + * encryption and it has to be a multiple of this value. */ +#define HS_DESC_PLAINTEXT_PADDING_MULTIPLE 128 +/* XXX: Let's make sure this makes sense as an upper limit for the padded + * plaintext section. Then we should enforce it as now only an assert will be + * triggered if we are above it. */ +/* Once padded, this is the maximum length in bytes for the plaintext. */ +#define HS_DESC_PADDED_PLAINTEXT_MAX_LEN 8192 +/* Minimum length in bytes of the encrypted portion of the descriptor. */ +#define HS_DESC_ENCRYPTED_MIN_LEN \ + HS_DESC_ENCRYPTED_SALT_LEN + \ + HS_DESC_PLAINTEXT_PADDING_MULTIPLE + DIGEST256_LEN +/* Maximum length in bytes of a full hidden service descriptor. */ +#define HS_DESC_MAX_LEN 32768 // XXX justify +/* The minimum amount of fields a descriptor should contain. The parsing of + * the fields are version specific so the only required field, as a generic + * view of a descriptor, is 1 that is the version field. */ +#define HS_DESC_PLAINTEXT_MIN_FIELDS 1 + +/* Type of authentication in the descriptor. */ +typedef enum { + HS_DESC_AUTH_PASSWORD = 1, + HS_DESC_AUTH_ED25519 = 2, +} hs_desc_auth_type_t; + +/* Type of encryption key in the descriptor. */ +typedef enum { + HS_DESC_KEY_TYPE_LEGACY = 1, + HS_DESC_KEY_TYPE_CURVE25519 = 2, +} hs_desc_key_type_t; + +/* Link specifier object that contains information on how to extend to the + * relay that is the address, port and handshake type. */ +typedef struct hs_desc_link_specifier_t { + /* Indicate the type of link specifier. See trunnel ed25519_cert + * specification. */ + uint8_t type; + + /* It's either an address/port or a legacy identity fingerprint. */ + union { + /* IP address and port of the relay use to extend. */ + tor_addr_port_t ap; + /* Legacy identity. A 20-byte SHA1 identity fingerprint. */ + uint8_t legacy_id[DIGEST_LEN]; + } u; +} hs_desc_link_specifier_t; + +/* Introduction point information located in a descriptor. */ +typedef struct hs_desc_intro_point_t { + /* Link specifier(s) which details how to extend to the relay. This list + * contains hs_desc_link_specifier_t object. It MUST have at least one. */ + smartlist_t *link_specifiers; + + /* Authentication key used to establish the introduction point circuit and + * cross-certifies the blinded public key for the replica thus signed by + * the blinded key and in turn signs it. */ + tor_cert_t *auth_key_cert; + + /* Encryption key type so we know which one to use in the union below. */ + hs_desc_key_type_t enc_key_type; + + /* Keys are mutually exclusive thus the union. */ + union { + /* Encryption key used to encrypt request to hidden service. */ + curve25519_keypair_t curve25519; + + /* Backward compat: RSA 1024 encryption key for legacy purposes. + * Mutually exclusive with enc_key. */ + crypto_pk_t *legacy; + } enc_key; + + /* True iff the introduction point has passed the cross certification. Upon + * decoding an intro point, this must be true. */ + unsigned int cross_certified : 1; +} hs_desc_intro_point_t; + +/* The encrypted data section of a descriptor. Obviously the data in this is + * in plaintext but encrypted once encoded. */ +typedef struct hs_desc_encrypted_data_t { + /* Bitfield of CREATE2 cell supported formats. The only currently supported + * format is ntor. */ + unsigned int create2_ntor : 1; + + /* A list of authentication types that a client must at least support one + * in order to contact the service. Contains NULL terminated strings. */ + smartlist_t *auth_types; + + /* Is this descriptor a single onion service? */ + unsigned int single_onion_service : 1; + + /* A list of intro points. Contains hs_desc_intro_point_t objects. */ + smartlist_t *intro_points; +} hs_desc_encrypted_data_t; + +/* Plaintext data that is unencrypted information of the descriptor. */ +typedef struct hs_desc_plaintext_data_t { + /* Version of the descriptor format. Spec specifies this field as a + * positive integer. */ + uint32_t version; + + /* The lifetime of the descriptor in seconds. */ + uint32_t lifetime_sec; + + /* Certificate with the short-term ed22519 descriptor signing key for the + * replica which is signed by the blinded public key for that replica. */ + tor_cert_t *signing_key_cert; + + /* Signing keypair which is used to sign the descriptor. Same public key + * as in the signing key certificate. */ + ed25519_keypair_t signing_kp; + + /* Blinded keypair used for this descriptor derived from the master + * identity key and generated for a specific replica number. */ + ed25519_keypair_t blinded_kp; + + /* Revision counter is incremented at each upload, regardless of whether + * the descriptor has changed. This avoids leaking whether the descriptor + * has changed. Spec specifies this as a 8 bytes positive integer. */ + uint64_t revision_counter; + + /* Decoding only: The base64-decoded encrypted blob from the descriptor */ + uint8_t *encrypted_blob; + + /* Decoding only: Size of the encrypted_blob */ + size_t encrypted_blob_size; +} hs_desc_plaintext_data_t; + +/* Service descriptor in its decoded form. */ +typedef struct hs_descriptor_t { + /* Contains the plaintext part of the descriptor. */ + hs_desc_plaintext_data_t plaintext_data; + + /* The following contains what's in the encrypted part of the descriptor. + * It's only encrypted in the encoded version of the descriptor thus the + * data contained in that object is in plaintext. */ + hs_desc_encrypted_data_t encrypted_data; + + /* Subcredentials of a service, used by the client and service to decrypt + * the encrypted data. */ + uint8_t subcredential[DIGEST256_LEN]; +} hs_descriptor_t; + +/* Return true iff the given descriptor format version is supported. */ +static inline int +hs_desc_is_supported_version(uint32_t version) +{ + if (version < HS_DESC_SUPPORTED_FORMAT_VERSION_MIN || + version > HS_DESC_SUPPORTED_FORMAT_VERSION_MAX) { + return 0; + } + return 1; +} + +/* Public API. */ + +void hs_descriptor_free(hs_descriptor_t *desc); +void hs_desc_plaintext_data_free(hs_desc_plaintext_data_t *desc); +void hs_desc_encrypted_data_free(hs_desc_encrypted_data_t *desc); + +int hs_desc_encode_descriptor(const hs_descriptor_t *desc, + char **encoded_out); + +int hs_desc_decode_descriptor(const char *encoded, + const uint8_t *subcredential, + hs_descriptor_t **desc_out); +int hs_desc_decode_plaintext(const char *encoded, + hs_desc_plaintext_data_t *plaintext); +int hs_desc_decode_encrypted(const hs_descriptor_t *desc, + hs_desc_encrypted_data_t *desc_out); + +size_t hs_desc_plaintext_obj_size(const hs_desc_plaintext_data_t *data); + +#ifdef HS_DESCRIPTOR_PRIVATE + +/* Encoding. */ +STATIC int encode_cert(const tor_cert_t *cert, char **cert_str_out); +STATIC char *encode_link_specifiers(const smartlist_t *specs); +STATIC size_t build_plaintext_padding(const char *plaintext, + size_t plaintext_len, + uint8_t **padded_out); +/* Decoding. */ +STATIC smartlist_t *decode_link_specifiers(const char *encoded); +STATIC hs_desc_intro_point_t *decode_introduction_point( + const hs_descriptor_t *desc, + const char *text); +STATIC int decode_intro_points(const hs_descriptor_t *desc, + hs_desc_encrypted_data_t *desc_enc, + const char *data); +STATIC int encrypted_data_length_is_valid(size_t len); +STATIC int cert_is_valid(tor_cert_t *cert, uint8_t type, + const char *log_obj_type); +STATIC int desc_sig_is_valid(const char *b64_sig, + const ed25519_keypair_t *signing_kp, + const char *encoded_desc, size_t encoded_len); +STATIC void desc_intro_point_free(hs_desc_intro_point_t *ip); +#endif /* HS_DESCRIPTOR_PRIVATE */ + +#endif /* TOR_HS_DESCRIPTOR_H */ + diff --git a/src/or/include.am b/src/or/include.am index b4554aadb9..10f8b85bdf 100644 --- a/src/or/include.am +++ b/src/or/include.am @@ -48,6 +48,9 @@ LIBTOR_A_SOURCES = \ src/or/entrynodes.c \ src/or/ext_orport.c \ src/or/hibernate.c \ + src/or/hs_cache.c \ + src/or/hs_common.c \ + src/or/hs_descriptor.c \ src/or/keypin.c \ src/or/main.c \ src/or/microdesc.c \ @@ -59,6 +62,7 @@ LIBTOR_A_SOURCES = \ src/or/shared_random.c \ src/or/shared_random_state.c \ src/or/transports.c \ + src/or/parsecommon.c \ src/or/periodic.c \ src/or/protover.c \ src/or/policies.c \ @@ -157,6 +161,9 @@ ORHEADERS = \ src/or/geoip.h \ src/or/entrynodes.h \ src/or/hibernate.h \ + src/or/hs_cache.h \ + src/or/hs_common.h \ + src/or/hs_descriptor.h \ src/or/keypin.h \ src/or/main.h \ src/or/microdesc.h \ @@ -171,6 +178,7 @@ ORHEADERS = \ src/or/shared_random.h \ src/or/shared_random_state.h \ src/or/transports.h \ + src/or/parsecommon.h \ src/or/periodic.h \ src/or/policies.h \ src/or/protover.h \ diff --git a/src/or/main.c b/src/or/main.c index 617c784f91..c10f62724a 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -73,6 +73,7 @@ #include "entrynodes.h" #include "geoip.h" #include "hibernate.h" +#include "hs_cache.h" #include "keypin.h" #include "main.h" #include "microdesc.h" @@ -627,6 +628,19 @@ connection_should_read_from_linked_conn(connection_t *conn) return 0; } +/** If we called event_base_loop() and told it to never stop until it + * runs out of events, now we've changed our mind: tell it we want it to + * finish. */ +void +tell_event_loop_to_finish(void) +{ + if (!called_loop_once) { + struct timeval tv = { 0, 0 }; + tor_event_base_loopexit(tor_libevent_get_base(), &tv); + called_loop_once = 1; /* hack to avoid adding more exit events */ + } +} + /** Helper: Tell the main loop to begin reading bytes into <b>conn</b> from * its linked connection, if it is not doing so already. Called by * connection_start_reading and connection_start_writing as appropriate. */ @@ -639,14 +653,10 @@ connection_start_reading_from_linked_conn(connection_t *conn) if (!conn->active_on_link) { conn->active_on_link = 1; smartlist_add(active_linked_connection_lst, conn); - if (!called_loop_once) { - /* This is the first event on the list; we won't be in LOOP_ONCE mode, - * so we need to make sure that the event_base_loop() actually exits at - * the end of its run through the current connections and lets us - * activate read events for linked connections. */ - struct timeval tv = { 0, 0 }; - tor_event_base_loopexit(tor_libevent_get_base(), &tv); - } + /* make sure that the event_base_loop() function exits at + * the end of its run through the current connections, so we can + * activate read events for linked connections. */ + tell_event_loop_to_finish(); } else { tor_assert(smartlist_contains(active_linked_connection_lst, conn)); } @@ -1409,6 +1419,12 @@ run_scheduled_events(time_t now) circuit_expire_old_circs_as_needed(now); } + if (!net_is_disabled()) { + /* This is usually redundant with circuit_build_needed_circs() above, + * but it is very fast when there is no work to do. */ + connection_ap_attach_pending(0); + } + /* 5. We do housekeeping for each connection... */ connection_or_set_bad_connections(NULL, 0); int i; @@ -1733,7 +1749,7 @@ clean_caches_callback(time_t now, const or_options_t *options) rep_history_clean(now - options->RephistTrackTime); rend_cache_clean(now, REND_CACHE_TYPE_CLIENT); rend_cache_clean(now, REND_CACHE_TYPE_SERVICE); - rend_cache_clean_v2_descs_as_dir(now, 0); + hs_cache_clean_as_dir(now); microdesc_cache_rebuild(NULL, 0); #define CLEAN_CACHES_INTERVAL (30*60) return CLEAN_CACHES_INTERVAL; @@ -3079,6 +3095,7 @@ tor_free_all(int postfork) rend_service_free_all(); rend_cache_free_all(); rend_service_authorization_free_all(); + hs_cache_free_all(); rep_hist_free_all(); dns_free_all(); clear_pending_onions(); diff --git a/src/or/main.h b/src/or/main.h index 0220ae3c57..07b22598b1 100644 --- a/src/or/main.h +++ b/src/or/main.h @@ -45,6 +45,8 @@ int connection_is_writing(connection_t *conn); MOCK_DECL(void,connection_stop_writing,(connection_t *conn)); MOCK_DECL(void,connection_start_writing,(connection_t *conn)); +void tell_event_loop_to_finish(void); + void connection_stop_reading_from_linked_conn(connection_t *conn); MOCK_DECL(int, connection_count_moribund, (void)); diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index ed888fb53e..316ce48387 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -841,9 +841,15 @@ we_want_to_fetch_flavor(const or_options_t *options, int flavor) * fetching certs before we check whether there is a better one? */ #define DELAY_WHILE_FETCHING_CERTS (20*60) +/** What is the minimum time we need to have waited fetching certs, before we + * increment the consensus download schedule on failure? */ +#define MIN_DELAY_FOR_FETCH_CERT_STATUS_FAILURE (1*60) + /* Check if a downloaded consensus flavor should still wait for certificates - * to download now. - * If so, return 1. If not, fail dls and return 0. */ + * to download now. If we decide not to wait, check if enough time has passed + * to consider the certificate download failure a separate failure. If so, + * fail dls. + * If waiting for certificates to download, return 1. If not, return 0. */ static int check_consensus_waiting_for_certs(int flavor, time_t now, download_status_t *dls) @@ -857,11 +863,14 @@ check_consensus_waiting_for_certs(int flavor, time_t now, waiting = &consensus_waiting_for_certs[flavor]; if (waiting->consensus) { /* XXXX make sure this doesn't delay sane downloads. */ - if (waiting->set_at + DELAY_WHILE_FETCHING_CERTS > now) { + if (waiting->set_at + DELAY_WHILE_FETCHING_CERTS > now && + waiting->consensus->valid_until > now) { return 1; } else { if (!waiting->dl_failed) { - download_status_failed(dls, 0); + if (waiting->set_at + MIN_DELAY_FOR_FETCH_CERT_STATUS_FAILURE > now) { + download_status_failed(dls, 0); + } waiting->dl_failed=1; } } @@ -906,7 +915,7 @@ update_consensus_networkstatus_downloads(time_t now) resource = networkstatus_get_flavor_name(i); /* Check if we already have enough connections in progress */ - if (we_are_bootstrapping) { + if (we_are_bootstrapping && use_multi_conn) { max_in_progress_conns = options->ClientBootstrapConsensusMaxInProgressTries; } diff --git a/src/or/or.h b/src/or/or.h index a8664bbe90..eb94f63d5e 100644 --- a/src/or/or.h +++ b/src/or/or.h @@ -114,6 +114,9 @@ #define NON_ANONYMOUS_MODE_ENABLED 1 #endif +/** Helper macro: Given a pointer to to.base_, of type from*, return &to. */ +#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, base_)) + /** Length of longest allowable configured nickname. */ #define MAX_NICKNAME_LEN 19 /** Length of a router identity encoded as a hexadecimal digest, plus @@ -779,6 +782,24 @@ typedef struct rend_service_authorization_t { * establishment. Not all fields contain data depending on where this struct * is used. */ typedef struct rend_data_t { + /* Hidden service protocol version of this base object. */ + uint32_t version; + + /** List of HSDir fingerprints on which this request has been sent to. This + * contains binary identity digest of the directory of size DIGEST_LEN. */ + smartlist_t *hsdirs_fp; + + /** Rendezvous cookie used by both, client and service. */ + char rend_cookie[REND_COOKIE_LEN]; + + /** Number of streams associated with this rendezvous circuit. */ + int nr_streams; +} rend_data_t; + +typedef struct rend_data_v2_t { + /* Rendezvous base data. */ + rend_data_t base_; + /** Onion address (without the .onion part) that a client requests. */ char onion_address[REND_SERVICE_ID_LEN_BASE32+1]; @@ -800,17 +821,16 @@ typedef struct rend_data_t { /** Hash of the hidden service's PK used by a service. */ char rend_pk_digest[DIGEST_LEN]; +} rend_data_v2_t; - /** Rendezvous cookie used by both, client and service. */ - char rend_cookie[REND_COOKIE_LEN]; - - /** List of HSDir fingerprints on which this request has been sent to. - * This contains binary identity digest of the directory. */ - smartlist_t *hsdirs_fp; - - /** Number of streams associated with this rendezvous circuit. */ - int nr_streams; -} rend_data_t; +/* From a base rend_data_t object <b>d</d>, return the v2 object. */ +static inline +rend_data_v2_t *TO_REND_DATA_V2(const rend_data_t *d) +{ + tor_assert(d); + tor_assert(d->version == 2); + return DOWNCAST(rend_data_v2_t, d); +} /** Time interval for tracking replays of DH public keys received in * INTRODUCE2 cells. Used only to avoid launching multiple @@ -1805,8 +1825,6 @@ typedef struct control_connection_t { /** Cast a connection_t subtype pointer to a connection_t **/ #define TO_CONN(c) (&(((c)->base_))) -/** Helper macro: Given a pointer to to.base_, of type from*, return &to. */ -#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, base_)) /** Cast a entry_connection_t subtype pointer to a edge_connection_t **/ #define ENTRY_TO_EDGE_CONN(c) (&(((c))->edge_)) diff --git a/src/or/parsecommon.c b/src/or/parsecommon.c new file mode 100644 index 0000000000..6622d7d671 --- /dev/null +++ b/src/or/parsecommon.c @@ -0,0 +1,450 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file parsecommon.c + * \brief Common code to parse and validate various type of descriptors. + **/ + +#include "parsecommon.h" +#include "torlog.h" +#include "util_format.h" + +#define MIN_ANNOTATION A_PURPOSE +#define MAX_ANNOTATION A_UNKNOWN_ + +#define ALLOC_ZERO(sz) memarea_alloc_zero(area,sz) +#define ALLOC(sz) memarea_alloc(area,sz) +#define STRDUP(str) memarea_strdup(area,str) +#define STRNDUP(str,n) memarea_strndup(area,(str),(n)) + +#define RET_ERR(msg) \ + STMT_BEGIN \ + if (tok) token_clear(tok); \ + tok = ALLOC_ZERO(sizeof(directory_token_t)); \ + tok->tp = ERR_; \ + tok->error = STRDUP(msg); \ + goto done_tokenizing; \ + STMT_END + +/** Free all resources allocated for <b>tok</b> */ +void +token_clear(directory_token_t *tok) +{ + if (tok->key) + crypto_pk_free(tok->key); +} + +/** Read all tokens from a string between <b>start</b> and <b>end</b>, and add + * them to <b>out</b>. Parse according to the token rules in <b>table</b>. + * Caller must free tokens in <b>out</b>. If <b>end</b> is NULL, use the + * entire string. + */ +int +tokenize_string(memarea_t *area, + const char *start, const char *end, smartlist_t *out, + token_rule_t *table, int flags) +{ + const char **s; + directory_token_t *tok = NULL; + int counts[NIL_]; + int i; + int first_nonannotation; + int prev_len = smartlist_len(out); + tor_assert(area); + + s = &start; + if (!end) { + end = start+strlen(start); + } else { + /* it's only meaningful to check for nuls if we got an end-of-string ptr */ + if (memchr(start, '\0', end-start)) { + log_warn(LD_DIR, "parse error: internal NUL character."); + return -1; + } + } + for (i = 0; i < NIL_; ++i) + counts[i] = 0; + + SMARTLIST_FOREACH(out, const directory_token_t *, t, ++counts[t->tp]); + + while (*s < end && (!tok || tok->tp != EOF_)) { + tok = get_next_token(area, s, end, table); + if (tok->tp == ERR_) { + log_warn(LD_DIR, "parse error: %s", tok->error); + token_clear(tok); + return -1; + } + ++counts[tok->tp]; + smartlist_add(out, tok); + *s = eat_whitespace_eos(*s, end); + } + + if (flags & TS_NOCHECK) + return 0; + + if ((flags & TS_ANNOTATIONS_OK)) { + first_nonannotation = -1; + for (i = 0; i < smartlist_len(out); ++i) { + tok = smartlist_get(out, i); + if (tok->tp < MIN_ANNOTATION || tok->tp > MAX_ANNOTATION) { + first_nonannotation = i; + break; + } + } + if (first_nonannotation < 0) { + log_warn(LD_DIR, "parse error: item contains only annotations"); + return -1; + } + for (i=first_nonannotation; i < smartlist_len(out); ++i) { + tok = smartlist_get(out, i); + if (tok->tp >= MIN_ANNOTATION && tok->tp <= MAX_ANNOTATION) { + log_warn(LD_DIR, "parse error: Annotations mixed with keywords"); + return -1; + } + } + if ((flags & TS_NO_NEW_ANNOTATIONS)) { + if (first_nonannotation != prev_len) { + log_warn(LD_DIR, "parse error: Unexpected annotations."); + return -1; + } + } + } else { + for (i=0; i < smartlist_len(out); ++i) { + tok = smartlist_get(out, i); + if (tok->tp >= MIN_ANNOTATION && tok->tp <= MAX_ANNOTATION) { + log_warn(LD_DIR, "parse error: no annotations allowed."); + return -1; + } + } + first_nonannotation = 0; + } + for (i = 0; table[i].t; ++i) { + if (counts[table[i].v] < table[i].min_cnt) { + log_warn(LD_DIR, "Parse error: missing %s element.", table[i].t); + return -1; + } + if (counts[table[i].v] > table[i].max_cnt) { + log_warn(LD_DIR, "Parse error: too many %s elements.", table[i].t); + return -1; + } + if (table[i].pos & AT_START) { + if (smartlist_len(out) < 1 || + (tok = smartlist_get(out, first_nonannotation))->tp != table[i].v) { + log_warn(LD_DIR, "Parse error: first item is not %s.", table[i].t); + return -1; + } + } + if (table[i].pos & AT_END) { + if (smartlist_len(out) < 1 || + (tok = smartlist_get(out, smartlist_len(out)-1))->tp != table[i].v) { + log_warn(LD_DIR, "Parse error: last item is not %s.", table[i].t); + return -1; + } + } + } + return 0; +} + +/** Helper: parse space-separated arguments from the string <b>s</b> ending at + * <b>eol</b>, and store them in the args field of <b>tok</b>. Store the + * number of parsed elements into the n_args field of <b>tok</b>. Allocate + * all storage in <b>area</b>. Return the number of arguments parsed, or + * return -1 if there was an insanely high number of arguments. */ +static inline int +get_token_arguments(memarea_t *area, directory_token_t *tok, + const char *s, const char *eol) +{ +/** Largest number of arguments we'll accept to any token, ever. */ +#define MAX_ARGS 512 + char *mem = memarea_strndup(area, s, eol-s); + char *cp = mem; + int j = 0; + char *args[MAX_ARGS]; + while (*cp) { + if (j == MAX_ARGS) + return -1; + args[j++] = cp; + cp = (char*)find_whitespace(cp); + if (!cp || !*cp) + break; /* End of the line. */ + *cp++ = '\0'; + cp = (char*)eat_whitespace(cp); + } + tok->n_args = j; + tok->args = memarea_memdup(area, args, j*sizeof(char*)); + return j; +#undef MAX_ARGS +} + +/** Helper: make sure that the token <b>tok</b> with keyword <b>kwd</b> obeys + * the object syntax of <b>o_syn</b>. Allocate all storage in <b>area</b>. + * Return <b>tok</b> on success, or a new ERR_ token if the token didn't + * conform to the syntax we wanted. + **/ +static inline directory_token_t * +token_check_object(memarea_t *area, const char *kwd, + directory_token_t *tok, obj_syntax o_syn) +{ + char ebuf[128]; + switch (o_syn) { + case NO_OBJ: + /* No object is allowed for this token. */ + if (tok->object_body) { + tor_snprintf(ebuf, sizeof(ebuf), "Unexpected object for %s", kwd); + RET_ERR(ebuf); + } + if (tok->key) { + tor_snprintf(ebuf, sizeof(ebuf), "Unexpected public key for %s", kwd); + RET_ERR(ebuf); + } + break; + case NEED_OBJ: + /* There must be a (non-key) object. */ + if (!tok->object_body) { + tor_snprintf(ebuf, sizeof(ebuf), "Missing object for %s", kwd); + RET_ERR(ebuf); + } + break; + case NEED_KEY_1024: /* There must be a 1024-bit public key. */ + case NEED_SKEY_1024: /* There must be a 1024-bit private key. */ + if (tok->key && crypto_pk_num_bits(tok->key) != PK_BYTES*8) { + tor_snprintf(ebuf, sizeof(ebuf), "Wrong size on key for %s: %d bits", + kwd, crypto_pk_num_bits(tok->key)); + RET_ERR(ebuf); + } + /* fall through */ + case NEED_KEY: /* There must be some kind of key. */ + if (!tok->key) { + tor_snprintf(ebuf, sizeof(ebuf), "Missing public key for %s", kwd); + RET_ERR(ebuf); + } + if (o_syn != NEED_SKEY_1024) { + if (crypto_pk_key_is_private(tok->key)) { + tor_snprintf(ebuf, sizeof(ebuf), + "Private key given for %s, which wants a public key", kwd); + RET_ERR(ebuf); + } + } else { /* o_syn == NEED_SKEY_1024 */ + if (!crypto_pk_key_is_private(tok->key)) { + tor_snprintf(ebuf, sizeof(ebuf), + "Public key given for %s, which wants a private key", kwd); + RET_ERR(ebuf); + } + } + break; + case OBJ_OK: + /* Anything goes with this token. */ + break; + } + + done_tokenizing: + return tok; +} + +/** Helper function: read the next token from *s, advance *s to the end of the + * token, and return the parsed token. Parse *<b>s</b> according to the list + * of tokens in <b>table</b>. + */ +directory_token_t * +get_next_token(memarea_t *area, + const char **s, const char *eos, token_rule_t *table) +{ + /** Reject any object at least this big; it is probably an overflow, an + * attack, a bug, or some other nonsense. */ +#define MAX_UNPARSED_OBJECT_SIZE (128*1024) + /** Reject any line at least this big; it is probably an overflow, an + * attack, a bug, or some other nonsense. */ +#define MAX_LINE_LENGTH (128*1024) + + const char *next, *eol, *obstart; + size_t obname_len; + int i; + directory_token_t *tok; + obj_syntax o_syn = NO_OBJ; + char ebuf[128]; + const char *kwd = ""; + + tor_assert(area); + tok = ALLOC_ZERO(sizeof(directory_token_t)); + tok->tp = ERR_; + + /* Set *s to first token, eol to end-of-line, next to after first token */ + *s = eat_whitespace_eos(*s, eos); /* eat multi-line whitespace */ + tor_assert(eos >= *s); + eol = memchr(*s, '\n', eos-*s); + if (!eol) + eol = eos; + if (eol - *s > MAX_LINE_LENGTH) { + RET_ERR("Line far too long"); + } + + next = find_whitespace_eos(*s, eol); + + if (!strcmp_len(*s, "opt", next-*s)) { + /* Skip past an "opt" at the start of the line. */ + *s = eat_whitespace_eos_no_nl(next, eol); + next = find_whitespace_eos(*s, eol); + } else if (*s == eos) { /* If no "opt", and end-of-line, line is invalid */ + RET_ERR("Unexpected EOF"); + } + + /* Search the table for the appropriate entry. (I tried a binary search + * instead, but it wasn't any faster.) */ + for (i = 0; table[i].t ; ++i) { + if (!strcmp_len(*s, table[i].t, next-*s)) { + /* We've found the keyword. */ + kwd = table[i].t; + tok->tp = table[i].v; + o_syn = table[i].os; + *s = eat_whitespace_eos_no_nl(next, eol); + /* We go ahead whether there are arguments or not, so that tok->args is + * always set if we want arguments. */ + if (table[i].concat_args) { + /* The keyword takes the line as a single argument */ + tok->args = ALLOC(sizeof(char*)); + tok->args[0] = STRNDUP(*s,eol-*s); /* Grab everything on line */ + tok->n_args = 1; + } else { + /* This keyword takes multiple arguments. */ + if (get_token_arguments(area, tok, *s, eol)<0) { + tor_snprintf(ebuf, sizeof(ebuf),"Far too many arguments to %s", kwd); + RET_ERR(ebuf); + } + *s = eol; + } + if (tok->n_args < table[i].min_args) { + tor_snprintf(ebuf, sizeof(ebuf), "Too few arguments to %s", kwd); + RET_ERR(ebuf); + } else if (tok->n_args > table[i].max_args) { + tor_snprintf(ebuf, sizeof(ebuf), "Too many arguments to %s", kwd); + RET_ERR(ebuf); + } + break; + } + } + + if (tok->tp == ERR_) { + /* No keyword matched; call it an "K_opt" or "A_unrecognized" */ + if (**s == '@') + tok->tp = A_UNKNOWN_; + else + tok->tp = K_OPT; + tok->args = ALLOC(sizeof(char*)); + tok->args[0] = STRNDUP(*s, eol-*s); + tok->n_args = 1; + o_syn = OBJ_OK; + } + + /* Check whether there's an object present */ + *s = eat_whitespace_eos(eol, eos); /* Scan from end of first line */ + tor_assert(eos >= *s); + eol = memchr(*s, '\n', eos-*s); + if (!eol || eol-*s<11 || strcmpstart(*s, "-----BEGIN ")) /* No object. */ + goto check_object; + + obstart = *s; /* Set obstart to start of object spec */ + if (*s+16 >= eol || memchr(*s+11,'\0',eol-*s-16) || /* no short lines, */ + strcmp_len(eol-5, "-----", 5) || /* nuls or invalid endings */ + (eol-*s) > MAX_UNPARSED_OBJECT_SIZE) { /* name too long */ + RET_ERR("Malformed object: bad begin line"); + } + tok->object_type = STRNDUP(*s+11, eol-*s-16); + obname_len = eol-*s-16; /* store objname length here to avoid a strlen() */ + *s = eol+1; /* Set *s to possible start of object data (could be eos) */ + + /* Go to the end of the object */ + next = tor_memstr(*s, eos-*s, "-----END "); + if (!next) { + RET_ERR("Malformed object: missing object end line"); + } + tor_assert(eos >= next); + eol = memchr(next, '\n', eos-next); + if (!eol) /* end-of-line marker, or eos if there's no '\n' */ + eol = eos; + /* Validate the ending tag, which should be 9 + NAME + 5 + eol */ + if ((size_t)(eol-next) != 9+obname_len+5 || + strcmp_len(next+9, tok->object_type, obname_len) || + strcmp_len(eol-5, "-----", 5)) { + tor_snprintf(ebuf, sizeof(ebuf), "Malformed object: mismatched end tag %s", + tok->object_type); + ebuf[sizeof(ebuf)-1] = '\0'; + RET_ERR(ebuf); + } + if (next - *s > MAX_UNPARSED_OBJECT_SIZE) + RET_ERR("Couldn't parse object: missing footer or object much too big."); + + if (!strcmp(tok->object_type, "RSA PUBLIC KEY")) { /* If it's a public key */ + tok->key = crypto_pk_new(); + if (crypto_pk_read_public_key_from_string(tok->key, obstart, eol-obstart)) + RET_ERR("Couldn't parse public key."); + } else if (!strcmp(tok->object_type, "RSA PRIVATE KEY")) { /* private key */ + tok->key = crypto_pk_new(); + if (crypto_pk_read_private_key_from_string(tok->key, obstart, eol-obstart)) + RET_ERR("Couldn't parse private key."); + } else { /* If it's something else, try to base64-decode it */ + int r; + tok->object_body = ALLOC(next-*s); /* really, this is too much RAM. */ + r = base64_decode(tok->object_body, next-*s, *s, next-*s); + if (r<0) + RET_ERR("Malformed object: bad base64-encoded data"); + tok->object_size = r; + } + *s = eol; + + check_object: + tok = token_check_object(area, kwd, tok, o_syn); + + done_tokenizing: + return tok; + +#undef RET_ERR +#undef ALLOC +#undef ALLOC_ZERO +#undef STRDUP +#undef STRNDUP +} + +/** Find the first token in <b>s</b> whose keyword is <b>keyword</b>; fail + * with an assert if no such keyword is found. + */ +directory_token_t * +find_by_keyword_(smartlist_t *s, directory_keyword keyword, + const char *keyword_as_string) +{ + directory_token_t *tok = find_opt_by_keyword(s, keyword); + if (PREDICT_UNLIKELY(!tok)) { + log_err(LD_BUG, "Missing %s [%d] in directory object that should have " + "been validated. Internal error.", keyword_as_string, (int)keyword); + tor_assert(tok); + } + return tok; +} + +/** Find the first token in <b>s</b> whose keyword is <b>keyword</b>; return + * NULL if no such keyword is found. + */ +directory_token_t * +find_opt_by_keyword(smartlist_t *s, directory_keyword keyword) +{ + SMARTLIST_FOREACH(s, directory_token_t *, t, if (t->tp == keyword) return t); + return NULL; +} + +/** If there are any directory_token_t entries in <b>s</b> whose keyword is + * <b>k</b>, return a newly allocated smartlist_t containing all such entries, + * in the same order in which they occur in <b>s</b>. Otherwise return + * NULL. */ +smartlist_t * +find_all_by_keyword(smartlist_t *s, directory_keyword k) +{ + smartlist_t *out = NULL; + SMARTLIST_FOREACH(s, directory_token_t *, t, + if (t->tp == k) { + if (!out) + out = smartlist_new(); + smartlist_add(out, t); + }); + return out; +} + diff --git a/src/or/parsecommon.h b/src/or/parsecommon.h new file mode 100644 index 0000000000..3019df63eb --- /dev/null +++ b/src/or/parsecommon.h @@ -0,0 +1,315 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file parsecommon.h + * \brief Header file for parsecommon.c + **/ + +#ifndef TOR_PARSECOMMON_H +#define TOR_PARSECOMMON_H + +#include "container.h" +#include "crypto.h" +#include "memarea.h" + +/** Enumeration of possible token types. The ones starting with K_ correspond +* to directory 'keywords'. A_ is for an annotation, R or C is related to +* hidden services, ERR_ is an error in the tokenizing process, EOF_ is an +* end-of-file marker, and NIL_ is used to encode not-a-token. +*/ +typedef enum { + K_ACCEPT = 0, + K_ACCEPT6, + K_DIRECTORY_SIGNATURE, + K_RECOMMENDED_SOFTWARE, + K_REJECT, + K_REJECT6, + K_ROUTER, + K_SIGNED_DIRECTORY, + K_SIGNING_KEY, + K_ONION_KEY, + K_ONION_KEY_NTOR, + K_ROUTER_SIGNATURE, + K_PUBLISHED, + K_RUNNING_ROUTERS, + K_ROUTER_STATUS, + K_PLATFORM, + K_PROTO, + K_OPT, + K_BANDWIDTH, + K_CONTACT, + K_NETWORK_STATUS, + K_UPTIME, + K_DIR_SIGNING_KEY, + K_FAMILY, + K_FINGERPRINT, + K_HIBERNATING, + K_READ_HISTORY, + K_WRITE_HISTORY, + K_NETWORK_STATUS_VERSION, + K_DIR_SOURCE, + K_DIR_OPTIONS, + K_CLIENT_VERSIONS, + K_SERVER_VERSIONS, + K_RECOMMENDED_CLIENT_PROTOCOLS, + K_RECOMMENDED_RELAY_PROTOCOLS, + K_REQUIRED_CLIENT_PROTOCOLS, + K_REQUIRED_RELAY_PROTOCOLS, + K_OR_ADDRESS, + K_ID, + K_P, + K_P6, + K_R, + K_A, + K_S, + K_V, + K_W, + K_M, + K_EXTRA_INFO, + K_EXTRA_INFO_DIGEST, + K_CACHES_EXTRA_INFO, + K_HIDDEN_SERVICE_DIR, + K_ALLOW_SINGLE_HOP_EXITS, + K_IPV6_POLICY, + K_ROUTER_SIG_ED25519, + K_IDENTITY_ED25519, + K_MASTER_KEY_ED25519, + K_ONION_KEY_CROSSCERT, + K_NTOR_ONION_KEY_CROSSCERT, + + K_DIRREQ_END, + K_DIRREQ_V2_IPS, + K_DIRREQ_V3_IPS, + K_DIRREQ_V2_REQS, + K_DIRREQ_V3_REQS, + K_DIRREQ_V2_SHARE, + K_DIRREQ_V3_SHARE, + K_DIRREQ_V2_RESP, + K_DIRREQ_V3_RESP, + K_DIRREQ_V2_DIR, + K_DIRREQ_V3_DIR, + K_DIRREQ_V2_TUN, + K_DIRREQ_V3_TUN, + K_ENTRY_END, + K_ENTRY_IPS, + K_CELL_END, + K_CELL_PROCESSED, + K_CELL_QUEUED, + K_CELL_TIME, + K_CELL_CIRCS, + K_EXIT_END, + K_EXIT_WRITTEN, + K_EXIT_READ, + K_EXIT_OPENED, + + K_DIR_KEY_CERTIFICATE_VERSION, + K_DIR_IDENTITY_KEY, + K_DIR_KEY_PUBLISHED, + K_DIR_KEY_EXPIRES, + K_DIR_KEY_CERTIFICATION, + K_DIR_KEY_CROSSCERT, + K_DIR_ADDRESS, + K_DIR_TUNNELLED, + + K_VOTE_STATUS, + K_VALID_AFTER, + K_FRESH_UNTIL, + K_VALID_UNTIL, + K_VOTING_DELAY, + + K_KNOWN_FLAGS, + K_PARAMS, + K_BW_WEIGHTS, + K_VOTE_DIGEST, + K_CONSENSUS_DIGEST, + K_ADDITIONAL_DIGEST, + K_ADDITIONAL_SIGNATURE, + K_CONSENSUS_METHODS, + K_CONSENSUS_METHOD, + K_LEGACY_DIR_KEY, + K_DIRECTORY_FOOTER, + K_SIGNING_CERT_ED, + K_SR_FLAG, + K_COMMIT, + K_PREVIOUS_SRV, + K_CURRENT_SRV, + K_PACKAGE, + + A_PURPOSE, + A_LAST_LISTED, + A_UNKNOWN_, + + R_RENDEZVOUS_SERVICE_DESCRIPTOR, + R_VERSION, + R_PERMANENT_KEY, + R_SECRET_ID_PART, + R_PUBLICATION_TIME, + R_PROTOCOL_VERSIONS, + R_INTRODUCTION_POINTS, + R_SIGNATURE, + + R_HS_DESCRIPTOR, /* From version 3, this MUST be generic to all future + descriptor versions thus making it R_. */ + R3_DESC_LIFETIME, + R3_DESC_SIGNING_CERT, + R3_REVISION_COUNTER, + R3_ENCRYPTED, + R3_SIGNATURE, + R3_CREATE2_FORMATS, + R3_AUTHENTICATION_REQUIRED, + R3_SINGLE_ONION_SERVICE, + R3_INTRODUCTION_POINT, + R3_INTRO_AUTH_KEY, + R3_INTRO_ENC_KEY, + R3_INTRO_ENC_KEY_CERTIFICATION, + + R_IPO_IDENTIFIER, + R_IPO_IP_ADDRESS, + R_IPO_ONION_PORT, + R_IPO_ONION_KEY, + R_IPO_SERVICE_KEY, + + C_CLIENT_NAME, + C_DESCRIPTOR_COOKIE, + C_CLIENT_KEY, + + ERR_, + EOF_, + NIL_ +} directory_keyword; + +/** Structure to hold a single directory token. + * + * We parse a directory by breaking it into "tokens", each consisting + * of a keyword, a line full of arguments, and a binary object. The + * arguments and object are both optional, depending on the keyword + * type. + * + * This structure is only allocated in memareas; do not allocate it on + * the heap, or token_clear() won't work. + */ +typedef struct directory_token_t { + directory_keyword tp; /**< Type of the token. */ + int n_args:30; /**< Number of elements in args */ + char **args; /**< Array of arguments from keyword line. */ + + char *object_type; /**< -----BEGIN [object_type]-----*/ + size_t object_size; /**< Bytes in object_body */ + char *object_body; /**< Contents of object, base64-decoded. */ + + crypto_pk_t *key; /**< For public keys only. Heap-allocated. */ + + char *error; /**< For ERR_ tokens only. */ +} directory_token_t; + +/** We use a table of rules to decide how to parse each token type. */ + +/** Rules for whether the keyword needs an object. */ +typedef enum { + NO_OBJ, /**< No object, ever. */ + NEED_OBJ, /**< Object is required. */ + NEED_SKEY_1024,/**< Object is required, and must be a 1024 bit private key */ + NEED_KEY_1024, /**< Object is required, and must be a 1024 bit public key */ + NEED_KEY, /**< Object is required, and must be a public key. */ + OBJ_OK, /**< Object is optional. */ +} obj_syntax; + +#define AT_START 1 +#define AT_END 2 + +#define TS_ANNOTATIONS_OK 1 +#define TS_NOCHECK 2 +#define TS_NO_NEW_ANNOTATIONS 4 + +/** + * @name macros for defining token rules + * + * Helper macros to define token tables. 's' is a string, 't' is a + * directory_keyword, 'a' is a trio of argument multiplicities, and 'o' is an + * object syntax. + */ +/**@{*/ + +/** Appears to indicate the end of a table. */ +#define END_OF_TABLE { NULL, NIL_, 0,0,0, NO_OBJ, 0, INT_MAX, 0, 0 } +/** An item with no restrictions: used for obsolete document types */ +#define T(s,t,a,o) { s, t, a, o, 0, INT_MAX, 0, 0 } +/** An item with no restrictions on multiplicity or location. */ +#define T0N(s,t,a,o) { s, t, a, o, 0, INT_MAX, 0, 0 } +/** An item that must appear exactly once */ +#define T1(s,t,a,o) { s, t, a, o, 1, 1, 0, 0 } +/** An item that must appear exactly once, at the start of the document */ +#define T1_START(s,t,a,o) { s, t, a, o, 1, 1, AT_START, 0 } +/** An item that must appear exactly once, at the end of the document */ +#define T1_END(s,t,a,o) { s, t, a, o, 1, 1, AT_END, 0 } +/** An item that must appear one or more times */ +#define T1N(s,t,a,o) { s, t, a, o, 1, INT_MAX, 0, 0 } +/** An item that must appear no more than once */ +#define T01(s,t,a,o) { s, t, a, o, 0, 1, 0, 0 } +/** An annotation that must appear no more than once */ +#define A01(s,t,a,o) { s, t, a, o, 0, 1, 0, 1 } + +/** Argument multiplicity: any number of arguments. */ +#define ARGS 0,INT_MAX,0 +/** Argument multiplicity: no arguments. */ +#define NO_ARGS 0,0,0 +/** Argument multiplicity: concatenate all arguments. */ +#define CONCAT_ARGS 1,1,1 +/** Argument multiplicity: at least <b>n</b> arguments. */ +#define GE(n) n,INT_MAX,0 +/** Argument multiplicity: exactly <b>n</b> arguments. */ +#define EQ(n) n,n,0 +/**@}*/ + +/** Determines the parsing rules for a single token type. */ +typedef struct token_rule_t { + /** The string value of the keyword identifying the type of item. */ + const char *t; + /** The corresponding directory_keyword enum. */ + directory_keyword v; + /** Minimum number of arguments for this item */ + int min_args; + /** Maximum number of arguments for this item */ + int max_args; + /** If true, we concatenate all arguments for this item into a single + * string. */ + int concat_args; + /** Requirements on object syntax for this item. */ + obj_syntax os; + /** Lowest number of times this item may appear in a document. */ + int min_cnt; + /** Highest number of times this item may appear in a document. */ + int max_cnt; + /** One or more of AT_START/AT_END to limit where the item may appear in a + * document. */ + int pos; + /** True iff this token is an annotation. */ + int is_annotation; +} token_rule_t; + +void token_clear(directory_token_t *tok); + +int tokenize_string(memarea_t *area, + const char *start, const char *end, + smartlist_t *out, + token_rule_t *table, + int flags); +directory_token_t *get_next_token(memarea_t *area, + const char **s, + const char *eos, + token_rule_t *table); + +directory_token_t *find_by_keyword_(smartlist_t *s, + directory_keyword keyword, + const char *keyword_str); + +#define find_by_keyword(s, keyword) \ + find_by_keyword_((s), (keyword), #keyword) + +directory_token_t *find_opt_by_keyword(smartlist_t *s, + directory_keyword keyword); +smartlist_t * find_all_by_keyword(smartlist_t *s, directory_keyword k); + +#endif /* TOR_PARSECOMMON_H */ + diff --git a/src/or/policies.c b/src/or/policies.c index 9e4e73dfea..f4c0cddbcc 100644 --- a/src/or/policies.c +++ b/src/or/policies.c @@ -281,28 +281,22 @@ parse_reachable_addresses(void) /* We ignore ReachableAddresses for relays */ if (!server_mode(options)) { - if ((reachable_or_addr_policy - && policy_is_reject_star(reachable_or_addr_policy, AF_UNSPEC)) - || (reachable_dir_addr_policy - && policy_is_reject_star(reachable_dir_addr_policy, AF_UNSPEC))) { + if (policy_is_reject_star(reachable_or_addr_policy, AF_UNSPEC, 0) + || policy_is_reject_star(reachable_dir_addr_policy, AF_UNSPEC,0)) { log_warn(LD_CONFIG, "Tor cannot connect to the Internet if " "ReachableAddresses, ReachableORAddresses, or " "ReachableDirAddresses reject all addresses. Please accept " "some addresses in these options."); } else if (options->ClientUseIPv4 == 1 - && ((reachable_or_addr_policy - && policy_is_reject_star(reachable_or_addr_policy, AF_INET)) - || (reachable_dir_addr_policy - && policy_is_reject_star(reachable_dir_addr_policy, AF_INET)))) { + && (policy_is_reject_star(reachable_or_addr_policy, AF_INET, 0) + || policy_is_reject_star(reachable_dir_addr_policy, AF_INET, 0))) { log_warn(LD_CONFIG, "You have set ClientUseIPv4 1, but " "ReachableAddresses, ReachableORAddresses, or " "ReachableDirAddresses reject all IPv4 addresses. " "Tor will not connect using IPv4."); } else if (fascist_firewall_use_ipv6(options) - && ((reachable_or_addr_policy - && policy_is_reject_star(reachable_or_addr_policy, AF_INET6)) - || (reachable_dir_addr_policy - && policy_is_reject_star(reachable_dir_addr_policy, AF_INET6)))) { + && (policy_is_reject_star(reachable_or_addr_policy, AF_INET6, 0) + || policy_is_reject_star(reachable_dir_addr_policy, AF_INET6, 0))) { log_warn(LD_CONFIG, "You have configured tor to use IPv6 " "(ClientUseIPv6 1 or UseBridges 1), but " "ReachableAddresses, ReachableORAddresses, or " @@ -1091,8 +1085,8 @@ validate_addr_policies(const or_options_t *options, char **msg) const int exitrelay_setting_is_auto = options->ExitRelay == -1; const int policy_accepts_something = - ! (policy_is_reject_star(addr_policy, AF_INET) && - policy_is_reject_star(addr_policy, AF_INET6)); + ! (policy_is_reject_star(addr_policy, AF_INET, 1) && + policy_is_reject_star(addr_policy, AF_INET6, 1)); if (server_mode(options) && ! warned_about_exitrelay && @@ -2163,13 +2157,16 @@ exit_policy_is_general_exit(smartlist_t *policy) } /** Return false if <b>policy</b> might permit access to some addr:port; - * otherwise if we are certain it rejects everything, return true. */ + * otherwise if we are certain it rejects everything, return true. If no + * part of <b>policy</b> matches, return <b>default_reject</b>. + * NULL policies are allowed, and treated as empty. */ int -policy_is_reject_star(const smartlist_t *policy, sa_family_t family) +policy_is_reject_star(const smartlist_t *policy, sa_family_t family, + int default_reject) { - if (!policy) /*XXXX disallow NULL policies? */ - return 1; - SMARTLIST_FOREACH_BEGIN(policy, addr_policy_t *, p) { + if (!policy) + return default_reject; + SMARTLIST_FOREACH_BEGIN(policy, const addr_policy_t *, p) { if (p->policy_type == ADDR_POLICY_ACCEPT && (tor_addr_family(&p->addr) == family || tor_addr_family(&p->addr) == AF_UNSPEC)) { @@ -2182,7 +2179,7 @@ policy_is_reject_star(const smartlist_t *policy, sa_family_t family) return 1; } } SMARTLIST_FOREACH_END(p); - return 1; + return default_reject; } /** Write a single address policy to the buf_len byte buffer at buf. Return diff --git a/src/or/policies.h b/src/or/policies.h index e134e686d2..20f58f2beb 100644 --- a/src/or/policies.h +++ b/src/or/policies.h @@ -100,7 +100,8 @@ void addr_policy_append_reject_addr_list(smartlist_t **dest, const smartlist_t *addrs); void policies_set_node_exitpolicy_to_reject_all(node_t *exitrouter); int exit_policy_is_general_exit(smartlist_t *policy); -int policy_is_reject_star(const smartlist_t *policy, sa_family_t family); +int policy_is_reject_star(const smartlist_t *policy, sa_family_t family, + int reject_by_default); char * policy_dump_to_string(const smartlist_t *policy_list, int include_ipv4, int include_ipv6); diff --git a/src/or/protover.c b/src/or/protover.c index ff8948bafd..5972e61be7 100644 --- a/src/or/protover.c +++ b/src/or/protover.c @@ -12,7 +12,8 @@ * on the supported protocol versions for each relay, and also vote on the * which protocols you should have to support in order to be on the Tor * network. All Tor instances use these required/recommended protocol versions - * to + * to tell what level of support for recent protocols each relay has, and + * to decide whether they should be running given their current protocols. * * The main advantage of these protocol versions numbers over using Tor * version numbers is that they allow different implementations of the Tor diff --git a/src/or/relay.c b/src/or/relay.c index 823e0743bd..8d48239e47 100644 --- a/src/or/relay.c +++ b/src/or/relay.c @@ -60,6 +60,7 @@ #include "connection_or.h" #include "control.h" #include "geoip.h" +#include "hs_cache.h" #include "main.h" #include "networkstatus.h" #include "nodelist.h" @@ -610,14 +611,14 @@ relay_send_command_from_edge_(streamid_t stream_id, circuit_t *circ, memset(&cell, 0, sizeof(cell_t)); cell.command = CELL_RELAY; - if (cpath_layer) { + if (CIRCUIT_IS_ORIGIN(circ)) { + tor_assert(cpath_layer); cell.circ_id = circ->n_circ_id; cell_direction = CELL_DIRECTION_OUT; - } else if (! CIRCUIT_IS_ORIGIN(circ)) { + } else { + tor_assert(! cpath_layer); cell.circ_id = TO_OR_CIRCUIT(circ)->p_circ_id; cell_direction = CELL_DIRECTION_IN; - } else { - return -1; } memset(&rh, 0, sizeof(rh)); @@ -2439,9 +2440,7 @@ cell_queues_check_size(void) if (rend_cache_total > get_options()->MaxMemInQueues / 5) { const size_t bytes_to_remove = rend_cache_total - (size_t)(get_options()->MaxMemInQueues / 10); - rend_cache_clean_v2_descs_as_dir(time(NULL), bytes_to_remove); - alloc -= rend_cache_total; - alloc += rend_cache_get_total_allocation(); + alloc -= hs_cache_handle_oom(time(NULL), bytes_to_remove); } circuits_handle_oom(alloc); return 1; diff --git a/src/or/rendcache.c b/src/or/rendcache.c index e61a96b677..bf43407289 100644 --- a/src/or/rendcache.c +++ b/src/or/rendcache.c @@ -86,7 +86,7 @@ rend_cache_get_total_allocation(void) } /** Decrement the total bytes attributed to the rendezvous cache by n. */ -STATIC void +void rend_cache_decrement_allocation(size_t n) { static int have_underflowed = 0; @@ -103,7 +103,7 @@ rend_cache_decrement_allocation(size_t n) } /** Increase the total bytes attributed to the rendezvous cache by n. */ -STATIC void +void rend_cache_increment_allocation(size_t n) { static int have_overflowed = 0; @@ -462,45 +462,36 @@ rend_cache_intro_failure_note(rend_intro_point_failure_t failure, } /** Remove all old v2 descriptors and those for which this hidden service - * directory is not responsible for any more. - * - * If at all possible, remove at least <b>force_remove</b> bytes of data. - */ -void -rend_cache_clean_v2_descs_as_dir(time_t now, size_t force_remove) + * directory is not responsible for any more. The cutoff is the time limit for + * which we want to keep the cache entry. In other words, any entry created + * before will be removed. */ +size_t +rend_cache_clean_v2_descs_as_dir(time_t cutoff) { digestmap_iter_t *iter; - time_t cutoff = now - REND_CACHE_MAX_AGE - REND_CACHE_MAX_SKEW; - const int LAST_SERVED_CUTOFF_STEP = 1800; - time_t last_served_cutoff = cutoff; size_t bytes_removed = 0; - do { - for (iter = digestmap_iter_init(rend_cache_v2_dir); - !digestmap_iter_done(iter); ) { - const char *key; - void *val; - rend_cache_entry_t *ent; - digestmap_iter_get(iter, &key, &val); - ent = val; - if (ent->parsed->timestamp < cutoff || - ent->last_served < last_served_cutoff) { - char key_base32[REND_DESC_ID_V2_LEN_BASE32 + 1]; - base32_encode(key_base32, sizeof(key_base32), key, DIGEST_LEN); - log_info(LD_REND, "Removing descriptor with ID '%s' from cache", - safe_str_client(key_base32)); - bytes_removed += rend_cache_entry_allocation(ent); - iter = digestmap_iter_next_rmv(rend_cache_v2_dir, iter); - rend_cache_entry_free(ent); - } else { - iter = digestmap_iter_next(rend_cache_v2_dir, iter); - } + + for (iter = digestmap_iter_init(rend_cache_v2_dir); + !digestmap_iter_done(iter); ) { + const char *key; + void *val; + rend_cache_entry_t *ent; + digestmap_iter_get(iter, &key, &val); + ent = val; + if (ent->parsed->timestamp < cutoff) { + char key_base32[REND_DESC_ID_V2_LEN_BASE32 + 1]; + base32_encode(key_base32, sizeof(key_base32), key, DIGEST_LEN); + log_info(LD_REND, "Removing descriptor with ID '%s' from cache", + safe_str_client(key_base32)); + bytes_removed += rend_cache_entry_allocation(ent); + iter = digestmap_iter_next_rmv(rend_cache_v2_dir, iter); + rend_cache_entry_free(ent); + } else { + iter = digestmap_iter_next(rend_cache_v2_dir, iter); } + } - /* In case we didn't remove enough bytes, advance the cutoff a little. */ - last_served_cutoff += LAST_SERVED_CUTOFF_STEP; - if (last_served_cutoff > now) - break; - } while (bytes_removed < force_remove); + return bytes_removed; } /** Lookup in the client cache the given service ID <b>query</b> for @@ -849,6 +840,8 @@ rend_cache_store_v2_desc_as_client(const char *desc, char want_desc_id[DIGEST_LEN]; rend_cache_entry_t *e; int retval = -1; + rend_data_v2_t *rend_data = TO_REND_DATA_V2(rend_query); + tor_assert(rend_cache); tor_assert(desc); tor_assert(desc_id_base32); @@ -874,11 +867,11 @@ rend_cache_store_v2_desc_as_client(const char *desc, log_warn(LD_REND, "Couldn't compute service ID."); goto err; } - if (rend_query->onion_address[0] != '\0' && - strcmp(rend_query->onion_address, service_id)) { + if (rend_data->onion_address[0] != '\0' && + strcmp(rend_data->onion_address, service_id)) { log_warn(LD_REND, "Received service descriptor for service ID %s; " "expected descriptor for service ID %s.", - service_id, safe_str(rend_query->onion_address)); + service_id, safe_str(rend_data->onion_address)); goto err; } if (tor_memneq(desc_id, want_desc_id, DIGEST_LEN)) { @@ -890,14 +883,14 @@ rend_cache_store_v2_desc_as_client(const char *desc, /* Decode/decrypt introduction points. */ if (intro_content && intro_size > 0) { int n_intro_points; - if (rend_query->auth_type != REND_NO_AUTH && - !tor_mem_is_zero(rend_query->descriptor_cookie, - sizeof(rend_query->descriptor_cookie))) { + if (rend_data->auth_type != REND_NO_AUTH && + !tor_mem_is_zero(rend_data->descriptor_cookie, + sizeof(rend_data->descriptor_cookie))) { char *ipos_decrypted = NULL; size_t ipos_decrypted_size; if (rend_decrypt_introduction_points(&ipos_decrypted, &ipos_decrypted_size, - rend_query->descriptor_cookie, + rend_data->descriptor_cookie, intro_content, intro_size) < 0) { log_warn(LD_REND, "Failed to decrypt introduction points. We are " diff --git a/src/or/rendcache.h b/src/or/rendcache.h index 270b614c38..746f142fcc 100644 --- a/src/or/rendcache.h +++ b/src/or/rendcache.h @@ -53,10 +53,17 @@ typedef enum { REND_CACHE_TYPE_SERVICE = 2, } rend_cache_type_t; +/* Return maximum lifetime in seconds of a cache entry. */ +static inline time_t +rend_cache_max_entry_lifetime(void) +{ + return REND_CACHE_MAX_AGE + REND_CACHE_MAX_SKEW; +} + void rend_cache_init(void); void rend_cache_clean(time_t now, rend_cache_type_t cache_type); void rend_cache_failure_clean(time_t now); -void rend_cache_clean_v2_descs_as_dir(time_t now, size_t min_to_remove); +size_t rend_cache_clean_v2_descs_as_dir(time_t cutoff); void rend_cache_purge(void); void rend_cache_free_all(void); int rend_cache_lookup_entry(const char *query, int version, @@ -77,6 +84,8 @@ void rend_cache_intro_failure_note(rend_intro_point_failure_t failure, const uint8_t *identity, const char *service_id); void rend_cache_failure_purge(void); +void rend_cache_decrement_allocation(size_t n); +void rend_cache_increment_allocation(size_t n); #ifdef RENDCACHE_PRIVATE @@ -89,8 +98,6 @@ STATIC int cache_failure_intro_lookup(const uint8_t *identity, const char *service_id, rend_cache_failure_intro_t **intro_entry); -STATIC void rend_cache_decrement_allocation(size_t n); -STATIC void rend_cache_increment_allocation(size_t n); STATIC rend_cache_failure_intro_t *rend_cache_failure_intro_entry_new( rend_intro_point_failure_t failure); STATIC rend_cache_failure_t *rend_cache_failure_entry_new(void); diff --git a/src/or/rendclient.c b/src/or/rendclient.c index a93bc94a9c..b0dcf52507 100644 --- a/src/or/rendclient.c +++ b/src/or/rendclient.c @@ -16,6 +16,7 @@ #include "connection.h" #include "connection_edge.h" #include "directory.h" +#include "hs_common.h" #include "main.h" #include "networkstatus.h" #include "nodelist.h" @@ -104,7 +105,7 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ) if (!extend_info) { log_warn(LD_REND, "No usable introduction points left for %s. Closing.", - safe_str_client(circ->rend_data->onion_address)); + safe_str_client(rend_data_get_address(circ->rend_data))); circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); return -1; } @@ -144,18 +145,19 @@ rend_client_send_introduction(origin_circuit_t *introcirc, off_t dh_offset; crypto_pk_t *intro_key = NULL; int status = 0; + const char *onion_address; tor_assert(introcirc->base_.purpose == CIRCUIT_PURPOSE_C_INTRODUCING); tor_assert(rendcirc->base_.purpose == CIRCUIT_PURPOSE_C_REND_READY); tor_assert(introcirc->rend_data); tor_assert(rendcirc->rend_data); - tor_assert(!rend_cmp_service_ids(introcirc->rend_data->onion_address, - rendcirc->rend_data->onion_address)); + tor_assert(!rend_cmp_service_ids(rend_data_get_address(introcirc->rend_data), + rend_data_get_address(rendcirc->rend_data))); assert_circ_anonymity_ok(introcirc, options); assert_circ_anonymity_ok(rendcirc, options); + onion_address = rend_data_get_address(introcirc->rend_data); - r = rend_cache_lookup_entry(introcirc->rend_data->onion_address, -1, - &entry); + r = rend_cache_lookup_entry(onion_address, -1, &entry); /* An invalid onion address is not possible else we have a big issue. */ tor_assert(r != -EINVAL); if (r < 0 || !rend_client_any_intro_points_usable(entry)) { @@ -164,14 +166,13 @@ rend_client_send_introduction(origin_circuit_t *introcirc, log_info(LD_REND, "query %s didn't have valid rend desc in cache. " "Refetching descriptor.", - safe_str_client(introcirc->rend_data->onion_address)); + safe_str_client(onion_address)); rend_client_refetch_v2_renddesc(introcirc->rend_data); { connection_t *conn; while ((conn = connection_get_by_type_state_rendquery(CONN_TYPE_AP, - AP_CONN_STATE_CIRCUIT_WAIT, - introcirc->rend_data->onion_address))) { + AP_CONN_STATE_CIRCUIT_WAIT, onion_address))) { connection_ap_mark_as_non_pending_circuit(TO_ENTRY_CONN(conn)); conn->state = AP_CONN_STATE_RENDDESC_WAIT; } @@ -195,7 +196,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc, log_info(LD_REND, "Could not find intro key for %s at %s; we " "have a v2 rend desc with %d intro points. " "Trying a different intro point...", - safe_str_client(introcirc->rend_data->onion_address), + safe_str_client(onion_address), safe_str_client(extend_info_describe( introcirc->build_state->chosen_exit)), smartlist_len(entry->parsed->intro_nodes)); @@ -235,11 +236,12 @@ rend_client_send_introduction(origin_circuit_t *introcirc, /* If version is 3, write (optional) auth data and timestamp. */ if (entry->parsed->protocols & (1<<3)) { tmp[0] = 3; /* version 3 of the cell format */ - tmp[1] = (uint8_t)introcirc->rend_data->auth_type; /* auth type, if any */ + /* auth type, if any */ + tmp[1] = (uint8_t) TO_REND_DATA_V2(introcirc->rend_data)->auth_type; v3_shift = 1; - if (introcirc->rend_data->auth_type != REND_NO_AUTH) { + if (tmp[1] != REND_NO_AUTH) { set_uint16(tmp+2, htons(REND_DESC_COOKIE_LEN)); - memcpy(tmp+4, introcirc->rend_data->descriptor_cookie, + memcpy(tmp+4, TO_REND_DATA_V2(introcirc->rend_data)->descriptor_cookie, REND_DESC_COOKIE_LEN); v3_shift += 2+REND_DESC_COOKIE_LEN; } @@ -359,7 +361,7 @@ rend_client_rendcirc_has_opened(origin_circuit_t *circ) * Called to close other intro circuits we launched in parallel. */ static void -rend_client_close_other_intros(const char *onion_address) +rend_client_close_other_intros(const uint8_t *rend_pk_digest) { /* abort parallel intro circs, if any */ SMARTLIST_FOREACH_BEGIN(circuit_get_global_list(), circuit_t *, c) { @@ -368,8 +370,7 @@ rend_client_close_other_intros(const char *onion_address) !c->marked_for_close && CIRCUIT_IS_ORIGIN(c)) { origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(c); if (oc->rend_data && - !rend_cmp_service_ids(onion_address, - oc->rend_data->onion_address)) { + rend_circuit_pk_digest_eq(oc, rend_pk_digest)) { log_info(LD_REND|LD_CIRC, "Closing introduction circuit %d that we " "built in parallel (Purpose %d).", oc->global_identifier, c->purpose); @@ -431,7 +432,8 @@ rend_client_introduction_acked(origin_circuit_t *circ, circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED); /* close any other intros launched in parallel */ - rend_client_close_other_intros(circ->rend_data->onion_address); + rend_client_close_other_intros(rend_data_get_pk_digest(circ->rend_data, + NULL)); } else { /* It's a NAK; the introduction point didn't relay our request. */ circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_INTRODUCING); @@ -440,7 +442,7 @@ rend_client_introduction_acked(origin_circuit_t *circ, * If none remain, refetch the service descriptor. */ log_info(LD_REND, "Got nack for %s from %s...", - safe_str_client(circ->rend_data->onion_address), + safe_str_client(rend_data_get_address(circ->rend_data)), safe_str_client(extend_info_describe(circ->build_state->chosen_exit))); if (rend_client_report_intro_point_failure(circ->build_state->chosen_exit, circ->rend_data, @@ -694,13 +696,15 @@ pick_hsdir(const char *desc_id, const char *desc_id_base32) * in the case that no hidden service directory is left to ask for the * descriptor, return 0, and in case of a failure -1. */ static int -directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query, +directory_get_from_hs_dir(const char *desc_id, + const rend_data_t *rend_query, routerstatus_t *rs_hsdir) { routerstatus_t *hs_dir = rs_hsdir; char *hsdir_fp; char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1]; char descriptor_cookie_base64[3*REND_DESC_COOKIE_LEN_BASE64]; + const rend_data_v2_t *rend_data; #ifdef ENABLE_TOR2WEB_MODE const int tor2web_mode = get_options()->Tor2webMode; const int how_to_fetch = tor2web_mode ? DIRIND_ONEHOP : DIRIND_ANONYMOUS; @@ -709,6 +713,8 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query, #endif tor_assert(desc_id); + tor_assert(rend_query); + rend_data = TO_REND_DATA_V2(rend_query); base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_id, DIGEST_LEN); @@ -731,10 +737,11 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query, /* Encode descriptor cookie for logging purposes. Also, if the cookie is * malformed, no fetch is triggered thus this needs to be done before the * fetch request. */ - if (rend_query->auth_type != REND_NO_AUTH) { + if (rend_data->auth_type != REND_NO_AUTH) { if (base64_encode(descriptor_cookie_base64, sizeof(descriptor_cookie_base64), - rend_query->descriptor_cookie, REND_DESC_COOKIE_LEN, + rend_data->descriptor_cookie, + REND_DESC_COOKIE_LEN, 0)<0) { log_warn(LD_BUG, "Could not base64-encode descriptor cookie."); return 0; @@ -760,9 +767,9 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query, "service '%s' with descriptor ID '%s', auth type %d, " "and descriptor cookie '%s' to hidden service " "directory %s", - rend_query->onion_address, desc_id_base32, - rend_query->auth_type, - (rend_query->auth_type == REND_NO_AUTH ? "[none]" : + rend_data->onion_address, desc_id_base32, + rend_data->auth_type, + (rend_data->auth_type == REND_NO_AUTH ? "[none]" : escaped_safe_str_client(descriptor_cookie_base64)), routerstatus_describe(hs_dir)); control_event_hs_descriptor_requested(rend_query, @@ -777,8 +784,8 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query, * On success, 1 is returned. If no hidden service is left to ask, return 0. * On error, -1 is returned. */ static int -fetch_v2_desc_by_descid(const char *desc_id, const rend_data_t *rend_query, - smartlist_t *hsdirs) +fetch_v2_desc_by_descid(const char *desc_id, + const rend_data_t *rend_query, smartlist_t *hsdirs) { int ret; @@ -811,13 +818,12 @@ fetch_v2_desc_by_descid(const char *desc_id, const rend_data_t *rend_query, * On success, 1 is returned. If no hidden service is left to ask, return 0. * On error, -1 is returned. */ static int -fetch_v2_desc_by_addr(rend_data_t *query, smartlist_t *hsdirs) +fetch_v2_desc_by_addr(rend_data_t *rend_query, smartlist_t *hsdirs) { char descriptor_id[DIGEST_LEN]; int replicas_left_to_try[REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS]; int i, tries_left, ret; - - tor_assert(query); + rend_data_v2_t *rend_data = TO_REND_DATA_V2(rend_query); /* Randomly iterate over the replicas until a descriptor can be fetched * from one of the consecutive nodes, or no options are left. */ @@ -831,9 +837,10 @@ fetch_v2_desc_by_addr(rend_data_t *query, smartlist_t *hsdirs) int chosen_replica = replicas_left_to_try[rand_val]; replicas_left_to_try[rand_val] = replicas_left_to_try[--tries_left]; - ret = rend_compute_v2_desc_id(descriptor_id, query->onion_address, - query->auth_type == REND_STEALTH_AUTH ? - query->descriptor_cookie : NULL, + ret = rend_compute_v2_desc_id(descriptor_id, + rend_data->onion_address, + rend_data->auth_type == REND_STEALTH_AUTH ? + rend_data->descriptor_cookie : NULL, time(NULL), chosen_replica); if (ret < 0) { /* Normally, on failure the descriptor_id is untouched but let's be @@ -841,18 +848,18 @@ fetch_v2_desc_by_addr(rend_data_t *query, smartlist_t *hsdirs) goto end; } - if (tor_memcmp(descriptor_id, query->descriptor_id[chosen_replica], + if (tor_memcmp(descriptor_id, rend_data->descriptor_id[chosen_replica], sizeof(descriptor_id)) != 0) { /* Not equal from what we currently have so purge the last hid serv * request cache and update the descriptor ID with the new value. */ purge_hid_serv_from_last_hid_serv_requests( - query->descriptor_id[chosen_replica]); - memcpy(query->descriptor_id[chosen_replica], descriptor_id, - sizeof(query->descriptor_id[chosen_replica])); + rend_data->descriptor_id[chosen_replica]); + memcpy(rend_data->descriptor_id[chosen_replica], descriptor_id, + sizeof(rend_data->descriptor_id[chosen_replica])); } /* Trigger the fetch with the computed descriptor ID. */ - ret = fetch_v2_desc_by_descid(descriptor_id, query, hsdirs); + ret = fetch_v2_desc_by_descid(descriptor_id, rend_query, hsdirs); if (ret != 0) { /* Either on success or failure, as long as we tried a fetch we are * done here. */ @@ -880,16 +887,23 @@ int rend_client_fetch_v2_desc(rend_data_t *query, smartlist_t *hsdirs) { int ret; + rend_data_v2_t *rend_data; + const char *onion_address; tor_assert(query); + /* Get the version 2 data structure of the query. */ + rend_data = TO_REND_DATA_V2(query); + onion_address = rend_data_get_address(query); + /* Depending on what's available in the rend data query object, we will * trigger a fetch by HS address or using a descriptor ID. */ - if (query->onion_address[0] != '\0') { + if (onion_address[0] != '\0') { ret = fetch_v2_desc_by_addr(query, hsdirs); - } else if (!tor_digest_is_zero(query->desc_id_fetch)) { - ret = fetch_v2_desc_by_descid(query->desc_id_fetch, query, hsdirs); + } else if (!tor_digest_is_zero(rend_data->desc_id_fetch)) { + ret = fetch_v2_desc_by_descid(rend_data->desc_id_fetch, query, + hsdirs); } else { /* Query data is invalid. */ ret = -1; @@ -907,10 +921,11 @@ void rend_client_refetch_v2_renddesc(rend_data_t *rend_query) { rend_cache_entry_t *e = NULL; + const char *onion_address = rend_data_get_address(rend_query); tor_assert(rend_query); /* Before fetching, check if we already have a usable descriptor here. */ - if (rend_cache_lookup_entry(rend_query->onion_address, -1, &e) == 0 && + if (rend_cache_lookup_entry(onion_address, -1, &e) == 0 && rend_client_any_intro_points_usable(e)) { log_info(LD_REND, "We would fetch a v2 rendezvous descriptor, but we " "already have a usable descriptor here. Not fetching."); @@ -923,7 +938,7 @@ rend_client_refetch_v2_renddesc(rend_data_t *rend_query) return; } log_debug(LD_REND, "Fetching v2 rendezvous descriptor for service %s", - safe_str_client(rend_query->onion_address)); + safe_str_client(onion_address)); rend_client_fetch_v2_desc(rend_query, NULL); /* We don't need to look the error code because either on failure or @@ -959,7 +974,7 @@ rend_client_cancel_descriptor_fetches(void) } else { log_debug(LD_REND, "Marking for close dir conn fetching " "rendezvous descriptor for service %s", - safe_str(rd->onion_address)); + safe_str(rend_data_get_address(rd))); } connection_mark_for_close(conn); } @@ -989,25 +1004,26 @@ rend_client_cancel_descriptor_fetches(void) */ int rend_client_report_intro_point_failure(extend_info_t *failed_intro, - rend_data_t *rend_query, + rend_data_t *rend_data, unsigned int failure_type) { int i, r; rend_cache_entry_t *ent; connection_t *conn; + const char *onion_address = rend_data_get_address(rend_data); - r = rend_cache_lookup_entry(rend_query->onion_address, -1, &ent); + r = rend_cache_lookup_entry(onion_address, -1, &ent); if (r < 0) { /* Either invalid onion address or cache entry not found. */ switch (-r) { case EINVAL: log_warn(LD_BUG, "Malformed service ID %s.", - escaped_safe_str_client(rend_query->onion_address)); + escaped_safe_str_client(onion_address)); return -1; case ENOENT: log_info(LD_REND, "Unknown service %s. Re-fetching descriptor.", - escaped_safe_str_client(rend_query->onion_address)); - rend_client_refetch_v2_renddesc(rend_query); + escaped_safe_str_client(onion_address)); + rend_client_refetch_v2_renddesc(rend_data); return 0; default: log_warn(LD_BUG, "Unknown cache lookup returned code: %d", r); @@ -1031,7 +1047,7 @@ rend_client_report_intro_point_failure(extend_info_t *failed_intro, case INTRO_POINT_FAILURE_GENERIC: rend_cache_intro_failure_note(failure_type, (uint8_t *)failed_intro->identity_digest, - rend_query->onion_address); + onion_address); rend_intro_point_free(intro); smartlist_del(ent->parsed->intro_nodes, i); break; @@ -1049,8 +1065,7 @@ rend_client_report_intro_point_failure(extend_info_t *failed_intro, if (zap_intro_point) { rend_cache_intro_failure_note( failure_type, - (uint8_t *) failed_intro->identity_digest, - rend_query->onion_address); + (uint8_t *) failed_intro->identity_digest, onion_address); rend_intro_point_free(intro); smartlist_del(ent->parsed->intro_nodes, i); } @@ -1064,14 +1079,14 @@ rend_client_report_intro_point_failure(extend_info_t *failed_intro, if (! rend_client_any_intro_points_usable(ent)) { log_info(LD_REND, "No more intro points remain for %s. Re-fetching descriptor.", - escaped_safe_str_client(rend_query->onion_address)); - rend_client_refetch_v2_renddesc(rend_query); + escaped_safe_str_client(onion_address)); + rend_client_refetch_v2_renddesc(rend_data); /* move all pending streams back to renddesc_wait */ /* NOTE: We can now do this faster, if we use pending_entry_connections */ while ((conn = connection_get_by_type_state_rendquery(CONN_TYPE_AP, AP_CONN_STATE_CIRCUIT_WAIT, - rend_query->onion_address))) { + onion_address))) { connection_ap_mark_as_non_pending_circuit(TO_ENTRY_CONN(conn)); conn->state = AP_CONN_STATE_RENDDESC_WAIT; } @@ -1080,7 +1095,7 @@ rend_client_report_intro_point_failure(extend_info_t *failed_intro, } log_info(LD_REND,"%d options left for %s.", smartlist_len(ent->parsed->intro_nodes), - escaped_safe_str_client(rend_query->onion_address)); + escaped_safe_str_client(onion_address)); return 1; } @@ -1221,10 +1236,11 @@ rend_client_desc_trynow(const char *query) rend_data = ENTRY_TO_EDGE_CONN(conn)->rend_data; if (!rend_data) continue; - if (rend_cmp_service_ids(query, rend_data->onion_address)) + const char *onion_address = rend_data_get_address(rend_data); + if (rend_cmp_service_ids(query, onion_address)) continue; assert_connection_ok(base_conn, now); - if (rend_cache_lookup_entry(rend_data->onion_address, -1, + if (rend_cache_lookup_entry(onion_address, -1, &entry) == 0 && rend_client_any_intro_points_usable(entry)) { /* either this fetch worked, or it failed but there was a @@ -1259,11 +1275,12 @@ rend_client_note_connection_attempt_ended(const rend_data_t *rend_data) { unsigned int have_onion = 0; rend_cache_entry_t *cache_entry = NULL; + const char *onion_address = rend_data_get_address(rend_data); + rend_data_v2_t *rend_data_v2 = TO_REND_DATA_V2(rend_data); - if (*rend_data->onion_address != '\0') { + if (onion_address[0] != '\0') { /* Ignore return value; we find an entry, or we don't. */ - (void) rend_cache_lookup_entry(rend_data->onion_address, -1, - &cache_entry); + (void) rend_cache_lookup_entry(onion_address, -1, &cache_entry); have_onion = 1; } @@ -1277,17 +1294,17 @@ rend_client_note_connection_attempt_ended(const rend_data_t *rend_data) /* Remove the HS's entries in last_hid_serv_requests. */ if (have_onion) { unsigned int replica; - for (replica = 0; replica < ARRAY_LENGTH(rend_data->descriptor_id); + for (replica = 0; replica < ARRAY_LENGTH(rend_data_v2->descriptor_id); replica++) { - const char *desc_id = rend_data->descriptor_id[replica]; + const char *desc_id = rend_data_v2->descriptor_id[replica]; purge_hid_serv_from_last_hid_serv_requests(desc_id); } log_info(LD_REND, "Connection attempt for %s has ended; " "cleaning up temporary state.", - safe_str_client(rend_data->onion_address)); + safe_str_client(onion_address)); } else { /* We only have an ID for a fetch. Probably used by HSFETCH. */ - purge_hid_serv_from_last_hid_serv_requests(rend_data->desc_id_fetch); + purge_hid_serv_from_last_hid_serv_requests(rend_data_v2->desc_id_fetch); } } @@ -1301,12 +1318,13 @@ rend_client_get_random_intro(const rend_data_t *rend_query) int ret; extend_info_t *result; rend_cache_entry_t *entry; + const char *onion_address = rend_data_get_address(rend_query); - ret = rend_cache_lookup_entry(rend_query->onion_address, -1, &entry); + ret = rend_cache_lookup_entry(onion_address, -1, &entry); if (ret < 0 || !rend_client_any_intro_points_usable(entry)) { log_warn(LD_REND, "Query '%s' didn't have valid rend desc in cache. Failing.", - safe_str_client(rend_query->onion_address)); + safe_str_client(onion_address)); /* XXX: Should we refetch the descriptor here if the IPs are not usable * anymore ?. */ return NULL; diff --git a/src/or/rendclient.h b/src/or/rendclient.h index b8f8c2f871..164305a773 100644 --- a/src/or/rendclient.h +++ b/src/or/rendclient.h @@ -27,7 +27,7 @@ void rend_client_cancel_descriptor_fetches(void); void rend_client_purge_last_hid_serv_requests(void); int rend_client_report_intro_point_failure(extend_info_t *failed_intro, - rend_data_t *rend_query, + rend_data_t *rend_data, unsigned int failure_type); int rend_client_rendezvous_acked(origin_circuit_t *circ, diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c index d9d39b1f19..f2060e528c 100644 --- a/src/or/rendcommon.c +++ b/src/or/rendcommon.c @@ -12,6 +12,7 @@ #include "circuitbuild.h" #include "config.h" #include "control.h" +#include "hs_common.h" #include "rendclient.h" #include "rendcommon.h" #include "rendmid.h" @@ -804,124 +805,6 @@ rend_process_relay_cell(circuit_t *circ, const crypt_path_t *layer_hint, command); } -/** Allocate and return a new rend_data_t with the same - * contents as <b>query</b>. */ -rend_data_t * -rend_data_dup(const rend_data_t *data) -{ - rend_data_t *data_dup; - tor_assert(data); - data_dup = tor_memdup(data, sizeof(rend_data_t)); - data_dup->hsdirs_fp = smartlist_new(); - SMARTLIST_FOREACH(data->hsdirs_fp, char *, fp, - smartlist_add(data_dup->hsdirs_fp, - tor_memdup(fp, DIGEST_LEN))); - return data_dup; -} - -/** Compute descriptor ID for each replicas and save them. A valid onion - * address must be present in the <b>rend_data</b>. - * - * Return 0 on success else -1. */ -static int -compute_desc_id(rend_data_t *rend_data) -{ - int ret = 0; - unsigned replica; - time_t now = time(NULL); - - tor_assert(rend_data); - - /* Compute descriptor ID for each replicas. */ - for (replica = 0; replica < ARRAY_LENGTH(rend_data->descriptor_id); - replica++) { - ret = rend_compute_v2_desc_id(rend_data->descriptor_id[replica], - rend_data->onion_address, - rend_data->descriptor_cookie, - now, replica); - if (ret < 0) { - goto end; - } - } - - end: - return ret; -} - -/** Allocate and initialize a rend_data_t object for a service using the - * given arguments. Only the <b>onion_address</b> is not optional. - * - * Return a valid rend_data_t pointer. */ -rend_data_t * -rend_data_service_create(const char *onion_address, const char *pk_digest, - const uint8_t *cookie, rend_auth_type_t auth_type) -{ - rend_data_t *rend_data = tor_malloc_zero(sizeof(*rend_data)); - - /* We need at least one else the call is wrong. */ - tor_assert(onion_address != NULL); - - if (pk_digest) { - memcpy(rend_data->rend_pk_digest, pk_digest, - sizeof(rend_data->rend_pk_digest)); - } - if (cookie) { - memcpy(rend_data->rend_cookie, cookie, - sizeof(rend_data->rend_cookie)); - } - - strlcpy(rend_data->onion_address, onion_address, - sizeof(rend_data->onion_address)); - rend_data->auth_type = auth_type; - /* Won't be used but still need to initialize it for rend_data dup and - * free. */ - rend_data->hsdirs_fp = smartlist_new(); - - return rend_data; -} - -/** Allocate and initialize a rend_data_t object for a client request using - * the given arguments. Either an onion address or a descriptor ID is - * needed. Both can be given but only the onion address will be used to make - * the descriptor fetch. - * - * Return a valid rend_data_t pointer or NULL on error meaning the - * descriptor IDs couldn't be computed from the given data. */ -rend_data_t * -rend_data_client_create(const char *onion_address, const char *desc_id, - const char *cookie, rend_auth_type_t auth_type) -{ - rend_data_t *rend_data = tor_malloc_zero(sizeof(*rend_data)); - - /* We need at least one else the call is wrong. */ - tor_assert(onion_address != NULL || desc_id != NULL); - - if (cookie) { - memcpy(rend_data->descriptor_cookie, cookie, - sizeof(rend_data->descriptor_cookie)); - } - if (desc_id) { - memcpy(rend_data->desc_id_fetch, desc_id, - sizeof(rend_data->desc_id_fetch)); - } - if (onion_address) { - strlcpy(rend_data->onion_address, onion_address, - sizeof(rend_data->onion_address)); - if (compute_desc_id(rend_data) < 0) { - goto error; - } - } - - rend_data->auth_type = auth_type; - rend_data->hsdirs_fp = smartlist_new(); - - return rend_data; - - error: - rend_data_free(rend_data); - return NULL; -} - /** Determine the routers that are responsible for <b>id</b> (binary) and * add pointers to those routers' routerstatus_t to <b>responsible_dirs</b>. * Return -1 if we're returning an empty smartlist, else return 0. @@ -1116,3 +999,32 @@ assert_circ_anonymity_ok(origin_circuit_t *circ, } } +/* Return 1 iff the given <b>digest</b> of a permenanent hidden service key is + * equal to the digest in the origin circuit <b>ocirc</b> of its rend data . + * If the rend data doesn't exist, 0 is returned. This function is agnostic to + * the rend data version. */ +int +rend_circuit_pk_digest_eq(const origin_circuit_t *ocirc, + const uint8_t *digest) +{ + size_t rend_pk_digest_len; + const uint8_t *rend_pk_digest; + + tor_assert(ocirc); + tor_assert(digest); + + if (ocirc->rend_data == NULL) { + goto no_match; + } + + rend_pk_digest = rend_data_get_pk_digest(ocirc->rend_data, + &rend_pk_digest_len); + if (tor_memeq(rend_pk_digest, digest, rend_pk_digest_len)) { + goto match; + } + no_match: + return 0; + match: + return 1; +} + diff --git a/src/or/rendcommon.h b/src/or/rendcommon.h index 090e6f25e0..942ace5761 100644 --- a/src/or/rendcommon.h +++ b/src/or/rendcommon.h @@ -18,19 +18,6 @@ typedef enum rend_intro_point_failure_t { INTRO_POINT_FAILURE_UNREACHABLE = 2, } rend_intro_point_failure_t; -/** Free all storage associated with <b>data</b> */ -static inline void -rend_data_free(rend_data_t *data) -{ - if (!data) { - return; - } - /* Cleanup the HSDir identity digest. */ - SMARTLIST_FOREACH(data->hsdirs_fp, char *, d, tor_free(d)); - smartlist_free(data->hsdirs_fp); - tor_free(data); -} - int rend_cmp_service_ids(const char *one, const char *two); void rend_process_relay_cell(circuit_t *circ, const crypt_path_t *layer_hint, @@ -60,15 +47,8 @@ void rend_get_descriptor_id_bytes(char *descriptor_id_out, int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs, const char *id); -rend_data_t *rend_data_dup(const rend_data_t *data); -rend_data_t *rend_data_client_create(const char *onion_address, - const char *desc_id, - const char *cookie, - rend_auth_type_t auth_type); -rend_data_t *rend_data_service_create(const char *onion_address, - const char *pk_digest, - const uint8_t *cookie, - rend_auth_type_t auth_type); +int rend_circuit_pk_digest_eq(const origin_circuit_t *ocirc, + const uint8_t *digest); char *rend_auth_encode_cookie(const uint8_t *cookie_in, rend_auth_type_t auth_type); diff --git a/src/or/rendmid.c b/src/or/rendmid.c index ca0ad7b0d4..f39c92afae 100644 --- a/src/or/rendmid.c +++ b/src/or/rendmid.c @@ -106,7 +106,7 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request, RELAY_COMMAND_INTRO_ESTABLISHED, "", 0, NULL)<0) { log_info(LD_GENERAL, "Couldn't send INTRO_ESTABLISHED cell."); - goto err; + goto err_no_close; } /* Now, set up this circuit. */ @@ -122,8 +122,9 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request, log_warn(LD_PROTOCOL, "Rejecting truncated ESTABLISH_INTRO cell."); reason = END_CIRC_REASON_TORPROTOCOL; err: - if (pk) crypto_pk_free(pk); circuit_mark_for_close(TO_CIRCUIT(circ), reason); + err_no_close: + if (pk) crypto_pk_free(pk); return -1; } @@ -201,14 +202,15 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request, (char*)request, request_len, NULL)) { log_warn(LD_GENERAL, "Unable to send INTRODUCE2 cell to Tor client."); - goto err; + /* Stop right now, the circuit has been closed. */ + return -1; } /* And send an ack down the client's circuit. Empty body means succeeded. */ if (relay_send_command_from_edge(0,TO_CIRCUIT(circ), RELAY_COMMAND_INTRODUCE_ACK, NULL,0,NULL)) { log_warn(LD_GENERAL, "Unable to send INTRODUCE_ACK cell to Tor client."); - circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); + /* Stop right now, the circuit has been closed. */ return -1; } @@ -220,8 +222,6 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request, RELAY_COMMAND_INTRODUCE_ACK, nak_body, 1, NULL)) { log_warn(LD_GENERAL, "Unable to send NAK to Tor client."); - /* Is this right? */ - circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL); } return -1; } @@ -269,8 +269,8 @@ rend_mid_establish_rendezvous(or_circuit_t *circ, const uint8_t *request, RELAY_COMMAND_RENDEZVOUS_ESTABLISHED, "", 0, NULL)<0) { log_warn(LD_PROTOCOL, "Couldn't send RENDEZVOUS_ESTABLISHED cell."); - reason = END_CIRC_REASON_INTERNAL; - goto err; + /* Stop right now, the circuit has been closed. */ + return -1; } circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_REND_POINT_WAITING); @@ -346,7 +346,8 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request, log_warn(LD_GENERAL, "Unable to send RENDEZVOUS2 cell to client on circuit %u.", (unsigned)rend_circ->p_circ_id); - goto err; + /* Stop right now, the circuit has been closed. */ + return -1; } /* Join the circuits. */ diff --git a/src/or/rendservice.c b/src/or/rendservice.c index ab7ec3f5f1..0819d8a713 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -17,6 +17,7 @@ #include "config.h" #include "control.h" #include "directory.h" +#include "hs_common.h" #include "main.h" #include "networkstatus.h" #include "nodelist.h" @@ -72,6 +73,10 @@ static ssize_t rend_service_parse_intro_for_v3( size_t plaintext_len, char **err_msg_out); +static int rend_service_check_private_dir(const or_options_t *options, + const rend_service_t *s, + int create); + /** Represents the mapping from a virtual port of a rendezvous service to * a real port on some IP. */ @@ -116,12 +121,20 @@ static const char *hostname_fname = "hostname"; static const char *client_keys_fname = "client_keys"; static const char *sos_poison_fname = "onion_service_non_anonymous"; +/** Tells if onion service <b>s</b> is ephemeral. +*/ +static unsigned int +rend_service_is_ephemeral(const struct rend_service_t *s) +{ + return (s->directory == NULL); +} + /** Returns a escaped string representation of the service, <b>s</b>. */ static const char * rend_service_escaped_dir(const struct rend_service_t *s) { - return (s->directory) ? escaped(s->directory) : "[EPHEMERAL]"; + return rend_service_is_ephemeral(s) ? "[EPHEMERAL]" : escaped(s->directory); } /** A list of rend_service_t's for services run on this OP. @@ -273,7 +286,8 @@ rend_add_service(rend_service_t *service) * lock file. But this is enough to detect a simple mistake that * at least one person has actually made. */ - if (service->directory != NULL) { /* Skip dupe for ephemeral services. */ + if (!rend_service_is_ephemeral(service)) { + /* Skip dupe for ephemeral services. */ SMARTLIST_FOREACH(rend_service_list, rend_service_t*, ptr, dupe = dupe || !strcmp(ptr->directory, service->directory)); @@ -286,8 +300,8 @@ rend_add_service(rend_service_t *service) } } smartlist_add(rend_service_list, service); - log_debug(LD_REND,"Configuring service with directory \"%s\"", - service->directory); + log_debug(LD_REND,"Configuring service with directory %s", + rend_service_escaped_dir(service)); for (i = 0; i < smartlist_len(service->ports); ++i) { p = smartlist_get(service->ports, i); if (!(p->is_unix_addr)) { @@ -462,6 +476,11 @@ rend_config_services(const or_options_t *options, int validate_only) for (line = options->RendConfigLines; line; line = line->next) { if (!strcasecmp(line->key, "HiddenServiceDir")) { if (service) { /* register the one we just finished parsing */ + if (rend_service_check_private_dir(options, service, 0) < 0) { + rend_service_free(service); + return -1; + } + if (validate_only) rend_service_free(service); else @@ -504,7 +523,8 @@ rend_config_services(const or_options_t *options, int validate_only) } log_info(LD_CONFIG, "HiddenServiceAllowUnknownPorts=%d for %s", - (int)service->allow_unknown_ports, service->directory); + (int)service->allow_unknown_ports, + rend_service_escaped_dir(service)); } else if (!strcasecmp(line->key, "HiddenServiceDirGroupReadable")) { service->dir_group_readable = (int)tor_parse_long(line->value, @@ -518,7 +538,8 @@ rend_config_services(const or_options_t *options, int validate_only) } log_info(LD_CONFIG, "HiddenServiceDirGroupReadable=%d for %s", - service->dir_group_readable, service->directory); + service->dir_group_readable, + rend_service_escaped_dir(service)); } else if (!strcasecmp(line->key, "HiddenServiceMaxStreams")) { service->max_streams_per_circuit = (int)tor_parse_long(line->value, 10, 0, 65535, &ok, NULL); @@ -531,7 +552,8 @@ rend_config_services(const or_options_t *options, int validate_only) } log_info(LD_CONFIG, "HiddenServiceMaxStreams=%d for %s", - service->max_streams_per_circuit, service->directory); + service->max_streams_per_circuit, + rend_service_escaped_dir(service)); } else if (!strcasecmp(line->key, "HiddenServiceMaxStreamsCloseCircuit")) { service->max_streams_close_circuit = (int)tor_parse_long(line->value, 10, 0, 1, &ok, NULL); @@ -545,7 +567,8 @@ rend_config_services(const or_options_t *options, int validate_only) } log_info(LD_CONFIG, "HiddenServiceMaxStreamsCloseCircuit=%d for %s", - (int)service->max_streams_close_circuit, service->directory); + (int)service->max_streams_close_circuit, + rend_service_escaped_dir(service)); } else if (!strcasecmp(line->key, "HiddenServiceNumIntroductionPoints")) { service->n_intro_points_wanted = (unsigned int) tor_parse_long(line->value, 10, @@ -561,7 +584,8 @@ rend_config_services(const or_options_t *options, int validate_only) return -1; } log_info(LD_CONFIG, "HiddenServiceNumIntroductionPoints=%d for %s", - service->n_intro_points_wanted, service->directory); + service->n_intro_points_wanted, + rend_service_escaped_dir(service)); } else if (!strcasecmp(line->key, "HiddenServiceAuthorizeClient")) { /* Parse auth type and comma-separated list of client names and add a * rend_authorized_client_t for each client to the service's list @@ -672,12 +696,7 @@ rend_config_services(const or_options_t *options, int validate_only) } } if (service) { - cpd_check_t check_opts = CPD_CHECK_MODE_ONLY|CPD_CHECK; - if (service->dir_group_readable) { - check_opts |= CPD_GROUP_READ; - } - - if (check_private_dir(service->directory, check_opts, options->User) < 0) { + if (rend_service_check_private_dir(options, service, 0) < 0) { rend_service_free(service); return -1; } @@ -747,8 +766,7 @@ rend_config_services(const or_options_t *options, int validate_only) int keep_it = 0; tor_assert(oc->rend_data); SMARTLIST_FOREACH(surviving_services, rend_service_t *, ptr, { - if (tor_memeq(ptr->pk_digest, oc->rend_data->rend_pk_digest, - DIGEST_LEN)) { + if (rend_circuit_pk_digest_eq(oc, (uint8_t *) ptr->pk_digest)) { keep_it = 1; break; } @@ -758,7 +776,7 @@ rend_config_services(const or_options_t *options, int validate_only) log_info(LD_REND, "Closing intro point %s for service %s.", safe_str_client(extend_info_describe( oc->build_state->chosen_exit)), - oc->rend_data->onion_address); + rend_data_get_address(oc->rend_data)); circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); /* XXXX Is there another reason we should use here? */ } @@ -868,7 +886,7 @@ rend_service_del_ephemeral(const char *service_id) "removal."); return -1; } - if (s->directory) { + if (!rend_service_is_ephemeral(s)) { log_warn(LD_CONFIG, "Requested non-ephemeral Onion Service for removal."); return -1; } @@ -885,12 +903,13 @@ rend_service_del_ephemeral(const char *service_id) circ->purpose == CIRCUIT_PURPOSE_S_INTRO)) { origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(circ); tor_assert(oc->rend_data); - if (!tor_memeq(s->pk_digest, oc->rend_data->rend_pk_digest, DIGEST_LEN)) + if (!rend_circuit_pk_digest_eq(oc, (uint8_t *) s->pk_digest)) { continue; + } log_debug(LD_REND, "Closing intro point %s for service %s.", safe_str_client(extend_info_describe( oc->build_state->chosen_exit)), - oc->rend_data->onion_address); + rend_data_get_address(oc->rend_data)); circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED); } } SMARTLIST_FOREACH_END(circ); @@ -992,7 +1011,7 @@ service_is_single_onion_poisoned(const rend_service_t *service) char *poison_fname = NULL; file_status_t fstatus; - if (!service->directory) { + if (rend_service_is_ephemeral(service)) { return 0; } @@ -1001,7 +1020,9 @@ service_is_single_onion_poisoned(const rend_service_t *service) fstatus = file_status(poison_fname); tor_free(poison_fname); - /* If this fname is occupied, the hidden service has been poisoned. */ + /* If this fname is occupied, the hidden service has been poisoned. + * fstatus can be FN_ERROR if the service directory does not exist, in that + * case, there is obviously no private key. */ if (fstatus == FN_FILE || fstatus == FN_EMPTY) { return 1; } @@ -1017,7 +1038,9 @@ rend_service_private_key_exists(const rend_service_t *service) char *private_key_path = rend_service_path(service, private_key_fname); const file_status_t private_key_status = file_status(private_key_path); tor_free(private_key_path); - /* Only non-empty regular private key files could have been used before. */ + /* Only non-empty regular private key files could have been used before. + * fstatus can be FN_ERROR if the service directory does not exist, in that + * case, there is obviously no private key. */ return private_key_status == FN_FILE; } @@ -1078,7 +1101,7 @@ poison_new_single_onion_hidden_service_dir(const rend_service_t *service) int retval = -1; char *poison_fname = NULL; - if (!service->directory) { + if (rend_service_is_ephemeral(service)) { log_info(LD_REND, "Ephemeral HS started in non-anonymous mode."); return 0; } @@ -1090,6 +1113,10 @@ poison_new_single_onion_hidden_service_dir(const rend_service_t *service) return -1; } + /* Make sure the directory exists */ + if (rend_service_check_private_dir(get_options(), service, 1) < 0) + return -1; + poison_fname = rend_service_sos_poison_path(service); switch (file_status(poison_fname)) { @@ -1187,8 +1214,8 @@ rend_service_load_all_keys(const smartlist_t *service_list) SMARTLIST_FOREACH_BEGIN(s_list, rend_service_t *, s) { if (s->private_key) continue; - log_info(LD_REND, "Loading hidden-service keys from \"%s\"", - s->directory); + log_info(LD_REND, "Loading hidden-service keys from %s", + rend_service_escaped_dir(s)); if (rend_service_load_keys(s) < 0) return -1; @@ -1220,7 +1247,7 @@ rend_services_add_filenames_to_lists(smartlist_t *open_lst, if (!rend_service_list) return; SMARTLIST_FOREACH_BEGIN(rend_service_list, rend_service_t *, s) { - if (s->directory) { + if (!rend_service_is_ephemeral(s)) { rend_service_add_filenames_to_list(open_lst, s); smartlist_add_strdup(stat_lst, s->directory); } @@ -1245,6 +1272,37 @@ rend_service_derive_key_digests(struct rend_service_t *s) return 0; } +/** Make sure that the directory for <b>s</b> is private, using the config in + * <b>options</b>. + * If <b>create</b> is true: + * - if the directory exists, change permissions if needed, + * - if the directory does not exist, create it with the correct permissions. + * If <b>create</b> is false: + * - if the directory exists, check permissions, + * - if the directory does not exist, check if we think we can create it. + * Return 0 on success, -1 on failure. */ +static int +rend_service_check_private_dir(const or_options_t *options, + const rend_service_t *s, + int create) +{ + cpd_check_t check_opts = CPD_NONE; + if (create) { + check_opts |= CPD_CREATE; + } else { + check_opts |= CPD_CHECK_MODE_ONLY; + check_opts |= CPD_CHECK; + } + if (s->dir_group_readable) { + check_opts |= CPD_GROUP_READ; + } + /* Check/create directory */ + if (check_private_dir(s->directory, check_opts, options->User) < 0) { + return -1; + } + return 0; +} + /** Load and/or generate private keys for the hidden service <b>s</b>, * possibly including keys for client authorization. Return 0 on success, -1 * on failure. */ @@ -1253,23 +1311,9 @@ rend_service_load_keys(rend_service_t *s) { char *fname = NULL; char buf[128]; - cpd_check_t check_opts = CPD_CREATE; - if (s->dir_group_readable) { - check_opts |= CPD_GROUP_READ; - } - /* Check/create directory */ - if (check_private_dir(s->directory, check_opts, get_options()->User) < 0) { + if (rend_service_check_private_dir(get_options(), s, 1) < 0) goto err; - } -#ifndef _WIN32 - if (s->dir_group_readable) { - /* Only new dirs created get new opts, also enforce group read. */ - if (chmod(s->directory, 0750)) { - log_warn(LD_FS,"Unable to make %s group-readable.", s->directory); - } - } -#endif /* Load key */ fname = rend_service_path(s, private_key_fname); @@ -1634,7 +1678,7 @@ rend_service_receive_introduction(origin_circuit_t *circuit, const or_options_t *options = get_options(); char *err_msg = NULL; int err_msg_severity = LOG_WARN; - const char *stage_descr = NULL; + const char *stage_descr = NULL, *rend_pk_digest; int reason = END_CIRC_REASON_TORPROTOCOL; /* Service/circuit/key stuff we can learn before parsing */ char serviceid[REND_SERVICE_ID_LEN_BASE32+1]; @@ -1668,14 +1712,15 @@ rend_service_receive_introduction(origin_circuit_t *circuit, assert_circ_anonymity_ok(circuit, options); tor_assert(circuit->rend_data); + /* XXX: This is version 2 specific (only one supported). */ + rend_pk_digest = (char *) rend_data_get_pk_digest(circuit->rend_data, NULL); /* We'll use this in a bazillion log messages */ base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1, - circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN); + rend_pk_digest, REND_SERVICE_ID_LEN); /* look up service depending on circuit. */ - service = - rend_service_get_by_pk_digest(circuit->rend_data->rend_pk_digest); + service = rend_service_get_by_pk_digest(rend_pk_digest); if (!service) { log_warn(LD_BUG, "Internal error: Got an INTRODUCE2 cell on an intro " @@ -1898,8 +1943,7 @@ rend_service_receive_introduction(origin_circuit_t *circuit, /* Fill in the circuit's state. */ launched->rend_data = - rend_data_service_create(service->service_id, - circuit->rend_data->rend_pk_digest, + rend_data_service_create(service->service_id, rend_pk_digest, parsed_req->rc, service->auth_type); launched->build_state->service_pending_final_cpath_ref = @@ -2933,9 +2977,9 @@ count_intro_point_circuits(const rend_service_t *service) circ->purpose == CIRCUIT_PURPOSE_S_INTRO)) { origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(circ); if (oc->rend_data && - !rend_cmp_service_ids(service->service_id, - oc->rend_data->onion_address)) + rend_circuit_pk_digest_eq(oc, (uint8_t *) service->pk_digest)) { num_ipos++; + } } } SMARTLIST_FOREACH_END(circ); @@ -2955,17 +2999,19 @@ rend_service_intro_has_opened(origin_circuit_t *circuit) char auth[DIGEST_LEN + 9]; char serviceid[REND_SERVICE_ID_LEN_BASE32+1]; int reason = END_CIRC_REASON_TORPROTOCOL; + const char *rend_pk_digest; tor_assert(circuit->base_.purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO); assert_circ_anonymity_ok(circuit, get_options()); tor_assert(circuit->cpath); tor_assert(circuit->rend_data); + /* XXX: This is version 2 specific (only on supported). */ + rend_pk_digest = (char *) rend_data_get_pk_digest(circuit->rend_data, NULL); base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1, - circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN); + rend_pk_digest, REND_SERVICE_ID_LEN); - service = rend_service_get_by_pk_digest( - circuit->rend_data->rend_pk_digest); + service = rend_service_get_by_pk_digest(rend_pk_digest); if (!service) { log_warn(LD_REND, "Unrecognized service ID %s on introduction circuit %u.", safe_str_client(serviceid), (unsigned)circuit->base_.n_circ_id); @@ -3006,9 +3052,8 @@ rend_service_intro_has_opened(origin_circuit_t *circuit) circuit_change_purpose(TO_CIRCUIT(circuit), CIRCUIT_PURPOSE_C_GENERAL); { - rend_data_t *rend_data = circuit->rend_data; + rend_data_free(circuit->rend_data); circuit->rend_data = NULL; - rend_data_free(rend_data); } { crypto_pk_t *intro_key = circuit->intro_key; @@ -3060,8 +3105,7 @@ rend_service_intro_has_opened(origin_circuit_t *circuit) log_info(LD_GENERAL, "Couldn't send introduction request for service %s on circuit %u", serviceid, (unsigned)circuit->base_.n_circ_id); - reason = END_CIRC_REASON_INTERNAL; - goto err; + goto done; } /* We've attempted to use this circuit */ @@ -3092,15 +3136,17 @@ rend_service_intro_established(origin_circuit_t *circuit, char serviceid[REND_SERVICE_ID_LEN_BASE32+1]; (void) request; (void) request_len; + tor_assert(circuit->rend_data); + /* XXX: This is version 2 specific (only supported one for now). */ + const char *rend_pk_digest = + (char *) rend_data_get_pk_digest(circuit->rend_data, NULL); if (circuit->base_.purpose != CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) { log_warn(LD_PROTOCOL, "received INTRO_ESTABLISHED cell on non-intro circuit."); goto err; } - tor_assert(circuit->rend_data); - service = rend_service_get_by_pk_digest( - circuit->rend_data->rend_pk_digest); + service = rend_service_get_by_pk_digest(rend_pk_digest); if (!service) { log_warn(LD_REND, "Unknown service on introduction circuit %u.", (unsigned)circuit->base_.n_circ_id); @@ -3123,7 +3169,7 @@ rend_service_intro_established(origin_circuit_t *circuit, circuit_change_purpose(TO_CIRCUIT(circuit), CIRCUIT_PURPOSE_S_INTRO); base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32 + 1, - circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN); + rend_pk_digest, REND_SERVICE_ID_LEN); log_info(LD_REND, "Received INTRO_ESTABLISHED cell on circuit %u for service %s", (unsigned)circuit->base_.n_circ_id, serviceid); @@ -3150,6 +3196,7 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit) char serviceid[REND_SERVICE_ID_LEN_BASE32+1]; char hexcookie[9]; int reason; + const char *rend_cookie, *rend_pk_digest; tor_assert(circuit->base_.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND); tor_assert(circuit->cpath); @@ -3157,6 +3204,11 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit) assert_circ_anonymity_ok(circuit, get_options()); tor_assert(circuit->rend_data); + /* XXX: This is version 2 specific (only one supported). */ + rend_pk_digest = (char *) rend_data_get_pk_digest(circuit->rend_data, + NULL); + rend_cookie = circuit->rend_data->rend_cookie; + /* Declare the circuit dirty to avoid reuse, and for path-bias */ if (!circuit->base_.timestamp_dirty) circuit->base_.timestamp_dirty = time(NULL); @@ -3166,9 +3218,9 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit) hop = circuit->build_state->service_pending_final_cpath_ref->cpath; - base16_encode(hexcookie,9,circuit->rend_data->rend_cookie,4); + base16_encode(hexcookie,9, rend_cookie,4); base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1, - circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN); + rend_pk_digest, REND_SERVICE_ID_LEN); log_info(LD_REND, "Done building circuit %u to rendezvous with " @@ -3197,8 +3249,7 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit) circuit->build_state->pending_final_cpath = hop; circuit->build_state->service_pending_final_cpath_ref->cpath = NULL; - service = rend_service_get_by_pk_digest( - circuit->rend_data->rend_pk_digest); + service = rend_service_get_by_pk_digest(rend_pk_digest); if (!service) { log_warn(LD_GENERAL, "Internal error: unrecognized service ID on " "rendezvous circuit."); @@ -3207,7 +3258,7 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit) } /* All we need to do is send a RELAY_RENDEZVOUS1 cell... */ - memcpy(buf, circuit->rend_data->rend_cookie, REND_COOKIE_LEN); + memcpy(buf, rend_cookie, REND_COOKIE_LEN); if (crypto_dh_get_public(hop->rend_dh_handshake_state, buf+REND_COOKIE_LEN, DH_KEY_LEN)<0) { log_warn(LD_GENERAL,"Couldn't get DH public key."); @@ -3223,8 +3274,7 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit) buf, REND_COOKIE_LEN+DH_KEY_LEN+DIGEST_LEN, circuit->cpath->prev)<0) { log_warn(LD_GENERAL, "Couldn't send RENDEZVOUS1 cell."); - reason = END_CIRC_REASON_INTERNAL; - goto err; + goto done; } crypto_dh_free(hop->rend_dh_handshake_state); @@ -3271,8 +3321,8 @@ find_intro_circuit(rend_intro_point_t *intro, const char *pk_digest) origin_circuit_t *circ = NULL; tor_assert(intro); - while ((circ = circuit_get_next_by_pk_and_purpose(circ,pk_digest, - CIRCUIT_PURPOSE_S_INTRO))) { + while ((circ = circuit_get_next_by_pk_and_purpose(circ, + (uint8_t *) pk_digest, CIRCUIT_PURPOSE_S_INTRO))) { if (tor_memeq(circ->build_state->chosen_exit->identity_digest, intro->extend_info->identity_digest, DIGEST_LEN) && circ->rend_data) { @@ -3281,8 +3331,9 @@ find_intro_circuit(rend_intro_point_t *intro, const char *pk_digest) } circ = NULL; - while ((circ = circuit_get_next_by_pk_and_purpose(circ,pk_digest, - CIRCUIT_PURPOSE_S_ESTABLISH_INTRO))) { + while ((circ = circuit_get_next_by_pk_and_purpose(circ, + (uint8_t *) pk_digest, + CIRCUIT_PURPOSE_S_ESTABLISH_INTRO))) { if (tor_memeq(circ->build_state->chosen_exit->identity_digest, intro->extend_info->identity_digest, DIGEST_LEN) && circ->rend_data) { @@ -3321,7 +3372,7 @@ find_intro_point(origin_circuit_t *circ) tor_assert(TO_CIRCUIT(circ)->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO || TO_CIRCUIT(circ)->purpose == CIRCUIT_PURPOSE_S_INTRO); tor_assert(circ->rend_data); - serviceid = circ->rend_data->onion_address; + serviceid = rend_data_get_address(circ->rend_data); SMARTLIST_FOREACH(rend_service_list, rend_service_t *, s, if (tor_memeq(s->service_id, serviceid, REND_SERVICE_ID_LEN_BASE32)) { @@ -3706,10 +3757,13 @@ void rend_service_desc_has_uploaded(const rend_data_t *rend_data) { rend_service_t *service; + const char *onion_address; tor_assert(rend_data); - service = rend_service_get_by_service_id(rend_data->onion_address); + onion_address = rend_data_get_address(rend_data); + + service = rend_service_get_by_service_id(onion_address); if (service == NULL) { return; } @@ -4009,8 +4063,8 @@ rend_service_dump_stats(int severity) for (i=0; i < smartlist_len(rend_service_list); ++i) { service = smartlist_get(rend_service_list, i); - tor_log(severity, LD_GENERAL, "Service configured in \"%s\":", - service->directory); + tor_log(severity, LD_GENERAL, "Service configured in %s:", + rend_service_escaped_dir(service)); for (j=0; j < smartlist_len(service->intro_nodes); ++j) { intro = smartlist_get(service->intro_nodes, j); safe_name = safe_str_client(intro->extend_info->nickname); @@ -4096,14 +4150,16 @@ rend_service_set_connection_addr_port(edge_connection_t *conn, smartlist_t *matching_ports; rend_service_port_config_t *chosen_port; unsigned int warn_once = 0; + const char *rend_pk_digest; tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_S_REND_JOINED); tor_assert(circ->rend_data); log_debug(LD_REND,"beginning to hunt for addr/port"); + /* XXX: This is version 2 specific (only one supported). */ + rend_pk_digest = (char *) rend_data_get_pk_digest(circ->rend_data, NULL); base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1, - circ->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN); - service = rend_service_get_by_pk_digest( - circ->rend_data->rend_pk_digest); + rend_pk_digest, REND_SERVICE_ID_LEN); + service = rend_service_get_by_pk_digest(rend_pk_digest); if (!service) { log_warn(LD_REND, "Couldn't find any service associated with pk %s on " "rendezvous circuit %u; closing.", diff --git a/src/or/router.c b/src/or/router.c index e45f233634..79caf42a2a 100644 --- a/src/or/router.c +++ b/src/or/router.c @@ -2158,8 +2158,8 @@ router_build_fresh_descriptor(routerinfo_t **r, extrainfo_t **e) &ri->exit_policy); } ri->policy_is_reject_star = - policy_is_reject_star(ri->exit_policy, AF_INET) && - policy_is_reject_star(ri->exit_policy, AF_INET6); + policy_is_reject_star(ri->exit_policy, AF_INET, 1) && + policy_is_reject_star(ri->exit_policy, AF_INET6, 1); if (options->IPv6Exit) { char *p_tmp = policy_summarize(ri->exit_policy, AF_INET6); diff --git a/src/or/routerparse.c b/src/or/routerparse.c index 95bc6837b6..2cfd3fc58a 100644 --- a/src/or/routerparse.c +++ b/src/or/routerparse.c @@ -60,6 +60,7 @@ #include "circuitstats.h" #include "dirserv.h" #include "dirvote.h" +#include "parsecommon.h" #include "policies.h" #include "protover.h" #include "rendcommon.h" @@ -81,267 +82,6 @@ /****************************************************************************/ -/** Enumeration of possible token types. The ones starting with K_ correspond - * to directory 'keywords'. A_ is for an annotation, R or C is related to - * hidden services, ERR_ is an error in the tokenizing process, EOF_ is an - * end-of-file marker, and NIL_ is used to encode not-a-token. - */ -typedef enum { - K_ACCEPT = 0, - K_ACCEPT6, - K_DIRECTORY_SIGNATURE, - K_RECOMMENDED_SOFTWARE, - K_REJECT, - K_REJECT6, - K_ROUTER, - K_SIGNED_DIRECTORY, - K_SIGNING_KEY, - K_ONION_KEY, - K_ONION_KEY_NTOR, - K_ROUTER_SIGNATURE, - K_PUBLISHED, - K_RUNNING_ROUTERS, - K_ROUTER_STATUS, - K_PLATFORM, - K_PROTO, - K_OPT, - K_BANDWIDTH, - K_CONTACT, - K_NETWORK_STATUS, - K_UPTIME, - K_DIR_SIGNING_KEY, - K_FAMILY, - K_FINGERPRINT, - K_HIBERNATING, - K_READ_HISTORY, - K_WRITE_HISTORY, - K_NETWORK_STATUS_VERSION, - K_DIR_SOURCE, - K_DIR_OPTIONS, - K_CLIENT_VERSIONS, - K_SERVER_VERSIONS, - K_RECOMMENDED_CLIENT_PROTOCOLS, - K_RECOMMENDED_RELAY_PROTOCOLS, - K_REQUIRED_CLIENT_PROTOCOLS, - K_REQUIRED_RELAY_PROTOCOLS, - K_OR_ADDRESS, - K_ID, - K_P, - K_P6, - K_R, - K_A, - K_S, - K_V, - K_W, - K_M, - K_EXTRA_INFO, - K_EXTRA_INFO_DIGEST, - K_CACHES_EXTRA_INFO, - K_HIDDEN_SERVICE_DIR, - K_ALLOW_SINGLE_HOP_EXITS, - K_IPV6_POLICY, - K_ROUTER_SIG_ED25519, - K_IDENTITY_ED25519, - K_MASTER_KEY_ED25519, - K_ONION_KEY_CROSSCERT, - K_NTOR_ONION_KEY_CROSSCERT, - - K_DIRREQ_END, - K_DIRREQ_V2_IPS, - K_DIRREQ_V3_IPS, - K_DIRREQ_V2_REQS, - K_DIRREQ_V3_REQS, - K_DIRREQ_V2_SHARE, - K_DIRREQ_V3_SHARE, - K_DIRREQ_V2_RESP, - K_DIRREQ_V3_RESP, - K_DIRREQ_V2_DIR, - K_DIRREQ_V3_DIR, - K_DIRREQ_V2_TUN, - K_DIRREQ_V3_TUN, - K_ENTRY_END, - K_ENTRY_IPS, - K_CELL_END, - K_CELL_PROCESSED, - K_CELL_QUEUED, - K_CELL_TIME, - K_CELL_CIRCS, - K_EXIT_END, - K_EXIT_WRITTEN, - K_EXIT_READ, - K_EXIT_OPENED, - - K_DIR_KEY_CERTIFICATE_VERSION, - K_DIR_IDENTITY_KEY, - K_DIR_KEY_PUBLISHED, - K_DIR_KEY_EXPIRES, - K_DIR_KEY_CERTIFICATION, - K_DIR_KEY_CROSSCERT, - K_DIR_ADDRESS, - K_DIR_TUNNELLED, - - K_VOTE_STATUS, - K_VALID_AFTER, - K_FRESH_UNTIL, - K_VALID_UNTIL, - K_VOTING_DELAY, - - K_KNOWN_FLAGS, - K_PARAMS, - K_BW_WEIGHTS, - K_VOTE_DIGEST, - K_CONSENSUS_DIGEST, - K_ADDITIONAL_DIGEST, - K_ADDITIONAL_SIGNATURE, - K_CONSENSUS_METHODS, - K_CONSENSUS_METHOD, - K_LEGACY_DIR_KEY, - K_DIRECTORY_FOOTER, - K_SIGNING_CERT_ED, - K_SR_FLAG, - K_COMMIT, - K_PREVIOUS_SRV, - K_CURRENT_SRV, - K_PACKAGE, - - A_PURPOSE, - A_LAST_LISTED, - A_UNKNOWN_, - - R_RENDEZVOUS_SERVICE_DESCRIPTOR, - R_VERSION, - R_PERMANENT_KEY, - R_SECRET_ID_PART, - R_PUBLICATION_TIME, - R_PROTOCOL_VERSIONS, - R_INTRODUCTION_POINTS, - R_SIGNATURE, - - R_IPO_IDENTIFIER, - R_IPO_IP_ADDRESS, - R_IPO_ONION_PORT, - R_IPO_ONION_KEY, - R_IPO_SERVICE_KEY, - - C_CLIENT_NAME, - C_DESCRIPTOR_COOKIE, - C_CLIENT_KEY, - - ERR_, - EOF_, - NIL_ -} directory_keyword; - -#define MIN_ANNOTATION A_PURPOSE -#define MAX_ANNOTATION A_UNKNOWN_ - -/** Structure to hold a single directory token. - * - * We parse a directory by breaking it into "tokens", each consisting - * of a keyword, a line full of arguments, and a binary object. The - * arguments and object are both optional, depending on the keyword - * type. - * - * This structure is only allocated in memareas; do not allocate it on - * the heap, or token_clear() won't work. - */ -typedef struct directory_token_t { - directory_keyword tp; /**< Type of the token. */ - int n_args:30; /**< Number of elements in args */ - char **args; /**< Array of arguments from keyword line. */ - - char *object_type; /**< -----BEGIN [object_type]-----*/ - size_t object_size; /**< Bytes in object_body */ - char *object_body; /**< Contents of object, base64-decoded. */ - - crypto_pk_t *key; /**< For public keys only. Heap-allocated. */ - - char *error; /**< For ERR_ tokens only. */ -} directory_token_t; - -/* ********************************************************************** */ - -/** We use a table of rules to decide how to parse each token type. */ - -/** Rules for whether the keyword needs an object. */ -typedef enum { - NO_OBJ, /**< No object, ever. */ - NEED_OBJ, /**< Object is required. */ - NEED_SKEY_1024,/**< Object is required, and must be a 1024 bit private key */ - NEED_KEY_1024, /**< Object is required, and must be a 1024 bit public key */ - NEED_KEY, /**< Object is required, and must be a public key. */ - OBJ_OK, /**< Object is optional. */ -} obj_syntax; - -#define AT_START 1 -#define AT_END 2 - -/** Determines the parsing rules for a single token type. */ -typedef struct token_rule_t { - /** The string value of the keyword identifying the type of item. */ - const char *t; - /** The corresponding directory_keyword enum. */ - directory_keyword v; - /** Minimum number of arguments for this item */ - int min_args; - /** Maximum number of arguments for this item */ - int max_args; - /** If true, we concatenate all arguments for this item into a single - * string. */ - int concat_args; - /** Requirements on object syntax for this item. */ - obj_syntax os; - /** Lowest number of times this item may appear in a document. */ - int min_cnt; - /** Highest number of times this item may appear in a document. */ - int max_cnt; - /** One or more of AT_START/AT_END to limit where the item may appear in a - * document. */ - int pos; - /** True iff this token is an annotation. */ - int is_annotation; -} token_rule_t; - -/** - * @name macros for defining token rules - * - * Helper macros to define token tables. 's' is a string, 't' is a - * directory_keyword, 'a' is a trio of argument multiplicities, and 'o' is an - * object syntax. - */ -/**@{*/ - -/** Appears to indicate the end of a table. */ -#define END_OF_TABLE { NULL, NIL_, 0,0,0, NO_OBJ, 0, INT_MAX, 0, 0 } -/** An item with no restrictions: used for obsolete document types */ -#define T(s,t,a,o) { s, t, a, o, 0, INT_MAX, 0, 0 } -/** An item with no restrictions on multiplicity or location. */ -#define T0N(s,t,a,o) { s, t, a, o, 0, INT_MAX, 0, 0 } -/** An item that must appear exactly once */ -#define T1(s,t,a,o) { s, t, a, o, 1, 1, 0, 0 } -/** An item that must appear exactly once, at the start of the document */ -#define T1_START(s,t,a,o) { s, t, a, o, 1, 1, AT_START, 0 } -/** An item that must appear exactly once, at the end of the document */ -#define T1_END(s,t,a,o) { s, t, a, o, 1, 1, AT_END, 0 } -/** An item that must appear one or more times */ -#define T1N(s,t,a,o) { s, t, a, o, 1, INT_MAX, 0, 0 } -/** An item that must appear no more than once */ -#define T01(s,t,a,o) { s, t, a, o, 0, 1, 0, 0 } -/** An annotation that must appear no more than once */ -#define A01(s,t,a,o) { s, t, a, o, 0, 1, 0, 1 } - -/** Argument multiplicity: any number of arguments. */ -#define ARGS 0,INT_MAX,0 -/** Argument multiplicity: no arguments. */ -#define NO_ARGS 0,0,0 -/** Argument multiplicity: concatenate all arguments. */ -#define CONCAT_ARGS 1,1,1 -/** Argument multiplicity: at least <b>n</b> arguments. */ -#define GE(n) n,INT_MAX,0 -/** Argument multiplicity: exactly <b>n</b> arguments. */ -#define EQ(n) n,n,0 -/**@}*/ - /** List of tokens recognized in router descriptors */ static token_rule_t routerdesc_token_table[] = { T0N("reject", K_REJECT, ARGS, NO_OBJ ), @@ -628,28 +368,8 @@ static int router_get_hashes_impl(const char *s, size_t s_len, common_digests_t *digests, const char *start_str, const char *end_str, char end_char); -static void token_clear(directory_token_t *tok); -static smartlist_t *find_all_by_keyword(smartlist_t *s, directory_keyword k); static smartlist_t *find_all_exitpolicy(smartlist_t *s); -static directory_token_t *find_by_keyword_(smartlist_t *s, - directory_keyword keyword, - const char *keyword_str); -#define find_by_keyword(s, keyword) find_by_keyword_((s), (keyword), #keyword) -static directory_token_t *find_opt_by_keyword(smartlist_t *s, - directory_keyword keyword); - -#define TS_ANNOTATIONS_OK 1 -#define TS_NOCHECK 2 -#define TS_NO_NEW_ANNOTATIONS 4 -static int tokenize_string(memarea_t *area, - const char *start, const char *end, - smartlist_t *out, - token_rule_t *table, - int flags); -static directory_token_t *get_next_token(memarea_t *area, - const char **s, - const char *eos, - token_rule_t *table); + #define CST_CHECK_AUTHORITY (1<<0) #define CST_NO_CHECK_OBJTYPE (1<<1) static int check_signature_token(const char *digest, @@ -2204,7 +1924,7 @@ router_parse_entry_from_string(const char *s, const char *end, } } - if (policy_is_reject_star(router->exit_policy, AF_INET) && + if (policy_is_reject_star(router->exit_policy, AF_INET, 1) && (!router->ipv6_exit_policy || short_policy_is_reject_star(router->ipv6_exit_policy))) router->policy_is_reject_star = 1; @@ -4740,445 +4460,6 @@ assert_addr_policy_ok(smartlist_t *lst) }); } -/* - * Low-level tokenizer for router descriptors and directories. - */ - -/** Free all resources allocated for <b>tok</b> */ -static void -token_clear(directory_token_t *tok) -{ - if (tok->key) - crypto_pk_free(tok->key); -} - -#define ALLOC_ZERO(sz) memarea_alloc_zero(area,sz) -#define ALLOC(sz) memarea_alloc(area,sz) -#define STRDUP(str) memarea_strdup(area,str) -#define STRNDUP(str,n) memarea_strndup(area,(str),(n)) - -#define RET_ERR(msg) \ - STMT_BEGIN \ - if (tok) token_clear(tok); \ - tok = ALLOC_ZERO(sizeof(directory_token_t)); \ - tok->tp = ERR_; \ - tok->error = STRDUP(msg); \ - goto done_tokenizing; \ - STMT_END - -/** Helper: make sure that the token <b>tok</b> with keyword <b>kwd</b> obeys - * the object syntax of <b>o_syn</b>. Allocate all storage in <b>area</b>. - * Return <b>tok</b> on success, or a new ERR_ token if the token didn't - * conform to the syntax we wanted. - **/ -static inline directory_token_t * -token_check_object(memarea_t *area, const char *kwd, - directory_token_t *tok, obj_syntax o_syn) -{ - char ebuf[128]; - switch (o_syn) { - case NO_OBJ: - /* No object is allowed for this token. */ - if (tok->object_body) { - tor_snprintf(ebuf, sizeof(ebuf), "Unexpected object for %s", kwd); - RET_ERR(ebuf); - } - if (tok->key) { - tor_snprintf(ebuf, sizeof(ebuf), "Unexpected public key for %s", kwd); - RET_ERR(ebuf); - } - break; - case NEED_OBJ: - /* There must be a (non-key) object. */ - if (!tok->object_body) { - tor_snprintf(ebuf, sizeof(ebuf), "Missing object for %s", kwd); - RET_ERR(ebuf); - } - break; - case NEED_KEY_1024: /* There must be a 1024-bit public key. */ - case NEED_SKEY_1024: /* There must be a 1024-bit private key. */ - if (tok->key && crypto_pk_num_bits(tok->key) != PK_BYTES*8) { - tor_snprintf(ebuf, sizeof(ebuf), "Wrong size on key for %s: %d bits", - kwd, crypto_pk_num_bits(tok->key)); - RET_ERR(ebuf); - } - /* fall through */ - case NEED_KEY: /* There must be some kind of key. */ - if (!tok->key) { - tor_snprintf(ebuf, sizeof(ebuf), "Missing public key for %s", kwd); - RET_ERR(ebuf); - } - if (o_syn != NEED_SKEY_1024) { - if (crypto_pk_key_is_private(tok->key)) { - tor_snprintf(ebuf, sizeof(ebuf), - "Private key given for %s, which wants a public key", kwd); - RET_ERR(ebuf); - } - } else { /* o_syn == NEED_SKEY_1024 */ - if (!crypto_pk_key_is_private(tok->key)) { - tor_snprintf(ebuf, sizeof(ebuf), - "Public key given for %s, which wants a private key", kwd); - RET_ERR(ebuf); - } - } - break; - case OBJ_OK: - /* Anything goes with this token. */ - break; - } - - done_tokenizing: - return tok; -} - -/** Helper: parse space-separated arguments from the string <b>s</b> ending at - * <b>eol</b>, and store them in the args field of <b>tok</b>. Store the - * number of parsed elements into the n_args field of <b>tok</b>. Allocate - * all storage in <b>area</b>. Return the number of arguments parsed, or - * return -1 if there was an insanely high number of arguments. */ -static inline int -get_token_arguments(memarea_t *area, directory_token_t *tok, - const char *s, const char *eol) -{ -/** Largest number of arguments we'll accept to any token, ever. */ -#define MAX_ARGS 512 - char *mem = memarea_strndup(area, s, eol-s); - char *cp = mem; - int j = 0; - char *args[MAX_ARGS]; - while (*cp) { - if (j == MAX_ARGS) - return -1; - args[j++] = cp; - cp = (char*)find_whitespace(cp); - if (!cp || !*cp) - break; /* End of the line. */ - *cp++ = '\0'; - cp = (char*)eat_whitespace(cp); - } - tok->n_args = j; - tok->args = memarea_memdup(area, args, j*sizeof(char*)); - return j; -#undef MAX_ARGS -} - -/** Helper function: read the next token from *s, advance *s to the end of the - * token, and return the parsed token. Parse *<b>s</b> according to the list - * of tokens in <b>table</b>. - */ -static directory_token_t * -get_next_token(memarea_t *area, - const char **s, const char *eos, token_rule_t *table) -{ - /** Reject any object at least this big; it is probably an overflow, an - * attack, a bug, or some other nonsense. */ -#define MAX_UNPARSED_OBJECT_SIZE (128*1024) - /** Reject any line at least this big; it is probably an overflow, an - * attack, a bug, or some other nonsense. */ -#define MAX_LINE_LENGTH (128*1024) - - const char *next, *eol, *obstart; - size_t obname_len; - int i; - directory_token_t *tok; - obj_syntax o_syn = NO_OBJ; - char ebuf[128]; - const char *kwd = ""; - - tor_assert(area); - tok = ALLOC_ZERO(sizeof(directory_token_t)); - tok->tp = ERR_; - - /* Set *s to first token, eol to end-of-line, next to after first token */ - *s = eat_whitespace_eos(*s, eos); /* eat multi-line whitespace */ - tor_assert(eos >= *s); - eol = memchr(*s, '\n', eos-*s); - if (!eol) - eol = eos; - if (eol - *s > MAX_LINE_LENGTH) { - RET_ERR("Line far too long"); - } - - next = find_whitespace_eos(*s, eol); - - if (!strcmp_len(*s, "opt", next-*s)) { - /* Skip past an "opt" at the start of the line. */ - *s = eat_whitespace_eos_no_nl(next, eol); - next = find_whitespace_eos(*s, eol); - } else if (*s == eos) { /* If no "opt", and end-of-line, line is invalid */ - RET_ERR("Unexpected EOF"); - } - - /* Search the table for the appropriate entry. (I tried a binary search - * instead, but it wasn't any faster.) */ - for (i = 0; table[i].t ; ++i) { - if (!strcmp_len(*s, table[i].t, next-*s)) { - /* We've found the keyword. */ - kwd = table[i].t; - tok->tp = table[i].v; - o_syn = table[i].os; - *s = eat_whitespace_eos_no_nl(next, eol); - /* We go ahead whether there are arguments or not, so that tok->args is - * always set if we want arguments. */ - if (table[i].concat_args) { - /* The keyword takes the line as a single argument */ - tok->args = ALLOC(sizeof(char*)); - tok->args[0] = STRNDUP(*s,eol-*s); /* Grab everything on line */ - tok->n_args = 1; - } else { - /* This keyword takes multiple arguments. */ - if (get_token_arguments(area, tok, *s, eol)<0) { - tor_snprintf(ebuf, sizeof(ebuf),"Far too many arguments to %s", kwd); - RET_ERR(ebuf); - } - *s = eol; - } - if (tok->n_args < table[i].min_args) { - tor_snprintf(ebuf, sizeof(ebuf), "Too few arguments to %s", kwd); - RET_ERR(ebuf); - } else if (tok->n_args > table[i].max_args) { - tor_snprintf(ebuf, sizeof(ebuf), "Too many arguments to %s", kwd); - RET_ERR(ebuf); - } - break; - } - } - - if (tok->tp == ERR_) { - /* No keyword matched; call it an "K_opt" or "A_unrecognized" */ - if (**s == '@') - tok->tp = A_UNKNOWN_; - else - tok->tp = K_OPT; - tok->args = ALLOC(sizeof(char*)); - tok->args[0] = STRNDUP(*s, eol-*s); - tok->n_args = 1; - o_syn = OBJ_OK; - } - - /* Check whether there's an object present */ - *s = eat_whitespace_eos(eol, eos); /* Scan from end of first line */ - tor_assert(eos >= *s); - eol = memchr(*s, '\n', eos-*s); - if (!eol || eol-*s<11 || strcmpstart(*s, "-----BEGIN ")) /* No object. */ - goto check_object; - - obstart = *s; /* Set obstart to start of object spec */ - if (*s+16 >= eol || memchr(*s+11,'\0',eol-*s-16) || /* no short lines, */ - strcmp_len(eol-5, "-----", 5) || /* nuls or invalid endings */ - (eol-*s) > MAX_UNPARSED_OBJECT_SIZE) { /* name too long */ - RET_ERR("Malformed object: bad begin line"); - } - tok->object_type = STRNDUP(*s+11, eol-*s-16); - obname_len = eol-*s-16; /* store objname length here to avoid a strlen() */ - *s = eol+1; /* Set *s to possible start of object data (could be eos) */ - - /* Go to the end of the object */ - next = tor_memstr(*s, eos-*s, "-----END "); - if (!next) { - RET_ERR("Malformed object: missing object end line"); - } - tor_assert(eos >= next); - eol = memchr(next, '\n', eos-next); - if (!eol) /* end-of-line marker, or eos if there's no '\n' */ - eol = eos; - /* Validate the ending tag, which should be 9 + NAME + 5 + eol */ - if ((size_t)(eol-next) != 9+obname_len+5 || - strcmp_len(next+9, tok->object_type, obname_len) || - strcmp_len(eol-5, "-----", 5)) { - tor_snprintf(ebuf, sizeof(ebuf), "Malformed object: mismatched end tag %s", - tok->object_type); - ebuf[sizeof(ebuf)-1] = '\0'; - RET_ERR(ebuf); - } - if (next - *s > MAX_UNPARSED_OBJECT_SIZE) - RET_ERR("Couldn't parse object: missing footer or object much too big."); - - if (!strcmp(tok->object_type, "RSA PUBLIC KEY")) { /* If it's a public key */ - tok->key = crypto_pk_new(); - if (crypto_pk_read_public_key_from_string(tok->key, obstart, eol-obstart)) - RET_ERR("Couldn't parse public key."); - } else if (!strcmp(tok->object_type, "RSA PRIVATE KEY")) { /* private key */ - tok->key = crypto_pk_new(); - if (crypto_pk_read_private_key_from_string(tok->key, obstart, eol-obstart)) - RET_ERR("Couldn't parse private key."); - } else { /* If it's something else, try to base64-decode it */ - int r; - tok->object_body = ALLOC(next-*s); /* really, this is too much RAM. */ - r = base64_decode(tok->object_body, next-*s, *s, next-*s); - if (r<0) - RET_ERR("Malformed object: bad base64-encoded data"); - tok->object_size = r; - } - *s = eol; - - check_object: - tok = token_check_object(area, kwd, tok, o_syn); - - done_tokenizing: - return tok; - -#undef RET_ERR -#undef ALLOC -#undef ALLOC_ZERO -#undef STRDUP -#undef STRNDUP -} - -/** Read all tokens from a string between <b>start</b> and <b>end</b>, and add - * them to <b>out</b>. Parse according to the token rules in <b>table</b>. - * Caller must free tokens in <b>out</b>. If <b>end</b> is NULL, use the - * entire string. - */ -static int -tokenize_string(memarea_t *area, - const char *start, const char *end, smartlist_t *out, - token_rule_t *table, int flags) -{ - const char **s; - directory_token_t *tok = NULL; - int counts[NIL_]; - int i; - int first_nonannotation; - int prev_len = smartlist_len(out); - tor_assert(area); - - s = &start; - if (!end) { - end = start+strlen(start); - } else { - /* it's only meaningful to check for nuls if we got an end-of-string ptr */ - if (memchr(start, '\0', end-start)) { - log_warn(LD_DIR, "parse error: internal NUL character."); - return -1; - } - } - for (i = 0; i < NIL_; ++i) - counts[i] = 0; - - SMARTLIST_FOREACH(out, const directory_token_t *, t, ++counts[t->tp]); - - while (*s < end && (!tok || tok->tp != EOF_)) { - tok = get_next_token(area, s, end, table); - if (tok->tp == ERR_) { - log_warn(LD_DIR, "parse error: %s", tok->error); - token_clear(tok); - return -1; - } - ++counts[tok->tp]; - smartlist_add(out, tok); - *s = eat_whitespace_eos(*s, end); - } - - if (flags & TS_NOCHECK) - return 0; - - if ((flags & TS_ANNOTATIONS_OK)) { - first_nonannotation = -1; - for (i = 0; i < smartlist_len(out); ++i) { - tok = smartlist_get(out, i); - if (tok->tp < MIN_ANNOTATION || tok->tp > MAX_ANNOTATION) { - first_nonannotation = i; - break; - } - } - if (first_nonannotation < 0) { - log_warn(LD_DIR, "parse error: item contains only annotations"); - return -1; - } - for (i=first_nonannotation; i < smartlist_len(out); ++i) { - tok = smartlist_get(out, i); - if (tok->tp >= MIN_ANNOTATION && tok->tp <= MAX_ANNOTATION) { - log_warn(LD_DIR, "parse error: Annotations mixed with keywords"); - return -1; - } - } - if ((flags & TS_NO_NEW_ANNOTATIONS)) { - if (first_nonannotation != prev_len) { - log_warn(LD_DIR, "parse error: Unexpected annotations."); - return -1; - } - } - } else { - for (i=0; i < smartlist_len(out); ++i) { - tok = smartlist_get(out, i); - if (tok->tp >= MIN_ANNOTATION && tok->tp <= MAX_ANNOTATION) { - log_warn(LD_DIR, "parse error: no annotations allowed."); - return -1; - } - } - first_nonannotation = 0; - } - for (i = 0; table[i].t; ++i) { - if (counts[table[i].v] < table[i].min_cnt) { - log_warn(LD_DIR, "Parse error: missing %s element.", table[i].t); - return -1; - } - if (counts[table[i].v] > table[i].max_cnt) { - log_warn(LD_DIR, "Parse error: too many %s elements.", table[i].t); - return -1; - } - if (table[i].pos & AT_START) { - if (smartlist_len(out) < 1 || - (tok = smartlist_get(out, first_nonannotation))->tp != table[i].v) { - log_warn(LD_DIR, "Parse error: first item is not %s.", table[i].t); - return -1; - } - } - if (table[i].pos & AT_END) { - if (smartlist_len(out) < 1 || - (tok = smartlist_get(out, smartlist_len(out)-1))->tp != table[i].v) { - log_warn(LD_DIR, "Parse error: last item is not %s.", table[i].t); - return -1; - } - } - } - return 0; -} - -/** Find the first token in <b>s</b> whose keyword is <b>keyword</b>; return - * NULL if no such keyword is found. - */ -static directory_token_t * -find_opt_by_keyword(smartlist_t *s, directory_keyword keyword) -{ - SMARTLIST_FOREACH(s, directory_token_t *, t, if (t->tp == keyword) return t); - return NULL; -} - -/** Find the first token in <b>s</b> whose keyword is <b>keyword</b>; fail - * with an assert if no such keyword is found. - */ -static directory_token_t * -find_by_keyword_(smartlist_t *s, directory_keyword keyword, - const char *keyword_as_string) -{ - directory_token_t *tok = find_opt_by_keyword(s, keyword); - if (PREDICT_UNLIKELY(!tok)) { - log_err(LD_BUG, "Missing %s [%d] in directory object that should have " - "been validated. Internal error.", keyword_as_string, (int)keyword); - tor_assert(tok); - } - return tok; -} - -/** If there are any directory_token_t entries in <b>s</b> whose keyword is - * <b>k</b>, return a newly allocated smartlist_t containing all such entries, - * in the same order in which they occur in <b>s</b>. Otherwise return - * NULL. */ -static smartlist_t * -find_all_by_keyword(smartlist_t *s, directory_keyword k) -{ - smartlist_t *out = NULL; - SMARTLIST_FOREACH(s, directory_token_t *, t, - if (t->tp == k) { - if (!out) - out = smartlist_new(); - smartlist_add(out, t); - }); - return out; -} - /** Return a newly allocated smartlist of all accept or reject tokens in * <b>s</b>. */ diff --git a/src/or/torcert.h b/src/or/torcert.h index f7ca0ff521..4bd816f4a4 100644 --- a/src/or/torcert.h +++ b/src/or/torcert.h @@ -6,12 +6,15 @@ #include "crypto_ed25519.h" -#define SIGNED_KEY_TYPE_ED25519 0x01 - -#define CERT_TYPE_ID_SIGNING 0x04 -#define CERT_TYPE_SIGNING_LINK 0x05 -#define CERT_TYPE_SIGNING_AUTH 0x06 -#define CERT_TYPE_ONION_ID 0x0A +#define SIGNED_KEY_TYPE_ED25519 0x01 + +#define CERT_TYPE_ID_SIGNING 0x04 +#define CERT_TYPE_SIGNING_LINK 0x05 +#define CERT_TYPE_SIGNING_AUTH 0x06 +#define CERT_TYPE_SIGNING_HS_DESC 0x08 +#define CERT_TYPE_AUTH_HS_IP_KEY 0x09 +#define CERT_TYPE_ONION_ID 0x0A +#define CERT_TYPE_CROSS_HS_IP_KEYS 0x0B #define CERT_FLAG_INCLUDE_SIGNING_KEY 0x1 diff --git a/src/test/include.am b/src/test/include.am index 4af48cfbc1..f6e43148f0 100644 --- a/src/test/include.am +++ b/src/test/include.am @@ -97,6 +97,8 @@ src_test_test_SOURCES = \ src/test/test_extorport.c \ src/test/test_hs.c \ src/test/test_handles.c \ + src/test/test_hs_cache.c \ + src/test/test_hs_descriptor.c \ src/test/test_introduce.c \ src/test/test_keypin.c \ src/test/test_link_handshake.c \ diff --git a/src/test/test.c b/src/test/test.c index 9a41b976b8..b02ecb922d 100644 --- a/src/test/test.c +++ b/src/test/test.c @@ -1205,6 +1205,8 @@ struct testgroup_t testgroups[] = { { "guardfraction/", guardfraction_tests }, { "extorport/", extorport_tests }, { "hs/", hs_tests }, + { "hs_cache/", hs_cache }, + { "hs_descriptor/", hs_descriptor }, { "introduce/", introduce_tests }, { "keypin/", keypin_tests }, { "link-handshake/", link_handshake_tests }, diff --git a/src/test/test.h b/src/test/test.h index b7c769fe0d..49b4499594 100644 --- a/src/test/test.h +++ b/src/test/test.h @@ -73,6 +73,7 @@ {print_ = (I64_PRINTF_TYPE) value_;}, {}, TT_EXIT_TEST_FUNCTION) const char *get_fname(const char *name); +const char *get_fname_rnd(const char *name); struct crypto_pk_t *pk_generate(int idx); void init_pregenerated_keys(void); void free_pregenerated_keys(void); @@ -198,6 +199,8 @@ extern struct testcase_t entrynodes_tests[]; extern struct testcase_t guardfraction_tests[]; extern struct testcase_t extorport_tests[]; extern struct testcase_t hs_tests[]; +extern struct testcase_t hs_cache[]; +extern struct testcase_t hs_descriptor[]; extern struct testcase_t introduce_tests[]; extern struct testcase_t keypin_tests[]; extern struct testcase_t link_handshake_tests[]; diff --git a/src/test/test_channel.c b/src/test/test_channel.c index a9e0634d9e..e87f99ef50 100644 --- a/src/test/test_channel.c +++ b/src/test/test_channel.c @@ -1405,10 +1405,14 @@ test_channel_queue_impossible(void *arg) /* Let it drain and check that the bad entry is discarded */ test_chan_accept_cells = 1; + tor_capture_bugs_(1); channel_change_state(ch, CHANNEL_STATE_OPEN); tt_assert(test_cells_written == old_count); tt_int_op(chan_cell_queue_len(&(ch->outgoing_queue)), ==, 0); + tt_int_op(smartlist_len(tor_get_captured_bug_log_()), ==, 1); + tor_end_capture_bugs_(); + done: free_fake_channel(ch); diff --git a/src/test/test_connection.c b/src/test/test_connection.c index d394fc9852..5cda4f3175 100644 --- a/src/test/test_connection.c +++ b/src/test/test_connection.c @@ -10,6 +10,7 @@ #include "test.h" #include "connection.h" +#include "hs_common.h" #include "main.h" #include "microdesc.h" #include "networkstatus.h" @@ -265,13 +266,9 @@ test_conn_get_rend_setup(const struct testcase_t *tc) rend_cache_init(); /* TODO: use directory_initiate_command_rend() to do this - maybe? */ - conn->rend_data = tor_malloc_zero(sizeof(rend_data_t)); tor_assert(strlen(TEST_CONN_REND_ADDR) == REND_SERVICE_ID_LEN_BASE32); - memcpy(conn->rend_data->onion_address, - TEST_CONN_REND_ADDR, - REND_SERVICE_ID_LEN_BASE32+1); - conn->rend_data->hsdirs_fp = smartlist_new(); - + conn->rend_data = rend_data_client_create(TEST_CONN_REND_ADDR, NULL, NULL, + REND_NO_AUTH); assert_connection_ok(&conn->base_, time(NULL)); return conn; @@ -551,7 +548,8 @@ test_conn_get_rend(void *arg) tt_assert(connection_get_by_type_state_rendquery( conn->base_.type, conn->base_.state, - conn->rend_data->onion_address) + rend_data_get_address( + conn->rend_data)) == TO_CONN(conn)); tt_assert(connection_get_by_type_state_rendquery( TEST_CONN_TYPE, diff --git a/src/test/test_dir.c b/src/test/test_dir.c index cf0b94c574..6f83ceff00 100644 --- a/src/test/test_dir.c +++ b/src/test/test_dir.c @@ -3935,8 +3935,8 @@ test_dir_download_status_random_backoff(void *arg) tt_int_op(increment, OP_GE, min_delay); tt_int_op(increment, OP_LE, max_delay); tt_int_op(increment, OP_GE, old_increment); - /* We at most double, and maybe add one */ - tt_int_op(increment, OP_LE, 2 * old_increment + 1); + /* We at most quadruple, and maybe add one */ + tt_int_op(increment, OP_LE, 4 * old_increment + 1); /* Advance */ current_time += increment; @@ -4041,14 +4041,14 @@ test_dir_download_status_increment(void *arg) current_time + delay1 + 10, 0) == 0); - /* Check that failure increments don't happen on 503 for clients, but that - * attempt increments do. */ + /* Check that failure increments do happen on 503 for clients, and + * attempt increments do too. */ mock_get_options_calls = 0; next_at = download_status_increment_failure(&dls_failure, 503, "test", 0, current_time); - tt_assert(next_at == current_time + delay1); - tt_assert(download_status_get_n_failures(&dls_failure) == 1); - tt_assert(download_status_get_n_attempts(&dls_failure) == 2); + tt_i64_op(next_at, ==, current_time + delay2); + tt_int_op(download_status_get_n_failures(&dls_failure), ==, 2); + tt_int_op(download_status_get_n_attempts(&dls_failure), ==, 2); tt_assert(mock_get_options_calls >= 1); /* Check that failure increments do happen on 503 for servers */ @@ -4056,7 +4056,7 @@ test_dir_download_status_increment(void *arg) next_at = download_status_increment_failure(&dls_failure, 503, "test", 1, current_time); tt_assert(next_at == current_time + delay2); - tt_assert(download_status_get_n_failures(&dls_failure) == 2); + tt_assert(download_status_get_n_failures(&dls_failure) == 3); tt_assert(download_status_get_n_attempts(&dls_failure) == 3); tt_assert(mock_get_options_calls >= 1); @@ -4065,7 +4065,7 @@ test_dir_download_status_increment(void *arg) next_at = download_status_increment_failure(&dls_failure, 404, "test", 0, current_time); tt_assert(next_at == current_time + delay2); - tt_assert(download_status_get_n_failures(&dls_failure) == 3); + tt_assert(download_status_get_n_failures(&dls_failure) == 4); tt_assert(download_status_get_n_attempts(&dls_failure) == 4); tt_assert(mock_get_options_calls >= 1); @@ -4227,8 +4227,13 @@ test_dir_download_status_increment(void *arg) /* Check that attempt increments don't happen on failure-based schedules, * and that the attempt is set at the end of time */ mock_get_options_calls = 0; + setup_full_capture_of_logs(LOG_WARN); next_at = download_status_increment_attempt(&dls_failure, "test", current_time); + expect_single_log_msg_containing( + "Tried to launch an attempt-based connection on a failure-based " + "schedule."); + teardown_capture_of_logs(); tt_assert(next_at == TIME_MAX); tt_assert(download_status_get_n_failures(&dls_failure) == 0); tt_assert(download_status_get_n_attempts(&dls_failure) == 0); @@ -4240,6 +4245,7 @@ test_dir_download_status_increment(void *arg) UNMOCK(get_options); mock_options = NULL; mock_get_options_calls = 0; + teardown_capture_of_logs(); } static void @@ -5740,6 +5746,67 @@ test_dir_assumed_flags(void *arg) routerstatus_free(rs); } +static void +test_dir_post_parsing(void *arg) +{ + (void) arg; + + /* Test the version parsing from an HS descriptor publish request. */ + { + const char *end; + const char *prefix = "/tor/hs/"; + int version = parse_hs_version_from_post("/tor/hs//publish", prefix, &end); + tt_int_op(version, OP_EQ, -1); + tt_ptr_op(end, OP_EQ, NULL); + version = parse_hs_version_from_post("/tor/hs/a/publish", prefix, &end); + tt_int_op(version, OP_EQ, -1); + tt_ptr_op(end, OP_EQ, NULL); + version = parse_hs_version_from_post("/tor/hs/3/publish", prefix, &end); + tt_int_op(version, OP_EQ, 3); + tt_str_op(end, OP_EQ, "/publish"); + version = parse_hs_version_from_post("/tor/hs/42/publish", prefix, &end); + tt_int_op(version, OP_EQ, 42); + tt_str_op(end, OP_EQ, "/publish"); + version = parse_hs_version_from_post("/tor/hs/18163/publish",prefix, &end); + tt_int_op(version, OP_EQ, 18163); + tt_str_op(end, OP_EQ, "/publish"); + version = parse_hs_version_from_post("JUNKJUNKJUNK", prefix, &end); + tt_int_op(version, OP_EQ, -1); + tt_ptr_op(end, OP_EQ, NULL); + version = parse_hs_version_from_post("/tor/hs/3/publish", "blah", &end); + tt_int_op(version, OP_EQ, -1); + tt_ptr_op(end, OP_EQ, NULL); + /* Missing the '/' at the end of the prefix. */ + version = parse_hs_version_from_post("/tor/hs/3/publish", "/tor/hs", &end); + tt_int_op(version, OP_EQ, -1); + tt_ptr_op(end, OP_EQ, NULL); + version = parse_hs_version_from_post("/random/blah/tor/hs/3/publish", + prefix, &end); + tt_int_op(version, OP_EQ, -1); + tt_ptr_op(end, OP_EQ, NULL); + version = parse_hs_version_from_post("/tor/hs/3/publish/random/junk", + prefix, &end); + tt_int_op(version, OP_EQ, 3); + tt_str_op(end, OP_EQ, "/publish/random/junk"); + version = parse_hs_version_from_post("/tor/hs/-1/publish", prefix, &end); + tt_int_op(version, OP_EQ, -1); + tt_ptr_op(end, OP_EQ, NULL); + /* INT_MAX */ + version = parse_hs_version_from_post("/tor/hs/2147483647/publish", + prefix, &end); + tt_int_op(version, OP_EQ, INT_MAX); + tt_str_op(end, OP_EQ, "/publish"); + /* INT_MAX + 1*/ + version = parse_hs_version_from_post("/tor/hs/2147483648/publish", + prefix, &end); + tt_int_op(version, OP_EQ, -1); + tt_ptr_op(end, OP_EQ, NULL); + } + + done: + ; +} + #define DIR_LEGACY(name) \ { #name, test_dir_ ## name , TT_FORK, NULL, NULL } @@ -5778,6 +5845,7 @@ struct testcase_t dir_tests[] = { DIR(purpose_needs_anonymity_returns_true_by_default, 0), DIR(purpose_needs_anonymity_returns_true_for_sensitive_purpose, 0), DIR(purpose_needs_anonymity_ret_false_for_non_sensitive_conn, 0), + DIR(post_parsing, 0), DIR(fetch_type, 0), DIR(packages, 0), DIR(download_status_schedule, 0), diff --git a/src/test/test_dir_handle_get.c b/src/test/test_dir_handle_get.c index a0f22f1f0c..c215feee26 100644 --- a/src/test/test_dir_handle_get.c +++ b/src/test/test_dir_handle_get.c @@ -50,19 +50,6 @@ ENABLE_GCC_WARNING(overlength-strings) #define NS_MODULE dir_handle_get -static void -connection_write_to_buf_mock(const char *string, size_t len, - connection_t *conn, int zlib) -{ - (void) zlib; - - tor_assert(string); - tor_assert(conn); - - write_to_buf(string, len, conn->outbuf); -} - -#define GET(path) "GET " path " HTTP/1.0\r\n\r\n" #define NOT_FOUND "HTTP/1.0 404 Not found\r\n\r\n" #define BAD_REQUEST "HTTP/1.0 400 Bad request\r\n\r\n" #define SERVER_BUSY "HTTP/1.0 503 Directory busy, try again later\r\n\r\n" diff --git a/src/test/test_helpers.c b/src/test/test_helpers.c index ae9fc7a243..130ec43a3a 100644 --- a/src/test/test_helpers.c +++ b/src/test/test_helpers.c @@ -12,6 +12,7 @@ #include "routerlist.h" #include "nodelist.h" +#include "buffers.h" #include "test.h" #include "test_helpers.h" @@ -92,3 +93,15 @@ helper_setup_fake_routerlist(void) UNMOCK(router_descriptor_is_older_than); } +void +connection_write_to_buf_mock(const char *string, size_t len, + connection_t *conn, int zlib) +{ + (void) zlib; + + tor_assert(string); + tor_assert(conn); + + write_to_buf(string, len, conn->outbuf); +} + diff --git a/src/test/test_helpers.h b/src/test/test_helpers.h index 684375e1b1..b77a459256 100644 --- a/src/test/test_helpers.h +++ b/src/test/test_helpers.h @@ -11,6 +11,10 @@ const char *get_yesterday_date_str(void); void helper_setup_fake_routerlist(void); +#define GET(path) "GET " path " HTTP/1.0\r\n\r\n" +void connection_write_to_buf_mock(const char *string, size_t len, + connection_t *conn, int zlib); + extern const char TEST_DESCRIPTORS[]; #endif diff --git a/src/test/test_hs.c b/src/test/test_hs.c index fd5ab15643..318c549762 100644 --- a/src/test/test_hs.c +++ b/src/test/test_hs.c @@ -14,6 +14,7 @@ #include "test.h" #include "control.h" #include "config.h" +#include "hs_common.h" #include "rendcommon.h" #include "rendservice.h" #include "routerset.h" @@ -136,7 +137,7 @@ test_hs_desc_event(void *arg) #define STR_DESC_ID_BASE32 "hba3gmcgpfivzfhx5rtfqkfdhv65yrj3" int ret; - rend_data_t rend_query; + rend_data_v2_t rend_query; const char *expected_msg; char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1]; @@ -148,12 +149,13 @@ test_hs_desc_event(void *arg) /* setup rend_query struct */ memset(&rend_query, 0, sizeof(rend_query)); + rend_query.base_.version = 2; strncpy(rend_query.onion_address, STR_HS_ADDR, REND_SERVICE_ID_LEN_BASE32+1); rend_query.auth_type = REND_NO_AUTH; - rend_query.hsdirs_fp = smartlist_new(); - smartlist_add(rend_query.hsdirs_fp, tor_memdup(HSDIR_EXIST_ID, - DIGEST_LEN)); + rend_query.base_.hsdirs_fp = smartlist_new(); + smartlist_add(rend_query.base_.hsdirs_fp, tor_memdup(HSDIR_EXIST_ID, + DIGEST_LEN)); /* Compute descriptor ID for replica 0, should be STR_DESC_ID_BASE32. */ ret = rend_compute_v2_desc_id(rend_query.descriptor_id[0], @@ -167,7 +169,7 @@ test_hs_desc_event(void *arg) sizeof(desc_id_base32)); /* test request event */ - control_event_hs_descriptor_requested(&rend_query, HSDIR_EXIST_ID, + control_event_hs_descriptor_requested(&rend_query.base_, HSDIR_EXIST_ID, STR_DESC_ID_BASE32); expected_msg = "650 HS_DESC REQUESTED "STR_HS_ADDR" NO_AUTH "\ STR_HSDIR_EXIST_LONGNAME " " STR_DESC_ID_BASE32 "\r\n"; @@ -178,7 +180,7 @@ test_hs_desc_event(void *arg) /* test received event */ rend_query.auth_type = REND_BASIC_AUTH; control_event_hs_descriptor_received(rend_query.onion_address, - &rend_query, HSDIR_EXIST_ID); + &rend_query.base_, HSDIR_EXIST_ID); expected_msg = "650 HS_DESC RECEIVED "STR_HS_ADDR" BASIC_AUTH "\ STR_HSDIR_EXIST_LONGNAME " " STR_DESC_ID_BASE32"\r\n"; tt_assert(received_msg); @@ -187,7 +189,7 @@ test_hs_desc_event(void *arg) /* test failed event */ rend_query.auth_type = REND_STEALTH_AUTH; - control_event_hs_descriptor_failed(&rend_query, + control_event_hs_descriptor_failed(&rend_query.base_, HSDIR_NONE_EXIST_ID, "QUERY_REJECTED"); expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\ @@ -198,7 +200,7 @@ test_hs_desc_event(void *arg) /* test invalid auth type */ rend_query.auth_type = 999; - control_event_hs_descriptor_failed(&rend_query, + control_event_hs_descriptor_failed(&rend_query.base_, HSDIR_EXIST_ID, "QUERY_REJECTED"); expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\ @@ -221,8 +223,8 @@ test_hs_desc_event(void *arg) tt_str_op(received_msg, OP_EQ, exp_msg); tor_free(received_msg); tor_free(exp_msg); - SMARTLIST_FOREACH(rend_query.hsdirs_fp, char *, d, tor_free(d)); - smartlist_free(rend_query.hsdirs_fp); + SMARTLIST_FOREACH(rend_query.base_.hsdirs_fp, char *, d, tor_free(d)); + smartlist_free(rend_query.base_.hsdirs_fp); done: UNMOCK(queue_control_event_string); @@ -322,42 +324,46 @@ test_hs_rend_data(void *arg) client = rend_data_client_create(STR_HS_ADDR, desc_id, client_cookie, REND_NO_AUTH); tt_assert(client); - tt_int_op(client->auth_type, ==, REND_NO_AUTH); - tt_str_op(client->onion_address, OP_EQ, STR_HS_ADDR); - tt_mem_op(client->desc_id_fetch, OP_EQ, desc_id, sizeof(desc_id)); - tt_mem_op(client->descriptor_cookie, OP_EQ, client_cookie, + rend_data_v2_t *client_v2 = TO_REND_DATA_V2(client); + tt_int_op(client_v2->auth_type, ==, REND_NO_AUTH); + tt_str_op(client_v2->onion_address, OP_EQ, STR_HS_ADDR); + tt_mem_op(client_v2->desc_id_fetch, OP_EQ, desc_id, sizeof(desc_id)); + tt_mem_op(client_v2->descriptor_cookie, OP_EQ, client_cookie, sizeof(client_cookie)); tt_assert(client->hsdirs_fp); tt_int_op(smartlist_len(client->hsdirs_fp), ==, 0); for (rep = 0; rep < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; rep++) { - int ret = rend_compute_v2_desc_id(desc_id, client->onion_address, - client->descriptor_cookie, now, rep); + int ret = rend_compute_v2_desc_id(desc_id, client_v2->onion_address, + client_v2->descriptor_cookie, now, rep); /* That shouldn't never fail. */ tt_int_op(ret, ==, 0); - tt_mem_op(client->descriptor_id[rep], OP_EQ, desc_id, sizeof(desc_id)); + tt_mem_op(client_v2->descriptor_id[rep], OP_EQ, desc_id, + sizeof(desc_id)); } /* The rest should be zeroed because this is a client request. */ - tt_int_op(tor_digest_is_zero(client->rend_pk_digest), ==, 1); + tt_int_op(tor_digest_is_zero(client_v2->rend_pk_digest), ==, 1); tt_int_op(tor_digest_is_zero(client->rend_cookie), ==, 1); /* Test dup(). */ client_dup = rend_data_dup(client); tt_assert(client_dup); - tt_int_op(client_dup->auth_type, ==, client->auth_type); - tt_str_op(client_dup->onion_address, OP_EQ, client->onion_address); - tt_mem_op(client_dup->desc_id_fetch, OP_EQ, client->desc_id_fetch, - sizeof(client_dup->desc_id_fetch)); - tt_mem_op(client_dup->descriptor_cookie, OP_EQ, client->descriptor_cookie, - sizeof(client_dup->descriptor_cookie)); + rend_data_v2_t *client_dup_v2 = TO_REND_DATA_V2(client_dup); + tt_int_op(client_dup_v2->auth_type, ==, client_v2->auth_type); + tt_str_op(client_dup_v2->onion_address, OP_EQ, client_v2->onion_address); + tt_mem_op(client_dup_v2->desc_id_fetch, OP_EQ, client_v2->desc_id_fetch, + sizeof(client_dup_v2->desc_id_fetch)); + tt_mem_op(client_dup_v2->descriptor_cookie, OP_EQ, + client_v2->descriptor_cookie, + sizeof(client_dup_v2->descriptor_cookie)); tt_assert(client_dup->hsdirs_fp); tt_int_op(smartlist_len(client_dup->hsdirs_fp), ==, 0); for (rep = 0; rep < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; rep++) { - tt_mem_op(client_dup->descriptor_id[rep], OP_EQ, - client->descriptor_id[rep], DIGEST_LEN); + tt_mem_op(client_dup_v2->descriptor_id[rep], OP_EQ, + client_v2->descriptor_id[rep], DIGEST_LEN); } /* The rest should be zeroed because this is a client request. */ - tt_int_op(tor_digest_is_zero(client_dup->rend_pk_digest), ==, 1); + tt_int_op(tor_digest_is_zero(client_dup_v2->rend_pk_digest), ==, 1); tt_int_op(tor_digest_is_zero(client_dup->rend_cookie), ==, 1); rend_data_free(client); client = NULL; @@ -373,18 +379,19 @@ test_hs_rend_data(void *arg) * zeroed out. */ client = rend_data_client_create(NULL, desc_id, NULL, REND_BASIC_AUTH); tt_assert(client); - tt_int_op(client->auth_type, ==, REND_BASIC_AUTH); - tt_int_op(strlen(client->onion_address), ==, 0); - tt_mem_op(client->desc_id_fetch, OP_EQ, desc_id, sizeof(desc_id)); - tt_int_op(tor_mem_is_zero(client->descriptor_cookie, - sizeof(client->descriptor_cookie)), ==, 1); + client_v2 = TO_REND_DATA_V2(client); + tt_int_op(client_v2->auth_type, ==, REND_BASIC_AUTH); + tt_int_op(strlen(client_v2->onion_address), ==, 0); + tt_mem_op(client_v2->desc_id_fetch, OP_EQ, desc_id, sizeof(desc_id)); + tt_int_op(tor_mem_is_zero(client_v2->descriptor_cookie, + sizeof(client_v2->descriptor_cookie)), ==, 1); tt_assert(client->hsdirs_fp); tt_int_op(smartlist_len(client->hsdirs_fp), ==, 0); for (rep = 0; rep < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; rep++) { - tt_int_op(tor_digest_is_zero(client->descriptor_id[rep]), ==, 1); + tt_int_op(tor_digest_is_zero(client_v2->descriptor_id[rep]), ==, 1); } /* The rest should be zeroed because this is a client request. */ - tt_int_op(tor_digest_is_zero(client->rend_pk_digest), ==, 1); + tt_int_op(tor_digest_is_zero(client_v2->rend_pk_digest), ==, 1); tt_int_op(tor_digest_is_zero(client->rend_cookie), ==, 1); rend_data_free(client); client = NULL; @@ -398,37 +405,39 @@ test_hs_rend_data(void *arg) service = rend_data_service_create(STR_HS_ADDR, rend_pk_digest, rend_cookie, REND_NO_AUTH); tt_assert(service); - tt_int_op(service->auth_type, ==, REND_NO_AUTH); - tt_str_op(service->onion_address, OP_EQ, STR_HS_ADDR); - tt_mem_op(service->rend_pk_digest, OP_EQ, rend_pk_digest, + rend_data_v2_t *service_v2 = TO_REND_DATA_V2(service); + tt_int_op(service_v2->auth_type, ==, REND_NO_AUTH); + tt_str_op(service_v2->onion_address, OP_EQ, STR_HS_ADDR); + tt_mem_op(service_v2->rend_pk_digest, OP_EQ, rend_pk_digest, sizeof(rend_pk_digest)); tt_mem_op(service->rend_cookie, OP_EQ, rend_cookie, sizeof(rend_cookie)); tt_assert(service->hsdirs_fp); tt_int_op(smartlist_len(service->hsdirs_fp), ==, 0); for (rep = 0; rep < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; rep++) { - tt_int_op(tor_digest_is_zero(service->descriptor_id[rep]), ==, 1); + tt_int_op(tor_digest_is_zero(service_v2->descriptor_id[rep]), ==, 1); } /* The rest should be zeroed because this is a service request. */ - tt_int_op(tor_digest_is_zero(service->descriptor_cookie), ==, 1); - tt_int_op(tor_digest_is_zero(service->desc_id_fetch), ==, 1); + tt_int_op(tor_digest_is_zero(service_v2->descriptor_cookie), ==, 1); + tt_int_op(tor_digest_is_zero(service_v2->desc_id_fetch), ==, 1); /* Test dup(). */ service_dup = rend_data_dup(service); + rend_data_v2_t *service_dup_v2 = TO_REND_DATA_V2(service_dup); tt_assert(service_dup); - tt_int_op(service_dup->auth_type, ==, service->auth_type); - tt_str_op(service_dup->onion_address, OP_EQ, service->onion_address); - tt_mem_op(service_dup->rend_pk_digest, OP_EQ, service->rend_pk_digest, - sizeof(service_dup->rend_pk_digest)); + tt_int_op(service_dup_v2->auth_type, ==, service_v2->auth_type); + tt_str_op(service_dup_v2->onion_address, OP_EQ, service_v2->onion_address); + tt_mem_op(service_dup_v2->rend_pk_digest, OP_EQ, service_v2->rend_pk_digest, + sizeof(service_dup_v2->rend_pk_digest)); tt_mem_op(service_dup->rend_cookie, OP_EQ, service->rend_cookie, sizeof(service_dup->rend_cookie)); tt_assert(service_dup->hsdirs_fp); tt_int_op(smartlist_len(service_dup->hsdirs_fp), ==, 0); for (rep = 0; rep < REND_NUMBER_OF_NON_CONSECUTIVE_REPLICAS; rep++) { - tt_int_op(tor_digest_is_zero(service_dup->descriptor_id[rep]), ==, 1); + tt_int_op(tor_digest_is_zero(service_dup_v2->descriptor_id[rep]), ==, 1); } /* The rest should be zeroed because this is a service request. */ - tt_int_op(tor_digest_is_zero(service_dup->descriptor_cookie), ==, 1); - tt_int_op(tor_digest_is_zero(service_dup->desc_id_fetch), ==, 1); + tt_int_op(tor_digest_is_zero(service_dup_v2->descriptor_cookie), ==, 1); + tt_int_op(tor_digest_is_zero(service_dup_v2->desc_id_fetch), ==, 1); done: rend_data_free(service); @@ -518,6 +527,11 @@ mock_get_options(void) return mock_options; } +/* arg can't be 0 (the test fails) or 2 (the test is skipped) */ +#define CREATE_HS_DIR_NONE ((intptr_t)0x04) +#define CREATE_HS_DIR1 ((intptr_t)0x08) +#define CREATE_HS_DIR2 ((intptr_t)0x10) + /* Test that single onion poisoning works. */ static void test_single_onion_poisoning(void *arg) @@ -528,15 +542,15 @@ test_single_onion_poisoning(void *arg) MOCK(get_options, mock_get_options); int ret = -1; - mock_options->DataDirectory = tor_strdup(get_fname("test_data_dir")); + intptr_t create_dir_mask = (intptr_t)arg; + /* Get directories with a random suffix so we can repeat the tests */ + mock_options->DataDirectory = tor_strdup(get_fname_rnd("test_data_dir")); rend_service_t *service_1 = tor_malloc_zero(sizeof(rend_service_t)); - char *dir1 = tor_strdup(get_fname("test_hs_dir1")); + char *dir1 = tor_strdup(get_fname_rnd("test_hs_dir1")); rend_service_t *service_2 = tor_malloc_zero(sizeof(rend_service_t)); - char *dir2 = tor_strdup(get_fname("test_hs_dir2")); + char *dir2 = tor_strdup(get_fname_rnd("test_hs_dir2")); smartlist_t *services = smartlist_new(); - (void) arg; - /* No services, no problem! */ mock_options->HiddenServiceSingleHopMode = 0; mock_options->HiddenServiceNonAnonymousMode = 0; @@ -549,22 +563,20 @@ test_single_onion_poisoning(void *arg) ret = rend_service_list_verify_single_onion_poison(services, mock_options); tt_assert(ret == 0); - /* Create directories for both services */ - -#ifdef _WIN32 - ret = mkdir(mock_options->DataDirectory); - tt_assert(ret == 0); - ret = mkdir(dir1); - tt_assert(ret == 0); - ret = mkdir(dir2); -#else - ret = mkdir(mock_options->DataDirectory, 0700); - tt_assert(ret == 0); - ret = mkdir(dir1, 0700); - tt_assert(ret == 0); - ret = mkdir(dir2, 0700); -#endif + /* Create the data directory, and, if the correct bit in arg is set, + * create a directory for that service. + * The data directory is required for the lockfile, which is used when + * loading keys. */ + ret = check_private_dir(mock_options->DataDirectory, CPD_CREATE, NULL); tt_assert(ret == 0); + if (create_dir_mask & CREATE_HS_DIR1) { + ret = check_private_dir(dir1, CPD_CREATE, NULL); + tt_assert(ret == 0); + } + if (create_dir_mask & CREATE_HS_DIR2) { + ret = check_private_dir(dir2, CPD_CREATE, NULL); + tt_assert(ret == 0); + } service_1->directory = dir1; service_2->directory = dir2; @@ -694,7 +706,7 @@ test_single_onion_poisoning(void *arg) tt_assert(ret < 0); done: - /* TODO: should we delete the directories here? */ + /* The test harness deletes the directories at exit */ rend_service_free(service_1); rend_service_free(service_2); smartlist_free(services); @@ -716,8 +728,14 @@ struct testcase_t hs_tests[] = { NULL, NULL }, { "hs_auth_cookies", test_hs_auth_cookies, TT_FORK, NULL, NULL }, - { "single_onion_poisoning", test_single_onion_poisoning, TT_FORK, - NULL, NULL }, + { "single_onion_poisoning_create_dir_none", test_single_onion_poisoning, + TT_FORK, &passthrough_setup, (void*)(CREATE_HS_DIR_NONE) }, + { "single_onion_poisoning_create_dir1", test_single_onion_poisoning, + TT_FORK, &passthrough_setup, (void*)(CREATE_HS_DIR1) }, + { "single_onion_poisoning_create_dir2", test_single_onion_poisoning, + TT_FORK, &passthrough_setup, (void*)(CREATE_HS_DIR2) }, + { "single_onion_poisoning_create_dir_both", test_single_onion_poisoning, + TT_FORK, &passthrough_setup, (void*)(CREATE_HS_DIR1 | CREATE_HS_DIR2) }, END_OF_TESTCASES }; diff --git a/src/test/test_hs_cache.c b/src/test/test_hs_cache.c new file mode 100644 index 0000000000..e7deec2e22 --- /dev/null +++ b/src/test/test_hs_cache.c @@ -0,0 +1,491 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file test_hs_cache.c + * \brief Test hidden service caches. + */ + +#define CONNECTION_PRIVATE +#define HS_CACHE_PRIVATE + +#include "ed25519_cert.h" +#include "hs_cache.h" +#include "rendcache.h" +#include "directory.h" +#include "connection.h" + +#include "test_helpers.h" +#include "test.h" + +/* Build an intro point using a blinded key and an address. */ +static hs_desc_intro_point_t * +helper_build_intro_point(const ed25519_keypair_t *blinded_kp, + const char *addr) +{ + int ret; + ed25519_keypair_t auth_kp; + hs_desc_intro_point_t *intro_point = NULL; + hs_desc_intro_point_t *ip = tor_malloc_zero(sizeof(*ip)); + ip->link_specifiers = smartlist_new(); + + { + hs_desc_link_specifier_t *ls = tor_malloc_zero(sizeof(*ls)); + ls->u.ap.port = 9001; + int family = tor_addr_parse(&ls->u.ap.addr, addr); + switch (family) { + case AF_INET: + ls->type = LS_IPV4; + break; + case AF_INET6: + ls->type = LS_IPV6; + break; + default: + /* Stop the test, not suppose to have an error. */ + tt_int_op(family, OP_EQ, AF_INET); + } + smartlist_add(ip->link_specifiers, ls); + } + + ret = ed25519_keypair_generate(&auth_kp, 0); + tt_int_op(ret, ==, 0); + ip->auth_key_cert = tor_cert_create(blinded_kp, CERT_TYPE_AUTH_HS_IP_KEY, + &auth_kp.pubkey, time(NULL), + HS_DESC_CERT_LIFETIME, + CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(ip->auth_key_cert); + + ret = curve25519_keypair_generate(&ip->enc_key.curve25519, 0); + tt_int_op(ret, ==, 0); + ip->enc_key_type = HS_DESC_KEY_TYPE_CURVE25519; + intro_point = ip; + done: + return intro_point; +} + +/* Return a valid hs_descriptor_t object. */ +static hs_descriptor_t * +helper_build_hs_desc(uint64_t revision_counter, uint32_t lifetime, + ed25519_keypair_t *blinded_kp) +{ + int ret; + hs_descriptor_t *descp = NULL, *desc = tor_malloc_zero(sizeof(*desc)); + + desc->plaintext_data.version = HS_DESC_SUPPORTED_FORMAT_VERSION_MAX; + ret = ed25519_keypair_generate(&desc->plaintext_data.signing_kp, 0); + tt_int_op(ret, ==, 0); + if (blinded_kp) { + memcpy(&desc->plaintext_data.blinded_kp, blinded_kp, + sizeof(ed25519_keypair_t)); + } else { + ret = ed25519_keypair_generate(&desc->plaintext_data.blinded_kp, 0); + tt_int_op(ret, ==, 0); + } + + desc->plaintext_data.signing_key_cert = + tor_cert_create(&desc->plaintext_data.blinded_kp, + CERT_TYPE_SIGNING_HS_DESC, + &desc->plaintext_data.signing_kp.pubkey, time(NULL), + 3600, CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(desc->plaintext_data.signing_key_cert); + desc->plaintext_data.revision_counter = revision_counter; + desc->plaintext_data.lifetime_sec = lifetime; + + /* Setup encrypted data section. */ + desc->encrypted_data.create2_ntor = 1; + desc->encrypted_data.auth_types = smartlist_new(); + smartlist_add(desc->encrypted_data.auth_types, tor_strdup("ed25519")); + desc->encrypted_data.intro_points = smartlist_new(); + /* Add an intro point. */ + smartlist_add(desc->encrypted_data.intro_points, + helper_build_intro_point(&desc->plaintext_data.blinded_kp, + "1.2.3.4")); + + descp = desc; + done: + return descp; +} + +/* Static variable used to encoded the HSDir query. */ +static char query_b64[256]; + +/* Build an HSDir query using a ed25519 keypair. */ +static const char * +helper_get_hsdir_query(const hs_descriptor_t *desc) +{ + ed25519_public_to_base64(query_b64, + &desc->plaintext_data.blinded_kp.pubkey); + return query_b64; +} + +static void +init_test(void) +{ + /* Always needed. Initialize the subsystem. */ + hs_cache_init(); + /* We need the v2 cache since our OOM and cache cleanup does poke at it. */ + rend_cache_init(); +} + +static void +test_directory(void *arg) +{ + int ret; + size_t oom_size; + char *desc1_str=NULL; + const char *desc_out; + hs_descriptor_t *desc1; + + (void) arg; + + init_test(); + /* Generate a valid descriptor with normal values. */ + desc1 = helper_build_hs_desc(42, 3 * 60 * 60, NULL); + tt_assert(desc1); + ret = hs_desc_encode_descriptor(desc1, &desc1_str); + tt_int_op(ret, OP_EQ, 0); + + /* Very first basic test, should be able to be stored, survive a + * clean, found with a lookup and then cleaned by our OOM. */ + { + ret = hs_cache_store_as_dir(desc1_str); + tt_int_op(ret, OP_EQ, 0); + /* Re-add, it should fail since we already have it. */ + ret = hs_cache_store_as_dir(desc1_str); + tt_int_op(ret, OP_EQ, -1); + /* Try to clean now which should be fine, there is at worst few seconds + * between the store and this call. */ + hs_cache_clean_as_dir(time(NULL)); + /* We should find it in our cache. */ + ret = hs_cache_lookup_as_dir(3, helper_get_hsdir_query(desc1), &desc_out); + tt_int_op(ret, OP_EQ, 1); + tt_str_op(desc_out, OP_EQ, desc1_str); + /* Tell our OOM to run and to at least remove a byte which will result in + * removing the descriptor from our cache. */ + oom_size = hs_cache_handle_oom(time(NULL), 1); + tt_int_op(oom_size, >=, 1); + ret = hs_cache_lookup_as_dir(3, helper_get_hsdir_query(desc1), NULL); + tt_int_op(ret, OP_EQ, 0); + } + + /* Store two descriptors and remove the expiring one only. */ + { + hs_descriptor_t *desc_zero_lifetime = helper_build_hs_desc(1, 0, NULL); + tt_assert(desc_zero_lifetime); + char *desc_zero_lifetime_str; + ret = hs_desc_encode_descriptor(desc_zero_lifetime, + &desc_zero_lifetime_str); + tt_int_op(ret, OP_EQ, 0); + + ret = hs_cache_store_as_dir(desc1_str); + tt_int_op(ret, OP_EQ, 0); + ret = hs_cache_store_as_dir(desc_zero_lifetime_str); + tt_int_op(ret, OP_EQ, 0); + /* This one should clear out our zero lifetime desc. */ + hs_cache_clean_as_dir(time(NULL)); + /* We should find desc1 in our cache. */ + ret = hs_cache_lookup_as_dir(3, helper_get_hsdir_query(desc1), &desc_out); + tt_int_op(ret, OP_EQ, 1); + tt_str_op(desc_out, OP_EQ, desc1_str); + /* We should NOT find our zero lifetime desc in our cache. */ + ret = hs_cache_lookup_as_dir(3, + helper_get_hsdir_query(desc_zero_lifetime), + NULL); + tt_int_op(ret, OP_EQ, 0); + /* Cleanup our entire cache. */ + oom_size = hs_cache_handle_oom(time(NULL), 1); + tt_int_op(oom_size, >=, 1); + hs_descriptor_free(desc_zero_lifetime); + tor_free(desc_zero_lifetime_str); + } + + /* Throw junk at it. */ + { + ret = hs_cache_store_as_dir("blah"); + tt_int_op(ret, OP_EQ, -1); + /* Poor attempt at tricking the decoding. */ + ret = hs_cache_store_as_dir("hs-descriptor 3\nJUNK"); + tt_int_op(ret, OP_EQ, -1); + /* Undecodable base64 query. */ + ret = hs_cache_lookup_as_dir(3, "blah", NULL); + tt_int_op(ret, OP_EQ, -1); + /* Decodable base64 query but wrong ed25519 size. */ + ret = hs_cache_lookup_as_dir(3, "dW5pY29ybg==", NULL); + tt_int_op(ret, OP_EQ, -1); + } + + /* Test descriptor replacement with revision counter. */ + { + char *new_desc_str; + + /* Add a descriptor. */ + ret = hs_cache_store_as_dir(desc1_str); + tt_int_op(ret, OP_EQ, 0); + ret = hs_cache_lookup_as_dir(3, helper_get_hsdir_query(desc1), &desc_out); + tt_int_op(ret, OP_EQ, 1); + /* Bump revision counter. */ + desc1->plaintext_data.revision_counter++; + ret = hs_desc_encode_descriptor(desc1, &new_desc_str); + tt_int_op(ret, OP_EQ, 0); + ret = hs_cache_store_as_dir(new_desc_str); + tt_int_op(ret, OP_EQ, 0); + /* Look it up, it should have been replaced. */ + ret = hs_cache_lookup_as_dir(3, helper_get_hsdir_query(desc1), &desc_out); + tt_int_op(ret, OP_EQ, 1); + tt_str_op(desc_out, OP_EQ, new_desc_str); + tor_free(new_desc_str); + } + + done: + hs_descriptor_free(desc1); + tor_free(desc1_str); +} + +static void +test_clean_as_dir(void *arg) +{ + size_t ret; + char *desc1_str = NULL; + time_t now = time(NULL); + hs_descriptor_t *desc1 = NULL; + + (void) arg; + + init_test(); + + /* Generate a valid descriptor with values. */ + desc1 = helper_build_hs_desc(42, 3 * 60 * 60, NULL); + tt_assert(desc1); + ret = hs_desc_encode_descriptor(desc1, &desc1_str); + tt_int_op(ret, OP_EQ, 0); + ret = hs_cache_store_as_dir(desc1_str); + tt_int_op(ret, OP_EQ, 0); + + /* With the lifetime being 3 hours, a cleanup shouldn't remove it. */ + ret = cache_clean_v3_as_dir(now, 0); + tt_int_op(ret, ==, 0); + /* Should be present after clean up. */ + ret = hs_cache_lookup_as_dir(3, helper_get_hsdir_query(desc1), NULL); + tt_int_op(ret, OP_EQ, 1); + /* Set a cutoff 100 seconds in the past. It should not remove the entry + * since the entry is still recent enough. */ + ret = cache_clean_v3_as_dir(now, now - 100); + tt_int_op(ret, ==, 0); + /* Should be present after clean up. */ + ret = hs_cache_lookup_as_dir(3, helper_get_hsdir_query(desc1), NULL); + tt_int_op(ret, OP_EQ, 1); + /* Set a cutoff of 100 seconds in the future. It should remove the entry + * that we've just added since it's not too old for the cutoff. */ + ret = cache_clean_v3_as_dir(now, now + 100); + tt_int_op(ret, >, 0); + /* Shouldn't be present after clean up. */ + ret = hs_cache_lookup_as_dir(3, helper_get_hsdir_query(desc1), NULL); + tt_int_op(ret, OP_EQ, 0); + + done: + hs_descriptor_free(desc1); + tor_free(desc1_str); +} + +/* Test helper: Fetch an HS descriptor from an HSDir (for the hidden service + with <b>blinded_key</b>. Return the received descriptor string. */ +static char * +helper_fetch_desc_from_hsdir(const ed25519_public_key_t *blinded_key) +{ + int retval; + + char *received_desc = NULL; + char *hsdir_query_str = NULL; + + /* The dir conn we are going to simulate */ + dir_connection_t *conn = NULL; + + /* First extract the blinded public key that we are going to use in our + query, and then build the actual query string. */ + { + char hsdir_cache_key[ED25519_BASE64_LEN+1]; + + retval = ed25519_public_to_base64(hsdir_cache_key, + blinded_key); + tt_int_op(retval, ==, 0); + tor_asprintf(&hsdir_query_str, GET("/tor/hs/3/%s"), hsdir_cache_key); + } + + /* Simulate an HTTP GET request to the HSDir */ + conn = dir_connection_new(AF_INET); + tor_addr_from_ipv4h(&conn->base_.addr, 0x7f000001); + TO_CONN(conn)->linked = 1;/* Pretend the conn is encrypted :) */ + retval = directory_handle_command_get(conn, hsdir_query_str, + NULL, 0); + tt_int_op(retval, OP_EQ, 0); + + /* Read the descriptor that the HSDir just served us */ + { + char *headers = NULL; + size_t body_used = 0; + + fetch_from_buf_http(TO_CONN(conn)->outbuf, &headers, MAX_HEADERS_SIZE, + &received_desc, &body_used, 10000, 0); + tor_free(headers); + } + + done: + tor_free(hsdir_query_str); + if (conn) + connection_free_(TO_CONN(conn)); + + return received_desc; +} + +/* Publish a descriptor to the HSDir, then fetch it. Check that the received + descriptor matches the published one. */ +static void +test_upload_and_download_hs_desc(void *arg) +{ + int retval; + hs_descriptor_t *published_desc; + + char *published_desc_str = NULL; + char *received_desc_str = NULL; + + (void) arg; + + /* Initialize HSDir cache subsystem */ + init_test(); + + /* Generate a valid descriptor with normal values. */ + { + published_desc = helper_build_hs_desc(42, 3 * 60 * 60, NULL); + tt_assert(published_desc); + retval = hs_desc_encode_descriptor(published_desc, &published_desc_str); + tt_int_op(retval, OP_EQ, 0); + } + + /* Publish descriptor to the HSDir */ + { + retval = handle_post_hs_descriptor("/tor/hs/3/publish",published_desc_str); + tt_int_op(retval, ==, 200); + } + + /* Simulate a fetch of the previously published descriptor */ + { + const ed25519_public_key_t *blinded_key; + blinded_key = &published_desc->plaintext_data.blinded_kp.pubkey; + received_desc_str = helper_fetch_desc_from_hsdir(blinded_key); + } + + /* Verify we received the exact same descriptor we published earlier */ + tt_str_op(received_desc_str, OP_EQ, published_desc_str); + + done: + tor_free(received_desc_str); + tor_free(published_desc_str); + hs_descriptor_free(published_desc); +} + +/* Test that HSDirs reject outdated descriptors based on their revision + * counter. Also test that HSDirs correctly replace old descriptors with newer + * descriptors. */ +static void +test_hsdir_revision_counter_check(void *arg) +{ + int retval; + + hs_descriptor_t *published_desc; + char *published_desc_str = NULL; + + char *received_desc_str = NULL; + hs_descriptor_t *received_desc = NULL; + + (void) arg; + + /* Initialize HSDir cache subsystem */ + init_test(); + + /* Generate a valid descriptor with normal values. */ + { + published_desc = helper_build_hs_desc(1312, 3 * 60 * 60, NULL); + tt_assert(published_desc); + retval = hs_desc_encode_descriptor(published_desc, &published_desc_str); + tt_int_op(retval, OP_EQ, 0); + } + + /* Publish descriptor to the HSDir */ + { + retval = handle_post_hs_descriptor("/tor/hs/3/publish",published_desc_str); + tt_int_op(retval, ==, 200); + } + + /* Try publishing again with the same revision counter: Should fail. */ + { + retval = handle_post_hs_descriptor("/tor/hs/3/publish",published_desc_str); + tt_int_op(retval, ==, 400); + } + + /* Fetch the published descriptor and validate the revision counter. */ + { + const ed25519_public_key_t *blinded_key; + + blinded_key = &published_desc->plaintext_data.blinded_kp.pubkey; + received_desc_str = helper_fetch_desc_from_hsdir(blinded_key); + + retval = hs_desc_decode_descriptor(received_desc_str,NULL, &received_desc); + tt_int_op(retval, ==, 0); + tt_assert(received_desc); + + /* Check that the revision counter is correct */ + tt_u64_op(received_desc->plaintext_data.revision_counter, ==, 1312); + + hs_descriptor_free(received_desc); + received_desc = NULL; + tor_free(received_desc_str); + } + + /* Increment the revision counter and try again. Should work. */ + { + published_desc->plaintext_data.revision_counter = 1313; + tor_free(published_desc_str); + retval = hs_desc_encode_descriptor(published_desc, &published_desc_str); + tt_int_op(retval, OP_EQ, 0); + + retval = handle_post_hs_descriptor("/tor/hs/3/publish",published_desc_str); + tt_int_op(retval, ==, 200); + } + + /* Again, fetch the published descriptor and perform the revision counter + validation. The revision counter must have changed. */ + { + const ed25519_public_key_t *blinded_key; + + blinded_key = &published_desc->plaintext_data.blinded_kp.pubkey; + received_desc_str = helper_fetch_desc_from_hsdir(blinded_key); + + retval = hs_desc_decode_descriptor(received_desc_str,NULL, &received_desc); + tt_int_op(retval, ==, 0); + tt_assert(received_desc); + + /* Check that the revision counter is the latest */ + tt_u64_op(received_desc->plaintext_data.revision_counter, ==, 1313); + } + + done: + hs_descriptor_free(published_desc); + hs_descriptor_free(received_desc); + tor_free(received_desc_str); + tor_free(published_desc_str); +} + +struct testcase_t hs_cache[] = { + /* Encoding tests. */ + { "directory", test_directory, TT_FORK, + NULL, NULL }, + { "clean_as_dir", test_clean_as_dir, TT_FORK, + NULL, NULL }, + { "hsdir_revision_counter_check", test_hsdir_revision_counter_check, TT_FORK, + NULL, NULL }, + { "upload_and_download_hs_desc", test_upload_and_download_hs_desc, TT_FORK, + NULL, NULL }, + + END_OF_TESTCASES +}; + diff --git a/src/test/test_hs_descriptor.c b/src/test/test_hs_descriptor.c new file mode 100644 index 0000000000..66ed3cea72 --- /dev/null +++ b/src/test/test_hs_descriptor.c @@ -0,0 +1,1122 @@ +/* Copyright (c) 2016, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +/** + * \file test_hs_descriptor.c + * \brief Test hidden service descriptor encoding and decoding. + */ + +#define HS_DESCRIPTOR_PRIVATE + +#include "crypto_ed25519.h" +#include "ed25519_cert.h" +#include "or.h" +#include "hs_descriptor.h" +#include "test.h" +#include "torcert.h" + +static hs_desc_intro_point_t * +helper_build_intro_point(const ed25519_keypair_t *blinded_kp, time_t now, + const char *addr, int legacy) +{ + int ret; + ed25519_keypair_t auth_kp; + hs_desc_intro_point_t *intro_point = NULL; + hs_desc_intro_point_t *ip = tor_malloc_zero(sizeof(*ip)); + ip->link_specifiers = smartlist_new(); + + { + hs_desc_link_specifier_t *ls = tor_malloc_zero(sizeof(*ls)); + if (legacy) { + ls->type = LS_LEGACY_ID; + memcpy(ls->u.legacy_id, "0299F268FCA9D55CD157976D39AE92B4B455B3A8", + DIGEST_LEN); + } else { + ls->u.ap.port = 9001; + int family = tor_addr_parse(&ls->u.ap.addr, addr); + switch (family) { + case AF_INET: + ls->type = LS_IPV4; + break; + case AF_INET6: + ls->type = LS_IPV6; + break; + default: + /* Stop the test, not suppose to have an error. */ + tt_int_op(family, OP_EQ, AF_INET); + } + } + smartlist_add(ip->link_specifiers, ls); + } + + ret = ed25519_keypair_generate(&auth_kp, 0); + tt_int_op(ret, ==, 0); + ip->auth_key_cert = tor_cert_create(blinded_kp, CERT_TYPE_AUTH_HS_IP_KEY, + &auth_kp.pubkey, now, + HS_DESC_CERT_LIFETIME, + CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(ip->auth_key_cert); + + if (legacy) { + ip->enc_key.legacy = crypto_pk_new(); + ip->enc_key_type = HS_DESC_KEY_TYPE_LEGACY; + tt_assert(ip->enc_key.legacy); + ret = crypto_pk_generate_key(ip->enc_key.legacy); + tt_int_op(ret, ==, 0); + } else { + ret = curve25519_keypair_generate(&ip->enc_key.curve25519, 0); + tt_int_op(ret, ==, 0); + ip->enc_key_type = HS_DESC_KEY_TYPE_CURVE25519; + } + + intro_point = ip; + done: + return intro_point; +} + +/* Return a valid hs_descriptor_t object. If no_ip is set, no introduction + * points are added. */ +static hs_descriptor_t * +helper_build_hs_desc(unsigned int no_ip) +{ + int ret; + time_t now = time(NULL); + hs_descriptor_t *descp = NULL, *desc = tor_malloc_zero(sizeof(*desc)); + + desc->plaintext_data.version = HS_DESC_SUPPORTED_FORMAT_VERSION_MAX; + ret = ed25519_keypair_generate(&desc->plaintext_data.signing_kp, 0); + tt_int_op(ret, ==, 0); + ret = ed25519_keypair_generate(&desc->plaintext_data.blinded_kp, 0); + tt_int_op(ret, ==, 0); + + desc->plaintext_data.signing_key_cert = + tor_cert_create(&desc->plaintext_data.blinded_kp, + CERT_TYPE_SIGNING_HS_DESC, + &desc->plaintext_data.signing_kp.pubkey, now, + 3600, + CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(desc->plaintext_data.signing_key_cert); + desc->plaintext_data.revision_counter = 42; + desc->plaintext_data.lifetime_sec = 3 * 60 * 60; + + /* Setup encrypted data section. */ + desc->encrypted_data.create2_ntor = 1; + desc->encrypted_data.auth_types = smartlist_new(); + desc->encrypted_data.single_onion_service = 1; + smartlist_add(desc->encrypted_data.auth_types, tor_strdup("ed25519")); + desc->encrypted_data.intro_points = smartlist_new(); + if (!no_ip) { + /* Add four intro points. */ + smartlist_add(desc->encrypted_data.intro_points, + helper_build_intro_point(&desc->plaintext_data.blinded_kp, now, + "1.2.3.4", 0)); + smartlist_add(desc->encrypted_data.intro_points, + helper_build_intro_point(&desc->plaintext_data.blinded_kp, now, + "[2600::1]", 0)); + smartlist_add(desc->encrypted_data.intro_points, + helper_build_intro_point(&desc->plaintext_data.blinded_kp, now, + "3.2.1.4", 1)); + smartlist_add(desc->encrypted_data.intro_points, + helper_build_intro_point(&desc->plaintext_data.blinded_kp, now, + "", 1)); + } + + descp = desc; + done: + return descp; +} + +static void +helper_compare_hs_desc(const hs_descriptor_t *desc1, + const hs_descriptor_t *desc2) +{ + /* Plaintext data section. */ + tt_int_op(desc1->plaintext_data.version, OP_EQ, + desc2->plaintext_data.version); + tt_uint_op(desc1->plaintext_data.lifetime_sec, OP_EQ, + desc2->plaintext_data.lifetime_sec); + tt_assert(tor_cert_eq(desc1->plaintext_data.signing_key_cert, + desc2->plaintext_data.signing_key_cert)); + tt_mem_op(desc1->plaintext_data.signing_kp.pubkey.pubkey, OP_EQ, + desc2->plaintext_data.signing_kp.pubkey.pubkey, + ED25519_PUBKEY_LEN); + tt_mem_op(desc1->plaintext_data.blinded_kp.pubkey.pubkey, OP_EQ, + desc2->plaintext_data.blinded_kp.pubkey.pubkey, + ED25519_PUBKEY_LEN); + tt_u64_op(desc1->plaintext_data.revision_counter, ==, + desc2->plaintext_data.revision_counter); + + /* NOTE: We can't compare the encrypted blob because when encoding the + * descriptor, the object is immutable thus we don't update it with the + * encrypted blob. As contrast to the decoding process where we populate a + * descriptor object. */ + + /* Encrypted data section. */ + tt_uint_op(desc1->encrypted_data.create2_ntor, ==, + desc2->encrypted_data.create2_ntor); + + /* Authentication type. */ + tt_int_op(!!desc1->encrypted_data.auth_types, ==, + !!desc2->encrypted_data.auth_types); + if (desc1->encrypted_data.auth_types && desc2->encrypted_data.auth_types) { + tt_int_op(smartlist_len(desc1->encrypted_data.auth_types), ==, + smartlist_len(desc2->encrypted_data.auth_types)); + for (int i = 0; i < smartlist_len(desc1->encrypted_data.auth_types); i++) { + tt_str_op(smartlist_get(desc1->encrypted_data.auth_types, i), OP_EQ, + smartlist_get(desc2->encrypted_data.auth_types, i)); + } + } + + /* Introduction points. */ + { + tt_assert(desc1->encrypted_data.intro_points); + tt_assert(desc2->encrypted_data.intro_points); + tt_int_op(smartlist_len(desc1->encrypted_data.intro_points), ==, + smartlist_len(desc2->encrypted_data.intro_points)); + for (int i=0; i < smartlist_len(desc1->encrypted_data.intro_points); i++) { + hs_desc_intro_point_t *ip1 = smartlist_get(desc1->encrypted_data + .intro_points, i), + *ip2 = smartlist_get(desc2->encrypted_data + .intro_points, i); + tt_assert(tor_cert_eq(ip1->auth_key_cert, ip2->auth_key_cert)); + tt_int_op(ip1->enc_key_type, OP_EQ, ip2->enc_key_type); + tt_assert(ip1->enc_key_type == HS_DESC_KEY_TYPE_LEGACY || + ip1->enc_key_type == HS_DESC_KEY_TYPE_CURVE25519); + switch (ip1->enc_key_type) { + case HS_DESC_KEY_TYPE_LEGACY: + tt_int_op(crypto_pk_cmp_keys(ip1->enc_key.legacy, ip2->enc_key.legacy), + OP_EQ, 0); + break; + case HS_DESC_KEY_TYPE_CURVE25519: + tt_mem_op(ip1->enc_key.curve25519.pubkey.public_key, OP_EQ, + ip2->enc_key.curve25519.pubkey.public_key, + CURVE25519_PUBKEY_LEN); + break; + } + + tt_int_op(smartlist_len(ip1->link_specifiers), ==, + smartlist_len(ip2->link_specifiers)); + for (int j = 0; j < smartlist_len(ip1->link_specifiers); j++) { + hs_desc_link_specifier_t *ls1 = smartlist_get(ip1->link_specifiers, j), + *ls2 = smartlist_get(ip2->link_specifiers, j); + tt_int_op(ls1->type, ==, ls2->type); + switch (ls1->type) { + case LS_IPV4: + case LS_IPV6: + { + char *addr1 = tor_addr_to_str_dup(&ls1->u.ap.addr), + *addr2 = tor_addr_to_str_dup(&ls2->u.ap.addr); + tt_str_op(addr1, OP_EQ, addr2); + tor_free(addr1); + tor_free(addr2); + tt_int_op(ls1->u.ap.port, ==, ls2->u.ap.port); + } + break; + case LS_LEGACY_ID: + tt_mem_op(ls1->u.legacy_id, OP_EQ, ls2->u.legacy_id, + sizeof(ls1->u.legacy_id)); + break; + default: + /* Unknown type, caught it and print its value. */ + tt_int_op(ls1->type, OP_EQ, -1); + } + } + } + } + + done: + ; +} + +/* Test certificate encoding put in a descriptor. */ +static void +test_cert_encoding(void *arg) +{ + int ret; + char *encoded = NULL; + time_t now = time(NULL); + ed25519_keypair_t kp; + ed25519_public_key_t signed_key; + ed25519_secret_key_t secret_key; + tor_cert_t *cert = NULL; + + (void) arg; + + ret = ed25519_keypair_generate(&kp, 0); + tt_int_op(ret, == , 0); + ret = ed25519_secret_key_generate(&secret_key, 0); + tt_int_op(ret, == , 0); + ret = ed25519_public_key_generate(&signed_key, &secret_key); + tt_int_op(ret, == , 0); + + cert = tor_cert_create(&kp, CERT_TYPE_SIGNING_AUTH, &signed_key, + now, 3600 * 2, CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(cert); + + /* Test the certificate encoding function. */ + ret = encode_cert(cert, &encoded); + tt_int_op(ret, ==, 0); + + /* Validated the certificate string. */ + { + char *end, *pos = encoded; + char *b64_cert, buf[256]; + size_t b64_cert_len; + tor_cert_t *parsed_cert; + + tt_int_op(strcmpstart(pos, "-----BEGIN ED25519 CERT-----\n"), ==, 0); + pos += strlen("-----BEGIN ED25519 CERT-----\n"); + + /* Isolate the base64 encoded certificate and try to decode it. */ + end = strstr(pos, "-----END ED25519 CERT-----"); + tt_assert(end); + b64_cert = pos; + b64_cert_len = end - pos; + ret = base64_decode(buf, sizeof(buf), b64_cert, b64_cert_len); + tt_int_op(ret, >, 0); + /* Parseable? */ + parsed_cert = tor_cert_parse((uint8_t *) buf, ret); + tt_assert(parsed_cert); + /* Signature is valid? */ + ret = tor_cert_checksig(parsed_cert, &kp.pubkey, now + 10); + tt_int_op(ret, ==, 0); + ret = tor_cert_eq(cert, parsed_cert); + tt_int_op(ret, ==, 1); + /* The cert did have the signing key? */ + ret= ed25519_pubkey_eq(&parsed_cert->signing_key, &kp.pubkey); + tt_int_op(ret, ==, 1); + tor_cert_free(parsed_cert); + + /* Get to the end part of the certificate. */ + pos += b64_cert_len; + tt_int_op(strcmpstart(pos, "-----END ED25519 CERT-----"), ==, 0); + pos += strlen("-----END ED25519 CERT-----"); + } + + done: + tor_cert_free(cert); + tor_free(encoded); +} + +/* Test the descriptor padding. */ +static void +test_descriptor_padding(void *arg) +{ + char *plaintext; + size_t plaintext_len, padded_len; + uint8_t *padded_plaintext = NULL; + +/* Example: if l = 129, the ceiled division gives 2 and then multiplied by 128 + * to give 256. With l = 127, ceiled division gives 1 then times 128. */ +#define PADDING_EXPECTED_LEN(l) \ + CEIL_DIV(l, HS_DESC_PLAINTEXT_PADDING_MULTIPLE) * \ + HS_DESC_PLAINTEXT_PADDING_MULTIPLE + + (void) arg; + + { /* test #1: no padding */ + plaintext_len = HS_DESC_PLAINTEXT_PADDING_MULTIPLE; + plaintext = tor_malloc(plaintext_len); + padded_len = build_plaintext_padding(plaintext, plaintext_len, + &padded_plaintext); + tt_assert(padded_plaintext); + tor_free(plaintext); + /* Make sure our padding has been zeroed. */ + tt_int_op(tor_mem_is_zero((char *) padded_plaintext + plaintext_len, + padded_len - plaintext_len), OP_EQ, 1); + tor_free(padded_plaintext); + /* Never never have a padded length smaller than the plaintext. */ + tt_int_op(padded_len, OP_GE, plaintext_len); + tt_int_op(padded_len, OP_EQ, PADDING_EXPECTED_LEN(plaintext_len)); + } + + { /* test #2: one byte padding? */ + plaintext_len = HS_DESC_PLAINTEXT_PADDING_MULTIPLE - 1; + plaintext = tor_malloc(plaintext_len); + padded_plaintext = NULL; + padded_len = build_plaintext_padding(plaintext, plaintext_len, + &padded_plaintext); + tt_assert(padded_plaintext); + tor_free(plaintext); + /* Make sure our padding has been zeroed. */ + tt_int_op(tor_mem_is_zero((char *) padded_plaintext + plaintext_len, + padded_len - plaintext_len), OP_EQ, 1); + tor_free(padded_plaintext); + /* Never never have a padded length smaller than the plaintext. */ + tt_int_op(padded_len, OP_GE, plaintext_len); + tt_int_op(padded_len, OP_EQ, PADDING_EXPECTED_LEN(plaintext_len)); + } + + { /* test #3: Lots more bytes of padding? */ + plaintext_len = HS_DESC_PLAINTEXT_PADDING_MULTIPLE + 1; + plaintext = tor_malloc(plaintext_len); + padded_plaintext = NULL; + padded_len = build_plaintext_padding(plaintext, plaintext_len, + &padded_plaintext); + tt_assert(padded_plaintext); + tor_free(plaintext); + /* Make sure our padding has been zeroed. */ + tt_int_op(tor_mem_is_zero((char *) padded_plaintext + plaintext_len, + padded_len - plaintext_len), OP_EQ, 1); + tor_free(padded_plaintext); + /* Never never have a padded length smaller than the plaintext. */ + tt_int_op(padded_len, OP_GE, plaintext_len); + tt_int_op(padded_len, OP_EQ, PADDING_EXPECTED_LEN(plaintext_len)); + } + + done: + return; +} + +static void +test_link_specifier(void *arg) +{ + ssize_t ret; + hs_desc_link_specifier_t spec; + smartlist_t *link_specifiers = smartlist_new(); + + (void) arg; + + /* Always this port. */ + spec.u.ap.port = 42; + smartlist_add(link_specifiers, &spec); + + /* Test IPv4 for starter. */ + { + char *b64, buf[256]; + uint32_t ipv4; + link_specifier_t *ls; + + spec.type = LS_IPV4; + ret = tor_addr_parse(&spec.u.ap.addr, "1.2.3.4"); + tt_int_op(ret, ==, AF_INET); + b64 = encode_link_specifiers(link_specifiers); + tt_assert(b64); + + /* Decode it and validate the format. */ + ret = base64_decode(buf, sizeof(buf), b64, strlen(b64)); + tt_int_op(ret, >, 0); + /* First byte is the number of link specifier. */ + tt_int_op(get_uint8(buf), ==, 1); + ret = link_specifier_parse(&ls, (uint8_t *) buf + 1, ret - 1); + tt_int_op(ret, ==, 8); + /* Should be 2 bytes for port and 4 bytes for IPv4. */ + tt_int_op(link_specifier_get_ls_len(ls), ==, 6); + ipv4 = link_specifier_get_un_ipv4_addr(ls); + tt_int_op(tor_addr_to_ipv4h(&spec.u.ap.addr), ==, ipv4); + tt_int_op(link_specifier_get_un_ipv4_port(ls), ==, spec.u.ap.port); + + link_specifier_free(ls); + tor_free(b64); + } + + /* Test IPv6. */ + { + char *b64, buf[256]; + uint8_t ipv6[16]; + link_specifier_t *ls; + + spec.type = LS_IPV6; + ret = tor_addr_parse(&spec.u.ap.addr, "[1:2:3:4::]"); + tt_int_op(ret, ==, AF_INET6); + b64 = encode_link_specifiers(link_specifiers); + tt_assert(b64); + + /* Decode it and validate the format. */ + ret = base64_decode(buf, sizeof(buf), b64, strlen(b64)); + tt_int_op(ret, >, 0); + /* First byte is the number of link specifier. */ + tt_int_op(get_uint8(buf), ==, 1); + ret = link_specifier_parse(&ls, (uint8_t *) buf + 1, ret - 1); + tt_int_op(ret, ==, 20); + /* Should be 2 bytes for port and 16 bytes for IPv6. */ + tt_int_op(link_specifier_get_ls_len(ls), ==, 18); + for (unsigned int i = 0; i < sizeof(ipv6); i++) { + ipv6[i] = link_specifier_get_un_ipv6_addr(ls, i); + } + tt_mem_op(tor_addr_to_in6_addr8(&spec.u.ap.addr), ==, ipv6, sizeof(ipv6)); + tt_int_op(link_specifier_get_un_ipv6_port(ls), ==, spec.u.ap.port); + + link_specifier_free(ls); + tor_free(b64); + } + + /* Test legacy. */ + { + char *b64, buf[256]; + uint8_t *id; + link_specifier_t *ls; + + spec.type = LS_LEGACY_ID; + memset(spec.u.legacy_id, 'Y', sizeof(spec.u.legacy_id)); + b64 = encode_link_specifiers(link_specifiers); + tt_assert(b64); + + /* Decode it and validate the format. */ + ret = base64_decode(buf, sizeof(buf), b64, strlen(b64)); + tt_int_op(ret, >, 0); + /* First byte is the number of link specifier. */ + tt_int_op(get_uint8(buf), ==, 1); + ret = link_specifier_parse(&ls, (uint8_t *) buf + 1, ret - 1); + /* 20 bytes digest + 1 byte type + 1 byte len. */ + tt_int_op(ret, ==, 22); + tt_int_op(link_specifier_getlen_un_legacy_id(ls), OP_EQ, DIGEST_LEN); + /* Digest length is 20 bytes. */ + tt_int_op(link_specifier_get_ls_len(ls), OP_EQ, DIGEST_LEN); + id = link_specifier_getarray_un_legacy_id(ls); + tt_mem_op(spec.u.legacy_id, OP_EQ, id, DIGEST_LEN); + + link_specifier_free(ls); + tor_free(b64); + } + + done: + smartlist_free(link_specifiers); +} + +static void +test_encode_descriptor(void *arg) +{ + int ret; + char *encoded = NULL; + hs_descriptor_t *desc = helper_build_hs_desc(0); + + (void) arg; + + ret = hs_desc_encode_descriptor(desc, &encoded); + tt_int_op(ret, ==, 0); + tt_assert(encoded); + + done: + hs_descriptor_free(desc); + tor_free(encoded); +} + +static void +test_decode_descriptor(void *arg) +{ + int ret; + char *encoded = NULL; + hs_descriptor_t *desc = helper_build_hs_desc(0); + hs_descriptor_t *decoded = NULL; + hs_descriptor_t *desc_no_ip = NULL; + + (void) arg; + + /* Give some bad stuff to the decoding function. */ + ret = hs_desc_decode_descriptor("hladfjlkjadf", NULL, &decoded); + tt_int_op(ret, OP_EQ, -1); + + ret = hs_desc_encode_descriptor(desc, &encoded); + tt_int_op(ret, ==, 0); + tt_assert(encoded); + + ret = hs_desc_decode_descriptor(encoded, NULL, &decoded); + tt_int_op(ret, ==, 0); + tt_assert(decoded); + + helper_compare_hs_desc(desc, decoded); + + /* Decode a descriptor with _no_ introduction points. */ + { + desc_no_ip = helper_build_hs_desc(1); + tt_assert(desc_no_ip); + tor_free(encoded); + ret = hs_desc_encode_descriptor(desc_no_ip, &encoded); + tt_int_op(ret, ==, 0); + tt_assert(encoded); + hs_descriptor_free(decoded); + ret = hs_desc_decode_descriptor(encoded, NULL, &decoded); + tt_int_op(ret, ==, 0); + tt_assert(decoded); + } + + done: + hs_descriptor_free(desc); + hs_descriptor_free(desc_no_ip); + hs_descriptor_free(decoded); + tor_free(encoded); +} + +static void +test_supported_version(void *arg) +{ + int ret; + + (void) arg; + + /* Unsupported. */ + ret = hs_desc_is_supported_version(42); + tt_int_op(ret, OP_EQ, 0); + /* To early. */ + ret = hs_desc_is_supported_version(HS_DESC_SUPPORTED_FORMAT_VERSION_MIN - 1); + tt_int_op(ret, OP_EQ, 0); + /* One too new. */ + ret = hs_desc_is_supported_version(HS_DESC_SUPPORTED_FORMAT_VERSION_MAX + 1); + tt_int_op(ret, OP_EQ, 0); + /* Valid version. */ + ret = hs_desc_is_supported_version(3); + tt_int_op(ret, OP_EQ, 1); + + done: + ; +} + +static void +test_encrypted_data_len(void *arg) +{ + int ret; + size_t value; + + (void) arg; + + /* No length, error. */ + ret = encrypted_data_length_is_valid(0); + tt_int_op(ret, OP_EQ, 0); + /* Not a multiple of our encryption algorithm (thus no padding). It's + * suppose to be aligned on HS_DESC_PLAINTEXT_PADDING_MULTIPLE. */ + value = HS_DESC_PLAINTEXT_PADDING_MULTIPLE * 10 - 1; + ret = encrypted_data_length_is_valid(value); + tt_int_op(ret, OP_EQ, 0); + /* Valid value. */ + value = HS_DESC_PADDED_PLAINTEXT_MAX_LEN + HS_DESC_ENCRYPTED_SALT_LEN + + DIGEST256_LEN; + ret = encrypted_data_length_is_valid(value); + tt_int_op(ret, OP_EQ, 1); + + /* XXX: Test maximum possible size. */ + + done: + ; +} + +static void +test_decode_intro_point(void *arg) +{ + int ret; + char *encoded_ip = NULL; + size_t len_out; + hs_desc_intro_point_t *ip = NULL; + hs_descriptor_t *desc = NULL; + + (void) arg; + + /* The following certificate expires in 2036. After that, one of the test + * will fail because of the expiry time. */ + + /* Seperate pieces of a valid encoded introduction point. */ + const char *intro_point = + "introduction-point AQIUMDI5OUYyNjhGQ0E5RDU1Q0QxNTc="; + const char *auth_key = + "auth-key\n" + "-----BEGIN ED25519 CERT-----\n" + "AQkACOhAAQW8ltYZMIWpyrfyE/b4Iyi8CNybCwYs6ADk7XfBaxsFAQAgBAD3/BE4\n" + "XojGE/N2bW/wgnS9r2qlrkydGyuCKIGayYx3haZ39LD4ZTmSMRxwmplMAqzG/XNP\n" + "0Kkpg4p2/VnLFJRdU1SMFo1lgQ4P0bqw7Tgx200fulZ4KUM5z5V7m+a/mgY=\n" + "-----END ED25519 CERT-----"; + const char *enc_key = + "enc-key ntor bpZKLsuhxP6woDQ3yVyjm5gUKSk7RjfAijT2qrzbQk0="; + const char *enc_key_legacy = + "enc-key legacy\n" + "-----BEGIN RSA PUBLIC KEY-----\n" + "MIGJAoGBAO4bATcW8kW4h6RQQAKEgg+aXCpF4JwbcO6vGZtzXTDB+HdPVQzwqkbh\n" + "XzFM6VGArhYw4m31wcP1Z7IwULir7UMnAFd7Zi62aYfU6l+Y1yAoZ1wzu1XBaAMK\n" + "ejpwQinW9nzJn7c2f69fVke3pkhxpNdUZ+vplSA/l9iY+y+v+415AgMBAAE=\n" + "-----END RSA PUBLIC KEY-----"; + const char *enc_key_cert = + "enc-key-certification\n" + "-----BEGIN ED25519 CERT-----\n" + "AQsACOhZAUpNvCZ1aJaaR49lS6MCdsVkhVGVrRqoj0Y2T4SzroAtAQAgBABFOcGg\n" + "lbTt1DF5nKTE/gU3Fr8ZtlCIOhu1A+F5LM7fqCUupfesg0KTHwyIZOYQbJuM5/he\n" + "/jDNyLy9woPJdjkxywaY2RPUxGjLYtMQV0E8PUxWyICV+7y52fTCYaKpYQw=\n" + "-----END ED25519 CERT-----"; + const char *enc_key_cert_legacy = + "enc-key-certification\n" + "-----BEGIN CROSSCERT-----\n" + "Sk28JnVolppHj2VLowJ2xWSFUZWtGqiPRjZPhLOugC0ACOhZgFPA5egeRDUXMM1U\n" + "Fn3c7Je0gJS6mVma5FzwlgwggeriF13UZcaT71vEAN/ZJXbxOfQVGMZ0rXuFpjUq\n" + "C8CvqmZIwEUaPE1nDFtmnTcucvNS1YQl9nsjH3ejbxc+4yqps/cXh46FmXsm5yz7\n" + "NZjBM9U1fbJhlNtOvrkf70K8bLk6\n" + "-----END CROSSCERT-----"; + + (void) enc_key_legacy; + (void) enc_key_cert_legacy; + + /* Start by testing the "decode all intro points" function. */ + { + char *line; + desc = helper_build_hs_desc(0); + tt_assert(desc); + /* Only try to decode an incomplete introduction point section. */ + tor_asprintf(&line, "\n%s", intro_point); + ret = decode_intro_points(desc, &desc->encrypted_data, line); + tor_free(line); + tt_int_op(ret, ==, -1); + + /* Decode one complete intro point. */ + smartlist_t *lines = smartlist_new(); + smartlist_add(lines, (char *) intro_point); + smartlist_add(lines, (char *) auth_key); + smartlist_add(lines, (char *) enc_key); + smartlist_add(lines, (char *) enc_key_cert); + encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); + tt_assert(encoded_ip); + tor_asprintf(&line, "\n%s", encoded_ip); + tor_free(encoded_ip); + ret = decode_intro_points(desc, &desc->encrypted_data, line); + tor_free(line); + smartlist_free(lines); + tt_int_op(ret, ==, 0); + } + + /* Try to decode a junk string. */ + { + hs_descriptor_free(desc); + desc = helper_build_hs_desc(0); + const char *junk = "this is not a descriptor"; + ip = decode_introduction_point(desc, junk); + tt_assert(!ip); + desc_intro_point_free(ip); + ip = NULL; + } + + /* Invalid link specifiers. */ + { + smartlist_t *lines = smartlist_new(); + const char *bad_line = "introduction-point blah"; + smartlist_add(lines, (char *) bad_line); + smartlist_add(lines, (char *) auth_key); + smartlist_add(lines, (char *) enc_key); + smartlist_add(lines, (char *) enc_key_cert); + encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); + tt_assert(encoded_ip); + ip = decode_introduction_point(desc, encoded_ip); + tt_assert(!ip); + tor_free(encoded_ip); + smartlist_free(lines); + desc_intro_point_free(ip); + ip = NULL; + } + + /* Invalid auth key type. */ + { + smartlist_t *lines = smartlist_new(); + /* Try to put a valid object that our tokenize function will be able to + * parse but that has nothing to do with the auth_key. */ + const char *bad_line = + "auth-key\n" + "-----BEGIN UNICORN CERT-----\n" + "MIGJAoGBAO4bATcW8kW4h6RQQAKEgg+aXCpF4JwbcO6vGZtzXTDB+HdPVQzwqkbh\n" + "XzFM6VGArhYw4m31wcP1Z7IwULir7UMnAFd7Zi62aYfU6l+Y1yAoZ1wzu1XBaAMK\n" + "ejpwQinW9nzJn7c2f69fVke3pkhxpNdUZ+vplSA/l9iY+y+v+415AgMBAAE=\n" + "-----END UNICORN CERT-----"; + /* Build intro point text. */ + smartlist_add(lines, (char *) intro_point); + smartlist_add(lines, (char *) bad_line); + smartlist_add(lines, (char *) enc_key); + smartlist_add(lines, (char *) enc_key_cert); + encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); + tt_assert(encoded_ip); + ip = decode_introduction_point(desc, encoded_ip); + tt_assert(!ip); + tor_free(encoded_ip); + smartlist_free(lines); + } + + /* Invalid enc-key. */ + { + smartlist_t *lines = smartlist_new(); + const char *bad_line = + "enc-key unicorn bpZKLsuhxP6woDQ3yVyjm5gUKSk7RjfAijT2qrzbQk0="; + /* Build intro point text. */ + smartlist_add(lines, (char *) intro_point); + smartlist_add(lines, (char *) auth_key); + smartlist_add(lines, (char *) bad_line); + smartlist_add(lines, (char *) enc_key_cert); + encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); + tt_assert(encoded_ip); + ip = decode_introduction_point(desc, encoded_ip); + tt_assert(!ip); + tor_free(encoded_ip); + smartlist_free(lines); + } + + /* Invalid enc-key object. */ + { + smartlist_t *lines = smartlist_new(); + const char *bad_line = "enc-key ntor"; + /* Build intro point text. */ + smartlist_add(lines, (char *) intro_point); + smartlist_add(lines, (char *) auth_key); + smartlist_add(lines, (char *) bad_line); + smartlist_add(lines, (char *) enc_key_cert); + encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); + tt_assert(encoded_ip); + ip = decode_introduction_point(desc, encoded_ip); + tt_assert(!ip); + tor_free(encoded_ip); + smartlist_free(lines); + } + + /* Invalid enc-key base64 curv25519 key. */ + { + smartlist_t *lines = smartlist_new(); + const char *bad_line = "enc-key ntor blah==="; + /* Build intro point text. */ + smartlist_add(lines, (char *) intro_point); + smartlist_add(lines, (char *) auth_key); + smartlist_add(lines, (char *) bad_line); + smartlist_add(lines, (char *) enc_key_cert); + encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); + tt_assert(encoded_ip); + ip = decode_introduction_point(desc, encoded_ip); + tt_assert(!ip); + tor_free(encoded_ip); + smartlist_free(lines); + } + + /* Invalid enc-key invalid legacy. */ + { + smartlist_t *lines = smartlist_new(); + const char *bad_line = "enc-key legacy blah==="; + /* Build intro point text. */ + smartlist_add(lines, (char *) intro_point); + smartlist_add(lines, (char *) auth_key); + smartlist_add(lines, (char *) bad_line); + smartlist_add(lines, (char *) enc_key_cert); + encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); + tt_assert(encoded_ip); + ip = decode_introduction_point(desc, encoded_ip); + tt_assert(!ip); + tor_free(encoded_ip); + smartlist_free(lines); + } + + /* Valid object. */ + { + smartlist_t *lines = smartlist_new(); + /* Build intro point text. */ + smartlist_add(lines, (char *) intro_point); + smartlist_add(lines, (char *) auth_key); + smartlist_add(lines, (char *) enc_key); + smartlist_add(lines, (char *) enc_key_cert); + encoded_ip = smartlist_join_strings(lines, "\n", 0, &len_out); + tt_assert(encoded_ip); + ip = decode_introduction_point(desc, encoded_ip); + tt_assert(ip); + tor_free(encoded_ip); + smartlist_free(lines); + } + + done: + hs_descriptor_free(desc); + desc_intro_point_free(ip); +} + +static const char encrypted_desc_portion[] = "create2-formats 2\n" + "authentication-required ed25519\n" + "introduction-point AQAGAQIDBCMp\n" + "auth-key\n" + "-----BEGIN ED25519 CERT-----\n" + "AQkABmRZASMANx4sbMyDd4i+MciVUw29vPQ/nOFrLwUdTGEBXSXrAQAgBABo2zfd\n" + "wyqAdzSeaIzH1TUcV3u8nAG2YhNCRw2/2vVWuD6Z4Fn0aNHnh1FONNkbismC9t1X\n" + "Rf07hdZkVYEbOaPsHnFwhJULVSUo8YYuL19jghRjwMqPGeGfD4iuQqdo3QA=\n" + "-----END ED25519 CERT-----\n" + "enc-key ntor xo2n5anLMoyIMuhcKSLdVZISyISBW8j1vXRbpdbK+lU=\n" + "enc-key-certification\n" + "-----BEGIN ED25519 CERT-----\n" + "AQsABmRZATUYQypFY7pr8FpmV61pcqUylt5fEr/QLfavfcwbzlA7AQAgBADSI5Ie\n" + "Ekdy+qeHngLmz6Gr7fQ5xvilhxB91UDIjwRfP0ufoVF+HalsyXKskYvcYhH67+lw\n" + "D947flCHzeJyfAT38jO/Cw42qM7H+SObBMcsTB93J0lPNBy4OHosH9ybtwA=\n" + "-----END ED25519 CERT-----\n" + "introduction-point AQESJgAAAAAAAAAAAAAAAAAAASMp\n" + "auth-key\n" + "-----BEGIN ED25519 CERT-----\n" + "AQkABmRZAVdPeZyzfCyUDC1fnYyom8eOS2O1opzTytEU7dlOf9brAQAgBABo2zfd\n" + "wyqAdzSeaIzH1TUcV3u8nAG2YhNCRw2/2vVWuHVSGTrO1EM6Eu1jyOw/qtSS6Exf\n" + "omV417y8uK2gHQ+1FWqg/KaogELYzDG6pcj2NkziovnIfET0W7nZB85YjwQ=\n" + "-----END ED25519 CERT-----\n" + "enc-key ntor MbxzxI1K+zcl7e+wysLK96UZWwFEJQqI0G7b0muRXx4=\n" + "enc-key-certification\n" + "-----BEGIN ED25519 CERT-----\n" + "AQsABmRZATUYQypFY7pr8FpmV61pcqUylt5fEr/QLfavfcwbzlA7AQAgBADimELh\n" + "lLZvy/LjXnCdpvaVRhiGBeIRAGIDGz1SY/zD6BAnpDL420ha2TdvdGsg8cgfTcJZ\n" + "g84x85+zhuh8kkdgt7bOmjOXLlButDCfTarMgCfy6pSI/hUckk+j5Q43uws=\n" + "-----END ED25519 CERT-----\n" + "introduction-point AQIUMDI5OUYyNjhGQ0E5RDU1Q0QxNTc=\n" + "auth-key\n" + "-----BEGIN ED25519 CERT-----\n" + "AQkABmRZASnpBjHsw0Gpvi+KNlW4ouXegIsUBHMvJN1CQHDTLdfnAQAgBABo2zfd\n" + "wyqAdzSeaIzH1TUcV3u8nAG2YhNCRw2/2vVWuOlbHs8s8LAeEb36urVKTJ5exgss\n" + "V+ylIwHSWF0qanCnnTnDyNg/3YRUo0AZr0d/CoiNV+XsGE4Vuho/TBVC+wY=\n" + "-----END ED25519 CERT-----\n" + "enc-key legacy\n" + "-----BEGIN RSA PUBLIC KEY-----\n" + "MIGJAoGBALttUA1paMCQiuIZeCp26REztziej5dN0o6/kTU//ItT4MGxTfmnLmcq\n" + "WpvK4jdX1h2OlDCZmtA7sb0HOkjELgrDU0ATVwOaeG+3icSddmQyaeT8+cxQEktj\n" + "SXMQ+iJDxJIIWFPmLmWWQHqb4IRfl021l3iTErhtZKBz37JNK7E/AgMBAAE=\n" + "-----END RSA PUBLIC KEY-----\n" + "enc-key-certification\n" + "-----BEGIN CROSSCERT-----\n" + "NRhDKkVjumvwWmZXrWlypTKW3l8Sv9At9q99zBvOUDsABmRZgBROMZr2Mhj8H8zd\n" + "xbU6ZvDUwD9xkptNHq0W04CyWb8p0y56y89y2kBF6RrSrVBJCyaHyph6Bmi5z0Lc\n" + "f4jjakRlHwB7oYqSo7l8EE9DGE0rEat3hNhN+tBIAJL5gKOL4dgfD5gMi51zzSFl\n" + "epv8idTwhqZ/sxRMUIQrb9AB8sOD\n" + "-----END CROSSCERT-----\n" + "introduction-point AQIUMDI5OUYyNjhGQ0E5RDU1Q0QxNTc=\n" + "auth-key\n" + "-----BEGIN ED25519 CERT-----\n" + "AQkABmRZAdBFQcE23cIoCMFTycnQ1st2752vdjGME+QPMTTxvqZhAQAgBABo2zfd\n" + "wyqAdzSeaIzH1TUcV3u8nAG2YhNCRw2/2vVWuOGXGPnb3g9J8aSyN7jYs71ET0wC\n" + "TlDLcXCgAMnKA6of/a4QceFfAFsCnI3qCd8YUo5NYCMh2d5mtFpLK41Wpwo=\n" + "-----END ED25519 CERT-----\n" + "enc-key legacy\n" + "-----BEGIN RSA PUBLIC KEY-----\n" + "MIGJAoGBALuyEVMz4GwZ8LnBYxLZDHNg1DHUZJZNmE7HsQDcM/FYeZ1LjYLe/K8s\n" + "BFzgFmjMU1ondIWGWpRCLYcZxQMZaSU0ObdezDwelTkHo/u7K2fQTLmI9EofcsK0\n" + "4OkY6eo8BFtXXoQJhAw5WatRpzah2sGqMPXs2jr7Ku4Pd8JuRd35AgMBAAE=\n" + "-----END RSA PUBLIC KEY-----\n" + "enc-key-certification\n" + "-----BEGIN CROSSCERT-----\n" + "NRhDKkVjumvwWmZXrWlypTKW3l8Sv9At9q99zBvOUDsABmRZgGwpo67ybC7skFYk\n" + "JjvqcbrKg8Fwrvue9yF66p1O90fqziVsvpKGcsr3tcIJHtNsrWVRDpyFwnc1wlVE\n" + "O7rHftF4GUsKaoz3wxxmb0YyyYVQvLpH0Y6lFIvw8nGurnsMefQWLcxuEX7xZOPl\n" + "VAlVp+XtJE1ZNQ62hpnNgBDi1ikJ\n" + "-----END CROSSCERT-----"; + +static void +test_decode_multiple_intro_points(void *arg) +{ + int ret; + hs_descriptor_t *desc = NULL; + + /* XXXX test is broken! Assumes that signing key is as hardcoded in + * crosscert code above. */ + if (1) + tt_skip(); + + (void) arg; + + { + /* Build a descriptor with no intro points. */ + desc = helper_build_hs_desc(1); + tt_assert(desc); + } + + ret = decode_intro_points(desc, &desc->encrypted_data, + encrypted_desc_portion); + tt_int_op(ret, ==, 0); + + tt_int_op(smartlist_len(desc->encrypted_data.intro_points), ==, 4); + + done: + ; +} + +static void +test_decode_plaintext(void *arg) +{ + int ret; + hs_desc_plaintext_data_t desc_plaintext; + const char *bad_value = "unicorn"; + + (void) arg; + +#define template \ + "hs-descriptor %s\n" \ + "descriptor-lifetime %s\n" \ + "descriptor-signing-key-cert\n" \ + "-----BEGIN ED25519 CERT-----\n" \ + "AQgABjvPAQaG3g+dc6oV/oJV4ODAtkvx56uBnPtBT9mYVuHVOhn7AQAgBABUg3mQ\n" \ + "myBr4bu5LCr53wUEbW2EXui01CbUgU7pfo9LvJG3AcXRojj6HlfsUs9BkzYzYdjF\n" \ + "A69Apikgu0ewHYkFFASt7Il+gB3w6J8YstQJZT7dtbtl+doM7ug8B68Qdg8=\n" \ + "-----END ED25519 CERT-----\n" \ + "revision-counter %s\n" \ + "encrypted\n" \ + "-----BEGIN %s-----\n" \ + "UNICORN\n" \ + "-----END MESSAGE-----\n" \ + "signature m20WJH5agqvwhq7QeuEZ1mYyPWQDO+eJOZUjLhAiKu8DbL17DsDfJE6kXbWy" \ + "HimbNj2we0enV3cCOOAsmPOaAw\n" + + /* Invalid version. */ + { + char *plaintext; + tor_asprintf(&plaintext, template, bad_value, "180", "42", "MESSAGE"); + ret = hs_desc_decode_plaintext(plaintext, &desc_plaintext); + tor_free(plaintext); + tt_int_op(ret, OP_EQ, -1); + } + + /* Missing fields. */ + { + const char *plaintext = "hs-descriptor 3\n"; + ret = hs_desc_decode_plaintext(plaintext, &desc_plaintext); + tt_int_op(ret, OP_EQ, -1); + } + + /* Max length. */ + { + size_t big = 64000; + /* Must always be bigger than HS_DESC_MAX_LEN. */ + tt_int_op(HS_DESC_MAX_LEN, <, big); + char *plaintext = tor_malloc_zero(big); + memset(plaintext, 'a', big); + plaintext[big - 1] = '\0'; + ret = hs_desc_decode_plaintext(plaintext, &desc_plaintext); + tor_free(plaintext); + tt_int_op(ret, OP_EQ, -1); + } + + /* Bad lifetime value. */ + { + char *plaintext; + tor_asprintf(&plaintext, template, "3", bad_value, "42", "MESSAGE"); + ret = hs_desc_decode_plaintext(plaintext, &desc_plaintext); + tor_free(plaintext); + tt_int_op(ret, OP_EQ, -1); + } + + /* Huge lifetime value. */ + { + char *plaintext; + tor_asprintf(&plaintext, template, "3", "7181615", "42", "MESSAGE"); + ret = hs_desc_decode_plaintext(plaintext, &desc_plaintext); + tor_free(plaintext); + tt_int_op(ret, OP_EQ, -1); + } + + /* Invalid encrypted section. */ + { + char *plaintext; + tor_asprintf(&plaintext, template, "3", "180", "42", bad_value); + ret = hs_desc_decode_plaintext(plaintext, &desc_plaintext); + tor_free(plaintext); + tt_int_op(ret, OP_EQ, -1); + } + + /* Invalid revision counter. */ + { + char *plaintext; + tor_asprintf(&plaintext, template, "3", "180", bad_value, "MESSAGE"); + ret = hs_desc_decode_plaintext(plaintext, &desc_plaintext); + tor_free(plaintext); + tt_int_op(ret, OP_EQ, -1); + } + + done: + ; +} + +static void +test_validate_cert(void *arg) +{ + int ret; + time_t now = time(NULL); + ed25519_keypair_t kp; + tor_cert_t *cert = NULL; + + (void) arg; + + ret = ed25519_keypair_generate(&kp, 0); + tt_int_op(ret, ==, 0); + + /* Cert of type CERT_TYPE_AUTH_HS_IP_KEY. */ + cert = tor_cert_create(&kp, CERT_TYPE_AUTH_HS_IP_KEY, + &kp.pubkey, now, 3600, + CERT_FLAG_INCLUDE_SIGNING_KEY); + tt_assert(cert); + /* Test with empty certificate. */ + ret = cert_is_valid(NULL, CERT_TYPE_AUTH_HS_IP_KEY, "unicorn"); + tt_int_op(ret, OP_EQ, 0); + /* Test with a bad type. */ + ret = cert_is_valid(cert, CERT_TYPE_SIGNING_HS_DESC, "unicorn"); + tt_int_op(ret, OP_EQ, 0); + /* Normal validation. */ + ret = cert_is_valid(cert, CERT_TYPE_AUTH_HS_IP_KEY, "unicorn"); + tt_int_op(ret, OP_EQ, 1); + /* Break signing key so signature verification will fails. */ + memset(&cert->signing_key, 0, sizeof(cert->signing_key)); + ret = cert_is_valid(cert, CERT_TYPE_AUTH_HS_IP_KEY, "unicorn"); + tt_int_op(ret, OP_EQ, 0); + tor_cert_free(cert); + + /* Try a cert without including the signing key. */ + cert = tor_cert_create(&kp, CERT_TYPE_AUTH_HS_IP_KEY, &kp.pubkey, now, + 3600, 0); + tt_assert(cert); + /* Test with a bad type. */ + ret = cert_is_valid(cert, CERT_TYPE_AUTH_HS_IP_KEY, "unicorn"); + tt_int_op(ret, OP_EQ, 0); + + done: + tor_cert_free(cert); +} + +static void +test_desc_signature(void *arg) +{ + int ret; + char *data = NULL, *desc = NULL; + char sig_b64[ED25519_SIG_BASE64_LEN + 1]; + ed25519_keypair_t kp; + ed25519_signature_t sig; + + (void) arg; + + ed25519_keypair_generate(&kp, 0); + /* Setup a phoony descriptor but with a valid signature token that is the + * signature is verifiable. */ + tor_asprintf(&data, "This is a signed descriptor\n"); + ret = ed25519_sign_prefixed(&sig, (const uint8_t *) data, strlen(data), + "Tor onion service descriptor sig v3", &kp); + tt_int_op(ret, ==, 0); + ret = ed25519_signature_to_base64(sig_b64, &sig); + tt_int_op(ret, ==, 0); + /* Build the descriptor that should be valid. */ + tor_asprintf(&desc, "%ssignature %s\n", data, sig_b64); + ret = desc_sig_is_valid(sig_b64, &kp, desc, strlen(desc)); + tt_int_op(ret, ==, 1); + /* Junk signature. */ + ret = desc_sig_is_valid("JUNK", &kp, desc, strlen(desc)); + tt_int_op(ret, ==, 0); + + done: + tor_free(desc); + tor_free(data); +} + +struct testcase_t hs_descriptor[] = { + /* Encoding tests. */ + { "cert_encoding", test_cert_encoding, TT_FORK, + NULL, NULL }, + { "link_specifier", test_link_specifier, TT_FORK, + NULL, NULL }, + { "encode_descriptor", test_encode_descriptor, TT_FORK, + NULL, NULL }, + { "descriptor_padding", test_descriptor_padding, TT_FORK, + NULL, NULL }, + + /* Decoding tests. */ + { "decode_descriptor", test_decode_descriptor, TT_FORK, + NULL, NULL }, + { "encrypted_data_len", test_encrypted_data_len, TT_FORK, + NULL, NULL }, + { "decode_intro_point", test_decode_intro_point, TT_FORK, + NULL, NULL }, + { "decode_multiple_intro_points", test_decode_multiple_intro_points, TT_FORK, + NULL, NULL }, + { "decode_plaintext", test_decode_plaintext, TT_FORK, + NULL, NULL }, + + /* Misc. */ + { "version", test_supported_version, TT_FORK, + NULL, NULL }, + { "validate_cert", test_validate_cert, TT_FORK, + NULL, NULL }, + { "desc_signature", test_desc_signature, TT_FORK, + NULL, NULL }, + + END_OF_TESTCASES +}; + diff --git a/src/test/test_link_handshake.c b/src/test/test_link_handshake.c index 5273f3373f..9899e54231 100644 --- a/src/test/test_link_handshake.c +++ b/src/test/test_link_handshake.c @@ -7,8 +7,16 @@ #define CONNECTION_PRIVATE #define TOR_CHANNEL_INTERNAL_ #define TORTLS_PRIVATE + +#include "compat.h" + +/* Some versions of OpenSSL declare SSL_get_selected_srtp_profile twice in + * srtp.h. Suppress the GCC warning so we can build with -Wredundant-decl. */ +DISABLE_GCC_WARNING(redundant-decls) #include <openssl/x509.h> #include <openssl/ssl.h> +ENABLE_GCC_WARNING(redundant-decls) + #include "or.h" #include "config.h" #include "connection.h" diff --git a/src/test/test_policy.c b/src/test/test_policy.c index b89de01b7b..4df40f618e 100644 --- a/src/test/test_policy.c +++ b/src/test/test_policy.c @@ -258,14 +258,16 @@ test_policies_general(void *arg) tt_assert(!cmp_addr_policies(policy2, policy2)); tt_assert(!cmp_addr_policies(NULL, NULL)); - tt_assert(!policy_is_reject_star(policy2, AF_INET)); - tt_assert(policy_is_reject_star(policy, AF_INET)); - tt_assert(policy_is_reject_star(policy10, AF_INET)); - tt_assert(!policy_is_reject_star(policy10, AF_INET6)); - tt_assert(policy_is_reject_star(policy11, AF_INET)); - tt_assert(policy_is_reject_star(policy11, AF_INET6)); - tt_assert(policy_is_reject_star(NULL, AF_INET)); - tt_assert(policy_is_reject_star(NULL, AF_INET6)); + tt_assert(!policy_is_reject_star(policy2, AF_INET, 1)); + tt_assert(policy_is_reject_star(policy, AF_INET, 1)); + tt_assert(policy_is_reject_star(policy10, AF_INET, 1)); + tt_assert(!policy_is_reject_star(policy10, AF_INET6, 1)); + tt_assert(policy_is_reject_star(policy11, AF_INET, 1)); + tt_assert(policy_is_reject_star(policy11, AF_INET6, 1)); + tt_assert(policy_is_reject_star(NULL, AF_INET, 1)); + tt_assert(policy_is_reject_star(NULL, AF_INET6, 1)); + tt_assert(!policy_is_reject_star(NULL, AF_INET, 0)); + tt_assert(!policy_is_reject_star(NULL, AF_INET6, 0)); addr_policy_list_free(policy); policy = NULL; diff --git a/src/test/test_rendcache.c b/src/test/test_rendcache.c index a5d3f351f8..7f72e441ee 100644 --- a/src/test/test_rendcache.c +++ b/src/test/test_rendcache.c @@ -10,6 +10,7 @@ #include "router.h" #include "routerlist.h" #include "config.h" +#include "hs_common.h" #include <openssl/rsa.h> #include "rend_test_helpers.h" #include "log_test_helpers.h" @@ -24,15 +25,16 @@ static const int TIME_IN_THE_FUTURE = REND_CACHE_MAX_SKEW + 60; static rend_data_t * mock_rend_data(const char *onion_address) { - rend_data_t *rend_query = tor_malloc_zero(sizeof(rend_data_t)); + rend_data_v2_t *v2_data = tor_malloc_zero(sizeof(*v2_data)); + rend_data_t *rend_query = &v2_data->base_; + rend_query->version = 2; - strlcpy(rend_query->onion_address, onion_address, - sizeof(rend_query->onion_address)); - rend_query->auth_type = REND_NO_AUTH; + strlcpy(v2_data->onion_address, onion_address, + sizeof(v2_data->onion_address)); + v2_data->auth_type = REND_NO_AUTH; rend_query->hsdirs_fp = smartlist_new(); smartlist_add(rend_query->hsdirs_fp, tor_memdup("aaaaaaaaaaaaaaaaaaaaaaaa", DIGEST_LEN)); - return rend_query; } @@ -144,7 +146,8 @@ test_rend_cache_store_v2_desc_as_client(void *data) // Test mismatch between service ID and onion address rend_cache_init(); - strncpy(mock_rend_query->onion_address, "abc", REND_SERVICE_ID_LEN_BASE32+1); + strncpy(TO_REND_DATA_V2(mock_rend_query)->onion_address, "abc", + REND_SERVICE_ID_LEN_BASE32+1); ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, desc_id_base32, mock_rend_query, NULL); @@ -230,9 +233,9 @@ test_rend_cache_store_v2_desc_as_client(void *data) generate_desc(RECENT_TIME, &desc_holder, &service_id, 3); mock_rend_query = mock_rend_data(service_id); - mock_rend_query->auth_type = REND_BASIC_AUTH; + TO_REND_DATA_V2(mock_rend_query)->auth_type = REND_BASIC_AUTH; client_cookie[0] = 'A'; - memcpy(mock_rend_query->descriptor_cookie, client_cookie, + memcpy(TO_REND_DATA_V2(mock_rend_query)->descriptor_cookie, client_cookie, REND_DESC_COOKIE_LEN); base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN); @@ -250,7 +253,7 @@ test_rend_cache_store_v2_desc_as_client(void *data) generate_desc(RECENT_TIME, &desc_holder, &service_id, 3); mock_rend_query = mock_rend_data(service_id); - mock_rend_query->auth_type = REND_BASIC_AUTH; + TO_REND_DATA_V2(mock_rend_query)->auth_type = REND_BASIC_AUTH; base32_encode(desc_id_base32, sizeof(desc_id_base32), desc_holder->desc_id, DIGEST_LEN); ret = rend_cache_store_v2_desc_as_client(desc_holder->desc_str, @@ -1078,9 +1081,10 @@ static void test_rend_cache_clean_v2_descs_as_dir(void *data) { rend_cache_entry_t *e; - time_t now; + time_t now, cutoff; rend_service_descriptor_t *desc; now = time(NULL); + cutoff = now - (REND_CACHE_MAX_AGE + REND_CACHE_MAX_SKEW); const char key[DIGEST_LEN] = "abcde"; (void)data; @@ -1088,7 +1092,7 @@ test_rend_cache_clean_v2_descs_as_dir(void *data) rend_cache_init(); // Test running with an empty cache - rend_cache_clean_v2_descs_as_dir(now, 0); + rend_cache_clean_v2_descs_as_dir(cutoff); tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0); // Test with only one new entry @@ -1100,38 +1104,15 @@ test_rend_cache_clean_v2_descs_as_dir(void *data) e->parsed = desc; digestmap_set(rend_cache_v2_dir, key, e); - rend_cache_clean_v2_descs_as_dir(now, 0); + /* Set the cutoff to minus 10 seconds. */ + rend_cache_clean_v2_descs_as_dir(cutoff - 10); tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 1); // Test with one old entry - desc->timestamp = now - (REND_CACHE_MAX_AGE + REND_CACHE_MAX_SKEW + 1000); - rend_cache_clean_v2_descs_as_dir(now, 0); - tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0); - - // Test with one entry that has an old last served - e = tor_malloc_zero(sizeof(rend_cache_entry_t)); - e->last_served = now - (REND_CACHE_MAX_AGE + REND_CACHE_MAX_SKEW + 1000); - desc = tor_malloc_zero(sizeof(rend_service_descriptor_t)); - desc->timestamp = now; - desc->pk = pk_generate(0); - e->parsed = desc; - digestmap_set(rend_cache_v2_dir, key, e); - - rend_cache_clean_v2_descs_as_dir(now, 0); + desc->timestamp = cutoff - 1000; + rend_cache_clean_v2_descs_as_dir(cutoff); tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 0); - // Test a run through asking for a large force_remove - e = tor_malloc_zero(sizeof(rend_cache_entry_t)); - e->last_served = now; - desc = tor_malloc_zero(sizeof(rend_service_descriptor_t)); - desc->timestamp = now; - desc->pk = pk_generate(0); - e->parsed = desc; - digestmap_set(rend_cache_v2_dir, key, e); - - rend_cache_clean_v2_descs_as_dir(now, 20000); - tt_int_op(digestmap_size(rend_cache_v2_dir), OP_EQ, 1); - done: rend_cache_free_all(); } diff --git a/src/test/test_tortls.c b/src/test/test_tortls.c index 44961c88e7..e2fee813bf 100644 --- a/src/test/test_tortls.c +++ b/src/test/test_tortls.c @@ -834,9 +834,9 @@ test_tortls_classify_client_ciphers(void *ignored) sk_SSL_CIPHER_zero(ciphers); - one = get_cipher_by_name("ECDH-RSA-AES256-GCM-SHA384"); + one = get_cipher_by_name("ECDHE-RSA-AES256-GCM-SHA384"); one->id = 0x00ff; - two = get_cipher_by_name("ECDH-RSA-AES128-GCM-SHA256"); + two = get_cipher_by_name("ECDHE-RSA-AES128-GCM-SHA256"); two->id = 0x0000; sk_SSL_CIPHER_push(ciphers, one); tls->client_cipher_list_type = 0; @@ -906,7 +906,7 @@ test_tortls_client_is_using_v2_ciphers(void *ignored) tt_int_op(ret, OP_EQ, 0); ciphers = sk_SSL_CIPHER_new_null(); - SSL_CIPHER *one = get_cipher_by_name("ECDH-RSA-AES256-GCM-SHA384"); + SSL_CIPHER *one = get_cipher_by_name("ECDHE-RSA-AES256-GCM-SHA384"); one->id = 0x00ff; sk_SSL_CIPHER_push(ciphers, one); sess->ciphers = ciphers; @@ -1551,7 +1551,7 @@ test_tortls_session_secret_cb(void *ignored) tor_tls_session_secret_cb(tls->ssl, NULL, NULL, NULL, NULL, NULL); tt_assert(!tls->ssl->tls_session_secret_cb); - one = get_cipher_by_name("ECDH-RSA-AES256-GCM-SHA384"); + one = get_cipher_by_name("ECDHE-RSA-AES256-GCM-SHA384"); one->id = 0x00ff; ciphers = sk_SSL_CIPHER_new_null(); sk_SSL_CIPHER_push(ciphers, one); diff --git a/src/test/test_util.c b/src/test/test_util.c index 7276c0cbfc..b74f658146 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -5612,6 +5612,33 @@ test_util_monotonic_time_ratchet(void *arg) ; } +static void +test_util_htonll(void *arg) +{ + (void)arg; +#ifdef WORDS_BIGENDIAN + const uint64_t res_be = 0x8877665544332211; +#else + const uint64_t res_le = 0x1122334455667788; +#endif + + tt_u64_op(0, OP_EQ, tor_htonll(0)); + tt_u64_op(0, OP_EQ, tor_ntohll(0)); + tt_u64_op(UINT64_MAX, OP_EQ, tor_htonll(UINT64_MAX)); + tt_u64_op(UINT64_MAX, OP_EQ, tor_ntohll(UINT64_MAX)); + +#ifdef WORDS_BIGENDIAN + tt_u64_op(res_be, OP_EQ, tor_htonll(0x8877665544332211)); + tt_u64_op(res_be, OP_EQ, tor_ntohll(0x8877665544332211)); +#else + tt_u64_op(res_le, OP_EQ, tor_htonll(0x8877665544332211)); + tt_u64_op(res_le, OP_EQ, tor_ntohll(0x8877665544332211)); +#endif + + done: + ; +} + #define UTIL_LEGACY(name) \ { #name, test_util_ ## name , 0, NULL, NULL } @@ -5705,6 +5732,7 @@ struct testcase_t util_tests[] = { UTIL_TEST(calloc_check, 0), UTIL_TEST(monotonic_time, 0), UTIL_TEST(monotonic_time_ratchet, TT_FORK), + UTIL_TEST(htonll, 0), END_OF_TESTCASES }; diff --git a/src/test/test_util_format.c b/src/test/test_util_format.c index 63a668238c..1d58ba2bf8 100644 --- a/src/test/test_util_format.c +++ b/src/test/test_util_format.c @@ -11,25 +11,14 @@ #define NS_MODULE util_format -#if !defined(HAVE_HTONLL) && !defined(htonll) -#ifdef WORDS_BIGENDIAN -#define htonll(x) (x) -#else -static uint64_t -htonll(uint64_t a) -{ - return htonl((uint32_t)(a>>32)) | (((uint64_t)htonl((uint32_t)a))<<32); -} -#endif -#endif - static void test_util_format_unaligned_accessors(void *ignored) { (void)ignored; char buf[9] = "onionsoup"; // 6f6e696f6e736f7570 - tt_u64_op(get_uint64(buf+1), OP_EQ, htonll(U64_LITERAL(0x6e696f6e736f7570))); + tt_u64_op(get_uint64(buf+1), OP_EQ, + tor_htonll(U64_LITERAL(0x6e696f6e736f7570))); tt_uint_op(get_uint32(buf+1), OP_EQ, htonl(0x6e696f6e)); tt_uint_op(get_uint16(buf+1), OP_EQ, htons(0x6e69)); tt_uint_op(get_uint8(buf+1), OP_EQ, 0x6e); @@ -43,7 +32,7 @@ test_util_format_unaligned_accessors(void *ignored) set_uint32(buf+1, htonl(0x78696465)); tt_mem_op(buf, OP_EQ, "oxidestop", 9); - set_uint64(buf+1, htonll(U64_LITERAL(0x6266757363617465))); + set_uint64(buf+1, tor_htonll(U64_LITERAL(0x6266757363617465))); tt_mem_op(buf, OP_EQ, "obfuscate", 9); done: ; diff --git a/src/test/testing_common.c b/src/test/testing_common.c index deb11d0112..caeae13a38 100644 --- a/src/test/testing_common.c +++ b/src/test/testing_common.c @@ -102,18 +102,41 @@ setup_directory(void) temp_dir_setup_in_pid = getpid(); } -/** Return a filename relative to our testing temporary directory */ -const char * -get_fname(const char *name) +/** Return a filename relative to our testing temporary directory, based on + * name and suffix. If name is NULL, return the name of the testing temporary + * directory. */ +static const char * +get_fname_suffix(const char *name, const char *suffix) { static char buf[1024]; setup_directory(); if (!name) return temp_dir; - tor_snprintf(buf,sizeof(buf),"%s/%s",temp_dir,name); + tor_snprintf(buf,sizeof(buf),"%s/%s%s%s",temp_dir,name,suffix ? "_" : "", + suffix ? suffix : ""); return buf; } +/** Return a filename relative to our testing temporary directory. If name is + * NULL, return the name of the testing temporary directory. */ +const char * +get_fname(const char *name) +{ + return get_fname_suffix(name, NULL); +} + +/** Return a filename with a random suffix, relative to our testing temporary + * directory. If name is NULL, return the name of the testing temporary + * directory, without any suffix. */ +const char * +get_fname_rnd(const char *name) +{ + char rnd[256], rnd32[256]; + crypto_rand(rnd, RAND_PATH_BYTES); + base32_encode(rnd32, sizeof(rnd32), rnd, RAND_PATH_BYTES); + return get_fname_suffix(name, rnd32); +} + /* Remove a directory and all of its subdirectories */ static void rm_rf(const char *dir) @@ -158,6 +181,9 @@ remove_directory(void) static void * passthrough_test_setup(const struct testcase_t *testcase) { + /* Make sure the passthrough doesn't unintentionally fail or skip tests */ + tor_assert(testcase->setup_data); + tor_assert(testcase->setup_data != (void*)TT_SKIP); return testcase->setup_data; } static int diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c index 4ddfbc9657..db308485e6 100644 --- a/src/tools/tor-gencert.c +++ b/src/tools/tor-gencert.c @@ -416,12 +416,11 @@ key_to_string(EVP_PKEY *key) } BIO_get_mem_ptr(b, &buf); - (void) BIO_set_close(b, BIO_NOCLOSE); - BIO_free(b); result = tor_malloc(buf->length + 1); memcpy(result, buf->data, buf->length); result[buf->length] = 0; - BUF_MEM_free(buf); + + BIO_free(b); RSA_free(rsa); return result; diff --git a/src/trunnel/ed25519_cert.c b/src/trunnel/ed25519_cert.c index a492ada417..dd5088b231 100644 --- a/src/trunnel/ed25519_cert.c +++ b/src/trunnel/ed25519_cert.c @@ -430,6 +430,597 @@ ed25519_cert_extension_parse(ed25519_cert_extension_t **output, const uint8_t *i } return result; } +link_specifier_t * +link_specifier_new(void) +{ + link_specifier_t *val = trunnel_calloc(1, sizeof(link_specifier_t)); + if (NULL == val) + return NULL; + return val; +} + +/** Release all storage held inside 'obj', but do not free 'obj'. + */ +static void +link_specifier_clear(link_specifier_t *obj) +{ + (void) obj; + TRUNNEL_DYNARRAY_WIPE(&obj->un_unrecognized); + TRUNNEL_DYNARRAY_CLEAR(&obj->un_unrecognized); +} + +void +link_specifier_free(link_specifier_t *obj) +{ + if (obj == NULL) + return; + link_specifier_clear(obj); + trunnel_memwipe(obj, sizeof(link_specifier_t)); + trunnel_free_(obj); +} + +uint8_t +link_specifier_get_ls_type(link_specifier_t *inp) +{ + return inp->ls_type; +} +int +link_specifier_set_ls_type(link_specifier_t *inp, uint8_t val) +{ + inp->ls_type = val; + return 0; +} +uint8_t +link_specifier_get_ls_len(link_specifier_t *inp) +{ + return inp->ls_len; +} +int +link_specifier_set_ls_len(link_specifier_t *inp, uint8_t val) +{ + inp->ls_len = val; + return 0; +} +uint32_t +link_specifier_get_un_ipv4_addr(link_specifier_t *inp) +{ + return inp->un_ipv4_addr; +} +int +link_specifier_set_un_ipv4_addr(link_specifier_t *inp, uint32_t val) +{ + inp->un_ipv4_addr = val; + return 0; +} +uint16_t +link_specifier_get_un_ipv4_port(link_specifier_t *inp) +{ + return inp->un_ipv4_port; +} +int +link_specifier_set_un_ipv4_port(link_specifier_t *inp, uint16_t val) +{ + inp->un_ipv4_port = val; + return 0; +} +size_t +link_specifier_getlen_un_ipv6_addr(const link_specifier_t *inp) +{ + (void)inp; return 16; +} + +uint8_t +link_specifier_get_un_ipv6_addr(link_specifier_t *inp, size_t idx) +{ + trunnel_assert(idx < 16); + return inp->un_ipv6_addr[idx]; +} + +uint8_t +link_specifier_getconst_un_ipv6_addr(const link_specifier_t *inp, size_t idx) +{ + return link_specifier_get_un_ipv6_addr((link_specifier_t*)inp, idx); +} +int +link_specifier_set_un_ipv6_addr(link_specifier_t *inp, size_t idx, uint8_t elt) +{ + trunnel_assert(idx < 16); + inp->un_ipv6_addr[idx] = elt; + return 0; +} + +uint8_t * +link_specifier_getarray_un_ipv6_addr(link_specifier_t *inp) +{ + return inp->un_ipv6_addr; +} +const uint8_t * +link_specifier_getconstarray_un_ipv6_addr(const link_specifier_t *inp) +{ + return (const uint8_t *)link_specifier_getarray_un_ipv6_addr((link_specifier_t*)inp); +} +uint16_t +link_specifier_get_un_ipv6_port(link_specifier_t *inp) +{ + return inp->un_ipv6_port; +} +int +link_specifier_set_un_ipv6_port(link_specifier_t *inp, uint16_t val) +{ + inp->un_ipv6_port = val; + return 0; +} +size_t +link_specifier_getlen_un_legacy_id(const link_specifier_t *inp) +{ + (void)inp; return 20; +} + +uint8_t +link_specifier_get_un_legacy_id(link_specifier_t *inp, size_t idx) +{ + trunnel_assert(idx < 20); + return inp->un_legacy_id[idx]; +} + +uint8_t +link_specifier_getconst_un_legacy_id(const link_specifier_t *inp, size_t idx) +{ + return link_specifier_get_un_legacy_id((link_specifier_t*)inp, idx); +} +int +link_specifier_set_un_legacy_id(link_specifier_t *inp, size_t idx, uint8_t elt) +{ + trunnel_assert(idx < 20); + inp->un_legacy_id[idx] = elt; + return 0; +} + +uint8_t * +link_specifier_getarray_un_legacy_id(link_specifier_t *inp) +{ + return inp->un_legacy_id; +} +const uint8_t * +link_specifier_getconstarray_un_legacy_id(const link_specifier_t *inp) +{ + return (const uint8_t *)link_specifier_getarray_un_legacy_id((link_specifier_t*)inp); +} +size_t +link_specifier_getlen_un_ed25519_id(const link_specifier_t *inp) +{ + (void)inp; return 32; +} + +uint8_t +link_specifier_get_un_ed25519_id(link_specifier_t *inp, size_t idx) +{ + trunnel_assert(idx < 32); + return inp->un_ed25519_id[idx]; +} + +uint8_t +link_specifier_getconst_un_ed25519_id(const link_specifier_t *inp, size_t idx) +{ + return link_specifier_get_un_ed25519_id((link_specifier_t*)inp, idx); +} +int +link_specifier_set_un_ed25519_id(link_specifier_t *inp, size_t idx, uint8_t elt) +{ + trunnel_assert(idx < 32); + inp->un_ed25519_id[idx] = elt; + return 0; +} + +uint8_t * +link_specifier_getarray_un_ed25519_id(link_specifier_t *inp) +{ + return inp->un_ed25519_id; +} +const uint8_t * +link_specifier_getconstarray_un_ed25519_id(const link_specifier_t *inp) +{ + return (const uint8_t *)link_specifier_getarray_un_ed25519_id((link_specifier_t*)inp); +} +size_t +link_specifier_getlen_un_unrecognized(const link_specifier_t *inp) +{ + return TRUNNEL_DYNARRAY_LEN(&inp->un_unrecognized); +} + +uint8_t +link_specifier_get_un_unrecognized(link_specifier_t *inp, size_t idx) +{ + return TRUNNEL_DYNARRAY_GET(&inp->un_unrecognized, idx); +} + +uint8_t +link_specifier_getconst_un_unrecognized(const link_specifier_t *inp, size_t idx) +{ + return link_specifier_get_un_unrecognized((link_specifier_t*)inp, idx); +} +int +link_specifier_set_un_unrecognized(link_specifier_t *inp, size_t idx, uint8_t elt) +{ + TRUNNEL_DYNARRAY_SET(&inp->un_unrecognized, idx, elt); + return 0; +} +int +link_specifier_add_un_unrecognized(link_specifier_t *inp, uint8_t elt) +{ + TRUNNEL_DYNARRAY_ADD(uint8_t, &inp->un_unrecognized, elt, {}); + return 0; + trunnel_alloc_failed: + TRUNNEL_SET_ERROR_CODE(inp); + return -1; +} + +uint8_t * +link_specifier_getarray_un_unrecognized(link_specifier_t *inp) +{ + return inp->un_unrecognized.elts_; +} +const uint8_t * +link_specifier_getconstarray_un_unrecognized(const link_specifier_t *inp) +{ + return (const uint8_t *)link_specifier_getarray_un_unrecognized((link_specifier_t*)inp); +} +int +link_specifier_setlen_un_unrecognized(link_specifier_t *inp, size_t newlen) +{ + uint8_t *newptr; + newptr = trunnel_dynarray_setlen(&inp->un_unrecognized.allocated_, + &inp->un_unrecognized.n_, inp->un_unrecognized.elts_, newlen, + sizeof(inp->un_unrecognized.elts_[0]), (trunnel_free_fn_t) NULL, + &inp->trunnel_error_code_); + if (newlen != 0 && newptr == NULL) + goto trunnel_alloc_failed; + inp->un_unrecognized.elts_ = newptr; + return 0; + trunnel_alloc_failed: + TRUNNEL_SET_ERROR_CODE(inp); + return -1; +} +const char * +link_specifier_check(const link_specifier_t *obj) +{ + if (obj == NULL) + return "Object was NULL"; + if (obj->trunnel_error_code_) + return "A set function failed on this object"; + switch (obj->ls_type) { + + case LS_IPV4: + break; + + case LS_IPV6: + break; + + case LS_LEGACY_ID: + break; + + case LS_ED25519_ID: + break; + + default: + break; + } + return NULL; +} + +ssize_t +link_specifier_encoded_len(const link_specifier_t *obj) +{ + ssize_t result = 0; + + if (NULL != link_specifier_check(obj)) + return -1; + + + /* Length of u8 ls_type */ + result += 1; + + /* Length of u8 ls_len */ + result += 1; + switch (obj->ls_type) { + + case LS_IPV4: + + /* Length of u32 un_ipv4_addr */ + result += 4; + + /* Length of u16 un_ipv4_port */ + result += 2; + break; + + case LS_IPV6: + + /* Length of u8 un_ipv6_addr[16] */ + result += 16; + + /* Length of u16 un_ipv6_port */ + result += 2; + break; + + case LS_LEGACY_ID: + + /* Length of u8 un_legacy_id[20] */ + result += 20; + break; + + case LS_ED25519_ID: + + /* Length of u8 un_ed25519_id[32] */ + result += 32; + break; + + default: + + /* Length of u8 un_unrecognized[] */ + result += TRUNNEL_DYNARRAY_LEN(&obj->un_unrecognized); + break; + } + return result; +} +int +link_specifier_clear_errors(link_specifier_t *obj) +{ + int r = obj->trunnel_error_code_; + obj->trunnel_error_code_ = 0; + return r; +} +ssize_t +link_specifier_encode(uint8_t *output, const size_t avail, const link_specifier_t *obj) +{ + ssize_t result = 0; + size_t written = 0; + uint8_t *ptr = output; + const char *msg; +#ifdef TRUNNEL_CHECK_ENCODED_LEN + const ssize_t encoded_len = link_specifier_encoded_len(obj); +#endif + + uint8_t *backptr_ls_len = NULL; + + if (NULL != (msg = link_specifier_check(obj))) + goto check_failed; + +#ifdef TRUNNEL_CHECK_ENCODED_LEN + trunnel_assert(encoded_len >= 0); +#endif + + /* Encode u8 ls_type */ + trunnel_assert(written <= avail); + if (avail - written < 1) + goto truncated; + trunnel_set_uint8(ptr, (obj->ls_type)); + written += 1; ptr += 1; + + /* Encode u8 ls_len */ + backptr_ls_len = ptr; + trunnel_assert(written <= avail); + if (avail - written < 1) + goto truncated; + trunnel_set_uint8(ptr, (obj->ls_len)); + written += 1; ptr += 1; + { + size_t written_before_union = written; + + /* Encode union un[ls_type] */ + trunnel_assert(written <= avail); + switch (obj->ls_type) { + + case LS_IPV4: + + /* Encode u32 un_ipv4_addr */ + trunnel_assert(written <= avail); + if (avail - written < 4) + goto truncated; + trunnel_set_uint32(ptr, trunnel_htonl(obj->un_ipv4_addr)); + written += 4; ptr += 4; + + /* Encode u16 un_ipv4_port */ + trunnel_assert(written <= avail); + if (avail - written < 2) + goto truncated; + trunnel_set_uint16(ptr, trunnel_htons(obj->un_ipv4_port)); + written += 2; ptr += 2; + break; + + case LS_IPV6: + + /* Encode u8 un_ipv6_addr[16] */ + trunnel_assert(written <= avail); + if (avail - written < 16) + goto truncated; + memcpy(ptr, obj->un_ipv6_addr, 16); + written += 16; ptr += 16; + + /* Encode u16 un_ipv6_port */ + trunnel_assert(written <= avail); + if (avail - written < 2) + goto truncated; + trunnel_set_uint16(ptr, trunnel_htons(obj->un_ipv6_port)); + written += 2; ptr += 2; + break; + + case LS_LEGACY_ID: + + /* Encode u8 un_legacy_id[20] */ + trunnel_assert(written <= avail); + if (avail - written < 20) + goto truncated; + memcpy(ptr, obj->un_legacy_id, 20); + written += 20; ptr += 20; + break; + + case LS_ED25519_ID: + + /* Encode u8 un_ed25519_id[32] */ + trunnel_assert(written <= avail); + if (avail - written < 32) + goto truncated; + memcpy(ptr, obj->un_ed25519_id, 32); + written += 32; ptr += 32; + break; + + default: + + /* Encode u8 un_unrecognized[] */ + { + size_t elt_len = TRUNNEL_DYNARRAY_LEN(&obj->un_unrecognized); + trunnel_assert(written <= avail); + if (avail - written < elt_len) + goto truncated; + if (elt_len) + memcpy(ptr, obj->un_unrecognized.elts_, elt_len); + written += elt_len; ptr += elt_len; + } + break; + } + /* Write the length field back to ls_len */ + trunnel_assert(written >= written_before_union); +#if UINT8_MAX < SIZE_MAX + if (written - written_before_union > UINT8_MAX) + goto check_failed; +#endif + trunnel_set_uint8(backptr_ls_len, (written - written_before_union)); + } + + + trunnel_assert(ptr == output + written); +#ifdef TRUNNEL_CHECK_ENCODED_LEN + { + trunnel_assert(encoded_len >= 0); + trunnel_assert((size_t)encoded_len == written); + } + +#endif + + return written; + + truncated: + result = -2; + goto fail; + check_failed: + (void)msg; + result = -1; + goto fail; + fail: + trunnel_assert(result < 0); + return result; +} + +/** As link_specifier_parse(), but do not allocate the output object. + */ +static ssize_t +link_specifier_parse_into(link_specifier_t *obj, const uint8_t *input, const size_t len_in) +{ + const uint8_t *ptr = input; + size_t remaining = len_in; + ssize_t result = 0; + (void)result; + + /* Parse u8 ls_type */ + CHECK_REMAINING(1, truncated); + obj->ls_type = (trunnel_get_uint8(ptr)); + remaining -= 1; ptr += 1; + + /* Parse u8 ls_len */ + CHECK_REMAINING(1, truncated); + obj->ls_len = (trunnel_get_uint8(ptr)); + remaining -= 1; ptr += 1; + { + size_t remaining_after; + CHECK_REMAINING(obj->ls_len, truncated); + remaining_after = remaining - obj->ls_len; + remaining = obj->ls_len; + + /* Parse union un[ls_type] */ + switch (obj->ls_type) { + + case LS_IPV4: + + /* Parse u32 un_ipv4_addr */ + CHECK_REMAINING(4, fail); + obj->un_ipv4_addr = trunnel_ntohl(trunnel_get_uint32(ptr)); + remaining -= 4; ptr += 4; + + /* Parse u16 un_ipv4_port */ + CHECK_REMAINING(2, fail); + obj->un_ipv4_port = trunnel_ntohs(trunnel_get_uint16(ptr)); + remaining -= 2; ptr += 2; + break; + + case LS_IPV6: + + /* Parse u8 un_ipv6_addr[16] */ + CHECK_REMAINING(16, fail); + memcpy(obj->un_ipv6_addr, ptr, 16); + remaining -= 16; ptr += 16; + + /* Parse u16 un_ipv6_port */ + CHECK_REMAINING(2, fail); + obj->un_ipv6_port = trunnel_ntohs(trunnel_get_uint16(ptr)); + remaining -= 2; ptr += 2; + break; + + case LS_LEGACY_ID: + + /* Parse u8 un_legacy_id[20] */ + CHECK_REMAINING(20, fail); + memcpy(obj->un_legacy_id, ptr, 20); + remaining -= 20; ptr += 20; + break; + + case LS_ED25519_ID: + + /* Parse u8 un_ed25519_id[32] */ + CHECK_REMAINING(32, fail); + memcpy(obj->un_ed25519_id, ptr, 32); + remaining -= 32; ptr += 32; + break; + + default: + + /* Parse u8 un_unrecognized[] */ + TRUNNEL_DYNARRAY_EXPAND(uint8_t, &obj->un_unrecognized, remaining, {}); + obj->un_unrecognized.n_ = remaining; + if (remaining) + memcpy(obj->un_unrecognized.elts_, ptr, remaining); + ptr += remaining; remaining -= remaining; + break; + } + if (remaining != 0) + goto fail; + remaining = remaining_after; + } + trunnel_assert(ptr + remaining == input + len_in); + return len_in - remaining; + + truncated: + return -2; + trunnel_alloc_failed: + return -1; + fail: + result = -1; + return result; +} + +ssize_t +link_specifier_parse(link_specifier_t **output, const uint8_t *input, const size_t len_in) +{ + ssize_t result; + *output = link_specifier_new(); + if (NULL == *output) + return -1; + result = link_specifier_parse_into(*output, input, len_in); + if (result < 0) { + link_specifier_free(*output); + *output = NULL; + } + return result; +} ed25519_cert_t * ed25519_cert_new(void) { @@ -937,3 +1528,293 @@ ed25519_cert_parse(ed25519_cert_t **output, const uint8_t *input, const size_t l } return result; } +link_specifier_list_t * +link_specifier_list_new(void) +{ + link_specifier_list_t *val = trunnel_calloc(1, sizeof(link_specifier_list_t)); + if (NULL == val) + return NULL; + return val; +} + +/** Release all storage held inside 'obj', but do not free 'obj'. + */ +static void +link_specifier_list_clear(link_specifier_list_t *obj) +{ + (void) obj; + { + + unsigned idx; + for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->spec); ++idx) { + link_specifier_free(TRUNNEL_DYNARRAY_GET(&obj->spec, idx)); + } + } + TRUNNEL_DYNARRAY_WIPE(&obj->spec); + TRUNNEL_DYNARRAY_CLEAR(&obj->spec); +} + +void +link_specifier_list_free(link_specifier_list_t *obj) +{ + if (obj == NULL) + return; + link_specifier_list_clear(obj); + trunnel_memwipe(obj, sizeof(link_specifier_list_t)); + trunnel_free_(obj); +} + +uint8_t +link_specifier_list_get_n_spec(link_specifier_list_t *inp) +{ + return inp->n_spec; +} +int +link_specifier_list_set_n_spec(link_specifier_list_t *inp, uint8_t val) +{ + inp->n_spec = val; + return 0; +} +size_t +link_specifier_list_getlen_spec(const link_specifier_list_t *inp) +{ + return TRUNNEL_DYNARRAY_LEN(&inp->spec); +} + +struct link_specifier_st * +link_specifier_list_get_spec(link_specifier_list_t *inp, size_t idx) +{ + return TRUNNEL_DYNARRAY_GET(&inp->spec, idx); +} + + const struct link_specifier_st * +link_specifier_list_getconst_spec(const link_specifier_list_t *inp, size_t idx) +{ + return link_specifier_list_get_spec((link_specifier_list_t*)inp, idx); +} +int +link_specifier_list_set_spec(link_specifier_list_t *inp, size_t idx, struct link_specifier_st * elt) +{ + link_specifier_t *oldval = TRUNNEL_DYNARRAY_GET(&inp->spec, idx); + if (oldval && oldval != elt) + link_specifier_free(oldval); + return link_specifier_list_set0_spec(inp, idx, elt); +} +int +link_specifier_list_set0_spec(link_specifier_list_t *inp, size_t idx, struct link_specifier_st * elt) +{ + TRUNNEL_DYNARRAY_SET(&inp->spec, idx, elt); + return 0; +} +int +link_specifier_list_add_spec(link_specifier_list_t *inp, struct link_specifier_st * elt) +{ +#if SIZE_MAX >= UINT8_MAX + if (inp->spec.n_ == UINT8_MAX) + goto trunnel_alloc_failed; +#endif + TRUNNEL_DYNARRAY_ADD(struct link_specifier_st *, &inp->spec, elt, {}); + return 0; + trunnel_alloc_failed: + TRUNNEL_SET_ERROR_CODE(inp); + return -1; +} + +struct link_specifier_st * * +link_specifier_list_getarray_spec(link_specifier_list_t *inp) +{ + return inp->spec.elts_; +} +const struct link_specifier_st * const * +link_specifier_list_getconstarray_spec(const link_specifier_list_t *inp) +{ + return (const struct link_specifier_st * const *)link_specifier_list_getarray_spec((link_specifier_list_t*)inp); +} +int +link_specifier_list_setlen_spec(link_specifier_list_t *inp, size_t newlen) +{ + struct link_specifier_st * *newptr; +#if UINT8_MAX < SIZE_MAX + if (newlen > UINT8_MAX) + goto trunnel_alloc_failed; +#endif + newptr = trunnel_dynarray_setlen(&inp->spec.allocated_, + &inp->spec.n_, inp->spec.elts_, newlen, + sizeof(inp->spec.elts_[0]), (trunnel_free_fn_t) link_specifier_free, + &inp->trunnel_error_code_); + if (newlen != 0 && newptr == NULL) + goto trunnel_alloc_failed; + inp->spec.elts_ = newptr; + return 0; + trunnel_alloc_failed: + TRUNNEL_SET_ERROR_CODE(inp); + return -1; +} +const char * +link_specifier_list_check(const link_specifier_list_t *obj) +{ + if (obj == NULL) + return "Object was NULL"; + if (obj->trunnel_error_code_) + return "A set function failed on this object"; + { + const char *msg; + + unsigned idx; + for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->spec); ++idx) { + if (NULL != (msg = link_specifier_check(TRUNNEL_DYNARRAY_GET(&obj->spec, idx)))) + return msg; + } + } + if (TRUNNEL_DYNARRAY_LEN(&obj->spec) != obj->n_spec) + return "Length mismatch for spec"; + return NULL; +} + +ssize_t +link_specifier_list_encoded_len(const link_specifier_list_t *obj) +{ + ssize_t result = 0; + + if (NULL != link_specifier_list_check(obj)) + return -1; + + + /* Length of u8 n_spec */ + result += 1; + + /* Length of struct link_specifier spec[n_spec] */ + { + + unsigned idx; + for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->spec); ++idx) { + result += link_specifier_encoded_len(TRUNNEL_DYNARRAY_GET(&obj->spec, idx)); + } + } + return result; +} +int +link_specifier_list_clear_errors(link_specifier_list_t *obj) +{ + int r = obj->trunnel_error_code_; + obj->trunnel_error_code_ = 0; + return r; +} +ssize_t +link_specifier_list_encode(uint8_t *output, const size_t avail, const link_specifier_list_t *obj) +{ + ssize_t result = 0; + size_t written = 0; + uint8_t *ptr = output; + const char *msg; +#ifdef TRUNNEL_CHECK_ENCODED_LEN + const ssize_t encoded_len = link_specifier_list_encoded_len(obj); +#endif + + if (NULL != (msg = link_specifier_list_check(obj))) + goto check_failed; + +#ifdef TRUNNEL_CHECK_ENCODED_LEN + trunnel_assert(encoded_len >= 0); +#endif + + /* Encode u8 n_spec */ + trunnel_assert(written <= avail); + if (avail - written < 1) + goto truncated; + trunnel_set_uint8(ptr, (obj->n_spec)); + written += 1; ptr += 1; + + /* Encode struct link_specifier spec[n_spec] */ + { + + unsigned idx; + for (idx = 0; idx < TRUNNEL_DYNARRAY_LEN(&obj->spec); ++idx) { + trunnel_assert(written <= avail); + result = link_specifier_encode(ptr, avail - written, TRUNNEL_DYNARRAY_GET(&obj->spec, idx)); + if (result < 0) + goto fail; /* XXXXXXX !*/ + written += result; ptr += result; + } + } + + + trunnel_assert(ptr == output + written); +#ifdef TRUNNEL_CHECK_ENCODED_LEN + { + trunnel_assert(encoded_len >= 0); + trunnel_assert((size_t)encoded_len == written); + } + +#endif + + return written; + + truncated: + result = -2; + goto fail; + check_failed: + (void)msg; + result = -1; + goto fail; + fail: + trunnel_assert(result < 0); + return result; +} + +/** As link_specifier_list_parse(), but do not allocate the output + * object. + */ +static ssize_t +link_specifier_list_parse_into(link_specifier_list_t *obj, const uint8_t *input, const size_t len_in) +{ + const uint8_t *ptr = input; + size_t remaining = len_in; + ssize_t result = 0; + (void)result; + + /* Parse u8 n_spec */ + CHECK_REMAINING(1, truncated); + obj->n_spec = (trunnel_get_uint8(ptr)); + remaining -= 1; ptr += 1; + + /* Parse struct link_specifier spec[n_spec] */ + TRUNNEL_DYNARRAY_EXPAND(link_specifier_t *, &obj->spec, obj->n_spec, {}); + { + link_specifier_t * elt; + unsigned idx; + for (idx = 0; idx < obj->n_spec; ++idx) { + result = link_specifier_parse(&elt, ptr, remaining); + if (result < 0) + goto relay_fail; + trunnel_assert((size_t)result <= remaining); + remaining -= result; ptr += result; + TRUNNEL_DYNARRAY_ADD(link_specifier_t *, &obj->spec, elt, {link_specifier_free(elt);}); + } + } + trunnel_assert(ptr + remaining == input + len_in); + return len_in - remaining; + + truncated: + return -2; + relay_fail: + trunnel_assert(result < 0); + return result; + trunnel_alloc_failed: + return -1; +} + +ssize_t +link_specifier_list_parse(link_specifier_list_t **output, const uint8_t *input, const size_t len_in) +{ + ssize_t result; + *output = link_specifier_list_new(); + if (NULL == *output) + return -1; + result = link_specifier_list_parse_into(*output, input, len_in); + if (result < 0) { + link_specifier_list_free(*output); + *output = NULL; + } + return result; +} diff --git a/src/trunnel/ed25519_cert.h b/src/trunnel/ed25519_cert.h index 9804d843d4..571e6d1a53 100644 --- a/src/trunnel/ed25519_cert.h +++ b/src/trunnel/ed25519_cert.h @@ -10,6 +10,10 @@ #define CERTEXT_SIGNED_WITH_KEY 4 #define CERTEXT_FLAG_AFFECTS_VALIDATION 1 +#define LS_IPV4 0 +#define LS_IPV6 1 +#define LS_LEGACY_ID 2 +#define LS_ED25519_ID 3 #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_ED25519_CERT_EXTENSION) struct ed25519_cert_extension_st { uint16_t ext_length; @@ -21,6 +25,21 @@ struct ed25519_cert_extension_st { }; #endif typedef struct ed25519_cert_extension_st ed25519_cert_extension_t; +#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_LINK_SPECIFIER) +struct link_specifier_st { + uint8_t ls_type; + uint8_t ls_len; + uint32_t un_ipv4_addr; + uint16_t un_ipv4_port; + uint8_t un_ipv6_addr[16]; + uint16_t un_ipv6_port; + uint8_t un_legacy_id[20]; + uint8_t un_ed25519_id[32]; + TRUNNEL_DYNARRAY_HEAD(, uint8_t) un_unrecognized; + uint8_t trunnel_error_code_; +}; +#endif +typedef struct link_specifier_st link_specifier_t; #if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_ED25519_CERT) struct ed25519_cert_st { uint8_t version; @@ -35,6 +54,14 @@ struct ed25519_cert_st { }; #endif typedef struct ed25519_cert_st ed25519_cert_t; +#if !defined(TRUNNEL_OPAQUE) && !defined(TRUNNEL_OPAQUE_LINK_SPECIFIER_LIST) +struct link_specifier_list_st { + uint8_t n_spec; + TRUNNEL_DYNARRAY_HEAD(, struct link_specifier_st *) spec; + uint8_t trunnel_error_code_; +}; +#endif +typedef struct link_specifier_list_st link_specifier_list_t; /** Return a newly allocated ed25519_cert_extension with all elements * set to zero. */ @@ -157,6 +184,196 @@ const uint8_t * ed25519_cert_extension_getconstarray_un_unparsed(const ed25519_ * success; return -1 and set the error code on 'inp' on failure. */ int ed25519_cert_extension_setlen_un_unparsed(ed25519_cert_extension_t *inp, size_t newlen); +/** Return a newly allocated link_specifier with all elements set to + * zero. + */ +link_specifier_t *link_specifier_new(void); +/** Release all storage held by the link_specifier in 'victim'. (Do + * nothing if 'victim' is NULL.) + */ +void link_specifier_free(link_specifier_t *victim); +/** Try to parse a link_specifier from the buffer in 'input', using up + * to 'len_in' bytes from the input buffer. On success, return the + * number of bytes consumed and set *output to the newly allocated + * link_specifier_t. On failure, return -2 if the input appears + * truncated, and -1 if the input is otherwise invalid. + */ +ssize_t link_specifier_parse(link_specifier_t **output, const uint8_t *input, const size_t len_in); +/** Return the number of bytes we expect to need to encode the + * link_specifier in 'obj'. On failure, return a negative value. Note + * that this value may be an overestimate, and can even be an + * underestimate for certain unencodeable objects. + */ +ssize_t link_specifier_encoded_len(const link_specifier_t *obj); +/** Try to encode the link_specifier from 'input' into the buffer at + * 'output', using up to 'avail' bytes of the output buffer. On + * success, return the number of bytes used. On failure, return -2 if + * the buffer was not long enough, and -1 if the input was invalid. + */ +ssize_t link_specifier_encode(uint8_t *output, size_t avail, const link_specifier_t *input); +/** Check whether the internal state of the link_specifier in 'obj' is + * consistent. Return NULL if it is, and a short message if it is not. + */ +const char *link_specifier_check(const link_specifier_t *obj); +/** Clear any errors that were set on the object 'obj' by its setter + * functions. Return true iff errors were cleared. + */ +int link_specifier_clear_errors(link_specifier_t *obj); +/** Return the value of the ls_type field of the link_specifier_t in + * 'inp' + */ +uint8_t link_specifier_get_ls_type(link_specifier_t *inp); +/** Set the value of the ls_type field of the link_specifier_t in + * 'inp' to 'val'. Return 0 on success; return -1 and set the error + * code on 'inp' on failure. + */ +int link_specifier_set_ls_type(link_specifier_t *inp, uint8_t val); +/** Return the value of the ls_len field of the link_specifier_t in + * 'inp' + */ +uint8_t link_specifier_get_ls_len(link_specifier_t *inp); +/** Set the value of the ls_len field of the link_specifier_t in 'inp' + * to 'val'. Return 0 on success; return -1 and set the error code on + * 'inp' on failure. + */ +int link_specifier_set_ls_len(link_specifier_t *inp, uint8_t val); +/** Return the value of the un_ipv4_addr field of the link_specifier_t + * in 'inp' + */ +uint32_t link_specifier_get_un_ipv4_addr(link_specifier_t *inp); +/** Set the value of the un_ipv4_addr field of the link_specifier_t in + * 'inp' to 'val'. Return 0 on success; return -1 and set the error + * code on 'inp' on failure. + */ +int link_specifier_set_un_ipv4_addr(link_specifier_t *inp, uint32_t val); +/** Return the value of the un_ipv4_port field of the link_specifier_t + * in 'inp' + */ +uint16_t link_specifier_get_un_ipv4_port(link_specifier_t *inp); +/** Set the value of the un_ipv4_port field of the link_specifier_t in + * 'inp' to 'val'. Return 0 on success; return -1 and set the error + * code on 'inp' on failure. + */ +int link_specifier_set_un_ipv4_port(link_specifier_t *inp, uint16_t val); +/** Return the (constant) length of the array holding the un_ipv6_addr + * field of the link_specifier_t in 'inp'. + */ +size_t link_specifier_getlen_un_ipv6_addr(const link_specifier_t *inp); +/** Return the element at position 'idx' of the fixed array field + * un_ipv6_addr of the link_specifier_t in 'inp'. + */ +uint8_t link_specifier_get_un_ipv6_addr(link_specifier_t *inp, size_t idx); +/** As link_specifier_get_un_ipv6_addr, but take and return a const + * pointer + */ +uint8_t link_specifier_getconst_un_ipv6_addr(const link_specifier_t *inp, size_t idx); +/** Change the element at position 'idx' of the fixed array field + * un_ipv6_addr of the link_specifier_t in 'inp', so that it will hold + * the value 'elt'. + */ +int link_specifier_set_un_ipv6_addr(link_specifier_t *inp, size_t idx, uint8_t elt); +/** Return a pointer to the 16-element array field un_ipv6_addr of + * 'inp'. + */ +uint8_t * link_specifier_getarray_un_ipv6_addr(link_specifier_t *inp); +/** As link_specifier_get_un_ipv6_addr, but take and return a const + * pointer + */ +const uint8_t * link_specifier_getconstarray_un_ipv6_addr(const link_specifier_t *inp); +/** Return the value of the un_ipv6_port field of the link_specifier_t + * in 'inp' + */ +uint16_t link_specifier_get_un_ipv6_port(link_specifier_t *inp); +/** Set the value of the un_ipv6_port field of the link_specifier_t in + * 'inp' to 'val'. Return 0 on success; return -1 and set the error + * code on 'inp' on failure. + */ +int link_specifier_set_un_ipv6_port(link_specifier_t *inp, uint16_t val); +/** Return the (constant) length of the array holding the un_legacy_id + * field of the link_specifier_t in 'inp'. + */ +size_t link_specifier_getlen_un_legacy_id(const link_specifier_t *inp); +/** Return the element at position 'idx' of the fixed array field + * un_legacy_id of the link_specifier_t in 'inp'. + */ +uint8_t link_specifier_get_un_legacy_id(link_specifier_t *inp, size_t idx); +/** As link_specifier_get_un_legacy_id, but take and return a const + * pointer + */ +uint8_t link_specifier_getconst_un_legacy_id(const link_specifier_t *inp, size_t idx); +/** Change the element at position 'idx' of the fixed array field + * un_legacy_id of the link_specifier_t in 'inp', so that it will hold + * the value 'elt'. + */ +int link_specifier_set_un_legacy_id(link_specifier_t *inp, size_t idx, uint8_t elt); +/** Return a pointer to the 20-element array field un_legacy_id of + * 'inp'. + */ +uint8_t * link_specifier_getarray_un_legacy_id(link_specifier_t *inp); +/** As link_specifier_get_un_legacy_id, but take and return a const + * pointer + */ +const uint8_t * link_specifier_getconstarray_un_legacy_id(const link_specifier_t *inp); +/** Return the (constant) length of the array holding the + * un_ed25519_id field of the link_specifier_t in 'inp'. + */ +size_t link_specifier_getlen_un_ed25519_id(const link_specifier_t *inp); +/** Return the element at position 'idx' of the fixed array field + * un_ed25519_id of the link_specifier_t in 'inp'. + */ +uint8_t link_specifier_get_un_ed25519_id(link_specifier_t *inp, size_t idx); +/** As link_specifier_get_un_ed25519_id, but take and return a const + * pointer + */ +uint8_t link_specifier_getconst_un_ed25519_id(const link_specifier_t *inp, size_t idx); +/** Change the element at position 'idx' of the fixed array field + * un_ed25519_id of the link_specifier_t in 'inp', so that it will + * hold the value 'elt'. + */ +int link_specifier_set_un_ed25519_id(link_specifier_t *inp, size_t idx, uint8_t elt); +/** Return a pointer to the 32-element array field un_ed25519_id of + * 'inp'. + */ +uint8_t * link_specifier_getarray_un_ed25519_id(link_specifier_t *inp); +/** As link_specifier_get_un_ed25519_id, but take and return a const + * pointer + */ +const uint8_t * link_specifier_getconstarray_un_ed25519_id(const link_specifier_t *inp); +/** Return the length of the dynamic array holding the un_unrecognized + * field of the link_specifier_t in 'inp'. + */ +size_t link_specifier_getlen_un_unrecognized(const link_specifier_t *inp); +/** Return the element at position 'idx' of the dynamic array field + * un_unrecognized of the link_specifier_t in 'inp'. + */ +uint8_t link_specifier_get_un_unrecognized(link_specifier_t *inp, size_t idx); +/** As link_specifier_get_un_unrecognized, but take and return a const + * pointer + */ +uint8_t link_specifier_getconst_un_unrecognized(const link_specifier_t *inp, size_t idx); +/** Change the element at position 'idx' of the dynamic array field + * un_unrecognized of the link_specifier_t in 'inp', so that it will + * hold the value 'elt'. + */ +int link_specifier_set_un_unrecognized(link_specifier_t *inp, size_t idx, uint8_t elt); +/** Append a new element 'elt' to the dynamic array field + * un_unrecognized of the link_specifier_t in 'inp'. + */ +int link_specifier_add_un_unrecognized(link_specifier_t *inp, uint8_t elt); +/** Return a pointer to the variable-length array field + * un_unrecognized of 'inp'. + */ +uint8_t * link_specifier_getarray_un_unrecognized(link_specifier_t *inp); +/** As link_specifier_get_un_unrecognized, but take and return a const + * pointer + */ +const uint8_t * link_specifier_getconstarray_un_unrecognized(const link_specifier_t *inp); +/** Change the length of the variable-length array field + * un_unrecognized of 'inp' to 'newlen'.Fill extra elements with 0. + * Return 0 on success; return -1 and set the error code on 'inp' on + * failure. + */ +int link_specifier_setlen_un_unrecognized(link_specifier_t *inp, size_t newlen); /** Return a newly allocated ed25519_cert with all elements set to * zero. */ @@ -319,6 +536,89 @@ uint8_t * ed25519_cert_getarray_signature(ed25519_cert_t *inp); /** As ed25519_cert_get_signature, but take and return a const pointer */ const uint8_t * ed25519_cert_getconstarray_signature(const ed25519_cert_t *inp); +/** Return a newly allocated link_specifier_list with all elements set + * to zero. + */ +link_specifier_list_t *link_specifier_list_new(void); +/** Release all storage held by the link_specifier_list in 'victim'. + * (Do nothing if 'victim' is NULL.) + */ +void link_specifier_list_free(link_specifier_list_t *victim); +/** Try to parse a link_specifier_list from the buffer in 'input', + * using up to 'len_in' bytes from the input buffer. On success, + * return the number of bytes consumed and set *output to the newly + * allocated link_specifier_list_t. On failure, return -2 if the input + * appears truncated, and -1 if the input is otherwise invalid. + */ +ssize_t link_specifier_list_parse(link_specifier_list_t **output, const uint8_t *input, const size_t len_in); +/** Return the number of bytes we expect to need to encode the + * link_specifier_list in 'obj'. On failure, return a negative value. + * Note that this value may be an overestimate, and can even be an + * underestimate for certain unencodeable objects. + */ +ssize_t link_specifier_list_encoded_len(const link_specifier_list_t *obj); +/** Try to encode the link_specifier_list from 'input' into the buffer + * at 'output', using up to 'avail' bytes of the output buffer. On + * success, return the number of bytes used. On failure, return -2 if + * the buffer was not long enough, and -1 if the input was invalid. + */ +ssize_t link_specifier_list_encode(uint8_t *output, size_t avail, const link_specifier_list_t *input); +/** Check whether the internal state of the link_specifier_list in + * 'obj' is consistent. Return NULL if it is, and a short message if + * it is not. + */ +const char *link_specifier_list_check(const link_specifier_list_t *obj); +/** Clear any errors that were set on the object 'obj' by its setter + * functions. Return true iff errors were cleared. + */ +int link_specifier_list_clear_errors(link_specifier_list_t *obj); +/** Return the value of the n_spec field of the link_specifier_list_t + * in 'inp' + */ +uint8_t link_specifier_list_get_n_spec(link_specifier_list_t *inp); +/** Set the value of the n_spec field of the link_specifier_list_t in + * 'inp' to 'val'. Return 0 on success; return -1 and set the error + * code on 'inp' on failure. + */ +int link_specifier_list_set_n_spec(link_specifier_list_t *inp, uint8_t val); +/** Return the length of the dynamic array holding the spec field of + * the link_specifier_list_t in 'inp'. + */ +size_t link_specifier_list_getlen_spec(const link_specifier_list_t *inp); +/** Return the element at position 'idx' of the dynamic array field + * spec of the link_specifier_list_t in 'inp'. + */ +struct link_specifier_st * link_specifier_list_get_spec(link_specifier_list_t *inp, size_t idx); +/** As link_specifier_list_get_spec, but take and return a const + * pointer + */ + const struct link_specifier_st * link_specifier_list_getconst_spec(const link_specifier_list_t *inp, size_t idx); +/** Change the element at position 'idx' of the dynamic array field + * spec of the link_specifier_list_t in 'inp', so that it will hold + * the value 'elt'. Free the previous value, if any. + */ +int link_specifier_list_set_spec(link_specifier_list_t *inp, size_t idx, struct link_specifier_st * elt); +/** As link_specifier_list_set_spec, but does not free the previous + * value. + */ +int link_specifier_list_set0_spec(link_specifier_list_t *inp, size_t idx, struct link_specifier_st * elt); +/** Append a new element 'elt' to the dynamic array field spec of the + * link_specifier_list_t in 'inp'. + */ +int link_specifier_list_add_spec(link_specifier_list_t *inp, struct link_specifier_st * elt); +/** Return a pointer to the variable-length array field spec of 'inp'. + */ +struct link_specifier_st * * link_specifier_list_getarray_spec(link_specifier_list_t *inp); +/** As link_specifier_list_get_spec, but take and return a const + * pointer + */ +const struct link_specifier_st * const * link_specifier_list_getconstarray_spec(const link_specifier_list_t *inp); +/** Change the length of the variable-length array field spec of 'inp' + * to 'newlen'.Fill extra elements with NULL; free removed elements. + * Return 0 on success; return -1 and set the error code on 'inp' on + * failure. + */ +int link_specifier_list_setlen_spec(link_specifier_list_t *inp, size_t newlen); #endif diff --git a/src/trunnel/ed25519_cert.trunnel b/src/trunnel/ed25519_cert.trunnel index c46f1b6c6b..012b2afc30 100644 --- a/src/trunnel/ed25519_cert.trunnel +++ b/src/trunnel/ed25519_cert.trunnel @@ -55,6 +55,7 @@ struct auth02_cell { u8 rand[24]; u8 sig[64]; } +*/ const LS_IPV4 = 0x00; const LS_IPV6 = 0x01; @@ -73,4 +74,8 @@ struct link_specifier { default: u8 unrecognized[]; }; } -*/
\ No newline at end of file + +struct link_specifier_list { + u8 n_spec; + struct link_specifier spec[n_spec]; +} |