Jump to content
Korean Random

Monstrofil

User
  • Content Count

    88
  • Joined

  • Last visited

  • Days Won

    3

Monstrofil last won the day on January 16

Monstrofil had the most liked content!

Community Reputation

49

Contacts

  • Nick
    Monstrofil

Recent Profile Visitors

8,110 profile views
  1. Там всё равно довольно древняя реализация сетевого протокола, мало чем поможет.
  2. /** * This class is used to pack a yaw, pitch and roll value for network * transmission. * * @ingroup network */ class YawPitchRoll { ... private: uint8 yaw_; uint8 pitch_; uint8 roll_; }; inline BinaryIStream& operator>>( BinaryIStream &is, YawPitchRoll &ypr ) { return is >> ypr.yaw_ >> ypr.pitch_ >> ypr.roll_; } Я на какой-то другой YawPitchRoll смотрю? UPD 21.12: yaw pitch roll - 11 бит + 10 бит + 11 бит, первый бит в каждой группе - знак (x - math.pi). xzy - 19 бит + 19 бит + 18 бит = 56 бит/7 байт, первый бит в каждой группе - знак (-1 ^ bit * x) У y первые 4 бита после знака - экспонента, остальные - мантисса. К значению всегда прибавляется константа 2.0. Как запакованы XZ понять не удалось. UPD 30.12. В общем-то координаты и направление распакованы, демка транслирующая состояние боя на соседний экран написана. Дальшейшее уже допиливание мелочей (PIGGIBACKS, пересылка пакетов, whatever). Пожалуй на этом я и остановлюсь, думаю уже можно записать в копилку виртуальную ачивку и пойти писать очреедную статью на хабр "разбор протокола wot" :P
  3. Привел было немного в чувство весь код написанный раньше и попытался разобраться с форматом avatarUpdate. Подопытным был выбран avatarUpdateAliasFullPosYawPitchRoll. Он же в виде макроса в старых исходниках BW: AVUPMSG( Alias, FullPos, YawPitchRoll ) Примеры пакетов: 2dfa78ca6f22c200009a600000 2df377be7edad000105d400000 2df977f11edf9200039aa003fd 2def79daaf3cf4000052000000 2df6790a7ee1b000002b600001 Разочарование первое: в исходниках FullPos занимает 5 байт, YawPitchRoll - 3, ещё один байт уходит на Alias (итого 9), но в трафике 12 байт. Разочарование второе: поменялся формат хранения YawPitchRoll. В исходниках это три байта указывающих на три угла, но в игровом клиенте используются 4 байта. Первый с конца - Roll. # aa0000XX # 0, 32, 64, 96, 128, 160, 192, 224, 0 # XX=0 'yaw': -2.11075758934021, 'pitch': 0.0, 'roll': 0.0 # XX=192 'yaw': -2.11075758934021, 'pitch': 0.0, 'roll': 1.1780972480773926 # XX=224 'yaw': -2.11075758934021, 'pitch': 0.0, 'roll': 1.3744468688964844 # roll = XX / 256 * (math.pi / 2) Четвертый с конца - Yaw. # XX000000 by 16 # XX=0 'yaw': 0.0, 'pitch': 0.0, 'roll': 0.0 # XX=16 'yaw': 0.39269909262657166, 'pitch': 0.0, 'roll': 0.0 # XX=128 'yaw': -3.1415927410125732, 'pitch': 0.0, 'roll': 0.0 Второй и третий с конца байты указывают на pitch, инвертируют его и немного влияют на yaw и roll. # aaXXXX00 # XX=0 'yaw': -2.11075758934021, 'pitch': 0.0, 'roll': 0.0 # XX=16 'yaw': -2.11075758934021, 'pitch': -1.5661900043487549, 'roll': 0.0 # XX=32 'yaw': -2.107689619064331, 'pitch': 0.012283843010663986, 'roll': 0.0 # XX=48 'yaw': -2.107689619064331, 'pitch': -1.5539060831069946, 'roll': 0.0 # XX=64 'yaw': -2.104621648788452, 'pitch': 0.024567686021327972, 'roll': 0.0 # XX=80 'yaw': -2.104621648788452, 'pitch': -1.541622281074524, 'roll': 0.0 # XX=96 'yaw': -2.1015536785125732, 'pitch': 0.03685152903199196, 'roll': 0.0 # XX=112 'yaw': -2.1015536785125732, 'pitch': -1.5293384790420532, 'roll': 0.0 # XX=128 'yaw': -2.0984857082366943, 'pitch': 0.049135372042655945, 'roll': 0.0 Разочарование третье: формат позиции тоже новый, 7 байт вместо 5. Меняя значение одного последнего байта меняется Z. Особенности: меняется не от ноля, на разных картах координата пересчитывается в разные значения (возможно зависит от размера карты). # XX in range(0, 255, step=16), all other bytes fixed # 'x': 67.27529907226562, 'y': 509.96875, 'z': -459.12945556640625 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -474.75543212890625 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -490.3813781738281 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -506.00732421875 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -522.2589111328125 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -553.5108642578125 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -584.7627563476562 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -616.0146484375 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -648.517822265625 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -711.0216674804688 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -773.5255126953125 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -836.029296875 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -901.0357055664062 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -1026.0433349609375 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -1151.051025390625 # 'x': 67.27529907226562, 'y': 509.96875, 'z': -1276.05859375 Если кто-нибудь встречал уже эти форматы (например, где-нибудь в конфигах карт) - напишите.
  4. Неа, не больше. Точно. Посмотрел уже, exposed индексы в клиенте назначаются вплоть до 0x5b (dec=91). В ангаре сообщение a1 всегда variable-len (с заголовком размера) и совершенно разными payload. В примере выше я приводил пример когда оно содержит 1 и 6 байт, но так же есть вот такие случаи когда в payload прилетает pickle + zlib следующего содержания: {'progress': {'lootedStages': [1, 2, 3, 4, 5, 6, 7, 8, 9], 'currentStage': 5, 'daysLeft': 9}, 'params': {'extraReward': [('Add', {'count': 750, 'type': 16})], 'duration': 30.0, 'stages': {1: {'rewards': [('Add', {'count': 50000, 'type': 0})]}, 2: {'rewards': [('Add', {'count': 750, 'type': 16})]}, 3: {'rewards': [('Add', {'count': 750, 'type': 16})]}, 4: {'rewards': [('Lootbox', {'count': 1, 'ignoreEpic': 1, 'boxType': 'PCL004_Lucky'})]}, 5: {'rewards': [('Add', {'count': 50000, 'type': 0})]}, 6: {'rewards': [('Add', {'count': 750, 'type': 16})]}, 7: {'rewards': [('Add', {'count': 400, 'type': 6})]}, 8: {'rewards': [('Lootbox', {'count': 1, 'ignoreEpic': 1, 'boxType': 'PCL002_Signals'})]}, 9: {'rewards': [('Add', {'count': 50000, 'type': 0})]}, 10: {'rewards': [('Add', {'count': 50000, 'type': 0})]}, 11: {'rewards': [('Add', {'count': 50000, 'type': 0})]}, 12: {'rewards': [('Lootbox', {'count': 1, 'ignoreEpic': 1, 'boxType': 'PCL001_Credits'})]}, 13: {'rewards': [('Add', {'count': 50000, 'type': 0})]}, 14: {'rewards': [('Add', {'count': 400, 'type': 6})]}, 15: {'rewards': [('Add', {'count': 400, 'type': 6})]}, 16: {'rewards': [('Lootbox', {'count': 1, 'ignoreEpic': 1, 'boxType': 'PCL034_Resourses'})]}, 17: {'rewards': [('Lootbox', {'count': 1, 'ignoreEpic': 1, 'boxType': 'PCL004_Lucky'})]}, 18: {'rewards': [('Lootbox', {'count': 1, 'ignoreEpic': 1, 'boxType': 'PCL002_Signals'})]}, 19: {'rewards': [('Lootbox', {'count': 1, 'ignoreEpic': 1, 'boxType': 'PCL001_Credits'})]}, 20: {'rewards': [('Lootbox', {'count': 1, 'ignoreEpic': 1, 'boxType': 'PCL034_Resourses'})]}, 21: {'rewards': [('Add', {'count': 1500, 'type': 16})]}, 22: {'rewards': [('Add', {'count': 100, 'type': 1})]}, 23: {'rewards': [('Add', {'count': 1, 'type': 23})]}, 24: {'rewards': [('Lootbox', {'count': 1, 'boxType': 'PCL005_Epic'})]}}, 'id': 2211, 'background': 'blue'}, 'currentStage': 8} Никакие методы при этом у entity не вызываются, property с таким форматом тоже нет. Склоняюсь к тому что это уже какое-то современное ноу-хау картошки и смотреть реализацию нужно будет в клиенте игры. Пока что только собираю статистику по сообщениям этого формата, парсингу они не мешают т.к. размер данных записан в само сообщение. Вот всё что мне попадалось в одной из сессий в ангаре (чистые данные без заголовка a1 + payload len). Запишу чуть позже ещё сессию боя и может вопрос прояснится даже без копания в ассемблере. 03ffab0200780185d4d9521341140660b2872460d871df356ec8ea2e8288a8932802ed1ee324d38448c8e474cf08b9e82aafbcf61d7c145fc367f0193c27f64c4daa42257753f9ce3ffdf7ccf4f7b082508e259bc2ae0a2e25e07524c73275db76b8b5e998552e215a8458ce08196123c259a6e20ac11b4efb3f881b5196b4cc96ccf36d071246ca65f1a629cc3d094905fd3996e6078e3037f8be292c481521cd22cb96a5209363b18aed369cc2df308b3aad2637b2ee0f183031ce15a653b31b30b8b6b4d8d7feb1b8fcbf94230ab2b81405432c21daa112868b30a25347fdd4f5df3ab50f53c74c6960b1f11da4139a4efab46301479146141c237a5cd313dde949a45105a7889e66893c6e59d93e5070c6e34688a56ad5862df86ab356c1ab04febf855559667d253f3d3d5fcabb95dd169cc5259ec3b09882f3147641dff7a21754e8687309695cc165a2394daff8b4a3cd55a40905d7885ed7f4864f7f86f41ec571015348f191dd243a1d6833e3f1c3db0cb6dbcc9636b1ac5997308b717318d7af609ee216f49d6f79519d7d6e234d29b843f4aea6f7bad3fb48d30a1e107da8e96277fa086946c112d1e5409fc71eefd567a6b422b8557324ac609f271837a06095e29eea3baf79519d7d9e211d54f09ce80b4d0d9f766c7a1e29bed205a22f357dd59dae23cd2a784d7423d067d3e387f7c9d2f3999b2f6d7069bb42e217bd858d18060e297843816f0381ef7a06eed00bfb1ec787157ca0f18f81f14fbdc7e9fd28e2f88882cf345e0a8c7fe93d4e8fc3c4f15105651aaf04c6addee3d49de3f898826d1aafea7ddff1460b7f628113a986745cc157a2bb9ad63d6a585a8630740fe5848206495bcba62fbd6f6d0225a09c542048cac0ea9d80f6cf8a74fbeb5a28d119022e4e7f33a5cbc2350bf60bbf922c55362bbb558147a905072c5aaebb1c5aae3bf50f00c0f71b 09 12 110493c2c2c2
  5. Эти магические номера методов это что-то что мой мозг отказывается понимать, даже после прочтения кода отосящегося к subslots. Залез в клиент через python shell, поставил трейс на вызовы любых методов у Account entity. Что происходит в клиенте: ('onGetPortsInfo', (PlayerAccount at 0x000001D82E0086D8, 'x\x9c%\x8d\xbdR\[email protected]\x14Fc\x08\x10b\xa2FM\xfc\xb7\xa6\xca\x8c\x9d\xcf\x9046\xb7d\xc6\x0bl\xd8\x15\xd8\xe5\xde]d\xb0\xb2K\xedS\xf82\x16>\x92\xcc\xd8\x9dsf\xbe\xf9>\xc7\t\x1d\xc5\t\x8dc\xf0S\xb4*#\x0f\xc2\x86E\xad\xda\x9a&\xe0\x9bL\xa0&\x1f<\xdb\xa4\[email protected]\x19\x9d\x1bM!x\xd2\xeei\n\xa1\x16]o\xb8\xa4\x08\xbc\x9c{\x9aA\x98\xb7\xbaTC9\x86\xa8F\xb6BU\x95\xa09\x84\x12\xeb\xb4\xe5\x82\x16\x10\x95l\xb4u\x98;:\x81E&\x95F\xe4F\x14\x852t\n\xbe\xc3tX\x9c\x81\xaf\x1cV=-!\xd8\xbf\x19\xce-\x9d\xc3\\\x9bw\xc3\xc6Z\xd5\xdb\x92.`R\xb6,\xe8\x12\x02\xd7)\x97IZ\xc1\x14?Z\xaeP\x0bZC\x88\r\xab\xea\xe9\x99\xae b\xe3\x9c\xe0\x1ck\xba\x06\x8f\x87\xa3\x1b\x91\xd0m,W\xbb\xd1nt\xa0;\xb9\xfe\x87{\xe9o\x7f\xbf_\xb3\xed\xcf\xa2\xcb\x0e\xf4 g\xdb\x97e7h\xf95\xe8\xa3\x90\x9e\xd8\xfc\x01\xed\xeeg?'), {}) ('updateBalanceStatus', (PlayerAccount at 0x000001D82E0086D8, 1), {}) ('onCheckGamePing', (PlayerAccount at 0x000001D82E0086D8, 45570L), {}) В этот же момент в сообщениях: # 0x7e - 0x44 == 0x3a == onGetPortsInfo ([unknown: <Blob>]) # 7eff12010000789c258dbd528340144663081062a2464dfcb7a6ca8c9dcf903436b764c60b6cd815d8e5de5d64b0b24bed53f832163e92ccd89d7366bef93ec7091dc5098d63f053b42a230fc28645adda9a26e09b4ca0261f3cdba4144050199d1b4d2178d2ee690aa1165d6fb8a408bc9c7b9a4198b7ba54433986a846b6425595a0398412ebb4e5821610956cb475983b3a8145269546e446148532740abec374589c81af1c563d2d21d8bf19ce2d9dc35c9b77c3c65ad5db922e6052b62ce81202d72997495ac1143f5aae500b5a43880dabeae999ae2062e39ce01c6bba068f87a31b91d06d2c57bbd16e74a03bb9fe877be96f7fbf5fb3edcfa2cb0ef42067db97653768f935e8a3909ed8fc01edee673fff0e0100 # selectPlayerEntity # 1a # ?? # a0 # selectPlayerEntity # 1a # ?? # a10109 # selectPlayerEntity # 1a # ?? # a10112 # selectPlayerEntity # 1a # 0x50 - 0x44 == 0x0c == updateBalanceStatus ([unknown: <UInt8>]) # 5001 # selectPlayerEntity # 1a # ?? # a106110493c2c2c2 # 0x70 - 0x44 == 0x2c == onCheckGamePing ([unknown: <UInt64>]) # 7002b2000000000000 Если на a10100, a10112, a106110493c2c2c2 можно было бы ещё подумать что они свойства, то a0 в такой формат не вписывается. Но это и не метод, никаких методов в это время не вызывалось. С другой стороны иногда 2 байт (a1*06*110493c2c2c2) обозначает длину даных, т.е. это скорее всего varible-len сообщения. p.s. у Account 92 exposed метода и 4 client-server свойства. p.p.s. 0x44 и 0xa2 в клиенте всё ещё фигурируют. в asm видно что клиент заполняет entityMethod hander'ом структурку, где хандлеру соответсвуют индексы от 0x44 до 0xa2. 00E44FE0 Call to WorldOfWarships32.00E44FE0 from WorldOfWarships32.00A8D453 ; registerMessage 02336078 Arg1 = ASCII "updateEntity" 00000001 Arg2 = 1 00000002 Arg3 = 2 027B75A8 Arg4 = WorldOfWarships32.27B75A8 00E44FF9 INT3: AL = 43 (67.) 00E44FE0 Call to WorldOfWarships32.00E44FE0 from WorldOfWarships32.00A8D493 ; registerMessage 02336068 Arg1 = ASCII "entityMethod" 00000002 Arg2 = 2 00000000 Arg3 = 0 027B75D8 Arg4 = WorldOfWarships32.27B75D8 00E44FF9 INT3: AL = 44 (68.) 00E44FE0 Call to WorldOfWarships32.00E44FE0 from WorldOfWarships32.00A8D503 ; registerMessage 02336058 Arg1 = ASCII "entityProperty" 00000002 Arg2 = 2 00000000 Arg3 = 0 027B75F0 Arg4 = WorldOfWarships32.27B75F0 00E44FF9 INT3: AL = 0A2 (162.) Надо взять неделюку отдыха и вернуться уже со свежей головой и ассемблером. Если вдруг кого-то из читающих осенит - не молчите =)
  6. Я видел эти макросы, "тяжёлое наследие" это не отменяет :)
  7. Сдампил сегодня список таблицу методов в клиенте и оказалось что есть entityCreate и entityCreateDetailed, отличаются они на 8 байт, как раз в месте где передается direction. Экономки, блин. Добавил новые методы, парсинг начал проходить чуть успешнее и появились новые проблемы. 1aa10109 1aa10112 1aa106110493c2c2c2 Ранее в сообщении 1a были закодированы либо вызовы методов либо свойства (те самые, с offset 0x44 и 0xa2). Теперь же, на примере последнего, приходит что-то что уже не метод (методов меньше у entiity), но ещё не свойство. message id submessage id size attribute id payload 1a a1 06 11 0493c2c2c2 0x11 + 0xa1 - 0x44 = 110 Свойств у текущей entity класса Avatar всего 4, методов - 92. upd avatarUpdateNoAliasFullPosYawPitchRoll avatarUpdateNoAliasFullPosYawPitch avatarUpdateNoAliasFullPosYaw avatarUpdateNoAliasFullPosNoDir avatarUpdateNoAliasOnGroundYawPitchRoll avatarUpdateNoAliasOnGroundYawPitch avatarUpdateNoAliasOnGroundYaw avatarUpdateNoAliasOnGroundNoDir avatarUpdateNoAliasNoPosYawPitchRoll avatarUpdateNoAliasNoPosYawPitch avatarUpdateNoAliasNoPosYaw avatarUpdateNoAliasNoPosNoDir avatarUpdateAliasFullPosYawPitchRoll avatarUpdateAliasFullPosYawPitch avatarUpdateAliasFullPosYaw avatarUpdateAliasFullPosNoDir avatarUpdateAliasOnGroundYawPitchRoll avatarUpdateAliasOnGroundYawPitch avatarUpdateAliasOnGroundYaw avatarUpdateAliasOnGroundNoDir avatarUpdateAliasNoPosYawPitchRoll avatarUpdateAliasNoPosYawPitch avatarUpdateAliasNoPosYaw avatarUpdateAliasNoPosNoDir Мдааа, тяжелое наследие Dial-up (ADSL?) у этого движка =/
  8. @Dragon armor, а в танках в пакете entity create всегда полностью передается position и direction? Или как в корабликах, для некоторых вместо 12 байт direction приходит всего 4? Похоже что это как-то зависит от <Volatile> в def файле.
  9. Не подходит, там BASE и размер UINT32. Понял, значит вопрос пока откладывается, для моих целей он пока не критичный.
  10. Login: # header message_1 base entity create size entity id xml id ?? ?? footer # 5804 13 8f 05 0800 e9e01330 0600 00 01 02000000 01000000 efbeadde 05 Вот вообще все свойства которые есть у entity Login, включая те что в интерфейсах: [_EntityHelperAPI__lastGeneratedRequestID (<UInt32>), lastGeneratedTransactionNumber (<UInt16>)] <_EntityHelperAPI__lastGeneratedRequestID> <Type> UINT32 </Type> <Flags> BASE </Flags> <Persistent> False </Persistent> </_EntityHelperAPI__lastGeneratedRequestID> <lastGeneratedTransactionNumber> <Type> UINT16 </Type> <Flags> BASE </Flags> <Default> 0 </Default> </lastGeneratedTransactionNumber>
  11. Да, причем двухбайтный, похоже, определено это в VARIABLE_MESSAGE, как в старых исходниках, это я уже нашел. https://github.com/Monstrofil/bigworld-2.0/blob/5969290b3f1710910c7cecdad6a34b2016fad9e7/lib/connection/client_interface.hpp#L81 Строка это внезапно. У меня пока даже нет идей что это может быть за строка, видимо опять в исходники BW лезть. Это точно не часть свойств, т.к. свойства начинаются с name и расположены дальше. У логина там все то же самое, но пустой набор свойств и в конце 0x01. Это не размер свойств и не их количество. Когда-нибудь догадаюсь, но не сегодня =(
  12. Я их как раз в прошлом сообщении и привел, https://koreanrandom.com/forum/?app=core&module=system&controller=content&do=find&content_class=forums_Topic&content_id=45855&content_commentid=529521 Вот пример в hex, если так будет понятнее: # 5804133305240063e110380300000a4d6f6e7374726f66696c5f79581e000000005010000000000000000f0200000001000000efbeadde01 # header tickSync entity create ??? entity id xml id ?? str len str = Monstorfil spaId (int64) attrs isClientOnline ?? # 5804 1333 05 2400 63e11038 0300 00 0a 4d6f6e7374726f66696c 5f79581e00000000 5010000000000000 00 0f 02000000 01000000 efbeadde 01 Не нахожу :( Это я уже понял и написал. Есть, давно, парсить def, находить method id, списки свойств entity - всё это я уже умею. Частично. Я нашел место в клиенте где они описаны, но пока не заморочился настолько что бы достать их id. Сейчас они у меня просто выписаны в черновик в том порядке в котором они объявлены в коде, но этот порядок, похоже, не соответствует message id. С этим разбираться буду немного позже. # 0x6: createCellPlayer, # 0x7: spaceData, # 0x8: enterAoI, # 0x9: enterAoIOnVehicle, # 0x10: leaveAoI, # 0x11: createEntity, # 0x12: updateEntity, # 0x13: voiceData # 0x14: restoreClient # 0x15: switchBaseApp # 0x0a: resourceHeader # 0x0b: resourceFragment # 0x0c: loggedOff Есть ещё более актуальный вопрос, почему иногда три первых байта сообщения (не пакета!) переносятся в конец сообщения? Пока что заметил такое поведение только в пакетах с FLAG_IS_PARTIAL. Вот пример где INT64 (arenaID) таким образом разделило. Opts - тот же метод, но уже в реплее, там эти три байта в правильном месте. state_received = '1a' \ 'a1ffe93500' \ '00' \ # must be 1b7c6f639cbd0e00 '639cbd0e00' \ '022880027d7101284b005d7102284e4e4e4e4e4e4e4e4e654b015d7103284e4e4e4e4e4e4e4e4e65752effd6140080025d7101285d7102284b004adfba301e8671034b01888671044b024ad8410f008671054b036343616d6f75666c616765496e666f0a43616d6f75666c616765496e666f0a71064b004b00868171078671084b044b008671094b054b0086710a4b06580000000086710b4b075d710c2849343239333034343031360a5d710d284b004b004b004b00656586710e4b085d710f2849343239333930353332380a49343231353232393336300a658671104b094b008671114b0a898671124b0b4ae2e408308671134b0c888671144b0d898671154b0e888671164b0f898671174b10888671184b11888671194b128986711a4b138986711b4b148986711c4b158986711d4b164b0086711e4b174d561386711f4b18550d4a617669657247616c6c65676f71208671214b1963506c617965724d6f64654465660a506c617965724d6f64650a7122298171237d712428550e706c617965724d6f64655479706571254b00550e6f627365727665645465616d496471264b0075628671274b1a4b008671284b1b4b008671294b1c4b0086712a4b1d55024555712b86712c4b1e7d712d28550a616972446566656e7365712e550c415f416972446566656e7365712f55096162696c6974696573713055104162696c697469657344656661756c7471315509617274696c6c6572797132550b415f417274696c6c6572797133550a64697665426f6d6265727134551544697665426f6d6265725479706544656661756c7471355504617462617136550b4154424144656661756c747137550c61697273686970506c616e657138551741697273686970506c616e655479706544656661756c7471395503776373713a551a576561706f6e436f6e74726f6c53797374656d44656661756c74713b550d666c69676874436f6e74726f6c713c5514466c69676874436f6e74726f6c44656661756c74713d550a736b6970426f6d626572713e5515536b6970426f6d6265725479706544656661756c74713f550d746f727065646f426f6d62657271405518546f727065646f426f6d6265725479706544656661756c747141550b61697241726d616d656e747142551241697241726d616d656e7444656661756c747143550763616d657261737144550743616d6572617371455510756e646572776174657243616d65726171465510556e646572776174657243616d6572617147550a616972537570706f727471485511616972537570706f727444656661756c7471495506726164617273714a550d52616461727344656661756c74714b550d696d70756c73654c6173657273714c5514496d70756c73654c617365727344656661756c74714d5506656e67696e65714e5508415f456e67696e65714f550468756c6c71505506415f48756c6c71515509746f727065646f657371525510546f727065646f657344656661756c747153550573636f75747154551053636f75745479706544656661756c74715555086169506172616d73715655084149506172616d737157550577617665737158551457617665417274696c6c65727944656661756c747159550766696e64657273715a5509415f46696e64657273715b550670696e676572715c551050696e67657247756e44656661756c74715d550766696768746572715e5512466967687465725479706544656661756c74715f550c6368617267654c6173657273716055134368617267654c617365727344656661756c74716155087370656369616c737162550f5370656369616c7344656661756c747163550b66697265436f6e74726f6c7164550e41315f46697265436f6e74726f6c716555096469726563746f72737166550b415f4469726563746f727371675509617869734c6173657271685510417869734c6173657244656661756c747169550e617578696c69617279506c616e65716a5519417578696c69617279506c616e655479706544656661756c74716b550c646570746843686172676573716c5516446570746843686172676547756e7344656661756c74716d7586716e4b1f55940100000030b7eeff220000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000b06f1dff000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000b0ef4fffb0efaffeb0ef0ffe000000001e000000716f8671704b204ad9410f008671714b2149343239333833343534340a8671724b2249343239333833343534340a8671734b234b008671744b2489867175655d7176284b004a5f79581e8671774b01888671784b024ada410f008671794b03680786717a4b044b0086717b4b054b0086717c4b06580000000086717d4b075d717e2849343239333034343031360a5d717f284b004b004b004b0065658671804b085d71812849343239333930353332380a49343239333837323536300a658671824b094b008671834b0a898671844b0b4a83a60a308671854b0c888671864b0d888671874b0e888671884b0f898671894b108986718a4b118886718b4b128986718c4b138986718d4b148986718e4b158986718f4b164b008671904b174d94118671914b18550a4d6f6e7374726f66696c71928671934b196822298171947d71952868254b0068264b0075628671964b1a4b008671974b1b4b008671984b1c4b008671994b1d55024555719a86719b4b1e7d719c28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586719d4b1f55900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000719e86719f4b204adb410f008671a04b2149343239333833343534340a8671a14b2249343239333833343534340a8671a24b234b008671a34b24898671a4655d71a5284b004a8cb1c8238671a64b01888671a74b024adc410f008671a84b0368078671a94b044b008671aa4b054b008671ab4b0658000000008671ac4b075d71ad284b005d71ae284b004b004b004b0065658671af4b085d71b02849343239333930353332380a49343239333837323536300a658671b14b094b008671b24b0a898671b34b0b4a042d0d308671b44b0c888671b54b0d898671b64b0e888671b74b0f898671b84b10888671b94b11888671ba4b12898671bb4b13898671bc4b14898671bd4b15898671be4b164b008671bf4b174d1e148671c04b18550d3332343432346466726631323371c18671c24b196822298171c37d71c42868254b0068264b0075628671c54b1a4b008671c64b1b4b008671c74b1c4b008671c84b1d5502455571c98671ca4b1e7d71cb28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f686068616862686368646865686655104469726563746f727344656661756c7471cc68686869686a686b686c686d758671cd4b1f559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071ce8671cf4b204add410f008671d04b2149343235363038353731320a8671d14b2249343235363038353731320a8671d24b234b008671d34b24898671d4655d71d5284b004a0a63fc228671d64b01888671d74b024ade410f008671d84b0368078671d94b044ab3b3b3008671da4b054a930fd01d8671db4b065805000000412d4e2d4571dc8671dd4b075d71de2849343239333034333530340a5d71df284b004b004b004b0065658671e04b085d71e12849343237383137363638380a49343233383239383033320a658671e24b094b008671e34b0a898671e44b0b4a4b1d06388671e54b0c888671e64b0d898671e74b0e888671e84b0f898671e94b10888671ea4b11888671eb4b12898671ec4b13898671ed4b14898671ee4b15898671ef4b164b008671f04b174d7e1d8671f14b185509546f6d6173696e353771f28671f34b196822298171f47d71f52868254b0068264b0075628671f64b1a4b008671f74b1b4b008671f84b1c4b008671f94b1d5502455571fa8671fb4b1e7d71fc28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f686068616862686368646865686668cc68686869686a686b686c686d758671fd4b1f55900100000030b5aef9210000000e000000302decff30adefff0000000030ade6ff30adedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071fe8671ff4b204adf410f008672000100004b2149343138383937363433320a8672010100004b2249343138383937363433320a8672020100004b234b008672030100004b2489867204010000655d7205010000284b004ab8e390238672060100004b01888672070100004b024ae0410f008672080100004b03680649343239323830303433320a4b008681720901000086720a0100004b044b0086720b0100004b054b0086720c0100004b06580000000086720d0100004b075d720e0100002849343239333034343230380a5d720f010000284b004b004b004b0065658672100100004b085d72110100002849343237383137363638380a49343239303732363833320a658672120100004b094b008672130100004b0a898672140100004b0b4ab20709308672150100004b0c888672160100004b0d898672170100004b0e888672180100004b0f898672190100004b108886721a0100004b118886721b0100004b128986721c0100004b138986721d0100004b148986721e0100004b158986721f0100004b164b008672200100004b174d56138672210100004b18550a53616e79694b6161614872220100008672230100004b196822298172240100007d72250100002868254b0068264b0075628672260100004b1a4b008672270100004b1b4b008672280100004b1c4b008672290100004b1d55024555722a01000086722b0100004b1e7d722c01000028682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e550d456e67696e6544656661756c74722d0100006850685168526853685468556856685768586859685a550e46696e6465727344656661756c74722e010000685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586722f0100004b1f559401000000f0b7eeff220000000e000000f02fecfff0afdfff00000000f0afe6fff0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000b0efdeff000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072300100008672310100004b204ae1410f008672320100004b2149343239333833343733360a8672330100004b2249343239333833343733360a8672340100004b234b008672350100004b2489867236010000655d7237010000284b004af1c1c8238672380100004b01888672390100004b024ae2410f0086723a0100004b03680786723b0100004b044b0086723c0100004b054b0086723d0100004b06580000000086723e0100004b075d723f010000284b005d7240010000284b004b004b004b0065658672410100004b085d72420100002849343239333930353332380a49343239333837323536300a658672430100004b094b008672440100004b0a898672450100004b0b4a13830c308672460100004b0c888672470100004b0d898672480100004b0e888672490100004b0f8986724a0100004b108886724b0100004b118886724c0100004b128986724d0100004b138986724e0100004b148986724f0100004b15898672500100004b164b008672510100004b174d94118672520100004b18550b4f736b61725f6c696d616b72530100008672540100004b196822298172550100007d72560100002868254b0068264b0075628672570100004b1a4b008672580100004b1b4b008672590100004b1c4b0086725a0100004b1d55024555725b01000086725c0100004b1e7d725d01000028682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586725e0100004b1f55900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000725f0100008672600100004b204ae3410f008672610100004b2149343239333833343534340a8672620100004b2249343239333833343534340a8672630100004b234b008672640100004b248986726501000065652effce200080025d7101285d7102284b004a8024f4ef8671034b01888671044b026343616d6f75666c616765496e666f0a43616d6f75666c616765496e666f0a71054b004b00868171068671074b034b008671084b044b008671094b05580000000086710a4b065d710b284b005d710c284b004b004b00656586710d4b075d710e2849343239333930353332380a49343239333837323536300a6586710f4b084b008671104b09898671114b0a4a80db0b108671124b0b898671134b0c888671144b0d888671154b0e898671164b0f898671174b104b008671184b114d1e148671194b1255083a5772696768743a711a86711b4b1355024555711c86711d4b147d711e28550a616972446566656e7365711f550c415f416972446566656e7365712055096162696c6974696573712155104162696c697469657344656661756c7471225509617274696c6c6572797123550b415f417274696c6c6572797124550a64697665426f6d6265727125551544697665426f6d6265725479706544656661756c7471265504617462617127550b4154424144656661756c747128550c61697273686970506c616e657129551741697273686970506c616e655479706544656661756c74712a5503776373712b551a576561706f6e436f6e74726f6c53797374656d44656661756c74712c550d666c69676874436f6e74726f6c712d5514466c69676874436f6e74726f6c44656661756c74712e550a736b6970426f6d626572712f5515536b6970426f6d6265725479706544656661756c747130550d746f727065646f426f6d62657271315518546f727065646f426f6d6265725479706544656661756c747132550b61697241726d616d656e747133551241697241726d616d656e7444656661756c747134550763616d657261737135550743616d6572617371365510756e646572776174657243616d65726171375510556e646572776174657243616d6572617138550a616972537570706f727471395511616972537570706f727444656661756c74713a5506726164617273713b550d52616461727344656661756c74713c550d696d70756c73654c6173657273713d5514496d70756c73654c617365727344656661756c74713e5506656e67696e65713f5508415f456e67696e657140550468756c6c71415506415f48756c6c71425509746f727065646f657371435510546f727065646f657344656661756c747144550573636f75747145551053636f75745479706544656661756c74714655086169506172616d73714755084149506172616d737148550577617665737149551457617665417274696c6c65727944656661756c74714a550766696e64657273714b5509415f46696e64657273714c550670696e676572714d551050696e67657247756e44656661756c74714e550766696768746572714f5512466967687465725479706544656661756c747150550c6368617267654c6173657273715155134368617267654c617365727344656661756c74715255087370656369616c737153550f5370656369616c7344656661756c747154550b66697265436f6e74726f6c7155550e41315f46697265436f6e74726f6c715655096469726563746f7273715755104469726563746f727344656661756c7471585509617869734c6173657271595510417869734c6173657244656661756c74715a550e617578696c69617279506c616e65715b5519417578696c69617279506c616e655479706544656661756c74715c550c646570746843686172676573715d5516446570746843686172676547756e7344656661756c74715e7586715f4b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071608671614b164ae4410f008671624b1749343235363038353731320a8671634b1849343235363038353731320a8671644b194b018671654b1a89867166655d7167284b004a7f24f4ef8671684b01888671694b02680686716a4b034b0086716b4b044b0086716c4b05580000000086716d4b065d716e284b005d716f284b004b004b0065658671704b075d71712849343239333930353332380a49343239333837323536300a658671724b084b008671734b09898671744b0a4a81db0b108671754b0b898671764b0c888671774b0d888671784b0e898671794b0f8986717a4b104b0086717b4b114d321986717c4b12550c3a4275636b6d61737465723a717d86717e4b1355024555717f8671804b147d718128681f6820682168226823550c41315f417274696c6c657279718268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b550e46696e6465727344656661756c747183684d684e684f68506851685268536854685568566857550b415f4469726563746f727371846859685a685b685c685d685e758671854b15559001000000d0b7aef9210000000e000000d02fecffd0afefff00000000d0afe6ffd0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071868671874b164ae5410f008671884b1749343138383937373130340a8671894b1849343138383937373130340a86718a4b194b0186718b4b1a8986718c655d718d284b004a7e24f4ef86718e4b018886718f4b0268068671904b034b008671914b044b008671924b0558000000008671934b065d7194284b005d7195284b004b004b0065658671964b075d71972849343239333930353332380a49343239333837323536300a658671984b084b008671994b098986719a4b0a4a82db0b1086719b4b0b8986719c4b0c8886719d4b0d8886719e4b0e8986719f4b0f898671a04b104b008671a14b114d56138671a24b12550a3a496e67656e6f686c3a71a38671a44b135502455571a58671a64b147d71a728681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f550d456e67696e6544656661756c7471a8684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758671a94b15559001000000f0b7eeff210000000e000000f02fecfff0afdfff00000000f0afe6fff0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071aa8671ab4b164ae6410f008671ac4b1749343239333833343733360a8671ad4b1849343239333833343733360a8671ae4b194b018671af4b1a898671b0655d71b1284b004a7d24f4ef8671b24b01888671b34b0268068671b44b034b008671b54b044b008671b64b0558000000008671b74b065d71b8284b005d71b9284b004b004b0065658671ba4b075d71bb2849343239333930353332380a49343239333837323536300a658671bc4b084b008671bd4b09898671be4b0a4a83db0b108671bf4b0b898671c04b0c888671c14b0d888671c24b0e898671c34b0f898671c44b104b008671c54b114d7e1d8671c64b1255083a47616c6c65723a71c78671c84b135502455571c98671ca4b147d71cb28681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758671cc4b1555900100000030b5aef9210000000e000000302decff30adefff0000000030ade6ff30adedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071cd8671ce4b164ae7410f008671cf4b1749343138383937363433320a8671d04b1849343138383937363433320a8671d14b194b018671d24b1a898671d3655d71d4284b004a7c24f4ef8671d54b01888671d64b0268068671d74b034b008671d84b044b008671d94b0558000000008671da4b065d71db284b005d71dc284b004b004b0065658671dd4b075d71de2849343239333930353332380a49343239333837323536300a658671df4b084b008671e04b09898671e14b0a4a84db0b108671e24b0b898671e34b0c888671e44b0d888671e54b0e898671e64b0f898671e74b104b008671e84b114d94118671e94b1255093a537475726465653a71ea8671eb4b135502455571ec8671ed4b147d71ee28681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758671ef4b1555900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071f08671f14b164ae8410f008671f24b1749343239333833343534340a8671f34b1849343239333833343534340a8671f44b194b018671f54b1a898671f6655d71f7284b004a7b24f4ef8671f84b01888671f94b0268068671fa4b034b008671fb4b044b008671fc4b0558000000008671fd4b065d71fe284b005d71ff284b004b004b0065658672000100004b075d72010100002849343239333930353332380a49343239333837323536300a658672020100004b084b008672030100004b09898672040100004b0a4a85db0b108672050100004b0b898672060100004b0c888672070100004b0d888672080100004b0e898672090100004b0f8986720a0100004b104b0086720b0100004b114d941186720c0100004b1255083a426f757665743a720d01000086720e0100004b1355024555720f0100008672100100004b147d721101000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758672120100004b1555900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072130100008672140100004b164ae9410f008672150100004b1749343239333833343534340a8672160100004b1849343239333833343534340a8672170100004b194b018672180100004b1a89867219010000655d721a010000284b004a7a24f4ef86721b0100004b018886721c0100004b02680686721d0100004b034b0086721e0100004b044b0086721f0100004b0558000000008672200100004b065d7221010000284b005d7222010000284b004b004b0065658672230100004b075d72240100002849343239333930353332380a49343239333837323536300a658672250100004b084b008672260100004b09898672270100004b0a4a86db0b108672280100004b0b898672290100004b0c8886722a0100004b0d8886722b0100004b0e8986722c0100004b0f8986722d0100004b104b0086722e0100004b114de81c86722f0100004b1255083a48616c67616e3a72300100008672310100004b135502455572320100008672330100004b147d723401000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672350100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072360100008672370100004b164aea410f008672380100004b1749343138383937363937360a8672390100004b1849343138383937363937360a86723a0100004b194b0186723b0100004b1a8986723c010000655d723d010000284b004a7924f4ef86723e0100004b018886723f0100004b0268068672400100004b034b008672410100004b044b008672420100004b0558000000008672430100004b065d7244010000284b005d7245010000284b004b004b0065658672460100004b075d72470100002849343239333930353332380a49343239333837323536300a658672480100004b084b008672490100004b098986724a0100004b0a4a87db0b1086724b0100004b0b8986724c0100004b0c8886724d0100004b0d8886724e0100004b0e8986724f0100004b0f898672500100004b104b008672510100004b114de81c8672520100004b1255093a436f75726265743a72530100008672540100004b135502455572550100008672560100004b147d725701000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672580100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000725901000086725a0100004b164aeb410f0086725b0100004b1749343138383937363937360a86725c0100004b1849343138383937363937360a86725d0100004b194b0186725e0100004b1a8986725f010000655d7260010000284b004a7824f4ef8672610100004b01888672620100004b0268068672630100004b034b008672640100004b044b008672650100004b0558000000008672660100004b065d7267010000284b005d7268010000284b004b004b0065658672690100004b075d726a0100002849343239333930353332380a49343239333837323536300a6586726b0100004b084b0086726c0100004b098986726d0100004b0a4a88db0b1086726e0100004b0b8986726f0100004b0c888672700100004b0d888672710100004b0e898672720100004b0f898672730100004b104b008672740100004b114d1e148672750100004b12550c3a546567657474686f66663a72760100008672770100004b135502455572780100008672790100004b147d727a01000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e7586727b0100004b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000727c01000086727d0100004b164aec410f0086727e0100004b1749343235363038353731320a86727f0100004b1849343235363038353731320a8672800100004b194b018672810100004b1a89867282010000655d7283010000284b004a8324f4ef8672840100004b01888672850100004b0268068672860100004b034b008672870100004b044b008672880100004b0558000000008672890100004b065d728a010000284b005d728b010000284b004b004b00656586728c0100004b075d728d0100002849343239333930353332380a49343239333837323536300a6586728e0100004b084b0086728f0100004b09898672900100004b0a4a7ddb0b108672910100004b0b898672920100004b0c888672930100004b0d888672940100004b0e898672950100004b0f898672960100004b104b008672970100004b114de81c8672980100004b1255083a42756368616e3a729901000086729a0100004b1355024555729b01000086729c0100004b147d729d01000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e7586729e0100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000729f0100008672a00100004b164aed410f008672a10100004b1749343138383937363937360a8672a20100004b1849343138383937363937360a8672a30100004b194b008672a40100004b1a898672a5010000655d72a6010000284b004a8224f4ef8672a70100004b01888672a80100004b0268068672a90100004b034b008672aa0100004b044b008672ab0100004b0558000000008672ac0100004b065d72ad010000284b005d72ae010000284b004b004b0065658672af0100004b075d72b00100002849343239333930353332380a49343239333837323536300a658672b10100004b084b008672b20100004b09898672b30100004b0a4a7edb0b108672b40100004b0b898672b50100004b0c888672b60100004b0d888672b70100004b0e898672b80100004b0f898672b90100004b104b008672ba0100004b114de81c8672bb0100004b1255073a4d6f6f72653a72bc0100008672bd0100004b135502455572be0100008672bf0100004b147d72c001000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672c10100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072c20100008672c30100004b164aee410f008672c40100004b1749343138383937363937360a8672c50100004b1849343138383937363937360a8672c60100004b194b008672c70100004b1a898672c8010000655d72c9010000284b004a8124f4ef8672ca0100004b01888672cb0100004b0268068672cc0100004b034b008672cd0100004b044b008672ce0100004b0558000000008672cf0100004b065d72d0010000284b005d72d1010000284b004b004b0065658672d20100004b075d72d30100002849343239333930353332380a49343239333837323536300a658672d40100004b084b008672d50100004b09898672d60100004b0a4a7fdb0b108672d70100004b0b898672d80100004b0c888672d90100004b0d888672da0100004b0e898672db0100004b0f898672dc0100004b104b008672dd0100004b114d1e148672de0100004b12550a3a4e616b68696d6f763a72df0100008672e00100004b135502455572e10100008672e20100004b147d72e301000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672e40100004b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072e50100008672e60100004b164aef410f008672e70100004b1749343235363038353731320a8672e80100004b1849343235363038353731320a8672e90100004b194b008672ea0100004b1a898672eb01000065652e' \ '04' \ '80025d2e' \ '04' \ '80025d2e' \ # why this part is in the end? '241b7c6f' opts = [ 4149129054747675, # 1b7c6f639cbd0e00 2, '80027d7101284b005d7102284e4e4e4e4e4e4e4e4e654b015d7103284e4e4e4e4e4e4e4e4e65752e', '80025d7101285d7102284b004adfba301e8671034b01888671044b024ad8410f008671054b036343616d6f75666c616765496e666f0a43616d6f75666c616765496e666f0a71064b004b00868171078671084b044b008671094b054b0086710a4b06580000000086710b4b075d710c2849343239333034343031360a5d710d284b004b004b004b00656586710e4b085d710f2849343239333930353332380a49343231353232393336300a658671104b094b008671114b0a898671124b0b4ae2e408308671134b0c888671144b0d898671154b0e888671164b0f898671174b10888671184b11888671194b128986711a4b138986711b4b148986711c4b158986711d4b164b0086711e4b174d561386711f4b18550d4a617669657247616c6c65676f71208671214b1963506c617965724d6f64654465660a506c617965724d6f64650a7122298171237d712428550e706c617965724d6f64655479706571254b00550e6f627365727665645465616d496471264b0075628671274b1a4b008671284b1b4b008671294b1c4b0086712a4b1d55024555712b86712c4b1e7d712d28550a616972446566656e7365712e550c415f416972446566656e7365712f55096162696c6974696573713055104162696c697469657344656661756c7471315509617274696c6c6572797132550b415f417274696c6c6572797133550a64697665426f6d6265727134551544697665426f6d6265725479706544656661756c7471355504617462617136550b4154424144656661756c747137550c61697273686970506c616e657138551741697273686970506c616e655479706544656661756c7471395503776373713a551a576561706f6e436f6e74726f6c53797374656d44656661756c74713b550d666c69676874436f6e74726f6c713c5514466c69676874436f6e74726f6c44656661756c74713d550a736b6970426f6d626572713e5515536b6970426f6d6265725479706544656661756c74713f550d746f727065646f426f6d62657271405518546f727065646f426f6d6265725479706544656661756c747141550b61697241726d616d656e747142551241697241726d616d656e7444656661756c747143550763616d657261737144550743616d6572617371455510756e646572776174657243616d65726171465510556e646572776174657243616d6572617147550a616972537570706f727471485511616972537570706f727444656661756c7471495506726164617273714a550d52616461727344656661756c74714b550d696d70756c73654c6173657273714c5514496d70756c73654c617365727344656661756c74714d5506656e67696e65714e5508415f456e67696e65714f550468756c6c71505506415f48756c6c71515509746f727065646f657371525510546f727065646f657344656661756c747153550573636f75747154551053636f75745479706544656661756c74715555086169506172616d73715655084149506172616d737157550577617665737158551457617665417274696c6c65727944656661756c747159550766696e64657273715a5509415f46696e64657273715b550670696e676572715c551050696e67657247756e44656661756c74715d550766696768746572715e5512466967687465725479706544656661756c74715f550c6368617267654c6173657273716055134368617267654c617365727344656661756c74716155087370656369616c737162550f5370656369616c7344656661756c747163550b66697265436f6e74726f6c7164550e41315f46697265436f6e74726f6c716555096469726563746f72737166550b415f4469726563746f727371675509617869734c6173657271685510417869734c6173657244656661756c747169550e617578696c69617279506c616e65716a5519417578696c69617279506c616e655479706544656661756c74716b550c646570746843686172676573716c5516446570746843686172676547756e7344656661756c74716d7586716e4b1f55940100000030b7eeff220000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000b06f1dff000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000b0ef4fffb0efaffeb0ef0ffe000000001e000000716f8671704b204ad9410f008671714b2149343239333833343534340a8671724b2249343239333833343534340a8671734b234b008671744b2489867175655d7176284b004a5f79581e8671774b01888671784b024ada410f008671794b03680786717a4b044b0086717b4b054b0086717c4b06580000000086717d4b075d717e2849343239333034343031360a5d717f284b004b004b004b0065658671804b085d71812849343239333930353332380a49343239333837323536300a658671824b094b008671834b0a898671844b0b4a83a60a308671854b0c888671864b0d888671874b0e888671884b0f898671894b108986718a4b118886718b4b128986718c4b138986718d4b148986718e4b158986718f4b164b008671904b174d94118671914b18550a4d6f6e7374726f66696c71928671934b196822298171947d71952868254b0068264b0075628671964b1a4b008671974b1b4b008671984b1c4b008671994b1d55024555719a86719b4b1e7d719c28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586719d4b1f55900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000719e86719f4b204adb410f008671a04b2149343239333833343534340a8671a14b2249343239333833343534340a8671a24b234b008671a34b24898671a4655d71a5284b004a8cb1c8238671a64b01888671a74b024adc410f008671a84b0368078671a94b044b008671aa4b054b008671ab4b0658000000008671ac4b075d71ad284b005d71ae284b004b004b004b0065658671af4b085d71b02849343239333930353332380a49343239333837323536300a658671b14b094b008671b24b0a898671b34b0b4a042d0d308671b44b0c888671b54b0d898671b64b0e888671b74b0f898671b84b10888671b94b11888671ba4b12898671bb4b13898671bc4b14898671bd4b15898671be4b164b008671bf4b174d1e148671c04b18550d3332343432346466726631323371c18671c24b196822298171c37d71c42868254b0068264b0075628671c54b1a4b008671c64b1b4b008671c74b1c4b008671c84b1d5502455571c98671ca4b1e7d71cb28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f686068616862686368646865686655104469726563746f727344656661756c7471cc68686869686a686b686c686d758671cd4b1f559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071ce8671cf4b204add410f008671d04b2149343235363038353731320a8671d14b2249343235363038353731320a8671d24b234b008671d34b24898671d4655d71d5284b004a0a63fc228671d64b01888671d74b024ade410f008671d84b0368078671d94b044ab3b3b3008671da4b054a930fd01d8671db4b065805000000412d4e2d4571dc8671dd4b075d71de2849343239333034333530340a5d71df284b004b004b004b0065658671e04b085d71e12849343237383137363638380a49343233383239383033320a658671e24b094b008671e34b0a898671e44b0b4a4b1d06388671e54b0c888671e64b0d898671e74b0e888671e84b0f898671e94b10888671ea4b11888671eb4b12898671ec4b13898671ed4b14898671ee4b15898671ef4b164b008671f04b174d7e1d8671f14b185509546f6d6173696e353771f28671f34b196822298171f47d71f52868254b0068264b0075628671f64b1a4b008671f74b1b4b008671f84b1c4b008671f94b1d5502455571fa8671fb4b1e7d71fc28682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f686068616862686368646865686668cc68686869686a686b686c686d758671fd4b1f55900100000030b5aef9210000000e000000302decff30adefff0000000030ade6ff30adedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071fe8671ff4b204adf410f008672000100004b2149343138383937363433320a8672010100004b2249343138383937363433320a8672020100004b234b008672030100004b2489867204010000655d7205010000284b004ab8e390238672060100004b01888672070100004b024ae0410f008672080100004b03680649343239323830303433320a4b008681720901000086720a0100004b044b0086720b0100004b054b0086720c0100004b06580000000086720d0100004b075d720e0100002849343239333034343230380a5d720f010000284b004b004b004b0065658672100100004b085d72110100002849343237383137363638380a49343239303732363833320a658672120100004b094b008672130100004b0a898672140100004b0b4ab20709308672150100004b0c888672160100004b0d898672170100004b0e888672180100004b0f898672190100004b108886721a0100004b118886721b0100004b128986721c0100004b138986721d0100004b148986721e0100004b158986721f0100004b164b008672200100004b174d56138672210100004b18550a53616e79694b6161614872220100008672230100004b196822298172240100007d72250100002868254b0068264b0075628672260100004b1a4b008672270100004b1b4b008672280100004b1c4b008672290100004b1d55024555722a01000086722b0100004b1e7d722c01000028682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e550d456e67696e6544656661756c74722d0100006850685168526853685468556856685768586859685a550e46696e6465727344656661756c74722e010000685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586722f0100004b1f559401000000f0b7eeff220000000e000000f02fecfff0afdfff00000000f0afe6fff0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000b0efdeff000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072300100008672310100004b204ae1410f008672320100004b2149343239333833343733360a8672330100004b2249343239333833343733360a8672340100004b234b008672350100004b2489867236010000655d7237010000284b004af1c1c8238672380100004b01888672390100004b024ae2410f0086723a0100004b03680786723b0100004b044b0086723c0100004b054b0086723d0100004b06580000000086723e0100004b075d723f010000284b005d7240010000284b004b004b004b0065658672410100004b085d72420100002849343239333930353332380a49343239333837323536300a658672430100004b094b008672440100004b0a898672450100004b0b4a13830c308672460100004b0c888672470100004b0d898672480100004b0e888672490100004b0f8986724a0100004b108886724b0100004b118886724c0100004b128986724d0100004b138986724e0100004b148986724f0100004b15898672500100004b164b008672510100004b174d94118672520100004b18550b4f736b61725f6c696d616b72530100008672540100004b196822298172550100007d72560100002868254b0068264b0075628672570100004b1a4b008672580100004b1b4b008672590100004b1c4b0086725a0100004b1d55024555725b01000086725c0100004b1e7d725d01000028682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e685f6860686168626863686468656866686768686869686a686b686c686d7586725e0100004b1f55900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000725f0100008672600100004b204ae3410f008672610100004b2149343239333833343534340a8672620100004b2249343239333833343534340a8672630100004b234b008672640100004b248986726501000065652e', '80025d7101285d7102284b004a8024f4ef8671034b01888671044b026343616d6f75666c616765496e666f0a43616d6f75666c616765496e666f0a71054b004b00868171068671074b034b008671084b044b008671094b05580000000086710a4b065d710b284b005d710c284b004b004b00656586710d4b075d710e2849343239333930353332380a49343239333837323536300a6586710f4b084b008671104b09898671114b0a4a80db0b108671124b0b898671134b0c888671144b0d888671154b0e898671164b0f898671174b104b008671184b114d1e148671194b1255083a5772696768743a711a86711b4b1355024555711c86711d4b147d711e28550a616972446566656e7365711f550c415f416972446566656e7365712055096162696c6974696573712155104162696c697469657344656661756c7471225509617274696c6c6572797123550b415f417274696c6c6572797124550a64697665426f6d6265727125551544697665426f6d6265725479706544656661756c7471265504617462617127550b4154424144656661756c747128550c61697273686970506c616e657129551741697273686970506c616e655479706544656661756c74712a5503776373712b551a576561706f6e436f6e74726f6c53797374656d44656661756c74712c550d666c69676874436f6e74726f6c712d5514466c69676874436f6e74726f6c44656661756c74712e550a736b6970426f6d626572712f5515536b6970426f6d6265725479706544656661756c747130550d746f727065646f426f6d62657271315518546f727065646f426f6d6265725479706544656661756c747132550b61697241726d616d656e747133551241697241726d616d656e7444656661756c747134550763616d657261737135550743616d6572617371365510756e646572776174657243616d65726171375510556e646572776174657243616d6572617138550a616972537570706f727471395511616972537570706f727444656661756c74713a5506726164617273713b550d52616461727344656661756c74713c550d696d70756c73654c6173657273713d5514496d70756c73654c617365727344656661756c74713e5506656e67696e65713f5508415f456e67696e657140550468756c6c71415506415f48756c6c71425509746f727065646f657371435510546f727065646f657344656661756c747144550573636f75747145551053636f75745479706544656661756c74714655086169506172616d73714755084149506172616d737148550577617665737149551457617665417274696c6c65727944656661756c74714a550766696e64657273714b5509415f46696e64657273714c550670696e676572714d551050696e67657247756e44656661756c74714e550766696768746572714f5512466967687465725479706544656661756c747150550c6368617267654c6173657273715155134368617267654c617365727344656661756c74715255087370656369616c737153550f5370656369616c7344656661756c747154550b66697265436f6e74726f6c7155550e41315f46697265436f6e74726f6c715655096469726563746f7273715755104469726563746f727344656661756c7471585509617869734c6173657271595510417869734c6173657244656661756c74715a550e617578696c69617279506c616e65715b5519417578696c69617279506c616e655479706544656661756c74715c550c646570746843686172676573715d5516446570746843686172676547756e7344656661756c74715e7586715f4b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071608671614b164ae4410f008671624b1749343235363038353731320a8671634b1849343235363038353731320a8671644b194b018671654b1a89867166655d7167284b004a7f24f4ef8671684b01888671694b02680686716a4b034b0086716b4b044b0086716c4b05580000000086716d4b065d716e284b005d716f284b004b004b0065658671704b075d71712849343239333930353332380a49343239333837323536300a658671724b084b008671734b09898671744b0a4a81db0b108671754b0b898671764b0c888671774b0d888671784b0e898671794b0f8986717a4b104b0086717b4b114d321986717c4b12550c3a4275636b6d61737465723a717d86717e4b1355024555717f8671804b147d718128681f6820682168226823550c41315f417274696c6c657279718268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b550e46696e6465727344656661756c747183684d684e684f68506851685268536854685568566857550b415f4469726563746f727371846859685a685b685c685d685e758671854b15559001000000d0b7aef9210000000e000000d02fecffd0afefff00000000d0afe6ffd0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071868671874b164ae5410f008671884b1749343138383937373130340a8671894b1849343138383937373130340a86718a4b194b0186718b4b1a8986718c655d718d284b004a7e24f4ef86718e4b018886718f4b0268068671904b034b008671914b044b008671924b0558000000008671934b065d7194284b005d7195284b004b004b0065658671964b075d71972849343239333930353332380a49343239333837323536300a658671984b084b008671994b098986719a4b0a4a82db0b1086719b4b0b8986719c4b0c8886719d4b0d8886719e4b0e8986719f4b0f898671a04b104b008671a14b114d56138671a24b12550a3a496e67656e6f686c3a71a38671a44b135502455571a58671a64b147d71a728681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f550d456e67696e6544656661756c7471a8684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758671a94b15559001000000f0b7eeff210000000e000000f02fecfff0afdfff00000000f0afe6fff0afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071aa8671ab4b164ae6410f008671ac4b1749343239333833343733360a8671ad4b1849343239333833343733360a8671ae4b194b018671af4b1a898671b0655d71b1284b004a7d24f4ef8671b24b01888671b34b0268068671b44b034b008671b54b044b008671b64b0558000000008671b74b065d71b8284b005d71b9284b004b004b0065658671ba4b075d71bb2849343239333930353332380a49343239333837323536300a658671bc4b084b008671bd4b09898671be4b0a4a83db0b108671bf4b0b898671c04b0c888671c14b0d888671c24b0e898671c34b0f898671c44b104b008671c54b114d7e1d8671c64b1255083a47616c6c65723a71c78671c84b135502455571c98671ca4b147d71cb28681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758671cc4b1555900100000030b5aef9210000000e000000302decff30adefff0000000030ade6ff30adedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071cd8671ce4b164ae7410f008671cf4b1749343138383937363433320a8671d04b1849343138383937363433320a8671d14b194b018671d24b1a898671d3655d71d4284b004a7c24f4ef8671d54b01888671d64b0268068671d74b034b008671d84b044b008671d94b0558000000008671da4b065d71db284b005d71dc284b004b004b0065658671dd4b075d71de2849343239333930353332380a49343239333837323536300a658671df4b084b008671e04b09898671e14b0a4a84db0b108671e24b0b898671e34b0c888671e44b0d888671e54b0e898671e64b0f898671e74b104b008671e84b114d94118671e94b1255093a537475726465653a71ea8671eb4b135502455571ec8671ed4b147d71ee28681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758671ef4b1555900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000071f08671f14b164ae8410f008671f24b1749343239333833343534340a8671f34b1849343239333833343534340a8671f44b194b018671f54b1a898671f6655d71f7284b004a7b24f4ef8671f84b01888671f94b0268068671fa4b034b008671fb4b044b008671fc4b0558000000008671fd4b065d71fe284b005d71ff284b004b004b0065658672000100004b075d72010100002849343239333930353332380a49343239333837323536300a658672020100004b084b008672030100004b09898672040100004b0a4a85db0b108672050100004b0b898672060100004b0c888672070100004b0d888672080100004b0e898672090100004b0f8986720a0100004b104b0086720b0100004b114d941186720c0100004b1255083a426f757665743a720d01000086720e0100004b1355024555720f0100008672100100004b147d721101000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768846859685a685b685c685d685e758672120100004b1555900100000030b7eeff210000000e000000302fecff30afefff0000000030afe6ff30afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072130100008672140100004b164ae9410f008672150100004b1749343239333833343534340a8672160100004b1849343239333833343534340a8672170100004b194b018672180100004b1a89867219010000655d721a010000284b004a7a24f4ef86721b0100004b018886721c0100004b02680686721d0100004b034b0086721e0100004b044b0086721f0100004b0558000000008672200100004b065d7221010000284b005d7222010000284b004b004b0065658672230100004b075d72240100002849343239333930353332380a49343239333837323536300a658672250100004b084b008672260100004b09898672270100004b0a4a86db0b108672280100004b0b898672290100004b0c8886722a0100004b0d8886722b0100004b0e8986722c0100004b0f8986722d0100004b104b0086722e0100004b114de81c86722f0100004b1255083a48616c67616e3a72300100008672310100004b135502455572320100008672330100004b147d723401000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672350100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072360100008672370100004b164aea410f008672380100004b1749343138383937363937360a8672390100004b1849343138383937363937360a86723a0100004b194b0186723b0100004b1a8986723c010000655d723d010000284b004a7924f4ef86723e0100004b018886723f0100004b0268068672400100004b034b008672410100004b044b008672420100004b0558000000008672430100004b065d7244010000284b005d7245010000284b004b004b0065658672460100004b075d72470100002849343239333930353332380a49343239333837323536300a658672480100004b084b008672490100004b098986724a0100004b0a4a87db0b1086724b0100004b0b8986724c0100004b0c8886724d0100004b0d8886724e0100004b0e8986724f0100004b0f898672500100004b104b008672510100004b114de81c8672520100004b1255093a436f75726265743a72530100008672540100004b135502455572550100008672560100004b147d725701000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672580100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000725901000086725a0100004b164aeb410f0086725b0100004b1749343138383937363937360a86725c0100004b1849343138383937363937360a86725d0100004b194b0186725e0100004b1a8986725f010000655d7260010000284b004a7824f4ef8672610100004b01888672620100004b0268068672630100004b034b008672640100004b044b008672650100004b0558000000008672660100004b065d7267010000284b005d7268010000284b004b004b0065658672690100004b075d726a0100002849343239333930353332380a49343239333837323536300a6586726b0100004b084b0086726c0100004b098986726d0100004b0a4a88db0b1086726e0100004b0b8986726f0100004b0c888672700100004b0d888672710100004b0e898672720100004b0f898672730100004b104b008672740100004b114d1e148672750100004b12550c3a546567657474686f66663a72760100008672770100004b135502455572780100008672790100004b147d727a01000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e7586727b0100004b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000727c01000086727d0100004b164aec410f0086727e0100004b1749343235363038353731320a86727f0100004b1849343235363038353731320a8672800100004b194b018672810100004b1a89867282010000655d7283010000284b004a8324f4ef8672840100004b01888672850100004b0268068672860100004b034b008672870100004b044b008672880100004b0558000000008672890100004b065d728a010000284b005d728b010000284b004b004b00656586728c0100004b075d728d0100002849343239333930353332380a49343239333837323536300a6586728e0100004b084b0086728f0100004b09898672900100004b0a4a7ddb0b108672910100004b0b898672920100004b0c888672930100004b0d888672940100004b0e898672950100004b0f898672960100004b104b008672970100004b114de81c8672980100004b1255083a42756368616e3a729901000086729a0100004b1355024555729b01000086729c0100004b147d729d01000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e7586729e0100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff0000000000000000000000000000000000000000040000000000000000000000000000000000000000000000729f0100008672a00100004b164aed410f008672a10100004b1749343138383937363937360a8672a20100004b1849343138383937363937360a8672a30100004b194b008672a40100004b1a898672a5010000655d72a6010000284b004a8224f4ef8672a70100004b01888672a80100004b0268068672a90100004b034b008672aa0100004b044b008672ab0100004b0558000000008672ac0100004b065d72ad010000284b005d72ae010000284b004b004b0065658672af0100004b075d72b00100002849343239333930353332380a49343239333837323536300a658672b10100004b084b008672b20100004b09898672b30100004b0a4a7edb0b108672b40100004b0b898672b50100004b0c888672b60100004b0d888672b70100004b0e898672b80100004b0f898672b90100004b104b008672ba0100004b114de81c8672bb0100004b1255073a4d6f6f72653a72bc0100008672bd0100004b135502455572be0100008672bf0100004b147d72c001000028681f6820682168226823688268256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b6883684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672c10100004b1555900100000050b7aef9210000000e000000502fecff50afefff0000000050afe6ff50afedff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072c20100008672c30100004b164aee410f008672c40100004b1749343138383937363937360a8672c50100004b1849343138383937363937360a8672c60100004b194b008672c70100004b1a898672c8010000655d72c9010000284b004a8124f4ef8672ca0100004b01888672cb0100004b0268068672cc0100004b034b008672cd0100004b044b008672ce0100004b0558000000008672cf0100004b065d72d0010000284b005d72d1010000284b004b004b0065658672d20100004b075d72d30100002849343239333930353332380a49343239333837323536300a658672d40100004b084b008672d50100004b09898672d60100004b0a4a7fdb0b108672d70100004b0b898672d80100004b0c888672d90100004b0d888672da0100004b0e898672db0100004b0f898672dc0100004b104b008672dd0100004b114d1e148672de0100004b12550a3a4e616b68696d6f763a72df0100008672e00100004b135502455572e10100008672e20100004b147d72e301000028681f6820682168226823682468256826682768286829682a682b682c682d682e682f6830683168326833683468356836683768386839683a683b683c683d683e683f6840684168426843684468456846684768486849684a684b684c684d684e684f6850685168526853685468556856685768586859685a685b685c685d685e758672e40100004b15559001000000d0b6aefd210000000e000000d02eccffd0aecfff00000000d0aec6ffd0aeddff000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000005000000b09f62ff000000000000000000000000000000000000000004000000000000000000000000000000000000000000000072e50100008672e60100004b164aef410f008672e70100004b1749343235363038353731320a8672e80100004b1849343235363038353731320a8672e90100004b194b008672ea0100004b1a898672eb01000065652e', '80025d2e', '80025d2e']
  13. А, ну понятно зачем такой изврат с магической константой, которую я описывал выше. _MAGIC_OFFSET_MSG_ID = 0xa1 Начиная с индекса 0xA2 в том же пакете 0x1A уже данные о property приходят, а не вызовы методов. Соответственно таким образом расширяли диапазон количества доступных методов. @Dragon armorа где ты накопал эти все константы? 0x44 для методов, 0xA2 для property? Мне кажется, или в исходниках BW их нет?
  14. Да. Исходники BigWorld рекомендую посмотреть. Как и по следующему вопросу. Я в них посматриваю, но там черт ногу сломит и нет самого важного - актуальных message id по которым можно было бы выстраивать дальнейший парсинг пакетов. Максимум можно подсмотреть часто используемые структуры данных. Нет, тот который перед footer, сразу после BASE свойств переданных для создания entity. Попадается 0x0f у Account и 0x01 у Login. # Account: props = [name (<String>), spaID (<Int64>), attrs (<UInt64>), isClientOnline (<UInt8>)] # entity create ??????? entity_id xml id ?? name spaID attrs isClientOnline ???? footer # entity_create = b'X\x04\x13\x9a \x05 $\x00 0\xfa\t0 \x03\x00 \x00 \nMonstrofil _yX\x1e\x00\x00\x00\x00 P\x10\x00\x00\x00\x00\x00\x00 \x00 \x0f \x03\x00\x00\x00 \x01\x00\x00\x00 \xef\xbe\xad\xde' # entity_create = b'X\x04\x133 \x05 $\x00 c\xe1\x108 \x03\x00 \x00 \nMonstrofil _yX\x1e\x00\x00\x00\x00 P\x10\x00\x00\x00\x00\x00\x00 \x00 \x0f \x02\x00\x00\x00 \x01\x00\x00\x00 \xef\xbe\xad\xde' # Login: props = [] # entity_create = b'X\x04\x135 \x05 \x08\x00 \x06\x00\x0f0 \x06\x00 \x00 \x01 \x02\x00\x00\x00 \x01\x00\x00\x00 \xef\xbe\xad\xde' Пакеты в примере выше очищены от выравнивания для blowfish ^^ Кстати, сегодня столкнулся с ещё одним "нюансом" - если exposed method_id для ClientEntityMethodCall меньше 0xa1, то его номер просто записывается сразу после id сообщения. А если превышает, то в id сообщения записывается 0x1a, потом размер сообщения, а потом смещение которое нужно прибавить к 0x1a. _MAGIC_OFFSET_MSG_ID = 0xa1 method_id = struct.unpack('B', data.read(1))[0] if method_id == cls._MAGIC_OFFSET_MSG_ID: payload_size, = struct.unpack('B', data.read(1)) method_id = cls._MAGIC_OFFSET_MSG_ID + struct.unpack('B', data.read(1))[0] - cls._METHOD_ID_OFFSET logging.info('Decoding message id as = %s', hex(method_id)) method = cls.methods[method_id] logging.info('Method is = %s', method) else: method_id -= cls._METHOD_ID_OFFSET logging.info('Decoding message id as = %s', hex(method_id)) method = cls.methods[method_id] logging.info('Method is = %s', method) # variable size message payload_size = method.get_size_in_bytes() - method._variable_header_size if method.get_size_in_bytes() > 0xFFFF: payload_size, = struct.unpack('B', data.read(1)) Только после таких плясок с бубном начали корректно парситься пакеты с большими id. В реплеях, кстати, таких танцев с бубном не нужно =/ INFO:root:method = receiveShotKills ([unknown: <Array> [<FixedDict> {'ownerID': <Int32>, 'hitType': <UInt8>, 'kills': <Array> [<FixedDict> {'pos': <Vector3>, 'shotID': <UInt16>}, ...]}, ...]]) args = [[{'ownerID': 771744, 'hitType': 96, 'kills': [{'pos': (-106.69949340820312, 0.10629188269376755, -25.293855667114258), 'shotID': 88}]}]] kwargs = {} INFO:root:method = onGameRoomStateChanged ([playersData: <Blob>, botsData: <Blob>, observersData: <Blob>]) args = [] kwargs = {'playersData': b'\x80\x02]q\x01]q\x02(K\tK\x02\x86q\x03K\x0bJ\xacc\x010\x86q\x04ea.', 'botsData': b'\x80\x02]q\x01]q\x02(K\nJ\xe9Q\x07\x10\x86q\x03K\x0c\x89\x86q\x04ea.', 'observersData': b'\x80\x02]q\x01.'} И вот таких нюансов в исходниках BW я тоже не находил. Либо они скрыты в слоях абстракций которые там навертели, либо это было добавлено позже.
×
×
  • Create New...