diff --git a/Classes/bitlib.cc b/Classes/bitlib.cc deleted file mode 100644 index d837d692c..000000000 --- a/Classes/bitlib.cc +++ /dev/null @@ -1,216 +0,0 @@ -#include "bitlib.hh" -#include -typedef unsigned int UInt32; -namespace BitLib -{ - - // ---------------------------------------------------------------------------------------- - UInt64 Bit::Add(int start, int length, UInt64 val, UInt32 numToAdd) - { - int end = start + length - 1; - - UInt64 result = val; - - // Clear out bits that will be modified - for (int i = start; i <= end; i++) - { - result &= ~((UInt64)1 << i); - } - - UInt64 n = val >> start; - n += numToAdd; - - for (int i = 0; i < length; i++) - { - UInt64 b = n & ((UInt64)1 << i); - b = b << start; - result |= b; - } - - return result; - } - - // ---------------------------------------------------------------------------------------- - UInt64 Bit::Subtract(int start, int length, UInt64 val, UInt32 numToSubtract) - { - int end = start + length - 1; - - UInt64 result = val; - - // Clear out bits that will be modified - for (int i = start; i <= end; i++) - { - result &= ~((UInt64)1 << i); - } - - UInt64 n = val >> start; - n -= numToSubtract; - - for (int i = 0; i < length; i++) - { - UInt64 b = n & ((UInt64)1 << i); - b = b << start; - result |= b; - } - - return result; - } - - // ---------------------------------------------------------------------------------------- - UInt64 Bit::Xor(int start, int length, UInt64 val, UInt32 val2) - { - int end = start + length - 1; - - UInt64 result = val; - - for (int i = 0; i < length; i++) - { - UInt64 b = val2 & ((UInt64)1 << i); - b = b << start; - result ^= b; - } - - return result; - } - - // ---------------------------------------------------------------------------------------- - UInt64 Bit::RotateLeft(int start, int length, UInt64 val) - { - if (length <= 1) - { - return val; - } - - int end = start + length - 1; - - if (end >= 48) - { - abort(); - } - - UInt64 result = val; - - // Clear out bits that will be modified - for (int i = start; i <= end; i++) - { - result &= ~((UInt64)1 << i); - } - - // Shift all bits except the last - for (int i = start; i < end; i++) - { - UInt64 b = val & ((UInt64)1 << i); - result |= (b << 1); - } - - // Wrap the last bit - { - UInt64 b = val & ((UInt64)1 << end); - result |= (b >> (length-1)); - } - - return result; - } - - // ---------------------------------------------------------------------------------------- - UInt64 Bit::RotateRight(int start, int length, UInt64 val) - { - if (length <= 1) - { - return val; - } - - int end = start + length - 1; - - if (end >= 48) - { - abort(); - } - - UInt64 result = val; - - // Clear out bits that will be modified - for (int i = start; i <= end; i++) - { - result &= ~((UInt64)1 << i); - } - - // Shift all bits except the first - for (int i = start+1; i <= end; i++) - { - UInt64 b = val & ((UInt64)1 << i); - result |= (b >> 1); - } - - // Wrap the first bit - { - UInt64 b = val & ((UInt64)1 << start); - result |= (b << (length - 1)); - } - - return result; - } - - // ---------------------------------------------------------------------------------------- - UInt64 Bit::Swizzle(UInt64 val, const int operations[], int op_len) - { - int index = 0; - - while (index < op_len) - { - Operation op = (Operation)operations[index++]; - - switch (op) - { - case OpRor: - { - int start = operations[index++]; - int length = operations[index++]; - val = RotateRight(start, length, val); - break; - } - - case OpRol: - { - int start = operations[index++]; - int length = operations[index++]; - val = RotateLeft(start, length, val); - break; - } - - case OpAdd: - { - int start = operations[index++]; - int length = operations[index++]; - UInt32 toAdd = (UInt32)operations[index++]; - val = Add(start, length, val, toAdd); - break; - } - - case OpSubtract: - { - int start = operations[index++]; - int length = operations[index++]; - UInt32 toSubtract = (UInt32)operations[index++]; - val = Subtract(start, length, val, toSubtract); - break; - } - - case OpXor: - { - int start = operations[index++]; - int length = operations[index++]; - UInt32 toXor = (UInt32)operations[index++]; - val = Xor(start, length, val, toXor); - break; - } - - default: - break; - } - } - - return val; - } - -} diff --git a/Classes/bitlib.hh b/Classes/bitlib.hh deleted file mode 100644 index 0c113ef28..000000000 --- a/Classes/bitlib.hh +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -typedef uint64_t UInt64; -typedef unsigned int UInt32; -typedef uint8_t byte; -typedef unsigned int uint; -namespace BitLib{ - class Bit{ - public: - enum Operation{ - OpRor = 0, - OpRol, - OpAdd, - OpSubtract, - OpXor, - OpMax - }; - static UInt64 Add(int start, int length, UInt64 val, UInt32 numToAdd); - static UInt64 Subtract(int start, int length, UInt64 val, UInt32 numToSubtract); - static UInt64 Xor(int start, int length, UInt64 val, UInt32 val2); - static UInt64 RotateLeft(int start, int length, UInt64 val); - static UInt64 RotateRight(int start, int length, UInt64 val); - static UInt64 Swizzle(UInt64 val, const int operations[], int oplen); - }; -} diff --git a/Classes/codechecker.cc b/Classes/codechecker.cc deleted file mode 100644 index 7a1c0034c..000000000 --- a/Classes/codechecker.cc +++ /dev/null @@ -1,98 +0,0 @@ -#include "codechecker.hh" -#include -#include -#include - -#include "decodetable.cc" - -using namespace BitLib; - -namespace axcodechecker{ - -CodeChecker * CodeChecker::sUnique=0; - -CodeChecker * CodeChecker::get(){ - if (sUnique==0) - sUnique=new CodeChecker(); - return sUnique; -} - -CodeChecker::CodeChecker(){ - memset(mIpAddress,0,sizeof(mIpAddress)); - memset(mCode,0,sizeof(mCode)); - memset(mNumber,0,sizeof(mNumber)); -} - -static UInt64 hexStringToUint64(const char *str){ - return strtoll(str,NULL,16); -} - -CodeChecker::Result CodeChecker::validate(){ - UInt64 key = hexStringToUint64(mCode); - - key = Bit::Swizzle(key, decodeTable, decodeTableLen); - - UInt32 ip = (UInt32)(key >> 16); - byte phoneHash = (byte)(key >> 8); - byte crc = (byte)key; - - byte b1 = (byte)(phoneHash & 0xff); - byte b2 = (byte)(ip & 0xff); - byte b3 = (byte)((ip >> 8) & 0xff); - byte b4 = (byte)((ip >> 16) & 0xff); - byte b5 = (byte)((ip >> 24) & 0xff); - - byte crc2 = (byte)(b5 ^ b1 ^ b4 ^ b2 ^ b3); - - if (crc == crc2) - { - if (phoneHash == sdbmHash(mNumber)) - { - struct in_addr ia; - ia.s_addr=htonl(ip); - inet_ntop(AF_INET,&ia,mIpAddress,sizeof(mIpAddress)); - return Ok; - } - else - { - return WrongPhoneNumber; - } - } - - return WrongCode; -} - -byte CodeChecker::sdbmHash(const char *str){ - uint hash = 0; - int i; - int ch; - for(i=0;str[i]!='\0';++i){ - ch=str[i]; - hash = ch + (hash << 6) + (hash << 16) - hash; - } - return (byte)hash; -} - -void CodeChecker::setCode(const char *code){ - strncpy(mCode,code,sizeof(mCode)); -} - -void CodeChecker::setPhoneNumber(const char *phoneNumber){ - strncpy(mNumber,phoneNumber,sizeof(mNumber)); -} - - -} - -extern "C" const char* axtunnel_get_ip_from_key(const char* phone,const char* key) { - axcodechecker::CodeChecker::get()->setPhoneNumber(phone); - axcodechecker::CodeChecker::get()->setCode(key); - axcodechecker::CodeChecker::Result result=axcodechecker::CodeChecker::get()->validate(); - if (result == axcodechecker::CodeChecker::Ok) { - return axcodechecker::CodeChecker::get()->getIpAddress(); - } else { - return 0; - } - -} - diff --git a/Classes/codechecker.hh b/Classes/codechecker.hh deleted file mode 100644 index 94ec376f4..000000000 --- a/Classes/codechecker.hh +++ /dev/null @@ -1,25 +0,0 @@ -#include "bitlib.hh" - -namespace axcodechecker{ - -class CodeChecker{ - public: - enum Result{ Ok, WrongPhoneNumber, WrongCode}; - static CodeChecker *get(); - void setCode(const char *code); - void setPhoneNumber(const char *phoneNumber); - Result validate(); - const char *getIpAddress()const{ - return mIpAddress; - } - private: - byte sdbmHash(const char *str); - CodeChecker(); - char mCode[64]; - char mNumber[32]; - char mIpAddress[32]; - static CodeChecker *sUnique; -}; - -}//end of namespace - diff --git a/Classes/decodetable.cc b/Classes/decodetable.cc deleted file mode 100644 index 241766d58..000000000 --- a/Classes/decodetable.cc +++ /dev/null @@ -1,7177 +0,0 @@ - -namespace axcodechecker{ - -const int decodeTable[] ={ - 1, - 21, - 4, - 0, - 30, - 9, - 3, - 11, - 28, - 1217232186, - 2, - 11, - 36, - 1060279211, - 3, - 13, - 8, - 939789905, - 1, - 3, - 41, - 4, - 18, - 22, - 1571481803, - 2, - 10, - 33, - 1907837539, - 3, - 18, - 30, - 421837163, - 4, - 9, - 35, - 1349232055, - 1, - 3, - 31, - 1, - 4, - 38, - 0, - 8, - 30, - 1, - 3, - 9, - 0, - 18, - 29, - 1, - 0, - 27, - 1, - 1, - 37, - 0, - 10, - 38, - 4, - 6, - 29, - 2027756016, - 4, - 2, - 39, - 215262248, - 2, - 3, - 36, - 995652609, - 0, - 14, - 19, - 4, - 9, - 28, - 1895366794, - 4, - 18, - 30, - 1415759651, - 2, - 13, - 34, - 1672699343, - 1, - 10, - 24, - 0, - 0, - 46, - 1, - 6, - 37, - 1, - 5, - 43, - 2, - 30, - 8, - 497276104, - 2, - 14, - 9, - 2008252478, - 4, - 10, - 31, - 712364045, - 1, - 1, - 44, - 3, - 21, - 18, - 1821570058, - 3, - 7, - 22, - 1812419469, - 0, - 41, - 6, - 2, - 32, - 12, - 207622921, - 0, - 19, - 26, - 4, - 10, - 37, - 2037352532, - 0, - 10, - 17, - 0, - 1, - 47, - 0, - 26, - 22, - 1, - 20, - 3, - 3, - 2, - 43, - 1593980308, - 3, - 5, - 5, - 572868233, - 2, - 33, - 14, - 2134598508, - 3, - 14, - 28, - 2001243152, - 4, - 1, - 40, - 177270560, - 1, - 5, - 29, - 1, - 1, - 44, - 1, - 9, - 26, - 2, - 1, - 24, - 2043733370, - 3, - 32, - 14, - 1712591542, - 2, - 6, - 38, - 1294905875, - 3, - 10, - 24, - 58845011, - 0, - 1, - 43, - 0, - 34, - 2, - 4, - 11, - 37, - 709572094, - 0, - 8, - 36, - 4, - 4, - 44, - 58470520, - 4, - 11, - 22, - 1101375582, - 1, - 8, - 39, - 3, - 14, - 24, - 647551299, - 0, - 10, - 35, - 4, - 20, - 26, - 587525688, - 3, - 9, - 18, - 2070760894, - 3, - 16, - 16, - 820364359, - 4, - 0, - 28, - 1301285496, - 3, - 2, - 27, - 175944550, - 0, - 4, - 35, - 2, - 0, - 41, - 183096166, - 4, - 6, - 38, - 208699437, - 2, - 6, - 29, - 505922018, - 1, - 10, - 15, - 4, - 14, - 17, - 2091025433, - 4, - 3, - 45, - 301156452, - 0, - 7, - 38, - 0, - 4, - 14, - 1, - 0, - 48, - 4, - 36, - 12, - 1824637092, - 2, - 11, - 37, - 100725392, - 0, - 7, - 26, - 0, - 5, - 23, - 1, - 1, - 47, - 3, - 10, - 26, - 728599346, - 4, - 13, - 30, - 295101636, - 2, - 21, - 22, - 344366369, - 1, - 29, - 16, - 3, - 6, - 41, - 983944222, - 3, - 10, - 23, - 608634719, - 4, - 2, - 46, - 2079487336, - 1, - 3, - 40, - 1, - 16, - 11, - 3, - 13, - 25, - 16080996, - 3, - 16, - 25, - 1666014650, - 2, - 14, - 20, - 436949624, - 0, - 17, - 15, - 2, - 0, - 27, - 1589979406, - 4, - 6, - 7, - 2141521097, - 4, - 34, - 14, - 2089875073, - 1, - 8, - 6, - 1, - 26, - 9, - 4, - 2, - 32, - 640889048, - 3, - 7, - 26, - 1052179158, - 0, - 10, - 26, - 1, - 1, - 46, - 4, - 0, - 26, - 1652921901, - 0, - 14, - 30, - 0, - 18, - 10, - 1, - 1, - 46, - 2, - 0, - 46, - 477247439, - 2, - 13, - 33, - 1806178004, - 4, - 13, - 14, - 105074245, - 2, - 8, - 17, - 609907112, - 4, - 3, - 18, - 625387188, - 1, - 16, - 4, - 4, - 19, - 25, - 91266710, - 0, - 4, - 44, - 3, - 4, - 22, - 97343738, - 4, - 37, - 5, - 1733642964, - 3, - 5, - 42, - 987322793, - 2, - 4, - 28, - 1768665832, - 1, - 4, - 29, - 3, - 13, - 14, - 838162831, - 4, - 31, - 3, - 793845048, - 0, - 0, - 26, - 4, - 23, - 4, - 1257449521, - 3, - 14, - 32, - 1317313871, - 2, - 22, - 3, - 1838209015, - 0, - 2, - 42, - 1, - 1, - 5, - 3, - 3, - 39, - 125597057, - 2, - 41, - 6, - 724335525, - 1, - 42, - 6, - 3, - 14, - 6, - 1424368332, - 1, - 14, - 32, - 2, - 31, - 14, - 1058735916, - 1, - 2, - 3, - 4, - 9, - 24, - 1032858159, - 2, - 4, - 39, - 1098291945, - 1, - 7, - 7, - 3, - 3, - 34, - 293545448, - 2, - 22, - 24, - 1674072949, - 4, - 0, - 48, - 1186843169, - 0, - 15, - 9, - 2, - 5, - 41, - 822900458, - 0, - 8, - 10, - 3, - 36, - 3, - 2006363132, - 2, - 14, - 23, - 1862654099, - 3, - 22, - 15, - 1432936357, - 4, - 6, - 3, - 1376688522, - 4, - 16, - 25, - 706149268, - 3, - 2, - 46, - 830505129, - 4, - 8, - 24, - 1911105954, - 3, - 14, - 18, - 540579813, - 0, - 10, - 32, - 3, - 3, - 43, - 552472857, - 3, - 11, - 6, - 841282345, - 0, - 23, - 24, - 0, - 5, - 38, - 0, - 0, - 48, - 4, - 6, - 39, - 281967555, - 3, - 0, - 31, - 437620900, - 4, - 12, - 36, - 709018401, - 2, - 7, - 37, - 402310411, - 4, - 26, - 19, - 306409741, - 1, - 5, - 40, - 1, - 18, - 19, - 2, - 4, - 16, - 2131562014, - 2, - 28, - 8, - 878830921, - 2, - 6, - 20, - 2051997965, - 3, - 14, - 26, - 361626774, - 3, - 3, - 43, - 595590504, - 3, - 16, - 31, - 1484493133, - 1, - 6, - 10, - 4, - 40, - 6, - 307105125, - 0, - 2, - 37, - 2, - 0, - 45, - 1482183853, - 0, - 9, - 31, - 0, - 20, - 26, - 1, - 11, - 16, - 4, - 1, - 29, - 936496184, - 3, - 32, - 8, - 230271058, - 0, - 22, - 16, - 3, - 29, - 17, - 605551452, - 2, - 9, - 30, - 1137537523, - 3, - 10, - 5, - 226321795, - 2, - 2, - 34, - 199115297, - 4, - 4, - 30, - 1274059281, - 1, - 21, - 23, - 3, - 16, - 24, - 813494435, - 2, - 6, - 42, - 1132154634, - 1, - 10, - 35, - 4, - 7, - 15, - 1688423837, - 0, - 4, - 8, - 1, - 1, - 38, - 3, - 31, - 4, - 1749990619, - 1, - 8, - 35, - 1, - 4, - 22, - 1, - 10, - 5, - 2, - 7, - 32, - 1312889384, - 3, - 5, - 43, - 1980747529, - 1, - 31, - 14, - 0, - 20, - 17, - 4, - 17, - 4, - 1278708255, - 4, - 18, - 14, - 135595722, - 3, - 4, - 11, - 187150930, - 1, - 10, - 37, - 3, - 37, - 10, - 1397672667, - 3, - 15, - 27, - 1159825981, - 0, - 7, - 13, - 2, - 4, - 39, - 650962879, - 3, - 29, - 5, - 392491237, - 1, - 28, - 11, - 2, - 10, - 25, - 2109177757, - 4, - 39, - 9, - 633244289, - 1, - 6, - 9, - 1, - 12, - 34, - 4, - 9, - 21, - 719239337, - 1, - 7, - 29, - 4, - 22, - 3, - 1972812615, - 0, - 12, - 5, - 4, - 29, - 2, - 87629590, - 3, - 16, - 2, - 1941136524, - 4, - 16, - 32, - 1661607360, - 2, - 14, - 9, - 208480464, - 1, - 10, - 19, - 2, - 6, - 35, - 1837746505, - 1, - 8, - 34, - 4, - 0, - 48, - 945720071, - 4, - 1, - 46, - 605380553, - 0, - 9, - 11, - 2, - 18, - 13, - 1874074965, - 1, - 8, - 39, - 1, - 2, - 27, - 3, - 2, - 44, - 1488439608, - 0, - 6, - 29, - 4, - 18, - 13, - 2058895429, - 1, - 22, - 23, - 4, - 30, - 15, - 272034346, - 2, - 0, - 46, - 132330102, - 1, - 42, - 5, - 0, - 1, - 47, - 2, - 1, - 47, - 1749158287, - 3, - 5, - 13, - 992088557, - 2, - 9, - 7, - 1902357953, - 1, - 1, - 40, - 1, - 4, - 21, - 1, - 6, - 11, - 1, - 8, - 37, - 1, - 36, - 2, - 2, - 1, - 39, - 2030762263, - 2, - 8, - 20, - 916337425, - 0, - 16, - 20, - 0, - 15, - 32, - 1, - 4, - 30, - 0, - 6, - 41, - 4, - 30, - 7, - 297342488, - 2, - 2, - 13, - 1655369659, - 0, - 13, - 26, - 2, - 3, - 39, - 37489456, - 0, - 19, - 25, - 0, - 21, - 26, - 0, - 10, - 38, - 3, - 27, - 14, - 584089680, - 0, - 27, - 16, - 4, - 24, - 18, - 771779224, - 4, - 32, - 15, - 1200408692, - 2, - 8, - 38, - 811472315, - 2, - 11, - 31, - 702091817, - 1, - 8, - 40, - 2, - 13, - 11, - 1943969158, - 0, - 23, - 8, - 3, - 2, - 34, - 181450092, - 4, - 15, - 17, - 114446520, - 2, - 30, - 2, - 20027564, - 0, - 2, - 42, - 4, - 6, - 8, - 1370810612, - 0, - 4, - 5, - 3, - 6, - 35, - 900910663, - 1, - 5, - 31, - 0, - 9, - 22, - 4, - 0, - 48, - 1466838776, - 4, - 12, - 26, - 1456217835, - 0, - 5, - 41, - 1, - 0, - 4, - 3, - 10, - 18, - 1313660458, - 1, - 10, - 28, - 0, - 8, - 40, - 0, - 8, - 40, - 0, - 46, - 2, - 1, - 5, - 13, - 2, - 4, - 16, - 1509123446, - 1, - 0, - 45, - 4, - 0, - 44, - 1546783562, - 2, - 9, - 13, - 749898154, - 4, - 11, - 26, - 1511133770, - 3, - 16, - 8, - 851929805, - 2, - 33, - 3, - 2113521308, - 2, - 9, - 9, - 1505295469, - 0, - 9, - 36, - 0, - 2, - 42, - 4, - 27, - 17, - 1801209212, - 2, - 5, - 23, - 2075840767, - 4, - 25, - 22, - 44566210, - 4, - 1, - 42, - 509469487, - 0, - 0, - 48, - 3, - 18, - 30, - 636136, - 1, - 2, - 14, - 2, - 11, - 19, - 1475140682, - 2, - 2, - 34, - 794464364, - 2, - 20, - 19, - 2020603257, - 3, - 29, - 8, - 835516351, - 1, - 19, - 17, - 3, - 2, - 46, - 1910296439, - 3, - 18, - 7, - 24068779, - 3, - 19, - 14, - 2108820167, - 0, - 10, - 4, - 3, - 0, - 47, - 1447889381, - 0, - 15, - 4, - 4, - 2, - 35, - 1491892822, - 4, - 1, - 38, - 746988391, - 1, - 3, - 43, - 0, - 9, - 17, - 0, - 5, - 35, - 0, - 1, - 35, - 1, - 0, - 19, - 3, - 10, - 4, - 830742970, - 3, - 5, - 4, - 1060331455, - 0, - 12, - 21, - 0, - 1, - 15, - 2, - 4, - 41, - 731683444, - 0, - 3, - 45, - 2, - 19, - 6, - 1941983084, - 4, - 21, - 2, - 360737189, - 2, - 10, - 27, - 1685420834, - 4, - 37, - 11, - 1011986097, - 3, - 1, - 47, - 2013362839, - 3, - 0, - 38, - 523444042, - 1, - 2, - 26, - 3, - 0, - 48, - 723354555, - 1, - 15, - 27, - 4, - 9, - 22, - 1258060291, - 3, - 42, - 6, - 927759465, - 2, - 16, - 11, - 1540414473, - 2, - 22, - 22, - 340045319, - 3, - 9, - 21, - 1139276092, - 0, - 0, - 46, - 0, - 40, - 4, - 3, - 12, - 26, - 352556327, - 1, - 3, - 33, - 4, - 8, - 21, - 1954497593, - 3, - 1, - 45, - 921278290, - 0, - 20, - 11, - 2, - 15, - 16, - 1420268071, - 2, - 18, - 28, - 1568724333, - 4, - 32, - 4, - 787791086, - 2, - 9, - 19, - 1689744600, - 4, - 28, - 4, - 1978992565, - 1, - 5, - 42, - 1, - 10, - 26, - 1, - 23, - 6, - 1, - 27, - 14, - 0, - 37, - 4, - 1, - 1, - 45, - 4, - 14, - 25, - 380446330, - 0, - 18, - 13, - 3, - 16, - 21, - 1756488971, - 2, - 7, - 38, - 742475240, - 4, - 2, - 42, - 88000312, - 3, - 3, - 44, - 497247625, - 4, - 4, - 43, - 170751616, - 2, - 20, - 20, - 914700902, - 3, - 0, - 31, - 1952750165, - 2, - 43, - 4, - 1501523531, - 0, - 13, - 35, - 2, - 38, - 10, - 180796798, - 3, - 4, - 27, - 1442402207, - 4, - 30, - 17, - 947875725, - 3, - 19, - 15, - 1551257126, - 0, - 0, - 12, - 3, - 1, - 34, - 183773046, - 0, - 29, - 7, - 2, - 3, - 29, - 25427839, - 0, - 29, - 12, - 3, - 6, - 36, - 1076678656, - 3, - 4, - 10, - 1538526883, - 1, - 36, - 5, - 3, - 7, - 3, - 1332439318, - 3, - 4, - 41, - 1877175332, - 3, - 9, - 39, - 409832546, - 2, - 18, - 24, - 1558823089, - 3, - 1, - 18, - 881262211, - 2, - 39, - 8, - 192375433, - 1, - 0, - 9, - 4, - 21, - 21, - 1844798794, - 1, - 32, - 14, - 3, - 23, - 10, - 942676302, - 4, - 32, - 15, - 470061162, - 0, - 5, - 17, - 3, - 18, - 28, - 1081855694, - 2, - 14, - 25, - 1864537912, - 2, - 13, - 4, - 714896776, - 3, - 36, - 6, - 423400897, - 0, - 3, - 21, - 1, - 10, - 4, - 2, - 12, - 4, - 1326533032, - 4, - 23, - 6, - 13967878, - 4, - 0, - 44, - 822779088, - 4, - 6, - 25, - 1831840237, - 0, - 1, - 38, - 2, - 4, - 37, - 2071919680, - 2, - 22, - 22, - 1409915422, - 0, - 1, - 8, - 1, - 6, - 12, - 1, - 14, - 8, - 2, - 0, - 19, - 1202965674, - 2, - 30, - 4, - 1504803672, - 0, - 19, - 3, - 2, - 18, - 14, - 1841079159, - 3, - 16, - 13, - 1185427883, - 2, - 6, - 31, - 1633566984, - 3, - 2, - 39, - 813183233, - 4, - 26, - 16, - 936801089, - 1, - 5, - 7, - 0, - 1, - 41, - 3, - 2, - 38, - 1500187716, - 4, - 6, - 26, - 127229593, - 2, - 14, - 32, - 86372979, - 3, - 21, - 9, - 2112822561, - 4, - 0, - 39, - 539953473, - 3, - 2, - 44, - 1503669279, - 3, - 12, - 34, - 1231207331, - 4, - 26, - 19, - 172093626, - 1, - 8, - 27, - 3, - 43, - 2, - 852061936, - 2, - 24, - 5, - 906676992, - 2, - 46, - 2, - 1504595798, - 0, - 0, - 26, - 1, - 0, - 20, - 3, - 12, - 35, - 520885693, - 2, - 13, - 24, - 1518716688, - 3, - 10, - 37, - 176438571, - 3, - 12, - 31, - 1377237880, - 0, - 10, - 34, - 3, - 40, - 7, - 989412017, - 1, - 3, - 25, - 0, - 3, - 16, - 4, - 16, - 32, - 1340115496, - 3, - 4, - 9, - 1189863015, - 4, - 21, - 14, - 143541343, - 4, - 11, - 32, - 816120182, - 1, - 8, - 9, - 1, - 27, - 20, - 2, - 22, - 15, - 370006333, - 2, - 0, - 15, - 766732076, - 0, - 3, - 39, - 3, - 17, - 26, - 168272253, - 3, - 6, - 41, - 1593085443, - 4, - 5, - 42, - 2047936363, - 3, - 16, - 24, - 1613479085, - 4, - 4, - 24, - 902757439, - 3, - 13, - 20, - 1397344971, - 4, - 20, - 18, - 503570792, - 3, - 3, - 42, - 1566502594, - 1, - 3, - 31, - 0, - 6, - 12, - 3, - 29, - 3, - 797655165, - 4, - 8, - 33, - 1872815729, - 2, - 2, - 16, - 2010345926, - 4, - 5, - 39, - 1715798309, - 2, - 0, - 46, - 2065057256, - 4, - 3, - 22, - 1843860816, - 0, - 1, - 40, - 2, - 11, - 34, - 1135341935, - 2, - 12, - 12, - 1687199516, - 3, - 16, - 30, - 596371262, - 1, - 11, - 13, - 4, - 7, - 39, - 1629535819, - 1, - 13, - 11, - 4, - 3, - 38, - 2072802791, - 1, - 14, - 24, - 0, - 4, - 44, - 4, - 3, - 45, - 1006464693, - 1, - 4, - 42, - 2, - 1, - 36, - 1400720051, - 4, - 1, - 44, - 2024868388, - 1, - 10, - 18, - 0, - 4, - 38, - 2, - 5, - 23, - 632249491, - 4, - 2, - 44, - 821255815, - 4, - 19, - 5, - 782086486, - 3, - 18, - 12, - 1896921307, - 3, - 37, - 9, - 940528272, - 3, - 18, - 20, - 611131015, - 0, - 10, - 34, - 3, - 4, - 41, - 1831409099, - 1, - 12, - 36, - 3, - 2, - 25, - 2075981892, - 4, - 0, - 34, - 1384760765, - 2, - 5, - 13, - 1685963599, - 4, - 3, - 36, - 2067687660, - 3, - 22, - 18, - 419386292, - 0, - 16, - 14, - 2, - 8, - 3, - 2041550346, - 3, - 37, - 9, - 1260242377, - 2, - 4, - 41, - 658717290, - 2, - 8, - 31, - 2079801976, - 4, - 0, - 37, - 1118624517, - 2, - 2, - 44, - 1476231872, - 4, - 10, - 24, - 2085813231, - 0, - 4, - 15, - 4, - 32, - 4, - 2022440402, - 2, - 6, - 27, - 102206971, - 2, - 5, - 41, - 1504808261, - 0, - 8, - 34, - 1, - 5, - 19, - 3, - 8, - 36, - 1819148741, - 0, - 0, - 48, - 0, - 33, - 12, - 4, - 6, - 31, - 324090827, - 1, - 1, - 46, - 4, - 39, - 9, - 1134063552, - 4, - 20, - 10, - 1778673275, - 1, - 1, - 43, - 1, - 12, - 8, - 4, - 33, - 7, - 262420411, - 0, - 20, - 13, - 2, - 27, - 11, - 1009020307, - 3, - 11, - 35, - 1880880246, - 4, - 4, - 42, - 1902032038, - 0, - 9, - 36, - 1, - 24, - 24, - 1, - 2, - 44, - 2, - 15, - 27, - 1913286889, - 4, - 1, - 42, - 222497741, - 0, - 14, - 21, - 0, - 8, - 40, - 0, - 14, - 7, - 1, - 3, - 45, - 3, - 1, - 30, - 1895467792, - 4, - 8, - 12, - 7317839, - 0, - 12, - 31, - 1, - 35, - 8, - 0, - 32, - 5, - 2, - 8, - 37, - 166913969, - 1, - 0, - 47, - 4, - 1, - 47, - 933889387, - 1, - 5, - 34, - 1, - 9, - 14, - 4, - 6, - 39, - 437078063, - 2, - 3, - 45, - 1653218429, - 2, - 9, - 30, - 838787608, - 0, - 9, - 38, - 0, - 6, - 40, - 1, - 5, - 11, - 3, - 19, - 21, - 185062208, - 1, - 34, - 5, - 1, - 27, - 7, - 4, - 27, - 2, - 1824379254, - 3, - 31, - 9, - 2120070803, - 3, - 4, - 44, - 1874562419, - 2, - 3, - 43, - 1436781032, - 1, - 1, - 8, - 1, - 30, - 11, - 2, - 1, - 7, - 1838620788, - 0, - 26, - 3, - 4, - 18, - 28, - 1527037210, - 3, - 3, - 31, - 308420944, - 2, - 5, - 35, - 1772979440, - 1, - 20, - 14, - 0, - 6, - 11, - 2, - 22, - 2, - 2136625908, - 1, - 1, - 12, - 0, - 10, - 4, - 3, - 22, - 19, - 1255351293, - 1, - 34, - 4, - 4, - 0, - 37, - 2142726419, - 4, - 4, - 36, - 1266759785, - 3, - 1, - 41, - 384780865, - 4, - 1, - 31, - 373695168, - 1, - 0, - 48, - 4, - 2, - 42, - 1712938460, - 2, - 28, - 8, - 1377998903, - 0, - 0, - 48, - 3, - 2, - 45, - 1427859538, - 2, - 18, - 7, - 41616730, - 1, - 2, - 16, - 4, - 5, - 32, - 602203709, - 0, - 11, - 36, - 3, - 0, - 44, - 1782420758, - 0, - 26, - 21, - 1, - 1, - 29, - 0, - 7, - 40, - 1, - 11, - 32, - 3, - 4, - 6, - 1036473349, - 0, - 38, - 2, - 3, - 1, - 45, - 1156801361, - 4, - 9, - 22, - 64670506, - 3, - 13, - 23, - 1079535874, - 2, - 15, - 8, - 1374216437, - 3, - 0, - 41, - 25251342, - 0, - 11, - 17, - 2, - 18, - 16, - 526035448, - 0, - 0, - 44, - 4, - 28, - 15, - 532461943, - 3, - 10, - 30, - 609860178, - 1, - 1, - 44, - 1, - 18, - 10, - 2, - 0, - 47, - 1197158770, - 4, - 25, - 23, - 1201545028, - 1, - 21, - 15, - 4, - 18, - 26, - 1766661539, - 3, - 7, - 23, - 673836974, - 2, - 30, - 2, - 1486342399, - 2, - 1, - 35, - 1291192974, - 2, - 22, - 24, - 995271221, - 1, - 18, - 9, - 4, - 8, - 31, - 1652410013, - 1, - 16, - 19, - 3, - 2, - 46, - 1943547482, - 0, - 13, - 14, - 0, - 35, - 9, - 0, - 2, - 46, - 3, - 4, - 36, - 637954444, - 3, - 2, - 19, - 1440053031, - 3, - 17, - 13, - 1587678048, - 4, - 0, - 38, - 433416885, - 3, - 24, - 12, - 1037084783, - 0, - 0, - 46, - 4, - 2, - 37, - 865740191, - 4, - 17, - 31, - 72185519, - 0, - 45, - 2, - 0, - 5, - 27, - 4, - 7, - 37, - 230312325, - 1, - 0, - 42, - 1, - 6, - 31, - 2, - 2, - 42, - 139391893, - 2, - 1, - 47, - 753320356, - 2, - 40, - 3, - 1128474247, - 1, - 1, - 42, - 3, - 9, - 33, - 1290821208, - 1, - 5, - 18, - 0, - 1, - 34, - 2, - 27, - 20, - 26221653, - 4, - 5, - 22, - 1030030583, - 0, - 0, - 32, - 3, - 4, - 31, - 1233972964, - 2, - 20, - 19, - 365099113, - 0, - 0, - 48, - 1, - 9, - 34, - 0, - 26, - 17, - 2, - 19, - 11, - 1713845597, - 4, - 20, - 2, - 1074215581, - 4, - 3, - 20, - 614938453, - 4, - 1, - 5, - 1071012464, - 4, - 10, - 21, - 1166009956, - 3, - 6, - 33, - 108043919, - 1, - 18, - 28, - 3, - 36, - 12, - 631705846, - 3, - 5, - 35, - 255850441, - 1, - 2, - 46, - 2, - 39, - 9, - 1250686774, - 0, - 7, - 41, - 2, - 8, - 7, - 510468412, - 4, - 11, - 36, - 1312864541, - 3, - 3, - 14, - 1538835961, - 3, - 40, - 5, - 304676180, - 0, - 3, - 32, - 1, - 17, - 31, - 3, - 1, - 37, - 1484614048, - 2, - 2, - 18, - 984002768, - 1, - 2, - 33, - 3, - 13, - 32, - 1460771640, - 3, - 16, - 24, - 1013842645, - 2, - 14, - 20, - 1611033725, - 2, - 7, - 32, - 1529414088, - 2, - 7, - 40, - 745595386, - 1, - 3, - 45, - 1, - 13, - 33, - 0, - 7, - 20, - 4, - 5, - 25, - 1474088570, - 2, - 12, - 29, - 373688622, - 4, - 24, - 24, - 1677010602, - 3, - 21, - 9, - 2011147375, - 4, - 9, - 38, - 1776514496, - 2, - 0, - 43, - 687609601, - 0, - 17, - 16, - 0, - 10, - 21, - 0, - 19, - 7, - 4, - 4, - 33, - 937447556, - 0, - 7, - 31, - 2, - 28, - 20, - 1079441999, - 0, - 19, - 9, - 0, - 5, - 20, - 2, - 18, - 19, - 37845374, - 4, - 0, - 48, - 1418474330, - 4, - 3, - 39, - 955494310, - 1, - 0, - 37, - 1, - 1, - 47, - 2, - 16, - 27, - 437323863, - 1, - 19, - 26, - 2, - 45, - 3, - 1240131416, - 1, - 0, - 42, - 1, - 3, - 22, - 1, - 20, - 9, - 1, - 6, - 32, - 0, - 2, - 36, - 1, - 4, - 19, - 3, - 10, - 24, - 2103479486, - 4, - 11, - 17, - 88985634, - 3, - 5, - 38, - 937358670, - 1, - 3, - 16, - 4, - 3, - 30, - 251985825, - 3, - 2, - 36, - 459881799, - 1, - 3, - 27, - 0, - 24, - 6, - 0, - 7, - 19, - 0, - 8, - 34, - 3, - 30, - 15, - 143530136, - 4, - 6, - 30, - 53484286, - 3, - 5, - 31, - 197885629, - 4, - 2, - 29, - 440688406, - 2, - 0, - 47, - 1417115986, - 0, - 6, - 24, - 0, - 19, - 26, - 2, - 13, - 18, - 1446987482, - 3, - 1, - 29, - 220613873, - 1, - 2, - 35, - 4, - 14, - 10, - 591575527, - 3, - 1, - 28, - 954281, - 2, - 11, - 37, - 1315579557, - 2, - 28, - 20, - 1259997468, - 2, - 28, - 13, - 615545316, - 3, - 22, - 20, - 957924410, - 4, - 36, - 9, - 1155715990, - 4, - 3, - 9, - 86441929, - 4, - 9, - 32, - 821594425, - 2, - 2, - 4, - 1411498716, - 2, - 10, - 15, - 2134672701, - 0, - 0, - 47, - 2, - 41, - 7, - 1665705042, - 1, - 29, - 5, - 1, - 2, - 45, - 2, - 44, - 4, - 1813724568, - 2, - 3, - 44, - 1199034020, - 2, - 5, - 42, - 2069034833, - 3, - 1, - 47, - 844590236, - 2, - 27, - 9, - 714662515, - 4, - 8, - 27, - 1227962285, - 4, - 4, - 38, - 2046101750, - 1, - 6, - 42, - 3, - 15, - 12, - 891886666, - 2, - 22, - 4, - 50628534, - 3, - 30, - 18, - 1037710198, - 3, - 2, - 36, - 1083080329, - 4, - 14, - 27, - 1914969261, - 0, - 9, - 8, - 1, - 13, - 16, - 0, - 3, - 42, - 1, - 1, - 43, - 1, - 18, - 14, - 2, - 12, - 34, - 1059291313, - 0, - 0, - 48, - 1, - 30, - 16, - 3, - 14, - 28, - 2095483842, - 4, - 1, - 47, - 1741630713, - 3, - 11, - 21, - 2035278235, - 1, - 39, - 5, - 0, - 15, - 25, - 1, - 6, - 39, - 1, - 11, - 14, - 4, - 21, - 9, - 1589692445, - 2, - 15, - 18, - 1143478615, - 3, - 6, - 24, - 1367065700, - 4, - 1, - 11, - 1435974747, - 2, - 25, - 20, - 1501610, - 4, - 37, - 3, - 717871490, - 2, - 3, - 24, - 1220742256, - 0, - 1, - 46, - 0, - 17, - 9, - 4, - 0, - 27, - 1176402188, - 2, - 12, - 11, - 1630516104, - 1, - 0, - 46, - 4, - 1, - 47, - 1582314882, - 2, - 25, - 14, - 374417618, - 3, - 10, - 15, - 912050593, - 0, - 5, - 41, - 4, - 16, - 20, - 1772866457, - 3, - 19, - 12, - 398340629, - 2, - 8, - 3, - 22416580, - 0, - 6, - 9, - 2, - 2, - 29, - 1354227908, - 0, - 11, - 22, - 3, - 4, - 44, - 425972868, - 3, - 5, - 34, - 2094716713, - 4, - 7, - 35, - 439045785, - 3, - 12, - 19, - 1046006663, - 1, - 6, - 37, - 1, - 8, - 15, - 2, - 8, - 36, - 295361328, - 2, - 7, - 41, - 1730915036, - 0, - 5, - 28, - 2, - 0, - 48, - 671389473, - 0, - 5, - 35, - 0, - 5, - 35, - 0, - 14, - 9, - 2, - 41, - 3, - 1927677092, - 4, - 0, - 47, - 2055375290, - 2, - 24, - 10, - 1420019632, - 2, - 5, - 14, - 623876907, - 2, - 17, - 29, - 882776344, - 0, - 0, - 40, - 0, - 21, - 2, - 1, - 12, - 35, - 4, - 27, - 19, - 1946133873, - 3, - 42, - 2, - 1995113156, - 0, - 6, - 34, - 1, - 16, - 32, - 2, - 4, - 38, - 1484715630, - 2, - 0, - 24, - 1260557995, - 1, - 2, - 36, - 3, - 4, - 44, - 654464588, - 4, - 9, - 34, - 66037315, - 0, - 9, - 34, - 1, - 14, - 26, - 0, - 26, - 14, - 2, - 1, - 16, - 64817330, - 0, - 7, - 31, - 1, - 1, - 3, - 2, - 8, - 36, - 1195725018, - 0, - 10, - 2, - 2, - 23, - 14, - 2139912088, - 2, - 12, - 32, - 935852029, - 3, - 1, - 47, - 83389455, - 1, - 7, - 40, - 3, - 7, - 12, - 1478799649, - 0, - 20, - 22, - 0, - 18, - 9, - 0, - 13, - 20, - 0, - 12, - 32, - 0, - 11, - 7, - 3, - 1, - 47, - 1903311427, - 1, - 6, - 23, - 1, - 2, - 34, - 3, - 9, - 25, - 949411176, - 0, - 25, - 21, - 2, - 20, - 7, - 2064130635, - 0, - 18, - 28, - 1, - 3, - 34, - 2, - 12, - 36, - 1532813926, - 0, - 2, - 43, - 1, - 11, - 3, - 4, - 0, - 44, - 1269187671, - 1, - 6, - 10, - 3, - 23, - 9, - 862815007, - 0, - 0, - 34, - 2, - 32, - 2, - 210711999, - 1, - 0, - 46, - 4, - 13, - 18, - 61810195, - 1, - 2, - 43, - 2, - 0, - 48, - 1812226183, - 1, - 0, - 46, - 1, - 34, - 4, - 3, - 17, - 3, - 257260517, - 1, - 10, - 13, - 0, - 9, - 31, - 0, - 4, - 41, - 0, - 1, - 47, - 0, - 0, - 48, - 1, - 12, - 13, - 3, - 20, - 11, - 2099718934, - 0, - 6, - 40, - 4, - 32, - 2, - 289781736, - 2, - 5, - 43, - 2024169155, - 0, - 1, - 45, - 4, - 18, - 22, - 829121362, - 3, - 1, - 31, - 1912568918, - 2, - 37, - 9, - 1735945233, - 1, - 1, - 37, - 3, - 46, - 2, - 238004881, - 4, - 9, - 31, - 897325637, - 2, - 20, - 11, - 2097800571, - 4, - 12, - 33, - 1002470782, - 0, - 8, - 30, - 1, - 4, - 13, - 4, - 9, - 32, - 2083170130, - 1, - 6, - 23, - 0, - 4, - 11, - 3, - 5, - 35, - 1498418050, - 3, - 19, - 26, - 1167221808, - 4, - 17, - 30, - 1090544877, - 2, - 15, - 28, - 922009861, - 4, - 1, - 14, - 574207398, - 4, - 12, - 21, - 757909234, - 0, - 11, - 27, - 1, - 38, - 8, - 2, - 17, - 20, - 1583905809, - 4, - 0, - 28, - 942815703, - 2, - 19, - 22, - 2044226064, - 1, - 9, - 32, - 4, - 0, - 46, - 1100187675, - 2, - 4, - 41, - 845134265, - 3, - 35, - 8, - 1290706893, - 3, - 11, - 25, - 636303340, - 3, - 11, - 6, - 2082441313, - 2, - 8, - 26, - 1369876402, - 4, - 1, - 42, - 947772068, - 0, - 26, - 22, - 1, - 4, - 41, - 4, - 0, - 42, - 79650609, - 0, - 15, - 12, - 1, - 2, - 38, - 4, - 5, - 37, - 286358043, - 4, - 4, - 43, - 1755399272, - 1, - 4, - 25, - 2, - 1, - 40, - 1179838284, - 4, - 33, - 9, - 1741054211, - 4, - 1, - 14, - 796824486, - 0, - 1, - 16, - 1, - 2, - 41, - 4, - 0, - 39, - 589765913, - 0, - 14, - 26, - 1, - 14, - 34, - 4, - 29, - 13, - 1961648512, - 0, - 29, - 10, - 3, - 1, - 37, - 764096090, - 2, - 19, - 2, - 1088357966, - 2, - 9, - 35, - 1722822134, - 2, - 15, - 30, - 1095590789, - 0, - 7, - 4, - 4, - 22, - 24, - 707942706, - 0, - 15, - 21, - 1, - 1, - 47, - 2, - 17, - 30, - 1785813835, - 3, - 1, - 41, - 1753853394, - 0, - 10, - 17, - 3, - 33, - 8, - 255030197, - 3, - 18, - 3, - 1713048769, - 2, - 37, - 6, - 1871339212, - 1, - 0, - 47, - 4, - 33, - 15, - 1084181785, - 1, - 10, - 37, - 1, - 2, - 45, - 3, - 2, - 27, - 1080738984, - 4, - 20, - 13, - 1008697720, - 4, - 13, - 4, - 1314642764, - 0, - 6, - 42, - 1, - 5, - 16, - 1, - 7, - 37, - 0, - 0, - 45, - 3, - 13, - 6, - 1221027296, - 4, - 26, - 21, - 364240652, - 2, - 6, - 32, - 256771672, - 3, - 1, - 47, - 448351797, - 4, - 20, - 24, - 1823716922, - 0, - 23, - 5, - 1, - 8, - 26, - 0, - 14, - 28, - 1, - 1, - 25, - 0, - 10, - 37, - 1, - 20, - 3, - 3, - 3, - 11, - 1440693481, - 0, - 2, - 11, - 1, - 33, - 10, - 3, - 8, - 40, - 1403509519, - 1, - 2, - 39, - 1, - 10, - 37, - 2, - 38, - 3, - 1452489112, - 4, - 3, - 29, - 968473952, - 2, - 1, - 45, - 1244187636, - 0, - 6, - 33, - 4, - 11, - 32, - 1587673946, - 1, - 1, - 25, - 4, - 29, - 9, - 1811470793, - 3, - 3, - 4, - 503378937, - 1, - 5, - 13, - 4, - 34, - 3, - 985375124, - 1, - 32, - 12, - 1, - 3, - 37, - 4, - 6, - 40, - 39608908, - 0, - 0, - 30, - 4, - 10, - 8, - 511068724, - 4, - 3, - 42, - 1234105464, - 0, - 7, - 33, - 3, - 11, - 31, - 1799934115, - 0, - 18, - 22, - 1, - 1, - 47, - 1, - 4, - 44, - 2, - 1, - 31, - 1862755331, - 3, - 14, - 26, - 1298870200, - 1, - 12, - 35, - 2, - 22, - 25, - 1163281660, - 4, - 0, - 48, - 1015043897, - 1, - 33, - 7, - 2, - 13, - 33, - 260482860, - 3, - 14, - 17, - 811192934, - 0, - 24, - 3, - 0, - 34, - 6, - 2, - 6, - 42, - 621240425, - 0, - 2, - 39, - 0, - 23, - 25, - 3, - 0, - 44, - 287643271, - 1, - 4, - 25, - 1, - 3, - 35, - 3, - 8, - 27, - 403619372, - 0, - 1, - 46, - 0, - 4, - 43, - 3, - 31, - 3, - 737126771, - 4, - 16, - 24, - 650395626, - 0, - 0, - 40, - 1, - 11, - 11, - 2, - 20, - 21, - 668634870, - 0, - 8, - 20, - 2, - 20, - 7, - 1384120423, - 0, - 11, - 29, - 2, - 5, - 31, - 1593842280, - 3, - 17, - 24, - 577035560, - 0, - 26, - 16, - 0, - 2, - 43, - 0, - 33, - 10, - 1, - 1, - 47, - 4, - 3, - 13, - 2005260232, - 4, - 0, - 44, - 965705441, - 3, - 10, - 36, - 259719425, - 4, - 11, - 18, - 353205662, - 0, - 0, - 32, - 0, - 5, - 16, - 2, - 13, - 29, - 1769943543, - 3, - 3, - 23, - 1169367847, - 1, - 25, - 23, - 1, - 9, - 36, - 3, - 20, - 16, - 454736495, - 2, - 11, - 34, - 1856578787, - 0, - 8, - 40, - 2, - 15, - 17, - 937281394, - 1, - 8, - 19, - 1, - 13, - 33, - 2, - 6, - 37, - 998617629, - 3, - 5, - 40, - 1639210144, - 4, - 10, - 19, - 1508246763, - 4, - 2, - 38, - 1795376099, - 1, - 21, - 14, - 1, - 42, - 2, - 1, - 3, - 24, - 3, - 1, - 21, - 1943789332, - 1, - 3, - 24, - 3, - 24, - 22, - 1182406293, - 4, - 4, - 7, - 520939634, - 4, - 27, - 6, - 1296041345, - 3, - 18, - 20, - 1502910849, - 3, - 15, - 27, - 401087122, - 4, - 9, - 6, - 1121708, - 1, - 0, - 48, - 3, - 17, - 29, - 1593628976, - 0, - 1, - 39, - 2, - 16, - 12, - 162584341, - 4, - 26, - 8, - 2089848052, - 1, - 7, - 8, - 4, - 3, - 25, - 66881996, - 3, - 5, - 40, - 1698059452, - 0, - 10, - 38, - 1, - 39, - 9, - 0, - 1, - 44, - 2, - 2, - 36, - 2014887425, - 3, - 3, - 11, - 284345698, - 1, - 8, - 4, - 0, - 6, - 25, - 0, - 7, - 11, - 4, - 1, - 44, - 2100971032, - 4, - 29, - 9, - 1769157545, - 0, - 27, - 20, - 4, - 6, - 34, - 2122385023, - 1, - 15, - 32, - 0, - 12, - 17, - 4, - 14, - 20, - 20369381, - 3, - 0, - 47, - 1319733350, - 4, - 3, - 24, - 1930845149, - 0, - 6, - 37, - 3, - 38, - 5, - 1783446768, - 3, - 4, - 8, - 159903257, - 3, - 4, - 39, - 1260441231, - 0, - 14, - 34, - 4, - 26, - 10, - 1024034418, - 4, - 9, - 36, - 1586339041, - 4, - 11, - 12, - 1939669718, - 4, - 0, - 48, - 167287595, - 1, - 16, - 12, - 2, - 28, - 3, - 2078753668, - 2, - 19, - 11, - 147153848, - 3, - 1, - 38, - 575153965, - 0, - 26, - 11, - 3, - 4, - 17, - 2098132744, - 3, - 28, - 18, - 1712421873, - 3, - 12, - 31, - 1965812593, - 2, - 6, - 42, - 686146048, - 1, - 7, - 17, - 2, - 2, - 19, - 392167257, - 2, - 11, - 31, - 7662456, - 2, - 2, - 38, - 214295932, - 4, - 27, - 15, - 1997722093, - 3, - 8, - 34, - 1828454927, - 3, - 2, - 35, - 675842819, - 1, - 10, - 5, - 0, - 24, - 20, - 2, - 23, - 7, - 676091702, - 4, - 2, - 46, - 46497042, - 0, - 37, - 7, - 1, - 5, - 25, - 2, - 13, - 34, - 701083723, - 0, - 5, - 15, - 4, - 21, - 22, - 61395608, - 2, - 24, - 17, - 438664299, - 4, - 1, - 47, - 1931840438, - 1, - 18, - 18, - 3, - 13, - 28, - 1135617444, - 3, - 1, - 30, - 542445101, - 3, - 3, - 18, - 2103894984, - 4, - 1, - 47, - 1569564936, - 2, - 0, - 47, - 1731995659, - 3, - 22, - 14, - 1403999112, - 3, - 8, - 5, - 305610326, - 0, - 18, - 16, - 1, - 14, - 32, - 4, - 13, - 29, - 1630210061, - 3, - 2, - 34, - 1176621627, - 4, - 0, - 38, - 183199294, - 0, - 8, - 33, - 0, - 9, - 15, - 1, - 20, - 2, - 3, - 12, - 8, - 618343858, - 0, - 27, - 15, - 1, - 39, - 5, - 0, - 4, - 20, - 1, - 15, - 19, - 2, - 13, - 21, - 207113822, - 2, - 19, - 28, - 1750201038, - 2, - 30, - 18, - 1193826529, - 4, - 8, - 27, - 1015793651, - 0, - 1, - 16, - 1, - 0, - 36, - 0, - 0, - 30, - 3, - 0, - 31, - 540326898, - 1, - 10, - 26, - 2, - 12, - 33, - 389400853, - 3, - 1, - 23, - 928398804, - 4, - 22, - 24, - 708271890, - 1, - 14, - 33, - 4, - 14, - 32, - 183564411, - 4, - 11, - 27, - 1640249629, - 2, - 1, - 41, - 1653782144, - 2, - 2, - 43, - 605297424, - 3, - 29, - 13, - 58697050, - 2, - 14, - 18, - 1343496508, - 3, - 0, - 39, - 1997725735, - 3, - 29, - 13, - 1380775345, - 3, - 12, - 25, - 224478696, - 0, - 2, - 25, - 0, - 4, - 31, - 1, - 6, - 6, - 4, - 16, - 18, - 2125061826, - 1, - 17, - 16, - 3, - 11, - 34, - 705337248, - 0, - 4, - 37, - 1, - 0, - 40, - 4, - 29, - 17, - 641042010, - 4, - 6, - 41, - 1552208737, - 3, - 1, - 43, - 278431113, - 1, - 7, - 16, - 0, - 20, - 20, - 4, - 7, - 37, - 365288396, - 4, - 17, - 18, - 1591034204, - 0, - 10, - 18, - 4, - 30, - 12, - 527097054, - 4, - 26, - 11, - 1848236572, - 4, - 4, - 35, - 1006345279, - 2, - 21, - 3, - 1440560654, - 4, - 27, - 3, - 1454974682, - 0, - 31, - 2, - 1, - 5, - 32, - 1, - 41, - 7, - 2, - 0, - 26, - 806986269, - 3, - 17, - 19, - 1013727981, - 0, - 2, - 40, - 3, - 10, - 21, - 1205262, - 4, - 2, - 39, - 1065249345, - 4, - 9, - 36, - 1844382690, - 4, - 1, - 39, - 1881712638, - 2, - 32, - 6, - 417057178, - 4, - 7, - 11, - 108574435, - 3, - 7, - 12, - 1735188821, - 3, - 27, - 18, - 871891954, - 3, - 40, - 5, - 955134020, - 1, - 24, - 20, - 1, - 9, - 36, - 0, - 10, - 18, - 1, - 10, - 36, - 4, - 0, - 14, - 2032886644, - 0, - 22, - 14, - 0, - 0, - 42, - 3, - 26, - 2, - 1953654043, - 4, - 8, - 5, - 2128933094, - 2, - 24, - 9, - 1448082091, - 2, - 8, - 31, - 1804942775, - 0, - 31, - 16, - 2, - 1, - 35, - 145399699, - 0, - 11, - 2, - 0, - 2, - 21, - 0, - 2, - 26, - 2, - 4, - 42, - 474038516, - 0, - 7, - 33, - 0, - 17, - 21, - 0, - 13, - 25, - 0, - 27, - 20, - 0, - 13, - 3, - 1, - 24, - 17, - 3, - 26, - 15, - 2036689607, - 3, - 3, - 39, - 444445271, - 1, - 13, - 12, - 4, - 25, - 13, - 920554018, - 0, - 10, - 38, - 1, - 1, - 31, - 1, - 2, - 24, - 4, - 2, - 37, - 1618412489, - 2, - 24, - 17, - 1930065007, - 2, - 3, - 45, - 1453572835, - 1, - 21, - 15, - 3, - 4, - 28, - 985044289, - 1, - 0, - 28, - 0, - 6, - 9, - 3, - 10, - 36, - 423905300, - 3, - 0, - 43, - 16494660, - 0, - 9, - 39, - 1, - 37, - 3, - 3, - 4, - 33, - 1813574093, - 1, - 24, - 20, - 1, - 2, - 28, - 4, - 25, - 9, - 1072206635, - 3, - 0, - 48, - 1976505299, - 4, - 2, - 44, - 930920460, - 0, - 11, - 29, - 2, - 25, - 16, - 261288642, - 4, - 37, - 5, - 1654980249, - 4, - 19, - 22, - 1841089020, - 2, - 11, - 29, - 1187056845, - 0, - 5, - 8, - 1, - 4, - 34, - 1, - 29, - 11, - 2, - 20, - 16, - 1497565466, - 0, - 9, - 38, - 3, - 10, - 2, - 434894431, - 0, - 4, - 9, - 2, - 14, - 11, - 2019415311, - 2, - 6, - 4, - 1993942762, - 0, - 2, - 36, - 2, - 4, - 43, - 1680195538, - 0, - 21, - 8, - 2, - 38, - 4, - 911194324, - 2, - 2, - 30, - 981527962, - 0, - 27, - 2, - 4, - 14, - 4, - 1589825003, - 1, - 31, - 13, - 1, - 7, - 14, - 2, - 0, - 48, - 1327493112, - 3, - 3, - 45, - 890289034, - 3, - 33, - 11, - 898681594, - 1, - 8, - 38, - 3, - 5, - 11, - 127428649, - 2, - 0, - 45, - 903185825, - 3, - 8, - 29, - 69309956, - 1, - 9, - 15, - 4, - 0, - 48, - 1611136733, - 4, - 0, - 29, - 1878995291, - 3, - 2, - 46, - 386421856, - 0, - 12, - 29, - 0, - 0, - 33, - 4, - 12, - 10, - 1766334274, - 0, - 0, - 6, - 0, - 6, - 2, - 0, - 3, - 45, - 1, - 16, - 25, - 0, - 0, - 13, - 3, - 1, - 30, - 273976659, - 1, - 9, - 8, - 4, - 25, - 8, - 1266205944, - 0, - 3, - 45, - 1, - 0, - 48, - 4, - 16, - 8, - 1669905647, - 2, - 0, - 46, - 511105125, - 0, - 3, - 9, - 0, - 3, - 27, - 4, - 16, - 18, - 1659717250, - 1, - 0, - 16, - 4, - 23, - 8, - 223311632, - 2, - 13, - 6, - 735175161, - 3, - 1, - 13, - 613207690, - 3, - 3, - 44, - 498814509, - 1, - 22, - 11, - 4, - 12, - 29, - 852786892, - 4, - 0, - 45, - 574045971, - 4, - 20, - 14, - 502111884, - 3, - 15, - 21, - 1252427885, - 3, - 13, - 29, - 633989304, - 2, - 12, - 13, - 540296828, - 3, - 17, - 19, - 2101744919, - 1, - 6, - 2, - 4, - 17, - 30, - 1314508851, - 4, - 3, - 43, - 945266586, - 3, - 16, - 28, - 1227006744, - 4, - 44, - 3, - 1892852682, - 4, - 4, - 42, - 1994705439, - 1, - 25, - 11, - 1, - 25, - 14, - 2, - 31, - 5, - 401416321, - 3, - 8, - 33, - 1526685015, - 3, - 28, - 20, - 482654423, - 1, - 3, - 17, - 4, - 16, - 28, - 727573996, - 2, - 2, - 42, - 1316271332, - 2, - 5, - 10, - 1408499886, - 4, - 4, - 41, - 1461817074, - 0, - 0, - 48, - 1, - 2, - 45, - 3, - 11, - 17, - 315895153, - 2, - 1, - 40, - 114147388, - 3, - 0, - 42, - 1010929070, - 1, - 20, - 14, - 2, - 13, - 30, - 72127051, - 0, - 1, - 38, - 1, - 4, - 4, - 1, - 12, - 32, - 4, - 19, - 27, - 1487885166, - 4, - 14, - 30, - 1792741847, - 0, - 8, - 35, - 3, - 0, - 48, - 1992494040, - 2, - 8, - 12, - 1886762167, - 2, - 1, - 43, - 875952402, - 2, - 18, - 28, - 1854962431, - 4, - 30, - 9, - 1836929761, - 1, - 9, - 14, - 0, - 31, - 10, - 1, - 12, - 6, - 2, - 2, - 45, - 2126919946, - 4, - 18, - 10, - 1281809590, - 0, - 1, - 47, - 0, - 0, - 48, - 4, - 6, - 41, - 2131792087, - 1, - 1, - 41, - 1, - 0, - 38, - 2, - 7, - 17, - 1563008498, - 1, - 0, - 42, - 0, - 20, - 25, - 1, - 1, - 20, - 2, - 20, - 5, - 1554483301, - 4, - 14, - 31, - 1375715334, - 4, - 3, - 30, - 1903166406, - 0, - 3, - 33, - 0, - 2, - 39, - 2, - 8, - 28, - 508197110, - 1, - 1, - 33, - 4, - 23, - 14, - 1755955058, - 4, - 0, - 45, - 333429990, - 3, - 20, - 8, - 2128757184, - 0, - 18, - 20, - 0, - 2, - 34, - 4, - 6, - 42, - 719393732, - 2, - 5, - 35, - 1182685009, - 0, - 0, - 47, - 3, - 4, - 30, - 52142676, - 1, - 15, - 3, - 3, - 20, - 13, - 1688746842, - 1, - 5, - 39, - 3, - 3, - 44, - 461558417, - 3, - 2, - 36, - 1377362687, - 3, - 27, - 10, - 1871205112, - 1, - 10, - 37, - 3, - 7, - 31, - 921637729, - 2, - 1, - 35, - 1611924064, - 1, - 13, - 7, - 0, - 2, - 44, - 1, - 11, - 3, - 0, - 4, - 37, - 1, - 16, - 8, - 1, - 23, - 25, - 0, - 0, - 46, - 1, - 21, - 23, - 3, - 5, - 41, - 1175732211, - 4, - 30, - 10, - 1153710218, - 3, - 2, - 4, - 1115169017, - 2, - 6, - 40, - 1333181949, - 1, - 36, - 5, - 2, - 29, - 16, - 2067007911, - 1, - 1, - 44, - 1, - 1, - 45, - 0, - 2, - 40, - 1, - 11, - 32, - 1, - 33, - 2, - 0, - 4, - 11, - 1, - 12, - 30, - 4, - 39, - 9, - 888404201, - 1, - 0, - 11, - 1, - 6, - 12, - 4, - 21, - 20, - 1501502146, - 3, - 1, - 47, - 1198156893, - 1, - 23, - 7, - 3, - 5, - 38, - 999011151, - 1, - 3, - 45, - 3, - 10, - 4, - 561952096, - 3, - 5, - 8, - 90666864, - 2, - 7, - 23, - 1780155028, - 4, - 0, - 48, - 786153171, - 3, - 5, - 35, - 370179890, - 0, - 41, - 5, - 0, - 12, - 20, - 3, - 6, - 27, - 1390935266, - 4, - 2, - 24, - 2108028067, - 1, - 21, - 10, - 4, - 3, - 23, - 581845336, - 1, - 13, - 32, - 2, - 8, - 40, - 872587674, - 2, - 0, - 47, - 984877529, - 3, - 4, - 36, - 1325167600, - 0, - 14, - 16, - 1, - 17, - 25, - 2, - 0, - 42, - 2019832808, - 1, - 9, - 22, - 1, - 3, - 42, - 2, - 1, - 44, - 377524901, - 2, - 10, - 36, - 1420325813, - 0, - 38, - 9, - 2, - 4, - 41, - 1046473908, - 2, - 3, - 34, - 1816042886, - 2, - 13, - 15, - 1999438500, - 0, - 21, - 25, - 2, - 2, - 32, - 1851354245, - 3, - 20, - 25, - 1981808706, - 4, - 15, - 10, - 1291775942, - 0, - 11, - 6, - 0, - 34, - 2, - 2, - 12, - 20, - 2142825165, - 0, - 39, - 2, - 2, - 9, - 18, - 131883621, - 2, - 32, - 5, - 1669300843, - 3, - 1, - 47, - 2016969324, - 0, - 25, - 23, - 2, - 19, - 28, - 1983383904, - 4, - 5, - 37, - 1845057068, - 3, - 1, - 5, - 626812268, - 0, - 38, - 9, - 2, - 5, - 7, - 1669311530, - 3, - 6, - 21, - 800506390, - 1, - 8, - 2, - 3, - 1, - 3, - 929706447, - 4, - 0, - 40, - 1662492510, - 4, - 15, - 25, - 1275292179, - 3, - 0, - 48, - 267577682, - 4, - 34, - 5, - 1132694610, - 4, - 5, - 6, - 1580105963, - 0, - 22, - 25, - 0, - 2, - 15, - 1, - 10, - 29, - 3, - 0, - 48, - 1212210932, - 1, - 4, - 24, - 0, - 5, - 3, - 2, - 9, - 12, - 195440775, - 2, - 2, - 41, - 1349096261, - 1, - 1, - 46, - 4, - 26, - 2, - 541948676, - 4, - 9, - 30, - 499627030, - 4, - 4, - 4, - 232354789, - 3, - 4, - 29, - 1853963769, - 2, - 3, - 6, - 1794213398, - 0, - 4, - 11, - 3, - 37, - 11, - 302035668, - 1, - 4, - 8, - 0, - 10, - 21, - 1, - 14, - 16, - 0, - 15, - 15, - 0, - 5, - 39, - 0, - 4, - 28, - 2, - 16, - 10, - 511091537, - 1, - 22, - 2, - 0, - 0, - 48, - 3, - 7, - 35, - 1053201697, - 1, - 4, - 26, - 2, - 4, - 17, - 867735690, - 0, - 12, - 5, - 4, - 0, - 47, - 881397618, - 1, - 4, - 6, - 2, - 35, - 3, - 1307671837, - 3, - 15, - 27, - 364996038, - 1, - 6, - 25, - 2, - 5, - 37, - 1505308595, - 1, - 13, - 21, - 4, - 5, - 40, - 821857492, - 3, - 4, - 42, - 2135407527, - 0, - 2, - 35, - 2, - 23, - 4, - 1610416924, - 0, - 27, - 13, - 0, - 0, - 44, - 4, - 27, - 12, - 1920557514, - 3, - 10, - 8, - 713541849, - 2, - 2, - 28, - 948867639, - 2, - 1, - 38, - 774991266, - 3, - 1, - 11, - 1813642231, - 2, - 20, - 15, - 1055126318, - 0, - 1, - 41, - 1, - 2, - 46, - 3, - 1, - 7, - 1813228362, - 2, - 8, - 30, - 1148742400, - 4, - 23, - 19, - 80396449, - 4, - 0, - 48, - 1645155293, - 0, - 0, - 48, - 3, - 7, - 34, - 704199013, - 1, - 4, - 12, - 1, - 22, - 22, - 0, - 13, - 33, - 0, - 1, - 25, - 2, - 2, - 28, - 446539285, - 3, - 15, - 16, - 1545296493, - 3, - 4, - 22, - 573765314, - 3, - 1, - 24, - 667080018, - 0, - 34, - 11, - 4, - 9, - 20, - 759916382, - 0, - 4, - 41, - 1, - 0, - 37, - 4, - 7, - 12, - 2059397381, - 3, - 20, - 24, - 450810264, - 4, - 9, - 32, - 1958612779, - 1, - 0, - 40, - 1, - 5, - 42, - 2, - 3, - 45, - 954158941, - 2, - 7, - 21, - 1230363900, - 1, - 0, - 30, - 1, - 20, - 15, - 1, - 4, - 25, - 0, - 8, - 15, - 3, - 13, - 21, - 746153631, - 2, - 14, - 30, - 1174915715, - 2, - 8, - 28, - 2003200968, - 1, - 10, - 25, - 1, - 19, - 28, - 3, - 16, - 16, - 990725619, - 1, - 1, - 44, - 2, - 12, - 14, - 986044847, - 2, - 3, - 33, - 2052982269, - 4, - 10, - 29, - 655604705, - 2, - 31, - 3, - 1050531073, - 0, - 29, - 9, - 1, - 17, - 13, - 3, - 2, - 42, - 1381525588, - 2, - 4, - 44, - 679908755, - 4, - 2, - 16, - 1913872575, - 3, - 23, - 20, - 475087472, - 1, - 1, - 36, - 3, - 20, - 9, - 25558106, - 0, - 36, - 3, - 3, - 19, - 2, - 819711428, - 2, - 9, - 5, - 824840182, - 1, - 2, - 32, - 2, - 12, - 36, - 102134323, - 1, - 12, - 34, - 1, - 15, - 26, - 2, - 2, - 36, - 893317300, - 2, - 23, - 16, - 1512360143, - 1, - 36, - 4, - 3, - 4, - 32, - 1069581395, - 0, - 10, - 29, - 0, - 0, - 25, - 2, - 21, - 13, - 503210770, - 0, - 4, - 38, - 4, - 19, - 29, - 602028362, - 1, - 8, - 32, - 2, - 25, - 3, - 2006598689, - 3, - 2, - 45, - 472403037, - 3, - 4, - 37, - 523261943, - 2, - 40, - 7, - 1087299891, - 2, - 23, - 3, - 1553082836, - 0, - 18, - 8, - 4, - 1, - 45, - 1376935523, - 3, - 7, - 15, - 1486517127, - 1, - 3, - 34, - 4, - 23, - 13, - 1030417612, - 2, - 2, - 45, - 1109688662, - 0, - 15, - 27, - 4, - 26, - 11, - 1602045954, - 0, - 1, - 43, - 3, - 12, - 10, - 1644593812, - 2, - 6, - 27, - 406236175, - 1, - 0, - 42, - 1, - 2, - 46, - 1, - 5, - 11, - 2, - 16, - 30, - 177000552, - 3, - 0, - 31, - 1716969517, - 2, - 6, - 42, - 1024596786, - 0, - 20, - 28, - 0, - 7, - 19, - 2, - 6, - 32, - 1800637294, - 0, - 2, - 27, - 0, - 1, - 46, - 3, - 0, - 14, - 578464610, - 3, - 4, - 27, - 799656554, - 1, - 2, - 30, - 1, - 3, - 28, - 1, - 27, - 19, - 3, - 4, - 40, - 8465602, - 0, - 0, - 46, - 2, - 17, - 19, - 1609810595, - 0, - 4, - 36, - 1, - 34, - 10, - 4, - 13, - 15, - 1301100950, - 2, - 13, - 19, - 1439037760, - 3, - 5, - 33, - 1056587716, - 3, - 0, - 18, - 2047923135, - 0, - 4, - 31, - 3, - 3, - 43, - 257022608, - 1, - 12, - 27, - 0, - 3, - 44, - 2, - 10, - 38, - 1340039331, - 4, - 2, - 14, - 1095729333, - 4, - 10, - 33, - 773600882, - 4, - 3, - 18, - 1965675694, - 3, - 28, - 3, - 619064249, - 0, - 17, - 18, - 2, - 13, - 35, - 1441604107, - 0, - 27, - 6, - 0, - 12, - 7, - 3, - 9, - 34, - 1356937154, - 1, - 17, - 29, - 4, - 0, - 31, - 1860510518, - 0, - 40, - 4, - 4, - 0, - 32, - 1208716891, - 4, - 29, - 11, - 741073392, - 2, - 19, - 18, - 488589134, - 1, - 3, - 8, - 3, - 0, - 48, - 1744098841, - 2, - 41, - 7, - 1248380369, - 1, - 8, - 28, - 3, - 10, - 36, - 2088324900, - 1, - 2, - 44, - 2, - 7, - 40, - 1222024033, - 2, - 2, - 42, - 1965697702, - 0, - 3, - 37, - 1, - 3, - 8, - 3, - 16, - 30, - 1188532249, - 2, - 3, - 45, - 454316252, - 3, - 3, - 40, - 11338195, - 3, - 5, - 24, - 274182737, - 3, - 7, - 35, - 1301320614, - 2, - 30, - 2, - 1368429061, - 0, - 8, - 11, - 1, - 9, - 30, - 1, - 2, - 13, - 0, - 9, - 10, - 1, - 11, - 2, - 3, - 19, - 11, - 1334694206, - 1, - 19, - 25, - 0, - 17, - 13, - 0, - 5, - 43, - 0, - 11, - 14, - 3, - 1, - 41, - 1569529262, - 4, - 12, - 22, - 644041156, - 2, - 6, - 17, - 952430087, - 3, - 6, - 34, - 1324978748, - 2, - 38, - 3, - 1067926878, - 3, - 15, - 9, - 1922711386, - 4, - 3, - 42, - 1386910774, - 0, - 8, - 29, - 2, - 5, - 42, - 1198513659, - 4, - 14, - 26, - 2129286061, - 4, - 10, - 6, - 1411412631, - 4, - 0, - 38, - 2125802306, - 3, - 4, - 17, - 233448220, - 1, - 3, - 43, - 3, - 14, - 9, - 278737535, - 2, - 9, - 7, - 2010032612, - 0, - 32, - 14, - 3, - 9, - 30, - 827714578, - 3, - 1, - 47, - 1820463527, - 1, - 8, - 40, - 1, - 24, - 16, - 2, - 1, - 47, - 1249459739, - 4, - 20, - 24, - 798943558, - 4, - 18, - 11, - 694848980, - 0, - 9, - 24, - 1, - 25, - 5, - 1, - 18, - 16, - 2, - 31, - 5, - 783211257, - 4, - 12, - 6, - 1529605657, - 4, - 12, - 28, - 886514591, - 2, - 7, - 31, - 1842936305, - 3, - 0, - 40, - 1613804170, - 2, - 27, - 17, - 1051819433, - 0, - 16, - 23, - 0, - 6, - 37, - 0, - 20, - 16, - 2, - 30, - 18, - 1933013570, - 4, - 7, - 32, - 791637056, - 4, - 1, - 39, - 930564023, - 4, - 10, - 36, - 978921894, - 4, - 3, - 37, - 703772384, - 0, - 28, - 2, - 1, - 1, - 36, - 1, - 0, - 46, - 3, - 16, - 21, - 562701384, - 3, - 27, - 9, - 962592731, - 2, - 0, - 40, - 47685325, - 0, - 3, - 25, - 3, - 4, - 37, - 871719479, - 4, - 29, - 2, - 457463279, - 3, - 8, - 37, - 104294227, - 3, - 13, - 34, - 317213750, - 1, - 7, - 17, - 0, - 26, - 20, - 4, - 5, - 22, - 524538944, - 1, - 17, - 17, - 3, - 18, - 19, - 1736273371, - 3, - 26, - 22, - 1087907296, - 1, - 13, - 15, - 2, - 0, - 48, - 407235971, - 1, - 11, - 32, - 0, - 4, - 7, - 3, - 20, - 16, - 462620356, - 4, - 20, - 20, - 197125373, - 4, - 23, - 25, - 702510684, - 3, - 13, - 33, - 432185912, - 0, - 5, - 35, - 4, - 0, - 32, - 47475194, - 1, - 12, - 30, - 3, - 26, - 5, - 244987092, - 3, - 14, - 18, - 903807294, - 2, - 22, - 3, - 2076020452, - 1, - 3, - 37, - 4, - 7, - 14, - 1029591998, - 1, - 30, - 11, - 1, - 3, - 36, - 4, - 14, - 24, - 1171519903, - 0, - 7, - 7, - 3, - 10, - 24, - 622227736, - 3, - 19, - 14, - 647714527, - 4, - 1, - 45, - 1295090231, - 4, - 21, - 14, - 325044601, - 4, - 7, - 41, - 1059595139, - 3, - 24, - 22, - 2110353038, - 1, - 0, - 19, - 4, - 1, - 47, - 1456492989, - 1, - 25, - 20, - 3, - 11, - 29, - 861257451, - 0, - 19, - 4, - 2, - 12, - 31, - 1957306790, - 0, - 10, - 6, - 4, - 11, - 22, - 480529245, - 2, - 11, - 26, - 141938745, - 1, - 0, - 48, - 3, - 13, - 30, - 1949063912, - 2, - 13, - 4, - 726289589, - 3, - 1, - 44, - 342903383, - 4, - 9, - 39, - 546576625, - 3, - 10, - 29, - 1073687164, - 1, - 2, - 45, - 0, - 26, - 11, - 3, - 23, - 25, - 568864844, - 4, - 13, - 5, - 944907136, - 2, - 0, - 46, - 926845782, - 1, - 14, - 15, - 4, - 6, - 11, - 759358307, - 4, - 9, - 34, - 894429828, - 4, - 0, - 47, - 1209789815, - 4, - 28, - 17, - 109205418, - 3, - 3, - 37, - 1211736810, - 0, - 0, - 47, - 4, - 4, - 44, - 991173485, - 3, - 16, - 23, - 1347771646, - 3, - 15, - 23, - 1004141960, - 3, - 2, - 14, - 554064982, - 3, - 36, - 6, - 2087380288, - 1, - 4, - 44, - 1, - 12, - 36, - 4, - 13, - 17, - 1905153083, - 3, - 2, - 44, - 1865893633, - 2, - 1, - 43, - 580673894, - 1, - 1, - 46, - 1, - 6, - 42, - 0, - 0, - 31, - 3, - 0, - 48, - 1831278356, - 4, - 8, - 30, - 1372182050, - 1, - 9, - 36, - 3, - 21, - 10, - 1684375037, - 0, - 11, - 26, - 2, - 18, - 10, - 1578325983, - 2, - 10, - 4, - 1971726415, - 0, - 4, - 34, - 2, - 21, - 15, - 1358347096, - 4, - 6, - 24, - 605324679, - 4, - 4, - 30, - 1821272750, - 1, - 3, - 5, - 0, - 1, - 46, - 0, - 15, - 31, - 2, - 13, - 22, - 1256670107, - 4, - 20, - 17, - 1969920411, - 3, - 37, - 5, - 957768808, - 3, - 3, - 45, - 2061345426, - 1, - 8, - 38, - 4, - 35, - 7, - 481506497, - 1, - 6, - 14, - 1, - 10, - 13, - 0, - 13, - 23, - 3, - 7, - 23, - 618212915, - 1, - 22, - 24, - 4, - 8, - 37, - 647394328, - 0, - 0, - 38, - 2, - 10, - 22, - 412591822, - 0, - 6, - 35, - 1, - 15, - 32, - 0, - 1, - 17, - 1, - 2, - 46, - 4, - 2, - 44, - 1401833566, - 0, - 33, - 9, - 1, - 13, - 12, - 3, - 12, - 8, - 1037744394, - 3, - 21, - 25, - 330462569, - 0, - 2, - 13, - 0, - 3, - 44, - 2, - 3, - 22, - 487683507, - 3, - 1, - 32, - 1962013417, - 0, - 4, - 41, - 0, - 0, - 45, - 2, - 4, - 31, - 1625808507, - 1, - 12, - 18, - 2, - 2, - 6, - 1038823340, - 3, - 2, - 44, - 2072643873, - 3, - 3, - 45, - 1201398998, - 3, - 2, - 30, - 1771877572, - 3, - 1, - 31, - 1775192514, - 2, - 30, - 11, - 1188725997, - 3, - 3, - 45, - 1867872077, - 1, - 6, - 39, - 1, - 19, - 21, - 3, - 5, - 42, - 755364485, - 1, - 12, - 36, - 4, - 19, - 3, - 208145786, - 0, - 10, - 38, - 4, - 24, - 21, - 385641463, - 4, - 27, - 14, - 253228184, - 0, - 1, - 47, - 1, - 39, - 8, - 4, - 3, - 45, - 1326645028, - 0, - 9, - 30, - 4, - 10, - 13, - 1674764717, - 2, - 2, - 40, - 1592930242, - 4, - 25, - 5, - 2097216870, - 2, - 19, - 12, - 153991794, - 2, - 2, - 44, - 208327279, - 1, - 15, - 26, - 3, - 0, - 48, - 1593902721, - 1, - 2, - 44, - 3, - 21, - 4, - 40354999, - 1, - 3, - 35, - 2, - 17, - 31, - 418562784, - 0, - 1, - 26, - 2, - 2, - 46, - 309516193, - 4, - 24, - 3, - 1355471473, - 1, - 6, - 27, - 0, - 14, - 25, - 0, - 0, - 47, - 1, - 0, - 42, - 1, - 3, - 36, - 2, - 27, - 9, - 1623903298, - 3, - 0, - 39, - 1714612956, - 3, - 13, - 2, - 2071292896, - 3, - 7, - 41, - 394448964, - 0, - 29, - 11, - 0, - 8, - 6, - 4, - 7, - 41, - 2063059777, - 1, - 0, - 22, - 0, - 0, - 39, - 3, - 0, - 44, - 1511900477, - 0, - 5, - 16, - 3, - 8, - 32, - 501870653, - 3, - 13, - 12, - 1213465996, - 1, - 0, - 40, - 3, - 19, - 28, - 1876536633, - 1, - 2, - 33, - 1, - 14, - 4, - 1, - 9, - 15, - 0, - 3, - 41, - 2, - 1, - 47, - 1698681401, - 1, - 11, - 32, - 0, - 14, - 32, - 1, - 0, - 48, - 1, - 1, - 43, - 3, - 25, - 13, - 668897647, - 2, - 16, - 25, - 1396960995, - 4, - 0, - 41, - 1876563121, - 1, - 16, - 6, - 3, - 8, - 33, - 1959119445, - 0, - 3, - 23, - 0, - 15, - 20, - 4, - 0, - 45, - 1290977324, - 4, - 10, - 9, - 1146658267, - 0, - 11, - 19, - 4, - 22, - 26, - 29764774, - 0, - 40, - 5, - 2, - 3, - 2, - 368066041, - 3, - 21, - 11, - 227809547, - 3, - 2, - 43, - 756496729, - 0, - 28, - 7, - 3, - 2, - 32, - 1041064186, - 4, - 5, - 15, - 1768353861, - 2, - 4, - 11, - 2064515808, - 4, - 2, - 2, - 233772825, - 2, - 40, - 2, - 22546803, - 4, - 9, - 38, - 1421710578, - 3, - 11, - 34, - 727223235, - 3, - 22, - 26, - 178163660, - 1, - 3, - 7, - 4, - 3, - 45, - 1151720934, - 4, - 10, - 36, - 634484399, - 4, - 0, - 48, - 1115487844, - 3, - 1, - 43, - 2037167672, - 0, - 3, - 45, - 2, - 8, - 26, - 427529830, - 3, - 3, - 37, - 1174984193, - 2, - 5, - 40, - 169438164, - 1, - 3, - 30, - 0, - 1, - 44, - 4, - 28, - 13, - 1845987943, - 3, - 9, - 24, - 98441165, - 2, - 19, - 9, - 1436907371, - 2, - 31, - 9, - 1603553923, - 3, - 5, - 16, - 1485998706, - 3, - 10, - 35, - 655100903, - 0, - 6, - 39, - 3, - 8, - 29, - 2129907581, - 2, - 18, - 11, - 852231367, - 4, - 0, - 48, - 175166580, - 4, - 34, - 8, - 1211208683, - 1, - 2, - 23, - 1, - 18, - 23, - 1, - 11, - 31, - 3, - 19, - 20, - 1085310723, - 0, - 3, - 42, - 0, - 13, - 30, - 4, - 3, - 38, - 1319875028, - 1, - 5, - 16, - 4, - 23, - 19, - 1814283378, - 4, - 0, - 48, - 1472305172, - 2, - 5, - 28, - 1932529021, - 2, - 10, - 22, - 735053752, - 3, - 10, - 20, - 1540011621, - 4, - 9, - 24, - 1729713573, - 4, - 27, - 13, - 808631504, - 0, - 11, - 37, - 4, - 35, - 4, - 31524555, - 3, - 7, - 17, - 1088116484, - 1, - 32, - 13, - 2, - 12, - 36, - 2130122533, - 1, - 3, - 42, - 4, - 1, - 10, - 1266379278, - 1, - 29, - 18, - 3, - 0, - 35, - 754916215, - 4, - 10, - 3, - 1263963210, - 4, - 8, - 21, - 531277433, - 1, - 6, - 24, - 0, - 17, - 26, - 4, - 4, - 23, - 1114133070, - 1, - 39, - 6, - 1, - 37, - 4, - 0, - 11, - 31, - 4, - 36, - 7, - 414163549, - 1, - 18, - 6, - 3, - 22, - 19, - 568990644, - 2, - 8, - 35, - 1721418433, - 2, - 1, - 30, - 1498189827, - 1, - 27, - 15, - 3, - 5, - 18, - 489241532, - 4, - 3, - 42, - 1741656039, - 4, - 14, - 4, - 853284779, - 3, - 1, - 46, - 253843668, - 0, - 21, - 22, - 0, - 10, - 33, - 4, - 5, - 19, - 1316039911, - 3, - 31, - 3, - 1413920280, - 0, - 14, - 34, - 3, - 15, - 5, - 668007217, - 4, - 14, - 21, - 494757162, - 4, - 34, - 4, - 909925184, - 0, - 0, - 30, - 1, - 15, - 8, - 3, - 10, - 27, - 1418593178, - 2, - 1, - 44, - 1231245011, - 3, - 10, - 37, - 744110064, - 4, - 17, - 3, - 332073031, - 0, - 7, - 39, - 1, - 7, - 39, - 1, - 32, - 10, - 1, - 7, - 41, - 3, - 5, - 27, - 166914318, - 0, - 9, - 28, - 1, - 26, - 12, - }; - -const int decodeTableLen=sizeof(decodeTable)/sizeof(int); - -} diff --git a/Classes/linphoneAppDelegate.h b/Classes/linphoneAppDelegate.h index c1ecca2a4..322c938a4 100644 --- a/Classes/linphoneAppDelegate.h +++ b/Classes/linphoneAppDelegate.h @@ -36,6 +36,8 @@ -(bool) toggleTunnel; -(bool) isTunnel; -(void) resetConfig; +-(void) doRegister; +-(void) kickOffNetworkConnection; -(LinphoneCore*) getLinphoneCore; @@ -51,7 +53,8 @@ @class FirstLoginViewController; @interface linphoneAppDelegate : NSObject { - UIWindow *window; + + UIWindow *window; IBOutlet UITabBarController* myTabBarController; IBOutlet ABPeoplePickerNavigationController* myPeoplePickerController; IBOutlet PhoneViewController* myPhoneViewController; @@ -64,12 +67,15 @@ bool isTunnelConfigured; bool isTunnel; bool isDebug; + bool isStarted; LinphoneCore* myLinphoneCore; SCNetworkReachabilityContext proxyReachabilityContext; SCNetworkReachabilityRef proxyReachability; } + +void tunnel_state_cb(bool connected, void *data); /********************************** * liblinphone initialization method **********************************/ diff --git a/Classes/linphoneAppDelegate.m b/Classes/linphoneAppDelegate.m index e724caa16..73821d801 100644 --- a/Classes/linphoneAppDelegate.m +++ b/Classes/linphoneAppDelegate.m @@ -29,10 +29,18 @@ #import "MoreViewController.h" #import "ConsoleViewController.h" #import "FirstLoginViewController.h" +#import "codechecker.hh" + + extern void ms_au_register_card(); -extern void linphone_iphone_tunneling_init(const char* ip,unsigned int port,bool isDebug); +extern void linphone_iphone_tunneling_init(const char* ip1 + ,const char* ip2 + ,unsigned int port + ,bool isDebug + ,void (*cb)(bool connected, void *data) + ,void* userdata); extern void linphone_iphone_enable_tunneling(LinphoneCore* lc); extern void linphone_iphone_disable_tunneling(LinphoneCore* lc); extern int linphone_iphone_tunneling_isready(); @@ -225,6 +233,24 @@ LinphoneCoreVTable linphone_iphone_vtable = { } +-(void) kickOffNetworkConnection { + CFWriteStreamRef writeStream; + CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"208.109.100.191", 15000, nil, &writeStream); + Boolean status = CFWriteStreamOpen (writeStream); + const char* buff="yop"; + int written = CFWriteStreamWrite (writeStream,(const UInt8*)buff,strlen(buff)); + NSLog(@"activating network interface status [%i], [%i] byte sent",status,written); + CFWriteStreamClose (writeStream); + +} +- (void)applicationDidBecomeActive:(UIApplication *)application { + if (isStarted) { + NSLog(@"becomming active, make sure we are registered"); + [self doRegister]; + } else { + isStarted=true; + } +} - (void)dealloc { [window release]; [myPeoplePickerController release]; @@ -343,9 +369,14 @@ LinphoneCoreVTable linphone_iphone_vtable = { NSString* axtelPin = [[NSUserDefaults standardUserDefaults] stringForKey:@"axtelpin_preference"]; if (isTunnelConfigured) { - const char* tunnelIp=axtunnel_get_ip_from_key([username cStringUsingEncoding:[NSString defaultCStringEncoding]] - ,[axtelPin cStringUsingEncoding:[NSString defaultCStringEncoding]] ); - if(!tunnelIp) { + char ip1[32]; + char ip2[32]; + int status = axkeydec_get_ip_from_key([username cStringUsingEncoding:[NSString defaultCStringEncoding]] + , [axtelPin cStringUsingEncoding:[NSString defaultCStringEncoding]] + , ip1 + , ip2 + , sizeof(ip1)); + if(status) { UIAlertView* alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert",nil) message:NSLocalizedString(@"Wrong axtel number or pin, disabling tunnel",nil) delegate:nil @@ -356,7 +387,7 @@ LinphoneCoreVTable linphone_iphone_vtable = { isTunnel=false; } else { - linphone_iphone_tunneling_init(tunnelIp,443,isDebug); + linphone_iphone_tunneling_init((const char*)ip1,(const char*)ip2,443,isDebug,tunnel_state_cb,self); isTunnel=true; } } @@ -420,7 +451,7 @@ LinphoneCoreVTable linphone_iphone_vtable = { } LinphoneAddress* addr=linphone_address_new(linphone_proxy_config_get_addr(proxyCfg)); proxyReachability=SCNetworkReachabilityCreateWithName(nil, linphone_address_get_domain(addr)); - proxyReachabilityContext.info=myLinphoneCore; + proxyReachabilityContext.info=self; bool result=SCNetworkReachabilitySetCallback(proxyReachability, networkReachabilityCallBack,&proxyReachabilityContext); SCNetworkReachabilityFlags reachabilityFlags; result=SCNetworkReachabilityGetFlags (proxyReachability,&reachabilityFlags); @@ -434,7 +465,7 @@ LinphoneCoreVTable linphone_iphone_vtable = { linphone_core_add_proxy_config(myLinphoneCore,proxyCfg); //set to default proxy linphone_core_set_default_proxy(myLinphoneCore,proxyCfg); - networkReachabilityCallBack(proxyReachability,reachabilityFlags,myLinphoneCore); + networkReachabilityCallBack(proxyReachability,reachabilityFlags,self); } } @@ -493,7 +524,11 @@ LinphoneCoreVTable linphone_iphone_vtable = { } bool networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void * info) { LinphoneProxyConfig* proxyCfg; - linphone_core_get_default_proxy((LinphoneCore*)info,&proxyCfg); + id linphoneDelegate=info; + if (linphone_core_get_default_proxy([linphoneDelegate getLinphoneCore],&proxyCfg)) { + //glob, no default proxy + return false; + } linphone_proxy_config_edit(proxyCfg); bool result = false; #ifdef LINPHONE_WIFI_ONLY @@ -505,6 +540,9 @@ bool networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach result = false; } #else + if ((flags == 0) | (flags & (kSCNetworkReachabilityFlagsConnectionRequired |kSCNetworkReachabilityFlagsConnectionOnTraffic))) { + [linphoneDelegate kickOffNetworkConnection]; + } if (flags) { // register whatever connection type linphone_proxy_config_enable_register(proxyCfg,TRUE); @@ -517,15 +555,29 @@ bool networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach linphone_proxy_config_done(proxyCfg); return result; } - +void tunnel_state_cb(bool connected, void *data) { + id linphoneApp = (id )data; + if ([linphoneApp isTunnel] && connected) { + NSLog(@"Tunnel connected"); + [linphoneApp doRegister]; + } else if ([linphoneApp isTunnel] && !connected) { + NSLog(@"Tunnel connection failure detected"); + LinphoneProxyConfig* proxyCfg; + linphone_core_get_default_proxy([linphoneApp getLinphoneCore],&proxyCfg); + linphone_proxy_config_edit(proxyCfg); + linphone_proxy_config_enable_register(proxyCfg,false); + linphone_proxy_config_done(proxyCfg); + } +} -(bool) toggleTunnel { if (isTunnelConfigured) { - if (isTunnel) { - [self disableTunnel]; - } else { - [self enableTunnel]; - } isTunnel=!isTunnel; + if (isTunnel) { + [self enableTunnel]; + } else { + [self disableTunnel]; + } + } else { UIAlertView* alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert",nil) message:NSLocalizedString(@"Auroc cannot be activated, go to the settings to configure",nil) @@ -540,7 +592,7 @@ bool networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach -(void) enableTunnel { linphone_iphone_enable_tunneling(myLinphoneCore); - [self doRegister]; + if (linphone_iphone_tunneling_isready()) [self doRegister]; } -(void) disableTunnel { @@ -551,7 +603,7 @@ bool networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach -(void) doRegister { SCNetworkReachabilityFlags reachabilityFlags; SCNetworkReachabilityGetFlags (proxyReachability,&reachabilityFlags); - networkReachabilityCallBack(proxyReachability,reachabilityFlags,myLinphoneCore); + networkReachabilityCallBack(proxyReachability,reachabilityFlags,self); } -(LinphoneCore*) getLinphoneCore { return myLinphoneCore; diff --git a/Classes/tunnel.cc b/Classes/tunnel.cc index 9d256ae56..2e9060315 100644 --- a/Classes/tunnel.cc +++ b/Classes/tunnel.cc @@ -106,14 +106,25 @@ static RtpTransport audio_transport={ }; -extern "C" void linphone_iphone_tunneling_init(const char* ip,unsigned int port,bool isDebug){ +extern "C" void linphone_iphone_tunneling_init(const char* ip1 + ,const char* ip2 + ,unsigned int port + ,bool isDebug + ,void (*cb)(bool connected, void *data) + ,void* userdata) { if (isDebug) { SetLogHandler(&linphone_iphone_log_handler); SetLogLevel(AXTUNNEL_ERROR|AXTUNNEL_WARN); } else { SetLogLevel(0); } - linphone_iphone_tun = new TunnelClient(ip,port); + linphone_iphone_tun = new TunnelClient(); + linphone_iphone_tun->addServer(ip1, port); + linphone_iphone_tun->addServer(ip2, port); + linphone_iphone_tun->setCallback(cb, userdata); + linphone_iphone_tun->start(); + + } extern "C" void linphone_iphone_enable_tunneling(LinphoneCore* lc){ diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index d6bbef80d..fc26cfac3 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -111,6 +111,8 @@ 224567C2107B968500F10948 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 224567C1107B968500F10948 /* AVFoundation.framework */; }; 22527EF410DBB82C00E9915B /* FirstLoginViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 22527EF210DBB82C00E9915B /* FirstLoginViewController.m */; }; 22527EF510DBB82C00E9915B /* FirstLoginViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 22527EF310DBB82C00E9915B /* FirstLoginViewController.xib */; }; + 225BCDD61122F043009EE0C0 /* libaxkeydec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 225BCDD51122F043009EE0C0 /* libaxkeydec.a */; }; + 225BCDD71122F043009EE0C0 /* libaxkeydec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 225BCDD51122F043009EE0C0 /* libaxkeydec.a */; }; 2273785E10A3703300526073 /* libmsiounit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2273785D10A3703300526073 /* libmsiounit.a */; }; 2274401A106F31BD006EC466 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22744019106F31BD006EC466 /* CoreAudio.framework */; }; 2274402F106F335E006EC466 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2274402E106F335E006EC466 /* AudioToolbox.framework */; }; @@ -324,20 +326,13 @@ 22F255151073EEE600AC9B3F /* green.png in Resources */ = {isa = PBXBuildFile; fileRef = 22F255131073EEE600AC9B3F /* green.png */; }; 22F255161073EEE600AC9B3F /* red.png in Resources */ = {isa = PBXBuildFile; fileRef = 22F255141073EEE600AC9B3F /* red.png */; }; 22F51EF6107FA66500F98953 /* untitled.plist in Resources */ = {isa = PBXBuildFile; fileRef = 22F51EF5107FA66500F98953 /* untitled.plist */; }; - 22FAD379110E065100E2BA6A /* decodetable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 22B44F8A10F4E519005A07E6 /* decodetable.cc */; }; - 22FAD37A110E065100E2BA6A /* codechecker.hh in Headers */ = {isa = PBXBuildFile; fileRef = 22B44F8C10F4E519005A07E6 /* codechecker.hh */; }; - 22FAD37B110E065100E2BA6A /* codechecker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 22B44F8D10F4E519005A07E6 /* codechecker.cc */; }; - 22FAD37C110E065100E2BA6A /* bitlib.hh in Headers */ = {isa = PBXBuildFile; fileRef = 22B44F8E10F4E519005A07E6 /* bitlib.hh */; }; - 22FAD37D110E065100E2BA6A /* bitlib.cc in Sources */ = {isa = PBXBuildFile; fileRef = 22B44F8F10F4E519005A07E6 /* bitlib.cc */; }; - 22FAD393110E06D800E2BA6A /* libkeydecoder.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22FAD370110E05FC00E2BA6A /* libkeydecoder.a */; }; - 22FAD394110E06E500E2BA6A /* libkeydecoder.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22FAD370110E05FC00E2BA6A /* libkeydecoder.a */; }; 288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765FC0DF74451002DB57D /* CoreGraphics.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 1D3623240D0F684500981E51 /* linphoneAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linphoneAppDelegate.h; sourceTree = ""; }; - 1D3623250D0F684500981E51 /* linphoneAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = linphoneAppDelegate.m; sourceTree = ""; }; + 1D3623250D0F684500981E51 /* linphoneAppDelegate.m */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = linphoneAppDelegate.m; sourceTree = ""; }; 1D6058910D05DD3D006BFB54 /* axphone.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = axphone.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 220646AA10D7B90300632606 /* tunnel.cc */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 4; name = tunnel.cc; path = Classes/tunnel.cc; sourceTree = ""; }; @@ -560,6 +555,8 @@ 22527EF110DBB82C00E9915B /* FirstLoginViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FirstLoginViewController.h; sourceTree = ""; }; 22527EF210DBB82C00E9915B /* FirstLoginViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FirstLoginViewController.m; sourceTree = ""; }; 22527EF310DBB82C00E9915B /* FirstLoginViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FirstLoginViewController.xib; sourceTree = ""; }; + 225BCDD51122F043009EE0C0 /* libaxkeydec.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libaxkeydec.a; path = "../liblinphone-sdk/armv6-apple-darwin/lib/libaxkeydec.a"; sourceTree = SOURCE_ROOT; }; + 225BCDE81122F094009EE0C0 /* codechecker.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = codechecker.hh; sourceTree = ""; }; 2273785D10A3703300526073 /* libmsiounit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmsiounit.a; path = "../liblinphone-sdk/armv6-apple-darwin/lib/mediastreamer/plugins/libmsiounit.a"; sourceTree = SOURCE_ROOT; }; 22744019106F31BD006EC466 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; 2274402E106F335E006EC466 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; @@ -593,11 +590,6 @@ 22B44E6610F4AB5A005A07E6 /* FavoriteEditViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FavoriteEditViewController.h; sourceTree = ""; }; 22B44E6710F4AB5A005A07E6 /* FavoriteEditViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FavoriteEditViewController.m; sourceTree = ""; }; 22B44E6B10F4AEE0005A07E6 /* FavoriteEditViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FavoriteEditViewController.xib; sourceTree = ""; }; - 22B44F8A10F4E519005A07E6 /* decodetable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decodetable.cc; sourceTree = ""; }; - 22B44F8C10F4E519005A07E6 /* codechecker.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = codechecker.hh; sourceTree = ""; }; - 22B44F8D10F4E519005A07E6 /* codechecker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = codechecker.cc; sourceTree = ""; }; - 22B44F8E10F4E519005A07E6 /* bitlib.hh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = bitlib.hh; sourceTree = ""; }; - 22B44F8F10F4E519005A07E6 /* bitlib.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bitlib.cc; sourceTree = ""; }; 22B4506510F5D391005A07E6 /* about.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = about.jpg; sourceTree = ""; }; 22B4506910F5D66A005A07E6 /* boton_colgar.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = boton_colgar.png; sourceTree = ""; }; 22B4506A10F5D66A005A07E6 /* corner_der.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = corner_der.png; sourceTree = ""; }; @@ -636,7 +628,6 @@ 22F255131073EEE600AC9B3F /* green.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = green.png; path = ../linphone/pixmaps/green.png; sourceTree = SOURCE_ROOT; }; 22F255141073EEE600AC9B3F /* red.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = red.png; path = ../linphone/pixmaps/red.png; sourceTree = SOURCE_ROOT; }; 22F51EF5107FA66500F98953 /* untitled.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = untitled.plist; sourceTree = ""; }; - 22FAD370110E05FC00E2BA6A /* libkeydecoder.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libkeydecoder.a; sourceTree = BUILT_PRODUCTS_DIR; }; 288765FC0DF74451002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* linphone_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linphone_Prefix.pch; sourceTree = ""; }; @@ -670,7 +661,7 @@ 220646F310D7C62600632606 /* libssl.a in Frameworks */, 220646F410D7C62600632606 /* libcrypto.a in Frameworks */, 229242BC10F2298C008A8A37 /* SystemConfiguration.framework in Frameworks */, - 22FAD394110E06E500E2BA6A /* libkeydecoder.a in Frameworks */, + 225BCDD71122F043009EE0C0 /* libaxkeydec.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -700,14 +691,7 @@ 2292419110F2020E008A8A37 /* libssl.a in Frameworks */, 2292419210F2020E008A8A37 /* libcrypto.a in Frameworks */, 229242C010F229AD008A8A37 /* SystemConfiguration.framework in Frameworks */, - 22FAD393110E06D800E2BA6A /* libkeydecoder.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 22FAD36E110E05FC00E2BA6A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( + 225BCDD61122F043009EE0C0 /* libaxkeydec.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -717,11 +701,6 @@ 080E96DDFE201D6D7F000001 /* Classes */ = { isa = PBXGroup; children = ( - 22B44F8A10F4E519005A07E6 /* decodetable.cc */, - 22B44F8C10F4E519005A07E6 /* codechecker.hh */, - 22B44F8D10F4E519005A07E6 /* codechecker.cc */, - 22B44F8E10F4E519005A07E6 /* bitlib.hh */, - 22B44F8F10F4E519005A07E6 /* bitlib.cc */, 1D3623240D0F684500981E51 /* linphoneAppDelegate.h */, 1D3623250D0F684500981E51 /* linphoneAppDelegate.m */, 22F2508B107141E100AC9B3F /* PhoneViewController.h */, @@ -764,7 +743,6 @@ children = ( 1D6058910D05DD3D006BFB54 /* axphone.app */, 2292419710F2020E008A8A37 /* axphone.app */, - 22FAD370110E05FC00E2BA6A /* libkeydecoder.a */, ); name = Products; sourceTree = ""; @@ -888,6 +866,7 @@ 220FAC77107654FC0068D98F /* include */ = { isa = PBXGroup; children = ( + 225BCDE71122F094009EE0C0 /* axkeydec */, 228B040310DB95BD0061FE68 /* axtunnel */, 220FAC78107654FC0068D98F /* eXosip2 */, 220FAC82107654FC0068D98F /* gsm */, @@ -1073,6 +1052,14 @@ path = speex; sourceTree = ""; }; + 225BCDE71122F094009EE0C0 /* axkeydec */ = { + isa = PBXGroup; + children = ( + 225BCDE81122F094009EE0C0 /* codechecker.hh */, + ); + path = axkeydec; + sourceTree = ""; + }; 228B040310DB95BD0061FE68 /* axtunnel */ = { isa = PBXGroup; children = ( @@ -1184,6 +1171,7 @@ 220FACFD107657EC0068D98F /* libosipparser2.a */, 220FACFE107657EC0068D98F /* libspeex.a */, 220FACFF107657EC0068D98F /* libspeexdsp.a */, + 225BCDD51122F043009EE0C0 /* libaxkeydec.a */, 220FAC77107654FC0068D98F /* include */, 080E96DDFE201D6D7F000001 /* Classes */, 29B97315FDCFA39411CA2CEA /* Other Sources */, @@ -1255,18 +1243,6 @@ }; /* End PBXGroup section */ -/* Begin PBXHeadersBuildPhase section */ - 22FAD36C110E05FC00E2BA6A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 22FAD37A110E065100E2BA6A /* codechecker.hh in Headers */, - 22FAD37C110E065100E2BA6A /* bitlib.hh in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - /* Begin PBXNativeTarget section */ 1D6058900D05DD3D006BFB54 /* axphone */ = { isa = PBXNativeTarget; @@ -1302,23 +1278,6 @@ productReference = 2292419710F2020E008A8A37 /* axphone.app */; productType = "com.apple.product-type.application"; }; - 22FAD36F110E05FC00E2BA6A /* keydecoder */ = { - isa = PBXNativeTarget; - buildConfigurationList = 22FAD37F110E068F00E2BA6A /* Build configuration list for PBXNativeTarget "keydecoder" */; - buildPhases = ( - 22FAD36C110E05FC00E2BA6A /* Headers */, - 22FAD36D110E05FC00E2BA6A /* Sources */, - 22FAD36E110E05FC00E2BA6A /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = keydecoder; - productName = keydecoder; - productReference = 22FAD370110E05FC00E2BA6A /* libkeydecoder.a */; - productType = "com.apple.product-type.library.static"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -1342,7 +1301,6 @@ targets = ( 1D6058900D05DD3D006BFB54 /* axphone */, 229240F810F2020E008A8A37 /* axphone-advanced */, - 22FAD36F110E05FC00E2BA6A /* keydecoder */, ); }; /* End PBXProject section */ @@ -1653,16 +1611,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 22FAD36D110E05FC00E2BA6A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 22FAD379110E065100E2BA6A /* decodetable.cc in Sources */, - 22FAD37B110E065100E2BA6A /* codechecker.cc in Sources */, - 22FAD37D110E065100E2BA6A /* bitlib.cc in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ @@ -1692,7 +1640,10 @@ "HEADER_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/include\""; "HEADER_SEARCH_PATHS[sdk=iphonesimulator*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/include\""; INFOPLIST_FILE = "linphone-Info.plist"; - LIBRARY_SEARCH_PATHS = ""; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"", + ); "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"/**"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/lib\"/**"; PRODUCT_NAME = axphone; @@ -1712,7 +1663,10 @@ "HEADER_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/include\""; "HEADER_SEARCH_PATHS[sdk=iphonesimulator*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/include\""; INFOPLIST_FILE = "linphone-Info.plist"; - LIBRARY_SEARCH_PATHS = ""; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"", + ); "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"/**"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/lib\"/**"; PRODUCT_NAME = axphone; @@ -1733,7 +1687,10 @@ "HEADER_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/include\""; "HEADER_SEARCH_PATHS[sdk=iphonesimulator*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/include\""; INFOPLIST_FILE = "linphone-advanced-Info.plist"; - LIBRARY_SEARCH_PATHS = ""; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"", + ); "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"/**"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=*]" = ( "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/lib/mediastreamer2/plugins\"", @@ -1761,7 +1718,10 @@ "HEADER_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/include\""; "HEADER_SEARCH_PATHS[sdk=iphonesimulator*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/include\""; INFOPLIST_FILE = "linphone-advanced-Info.plist"; - LIBRARY_SEARCH_PATHS = ""; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"", + ); "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"/**"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=*]" = ( "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/lib/mediastreamer2/plugins\"", @@ -1785,7 +1745,10 @@ "HEADER_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/include\""; "HEADER_SEARCH_PATHS[sdk=iphonesimulator*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/include\""; INFOPLIST_FILE = "linphone-advanced-Info.plist"; - LIBRARY_SEARCH_PATHS = ""; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"", + ); "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"/**"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=*]" = ( "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/lib/mediastreamer2/plugins\"", @@ -1830,7 +1793,10 @@ "HEADER_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/include\""; "HEADER_SEARCH_PATHS[sdk=iphonesimulator*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/include\""; INFOPLIST_FILE = "linphone-Info.plist"; - LIBRARY_SEARCH_PATHS = ""; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"", + ); "LIBRARY_SEARCH_PATHS[sdk=iphoneos*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/armv6-apple-darwin/lib\"/**"; "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*][arch=*]" = "\"$(SRCROOT)/../liblinphone-sdk/i386-apple-darwin/lib\"/**"; PRODUCT_NAME = axphone; @@ -1840,40 +1806,6 @@ }; name = Distribution; }; - 22FAD371110E05FD00E2BA6A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - PREBINDING = NO; - PRODUCT_NAME = keydecoder; - }; - name = Debug; - }; - 22FAD372110E05FD00E2BA6A /* Distribution */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - PREBINDING = NO; - PRODUCT_NAME = keydecoder; - }; - name = Distribution; - }; - 22FAD373110E05FD00E2BA6A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - COPY_PHASE_STRIP = YES; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_ENABLE_FIX_AND_CONTINUE = NO; - PREBINDING = NO; - PRODUCT_NAME = keydecoder; - ZERO_LINK = NO; - }; - name = Release; - }; C01FCF4F08A954540054247B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1926,16 +1858,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 22FAD37F110E068F00E2BA6A /* Build configuration list for PBXNativeTarget "keydecoder" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 22FAD371110E05FD00E2BA6A /* Debug */, - 22FAD372110E05FD00E2BA6A /* Distribution */, - 22FAD373110E05FD00E2BA6A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; C01FCF4E08A954540054247B /* Build configuration list for PBXProject "linphone" */ = { isa = XCConfigurationList; buildConfigurations = (