diff options
author | Lars-Dominik Braun <lars@6xq.net> | 2011-11-09 13:32:05 +0100 |
---|---|---|
committer | Lars-Dominik Braun <lars@6xq.net> | 2011-11-09 14:50:37 +0100 |
commit | 1be3f982c472341d7997a8fefcfe288a41568634 (patch) | |
tree | 0874516495bce073ae54024aee37e02ce44f25df /src/libpiano | |
parent | 208731ffa981e3c0a448be23ccd58ae1b5acca4d (diff) | |
download | pianobar-1be3f982c472341d7997a8fefcfe288a41568634.tar.gz pianobar-1be3f982c472341d7997a8fefcfe288a41568634.tar.bz2 pianobar-1be3f982c472341d7997a8fefcfe288a41568634.zip |
piano: Protocol version bump (v33)
addFeedback call changed. Input keys changed. Thanks to ZigZagJoe.
Closes #171
Diffstat (limited to 'src/libpiano')
-rw-r--r-- | src/libpiano/crypt_key_input.h | 350 | ||||
-rw-r--r-- | src/libpiano/piano.c | 121 | ||||
-rw-r--r-- | src/libpiano/piano.h | 9 | ||||
-rw-r--r-- | src/libpiano/xml.c | 8 |
4 files changed, 235 insertions, 253 deletions
diff --git a/src/libpiano/crypt_key_input.h b/src/libpiano/crypt_key_input.h index 40e9c41..3971e49 100644 --- a/src/libpiano/crypt_key_input.h +++ b/src/libpiano/crypt_key_input.h @@ -33,187 +33,187 @@ THE SOFTWARE. const unsigned int in_key_n = 16; static const uint32_t in_key_p [16 + 2] = { - 0x71207091, 0x64EC5FDF, 0xA519DC17, 0x19146AB7, 0x18DF87E7, 0x98377B97, - 0x032887B7, 0xC7A310D5, 0xA506E589, 0xE97346B9, 0xE3AA5B39, 0x0261BB1D, - 0x466DDC6D, 0xDEF661FF, 0xCD257710, 0xE50A5901, 0x191CFE2E, 0x16AF68DD + 0xD825B592, 0xA73D0737, 0x3F7C28AE, 0xF91F7116, 0xEF6B001E, 0xD38524FD, + 0x547F01EC, 0xE9C9DF7C, 0x25DE8E97, 0x9F45FF21, 0x87479245, 0x74A5FE7A, + 0x9D4A1EDB, 0x7EEFCA76, 0x58B117C2, 0x0E7F33BE, 0x1C840B7A, 0x15EEE858 }; static const uint32_t in_key_s [4][256] = {{ - 0x53B04195, 0x34D8664F, 0x564FA6F9, 0x943A4261, 0x43EE3112, 0x2FBC9B61, - 0x31C92B2F, 0x5F23E485, 0x1D51F5AE, 0x45589853, 0xEC79BEF5, 0x64E56904, - 0xD2B94FB8, 0x12ECF786, 0x39FBB15C, 0xADC822DF, 0xF63EB8D0, 0x707E6E03, - 0xC9EE963B, 0xAF4C533B, 0xB6CA295D, 0x669EC8F6, 0x5B2128DA, 0xCDCC7042, - 0xECE8EA68, 0xB6564227, 0x042D1DE9, 0xA7BB4D38, 0x702AF25D, 0x04218195, - 0xDA5DBB60, 0x05776188, 0xE6FB54D4, 0xD0D273F3, 0xF498395C, 0xD2FFAA63, - 0x2ECC5F00, 0x9B785AAB, 0xE88DF10E, 0x46A5C5A7, 0xCB05BAF6, 0x93D07466, - 0xFD82EB2F, 0x29C7525C, 0x88151216, 0x7FEA6803, 0x79AF1507, 0xABEEF999, - 0x2C338D91, 0x8BDC112D, 0xAE639DF1, 0x3395771D, 0xE5D05978, 0x985DFBCE, - 0x7A33712C, 0x77EE0800, 0x6A3235A7, 0xAD25178A, 0x5DEAB99C, 0xA518351E, - 0xE191C29C, 0x8F58F7B5, 0x8F59301A, 0x230D7717, 0x36480929, 0xE7389FA5, - 0x75101209, 0xCC80D6EA, 0x20A77201, 0xDF34CC7F, 0xDD0D15EC, 0xAAD39BD7, - 0xE148C1C8, 0x60053D1E, 0xA765BBAA, 0x055A807E, 0x243EF591, 0x3BC6A318, - 0x86B4E2A8, 0x36068D06, 0x8E38E7ED, 0xF6EF1C43, 0x4BC12D1C, 0xEE5CD4DE, - 0xA5635E1F, 0x4EA7103F, 0xE37CC2D5, 0xAA24D152, 0xC10D25A1, 0xB5A4B1DD, - 0x38A0E8AF, 0xC2E96D92, 0xC537DB8C, 0xFB00FD39, 0x96D3E31F, 0x1587D1D5, - 0x3D3C6162, 0x116E9A21, 0x5E73A15A, 0xFB1207F6, 0x205C8CE6, 0xCD2EB8F4, - 0xBF2D8E53, 0xC00799B6, 0x05AB657A, 0x5A337660, 0x13F66753, 0x769969FF, - 0x112E9892, 0xE900968F, 0xC09E5462, 0xF83D1DCD, 0xCE8730EE, 0xB8A9F537, - 0x7D4A07F9, 0xE885BB2A, 0x6CAE2932, 0x959FF20B, 0x266FF5A7, 0xD2465D75, - 0x20BA50CD, 0x3DADB44A, 0xE72D39EE, 0x1B3D759E, 0x4F537258, 0x0F403950, - 0xE7F64B2C, 0xE033D524, 0x07FF6009, 0x2C8270B2, 0x6AA43085, 0x56659DE5, - 0x2082EA85, 0x3D347FAB, 0x2C903DF5, 0xE7B54B39, 0xAAD7B6F3, 0x10BDF5DF, - 0x9F8405F8, 0x74635701, 0xBBC945A3, 0xEF0F67C2, 0x8ECFE353, 0xC47947D4, - 0xCB638932, 0xE0DFD27D, 0x390ECFF3, 0x329941FF, 0xB7B8B2E1, 0x96129843, - 0x6D487C00, 0xF7A31803, 0xEFD5F48D, 0x144881D4, 0x82C99F97, 0x3CA6233C, - 0x5D81D880, 0x5452C86E, 0x92F7424B, 0x1ABF8230, 0x2B9D844E, 0x53151082, - 0xFFDB3720, 0x5398D8CE, 0xD2B1DB66, 0x637FEEDF, 0x0C281873, 0x0D5B080F, - 0x1CC84819, 0xA9C6416E, 0x0CBD6FA2, 0x5D311F65, 0x1B10E4AA, 0x862EFCE7, - 0xB82B8EA1, 0x2C6FCB4D, 0x48197672, 0x4DE9F5A1, 0x189A1587, 0x11B82778, - 0xDF0620A2, 0x8F9EB547, 0x0C42BC08, 0xEF386B9B, 0x2882BA91, 0x5CB16824, - 0x95B04228, 0x0A84C744, 0x4A4F12F1, 0x3328121D, 0x099D0C58, 0x9FFE4330, - 0x53676878, 0x0F4BFE6D, 0xF7F6757A, 0x849E6A1F, 0xE7F305AF, 0xABE5CF0A, - 0xD4C73D1F, 0xEC1BA28A, 0xDF481C60, 0x3A0169E9, 0x644F5F06, 0x74A03899, - 0x2E1CC42A, 0xBF181E7A, 0xBFD031DF, 0xA8F9BFAD, 0xB08FF9BC, 0x07F040A6, - 0x9AA8240D, 0x936730A6, 0x4B659CAE, 0x70792DFF, 0x50738D93, 0x2E02F9DF, - 0x01F6AA81, 0xAA5557E6, 0xF5DF588E, 0x70D3217B, 0xBFD2CF2C, 0x6193A8BC, - 0x4C1D0DAD, 0x8E626F01, 0x878B8F70, 0x422B5FEC, 0x77A5D368, 0x9C5A4A84, - 0x31260B03, 0xA00A2738, 0xFE1A531C, 0x8D268013, 0x926D9087, 0x66CCC472, - 0xA0E6BC5D, 0x72B4806C, 0xD75EC86E, 0xE2AA9D6C, 0x5F8DD394, 0x70C92981, - 0x32578C75, 0x2E110E4F, 0x20F0883F, 0x505740F5, 0xD52B76F7, 0x4C087E4F, - 0x6D6455EE, 0x2E9E895F, 0xD826A8C3, 0x032152E6, 0xE3BCD79D, 0xBA6796AA, - 0xE1F2CC8D, 0x61A70735, 0x581A8A85, 0xFF4A937F + 0x4A0BABBD, 0x46B75CE1, 0xDA4E60D7, 0x62DD8F22, 0x668D7291, 0x70330C71, + 0x8ECE2964, 0xD4D1D24F, 0x2247D3FF, 0x33BD2D83, 0x2A7DF912, 0xB9E711C8, + 0x0E6544DB, 0x3A45B663, 0x8A9AB3DB, 0xD1A18732, 0x12700956, 0x25D9E559, + 0x9A425C80, 0xCE51C1BD, 0x73D8583D, 0x22B93DE3, 0x3FF39FAF, 0x3B2E11F8, + 0xA29731D0, 0x4F2C315F, 0xB46182CA, 0xB28C562E, 0xC37A96D9, 0x8AF05087, + 0x745FB822, 0xEBC3F308, 0x2F40C980, 0xE16657A1, 0xBDECD15A, 0xC9948113, + 0xD13F34A9, 0x526A159F, 0xF5982C49, 0x55E2220D, 0x0EAA7A36, 0x90771A3B, + 0x852D659D, 0xF42B33CE, 0xBC55AB70, 0xD58495F9, 0xA01A146A, 0x146E0960, + 0xDCC3EAFB, 0x45561BA0, 0x978C2955, 0x040E66A1, 0x54A12BDC, 0x86EB78C4, + 0x317B7AB9, 0xC1131F78, 0xBC67C341, 0xF8850A30, 0x26EBAEB3, 0xA21BAB96, + 0xF252C98A, 0xE8B913F2, 0x9237DBF2, 0xC549F051, 0xB37EBAEB, 0xE1BBC775, + 0xC1655D75, 0x630A0946, 0xAEE49047, 0x4EC591BF, 0xB155B99A, 0x2EEC5B73, + 0xDE713B06, 0x12A634B7, 0x13CE8AB7, 0x938D6C99, 0x3596EEE0, 0x500F9066, + 0xF6F80717, 0x40D95E18, 0xC1D47A2E, 0x8DEE1E05, 0xE37E36A2, 0x54C7FFD3, + 0x4AFFB9CF, 0x214CF5B8, 0xAB68B547, 0xB7CC1821, 0x5C7DA859, 0xB2DA7DDF, + 0x846494FA, 0x8CB04D15, 0x1A4A71A2, 0x5FF08D8A, 0x8768DF65, 0x924E2FE3, + 0x04B8109A, 0xE418742A, 0x58CD8113, 0x0EF7AAC9, 0x92B0CF79, 0xB01FBED2, + 0x4DE3CE22, 0x6B779E20, 0x1CF126CF, 0x1789A794, 0xA8463DA6, 0xF3CCE7AC, + 0xD225730A, 0x2D1B121E, 0x3F2C0850, 0xE327010B, 0x56D95881, 0x8639B3AE, + 0x01B3CAEB, 0x1F6F9304, 0x7D4BF367, 0xE4EC20D9, 0x6D05AA51, 0x882B710D, + 0xFC409837, 0x65E212C6, 0xA4C94A87, 0xB11A90AE, 0xB575256C, 0x9C12AF15, + 0x682F72EA, 0xC4C8CE09, 0x43F6C164, 0x4BD015D9, 0x9B9B1FCE, 0x9C108425, + 0x40A8DF10, 0xB0BC8633, 0x974EBB7A, 0xDE6FCE1C, 0xE005634D, 0x708C699E, + 0x7D5BFC2F, 0xBC8D5BD0, 0xF0CCE026, 0xB5F50E04, 0x84124BC7, 0x9A34780C, + 0x34E8E954, 0x64E165A3, 0x3007959D, 0x8DA44C08, 0xAA10D841, 0x7E876AE0, + 0xB6020431, 0x47F4EA6A, 0xF4825054, 0x16C42BDB, 0xD1965562, 0x3777B610, + 0x74B5741E, 0xD60C40D9, 0x3A5EF183, 0x8716250D, 0x91797C4D, 0x01A28965, + 0xF9161DBC, 0x44A9E602, 0xABECEF05, 0xAA90BA96, 0x76607DBD, 0x48BF5BB9, + 0x25840A8A, 0xD1AC56A6, 0x6F9B4274, 0xC56846D3, 0x88CF0D6B, 0x324EEFC0, + 0xEA8304DF, 0xA27E4A81, 0x9AAB617B, 0x3301C499, 0x50E8FF17, 0x67B48F3F, + 0x5AFB3B82, 0xF316F7D3, 0xBA425BB4, 0x083E12F4, 0x1CFAB3DB, 0x78C088A9, + 0x6EC83605, 0xB46D30E9, 0x7A45D4FE, 0x1A31BAD8, 0x29242D72, 0x71EFF75F, + 0x6DCFAC98, 0x79A1261A, 0x3865EEF5, 0x619461A3, 0xC25A0231, 0x750472D2, + 0x7B714CBD, 0x7E57A0B8, 0xB3A7319F, 0x3FDDBEAB, 0xC4A71E85, 0x44D38329, + 0xA21B0851, 0xBD44AE96, 0xFA3AF1D0, 0x3D6766B9, 0xA6884E85, 0xD3C9A0C0, + 0xCAE680FC, 0x41C31A2C, 0x091EDF2D, 0x9EA4E645, 0x1CA034CC, 0xE10DBA18, + 0x922AA9DC, 0x2DC318CB, 0xC49D6F10, 0xEEE7A768, 0x8173DD96, 0x96552598, + 0xAB254BF2, 0xA5BFDEE8, 0x898E4896, 0x049DCDBA, 0x57BDCC74, 0x0F3399A4, + 0x63909424, 0x6FEF1E46, 0x36A47384, 0x51F036DE, 0xAE707EA0, 0xDA83353C, + 0xFB9E7298, 0xF9DCF17E, 0x4F6FEF42, 0x2A41B840, 0x7DCD2662, 0x381FEF90, + 0x1773E656, 0xF6029EC1, 0xB1592A3B, 0x10A656D4, 0x6DDB2E61, 0x8E02EDFE, + 0xE32782EA, 0x973D37F5, 0x1594C629, 0x8B73C632, 0x1680A138, 0x3F5B1228, + 0x8C29E932, 0x49D384A2, 0x02794495, 0x118FF2E5 }, { - 0xCBD350B6, 0x04217557, 0x0B48BEDE, 0x87D87806, 0xE78282F6, 0x1518E761, - 0xD0242D75, 0xFEE8A656, 0xE1EF119C, 0x465D0A5F, 0x8627A798, 0xB2589459, - 0x6A8BF4D2, 0xAEF2E605, 0x22354462, 0xA3B5DE00, 0xC40086BE, 0xAB4FA4FA, - 0xD7C782A4, 0x095003F7, 0x76550A91, 0x51D742A6, 0xE6B1868C, 0x7A2E891B, - 0x32C24C32, 0xB71EB54E, 0x58F1F230, 0x2C73427B, 0x6CAF2DB1, 0x6E65848B, - 0x202FCC18, 0x782E5C7A, 0xCC37A03B, 0xE1D9FD4D, 0xBA8CEBE8, 0xBA5D7E12, - 0xE37E60F3, 0x99CA41AE, 0xB70F141A, 0x3399E5E6, 0x6F168416, 0xD9FCCDFD, - 0xE0149EF0, 0x6632458E, 0x192C72C2, 0xBB37A8D4, 0x4DEB6CFA, 0x1D65E9BE, - 0x9F47349D, 0xB44857CC, 0xEE4EBB41, 0x5571F80A, 0x7060121A, 0x1863AAE5, - 0x89E44DA0, 0xA8AB709B, 0xC8B0D49E, 0x7A0A4DAD, 0x53BF4EBD, 0xF52C4C3C, - 0x13E00197, 0xF5C748EA, 0x01993E7A, 0xCBEDF34F, 0xC5A6B7BC, 0xCEF7AFD4, - 0xFF554458, 0xB381FB5F, 0x13B4B32C, 0x4E7E2A88, 0x5015434F, 0x977B5E72, - 0x595037D5, 0xAA9914EE, 0xE48ECD4A, 0xB5933128, 0x819BC797, 0x1FDA1451, - 0x7E246FD0, 0x70AE3F82, 0x3ABEBFE4, 0xE89BA94A, 0x0F8BA57F, 0xAD2EDFD1, - 0x71C248D1, 0xDE31588B, 0x9058ACB8, 0x1D811B61, 0x6A459746, 0x75698B77, - 0x06C5291A, 0xC4FDC707, 0x3412F7A2, 0xA11D2CB7, 0x771C35D9, 0xFB5252B9, - 0x8ADCC6BB, 0xACFDB11F, 0xA53D102E, 0x3BDD6B7A, 0x7242DFBC, 0x600EAF36, - 0x55399BD7, 0x5C52D902, 0xE6D5A548, 0xE3599A58, 0xE98182B0, 0x748C0C18, - 0x4B2BEE05, 0xCC531DD8, 0xA3231F8C, 0x8FD29390, 0xFD8C43FB, 0x7E221049, - 0xCD489DEF, 0x2312C991, 0x55633208, 0x3514163F, 0xAB3BEE59, 0x77FFAA7B, - 0x90915A4C, 0x213FF94A, 0x3CCD3F06, 0x574DF4E9, 0x256EE273, 0xB9FEE691, - 0x979A0F80, 0xFBA4876D, 0xCA3448B8, 0x9A05788E, 0x01817985, 0xFDC95285, - 0x64FDABDD, 0x7E8EFF2E, 0xC9F8DFB0, 0x3585290F, 0xA359E9CD, 0xE7361ACE, - 0x0F05DE97, 0xA84A949F, 0x816F79D1, 0x80053F79, 0xF3ED1531, 0x0077675E, - 0xAA407D1C, 0xA905EC4E, 0xB5031A49, 0xF7840308, 0x1749068C, 0xE7B994B4, - 0x7963F746, 0xF8D6832E, 0xF2C43B73, 0x0C858859, 0x8ACA9FDF, 0xA980B080, - 0x2DA83BA8, 0x88A9E6FE, 0xA1D65DCA, 0xB7466978, 0x1C7579D5, 0xA3E829E7, - 0xA038A762, 0x2E6CFC22, 0x80A3C2DD, 0x6FB505A2, 0x40A809C9, 0x45A1345A, - 0xCA1FED04, 0x623F44F9, 0xBCECFD8C, 0xBC1EA3D8, 0x3CFA9C4E, 0xC3F84B71, - 0x245EADC3, 0x0635934D, 0xFD115EF2, 0xE6A29E9D, 0x3B135A32, 0x54316287, - 0x6427B2DD, 0x9A58AD8A, 0x18C4F685, 0x0BCF5559, 0x1F937C1C, 0xF7EBADE2, - 0xBB6D1EFC, 0x5EC3076E, 0xB330C228, 0xFB630B27, 0xBA582D2D, 0x6810A8D0, - 0x93426874, 0x2CF4EB4D, 0xBC650CDD, 0x6DE2A493, 0x7FE6B0FB, 0xF251E5DB, - 0x6F12D6BE, 0xC6BA7485, 0x5F419C45, 0x22B0F07C, 0x92EDDB3C, 0xF169D257, - 0x32663AE2, 0x04B74EA2, 0xC8A37378, 0x0652BC72, 0xB402FDC7, 0xDF7F8268, - 0x44030F03, 0xAF3FD392, 0x5491C194, 0xB85DB9CE, 0xD651CA8F, 0x1255050C, - 0xC29846CA, 0x4C839D32, 0x3F5B7E14, 0x2A877586, 0xF98A241E, 0x9E293240, - 0xA1FDEAAF, 0x20A30A8C, 0x1CBD8053, 0x34F51B81, 0x2385CD90, 0x96AA3920, - 0xF5E2BE30, 0x49336625, 0x8D8C7CAC, 0xE218E266, 0x140AFB4B, 0xE3716DCE, - 0xC78D4357, 0xC7A08538, 0x012D82CC, 0xAE079F67, 0x1FC97F4D, 0x13B82CF6, - 0xA450A8F9, 0x3EF2B891, 0x37016870, 0x85837D47, 0x9E0554B9, 0x5E250425, - 0x924D3CF5, 0x1AA84C00, 0x27B42F8C, 0x49023610, 0xA7B73B7B, 0x62C8BCFD, - 0x3631472D, 0x0E33D2D6, 0x0A0B4B0A, 0x6A2556C3 + 0xAE22E435, 0xBF7344EB, 0xFBF3614E, 0xB52AF67A, 0x15EC7E8B, 0x0615CD74, + 0x310931B6, 0x069D7297, 0x455368A0, 0xEEB001F7, 0x0E925151, 0xDEB13D62, + 0x939071EE, 0x0BD2D2D2, 0x22AFF084, 0xF3D5BA75, 0xE8B78473, 0xE164B152, + 0x8DD31804, 0x1AABFA34, 0xF1837C1B, 0xF50D14CB, 0x44F64DC6, 0x25C4CAC7, + 0x59A2FE4B, 0x0C9E6026, 0x96A8908C, 0x49C0551E, 0x6C952FD7, 0x24BAEAA2, + 0x6B9DC320, 0x727310AD, 0x09873DE7, 0xA815543B, 0x106743C6, 0xF4CDF032, + 0xFB0208AF, 0xD58B37B0, 0xB8916BBB, 0xF31DC932, 0xB2273875, 0x94BFDD76, + 0x2165879B, 0xA652B81E, 0x584698E4, 0xB42AF09E, 0x4DFF38F3, 0x29845BD7, + 0x14F3B627, 0x5ECA5580, 0xFBDDDBB3, 0xD8392CB3, 0xF6B4FBE5, 0xFDCF2025, + 0x31B61951, 0x9E588D9D, 0x25A07E35, 0xDCA8D140, 0x8C973391, 0x70C83894, + 0x1B2F0DC5, 0x248E1EA0, 0x0760336A, 0x8F8BB40F, 0x0D1A660E, 0x0D1640F6, + 0xA32B1F16, 0x3809890F, 0x82F7F0EA, 0x6CCC940F, 0xB9F2C42E, 0xB661A456, + 0x5901ECB5, 0x76B92DF6, 0x21DB5718, 0xE23F3AED, 0xF94A8A63, 0x89F64664, + 0x7335C780, 0x9FF900EB, 0xAC5D42D8, 0xF6049DC4, 0xB99BED2A, 0x3FE7D758, + 0xDB69E89D, 0xCC9C3333, 0x382BB23F, 0xB07FB181, 0x9B20B744, 0x4E4ECE5D, + 0xED8E3B98, 0x4AB66852, 0x78BCC661, 0xC1D8A28C, 0x71E08EB0, 0x9ECAE411, + 0xA4FD636D, 0xA064969A, 0x185B05EC, 0x54896D93, 0x8110F40B, 0xD4D7E57C, + 0x1E928C46, 0xF9CE1F29, 0x3E72FB51, 0xA79C044C, 0xADB9445E, 0x4AA394F9, + 0x129534D2, 0xDF211944, 0x6267B4DA, 0xF534A6F8, 0xD45D2B3E, 0x5F1894E4, + 0xCC27E376, 0xFE866D4F, 0x956E7C8E, 0x0A630CE7, 0x4734673B, 0xBF8AB871, + 0x432C515F, 0xA2D7B37F, 0xCF48F9F8, 0x31F7209B, 0xB6E792D9, 0x5E136600, + 0xF583A945, 0xAAD4705F, 0xE8E30373, 0xA5E5AB27, 0xCAC6FA4A, 0x48F3A109, + 0xB21A697B, 0x45B9B7F0, 0x2E7BB193, 0x9603F1BB, 0xE0BA7A40, 0xCE7EB62E, + 0x334B24C5, 0x0261817E, 0x4EB792AB, 0xB85BC2B6, 0x6D47D0D9, 0xD2A1433B, + 0x7523942B, 0x39BF5CE7, 0x72223B25, 0xC28F0913, 0xC01CFE44, 0x500F27E5, + 0x055379CB, 0x786C7B08, 0x7C75295A, 0x6294932D, 0xF1B01EF0, 0xE79358F6, + 0x89C4E49F, 0xE7F73D07, 0xEF6FE437, 0xF2CDA93F, 0xB0994E68, 0xADF6AC19, + 0x00925578, 0x06454AF8, 0xCE4628AB, 0x9F983E8C, 0x393E59A4, 0x3896C188, + 0x6A0A5EF5, 0xBA378BF3, 0xD27590ED, 0xCFD20FF9, 0x1728237A, 0x8DABD973, + 0xE22C9842, 0x29A1264B, 0xFFC8569C, 0x17DDEBAA, 0xF9D62958, 0x11028197, + 0xC42BD84F, 0x6F81854B, 0x061FD297, 0xD26BA792, 0x63F71BAA, 0xAD36BDCC, + 0x06262269, 0x5711A1F5, 0xAA746143, 0x75242F8D, 0x5817A84D, 0x639ED1B6, + 0x6D18D6C4, 0x4FFEFE01, 0x0689F6D4, 0x5997D712, 0xD761CF5B, 0x9211216C, + 0x5D8006F3, 0xDDE24FEA, 0x1E60F66B, 0x18D41ABC, 0xDC72B4CB, 0x9FBCBA7D, + 0xEAA807C5, 0x700B7E32, 0xCF4173D6, 0xE354A49E, 0x12EB5466, 0x63DCC4E4, + 0x1DC24D6E, 0x1C9F2A83, 0x3DF6F311, 0xFFA91651, 0x3A1A9645, 0x30D568A4, + 0xC51A55B4, 0xEE032227, 0x0F0A28AC, 0x4516C9B2, 0xD7323F98, 0x547C3B78, + 0x5BCA33E1, 0xF28A15C2, 0xDFFEFAAD, 0xD6E87BBD, 0xE820C21D, 0xFB1C97C3, + 0xE40869F7, 0xD4A167F0, 0x79A2EFFC, 0xD67A0D93, 0xE862FF06, 0x54BCFB17, + 0x3420A670, 0x9219126B, 0x54930637, 0x55E84ED3, 0xA8C4D3C6, 0xFC2C2BD2, + 0x73B116F0, 0xE7A2900C, 0x801E1978, 0xC6741B16, 0xFADB0E61, 0xB5315FC8, + 0x76D1E2BD, 0x2C3452EB, 0x9F42E977, 0xBBE3B7FF, 0x3E5A0B7F, 0x4E1E865A, + 0x24D40A06, 0x202F6EDB, 0x9BAEBAFA, 0x6272D57D }, { - 0xD13723BF, 0x9414C5A7, 0x67FFF98A, 0x01945128, 0xD037928C, 0xDEC7C303, - 0x5EBD36AC, 0x5C905BCB, 0x020B6426, 0xB7C9C54D, 0x8613F926, 0x1FEC9118, - 0x51A1AA61, 0x16BA1018, 0x68338FC2, 0x5542A1ED, 0x8063E942, 0x8BAE40A2, - 0x1C5D6954, 0xA463AC5D, 0x3C301ED8, 0x4F4B860A, 0x6EE45E7C, 0xD462EE68, - 0xDFA82F0E, 0x763EB7CF, 0x78335FBC, 0x95EED064, 0xFB2F79D6, 0xECAA236A, - 0x59459EAE, 0x233D236A, 0x4DB2900A, 0x8B9D5EB4, 0x0F21ABB6, 0xFA27F2B1, - 0xA4A6FA51, 0x4653FD21, 0x93E9C526, 0xCCCB341B, 0x1F66711A, 0x68E054BE, - 0x7204FD43, 0x689E8AC0, 0x12302D1B, 0x96D11239, 0xB3DA833A, 0xCA15D14E, - 0x80D4798B, 0xB6465C4D, 0xDAAD50A1, 0x9FD6B95E, 0x1B4EFECB, 0xEA61AA1C, - 0x18AD77FA, 0x5A736118, 0x511A3385, 0xD5D92A85, 0xB957043E, 0xAA3554A6, - 0xFB571DF0, 0x305A86FE, 0x240E4572, 0x80DEFE96, 0x2888F5CC, 0x5272DAE5, - 0x1A283749, 0x0DF5E014, 0x1F6F2F7D, 0x292C1DC7, 0xC72ED514, 0x59E99AE5, - 0x0C4FDE67, 0xE30B2643, 0x24C12F6A, 0x4C9B0BFC, 0xA78F1A03, 0x0036C1DF, - 0x913B7309, 0x7FDE5A89, 0xFFC9D504, 0x9F7C42DB, 0x8BE84B2A, 0x588BBCFA, - 0x872C26E7, 0xA3BC8F41, 0x5B1160B4, 0x239B30E4, 0xB2DD5494, 0xE337530F, - 0xF113CD33, 0xEADC8DDF, 0xFF339D9F, 0x71F15A7D, 0x5973E16B, 0x5A4D3F0A, - 0x28656238, 0x0EB676E9, 0x5533A9A2, 0x07EAF535, 0x5C271A91, 0xDAFA35CF, - 0x8C0C4E34, 0xB2D15020, 0xA9CEAF93, 0x271157B4, 0x41B88963, 0x88EA0624, - 0x94400C7C, 0x650DCD70, 0xBAF8C4DF, 0x13DC1789, 0x0040522B, 0x13E1D0C1, - 0x80C2C55C, 0x4C22B92B, 0xC9BDFD2C, 0xAB74AB27, 0xAEAF6AD8, 0xA2A5E893, - 0x10A9000D, 0xDFE44794, 0xF94F9FA0, 0xFC7316A5, 0x7B967375, 0x0114700D, - 0xABFC7363, 0x09CB8915, 0xB96C9B3A, 0xE95142BD, 0x1B632A21, 0x57A66288, - 0x80B22AAD, 0xC276DBCC, 0x8C38D035, 0xB5AEC8CE, 0x4150EB32, 0xE8FE1512, - 0x184FE503, 0xC66A57A9, 0x25992BF4, 0x746F8100, 0xC7790E91, 0xE8988227, - 0x626C1812, 0xAA60037C, 0x43997BEA, 0x9508A877, 0x5AE80E46, 0xDE2758FF, - 0xF7E89EEE, 0x0EE387D6, 0xD763F872, 0x97D7F238, 0x910882D5, 0x6754994B, - 0x436C7433, 0x93210B5A, 0xCC33EBF7, 0xC530B930, 0x5DA8B772, 0x325DEC23, - 0x4599CC7B, 0x458591CC, 0x5A49130A, 0xB87F80DC, 0x708208CE, 0xE4B6033F, - 0xAFE91366, 0xCBAB3EF2, 0x718B84B8, 0x60859C5E, 0x50701AEC, 0x05E2CA48, - 0xB2BFCDB8, 0xFD47C881, 0xB18ECC02, 0xF8AABC72, 0x0ABD654B, 0x1A6602C0, - 0xFFFBCED7, 0xDA627448, 0x67E0590A, 0x3B1952D9, 0x4C0A32FB, 0xE9F0507C, - 0x830699D6, 0xCF481E29, 0x3FEC6807, 0x18CB4E71, 0x6CAC5839, 0x592E5FD5, - 0x1A2B1DA2, 0xA104840F, 0xE2B4A352, 0xAA202DF2, 0xC1E3D837, 0x4DA02F3A, - 0xB8AE3EE2, 0xBAF2AD8F, 0x60A0A49C, 0x03A08BA2, 0x3C7613FC, 0xC42B5AA7, - 0xFB799A04, 0x3FC12E4F, 0xE2F8881A, 0x854B6F93, 0x732EB662, 0xF04CB10D, - 0x3BBDFD40, 0x9B1F08BD, 0x679E054C, 0x5A5C81B9, 0x42EEF45A, 0xE1CAC282, - 0x8E057351, 0x618F3140, 0x2B4EB7BE, 0x7C0B4416, 0xD67CF521, 0x61B12968, - 0x12454732, 0x09E117B5, 0x427F05E2, 0x151256A0, 0xD4DE1087, 0x610F2E55, - 0x0703EDE6, 0xD984D328, 0x3F349754, 0x76E7FB05, 0x8C339292, 0x1C7B2C00, - 0xEAD34339, 0xEED62B3B, 0x8AD430DE, 0x56977BEE, 0xC73DB96B, 0x74ECF426, - 0xEC27F20A, 0xD250B1B3, 0xD1DB7436, 0xBADF98FB, 0xB5DBF4B7, 0xC87589C2, - 0xD634D942, 0xB5A2FEF4, 0x7FD6F13B, 0xB89DA34D, 0x9FC14AFC, 0x733563D4, - 0xCEE0EE6A, 0x5699CCBE, 0xD684349C, 0xFD2CCCEC + 0x72B35463, 0xF3AD17A4, 0x5631E69E, 0x407BBD75, 0x3508A084, 0x88AAF1CE, + 0x4B04905F, 0x2F2FEBE0, 0x09AA8992, 0xDE1EA57A, 0x1FDBFAFD, 0x3827C109, + 0x764DFD38, 0x5C4A2FB0, 0xA1E90138, 0xF4814033, 0xD086FC2A, 0xB388B360, + 0xFEA5D332, 0x47202A75, 0xCD25CB9A, 0xA351B744, 0xB7F4A6B6, 0xEE1658C0, + 0x5016807B, 0x12574F7A, 0xB517B43C, 0x741262F5, 0x6F00F349, 0xDAA44579, + 0xE58B8090, 0x6FC04F54, 0x8451D14A, 0x84C352B4, 0x710C2858, 0x0FE8F84C, + 0xAF5E81F8, 0x0865497B, 0x552638F9, 0x3109EBED, 0x13C29D74, 0x276CB543, + 0x8CA65E96, 0xE983C198, 0xB85CDC58, 0xB522FBCD, 0x21506FF9, 0x8C703690, + 0x322A3026, 0xB87B9BA5, 0x49FF5C4F, 0x3B3E927D, 0xCC9E8227, 0x064CEA69, + 0x88F21343, 0x4EDCB6EC, 0x0F7DA6B8, 0x2ABCEF9C, 0x86866163, 0xBF4B1B4F, + 0x94E0E0E7, 0x8CFE5DF6, 0x4A8D073B, 0x43916370, 0xBCED0841, 0x2D8EF63A, + 0xFEFC6AE8, 0x7A3284CD, 0x51FAE69D, 0x34996231, 0x15599997, 0x5A8D2DF2, + 0xDC8F5265, 0x2B23915D, 0xAC578846, 0x0B9BC885, 0xE5AEF368, 0xE352A2EB, + 0x67330720, 0xFD176A18, 0x78BB578F, 0xB5422A51, 0x68F35707, 0x47570020, + 0x8A4F5321, 0xB6774AB5, 0x06CE136C, 0xADED4447, 0xAE8A1FEE, 0xB97BAB2D, + 0x95B81706, 0x493E002C, 0x0D9DC930, 0xF70BF46D, 0x229C90F8, 0xAF450341, + 0x12B799C0, 0x98656508, 0x8C8D6417, 0x491D1ED4, 0x1AF33256, 0xF3275DE1, + 0x08454958, 0x321A8D4E, 0x4F516FE5, 0x1D076087, 0x94311B59, 0xED369CB9, + 0x4FF94F65, 0x87129FB4, 0x8D065220, 0x7B11F2D5, 0x976138B0, 0x030962FB, + 0x8E68ED5F, 0xE26B5272, 0x045BCBEB, 0x9350F121, 0x522DDFEB, 0x1EEB70B2, + 0xCC2EABF8, 0x22BA4ED7, 0x30B0C3BC, 0x64DF8A4C, 0xF58B3FF2, 0x56B3BBE6, + 0x3E71A700, 0x65D765C7, 0x87A50635, 0x9156084B, 0x85CD7CAA, 0x7BFF8FFF, + 0x7B79A939, 0x69277DCA, 0x5A7C5DF2, 0x37886A35, 0x177CA1B3, 0x96871FD4, + 0xB869BA3D, 0x1C2697A1, 0xD59109DD, 0x6B870F45, 0xC9ADBA95, 0xDB8323D8, + 0x0A777311, 0x25E2DF2D, 0x18C684D7, 0x645521B0, 0x58ABD6FC, 0x7EC9EF2D, + 0x11B4DB17, 0xAE1A2EE9, 0x84E961A4, 0x1627F703, 0x8C23EC6D, 0xF0A8A31C, + 0x8E53A703, 0xB1131710, 0x5723CF12, 0x991DF0FF, 0xA30498B8, 0x02EF0D79, + 0x2B3DD3EF, 0xD38C2931, 0xE5745386, 0xF41AE34F, 0x10499E3C, 0xF79569CE, + 0x8ED71CA2, 0x98B0DC30, 0x9F6E5321, 0x42EB67BA, 0x2742BCEC, 0x8DF9EF50, + 0xAAA09BA7, 0xF9695506, 0xA294E5EF, 0xDC12C945, 0x0F7A7CEA, 0x9E19DD96, + 0xABD27434, 0xD26E3C3F, 0x13B45FF0, 0xCF8379E7, 0xF85FF493, 0x985079D6, + 0xBDB81502, 0xA2C60C5C, 0x22B632AC, 0x3D3986EE, 0x45825465, 0xAEEB58F9, + 0xF283D84B, 0x80517003, 0x942B1C72, 0xE3E70F85, 0x3F8E843D, 0x7454E06D, + 0x31B2159B, 0x568A8365, 0x23DCC43E, 0x37871B58, 0x60C69863, 0xD1889242, + 0x520946C2, 0x929B3286, 0xD95FED2C, 0x2A208340, 0x928DF232, 0xC028DF59, + 0x0D35A23F, 0x00EDC91C, 0x3979AED9, 0xAA29C007, 0x84BA7B37, 0x7E3CA9CB, + 0x54F00B03, 0x61691F7C, 0x5834387D, 0x770BB788, 0xB162F9C0, 0x43618701, + 0x9E059974, 0x06E5F826, 0x0CF7163D, 0xBBE0FE4D, 0x7F106BA3, 0x71A5CDA3, + 0x7044BD36, 0x54DB9C6D, 0xCEB6C2E7, 0x4DE29FAE, 0x136CB930, 0xEA408A55, + 0x7ADB6970, 0xC89057DA, 0x70B27C55, 0xFD9DD49F, 0x71945289, 0x29F6F8CA, + 0xDFD414FF, 0x3A073C7A, 0x610CB803, 0xF63DB2F3, 0xDAB51606, 0x1D98C2CB, + 0x8EAED1E3, 0x2713BE03, 0xA7740897, 0x4184FD27, 0xF4FB8A06, 0x42B5EE24, + 0x16CC60A1, 0x58C7FA50, 0x0D3A4CB4, 0x40C16EFA }, { - 0x9CE989E5, 0x27A0CB56, 0x02E00928, 0xABBA6B68, 0xD721FCCF, 0xA696A7B7, - 0x36CE1D63, 0x9B4287D7, 0x390743D1, 0x69F6BB36, 0x93D521C5, 0x44D162AD, - 0xE0070AA9, 0x5FB59DC6, 0x19542E39, 0x26F788BE, 0x75FE89D6, 0x0C80CFCB, - 0x0540DC8C, 0xFA54F755, 0xF773FC82, 0xA35D570A, 0xC5723322, 0x25EF7BDE, - 0x87F8E80A, 0x946960D7, 0x1ADBD76B, 0x750C1AF9, 0x0360C46B, 0x8446D2A9, - 0xC9202B06, 0x278C843A, 0x5DA07CCF, 0x2245D4AA, 0x93DFF522, 0x192AAAEF, - 0x9CDE5DD9, 0x3D9794C2, 0xF3E16F90, 0x36CCC653, 0xF16949C0, 0xD8554E88, - 0x5824EC8E, 0xE311AAE5, 0xFDBC7A0D, 0x10F4AD37, 0xF468F494, 0x4E4F819D, - 0x3F9E57EA, 0xE43EC4AD, 0x871F2076, 0x4ADDB4F1, 0xE8E299B3, 0x7C0A1836, - 0x941F36A1, 0x35457B0F, 0x39470AEC, 0x9A5B504B, 0x4BB2F6F8, 0xF6DE598B, - 0x8CFEC07F, 0x4548D4BF, 0xD41E0229, 0x3F2A12F7, 0x1AF19BD5, 0x644175B5, - 0xA4CA85FC, 0x49276FD6, 0xF62A4D52, 0x210A6846, 0xBB56CCC3, 0x031158B2, - 0x4DC62335, 0x10FFA10E, 0xF055BCEF, 0xC5AA7928, 0x1434F73C, 0x2A43ECA8, - 0x842132AC, 0xD562AD21, 0xD5CEC47C, 0x1B691AB0, 0x42767035, 0x13BA59C9, - 0x29AF3D75, 0xB39E2850, 0x31D492A5, 0x7D9E2352, 0x6AF923E1, 0x3BE1D419, - 0x16158A7E, 0x44EF7376, 0x2EE3C6C1, 0x8D352616, 0x9CB629BA, 0x6208B9AD, - 0x0B631F69, 0x8F571F32, 0xB0D68B0C, 0xCDFAD3A0, 0xC80875FE, 0x59E9602F, - 0x51F6B69A, 0x1D409455, 0x61FDB55C, 0xCE3720E3, 0x137DE790, 0x8B04FC1B, - 0xC19CE38A, 0xB29D90F9, 0xD3593524, 0x1627951C, 0x5C11A5DE, 0xAF94409B, - 0xC832B671, 0x32B72AE3, 0xBA6BB680, 0xA12ACF8A, 0xE4A9D43F, 0x107B81B9, - 0x53B1B9D5, 0x8DA00BB9, 0x2C148921, 0x151EC1A6, 0xD768ECCD, 0x436855B7, - 0x8E33A334, 0xEBB502A1, 0x2ECCD157, 0x39F958F6, 0x9A325E5B, 0xDAEE53FE, - 0x0278EC16, 0xADDE5BFB, 0x9248885D, 0x413218E1, 0x1C63F37E, 0x4D0C747C, - 0x9135BAF4, 0xD86EEEED, 0x73D431C5, 0x28328C16, 0x6BCF2229, 0x46DCDB0D, - 0xDF1A50DC, 0x9860C3AC, 0x708CD67D, 0xF6872403, 0x522D6E98, 0xE6CEA50F, - 0xAAC9DC07, 0xD5605E8D, 0xE56E2CA7, 0x47FD227D, 0xF8210DDD, 0x0F3F974C, - 0x062E6E11, 0x4EFF4F43, 0xA61945E3, 0xED59FF50, 0x6094DBED, 0x70383AE0, - 0xE2B55F47, 0x81212B70, 0xD47B4D3D, 0x727BFD92, 0x607A07EC, 0xEE4AA97B, - 0xFE9FCC26, 0xBB2FEEA4, 0x31C4E4CC, 0xA06ACF19, 0xD7A8A983, 0xC7A038EA, - 0xBC89CB3C, 0x58C63BF6, 0xC60A7E0D, 0x1DC2A9DF, 0x5F7C8278, 0x616B32FA, - 0x3475A5E2, 0x608A8F4C, 0x7EC19DD7, 0x0CD2C716, 0xAE46828E, 0xE53B17FA, - 0xF5A4AD4D, 0x0B1290AE, 0x5C6E74D3, 0x866D7316, 0x39054DF1, 0xA2A818BB, - 0x42D6C33A, 0xB6FEC0F2, 0xA1D3B572, 0x6F48AD3E, 0x6144A64A, 0x7BF86B73, - 0x0E444BC4, 0x9AD01D4A, 0x43C3C4EB, 0x9D518FCD, 0x1CE1B720, 0xAD579F70, - 0xB2EECB4F, 0x9502AFC7, 0xEBC647A0, 0xB7FA1B5C, 0x3ACC4F6E, 0x047E7148, - 0x496E7AC9, 0x7F136464, 0x41C36E76, 0xCC38CB5E, 0xB24F9444, 0x2E95E3B1, - 0xDE7DE530, 0xCDCA74C3, 0x044AA504, 0xFA4B351F, 0xFBC33DA2, 0x14FB5DAC, - 0x179B39C8, 0xBD4A85E1, 0x3EFAAD11, 0x2C2C6F71, 0xE92A32C4, 0x76B6C150, - 0xE1FE212C, 0xF38FD4CF, 0x268C35D9, 0xEDB03308, 0x7B8E2CB5, 0xB3706839, - 0x8144E420, 0xF6CECF27, 0x0DE5225D, 0x5D40CD54, 0x8B42965C, 0x7295E976, - 0x844D6827, 0x881E23DF, 0x964A45F1, 0x528E84E8, 0x57DA399F, 0xD7903C7A, - 0x78B0FEE1, 0xB8D3A5D7, 0x2C9A9DE1, 0x4D73B1FD, 0xE3558381, 0x8B0434E1, - 0xBF918EBC, 0x7248BC30, 0xA19E9B98, 0x128E7B36 + 0xF0B6672A, 0x2FBFF845, 0xF8DAE2E1, 0x1E62ADD9, 0xE386B139, 0xCE326446, + 0x1F85E0A2, 0x876AC684, 0xF89F69ED, 0xB9C1F96B, 0x0F350297, 0x5D5C5727, + 0xE4D11EDE, 0xCB7964CC, 0xE1646E44, 0x413DB994, 0x50169691, 0x2A75843F, + 0xE56CE654, 0x307C49E8, 0xABBF759E, 0x18E30B64, 0x1DBD8903, 0xED9C2D59, + 0x2DDFF02B, 0x6EF2C41D, 0x3FF08CED, 0x5C4B7F31, 0xB26984CA, 0xB0B1EFEA, + 0x9C11734E, 0x680B8B66, 0xDC671C46, 0x2F8DD9C2, 0xCACF3975, 0xC3F6D8DB, + 0x38DDF820, 0x421E0652, 0x9FBE5AFA, 0xB4F43AE3, 0x957FC205, 0xFFA58375, + 0x55286205, 0x7EE974B5, 0x31DECAF4, 0x3E7425ED, 0xACD2BC1B, 0xFBB39E17, + 0xE99CE668, 0xC3DE689F, 0xE8BC3A39, 0xC327F086, 0xB3F2E894, 0x13CDC849, + 0xA7D8DACF, 0x2987F368, 0x7FC52A15, 0x2C0DE867, 0xC39020AE, 0x6B9A5BEB, + 0x1116EB0C, 0x56FAD5FD, 0xE13E5C39, 0x167F6C42, 0x1462F7F4, 0x5D1875F4, + 0x82A56F78, 0x2DFB88E6, 0xD0191186, 0x0850D44A, 0xCEFA0FC4, 0x3FB97E0B, + 0x3225B980, 0x3D33D41F, 0x595FA8D5, 0x3FB1945B, 0x94D5E9FA, 0xDDEF2BCB, + 0x4C35A2D9, 0xCF328015, 0x7DEEB93C, 0xF76A0735, 0x6CBE97D8, 0xE1E32FD2, + 0x72537C1C, 0x6946111C, 0x689A0958, 0x2A82EBAD, 0x5A70B4F6, 0xCA2C98CF, + 0x500B4CB5, 0xE4F72532, 0x317ABF2E, 0x9B16512E, 0x612F8F0B, 0xBF323BE6, + 0x7A9A4827, 0xE401B548, 0x4776626E, 0xCB602107, 0xEC189B17, 0x94A36CB9, + 0x00C86686, 0xDA12464F, 0x0172E4EC, 0x9779E7E2, 0x45349B40, 0x7286BCE1, + 0x1913C435, 0x8BF1E440, 0x16BB54D3, 0xE700E633, 0xF524785A, 0xB27F3F09, + 0x25B6406D, 0xA19BF68C, 0x3B144DA2, 0x816B70C0, 0xFF86B5D6, 0x1E75EBB3, + 0x57B4F242, 0x46771F2A, 0x53776C5F, 0x6257CECD, 0x27D7A26B, 0x74AD749F, + 0x0E8DF172, 0xFA7C4A26, 0x8F978578, 0xF3265767, 0xA08160FB, 0x8A13431D, + 0x22213265, 0x4A018EF2, 0x526BB8F8, 0x5FC7F38C, 0xFAB62CD2, 0x50EF8674, + 0x3E4FC6E1, 0x08553D35, 0x2BCC6BD6, 0x06D22116, 0x25F16EE8, 0xB51D172B, + 0x8E657082, 0xD102410A, 0x6B8DE05D, 0x22AEA76E, 0x0B692D8D, 0xC5E7C0F1, + 0xB3499478, 0xAB3AE1FF, 0xC16DCFB5, 0xB5F67469, 0x31C015AE, 0x7807E2FF, + 0x67E17C48, 0x56BB3693, 0xB11ABE01, 0x4AC2383A, 0x54D6BFDF, 0xBA1F540E, + 0xF4CEFE7B, 0x7F9CD102, 0x82C1AB14, 0x4D32978E, 0xE3832FE2, 0x1E63A9AA, + 0xCB1BB7CB, 0x478E6C6D, 0xD8C0CB68, 0xB907DA30, 0x05BC439C, 0x79872F07, + 0x74040F93, 0x5EE6EABD, 0xC700C640, 0xE2740CF2, 0x7D9611A6, 0x28C34433, + 0x9519AF00, 0xACAE30BA, 0xD1ED6770, 0x72557C82, 0x50D9BCCD, 0xBCDEE88E, + 0x97E36EFF, 0xCC382EF8, 0x71B71FC2, 0x6EED0311, 0x17B065C2, 0x38BE59A6, + 0x6D47222A, 0x9940BBDD, 0x342463F0, 0x98723D62, 0x59EC6C09, 0x13E077BB, + 0x6CDD2887, 0x763D4A95, 0x51D7A260, 0x7615C8BF, 0x7BAA1B0D, 0x85E2F0B8, + 0x29A14FB7, 0x90BC2A4F, 0x15A17CE1, 0x95BBC7DA, 0x98384B5B, 0x964E6B18, + 0x1341FD22, 0x64BC571D, 0x856E353D, 0x92846808, 0xBDBC4F81, 0x11C5A93F, + 0x9B00D8AB, 0xE9C7F68C, 0x002C42BE, 0x79B7F2E8, 0xCC450F36, 0x106D1921, + 0x8306ECBF, 0xB3E092E3, 0xFB4A2813, 0xC46D7B9F, 0x7CF4F348, 0x1BEB4962, + 0xFEC844F2, 0xD5FE7D0A, 0xF28A1872, 0xA0E433FE, 0x5EDB808D, 0x01591BE1, + 0xDB4E08F3, 0x298A0DFB, 0xC638BB36, 0x59F96184, 0xA344CD21, 0x39BAFAD3, + 0x83112A1C, 0x1892FC88, 0x856E9D5C, 0x13FD4F16, 0x81802AB7, 0x79FB698E, + 0xAB8AF3E1, 0x986C72C1, 0xF1565939, 0x332EFF7D, 0xD0D7746C, 0xDCF7CA0E, + 0x61E6931A, 0xF582D866, 0x2C3410D9, 0x21D70463 }}; #endif /* _CRYPT_KEY_INPUT_H */ diff --git a/src/libpiano/piano.c b/src/libpiano/piano.c index 9a7e8d3..b1e7f01 100644 --- a/src/libpiano/piano.c +++ b/src/libpiano/piano.c @@ -42,7 +42,7 @@ THE SOFTWARE. #include "crypt.h" #include "config.h" -#define PIANO_PROTOCOL_VERSION "32" +#define PIANO_PROTOCOL_VERSION "33" #define PIANO_RPC_HOST "www.pandora.com" #define PIANO_RPC_PORT "80" #define PIANO_RPC_PATH "/radio/xmlrpc/v" PIANO_PROTOCOL_VERSION "?" @@ -132,6 +132,7 @@ void PianoDestroyPlaylist (PianoSong_t *playlist) { free (curSong->feedbackId); free (curSong->seedId); free (curSong->detailUrl); + free (curSong->trackToken); lastSong = curSong; curSong = curSong->next; free (lastSong); @@ -165,6 +166,7 @@ void PianoDestroyGenres (PianoGenre_t *genres) { void PianoDestroyUserInfo (PianoUserInfo_t *user) { free (user->webAuthToken); free (user->authToken); + free (user->listenerId); } /* frees the whole piano handle structure @@ -282,6 +284,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, case PIANO_REQUEST_GET_STATIONS: /* get stations, user must be authenticated */ + assert (ph->user.listenerId != NULL); + snprintf (xmlSendBuf, sizeof (xmlSendBuf), "<?xml version=\"1.0\"?>" "<methodCall><methodName>station.getStations</methodName>" "<params><param><value><int>%lu</int></value></param>" @@ -289,7 +293,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=getStations", ph->routeId); + "rid=%s&lid=%s&method=getStations", ph->routeId, + ph->user.listenerId); break; case PIANO_REQUEST_GET_PLAYLIST: { @@ -324,10 +329,10 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, ph->user.authToken, reqData->station->id, PianoAudioFormatToString (reqData->format)); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=getFragment&arg1=%s&arg2=0" + "rid=%s&lid=%s&method=getFragment&arg1=%s&arg2=0" "&arg3=&arg4=&arg5=%s&arg6=0&arg7=0", ph->routeId, - reqData->station->id, PianoAudioFormatToString - (reqData->format)); + ph->user.listenerId, reqData->station->id, + PianoAudioFormatToString (reqData->format)); break; } @@ -337,7 +342,6 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, assert (reqData != NULL); assert (reqData->stationId != NULL); - assert (reqData->musicId != NULL); assert (reqData->rating != PIANO_RATE_NONE); snprintf (xmlSendBuf, sizeof (xmlSendBuf), "<?xml version=\"1.0\"?>" @@ -347,33 +351,19 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "<param><value><string>%s</string></value></param>" /* station id */ "<param><value><string>%s</string></value></param>" - /* music id */ - "<param><value><string>%s</string></value></param>" - /* user seed */ + /* track token */ "<param><value><string>%s</string></value></param>" - /* test strategy */ - "<param><value>%u</value></param>" /* positive */ "<param><value><boolean>%i</boolean></value></param>" - /* "is-creator-quickmix" */ - "<param><value><boolean>0</boolean></value></param>" - /* song type */ - "<param><value><int>%u</int></value></param>" "</params></methodCall>", (unsigned long) timestamp, - ph->user.authToken, reqData->stationId, reqData->musicId, - (reqData->userSeed == NULL) ? "" : reqData->userSeed, - reqData->testStrategy, - (reqData->rating == PIANO_RATE_LOVE) ? 1 : 0, - reqData->songType); + ph->user.authToken, reqData->stationId, reqData->trackToken, + (reqData->rating == PIANO_RATE_LOVE) ? 1 : 0); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=addFeedback&arg1=%s&arg2=%s" - "&arg3=%s&arg4=%u&arg5=%s&arg6=false&arg7=%u", - ph->routeId, reqData->stationId, - reqData->musicId, - (reqData->userSeed == NULL) ? "" : reqData->userSeed, - reqData->testStrategy, - (reqData->rating == PIANO_RATE_LOVE) ? "true" : "false", - reqData->songType); + "rid=%s&lid=%s&method=addFeedback&arg1=%s&arg2=%s" + "&arg3=%s", + ph->routeId, ph->user.listenerId, reqData->stationId, + reqData->trackToken, + (reqData->rating == PIANO_RATE_LOVE) ? "true" : "false"); break; } @@ -404,8 +394,9 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, ph->user.authToken, reqData->station->id, xmlencodedNewName); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=setStationName&arg1=%s&arg2=%s", - ph->routeId, reqData->station->id, urlencodedNewName); + "rid=%s&lid=%s&method=setStationName&arg1=%s&arg2=%s", + ph->routeId, ph->user.listenerId, reqData->station->id, + urlencodedNewName); free (urlencodedNewName); free (xmlencodedNewName); @@ -428,8 +419,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, station->id); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=removeStation&arg1=%s", ph->routeId, - station->id); + "rid=%s&lid=%s&method=removeStation&arg1=%s", ph->routeId, + ph->user.listenerId, station->id); break; } @@ -456,8 +447,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, xmlencodedSearchStr); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=search&arg1=%s", ph->routeId, - urlencodedSearchStr); + "rid=%s&lid=%s&method=search&arg1=%s", ph->routeId, + ph->user.listenerId, urlencodedSearchStr); free (urlencodedSearchStr); free (xmlencodedSearchStr); @@ -486,8 +477,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, ph->user.authToken, reqData->type, reqData->id); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=createStation&arg1=%s%s&arg2=", ph->routeId, - reqData->type, reqData->id); + "rid=%s&lid=%s&method=createStation&arg1=%s%s&arg2=", ph->routeId, + ph->user.listenerId, reqData->type, reqData->id); break; } @@ -511,8 +502,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, reqData->station->id, reqData->musicId); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=addSeed&arg1=%s&arg2=%s", ph->routeId, - reqData->station->id, reqData->musicId); + "rid=%s&lid=%s&method=addSeed&arg1=%s&arg2=%s", ph->routeId, + ph->user.listenerId, reqData->station->id, reqData->musicId); break; } @@ -538,8 +529,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, (song->userSeed == NULL) ? "" : song->userSeed, song->stationId); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=addTiredSong&arg1=%s&arg2=%s&arg3=%s", - ph->routeId, + "rid=%s&lid=%s&method=addTiredSong&arg1=%s&arg2=%s&arg3=%s", + ph->routeId, ph->user.listenerId, (song->musicId == NULL) ? "" : song->musicId, (song->userSeed == NULL) ? "" : song->userSeed, song->stationId); @@ -592,8 +583,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, sizeof (xmlSendBuf) - strlen (xmlSendBuf) - 1); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=setQuickMix&arg1=RANDOM&arg2=%s&arg3=&arg4=", - ph->routeId, urlArgBuf); + "rid=%s&lid=%s&method=setQuickMix&arg1=RANDOM&arg2=%s&arg3=&arg4=", + ph->routeId, ph->user.listenerId, urlArgBuf); break; } @@ -620,8 +611,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, station->id); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=transformShared&arg1=%s", ph->routeId, - station->id); + "rid=%s&lid=%s&method=transformShared&arg1=%s", ph->routeId, + ph->user.listenerId, station->id); break; } @@ -645,8 +636,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, ph->user.authToken, reqData->song->stationId, reqData->song->musicId); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=narrative&arg1=%s&arg2=%s", - ph->routeId, reqData->song->stationId, + "rid=%s&lid=%s&method=narrative&arg1=%s&arg2=%s", + ph->routeId, ph->user.listenerId, reqData->song->stationId, reqData->song->musicId); break; } @@ -674,9 +665,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, ph->user.authToken, reqData->station->id, reqData->musicId, reqData->max); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=getSeedSuggestions&arg1=%s&arg2=%s&arg3=%u", - ph->routeId, reqData->station->id, reqData->musicId, - reqData->max); + "rid=%s&lid=%s&method=getSeedSuggestions&arg1=%s&arg2=%u", + ph->routeId, ph->user.listenerId, reqData->musicId, reqData->max); break; } @@ -698,8 +688,9 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, song->stationId, song->musicId); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=createBookmark&arg1=%s&arg2=%s", - ph->routeId, song->stationId, song->musicId); + "rid=%s&lid=%s&method=createBookmark&arg1=%s&arg2=%s", + ph->routeId, ph->user.listenerId, song->stationId, + song->musicId); break; } @@ -719,8 +710,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, song->artistMusicId); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=createArtistBookmark&arg1=%s", - ph->routeId, song->artistMusicId); + "rid=%s&lid=%s&method=createArtistBookmark&arg1=%s", + ph->routeId, ph->user.listenerId, song->artistMusicId); break; } @@ -741,8 +732,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, reqData->station->id); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=getStation&arg1=%s", - ph->routeId, reqData->station->id); + "rid=%s&lid=%s&method=getStation&arg1=%s", + ph->routeId, ph->user.listenerId, reqData->station->id); break; } @@ -761,8 +752,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, song->feedbackId); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=deleteFeedback&arg1=%s", - ph->routeId, song->feedbackId); + "rid=%s&lid=%s&method=deleteFeedback&arg1=%s", + ph->routeId, ph->user.listenerId, song->feedbackId); break; } @@ -794,8 +785,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, "</params></methodCall>", (unsigned long) timestamp, ph->user.authToken, seedId); snprintf (req->urlPath, sizeof (req->urlPath), PIANO_RPC_PATH - "rid=%s&method=deleteSeed&arg1=%s", - ph->routeId, seedId); + "rid=%s&lid=%s&method=deleteSeed&arg1=%s", + ph->routeId, ph->user.listenerId, seedId); break; } @@ -811,11 +802,8 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, PianoRequestDataAddFeedback_t transformedReqData; transformedReqData.stationId = reqData->song->stationId; - transformedReqData.musicId = reqData->song->musicId; - transformedReqData.userSeed = reqData->song->userSeed; + transformedReqData.trackToken = reqData->song->trackToken; transformedReqData.rating = reqData->rating; - transformedReqData.testStrategy = reqData->song->testStrategy; - transformedReqData.songType = reqData->song->songType; req->data = &transformedReqData; /* create request data (url, post data) */ @@ -840,10 +828,7 @@ PianoReturn_t PianoRequest (PianoHandle_t *ph, PianoRequest_t *req, assert (reqData->to != NULL); assert (reqData->step < 2); - transformedReqData.musicId = reqData->song->musicId; - transformedReqData.userSeed = ""; - transformedReqData.songType = reqData->song->songType; - transformedReqData.testStrategy = reqData->song->testStrategy; + transformedReqData.trackToken = reqData->song->trackToken; req->data = &transformedReqData; switch (reqData->step) { @@ -928,7 +913,7 @@ PianoReturn_t PianoResponse (PianoHandle_t *ph, PianoRequest_t *req) { case 1: /* information exists when reauthenticating, destroy to * avoid memleak */ - if (ph->user.authToken != NULL) { + if (ph->user.listenerId != NULL) { PianoDestroyUserInfo (&ph->user); } ret = PianoXmlParseUserinfo (ph, req->responseData); diff --git a/src/libpiano/piano.h b/src/libpiano/piano.h index b692a47..7267901 100644 --- a/src/libpiano/piano.h +++ b/src/libpiano/piano.h @@ -34,6 +34,7 @@ THE SOFTWARE. typedef struct PianoUserInfo { char *webAuthToken; + char *listenerId; char *authToken; } PianoUserInfo_t; @@ -74,11 +75,10 @@ typedef struct PianoSong { char *seedId; char *feedbackId; char *detailUrl; + char *trackToken; float fileGain; PianoSongRating_t rating; PianoAudioFormat_t audioFormat; - int testStrategy; - unsigned int songType; struct PianoSong *next; } PianoSong_t; @@ -178,11 +178,8 @@ typedef struct { typedef struct { char *stationId; - char *musicId; - char *userSeed; + char *trackToken; PianoSongRating_t rating; - unsigned int testStrategy; - unsigned int songType; } PianoRequestDataAddFeedback_t; typedef struct { diff --git a/src/libpiano/xml.c b/src/libpiano/xml.c index de554b3..a4250a7 100644 --- a/src/libpiano/xml.c +++ b/src/libpiano/xml.c @@ -216,6 +216,8 @@ static void PianoXmlParseUserinfoCb (const char *key, const ezxml_t value, user->webAuthToken = strdup (valueStr); } else if (strcmp ("authToken", key) == 0) { user->authToken = strdup (valueStr); + } else if (strcmp ("listenerId", key) == 0) { + user->listenerId = strdup (valueStr); } } @@ -301,14 +303,12 @@ static void PianoXmlParsePlaylistCb (const char *key, const ezxml_t value, } } else if (strcmp ("artistMusicId", key) == 0) { song->artistMusicId = strdup (valueStr); - } else if (strcmp ("testStrategy", key) == 0) { - song->testStrategy = atoi (valueStr); - } else if (strcmp ("songType", key) == 0) { - song->songType = atoi (valueStr); } else if (strcmp ("feedbackId", key) == 0) { song->feedbackId = strdup (valueStr); } else if (strcmp ("songDetailURL", key) == 0) { song->detailUrl = strdup (valueStr); + } else if (strcmp ("trackToken", key) == 0) { + song->trackToken = strdup (valueStr); } } |