From 67c405c7031fd8e3a90fe27596e988adb9ca51a0 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 7 Oct 2015 21:48:06 +0200 Subject: [PATCH 1/2] Count collisions during HT insertion operations --- Zend/tests/bug70644.phpt | 14 ++ Zend/zend_execute.c | 22 +- Zend/zend_hash.c | 71 +++++- Zend/zend_hash.h | 9 +- Zend/zend_vm_def.h | 146 +++++++----- Zend/zend_vm_execute.h | 438 ++++++++++++++++++++--------------- ext/json/tests/bug70644.phpt | 16 ++ 7 files changed, 454 insertions(+), 262 deletions(-) create mode 100644 Zend/tests/bug70644.phpt create mode 100644 ext/json/tests/bug70644.phpt diff --git a/Zend/tests/bug70644.phpt b/Zend/tests/bug70644.phpt new file mode 100644 index 0000000000000..bf9db60a3c6ff --- /dev/null +++ b/Zend/tests/bug70644.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #70644: trivial hash complexity DoS attack (plain array) +--FILE-- + +--EXPECTF-- +Fatal error: Too many collisions in hashtable in %s on line %d diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 8e3d5fd187914..0fe25c07f5851 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1540,6 +1540,10 @@ static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) { hval = Z_LVAL_P(dim); num_index: + if (type == BP_VAR_W) { + return zend_hash_index_add_or_return(ht, hval, &EG(uninitialized_zval)); + } + ZEND_HASH_INDEX_FIND(ht, hval, retval, num_undef); return retval; num_undef: @@ -1567,6 +1571,17 @@ static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht } } str_index: + if (type == BP_VAR_W) { + retval = zend_hash_add_or_return(ht, offset_key, &EG(uninitialized_zval)); + if (UNEXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) { + retval = Z_INDIRECT_P(retval); + if (UNEXPECTED(Z_TYPE_P(retval) == IS_UNDEF)) { + ZVAL_NULL(retval); + } + } + return retval; + } + retval = zend_hash_find(ht, offset_key); if (retval) { /* support for $GLOBALS[...] */ @@ -1583,10 +1598,9 @@ static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined index: %s", ZSTR_VAL(offset_key)); - /* break missing intentionally */ - case BP_VAR_W: ZVAL_NULL(retval); break; + EMPTY_SWITCH_DEFAULT_CASE() } } } @@ -1603,9 +1617,7 @@ static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht zend_error(E_NOTICE,"Undefined index: %s", ZSTR_VAL(offset_key)); retval = zend_hash_update(ht, offset_key, &EG(uninitialized_zval)); break; - case BP_VAR_W: - retval = zend_hash_add_new(ht, offset_key, &EG(uninitialized_zval)); - break; + EMPTY_SWITCH_DEFAULT_CASE() } } } else { diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index ae3d91944cfb2..ba9c67ad63d96 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -470,12 +470,25 @@ ZEND_API void ZEND_FASTCALL _zend_hash_iterators_update(HashTable *ht, HashPosit } } -static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zend_string *key) +/* To protect against HashDos attacks, we count collisions during the "find + * existing bucket with this key" phase of insertion operations. The check + * against MAX_COLLISIONS is only performed if *no* matching bucket is found, + * as that corresponds to insert operations (as opposed to updates). + * + * An important caveat of the implementation is that collisions will *not* + * be counted for add_new operations. find+add_new operations should be replaced + * with add_or_return operations. + */ +#define HT_MAX_COLLISIONS 1000 + +static zend_always_inline Bucket *zend_hash_find_bucket( + const HashTable *ht, zend_string *key, zend_bool for_insert) { zend_ulong h; uint32_t nIndex; uint32_t idx; Bucket *p, *arData; + uint32_t num_collisions = 0; h = zend_string_hash_val(key); arData = ht->arData; @@ -492,15 +505,21 @@ static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zen return p; } idx = Z_NEXT(p->val); + num_collisions++; + } + if (for_insert && UNEXPECTED(num_collisions > HT_MAX_COLLISIONS)) { + zend_error_noreturn(E_ERROR, "Too many collisions in hashtable"); } return NULL; } -static zend_always_inline Bucket *zend_hash_str_find_bucket(const HashTable *ht, const char *str, size_t len, zend_ulong h) +static zend_always_inline Bucket *zend_hash_str_find_bucket( + const HashTable *ht, const char *str, size_t len, zend_ulong h, zend_bool for_insert) { uint32_t nIndex; uint32_t idx; Bucket *p, *arData; + uint32_t num_collisions = 0; arData = ht->arData; nIndex = h | ht->nTableMask; @@ -515,15 +534,21 @@ static zend_always_inline Bucket *zend_hash_str_find_bucket(const HashTable *ht, return p; } idx = Z_NEXT(p->val); + num_collisions++; + } + if (for_insert && UNEXPECTED(num_collisions > HT_MAX_COLLISIONS)) { + zend_error_noreturn(E_ERROR, "Too many collisions in hashtable"); } return NULL; } -static zend_always_inline Bucket *zend_hash_index_find_bucket(const HashTable *ht, zend_ulong h) +static zend_always_inline Bucket *zend_hash_index_find_bucket( + const HashTable *ht, zend_ulong h, zend_bool for_insert) { uint32_t nIndex; uint32_t idx; Bucket *p, *arData; + uint32_t num_collisions = 0; arData = ht->arData; nIndex = h | ht->nTableMask; @@ -535,6 +560,10 @@ static zend_always_inline Bucket *zend_hash_index_find_bucket(const HashTable *h return p; } idx = Z_NEXT(p->val); + num_collisions++; + } + if (for_insert && UNEXPECTED(num_collisions > HT_MAX_COLLISIONS)) { + zend_error_noreturn(E_ERROR, "Too many collisions in hashtable"); } return NULL; } @@ -555,7 +584,7 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_s } else if (ht->u.flags & HASH_FLAG_PACKED) { zend_hash_packed_to_hash(ht); } else if ((flag & HASH_ADD_NEW) == 0) { - p = zend_hash_find_bucket(ht, key); + p = zend_hash_find_bucket(ht, key, 1); if (p) { zval *data; @@ -574,6 +603,8 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_s } else { return NULL; } + } else if (flag & HASH_ADD_OR_RETURN) { + return &p->val; } else { ZEND_ASSERT(&p->val != pData); data = &p->val; @@ -639,6 +670,11 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_add_new(HashTable *ht, zend_string *key, return _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD_NEW ZEND_FILE_LINE_RELAY_CC); } +ZEND_API zval* ZEND_FASTCALL _zend_hash_add_or_return(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) +{ + return _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD_OR_RETURN ZEND_FILE_LINE_RELAY_CC); +} + ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_or_update(HashTable *ht, const char *str, size_t len, zval *pData, uint32_t flag ZEND_FILE_LINE_DC) { zend_string *key = zend_string_init(str, len, ht->u.flags & HASH_FLAG_PERSISTENT); @@ -726,6 +762,9 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht, if (flag & HASH_ADD) { return NULL; } + if (flag & HASH_ADD_OR_RETURN) { + return &p->val; + } if (ht->pDestructor) { ht->pDestructor(&p->val); } @@ -775,11 +814,14 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht, convert_to_hash: zend_hash_packed_to_hash(ht); } else if ((flag & HASH_ADD_NEW) == 0) { - p = zend_hash_index_find_bucket(ht, h); + p = zend_hash_index_find_bucket(ht, h, 1); if (p) { if (flag & HASH_ADD) { return NULL; } + if (flag & HASH_ADD_OR_RETURN) { + return &p->val; + } ZEND_ASSERT(&p->val != pData); if (ht->pDestructor) { ht->pDestructor(&p->val); @@ -830,6 +872,11 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_new(HashTable *ht, zend_ulong return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_ADD | HASH_ADD_NEW ZEND_FILE_LINE_RELAY_CC); } +ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_return(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) +{ + return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_ADD_OR_RETURN ZEND_FILE_LINE_RELAY_CC); +} + ZEND_API zval* ZEND_FASTCALL _zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) { return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_UPDATE ZEND_FILE_LINE_RELAY_CC); @@ -1954,7 +2001,7 @@ ZEND_API zval* ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *ke IS_CONSISTENT(ht); - p = zend_hash_find_bucket(ht, key); + p = zend_hash_find_bucket(ht, key, 0); return p ? &p->val : NULL; } @@ -1966,7 +2013,7 @@ ZEND_API zval* ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char IS_CONSISTENT(ht); h = zend_inline_hash_func(str, len); - p = zend_hash_str_find_bucket(ht, str, len, h); + p = zend_hash_str_find_bucket(ht, str, len, h, 0); return p ? &p->val : NULL; } @@ -1976,7 +2023,7 @@ ZEND_API zend_bool ZEND_FASTCALL zend_hash_exists(const HashTable *ht, zend_stri IS_CONSISTENT(ht); - p = zend_hash_find_bucket(ht, key); + p = zend_hash_find_bucket(ht, key, 0); return p ? 1 : 0; } @@ -1988,7 +2035,7 @@ ZEND_API zend_bool ZEND_FASTCALL zend_hash_str_exists(const HashTable *ht, const IS_CONSISTENT(ht); h = zend_inline_hash_func(str, len); - p = zend_hash_str_find_bucket(ht, str, len, h); + p = zend_hash_str_find_bucket(ht, str, len, h, 0); return p ? 1 : 0; } @@ -2008,7 +2055,7 @@ ZEND_API zval* ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulon return NULL; } - p = zend_hash_index_find_bucket(ht, h); + p = zend_hash_index_find_bucket(ht, h, 0); return p ? &p->val : NULL; } @@ -2018,7 +2065,7 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_index_find(const HashTable *ht, zend_ulo IS_CONSISTENT(ht); - p = zend_hash_index_find_bucket(ht, h); + p = zend_hash_index_find_bucket(ht, h, 0); return p ? &p->val : NULL; } @@ -2037,7 +2084,7 @@ ZEND_API zend_bool ZEND_FASTCALL zend_hash_index_exists(const HashTable *ht, zen return 0; } - p = zend_hash_index_find_bucket(ht, h); + p = zend_hash_index_find_bucket(ht, h, 0); return p ? 1 : 0; } diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index b7e6f37f71fe3..cf24aa8aea5e2 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -34,6 +34,7 @@ #define HASH_UPDATE_INDIRECT (1<<2) #define HASH_ADD_NEW (1<<3) #define HASH_ADD_NEXT (1<<4) +#define HASH_ADD_OR_RETURN (1<<5) #define HASH_FLAG_PERSISTENT (1<<0) #define HASH_FLAG_APPLY_PROTECTION (1<<1) @@ -72,6 +73,7 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_update(HashTable *ht, zend_string *key,z ZEND_API zval* ZEND_FASTCALL _zend_hash_update_ind(HashTable *ht, zend_string *key,zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_add(HashTable *ht, zend_string *key,zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_add_new(HashTable *ht, zend_string *key,zval *pData ZEND_FILE_LINE_DC); +ZEND_API zval* ZEND_FASTCALL _zend_hash_add_or_return(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC); #define zend_hash_update(ht, key, pData) \ _zend_hash_update(ht, key, pData ZEND_FILE_LINE_CC) @@ -81,6 +83,8 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_add_new(HashTable *ht, zend_string *key, _zend_hash_add(ht, key, pData ZEND_FILE_LINE_CC) #define zend_hash_add_new(ht, key, pData) \ _zend_hash_add_new(ht, key, pData ZEND_FILE_LINE_CC) +#define zend_hash_add_or_return(ht, key, pData) \ + _zend_hash_add_or_return(ht, key, pData ZEND_FILE_LINE_CC) ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_or_update(HashTable *ht, const char *key, size_t len, zval *pData, uint32_t flag ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update(HashTable *ht, const char *key, size_t len, zval *pData ZEND_FILE_LINE_DC); @@ -100,6 +104,7 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_new(HashTable *ht, const char *k ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_update(HashTable *ht, zend_ulong h, zval *pData, uint32_t flag ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_new(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC); +ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_return(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_next_index_insert(HashTable *ht, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_next_index_insert_new(HashTable *ht, zval *pData ZEND_FILE_LINE_DC); @@ -108,6 +113,8 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_next_index_insert_new(HashTable *ht, zva _zend_hash_index_add(ht, h, pData ZEND_FILE_LINE_CC) #define zend_hash_index_add_new(ht, h, pData) \ _zend_hash_index_add_new(ht, h, pData ZEND_FILE_LINE_CC) +#define zend_hash_index_add_or_return(ht, h, pData) \ + _zend_hash_index_add_or_return(ht, h, pData ZEND_FILE_LINE_CC) #define zend_hash_index_update(ht, h, pData) \ _zend_hash_index_update(ht, h, pData ZEND_FILE_LINE_CC) #define zend_hash_next_index_insert(ht, pData) \ @@ -150,7 +157,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_str_del_ind(HashTable *ht, const char *key, ZEND_API int ZEND_FASTCALL zend_hash_index_del(HashTable *ht, zend_ulong h); ZEND_API void ZEND_FASTCALL zend_hash_del_bucket(HashTable *ht, Bucket *p); -/* Data retreival */ +/* Data retrieval */ ZEND_API zval* ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key); ZEND_API zval* ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char *key, size_t len); ZEND_API zval* ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h); diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index a4394a0b6f399..7f428787b4f2a 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1527,68 +1527,53 @@ ZEND_VM_HELPER(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int type) } target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK); - retval = zend_hash_find(target_symbol_table, name); - if (retval == NULL) { - if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { - zval *result; -ZEND_VM_C_LABEL(fetch_this): - result = EX_VAR(opline->result.var); - switch (type) { - case BP_VAR_R: - if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { - ZVAL_OBJ(result, Z_OBJ(EX(This))); - Z_ADDREF_P(result); - } else { - ZVAL_NULL(result); - zend_error(E_NOTICE,"Undefined variable: this"); - } - break; - case BP_VAR_IS: - if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { - ZVAL_OBJ(result, Z_OBJ(EX(This))); - Z_ADDREF_P(result); - } else { - ZVAL_NULL(result); - } - break; - case BP_VAR_RW: - case BP_VAR_W: - zend_throw_error(NULL, "Cannot re-assign $this"); - break; - case BP_VAR_UNSET: - zend_throw_error(NULL, "Cannot unset $this"); - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - if (OP1_TYPE != IS_CONST) { - zend_string_release(name); + if (type == BP_VAR_W) { + retval = zend_hash_add_or_return(target_symbol_table, name, &EG(uninitialized_zval)); + if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + ZVAL_NULL(retval); } - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); - break; - case BP_VAR_W: - retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval)); - break; - EMPTY_SWITCH_DEFAULT_CASE() } - /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ - } else if (Z_TYPE_P(retval) == IS_INDIRECT) { - retval = Z_INDIRECT_P(retval); - if (Z_TYPE_P(retval) == IS_UNDEF) { + } else { + retval = zend_hash_find(target_symbol_table, name); + if (retval == NULL) { if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { - ZEND_VM_C_GOTO(fetch_this); + zval *result; + +ZEND_VM_C_LABEL(fetch_this): + result = EX_VAR(opline->result.var); + switch (type) { + case BP_VAR_R: + if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { + ZVAL_OBJ(result, Z_OBJ(EX(This))); + Z_ADDREF_P(result); + } else { + ZVAL_NULL(result); + zend_error(E_NOTICE,"Undefined variable: this"); + } + break; + case BP_VAR_IS: + if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { + ZVAL_OBJ(result, Z_OBJ(EX(This))); + Z_ADDREF_P(result); + } else { + ZVAL_NULL(result); + } + break; + case BP_VAR_RW: + zend_throw_error(NULL, "Cannot re-assign $this"); + break; + case BP_VAR_UNSET: + zend_throw_error(NULL, "Cannot unset $this"); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + if (OP1_TYPE != IS_CONST) { + zend_string_release(name); + } + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } switch (type) { case BP_VAR_R: @@ -1600,12 +1585,51 @@ ZEND_VM_C_LABEL(fetch_this): break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - /* break missing intentionally */ - case BP_VAR_W: - ZVAL_NULL(retval); + retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } + /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ + } else if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { + ZEND_VM_C_GOTO(fetch_this); + } + switch (type) { + case BP_VAR_R: + case BP_VAR_UNSET: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + /* break missing intentionally */ + case BP_VAR_IS: + retval = &EG(uninitialized_zval); + break; + case BP_VAR_RW: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ + } else if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + switch (type) { + case BP_VAR_R: + case BP_VAR_UNSET: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + /* break missing intentionally */ + case BP_VAR_IS: + retval = &EG(uninitialized_zval); + break; + case BP_VAR_RW: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + ZVAL_NULL(retval); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + } + } } } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 7cfb59e0696a6..d66e29f98c632 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -7061,68 +7061,53 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ } target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK); - retval = zend_hash_find(target_symbol_table, name); - if (retval == NULL) { - if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { - zval *result; -fetch_this: - result = EX_VAR(opline->result.var); - switch (type) { - case BP_VAR_R: - if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { - ZVAL_OBJ(result, Z_OBJ(EX(This))); - Z_ADDREF_P(result); - } else { - ZVAL_NULL(result); - zend_error(E_NOTICE,"Undefined variable: this"); - } - break; - case BP_VAR_IS: - if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { - ZVAL_OBJ(result, Z_OBJ(EX(This))); - Z_ADDREF_P(result); - } else { - ZVAL_NULL(result); - } - break; - case BP_VAR_RW: - case BP_VAR_W: - zend_throw_error(NULL, "Cannot re-assign $this"); - break; - case BP_VAR_UNSET: - zend_throw_error(NULL, "Cannot unset $this"); - break; - EMPTY_SWITCH_DEFAULT_CASE() - } - if (IS_CONST != IS_CONST) { - zend_string_release(name); + if (type == BP_VAR_W) { + retval = zend_hash_add_or_return(target_symbol_table, name, &EG(uninitialized_zval)); + if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + ZVAL_NULL(retval); } - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); - break; - case BP_VAR_W: - retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval)); - break; - EMPTY_SWITCH_DEFAULT_CASE() } - /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ - } else if (Z_TYPE_P(retval) == IS_INDIRECT) { - retval = Z_INDIRECT_P(retval); - if (Z_TYPE_P(retval) == IS_UNDEF) { + } else { + retval = zend_hash_find(target_symbol_table, name); + if (retval == NULL) { if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { - goto fetch_this; + zval *result; + +fetch_this: + result = EX_VAR(opline->result.var); + switch (type) { + case BP_VAR_R: + if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { + ZVAL_OBJ(result, Z_OBJ(EX(This))); + Z_ADDREF_P(result); + } else { + ZVAL_NULL(result); + zend_error(E_NOTICE,"Undefined variable: this"); + } + break; + case BP_VAR_IS: + if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { + ZVAL_OBJ(result, Z_OBJ(EX(This))); + Z_ADDREF_P(result); + } else { + ZVAL_NULL(result); + } + break; + case BP_VAR_RW: + zend_throw_error(NULL, "Cannot re-assign $this"); + break; + case BP_VAR_UNSET: + zend_throw_error(NULL, "Cannot unset $this"); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + if (IS_CONST != IS_CONST) { + zend_string_release(name); + } + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } switch (type) { case BP_VAR_R: @@ -7134,12 +7119,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - /* break missing intentionally */ - case BP_VAR_W: - ZVAL_NULL(retval); + retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } + /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ + } else if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { + goto fetch_this; + } + switch (type) { + case BP_VAR_R: + case BP_VAR_UNSET: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + /* break missing intentionally */ + case BP_VAR_IS: + retval = &EG(uninitialized_zval); + break; + case BP_VAR_RW: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ + } else if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + switch (type) { + case BP_VAR_R: + case BP_VAR_UNSET: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + /* break missing intentionally */ + case BP_VAR_IS: + retval = &EG(uninitialized_zval); + break; + case BP_VAR_RW: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + ZVAL_NULL(retval); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + } + } } } @@ -41728,68 +41752,53 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ } target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK); - retval = zend_hash_find(target_symbol_table, name); - if (retval == NULL) { - if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { - zval *result; -fetch_this: - result = EX_VAR(opline->result.var); - switch (type) { - case BP_VAR_R: - if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { - ZVAL_OBJ(result, Z_OBJ(EX(This))); - Z_ADDREF_P(result); - } else { - ZVAL_NULL(result); - zend_error(E_NOTICE,"Undefined variable: this"); - } - break; - case BP_VAR_IS: - if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { - ZVAL_OBJ(result, Z_OBJ(EX(This))); - Z_ADDREF_P(result); - } else { - ZVAL_NULL(result); - } - break; - case BP_VAR_RW: - case BP_VAR_W: - zend_throw_error(NULL, "Cannot re-assign $this"); - break; - case BP_VAR_UNSET: - zend_throw_error(NULL, "Cannot unset $this"); - break; - EMPTY_SWITCH_DEFAULT_CASE() + if (type == BP_VAR_W) { + retval = zend_hash_add_or_return(target_symbol_table, name, &EG(uninitialized_zval)); + if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + ZVAL_NULL(retval); } - if (IS_CV != IS_CONST) { - zend_string_release(name); - } - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); - break; - case BP_VAR_W: - retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval)); - break; - EMPTY_SWITCH_DEFAULT_CASE() } - /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ - } else if (Z_TYPE_P(retval) == IS_INDIRECT) { - retval = Z_INDIRECT_P(retval); - if (Z_TYPE_P(retval) == IS_UNDEF) { + } else { + retval = zend_hash_find(target_symbol_table, name); + if (retval == NULL) { if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { - goto fetch_this; + zval *result; + +fetch_this: + result = EX_VAR(opline->result.var); + switch (type) { + case BP_VAR_R: + if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { + ZVAL_OBJ(result, Z_OBJ(EX(This))); + Z_ADDREF_P(result); + } else { + ZVAL_NULL(result); + zend_error(E_NOTICE,"Undefined variable: this"); + } + break; + case BP_VAR_IS: + if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { + ZVAL_OBJ(result, Z_OBJ(EX(This))); + Z_ADDREF_P(result); + } else { + ZVAL_NULL(result); + } + break; + case BP_VAR_RW: + zend_throw_error(NULL, "Cannot re-assign $this"); + break; + case BP_VAR_UNSET: + zend_throw_error(NULL, "Cannot unset $this"); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + if (IS_CV != IS_CONST) { + zend_string_release(name); + } + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } switch (type) { case BP_VAR_R: @@ -41801,12 +41810,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - /* break missing intentionally */ - case BP_VAR_W: - ZVAL_NULL(retval); + retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } + /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ + } else if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { + goto fetch_this; + } + switch (type) { + case BP_VAR_R: + case BP_VAR_UNSET: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + /* break missing intentionally */ + case BP_VAR_IS: + retval = &EG(uninitialized_zval); + break; + case BP_VAR_RW: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ + } else if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + switch (type) { + case BP_VAR_R: + case BP_VAR_UNSET: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + /* break missing intentionally */ + case BP_VAR_IS: + retval = &EG(uninitialized_zval); + break; + case BP_VAR_RW: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + ZVAL_NULL(retval); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + } + } } } @@ -53530,68 +53578,53 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ } target_symbol_table = zend_get_target_symbol_table(execute_data, opline->extended_value & ZEND_FETCH_TYPE_MASK); - retval = zend_hash_find(target_symbol_table, name); - if (retval == NULL) { - if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { - zval *result; -fetch_this: - result = EX_VAR(opline->result.var); - switch (type) { - case BP_VAR_R: - if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { - ZVAL_OBJ(result, Z_OBJ(EX(This))); - Z_ADDREF_P(result); - } else { - ZVAL_NULL(result); - zend_error(E_NOTICE,"Undefined variable: this"); - } - break; - case BP_VAR_IS: - if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { - ZVAL_OBJ(result, Z_OBJ(EX(This))); - Z_ADDREF_P(result); - } else { - ZVAL_NULL(result); - } - break; - case BP_VAR_RW: - case BP_VAR_W: - zend_throw_error(NULL, "Cannot re-assign $this"); - break; - case BP_VAR_UNSET: - zend_throw_error(NULL, "Cannot unset $this"); - break; - EMPTY_SWITCH_DEFAULT_CASE() + if (type == BP_VAR_W) { + retval = zend_hash_add_or_return(target_symbol_table, name, &EG(uninitialized_zval)); + if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + ZVAL_NULL(retval); } - if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { - zend_string_release(name); - } - ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); - } - switch (type) { - case BP_VAR_R: - case BP_VAR_UNSET: - zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - /* break missing intentionally */ - case BP_VAR_IS: - retval = &EG(uninitialized_zval); - break; - case BP_VAR_RW: - zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); - break; - case BP_VAR_W: - retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval)); - break; - EMPTY_SWITCH_DEFAULT_CASE() } - /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ - } else if (Z_TYPE_P(retval) == IS_INDIRECT) { - retval = Z_INDIRECT_P(retval); - if (Z_TYPE_P(retval) == IS_UNDEF) { + } else { + retval = zend_hash_find(target_symbol_table, name); + if (retval == NULL) { if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { - goto fetch_this; + zval *result; + +fetch_this: + result = EX_VAR(opline->result.var); + switch (type) { + case BP_VAR_R: + if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { + ZVAL_OBJ(result, Z_OBJ(EX(This))); + Z_ADDREF_P(result); + } else { + ZVAL_NULL(result); + zend_error(E_NOTICE,"Undefined variable: this"); + } + break; + case BP_VAR_IS: + if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { + ZVAL_OBJ(result, Z_OBJ(EX(This))); + Z_ADDREF_P(result); + } else { + ZVAL_NULL(result); + } + break; + case BP_VAR_RW: + zend_throw_error(NULL, "Cannot re-assign $this"); + break; + case BP_VAR_UNSET: + zend_throw_error(NULL, "Cannot unset $this"); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { + zend_string_release(name); + } + ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } switch (type) { case BP_VAR_R: @@ -53603,12 +53636,51 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); - /* break missing intentionally */ - case BP_VAR_W: - ZVAL_NULL(retval); + retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } + /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ + } else if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { + goto fetch_this; + } + switch (type) { + case BP_VAR_R: + case BP_VAR_UNSET: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + /* break missing intentionally */ + case BP_VAR_IS: + retval = &EG(uninitialized_zval); + break; + case BP_VAR_RW: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ + } else if (Z_TYPE_P(retval) == IS_INDIRECT) { + retval = Z_INDIRECT_P(retval); + if (Z_TYPE_P(retval) == IS_UNDEF) { + switch (type) { + case BP_VAR_R: + case BP_VAR_UNSET: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + /* break missing intentionally */ + case BP_VAR_IS: + retval = &EG(uninitialized_zval); + break; + case BP_VAR_RW: + zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); + ZVAL_NULL(retval); + break; + EMPTY_SWITCH_DEFAULT_CASE() + } + } + } } } diff --git a/ext/json/tests/bug70644.phpt b/ext/json/tests/bug70644.phpt new file mode 100644 index 0000000000000..12d60db9a24f7 --- /dev/null +++ b/ext/json/tests/bug70644.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #70644: trivial hash complexity DoS attack (json_decode) +--FILE-- + +--EXPECTF-- +Fatal error: Too many collisions in hashtable in %s on line %d From 2d6c5cbe6e70c85c7df91653e9d33e89eaadee12 Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Wed, 30 Dec 2015 00:00:22 +0100 Subject: [PATCH 2/2] Use exceptions instead of fatals in well determined places --- Zend/tests/bug70644.phpt | 10 +- Zend/tests/bug70644_2.phpt | 24 + Zend/zend_exceptions.c | 5 + Zend/zend_exceptions.h | 1 + Zend/zend_execute.c | 7 +- Zend/zend_hash.c | 116 ++- Zend/zend_hash.h | 131 +++- Zend/zend_object_handlers.c | 2 +- Zend/zend_ts_hash.h | 8 +- Zend/zend_vm_def.h | 7 +- Zend/zend_vm_execute.h | 73 +- ext/exif/exif.c | 4 +- ext/imap/php_imap.c | 22 +- ext/interbase/ibase_query.c | 12 +- ext/json/json.c | 3 + ext/json/json_parser.tab.c | 946 +++++++++++++---------- ext/json/json_parser.tab.h | 72 +- ext/json/json_parser.y | 10 +- ext/json/php_json.h | 3 +- ext/json/tests/bug70644.phpt | 4 +- ext/mysqli/mysqli.c | 7 +- ext/mysqlnd/mysqlnd_result.c | 6 +- ext/oci8/oci8_interface.c | 4 +- ext/odbc/php_odbc.c | 6 +- ext/pcre/php_pcre.c | 38 +- ext/pdo/pdo_stmt.c | 14 +- ext/pgsql/pgsql.c | 22 +- ext/session/session.c | 2 +- ext/simplexml/simplexml.c | 6 +- ext/snmp/snmp.c | 6 +- ext/soap/php_encoding.c | 10 +- ext/soap/php_http.c | 6 +- ext/soap/php_packet_soap.c | 8 +- ext/soap/php_schema.c | 20 +- ext/soap/php_sdl.c | 56 +- ext/soap/soap.c | 4 +- ext/spl/spl_array.c | 14 +- ext/spl/spl_observer.c | 18 +- ext/spl/tests/bug70644.phpt | 43 ++ ext/sqlite3/sqlite3.c | 10 +- ext/standard/array.c | 29 +- ext/standard/iptc.c | 9 +- ext/standard/string.c | 6 + ext/standard/tests/array/bug70644.phpt | 21 + ext/standard/tests/array/bug70644_2.phpt | 21 + ext/standard/tests/array/bug70644_3.phpt | 18 + ext/standard/tests/array/bug70644_4.phpt | 28 + ext/standard/tests/array/bug70644_5.phpt | 21 + ext/standard/tests/array/bug70644_6.phpt | 21 + ext/wddx/wddx.c | 11 +- ext/xml/xml.c | 9 +- ext/xmlrpc/xmlrpc-epi-php.c | 10 +- main/php_variables.c | 16 +- tests/basic/bug70644.phpt | 17 + 54 files changed, 1325 insertions(+), 672 deletions(-) create mode 100644 Zend/tests/bug70644_2.phpt create mode 100644 ext/spl/tests/bug70644.phpt create mode 100644 ext/standard/tests/array/bug70644.phpt create mode 100644 ext/standard/tests/array/bug70644_2.phpt create mode 100644 ext/standard/tests/array/bug70644_3.phpt create mode 100644 ext/standard/tests/array/bug70644_4.phpt create mode 100644 ext/standard/tests/array/bug70644_5.phpt create mode 100644 ext/standard/tests/array/bug70644_6.phpt create mode 100644 tests/basic/bug70644.phpt diff --git a/Zend/tests/bug70644.phpt b/Zend/tests/bug70644.phpt index bf9db60a3c6ff..795472dc61cc9 100644 --- a/Zend/tests/bug70644.phpt +++ b/Zend/tests/bug70644.phpt @@ -6,9 +6,13 @@ Bug #70644: trivial hash complexity DoS attack (plain array) $a = []; $s = 1 << 16; for ($i = 0; count($a) < $s; $i += $s) { - $a[$i] = 0; -} + $a[$i] = 0; +} ?> --EXPECTF-- -Fatal error: Too many collisions in hashtable in %s on line %d + +Fatal error: Uncaught HashCollisionError: Too many collisions in array in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/Zend/tests/bug70644_2.phpt b/Zend/tests/bug70644_2.phpt new file mode 100644 index 0000000000000..710972b8d2bb7 --- /dev/null +++ b/Zend/tests/bug70644_2.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #70644: Trivial Hash complexity DoS (static array) +--FILE-- + 0, "; +} + +$code = <<getMessage(), "\n"; +} + +?> +--EXPECT-- +Too many collisions in array diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index dc073de63391b..d103265c77281 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -39,6 +39,7 @@ ZEND_API zend_class_entry *zend_ce_type_error; ZEND_API zend_class_entry *zend_ce_argument_count_error; ZEND_API zend_class_entry *zend_ce_arithmetic_error; ZEND_API zend_class_entry *zend_ce_division_by_zero_error; +ZEND_API zend_class_entry *zend_ce_hash_collision_error; ZEND_API void (*zend_throw_exception_hook)(zval *ex); @@ -871,6 +872,10 @@ void zend_register_default_exception(void) /* {{{ */ INIT_CLASS_ENTRY(ce, "DivisionByZeroError", NULL); zend_ce_division_by_zero_error = zend_register_internal_class_ex(&ce, zend_ce_arithmetic_error); zend_ce_division_by_zero_error->create_object = zend_default_exception_new; + + INIT_CLASS_ENTRY(ce, "HashCollisionError", NULL); + zend_ce_hash_collision_error = zend_register_internal_class_ex(&ce, zend_ce_error); + zend_ce_hash_collision_error->create_object = zend_default_exception_new; } /* }}} */ diff --git a/Zend/zend_exceptions.h b/Zend/zend_exceptions.h index 18caf35553986..244b2b06a1af0 100644 --- a/Zend/zend_exceptions.h +++ b/Zend/zend_exceptions.h @@ -35,6 +35,7 @@ extern ZEND_API zend_class_entry *zend_ce_type_error; extern ZEND_API zend_class_entry *zend_ce_argument_count_error; extern ZEND_API zend_class_entry *zend_ce_arithmetic_error; extern ZEND_API zend_class_entry *zend_ce_division_by_zero_error; +extern ZEND_API zend_class_entry *zend_ce_hash_collision_error; ZEND_API void zend_exception_set_previous(zend_object *exception, zend_object *add_previous); ZEND_API void zend_exception_save(void); diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 0fe25c07f5851..bf8ac8eb740eb 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1557,10 +1557,7 @@ static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined offset: " ZEND_LONG_FMT, hval); - retval = zend_hash_index_update(ht, hval, &EG(uninitialized_zval)); - break; - case BP_VAR_W: - retval = zend_hash_index_add_new(ht, hval, &EG(uninitialized_zval)); + retval = zend_hash_index_update_exception(ht, hval, &EG(uninitialized_zval)); break; } } else if (EXPECTED(Z_TYPE_P(dim) == IS_STRING)) { @@ -1615,7 +1612,7 @@ static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht break; case BP_VAR_RW: zend_error(E_NOTICE,"Undefined index: %s", ZSTR_VAL(offset_key)); - retval = zend_hash_update(ht, offset_key, &EG(uninitialized_zval)); + retval = zend_hash_update_exception(ht, offset_key, &EG(uninitialized_zval)); break; EMPTY_SWITCH_DEFAULT_CASE() } diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index ba9c67ad63d96..a2e672727857b 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -21,6 +21,7 @@ /* $Id$ */ #include "zend.h" +#include "zend_exceptions.h" #include "zend_globals.h" #include "zend_variables.h" @@ -475,14 +476,34 @@ ZEND_API void ZEND_FASTCALL _zend_hash_iterators_update(HashTable *ht, HashPosit * against MAX_COLLISIONS is only performed if *no* matching bucket is found, * as that corresponds to insert operations (as opposed to updates). * + * We use different limits for error and exception collision maximums, + * so that on a prepared array with exactly 1000 collisions, + * inserting a next index won't blow up immediately with a fatal. + * * An important caveat of the implementation is that collisions will *not* * be counted for add_new operations. find+add_new operations should be replaced * with add_or_return operations. */ -#define HT_MAX_COLLISIONS 1000 +#define HT_MAX_ERROR_COLLISIONS 1100 +#define HT_MAX_EXCEPTION_COLLISIONS 1000 + +static zend_always_inline zend_bool zend_hash_check_collisions(int num_collisions, int flags) +{ + if ((flags & HASH_CHECK_COLLISION_ERROR) && UNEXPECTED(num_collisions > HT_MAX_ERROR_COLLISIONS)) { + zend_error_noreturn(E_ERROR, "Too many collisions in array"); + return 1; + } else if ((flags & HASH_CHECK_COLLISION_EXCEPTION) && UNEXPECTED(num_collisions > HT_MAX_EXCEPTION_COLLISIONS)) { + if (!EG(exception)) { + zend_throw_error(zend_ce_hash_collision_error, "Too many collisions in array"); + } + return 1; + } + + return 0; +} static zend_always_inline Bucket *zend_hash_find_bucket( - const HashTable *ht, zend_string *key, zend_bool for_insert) + const HashTable *ht, zend_string *key, int flags) { zend_ulong h; uint32_t nIndex; @@ -507,14 +528,11 @@ static zend_always_inline Bucket *zend_hash_find_bucket( idx = Z_NEXT(p->val); num_collisions++; } - if (for_insert && UNEXPECTED(num_collisions > HT_MAX_COLLISIONS)) { - zend_error_noreturn(E_ERROR, "Too many collisions in hashtable"); - } - return NULL; + return (void *)(intptr_t) zend_hash_check_collisions(num_collisions, flags); } static zend_always_inline Bucket *zend_hash_str_find_bucket( - const HashTable *ht, const char *str, size_t len, zend_ulong h, zend_bool for_insert) + const HashTable *ht, const char *str, size_t len, zend_ulong h, int flags) { uint32_t nIndex; uint32_t idx; @@ -536,14 +554,11 @@ static zend_always_inline Bucket *zend_hash_str_find_bucket( idx = Z_NEXT(p->val); num_collisions++; } - if (for_insert && UNEXPECTED(num_collisions > HT_MAX_COLLISIONS)) { - zend_error_noreturn(E_ERROR, "Too many collisions in hashtable"); - } - return NULL; + return (void *)(intptr_t) zend_hash_check_collisions(num_collisions, flags); } static zend_always_inline Bucket *zend_hash_index_find_bucket( - const HashTable *ht, zend_ulong h, zend_bool for_insert) + const HashTable *ht, zend_ulong h, int flags) { uint32_t nIndex; uint32_t idx; @@ -562,10 +577,7 @@ static zend_always_inline Bucket *zend_hash_index_find_bucket( idx = Z_NEXT(p->val); num_collisions++; } - if (for_insert && UNEXPECTED(num_collisions > HT_MAX_COLLISIONS)) { - zend_error_noreturn(E_ERROR, "Too many collisions in hashtable"); - } - return NULL; + return (void *)(intptr_t) zend_hash_check_collisions(num_collisions, flags); } static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_string *key, zval *pData, uint32_t flag ZEND_FILE_LINE_DC) @@ -584,11 +596,18 @@ static zend_always_inline zval *_zend_hash_add_or_update_i(HashTable *ht, zend_s } else if (ht->u.flags & HASH_FLAG_PACKED) { zend_hash_packed_to_hash(ht); } else if ((flag & HASH_ADD_NEW) == 0) { - p = zend_hash_find_bucket(ht, key, 1); + p = zend_hash_find_bucket(ht, key, flag); if (p) { zval *data; + if ((flag & HASH_CHECK_COLLISION_EXCEPTION) && UNEXPECTED(p == (void *) 0x1)) { + if (ht->pDestructor) { + ht->pDestructor(pData); + } + return &EG(error_zval); + } + if (flag & HASH_ADD) { if (!(flag & HASH_UPDATE_INDIRECT)) { return NULL; @@ -652,12 +671,12 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_add_or_update(HashTable *ht, zend_string ZEND_API zval* ZEND_FASTCALL _zend_hash_add(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval* ZEND_FASTCALL _zend_hash_update(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval* ZEND_FASTCALL _zend_hash_update_ind(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) @@ -667,12 +686,22 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_update_ind(HashTable *ht, zend_string *k ZEND_API zval* ZEND_FASTCALL _zend_hash_add_new(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD_NEW ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD_NEW | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval* ZEND_FASTCALL _zend_hash_add_or_return(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD_OR_RETURN ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD_OR_RETURN | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_RELAY_CC); +} + +ZEND_API zval* ZEND_FASTCALL _zend_hash_update_exception(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) +{ + return _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_RELAY_CC); +} + +ZEND_API zval* ZEND_FASTCALL _zend_hash_update_ind_exception(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC) +{ + return _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE | HASH_UPDATE_INDIRECT | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_or_update(HashTable *ht, const char *str, size_t len, zval *pData, uint32_t flag ZEND_FILE_LINE_DC) @@ -686,7 +715,7 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_or_update(HashTable *ht, const c ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update(HashTable *ht, const char *str, size_t len, zval *pData ZEND_FILE_LINE_DC) { zend_string *key = zend_string_init(str, len, ht->u.flags & HASH_FLAG_PERSISTENT); - zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE ZEND_FILE_LINE_RELAY_CC); + zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); zend_string_release(key); return ret; } @@ -694,7 +723,7 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update(HashTable *ht, const char *st ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update_ind(HashTable *ht, const char *str, size_t len, zval *pData ZEND_FILE_LINE_DC) { zend_string *key = zend_string_init(str, len, ht->u.flags & HASH_FLAG_PERSISTENT); - zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE | HASH_UPDATE_INDIRECT ZEND_FILE_LINE_RELAY_CC); + zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE | HASH_UPDATE_INDIRECT | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); zend_string_release(key); return ret; } @@ -702,7 +731,7 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update_ind(HashTable *ht, const char ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add(HashTable *ht, const char *str, size_t len, zval *pData ZEND_FILE_LINE_DC) { zend_string *key = zend_string_init(str, len, ht->u.flags & HASH_FLAG_PERSISTENT); - zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD ZEND_FILE_LINE_RELAY_CC); + zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); zend_string_release(key); return ret; } @@ -710,11 +739,27 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add(HashTable *ht, const char *str, ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_new(HashTable *ht, const char *str, size_t len, zval *pData ZEND_FILE_LINE_DC) { zend_string *key = zend_string_init(str, len, ht->u.flags & HASH_FLAG_PERSISTENT); - zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD_NEW ZEND_FILE_LINE_RELAY_CC); + zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_ADD_NEW | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); zend_string_delref(key); return ret; } +ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update_exception(HashTable *ht, const char *str, size_t len, zval *pData ZEND_FILE_LINE_DC) +{ + zend_string *key = zend_string_init(str, len, ht->u.flags & HASH_FLAG_PERSISTENT); + zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_RELAY_CC); + zend_string_release(key); + return ret; +} + +ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update_ind_exception(HashTable *ht, const char *str, size_t len, zval *pData ZEND_FILE_LINE_DC) +{ + zend_string *key = zend_string_init(str, len, ht->u.flags & HASH_FLAG_PERSISTENT); + zval *ret = _zend_hash_add_or_update_i(ht, key, pData, HASH_UPDATE | HASH_UPDATE_INDIRECT | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_RELAY_CC); + zend_string_release(key); + return ret; +} + ZEND_API zval* ZEND_FASTCALL zend_hash_index_add_empty_element(HashTable *ht, zend_ulong h) { zval dummy; @@ -814,11 +859,17 @@ static zend_always_inline zval *_zend_hash_index_add_or_update_i(HashTable *ht, convert_to_hash: zend_hash_packed_to_hash(ht); } else if ((flag & HASH_ADD_NEW) == 0) { - p = zend_hash_index_find_bucket(ht, h, 1); + p = zend_hash_index_find_bucket(ht, h, flag); if (p) { if (flag & HASH_ADD) { return NULL; } + if ((flag & HASH_CHECK_COLLISION_EXCEPTION) && UNEXPECTED(p == (void *) 0x1)) { + if (ht->pDestructor) { + ht->pDestructor(pData); + } + return &EG(error_zval); + } if (flag & HASH_ADD_OR_RETURN) { return &p->val; } @@ -864,22 +915,22 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_update(HashTable *ht, zend_ ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_ADD ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_ADD | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_new(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_ADD | HASH_ADD_NEW ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_ADD | HASH_ADD_NEW | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_return(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_ADD_OR_RETURN ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_ADD_OR_RETURN | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval* ZEND_FASTCALL _zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) { - return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_UPDATE ZEND_FILE_LINE_RELAY_CC); + return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_UPDATE | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_RELAY_CC); } ZEND_API zval* ZEND_FASTCALL _zend_hash_next_index_insert(HashTable *ht, zval *pData ZEND_FILE_LINE_DC) @@ -892,6 +943,11 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_next_index_insert_new(HashTable *ht, zva return _zend_hash_index_add_or_update_i(ht, ht->nNextFreeElement, pData, HASH_ADD | HASH_ADD_NEW | HASH_ADD_NEXT ZEND_FILE_LINE_RELAY_CC); } +ZEND_API zval* ZEND_FASTCALL _zend_hash_index_update_exception(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC) +{ + return _zend_hash_index_add_or_update_i(ht, h, pData, HASH_UPDATE | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_RELAY_CC); +} + static void ZEND_FASTCALL zend_hash_do_resize(HashTable *ht) { diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index cf24aa8aea5e2..7a0e59955b221 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -35,6 +35,8 @@ #define HASH_ADD_NEW (1<<3) #define HASH_ADD_NEXT (1<<4) #define HASH_ADD_OR_RETURN (1<<5) +#define HASH_CHECK_COLLISION_EXCEPTION (1<<6) +#define HASH_CHECK_COLLISION_ERROR (1<<7) #define HASH_FLAG_PERSISTENT (1<<0) #define HASH_FLAG_APPLY_PROTECTION (1<<1) @@ -74,6 +76,8 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_update_ind(HashTable *ht, zend_string *k ZEND_API zval* ZEND_FASTCALL _zend_hash_add(HashTable *ht, zend_string *key,zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_add_new(HashTable *ht, zend_string *key,zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_add_or_return(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC); +ZEND_API zval* ZEND_FASTCALL _zend_hash_update_exception(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC); +ZEND_API zval* ZEND_FASTCALL _zend_hash_update_ind_exception(HashTable *ht, zend_string *key, zval *pData ZEND_FILE_LINE_DC); #define zend_hash_update(ht, key, pData) \ _zend_hash_update(ht, key, pData ZEND_FILE_LINE_CC) @@ -85,12 +89,20 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_add_or_return(HashTable *ht, zend_string _zend_hash_add_new(ht, key, pData ZEND_FILE_LINE_CC) #define zend_hash_add_or_return(ht, key, pData) \ _zend_hash_add_or_return(ht, key, pData ZEND_FILE_LINE_CC) +#define zend_hash_add_or_update_exception(ht, key, pData, flag) \ + _zend_hash_add_or_update(ht, key, pData, flag | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_CC) +#define zend_hash_update_exception(ht, key, pData) \ + _zend_hash_update_exception(ht, key, pData ZEND_FILE_LINE_CC) +#define zend_hash_update_ind_exception(ht, key, pData) \ + _zend_hash_update_ind_exception(ht, key, pData ZEND_FILE_LINE_CC) ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_or_update(HashTable *ht, const char *key, size_t len, zval *pData, uint32_t flag ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update(HashTable *ht, const char *key, size_t len, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update_ind(HashTable *ht, const char *key, size_t len, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add(HashTable *ht, const char *key, size_t len, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_new(HashTable *ht, const char *key, size_t len, zval *pData ZEND_FILE_LINE_DC); +ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update_exception(HashTable *ht, const char *key, size_t len, zval *pData ZEND_FILE_LINE_DC); +ZEND_API zval* ZEND_FASTCALL _zend_hash_str_update_ind_exception(HashTable *ht, const char *key, size_t len, zval *pData ZEND_FILE_LINE_DC); #define zend_hash_str_update(ht, key, len, pData) \ _zend_hash_str_update(ht, key, len, pData ZEND_FILE_LINE_CC) @@ -100,6 +112,10 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_str_add_new(HashTable *ht, const char *k _zend_hash_str_add(ht, key, len, pData ZEND_FILE_LINE_CC) #define zend_hash_str_add_new(ht, key, len, pData) \ _zend_hash_str_add_new(ht, key, len, pData ZEND_FILE_LINE_CC) +#define zend_hash_str_update_exception(ht, key, len, pData) \ + _zend_hash_str_update_exception(ht, key, len, pData ZEND_FILE_LINE_CC) +#define zend_hash_str_update_ind_exception(ht, key, len, pData) \ + _zend_hash_str_update_ind_exception(ht, key, len, pData ZEND_FILE_LINE_CC) ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_update(HashTable *ht, zend_ulong h, zval *pData, uint32_t flag ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC); @@ -108,6 +124,7 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_index_add_or_return(HashTable *ht, zend_ ZEND_API zval* ZEND_FASTCALL _zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_next_index_insert(HashTable *ht, zval *pData ZEND_FILE_LINE_DC); ZEND_API zval* ZEND_FASTCALL _zend_hash_next_index_insert_new(HashTable *ht, zval *pData ZEND_FILE_LINE_DC); +ZEND_API zval* ZEND_FASTCALL _zend_hash_index_update_exception(HashTable *ht, zend_ulong h, zval *pData ZEND_FILE_LINE_DC); #define zend_hash_index_add(ht, h, pData) \ _zend_hash_index_add(ht, h, pData ZEND_FILE_LINE_CC) @@ -121,6 +138,10 @@ ZEND_API zval* ZEND_FASTCALL _zend_hash_next_index_insert_new(HashTable *ht, zva _zend_hash_next_index_insert(ht, pData ZEND_FILE_LINE_CC) #define zend_hash_next_index_insert_new(ht, pData) \ _zend_hash_next_index_insert_new(ht, pData ZEND_FILE_LINE_CC) +#define zend_hash_index_add_or_update_exception(ht, key, pData, flag) \ + _zend_hash_index_add_or_update(ht, key, pData, flag | HASH_CHECK_COLLISION_EXCEPTION ZEND_FILE_LINE_CC) +#define zend_hash_index_update_exception(ht, key, pData) \ + _zend_hash_index_update_exception(ht, key, pData ZEND_FILE_LINE_CC) ZEND_API zval* ZEND_FASTCALL zend_hash_index_add_empty_element(HashTable *ht, zend_ulong h); ZEND_API zval* ZEND_FASTCALL zend_hash_add_empty_element(HashTable *ht, zend_string *key); @@ -352,6 +373,30 @@ static zend_always_inline zval *zend_symtable_update_ind(HashTable *ht, zend_str } +static zend_always_inline zval *zend_symtable_update_exception(HashTable *ht, zend_string *key, zval *pData) +{ + zend_ulong idx; + + if (ZEND_HANDLE_NUMERIC(key, idx)) { + return zend_hash_index_update_exception(ht, idx, pData); + } else { + return zend_hash_update_exception(ht, key, pData); + } +} + + +static zend_always_inline zval *zend_symtable_update_ind_exception(HashTable *ht, zend_string *key, zval *pData) +{ + zend_ulong idx; + + if (ZEND_HANDLE_NUMERIC(key, idx)) { + return zend_hash_index_update_exception(ht, idx, pData); + } else { + return zend_hash_update_ind_exception(ht, key, pData); + } +} + + static zend_always_inline int zend_symtable_del(HashTable *ht, zend_string *key) { zend_ulong idx; @@ -448,6 +493,30 @@ static zend_always_inline zval *zend_symtable_str_update_ind(HashTable *ht, cons } +static zend_always_inline zval *zend_symtable_str_update_exception(HashTable *ht, const char *str, size_t len, zval *pData) +{ + zend_ulong idx; + + if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { + return zend_hash_index_update_exception(ht, idx, pData); + } else { + return zend_hash_str_update_exception(ht, str, len, pData); + } +} + + +static zend_always_inline zval *zend_symtable_str_update_ind_exception(HashTable *ht, const char *str, size_t len, zval *pData) +{ + zend_ulong idx; + + if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { + return zend_hash_index_update_exception(ht, idx, pData); + } else { + return zend_hash_str_update_ind_exception(ht, str, len, pData); + } +} + + static zend_always_inline int zend_symtable_str_del(HashTable *ht, const char *str, size_t len) { zend_ulong idx; @@ -565,13 +634,41 @@ static zend_always_inline void *zend_hash_update_ptr(HashTable *ht, zend_string } } +static zend_always_inline void *zend_hash_update_ptr_exception(HashTable *ht, zend_string *key, void *pData) +{ + zval tmp, *zv; + + ZVAL_PTR(&tmp, pData); + zv = zend_hash_update_exception(ht, key, &tmp); + if (zv && Z_TYPE_P(zv) != _IS_ERROR) { + ZEND_ASSUME(Z_PTR_P(zv)); + return Z_PTR_P(zv); + } else { + return NULL; + } +} + static zend_always_inline void *zend_hash_str_update_ptr(HashTable *ht, const char *str, size_t len, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_str_update(ht, str, len, &tmp); - if (zv) { + if (zv && Z_TYPE_P(zv) != _IS_ERROR) { + ZEND_ASSUME(Z_PTR_P(zv)); + return Z_PTR_P(zv); + } else { + return NULL; + } +} + +static zend_always_inline void *zend_hash_str_update_ptr_exception(HashTable *ht, const char *str, size_t len, void *pData) +{ + zval tmp, *zv; + + ZVAL_PTR(&tmp, pData); + zv = zend_hash_str_update_exception(ht, str, len, &tmp); + if (zv && Z_TYPE_P(zv) != _IS_ERROR) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { @@ -614,6 +711,15 @@ static zend_always_inline void *zend_hash_update_mem(HashTable *ht, zend_string return zend_hash_update_ptr(ht, key, p); } +static zend_always_inline void *zend_hash_update_mem_exception(HashTable *ht, zend_string *key, void *pData, size_t size) +{ + void *p; + + p = pemalloc(size, ht->u.flags & HASH_FLAG_PERSISTENT); + memcpy(p, pData, size); + return zend_hash_update_ptr_exception(ht, key, p); +} + static zend_always_inline void *zend_hash_str_update_mem(HashTable *ht, const char *str, size_t len, void *pData, size_t size) { void *p; @@ -655,6 +761,20 @@ static zend_always_inline void *zend_hash_index_update_ptr(HashTable *ht, zend_u } } +static zend_always_inline void *zend_hash_index_update_ptr_exception(HashTable *ht, zend_ulong h, void *pData) +{ + zval tmp, *zv; + + ZVAL_PTR(&tmp, pData); + zv = zend_hash_index_update_exception(ht, h, &tmp); + if (zv) { + ZEND_ASSUME(Z_PTR_P(zv)); + return Z_PTR_P(zv); + } else { + return NULL; + } +} + static zend_always_inline void *zend_hash_index_add_mem(HashTable *ht, zend_ulong h, void *pData, size_t size) { zval tmp, *zv; @@ -691,6 +811,15 @@ static zend_always_inline void *zend_hash_index_update_mem(HashTable *ht, zend_u return zend_hash_index_update_ptr(ht, h, p); } +static zend_always_inline void *zend_hash_index_update_mem_exception(HashTable *ht, zend_ulong h, void *pData, size_t size) +{ + void *p; + + p = pemalloc(size, ht->u.flags & HASH_FLAG_PERSISTENT); + memcpy(p, pData, size); + return zend_hash_index_update_ptr_exception(ht, h, p); +} + static zend_always_inline void *zend_hash_next_index_insert_mem(HashTable *ht, void *pData, size_t size) { zval tmp, *zv; diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index d57bee862ad42..2f8cf2fed900c 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -765,7 +765,7 @@ ZEND_API void zend_std_write_property(zval *object, zval *member, zval *value, v if (!zobj->properties) { rebuild_object_properties(zobj); } - zend_hash_add_new(zobj->properties, Z_STR_P(member), value); + zend_hash_update_exception(zobj->properties, Z_STR_P(member), value); } } diff --git a/Zend/zend_ts_hash.h b/Zend/zend_ts_hash.h index f3087fc032dc5..49ff2c940ff1d 100644 --- a/Zend/zend_ts_hash.h +++ b/Zend/zend_ts_hash.h @@ -51,15 +51,15 @@ ZEND_API void zend_ts_hash_clean(TsHashTable *ht); /* additions/updates/changes */ ZEND_API zval *_zend_ts_hash_add_or_update(TsHashTable *ht, zend_string *key, zval *pData, int flag ZEND_FILE_LINE_DC); #define zend_ts_hash_update(ht, key, pData) \ - _zend_ts_hash_add_or_update(ht, key, pData, HASH_UPDATE ZEND_FILE_LINE_CC) + _zend_ts_hash_add_or_update(ht, key, pData, HASH_UPDATE | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_CC) #define zend_ts_hash_add(ht, key, pData) \ - _zend_ts_hash_add_or_update(ht, key, pData, HASH_ADD ZEND_FILE_LINE_CC) + _zend_ts_hash_add_or_update(ht, key, pData, HASH_ADD | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_CC) ZEND_API zval *_zend_ts_hash_index_add_or_update(TsHashTable *ht, zend_ulong h, zval *pData, int flag ZEND_FILE_LINE_DC); #define zend_ts_hash_index_update(ht, h, pData) \ - _zend_ts_hash_index_add_or_update(ht, h, pData, HASH_UPDATE ZEND_FILE_LINE_CC) + _zend_ts_hash_index_add_or_update(ht, h, pData, HASH_UPDATE | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_CC) #define zend_ts_hash_next_index_insert(ht, pData) \ - _zend_ts_hash_index_add_or_update(ht, ht->nNextFreeElement, pData, HASH_ADD ZEND_FILE_LINE_CC) + _zend_ts_hash_index_add_or_update(ht, ht->nNextFreeElement, pData, HASH_ADD | HASH_CHECK_COLLISION_ERROR ZEND_FILE_LINE_CC) ZEND_API zval* zend_ts_hash_add_empty_element(TsHashTable *ht, zend_string *key); diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 7f428787b4f2a..12c7a2d6655ff 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1535,6 +1535,8 @@ ZEND_VM_HELPER(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int type) if (Z_TYPE_P(retval) == IS_UNDEF) { ZVAL_NULL(retval); } + } else if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { + ZEND_VM_C_GOTO(fetch_this); } } else { retval = zend_hash_find(target_symbol_table, name); @@ -1563,6 +1565,7 @@ ZEND_VM_C_LABEL(fetch_this): } break; case BP_VAR_RW: + case BP_VAR_W: zend_throw_error(NULL, "Cannot re-assign $this"); break; case BP_VAR_UNSET: @@ -5280,11 +5283,11 @@ ZEND_VM_C_LABEL(add_again): } } ZEND_VM_C_LABEL(str_index): - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); ZEND_VM_C_LABEL(num_index): - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); ZEND_VM_C_GOTO(add_again); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index d66e29f98c632..3643d5e6ce216 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -5814,11 +5814,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -7069,6 +7069,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ if (Z_TYPE_P(retval) == IS_UNDEF) { ZVAL_NULL(retval); } + } else if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { + goto fetch_this; } } else { retval = zend_hash_find(target_symbol_table, name); @@ -7097,6 +7099,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ } break; case BP_VAR_RW: + case BP_VAR_W: zend_throw_error(NULL, "Cannot re-assign $this"); break; case BP_VAR_UNSET: @@ -7664,11 +7667,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_U } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -9716,11 +9719,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_C } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -11624,11 +11627,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_T } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -13606,11 +13609,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CON } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -14302,11 +14305,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNU } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -14831,11 +14834,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_ } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -15356,11 +15359,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -19954,11 +19957,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CON } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -21827,11 +21830,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNU } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -24721,11 +24724,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_ } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -27559,11 +27562,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -39684,11 +39687,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONS } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -41760,6 +41763,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ if (Z_TYPE_P(retval) == IS_UNDEF) { ZVAL_NULL(retval); } + } else if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { + goto fetch_this; } } else { retval = zend_hash_find(target_symbol_table, name); @@ -41788,6 +41793,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ } break; case BP_VAR_RW: + case BP_VAR_W: zend_throw_error(NULL, "Cannot re-assign $this"); break; case BP_VAR_UNSET: @@ -42599,11 +42605,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUS } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -46688,11 +46694,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_H } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -50648,11 +50654,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPV } } str_index: - zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); + zend_hash_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: - zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); + zend_hash_index_update_exception(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; @@ -53586,6 +53592,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ if (Z_TYPE_P(retval) == IS_UNDEF) { ZVAL_NULL(retval); } + } else if (UNEXPECTED(zend_string_equals(name, CG(known_strings)[ZEND_STR_THIS]))) { + goto fetch_this; } } else { retval = zend_hash_find(target_symbol_table, name); @@ -53614,6 +53622,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_ } break; case BP_VAR_RW: + case BP_VAR_W: zend_throw_error(NULL, "Cannot re-assign $this"); break; case BP_VAR_UNSET: diff --git a/ext/exif/exif.c b/ext/exif/exif.c index c882a12c7c838..f1a659419f7a8 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -2376,7 +2376,9 @@ static void add_assoc_image_info(zval *value, int sub_array, image_info_type *im if (section_index==SECTION_COMMENT) { add_index_string(&tmpi, idx++, val); } else { - add_assoc_string(&tmpi, name, val); + zval zv; + ZVAL_STRING(&zv, val); + zend_hash_str_update_exception(Z_ARRVAL(tmpi), name, strlen(name), &zv); } break; diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index 7b4d31143a083..c68735b255ecb 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -787,10 +787,12 @@ void mail_getquota(MAILSTREAM *stream, char *qroot, QUOTALIST *qlist) */ void mail_getacl(MAILSTREAM *stream, char *mailbox, ACLLIST *alist) { + zval zv; /* walk through the ACLLIST */ for(; alist; alist = alist->next) { - add_assoc_stringl(IMAPG(imap_acl_list), alist->identifier, alist->rights, strlen(alist->rights)); + ZVAL_STRING(&zv, alist->rights); + zend_hash_update_exception(Z_ARRVAL_P(IMAPG(imap_acl_list)), alist->identifier, &zv); } } /* }}} */ @@ -4683,29 +4685,33 @@ void _php_imap_add_body(zval *arg, BODY *body) */ static void build_thread_tree_helper(THREADNODE *cur, zval *tree, long *numNodes, char *buf) { + zval zv; unsigned long thisNode = *numNodes; /* define "#.num" */ snprintf(buf, 25, "%ld.num", thisNode); - add_assoc_long(tree, buf, cur->num); + ZVAL_LONG(&zv, cur->num); + zend_hash_update_exception(Z_ARRVAL_P(tree), buf, &zv); snprintf(buf, 25, "%ld.next", thisNode); if(cur->next) { - (*numNodes)++; - add_assoc_long(tree, buf, *numNodes); + Z_LVAL(zv) = ++*numNodes; + zend_hash_update_exception(Z_ARRVAL_P(tree), buf, &zv); build_thread_tree_helper(cur->next, tree, numNodes, buf); } else { /* "null pointer" */ - add_assoc_long(tree, buf, 0); + Z_LVAL(zv) = 0; + zend_hash_update_exception(Z_ARRVAL_P(tree), buf, &zv); } snprintf(buf, 25, "%ld.branch", thisNode); if(cur->branch) { - (*numNodes)++; - add_assoc_long(tree, buf, *numNodes); + Z_LVAL(zv) = ++*numNodes; + zend_hash_update_exception(Z_ARRVAL_P(tree), buf, &zv); build_thread_tree_helper(cur->branch, tree, numNodes, buf); } else { /* "null pointer" */ - add_assoc_long(tree, buf, 0); + Z_LVAL(zv) = 0; + zend_hash_update_exception(Z_ARRVAL_P(tree), buf, &zv); } } /* }}} */ diff --git a/ext/interbase/ibase_query.c b/ext/interbase/ibase_query.c index 8923a8c55daa3..4fe46b45169b7 100644 --- a/ext/interbase/ibase_query.c +++ b/ext/interbase/ibase_query.c @@ -1504,6 +1504,7 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) for (i = 0; i < ib_result->out_sqlda->sqld; ++i) { XSQLVAR *var = &ib_result->out_sqlda->sqlvar[i]; char buf[METADATALENGTH+4], *alias = var->aliasname; + zval result; if (! (fetch_type & FETCH_ROW)) { int i = 0; @@ -1530,8 +1531,6 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) } if (((var->sqltype & 1) == 0) || *var->sqlind != -1) { - zval result; - switch (var->sqltype & ~1) { default: @@ -1633,15 +1632,16 @@ static void _php_ibase_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int fetch_type) } /* switch */ if (fetch_type & FETCH_ROW) { - add_index_zval(return_value, i, &result); + zend_hash_index_add(Z_ARRVAL_P(return_value), i, &result); } else { - add_assoc_zval(return_value, alias, &result); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), alias, strlen(alias), &result); } } else { + ZVAL_NULL(&result); if (fetch_type & FETCH_ROW) { - add_index_null(return_value, i); + zend_hash_index_add(Z_ARRVAL_P(return_value), i, &result); } else { - add_assoc_null(return_value, alias); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), alias, strlen(alias), &result); } } } /* for field */ diff --git a/ext/json/json.c b/ext/json/json.c index 395f11db53fa8..e0c1a87f6c9fe 100644 --- a/ext/json/json.c +++ b/ext/json/json.c @@ -127,6 +127,7 @@ static PHP_MINIT_FUNCTION(json) PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_UNSUPPORTED_TYPE", PHP_JSON_ERROR_UNSUPPORTED_TYPE); PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_INVALID_PROPERTY_NAME", PHP_JSON_ERROR_INVALID_PROPERTY_NAME); PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_UTF16", PHP_JSON_ERROR_UTF16); + PHP_JSON_REGISTER_CONSTANT("JSON_ERROR_COLLISIONS", PHP_JSON_ERROR_COLLISIONS); return SUCCESS; } @@ -323,6 +324,8 @@ static PHP_FUNCTION(json_last_error_msg) RETURN_STRING("The decoded property name is invalid"); case PHP_JSON_ERROR_UTF16: RETURN_STRING("Single unpaired UTF-16 surrogate in unicode escape"); + case PHP_JSON_ERROR_COLLISIONS: + RETURN_STRING("Too many collisions for a same hash offset"); default: RETURN_STRING("Unknown error"); } diff --git a/ext/json/json_parser.tab.c b/ext/json/json_parser.tab.c index b4f426e07a850..570029575d721 100644 --- a/ext/json/json_parser.tab.c +++ b/ext/json/json_parser.tab.c @@ -1,19 +1,19 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 2.7.12-4996. */ /* Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. - + + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -26,7 +26,7 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "2.7.12-4996" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -82,6 +82,7 @@ #include "php.h" #include "php_json.h" #include "php_json_parser.h" +#include "zend_exceptions.h" #define YYDEBUG 0 @@ -109,23 +110,25 @@ int json_yydebug = 1; + /* Substitute the variable and function names. */ #define yyparse php_json_yyparse #define yylex php_json_yylex #define yyerror php_json_yyerror +#define yylval php_json_yylval +#define yychar php_json_yychar #define yydebug php_json_yydebug #define yynerrs php_json_yynerrs - /* Copy the first part of user declarations. */ -# ifndef YY_NULLPTR +# ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr +# define YY_NULL nullptr # else -# define YY_NULLPTR 0 +# define YY_NULL 0 # endif # endif @@ -139,9 +142,9 @@ int json_yydebug = 1; /* In a future release of Bison, this section will be replaced by #include "json_parser.tab.h". */ -#ifndef YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED -# define YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED -/* Debug traces. */ +#ifndef YY_PHP_JSON_YY_USERS_BOB_PHP_SRC_X_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED +# define YY_PHP_JSON_YY_USERS_BOB_PHP_SRC_X_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED +/* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif @@ -149,21 +152,22 @@ int json_yydebug = 1; extern int php_json_yydebug; #endif -/* Token type. */ +/* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - enum yytokentype - { - PHP_JSON_T_NUL = 258, - PHP_JSON_T_TRUE = 259, - PHP_JSON_T_FALSE = 260, - PHP_JSON_T_INT = 261, - PHP_JSON_T_DOUBLE = 262, - PHP_JSON_T_STRING = 263, - PHP_JSON_T_ESTRING = 264, - PHP_JSON_T_EOI = 265, - PHP_JSON_T_ERROR = 266 - }; + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + PHP_JSON_T_NUL = 258, + PHP_JSON_T_TRUE = 259, + PHP_JSON_T_FALSE = 260, + PHP_JSON_T_INT = 261, + PHP_JSON_T_DOUBLE = 262, + PHP_JSON_T_STRING = 263, + PHP_JSON_T_ESTRING = 264, + PHP_JSON_T_EOI = 265, + PHP_JSON_T_ERROR = 266 + }; #endif /* Tokens. */ #define PHP_JSON_T_NUL 258 @@ -176,10 +180,10 @@ extern int php_json_yydebug; #define PHP_JSON_T_EOI 265 #define PHP_JSON_T_ERROR 266 -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE { @@ -190,18 +194,29 @@ union YYSTYPE } pair; -}; -typedef union YYSTYPE YYSTYPE; +} YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif - +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int php_json_yyparse (void *YYPARSE_PARAM); +#else +int php_json_yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus int php_json_yyparse (php_json_parser *parser); +#else +int php_json_yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ -#endif /* !YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED */ +#endif /* !YY_PHP_JSON_YY_USERS_BOB_PHP_SRC_X_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED */ /* Copy the second part of user declarations. */ @@ -215,6 +230,7 @@ static void php_json_yyerror(php_json_parser *parser, char const *msg); + #ifdef short # undef short #endif @@ -227,8 +243,11 @@ typedef unsigned char yytype_uint8; #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; -#else +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; +#else +typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 @@ -248,7 +267,8 @@ typedef short int yytype_int16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@ -270,30 +290,11 @@ typedef short int yytype_int16; # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) -# else -# define YY_ATTRIBUTE(Spec) /* empty */ -# endif -#endif - -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if (! defined __GNUC__ || __GNUC__ < 2 \ + || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) +# define __attribute__(Spec) /* empty */ # endif #endif @@ -304,26 +305,25 @@ typedef short int yytype_int16; # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(N) (N) #else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int yyi) +#else +static int +YYID (yyi) + int yyi; #endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ +{ + return yyi; +} #endif - #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -341,7 +341,8 @@ typedef short int yytype_int16; # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS @@ -353,8 +354,8 @@ typedef short int yytype_int16; # endif # ifdef YYSTACK_ALLOC - /* Pacify GCC's 'empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely @@ -370,7 +371,7 @@ typedef short int yytype_int16; # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ - && (defined YYFREE || defined free))) + && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 @@ -378,13 +379,15 @@ typedef short int yytype_int16; # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if ! defined malloc && ! defined EXIT_SUCCESS +# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if ! defined free && ! defined EXIT_SUCCESS +# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@ -394,7 +397,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ - || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc @@ -419,16 +422,16 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ - Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) #endif @@ -447,7 +450,7 @@ union yyalloc for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ - while (0) + while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ @@ -463,19 +466,17 @@ union yyalloc #define YYNNTS 16 /* YYNRULES -- Number of rules. */ #define YYNRULES 36 -/* YYNSTATES -- Number of states. */ +/* YYNRULES -- Number of states. */ #define YYNSTATES 45 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 266 -#define YYTRANSLATE(YYX) \ +#define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) -/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -508,13 +509,37 @@ static const yytype_uint8 yytranslate[] = }; #if YYDEBUG - /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 6, 9, 10, 15, 17, 19, 20, + 22, 24, 28, 31, 35, 38, 39, 44, 46, 48, + 49, 51, 53, 57, 60, 62, 64, 66, 68, 70, + 72, 74, 76, 78, 80, 82, 84 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 19, 0, -1, 32, 10, -1, 32, 33, -1, -1, + 12, 21, 23, 22, -1, 13, -1, 14, -1, -1, + 24, -1, 25, -1, 24, 15, 25, -1, 24, 33, + -1, 31, 16, 32, -1, 31, 33, -1, -1, 17, + 27, 29, 28, -1, 14, -1, 13, -1, -1, 30, + -1, 32, -1, 30, 15, 32, -1, 30, 33, -1, + 8, -1, 9, -1, 20, -1, 26, -1, 8, -1, + 9, -1, 6, -1, 7, -1, 3, -1, 4, -1, + 5, -1, 33, -1, 11, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 89, 89, 95, 103, 102, 120, 121, 130, 133, - 137, 144, 151, 158, 163, 171, 170, 188, 189, 198, - 201, 205, 210, 215, 222, 223, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 240 + 0, 90, 90, 96, 104, 103, 121, 122, 131, 134, + 138, 145, 152, 159, 164, 172, 171, 189, 190, 199, + 202, 206, 211, 216, 223, 224, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 241 }; #endif @@ -529,13 +554,13 @@ static const char *const yytname[] = "PHP_JSON_T_ERROR", "'{'", "'}'", "']'", "','", "':'", "'['", "$accept", "start", "object", "$@1", "object_end", "members", "member", "pair", "array", "$@2", "array_end", "elements", "element", "key", "value", - "errlex", YY_NULLPTR + "errlex", YY_NULL }; #endif # ifdef YYPRINT -/* YYTOKNUM[NUM] -- (External) token number corresponding to the - (internal) symbol number NUM (which must be that of a token). */ +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, @@ -543,30 +568,27 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -18 - -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-18))) - -#define YYTABLE_NINF -1 - -#define yytable_value_is_error(Yytable_value) \ - 0 +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 18, 19, 19, 21, 20, 22, 22, 23, 23, + 24, 24, 24, 25, 25, 27, 26, 28, 28, 29, + 29, 30, 30, 30, 31, 31, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 33 +}; - /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -static const yytype_int8 yypact[] = +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = { - -2, -18, -18, -18, -18, -18, -18, -18, -18, -18, - -18, 11, -18, -18, 9, -18, 21, -2, -18, -18, - -18, -18, -18, 18, 1, -18, -3, 20, 6, -18, - -18, -18, -18, 21, -18, -2, -18, -18, -18, -18, - -2, -18, -18, -18, -18 + 0, 2, 2, 2, 0, 4, 1, 1, 0, 1, + 1, 3, 2, 3, 2, 0, 4, 1, 1, 0, + 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1 }; - /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - Performed when YYTABLE does not specify something else to do. Zero - means the default is an error. */ +/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 32, 33, 34, 30, 31, 28, 29, 36, 4, @@ -576,23 +598,36 @@ static const yytype_uint8 yydefact[] = 0, 23, 11, 13, 22 }; - /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int8 yypgoto[] = -{ - -18, -18, -18, -18, -18, -18, -18, -11, -18, -18, - -18, -18, -18, -18, -17, 0 -}; - - /* YYDEFGOTO[NTERM-NUM]. */ +/* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 11, 12, 16, 32, 23, 24, 25, 13, 17, 39, 27, 28, 26, 14, 15 }; - /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule whose - number is the opposite. If YYTABLE_NINF, syntax error. */ +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -18 +static const yytype_int8 yypact[] = +{ + -2, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, 11, -18, -18, 9, -18, 21, -2, -18, -18, + -18, -18, -18, 18, 1, -18, -3, 20, 6, -18, + -18, -18, -18, 21, -18, -2, -18, -18, -18, -18, + -2, -18, -18, -18, -18 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -18, -18, -18, -18, -18, -18, -18, -11, -18, -18, + -18, -18, -18, -18, -17, 0 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 29, 1, 2, 3, 4, 5, 6, 7, 8, 8, @@ -601,6 +636,12 @@ static const yytype_uint8 yytable[] = 22, 30, 31, 37, 38 }; +#define yypact_value_is_default(Yystate) \ + (!!((Yystate) == (-18))) + +#define yytable_value_is_error(Yytable_value) \ + YYID (0) + static const yytype_int8 yycheck[] = { 17, 3, 4, 5, 6, 7, 8, 9, 11, 11, @@ -609,8 +650,8 @@ static const yytype_int8 yycheck[] = 9, 13, 14, 13, 14 }; - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 9, 11, 12, @@ -620,34 +661,30 @@ static const yytype_uint8 yystos[] = 15, 33, 25, 32, 32 }; - /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint8 yyr1[] = -{ - 0, 18, 19, 19, 21, 20, 22, 22, 23, 23, - 24, 24, 24, 25, 25, 27, 26, 28, 28, 29, - 29, 30, 30, 30, 31, 31, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 33 -}; - - /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = -{ - 0, 2, 2, 2, 0, 4, 1, 1, 0, 1, - 1, 3, 2, 3, 2, 0, 4, 1, 1, 0, - 1, 1, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1 -}; - - -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab - +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. However, + YYFAIL appears to be in use. Nevertheless, it is formally deprecated + in Bison 2.4.2's NEWS entry, where a plan to phase it out is + discussed. */ + +#define YYFAIL goto yyerrlab +#if defined YYFAIL + /* This is here to suppress warnings from the GCC cpp's + -Wunused-macros. Normally we don't worry about that warning, but + some users do, and we want to make it easy for users to remove + YYFAIL uses, which will produce warnings from Bison 2.5. */ +#endif #define YYRECOVERING() (!!yyerrstatus) @@ -664,15 +701,27 @@ do \ else \ { \ yyerror (parser, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) + YYERROR; \ + } \ +while (YYID (0)) /* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 +#define YYTERROR 1 +#define YYERRCODE 256 +/* This macro is provided for backward compatibility. */ +#ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval, parser) +#endif /* Enable debugging if requested. */ #if YYDEBUG @@ -682,45 +731,52 @@ while (0) # define YYFPRINTF fprintf # endif -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -/* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, parser); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yy_symbol_print (stderr, \ - Type, Value, parser); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ - +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, php_json_parser *parser) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; + php_json_parser *parser; +#endif { FILE *yyo = yyoutput; YYUSE (yyo); - YYUSE (parser); if (!yyvaluep) return; + YYUSE (parser); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); # endif YYUSE (yytype); } @@ -730,11 +786,23 @@ yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvalue | Print this symbol on YYOUTPUT. | `--------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, php_json_parser *parser) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep, parser) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; + php_json_parser *parser; +#endif { - YYFPRINTF (yyoutput, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser); YYFPRINTF (yyoutput, ")"); @@ -745,8 +813,16 @@ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, php | TOP (included). | `------------------------------------------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +#else +static void +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; +#endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -757,42 +833,50 @@ yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) YYFPRINTF (stderr, "\n"); } -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule, php_json_parser *parser) +#else static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, php_json_parser *parser) +yy_reduce_print (yyvsp, yyrule, parser) + YYSTYPE *yyvsp; + int yyrule; + php_json_parser *parser; +#endif { - unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; + unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", - yyrule - 1, yylno); + yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); - yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) - , parser); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , parser); YYFPRINTF (stderr, "\n"); } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (yyssp, yyvsp, Rule, parser); \ -} while (0) +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule, parser); \ +} while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@ -806,7 +890,7 @@ int yydebug; /* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH +#ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif @@ -829,8 +913,15 @@ int yydebug; # define yystrlen strlen # else /* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) @@ -846,8 +937,16 @@ yystrlen (const char *yystr) # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif { char *yyd = yydest; const char *yys = yysrc; @@ -877,27 +976,27 @@ yytnamerr (char *yyres, const char *yystr) char const *yyp = yystr; for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - /* Fall through. */ - default: - if (yyres) - yyres[yyn] = *yyp; - yyn++; - break; - - case '"': - if (yyres) - yyres[yyn] = '\0'; - return yyn; - } + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } do_not_strip_quotes: ; } @@ -920,11 +1019,11 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; + const char *yyformat = YY_NULL; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -932,6 +1031,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, int yycount = 0; /* There are many possibilities here to consider: + - Assume YYFAIL is not used. It's too flawed to consider. See + + for details. YYERROR is fine as it does not invoke this + function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected @@ -981,7 +1084,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; @@ -1048,143 +1151,133 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | Release the memory associated to this symbol. | `-----------------------------------------------*/ +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, php_json_parser *parser) +#else +static void +yydestruct (yymsg, yytype, yyvaluep, parser) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; + php_json_parser *parser; +#endif { YYUSE (yyvaluep); YYUSE (parser); + if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN switch (yytype) { - case 3: /* PHP_JSON_T_NUL */ + case 3: /* PHP_JSON_T_NUL */ - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 4: /* PHP_JSON_T_TRUE */ - case 4: /* PHP_JSON_T_TRUE */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 5: /* PHP_JSON_T_FALSE */ - case 5: /* PHP_JSON_T_FALSE */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 6: /* PHP_JSON_T_INT */ - case 6: /* PHP_JSON_T_INT */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 7: /* PHP_JSON_T_DOUBLE */ - case 7: /* PHP_JSON_T_DOUBLE */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 8: /* PHP_JSON_T_STRING */ - case 8: /* PHP_JSON_T_STRING */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 9: /* PHP_JSON_T_ESTRING */ - case 9: /* PHP_JSON_T_ESTRING */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 10: /* PHP_JSON_T_EOI */ - case 10: /* PHP_JSON_T_EOI */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 11: /* PHP_JSON_T_ERROR */ - case 11: /* PHP_JSON_T_ERROR */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 19: /* start */ - case 19: /* start */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 20: /* object */ - case 20: /* object */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 23: /* members */ - case 23: /* members */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 24: /* member */ - case 24: /* member */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 25: /* pair */ - case 25: /* pair */ - - { zend_string_release(((*yyvaluep).pair).key); zval_dtor(&((*yyvaluep).pair).val); } + { zend_string_release(((*yyvaluep).pair).key); zval_dtor(&((*yyvaluep).pair).val); }; break; + case 26: /* array */ - case 26: /* array */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 29: /* elements */ - case 29: /* elements */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 30: /* element */ - case 30: /* element */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 31: /* key */ - case 31: /* key */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 32: /* value */ - case 32: /* value */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; + case 33: /* errlex */ - case 33: /* errlex */ - - { zval_dtor(&((*yyvaluep).value)); } + { zval_dtor(&((*yyvaluep).value)); }; break; - default: break; } - YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -1194,18 +1287,56 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, php_json_parser *p | yyparse. | `----------*/ +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) int yyparse (php_json_parser *parser) +#else +int +yyparse (parser) + php_json_parser *parser; +#endif +#endif { /* The lookahead symbol. */ int yychar; -/* The semantic value of the lookahead symbol. */ +#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ -YY_INITIAL_VALUE (static YYSTYPE yyval_default;) -YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); +static YYSTYPE yyval_default; +# define YY_INITIAL_VALUE(Value) = Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); /* Number of syntax errors so far. */ int yynerrs; @@ -1215,8 +1346,8 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); int yyerrstatus; /* The stacks and their tools: - 'yyss': related to states. - 'yyvs': related to semantic values. + `yyss': related to states. + `yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ @@ -1284,23 +1415,23 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); #ifdef yyoverflow { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - &yystacksize); - - yyss = yyss1; - yyvs = yyvs1; + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE @@ -1308,22 +1439,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) - goto yyexhaustedlab; + goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; + yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss_alloc, yyss); - YYSTACK_RELOCATE (yyvs_alloc, yyvs); + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ @@ -1332,10 +1463,10 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); @@ -1364,7 +1495,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); - yychar = yylex (&yylval, parser); + yychar = YYLEX; } if (yychar <= YYEOF) @@ -1429,7 +1560,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: - '$$ = $1'. + `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison @@ -1445,19 +1576,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); case 2: { - ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value)); - ZVAL_COPY_VALUE(parser->return_value, &(yyvsp[-1].value)); - PHP_JSON_USE((yyvsp[0].value)); YYACCEPT; + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(1) - (2)].value)); + ZVAL_COPY_VALUE(parser->return_value, &(yyvsp[(1) - (2)].value)); + PHP_JSON_USE((yyvsp[(2) - (2)].value)); YYACCEPT; } - break; case 3: { - PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); + PHP_JSON_USE_2((yyval.value), (yyvsp[(1) - (2)].value), (yyvsp[(2) - (2)].value)); } - break; case 4: @@ -1468,19 +1597,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); YYERROR; } } - break; case 5: { - ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value)); + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(3) - (4)].value)); PHP_JSON_DEPTH_DEC; if (parser->methods.object_end && FAILURE == parser->methods.object_end(parser, &(yyval.value))) { YYERROR; } } - break; case 7: @@ -1489,7 +1616,6 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; YYERROR; } - break; case 8: @@ -1497,54 +1623,48 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { parser->methods.object_create(parser, &(yyval.value)); } - break; case 10: { parser->methods.object_create(parser, &(yyval.value)); - if (parser->methods.object_update(parser, &(yyval.value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val) == FAILURE) { + if (parser->methods.object_update(parser, &(yyval.value), (yyvsp[(1) - (1)].pair).key, &(yyvsp[(1) - (1)].pair).val) == FAILURE) { YYERROR; } } - break; case 11: { - if (parser->methods.object_update(parser, &(yyvsp[-2].value), (yyvsp[0].pair).key, &(yyvsp[0].pair).val) == FAILURE) { + if (parser->methods.object_update(parser, &(yyvsp[(1) - (3)].value), (yyvsp[(3) - (3)].pair).key, &(yyvsp[(3) - (3)].pair).val) == FAILURE) { YYERROR; } - ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value)); + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(1) - (3)].value)); } - break; case 12: { - PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); + PHP_JSON_USE_2((yyval.value), (yyvsp[(1) - (2)].value), (yyvsp[(2) - (2)].value)); } - break; case 13: { - (yyval.pair).key = Z_STR((yyvsp[-2].value)); - ZVAL_COPY_VALUE(&(yyval.pair).val, &(yyvsp[0].value)); + (yyval.pair).key = Z_STR((yyvsp[(1) - (3)].value)); + ZVAL_COPY_VALUE(&(yyval.pair).val, &(yyvsp[(3) - (3)].value)); } - break; case 14: { - PHP_JSON_USE_2((yyval.pair), (yyvsp[-1].value), (yyvsp[0].value)); + PHP_JSON_USE_2((yyval.pair), (yyvsp[(1) - (2)].value), (yyvsp[(2) - (2)].value)); } - break; case 15: @@ -1555,19 +1675,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); YYERROR; } } - break; case 16: { - ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-1].value)); + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(3) - (4)].value)); PHP_JSON_DEPTH_DEC; if (parser->methods.array_end && FAILURE == parser->methods.array_end(parser, &(yyval.value))) { YYERROR; } } - break; case 18: @@ -1576,7 +1694,6 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parser->scanner.errcode = PHP_JSON_ERROR_STATE_MISMATCH; YYERROR; } - break; case 19: @@ -1584,42 +1701,37 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { parser->methods.array_create(parser, &(yyval.value)); } - break; case 21: { parser->methods.array_create(parser, &(yyval.value)); - parser->methods.array_append(parser, &(yyval.value), &(yyvsp[0].value)); + parser->methods.array_append(parser, &(yyval.value), &(yyvsp[(1) - (1)].value)); } - break; case 22: { - parser->methods.array_append(parser, &(yyvsp[-2].value), &(yyvsp[0].value)); - ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[-2].value)); + parser->methods.array_append(parser, &(yyvsp[(1) - (3)].value), &(yyvsp[(3) - (3)].value)); + ZVAL_COPY_VALUE(&(yyval.value), &(yyvsp[(1) - (3)].value)); } - break; case 23: { - PHP_JSON_USE_2((yyval.value), (yyvsp[-1].value), (yyvsp[0].value)); + PHP_JSON_USE_2((yyval.value), (yyvsp[(1) - (2)].value), (yyvsp[(2) - (2)].value)); } - break; case 36: { - PHP_JSON_USE_1((yyval.value), (yyvsp[0].value)); + PHP_JSON_USE_1((yyval.value), (yyvsp[(1) - (1)].value)); YYERROR; } - break; @@ -1645,7 +1757,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); *++yyvsp = yyval; - /* Now 'shift' the result of the reduction. Determine what state + /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ @@ -1660,9 +1772,9 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); goto yynewstate; -/*--------------------------------------. -| yyerrlab -- here on detecting error. | -`--------------------------------------*/ +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ @@ -1713,20 +1825,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + error, discard it. */ if (yychar <= YYEOF) - { - /* Return failure if at end of input. */ - if (yychar == YYEOF) - YYABORT; - } + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } else - { - yydestruct ("Error: discarding", - yytoken, &yylval, parser); - yychar = YYEMPTY; - } + { + yydestruct ("Error: discarding", + yytoken, &yylval, parser); + yychar = YYEMPTY; + } } /* Else will try to reuse lookahead token after shifting the error @@ -1745,7 +1857,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (/*CONSTCOND*/ 0) goto yyerrorlab; - /* Do not reclaim the symbols of the rule whose action triggered + /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; @@ -1758,29 +1870,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ + yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) - YYABORT; + YYABORT; yydestruct ("Error: popping", - yystos[yystate], yyvsp, parser); + yystos[yystate], yyvsp, parser); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -1831,14 +1943,14 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, parser); } - /* Do not reclaim the symbols of the rule whose action triggered + /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, parser); + yystos[*yyssp], yyvsp, parser); YYPOPSTACK (1); } #ifndef yyoverflow @@ -1849,9 +1961,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - return yyresult; + /* Make sure YYID is used. */ + return YYID (yyresult); } + + /* Functions */ static int php_json_parser_array_create(php_json_parser *parser, zval *array) @@ -1878,7 +1993,7 @@ static int php_json_parser_object_update(php_json_parser *parser, zval *object, { /* if JSON_OBJECT_AS_ARRAY is set */ if (Z_TYPE_P(object) == IS_ARRAY) { - zend_symtable_update(Z_ARRVAL_P(object), key, zvalue); + zend_symtable_update_exception(Z_ARRVAL_P(object), key, zvalue); } else { zval zkey; if (ZSTR_LEN(key) > 0 && ZSTR_VAL(key)[0] == '\0') { @@ -1897,6 +2012,13 @@ static int php_json_parser_object_update(php_json_parser *parser, zval *object, } zend_string_release(key); + if (EG(exception)) { + parser->scanner.errcode = PHP_JSON_ERROR_COLLISIONS; + zval_dtor(object); + zend_clear_exception(); + return FAILURE; + } + return SUCCESS; } diff --git a/ext/json/json_parser.tab.h b/ext/json/json_parser.tab.h index 4349b7040612d..cfb8f59e684a9 100644 --- a/ext/json/json_parser.tab.h +++ b/ext/json/json_parser.tab.h @@ -1,19 +1,19 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 2.7.12-4996. */ /* Bison interface for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. - + + Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -26,13 +26,13 @@ special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. - + This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -#ifndef YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED -# define YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED -/* Debug traces. */ +#ifndef YY_PHP_JSON_YY_USERS_BOB_PHP_SRC_X_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED +# define YY_PHP_JSON_YY_USERS_BOB_PHP_SRC_X_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED +/* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif @@ -40,21 +40,22 @@ extern int php_json_yydebug; #endif -/* Token type. */ +/* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE - enum yytokentype - { - PHP_JSON_T_NUL = 258, - PHP_JSON_T_TRUE = 259, - PHP_JSON_T_FALSE = 260, - PHP_JSON_T_INT = 261, - PHP_JSON_T_DOUBLE = 262, - PHP_JSON_T_STRING = 263, - PHP_JSON_T_ESTRING = 264, - PHP_JSON_T_EOI = 265, - PHP_JSON_T_ERROR = 266 - }; + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + PHP_JSON_T_NUL = 258, + PHP_JSON_T_TRUE = 259, + PHP_JSON_T_FALSE = 260, + PHP_JSON_T_INT = 261, + PHP_JSON_T_DOUBLE = 262, + PHP_JSON_T_STRING = 263, + PHP_JSON_T_ESTRING = 264, + PHP_JSON_T_EOI = 265, + PHP_JSON_T_ERROR = 266 + }; #endif /* Tokens. */ #define PHP_JSON_T_NUL 258 @@ -67,10 +68,10 @@ extern int php_json_yydebug; #define PHP_JSON_T_EOI 265 #define PHP_JSON_T_ERROR 266 -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -union YYSTYPE + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE { @@ -81,15 +82,26 @@ union YYSTYPE } pair; -}; -typedef union YYSTYPE YYSTYPE; +} YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif - +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int php_json_yyparse (void *YYPARSE_PARAM); +#else +int php_json_yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus int php_json_yyparse (php_json_parser *parser); +#else +int php_json_yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ -#endif /* !YY_PHP_JSON_YY_HOME_DMITRY_PHP_PHP_MASTER_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED */ +#endif /* !YY_PHP_JSON_YY_USERS_BOB_PHP_SRC_X_EXT_JSON_JSON_PARSER_TAB_H_INCLUDED */ diff --git a/ext/json/json_parser.y b/ext/json/json_parser.y index 43d941b56c49f..b490cb55343b9 100644 --- a/ext/json/json_parser.y +++ b/ext/json/json_parser.y @@ -20,6 +20,7 @@ #include "php.h" #include "php_json.h" #include "php_json_parser.h" +#include "zend_exceptions.h" #define YYDEBUG 0 @@ -270,7 +271,7 @@ static int php_json_parser_object_update(php_json_parser *parser, zval *object, { /* if JSON_OBJECT_AS_ARRAY is set */ if (Z_TYPE_P(object) == IS_ARRAY) { - zend_symtable_update(Z_ARRVAL_P(object), key, zvalue); + zend_symtable_update_exception(Z_ARRVAL_P(object), key, zvalue); } else { zval zkey; if (ZSTR_LEN(key) > 0 && ZSTR_VAL(key)[0] == '\0') { @@ -289,6 +290,13 @@ static int php_json_parser_object_update(php_json_parser *parser, zval *object, } zend_string_release(key); + if (EG(exception)) { + parser->scanner.errcode = PHP_JSON_ERROR_COLLISIONS; + zval_dtor(object); + zend_clear_exception(); + return FAILURE; + } + return SUCCESS; } diff --git a/ext/json/php_json.h b/ext/json/php_json.h index cedb8ae453a5a..468f2ff284ac8 100644 --- a/ext/json/php_json.h +++ b/ext/json/php_json.h @@ -52,7 +52,8 @@ typedef enum { PHP_JSON_ERROR_INF_OR_NAN, PHP_JSON_ERROR_UNSUPPORTED_TYPE, PHP_JSON_ERROR_INVALID_PROPERTY_NAME, - PHP_JSON_ERROR_UTF16 + PHP_JSON_ERROR_UTF16, + PHP_JSON_ERROR_COLLISIONS } php_json_error_code; /* json_encode() options */ diff --git a/ext/json/tests/bug70644.phpt b/ext/json/tests/bug70644.phpt index 12d60db9a24f7..d020eae494c9c 100644 --- a/ext/json/tests/bug70644.phpt +++ b/ext/json/tests/bug70644.phpt @@ -10,7 +10,9 @@ for ($i = 0, $j = 0; $i < $s; $i++, $j += $s) { } $j = '{' . implode(', ', $a) . '}'; var_dump(json_decode($j, true)); +var_dump(json_last_error() == JSON_ERROR_COLLISIONS); ?> --EXPECTF-- -Fatal error: Too many collisions in hashtable in %s on line %d +NULL +bool(true) diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 1e3cdad28fe5b..55784a859f1bb 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1165,8 +1165,8 @@ void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend field_len = mysql_fetch_lengths(result); for (i = 0; i < mysql_num_fields(result); i++) { + zval res; if (row[i]) { - zval res; #if MYSQL_VERSION_ID > 50002 if (mysql_fetch_field_direct(result, i)->type == MYSQL_TYPE_BIT) { @@ -1202,14 +1202,15 @@ void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend if (fetchtype & MYSQLI_NUM && Z_REFCOUNTED(res)) { Z_ADDREF(res); } - add_assoc_zval(return_value, fields[i].name, &res); + zend_hash_update_exception(Z_ARRVAL_P(return_value), fields[i].name, &res); } } else { if (fetchtype & MYSQLI_NUM) { add_index_null(return_value, i); } if (fetchtype & MYSQLI_ASSOC) { - add_assoc_null(return_value, fields[i].name); + ZVAL_NULL(res); + zend_hash_update_exception(Z_ARRVAL_P(return_value), fields[i].name, &res); } } } diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c index 513214d3fa403..69668f794c56c 100644 --- a/ext/mysqlnd/mysqlnd_result.c +++ b/ext/mysqlnd/mysqlnd_result.c @@ -882,7 +882,7 @@ MYSQLND_METHOD(mysqlnd_result_unbuffered, fetch_row)(MYSQLND_RES * result, void */ Z_TRY_ADDREF_P(data); if (meta->zend_hash_keys[i].is_numeric == FALSE) { - zend_hash_update(row_ht, meta->fields[i].sname, data); + zend_hash_update_exception(row_ht, meta->fields[i].sname, data); } else { zend_hash_index_update(row_ht, meta->zend_hash_keys[i].key, data); } @@ -1139,7 +1139,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_zval, fetch_row)(MYSQLND_RES * result, vo */ Z_TRY_ADDREF_P(data); if (meta->zend_hash_keys[i].is_numeric == FALSE) { - zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].sname, data); + zend_hash_update_exception(Z_ARRVAL_P(row), meta->fields[i].sname, data); } else { zend_hash_index_update(Z_ARRVAL_P(row), meta->zend_hash_keys[i].key, data); } @@ -1235,7 +1235,7 @@ MYSQLND_METHOD(mysqlnd_result_buffered_c, fetch_row)(MYSQLND_RES * result, void */ Z_TRY_ADDREF_P(data); if (meta->zend_hash_keys[i].is_numeric == FALSE) { - zend_hash_update(Z_ARRVAL_P(row), meta->fields[i].sname, data); + zend_hash_update_exception(Z_ARRVAL_P(row), meta->fields[i].sname, data); } else { zend_hash_index_update(Z_ARRVAL_P(row), meta->zend_hash_keys[i].key, data); } diff --git a/ext/oci8/oci8_interface.c b/ext/oci8/oci8_interface.c index 727ec3e1c7aef..5cb230cb06be7 100644 --- a/ext/oci8/oci8_interface.c +++ b/ext/oci8/oci8_interface.c @@ -1408,7 +1408,7 @@ PHP_FUNCTION(oci_fetch_all) } else { /* default to ASSOC */ zend_string *zvtmp; zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0); - zend_symtable_update(Z_ARRVAL(row), zvtmp, &element); + zend_symtable_update_exception(Z_ARRVAL(row), zvtmp, &element); zend_string_release(zvtmp); } } @@ -1443,7 +1443,7 @@ PHP_FUNCTION(oci_fetch_all) array_init(&tmp); zvtmp = zend_string_init(columns[ i ]->name, columns[ i ]->name_len, 0); - outarrs[ i ] = zend_symtable_update(Z_ARRVAL_P(array), zvtmp, &tmp); + outarrs[ i ] = zend_symtable_update_exception(Z_ARRVAL_P(array), zvtmp, &tmp); zend_string_release(zvtmp); } } diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index f432dcd5516ed..68b7be217bbca 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -1829,9 +1829,11 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type) zend_hash_index_update(Z_ARRVAL_P(return_value), i, &tmp); } else { if (!*(result->values[i].name) && Z_TYPE(tmp) == IS_STRING) { - zend_hash_update(Z_ARRVAL_P(return_value), Z_STR(tmp), &tmp); + zend_hash_update_exception(Z_ARRVAL_P(return_value), Z_STR(tmp), &tmp); } else { - zend_hash_str_update(Z_ARRVAL_P(return_value), result->values[i].name, strlen(result->values[i].name), &tmp); + zend_string *key = zend_string_init(result->values[i].name, strlen(result->values[i].name), 0); + zend_hash_update_exception(Z_ARRVAL_P(return_value), key, &tmp); + zend_string_release(key); } } } diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 56d1f44293ce0..d3b47a23b56e4 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -621,7 +621,7 @@ static inline void add_offset_pair(zval *result, char *str, int len, int offset, if (name) { Z_ADDREF(match_pair); - zend_hash_str_update(Z_ARRVAL_P(result), name, strlen(name), &match_pair); + zend_hash_str_update_exception(Z_ARRVAL_P(result), name, strlen(name), &match_pair); } zend_hash_next_index_insert(Z_ARRVAL_P(result), &match_pair); } @@ -849,12 +849,15 @@ PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, int subjec } } else { for (i = 0; i < count; i++) { + zval zv; + ZVAL_STRINGL(&zv, (char *) stringlist[i], offsets[(i<<1)+1] - offsets[i<<1]); if (subpat_names[i]) { - add_assoc_stringl(&result_set, subpat_names[i], (char *)stringlist[i], - offsets[(i<<1)+1] - offsets[i<<1]); + zend_string *name = zend_string_init(subpat_names[i], strlen(subpat_names[i]), 0); + Z_ADDREF(zv); + zend_hash_update_exception(Z_ARRVAL(result_set), name, &zv); + zend_string_release(name); } - add_next_index_stringl(&result_set, (char *)stringlist[i], - offsets[(i<<1)+1] - offsets[i<<1]); + zend_hash_next_index_insert(Z_ARRVAL(result_set), &zv); } } } else { @@ -888,12 +891,15 @@ PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, int subjec } } else { for (i = 0; i < count; i++) { + zval zv; + ZVAL_STRINGL(&zv, (char *) stringlist[i], offsets[(i<<1)+1] - offsets[i<<1]); if (subpat_names[i]) { - add_assoc_stringl(subpats, subpat_names[i], (char *)stringlist[i], - offsets[(i<<1)+1] - offsets[i<<1]); + zend_string *name = zend_string_init(subpat_names[i], strlen(subpat_names[i]), 0); + Z_ADDREF(zv); + zend_hash_update_exception(Z_ARRVAL_P(subpats), name, &zv); + zend_string_release(name); } - add_next_index_stringl(subpats, (char *)stringlist[i], - offsets[(i<<1)+1] - offsets[i<<1]); + zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &zv); } } } else { @@ -950,9 +956,10 @@ PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, int subjec if (subpat_names) { for (i = 0; i < num_subpats; i++) { if (subpat_names[i]) { - zend_hash_str_update(Z_ARRVAL_P(subpats), subpat_names[i], - strlen(subpat_names[i]), &match_sets[i]); + zend_string *name = zend_string_init(subpat_names[i], strlen(subpat_names[i]), 0); Z_ADDREF(match_sets[i]); + zend_hash_update_exception(Z_ARRVAL_P(subpats), name, &match_sets[i]); + zend_string_release(name); } zend_hash_next_index_insert(Z_ARRVAL_P(subpats), &match_sets[i]); } @@ -1053,10 +1060,15 @@ static zend_string *preg_do_repl_func(zval *function, char *subject, int *offset array_init_size(&args[0], count + (mark ? 1 : 0)); if (subpat_names) { for (i = 0; i < count; i++) { + zval zv; + ZVAL_STRINGL(&zv, &subject[offsets[i<<1]], offsets[(i<<1)+1] - offsets[i<<1]); if (subpat_names[i]) { - add_assoc_stringl(&args[0], subpat_names[i], &subject[offsets[i<<1]] , offsets[(i<<1)+1] - offsets[i<<1]); + zend_string *name = zend_string_init(subpat_names[i], strlen(subpat_names[i]), 0); + Z_ADDREF(zv); + zend_hash_update_exception(Z_ARRVAL(args[0]), name, &zv); + zend_string_release(name); } - add_next_index_stringl(&args[0], &subject[offsets[i<<1]], offsets[(i<<1)+1] - offsets[i<<1]); + zend_hash_next_index_insert(Z_ARRVAL(args[0]), &zv); } } else { for (i = 0; i < count; i++) { diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 45024c11b7111..2b0c914916b50 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1015,7 +1015,7 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_ switch (how) { case PDO_FETCH_ASSOC: - zend_symtable_update(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val); + zend_symtable_update_exception(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val); break; case PDO_FETCH_KEY_PAIR: @@ -1027,7 +1027,7 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_ zend_hash_index_update((return_all ? Z_ARRVAL_P(return_all) : Z_ARRVAL_P(return_value)), Z_LVAL(val), &tmp); } else { convert_to_string(&val); - zend_symtable_update((return_all ? Z_ARRVAL_P(return_all) : Z_ARRVAL_P(return_value)), Z_STR(val), &tmp); + zend_symtable_update_exception((return_all ? Z_ARRVAL_P(return_all) : Z_ARRVAL_P(return_value)), Z_STR(val), &tmp); } zval_ptr_dtor(&val); return 1; @@ -1036,7 +1036,7 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_ case PDO_FETCH_USE_DEFAULT: case PDO_FETCH_BOTH: - zend_symtable_update(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val); + zend_symtable_update_exception(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val); if (Z_REFCOUNTED(val)) { Z_ADDREF(val); } @@ -1072,7 +1072,7 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_ } zend_hash_next_index_insert_new(Z_ARRVAL(arr), &val); } else { - zend_hash_update(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val); + zend_hash_update_exception(Z_ARRVAL_P(return_value), stmt->columns[i].name, &val); } } break; @@ -1183,12 +1183,12 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, enum pdo_ if (return_all) { if ((flags & PDO_FETCH_UNIQUE) == PDO_FETCH_UNIQUE) { - zend_symtable_update(Z_ARRVAL_P(return_all), Z_STR(grp_val), return_value); + zend_symtable_update_exception(Z_ARRVAL_P(return_all), Z_STR(grp_val), return_value); } else { zval grp; if ((pgrp = zend_symtable_find(Z_ARRVAL_P(return_all), Z_STR(grp_val))) == NULL) { array_init(&grp); - zend_symtable_update(Z_ARRVAL_P(return_all), Z_STR(grp_val), &grp); + zend_symtable_update_exception(Z_ARRVAL_P(return_all), Z_STR(grp_val), &grp); } else { ZVAL_COPY_VALUE(&grp, pgrp); } @@ -2606,7 +2606,7 @@ static HashTable *row_get_properties(zval *object) zval val; fetch_value(stmt, &val, i, NULL); - zend_hash_update(stmt->std.properties, stmt->columns[i].name, &val); + zend_hash_update_exception(stmt->std.properties, stmt->columns[i].name, &val); } return stmt->std.properties; diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 32f583bd766c3..36a5c823daf3f 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -2780,8 +2780,10 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, zend_long result_ add_index_null(return_value, i); } if (result_type & PGSQL_ASSOC) { + zval zv; + ZVAL_NULL(&zv); field_name = PQfname(pgsql_result, i); - add_assoc_null(return_value, field_name); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), field_name, strlen(field_name), &zv); } } else { char *element = PQgetvalue(pgsql_result, pgsql_row, i); @@ -2793,8 +2795,10 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, zend_long result_ } if (result_type & PGSQL_ASSOC) { + zval zv; + ZVAL_STRINGL(&zv, element, element_len); field_name = PQfname(pgsql_result, i); - add_assoc_stringl(return_value, field_name, element, element_len); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), field_name, strlen(field_name), &zv); } } } @@ -5622,7 +5626,7 @@ PHP_PGSQL_API int php_pgsql_meta_data(PGconn *pg_link, const char *table_name, z } /* pg_attribute.attname */ name = PQgetvalue(pg_result,i,0); - add_assoc_zval(meta, name, &elem); + zend_hash_str_update_exception(Z_ARRVAL_P(meta), name, strlen(name), &elem); } PQclear(pg_result); @@ -6458,10 +6462,10 @@ PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, con char *escaped; if (_php_pgsql_detect_identifier_escape(ZSTR_VAL(field), ZSTR_LEN(field)) == SUCCESS) { - zend_hash_update(Z_ARRVAL_P(result), field, &new_val); + zend_hash_update_exception(Z_ARRVAL_P(result), field, &new_val); } else { escaped = PGSQLescapeIdentifier(pg_link, ZSTR_VAL(field), ZSTR_LEN(field)); - add_assoc_zval(result, escaped, &new_val); + zend_hash_str_update_exception(Z_ARRVAL_P(result), escaped, strlen(escaped), &new_val); PGSQLfree(escaped); } } @@ -7058,7 +7062,9 @@ PHP_PGSQL_API int php_pgsql_result2array(PGresult *pg_result, zval *ret_array, l field_name = PQfname(pg_result, i); if (PQgetisnull(pg_result, pg_row, i)) { if (result_type & PGSQL_ASSOC) { - add_assoc_null(&row, field_name); + zval zv; + ZVAL_NULL(&zv); + zend_hash_str_update_exception(Z_ARRVAL(row), field_name, strlen(field_name), &zv); } if (result_type & PGSQL_NUM) { add_next_index_null(&row); @@ -7068,7 +7074,9 @@ PHP_PGSQL_API int php_pgsql_result2array(PGresult *pg_result, zval *ret_array, l if (element) { const size_t element_len = strlen(element); if (result_type & PGSQL_ASSOC) { - add_assoc_stringl(&row, field_name, element, element_len); + zval zv; + ZVAL_STRINGL(&zv, element, element_len); + zend_hash_str_update_exception(Z_ARRVAL(row), field_name, strlen(field_name), &zv); } if (result_type & PGSQL_NUM) { add_next_index_stringl(&row, element, element_len); diff --git a/ext/session/session.c b/ext/session/session.c index 235e36b18378d..cbc0128ad346f 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -186,7 +186,7 @@ PHPAPI void php_add_session_var(zend_string *name) /* {{{ */ PHPAPI zval* php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash) /* {{{ */ { IF_SESSION_VARS() { - return zend_hash_update(Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))), name, state_val); + return zend_hash_update_exception(Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))), name, state_val); } return NULL; } diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index fdd09881eb1ca..494aeb8b4f439 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -1017,7 +1017,7 @@ static void sxe_properties_add(HashTable *rv, char *name, int namelen, zval *val ZVAL_ARR(data_ptr, Z_ARR(newptr)); } } else { - zend_hash_add_new(rv, key, value); + zend_hash_update_exception(rv, key, value); } zend_string_release(key); } @@ -1164,7 +1164,7 @@ static HashTable *sxe_get_prop_hash(zval *object, int is_debug) /* {{{ */ array_init(&zattr); sxe_properties_add(rv, "@attributes", sizeof("@attributes") - 1, &zattr); } - add_assoc_zval_ex(&zattr, (char*)attr->name, namelen, &value); + zend_hash_str_update_exception(Z_ARRVAL(zattr), (char*)attr->name, namelen, &value); } attr = attr->next; } @@ -1497,7 +1497,7 @@ static inline void sxe_add_namespace_name(zval *return_value, xmlNsPtr ns) /* {{ if (!zend_hash_exists(Z_ARRVAL_P(return_value), key)) { ZVAL_STRING(&zv, (char*)ns->href); - zend_hash_add_new(Z_ARRVAL_P(return_value), key, &zv); + zend_hash_update_exception(Z_ARRVAL_P(return_value), key, &zv); } zend_string_release(key); } diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index cabfa9e7df831..2692cd261a9cb 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -841,7 +841,7 @@ static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st, } } if (found) { - add_assoc_zval(return_value, objid_query->vars[count].oid, &snmpval); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), objid_query->vars[count].oid, strlen(objid_query->vars[count].oid), &snmpval); } else { snprint_objid(buf2, sizeof(buf2), vars->name, vars->name_length); php_error_docref(NULL, E_WARNING, "Could not find original OID name for '%s'", buf2); @@ -858,10 +858,10 @@ static void php_snmp_internal(INTERNAL_FUNCTION_PARAMETERS, int st, } buf2[strlen(buf2) - 1] = '\0'; /* remove trailing '.' */ } - add_assoc_zval(return_value, buf2, &snmpval); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), buf2, strlen(buf2), &snmpval); } else { snprint_objid(buf2, sizeof(buf2), vars->name, vars->name_length); - add_assoc_zval(return_value, buf2, &snmpval); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), buf2, strlen(buf2), &snmpval); } } else { ZVAL_COPY_VALUE(return_value, &snmpval); diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index a8f28fbf1eca2..0d90a8e38bfd4 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1239,7 +1239,7 @@ static void model_to_zval_any(zval *ret, xmlNodePtr node) /* Convert into array */ array_init(&arr); if (name) { - add_assoc_zval(&arr, name, any); + zend_hash_str_update_exception(Z_ARRVAL(arr), name, strlen(name), any); } else { add_next_index_zval(&arr, any); } @@ -1268,7 +1268,7 @@ static void model_to_zval_any(zval *ret, xmlNodePtr node) if (name) { /* Convert into array */ array_init(&arr); - add_assoc_zval(&arr, name, &val); + zend_hash_str_update_exception(Z_ARRVAL(arr), name, strlen(name), &val); any = &arr; name = NULL; } else { @@ -1287,7 +1287,7 @@ static void model_to_zval_any(zval *ret, xmlNodePtr node) } add_next_index_zval(el, &val); } else { - add_assoc_zval(any, name, &val); + zend_hash_str_update_exception(Z_ARRVAL_P(any), name, strlen(name), &val); } } else { add_next_index_zval(any, &val); @@ -2743,9 +2743,9 @@ static zval *to_zval_map(zval *ret, encodeTypePtr type, xmlNodePtr data) master_to_zval(&value, NULL, xmlValue); if (Z_TYPE(key) == IS_STRING) { - zend_symtable_update(Z_ARRVAL_P(ret), Z_STR(key), &value); + zend_symtable_update_exception(Z_ARRVAL_P(ret), Z_STR(key), &value); } else if (Z_TYPE(key) == IS_LONG) { - zend_hash_index_update(Z_ARRVAL_P(ret), Z_LVAL(key), &value); + zend_hash_index_update_exception(Z_ARRVAL_P(ret), Z_LVAL(key), &value); } else { soap_error0(E_ERROR, "Encoding: Can't decode apache map, only Strings or Longs are allowd as keys"); } diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c index dd87ec1214dd6..35a9b8e1e66fd 100644 --- a/ext/soap/php_http.c +++ b/ext/soap/php_http.c @@ -1009,7 +1009,7 @@ int make_http_soap_request(zval *this_ptr, add_index_string(&zcookie, 2, phpurl->host); } - zend_symtable_update(Z_ARRVAL_P(cookies), name.s, &zcookie); + zend_symtable_update_exception(Z_ARRVAL_P(cookies), name.s, &zcookie); smart_str_free(&name); } @@ -1155,6 +1155,7 @@ int make_http_soap_request(zval *this_ptr, ZVAL_UNDEF(&digest); s = auth + sizeof("Digest")-1; while (*s != '\0') { + zval zv; char *name, *val; while (*s == ' ') ++s; name = s; @@ -1184,7 +1185,8 @@ int make_http_soap_request(zval *this_ptr, if (Z_TYPE(digest) == IS_UNDEF) { array_init(&digest); } - add_assoc_string(&digest, name, val); + ZVAL_STRING(&zv, val); + zend_hash_str_update_exception(Z_ARRVAL(digest), name, strlen(name), &zv); } } diff --git a/ext/soap/php_packet_soap.c b/ext/soap/php_packet_soap.c index 81a8d18b295d3..b6300bf04ac4d 100644 --- a/ext/soap/php_packet_soap.c +++ b/ext/soap/php_packet_soap.c @@ -329,7 +329,7 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction master_to_zval(&tmp, NULL, val); } } - add_assoc_zval(return_value, param->paramName, &tmp); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), param->paramName, strlen(param->paramName), &tmp); param_count++; } ZEND_HASH_FOREACH_END(); @@ -356,9 +356,9 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction array_init(&arr); add_next_index_zval(&arr, &tmp); - add_assoc_zval(return_value, (char*)val->name, &arr); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), (char *) val->name, strlen((char *) val->name), &arr); } else { - add_assoc_zval(return_value, (char*)val->name, &tmp); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), (char *) val->name, strlen((char *) val->name), &tmp); } } else { add_next_index_zval(return_value, &tmp); @@ -413,7 +413,7 @@ int parse_packet_soap(zval *this_ptr, char *buffer, int buffer_size, sdlFunction smart_str_free(&key); } master_to_zval(&val, enc, trav); - add_assoc_zval(soap_headers, (char*)trav->name, &val); + zend_hash_str_update_exception(Z_ARRVAL_P(soap_headers), (char *) trav->name, strlen((char *) trav->name), &val); } trav = trav->next; } diff --git a/ext/soap/php_schema.c b/ext/soap/php_schema.c index f417a1e0c968f..63b411d790aa8 100644 --- a/ext/soap/php_schema.c +++ b/ext/soap/php_schema.c @@ -80,7 +80,7 @@ static encodePtr create_encoder(sdlPtr sdl, sdlTypePtr cur_type, const xmlChar * enc->to_zval = sdl_guess_convert_zval; if (enc_ptr == NULL) { - zend_hash_update_ptr(sdl->encoders, nscat.s, enc); + zend_hash_update_ptr_exception(sdl->encoders, nscat.s, enc); } smart_str_free(&nscat); return enc; @@ -701,8 +701,10 @@ static int schema_restriction_simpleContent(sdlPtr sdl, xmlAttrPtr tns, xmlNodeP cur_type->restrictions->enumeration = emalloc(sizeof(HashTable)); zend_hash_init(cur_type->restrictions->enumeration, 0, NULL, delete_restriction_var_char, 0); } - if (zend_hash_str_add_ptr(cur_type->restrictions->enumeration, enumval->value, strlen(enumval->value), enumval) == NULL) { + if (zend_hash_str_find(cur_type->restrictions->enumeration, enumval->value, strlen(enumval->value))) { delete_restriction_var_char_int(enumval); + } else { + zend_hash_str_update_ptr_exception(cur_type->restrictions->enumeration, enumval->value, strlen(enumval->value), enumval); } } else { break; @@ -1124,8 +1126,10 @@ static int schema_group(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr groupType, sdlTyp sdl->groups = emalloc(sizeof(HashTable)); zend_hash_init(sdl->groups, 0, NULL, delete_type, 0); } - if (zend_hash_add_ptr(sdl->groups, key.s, newType) == NULL) { + if (zend_hash_find(sdl->groups, key.s)) { soap_error1(E_ERROR, "Parsing Schema: group '%s' already defined", ZSTR_VAL(key.s)); + } else { + zend_hash_update_ptr_exception(sdl->groups, key.s, newType); } cur_type = newType; @@ -1794,8 +1798,10 @@ static int schema_attribute(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrType, sdl addHash = cur_type->attributes; } - if (zend_hash_add_ptr(addHash, key.s, newAttr) == NULL) { + if (zend_hash_find(addHash, key.s)) { soap_error1(E_ERROR, "Parsing Schema: attribute '%s' already defined", ZSTR_VAL(key.s)); + } else { + zend_hash_update_ptr_exception(addHash, key.s, newAttr); } smart_str_free(&key); } else{ @@ -1978,8 +1984,10 @@ static int schema_attributeGroup(sdlPtr sdl, xmlAttrPtr tns, xmlNodePtr attrGrou smart_str_appends(&key, newType->name); smart_str_0(&key); - if (zend_hash_add_ptr(ctx->attributeGroups, key.s, newType) == NULL) { + if (zend_hash_find(ctx->attributeGroups, key.s)) { soap_error1(E_ERROR, "Parsing Schema: attributeGroup '%s' already defined", ZSTR_VAL(key.s)); + } else { + zend_hash_update_ptr_exception(ctx->attributeGroups, key.s, newType); } cur_type = newType; smart_str_free(&key); @@ -2162,7 +2170,7 @@ static void schema_attributegroup_fixup(sdlCtx *ctx, sdlAttributePtr attr, HashT } zend_hash_get_current_key(tmp->attributes, &_key, NULL); - zend_hash_add_ptr(ht, _key, newAttr); + zend_hash_update_ptr_exception(ht, _key, newAttr); zend_hash_move_forward(tmp->attributes); } else { diff --git a/ext/soap/php_sdl.c b/ext/soap/php_sdl.c index f3d3aa88db847..9ae21d05a59c4 100644 --- a/ext/soap/php_sdl.c +++ b/ext/soap/php_sdl.c @@ -157,7 +157,7 @@ encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type) sdl->encoders = pemalloc(sizeof(HashTable), sdl->is_persistent); zend_hash_init(sdl->encoders, 0, NULL, delete_encoder, sdl->is_persistent); } - zend_hash_str_update_ptr(sdl->encoders, nscat, len, new_enc); + zend_hash_str_update_ptr_exception(sdl->encoders, nscat, len, new_enc); enc = new_enc; } } @@ -339,7 +339,7 @@ static void load_wsdl_ex(zval *this_ptr, char *struri, sdlCtx *ctx, int include) } } - zend_hash_str_add_ptr(&ctx->docs, struri, strlen(struri), wsdl); + zend_hash_str_update_ptr_exception(&ctx->docs, struri, strlen(struri), wsdl); root = wsdl->children; definitions = get_node_ex(root, "definitions", WSDL_NAMESPACE); @@ -399,8 +399,10 @@ static void load_wsdl_ex(zval *this_ptr, char *struri, sdlCtx *ctx, int include) } else if (node_is_equal(trav,"message")) { xmlAttrPtr name = get_attribute(trav->properties, "name"); if (name && name->children && name->children->content) { - if (zend_hash_str_add_ptr(&ctx->messages, (char*)name->children->content, xmlStrlen(name->children->content), trav) == NULL) { + if (zend_hash_str_find(&ctx->messages, (char*)name->children->content, xmlStrlen(name->children->content))) { soap_error1(E_ERROR, "Parsing WSDL: '%s' already defined", name->children->content); + } else { + zend_hash_str_update_ptr_exception(&ctx->messages, (char*)name->children->content, xmlStrlen(name->children->content), trav); } } else { soap_error0(E_ERROR, "Parsing WSDL: has no name attribute"); @@ -409,8 +411,10 @@ static void load_wsdl_ex(zval *this_ptr, char *struri, sdlCtx *ctx, int include) } else if (node_is_equal(trav,"portType")) { xmlAttrPtr name = get_attribute(trav->properties, "name"); if (name && name->children && name->children->content) { - if (zend_hash_str_add_ptr(&ctx->portTypes, (char*)name->children->content, xmlStrlen(name->children->content), trav) == NULL) { + if (zend_hash_str_find(&ctx->portTypes, (char*)name->children->content, xmlStrlen(name->children->content))) { soap_error1(E_ERROR, "Parsing WSDL: '%s' already defined", name->children->content); + } else { + zend_hash_str_update_ptr_exception(&ctx->portTypes, (char*)name->children->content, xmlStrlen(name->children->content), trav); } } else { soap_error0(E_ERROR, "Parsing WSDL: has no name attribute"); @@ -419,8 +423,10 @@ static void load_wsdl_ex(zval *this_ptr, char *struri, sdlCtx *ctx, int include) } else if (node_is_equal(trav,"binding")) { xmlAttrPtr name = get_attribute(trav->properties, "name"); if (name && name->children && name->children->content) { - if (zend_hash_str_add_ptr(&ctx->bindings, (char*)name->children->content, xmlStrlen(name->children->content), trav) == NULL) { + if (zend_hash_str_find(&ctx->bindings, (char*)name->children->content, xmlStrlen(name->children->content))) { soap_error1(E_ERROR, "Parsing WSDL: '%s' already defined", name->children->content); + } else { + zend_hash_str_update_ptr_exception(&ctx->bindings, (char*)name->children->content, xmlStrlen(name->children->content), trav); } } else { soap_error0(E_ERROR, "Parsing WSDL: has no name attribute"); @@ -429,8 +435,10 @@ static void load_wsdl_ex(zval *this_ptr, char *struri, sdlCtx *ctx, int include) } else if (node_is_equal(trav,"service")) { xmlAttrPtr name = get_attribute(trav->properties, "name"); if (name && name->children && name->children->content) { - if (zend_hash_str_add_ptr(&ctx->services, (char*)name->children->content, xmlStrlen(name->children->content), trav) == NULL) { + if (zend_hash_str_find(&ctx->services, (char*)name->children->content, xmlStrlen(name->children->content))) { soap_error1(E_ERROR, "Parsing WSDL: '%s' already defined", name->children->content); + } else { + zend_hash_str_update_ptr_exception(&ctx->services, (char*)name->children->content, xmlStrlen(name->children->content), trav); } } else { soap_error0(E_ERROR, "Parsing WSDL: has no name attribute"); @@ -541,8 +549,10 @@ static sdlSoapBindingFunctionHeaderPtr wsdl_soap_binding_header(sdlCtx* ctx, xml } smart_str_appends(&key,hf->name); smart_str_0(&key); - if (zend_hash_add_ptr(h->headerfaults, key.s, hf) == NULL) { + if (zend_hash_find(h->headerfaults, key.s)) { delete_header_int(hf); + } else { + zend_hash_update_ptr_exception(h->headerfaults, key.s, hf); } smart_str_free(&key); } else if (is_wsdl_element(trav) && !node_is_equal(trav,"documentation")) { @@ -1113,8 +1123,10 @@ static sdlPtr load_wsdl(zval *this_ptr, char *struri) function->faults = emalloc(sizeof(HashTable)); zend_hash_init(function->faults, 0, NULL, delete_fault, 0); } - if (zend_hash_str_add_ptr(function->faults, f->name, strlen(f->name), f) == NULL) { + if (zend_hash_str_find(function->faults, f->name, strlen(f->name))) { soap_error2(E_ERROR, "Parsing WSDL: with name '%s' already defined in '%s'", f->name, op_name->children->content); + } else { + zend_hash_str_update_ptr_exception(function->faults, f->name, strlen(f->name), f); } } fault = fault->next; @@ -1126,8 +1138,10 @@ static sdlPtr load_wsdl(zval *this_ptr, char *struri) char *tmp = estrdup(function->functionName); int len = strlen(tmp); - if (zend_hash_str_add_ptr(&ctx.sdl->functions, php_strtolower(tmp, len), len, function) == NULL) { + if (zend_hash_str_find(&ctx.sdl->functions, php_strtolower(tmp, len), len)) { zend_hash_next_index_insert_ptr(&ctx.sdl->functions, function); + } else { + zend_hash_str_update_ptr_exception(&ctx.sdl->functions, php_strtolower(tmp, len), len, function); } efree(tmp); if (function->requestName != NULL && strcmp(function->requestName,function->functionName) != 0) { @@ -1137,7 +1151,7 @@ static sdlPtr load_wsdl(zval *this_ptr, char *struri) } tmp = estrdup(function->requestName); len = strlen(tmp); - zend_hash_str_add_ptr(ctx.sdl->requests, php_strtolower(tmp, len), len, function); + zend_hash_str_update_ptr_exception(ctx.sdl->requests, php_strtolower(tmp, len), len, function); efree(tmp); } } @@ -1149,10 +1163,12 @@ static sdlPtr load_wsdl(zval *this_ptr, char *struri) zend_hash_init(ctx.sdl->bindings, 0, NULL, delete_binding, 0); } - if (!zend_hash_str_add_ptr(ctx.sdl->bindings, tmpbinding->name, strlen(tmpbinding->name), tmpbinding)) { + if (zend_hash_str_find(ctx.sdl->bindings, tmpbinding->name, strlen(tmpbinding->name))) { zend_hash_next_index_insert_ptr(ctx.sdl->bindings, tmpbinding); + } else { + zend_hash_str_update_ptr_exception(ctx.sdl->bindings, tmpbinding->name, strlen(tmpbinding->name), tmpbinding); } - trav= trav->next; + trav = trav->next; } zend_hash_move_forward(&ctx.services); @@ -1213,7 +1229,7 @@ static void sdl_deserialize_key(HashTable* ht, void* data, char **in) if (len == 0) { zend_hash_next_index_insert_ptr(ht, data); } else { - zend_hash_str_add_ptr(ht, *in, len, data); + zend_hash_str_update_ptr_exception(ht, *in, len, data); WSDL_CACHE_SKIP(len, in); } } @@ -2784,7 +2800,7 @@ static sdlTypePtr make_persistent_sdl_type(sdlTypePtr type, HashTable *ptr_map, } else { zend_hash_next_index_insert_ptr(ptype->elements, pelem); } - zend_hash_str_add_ptr(ptr_map, (char*)&tmp, sizeof(tmp), pelem); + zend_hash_str_update_ptr_exception(ptr_map, (char*)&tmp, sizeof(tmp), pelem); } ZEND_HASH_FOREACH_END(); } @@ -2954,7 +2970,7 @@ static sdlPtr make_persistent_sdl(sdlPtr sdl) } else { zend_hash_next_index_insert_ptr(psdl->groups, ptype); } - zend_hash_str_add_ptr(&ptr_map, (char*)&tmp, sizeof(tmp), ptype); + zend_hash_str_update_ptr_exception(&ptr_map, (char*)&tmp, sizeof(tmp), ptype); } ZEND_HASH_FOREACH_END(); } @@ -2973,7 +2989,7 @@ static sdlPtr make_persistent_sdl(sdlPtr sdl) } else { zend_hash_next_index_insert_ptr(psdl->types, ptype); } - zend_hash_str_add_ptr(&ptr_map, (char*)&tmp, sizeof(tmp), ptype); + zend_hash_str_update_ptr_exception(&ptr_map, (char*)&tmp, sizeof(tmp), ptype); } ZEND_HASH_FOREACH_END(); } @@ -2992,7 +3008,7 @@ static sdlPtr make_persistent_sdl(sdlPtr sdl) } else { zend_hash_next_index_insert_ptr(psdl->elements, ptype); } - zend_hash_str_add_ptr(&ptr_map, (char*)&tmp, sizeof(tmp), ptype); + zend_hash_str_update_ptr_exception(&ptr_map, (char*)&tmp, sizeof(tmp), ptype); } ZEND_HASH_FOREACH_END(); } @@ -3011,7 +3027,7 @@ static sdlPtr make_persistent_sdl(sdlPtr sdl) } else { zend_hash_next_index_insert_ptr(psdl->encoders, penc); } - zend_hash_str_add_ptr(&ptr_map, (char*)&tmp, sizeof(tmp), penc); + zend_hash_str_update_ptr_exception(&ptr_map, (char*)&tmp, sizeof(tmp), penc); } ZEND_HASH_FOREACH_END(); } @@ -3053,7 +3069,7 @@ static sdlPtr make_persistent_sdl(sdlPtr sdl) } else { zend_hash_next_index_insert_ptr(psdl->bindings, pbind); } - zend_hash_str_add_ptr(&ptr_map, (char*)&tmp, sizeof(tmp), pbind); + zend_hash_str_update_ptr_exception(&ptr_map, (char*)&tmp, sizeof(tmp), pbind); } ZEND_HASH_FOREACH_END(); } @@ -3070,7 +3086,7 @@ static sdlPtr make_persistent_sdl(sdlPtr sdl) } else { zend_hash_next_index_insert_ptr(&psdl->functions, pfunc); } - zend_hash_str_add_ptr(&ptr_map, (char*)&tmp, sizeof(tmp), pfunc); + zend_hash_str_update_ptr_exception(&ptr_map, (char*)&tmp, sizeof(tmp), pfunc); } ZEND_HASH_FOREACH_END(); } diff --git a/ext/soap/soap.c b/ext/soap/soap.c index 23bbfb6e84c56..af2e8a6464029 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -1119,7 +1119,7 @@ static HashTable* soap_create_typemap(sdlPtr sdl, HashTable *ht) } smart_str_appends(&nscat, type_name); smart_str_0(&nscat); - zend_hash_update_ptr(typemap, nscat.s, new_enc); + zend_hash_update_ptr_exception(typemap, nscat.s, new_enc); smart_str_free(&nscat); } } ZEND_HASH_FOREACH_END(); @@ -3159,7 +3159,7 @@ PHP_METHOD(SoapClient, __setCookie) array_init(&zcookie); add_index_stringl(&zcookie, 0, val, val_len); - add_assoc_zval_ex(cookies, name, name_len, &zcookie); + zend_hash_str_update_exception(Z_ARRVAL_P(cookies), name, name_len, &zcookie); } } /* }}} */ diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index bddf64ee57e59..ca15f1cdf2bef 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -343,9 +343,9 @@ static zval *spl_array_get_dimension_ptr(int check_inherited, spl_array_object * case BP_VAR_RW: zend_error(E_NOTICE,"Undefined index: %s", ZSTR_VAL(offset_key)); case BP_VAR_W: { - zval value; + zval value; ZVAL_NULL(&value); - retval = zend_symtable_update(ht, offset_key, &value); + retval = zend_symtable_update_exception(ht, offset_key, &value); } } } @@ -377,10 +377,10 @@ static zval *spl_array_get_dimension_ptr(int check_inherited, spl_array_object * case BP_VAR_RW: zend_error(E_NOTICE, "Undefined offset: " ZEND_LONG_FMT, index); case BP_VAR_W: { - zval value; + zval value; ZVAL_UNDEF(&value); - retval = zend_hash_index_update(ht, index, &value); - } + retval = zend_hash_index_update_exception(ht, index, &value); + } } } return retval; @@ -487,7 +487,7 @@ static void spl_array_write_dimension_ex(int check_inherited, zval *object, zval switch (Z_TYPE_P(offset)) { case IS_STRING: ht = spl_array_get_hash_table(intern); - zend_symtable_update_ind(ht, Z_STR_P(offset), value); + zend_symtable_update_ind_exception(ht, Z_STR_P(offset), value); return; case IS_DOUBLE: index = (zend_long)Z_DVAL_P(offset); @@ -505,7 +505,7 @@ static void spl_array_write_dimension_ex(int check_inherited, zval *object, zval index = Z_LVAL_P(offset); num_index: ht = spl_array_get_hash_table(intern); - zend_hash_index_update(ht, index, value); + zend_hash_index_update_exception(ht, index, value); return; case IS_NULL: ht = spl_array_get_hash_table(intern); diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c index 4ad0c6d15e668..a3f5e4981622f 100644 --- a/ext/spl/spl_observer.c +++ b/ext/spl/spl_observer.c @@ -192,9 +192,9 @@ spl_SplObjectStorageElement *spl_object_storage_attach(spl_SplObjectStorage *int ZVAL_NULL(&element.inf); } if (key.key) { - pelement = zend_hash_update_mem(&intern->storage, key.key, &element, sizeof(spl_SplObjectStorageElement)); + pelement = zend_hash_update_mem_exception(&intern->storage, key.key, &element, sizeof(spl_SplObjectStorageElement)); } else { - pelement = zend_hash_index_update_mem(&intern->storage, key.h, &element, sizeof(spl_SplObjectStorageElement)); + pelement = zend_hash_index_update_mem_exception(&intern->storage, key.h, &element, sizeof(spl_SplObjectStorageElement)); } spl_object_storage_free_hash(intern, &key); return pelement; @@ -309,7 +309,7 @@ static HashTable* spl_object_storage_debug_info(zval *obj, int *is_temp) /* {{{ Z_ARRVAL_P(&tmp)->pDestructor = NULL; add_assoc_zval_ex(&tmp, "obj", sizeof("obj") - 1, &element->obj); add_assoc_zval_ex(&tmp, "inf", sizeof("inf") - 1, &element->inf); - zend_hash_update(Z_ARRVAL(storage), md5str, &tmp); + zend_hash_update_exception(Z_ARRVAL(storage), md5str, &tmp); zend_string_release(md5str); } ZEND_HASH_FOREACH_END(); @@ -833,11 +833,13 @@ SPL_METHOD(SplObjectStorage, unserialize) } } element = spl_object_storage_attach(intern, getThis(), &entry, Z_ISUNDEF(inf)?NULL:&inf); - var_replace(&var_hash, &entry, &element->obj); - var_replace(&var_hash, &inf, &element->inf); + if (element) { + var_replace(&var_hash, &entry, &element->obj); + var_replace(&var_hash, &inf, &element->inf); + } zval_ptr_dtor(&entry); - ZVAL_UNDEF(&entry); zval_ptr_dtor(&inf); + ZVAL_UNDEF(&entry); ZVAL_UNDEF(&inf); } @@ -1153,10 +1155,10 @@ static void spl_multiple_iterator_get_all(spl_SplObjectStorage *intern, int get_ if (intern->flags & MIT_KEYS_ASSOC) { switch (Z_TYPE(element->inf)) { case IS_LONG: - add_index_zval(return_value, Z_LVAL(element->inf), &retval); + zend_hash_index_update_exception(Z_ARRVAL_P(return_value), Z_LVAL(element->inf), &retval); break; case IS_STRING: - zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR(element->inf), &retval); + zend_symtable_update_exception(Z_ARRVAL_P(return_value), Z_STR(element->inf), &retval); break; default: zval_ptr_dtor(&retval); diff --git a/ext/spl/tests/bug70644.phpt b/ext/spl/tests/bug70644.phpt new file mode 100644 index 0000000000000..23b32610ddec5 --- /dev/null +++ b/ext/spl/tests/bug70644.phpt @@ -0,0 +1,43 @@ +--TEST-- +Bug #70644: hash key complexity DoS on SplObjectStorage +--FILE-- +> (3 * $k)) % 8]; + } + yield $key; + } + })(); + } else { + $g->next(); + } + return $g->current(); + } +} + +$o = new SplObjectStorage; +for ($i = 0; $i < 100000; $i++) $o[new StdClass] = $i; + +try { + $n = unserialize(str_replace("SplObjectStorage", "NewObjectStorage", serialize($o))); + + var_dump($n->count()); +} catch (Throwable $e) { + print $e->getMessage(); +} + +?> +--EXPECT-- +Error at offset 26957 of 2888909 bytes diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index 0a9d0c8b5e531..4745f21f02c08 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -645,8 +645,9 @@ PHP_METHOD(sqlite3, querySingle) array_init(return_value); for (i = 0; i < sqlite3_data_count(stmt); i++) { zval data; + char *column_name = (char *) sqlite3_column_name(stmt, i); sqlite_value_to_zval(stmt, i, &data); - add_assoc_zval(return_value, (char*)sqlite3_column_name(stmt, i), &data); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), column_name, strlen(column_name), &data); } } break; @@ -1393,9 +1394,9 @@ static int register_bound_parameter_to_sqlite(struct php_sqlite3_bound_param *pa } if (param->name) { - zend_hash_update_mem(hash, param->name, param, sizeof(struct php_sqlite3_bound_param)); + zend_hash_update_mem_exception(hash, param->name, param, sizeof(struct php_sqlite3_bound_param)); } else { - zend_hash_index_update_mem(hash, param->param_number, param, sizeof(struct php_sqlite3_bound_param)); + zend_hash_index_update_mem_exception(hash, param->param_number, param, sizeof(struct php_sqlite3_bound_param)); } return 1; @@ -1774,12 +1775,13 @@ PHP_METHOD(sqlite3result, fetchArray) } if (mode & PHP_SQLITE3_ASSOC) { + char *column_name = (char *) sqlite3_column_name(result_obj->stmt_obj->stmt, i); if (mode & PHP_SQLITE3_NUM) { if (Z_REFCOUNTED(data)) { Z_ADDREF(data); } } - add_assoc_zval(return_value, (char*)sqlite3_column_name(result_obj->stmt_obj->stmt, i), &data); + zend_hash_str_update_exception(Z_ARRVAL_P(return_value), column_name, strlen(column_name), &data); } } break; diff --git a/ext/standard/array.c b/ext/standard/array.c index ccfb3dc7688c3..37a0267c99153 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2048,10 +2048,10 @@ PHP_FUNCTION(array_fill_keys) ZVAL_DEREF(entry); Z_TRY_ADDREF_P(val); if (Z_TYPE_P(entry) == IS_LONG) { - zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(entry), val); + zend_hash_index_update_exception(Z_ARRVAL_P(return_value), Z_LVAL_P(entry), val); } else { zend_string *key = zval_get_string(entry); - zend_symtable_update(Z_ARRVAL_P(return_value), key, val); + zend_symtable_update_exception(Z_ARRVAL_P(return_value), key, val); zend_string_release(key); } } ZEND_HASH_FOREACH_END(); @@ -3015,8 +3015,10 @@ PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src) /* {{{ */ } zval_ptr_dtor(&tmp); } else { - zval *zv = zend_hash_add_new(dest, string_key, src_entry); - zval_add_ref(zv); + zval zv; + ZVAL_COPY_VALUE(&zv, src_entry); + zval_add_ref(&zv); + zend_hash_update_exception(dest, string_key, &zv); } } else { zval *zv = zend_hash_next_index_insert_new(dest, src_entry); @@ -3052,7 +3054,7 @@ PHPAPI int php_array_merge(HashTable *dest, HashTable *src) /* {{{ */ } Z_TRY_ADDREF_P(src_entry); if (string_key) { - zend_hash_update(dest, string_key, src_entry); + zend_hash_update_exception(dest, string_key, src_entry); } else { zend_hash_next_index_insert_new(dest, src_entry); } @@ -3515,12 +3517,12 @@ PHP_FUNCTION(array_column) } if (zkeyval) { if (Z_TYPE_P(zkeyval) == IS_STRING) { - zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(zkeyval), zcolval); + zend_symtable_update_exception(Z_ARRVAL_P(return_value), Z_STR_P(zkeyval), zcolval); } else if (Z_TYPE_P(zkeyval) == IS_LONG) { - add_index_zval(return_value, Z_LVAL_P(zkeyval), zcolval); + zend_hash_index_update_exception(Z_ARRVAL_P(return_value), Z_LVAL_P(zkeyval), zcolval); } else if (Z_TYPE_P(zkeyval) == IS_OBJECT) { zend_string *key = zval_get_string(zkeyval); - zend_symtable_update(Z_ARRVAL_P(return_value), key, zcolval); + zend_symtable_update_exception(Z_ARRVAL_P(return_value), key, zcolval); zend_string_release(key); } else { add_next_index_zval(return_value, zcolval); @@ -3691,14 +3693,14 @@ PHP_FUNCTION(array_flip) } else { ZVAL_LONG(&data, num_idx); } - zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(entry), &data); + zend_hash_index_update_exception(Z_ARRVAL_P(return_value), Z_LVAL_P(entry), &data); } else if (Z_TYPE_P(entry) == IS_STRING) { if (str_idx) { ZVAL_STR_COPY(&data, str_idx); } else { ZVAL_LONG(&data, num_idx); } - zend_symtable_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data); + zend_symtable_update_exception(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data); } else { php_error_docref(NULL, E_WARNING, "Can only flip STRING and INTEGER values!"); } @@ -5591,14 +5593,17 @@ PHP_FUNCTION(array_combine) } else if (Z_TYPE(values->arData[pos_values].val) != IS_UNDEF) { entry_values = &values->arData[pos_values].val; if (Z_TYPE_P(entry_keys) == IS_LONG) { - entry_values = zend_hash_index_update(Z_ARRVAL_P(return_value), + entry_values = zend_hash_index_update_exception(Z_ARRVAL_P(return_value), Z_LVAL_P(entry_keys), entry_values); } else { zend_string *key = zval_get_string(entry_keys); - entry_values = zend_symtable_update(Z_ARRVAL_P(return_value), + entry_values = zend_symtable_update_exception(Z_ARRVAL_P(return_value), key, entry_values); zend_string_release(key); } + if (UNEXPECTED(entry_values == &EG(error_zval))) { + return; + } zval_add_ref(entry_values); pos_values++; break; diff --git a/ext/standard/iptc.c b/ext/standard/iptc.c index 04e51b00c1912..400db788a823c 100644 --- a/ext/standard/iptc.c +++ b/ext/standard/iptc.c @@ -368,14 +368,19 @@ PHP_FUNCTION(iptcparse) array_init(return_value); } + inx += len; + if ((element = zend_hash_str_find(Z_ARRVAL_P(return_value), key, strlen(key))) == NULL) { array_init(&values); - element = zend_hash_str_update(Z_ARRVAL_P(return_value), key, strlen(key), &values); + element = zend_hash_str_update_exception(Z_ARRVAL_P(return_value), key, strlen(key), &values); + + if (element == &EG(error_zval)) { + continue; + } } add_next_index_stringl(element, (char *) buffer+inx, len); - inx += len; tagsfound++; } diff --git a/ext/standard/string.c b/ext/standard/string.c index c41d48ef17ff4..4c9af3668a5a1 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -4520,6 +4520,7 @@ PHP_FUNCTION(parse_str) sapi_module.treat_data(PARSE_STRING, res, &tmp); if (UNEXPECTED(zend_hash_del(symbol_table, CG(known_strings)[ZEND_STR_THIS]) == SUCCESS)) { zend_throw_error(NULL, "Cannot re-assign $this"); + return; } } else { zval ret; @@ -4530,6 +4531,11 @@ PHP_FUNCTION(parse_str) sapi_module.treat_data(PARSE_STRING, res, &ret); ZVAL_COPY_VALUE(arrayArg, &ret); } + + /* parse_str() tries to parse as much as possible (per treat_data behavior), hence we just ignore possible HashCollisionErrors */ + if (EG(exception) && EG(exception)->ce == zend_ce_hash_collision_error) { + zend_clear_exception(); + } } /* }}} */ diff --git a/ext/standard/tests/array/bug70644.phpt b/ext/standard/tests/array/bug70644.phpt new file mode 100644 index 0000000000000..023f98b47c225 --- /dev/null +++ b/ext/standard/tests/array/bug70644.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #70644: trivial hash complexity DoS attack (array_flip) +--FILE-- + +--EXPECTF-- + +Fatal error: Uncaught HashCollisionError: Too many collisions in array in %s:%d +Stack trace: +#0 %s(%d): array_flip(Array) +#1 {main} + thrown in %s on line %d diff --git a/ext/standard/tests/array/bug70644_2.phpt b/ext/standard/tests/array/bug70644_2.phpt new file mode 100644 index 0000000000000..935f386dac160 --- /dev/null +++ b/ext/standard/tests/array/bug70644_2.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #70644: trivial hash complexity DoS attack (array_fill_keys) +--FILE-- + +--EXPECTF-- + +Fatal error: Uncaught HashCollisionError: Too many collisions in array in %s:%d +Stack trace: +#0 %s(%d): array_fill_keys(Array, 0) +#1 {main} + thrown in %s on line %d diff --git a/ext/standard/tests/array/bug70644_3.phpt b/ext/standard/tests/array/bug70644_3.phpt new file mode 100644 index 0000000000000..0f98fc9eb1954 --- /dev/null +++ b/ext/standard/tests/array/bug70644_3.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #70644: trivial hash complexity DoS attack (parse_str) +--INI-- +max_input_vars=10000000 +--FILE-- + +--EXPECT-- +bool(true) diff --git a/ext/standard/tests/array/bug70644_4.phpt b/ext/standard/tests/array/bug70644_4.phpt new file mode 100644 index 0000000000000..ddb2e0c966d4c --- /dev/null +++ b/ext/standard/tests/array/bug70644_4.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #70644: trivial hash complexity DoS attack (array_merge) +--FILE-- +> (3 * $k)) % 8]; + } + $$var[$key] = "1"; + } +} +var_dump(array_merge($a, $b)); + +?> +--EXPECTF-- +Fatal error: Uncaught HashCollisionError: Too many collisions in array in %s:%d +Stack trace: +#0 %s(%d): array_merge(Array, Array) +#1 {main} + thrown in %s on line %d diff --git a/ext/standard/tests/array/bug70644_5.phpt b/ext/standard/tests/array/bug70644_5.phpt new file mode 100644 index 0000000000000..a48ecc4f69260 --- /dev/null +++ b/ext/standard/tests/array/bug70644_5.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #70644: trivial hash complexity DoS attack (array_combine) +--FILE-- + +--EXPECTF-- + +Fatal error: Uncaught HashCollisionError: Too many collisions in array in %s:%d +Stack trace: +#0 %s(%d): array_combine(Array, Array) +#1 {main} + thrown in %s on line %d diff --git a/ext/standard/tests/array/bug70644_6.phpt b/ext/standard/tests/array/bug70644_6.phpt new file mode 100644 index 0000000000000..6c2b9e4126491 --- /dev/null +++ b/ext/standard/tests/array/bug70644_6.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #70644: trivial hash complexity DoS attack (array_column) +--FILE-- + $i, "v" => 1]; +} + +var_dump(array_column($a, "v", "k")); + +?> +--EXPECTF-- + +Fatal error: Uncaught HashCollisionError: Too many collisions in array in %s:%d +Stack trace: +#0 %s(%d): array_column(Array, 'v', 'k') +#1 {main} + thrown in %s on line %d diff --git a/ext/wddx/wddx.c b/ext/wddx/wddx.c index 4818de019dda4..97a1a5a23269f 100644 --- a/ext/wddx/wddx.c +++ b/ext/wddx/wddx.c @@ -311,8 +311,9 @@ PS_SERIALIZER_DECODE_FUNC(wddx) } else { zend_string_addref(key); } - if (php_set_session_var(key, ent, NULL)) { - if (Z_REFCOUNTED_P(ent)) Z_ADDREF_P(ent); + Z_TRY_ADDREF_P(ent); + if (!php_set_session_var(key, ent, NULL)) { + zval_ptr_dtor(ent); } PS_ADD_VAR(key); zend_string_release(key); @@ -816,14 +817,14 @@ static void php_wddx_push_element(void *user_data, const XML_Char *name, const X while ((p2 = php_memnstr(p1, ",", sizeof(",")-1, endp)) != NULL) { key = estrndup(p1, p2 - p1); array_init(&tmp); - add_assoc_zval_ex(&ent.data, key, p2 - p1, &tmp); + zend_hash_str_update_exception(Z_ARRVAL(ent.data), key, p2 - p1, &tmp); p1 = p2 + sizeof(",")-1; efree(key); } if (p1 <= endp) { array_init(&tmp); - add_assoc_zval_ex(&ent.data, p1, endp - p1, &tmp); + zend_hash_str_update_exception(Z_ARRVAL(ent.data), p1, endp - p1, &tmp); } break; @@ -971,7 +972,7 @@ static void php_wddx_pop_element(void *user_data, const XML_Char *name) zend_update_property(Z_OBJCE(ent2->data), &ent2->data, ent1->varname, strlen(ent1->varname), &ent1->data); if Z_REFCOUNTED(ent1->data) Z_DELREF(ent1->data); } else { - zend_symtable_str_update(target_hash, ent1->varname, strlen(ent1->varname), &ent1->data); + zend_symtable_str_update_exception(target_hash, ent1->varname, strlen(ent1->varname), &ent1->data); } efree(ent1->varname); } else { diff --git a/ext/xml/xml.c b/ext/xml/xml.c index f0da47dc5b430..256cbfc5c128f 100644 --- a/ext/xml/xml.c +++ b/ext/xml/xml.c @@ -692,7 +692,10 @@ static void _xml_add_to_info(xml_parser *parser,char *name) if ((element = zend_hash_str_find(Z_ARRVAL(parser->info), name, strlen(name))) == NULL) { zval values; array_init(&values); - element = zend_hash_str_update(Z_ARRVAL(parser->info), name, strlen(name), &values); + element = zend_hash_str_update_exception(Z_ARRVAL(parser->info), name, strlen(name), &values); + if (element == &EG(error_zval)) { + return; + } } add_next_index_long(element, parser->curtag); @@ -741,7 +744,7 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch val = xml_utf8_decode(attributes[1], strlen((char *)attributes[1]), parser->target_encoding); ZVAL_STR(&tmp, val); - zend_symtable_update(Z_ARRVAL(args[2]), att, &tmp); + zend_symtable_update_exception(Z_ARRVAL(args[2]), att, &tmp); attributes += 2; @@ -778,7 +781,7 @@ void _xml_startElementHandler(void *userData, const XML_Char *name, const XML_Ch val = xml_utf8_decode(attributes[1], strlen((char *)attributes[1]), parser->target_encoding); ZVAL_STR(&tmp, val); - zend_symtable_update(Z_ARRVAL(atr), att, &tmp); + zend_symtable_update_exception(Z_ARRVAL(atr), att, &tmp); atcnt++; attributes += 2; diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c index 368f8954eaebf..ddb03c4ac45e0 100644 --- a/ext/xmlrpc/xmlrpc-epi-php.c +++ b/ext/xmlrpc/xmlrpc-epi-php.c @@ -342,9 +342,9 @@ static void add_zval(zval* list, const char* id, zval* val) int id_len = strlen(id); if (!(id_len > 1 && id[0] == '0') && is_numeric_string((char *)id, id_len, NULL, NULL, 0) == IS_LONG) { long index = strtol(id, NULL, 0); - zend_hash_index_update(Z_ARRVAL_P(list), index, val); + zend_hash_index_update_exception(Z_ARRVAL_P(list), index, val); } else { - zend_hash_str_update(Z_ARRVAL_P(list), (char*)id, strlen(id), val); + zend_hash_str_update_exception(Z_ARRVAL_P(list), (char*)id, strlen(id), val); } } else { zend_hash_next_index_insert(Z_ARRVAL_P(list), val); @@ -1278,7 +1278,7 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype) /* {{{ */ if (Z_TYPE_P(value) == IS_STRING) { if (newtype == xmlrpc_base64 || newtype == xmlrpc_datetime) { const char* typestr = xmlrpc_type_as_str(newtype, xmlrpc_vector_none); - zval type; + zval type, *result; ZVAL_STRING(&type, typestr); @@ -1292,7 +1292,7 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype) /* {{{ */ ZVAL_LONG(&ztimestamp, timestamp); convert_to_object(value); - if (zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type)) { + if ((result = zend_hash_str_update_exception(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type)) && result != &EG(error_zval)) { bSuccess = (zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_VALUE_TS_ATTR, sizeof(OBJECT_VALUE_TS_ATTR) - 1, &ztimestamp) != NULL)? SUCCESS : FAILURE; } } else { @@ -1304,7 +1304,7 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype) /* {{{ */ } } else { convert_to_object(value); - bSuccess = (zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type) != NULL)? SUCCESS : FAILURE; + bSuccess = ((result = zend_hash_str_update_exception(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type)) && result != &EG(error_zval)) ? SUCCESS : FAILURE; } } } diff --git a/main/php_variables.c b/main/php_variables.c index a5256e7322e64..1ee42ef1e70df 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -193,18 +193,24 @@ PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars if (!index) { array_init(&gpc_element); - if ((gpc_element_p = zend_hash_next_index_insert(symtable1, &gpc_element)) == NULL) { + if (zend_hash_next_index_insert(symtable1, &gpc_element) == NULL) { zval_ptr_dtor(&gpc_element); zval_dtor(val); free_alloca(var_orig, use_heap); return; } + symtable1 = Z_ARRVAL(gpc_element); } else { gpc_element_p = zend_symtable_str_find(symtable1, index, index_len); if (!gpc_element_p) { zval tmp; array_init(&tmp); - gpc_element_p = zend_symtable_str_update_ind(symtable1, index, index_len, &tmp); + if (zend_symtable_str_update_ind_exception(symtable1, index, index_len, &tmp) == &EG(error_zval)) { + zval_dtor(val); + free_alloca(var_orig, use_heap); + return; + } + symtable1 = Z_ARRVAL(tmp); } else { if (Z_TYPE_P(gpc_element_p) == IS_INDIRECT) { gpc_element_p = Z_INDIRECT_P(gpc_element_p); @@ -213,9 +219,9 @@ PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars zval_ptr_dtor(gpc_element_p); array_init(gpc_element_p); } + symtable1 = Z_ARRVAL_P(gpc_element_p); } } - symtable1 = Z_ARRVAL_P(gpc_element_p); /* ip pointed to the '[' character, now obtain the key */ index = index_s; index_len = new_idx_len; @@ -232,7 +238,7 @@ PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars plain_var: ZVAL_COPY_VALUE(&gpc_element, val); if (!index) { - if ((gpc_element_p = zend_hash_next_index_insert(symtable1, &gpc_element)) == NULL) { + if (zend_hash_next_index_insert(symtable1, &gpc_element) == NULL) { zval_ptr_dtor(&gpc_element); } } else { @@ -247,7 +253,7 @@ PHPAPI void php_register_variable_ex(char *var_name, zval *val, zval *track_vars zend_symtable_str_exists(symtable1, index, index_len)) { zval_ptr_dtor(&gpc_element); } else { - gpc_element_p = zend_symtable_str_update_ind(symtable1, index, index_len, &gpc_element); + zend_symtable_str_update_ind_exception(symtable1, index, index_len, &gpc_element); } } } diff --git a/tests/basic/bug70644.phpt b/tests/basic/bug70644.phpt new file mode 100644 index 0000000000000..2c1e2f871a00e --- /dev/null +++ b/tests/basic/bug70644.phpt @@ -0,0 +1,17 @@ +--TEST-- +Bug #70644: Handling of collisions without max_input_vars +--INI-- +always_populate_raw_post_data=0 +display_errors=1 +max_input_vars=10000 +track_errors=1 +log_errors=0 +--POST-- +0=1&16384=1&32768=1&49152=1&65536=1&81920=1&98304=1&114688=1&131072=1&147456=1&163840=1&180224=1&196608=1&212992=1&229376=1&245760=1&262144=1&278528=1&294912=1&311296=1&327680=1&344064=1&360448=1&376832=1&393216=1&409600=1&425984=1&442368=1&458752=1&475136=1&491520=1&507904=1&524288=1&540672=1&557056=1&573440=1&589824=1&606208=1&622592=1&638976=1&655360=1&671744=1&688128=1&704512=1&720896=1&737280=1&753664=1&770048=1&786432=1&802816=1&819200=1&835584=1&851968=1&868352=1&884736=1&901120=1&917504=1&933888=1&950272=1&966656=1&983040=1&999424=1&1015808=1&1032192=1&1048576=1&1064960=1&1081344=1&1097728=1&1114112=1&1130496=1&1146880=1&1163264=1&1179648=1&1196032=1&1212416=1&1228800=1&1245184=1&1261568=1&1277952=1&1294336=1&1310720=1&1327104=1&1343488=1&1359872=1&1376256=1&1392640=1&1409024=1&1425408=1&1441792=1&1458176=1&1474560=1&1490944=1&1507328=1&1523712=1&1540096=1&1556480=1&1572864=1&1589248=1&1605632=1&1622016=1&1638400=1&1654784=1&1671168=1&1687552=1&1703936=1&1720320=1&1736704=1&1753088=1&1769472=1&1785856=1&1802240=1&1818624=1&1835008=1&1851392=1&1867776=1&1884160=1&1900544=1&1916928=1&1933312=1&1949696=1&1966080=1&1982464=1&1998848=1&2015232=1&2031616=1&2048000=1&2064384=1&2080768=1&2097152=1&2113536=1&2129920=1&2146304=1&2162688=1&2179072=1&2195456=1&2211840=1&2228224=1&2244608=1&2260992=1&2277376=1&2293760=1&2310144=1&2326528=1&2342912=1&2359296=1&2375680=1&2392064=1&2408448=1&2424832=1&2441216=1&2457600=1&2473984=1&2490368=1&2506752=1&2523136=1&2539520=1&2555904=1&2572288=1&2588672=1&2605056=1&2621440=1&2637824=1&2654208=1&2670592=1&2686976=1&2703360=1&2719744=1&2736128=1&2752512=1&2768896=1&2785280=1&2801664=1&2818048=1&2834432=1&2850816=1&2867200=1&2883584=1&2899968=1&2916352=1&2932736=1&2949120=1&2965504=1&2981888=1&2998272=1&3014656=1&3031040=1&3047424=1&3063808=1&3080192=1&3096576=1&3112960=1&3129344=1&3145728=1&3162112=1&3178496=1&3194880=1&3211264=1&3227648=1&3244032=1&3260416=1&3276800=1&3293184=1&3309568=1&3325952=1&3342336=1&3358720=1&3375104=1&3391488=1&3407872=1&3424256=1&3440640=1&3457024=1&3473408=1&3489792=1&3506176=1&3522560=1&3538944=1&3555328=1&3571712=1&3588096=1&3604480=1&3620864=1&3637248=1&3653632=1&3670016=1&3686400=1&3702784=1&3719168=1&3735552=1&3751936=1&3768320=1&3784704=1&3801088=1&3817472=1&3833856=1&3850240=1&3866624=1&3883008=1&3899392=1&3915776=1&3932160=1&3948544=1&3964928=1&3981312=1&3997696=1&4014080=1&4030464=1&4046848=1&4063232=1&4079616=1&4096000=1&4112384=1&4128768=1&4145152=1&4161536=1&4177920=1&4194304=1&4210688=1&4227072=1&4243456=1&4259840=1&4276224=1&4292608=1&4308992=1&4325376=1&4341760=1&4358144=1&4374528=1&4390912=1&4407296=1&4423680=1&4440064=1&4456448=1&4472832=1&4489216=1&4505600=1&4521984=1&4538368=1&4554752=1&4571136=1&4587520=1&4603904=1&4620288=1&4636672=1&4653056=1&4669440=1&4685824=1&4702208=1&4718592=1&4734976=1&4751360=1&4767744=1&4784128=1&4800512=1&4816896=1&4833280=1&4849664=1&4866048=1&4882432=1&4898816=1&4915200=1&4931584=1&4947968=1&4964352=1&4980736=1&4997120=1&5013504=1&5029888=1&5046272=1&5062656=1&5079040=1&5095424=1&5111808=1&5128192=1&5144576=1&5160960=1&5177344=1&5193728=1&5210112=1&5226496=1&5242880=1&5259264=1&5275648=1&5292032=1&5308416=1&5324800=1&5341184=1&5357568=1&5373952=1&5390336=1&5406720=1&5423104=1&5439488=1&5455872=1&5472256=1&5488640=1&5505024=1&5521408=1&5537792=1&5554176=1&5570560=1&5586944=1&5603328=1&5619712=1&5636096=1&5652480=1&5668864=1&5685248=1&5701632=1&5718016=1&5734400=1&5750784=1&5767168=1&5783552=1&5799936=1&5816320=1&5832704=1&5849088=1&5865472=1&5881856=1&5898240=1&5914624=1&5931008=1&5947392=1&5963776=1&5980160=1&5996544=1&6012928=1&6029312=1&6045696=1&6062080=1&6078464=1&6094848=1&6111232=1&6127616=1&6144000=1&6160384=1&6176768=1&6193152=1&6209536=1&6225920=1&6242304=1&6258688=1&6275072=1&6291456=1&6307840=1&6324224=1&6340608=1&6356992=1&6373376=1&6389760=1&6406144=1&6422528=1&6438912=1&6455296=1&6471680=1&6488064=1&6504448=1&6520832=1&6537216=1&6553600=1&6569984=1&6586368=1&6602752=1&6619136=1&6635520=1&6651904=1&6668288=1&6684672=1&6701056=1&6717440=1&6733824=1&6750208=1&6766592=1&6782976=1&6799360=1&6815744=1&6832128=1&6848512=1&6864896=1&6881280=1&6897664=1&6914048=1&6930432=1&6946816=1&6963200=1&6979584=1&6995968=1&7012352=1&7028736=1&7045120=1&7061504=1&7077888=1&7094272=1&7110656=1&7127040=1&7143424=1&7159808=1&7176192=1&7192576=1&7208960=1&7225344=1&7241728=1&7258112=1&7274496=1&7290880=1&7307264=1&7323648=1&7340032=1&7356416=1&7372800=1&7389184=1&7405568=1&7421952=1&7438336=1&7454720=1&7471104=1&7487488=1&7503872=1&7520256=1&7536640=1&7553024=1&7569408=1&7585792=1&7602176=1&7618560=1&7634944=1&7651328=1&7667712=1&7684096=1&7700480=1&7716864=1&7733248=1&7749632=1&7766016=1&7782400=1&7798784=1&7815168=1&7831552=1&7847936=1&7864320=1&7880704=1&7897088=1&7913472=1&7929856=1&7946240=1&7962624=1&7979008=1&7995392=1&8011776=1&8028160=1&8044544=1&8060928=1&8077312=1&8093696=1&8110080=1&8126464=1&8142848=1&8159232=1&8175616=1&8192000=1&8208384=1&8224768=1&8241152=1&8257536=1&8273920=1&8290304=1&8306688=1&8323072=1&8339456=1&8355840=1&8372224=1&8388608=1&8404992=1&8421376=1&8437760=1&8454144=1&8470528=1&8486912=1&8503296=1&8519680=1&8536064=1&8552448=1&8568832=1&8585216=1&8601600=1&8617984=1&8634368=1&8650752=1&8667136=1&8683520=1&8699904=1&8716288=1&8732672=1&8749056=1&8765440=1&8781824=1&8798208=1&8814592=1&8830976=1&8847360=1&8863744=1&8880128=1&8896512=1&8912896=1&8929280=1&8945664=1&8962048=1&8978432=1&8994816=1&9011200=1&9027584=1&9043968=1&9060352=1&9076736=1&9093120=1&9109504=1&9125888=1&9142272=1&9158656=1&9175040=1&9191424=1&9207808=1&9224192=1&9240576=1&9256960=1&9273344=1&9289728=1&9306112=1&9322496=1&9338880=1&9355264=1&9371648=1&9388032=1&9404416=1&9420800=1&9437184=1&9453568=1&9469952=1&9486336=1&9502720=1&9519104=1&9535488=1&9551872=1&9568256=1&9584640=1&9601024=1&9617408=1&9633792=1&9650176=1&9666560=1&9682944=1&9699328=1&9715712=1&9732096=1&9748480=1&9764864=1&9781248=1&9797632=1&9814016=1&9830400=1&9846784=1&9863168=1&9879552=1&9895936=1&9912320=1&9928704=1&9945088=1&9961472=1&9977856=1&9994240=1&10010624=1&10027008=1&10043392=1&10059776=1&10076160=1&10092544=1&10108928=1&10125312=1&10141696=1&10158080=1&10174464=1&10190848=1&10207232=1&10223616=1&10240000=1&10256384=1&10272768=1&10289152=1&10305536=1&10321920=1&10338304=1&10354688=1&10371072=1&10387456=1&10403840=1&10420224=1&10436608=1&10452992=1&10469376=1&10485760=1&10502144=1&10518528=1&10534912=1&10551296=1&10567680=1&10584064=1&10600448=1&10616832=1&10633216=1&10649600=1&10665984=1&10682368=1&10698752=1&10715136=1&10731520=1&10747904=1&10764288=1&10780672=1&10797056=1&10813440=1&10829824=1&10846208=1&10862592=1&10878976=1&10895360=1&10911744=1&10928128=1&10944512=1&10960896=1&10977280=1&10993664=1&11010048=1&11026432=1&11042816=1&11059200=1&11075584=1&11091968=1&11108352=1&11124736=1&11141120=1&11157504=1&11173888=1&11190272=1&11206656=1&11223040=1&11239424=1&11255808=1&11272192=1&11288576=1&11304960=1&11321344=1&11337728=1&11354112=1&11370496=1&11386880=1&11403264=1&11419648=1&11436032=1&11452416=1&11468800=1&11485184=1&11501568=1&11517952=1&11534336=1&11550720=1&11567104=1&11583488=1&11599872=1&11616256=1&11632640=1&11649024=1&11665408=1&11681792=1&11698176=1&11714560=1&11730944=1&11747328=1&11763712=1&11780096=1&11796480=1&11812864=1&11829248=1&11845632=1&11862016=1&11878400=1&11894784=1&11911168=1&11927552=1&11943936=1&11960320=1&11976704=1&11993088=1&12009472=1&12025856=1&12042240=1&12058624=1&12075008=1&12091392=1&12107776=1&12124160=1&12140544=1&12156928=1&12173312=1&12189696=1&12206080=1&12222464=1&12238848=1&12255232=1&12271616=1&12288000=1&12304384=1&12320768=1&12337152=1&12353536=1&12369920=1&12386304=1&12402688=1&12419072=1&12435456=1&12451840=1&12468224=1&12484608=1&12500992=1&12517376=1&12533760=1&12550144=1&12566528=1&12582912=1&12599296=1&12615680=1&12632064=1&12648448=1&12664832=1&12681216=1&12697600=1&12713984=1&12730368=1&12746752=1&12763136=1&12779520=1&12795904=1&12812288=1&12828672=1&12845056=1&12861440=1&12877824=1&12894208=1&12910592=1&12926976=1&12943360=1&12959744=1&12976128=1&12992512=1&13008896=1&13025280=1&13041664=1&13058048=1&13074432=1&13090816=1&13107200=1&13123584=1&13139968=1&13156352=1&13172736=1&13189120=1&13205504=1&13221888=1&13238272=1&13254656=1&13271040=1&13287424=1&13303808=1&13320192=1&13336576=1&13352960=1&13369344=1&13385728=1&13402112=1&13418496=1&13434880=1&13451264=1&13467648=1&13484032=1&13500416=1&13516800=1&13533184=1&13549568=1&13565952=1&13582336=1&13598720=1&13615104=1&13631488=1&13647872=1&13664256=1&13680640=1&13697024=1&13713408=1&13729792=1&13746176=1&13762560=1&13778944=1&13795328=1&13811712=1&13828096=1&13844480=1&13860864=1&13877248=1&13893632=1&13910016=1&13926400=1&13942784=1&13959168=1&13975552=1&13991936=1&14008320=1&14024704=1&14041088=1&14057472=1&14073856=1&14090240=1&14106624=1&14123008=1&14139392=1&14155776=1&14172160=1&14188544=1&14204928=1&14221312=1&14237696=1&14254080=1&14270464=1&14286848=1&14303232=1&14319616=1&14336000=1&14352384=1&14368768=1&14385152=1&14401536=1&14417920=1&14434304=1&14450688=1&14467072=1&14483456=1&14499840=1&14516224=1&14532608=1&14548992=1&14565376=1&14581760=1&14598144=1&14614528=1&14630912=1&14647296=1&14663680=1&14680064=1&14696448=1&14712832=1&14729216=1&14745600=1&14761984=1&14778368=1&14794752=1&14811136=1&14827520=1&14843904=1&14860288=1&14876672=1&14893056=1&14909440=1&14925824=1&14942208=1&14958592=1&14974976=1&14991360=1&15007744=1&15024128=1&15040512=1&15056896=1&15073280=1&15089664=1&15106048=1&15122432=1&15138816=1&15155200=1&15171584=1&15187968=1&15204352=1&15220736=1&15237120=1&15253504=1&15269888=1&15286272=1&15302656=1&15319040=1&15335424=1&15351808=1&15368192=1&15384576=1&15400960=1&15417344=1&15433728=1&15450112=1&15466496=1&15482880=1&15499264=1&15515648=1&15532032=1&15548416=1&15564800=1&15581184=1&15597568=1&15613952=1&15630336=1&15646720=1&15663104=1&15679488=1&15695872=1&15712256=1&15728640=1&15745024=1&15761408=1&15777792=1&15794176=1&15810560=1&15826944=1&15843328=1&15859712=1&15876096=1&15892480=1&15908864=1&15925248=1&15941632=1&15958016=1&15974400=1&15990784=1&16007168=1&16023552=1&16039936=1&16056320=1&16072704=1&16089088=1&16105472=1&16121856=1&16138240=1&16154624=1&16171008=1&16187392=1&16203776=1&16220160=1&16236544=1&16252928=1&16269312=1&16285696=1&16302080=1&16318464=1&16334848=1&16351232=1&16367616=1&16384000=1&16400384=1&16416768=1&16433152=1&16449536=1&16465920=1&16482304=1&16498688=1&16515072=1&16531456=1&16547840=1&16564224=1&16580608=1&16596992=1&16613376=1&16629760=1&16646144=1&16662528=1&16678912=1&16695296=1&16711680=1&16728064=1&16744448=1&16760832=1&16777216=1&16793600=1&16809984=1&16826368=1&16842752=1&16859136=1&16875520=1&16891904=1&16908288=1&16924672=1&16941056=1&16957440=1&16973824=1&16990208=1&17006592=1&17022976=1&17039360=1&17055744=1&17072128=1&17088512=1&17104896=1&17121280=1&17137664=1&17154048=1&17170432=1&17186816=1&17203200=1&17219584=1&17235968=1&17252352=1&17268736=1&17285120=1&17301504=1&17317888=1&17334272=1&17350656=1&17367040=1&17383424=1&17399808=1&17416192=1&17432576=1&17448960=1&17465344=1&17481728=1&17498112=1&17514496=1&17530880=1&17547264=1&17563648=1&17580032=1&17596416=1&17612800=1&17629184=1&17645568=1&17661952=1&17678336=1&17694720=1&17711104=1&17727488=1&17743872=1&17760256=1&17776640=1&17793024=1&17809408=1&17825792=1&17842176=1&17858560=1&17874944=1&17891328=1&17907712=1&17924096=1&17940480=1&17956864=1&17973248=1&17989632=1&18006016=1&18022400=1&18038784=1&18055168=1&18071552=1&18087936=1&18104320=1&18120704=1&18137088=1&18153472=1&18169856=1&18186240=1&18202624=1&18219008=1&18235392=1&18251776=1&18268160=1&18284544=1&18300928=1&18317312=1&18333696=1&18350080=1&18366464=1&18382848=1&18399232=1&18415616=1&18432000=1&18448384=1&18464768=1&18481152=1&18497536=1&18513920=1&18530304=1&18546688=1&18563072=1&18579456=1&18595840=1&18612224=1&18628608=1&18644992=1&18661376=1&18677760=1&18694144=1&18710528=1&18726912=1&18743296=1&18759680=1&18776064=1&18792448=1&18808832=1&18825216=1&18841600=1&18857984=1&18874368=1&18890752=1&18907136=1&18923520=1&18939904=1&18956288=1&18972672=1&18989056=1&19005440=1&19021824=1&19038208=1&19054592=1&19070976=1&19087360=1&19103744=1&19120128=1&19136512=1&19152896=1&19169280=1&19185664=1&19202048=1&19218432=1&19234816=1&19251200=1&19267584=1&19283968=1&19300352=1&19316736=1&19333120=1&19349504=1&19365888=1&19382272=1&19398656=1&19415040=1&19431424=1&19447808=1&19464192=1&19480576=1&19496960=1&19513344=1&19529728=1&19546112=1&19562496=1&19578880=1&19595264=1&19611648=1&19628032=1&19644416=1&19660800=1&19677184=1&19693568=1&19709952=1&19726336=1&19742720=1&19759104=1&19775488=1&19791872=1&19808256=1&19824640=1&19841024=1&19857408=1&19873792=1&19890176=1&19906560=1&19922944=1&19939328=1&19955712=1&19972096=1&19988480=1&20004864=1&20021248=1&20037632=1&20054016=1&20070400=1&20086784=1&20103168=1&20119552=1&20135936=1&20152320=1&20168704=1&20185088=1&20201472=1&20217856=1&20234240=1&20250624=1&20267008=1&20283392=1&20299776=1&20316160=1&20332544=1&20348928=1&20365312=1&20381696=1&20398080=1&20414464=1&20430848=1&20447232=1&20463616=1&20480000=1&20496384=1&20512768=1&20529152=1&20545536=1&20561920=1&20578304=1&20594688=1&20611072=1&20627456=1&20643840=1&20660224=1&20676608=1&20692992=1&20709376=1&20725760=1&20742144=1&20758528=1&20774912=1&20791296=1&20807680=1&20824064=1&20840448=1&20856832=1&20873216=1&20889600=1&20905984=1&20922368=1&20938752=1&20955136=1&20971520=1&20987904=1&21004288=1&21020672=1&21037056=1&21053440=1&21069824=1&21086208=1&21102592=1&21118976=1&21135360=1&21151744=1&21168128=1&21184512=1&21200896=1&21217280=1&21233664=1&21250048=1&21266432=1&21282816=1&21299200=1&21315584=1&21331968=1&21348352=1&21364736=1&21381120=1&21397504=1&21413888=1&21430272=1&21446656=1&21463040=1&21479424=1&21495808=1&21512192=1&21528576=1&21544960=1&21561344=1&21577728=1&21594112=1&21610496=1&21626880=1&21643264=1&21659648=1&21676032=1&21692416=1&21708800=1&21725184=1&21741568=1&21757952=1&21774336=1&21790720=1&21807104=1&21823488=1&21839872=1&21856256=1&21872640=1&21889024=1&21905408=1&21921792=1&21938176=1&21954560=1&21970944=1&21987328=1&22003712=1&22020096=1&22036480=1&22052864=1&22069248=1&22085632=1&22102016=1&22118400=1&22134784=1&22151168=1&22167552=1&22183936=1&22200320=1&22216704=1&22233088=1&22249472=1&22265856=1&22282240=1&22298624=1&22315008=1&22331392=1&22347776=1&22364160=1&22380544=1&22396928=1&22413312=1&22429696=1&22446080=1&22462464=1&22478848=1&22495232=1&22511616=1&22528000=1&22544384=1&22560768=1&22577152=1&22593536=1&22609920=1&22626304=1&22642688=1&22659072=1&22675456=1&22691840=1&22708224=1&22724608=1&22740992=1&22757376=1&22773760=1&22790144=1&22806528=1&22822912=1&22839296=1&22855680=1&22872064=1&22888448=1&22904832=1&22921216=1&22937600=1&22953984=1&22970368=1&22986752=1&23003136=1&23019520=1&23035904=1&23052288=1&23068672=1&23085056=1&23101440=1&23117824=1&23134208=1&23150592=1&23166976=1&23183360=1&23199744=1&23216128=1&23232512=1&23248896=1&23265280=1&23281664=1&23298048=1&23314432=1&23330816=1&23347200=1&23363584=1&23379968=1&23396352=1&23412736=1&23429120=1&23445504=1&23461888=1&23478272=1&23494656=1&23511040=1&23527424=1&23543808=1&23560192=1&23576576=1&23592960=1&23609344=1&23625728=1&23642112=1&23658496=1&23674880=1&23691264=1&23707648=1&23724032=1&23740416=1&23756800=1&23773184=1&23789568=1&23805952=1&23822336=1&23838720=1&23855104=1&23871488=1&23887872=1&23904256=1&23920640=1&23937024=1&23953408=1&23969792=1&23986176=1&24002560=1&24018944=1&24035328=1&24051712=1&24068096=1&24084480=1&24100864=1&24117248=1&24133632=1&24150016=1&24166400=1&24182784=1&24199168=1&24215552=1&24231936=1&24248320=1&24264704=1&24281088=1&24297472=1&24313856=1&24330240=1&24346624=1&24363008=1&24379392=1&24395776=1&24412160=1&24428544=1&24444928=1&24461312=1&24477696=1&24494080=1&24510464=1&24526848=1&24543232=1&24559616=1&24576000=1&24592384=1&24608768=1&24625152=1&24641536=1&24657920=1&24674304=1&24690688=1&24707072=1&24723456=1&24739840=1&24756224=1&24772608=1&24788992=1&24805376=1&24821760=1&24838144=1&24854528=1&24870912=1&24887296=1&24903680=1&24920064=1&24936448=1&24952832=1&24969216=1&24985600=1&25001984=1&25018368=1&25034752=1&25051136=1&25067520=1&25083904=1&25100288=1&25116672=1&25133056=1&25149440=1&25165824=1&25182208=1&25198592=1&25214976=1&25231360=1&25247744=1&25264128=1&25280512=1&25296896=1&25313280=1&25329664=1&25346048=1&25362432=1&25378816=1&25395200=1&25411584=1&25427968=1&25444352=1&25460736=1&25477120=1&25493504=1&25509888=1&25526272=1&25542656=1&25559040=1&25575424=1&25591808=1&25608192=1&25624576=1&25640960=1&25657344=1&25673728=1&25690112=1&25706496=1&25722880=1&25739264=1&25755648=1&25772032=1&25788416=1&25804800=1&25821184=1&25837568=1&25853952=1&25870336=1&25886720=1&25903104=1&25919488=1&25935872=1&25952256=1&25968640=1&25985024=1&26001408=1&26017792=1&26034176=1&26050560=1&26066944=1&26083328=1&26099712=1&26116096=1&26132480=1&26148864=1&26165248=1&26181632=1&26198016=1&26214400=1&26230784=1&26247168=1&26263552=1&26279936=1&26296320=1&26312704=1&26329088=1&26345472=1&26361856=1&26378240=1&26394624=1&26411008=1&26427392=1&26443776=1&26460160=1&26476544=1&26492928=1&26509312=1&26525696=1&26542080=1&26558464=1&26574848=1&26591232=1&26607616=1&26624000=1&26640384=1&26656768=1&26673152=1&26689536=1&26705920=1&26722304=1&26738688=1&26755072=1&26771456=1&26787840=1&26804224=1&26820608=1&26836992=1&26853376=1&26869760=1&26886144=1&26902528=1&26918912=1&26935296=1&26951680=1&26968064=1&26984448=1&27000832=1&27017216=1&27033600=1&27049984=1&27066368=1&27082752=1&27099136=1&27115520=1&27131904=1&27148288=1&27164672=1&27181056=1&27197440=1&27213824=1&27230208=1&27246592=1&27262976=1&27279360=1&27295744=1&27312128=1&27328512=1&27344896=1&27361280=1&27377664=1&27394048=1&27410432=1&27426816=1&27443200=1&27459584=1&27475968=1&27492352=1&27508736=1&27525120=1&27541504=1&27557888=1&27574272=1&27590656=1&27607040=1&27623424=1&27639808=1&27656192=1&27672576=1&27688960=1&27705344=1&27721728=1&27738112=1&27754496=1&27770880=1&27787264=1&27803648=1&27820032=1&27836416=1&27852800=1&27869184=1&27885568=1&27901952=1&27918336=1&27934720=1&27951104=1&27967488=1&27983872=1&28000256=1&28016640=1&28033024=1&28049408=1&28065792=1&28082176=1&28098560=1&28114944=1&28131328=1&28147712=1&28164096=1&28180480=1&28196864=1&28213248=1&28229632=1&28246016=1&28262400=1&28278784=1&28295168=1&28311552=1&28327936=1&28344320=1&28360704=1&28377088=1&28393472=1&28409856=1&28426240=1&28442624=1&28459008=1&28475392=1&28491776=1&28508160=1&28524544=1&28540928=1&28557312=1&28573696=1&28590080=1&28606464=1&28622848=1&28639232=1&28655616=1&28672000=1&28688384=1&28704768=1&28721152=1&28737536=1&28753920=1&28770304=1&28786688=1&28803072=1&28819456=1&28835840=1&28852224=1&28868608=1&28884992=1&28901376=1&28917760=1&28934144=1&28950528=1&28966912=1&28983296=1&28999680=1&29016064=1&29032448=1&29048832=1&29065216=1&29081600=1&29097984=1&29114368=1&29130752=1&29147136=1&29163520=1&29179904=1&29196288=1&29212672=1&29229056=1&29245440=1&29261824=1&29278208=1&29294592=1&29310976=1&29327360=1&29343744=1&29360128=1&29376512=1&29392896=1&29409280=1&29425664=1&29442048=1&29458432=1&29474816=1&29491200=1&29507584=1&29523968=1&29540352=1&29556736=1&29573120=1&29589504=1&29605888=1&29622272=1&29638656=1&29655040=1&29671424=1&29687808=1&29704192=1&29720576=1&29736960=1&29753344=1&29769728=1&29786112=1&29802496=1&29818880=1&29835264=1&29851648=1&29868032=1&29884416=1&29900800=1&29917184=1&29933568=1&29949952=1&29966336=1&29982720=1&29999104=1&30015488=1&30031872=1&30048256=1&30064640=1&30081024=1&30097408=1&30113792=1&30130176=1&30146560=1&30162944=1&30179328=1&30195712=1&30212096=1&30228480=1&30244864=1&30261248=1&30277632=1&30294016=1&30310400=1&30326784=1&30343168=1&30359552=1&30375936=1&30392320=1&30408704=1&30425088=1&30441472=1&30457856=1&30474240=1&30490624=1&30507008=1&30523392=1&30539776=1&30556160=1&30572544=1&30588928=1&30605312=1&30621696=1&30638080=1&30654464=1&30670848=1&30687232=1&30703616=1&30720000=1&30736384=1&30752768=1&30769152=1&30785536=1&30801920=1&30818304=1&30834688=1&30851072=1&30867456=1&30883840=1&30900224=1&30916608=1&30932992=1&30949376=1&30965760=1&30982144=1&30998528=1&31014912=1&31031296=1&31047680=1&31064064=1&31080448=1&31096832=1&31113216=1&31129600=1&31145984=1&31162368=1&31178752=1&31195136=1&31211520=1&31227904=1&31244288=1&31260672=1&31277056=1&31293440=1&31309824=1&31326208=1&31342592=1&31358976=1&31375360=1&31391744=1&31408128=1&31424512=1&31440896=1&31457280=1&31473664=1&31490048=1&31506432=1&31522816=1&31539200=1&31555584=1&31571968=1&31588352=1&31604736=1&31621120=1&31637504=1&31653888=1&31670272=1&31686656=1&31703040=1&31719424=1&31735808=1&31752192=1&31768576=1&31784960=1&31801344=1&31817728=1&31834112=1&31850496=1&31866880=1&31883264=1&31899648=1&31916032=1&31932416=1&31948800=1&31965184=1&31981568=1&31997952=1&32014336=1&32030720=1&32047104=1&32063488=1&32079872=1&32096256=1&32112640=1&32129024=1&32145408=1&32161792=1&32178176=1&32194560=1&32210944=1&32227328=1&32243712=1&32260096=1&32276480=1&32292864=1&32309248=1&32325632=1&32342016=1&32358400=1&32374784=1&32391168=1&32407552=1&32423936=1&32440320=1&32456704=1&32473088=1&32489472=1&32505856=1&32522240=1&32538624=1&32555008=1&32571392=1&32587776=1&32604160=1&32620544=1&32636928=1&32653312=1&32669696=1&32686080=1&32702464=1&32718848=1&32735232=1&32751616=1&32768000=1&32784384=1&32800768=1&32817152=1&32833536=1&32849920=1&32866304=1&32882688=1&32899072=1&32915456=1&32931840=1&32948224=1&32964608=1&32980992=1&32997376=1&33013760=1&33030144=1&33046528=1&33062912=1&33079296=1&33095680=1&33112064=1&33128448=1&33144832=1&33161216=1&33177600=1&33193984=1&33210368=1&33226752=1&33243136=1&33259520=1&33275904=1&33292288=1&33308672=1&33325056=1&33341440=1&33357824=1&33374208=1&33390592=1&33406976=1&33423360=1&33439744=1&33456128=1&33472512=1&33488896=1&33505280=1&33521664=1&33538048=1&33554432=1&33570816=1&33587200=1&33603584=1&33619968=1&33636352=1&33652736=1&33669120=1&33685504=1&33701888=1&33718272=1&33734656=1&33751040=1&33767424=1&33783808=1&33800192=1&33816576=1&33832960=1&33849344=1&33865728=1&33882112=1&33898496=1&33914880=1&33931264=1&33947648=1&33964032=1&33980416=1&33996800=1&34013184=1&34029568=1&34045952=1&34062336=1&34078720=1&34095104=1&34111488=1&34127872=1&34144256=1&34160640=1&34177024=1&34193408=1&34209792=1&34226176=1&34242560=1&34258944=1&34275328=1&34291712=1&34308096=1&34324480=1&34340864=1&34357248=1&34373632=1&34390016=1&34406400=1&34422784=1&34439168=1&34455552=1&34471936=1&34488320=1&34504704=1&34521088=1&34537472=1&34553856=1&34570240=1&34586624=1&34603008=1&34619392=1&34635776=1&34652160=1&34668544=1&34684928=1&34701312=1&34717696=1&34734080=1&34750464=1&34766848=1&34783232=1&34799616=1&34816000=1&34832384=1&34848768=1&34865152=1&34881536=1&34897920=1&34914304=1&34930688=1&34947072=1&34963456=1&34979840=1&34996224=1&35012608=1&35028992=1&35045376=1&35061760=1&35078144=1&35094528=1&35110912=1&35127296=1&35143680=1&35160064=1&35176448=1&35192832=1&35209216=1&35225600=1&35241984=1&35258368=1&35274752=1&35291136=1&35307520=1&35323904=1&35340288=1&35356672=1&35373056=1&35389440=1&35405824=1&35422208=1&35438592=1&35454976=1&35471360=1&35487744=1&35504128=1&35520512=1&35536896=1&35553280=1&35569664=1&35586048=1&35602432=1&35618816=1&35635200=1&35651584=1&35667968=1&35684352=1&35700736=1&35717120=1&35733504=1&35749888=1&35766272=1&35782656=1&35799040=1&35815424=1&35831808=1&35848192=1&35864576=1&35880960=1&35897344=1&35913728=1&35930112=1&35946496=1&35962880=1&35979264=1&35995648=1&36012032=1&36028416=1&36044800=1&36061184=1&36077568=1&36093952=1&36110336=1&36126720=1&36143104=1&36159488=1&36175872=1&36192256=1&36208640=1&36225024=1&36241408=1&36257792=1&36274176=1&36290560=1&36306944=1&36323328=1&36339712=1&36356096=1&36372480=1&36388864=1&36405248=1&36421632=1&36438016=1&36454400=1&36470784=1&36487168=1&36503552=1&36519936=1&36536320=1&36552704=1&36569088=1&36585472=1&36601856=1&36618240=1&36634624=1&36651008=1&36667392=1&36683776=1&36700160=1&36716544=1&36732928=1&36749312=1&36765696=1&36782080=1&36798464=1&36814848=1&36831232=1&36847616=1&36864000=1&36880384=1&36896768=1&36913152=1&36929536=1&36945920=1&36962304=1&36978688=1&36995072=1&37011456=1&37027840=1&37044224=1&37060608=1&37076992=1&37093376=1&37109760=1&37126144=1&37142528=1&37158912=1&37175296=1&37191680=1&37208064=1&37224448=1&37240832=1&37257216=1&37273600=1&37289984=1&37306368=1&37322752=1&37339136=1&37355520=1&37371904=1&37388288=1&37404672=1&37421056=1&37437440=1&37453824=1&37470208=1&37486592=1&37502976=1&37519360=1&37535744=1&37552128=1&37568512=1&37584896=1&37601280=1&37617664=1&37634048=1&37650432=1&37666816=1&37683200=1&37699584=1&37715968=1&37732352=1&37748736=1&37765120=1&37781504=1&37797888=1&37814272=1&37830656=1&37847040=1&37863424=1&37879808=1&37896192=1&37912576=1&37928960=1&37945344=1&37961728=1&37978112=1&37994496=1&38010880=1&38027264=1&38043648=1&38060032=1&38076416=1&38092800=1&38109184=1&38125568=1&38141952=1&38158336=1&38174720=1&38191104=1&38207488=1&38223872=1&38240256=1&38256640=1&38273024=1&38289408=1&38305792=1&38322176=1&38338560=1&38354944=1&38371328=1&38387712=1&38404096=1&38420480=1&38436864=1&38453248=1&38469632=1&38486016=1&38502400=1&38518784=1&38535168=1&38551552=1&38567936=1&38584320=1&38600704=1&38617088=1&38633472=1&38649856=1&38666240=1&38682624=1&38699008=1&38715392=1&38731776=1&38748160=1&38764544=1&38780928=1&38797312=1&38813696=1&38830080=1&38846464=1&38862848=1&38879232=1&38895616=1&38912000=1&38928384=1&38944768=1&38961152=1&38977536=1&38993920=1&39010304=1&39026688=1&39043072=1&39059456=1&39075840=1&39092224=1&39108608=1&39124992=1&39141376=1&39157760=1&39174144=1&39190528=1&39206912=1&39223296=1&39239680=1&39256064=1&39272448=1&39288832=1&39305216=1&39321600=1&39337984=1&39354368=1&39370752=1&39387136=1&39403520=1&39419904=1&39436288=1&39452672=1&39469056=1&39485440=1&39501824=1&39518208=1&39534592=1&39550976=1&39567360=1&39583744=1&39600128=1&39616512=1&39632896=1&39649280=1&39665664=1&39682048=1&39698432=1&39714816=1&39731200=1&39747584=1&39763968=1&39780352=1&39796736=1&39813120=1&39829504=1&39845888=1&39862272=1&39878656=1&39895040=1&39911424=1&39927808=1&39944192=1&39960576=1&39976960=1&39993344=1&40009728=1&40026112=1&40042496=1&40058880=1&40075264=1&40091648=1&40108032=1&40124416=1&40140800=1&40157184=1&40173568=1&40189952=1&40206336=1&40222720=1&40239104=1&40255488=1&40271872=1&40288256=1&40304640=1&40321024=1&40337408=1&40353792=1&40370176=1&40386560=1&40402944=1&40419328=1&40435712=1&40452096=1&40468480=1&40484864=1&40501248=1&40517632=1&40534016=1&40550400=1&40566784=1&40583168=1&40599552=1&40615936=1&40632320=1&40648704=1&40665088=1&40681472=1&40697856=1&40714240=1&40730624=1&40747008=1&40763392=1&40779776=1&40796160=1&40812544=1&40828928=1&40845312=1&40861696=1&40878080=1&40894464=1&40910848=1&40927232=1&40943616=1&40960000=1&40976384=1&40992768=1&41009152=1&41025536=1&41041920=1&41058304=1&41074688=1&41091072=1&41107456=1&41123840=1&41140224=1&41156608=1&41172992=1&41189376=1&41205760=1&41222144=1&41238528=1&41254912=1&41271296=1&41287680=1&41304064=1&41320448=1&41336832=1&41353216=1&41369600=1&41385984=1&41402368=1&41418752=1&41435136=1&41451520=1&41467904=1&41484288=1&41500672=1&41517056=1&41533440=1&41549824=1&41566208=1&41582592=1&41598976=1&41615360=1&41631744=1&41648128=1&41664512=1&41680896=1&41697280=1&41713664=1&41730048=1&41746432=1&41762816=1&41779200=1&41795584=1&41811968=1&41828352=1&41844736=1&41861120=1&41877504=1&41893888=1&41910272=1&41926656=1&41943040=1&41959424=1&41975808=1&41992192=1&42008576=1&42024960=1&42041344=1&42057728=1&42074112=1&42090496=1&42106880=1&42123264=1&42139648=1&42156032=1&42172416=1&42188800=1&42205184=1&42221568=1&42237952=1&42254336=1&42270720=1&42287104=1&42303488=1&42319872=1&42336256=1&42352640=1&42369024=1&42385408=1&42401792=1&42418176=1&42434560=1&42450944=1&42467328=1&42483712=1&42500096=1&42516480=1&42532864=1&42549248=1&42565632=1&42582016=1&42598400=1&42614784=1&42631168=1&42647552=1&42663936=1&42680320=1&42696704=1&42713088=1&42729472=1&42745856=1&42762240=1&42778624=1&42795008=1&42811392=1&42827776=1&42844160=1&42860544=1&42876928=1&42893312=1&42909696=1&42926080=1&42942464=1&42958848=1&42975232=1&42991616=1&43008000=1&43024384=1&43040768=1&43057152=1&43073536=1&43089920=1&43106304=1&43122688=1&43139072=1&43155456=1&43171840=1&43188224=1&43204608=1&43220992=1&43237376=1&43253760=1&43270144=1&43286528=1&43302912=1&43319296=1&43335680=1&43352064=1&43368448=1&43384832=1&43401216=1&43417600=1&43433984=1&43450368=1&43466752=1&43483136=1&43499520=1&43515904=1&43532288=1&43548672=1&43565056=1&43581440=1&43597824=1&43614208=1&43630592=1&43646976=1&43663360=1&43679744=1&43696128=1&43712512=1&43728896=1&43745280=1&43761664=1&43778048=1&43794432=1&43810816=1&43827200=1&43843584=1&43859968=1&43876352=1&43892736=1&43909120=1&43925504=1&43941888=1&43958272=1&43974656=1&43991040=1&44007424=1&44023808=1&44040192=1&44056576=1&44072960=1&44089344=1&44105728=1&44122112=1&44138496=1&44154880=1&44171264=1&44187648=1&44204032=1&44220416=1&44236800=1&44253184=1&44269568=1&44285952=1&44302336=1&44318720=1&44335104=1&44351488=1&44367872=1&44384256=1&44400640=1&44417024=1&44433408=1&44449792=1&44466176=1&44482560=1&44498944=1&44515328=1&44531712=1&44548096=1&44564480=1&44580864=1&44597248=1&44613632=1&44630016=1&44646400=1&44662784=1&44679168=1&44695552=1&44711936=1&44728320=1&44744704=1&44761088=1&44777472=1&44793856=1&44810240=1&44826624=1&44843008=1&44859392=1&44875776=1&44892160=1&44908544=1&44924928=1&44941312=1&44957696=1&44974080=1&44990464=1&45006848=1&45023232=1&45039616=1&45056000=1&45072384=1&45088768=1&45105152=1&45121536=1&45137920=1&45154304=1&45170688=1&45187072=1&45203456=1&45219840=1&45236224=1&45252608=1&45268992=1&45285376=1&45301760=1&45318144=1&45334528=1&45350912=1&45367296=1&45383680=1&45400064=1&45416448=1&45432832=1&45449216=1&45465600=1&45481984=1&45498368=1&45514752=1&45531136=1&45547520=1&45563904=1&45580288=1&45596672=1&45613056=1&45629440=1&45645824=1&45662208=1&45678592=1&45694976=1&45711360=1&45727744=1&45744128=1&45760512=1&45776896=1&45793280=1&45809664=1&45826048=1&45842432=1&45858816=1&45875200=1&45891584=1&45907968=1&45924352=1&45940736=1&45957120=1&45973504=1&45989888=1&46006272=1&46022656=1&46039040=1&46055424=1&46071808=1&46088192=1&46104576=1&46120960=1&46137344=1&46153728=1&46170112=1&46186496=1&46202880=1&46219264=1&46235648=1&46252032=1&46268416=1&46284800=1&46301184=1&46317568=1&46333952=1&46350336=1&46366720=1&46383104=1&46399488=1&46415872=1&46432256=1&46448640=1&46465024=1&46481408=1&46497792=1&46514176=1&46530560=1&46546944=1&46563328=1&46579712=1&46596096=1&46612480=1&46628864=1&46645248=1&46661632=1&46678016=1&46694400=1&46710784=1&46727168=1&46743552=1&46759936=1&46776320=1&46792704=1&46809088=1&46825472=1&46841856=1&46858240=1&46874624=1&46891008=1&46907392=1&46923776=1&46940160=1&46956544=1&46972928=1&46989312=1&47005696=1&47022080=1&47038464=1&47054848=1&47071232=1&47087616=1&47104000=1&47120384=1&47136768=1&47153152=1&47169536=1&47185920=1&47202304=1&47218688=1&47235072=1&47251456=1&47267840=1&47284224=1&47300608=1&47316992=1&47333376=1&47349760=1&47366144=1&47382528=1&47398912=1&47415296=1&47431680=1&47448064=1&47464448=1&47480832=1&47497216=1&47513600=1&47529984=1&47546368=1&47562752=1&47579136=1&47595520=1&47611904=1&47628288=1&47644672=1&47661056=1&47677440=1&47693824=1&47710208=1&47726592=1&47742976=1&47759360=1&47775744=1&47792128=1&47808512=1&47824896=1&47841280=1&47857664=1&47874048=1&47890432=1&47906816=1&47923200=1&47939584=1&47955968=1&47972352=1&47988736=1&48005120=1&48021504=1&48037888=1&48054272=1&48070656=1&48087040=1&48103424=1&48119808=1&48136192=1&48152576=1&48168960=1&48185344=1&48201728=1&48218112=1&48234496=1&48250880=1&48267264=1&48283648=1&48300032=1&48316416=1&48332800=1&48349184=1&48365568=1&48381952=1&48398336=1&48414720=1&48431104=1&48447488=1&48463872=1&48480256=1&48496640=1&48513024=1&48529408=1&48545792=1&48562176=1&48578560=1&48594944=1&48611328=1&48627712=1&48644096=1&48660480=1&48676864=1&48693248=1&48709632=1&48726016=1&48742400=1&48758784=1&48775168=1&48791552=1&48807936=1&48824320=1&48840704=1&48857088=1&48873472=1&48889856=1&48906240=1&48922624=1&48939008=1&48955392=1&48971776=1&48988160=1&49004544=1&49020928=1&49037312=1&49053696=1&49070080=1&49086464=1&49102848=1&49119232=1&49135616=1&49152000=1&49168384=1&49184768=1&49201152=1&49217536=1&49233920=1&49250304=1&49266688=1&49283072=1&49299456=1&49315840=1&49332224=1&49348608=1&49364992=1&49381376=1&49397760=1&49414144=1&49430528=1&49446912=1&49463296=1&49479680=1&49496064=1&49512448=1&49528832=1&49545216=1&49561600=1&49577984=1&49594368=1&49610752=1&49627136=1&49643520=1&49659904=1&49676288=1&49692672=1&49709056=1&49725440=1&49741824=1&49758208=1&49774592=1&49790976=1&49807360=1&49823744=1&49840128=1&49856512=1&49872896=1&49889280=1&49905664=1&49922048=1&49938432=1&49954816=1&49971200=1&49987584=1&50003968=1&50020352=1&50036736=1&50053120=1&50069504=1&50085888=1&50102272=1&50118656=1&50135040=1&50151424=1&50167808=1&50184192=1&50200576=1&50216960=1&50233344=1&50249728=1&50266112=1&50282496=1&50298880=1&50315264=1&50331648=1&50348032=1&50364416=1&50380800=1&50397184=1&50413568=1&50429952=1&50446336=1&50462720=1&50479104=1&50495488=1&50511872=1&50528256=1&50544640=1&50561024=1&50577408=1&50593792=1&50610176=1&50626560=1&50642944=1&50659328=1&50675712=1&50692096=1&50708480=1&50724864=1&50741248=1&50757632=1&50774016=1&50790400=1&50806784=1&50823168=1&50839552=1&50855936=1&50872320=1&50888704=1&50905088=1&50921472=1&50937856=1&50954240=1&50970624=1&50987008=1&51003392=1&51019776=1&51036160=1&51052544=1&51068928=1&51085312=1&51101696=1&51118080=1&51134464=1&51150848=1&51167232=1&51183616=1&51200000=1&51216384=1&51232768=1&51249152=1&51265536=1&51281920=1&51298304=1&51314688=1&51331072=1&51347456=1&51363840=1&51380224=1&51396608=1&51412992=1&51429376=1&51445760=1&51462144=1&51478528=1&51494912=1&51511296=1&51527680=1&51544064=1&51560448=1&51576832=1&51593216=1&51609600=1&51625984=1&51642368=1&51658752=1&51675136=1&51691520=1&51707904=1&51724288=1&51740672=1&51757056=1&51773440=1&51789824=1&51806208=1&51822592=1&51838976=1&51855360=1&51871744=1&51888128=1&51904512=1&51920896=1&51937280=1&51953664=1&51970048=1&51986432=1&52002816=1&52019200=1&52035584=1&52051968=1&52068352=1&52084736=1&52101120=1&52117504=1&52133888=1&52150272=1&52166656=1&52183040=1&52199424=1&52215808=1&52232192=1&52248576=1&52264960=1&52281344=1&52297728=1&52314112=1&52330496=1&52346880=1&52363264=1&52379648=1&52396032=1&52412416=1&52428800=1&52445184=1&52461568=1&52477952=1&52494336=1&52510720=1&52527104=1&52543488=1&52559872=1&52576256=1&52592640=1&52609024=1&52625408=1&52641792=1&52658176=1&52674560=1&52690944=1&52707328=1&52723712=1&52740096=1&52756480=1&52772864=1&52789248=1&52805632=1&52822016=1&52838400=1&52854784=1&52871168=1&52887552=1&52903936=1&52920320=1&52936704=1&52953088=1&52969472=1&52985856=1&53002240=1&53018624=1&53035008=1&53051392=1&53067776=1&53084160=1&53100544=1&53116928=1&53133312=1&53149696=1&53166080=1&53182464=1&53198848=1&53215232=1&53231616=1&53248000=1&53264384=1&53280768=1&53297152=1&53313536=1&53329920=1&53346304=1&53362688=1&53379072=1&53395456=1&53411840=1&53428224=1&53444608=1&53460992=1&53477376=1&53493760=1&53510144=1&53526528=1&53542912=1&53559296=1&53575680=1&53592064=1&53608448=1&53624832=1&53641216=1&53657600=1&53673984=1&53690368=1&53706752=1&53723136=1&53739520=1&53755904=1&53772288=1&53788672=1&53805056=1&53821440=1&53837824=1&53854208=1&53870592=1&53886976=1&53903360=1&53919744=1&53936128=1&53952512=1&53968896=1&53985280=1&54001664=1&54018048=1&54034432=1&54050816=1&54067200=1&54083584=1&54099968=1&54116352=1&54132736=1&54149120=1&54165504=1&54181888=1&54198272=1&54214656=1&54231040=1&54247424=1&54263808=1&54280192=1&54296576=1&54312960=1&54329344=1&54345728=1&54362112=1&54378496=1&54394880=1&54411264=1&54427648=1&54444032=1&54460416=1&54476800=1&54493184=1&54509568=1&54525952=1&54542336=1&54558720=1&54575104=1&54591488=1&54607872=1&54624256=1&54640640=1&54657024=1&54673408=1&54689792=1&54706176=1&54722560=1&54738944=1&54755328=1&54771712=1&54788096=1&54804480=1&54820864=1&54837248=1&54853632=1&54870016=1&54886400=1&54902784=1&54919168=1&54935552=1&54951936=1&54968320=1&54984704=1&55001088=1&55017472=1&55033856=1&55050240=1&55066624=1&55083008=1&55099392=1&55115776=1&55132160=1&55148544=1&55164928=1&55181312=1&55197696=1&55214080=1&55230464=1&55246848=1&55263232=1&55279616=1&55296000=1&55312384=1&55328768=1&55345152=1&55361536=1&55377920=1&55394304=1&55410688=1&55427072=1&55443456=1&55459840=1&55476224=1&55492608=1&55508992=1&55525376=1&55541760=1&55558144=1&55574528=1&55590912=1&55607296=1&55623680=1&55640064=1&55656448=1&55672832=1&55689216=1&55705600=1&55721984=1&55738368=1&55754752=1&55771136=1&55787520=1&55803904=1&55820288=1&55836672=1&55853056=1&55869440=1&55885824=1&55902208=1&55918592=1&55934976=1&55951360=1&55967744=1&55984128=1&56000512=1&56016896=1&56033280=1&56049664=1&56066048=1&56082432=1&56098816=1&56115200=1&56131584=1&56147968=1&56164352=1&56180736=1&56197120=1&56213504=1&56229888=1&56246272=1&56262656=1&56279040=1&56295424=1&56311808=1&56328192=1&56344576=1&56360960=1&56377344=1&56393728=1&56410112=1&56426496=1&56442880=1&56459264=1&56475648=1&56492032=1&56508416=1&56524800=1&56541184=1&56557568=1&56573952=1&56590336=1&56606720=1&56623104=1&56639488=1&56655872=1&56672256=1&56688640=1&56705024=1&56721408=1&56737792=1&56754176=1&56770560=1&56786944=1&56803328=1&56819712=1&56836096=1&56852480=1&56868864=1&56885248=1&56901632=1&56918016=1&56934400=1&56950784=1&56967168=1&56983552=1&56999936=1&57016320=1&57032704=1&57049088=1&57065472=1&57081856=1&57098240=1&57114624=1&57131008=1&57147392=1&57163776=1&57180160=1&57196544=1&57212928=1&57229312=1&57245696=1&57262080=1&57278464=1&57294848=1&57311232=1&57327616=1&57344000=1&57360384=1&57376768=1&57393152=1&57409536=1&57425920=1&57442304=1&57458688=1&57475072=1&57491456=1&57507840=1&57524224=1&57540608=1&57556992=1&57573376=1&57589760=1&57606144=1&57622528=1&57638912=1&57655296=1&57671680=1&57688064=1&57704448=1&57720832=1&57737216=1&57753600=1&57769984=1&57786368=1&57802752=1&57819136=1&57835520=1&57851904=1&57868288=1&57884672=1&57901056=1&57917440=1&57933824=1&57950208=1&57966592=1&57982976=1&57999360=1&58015744=1&58032128=1&58048512=1&58064896=1&58081280=1&58097664=1&58114048=1&58130432=1&58146816=1&58163200=1&58179584=1&58195968=1&58212352=1&58228736=1&58245120=1&58261504=1&58277888=1&58294272=1&58310656=1&58327040=1&58343424=1&58359808=1&58376192=1&58392576=1&58408960=1&58425344=1&58441728=1&58458112=1&58474496=1&58490880=1&58507264=1&58523648=1&58540032=1&58556416=1&58572800=1&58589184=1&58605568=1&58621952=1&58638336=1&58654720=1&58671104=1&58687488=1&58703872=1&58720256=1&58736640=1&58753024=1&58769408=1&58785792=1&58802176=1&58818560=1&58834944=1&58851328=1&58867712=1&58884096=1&58900480=1&58916864=1&58933248=1&58949632=1&58966016=1&58982400=1&58998784=1&59015168=1&59031552=1&59047936=1&59064320=1&59080704=1&59097088=1&59113472=1&59129856=1&59146240=1&59162624=1&59179008=1&59195392=1&59211776=1&59228160=1&59244544=1&59260928=1&59277312=1&59293696=1&59310080=1&59326464=1&59342848=1&59359232=1&59375616=1&59392000=1&59408384=1&59424768=1&59441152=1&59457536=1&59473920=1&59490304=1&59506688=1&59523072=1&59539456=1&59555840=1&59572224=1&59588608=1&59604992=1&59621376=1&59637760=1&59654144=1&59670528=1&59686912=1&59703296=1&59719680=1&59736064=1&59752448=1&59768832=1&59785216=1&59801600=1&59817984=1&59834368=1&59850752=1&59867136=1&59883520=1&59899904=1&59916288=1&59932672=1&59949056=1&59965440=1&59981824=1&59998208=1&60014592=1&60030976=1&60047360=1&60063744=1&60080128=1&60096512=1&60112896=1&60129280=1&60145664=1&60162048=1&60178432=1&60194816=1&60211200=1&60227584=1&60243968=1&60260352=1&60276736=1&60293120=1&60309504=1&60325888=1&60342272=1&60358656=1&60375040=1&60391424=1&60407808=1&60424192=1&60440576=1&60456960=1&60473344=1&60489728=1&60506112=1&60522496=1&60538880=1&60555264=1&60571648=1&60588032=1&60604416=1&60620800=1&60637184=1&60653568=1&60669952=1&60686336=1&60702720=1&60719104=1&60735488=1&60751872=1&60768256=1&60784640=1&60801024=1&60817408=1&60833792=1&60850176=1&60866560=1&60882944=1&60899328=1&60915712=1&60932096=1&60948480=1&60964864=1&60981248=1&60997632=1&61014016=1&61030400=1&61046784=1&61063168=1&61079552=1&61095936=1&61112320=1&61128704=1&61145088=1&61161472=1&61177856=1&61194240=1&61210624=1&61227008=1&61243392=1&61259776=1&61276160=1&61292544=1&61308928=1&61325312=1&61341696=1&61358080=1&61374464=1&61390848=1&61407232=1&61423616=1&61440000=1&61456384=1&61472768=1&61489152=1&61505536=1&61521920=1&61538304=1&61554688=1&61571072=1&61587456=1&61603840=1&61620224=1&61636608=1&61652992=1&61669376=1&61685760=1&61702144=1&61718528=1&61734912=1&61751296=1&61767680=1&61784064=1&61800448=1&61816832=1&61833216=1&61849600=1&61865984=1&61882368=1&61898752=1&61915136=1&61931520=1&61947904=1&61964288=1&61980672=1&61997056=1&62013440=1&62029824=1&62046208=1&62062592=1&62078976=1&62095360=1&62111744=1&62128128=1&62144512=1&62160896=1&62177280=1&62193664=1&62210048=1&62226432=1&62242816=1&62259200=1&62275584=1&62291968=1&62308352=1&62324736=1&62341120=1&62357504=1&62373888=1&62390272=1&62406656=1&62423040=1&62439424=1&62455808=1&62472192=1&62488576=1&62504960=1&62521344=1&62537728=1&62554112=1&62570496=1&62586880=1&62603264=1&62619648=1&62636032=1&62652416=1&62668800=1&62685184=1&62701568=1&62717952=1&62734336=1&62750720=1&62767104=1&62783488=1&62799872=1&62816256=1&62832640=1&62849024=1&62865408=1&62881792=1&62898176=1&62914560=1&62930944=1&62947328=1&62963712=1&62980096=1&62996480=1&63012864=1&63029248=1&63045632=1&63062016=1&63078400=1&63094784=1&63111168=1&63127552=1&63143936=1&63160320=1&63176704=1&63193088=1&63209472=1&63225856=1&63242240=1&63258624=1&63275008=1&63291392=1&63307776=1&63324160=1&63340544=1&63356928=1&63373312=1&63389696=1&63406080=1&63422464=1&63438848=1&63455232=1&63471616=1&63488000=1&63504384=1&63520768=1&63537152=1&63553536=1&63569920=1&63586304=1&63602688=1&63619072=1&63635456=1&63651840=1&63668224=1&63684608=1&63700992=1&63717376=1&63733760=1&63750144=1&63766528=1&63782912=1&63799296=1&63815680=1&63832064=1&63848448=1&63864832=1&63881216=1&63897600=1&63913984=1&63930368=1&63946752=1&63963136=1&63979520=1&63995904=1&64012288=1&64028672=1&64045056=1&64061440=1&64077824=1&64094208=1&64110592=1&64126976=1&64143360=1&64159744=1&64176128=1&64192512=1&64208896=1&64225280=1&64241664=1&64258048=1&64274432=1&64290816=1&64307200=1&64323584=1&64339968=1&64356352=1&64372736=1&64389120=1&64405504=1&64421888=1&64438272=1&64454656=1&64471040=1&64487424=1&64503808=1&64520192=1&64536576=1&64552960=1&64569344=1&64585728=1&64602112=1&64618496=1&64634880=1&64651264=1&64667648=1&64684032=1&64700416=1&64716800=1&64733184=1&64749568=1&64765952=1&64782336=1&64798720=1&64815104=1&64831488=1&64847872=1&64864256=1&64880640=1&64897024=1&64913408=1&64929792=1&64946176=1&64962560=1&64978944=1&64995328=1&65011712=1&65028096=1&65044480=1&65060864=1&65077248=1&65093632=1&65110016=1&65126400=1&65142784=1&65159168=1&65175552=1&65191936=1&65208320=1&65224704=1&65241088=1&65257472=1&65273856=1&65290240=1&65306624=1&65323008=1&65339392=1&65355776=1&65372160=1&65388544=1&65404928=1&65421312=1&65437696=1&65454080=1&65470464=1&65486848=1&65503232=1&65519616=1&65536000=1&65552384=1&65568768=1&65585152=1&65601536=1&65617920=1&65634304=1&65650688=1&65667072=1&65683456=1&65699840=1&65716224=1&65732608=1&65748992=1&65765376=1&65781760=1&65798144=1&65814528=1&65830912=1&65847296=1&65863680=1&65880064=1&65896448=1&65912832=1&65929216=1&65945600=1&65961984=1&65978368=1&65994752=1&66011136=1&66027520=1&66043904=1&66060288=1&66076672=1&66093056=1&66109440=1&66125824=1&66142208=1&66158592=1&66174976=1&66191360=1&66207744=1&66224128=1&66240512=1&66256896=1&66273280=1&66289664=1&66306048=1&66322432=1&66338816=1&66355200=1&66371584=1&66387968=1&66404352=1&66420736=1&66437120=1&66453504=1&66469888=1&66486272=1&66502656=1&66519040=1&66535424=1&66551808=1&66568192=1&66584576=1&66600960=1&66617344=1&66633728=1&66650112=1&66666496=1&66682880=1&66699264=1&66715648=1&66732032=1&66748416=1&66764800=1&66781184=1&66797568=1&66813952=1&66830336=1&66846720=1&66863104=1&66879488=1&66895872=1&66912256=1&66928640=1&66945024=1&66961408=1&66977792=1&66994176=1&67010560=1&67026944=1&67043328=1&67059712=1&67076096=1&67092480=1&67108864=1&67125248=1&67141632=1&67158016=1&67174400=1&67190784=1&67207168=1&67223552=1&67239936=1&67256320=1&67272704=1&67289088=1&67305472=1&67321856=1&67338240=1&67354624=1&67371008=1&67387392=1&67403776=1&67420160=1&67436544=1&67452928=1&67469312=1&67485696=1&67502080=1&67518464=1&67534848=1&67551232=1&67567616=1&67584000=1&67600384=1&67616768=1&67633152=1&67649536=1&67665920=1&67682304=1&67698688=1&67715072=1&67731456=1&67747840=1&67764224=1&67780608=1&67796992=1&67813376=1&67829760=1&67846144=1&67862528=1&67878912=1&67895296=1&67911680=1&67928064=1&67944448=1&67960832=1&67977216=1&67993600=1&68009984=1&68026368=1&68042752=1&68059136=1&68075520=1&68091904=1&68108288=1&68124672=1&68141056=1&68157440=1&68173824=1&68190208=1&68206592=1&68222976=1&68239360=1&68255744=1&68272128=1&68288512=1&68304896=1&68321280=1&68337664=1&68354048=1&68370432=1&68386816=1&68403200=1&68419584=1&68435968=1&68452352=1&68468736=1&68485120=1&68501504=1&68517888=1&68534272=1&68550656=1&68567040=1&68583424=1&68599808=1&68616192=1&68632576=1&68648960=1&68665344=1&68681728=1&68698112=1&68714496=1&68730880=1&68747264=1&68763648=1&68780032=1&68796416=1&68812800=1&68829184=1&68845568=1&68861952=1&68878336=1&68894720=1&68911104=1&68927488=1&68943872=1&68960256=1&68976640=1&68993024=1&69009408=1&69025792=1&69042176=1&69058560=1&69074944=1&69091328=1&69107712=1&69124096=1&69140480=1&69156864=1&69173248=1&69189632=1&69206016=1&69222400=1&69238784=1&69255168=1&69271552=1&69287936=1&69304320=1&69320704=1&69337088=1&69353472=1&69369856=1&69386240=1&69402624=1&69419008=1&69435392=1&69451776=1&69468160=1&69484544=1&69500928=1&69517312=1&69533696=1&69550080=1&69566464=1&69582848=1&69599232=1&69615616=1&69632000=1&69648384=1&69664768=1&69681152=1&69697536=1&69713920=1&69730304=1&69746688=1&69763072=1&69779456=1&69795840=1&69812224=1&69828608=1&69844992=1&69861376=1&69877760=1&69894144=1&69910528=1&69926912=1&69943296=1&69959680=1&69976064=1&69992448=1&70008832=1&70025216=1&70041600=1&70057984=1&70074368=1&70090752=1&70107136=1&70123520=1&70139904=1&70156288=1&70172672=1&70189056=1&70205440=1&70221824=1&70238208=1&70254592=1&70270976=1&70287360=1&70303744=1&70320128=1&70336512=1&70352896=1&70369280=1&70385664=1&70402048=1&70418432=1&70434816=1&70451200=1&70467584=1&70483968=1&70500352=1&70516736=1&70533120=1&70549504=1&70565888=1&70582272=1&70598656=1&70615040=1&70631424=1&70647808=1&70664192=1&70680576=1&70696960=1&70713344=1&70729728=1&70746112=1&70762496=1&70778880=1&70795264=1&70811648=1&70828032=1&70844416=1&70860800=1&70877184=1&70893568=1&70909952=1&70926336=1&70942720=1&70959104=1&70975488=1&70991872=1&71008256=1&71024640=1&71041024=1&71057408=1&71073792=1&71090176=1&71106560=1&71122944=1&71139328=1&71155712=1&71172096=1&71188480=1&71204864=1&71221248=1&71237632=1&71254016=1&71270400=1&71286784=1&71303168=1&71319552=1&71335936=1&71352320=1&71368704=1&71385088=1&71401472=1&71417856=1&71434240=1&71450624=1&71467008=1&71483392=1&71499776=1&71516160=1&71532544=1&71548928=1&71565312=1&71581696=1&71598080=1&71614464=1&71630848=1&71647232=1&71663616=1&71680000=1&71696384=1&71712768=1&71729152=1&71745536=1&71761920=1&71778304=1&71794688=1&71811072=1&71827456=1&71843840=1&71860224=1&71876608=1&71892992=1&71909376=1&71925760=1&71942144=1&71958528=1&71974912=1&71991296=1&72007680=1&72024064=1&72040448=1&72056832=1&72073216=1&72089600=1&72105984=1&72122368=1&72138752=1&72155136=1&72171520=1&72187904=1&72204288=1&72220672=1&72237056=1&72253440=1&72269824=1&72286208=1&72302592=1&72318976=1&72335360=1&72351744=1&72368128=1&72384512=1&72400896=1&72417280=1&72433664=1&72450048=1&72466432=1&72482816=1&72499200=1&72515584=1&72531968=1&72548352=1&72564736=1&72581120=1&72597504=1&72613888=1&72630272=1&72646656=1&72663040=1&72679424=1&72695808=1&72712192=1&72728576=1&72744960=1&72761344=1&72777728=1&72794112=1&72810496=1&72826880=1&72843264=1&72859648=1&72876032=1&72892416=1&72908800=1&72925184=1&72941568=1&72957952=1&72974336=1&72990720=1&73007104=1&73023488=1&73039872=1&73056256=1&73072640=1&73089024=1&73105408=1&73121792=1&73138176=1&73154560=1&73170944=1&73187328=1&73203712=1&73220096=1&73236480=1&73252864=1&73269248=1&73285632=1&73302016=1&73318400=1&73334784=1&73351168=1&73367552=1&73383936=1&73400320=1&73416704=1&73433088=1&73449472=1&73465856=1&73482240=1&73498624=1&73515008=1&73531392=1&73547776=1&73564160=1&73580544=1&73596928=1&73613312=1&73629696=1&73646080=1&73662464=1&73678848=1&73695232=1&73711616=1&73728000=1&73744384=1&73760768=1&73777152=1&73793536=1&73809920=1&73826304=1&73842688=1&73859072=1&73875456=1&73891840=1&73908224=1&73924608=1&73940992=1&73957376=1&73973760=1&73990144=1&74006528=1&74022912=1&74039296=1&74055680=1&74072064=1&74088448=1&74104832=1&74121216=1&74137600=1&74153984=1&74170368=1&74186752=1&74203136=1&74219520=1&74235904=1&74252288=1&74268672=1&74285056=1&74301440=1&74317824=1&74334208=1&74350592=1&74366976=1&74383360=1&74399744=1&74416128=1&74432512=1&74448896=1&74465280=1&74481664=1&74498048=1&74514432=1&74530816=1&74547200=1&74563584=1&74579968=1&74596352=1&74612736=1&74629120=1&74645504=1&74661888=1&74678272=1&74694656=1&74711040=1&74727424=1&74743808=1&74760192=1&74776576=1&74792960=1&74809344=1&74825728=1&74842112=1&74858496=1&74874880=1&74891264=1&74907648=1&74924032=1&74940416=1&74956800=1&74973184=1&74989568=1&75005952=1&75022336=1&75038720=1&75055104=1&75071488=1&75087872=1&75104256=1&75120640=1&75137024=1&75153408=1&75169792=1&75186176=1&75202560=1&75218944=1&75235328=1&75251712=1&75268096=1&75284480=1&75300864=1&75317248=1&75333632=1&75350016=1&75366400=1&75382784=1&75399168=1&75415552=1&75431936=1&75448320=1&75464704=1&75481088=1&75497472=1&75513856=1&75530240=1&75546624=1&75563008=1&75579392=1&75595776=1&75612160=1&75628544=1&75644928=1&75661312=1&75677696=1&75694080=1&75710464=1&75726848=1&75743232=1&75759616=1&75776000=1&75792384=1&75808768=1&75825152=1&75841536=1&75857920=1&75874304=1&75890688=1&75907072=1&75923456=1&75939840=1&75956224=1&75972608=1&75988992=1&76005376=1&76021760=1&76038144=1&76054528=1&76070912=1&76087296=1&76103680=1&76120064=1&76136448=1&76152832=1&76169216=1&76185600=1&76201984=1&76218368=1&76234752=1&76251136=1&76267520=1&76283904=1&76300288=1&76316672=1&76333056=1&76349440=1&76365824=1&76382208=1&76398592=1&76414976=1&76431360=1&76447744=1&76464128=1&76480512=1&76496896=1&76513280=1&76529664=1&76546048=1&76562432=1&76578816=1&76595200=1&76611584=1&76627968=1&76644352=1&76660736=1&76677120=1&76693504=1&76709888=1&76726272=1&76742656=1&76759040=1&76775424=1&76791808=1&76808192=1&76824576=1&76840960=1&76857344=1&76873728=1&76890112=1&76906496=1&76922880=1&76939264=1&76955648=1&76972032=1&76988416=1&77004800=1&77021184=1&77037568=1&77053952=1&77070336=1&77086720=1&77103104=1&77119488=1&77135872=1&77152256=1&77168640=1&77185024=1&77201408=1&77217792=1&77234176=1&77250560=1&77266944=1&77283328=1&77299712=1&77316096=1&77332480=1&77348864=1&77365248=1&77381632=1&77398016=1&77414400=1&77430784=1&77447168=1&77463552=1&77479936=1&77496320=1&77512704=1&77529088=1&77545472=1&77561856=1&77578240=1&77594624=1&77611008=1&77627392=1&77643776=1&77660160=1&77676544=1&77692928=1&77709312=1&77725696=1&77742080=1&77758464=1&77774848=1&77791232=1&77807616=1&77824000=1&77840384=1&77856768=1&77873152=1&77889536=1&77905920=1&77922304=1&77938688=1&77955072=1&77971456=1&77987840=1&78004224=1&78020608=1&78036992=1&78053376=1&78069760=1&78086144=1&78102528=1&78118912=1&78135296=1&78151680=1&78168064=1&78184448=1&78200832=1&78217216=1&78233600=1&78249984=1&78266368=1&78282752=1&78299136=1&78315520=1&78331904=1&78348288=1&78364672=1&78381056=1&78397440=1&78413824=1&78430208=1&78446592=1&78462976=1&78479360=1&78495744=1&78512128=1&78528512=1&78544896=1&78561280=1&78577664=1&78594048=1&78610432=1&78626816=1&78643200=1&78659584=1&78675968=1&78692352=1&78708736=1&78725120=1&78741504=1&78757888=1&78774272=1&78790656=1&78807040=1&78823424=1&78839808=1&78856192=1&78872576=1&78888960=1&78905344=1&78921728=1&78938112=1&78954496=1&78970880=1&78987264=1&79003648=1&79020032=1&79036416=1&79052800=1&79069184=1&79085568=1&79101952=1&79118336=1&79134720=1&79151104=1&79167488=1&79183872=1&79200256=1&79216640=1&79233024=1&79249408=1&79265792=1&79282176=1&79298560=1&79314944=1&79331328=1&79347712=1&79364096=1&79380480=1&79396864=1&79413248=1&79429632=1&79446016=1&79462400=1&79478784=1&79495168=1&79511552=1&79527936=1&79544320=1&79560704=1&79577088=1&79593472=1&79609856=1&79626240=1&79642624=1&79659008=1&79675392=1&79691776=1&79708160=1&79724544=1&79740928=1&79757312=1&79773696=1&79790080=1&79806464=1&79822848=1&79839232=1&79855616=1&79872000=1&79888384=1&79904768=1&79921152=1&79937536=1&79953920=1&79970304=1&79986688=1&80003072=1&80019456=1&80035840=1&80052224=1&80068608=1&80084992=1&80101376=1&80117760=1&80134144=1&80150528=1&80166912=1&80183296=1&80199680=1&80216064=1&80232448=1&80248832=1&80265216=1&80281600=1&80297984=1&80314368=1&80330752=1&80347136=1&80363520=1&80379904=1&80396288=1&80412672=1&80429056=1&80445440=1&80461824=1&80478208=1&80494592=1&80510976=1&80527360=1&80543744=1&80560128=1&80576512=1&80592896=1&80609280=1&80625664=1&80642048=1&80658432=1&80674816=1&80691200=1&80707584=1&80723968=1&80740352=1&80756736=1&80773120=1&80789504=1&80805888=1&80822272=1&80838656=1&80855040=1&80871424=1&80887808=1&80904192=1&80920576=1&80936960=1&80953344=1&80969728=1&80986112=1&81002496=1&81018880=1&81035264=1&81051648=1&81068032=1&81084416=1&81100800=1&81117184=1&81133568=1&81149952=1&81166336=1&81182720=1&81199104=1&81215488=1&81231872=1&81248256=1&81264640=1&81281024=1&81297408=1&81313792=1&81330176=1&81346560=1&81362944=1&81379328=1&81395712=1&81412096=1&81428480=1&81444864=1&81461248=1&81477632=1&81494016=1&81510400=1&81526784=1&81543168=1&81559552=1&81575936=1&81592320=1&81608704=1&81625088=1&81641472=1&81657856=1&81674240=1&81690624=1&81707008=1&81723392=1&81739776=1&81756160=1&81772544=1&81788928=1&81805312=1&81821696=1&81838080=1&81854464=1&81870848=1&81887232=1&81903616=1&81920000=1&81936384=1&81952768=1&81969152=1&81985536=1&82001920=1&82018304=1&82034688=1&82051072=1&82067456=1&82083840=1&82100224=1&82116608=1&82132992=1&82149376=1&82165760=1&82182144=1&82198528=1&82214912=1&82231296=1&82247680=1&82264064=1&82280448=1&82296832=1&82313216=1&82329600=1&82345984=1&82362368=1&82378752=1&82395136=1&82411520=1&82427904=1&82444288=1&82460672=1&82477056=1&82493440=1&82509824=1&82526208=1&82542592=1&82558976=1&82575360=1&82591744=1&82608128=1&82624512=1&82640896=1&82657280=1&82673664=1&82690048=1&82706432=1&82722816=1&82739200=1&82755584=1&82771968=1&82788352=1&82804736=1&82821120=1&82837504=1&82853888=1&82870272=1&82886656=1&82903040=1&82919424=1&82935808=1&82952192=1&82968576=1&82984960=1&83001344=1&83017728=1&83034112=1&83050496=1&83066880=1&83083264=1&83099648=1&83116032=1&83132416=1&83148800=1&83165184=1&83181568=1&83197952=1&83214336=1&83230720=1&83247104=1&83263488=1&83279872=1&83296256=1&83312640=1&83329024=1&83345408=1&83361792=1&83378176=1&83394560=1&83410944=1&83427328=1&83443712=1&83460096=1&83476480=1&83492864=1&83509248=1&83525632=1&83542016=1&83558400=1&83574784=1&83591168=1&83607552=1&83623936=1&83640320=1&83656704=1&83673088=1&83689472=1&83705856=1&83722240=1&83738624=1&83755008=1&83771392=1&83787776=1&83804160=1&83820544=1&83836928=1&83853312=1&83869696=1&83886080=1&83902464=1&83918848=1&83935232=1&83951616=1&83968000=1&83984384=1&84000768=1&84017152=1&84033536=1&84049920=1&84066304=1&84082688=1&84099072=1&84115456=1&84131840=1&84148224=1&84164608=1&84180992=1&84197376=1&84213760=1&84230144=1&84246528=1&84262912=1&84279296=1&84295680=1&84312064=1&84328448=1&84344832=1&84361216=1&84377600=1&84393984=1&84410368=1&84426752=1&84443136=1&84459520=1&84475904=1&84492288=1&84508672=1&84525056=1&84541440=1&84557824=1&84574208=1&84590592=1&84606976=1&84623360=1&84639744=1&84656128=1&84672512=1&84688896=1&84705280=1&84721664=1&84738048=1&84754432=1&84770816=1&84787200=1&84803584=1&84819968=1&84836352=1&84852736=1&84869120=1&84885504=1&84901888=1&84918272=1&84934656=1&84951040=1&84967424=1&84983808=1&85000192=1&85016576=1&85032960=1&85049344=1&85065728=1&85082112=1&85098496=1&85114880=1&85131264=1&85147648=1&85164032=1&85180416=1&85196800=1&85213184=1&85229568=1&85245952=1&85262336=1&85278720=1&85295104=1&85311488=1&85327872=1&85344256=1&85360640=1&85377024=1&85393408=1&85409792=1&85426176=1&85442560=1&85458944=1&85475328=1&85491712=1&85508096=1&85524480=1&85540864=1&85557248=1&85573632=1&85590016=1&85606400=1&85622784=1&85639168=1&85655552=1&85671936=1&85688320=1&85704704=1&85721088=1&85737472=1&85753856=1&85770240=1&85786624=1&85803008=1&85819392=1&85835776=1&85852160=1&85868544=1&85884928=1&85901312=1&85917696=1&85934080=1&85950464=1&85966848=1&85983232=1&85999616=1&86016000=1&86032384=1&86048768=1&86065152=1&86081536=1&86097920=1&86114304=1&86130688=1&86147072=1&86163456=1&86179840=1&86196224=1&86212608=1&86228992=1&86245376=1&86261760=1&86278144=1&86294528=1&86310912=1&86327296=1&86343680=1&86360064=1&86376448=1&86392832=1&86409216=1&86425600=1&86441984=1&86458368=1&86474752=1&86491136=1&86507520=1&86523904=1&86540288=1&86556672=1&86573056=1&86589440=1&86605824=1&86622208=1&86638592=1&86654976=1&86671360=1&86687744=1&86704128=1&86720512=1&86736896=1&86753280=1&86769664=1&86786048=1&86802432=1&86818816=1&86835200=1&86851584=1&86867968=1&86884352=1&86900736=1&86917120=1&86933504=1&86949888=1&86966272=1&86982656=1&86999040=1&87015424=1&87031808=1&87048192=1&87064576=1&87080960=1&87097344=1&87113728=1&87130112=1&87146496=1&87162880=1&87179264=1&87195648=1&87212032=1&87228416=1&87244800=1&87261184=1&87277568=1&87293952=1&87310336=1&87326720=1&87343104=1&87359488=1&87375872=1&87392256=1&87408640=1&87425024=1&87441408=1&87457792=1&87474176=1&87490560=1&87506944=1&87523328=1&87539712=1&87556096=1&87572480=1&87588864=1&87605248=1&87621632=1&87638016=1&87654400=1&87670784=1&87687168=1&87703552=1&87719936=1&87736320=1&87752704=1&87769088=1&87785472=1&87801856=1&87818240=1&87834624=1&87851008=1&87867392=1&87883776=1&87900160=1&87916544=1&87932928=1&87949312=1&87965696=1&87982080=1&87998464=1&88014848=1&88031232=1&88047616=1&88064000=1&88080384=1&88096768=1&88113152=1&88129536=1&88145920=1&88162304=1&88178688=1&88195072=1&88211456=1&88227840=1&88244224=1&88260608=1&88276992=1&88293376=1&88309760=1&88326144=1&88342528=1&88358912=1&88375296=1&88391680=1&88408064=1&88424448=1&88440832=1&88457216=1&88473600=1&88489984=1&88506368=1&88522752=1&88539136=1&88555520=1&88571904=1&88588288=1&88604672=1&88621056=1&88637440=1&88653824=1&88670208=1&88686592=1&88702976=1&88719360=1&88735744=1&88752128=1&88768512=1&88784896=1&88801280=1&88817664=1&88834048=1&88850432=1&88866816=1&88883200=1&88899584=1&88915968=1&88932352=1&88948736=1&88965120=1&88981504=1&88997888=1&89014272=1&89030656=1&89047040=1&89063424=1&89079808=1&89096192=1&89112576=1&89128960=1&89145344=1&89161728=1&89178112=1&89194496=1&89210880=1&89227264=1&89243648=1&89260032=1&89276416=1&89292800=1&89309184=1&89325568=1&89341952=1&89358336=1&89374720=1&89391104=1&89407488=1&89423872=1&89440256=1&89456640=1&89473024=1&89489408=1&89505792=1&89522176=1&89538560=1&89554944=1&89571328=1&89587712=1&89604096=1&89620480=1&89636864=1&89653248=1&89669632=1&89686016=1&89702400=1&89718784=1&89735168=1&89751552=1&89767936=1&89784320=1&89800704=1&89817088=1&89833472=1&89849856=1&89866240=1&89882624=1&89899008=1&89915392=1&89931776=1&89948160=1&89964544=1&89980928=1&89997312=1&90013696=1&90030080=1&90046464=1&90062848=1&90079232=1&90095616=1&90112000=1&90128384=1&90144768=1&90161152=1&90177536=1&90193920=1&90210304=1&90226688=1&90243072=1&90259456=1&90275840=1&90292224=1&90308608=1&90324992=1&90341376=1&90357760=1&90374144=1&90390528=1&90406912=1&90423296=1&90439680=1&90456064=1&90472448=1&90488832=1&90505216=1&90521600=1&90537984=1&90554368=1&90570752=1&90587136=1&90603520=1&90619904=1&90636288=1&90652672=1&90669056=1&90685440=1&90701824=1&90718208=1&90734592=1&90750976=1&90767360=1&90783744=1&90800128=1&90816512=1&90832896=1&90849280=1&90865664=1&90882048=1&90898432=1&90914816=1&90931200=1&90947584=1&90963968=1&90980352=1&90996736=1&91013120=1&91029504=1&91045888=1&91062272=1&91078656=1&91095040=1&91111424=1&91127808=1&91144192=1&91160576=1&91176960=1&91193344=1&91209728=1&91226112=1&91242496=1&91258880=1&91275264=1&91291648=1&91308032=1&91324416=1&91340800=1&91357184=1&91373568=1&91389952=1&91406336=1&91422720=1&91439104=1&91455488=1&91471872=1&91488256=1&91504640=1&91521024=1&91537408=1&91553792=1&91570176=1&91586560=1&91602944=1&91619328=1&91635712=1&91652096=1&91668480=1&91684864=1&91701248=1&91717632=1&91734016=1&91750400=1&91766784=1&91783168=1&91799552=1&91815936=1&91832320=1&91848704=1&91865088=1&91881472=1&91897856=1&91914240=1&91930624=1&91947008=1&91963392=1&91979776=1&91996160=1&92012544=1&92028928=1&92045312=1&92061696=1&92078080=1&92094464=1&92110848=1&92127232=1&92143616=1&92160000=1&92176384=1&92192768=1&92209152=1&92225536=1&92241920=1&92258304=1&92274688=1&92291072=1&92307456=1&92323840=1&92340224=1&92356608=1&92372992=1&92389376=1&92405760=1&92422144=1&92438528=1&92454912=1&92471296=1&92487680=1&92504064=1&92520448=1&92536832=1&92553216=1&92569600=1&92585984=1&92602368=1&92618752=1&92635136=1&92651520=1&92667904=1&92684288=1&92700672=1&92717056=1&92733440=1&92749824=1&92766208=1&92782592=1&92798976=1&92815360=1&92831744=1&92848128=1&92864512=1&92880896=1&92897280=1&92913664=1&92930048=1&92946432=1&92962816=1&92979200=1&92995584=1&93011968=1&93028352=1&93044736=1&93061120=1&93077504=1&93093888=1&93110272=1&93126656=1&93143040=1&93159424=1&93175808=1&93192192=1&93208576=1&93224960=1&93241344=1&93257728=1&93274112=1&93290496=1&93306880=1&93323264=1&93339648=1&93356032=1&93372416=1&93388800=1&93405184=1&93421568=1&93437952=1&93454336=1&93470720=1&93487104=1&93503488=1&93519872=1&93536256=1&93552640=1&93569024=1&93585408=1&93601792=1&93618176=1&93634560=1&93650944=1&93667328=1&93683712=1&93700096=1&93716480=1&93732864=1&93749248=1&93765632=1&93782016=1&93798400=1&93814784=1&93831168=1&93847552=1&93863936=1&93880320=1&93896704=1&93913088=1&93929472=1&93945856=1&93962240=1&93978624=1&93995008=1&94011392=1&94027776=1&94044160=1&94060544=1&94076928=1&94093312=1&94109696=1&94126080=1&94142464=1&94158848=1&94175232=1&94191616=1&94208000=1&94224384=1&94240768=1&94257152=1&94273536=1&94289920=1&94306304=1&94322688=1&94339072=1&94355456=1&94371840=1&94388224=1&94404608=1&94420992=1&94437376=1&94453760=1&94470144=1&94486528=1&94502912=1&94519296=1&94535680=1&94552064=1&94568448=1&94584832=1&94601216=1&94617600=1&94633984=1&94650368=1&94666752=1&94683136=1&94699520=1&94715904=1&94732288=1&94748672=1&94765056=1&94781440=1&94797824=1&94814208=1&94830592=1&94846976=1&94863360=1&94879744=1&94896128=1&94912512=1&94928896=1&94945280=1&94961664=1&94978048=1&94994432=1&95010816=1&95027200=1&95043584=1&95059968=1&95076352=1&95092736=1&95109120=1&95125504=1&95141888=1&95158272=1&95174656=1&95191040=1&95207424=1&95223808=1&95240192=1&95256576=1&95272960=1&95289344=1&95305728=1&95322112=1&95338496=1&95354880=1&95371264=1&95387648=1&95404032=1&95420416=1&95436800=1&95453184=1&95469568=1&95485952=1&95502336=1&95518720=1&95535104=1&95551488=1&95567872=1&95584256=1&95600640=1&95617024=1&95633408=1&95649792=1&95666176=1&95682560=1&95698944=1&95715328=1&95731712=1&95748096=1&95764480=1&95780864=1&95797248=1&95813632=1&95830016=1&95846400=1&95862784=1&95879168=1&95895552=1&95911936=1&95928320=1&95944704=1&95961088=1&95977472=1&95993856=1&96010240=1&96026624=1&96043008=1&96059392=1&96075776=1&96092160=1&96108544=1&96124928=1&96141312=1&96157696=1&96174080=1&96190464=1&96206848=1&96223232=1&96239616=1&96256000=1&96272384=1&96288768=1&96305152=1&96321536=1&96337920=1&96354304=1&96370688=1&96387072=1&96403456=1&96419840=1&96436224=1&96452608=1&96468992=1&96485376=1&96501760=1&96518144=1&96534528=1&96550912=1&96567296=1&96583680=1&96600064=1&96616448=1&96632832=1&96649216=1&96665600=1&96681984=1&96698368=1&96714752=1&96731136=1&96747520=1&96763904=1&96780288=1&96796672=1&96813056=1&96829440=1&96845824=1&96862208=1&96878592=1&96894976=1&96911360=1&96927744=1&96944128=1&96960512=1&96976896=1&96993280=1&97009664=1&97026048=1&97042432=1&97058816=1&97075200=1&97091584=1&97107968=1&97124352=1&97140736=1&97157120=1&97173504=1&97189888=1&97206272=1&97222656=1&97239040=1&97255424=1&97271808=1&97288192=1&97304576=1&97320960=1&97337344=1&97353728=1&97370112=1&97386496=1&97402880=1&97419264=1&97435648=1&97452032=1&97468416=1&97484800=1&97501184=1&97517568=1&97533952=1&97550336=1&97566720=1&97583104=1&97599488=1&97615872=1&97632256=1&97648640=1&97665024=1&97681408=1&97697792=1&97714176=1&97730560=1&97746944=1&97763328=1&97779712=1&97796096=1&97812480=1&97828864=1&97845248=1&97861632=1&97878016=1&97894400=1&97910784=1&97927168=1&97943552=1&97959936=1&97976320=1&97992704=1&98009088=1&98025472=1&98041856=1&98058240=1&98074624=1&98091008=1&98107392=1&98123776=1&98140160=1&98156544=1&98172928=1&98189312=1&98205696=1&98222080=1&98238464=1&98254848=1&98271232=1&98287616=1&98304000=1&98320384=1&98336768=1&98353152=1&98369536=1&98385920=1&98402304=1&98418688=1&98435072=1&98451456=1&98467840=1&98484224=1&98500608=1&98516992=1&98533376=1&98549760=1&98566144=1&98582528=1&98598912=1&98615296=1&98631680=1&98648064=1&98664448=1&98680832=1&98697216=1&98713600=1&98729984=1&98746368=1&98762752=1&98779136=1&98795520=1&98811904=1&98828288=1&98844672=1&98861056=1&98877440=1&98893824=1&98910208=1&98926592=1&98942976=1&98959360=1&98975744=1&98992128=1&99008512=1&99024896=1&99041280=1&99057664=1&99074048=1&99090432=1&99106816=1&99123200=1&99139584=1&99155968=1&99172352=1&99188736=1&99205120=1&99221504=1&99237888=1&99254272=1&99270656=1&99287040=1&99303424=1&99319808=1&99336192=1&99352576=1&99368960=1&99385344=1&99401728=1&99418112=1&99434496=1&99450880=1&99467264=1&99483648=1&99500032=1&99516416=1&99532800=1&99549184=1&99565568=1&99581952=1&99598336=1&99614720=1&99631104=1&99647488=1&99663872=1&99680256=1&99696640=1&99713024=1&99729408=1&99745792=1&99762176=1&99778560=1&99794944=1&99811328=1&99827712=1&99844096=1&99860480=1&99876864=1&99893248=1&99909632=1&99926016=1&99942400=1&99958784=1&99975168=1&99991552=1&100007936=1&100024320=1&100040704=1&100057088=1&100073472=1&100089856=1&100106240=1&100122624=1&100139008=1&100155392=1&100171776=1&100188160=1&100204544=1&100220928=1&100237312=1&100253696=1&100270080=1&100286464=1&100302848=1&100319232=1&100335616=1&100352000=1&100368384=1&100384768=1&100401152=1&100417536=1&100433920=1&100450304=1&100466688=1&100483072=1&100499456=1&100515840=1&100532224=1&100548608=1&100564992=1&100581376=1&100597760=1&100614144=1&100630528=1&100646912=1&100663296=1&100679680=1&100696064=1&100712448=1&100728832=1&100745216=1&100761600=1&100777984=1&100794368=1&100810752=1&100827136=1&100843520=1&100859904=1&100876288=1&100892672=1&100909056=1&100925440=1&100941824=1&100958208=1&100974592=1&100990976=1&101007360=1&101023744=1&101040128=1&101056512=1&101072896=1&101089280=1&101105664=1&101122048=1&101138432=1&101154816=1&101171200=1&101187584=1&101203968=1&101220352=1&101236736=1&101253120=1&101269504=1&101285888=1&101302272=1&101318656=1&101335040=1&101351424=1&101367808=1&101384192=1&101400576=1&101416960=1&101433344=1&101449728=1&101466112=1&101482496=1&101498880=1&101515264=1&101531648=1&101548032=1&101564416=1&101580800=1&101597184=1&101613568=1&101629952=1&101646336=1&101662720=1&101679104=1&101695488=1&101711872=1&101728256=1&101744640=1&101761024=1&101777408=1&101793792=1&101810176=1&101826560=1&101842944=1&101859328=1&101875712=1&101892096=1&101908480=1&101924864=1&101941248=1&101957632=1&101974016=1&101990400=1&102006784=1&102023168=1&102039552=1&102055936=1&102072320=1&102088704=1&102105088=1&102121472=1&102137856=1&102154240=1&102170624=1&102187008=1&102203392=1&102219776=1&102236160=1&102252544=1&102268928=1&102285312=1&102301696=1&102318080=1&102334464=1&102350848=1&102367232=1&102383616=1&102400000=1&102416384=1&102432768=1&102449152=1&102465536=1&102481920=1&102498304=1&102514688=1&102531072=1&102547456=1&102563840=1&102580224=1&102596608=1&102612992=1&102629376=1&102645760=1&102662144=1&102678528=1&102694912=1&102711296=1&102727680=1&102744064=1&102760448=1&102776832=1&102793216=1&102809600=1&102825984=1&102842368=1&102858752=1&102875136=1&102891520=1&102907904=1&102924288=1&102940672=1&102957056=1&102973440=1&102989824=1&103006208=1&103022592=1&103038976=1&103055360=1&103071744=1&103088128=1&103104512=1&103120896=1&103137280=1&103153664=1&103170048=1&103186432=1&103202816=1&103219200=1&103235584=1&103251968=1&103268352=1&103284736=1&103301120=1&103317504=1&103333888=1&103350272=1&103366656=1&103383040=1&103399424=1&103415808=1&103432192=1&103448576=1&103464960=1&103481344=1&103497728=1&103514112=1&103530496=1&103546880=1&103563264=1&103579648=1&103596032=1&103612416=1&103628800=1&103645184=1&103661568=1&103677952=1&103694336=1&103710720=1&103727104=1&103743488=1&103759872=1&103776256=1&103792640=1&103809024=1&103825408=1&103841792=1&103858176=1&103874560=1&103890944=1&103907328=1&103923712=1&103940096=1&103956480=1&103972864=1&103989248=1&104005632=1&104022016=1&104038400=1&104054784=1&104071168=1&104087552=1&104103936=1&104120320=1&104136704=1&104153088=1&104169472=1&104185856=1&104202240=1&104218624=1&104235008=1&104251392=1&104267776=1&104284160=1&104300544=1&104316928=1&104333312=1&104349696=1&104366080=1&104382464=1&104398848=1&104415232=1&104431616=1&104448000=1&104464384=1&104480768=1&104497152=1&104513536=1&104529920=1&104546304=1&104562688=1&104579072=1&104595456=1&104611840=1&104628224=1&104644608=1&104660992=1&104677376=1&104693760=1&104710144=1&104726528=1&104742912=1&104759296=1&104775680=1&104792064=1&104808448=1&104824832=1&104841216=1&104857600=1&104873984=1&104890368=1&104906752=1&104923136=1&104939520=1&104955904=1&104972288=1&104988672=1&105005056=1&105021440=1&105037824=1&105054208=1&105070592=1&105086976=1&105103360=1&105119744=1&105136128=1&105152512=1&105168896=1&105185280=1&105201664=1&105218048=1&105234432=1&105250816=1&105267200=1&105283584=1&105299968=1&105316352=1&105332736=1&105349120=1&105365504=1&105381888=1&105398272=1&105414656=1&105431040=1&105447424=1&105463808=1&105480192=1&105496576=1&105512960=1&105529344=1&105545728=1&105562112=1&105578496=1&105594880=1&105611264=1&105627648=1&105644032=1&105660416=1&105676800=1&105693184=1&105709568=1&105725952=1&105742336=1&105758720=1&105775104=1&105791488=1&105807872=1&105824256=1&105840640=1&105857024=1&105873408=1&105889792=1&105906176=1&105922560=1&105938944=1&105955328=1&105971712=1&105988096=1&106004480=1&106020864=1&106037248=1&106053632=1&106070016=1&106086400=1&106102784=1&106119168=1&106135552=1&106151936=1&106168320=1&106184704=1&106201088=1&106217472=1&106233856=1&106250240=1&106266624=1&106283008=1&106299392=1&106315776=1&106332160=1&106348544=1&106364928=1&106381312=1&106397696=1&106414080=1&106430464=1&106446848=1&106463232=1&106479616=1&106496000=1&106512384=1&106528768=1&106545152=1&106561536=1&106577920=1&106594304=1&106610688=1&106627072=1&106643456=1&106659840=1&106676224=1&106692608=1&106708992=1&106725376=1&106741760=1&106758144=1&106774528=1&106790912=1&106807296=1&106823680=1&106840064=1&106856448=1&106872832=1&106889216=1&106905600=1&106921984=1&106938368=1&106954752=1&106971136=1&106987520=1&107003904=1&107020288=1&107036672=1&107053056=1&107069440=1&107085824=1&107102208=1&107118592=1&107134976=1&107151360=1&107167744=1&107184128=1&107200512=1&107216896=1&107233280=1&107249664=1&107266048=1&107282432=1&107298816=1&107315200=1&107331584=1&107347968=1&107364352=1&107380736=1&107397120=1&107413504=1&107429888=1&107446272=1&107462656=1&107479040=1&107495424=1&107511808=1&107528192=1&107544576=1&107560960=1&107577344=1&107593728=1&107610112=1&107626496=1&107642880=1&107659264=1&107675648=1&107692032=1&107708416=1&107724800=1&107741184=1&107757568=1&107773952=1&107790336=1&107806720=1&107823104=1&107839488=1&107855872=1&107872256=1&107888640=1&107905024=1&107921408=1&107937792=1&107954176=1&107970560=1&107986944=1&108003328=1&108019712=1&108036096=1&108052480=1&108068864=1&108085248=1&108101632=1&108118016=1&108134400=1&108150784=1&108167168=1&108183552=1&108199936=1&108216320=1&108232704=1&108249088=1&108265472=1&108281856=1&108298240=1&108314624=1&108331008=1&108347392=1&108363776=1&108380160=1&108396544=1&108412928=1&108429312=1&108445696=1&108462080=1&108478464=1&108494848=1&108511232=1&108527616=1&108544000=1&108560384=1&108576768=1&108593152=1&108609536=1&108625920=1&108642304=1&108658688=1&108675072=1&108691456=1&108707840=1&108724224=1&108740608=1&108756992=1&108773376=1&108789760=1&108806144=1&108822528=1&108838912=1&108855296=1&108871680=1&108888064=1&108904448=1&108920832=1&108937216=1&108953600=1&108969984=1&108986368=1&109002752=1&109019136=1&109035520=1&109051904=1&109068288=1&109084672=1&109101056=1&109117440=1&109133824=1&109150208=1&109166592=1&109182976=1&109199360=1&109215744=1&109232128=1&109248512=1&109264896=1&109281280=1&109297664=1&109314048=1&109330432=1&109346816=1&109363200=1&109379584=1&109395968=1&109412352=1&109428736=1&109445120=1&109461504=1&109477888=1&109494272=1&109510656=1&109527040=1&109543424=1&109559808=1&109576192=1&109592576=1&109608960=1&109625344=1&109641728=1&109658112=1&109674496=1&109690880=1&109707264=1&109723648=1&109740032=1&109756416=1&109772800=1&109789184=1&109805568=1&109821952=1&109838336=1&109854720=1&109871104=1&109887488=1&109903872=1&109920256=1&109936640=1&109953024=1&109969408=1&109985792=1&110002176=1&110018560=1&110034944=1&110051328=1&110067712=1&110084096=1&110100480=1&110116864=1&110133248=1&110149632=1&110166016=1&110182400=1&110198784=1&110215168=1&110231552=1&110247936=1&110264320=1&110280704=1&110297088=1&110313472=1&110329856=1&110346240=1&110362624=1&110379008=1&110395392=1&110411776=1&110428160=1&110444544=1&110460928=1&110477312=1&110493696=1&110510080=1&110526464=1&110542848=1&110559232=1&110575616=1&110592000=1&110608384=1&110624768=1&110641152=1&110657536=1&110673920=1&110690304=1&110706688=1&110723072=1&110739456=1&110755840=1&110772224=1&110788608=1&110804992=1&110821376=1&110837760=1&110854144=1&110870528=1&110886912=1&110903296=1&110919680=1&110936064=1&110952448=1&110968832=1&110985216=1&111001600=1&111017984=1&111034368=1&111050752=1&111067136=1&111083520=1&111099904=1&111116288=1&111132672=1&111149056=1&111165440=1&111181824=1&111198208=1&111214592=1&111230976=1&111247360=1&111263744=1&111280128=1&111296512=1&111312896=1&111329280=1&111345664=1&111362048=1&111378432=1&111394816=1&111411200=1&111427584=1&111443968=1&111460352=1&111476736=1&111493120=1&111509504=1&111525888=1&111542272=1&111558656=1&111575040=1&111591424=1&111607808=1&111624192=1&111640576=1&111656960=1&111673344=1&111689728=1&111706112=1&111722496=1&111738880=1&111755264=1&111771648=1&111788032=1&111804416=1&111820800=1&111837184=1&111853568=1&111869952=1&111886336=1&111902720=1&111919104=1&111935488=1&111951872=1&111968256=1&111984640=1&112001024=1&112017408=1&112033792=1&112050176=1&112066560=1&112082944=1&112099328=1&112115712=1&112132096=1&112148480=1&112164864=1&112181248=1&112197632=1&112214016=1&112230400=1&112246784=1&112263168=1&112279552=1&112295936=1&112312320=1&112328704=1&112345088=1&112361472=1&112377856=1&112394240=1&112410624=1&112427008=1&112443392=1&112459776=1&112476160=1&112492544=1&112508928=1&112525312=1&112541696=1&112558080=1&112574464=1&112590848=1&112607232=1&112623616=1&112640000=1&112656384=1&112672768=1&112689152=1&112705536=1&112721920=1&112738304=1&112754688=1&112771072=1&112787456=1&112803840=1&112820224=1&112836608=1&112852992=1&112869376=1&112885760=1&112902144=1&112918528=1&112934912=1&112951296=1&112967680=1&112984064=1&113000448=1&113016832=1&113033216=1&113049600=1&113065984=1&113082368=1&113098752=1&113115136=1&113131520=1&113147904=1&113164288=1&113180672=1&113197056=1&113213440=1&113229824=1&113246208=1&113262592=1&113278976=1&113295360=1&113311744=1&113328128=1&113344512=1&113360896=1&113377280=1&113393664=1&113410048=1&113426432=1&113442816=1&113459200=1&113475584=1&113491968=1&113508352=1&113524736=1&113541120=1&113557504=1&113573888=1&113590272=1&113606656=1&113623040=1&113639424=1&113655808=1&113672192=1&113688576=1&113704960=1&113721344=1&113737728=1&113754112=1&113770496=1&113786880=1&113803264=1&113819648=1&113836032=1&113852416=1&113868800=1&113885184=1&113901568=1&113917952=1&113934336=1&113950720=1&113967104=1&113983488=1&113999872=1&114016256=1&114032640=1&114049024=1&114065408=1&114081792=1&114098176=1&114114560=1&114130944=1&114147328=1&114163712=1&114180096=1&114196480=1&114212864=1&114229248=1&114245632=1&114262016=1&114278400=1&114294784=1&114311168=1&114327552=1&114343936=1&114360320=1&114376704=1&114393088=1&114409472=1&114425856=1&114442240=1&114458624=1&114475008=1&114491392=1&114507776=1&114524160=1&114540544=1&114556928=1&114573312=1&114589696=1&114606080=1&114622464=1&114638848=1&114655232=1&114671616=1&114688000=1&114704384=1&114720768=1&114737152=1&114753536=1&114769920=1&114786304=1&114802688=1&114819072=1&114835456=1&114851840=1&114868224=1&114884608=1&114900992=1&114917376=1&114933760=1&114950144=1&114966528=1&114982912=1&114999296=1&115015680=1&115032064=1&115048448=1&115064832=1&115081216=1&115097600=1&115113984=1&115130368=1&115146752=1&115163136=1&115179520=1&115195904=1&115212288=1&115228672=1&115245056=1&115261440=1&115277824=1&115294208=1&115310592=1&115326976=1&115343360=1&115359744=1&115376128=1&115392512=1&115408896=1&115425280=1&115441664=1&115458048=1&115474432=1&115490816=1&115507200=1&115523584=1&115539968=1&115556352=1&115572736=1&115589120=1&115605504=1&115621888=1&115638272=1&115654656=1&115671040=1&115687424=1&115703808=1&115720192=1&115736576=1&115752960=1&115769344=1&115785728=1&115802112=1&115818496=1&115834880=1&115851264=1&115867648=1&115884032=1&115900416=1&115916800=1&115933184=1&115949568=1&115965952=1&115982336=1&115998720=1&116015104=1&116031488=1&116047872=1&116064256=1&116080640=1&116097024=1&116113408=1&116129792=1&116146176=1&116162560=1&116178944=1&116195328=1&116211712=1&116228096=1&116244480=1&116260864=1&116277248=1&116293632=1&116310016=1&116326400=1&116342784=1&116359168=1&116375552=1&116391936=1&116408320=1&116424704=1&116441088=1&116457472=1&116473856=1&116490240=1&116506624=1&116523008=1&116539392=1&116555776=1&116572160=1&116588544=1&116604928=1&116621312=1&116637696=1&116654080=1&116670464=1&116686848=1&116703232=1&116719616=1&116736000=1&116752384=1&116768768=1&116785152=1&116801536=1&116817920=1&116834304=1&116850688=1&116867072=1&116883456=1&116899840=1&116916224=1&116932608=1&116948992=1&116965376=1&116981760=1&116998144=1&117014528=1&117030912=1&117047296=1&117063680=1&117080064=1&117096448=1&117112832=1&117129216=1&117145600=1&117161984=1&117178368=1&117194752=1&117211136=1&117227520=1&117243904=1&117260288=1&117276672=1&117293056=1&117309440=1&117325824=1&117342208=1&117358592=1&117374976=1&117391360=1&117407744=1&117424128=1&117440512=1&117456896=1&117473280=1&117489664=1&117506048=1&117522432=1&117538816=1&117555200=1&117571584=1&117587968=1&117604352=1&117620736=1&117637120=1&117653504=1&117669888=1&117686272=1&117702656=1&117719040=1&117735424=1&117751808=1&117768192=1&117784576=1&117800960=1&117817344=1&117833728=1&117850112=1&117866496=1&117882880=1&117899264=1&117915648=1&117932032=1&117948416=1&117964800=1&117981184=1&117997568=1&118013952=1&118030336=1&118046720=1&118063104=1&118079488=1&118095872=1&118112256=1&118128640=1&118145024=1&118161408=1&118177792=1&118194176=1&118210560=1&118226944=1&118243328=1&118259712=1&118276096=1&118292480=1&118308864=1&118325248=1&118341632=1&118358016=1&118374400=1&118390784=1&118407168=1&118423552=1&118439936=1&118456320=1&118472704=1&118489088=1&118505472=1&118521856=1&118538240=1&118554624=1&118571008=1&118587392=1&118603776=1&118620160=1&118636544=1&118652928=1&118669312=1&118685696=1&118702080=1&118718464=1&118734848=1&118751232=1&118767616=1&118784000=1&118800384=1&118816768=1&118833152=1&118849536=1&118865920=1&118882304=1&118898688=1&118915072=1&118931456=1&118947840=1&118964224=1&118980608=1&118996992=1&119013376=1&119029760=1&119046144=1&119062528=1&119078912=1&119095296=1&119111680=1&119128064=1&119144448=1&119160832=1&119177216=1&119193600=1&119209984=1&119226368=1&119242752=1&119259136=1&119275520=1&119291904=1&119308288=1&119324672=1&119341056=1&119357440=1&119373824=1&119390208=1&119406592=1&119422976=1&119439360=1&119455744=1&119472128=1&119488512=1&119504896=1&119521280=1&119537664=1&119554048=1&119570432=1&119586816=1&119603200=1&119619584=1&119635968=1&119652352=1&119668736=1&119685120=1&119701504=1&119717888=1&119734272=1&119750656=1&119767040=1&119783424=1&119799808=1&119816192=1&119832576=1&119848960=1&119865344=1&119881728=1&119898112=1&119914496=1&119930880=1&119947264=1&119963648=1&119980032=1&119996416=1&120012800=1&120029184=1&120045568=1&120061952=1&120078336=1&120094720=1&120111104=1&120127488=1&120143872=1&120160256=1&120176640=1&120193024=1&120209408=1&120225792=1&120242176=1&120258560=1&120274944=1&120291328=1&120307712=1&120324096=1&120340480=1&120356864=1&120373248=1&120389632=1&120406016=1&120422400=1&120438784=1&120455168=1&120471552=1&120487936=1&120504320=1&120520704=1&120537088=1&120553472=1&120569856=1&120586240=1&120602624=1&120619008=1&120635392=1&120651776=1&120668160=1&120684544=1&120700928=1&120717312=1&120733696=1&120750080=1&120766464=1&120782848=1&120799232=1&120815616=1&120832000=1&120848384=1&120864768=1&120881152=1&120897536=1&120913920=1&120930304=1&120946688=1&120963072=1&120979456=1&120995840=1&121012224=1&121028608=1&121044992=1&121061376=1&121077760=1&121094144=1&121110528=1&121126912=1&121143296=1&121159680=1&121176064=1&121192448=1&121208832=1&121225216=1&121241600=1&121257984=1&121274368=1&121290752=1&121307136=1&121323520=1&121339904=1&121356288=1&121372672=1&121389056=1&121405440=1&121421824=1&121438208=1&121454592=1&121470976=1&121487360=1&121503744=1&121520128=1&121536512=1&121552896=1&121569280=1&121585664=1&121602048=1&121618432=1&121634816=1&121651200=1&121667584=1&121683968=1&121700352=1&121716736=1&121733120=1&121749504=1&121765888=1&121782272=1&121798656=1&121815040=1&121831424=1&121847808=1&121864192=1&121880576=1&121896960=1&121913344=1&121929728=1&121946112=1&121962496=1&121978880=1&121995264=1&122011648=1&122028032=1&122044416=1&122060800=1&122077184=1&122093568=1&122109952=1&122126336=1&122142720=1&122159104=1&122175488=1&122191872=1&122208256=1&122224640=1&122241024=1&122257408=1&122273792=1&122290176=1&122306560=1&122322944=1&122339328=1&122355712=1&122372096=1&122388480=1&122404864=1&122421248=1&122437632=1&122454016=1&122470400=1&122486784=1&122503168=1&122519552=1&122535936=1&122552320=1&122568704=1&122585088=1&122601472=1&122617856=1&122634240=1&122650624=1&122667008=1&122683392=1&122699776=1&122716160=1&122732544=1&122748928=1&122765312=1&122781696=1&122798080=1&122814464=1&122830848=1&122847232=1&122863616=1&122880000=1&122896384=1&122912768=1&122929152=1&122945536=1&122961920=1&122978304=1&122994688=1&123011072=1&123027456=1&123043840=1&123060224=1&123076608=1&123092992=1&123109376=1&123125760=1&123142144=1&123158528=1&123174912=1&123191296=1&123207680=1&123224064=1&123240448=1&123256832=1&123273216=1&123289600=1&123305984=1&123322368=1&123338752=1&123355136=1&123371520=1&123387904=1&123404288=1&123420672=1&123437056=1&123453440=1&123469824=1&123486208=1&123502592=1&123518976=1&123535360=1&123551744=1&123568128=1&123584512=1&123600896=1&123617280=1&123633664=1&123650048=1&123666432=1&123682816=1&123699200=1&123715584=1&123731968=1&123748352=1&123764736=1&123781120=1&123797504=1&123813888=1&123830272=1&123846656=1&123863040=1&123879424=1&123895808=1&123912192=1&123928576=1&123944960=1&123961344=1&123977728=1&123994112=1&124010496=1&124026880=1&124043264=1&124059648=1&124076032=1&124092416=1&124108800=1&124125184=1&124141568=1&124157952=1&124174336=1&124190720=1&124207104=1&124223488=1&124239872=1&124256256=1&124272640=1&124289024=1&124305408=1&124321792=1&124338176=1&124354560=1&124370944=1&124387328=1&124403712=1&124420096=1&124436480=1&124452864=1&124469248=1&124485632=1&124502016=1&124518400=1&124534784=1&124551168=1&124567552=1&124583936=1&124600320=1&124616704=1&124633088=1&124649472=1&124665856=1&124682240=1&124698624=1&124715008=1&124731392=1&124747776=1&124764160=1&124780544=1&124796928=1&124813312=1&124829696=1&124846080=1&124862464=1&124878848=1&124895232=1&124911616=1&124928000=1&124944384=1&124960768=1&124977152=1&124993536=1&125009920=1&125026304=1&125042688=1&125059072=1&125075456=1&125091840=1&125108224=1&125124608=1&125140992=1&125157376=1&125173760=1&125190144=1&125206528=1&125222912=1&125239296=1&125255680=1&125272064=1&125288448=1&125304832=1&125321216=1&125337600=1&125353984=1&125370368=1&125386752=1&125403136=1&125419520=1&125435904=1&125452288=1&125468672=1&125485056=1&125501440=1&125517824=1&125534208=1&125550592=1&125566976=1&125583360=1&125599744=1&125616128=1&125632512=1&125648896=1&125665280=1&125681664=1&125698048=1&125714432=1&125730816=1&125747200=1&125763584=1&125779968=1&125796352=1&125812736=1&125829120=1&125845504=1&125861888=1&125878272=1&125894656=1&125911040=1&125927424=1&125943808=1&125960192=1&125976576=1&125992960=1&126009344=1&126025728=1&126042112=1&126058496=1&126074880=1&126091264=1&126107648=1&126124032=1&126140416=1&126156800=1&126173184=1&126189568=1&126205952=1&126222336=1&126238720=1&126255104=1&126271488=1&126287872=1&126304256=1&126320640=1&126337024=1&126353408=1&126369792=1&126386176=1&126402560=1&126418944=1&126435328=1&126451712=1&126468096=1&126484480=1&126500864=1&126517248=1&126533632=1&126550016=1&126566400=1&126582784=1&126599168=1&126615552=1&126631936=1&126648320=1&126664704=1&126681088=1&126697472=1&126713856=1&126730240=1&126746624=1&126763008=1&126779392=1&126795776=1&126812160=1&126828544=1&126844928=1&126861312=1&126877696=1&126894080=1&126910464=1&126926848=1&126943232=1&126959616=1&126976000=1&126992384=1&127008768=1&127025152=1&127041536=1&127057920=1&127074304=1&127090688=1&127107072=1&127123456=1&127139840=1&127156224=1&127172608=1&127188992=1&127205376=1&127221760=1&127238144=1&127254528=1&127270912=1&127287296=1&127303680=1&127320064=1&127336448=1&127352832=1&127369216=1&127385600=1&127401984=1&127418368=1&127434752=1&127451136=1&127467520=1&127483904=1&127500288=1&127516672=1&127533056=1&127549440=1&127565824=1&127582208=1&127598592=1&127614976=1&127631360=1&127647744=1&127664128=1&127680512=1&127696896=1&127713280=1&127729664=1&127746048=1&127762432=1&127778816=1&127795200=1&127811584=1&127827968=1&127844352=1&127860736=1&127877120=1&127893504=1&127909888=1&127926272=1&127942656=1&127959040=1&127975424=1&127991808=1&128008192=1&128024576=1&128040960=1&128057344=1&128073728=1&128090112=1&128106496=1&128122880=1&128139264=1&128155648=1&128172032=1&128188416=1&128204800=1&128221184=1&128237568=1&128253952=1&128270336=1&128286720=1&128303104=1&128319488=1&128335872=1&128352256=1&128368640=1&128385024=1&128401408=1&128417792=1&128434176=1&128450560=1&128466944=1&128483328=1&128499712=1&128516096=1&128532480=1&128548864=1&128565248=1&128581632=1&128598016=1&128614400=1&128630784=1&128647168=1&128663552=1&128679936=1&128696320=1&128712704=1&128729088=1&128745472=1&128761856=1&128778240=1&128794624=1&128811008=1&128827392=1&128843776=1&128860160=1&128876544=1&128892928=1&128909312=1&128925696=1&128942080=1&128958464=1&128974848=1&128991232=1&129007616=1&129024000=1&129040384=1&129056768=1&129073152=1&129089536=1&129105920=1&129122304=1&129138688=1&129155072=1&129171456=1&129187840=1&129204224=1&129220608=1&129236992=1&129253376=1&129269760=1&129286144=1&129302528=1&129318912=1&129335296=1&129351680=1&129368064=1&129384448=1&129400832=1&129417216=1&129433600=1&129449984=1&129466368=1&129482752=1&129499136=1&129515520=1&129531904=1&129548288=1&129564672=1&129581056=1&129597440=1&129613824=1&129630208=1&129646592=1&129662976=1&129679360=1&129695744=1&129712128=1&129728512=1&129744896=1&129761280=1&129777664=1&129794048=1&129810432=1&129826816=1&129843200=1&129859584=1&129875968=1&129892352=1&129908736=1&129925120=1&129941504=1&129957888=1&129974272=1&129990656=1&130007040=1&130023424=1&130039808=1&130056192=1&130072576=1&130088960=1&130105344=1&130121728=1&130138112=1&130154496=1&130170880=1&130187264=1&130203648=1&130220032=1&130236416=1&130252800=1&130269184=1&130285568=1&130301952=1&130318336=1&130334720=1&130351104=1&130367488=1&130383872=1&130400256=1&130416640=1&130433024=1&130449408=1&130465792=1&130482176=1&130498560=1&130514944=1&130531328=1&130547712=1&130564096=1&130580480=1&130596864=1&130613248=1&130629632=1&130646016=1&130662400=1&130678784=1&130695168=1&130711552=1&130727936=1&130744320=1&130760704=1&130777088=1&130793472=1&130809856=1&130826240=1&130842624=1&130859008=1&130875392=1&130891776=1&130908160=1&130924544=1&130940928=1&130957312=1&130973696=1&130990080=1&131006464=1&131022848=1&131039232=1&131055616=1&131072000=1&131088384=1&131104768=1&131121152=1&131137536=1&131153920=1&131170304=1&131186688=1&131203072=1&131219456=1&131235840=1&131252224=1&131268608=1&131284992=1&131301376=1&131317760=1&131334144=1&131350528=1&131366912=1&131383296=1&131399680=1&131416064=1&131432448=1&131448832=1&131465216=1&131481600=1&131497984=1&131514368=1&131530752=1&131547136=1&131563520=1&131579904=1&131596288=1&131612672=1&131629056=1&131645440=1&131661824=1&131678208=1&131694592=1&131710976=1&131727360=1&131743744=1&131760128=1&131776512=1&131792896=1&131809280=1&131825664=1&131842048=1&131858432=1&131874816=1&131891200=1&131907584=1&131923968=1&131940352=1&131956736=1&131973120=1&131989504=1&132005888=1&132022272=1&132038656=1&132055040=1&132071424=1&132087808=1&132104192=1&132120576=1&132136960=1&132153344=1&132169728=1&132186112=1&132202496=1&132218880=1&132235264=1&132251648=1&132268032=1&132284416=1&132300800=1&132317184=1&132333568=1&132349952=1&132366336=1&132382720=1&132399104=1&132415488=1&132431872=1&132448256=1&132464640=1&132481024=1&132497408=1&132513792=1&132530176=1&132546560=1&132562944=1&132579328=1&132595712=1&132612096=1&132628480=1&132644864=1&132661248=1&132677632=1&132694016=1&132710400=1&132726784=1&132743168=1&132759552=1&132775936=1&132792320=1&132808704=1&132825088=1&132841472=1&132857856=1&132874240=1&132890624=1&132907008=1&132923392=1&132939776=1&132956160=1&132972544=1&132988928=1&133005312=1&133021696=1&133038080=1&133054464=1&133070848=1&133087232=1&133103616=1&133120000=1&133136384=1&133152768=1&133169152=1&133185536=1&133201920=1&133218304=1&133234688=1&133251072=1&133267456=1&133283840=1&133300224=1&133316608=1&133332992=1&133349376=1&133365760=1&133382144=1&133398528=1&133414912=1&133431296=1&133447680=1&133464064=1&133480448=1&133496832=1&133513216=1&133529600=1&133545984=1&133562368=1&133578752=1&133595136=1&133611520=1&133627904=1&133644288=1&133660672=1&133677056=1&133693440=1&133709824=1&133726208=1&133742592=1&133758976=1&133775360=1&133791744=1&133808128=1&133824512=1&133840896=1&133857280=1&133873664=1&133890048=1&133906432=1&133922816=1&133939200=1&133955584=1&133971968=1&133988352=1&134004736=1&134021120=1&134037504=1&134053888=1&134070272=1&134086656=1&134103040=1&134119424=1&134135808=1&134152192=1&134168576=1&134184960=1&134201344=1&134217728=1&134234112=1&134250496=1&134266880=1&134283264=1&134299648=1&134316032=1&134332416=1&134348800=1&134365184=1&134381568=1&134397952=1&134414336=1&134430720=1&134447104=1&134463488=1&134479872=1&134496256=1&134512640=1&134529024=1&134545408=1&134561792=1&134578176=1&134594560=1&134610944=1&134627328=1&134643712=1&134660096=1&134676480=1&134692864=1&134709248=1&134725632=1&134742016=1&134758400=1&134774784=1&134791168=1&134807552=1&134823936=1&134840320=1&134856704=1&134873088=1&134889472=1&134905856=1&134922240=1&134938624=1&134955008=1&134971392=1&134987776=1&135004160=1&135020544=1&135036928=1&135053312=1&135069696=1&135086080=1&135102464=1&135118848=1&135135232=1&135151616=1&135168000=1&135184384=1&135200768=1&135217152=1&135233536=1&135249920=1&135266304=1&135282688=1&135299072=1&135315456=1&135331840=1&135348224=1&135364608=1&135380992=1&135397376=1&135413760=1&135430144=1&135446528=1&135462912=1&135479296=1&135495680=1&135512064=1&135528448=1&135544832=1&135561216=1&135577600=1&135593984=1&135610368=1&135626752=1&135643136=1&135659520=1&135675904=1&135692288=1&135708672=1&135725056=1&135741440=1&135757824=1&135774208=1&135790592=1&135806976=1&135823360=1&135839744=1&135856128=1&135872512=1&135888896=1&135905280=1&135921664=1&135938048=1&135954432=1&135970816=1&135987200=1&136003584=1&136019968=1&136036352=1&136052736=1&136069120=1&136085504=1&136101888=1&136118272=1&136134656=1&136151040=1&136167424=1&136183808=1&136200192=1&136216576=1&136232960=1&136249344=1&136265728=1&136282112=1&136298496=1&136314880=1&136331264=1&136347648=1&136364032=1&136380416=1&136396800=1&136413184=1&136429568=1&136445952=1&136462336=1&136478720=1&136495104=1&136511488=1&136527872=1&136544256=1&136560640=1&136577024=1&136593408=1&136609792=1&136626176=1&136642560=1&136658944=1&136675328=1&136691712=1&136708096=1&136724480=1&136740864=1&136757248=1&136773632=1&136790016=1&136806400=1&136822784=1&136839168=1&136855552=1&136871936=1&136888320=1&136904704=1&136921088=1&136937472=1&136953856=1&136970240=1&136986624=1&137003008=1&137019392=1&137035776=1&137052160=1&137068544=1&137084928=1&137101312=1&137117696=1&137134080=1&137150464=1&137166848=1&137183232=1&137199616=1&137216000=1&137232384=1&137248768=1&137265152=1&137281536=1&137297920=1&137314304=1&137330688=1&137347072=1&137363456=1&137379840=1&137396224=1&137412608=1&137428992=1&137445376=1&137461760=1&137478144=1&137494528=1&137510912=1&137527296=1&137543680=1&137560064=1&137576448=1&137592832=1&137609216=1&137625600=1&137641984=1&137658368=1&137674752=1&137691136=1&137707520=1&137723904=1&137740288=1&137756672=1&137773056=1&137789440=1&137805824=1&137822208=1&137838592=1&137854976=1&137871360=1&137887744=1&137904128=1&137920512=1&137936896=1&137953280=1&137969664=1&137986048=1&138002432=1&138018816=1&138035200=1&138051584=1&138067968=1&138084352=1&138100736=1&138117120=1&138133504=1&138149888=1&138166272=1&138182656=1&138199040=1&138215424=1&138231808=1&138248192=1&138264576=1&138280960=1&138297344=1&138313728=1&138330112=1&138346496=1&138362880=1&138379264=1&138395648=1&138412032=1&138428416=1&138444800=1&138461184=1&138477568=1&138493952=1&138510336=1&138526720=1&138543104=1&138559488=1&138575872=1&138592256=1&138608640=1&138625024=1&138641408=1&138657792=1&138674176=1&138690560=1&138706944=1&138723328=1&138739712=1&138756096=1&138772480=1&138788864=1&138805248=1&138821632=1&138838016=1&138854400=1&138870784=1&138887168=1&138903552=1&138919936=1&138936320=1&138952704=1&138969088=1&138985472=1&139001856=1&139018240=1&139034624=1&139051008=1&139067392=1&139083776=1&139100160=1&139116544=1&139132928=1&139149312=1&139165696=1&139182080=1&139198464=1&139214848=1&139231232=1&139247616=1&139264000=1&139280384=1&139296768=1&139313152=1&139329536=1&139345920=1&139362304=1&139378688=1&139395072=1&139411456=1&139427840=1&139444224=1&139460608=1&139476992=1&139493376=1&139509760=1&139526144=1&139542528=1&139558912=1&139575296=1&139591680=1&139608064=1&139624448=1&139640832=1&139657216=1&139673600=1&139689984=1&139706368=1&139722752=1&139739136=1&139755520=1&139771904=1&139788288=1&139804672=1&139821056=1&139837440=1&139853824=1&139870208=1&139886592=1&139902976=1&139919360=1&139935744=1&139952128=1&139968512=1&139984896=1&140001280=1&140017664=1&140034048=1&140050432=1&140066816=1&140083200=1&140099584=1&140115968=1&140132352=1&140148736=1&140165120=1&140181504=1&140197888=1&140214272=1&140230656=1&140247040=1&140263424=1&140279808=1&140296192=1&140312576=1&140328960=1&140345344=1&140361728=1&140378112=1&140394496=1&140410880=1&140427264=1&140443648=1&140460032=1&140476416=1&140492800=1&140509184=1&140525568=1&140541952=1&140558336=1&140574720=1&140591104=1&140607488=1&140623872=1&140640256=1&140656640=1&140673024=1&140689408=1&140705792=1&140722176=1&140738560=1&140754944=1&140771328=1&140787712=1&140804096=1&140820480=1&140836864=1&140853248=1&140869632=1&140886016=1&140902400=1&140918784=1&140935168=1&140951552=1&140967936=1&140984320=1&141000704=1&141017088=1&141033472=1&141049856=1&141066240=1&141082624=1&141099008=1&141115392=1&141131776=1&141148160=1&141164544=1&141180928=1&141197312=1&141213696=1&141230080=1&141246464=1&141262848=1&141279232=1&141295616=1&141312000=1&141328384=1&141344768=1&141361152=1&141377536=1&141393920=1&141410304=1&141426688=1&141443072=1&141459456=1&141475840=1&141492224=1&141508608=1&141524992=1&141541376=1&141557760=1&141574144=1&141590528=1&141606912=1&141623296=1&141639680=1&141656064=1&141672448=1&141688832=1&141705216=1&141721600=1&141737984=1&141754368=1&141770752=1&141787136=1&141803520=1&141819904=1&141836288=1&141852672=1&141869056=1&141885440=1&141901824=1&141918208=1&141934592=1&141950976=1&141967360=1&141983744=1&142000128=1&142016512=1&142032896=1&142049280=1&142065664=1&142082048=1&142098432=1&142114816=1&142131200=1&142147584=1&142163968=1&142180352=1&142196736=1&142213120=1&142229504=1&142245888=1&142262272=1&142278656=1&142295040=1&142311424=1&142327808=1&142344192=1&142360576=1&142376960=1&142393344=1&142409728=1&142426112=1&142442496=1&142458880=1&142475264=1&142491648=1&142508032=1&142524416=1&142540800=1&142557184=1&142573568=1&142589952=1&142606336=1&142622720=1&142639104=1&142655488=1&142671872=1&142688256=1&142704640=1&142721024=1&142737408=1&142753792=1&142770176=1&142786560=1&142802944=1&142819328=1&142835712=1&142852096=1&142868480=1&142884864=1&142901248=1&142917632=1&142934016=1&142950400=1&142966784=1&142983168=1&142999552=1&143015936=1&143032320=1&143048704=1&143065088=1&143081472=1&143097856=1&143114240=1&143130624=1&143147008=1&143163392=1&143179776=1&143196160=1&143212544=1&143228928=1&143245312=1&143261696=1&143278080=1&143294464=1&143310848=1&143327232=1&143343616=1&143360000=1&143376384=1&143392768=1&143409152=1&143425536=1&143441920=1&143458304=1&143474688=1&143491072=1&143507456=1&143523840=1&143540224=1&143556608=1&143572992=1&143589376=1&143605760=1&143622144=1&143638528=1&143654912=1&143671296=1&143687680=1&143704064=1&143720448=1&143736832=1&143753216=1&143769600=1&143785984=1&143802368=1&143818752=1&143835136=1&143851520=1&143867904=1&143884288=1&143900672=1&143917056=1&143933440=1&143949824=1&143966208=1&143982592=1&143998976=1&144015360=1&144031744=1&144048128=1&144064512=1&144080896=1&144097280=1&144113664=1&144130048=1&144146432=1&144162816=1&144179200=1&144195584=1&144211968=1&144228352=1&144244736=1&144261120=1&144277504=1&144293888=1&144310272=1&144326656=1&144343040=1&144359424=1&144375808=1&144392192=1&144408576=1&144424960=1&144441344=1&144457728=1&144474112=1&144490496=1&144506880=1&144523264=1&144539648=1&144556032=1&144572416=1&144588800=1&144605184=1&144621568=1&144637952=1&144654336=1&144670720=1&144687104=1&144703488=1&144719872=1&144736256=1&144752640=1&144769024=1&144785408=1&144801792=1&144818176=1&144834560=1&144850944=1&144867328=1&144883712=1&144900096=1&144916480=1&144932864=1&144949248=1&144965632=1&144982016=1&144998400=1&145014784=1&145031168=1&145047552=1&145063936=1&145080320=1&145096704=1&145113088=1&145129472=1&145145856=1&145162240=1&145178624=1&145195008=1&145211392=1&145227776=1&145244160=1&145260544=1&145276928=1&145293312=1&145309696=1&145326080=1&145342464=1&145358848=1&145375232=1&145391616=1&145408000=1&145424384=1&145440768=1&145457152=1&145473536=1&145489920=1&145506304=1&145522688=1&145539072=1&145555456=1&145571840=1&145588224=1&145604608=1&145620992=1&145637376=1&145653760=1&145670144=1&145686528=1&145702912=1&145719296=1&145735680=1&145752064=1&145768448=1&145784832=1&145801216=1&145817600=1&145833984=1&145850368=1&145866752=1&145883136=1&145899520=1&145915904=1&145932288=1&145948672=1&145965056=1&145981440=1&145997824=1&146014208=1&146030592=1&146046976=1&146063360=1&146079744=1&146096128=1&146112512=1&146128896=1&146145280=1&146161664=1&146178048=1&146194432=1&146210816=1&146227200=1&146243584=1&146259968=1&146276352=1&146292736=1&146309120=1&146325504=1&146341888=1&146358272=1&146374656=1&146391040=1&146407424=1&146423808=1&146440192=1&146456576=1&146472960=1&146489344=1&146505728=1&146522112=1&146538496=1&146554880=1&146571264=1&146587648=1&146604032=1&146620416=1&146636800=1&146653184=1&146669568=1&146685952=1&146702336=1&146718720=1&146735104=1&146751488=1&146767872=1&146784256=1&146800640=1&146817024=1&146833408=1&146849792=1&146866176=1&146882560=1&146898944=1&146915328=1&146931712=1&146948096=1&146964480=1&146980864=1&146997248=1&147013632=1&147030016=1&147046400=1&147062784=1&147079168=1&147095552=1&147111936=1&147128320=1&147144704=1&147161088=1&147177472=1&147193856=1&147210240=1&147226624=1&147243008=1&147259392=1&147275776=1&147292160=1&147308544=1&147324928=1&147341312=1&147357696=1&147374080=1&147390464=1&147406848=1&147423232=1&147439616=1&147456000=1&147472384=1&147488768=1&147505152=1&147521536=1&147537920=1&147554304=1&147570688=1&147587072=1&147603456=1&147619840=1&147636224=1&147652608=1&147668992=1&147685376=1&147701760=1&147718144=1&147734528=1&147750912=1&147767296=1&147783680=1&147800064=1&147816448=1&147832832=1&147849216=1&147865600=1&147881984=1&147898368=1&147914752=1&147931136=1&147947520=1&147963904=1&147980288=1&147996672=1&148013056=1&148029440=1&148045824=1&148062208=1&148078592=1&148094976=1&148111360=1&148127744=1&148144128=1&148160512=1&148176896=1&148193280=1&148209664=1&148226048=1&148242432=1&148258816=1&148275200=1&148291584=1&148307968=1&148324352=1&148340736=1&148357120=1&148373504=1&148389888=1&148406272=1&148422656=1&148439040=1&148455424=1&148471808=1&148488192=1&148504576=1&148520960=1&148537344=1&148553728=1&148570112=1&148586496=1&148602880=1&148619264=1&148635648=1&148652032=1&148668416=1&148684800=1&148701184=1&148717568=1&148733952=1&148750336=1&148766720=1&148783104=1&148799488=1&148815872=1&148832256=1&148848640=1&148865024=1&148881408=1&148897792=1&148914176=1&148930560=1&148946944=1&148963328=1&148979712=1&148996096=1&149012480=1&149028864=1&149045248=1&149061632=1&149078016=1&149094400=1&149110784=1&149127168=1&149143552=1&149159936=1&149176320=1&149192704=1&149209088=1&149225472=1&149241856=1&149258240=1&149274624=1&149291008=1&149307392=1&149323776=1&149340160=1&149356544=1&149372928=1&149389312=1&149405696=1&149422080=1&149438464=1&149454848=1&149471232=1&149487616=1&149504000=1&149520384=1&149536768=1&149553152=1&149569536=1&149585920=1&149602304=1&149618688=1&149635072=1&149651456=1&149667840=1&149684224=1&149700608=1&149716992=1&149733376=1&149749760=1&149766144=1&149782528=1&149798912=1&149815296=1&149831680=1&149848064=1&149864448=1&149880832=1&149897216=1&149913600=1&149929984=1&149946368=1&149962752=1&149979136=1&149995520=1&150011904=1&150028288=1&150044672=1&150061056=1&150077440=1&150093824=1&150110208=1&150126592=1&150142976=1&150159360=1&150175744=1&150192128=1&150208512=1&150224896=1&150241280=1&150257664=1&150274048=1&150290432=1&150306816=1&150323200=1&150339584=1&150355968=1&150372352=1&150388736=1&150405120=1&150421504=1&150437888=1&150454272=1&150470656=1&150487040=1&150503424=1&150519808=1&150536192=1&150552576=1&150568960=1&150585344=1&150601728=1&150618112=1&150634496=1&150650880=1&150667264=1&150683648=1&150700032=1&150716416=1&150732800=1&150749184=1&150765568=1&150781952=1&150798336=1&150814720=1&150831104=1&150847488=1&150863872=1&150880256=1&150896640=1&150913024=1&150929408=1&150945792=1&150962176=1&150978560=1&150994944=1&151011328=1&151027712=1&151044096=1&151060480=1&151076864=1&151093248=1&151109632=1&151126016=1&151142400=1&151158784=1&151175168=1&151191552=1&151207936=1&151224320=1&151240704=1&151257088=1&151273472=1&151289856=1&151306240=1&151322624=1&151339008=1&151355392=1&151371776=1&151388160=1&151404544=1&151420928=1&151437312=1&151453696=1&151470080=1&151486464=1&151502848=1&151519232=1&151535616=1&151552000=1&151568384=1&151584768=1&151601152=1&151617536=1&151633920=1&151650304=1&151666688=1&151683072=1&151699456=1&151715840=1&151732224=1&151748608=1&151764992=1&151781376=1&151797760=1&151814144=1&151830528=1&151846912=1&151863296=1&151879680=1&151896064=1&151912448=1&151928832=1&151945216=1&151961600=1&151977984=1&151994368=1&152010752=1&152027136=1&152043520=1&152059904=1&152076288=1&152092672=1&152109056=1&152125440=1&152141824=1&152158208=1&152174592=1&152190976=1&152207360=1&152223744=1&152240128=1&152256512=1&152272896=1&152289280=1&152305664=1&152322048=1&152338432=1&152354816=1&152371200=1&152387584=1&152403968=1&152420352=1&152436736=1&152453120=1&152469504=1&152485888=1&152502272=1&152518656=1&152535040=1&152551424=1&152567808=1&152584192=1&152600576=1&152616960=1&152633344=1&152649728=1&152666112=1&152682496=1&152698880=1&152715264=1&152731648=1&152748032=1&152764416=1&152780800=1&152797184=1&152813568=1&152829952=1&152846336=1&152862720=1&152879104=1&152895488=1&152911872=1&152928256=1&152944640=1&152961024=1&152977408=1&152993792=1&153010176=1&153026560=1&153042944=1&153059328=1&153075712=1&153092096=1&153108480=1&153124864=1&153141248=1&153157632=1&153174016=1&153190400=1&153206784=1&153223168=1&153239552=1&153255936=1&153272320=1&153288704=1&153305088=1&153321472=1&153337856=1&153354240=1&153370624=1&153387008=1&153403392=1&153419776=1&153436160=1&153452544=1&153468928=1&153485312=1&153501696=1&153518080=1&153534464=1&153550848=1&153567232=1&153583616=1&153600000=1&153616384=1&153632768=1&153649152=1&153665536=1&153681920=1&153698304=1&153714688=1&153731072=1&153747456=1&153763840=1&153780224=1&153796608=1&153812992=1&153829376=1&153845760=1&153862144=1&153878528=1&153894912=1&153911296=1&153927680=1&153944064=1&153960448=1&153976832=1&153993216=1&154009600=1&154025984=1&154042368=1&154058752=1&154075136=1&154091520=1&154107904=1&154124288=1&154140672=1&154157056=1&154173440=1&154189824=1&154206208=1&154222592=1&154238976=1&154255360=1&154271744=1&154288128=1&154304512=1&154320896=1&154337280=1&154353664=1&154370048=1&154386432=1&154402816=1&154419200=1&154435584=1&154451968=1&154468352=1&154484736=1&154501120=1&154517504=1&154533888=1&154550272=1&154566656=1&154583040=1&154599424=1&154615808=1&154632192=1&154648576=1&154664960=1&154681344=1&154697728=1&154714112=1&154730496=1&154746880=1&154763264=1&154779648=1&154796032=1&154812416=1&154828800=1&154845184=1&154861568=1&154877952=1&154894336=1&154910720=1&154927104=1&154943488=1&154959872=1&154976256=1&154992640=1&155009024=1&155025408=1&155041792=1&155058176=1&155074560=1&155090944=1&155107328=1&155123712=1&155140096=1&155156480=1&155172864=1&155189248=1&155205632=1&155222016=1&155238400=1&155254784=1&155271168=1&155287552=1&155303936=1&155320320=1&155336704=1&155353088=1&155369472=1&155385856=1&155402240=1&155418624=1&155435008=1&155451392=1&155467776=1&155484160=1&155500544=1&155516928=1&155533312=1&155549696=1&155566080=1&155582464=1&155598848=1&155615232=1&155631616=1&155648000=1&155664384=1&155680768=1&155697152=1&155713536=1&155729920=1&155746304=1&155762688=1&155779072=1&155795456=1&155811840=1&155828224=1&155844608=1&155860992=1&155877376=1&155893760=1&155910144=1&155926528=1&155942912=1&155959296=1&155975680=1&155992064=1&156008448=1&156024832=1&156041216=1&156057600=1&156073984=1&156090368=1&156106752=1&156123136=1&156139520=1&156155904=1&156172288=1&156188672=1&156205056=1&156221440=1&156237824=1&156254208=1&156270592=1&156286976=1&156303360=1&156319744=1&156336128=1&156352512=1&156368896=1&156385280=1&156401664=1&156418048=1&156434432=1&156450816=1&156467200=1&156483584=1&156499968=1&156516352=1&156532736=1&156549120=1&156565504=1&156581888=1&156598272=1&156614656=1&156631040=1&156647424=1&156663808=1&156680192=1&156696576=1&156712960=1&156729344=1&156745728=1&156762112=1&156778496=1&156794880=1&156811264=1&156827648=1&156844032=1&156860416=1&156876800=1&156893184=1&156909568=1&156925952=1&156942336=1&156958720=1&156975104=1&156991488=1&157007872=1&157024256=1&157040640=1&157057024=1&157073408=1&157089792=1&157106176=1&157122560=1&157138944=1&157155328=1&157171712=1&157188096=1&157204480=1&157220864=1&157237248=1&157253632=1&157270016=1&157286400=1&157302784=1&157319168=1&157335552=1&157351936=1&157368320=1&157384704=1&157401088=1&157417472=1&157433856=1&157450240=1&157466624=1&157483008=1&157499392=1&157515776=1&157532160=1&157548544=1&157564928=1&157581312=1&157597696=1&157614080=1&157630464=1&157646848=1&157663232=1&157679616=1&157696000=1&157712384=1&157728768=1&157745152=1&157761536=1&157777920=1&157794304=1&157810688=1&157827072=1&157843456=1&157859840=1&157876224=1&157892608=1&157908992=1&157925376=1&157941760=1&157958144=1&157974528=1&157990912=1&158007296=1&158023680=1&158040064=1&158056448=1&158072832=1&158089216=1&158105600=1&158121984=1&158138368=1&158154752=1&158171136=1&158187520=1&158203904=1&158220288=1&158236672=1&158253056=1&158269440=1&158285824=1&158302208=1&158318592=1&158334976=1&158351360=1&158367744=1&158384128=1&158400512=1&158416896=1&158433280=1&158449664=1&158466048=1&158482432=1&158498816=1&158515200=1&158531584=1&158547968=1&158564352=1&158580736=1&158597120=1&158613504=1&158629888=1&158646272=1&158662656=1&158679040=1&158695424=1&158711808=1&158728192=1&158744576=1&158760960=1&158777344=1&158793728=1&158810112=1&158826496=1&158842880=1&158859264=1&158875648=1&158892032=1&158908416=1&158924800=1&158941184=1&158957568=1&158973952=1&158990336=1&159006720=1&159023104=1&159039488=1&159055872=1&159072256=1&159088640=1&159105024=1&159121408=1&159137792=1&159154176=1&159170560=1&159186944=1&159203328=1&159219712=1&159236096=1&159252480=1&159268864=1&159285248=1&159301632=1&159318016=1&159334400=1&159350784=1&159367168=1&159383552=1&159399936=1&159416320=1&159432704=1&159449088=1&159465472=1&159481856=1&159498240=1&159514624=1&159531008=1&159547392=1&159563776=1&159580160=1&159596544=1&159612928=1&159629312=1&159645696=1&159662080=1&159678464=1&159694848=1&159711232=1&159727616=1&159744000=1&159760384=1&159776768=1&159793152=1&159809536=1&159825920=1&159842304=1&159858688=1&159875072=1&159891456=1&159907840=1&159924224=1&159940608=1&159956992=1&159973376=1&159989760=1&160006144=1&160022528=1&160038912=1&160055296=1&160071680=1&160088064=1&160104448=1&160120832=1&160137216=1&160153600=1&160169984=1&160186368=1&160202752=1&160219136=1&160235520=1&160251904=1&160268288=1&160284672=1&160301056=1&160317440=1&160333824=1&160350208=1&160366592=1&160382976=1&160399360=1&160415744=1&160432128=1&160448512=1&160464896=1&160481280=1&160497664=1&160514048=1&160530432=1&160546816=1&160563200=1&160579584=1&160595968=1&160612352=1&160628736=1&160645120=1&160661504=1&160677888=1&160694272=1&160710656=1&160727040=1&160743424=1&160759808=1&160776192=1&160792576=1&160808960=1&160825344=1&160841728=1&160858112=1&160874496=1&160890880=1&160907264=1&160923648=1&160940032=1&160956416=1&160972800=1&160989184=1&161005568=1&161021952=1&161038336=1&161054720=1&161071104=1&161087488=1&161103872=1&161120256=1&161136640=1&161153024=1&161169408=1&161185792=1&161202176=1&161218560=1&161234944=1&161251328=1&161267712=1&161284096=1&161300480=1&161316864=1&161333248=1&161349632=1&161366016=1&161382400=1&161398784=1&161415168=1&161431552=1&161447936=1&161464320=1&161480704=1&161497088=1&161513472=1&161529856=1&161546240=1&161562624=1&161579008=1&161595392=1&161611776=1&161628160=1&161644544=1&161660928=1&161677312=1&161693696=1&161710080=1&161726464=1&161742848=1&161759232=1&161775616=1&161792000=1&161808384=1&161824768=1&161841152=1&161857536=1&161873920=1&161890304=1&161906688=1&161923072=1&161939456=1&161955840=1&161972224=1&161988608=1&162004992=1&162021376=1&162037760=1&162054144=1&162070528=1&162086912=1&162103296=1&162119680=1&162136064=1&162152448=1&162168832=1&162185216=1&162201600=1&162217984=1&162234368=1&162250752=1&162267136=1&162283520=1&162299904=1&162316288=1&162332672=1&162349056=1&162365440=1&162381824=1&162398208=1&162414592=1&162430976=1&162447360=1&162463744=1&162480128=1&162496512=1&162512896=1&162529280=1&162545664=1&162562048=1&162578432=1&162594816=1&162611200=1&162627584=1&162643968=1&162660352=1&162676736=1&162693120=1&162709504=1&162725888=1&162742272=1&162758656=1&162775040=1&162791424=1&162807808=1&162824192=1&162840576=1&162856960=1&162873344=1&162889728=1&162906112=1&162922496=1&162938880=1&162955264=1&162971648=1&162988032=1&163004416=1&163020800=1&163037184=1&163053568=1&163069952=1&163086336=1&163102720=1&163119104=1&163135488=1&163151872=1&163168256=1&163184640=1&163201024=1&163217408=1&163233792=1&163250176=1&163266560=1&163282944=1&163299328=1&163315712=1&163332096=1&163348480=1&163364864=1&163381248=1&163397632=1&163414016=1&163430400=1&163446784=1&163463168=1&163479552=1&163495936=1&163512320=1&163528704=1&163545088=1&163561472=1&163577856=1&163594240=1&163610624=1&163627008=1&163643392=1&163659776=1&163676160=1&163692544=1&163708928=1&163725312=1&163741696=1&163758080=1&163774464=1&163790848=1&163807232=1&163823616=1&163840000=1&163856384=1&163872768=1&163889152=1&163905536=1&163921920=1&163938304=1&163954688=1&163971072=1&163987456=1&164003840=1&164020224=1&164036608=1&164052992=1&164069376=1&164085760=1&164102144=1&164118528=1&164134912=1&164151296=1&164167680=1&164184064=1&164200448=1&164216832=1&164233216=1&164249600=1&164265984=1&164282368=1&164298752=1&164315136=1&164331520=1&164347904=1&164364288=1&164380672=1&164397056=1&164413440=1&164429824=1&164446208=1&164462592=1&164478976=1&164495360=1&164511744=1&164528128=1&164544512=1&164560896=1&164577280=1&164593664=1&164610048=1&164626432=1&164642816=1&164659200=1&164675584=1&164691968=1&164708352=1&164724736=1&164741120=1&164757504=1&164773888=1&164790272=1&164806656=1&164823040=1&164839424=1&164855808=1&164872192=1&164888576=1&164904960=1&164921344=1&164937728=1&164954112=1&164970496=1&164986880=1&165003264=1&165019648=1&165036032=1&165052416=1&165068800=1&165085184=1&165101568=1&165117952=1&165134336=1&165150720=1&165167104=1&165183488=1&165199872=1&165216256=1&165232640=1&165249024=1&165265408=1&165281792=1&165298176=1&165314560=1&165330944=1&165347328=1&165363712=1&165380096=1&165396480=1&165412864=1&165429248=1&165445632=1&165462016=1&165478400=1&165494784=1&165511168=1&165527552=1&165543936=1&165560320=1&165576704=1&165593088=1&165609472=1&165625856=1&165642240=1&165658624=1&165675008=1&165691392=1&165707776=1&165724160=1&165740544=1&165756928=1&165773312=1&165789696=1&165806080=1&165822464=1&165838848=1&165855232=1&165871616=1&165888000=1&165904384=1&165920768=1&165937152=1&165953536=1&165969920=1&165986304=1&166002688=1&166019072=1&166035456=1&166051840=1&166068224=1&166084608=1&166100992=1&166117376=1&166133760=1&166150144=1&166166528=1&166182912=1&166199296=1&166215680=1&166232064=1&166248448=1&166264832=1&166281216=1&166297600=1&166313984=1&166330368=1&166346752=1&166363136=1&166379520=1&166395904=1&166412288=1&166428672=1&166445056=1&166461440=1&166477824=1&166494208=1&166510592=1&166526976=1&166543360=1&166559744=1&166576128=1&166592512=1&166608896=1&166625280=1&166641664=1&166658048=1&166674432=1&166690816=1&166707200=1&166723584=1&166739968=1&166756352=1&166772736=1&166789120=1&166805504=1&166821888=1&166838272=1&166854656=1&166871040=1&166887424=1&166903808=1&166920192=1&166936576=1&166952960=1&166969344=1&166985728=1&167002112=1&167018496=1&167034880=1&167051264=1&167067648=1&167084032=1&167100416=1&167116800=1&167133184=1&167149568=1&167165952=1&167182336=1&167198720=1&167215104=1&167231488=1&167247872=1&167264256=1&167280640=1&167297024=1&167313408=1&167329792=1&167346176=1&167362560=1&167378944=1&167395328=1&167411712=1&167428096=1&167444480=1&167460864=1&167477248=1&167493632=1&167510016=1&167526400=1&167542784=1&167559168=1&167575552=1&167591936=1&167608320=1&167624704=1&167641088=1&167657472=1&167673856=1&167690240=1&167706624=1&167723008=1&167739392=1&167755776=1&167772160=1&167788544=1&167804928=1&167821312=1&167837696=1&167854080=1&167870464=1&167886848=1&167903232=1&167919616=1&167936000=1&167952384=1&167968768=1&167985152=1&168001536=1&168017920=1&168034304=1&168050688=1&168067072=1&168083456=1&168099840=1&168116224=1&168132608=1&168148992=1&168165376=1&168181760=1&168198144=1&168214528=1&168230912=1&168247296=1&168263680=1&168280064=1&168296448=1&168312832=1&168329216=1&168345600=1&168361984=1&168378368=1&168394752=1&168411136=1&168427520=1&168443904=1&168460288=1&168476672=1&168493056=1&168509440=1&168525824=1&168542208=1&168558592=1&168574976=1&168591360=1&168607744=1&168624128=1&168640512=1&168656896=1&168673280=1&168689664=1&168706048=1&168722432=1&168738816=1&168755200=1&168771584=1&168787968=1&168804352=1&168820736=1&168837120=1&168853504=1&168869888=1&168886272=1&168902656=1&168919040=1&168935424=1&168951808=1&168968192=1&168984576=1&169000960=1&169017344=1&169033728=1&169050112=1&169066496=1&169082880=1&169099264=1&169115648=1&169132032=1&169148416=1&169164800=1&169181184=1&169197568=1&169213952=1&169230336=1&169246720=1&169263104=1&169279488=1&169295872=1&169312256=1&169328640=1&169345024=1&169361408=1&169377792=1&169394176=1&169410560=1&169426944=1&169443328=1&169459712=1&169476096=1&169492480=1&169508864=1&169525248=1&169541632=1&169558016=1&169574400=1&169590784=1&169607168=1&169623552=1&169639936=1&169656320=1&169672704=1&169689088=1&169705472=1&169721856=1&169738240=1&169754624=1&169771008=1&169787392=1&169803776=1&169820160=1&169836544=1&169852928=1&169869312=1&169885696=1&169902080=1&169918464=1&169934848=1&169951232=1&169967616=1&169984000=1&170000384=1&170016768=1&170033152=1&170049536=1&170065920=1&170082304=1&170098688=1&170115072=1&170131456=1&170147840=1&170164224=1&170180608=1&170196992=1&170213376=1&170229760=1&170246144=1&170262528=1&170278912=1&170295296=1&170311680=1&170328064=1&170344448=1&170360832=1&170377216=1&170393600=1&170409984=1&170426368=1&170442752=1&170459136=1&170475520=1&170491904=1&170508288=1&170524672=1&170541056=1&170557440=1&170573824=1&170590208=1&170606592=1&170622976=1&170639360=1&170655744=1&170672128=1&170688512=1&170704896=1&170721280=1&170737664=1&170754048=1&170770432=1&170786816=1&170803200=1&170819584=1&170835968=1&170852352=1&170868736=1&170885120=1&170901504=1&170917888=1&170934272=1&170950656=1&170967040=1&170983424=1&170999808=1&171016192=1&171032576=1&171048960=1&171065344=1&171081728=1&171098112=1&171114496=1&171130880=1&171147264=1&171163648=1&171180032=1&171196416=1&171212800=1&171229184=1&171245568=1&171261952=1&171278336=1&171294720=1&171311104=1&171327488=1&171343872=1&171360256=1&171376640=1&171393024=1&171409408=1&171425792=1&171442176=1&171458560=1&171474944=1&171491328=1&171507712=1&171524096=1&171540480=1&171556864=1&171573248=1&171589632=1&171606016=1&171622400=1&171638784=1&171655168=1&171671552=1&171687936=1&171704320=1&171720704=1&171737088=1&171753472=1&171769856=1&171786240=1&171802624=1&171819008=1&171835392=1&171851776=1&171868160=1&171884544=1&171900928=1&171917312=1&171933696=1&171950080=1&171966464=1&171982848=1&171999232=1&172015616=1&172032000=1&172048384=1&172064768=1&172081152=1&172097536=1&172113920=1&172130304=1&172146688=1&172163072=1&172179456=1&172195840=1&172212224=1&172228608=1&172244992=1&172261376=1&172277760=1&172294144=1&172310528=1&172326912=1&172343296=1&172359680=1&172376064=1&172392448=1&172408832=1&172425216=1&172441600=1&172457984=1&172474368=1&172490752=1&172507136=1&172523520=1&172539904=1&172556288=1&172572672=1&172589056=1&172605440=1&172621824=1&172638208=1&172654592=1&172670976=1&172687360=1&172703744=1&172720128=1&172736512=1&172752896=1&172769280=1&172785664=1&172802048=1&172818432=1&172834816=1&172851200=1&172867584=1&172883968=1&172900352=1&172916736=1&172933120=1&172949504=1&172965888=1&172982272=1&172998656=1&173015040=1&173031424=1&173047808=1&173064192=1&173080576=1&173096960=1&173113344=1&173129728=1&173146112=1&173162496=1&173178880=1&173195264=1&173211648=1&173228032=1&173244416=1&173260800=1&173277184=1&173293568=1&173309952=1&173326336=1&173342720=1&173359104=1&173375488=1&173391872=1&173408256=1&173424640=1&173441024=1&173457408=1&173473792=1&173490176=1&173506560=1&173522944=1&173539328=1&173555712=1&173572096=1&173588480=1&173604864=1&173621248=1&173637632=1&173654016=1&173670400=1&173686784=1&173703168=1&173719552=1&173735936=1&173752320=1&173768704=1&173785088=1&173801472=1&173817856=1&173834240=1&173850624=1&173867008=1&173883392=1&173899776=1&173916160=1&173932544=1&173948928=1&173965312=1&173981696=1&173998080=1&174014464=1&174030848=1&174047232=1&174063616=1&174080000=1&174096384=1&174112768=1&174129152=1&174145536=1&174161920=1&174178304=1&174194688=1&174211072=1&174227456=1&174243840=1&174260224=1&174276608=1&174292992=1&174309376=1&174325760=1&174342144=1&174358528=1&174374912=1&174391296=1&174407680=1&174424064=1&174440448=1&174456832=1&174473216=1&174489600=1&174505984=1&174522368=1&174538752=1&174555136=1&174571520=1&174587904=1&174604288=1&174620672=1&174637056=1&174653440=1&174669824=1&174686208=1&174702592=1&174718976=1&174735360=1&174751744=1&174768128=1&174784512=1&174800896=1&174817280=1&174833664=1&174850048=1&174866432=1&174882816=1&174899200=1&174915584=1&174931968=1&174948352=1&174964736=1&174981120=1&174997504=1&175013888=1&175030272=1&175046656=1&175063040=1&175079424=1&175095808=1&175112192=1&175128576=1&175144960=1&175161344=1&175177728=1&175194112=1&175210496=1&175226880=1&175243264=1&175259648=1&175276032=1&175292416=1&175308800=1&175325184=1&175341568=1&175357952=1&175374336=1&175390720=1&175407104=1&175423488=1&175439872=1&175456256=1&175472640=1&175489024=1&175505408=1&175521792=1&175538176=1&175554560=1&175570944=1&175587328=1&175603712=1&175620096=1&175636480=1&175652864=1&175669248=1&175685632=1&175702016=1&175718400=1&175734784=1&175751168=1&175767552=1&175783936=1&175800320=1&175816704=1&175833088=1&175849472=1&175865856=1&175882240=1&175898624=1&175915008=1&175931392=1&175947776=1&175964160=1&175980544=1&175996928=1&176013312=1&176029696=1&176046080=1&176062464=1&176078848=1&176095232=1&176111616=1&176128000=1&176144384=1&176160768=1&176177152=1&176193536=1&176209920=1&176226304=1&176242688=1&176259072=1&176275456=1&176291840=1&176308224=1&176324608=1&176340992=1&176357376=1&176373760=1&176390144=1&176406528=1&176422912=1&176439296=1&176455680=1&176472064=1&176488448=1&176504832=1&176521216=1&176537600=1&176553984=1&176570368=1&176586752=1&176603136=1&176619520=1&176635904=1&176652288=1&176668672=1&176685056=1&176701440=1&176717824=1&176734208=1&176750592=1&176766976=1&176783360=1&176799744=1&176816128=1&176832512=1&176848896=1&176865280=1&176881664=1&176898048=1&176914432=1&176930816=1&176947200=1&176963584=1&176979968=1&176996352=1&177012736=1&177029120=1&177045504=1&177061888=1&177078272=1&177094656=1&177111040=1&177127424=1&177143808=1&177160192=1&177176576=1&177192960=1&177209344=1&177225728=1&177242112=1&177258496=1&177274880=1&177291264=1&177307648=1&177324032=1&177340416=1&177356800=1&177373184=1&177389568=1&177405952=1&177422336=1&177438720=1&177455104=1&177471488=1&177487872=1&177504256=1&177520640=1&177537024=1&177553408=1&177569792=1&177586176=1&177602560=1&177618944=1&177635328=1&177651712=1&177668096=1&177684480=1&177700864=1&177717248=1&177733632=1&177750016=1&177766400=1&177782784=1&177799168=1&177815552=1&177831936=1&177848320=1&177864704=1&177881088=1&177897472=1&177913856=1&177930240=1&177946624=1&177963008=1&177979392=1&177995776=1&178012160=1&178028544=1&178044928=1&178061312=1&178077696=1&178094080=1&178110464=1&178126848=1&178143232=1&178159616=1&178176000=1&178192384=1&178208768=1&178225152=1&178241536=1&178257920=1&178274304=1&178290688=1&178307072=1&178323456=1&178339840=1&178356224=1&178372608=1&178388992=1&178405376=1&178421760=1&178438144=1&178454528=1&178470912=1&178487296=1&178503680=1&178520064=1&178536448=1&178552832=1&178569216=1&178585600=1&178601984=1&178618368=1&178634752=1&178651136=1&178667520=1&178683904=1&178700288=1&178716672=1&178733056=1&178749440=1&178765824=1&178782208=1&178798592=1&178814976=1&178831360=1&178847744=1&178864128=1&178880512=1&178896896=1&178913280=1&178929664=1&178946048=1&178962432=1&178978816=1&178995200=1&179011584=1&179027968=1&179044352=1&179060736=1&179077120=1&179093504=1&179109888=1&179126272=1&179142656=1&179159040=1&179175424=1&179191808=1&179208192=1&179224576=1&179240960=1&179257344=1&179273728=1&179290112=1&179306496=1&179322880=1&179339264=1&179355648=1&179372032=1&179388416=1&179404800=1&179421184=1&179437568=1&179453952=1&179470336=1&179486720=1&179503104=1&179519488=1&179535872=1&179552256=1&179568640=1&179585024=1&179601408=1&179617792=1&179634176=1&179650560=1&179666944=1&179683328=1&179699712=1&179716096=1&179732480=1&179748864=1&179765248=1&179781632=1&179798016=1&179814400=1&179830784=1&179847168=1&179863552=1&179879936=1&179896320=1&179912704=1&179929088=1&179945472=1&179961856=1&179978240=1&179994624=1&180011008=1&180027392=1&180043776=1&180060160=1&180076544=1&180092928=1&180109312=1&180125696=1&180142080=1&180158464=1&180174848=1&180191232=1&180207616=1&180224000=1&180240384=1&180256768=1&180273152=1&180289536=1&180305920=1&180322304=1&180338688=1&180355072=1&180371456=1&180387840=1&180404224=1&180420608=1&180436992=1&180453376=1&180469760=1&180486144=1&180502528=1&180518912=1&180535296=1&180551680=1&180568064=1&180584448=1&180600832=1&180617216=1&180633600=1&180649984=1&180666368=1&180682752=1&180699136=1&180715520=1&180731904=1&180748288=1&180764672=1&180781056=1&180797440=1&180813824=1&180830208=1&180846592=1&180862976=1&180879360=1&180895744=1&180912128=1&180928512=1&180944896=1&180961280=1&180977664=1&180994048=1&181010432=1&181026816=1&181043200=1&181059584=1&181075968=1&181092352=1&181108736=1&181125120=1&181141504=1&181157888=1&181174272=1&181190656=1&181207040=1&181223424=1&181239808=1&181256192=1&181272576=1&181288960=1&181305344=1&181321728=1&181338112=1&181354496=1&181370880=1&181387264=1&181403648=1&181420032=1&181436416=1&181452800=1&181469184=1&181485568=1&181501952=1&181518336=1&181534720=1&181551104=1&181567488=1&181583872=1&181600256=1&181616640=1&181633024=1&181649408=1&181665792=1&181682176=1&181698560=1&181714944=1&181731328=1&181747712=1&181764096=1&181780480=1&181796864=1&181813248=1&181829632=1&181846016=1&181862400=1&181878784=1&181895168=1&181911552=1&181927936=1&181944320=1&181960704=1&181977088=1&181993472=1&182009856=1&182026240=1&182042624=1&182059008=1&182075392=1&182091776=1&182108160=1&182124544=1&182140928=1&182157312=1&182173696=1&182190080=1&182206464=1&182222848=1&182239232=1&182255616=1&182272000=1&182288384=1&182304768=1&182321152=1&182337536=1&182353920=1&182370304=1&182386688=1&182403072=1&182419456=1&182435840=1&182452224=1&182468608=1&182484992=1&182501376=1&182517760=1&182534144=1&182550528=1&182566912=1&182583296=1&182599680=1&182616064=1&182632448=1&182648832=1&182665216=1&182681600=1&182697984=1&182714368=1&182730752=1&182747136=1&182763520=1&182779904=1&182796288=1&182812672=1&182829056=1&182845440=1&182861824=1&182878208=1&182894592=1&182910976=1&182927360=1&182943744=1&182960128=1&182976512=1&182992896=1&183009280=1&183025664=1&183042048=1&183058432=1&183074816=1&183091200=1&183107584=1&183123968=1&183140352=1&183156736=1&183173120=1&183189504=1&183205888=1&183222272=1&183238656=1&183255040=1&183271424=1&183287808=1&183304192=1&183320576=1&183336960=1&183353344=1&183369728=1&183386112=1&183402496=1&183418880=1&183435264=1&183451648=1&183468032=1&183484416=1&183500800=1&183517184=1&183533568=1&183549952=1&183566336=1&183582720=1&183599104=1&183615488=1&183631872=1&183648256=1&183664640=1&183681024=1&183697408=1&183713792=1&183730176=1&183746560=1&183762944=1&183779328=1&183795712=1&183812096=1&183828480=1&183844864=1&183861248=1&183877632=1&183894016=1&183910400=1&183926784=1&183943168=1&183959552=1&183975936=1&183992320=1&184008704=1&184025088=1&184041472=1&184057856=1&184074240=1&184090624=1&184107008=1&184123392=1&184139776=1&184156160=1&184172544=1&184188928=1&184205312=1&184221696=1&184238080=1&184254464=1&184270848=1&184287232=1&184303616=1&184320000=1&184336384=1&184352768=1&184369152=1&184385536=1&184401920=1&184418304=1&184434688=1&184451072=1&184467456=1&184483840=1&184500224=1&184516608=1&184532992=1&184549376=1&184565760=1&184582144=1&184598528=1&184614912=1&184631296=1&184647680=1&184664064=1&184680448=1&184696832=1&184713216=1&184729600=1&184745984=1&184762368=1&184778752=1&184795136=1&184811520=1&184827904=1&184844288=1&184860672=1&184877056=1&184893440=1&184909824=1&184926208=1&184942592=1&184958976=1&184975360=1&184991744=1&185008128=1&185024512=1&185040896=1&185057280=1&185073664=1&185090048=1&185106432=1&185122816=1&185139200=1&185155584=1&185171968=1&185188352=1&185204736=1&185221120=1&185237504=1&185253888=1&185270272=1&185286656=1&185303040=1&185319424=1&185335808=1&185352192=1&185368576=1&185384960=1&185401344=1&185417728=1&185434112=1&185450496=1&185466880=1&185483264=1&185499648=1&185516032=1&185532416=1&185548800=1&185565184=1&185581568=1&185597952=1&185614336=1&185630720=1&185647104=1&185663488=1&185679872=1&185696256=1&185712640=1&185729024=1&185745408=1&185761792=1&185778176=1&185794560=1&185810944=1&185827328=1&185843712=1&185860096=1&185876480=1&185892864=1&185909248=1&185925632=1&185942016=1&185958400=1&185974784=1&185991168=1&186007552=1&186023936=1&186040320=1&186056704=1&186073088=1&186089472=1&186105856=1&186122240=1&186138624=1&186155008=1&186171392=1&186187776=1&186204160=1&186220544=1&186236928=1&186253312=1&186269696=1&186286080=1&186302464=1&186318848=1&186335232=1&186351616=1&186368000=1&186384384=1&186400768=1&186417152=1&186433536=1&186449920=1&186466304=1&186482688=1&186499072=1&186515456=1&186531840=1&186548224=1&186564608=1&186580992=1&186597376=1&186613760=1&186630144=1&186646528=1&186662912=1&186679296=1&186695680=1&186712064=1&186728448=1&186744832=1&186761216=1&186777600=1&186793984=1&186810368=1&186826752=1&186843136=1&186859520=1&186875904=1&186892288=1&186908672=1&186925056=1&186941440=1&186957824=1&186974208=1&186990592=1&187006976=1&187023360=1&187039744=1&187056128=1&187072512=1&187088896=1&187105280=1&187121664=1&187138048=1&187154432=1&187170816=1&187187200=1&187203584=1&187219968=1&187236352=1&187252736=1&187269120=1&187285504=1&187301888=1&187318272=1&187334656=1&187351040=1&187367424=1&187383808=1&187400192=1&187416576=1&187432960=1&187449344=1&187465728=1&187482112=1&187498496=1&187514880=1&187531264=1&187547648=1&187564032=1&187580416=1&187596800=1&187613184=1&187629568=1&187645952=1&187662336=1&187678720=1&187695104=1&187711488=1&187727872=1&187744256=1&187760640=1&187777024=1&187793408=1&187809792=1&187826176=1&187842560=1&187858944=1&187875328=1&187891712=1&187908096=1&187924480=1&187940864=1&187957248=1&187973632=1&187990016=1&188006400=1&188022784=1&188039168=1&188055552=1&188071936=1&188088320=1&188104704=1&188121088=1&188137472=1&188153856=1&188170240=1&188186624=1&188203008=1&188219392=1&188235776=1&188252160=1&188268544=1&188284928=1&188301312=1&188317696=1&188334080=1&188350464=1&188366848=1&188383232=1&188399616=1&188416000=1&188432384=1&188448768=1&188465152=1&188481536=1&188497920=1&188514304=1&188530688=1&188547072=1&188563456=1&188579840=1&188596224=1&188612608=1&188628992=1&188645376=1&188661760=1&188678144=1&188694528=1&188710912=1&188727296=1&188743680=1&188760064=1&188776448=1&188792832=1&188809216=1&188825600=1&188841984=1&188858368=1&188874752=1&188891136=1&188907520=1&188923904=1&188940288=1&188956672=1&188973056=1&188989440=1&189005824=1&189022208=1&189038592=1&189054976=1&189071360=1&189087744=1&189104128=1&189120512=1&189136896=1&189153280=1&189169664=1&189186048=1&189202432=1&189218816=1&189235200=1&189251584=1&189267968=1&189284352=1&189300736=1&189317120=1&189333504=1&189349888=1&189366272=1&189382656=1&189399040=1&189415424=1&189431808=1&189448192=1&189464576=1&189480960=1&189497344=1&189513728=1&189530112=1&189546496=1&189562880=1&189579264=1&189595648=1&189612032=1&189628416=1&189644800=1&189661184=1&189677568=1&189693952=1&189710336=1&189726720=1&189743104=1&189759488=1&189775872=1&189792256=1&189808640=1&189825024=1&189841408=1&189857792=1&189874176=1&189890560=1&189906944=1&189923328=1&189939712=1&189956096=1&189972480=1&189988864=1&190005248=1&190021632=1&190038016=1&190054400=1&190070784=1&190087168=1&190103552=1&190119936=1&190136320=1&190152704=1&190169088=1&190185472=1&190201856=1&190218240=1&190234624=1&190251008=1&190267392=1&190283776=1&190300160=1&190316544=1&190332928=1&190349312=1&190365696=1&190382080=1&190398464=1&190414848=1&190431232=1&190447616=1&190464000=1&190480384=1&190496768=1&190513152=1&190529536=1&190545920=1&190562304=1&190578688=1&190595072=1&190611456=1&190627840=1&190644224=1&190660608=1&190676992=1&190693376=1&190709760=1&190726144=1&190742528=1&190758912=1&190775296=1&190791680=1&190808064=1&190824448=1&190840832=1&190857216=1&190873600=1&190889984=1&190906368=1&190922752=1&190939136=1&190955520=1&190971904=1&190988288=1&191004672=1&191021056=1&191037440=1&191053824=1&191070208=1&191086592=1&191102976=1&191119360=1&191135744=1&191152128=1&191168512=1&191184896=1&191201280=1&191217664=1&191234048=1&191250432=1&191266816=1&191283200=1&191299584=1&191315968=1&191332352=1&191348736=1&191365120=1&191381504=1&191397888=1&191414272=1&191430656=1&191447040=1&191463424=1&191479808=1&191496192=1&191512576=1&191528960=1&191545344=1&191561728=1&191578112=1&191594496=1&191610880=1&191627264=1&191643648=1&191660032=1&191676416=1&191692800=1&191709184=1&191725568=1&191741952=1&191758336=1&191774720=1&191791104=1&191807488=1&191823872=1&191840256=1&191856640=1&191873024=1&191889408=1&191905792=1&191922176=1&191938560=1&191954944=1&191971328=1&191987712=1&192004096=1&192020480=1&192036864=1&192053248=1&192069632=1&192086016=1&192102400=1&192118784=1&192135168=1&192151552=1&192167936=1&192184320=1&192200704=1&192217088=1&192233472=1&192249856=1&192266240=1&192282624=1&192299008=1&192315392=1&192331776=1&192348160=1&192364544=1&192380928=1&192397312=1&192413696=1&192430080=1&192446464=1&192462848=1&192479232=1&192495616=1&192512000=1&192528384=1&192544768=1&192561152=1&192577536=1&192593920=1&192610304=1&192626688=1&192643072=1&192659456=1&192675840=1&192692224=1&192708608=1&192724992=1&192741376=1&192757760=1&192774144=1&192790528=1&192806912=1&192823296=1&192839680=1&192856064=1&192872448=1&192888832=1&192905216=1&192921600=1&192937984=1&192954368=1&192970752=1&192987136=1&193003520=1&193019904=1&193036288=1&193052672=1&193069056=1&193085440=1&193101824=1&193118208=1&193134592=1&193150976=1&193167360=1&193183744=1&193200128=1&193216512=1&193232896=1&193249280=1&193265664=1&193282048=1&193298432=1&193314816=1&193331200=1&193347584=1&193363968=1&193380352=1&193396736=1&193413120=1&193429504=1&193445888=1&193462272=1&193478656=1&193495040=1&193511424=1&193527808=1&193544192=1&193560576=1&193576960=1&193593344=1&193609728=1&193626112=1&193642496=1&193658880=1&193675264=1&193691648=1&193708032=1&193724416=1&193740800=1&193757184=1&193773568=1&193789952=1&193806336=1&193822720=1&193839104=1&193855488=1&193871872=1&193888256=1&193904640=1&193921024=1&193937408=1&193953792=1&193970176=1&193986560=1&194002944=1&194019328=1&194035712=1&194052096=1&194068480=1&194084864=1&194101248=1&194117632=1&194134016=1&194150400=1&194166784=1&194183168=1&194199552=1&194215936=1&194232320=1&194248704=1&194265088=1&194281472=1&194297856=1&194314240=1&194330624=1&194347008=1&194363392=1&194379776=1&194396160=1&194412544=1&194428928=1&194445312=1&194461696=1&194478080=1&194494464=1&194510848=1&194527232=1&194543616=1&194560000=1&194576384=1&194592768=1&194609152=1&194625536=1&194641920=1&194658304=1&194674688=1&194691072=1&194707456=1&194723840=1&194740224=1&194756608=1&194772992=1&194789376=1&194805760=1&194822144=1&194838528=1&194854912=1&194871296=1&194887680=1&194904064=1&194920448=1&194936832=1&194953216=1&194969600=1&194985984=1&195002368=1&195018752=1&195035136=1&195051520=1&195067904=1&195084288=1&195100672=1&195117056=1&195133440=1&195149824=1&195166208=1&195182592=1&195198976=1&195215360=1&195231744=1&195248128=1&195264512=1&195280896=1&195297280=1&195313664=1&195330048=1&195346432=1&195362816=1&195379200=1&195395584=1&195411968=1&195428352=1&195444736=1&195461120=1&195477504=1&195493888=1&195510272=1&195526656=1&195543040=1&195559424=1&195575808=1&195592192=1&195608576=1&195624960=1&195641344=1&195657728=1&195674112=1&195690496=1&195706880=1&195723264=1&195739648=1&195756032=1&195772416=1&195788800=1&195805184=1&195821568=1&195837952=1&195854336=1&195870720=1&195887104=1&195903488=1&195919872=1&195936256=1&195952640=1&195969024=1&195985408=1&196001792=1&196018176=1&196034560=1&196050944=1&196067328=1&196083712=1&196100096=1&196116480=1&196132864=1&196149248=1&196165632=1&196182016=1&196198400=1&196214784=1&196231168=1&196247552=1&196263936=1&196280320=1&196296704=1&196313088=1&196329472=1&196345856=1&196362240=1&196378624=1&196395008=1&196411392=1&196427776=1&196444160=1&196460544=1&196476928=1&196493312=1&196509696=1&196526080=1&196542464=1&196558848=1&196575232=1&196591616=1&196608000=1&196624384=1&196640768=1&196657152=1&196673536=1&196689920=1&196706304=1&196722688=1&196739072=1&196755456=1&196771840=1&196788224=1&196804608=1&196820992=1&196837376=1&196853760=1&196870144=1&196886528=1&196902912=1&196919296=1&196935680=1&196952064=1&196968448=1&196984832=1&197001216=1&197017600=1&197033984=1&197050368=1&197066752=1&197083136=1&197099520=1&197115904=1&197132288=1&197148672=1&197165056=1&197181440=1&197197824=1&197214208=1&197230592=1&197246976=1&197263360=1&197279744=1&197296128=1&197312512=1&197328896=1&197345280=1&197361664=1&197378048=1&197394432=1&197410816=1&197427200=1&197443584=1&197459968=1&197476352=1&197492736=1&197509120=1&197525504=1&197541888=1&197558272=1&197574656=1&197591040=1&197607424=1&197623808=1&197640192=1&197656576=1&197672960=1&197689344=1&197705728=1&197722112=1&197738496=1&197754880=1&197771264=1&197787648=1&197804032=1&197820416=1&197836800=1&197853184=1&197869568=1&197885952=1&197902336=1&197918720=1&197935104=1&197951488=1&197967872=1&197984256=1&198000640=1&198017024=1&198033408=1&198049792=1&198066176=1&198082560=1&198098944=1&198115328=1&198131712=1&198148096=1&198164480=1&198180864=1&198197248=1&198213632=1&198230016=1&198246400=1&198262784=1&198279168=1&198295552=1&198311936=1&198328320=1&198344704=1&198361088=1&198377472=1&198393856=1&198410240=1&198426624=1&198443008=1&198459392=1&198475776=1&198492160=1&198508544=1&198524928=1&198541312=1&198557696=1&198574080=1&198590464=1&198606848=1&198623232=1&198639616=1&198656000=1&198672384=1&198688768=1&198705152=1&198721536=1&198737920=1&198754304=1&198770688=1&198787072=1&198803456=1&198819840=1&198836224=1&198852608=1&198868992=1&198885376=1&198901760=1&198918144=1&198934528=1&198950912=1&198967296=1&198983680=1&199000064=1&199016448=1&199032832=1&199049216=1&199065600=1&199081984=1&199098368=1&199114752=1&199131136=1&199147520=1&199163904=1&199180288=1&199196672=1&199213056=1&199229440=1&199245824=1&199262208=1&199278592=1&199294976=1&199311360=1&199327744=1&199344128=1&199360512=1&199376896=1&199393280=1&199409664=1&199426048=1&199442432=1&199458816=1&199475200=1&199491584=1&199507968=1&199524352=1&199540736=1&199557120=1&199573504=1&199589888=1&199606272=1&199622656=1&199639040=1&199655424=1&199671808=1&199688192=1&199704576=1&199720960=1&199737344=1&199753728=1&199770112=1&199786496=1&199802880=1&199819264=1&199835648=1&199852032=1&199868416=1&199884800=1&199901184=1&199917568=1&199933952=1&199950336=1&199966720=1&199983104=1&199999488=1&200015872=1&200032256=1&200048640=1&200065024=1&200081408=1&200097792=1&200114176=1&200130560=1&200146944=1&200163328=1&200179712=1&200196096=1&200212480=1&200228864=1&200245248=1&200261632=1&200278016=1&200294400=1&200310784=1&200327168=1&200343552=1&200359936=1&200376320=1&200392704=1&200409088=1&200425472=1&200441856=1&200458240=1&200474624=1&200491008=1&200507392=1&200523776=1&200540160=1&200556544=1&200572928=1&200589312=1&200605696=1&200622080=1&200638464=1&200654848=1&200671232=1&200687616=1&200704000=1&200720384=1&200736768=1&200753152=1&200769536=1&200785920=1&200802304=1&200818688=1&200835072=1&200851456=1&200867840=1&200884224=1&200900608=1&200916992=1&200933376=1&200949760=1&200966144=1&200982528=1&200998912=1&201015296=1&201031680=1&201048064=1&201064448=1&201080832=1&201097216=1&201113600=1&201129984=1&201146368=1&201162752=1&201179136=1&201195520=1&201211904=1&201228288=1&201244672=1&201261056=1&201277440=1&201293824=1&201310208=1&201326592=1&201342976=1&201359360=1&201375744=1&201392128=1&201408512=1&201424896=1&201441280=1&201457664=1&201474048=1&201490432=1&201506816=1&201523200=1&201539584=1&201555968=1&201572352=1&201588736=1&201605120=1&201621504=1&201637888=1&201654272=1&201670656=1&201687040=1&201703424=1&201719808=1&201736192=1&201752576=1&201768960=1&201785344=1&201801728=1&201818112=1&201834496=1&201850880=1&201867264=1&201883648=1&201900032=1&201916416=1&201932800=1&201949184=1&201965568=1&201981952=1&201998336=1&202014720=1&202031104=1&202047488=1&202063872=1&202080256=1&202096640=1&202113024=1&202129408=1&202145792=1&202162176=1&202178560=1&202194944=1&202211328=1&202227712=1&202244096=1&202260480=1&202276864=1&202293248=1&202309632=1&202326016=1&202342400=1&202358784=1&202375168=1&202391552=1&202407936=1&202424320=1&202440704=1&202457088=1&202473472=1&202489856=1&202506240=1&202522624=1&202539008=1&202555392=1&202571776=1&202588160=1&202604544=1&202620928=1&202637312=1&202653696=1&202670080=1&202686464=1&202702848=1&202719232=1&202735616=1&202752000=1&202768384=1&202784768=1&202801152=1&202817536=1&202833920=1&202850304=1&202866688=1&202883072=1&202899456=1&202915840=1&202932224=1&202948608=1&202964992=1&202981376=1&202997760=1&203014144=1&203030528=1&203046912=1&203063296=1&203079680=1&203096064=1&203112448=1&203128832=1&203145216=1&203161600=1&203177984=1&203194368=1&203210752=1&203227136=1&203243520=1&203259904=1&203276288=1&203292672=1&203309056=1&203325440=1&203341824=1&203358208=1&203374592=1&203390976=1&203407360=1&203423744=1&203440128=1&203456512=1&203472896=1&203489280=1&203505664=1&203522048=1&203538432=1&203554816=1&203571200=1&203587584=1&203603968=1&203620352=1&203636736=1&203653120=1&203669504=1&203685888=1&203702272=1&203718656=1&203735040=1&203751424=1&203767808=1&203784192=1&203800576=1&203816960=1&203833344=1&203849728=1&203866112=1&203882496=1&203898880=1&203915264=1&203931648=1&203948032=1&203964416=1&203980800=1&203997184=1&204013568=1&204029952=1&204046336=1&204062720=1&204079104=1&204095488=1&204111872=1&204128256=1&204144640=1&204161024=1&204177408=1&204193792=1&204210176=1&204226560=1&204242944=1&204259328=1&204275712=1&204292096=1&204308480=1&204324864=1&204341248=1&204357632=1&204374016=1&204390400=1&204406784=1&204423168=1&204439552=1&204455936=1&204472320=1&204488704=1&204505088=1&204521472=1&204537856=1&204554240=1&204570624=1&204587008=1&204603392=1&204619776=1&204636160=1&204652544=1&204668928=1&204685312=1&204701696=1&204718080=1&204734464=1&204750848=1&204767232=1&204783616=1&204800000=1&204816384=1&204832768=1&204849152=1&204865536=1&204881920=1&204898304=1&204914688=1&204931072=1&204947456=1&204963840=1&204980224=1&204996608=1&205012992=1&205029376=1&205045760=1&205062144=1&205078528=1&205094912=1&205111296=1&205127680=1&205144064=1&205160448=1&205176832=1&205193216=1&205209600=1&205225984=1&205242368=1&205258752=1&205275136=1&205291520=1&205307904=1&205324288=1&205340672=1&205357056=1&205373440=1&205389824=1&205406208=1&205422592=1&205438976=1&205455360=1&205471744=1&205488128=1&205504512=1&205520896=1&205537280=1&205553664=1&205570048=1&205586432=1&205602816=1&205619200=1&205635584=1&205651968=1&205668352=1&205684736=1&205701120=1&205717504=1&205733888=1&205750272=1&205766656=1&205783040=1&205799424=1&205815808=1&205832192=1&205848576=1&205864960=1&205881344=1&205897728=1&205914112=1&205930496=1&205946880=1&205963264=1&205979648=1&205996032=1&206012416=1&206028800=1&206045184=1&206061568=1&206077952=1&206094336=1&206110720=1&206127104=1&206143488=1&206159872=1&206176256=1&206192640=1&206209024=1&206225408=1&206241792=1&206258176=1&206274560=1&206290944=1&206307328=1&206323712=1&206340096=1&206356480=1&206372864=1&206389248=1&206405632=1&206422016=1&206438400=1&206454784=1&206471168=1&206487552=1&206503936=1&206520320=1&206536704=1&206553088=1&206569472=1&206585856=1&206602240=1&206618624=1&206635008=1&206651392=1&206667776=1&206684160=1&206700544=1&206716928=1&206733312=1&206749696=1&206766080=1&206782464=1&206798848=1&206815232=1&206831616=1&206848000=1&206864384=1&206880768=1&206897152=1&206913536=1&206929920=1&206946304=1&206962688=1&206979072=1&206995456=1&207011840=1&207028224=1&207044608=1&207060992=1&207077376=1&207093760=1&207110144=1&207126528=1&207142912=1&207159296=1&207175680=1&207192064=1&207208448=1&207224832=1&207241216=1&207257600=1&207273984=1&207290368=1&207306752=1&207323136=1&207339520=1&207355904=1&207372288=1&207388672=1&207405056=1&207421440=1&207437824=1&207454208=1&207470592=1&207486976=1&207503360=1&207519744=1&207536128=1&207552512=1&207568896=1&207585280=1&207601664=1&207618048=1&207634432=1&207650816=1&207667200=1&207683584=1&207699968=1&207716352=1&207732736=1&207749120=1&207765504=1&207781888=1&207798272=1&207814656=1&207831040=1&207847424=1&207863808=1&207880192=1&207896576=1&207912960=1&207929344=1&207945728=1&207962112=1&207978496=1&207994880=1&208011264=1&208027648=1&208044032=1&208060416=1&208076800=1&208093184=1&208109568=1&208125952=1&208142336=1&208158720=1&208175104=1&208191488=1&208207872=1&208224256=1&208240640=1&208257024=1&208273408=1&208289792=1&208306176=1&208322560=1&208338944=1&208355328=1&208371712=1&208388096=1&208404480=1&208420864=1&208437248=1&208453632=1&208470016=1&208486400=1&208502784=1&208519168=1&208535552=1&208551936=1&208568320=1&208584704=1&208601088=1&208617472=1&208633856=1&208650240=1&208666624=1&208683008=1&208699392=1&208715776=1&208732160=1&208748544=1&208764928=1&208781312=1&208797696=1&208814080=1&208830464=1&208846848=1&208863232=1&208879616=1&208896000=1&208912384=1&208928768=1&208945152=1&208961536=1&208977920=1&208994304=1&209010688=1&209027072=1&209043456=1&209059840=1&209076224=1&209092608=1&209108992=1&209125376=1&209141760=1&209158144=1&209174528=1&209190912=1&209207296=1&209223680=1&209240064=1&209256448=1&209272832=1&209289216=1&209305600=1&209321984=1&209338368=1&209354752=1&209371136=1&209387520=1&209403904=1&209420288=1&209436672=1&209453056=1&209469440=1&209485824=1&209502208=1&209518592=1&209534976=1&209551360=1&209567744=1&209584128=1&209600512=1&209616896=1&209633280=1&209649664=1&209666048=1&209682432=1&209698816=1&209715200=1&209731584=1&209747968=1&209764352=1&209780736=1&209797120=1&209813504=1&209829888=1&209846272=1&209862656=1&209879040=1&209895424=1&209911808=1&209928192=1&209944576=1&209960960=1&209977344=1&209993728=1&210010112=1&210026496=1&210042880=1&210059264=1&210075648=1&210092032=1&210108416=1&210124800=1&210141184=1&210157568=1&210173952=1&210190336=1&210206720=1&210223104=1&210239488=1&210255872=1&210272256=1&210288640=1&210305024=1&210321408=1&210337792=1&210354176=1&210370560=1&210386944=1&210403328=1&210419712=1&210436096=1&210452480=1&210468864=1&210485248=1&210501632=1&210518016=1&210534400=1&210550784=1&210567168=1&210583552=1&210599936=1&210616320=1&210632704=1&210649088=1&210665472=1&210681856=1&210698240=1&210714624=1&210731008=1&210747392=1&210763776=1&210780160=1&210796544=1&210812928=1&210829312=1&210845696=1&210862080=1&210878464=1&210894848=1&210911232=1&210927616=1&210944000=1&210960384=1&210976768=1&210993152=1&211009536=1&211025920=1&211042304=1&211058688=1&211075072=1&211091456=1&211107840=1&211124224=1&211140608=1&211156992=1&211173376=1&211189760=1&211206144=1&211222528=1&211238912=1&211255296=1&211271680=1&211288064=1&211304448=1&211320832=1&211337216=1&211353600=1&211369984=1&211386368=1&211402752=1&211419136=1&211435520=1&211451904=1&211468288=1&211484672=1&211501056=1&211517440=1&211533824=1&211550208=1&211566592=1&211582976=1&211599360=1&211615744=1&211632128=1&211648512=1&211664896=1&211681280=1&211697664=1&211714048=1&211730432=1&211746816=1&211763200=1&211779584=1&211795968=1&211812352=1&211828736=1&211845120=1&211861504=1&211877888=1&211894272=1&211910656=1&211927040=1&211943424=1&211959808=1&211976192=1&211992576=1&212008960=1&212025344=1&212041728=1&212058112=1&212074496=1&212090880=1&212107264=1&212123648=1&212140032=1&212156416=1&212172800=1&212189184=1&212205568=1&212221952=1&212238336=1&212254720=1&212271104=1&212287488=1&212303872=1&212320256=1&212336640=1&212353024=1&212369408=1&212385792=1&212402176=1&212418560=1&212434944=1&212451328=1&212467712=1&212484096=1&212500480=1&212516864=1&212533248=1&212549632=1&212566016=1&212582400=1&212598784=1&212615168=1&212631552=1&212647936=1&212664320=1&212680704=1&212697088=1&212713472=1&212729856=1&212746240=1&212762624=1&212779008=1&212795392=1&212811776=1&212828160=1&212844544=1&212860928=1&212877312=1&212893696=1&212910080=1&212926464=1&212942848=1&212959232=1&212975616=1&212992000=1&213008384=1&213024768=1&213041152=1&213057536=1&213073920=1&213090304=1&213106688=1&213123072=1&213139456=1&213155840=1&213172224=1&213188608=1&213204992=1&213221376=1&213237760=1&213254144=1&213270528=1&213286912=1&213303296=1&213319680=1&213336064=1&213352448=1&213368832=1&213385216=1&213401600=1&213417984=1&213434368=1&213450752=1&213467136=1&213483520=1&213499904=1&213516288=1&213532672=1&213549056=1&213565440=1&213581824=1&213598208=1&213614592=1&213630976=1&213647360=1&213663744=1&213680128=1&213696512=1&213712896=1&213729280=1&213745664=1&213762048=1&213778432=1&213794816=1&213811200=1&213827584=1&213843968=1&213860352=1&213876736=1&213893120=1&213909504=1&213925888=1&213942272=1&213958656=1&213975040=1&213991424=1&214007808=1&214024192=1&214040576=1&214056960=1&214073344=1&214089728=1&214106112=1&214122496=1&214138880=1&214155264=1&214171648=1&214188032=1&214204416=1&214220800=1&214237184=1&214253568=1&214269952=1&214286336=1&214302720=1&214319104=1&214335488=1&214351872=1&214368256=1&214384640=1&214401024=1&214417408=1&214433792=1&214450176=1&214466560=1&214482944=1&214499328=1&214515712=1&214532096=1&214548480=1&214564864=1&214581248=1&214597632=1&214614016=1&214630400=1&214646784=1&214663168=1&214679552=1&214695936=1&214712320=1&214728704=1&214745088=1&214761472=1&214777856=1&214794240=1&214810624=1&214827008=1&214843392=1&214859776=1&214876160=1&214892544=1&214908928=1&214925312=1&214941696=1&214958080=1&214974464=1&214990848=1&215007232=1&215023616=1&215040000=1&215056384=1&215072768=1&215089152=1&215105536=1&215121920=1&215138304=1&215154688=1&215171072=1&215187456=1&215203840=1&215220224=1&215236608=1&215252992=1&215269376=1&215285760=1&215302144=1&215318528=1&215334912=1&215351296=1&215367680=1&215384064=1&215400448=1&215416832=1&215433216=1&215449600=1&215465984=1&215482368=1&215498752=1&215515136=1&215531520=1&215547904=1&215564288=1&215580672=1&215597056=1&215613440=1&215629824=1&215646208=1&215662592=1&215678976=1&215695360=1&215711744=1&215728128=1&215744512=1&215760896=1&215777280=1&215793664=1&215810048=1&215826432=1&215842816=1&215859200=1&215875584=1&215891968=1&215908352=1&215924736=1&215941120=1&215957504=1&215973888=1&215990272=1&216006656=1&216023040=1&216039424=1&216055808=1&216072192=1&216088576=1&216104960=1&216121344=1&216137728=1&216154112=1&216170496=1&216186880=1&216203264=1&216219648=1&216236032=1&216252416=1&216268800=1&216285184=1&216301568=1&216317952=1&216334336=1&216350720=1&216367104=1&216383488=1&216399872=1&216416256=1&216432640=1&216449024=1&216465408=1&216481792=1&216498176=1&216514560=1&216530944=1&216547328=1&216563712=1&216580096=1&216596480=1&216612864=1&216629248=1&216645632=1&216662016=1&216678400=1&216694784=1&216711168=1&216727552=1&216743936=1&216760320=1&216776704=1&216793088=1&216809472=1&216825856=1&216842240=1&216858624=1&216875008=1&216891392=1&216907776=1&216924160=1&216940544=1&216956928=1&216973312=1&216989696=1&217006080=1&217022464=1&217038848=1&217055232=1&217071616=1&217088000=1&217104384=1&217120768=1&217137152=1&217153536=1&217169920=1&217186304=1&217202688=1&217219072=1&217235456=1&217251840=1&217268224=1&217284608=1&217300992=1&217317376=1&217333760=1&217350144=1&217366528=1&217382912=1&217399296=1&217415680=1&217432064=1&217448448=1&217464832=1&217481216=1&217497600=1&217513984=1&217530368=1&217546752=1&217563136=1&217579520=1&217595904=1&217612288=1&217628672=1&217645056=1&217661440=1&217677824=1&217694208=1&217710592=1&217726976=1&217743360=1&217759744=1&217776128=1&217792512=1&217808896=1&217825280=1&217841664=1&217858048=1&217874432=1&217890816=1&217907200=1&217923584=1&217939968=1&217956352=1&217972736=1&217989120=1&218005504=1&218021888=1&218038272=1&218054656=1&218071040=1&218087424=1&218103808=1&218120192=1&218136576=1&218152960=1&218169344=1&218185728=1&218202112=1&218218496=1&218234880=1&218251264=1&218267648=1&218284032=1&218300416=1&218316800=1&218333184=1&218349568=1&218365952=1&218382336=1&218398720=1&218415104=1&218431488=1&218447872=1&218464256=1&218480640=1&218497024=1&218513408=1&218529792=1&218546176=1&218562560=1&218578944=1&218595328=1&218611712=1&218628096=1&218644480=1&218660864=1&218677248=1&218693632=1&218710016=1&218726400=1&218742784=1&218759168=1&218775552=1&218791936=1&218808320=1&218824704=1&218841088=1&218857472=1&218873856=1&218890240=1&218906624=1&218923008=1&218939392=1&218955776=1&218972160=1&218988544=1&219004928=1&219021312=1&219037696=1&219054080=1&219070464=1&219086848=1&219103232=1&219119616=1&219136000=1&219152384=1&219168768=1&219185152=1&219201536=1&219217920=1&219234304=1&219250688=1&219267072=1&219283456=1&219299840=1&219316224=1&219332608=1&219348992=1&219365376=1&219381760=1&219398144=1&219414528=1&219430912=1&219447296=1&219463680=1&219480064=1&219496448=1&219512832=1&219529216=1&219545600=1&219561984=1&219578368=1&219594752=1&219611136=1&219627520=1&219643904=1&219660288=1&219676672=1&219693056=1&219709440=1&219725824=1&219742208=1&219758592=1&219774976=1&219791360=1&219807744=1&219824128=1&219840512=1&219856896=1&219873280=1&219889664=1&219906048=1&219922432=1&219938816=1&219955200=1&219971584=1&219987968=1&220004352=1&220020736=1&220037120=1&220053504=1&220069888=1&220086272=1&220102656=1&220119040=1&220135424=1&220151808=1&220168192=1&220184576=1&220200960=1&220217344=1&220233728=1&220250112=1&220266496=1&220282880=1&220299264=1&220315648=1&220332032=1&220348416=1&220364800=1&220381184=1&220397568=1&220413952=1&220430336=1&220446720=1&220463104=1&220479488=1&220495872=1&220512256=1&220528640=1&220545024=1&220561408=1&220577792=1&220594176=1&220610560=1&220626944=1&220643328=1&220659712=1&220676096=1&220692480=1&220708864=1&220725248=1&220741632=1&220758016=1&220774400=1&220790784=1&220807168=1&220823552=1&220839936=1&220856320=1&220872704=1&220889088=1&220905472=1&220921856=1&220938240=1&220954624=1&220971008=1&220987392=1&221003776=1&221020160=1&221036544=1&221052928=1&221069312=1&221085696=1&221102080=1&221118464=1&221134848=1&221151232=1&221167616=1&221184000=1&221200384=1&221216768=1&221233152=1&221249536=1&221265920=1&221282304=1&221298688=1&221315072=1&221331456=1&221347840=1&221364224=1&221380608=1&221396992=1&221413376=1&221429760=1&221446144=1&221462528=1&221478912=1&221495296=1&221511680=1&221528064=1&221544448=1&221560832=1&221577216=1&221593600=1&221609984=1&221626368=1&221642752=1&221659136=1&221675520=1&221691904=1&221708288=1&221724672=1&221741056=1&221757440=1&221773824=1&221790208=1&221806592=1&221822976=1&221839360=1&221855744=1&221872128=1&221888512=1&221904896=1&221921280=1&221937664=1&221954048=1&221970432=1&221986816=1&222003200=1&222019584=1&222035968=1&222052352=1&222068736=1&222085120=1&222101504=1&222117888=1&222134272=1&222150656=1&222167040=1&222183424=1&222199808=1&222216192=1&222232576=1&222248960=1&222265344=1&222281728=1&222298112=1&222314496=1&222330880=1&222347264=1&222363648=1&222380032=1&222396416=1&222412800=1&222429184=1&222445568=1&222461952=1&222478336=1&222494720=1&222511104=1&222527488=1&222543872=1&222560256=1&222576640=1&222593024=1&222609408=1&222625792=1&222642176=1&222658560=1&222674944=1&222691328=1&222707712=1&222724096=1&222740480=1&222756864=1&222773248=1&222789632=1&222806016=1&222822400=1&222838784=1&222855168=1&222871552=1&222887936=1&222904320=1&222920704=1&222937088=1&222953472=1&222969856=1&222986240=1&223002624=1&223019008=1&223035392=1&223051776=1&223068160=1&223084544=1&223100928=1&223117312=1&223133696=1&223150080=1&223166464=1&223182848=1&223199232=1&223215616=1&223232000=1&223248384=1&223264768=1&223281152=1&223297536=1&223313920=1&223330304=1&223346688=1&223363072=1&223379456=1&223395840=1&223412224=1&223428608=1&223444992=1&223461376=1&223477760=1&223494144=1&223510528=1&223526912=1&223543296=1&223559680=1&223576064=1&223592448=1&223608832=1&223625216=1&223641600=1&223657984=1&223674368=1&223690752=1&223707136=1&223723520=1&223739904=1&223756288=1&223772672=1&223789056=1&223805440=1&223821824=1&223838208=1&223854592=1&223870976=1&223887360=1&223903744=1&223920128=1&223936512=1&223952896=1&223969280=1&223985664=1&224002048=1&224018432=1&224034816=1&224051200=1&224067584=1&224083968=1&224100352=1&224116736=1&224133120=1&224149504=1&224165888=1&224182272=1&224198656=1&224215040=1&224231424=1&224247808=1&224264192=1&224280576=1&224296960=1&224313344=1&224329728=1&224346112=1&224362496=1&224378880=1&224395264=1&224411648=1&224428032=1&224444416=1&224460800=1&224477184=1&224493568=1&224509952=1&224526336=1&224542720=1&224559104=1&224575488=1&224591872=1&224608256=1&224624640=1&224641024=1&224657408=1&224673792=1&224690176=1&224706560=1&224722944=1&224739328=1&224755712=1&224772096=1&224788480=1&224804864=1&224821248=1&224837632=1&224854016=1&224870400=1&224886784=1&224903168=1&224919552=1&224935936=1&224952320=1&224968704=1&224985088=1&225001472=1&225017856=1&225034240=1&225050624=1&225067008=1&225083392=1&225099776=1&225116160=1&225132544=1&225148928=1&225165312=1&225181696=1&225198080=1&225214464=1&225230848=1&225247232=1&225263616=1&225280000=1&225296384=1&225312768=1&225329152=1&225345536=1&225361920=1&225378304=1&225394688=1&225411072=1&225427456=1&225443840=1&225460224=1&225476608=1&225492992=1&225509376=1&225525760=1&225542144=1&225558528=1&225574912=1&225591296=1&225607680=1&225624064=1&225640448=1&225656832=1&225673216=1&225689600=1&225705984=1&225722368=1&225738752=1&225755136=1&225771520=1&225787904=1&225804288=1&225820672=1&225837056=1&225853440=1&225869824=1&225886208=1&225902592=1&225918976=1&225935360=1&225951744=1&225968128=1&225984512=1&226000896=1&226017280=1&226033664=1&226050048=1&226066432=1&226082816=1&226099200=1&226115584=1&226131968=1&226148352=1&226164736=1&226181120=1&226197504=1&226213888=1&226230272=1&226246656=1&226263040=1&226279424=1&226295808=1&226312192=1&226328576=1&226344960=1&226361344=1&226377728=1&226394112=1&226410496=1&226426880=1&226443264=1&226459648=1&226476032=1&226492416=1&226508800=1&226525184=1&226541568=1&226557952=1&226574336=1&226590720=1&226607104=1&226623488=1&226639872=1&226656256=1&226672640=1&226689024=1&226705408=1&226721792=1&226738176=1&226754560=1&226770944=1&226787328=1&226803712=1&226820096=1&226836480=1&226852864=1&226869248=1&226885632=1&226902016=1&226918400=1&226934784=1&226951168=1&226967552=1&226983936=1&227000320=1&227016704=1&227033088=1&227049472=1&227065856=1&227082240=1&227098624=1&227115008=1&227131392=1&227147776=1&227164160=1&227180544=1&227196928=1&227213312=1&227229696=1&227246080=1&227262464=1&227278848=1&227295232=1&227311616=1&227328000=1&227344384=1&227360768=1&227377152=1&227393536=1&227409920=1&227426304=1&227442688=1&227459072=1&227475456=1&227491840=1&227508224=1&227524608=1&227540992=1&227557376=1&227573760=1&227590144=1&227606528=1&227622912=1&227639296=1&227655680=1&227672064=1&227688448=1&227704832=1&227721216=1&227737600=1&227753984=1&227770368=1&227786752=1&227803136=1&227819520=1&227835904=1&227852288=1&227868672=1&227885056=1&227901440=1&227917824=1&227934208=1&227950592=1&227966976=1&227983360=1&227999744=1&228016128=1&228032512=1&228048896=1&228065280=1&228081664=1&228098048=1&228114432=1&228130816=1&228147200=1&228163584=1&228179968=1&228196352=1&228212736=1&228229120=1&228245504=1&228261888=1&228278272=1&228294656=1&228311040=1&228327424=1&228343808=1&228360192=1&228376576=1&228392960=1&228409344=1&228425728=1&228442112=1&228458496=1&228474880=1&228491264=1&228507648=1&228524032=1&228540416=1&228556800=1&228573184=1&228589568=1&228605952=1&228622336=1&228638720=1&228655104=1&228671488=1&228687872=1&228704256=1&228720640=1&228737024=1&228753408=1&228769792=1&228786176=1&228802560=1&228818944=1&228835328=1&228851712=1&228868096=1&228884480=1&228900864=1&228917248=1&228933632=1&228950016=1&228966400=1&228982784=1&228999168=1&229015552=1&229031936=1&229048320=1&229064704=1&229081088=1&229097472=1&229113856=1&229130240=1&229146624=1&229163008=1&229179392=1&229195776=1&229212160=1&229228544=1&229244928=1&229261312=1&229277696=1&229294080=1&229310464=1&229326848=1&229343232=1&229359616=1&229376000=1&229392384=1&229408768=1&229425152=1&229441536=1&229457920=1&229474304=1&229490688=1&229507072=1&229523456=1&229539840=1&229556224=1&229572608=1&229588992=1&229605376=1&229621760=1&229638144=1&229654528=1&229670912=1&229687296=1&229703680=1&229720064=1&229736448=1&229752832=1&229769216=1&229785600=1&229801984=1&229818368=1&229834752=1&229851136=1&229867520=1&229883904=1&229900288=1&229916672=1&229933056=1&229949440=1&229965824=1&229982208=1&229998592=1&230014976=1&230031360=1&230047744=1&230064128=1&230080512=1&230096896=1&230113280=1&230129664=1&230146048=1&230162432=1&230178816=1&230195200=1&230211584=1&230227968=1&230244352=1&230260736=1&230277120=1&230293504=1&230309888=1&230326272=1&230342656=1&230359040=1&230375424=1&230391808=1&230408192=1&230424576=1&230440960=1&230457344=1&230473728=1&230490112=1&230506496=1&230522880=1&230539264=1&230555648=1&230572032=1&230588416=1&230604800=1&230621184=1&230637568=1&230653952=1&230670336=1&230686720=1&230703104=1&230719488=1&230735872=1&230752256=1&230768640=1&230785024=1&230801408=1&230817792=1&230834176=1&230850560=1&230866944=1&230883328=1&230899712=1&230916096=1&230932480=1&230948864=1&230965248=1&230981632=1&230998016=1&231014400=1&231030784=1&231047168=1&231063552=1&231079936=1&231096320=1&231112704=1&231129088=1&231145472=1&231161856=1&231178240=1&231194624=1&231211008=1&231227392=1&231243776=1&231260160=1&231276544=1&231292928=1&231309312=1&231325696=1&231342080=1&231358464=1&231374848=1&231391232=1&231407616=1&231424000=1&231440384=1&231456768=1&231473152=1&231489536=1&231505920=1&231522304=1&231538688=1&231555072=1&231571456=1&231587840=1&231604224=1&231620608=1&231636992=1&231653376=1&231669760=1&231686144=1&231702528=1&231718912=1&231735296=1&231751680=1&231768064=1&231784448=1&231800832=1&231817216=1&231833600=1&231849984=1&231866368=1&231882752=1&231899136=1&231915520=1&231931904=1&231948288=1&231964672=1&231981056=1&231997440=1&232013824=1&232030208=1&232046592=1&232062976=1&232079360=1&232095744=1&232112128=1&232128512=1&232144896=1&232161280=1&232177664=1&232194048=1&232210432=1&232226816=1&232243200=1&232259584=1&232275968=1&232292352=1&232308736=1&232325120=1&232341504=1&232357888=1&232374272=1&232390656=1&232407040=1&232423424=1&232439808=1&232456192=1&232472576=1&232488960=1&232505344=1&232521728=1&232538112=1&232554496=1&232570880=1&232587264=1&232603648=1&232620032=1&232636416=1&232652800=1&232669184=1&232685568=1&232701952=1&232718336=1&232734720=1&232751104=1&232767488=1&232783872=1&232800256=1&232816640=1&232833024=1&232849408=1&232865792=1&232882176=1&232898560=1&232914944=1&232931328=1&232947712=1&232964096=1&232980480=1&232996864=1&233013248=1&233029632=1&233046016=1&233062400=1&233078784=1&233095168=1&233111552=1&233127936=1&233144320=1&233160704=1&233177088=1&233193472=1&233209856=1&233226240=1&233242624=1&233259008=1&233275392=1&233291776=1&233308160=1&233324544=1&233340928=1&233357312=1&233373696=1&233390080=1&233406464=1&233422848=1&233439232=1&233455616=1&233472000=1&233488384=1&233504768=1&233521152=1&233537536=1&233553920=1&233570304=1&233586688=1&233603072=1&233619456=1&233635840=1&233652224=1&233668608=1&233684992=1&233701376=1&233717760=1&233734144=1&233750528=1&233766912=1&233783296=1&233799680=1&233816064=1&233832448=1&233848832=1&233865216=1&233881600=1&233897984=1&233914368=1&233930752=1&233947136=1&233963520=1&233979904=1&233996288=1&234012672=1&234029056=1&234045440=1&234061824=1&234078208=1&234094592=1&234110976=1&234127360=1&234143744=1&234160128=1&234176512=1&234192896=1&234209280=1&234225664=1&234242048=1&234258432=1&234274816=1&234291200=1&234307584=1&234323968=1&234340352=1&234356736=1&234373120=1&234389504=1&234405888=1&234422272=1&234438656=1&234455040=1&234471424=1&234487808=1&234504192=1&234520576=1&234536960=1&234553344=1&234569728=1&234586112=1&234602496=1&234618880=1&234635264=1&234651648=1&234668032=1&234684416=1&234700800=1&234717184=1&234733568=1&234749952=1&234766336=1&234782720=1&234799104=1&234815488=1&234831872=1&234848256=1&234864640=1&234881024=1&234897408=1&234913792=1&234930176=1&234946560=1&234962944=1&234979328=1&234995712=1&235012096=1&235028480=1&235044864=1&235061248=1&235077632=1&235094016=1&235110400=1&235126784=1&235143168=1&235159552=1&235175936=1&235192320=1&235208704=1&235225088=1&235241472=1&235257856=1&235274240=1&235290624=1&235307008=1&235323392=1&235339776=1&235356160=1&235372544=1&235388928=1&235405312=1&235421696=1&235438080=1&235454464=1&235470848=1&235487232=1&235503616=1&235520000=1&235536384=1&235552768=1&235569152=1&235585536=1&235601920=1&235618304=1&235634688=1&235651072=1&235667456=1&235683840=1&235700224=1&235716608=1&235732992=1&235749376=1&235765760=1&235782144=1&235798528=1&235814912=1&235831296=1&235847680=1&235864064=1&235880448=1&235896832=1&235913216=1&235929600=1&235945984=1&235962368=1&235978752=1&235995136=1&236011520=1&236027904=1&236044288=1&236060672=1&236077056=1&236093440=1&236109824=1&236126208=1&236142592=1&236158976=1&236175360=1&236191744=1&236208128=1&236224512=1&236240896=1&236257280=1&236273664=1&236290048=1&236306432=1&236322816=1&236339200=1&236355584=1&236371968=1&236388352=1&236404736=1&236421120=1&236437504=1&236453888=1&236470272=1&236486656=1&236503040=1&236519424=1&236535808=1&236552192=1&236568576=1&236584960=1&236601344=1&236617728=1&236634112=1&236650496=1&236666880=1&236683264=1&236699648=1&236716032=1&236732416=1&236748800=1&236765184=1&236781568=1&236797952=1&236814336=1&236830720=1&236847104=1&236863488=1&236879872=1&236896256=1&236912640=1&236929024=1&236945408=1&236961792=1&236978176=1&236994560=1&237010944=1&237027328=1&237043712=1&237060096=1&237076480=1&237092864=1&237109248=1&237125632=1&237142016=1&237158400=1&237174784=1&237191168=1&237207552=1&237223936=1&237240320=1&237256704=1&237273088=1&237289472=1&237305856=1&237322240=1&237338624=1&237355008=1&237371392=1&237387776=1&237404160=1&237420544=1&237436928=1&237453312=1&237469696=1&237486080=1&237502464=1&237518848=1&237535232=1&237551616=1&237568000=1&237584384=1&237600768=1&237617152=1&237633536=1&237649920=1&237666304=1&237682688=1&237699072=1&237715456=1&237731840=1&237748224=1&237764608=1&237780992=1&237797376=1&237813760=1&237830144=1&237846528=1&237862912=1&237879296=1&237895680=1&237912064=1&237928448=1&237944832=1&237961216=1&237977600=1&237993984=1&238010368=1&238026752=1&238043136=1&238059520=1&238075904=1&238092288=1&238108672=1&238125056=1&238141440=1&238157824=1&238174208=1&238190592=1&238206976=1&238223360=1&238239744=1&238256128=1&238272512=1&238288896=1&238305280=1&238321664=1&238338048=1&238354432=1&238370816=1&238387200=1&238403584=1&238419968=1&238436352=1&238452736=1&238469120=1&238485504=1&238501888=1&238518272=1&238534656=1&238551040=1&238567424=1&238583808=1&238600192=1&238616576=1&238632960=1&238649344=1&238665728=1&238682112=1&238698496=1&238714880=1&238731264=1&238747648=1&238764032=1&238780416=1&238796800=1&238813184=1&238829568=1&238845952=1&238862336=1&238878720=1&238895104=1&238911488=1&238927872=1&238944256=1&238960640=1&238977024=1&238993408=1&239009792=1&239026176=1&239042560=1&239058944=1&239075328=1&239091712=1&239108096=1&239124480=1&239140864=1&239157248=1&239173632=1&239190016=1&239206400=1&239222784=1&239239168=1&239255552=1&239271936=1&239288320=1&239304704=1&239321088=1&239337472=1&239353856=1&239370240=1&239386624=1&239403008=1&239419392=1&239435776=1&239452160=1&239468544=1&239484928=1&239501312=1&239517696=1&239534080=1&239550464=1&239566848=1&239583232=1&239599616=1&239616000=1&239632384=1&239648768=1&239665152=1&239681536=1&239697920=1&239714304=1&239730688=1&239747072=1&239763456=1&239779840=1&239796224=1&239812608=1&239828992=1&239845376=1&239861760=1&239878144=1&239894528=1&239910912=1&239927296=1&239943680=1&239960064=1&239976448=1&239992832=1&240009216=1&240025600=1&240041984=1&240058368=1&240074752=1&240091136=1&240107520=1&240123904=1&240140288=1&240156672=1&240173056=1&240189440=1&240205824=1&240222208=1&240238592=1&240254976=1&240271360=1&240287744=1&240304128=1&240320512=1&240336896=1&240353280=1&240369664=1&240386048=1&240402432=1&240418816=1&240435200=1&240451584=1&240467968=1&240484352=1&240500736=1&240517120=1&240533504=1&240549888=1&240566272=1&240582656=1&240599040=1&240615424=1&240631808=1&240648192=1&240664576=1&240680960=1&240697344=1&240713728=1&240730112=1&240746496=1&240762880=1&240779264=1&240795648=1&240812032=1&240828416=1&240844800=1&240861184=1&240877568=1&240893952=1&240910336=1&240926720=1&240943104=1&240959488=1&240975872=1&240992256=1&241008640=1&241025024=1&241041408=1&241057792=1&241074176=1&241090560=1&241106944=1&241123328=1&241139712=1&241156096=1&241172480=1&241188864=1&241205248=1&241221632=1&241238016=1&241254400=1&241270784=1&241287168=1&241303552=1&241319936=1&241336320=1&241352704=1&241369088=1&241385472=1&241401856=1&241418240=1&241434624=1&241451008=1&241467392=1&241483776=1&241500160=1&241516544=1&241532928=1&241549312=1&241565696=1&241582080=1&241598464=1&241614848=1&241631232=1&241647616=1&241664000=1&241680384=1&241696768=1&241713152=1&241729536=1&241745920=1&241762304=1&241778688=1&241795072=1&241811456=1&241827840=1&241844224=1&241860608=1&241876992=1&241893376=1&241909760=1&241926144=1&241942528=1&241958912=1&241975296=1&241991680=1&242008064=1&242024448=1&242040832=1&242057216=1&242073600=1&242089984=1&242106368=1&242122752=1&242139136=1&242155520=1&242171904=1&242188288=1&242204672=1&242221056=1&242237440=1&242253824=1&242270208=1&242286592=1&242302976=1&242319360=1&242335744=1&242352128=1&242368512=1&242384896=1&242401280=1&242417664=1&242434048=1&242450432=1&242466816=1&242483200=1&242499584=1&242515968=1&242532352=1&242548736=1&242565120=1&242581504=1&242597888=1&242614272=1&242630656=1&242647040=1&242663424=1&242679808=1&242696192=1&242712576=1&242728960=1&242745344=1&242761728=1&242778112=1&242794496=1&242810880=1&242827264=1&242843648=1&242860032=1&242876416=1&242892800=1&242909184=1&242925568=1&242941952=1&242958336=1&242974720=1&242991104=1&243007488=1&243023872=1&243040256=1&243056640=1&243073024=1&243089408=1&243105792=1&243122176=1&243138560=1&243154944=1&243171328=1&243187712=1&243204096=1&243220480=1&243236864=1&243253248=1&243269632=1&243286016=1&243302400=1&243318784=1&243335168=1&243351552=1&243367936=1&243384320=1&243400704=1&243417088=1&243433472=1&243449856=1&243466240=1&243482624=1&243499008=1&243515392=1&243531776=1&243548160=1&243564544=1&243580928=1&243597312=1&243613696=1&243630080=1&243646464=1&243662848=1&243679232=1&243695616=1&243712000=1&243728384=1&243744768=1&243761152=1&243777536=1&243793920=1&243810304=1&243826688=1&243843072=1&243859456=1&243875840=1&243892224=1&243908608=1&243924992=1&243941376=1&243957760=1&243974144=1&243990528=1&244006912=1&244023296=1&244039680=1&244056064=1&244072448=1&244088832=1&244105216=1&244121600=1&244137984=1&244154368=1&244170752=1&244187136=1&244203520=1&244219904=1&244236288=1&244252672=1&244269056=1&244285440=1&244301824=1&244318208=1&244334592=1&244350976=1&244367360=1&244383744=1&244400128=1&244416512=1&244432896=1&244449280=1&244465664=1&244482048=1&244498432=1&244514816=1&244531200=1&244547584=1&244563968=1&244580352=1&244596736=1&244613120=1&244629504=1&244645888=1&244662272=1&244678656=1&244695040=1&244711424=1&244727808=1&244744192=1&244760576=1&244776960=1&244793344=1&244809728=1&244826112=1&244842496=1&244858880=1&244875264=1&244891648=1&244908032=1&244924416=1&244940800=1&244957184=1&244973568=1&244989952=1&245006336=1&245022720=1&245039104=1&245055488=1&245071872=1&245088256=1&245104640=1&245121024=1&245137408=1&245153792=1&245170176=1&245186560=1&245202944=1&245219328=1&245235712=1&245252096=1&245268480=1&245284864=1&245301248=1&245317632=1&245334016=1&245350400=1&245366784=1&245383168=1&245399552=1&245415936=1&245432320=1&245448704=1&245465088=1&245481472=1&245497856=1&245514240=1&245530624=1&245547008=1&245563392=1&245579776=1&245596160=1&245612544=1&245628928=1&245645312=1&245661696=1&245678080=1&245694464=1&245710848=1&245727232=1&245743616=1&245760000=1&245776384=1&245792768=1&245809152=1&245825536=1&245841920=1&245858304=1&245874688=1&245891072=1&245907456=1&245923840=1&245940224=1&245956608=1&245972992=1&245989376=1&246005760=1&246022144=1&246038528=1&246054912=1&246071296=1&246087680=1&246104064=1&246120448=1&246136832=1&246153216=1&246169600=1&246185984=1&246202368=1&246218752=1&246235136=1&246251520=1&246267904=1&246284288=1&246300672=1&246317056=1&246333440=1&246349824=1&246366208=1&246382592=1&246398976=1&246415360=1&246431744=1&246448128=1&246464512=1&246480896=1&246497280=1&246513664=1&246530048=1&246546432=1&246562816=1&246579200=1&246595584=1&246611968=1&246628352=1&246644736=1&246661120=1&246677504=1&246693888=1&246710272=1&246726656=1&246743040=1&246759424=1&246775808=1&246792192=1&246808576=1&246824960=1&246841344=1&246857728=1&246874112=1&246890496=1&246906880=1&246923264=1&246939648=1&246956032=1&246972416=1&246988800=1&247005184=1&247021568=1&247037952=1&247054336=1&247070720=1&247087104=1&247103488=1&247119872=1&247136256=1&247152640=1&247169024=1&247185408=1&247201792=1&247218176=1&247234560=1&247250944=1&247267328=1&247283712=1&247300096=1&247316480=1&247332864=1&247349248=1&247365632=1&247382016=1&247398400=1&247414784=1&247431168=1&247447552=1&247463936=1&247480320=1&247496704=1&247513088=1&247529472=1&247545856=1&247562240=1&247578624=1&247595008=1&247611392=1&247627776=1&247644160=1&247660544=1&247676928=1&247693312=1&247709696=1&247726080=1&247742464=1&247758848=1&247775232=1&247791616=1&247808000=1&247824384=1&247840768=1&247857152=1&247873536=1&247889920=1&247906304=1&247922688=1&247939072=1&247955456=1&247971840=1&247988224=1&248004608=1&248020992=1&248037376=1&248053760=1&248070144=1&248086528=1&248102912=1&248119296=1&248135680=1&248152064=1&248168448=1&248184832=1&248201216=1&248217600=1&248233984=1&248250368=1&248266752=1&248283136=1&248299520=1&248315904=1&248332288=1&248348672=1&248365056=1&248381440=1&248397824=1&248414208=1&248430592=1&248446976=1&248463360=1&248479744=1&248496128=1&248512512=1&248528896=1&248545280=1&248561664=1&248578048=1&248594432=1&248610816=1&248627200=1&248643584=1&248659968=1&248676352=1&248692736=1&248709120=1&248725504=1&248741888=1&248758272=1&248774656=1&248791040=1&248807424=1&248823808=1&248840192=1&248856576=1&248872960=1&248889344=1&248905728=1&248922112=1&248938496=1&248954880=1&248971264=1&248987648=1&249004032=1&249020416=1&249036800=1&249053184=1&249069568=1&249085952=1&249102336=1&249118720=1&249135104=1&249151488=1&249167872=1&249184256=1&249200640=1&249217024=1&249233408=1&249249792=1&249266176=1&249282560=1&249298944=1&249315328=1&249331712=1&249348096=1&249364480=1&249380864=1&249397248=1&249413632=1&249430016=1&249446400=1&249462784=1&249479168=1&249495552=1&249511936=1&249528320=1&249544704=1&249561088=1&249577472=1&249593856=1&249610240=1&249626624=1&249643008=1&249659392=1&249675776=1&249692160=1&249708544=1&249724928=1&249741312=1&249757696=1&249774080=1&249790464=1&249806848=1&249823232=1&249839616=1&249856000=1&249872384=1&249888768=1&249905152=1&249921536=1&249937920=1&249954304=1&249970688=1&249987072=1&250003456=1&250019840=1&250036224=1&250052608=1&250068992=1&250085376=1&250101760=1&250118144=1&250134528=1&250150912=1&250167296=1&250183680=1&250200064=1&250216448=1&250232832=1&250249216=1&250265600=1&250281984=1&250298368=1&250314752=1&250331136=1&250347520=1&250363904=1&250380288=1&250396672=1&250413056=1&250429440=1&250445824=1&250462208=1&250478592=1&250494976=1&250511360=1&250527744=1&250544128=1&250560512=1&250576896=1&250593280=1&250609664=1&250626048=1&250642432=1&250658816=1&250675200=1&250691584=1&250707968=1&250724352=1&250740736=1&250757120=1&250773504=1&250789888=1&250806272=1&250822656=1&250839040=1&250855424=1&250871808=1&250888192=1&250904576=1&250920960=1&250937344=1&250953728=1&250970112=1&250986496=1&251002880=1&251019264=1&251035648=1&251052032=1&251068416=1&251084800=1&251101184=1&251117568=1&251133952=1&251150336=1&251166720=1&251183104=1&251199488=1&251215872=1&251232256=1&251248640=1&251265024=1&251281408=1&251297792=1&251314176=1&251330560=1&251346944=1&251363328=1&251379712=1&251396096=1&251412480=1&251428864=1&251445248=1&251461632=1&251478016=1&251494400=1&251510784=1&251527168=1&251543552=1&251559936=1&251576320=1&251592704=1&251609088=1&251625472=1&251641856=1&251658240=1&251674624=1&251691008=1&251707392=1&251723776=1&251740160=1&251756544=1&251772928=1&251789312=1&251805696=1&251822080=1&251838464=1&251854848=1&251871232=1&251887616=1&251904000=1&251920384=1&251936768=1&251953152=1&251969536=1&251985920=1&252002304=1&252018688=1&252035072=1&252051456=1&252067840=1&252084224=1&252100608=1&252116992=1&252133376=1&252149760=1&252166144=1&252182528=1&252198912=1&252215296=1&252231680=1&252248064=1&252264448=1&252280832=1&252297216=1&252313600=1&252329984=1&252346368=1&252362752=1&252379136=1&252395520=1&252411904=1&252428288=1&252444672=1&252461056=1&252477440=1&252493824=1&252510208=1&252526592=1&252542976=1&252559360=1&252575744=1&252592128=1&252608512=1&252624896=1&252641280=1&252657664=1&252674048=1&252690432=1&252706816=1&252723200=1&252739584=1&252755968=1&252772352=1&252788736=1&252805120=1&252821504=1&252837888=1&252854272=1&252870656=1&252887040=1&252903424=1&252919808=1&252936192=1&252952576=1&252968960=1&252985344=1&253001728=1&253018112=1&253034496=1&253050880=1&253067264=1&253083648=1&253100032=1&253116416=1&253132800=1&253149184=1&253165568=1&253181952=1&253198336=1&253214720=1&253231104=1&253247488=1&253263872=1&253280256=1&253296640=1&253313024=1&253329408=1&253345792=1&253362176=1&253378560=1&253394944=1&253411328=1&253427712=1&253444096=1&253460480=1&253476864=1&253493248=1&253509632=1&253526016=1&253542400=1&253558784=1&253575168=1&253591552=1&253607936=1&253624320=1&253640704=1&253657088=1&253673472=1&253689856=1&253706240=1&253722624=1&253739008=1&253755392=1&253771776=1&253788160=1&253804544=1&253820928=1&253837312=1&253853696=1&253870080=1&253886464=1&253902848=1&253919232=1&253935616=1&253952000=1&253968384=1&253984768=1&254001152=1&254017536=1&254033920=1&254050304=1&254066688=1&254083072=1&254099456=1&254115840=1&254132224=1&254148608=1&254164992=1&254181376=1&254197760=1&254214144=1&254230528=1&254246912=1&254263296=1&254279680=1&254296064=1&254312448=1&254328832=1&254345216=1&254361600=1&254377984=1&254394368=1&254410752=1&254427136=1&254443520=1&254459904=1&254476288=1&254492672=1&254509056=1&254525440=1&254541824=1&254558208=1&254574592=1&254590976=1&254607360=1&254623744=1&254640128=1&254656512=1&254672896=1&254689280=1&254705664=1&254722048=1&254738432=1&254754816=1&254771200=1&254787584=1&254803968=1&254820352=1&254836736=1&254853120=1&254869504=1&254885888=1&254902272=1&254918656=1&254935040=1&254951424=1&254967808=1&254984192=1&255000576=1&255016960=1&255033344=1&255049728=1&255066112=1&255082496=1&255098880=1&255115264=1&255131648=1&255148032=1&255164416=1&255180800=1&255197184=1&255213568=1&255229952=1&255246336=1&255262720=1&255279104=1&255295488=1&255311872=1&255328256=1&255344640=1&255361024=1&255377408=1&255393792=1&255410176=1&255426560=1&255442944=1&255459328=1&255475712=1&255492096=1&255508480=1&255524864=1&255541248=1&255557632=1&255574016=1&255590400=1&255606784=1&255623168=1&255639552=1&255655936=1&255672320=1&255688704=1&255705088=1&255721472=1&255737856=1&255754240=1&255770624=1&255787008=1&255803392=1&255819776=1&255836160=1&255852544=1&255868928=1&255885312=1&255901696=1&255918080=1&255934464=1&255950848=1&255967232=1&255983616=1&256000000=1&256016384=1&256032768=1&256049152=1&256065536=1&256081920=1&256098304=1&256114688=1&256131072=1&256147456=1&256163840=1&256180224=1&256196608=1&256212992=1&256229376=1&256245760=1&256262144=1&256278528=1&256294912=1&256311296=1&256327680=1&256344064=1&256360448=1&256376832=1&256393216=1&256409600=1&256425984=1&256442368=1&256458752=1&256475136=1&256491520=1&256507904=1&256524288=1&256540672=1&256557056=1&256573440=1&256589824=1&256606208=1&256622592=1&256638976=1&256655360=1&256671744=1&256688128=1&256704512=1&256720896=1&256737280=1&256753664=1&256770048=1&256786432=1&256802816=1&256819200=1&256835584=1&256851968=1&256868352=1&256884736=1&256901120=1&256917504=1&256933888=1&256950272=1&256966656=1&256983040=1&256999424=1&257015808=1&257032192=1&257048576=1&257064960=1&257081344=1&257097728=1&257114112=1&257130496=1&257146880=1&257163264=1&257179648=1&257196032=1&257212416=1&257228800=1&257245184=1&257261568=1&257277952=1&257294336=1&257310720=1&257327104=1&257343488=1&257359872=1&257376256=1&257392640=1&257409024=1&257425408=1&257441792=1&257458176=1&257474560=1&257490944=1&257507328=1&257523712=1&257540096=1&257556480=1&257572864=1&257589248=1&257605632=1&257622016=1&257638400=1&257654784=1&257671168=1&257687552=1&257703936=1&257720320=1&257736704=1&257753088=1&257769472=1&257785856=1&257802240=1&257818624=1&257835008=1&257851392=1&257867776=1&257884160=1&257900544=1&257916928=1&257933312=1&257949696=1&257966080=1&257982464=1&257998848=1&258015232=1&258031616=1&258048000=1&258064384=1&258080768=1&258097152=1&258113536=1&258129920=1&258146304=1&258162688=1&258179072=1&258195456=1&258211840=1&258228224=1&258244608=1&258260992=1&258277376=1&258293760=1&258310144=1&258326528=1&258342912=1&258359296=1&258375680=1&258392064=1&258408448=1&258424832=1&258441216=1&258457600=1&258473984=1&258490368=1&258506752=1&258523136=1&258539520=1&258555904=1&258572288=1&258588672=1&258605056=1&258621440=1&258637824=1&258654208=1&258670592=1&258686976=1&258703360=1&258719744=1&258736128=1&258752512=1&258768896=1&258785280=1&258801664=1&258818048=1&258834432=1&258850816=1&258867200=1&258883584=1&258899968=1&258916352=1&258932736=1&258949120=1&258965504=1&258981888=1&258998272=1&259014656=1&259031040=1&259047424=1&259063808=1&259080192=1&259096576=1&259112960=1&259129344=1&259145728=1&259162112=1&259178496=1&259194880=1&259211264=1&259227648=1&259244032=1&259260416=1&259276800=1&259293184=1&259309568=1&259325952=1&259342336=1&259358720=1&259375104=1&259391488=1&259407872=1&259424256=1&259440640=1&259457024=1&259473408=1&259489792=1&259506176=1&259522560=1&259538944=1&259555328=1&259571712=1&259588096=1&259604480=1&259620864=1&259637248=1&259653632=1&259670016=1&259686400=1&259702784=1&259719168=1&259735552=1&259751936=1&259768320=1&259784704=1&259801088=1&259817472=1&259833856=1&259850240=1&259866624=1&259883008=1&259899392=1&259915776=1&259932160=1&259948544=1&259964928=1&259981312=1&259997696=1&260014080=1&260030464=1&260046848=1&260063232=1&260079616=1&260096000=1&260112384=1&260128768=1&260145152=1&260161536=1&260177920=1&260194304=1&260210688=1&260227072=1&260243456=1&260259840=1&260276224=1&260292608=1&260308992=1&260325376=1&260341760=1&260358144=1&260374528=1&260390912=1&260407296=1&260423680=1&260440064=1&260456448=1&260472832=1&260489216=1&260505600=1&260521984=1&260538368=1&260554752=1&260571136=1&260587520=1&260603904=1&260620288=1&260636672=1&260653056=1&260669440=1&260685824=1&260702208=1&260718592=1&260734976=1&260751360=1&260767744=1&260784128=1&260800512=1&260816896=1&260833280=1&260849664=1&260866048=1&260882432=1&260898816=1&260915200=1&260931584=1&260947968=1&260964352=1&260980736=1&260997120=1&261013504=1&261029888=1&261046272=1&261062656=1&261079040=1&261095424=1&261111808=1&261128192=1&261144576=1&261160960=1&261177344=1&261193728=1&261210112=1&261226496=1&261242880=1&261259264=1&261275648=1&261292032=1&261308416=1&261324800=1&261341184=1&261357568=1&261373952=1&261390336=1&261406720=1&261423104=1&261439488=1&261455872=1&261472256=1&261488640=1&261505024=1&261521408=1&261537792=1&261554176=1&261570560=1&261586944=1&261603328=1&261619712=1&261636096=1&261652480=1&261668864=1&261685248=1&261701632=1&261718016=1&261734400=1&261750784=1&261767168=1&261783552=1&261799936=1&261816320=1&261832704=1&261849088=1&261865472=1&261881856=1&261898240=1&261914624=1&261931008=1&261947392=1&261963776=1&261980160=1&261996544=1&262012928=1&262029312=1&262045696=1&262062080=1&262078464=1&262094848=1&262111232=1&262127616=1&262144000=1&262160384=1&262176768=1&262193152=1&262209536=1&262225920=1&262242304=1&262258688=1&262275072=1&262291456=1&262307840=1&262324224=1&262340608=1&262356992=1&262373376=1&262389760=1&262406144=1&262422528=1&262438912=1&262455296=1&262471680=1&262488064=1&262504448=1&262520832=1&262537216=1&262553600=1&262569984=1&262586368=1&262602752=1&262619136=1&262635520=1&262651904=1&262668288=1&262684672=1&262701056=1&262717440=1&262733824=1&262750208=1&262766592=1&262782976=1&262799360=1&262815744=1&262832128=1&262848512=1&262864896=1&262881280=1&262897664=1&262914048=1&262930432=1&262946816=1&262963200=1&262979584=1&262995968=1&263012352=1&263028736=1&263045120=1&263061504=1&263077888=1&263094272=1&263110656=1&263127040=1&263143424=1&263159808=1&263176192=1&263192576=1&263208960=1&263225344=1&263241728=1&263258112=1&263274496=1&263290880=1&263307264=1&263323648=1&263340032=1&263356416=1&263372800=1&263389184=1&263405568=1&263421952=1&263438336=1&263454720=1&263471104=1&263487488=1&263503872=1&263520256=1&263536640=1&263553024=1&263569408=1&263585792=1&263602176=1&263618560=1&263634944=1&263651328=1&263667712=1&263684096=1&263700480=1&263716864=1&263733248=1&263749632=1&263766016=1&263782400=1&263798784=1&263815168=1&263831552=1&263847936=1&263864320=1&263880704=1&263897088=1&263913472=1&263929856=1&263946240=1&263962624=1&263979008=1&263995392=1&264011776=1&264028160=1&264044544=1&264060928=1&264077312=1&264093696=1&264110080=1&264126464=1&264142848=1&264159232=1&264175616=1&264192000=1&264208384=1&264224768=1&264241152=1&264257536=1&264273920=1&264290304=1&264306688=1&264323072=1&264339456=1&264355840=1&264372224=1&264388608=1&264404992=1&264421376=1&264437760=1&264454144=1&264470528=1&264486912=1&264503296=1&264519680=1&264536064=1&264552448=1&264568832=1&264585216=1&264601600=1&264617984=1&264634368=1&264650752=1&264667136=1&264683520=1&264699904=1&264716288=1&264732672=1&264749056=1&264765440=1&264781824=1&264798208=1&264814592=1&264830976=1&264847360=1&264863744=1&264880128=1&264896512=1&264912896=1&264929280=1&264945664=1&264962048=1&264978432=1&264994816=1&265011200=1&265027584=1&265043968=1&265060352=1&265076736=1&265093120=1&265109504=1&265125888=1&265142272=1&265158656=1&265175040=1&265191424=1&265207808=1&265224192=1&265240576=1&265256960=1&265273344=1&265289728=1&265306112=1&265322496=1&265338880=1&265355264=1&265371648=1&265388032=1&265404416=1&265420800=1&265437184=1&265453568=1&265469952=1&265486336=1&265502720=1&265519104=1&265535488=1&265551872=1&265568256=1&265584640=1&265601024=1&265617408=1&265633792=1&265650176=1&265666560=1&265682944=1&265699328=1&265715712=1&265732096=1&265748480=1&265764864=1&265781248=1&265797632=1&265814016=1&265830400=1&265846784=1&265863168=1&265879552=1&265895936=1&265912320=1&265928704=1&265945088=1&265961472=1&265977856=1&265994240=1&266010624=1&266027008=1&266043392=1&266059776=1&266076160=1&266092544=1&266108928=1&266125312=1&266141696=1&266158080=1&266174464=1&266190848=1&266207232=1&266223616=1&266240000=1&266256384=1&266272768=1&266289152=1&266305536=1&266321920=1&266338304=1&266354688=1&266371072=1&266387456=1&266403840=1&266420224=1&266436608=1&266452992=1&266469376=1&266485760=1&266502144=1&266518528=1&266534912=1&266551296=1&266567680=1&266584064=1&266600448=1&266616832=1&266633216=1&266649600=1&266665984=1&266682368=1&266698752=1&266715136=1&266731520=1&266747904=1&266764288=1&266780672=1&266797056=1&266813440=1&266829824=1&266846208=1&266862592=1&266878976=1&266895360=1&266911744=1&266928128=1&266944512=1&266960896=1&266977280=1&266993664=1&267010048=1&267026432=1&267042816=1&267059200=1&267075584=1&267091968=1&267108352=1&267124736=1&267141120=1&267157504=1&267173888=1&267190272=1&267206656=1&267223040=1&267239424=1&267255808=1&267272192=1&267288576=1&267304960=1&267321344=1&267337728=1&267354112=1&267370496=1&267386880=1&267403264=1&267419648=1&267436032=1&267452416=1&267468800=1&267485184=1&267501568=1&267517952=1&267534336=1&267550720=1&267567104=1&267583488=1&267599872=1&267616256=1&267632640=1&267649024=1&267665408=1&267681792=1&267698176=1&267714560=1&267730944=1&267747328=1&267763712=1&267780096=1&267796480=1&267812864=1&267829248=1&267845632=1&267862016=1&267878400=1&267894784=1&267911168=1&267927552=1&267943936=1&267960320=1&267976704=1&267993088=1&268009472=1&268025856=1&268042240=1&268058624=1&268075008=1&268091392=1&268107776=1&268124160=1&268140544=1&268156928=1&268173312=1&268189696=1&268206080=1&268222464=1&268238848=1&268255232=1&268271616=1&268288000=1&268304384=1&268320768=1&268337152=1&268353536=1&268369920=1&268386304=1&268402688=1&268419072=1 +--FILE-- + +--EXPECT-- +Fatal error: Too many collisions in array in Unknown on line 0 +