hdarwin

pwnable.kr_login

Jun 30th, 2014
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 74.37 KB | None | 0 0
  1. //
  2. // This file was generated by the Retargetable Decompiler
  3. // Website: http://decompiler.fit.vutbr.cz
  4. // Copyright (c) 2011-2014 Lissom <[email protected]>
  5. //
  6.  
  7. #include <errno.h>
  8. #include <stdbool.h>
  9. #include <stdint.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13.  
  14. /* ------- Float Types Definitions ------ */
  15.  
  16. typedef long double float80_t;
  17.  
  18. /* ------------- Structures ------------- */
  19.  
  20. struct struct_0 {
  21.     int32_t e0;
  22.     int32_t e1;
  23.     int32_t e2;
  24.     int32_t e3;
  25.     int32_t e4;
  26.     int32_t e5;
  27.     int8_t e6;
  28.     int8_t e7[52];
  29.     int32_t e8;
  30.     int32_t e9;
  31.     int32_t e10;
  32. };
  33.  
  34. struct struct_1 {
  35.     int8_t e0;
  36.     int32_t e1;
  37.     int32_t e2;
  38.     int32_t e3;
  39. };
  40.  
  41. struct struct_16 {
  42.     int32_t e0;
  43.     int32_t * e1;
  44.     int8_t e2[4];
  45.     int32_t e3;
  46. };
  47.  
  48. struct struct_2 {
  49.     int32_t e0;
  50.     int32_t e1;
  51.     int32_t e2;
  52.     int32_t e3;
  53. };
  54.  
  55. struct struct_3 {
  56.     int32_t e0;
  57.     int32_t e1;
  58.     int32_t e2;
  59.     int32_t e3;
  60.     int32_t e4;
  61.     int32_t e5;
  62.     int32_t e6;
  63.     int32_t e7;
  64.     int32_t e8;
  65.     int32_t e9;
  66.     int32_t e10;
  67.     int32_t e11;
  68.     int32_t e12;
  69.     int32_t e13;
  70.     int32_t e14;
  71.     int32_t e15;
  72. };
  73.  
  74. struct struct_4 {
  75.     int32_t e0;
  76.     int32_t e1;
  77.     int32_t e2;
  78.     int32_t e3;
  79.     int32_t e4;
  80.     int32_t e5;
  81.     int32_t e6;
  82.     int32_t e7;
  83.     int32_t e8;
  84.     int32_t e9;
  85.     int32_t e10;
  86.     int32_t e11;
  87.     int32_t e12;
  88.     int32_t e13;
  89. };
  90.  
  91. struct struct_5 {
  92.     int32_t e0;
  93.     int32_t e1;
  94.     int8_t e2[24];
  95.     int32_t e3;
  96. };
  97.  
  98. struct struct_6 {
  99.     int32_t e0;
  100.     int32_t e1;
  101.     int8_t e2[4];
  102.     int32_t e3;
  103. };
  104.  
  105. struct struct_7 {
  106.     int32_t e0;
  107.     int32_t e1;
  108.     int8_t e2[16];
  109.     int32_t e3;
  110. };
  111.  
  112. struct struct_8 {
  113.     int32_t e0;
  114.     int32_t e1;
  115. };
  116.  
  117. struct struct__IO_FILE {
  118.     int32_t e0;
  119.     int8_t * e1;
  120.     int8_t * e2;
  121.     int8_t * e3;
  122.     int8_t * e4;
  123.     int8_t * e5;
  124.     int8_t * e6;
  125.     int8_t * e7;
  126.     int8_t * e8;
  127.     int8_t * e9;
  128.     int8_t * e10;
  129.     int8_t * e11;
  130.     struct struct__IO_marker * e12;
  131.     struct struct__IO_FILE * e13;
  132.     int32_t e14;
  133.     int32_t e15;
  134.     int32_t e16;
  135.     int16_t e17;
  136.     int8_t e18;
  137.     int8_t e19[1];
  138.     int8_t * e20;
  139.     int64_t e21;
  140.     int8_t * e22;
  141.     int8_t * e23;
  142.     int8_t * e24;
  143.     int8_t * e25;
  144.     int32_t e26;
  145.     int32_t e27;
  146.     int8_t e28[40];
  147. };
  148.  
  149. struct struct__IO_marker {
  150.     struct struct__IO_marker * e0;
  151.     struct struct__IO_FILE * e1;
  152.     int32_t e2;
  153. };
  154.  
  155. /* -------- Function Prototypes --------- */
  156.  
  157. int32_t calcDecodeLength(int8_t * str);
  158. int32_t Base64Decode(int8_t * str, int8_t ** a2);
  159. int32_t calc_md5(int8_t * a1, int32_t * a2);
  160. int32_t correct(void);
  161. int32_t auth(int32_t a1);
  162. int32_t MD5_Update(int32_t * a1, int8_t * a2, int32_t * a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t * a10, int8_t * a11);
  163. int32_t MD5_Final(int8_t * a1, struct struct_0 * a2);
  164. int32_t MD5_Init(struct struct_1 * a1);
  165. int32_t md5_block_asm_data_order(struct struct_2 * a1, struct struct_3 * a2, int32_t a3);
  166. int32_t BIO_set(struct struct_4 * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6);
  167. int32_t BIO_new(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7);
  168. int32_t BIO_free(struct struct_5 * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7);
  169. int32_t BIO_set_flags(int32_t result, int32_t a2);
  170. int32_t BIO_read(struct struct_6 * a1, struct struct_6 * a2, int32_t a3);
  171. int32_t BIO_ctrl(struct struct_7 * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, struct struct_7 * a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18, int32_t a19, int32_t a20, int32_t a21);
  172. int32_t BIO_push(int32_t a1, int32_t result, int32_t a3);
  173. int32_t BIO_free_all(int32_t a1);
  174. int32_t BIO_new_fp(int32_t a1, int32_t a2);
  175. int32_t ERR_STATE_free(int32_t * a1);
  176. int32_t err_fns_check_part_2(int32_t a1);
  177. int32_t ERR_get_state(int32_t a1);
  178. int32_t ERR_put_error(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5);
  179. int32_t BIO_f_base64(void);
  180. int32_t * CRYPTO_THREADID_current(struct struct_8 * a1, int32_t a2);
  181. int32_t CRYPTO_THREADID_cpy(struct struct_8 * a1, struct struct_8 * a2);
  182. int32_t OPENSSL_showfatal(int32_t a1);
  183. int32_t CRYPTO_lock(int32_t * a1, int32_t a2, int32_t * a3, int32_t a4, int32_t a5, int32_t * a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13, int32_t a14, int32_t a15, int32_t a16);
  184. int32_t CRYPTO_add_lock(int32_t * a1, int32_t a2, int32_t a3, int32_t * a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11);
  185. int32_t * default_malloc_ex(int32_t * a1, int32_t * a2);
  186. int32_t CRYPTO_malloc(int32_t * a1, int32_t * a2, int32_t * a3);
  187. int32_t CRYPTO_free(int32_t * a1, int32_t a2, int32_t a3);
  188. int32_t impl_check(int32_t a1);
  189. int32_t CRYPTO_new_ex_data(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6);
  190. int32_t CRYPTO_free_ex_data(int32_t a1, int32_t a2, int32_t a3, int32_t a4);
  191. int32_t _IO_fclose(int32_t * a1);
  192. int32_t __memset_chk(void);
  193. int32_t ___vfprintf_chk(struct struct_16 * a1, int32_t a2);
  194. int32_t __init_cpu_features(int32_t a1);
  195. int32_t strncasecmp_l(void);
  196. int32_t function_80482e0(void);
  197. int32_t function_80482f0(void);
  198. // The following external functions do not have any associated header file:
  199. void ___mingw_snprintf(void);
  200.  
  201. /* ---------- Global Variables ---------- */
  202.  
  203. int32_t g1 = -0x452df7c; // 0x811b4e0
  204. int32_t g2 = -0x452df78; // 0x811b580
  205. bool g3 = false; // 0x811d6ec
  206. bool g4 = false; // 0x811d754
  207. int32_t g5 = 0; // 0x811eb40
  208. bool g6 = false; // 0x811eee0
  209. int32_t g7 = 0; // 0x811eef0
  210. int32_t g8 = 0; // 0x811eef4
  211. int32_t g9 = 0; // 0x811ef10
  212. int32_t g10 = 0; // gpr0
  213. int32_t g11 = 0; // gpr1
  214. int32_t g12 = 0; // gpr2
  215. int32_t g13 = 0; // gpr3
  216. int32_t g14 = 0; // gpr5
  217. int32_t g15 = 0; // gpr6
  218. int32_t g16 = 0; // gpr7
  219. bool g17 = false; // zf0
  220.  
  221. /* ------------- Functions -------------- */
  222.  
  223. int32_t calcDecodeLength(int8_t * str) {
  224.     int32_t v1 = (int32_t)str; // 0x804900f
  225.     int32_t len = strlen(str); // 0x8049015
  226.     int32_t v2 = len - 1; // 0x8049027
  227.     int8_t * v3 = (int8_t *)(v2 + v1); // bp+13
  228.     uint8_t v4; // 0x804905c
  229.     if (*v3 != 61) {
  230.         // 0x8049051
  231.         g12 = v2;
  232.         v4 = *v3;
  233.         g17 = v4 == 61;
  234.         float80_t v5 = v4 == 61 ? 1.0 : 0.0;
  235.         // branch -> 0x804906a
  236.         // 0x804906a
  237.         g10 = 3136;
  238.         return (int32_t)(0.75 * (float80_t)len - v5);
  239.     }
  240.     // 0x8049036
  241.     float80_t v6; // 0x80490752
  242.     if (*(int8_t *)(len - 2 + v1) != 61) {
  243.         // 0x8049051
  244.         g12 = v2;
  245.         v4 = *v3;
  246.         g17 = v4 == 61;
  247.         v6 = v4 == 61 ? 1.0 : 0.0;
  248.         // branch -> 0x804906a
  249.     } else {
  250.         v6 = 2.0;
  251.     }
  252.     // 0x804906a
  253.     g10 = 3136;
  254.     return (int32_t)(0.75 * (float80_t)len - v6);
  255. }
  256.  
  257. int32_t Base64Decode(int8_t * str, int8_t ** a2) {
  258.     int32_t result = calcDecodeLength(str); // 0x80490a1
  259.     *a2 = (int8_t *)malloc(result + 1);
  260.     int32_t len = strlen(str); // 0x80490cb
  261.     g10 = (int32_t)str;
  262.     struct struct__IO_FILE * v1 = fmemopen(str, len, "r"); // 0x80490e2
  263.     BIO_f_base64();
  264.     int32_t v2 = BIO_new(0x811b380, len, (int32_t)"r", 0, 0, 0, 0); // 0x80490f2
  265.     int32_t v3 = (int32_t)v1; // 0x8049102
  266.     g10 = v3;
  267.     int32_t v4 = BIO_new_fp(v3, 0); // 0x8049108
  268.     g10 = v2;
  269.     int32_t v5 = BIO_push(v2, v4, (int32_t)"r"); // 0x804911d
  270.     BIO_set_flags(v5, 256);
  271.     int32_t len2 = strlen(str); // 0x804913e
  272.     g12 = len2;
  273.     int32_t v6 = *(int32_t *)a2; // 0x8049148
  274.     g10 = v5;
  275.     BIO_read((struct struct_6 *)v5, (struct struct_6 *)v6, len2);
  276.     int32_t v7 = *(int32_t *)a2; // 0x8049163
  277.     g12 = v7;
  278.     *(int8_t *)(v7 - 2) = 0;
  279.     g10 = v5;
  280.     BIO_free_all(v5);
  281.     g10 = v3;
  282.     _IO_fclose(&v1->e0);
  283.     return result;
  284. }
  285.  
  286. int32_t calc_md5(int8_t * a1, int32_t * a2) {
  287.     int32_t mem = (int32_t)malloc(33); // bp-20
  288.     int32_t v1;
  289.     MD5_Init((struct struct_1 *)&v1);
  290.     int8_t v2;
  291.     if (a2 > NULL) {
  292.         while (true) {
  293.             uint32_t v3 = (int32_t)a2 - 512; // 0x80491ad
  294.             int32_t v4 = (int32_t)a1; // 0x80491d9
  295.             g10 = v4;
  296.             int32_t v5 = v2; // 0x80491e6
  297.             if (a2 < (int32_t *)513) {
  298.                 // 0x80491d2
  299.                 MD5_Update(&v1, a1, a2, 0, 0, 0, 0, v5, 0, NULL, NULL);
  300.                 // branch -> 0x80491eb
  301.             } else {
  302.                 // 0x80491b6
  303.                 MD5_Update(&v1, a1, (int32_t *)512, 0, 0, 0, 0, v5, 0, NULL, NULL);
  304.                 // branch -> 0x80491eb
  305.             }
  306.             // 0x80491eb
  307.             if (v3 <= 0) {
  308.                 // break -> 0x80491f9
  309.                 break;
  310.             }
  311.             a1 = (int8_t *)(v4 + 512);
  312.             a2 = (int32_t *)v3;
  313.             // continue -> 0x80491ad
  314.         }
  315.         // 0x80491f9
  316.         // branch -> 0x80491ff
  317.     }
  318.     // 0x80491ff
  319.     MD5_Final(&v2, (struct struct_0 *)&v1);
  320.     g17 = false;
  321.     // branch -> 0x804921a
  322.     for (uint32_t i = 0; i < 16; i++) {
  323.         // 0x804921a
  324.         ___mingw_snprintf();
  325.         // PHI copies at the loop end
  326.         // loop 0x804921a end
  327.     }
  328.     // 0x804925a
  329.     return &mem;
  330. }
  331.  
  332. int32_t correct(void) {
  333.     int32_t v1 = g5; // 0x804926f
  334.     g10 = v1;
  335.     g17 = v1 == -0x21524111;
  336.     if (v1 == -0x21524111) {
  337.         // 0x8049278
  338.         puts("Congratulation! you are good!");
  339.         system("/bin/sh");
  340.         // branch -> 0x8049290
  341.     }
  342.     // 0x8049290
  343.     exit(0);
  344.     // UNREACHABLE
  345. }
  346.  
  347. int32_t auth(int32_t a1) {
  348.     // 0x804929c
  349.     g10 = a1;
  350.     int32_t * v1;
  351.     memcpy(v1, &g5, a1);
  352.     int8_t * v2;
  353.     int32_t v3 = calc_md5(v2, (int32_t *)12); // 0x80492cd
  354.     printf("hash : %s\n", (int8_t *)v3);
  355.     g10 = v3;
  356.     int32_t v4 = function_80482f0(); // 0x80492f6
  357.     g17 = v4 == 0;
  358.     return v4 == 0;
  359. }
  360.  
  361. int main(int argc, char **argv) {
  362.     // bb
  363.     g17 = false;
  364.     function_80482e0();
  365.     setvbuf((struct struct__IO_FILE *)&g1, NULL, 2, 0);
  366.     setvbuf((struct struct__IO_FILE *)&g2, NULL, 1, 0);
  367.     printf("Authenticate : ");
  368.     int8_t * v1;
  369.     scanf("%30s", v1);
  370.     function_80482e0();
  371.     int32_t v2 = Base64Decode(v1, NULL); // 0x80493cf
  372.     if (v2 > 12) {
  373.         // 0x8049413
  374.         puts("Wrong Length");
  375.         // branch -> 0x804941f
  376.     } else {
  377.         // 0x80493df
  378.         g12 = v2;
  379.         memcpy(&g5, NULL, v2);
  380.         int32_t v3 = auth(v2); // 0x8049402
  381.         g17 = v3 == 1;
  382.         if (v3 == 1) {
  383.             // 0x804940c
  384.             correct();
  385.             // branch -> 0x804941f
  386.         }
  387.     }
  388.     // 0x804941f
  389.     return 0;
  390. }
  391.  
  392. int32_t MD5_Update(int32_t * a1, int8_t * a2, int32_t * a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t * a10, int8_t * a11) {
  393.     int32_t v1 = g14; // 0x8049430
  394.     int32_t v2 = g16; // 0x8049431
  395.     int32_t v3 = g15; // 0x8049432
  396.     int32_t v4 = g13; // 0x8049433
  397.     int32_t v5 = (int32_t)a3; // 0x8049437
  398.     g13 = v5;
  399.     int32_t v6 = (int32_t)a1; // 0x804943b
  400.     g15 = v6;
  401.     if (a3 == NULL) {
  402.         // 0x8049505
  403.         g17 = false;
  404.         g13 = v4;
  405.         g15 = v3;
  406.         g16 = v2;
  407.         g14 = v1;
  408.         return 1;
  409.     }
  410.     int32_t * v7 = (int32_t *)(v6 + 16); // bp+117
  411.     uint32_t v8 = *v7; // 0x8049447
  412.     int32_t v9 = *(int32_t *)(v6 + 20); // 0x804944a
  413.     g11 = v9;
  414.     int32_t v10 = v8 + 8 * v5; // 0x804944d
  415.     if (v8 > v10) {
  416.         // 0x8049454
  417.         g11 = v9 + 1;
  418.         // branch -> 0x8049457
  419.     }
  420.     // 0x8049457
  421.     *v7 = v10;
  422.     g10 = *(int32_t *)(g15 + 88);
  423.     *(int32_t *)(g15 + 20) = g11 + g13 / 0x20000000;
  424.     int32_t v11 = g10; // 0x8049467
  425.     int32_t * v12;
  426.     int32_t * v13;
  427.     uint32_t v14; // 0x80494f8
  428.     int32_t v15; // 0x8049501
  429.     int32_t v16; // 0x804955d
  430.     int32_t v17; // 0x804951c
  431.     int32_t v18; // 0x8049544
  432.     if (v11 == 0) {
  433.         // 0x80494f8
  434.         v14 = g13;
  435.         if (v14 < 64) {
  436.             v15 = v14;
  437.             // 0x8049501
  438.             if (v15 != 0) {
  439.                 // 0x8049518
  440.                 g10 = (int32_t)v12;
  441.                 v17 = g15;
  442.                 g15 = v17 + 24;
  443.                 *(int32_t *)(v17 + 88) = v15;
  444.                 memcpy((int32_t *)g15, (int32_t *)g10, g13);
  445.                 g17 = false;
  446.                 g13 = a7;
  447.                 g15 = a8;
  448.                 g16 = a9;
  449.                 g14 = (int32_t)a10;
  450.                 return 1;
  451.             }
  452.         } else {
  453.             v18 = v14 / 64;
  454.             // 0x8049540
  455.             g13 = v14 - 64 * v18;
  456.             md5_block_asm_data_order((struct struct_2 *)g15, (struct struct_3 *)v13, v18);
  457.             v16 = g13;
  458.             if (v16 != 0) {
  459.                 // 0x8049518
  460.                 g10 = (int32_t)(int32_t *)v18;
  461.                 v17 = g15;
  462.                 g15 = v17 + 24;
  463.                 *(int32_t *)(v17 + 88) = v16;
  464.                 memcpy((int32_t *)g15, (int32_t *)g10, g13);
  465.                 g17 = false;
  466.                 g13 = a7;
  467.                 g15 = a8;
  468.                 g16 = a9;
  469.                 g14 = (int32_t)(int32_t *)0x8049559;
  470.                 return 1;
  471.             }
  472.         }
  473.         // 0x8049505
  474.         g17 = false;
  475.         g13 = v4;
  476.         g15 = v3;
  477.         g16 = v2;
  478.         g14 = v1;
  479.         return 1;
  480.     }
  481.     uint32_t v19 = g13; // 0x804946f
  482.     int32_t v20 = g15 + 24; // 0x8049472
  483.     if (v19 <= 63) {
  484.         // 0x8049477
  485.         if (v19 + v11 < 64) {
  486.             // 0x8049588
  487.             g10 = (int32_t)v13;
  488.             memcpy((int32_t *)(v20 + v11), v13, v19);
  489.             int32_t * v21 = (int32_t *)(g15 + 88); // bp+162
  490.             *v21 = g13 + *v21;
  491.             // branch -> 0x8049505
  492.             // 0x8049505
  493.             g17 = false;
  494.             g13 = v4;
  495.             g15 = v3;
  496.             g16 = v2;
  497.             g14 = v1;
  498.             return 1;
  499.         }
  500.     }
  501.     int32_t v22 = 64 - v11; // 0x804948c
  502.     g13 = v19 - v22;
  503.     memcpy((int32_t *)(v20 + v11), (int32_t *)a2, v22);
  504.     md5_block_asm_data_order((struct struct_2 *)g15, (struct struct_3 *)v20, 1);
  505.     g12 = 64;
  506.     *(int32_t *)(g15 + 88) = 0;
  507.     int32_t v23; // 0x80494de
  508.     int8_t * v24; // 0x1704
  509.     int32_t v25; // 0x80495c1
  510.     if ((int8_t *)v20 == (int8_t *)1) {
  511.         // 0x80494d2
  512.         // branch -> 0x80495b8
  513.         // 0x80495b8
  514.         *(int16_t *)(int8_t *)1 = 0;
  515.         v25 = g12 - 2;
  516.         g12 = v25;
  517.         v23 = v25;
  518.         v24 = (int8_t *)(v20 + 2);
  519.         // branch -> 0x80494de
  520.     } else {
  521.         // 0x80494d2
  522.         *(int8_t *)(g15 + 24) = 0;
  523.         int32_t v26 = g15 + 25; // 0x80495ac
  524.         int8_t * v27 = (int8_t *)v26; // bp+167
  525.         int32_t v28 = g12 & -256 | 63; // 0x80495af
  526.         g12 = v28;
  527.         if (v27 != (int8_t *)2) {
  528.             // 0x80495b8
  529.             *(int16_t *)v27 = 0;
  530.             v25 = g12 - 2;
  531.             g12 = v25;
  532.             v23 = v25;
  533.             v24 = (int8_t *)(v26 + 2);
  534.             // branch -> 0x80494de
  535.         } else {
  536.             v23 = v28;
  537.             v24 = (int8_t *)2;
  538.         }
  539.     }
  540.     // 0x80494de
  541.     g11 = v23;
  542.     g17 = (v23 & 2) == 0;
  543.     memset((int32_t *)v24, 0, v23 / 4);
  544.     uint32_t v29; // 0x8049579
  545.     if (g17) {
  546.         int32_t v30 = g12 % 2; // 0x80494ec
  547.         g12 = v30;
  548.         if (v30 != 0) {
  549.             // 0x8049576
  550.             *v24 = 0;
  551.             v29 = g13;
  552.             if (v29 < 64) {
  553.                 v15 = v29;
  554.                 // 0x8049501
  555.                 if (v15 != 0) {
  556.                     // 0x8049518
  557.                     g10 = (int32_t)v12;
  558.                     v17 = g15;
  559.                     g15 = v17 + 24;
  560.                     *(int32_t *)(v17 + 88) = v15;
  561.                     memcpy((int32_t *)g15, (int32_t *)g10, g13);
  562.                     g17 = false;
  563.                     g13 = a7;
  564.                     g15 = a8;
  565.                     g16 = a9;
  566.                     g14 = (int32_t)a10;
  567.                     return 1;
  568.                 }
  569.             } else {
  570.                 v18 = v29 / 64;
  571.                 // 0x8049540
  572.                 g13 = v29 - 64 * v18;
  573.                 md5_block_asm_data_order((struct struct_2 *)g15, (struct struct_3 *)v13, v18);
  574.                 v16 = g13;
  575.                 if (v16 != 0) {
  576.                     // 0x8049518
  577.                     g10 = (int32_t)(int32_t *)v18;
  578.                     v17 = g15;
  579.                     g15 = v17 + 24;
  580.                     *(int32_t *)(v17 + 88) = v16;
  581.                     memcpy((int32_t *)g15, (int32_t *)g10, g13);
  582.                     g17 = false;
  583.                     g13 = a7;
  584.                     g15 = a8;
  585.                     g16 = a9;
  586.                     g14 = (int32_t)(int32_t *)0x8049559;
  587.                     return 1;
  588.                 }
  589.             }
  590.             // 0x8049505
  591.             g17 = false;
  592.             g13 = v4;
  593.             g15 = v3;
  594.             g16 = v2;
  595.             g14 = v1;
  596.             return 1;
  597.         }
  598.     } else {
  599.         // 0x8049568
  600.         *(int16_t *)v24 = 0;
  601.         int32_t v31 = g12 % 2; // 0x8049571
  602.         g12 = v31;
  603.         if (v31 != 0) {
  604.             // 0x8049576
  605.             *(int8_t *)((int32_t)v24 + 2) = 0;
  606.             v29 = g13;
  607.             if (v29 < 64) {
  608.                 v15 = v29;
  609.                 // 0x8049501
  610.                 if (v15 != 0) {
  611.                     // 0x8049518
  612.                     g10 = (int32_t)v12;
  613.                     v17 = g15;
  614.                     g15 = v17 + 24;
  615.                     *(int32_t *)(v17 + 88) = v15;
  616.                     memcpy((int32_t *)g15, (int32_t *)g10, g13);
  617.                     g17 = false;
  618.                     g13 = a7;
  619.                     g15 = a8;
  620.                     g16 = a9;
  621.                     g14 = (int32_t)a10;
  622.                     return 1;
  623.                 }
  624.             } else {
  625.                 v18 = v29 / 64;
  626.                 // 0x8049540
  627.                 g13 = v29 - 64 * v18;
  628.                 md5_block_asm_data_order((struct struct_2 *)g15, (struct struct_3 *)v13, v18);
  629.                 v16 = g13;
  630.                 if (v16 != 0) {
  631.                     // 0x8049518
  632.                     g10 = (int32_t)(int32_t *)v18;
  633.                     v17 = g15;
  634.                     g15 = v17 + 24;
  635.                     *(int32_t *)(v17 + 88) = v16;
  636.                     memcpy((int32_t *)g15, (int32_t *)g10, g13);
  637.                     g17 = false;
  638.                     g13 = a7;
  639.                     g15 = a8;
  640.                     g16 = a9;
  641.                     g14 = (int32_t)(int32_t *)0x8049559;
  642.                     return 1;
  643.                 }
  644.             }
  645.             // 0x8049505
  646.             g17 = false;
  647.             g13 = v4;
  648.             g15 = v3;
  649.             g16 = v2;
  650.             g14 = v1;
  651.             return 1;
  652.         }
  653.     }
  654.     // 0x80494f8
  655.     v14 = g13;
  656.     if (v14 < 64) {
  657.         v15 = v14;
  658.         // 0x8049501
  659.         if (v15 != 0) {
  660.             // 0x8049518
  661.             g10 = (int32_t)v12;
  662.             v17 = g15;
  663.             g15 = v17 + 24;
  664.             *(int32_t *)(v17 + 88) = v15;
  665.             memcpy((int32_t *)g15, (int32_t *)g10, g13);
  666.             g17 = false;
  667.             g13 = a7;
  668.             g15 = a8;
  669.             g16 = a9;
  670.             g14 = (int32_t)a10;
  671.             return 1;
  672.         }
  673.     } else {
  674.         v18 = v14 / 64;
  675.         // 0x8049540
  676.         g13 = v14 - 64 * v18;
  677.         md5_block_asm_data_order((struct struct_2 *)g15, (struct struct_3 *)v13, v18);
  678.         v16 = g13;
  679.         if (v16 != 0) {
  680.             // 0x8049518
  681.             g10 = (int32_t)(int32_t *)v18;
  682.             v17 = g15;
  683.             g15 = v17 + 24;
  684.             *(int32_t *)(v17 + 88) = v16;
  685.             memcpy((int32_t *)g15, (int32_t *)g10, g13);
  686.             g17 = false;
  687.             g13 = a7;
  688.             g15 = a8;
  689.             g16 = a9;
  690.             g14 = (int32_t)(int32_t *)0x8049559;
  691.             return 1;
  692.         }
  693.     }
  694.     // 0x8049505
  695.     g17 = false;
  696.     g13 = v4;
  697.     g15 = v3;
  698.     g16 = v2;
  699.     g14 = v1;
  700.     return 1;
  701. }
  702.  
  703. int32_t MD5_Final(int8_t * a1, struct struct_0 * a2) {
  704.     struct struct_0 * v1 = a2;
  705.     int32_t v2 = (int32_t)a2; // 0x8049606
  706.     int32_t v3 = (int32_t)a1;
  707.     int32_t v4 = a2->e10; // 0x804960e
  708.     int32_t v5 = v2 + 24; // 0x8049611
  709.     *(int8_t *)(v4 + v5) = -128;
  710.     int32_t * v6;
  711.     if (v4 > 55) {
  712.         // 0x80496c8
  713.         function_80482e0();
  714.         v1 = (struct struct_0 *)1;
  715.         md5_block_asm_data_order((struct struct_2 *)v2, (struct struct_3 *)v5, 1);
  716.         v6 = (int32_t *)0x80496f9;
  717.         // branch -> 0x804962c
  718.     } else {
  719.         // 0x8049625
  720.         v6 = (int32_t *)g16;
  721.         // branch -> 0x804962c
  722.     }
  723.     // 0x804962c
  724.     function_80482e0();
  725.     v1->e8 = v1->e4;
  726.     v1->e9 = v1->e5;
  727.     md5_block_asm_data_order((struct struct_2 *)v2, (struct struct_3 *)v5, 1);
  728.     g12 = 64;
  729.     v1->e10 = 0;
  730.     int32_t v7; // 0x8049686
  731.     int32_t v8; // 0x804969d
  732.     int32_t v9; // 0x80496b5
  733.     int32_t v10; // 0x8049711
  734.     int8_t * v11; // 0x2193
  735.     int8_t * v12; // 0x2194
  736.     if ((int8_t *)v5 == (int8_t *)1) {
  737.         // 0x804967a
  738.         // branch -> 0x8049708
  739.         // 0x8049708
  740.         *(int16_t *)(int8_t *)1 = 0;
  741.         v10 = g12 - 2;
  742.         g12 = v10;
  743.         v7 = v10;
  744.         v12 = (int8_t *)(v5 + 2);
  745.         // branch -> 0x8049686
  746.         // 0x8049686
  747.         g11 = v7;
  748.         g17 = (v7 & 2) == 0;
  749.         memset((int32_t *)v12, 0, v7 / 4);
  750.         v11 = v12;
  751.         if (!g17) {
  752.             // 0x8049694
  753.             *(int16_t *)v12 = 0;
  754.             v11 = (int8_t *)((int32_t)v12 + 2);
  755.             // branch -> 0x804969d
  756.         }
  757.         // 0x804969d
  758.         v8 = g12 % 2;
  759.         g12 = v8;
  760.         if (v8 != 0) {
  761.             // 0x80496a2
  762.             *v11 = 0;
  763.             // branch -> 0x80496a5
  764.         }
  765.         // 0x80496a5
  766.         *(int32_t *)v3 = *(int32_t *)v2;
  767.         *(int32_t *)(v3 + 4) = v1->e1;
  768.         *(int32_t *)(v3 + 8) = v1->e2;
  769.         v9 = v1->e3;
  770.         g10 = v9;
  771.         *(int32_t *)(v3 + 12) = v9;
  772.         g17 = false;
  773.         g16 = (int32_t)v6;
  774.         return 1;
  775.     }
  776.     // 0x804967a
  777.     v1->e6 = 0;
  778.     int32_t v13 = v2 + 25; // 0x8049724
  779.     int8_t * v14 = (int8_t *)v13; // bp+219
  780.     int32_t v15 = g12 & -256 | 63; // 0x8049727
  781.     g12 = v15;
  782.     if (v14 != (int8_t *)2) {
  783.         // 0x8049708
  784.         *(int16_t *)v14 = 0;
  785.         v10 = g12 - 2;
  786.         g12 = v10;
  787.         v7 = v10;
  788.         v12 = (int8_t *)(v13 + 2);
  789.         // branch -> 0x8049686
  790.     } else {
  791.         v7 = v15;
  792.         v12 = (int8_t *)2;
  793.     }
  794.     // 0x8049686
  795.     g11 = v7;
  796.     g17 = (v7 & 2) == 0;
  797.     memset((int32_t *)v12, 0, v7 / 4);
  798.     v11 = v12;
  799.     if (!g17) {
  800.         // 0x8049694
  801.         *(int16_t *)v12 = 0;
  802.         v11 = (int8_t *)((int32_t)v12 + 2);
  803.         // branch -> 0x804969d
  804.     }
  805.     // 0x804969d
  806.     v8 = g12 % 2;
  807.     g12 = v8;
  808.     if (v8 != 0) {
  809.         // 0x80496a2
  810.         *v11 = 0;
  811.         // branch -> 0x80496a5
  812.     }
  813.     // 0x80496a5
  814.     *(int32_t *)v3 = *(int32_t *)v2;
  815.     *(int32_t *)(v3 + 4) = v1->e1;
  816.     *(int32_t *)(v3 + 8) = v1->e2;
  817.     v9 = v1->e3;
  818.     g10 = v9;
  819.     *(int32_t *)(v3 + 12) = v9;
  820.     g17 = false;
  821.     g16 = (int32_t)v6;
  822.     return 1;
  823. }
  824.  
  825. int32_t MD5_Init(struct struct_1 * a1) {
  826.     int32_t v1 = (int32_t)a1; // 0x8049732
  827.     g12 = v1;
  828.     int32_t v2 = 92;
  829.     int32_t v3; // 0x804974a
  830.     int32_t v4; // 0x8049761
  831.     int8_t * v5; // 0x2353
  832.     int8_t * v6; // 0x2354
  833.     int8_t * v7; // 0x2355
  834.     if (a1 == (struct struct_1 *)1) {
  835.         // 0x8049742
  836.         if (&a1->e0 == (int8_t *)2) {
  837.             v3 = 92;
  838.             v7 = (int8_t *)2;
  839.             // 0x804974a
  840.             g11 = v3;
  841.             g17 = (v3 & 2) == 0;
  842.             memset((int32_t *)v7, 0, v3 / 4);
  843.             v6 = v7;
  844.             if (!g17) {
  845.                 // 0x8049758
  846.                 g10 = 0;
  847.                 *(int16_t *)v7 = 0;
  848.                 v6 = (int8_t *)((int32_t)v7 + 2);
  849.                 // branch -> 0x8049761
  850.             }
  851.             // 0x8049761
  852.             v4 = v2 % 2;
  853.             g17 = v4 == 0;
  854.             if (v4 != 0) {
  855.                 // 0x8049766
  856.                 *v6 = 0;
  857.                 // branch -> 0x8049769
  858.             }
  859.             // 0x8049769
  860.             *(int32_t *)g12 = 0x67452301;
  861.             a1->e1 = -0x10325477;
  862.             a1->e2 = -0x67452302;
  863.             a1->e3 = 0x10325476;
  864.             return 1;
  865.         }
  866.         v5 = &a1->e0;
  867.     } else {
  868.         int32_t v8 = v1 + 1; // 0x8049790
  869.         int8_t * v9 = (int8_t *)v8; // bp+230
  870.         v2 = 91;
  871.         a1->e0 = 0;
  872.         if (v8 == 2) {
  873.             // 0x8049790
  874.             v3 = v2;
  875.             v7 = v9;
  876.             // branch -> 0x804974a
  877.             // 0x804974a
  878.             g11 = v3;
  879.             g17 = (v3 & 2) == 0;
  880.             memset((int32_t *)v7, 0, v3 / 4);
  881.             v6 = v7;
  882.             if (!g17) {
  883.                 // 0x8049758
  884.                 g10 = 0;
  885.                 *(int16_t *)v7 = 0;
  886.                 v6 = (int8_t *)((int32_t)v7 + 2);
  887.                 // branch -> 0x8049761
  888.             }
  889.             // 0x8049761
  890.             v4 = v2 % 2;
  891.             g17 = v4 == 0;
  892.             if (v4 != 0) {
  893.                 // 0x8049766
  894.                 *v6 = 0;
  895.                 // branch -> 0x8049769
  896.             }
  897.             // 0x8049769
  898.             *(int32_t *)g12 = 0x67452301;
  899.             a1->e1 = -0x10325477;
  900.             a1->e2 = -0x67452302;
  901.             a1->e3 = 0x10325476;
  902.             return 1;
  903.         }
  904.         v5 = v9;
  905.     }
  906.     // 0x80497a0
  907.     *(int16_t *)v5 = 0;
  908.     int32_t v10 = v2 - 2; // 0x80497a9
  909.     v3 = v10;
  910.     v7 = (int8_t *)((int32_t)v5 + 2);
  911.     // branch -> 0x804974a
  912.     // 0x804974a
  913.     g11 = v3;
  914.     g17 = (v3 & 2) == 0;
  915.     memset((int32_t *)v7, 0, v3 / 4);
  916.     v6 = v7;
  917.     if (!g17) {
  918.         // 0x8049758
  919.         g10 = 0;
  920.         *(int16_t *)v7 = 0;
  921.         v6 = (int8_t *)((int32_t)v7 + 2);
  922.         // branch -> 0x8049761
  923.     }
  924.     // 0x8049761
  925.     v4 = v10 % 2;
  926.     g17 = v4 == 0;
  927.     if (v4 != 0) {
  928.         // 0x8049766
  929.         *v6 = 0;
  930.         // branch -> 0x8049769
  931.     }
  932.     // 0x8049769
  933.     *(int32_t *)g12 = 0x67452301;
  934.     a1->e1 = -0x10325477;
  935.     a1->e2 = -0x67452302;
  936.     a1->e3 = 0x10325476;
  937.     return 1;
  938. }
  939.  
  940. int32_t md5_block_asm_data_order(struct struct_2 * a1, struct struct_3 * a2, int32_t a3) {
  941.     struct struct_3 * v1 = a2;
  942.     int32_t v2 = a2->e0;
  943.     int32_t v3 = v2;
  944.     int32_t result = 64 * a3 - 64 + v2; // 0x80497c5
  945.     int32_t v4 = a1->e1; // 0x80497da
  946.     int32_t v5 = a1->e3; // 0x80497d8
  947.     int32_t v6 = a1->e2; // 0x80497d4
  948.     uint32_t v7 = a1->e0 - 0x28955b88 + a2->e0 + ((v6 ^ v5) & v4 ^ v5); // 0x80497e5
  949.     int32_t v8 = a2->e0;
  950.     int32_t v9 = (128 * v7 | v7 / 0x2000000) + v4; // 0x80497ef
  951.     uint32_t v10 = v5 - 0x173848aa + v8 + (v9 & (v6 ^ v4) ^ v6); // 0x80497fe
  952.     int32_t v11 = a2->e0;
  953.     int32_t v12 = (0x1000 * v10 | v10 / 0x100000) + v9; // 0x8049808
  954.     uint32_t v13 = v6 + 0x242070db + v11 + (v12 & (v9 ^ v4) ^ v4); // 0x8049817
  955.     int32_t v14 = a2->e0;
  956.     int32_t v15 = (0x20000 * v13 | v13 / 0x8000) + v12; // 0x8049821
  957.     uint32_t v16 = v4 - 0x3e423112 + v14 + (v15 & (v12 ^ v9) ^ v9); // 0x8049830
  958.     int32_t v17 = a2->e0;
  959.     int32_t v18 = (0x400000 * v16 | v16 / 1024) + v15; // 0x804983a
  960.     uint32_t v19 = v9 - 0xa83f051 + v17 + (v18 & (v15 ^ v12) ^ v12); // 0x8049849
  961.     int32_t v20 = a2->e0;
  962.     int32_t v21 = (128 * v19 | v19 / 0x2000000) + v18; // 0x8049853
  963.     uint32_t v22 = v20 + 0x4787c62a + v12 + (v21 & (v18 ^ v15) ^ v15); // 0x8049862
  964.     int32_t v23 = a2->e0;
  965.     int32_t v24 = (0x1000 * v22 | v22 / 0x100000) + v21; // 0x804986c
  966.     uint32_t v25 = v23 - 0x57cfb9ed + v15 + (v24 & (v21 ^ v18) ^ v18); // 0x804987b
  967.     int32_t v26 = a2->e0;
  968.     int32_t v27 = (0x20000 * v25 | v25 / 0x8000) + v24; // 0x8049885
  969.     uint32_t v28 = v26 - 0x2b96aff + v18 + (v27 & (v24 ^ v21) ^ v21); // 0x8049894
  970.     int32_t v29 = a2->e0;
  971.     int32_t v30 = (0x400000 * v28 | v28 / 1024) + v27; // 0x804989e
  972.     uint32_t v31 = v29 + 0x698098d8 + v21 + (v30 & (v27 ^ v24) ^ v24); // 0x80498ad
  973.     int32_t v32 = a2->e0;
  974.     int32_t v33 = (128 * v31 | v31 / 0x2000000) + v30; // 0x80498b7
  975.     uint32_t v34 = v32 - 0x74bb0851 + v24 + (v33 & (v30 ^ v27) ^ v27); // 0x80498c6
  976.     int32_t v35 = a2->e0;
  977.     int32_t v36 = (0x1000 * v34 | v34 / 0x100000) + v33; // 0x80498d0
  978.     uint32_t v37 = v35 - 0xa44f + v27 + (v36 & (v33 ^ v30) ^ v30); // 0x80498df
  979.     int32_t v38 = a2->e0;
  980.     int32_t v39 = (0x20000 * v37 | v37 / 0x8000) + v36; // 0x80498e9
  981.     uint32_t v40 = v38 - 0x76a32842 + v30 + (v39 & (v36 ^ v33) ^ v33); // 0x80498f8
  982.     int32_t v41 = v1->e0;
  983.     int32_t v42 = (0x400000 * v40 | v40 / 1024) + v39; // 0x8049902
  984.     uint32_t v43 = v41 + 0x6b901122 + v33 + (v42 & (v39 ^ v36) ^ v36); // 0x8049911
  985.     int32_t v44 = v1->e0;
  986.     int32_t v45 = (128 * v43 | v43 / 0x2000000) + v42; // 0x804991b
  987.     uint32_t v46 = v44 - 0x2678e6d + v36 + (v45 & (v42 ^ v39) ^ v39); // 0x804992a
  988.     int32_t v47 = v1->e0;
  989.     int32_t v48 = (0x1000 * v46 | v46 / 0x100000) + v45; // 0x8049934
  990.     uint32_t v49 = v47 - 0x5986bc72 + v39 + (v48 & (v45 ^ v42) ^ v42); // 0x8049943
  991.     int32_t v50 = v1->e0;
  992.     int32_t v51 = (0x20000 * v49 | v49 / 0x8000) + v48; // 0x804994d
  993.     uint32_t v52 = v50 + 0x49b40821 + v42 + (v51 & (v48 ^ v45) ^ v45); // 0x804995c
  994.     int32_t v53 = (0x400000 * v52 | v52 / 1024) + v51; // 0x8049966
  995.     int32_t v54 = (v53 ^ v51) & v48; // 0x8049971
  996.     uint32_t v55 = (v54 ^ v51) + v1->e0 - 0x9e1da9e + v45; // 0x8049978
  997.     int32_t v56 = (32 * v55 | v55 / 0x8000000) + v53; // 0x804997f
  998.     int32_t v57 = (v56 ^ v53) & v51; // 0x804998a
  999.     uint32_t v58 = (v57 ^ v53) + v1->e0 - 0x3fbf4cc0 + v48; // 0x8049991
  1000.     int32_t v59 = (512 * v58 | v58 / 0x800000) + v56; // 0x8049998
  1001.     int32_t v60 = (v59 ^ v56) & v53; // 0x80499a3
  1002.     uint32_t v61 = (v60 ^ v56) + v1->e0 + 0x265e5a51 + v51; // 0x80499a9
  1003.     int32_t v62 = (0x4000 * v61 | v61 / 0x40000) + v59; // 0x80499b0
  1004.     int32_t v63 = (v62 ^ v59) & v56; // 0x80499bb
  1005.     uint32_t v64 = (v63 ^ v59) + v1->e0 - 0x16493856 + v53; // 0x80499c2
  1006.     int32_t v65 = (0x100000 * v64 | v64 / 0x1000) + v62; // 0x80499c9
  1007.     int32_t v66 = (v65 ^ v62) & v59; // 0x80499d4
  1008.     uint32_t v67 = (v66 ^ v62) + v1->e0 - 0x29d0efa3 + v56; // 0x80499db
  1009.     int32_t v68 = (32 * v67 | v67 / 0x8000000) + v65; // 0x80499e2
  1010.     int32_t v69 = (v68 ^ v65) & v62; // 0x80499ed
  1011.     uint32_t v70 = (v69 ^ v65) + v1->e0 + 0x2441453 + v59; // 0x80499f4
  1012.     int32_t v71 = (512 * v70 | v70 / 0x800000) + v68; // 0x80499fb
  1013.     int32_t v72 = (v71 ^ v68) & v65; // 0x8049a06
  1014.     uint32_t v73 = (v72 ^ v68) + v1->e0 - 0x275e197f + v62; // 0x8049a0d
  1015.     int32_t v74 = (0x4000 * v73 | v73 / 0x40000) + v71; // 0x8049a14
  1016.     int32_t v75 = (v74 ^ v71) & v68; // 0x8049a1f
  1017.     uint32_t v76 = (v75 ^ v71) + v1->e0 - 0x182c0438 + v65; // 0x8049a26
  1018.     int32_t v77 = (0x100000 * v76 | v76 / 0x1000) + v74; // 0x8049a2d
  1019.     int32_t v78 = (v77 ^ v74) & v71; // 0x8049a38
  1020.     uint32_t v79 = (v78 ^ v74) + v1->e0 + 0x21e1cde6 + v68; // 0x8049a3f
  1021.     int32_t v80 = (32 * v79 | v79 / 0x8000000) + v77; // 0x8049a46
  1022.     int32_t v81 = (v80 ^ v77) & v74; // 0x8049a51
  1023.     uint32_t v82 = (v81 ^ v77) + v1->e0 - 0x3cc8f82a + v71; // 0x8049a58
  1024.     int32_t v83 = (512 * v82 | v82 / 0x800000) + v80; // 0x8049a5f
  1025.     int32_t v84 = (v83 ^ v80) & v77; // 0x8049a6a
  1026.     uint32_t v85 = (v84 ^ v80) + v1->e0 - 0xb2af279 + v74; // 0x8049a71
  1027.     int32_t v86 = (0x4000 * v85 | v85 / 0x40000) + v83; // 0x8049a78
  1028.     int32_t v87 = (v86 ^ v83) & v80; // 0x8049a83
  1029.     uint32_t v88 = (v87 ^ v83) + v1->e0 + 0x455a14ed + v77; // 0x8049a8a
  1030.     int32_t v89 = (0x100000 * v88 | v88 / 0x1000) + v86; // 0x8049a91
  1031.     int32_t v90 = (v89 ^ v86) & v83; // 0x8049a9c
  1032.     uint32_t v91 = (v90 ^ v86) + v1->e0 - 0x561c16fb + v80; // 0x8049aa3
  1033.     int32_t v92 = (32 * v91 | v91 / 0x8000000) + v89; // 0x8049aaa
  1034.     int32_t v93 = (v92 ^ v89) & v86; // 0x8049ab5
  1035.     uint32_t v94 = (v93 ^ v89) + v1->e0 - 0x3105c08 + v83; // 0x8049abc
  1036.     int32_t v95 = (512 * v94 | v94 / 0x800000) + v92; // 0x8049ac3
  1037.     int32_t v96 = (v95 ^ v92) & v89; // 0x8049ace
  1038.     uint32_t v97 = (v96 ^ v92) + v1->e0 + 0x676f02d9 + v86; // 0x8049ad5
  1039.     int32_t v98 = (0x4000 * v97 | v97 / 0x40000) + v95; // 0x8049adc
  1040.     int32_t v99 = v1->e0 - 0x72d5b376 + v89; // 0x8049ade
  1041.     int32_t v100 = v98 ^ v95; // 0x8049ae5
  1042.     uint32_t v101 = (v100 & v92 ^ v95) + v99; // 0x8049aee
  1043.     int32_t v102 = (0x100000 * v101 | v101 / 0x1000) + v98; // 0x8049af5
  1044.     uint32_t v103 = v1->e0 - 0x5c6be + v92 + (v102 ^ v100); // 0x8049b02
  1045.     int32_t v104 = (16 * v103 | v103 / 0x10000000) + v102; // 0x8049b13
  1046.     int32_t v105 = v104 ^ v102; // 0x8049b15
  1047.     uint32_t v106 = (v105 ^ v98) + v1->e0 - 0x788e097f + v95; // 0x8049b1c
  1048.     int32_t v107 = (2048 * v106 | v106 / 0x200000) + v104; // 0x8049b23
  1049.     uint32_t v108 = v1->e0 + 0x6d9d6122 + v98 + (v107 ^ v105); // 0x8049b30
  1050.     int32_t v109 = (0x10000 * v108 | v108 / 0x10000) + v107; // 0x8049b41
  1051.     int32_t v110 = v109 ^ v107; // 0x8049b43
  1052.     uint32_t v111 = (v110 ^ v104) + v1->e0 - 0x21ac7f4 + v102; // 0x8049b4a
  1053.     int32_t v112 = (0x800000 * v111 | v111 / 512) + v109; // 0x8049b51
  1054.     uint32_t v113 = v1->e0 - 0x5b4115bc + v104 + (v112 ^ v110); // 0x8049b5e
  1055.     int32_t v114 = (16 * v113 | v113 / 0x10000000) + v112; // 0x8049b6f
  1056.     int32_t v115 = v114 ^ v112; // 0x8049b71
  1057.     uint32_t v116 = (v115 ^ v109) + v1->e0 + 0x4bdecfa9 + v107; // 0x8049b78
  1058.     int32_t v117 = (2048 * v116 | v116 / 0x200000) + v114; // 0x8049b7f
  1059.     uint32_t v118 = v1->e0 - 0x944b4a0 + v109 + (v117 ^ v115); // 0x8049b8c
  1060.     int32_t v119 = (0x10000 * v118 | v118 / 0x10000) + v117; // 0x8049b9d
  1061.     int32_t v120 = v119 ^ v117; // 0x8049b9f
  1062.     uint32_t v121 = (v120 ^ v114) + v1->e0 - 0x41404390 + v112; // 0x8049ba6
  1063.     int32_t v122 = (0x800000 * v121 | v121 / 512) + v119; // 0x8049bad
  1064.     uint32_t v123 = v1->e0 + 0x289b7ec6 + v114 + (v122 ^ v120); // 0x8049bba
  1065.     int32_t v124 = (16 * v123 | v123 / 0x10000000) + v122; // 0x8049bca
  1066.     int32_t v125 = v124 ^ v122; // 0x8049bcc
  1067.     uint32_t v126 = (v125 ^ v119) + v1->e0 - 0x155ed806 + v117; // 0x8049bd3
  1068.     int32_t v127 = (2048 * v126 | v126 / 0x200000) + v124; // 0x8049bda
  1069.     uint32_t v128 = v1->e0 - 0x2b10cf7b + v119 + (v127 ^ v125); // 0x8049be7
  1070.     int32_t v129 = (0x10000 * v128 | v128 / 0x10000) + v127; // 0x8049bf8
  1071.     int32_t v130 = v129 ^ v127; // 0x8049bfa
  1072.     uint32_t v131 = (v130 ^ v124) + v1->e0 + 0x4881d05 + v122; // 0x8049c01
  1073.     int32_t v132 = (0x800000 * v131 | v131 / 512) + v129; // 0x8049c08
  1074.     uint32_t v133 = v1->e0 - 0x262b2fc7 + v124 + (v132 ^ v130); // 0x8049c15
  1075.     int32_t v134 = (16 * v133 | v133 / 0x10000000) + v132; // 0x8049c26
  1076.     int32_t v135 = v134 ^ v132; // 0x8049c28
  1077.     uint32_t v136 = (v135 ^ v129) + v1->e0 - 0x1924661b + v127; // 0x8049c2f
  1078.     int32_t v137 = (2048 * v136 | v136 / 0x200000) + v134; // 0x8049c36
  1079.     uint32_t v138 = v1->e0 + 0x1fa27cf8 + v129 + (v137 ^ v135); // 0x8049c43
  1080.     int32_t v139 = (0x10000 * v138 | v138 / 0x10000) + v137; // 0x8049c54
  1081.     int32_t v140 = v137 ^ v134 ^ v139; // 0x8049c58
  1082.     uint32_t v141 = v140 + v1->e0 - 0x3b53a99b + v132; // 0x8049c5c
  1083.     int32_t v142 = (0x800000 * v141 | v141 / 512) + v139; // 0x8049c66
  1084.     int32_t v143 = (v142 | -1 - v137) ^ v139; // 0x8049c73
  1085.     uint32_t v144 = v143 + v1->e0 - 0xbd6ddbc + v134; // 0x8049c78
  1086.     int32_t v145 = (64 * v144 | v144 / 0x4000000) + v142; // 0x8049c84
  1087.     int32_t v146 = (v145 | -1 - v139) ^ v142; // 0x8049c8f
  1088.     uint32_t v147 = v146 + v1->e0 + 0x432aff97 + v137; // 0x8049c94
  1089.     int32_t v148 = (1024 * v147 | v147 / 0x400000) + v145; // 0x8049ca0
  1090.     int32_t v149 = (v148 | -1 - v142) ^ v145; // 0x8049cab
  1091.     uint32_t v150 = v149 + v1->e0 - 0x546bdc59 + v139; // 0x8049cb0
  1092.     int32_t v151 = (0x8000 * v150 | v150 / 0x20000) + v148; // 0x8049cbc
  1093.     int32_t v152 = (v151 | -1 - v145) ^ v148; // 0x8049cc7
  1094.     uint32_t v153 = v152 + v1->e0 - 0x36c5fc7 + v142; // 0x8049ccc
  1095.     int32_t v154 = (0x200000 * v153 | v153 / 2048) + v151; // 0x8049cd8
  1096.     int32_t v155 = (v154 | -1 - v148) ^ v151; // 0x8049ce3
  1097.     uint32_t v156 = v155 + v1->e0 + 0x655b59c3 + v145; // 0x8049ce8
  1098.     int32_t v157 = (64 * v156 | v156 / 0x4000000) + v154; // 0x8049cf4
  1099.     int32_t v158 = (v157 | -1 - v151) ^ v154; // 0x8049cff
  1100.     uint32_t v159 = v158 + v1->e0 - 0x70f3336e + v148; // 0x8049d04
  1101.     int32_t v160 = (1024 * v159 | v159 / 0x400000) + v157; // 0x8049d10
  1102.     int32_t v161 = (v160 | -1 - v154) ^ v157; // 0x8049d1b
  1103.     uint32_t v162 = v161 + v1->e0 - 0x100b83 + v151; // 0x8049d20
  1104.     int32_t v163 = (0x8000 * v162 | v162 / 0x20000) + v160; // 0x8049d2c
  1105.     int32_t v164 = (v163 | -1 - v157) ^ v160; // 0x8049d37
  1106.     uint32_t v165 = v164 + v1->e0 - 0x7a7ba22f + v154; // 0x8049d3c
  1107.     int32_t v166 = (0x200000 * v165 | v165 / 2048) + v163; // 0x8049d48
  1108.     int32_t v167 = (v166 | -1 - v160) ^ v163; // 0x8049d53
  1109.     uint32_t v168 = v167 + v1->e0 + 0x6fa87e4f + v157; // 0x8049d58
  1110.     int32_t v169 = (64 * v168 | v168 / 0x4000000) + v166; // 0x8049d64
  1111.     int32_t v170 = (v169 | -1 - v163) ^ v166; // 0x8049d6f
  1112.     uint32_t v171 = v170 + v1->e0 - 0x1d31920 + v160; // 0x8049d74
  1113.     int32_t v172 = (1024 * v171 | v171 / 0x400000) + v169; // 0x8049d80
  1114.     int32_t v173 = (v172 | -1 - v166) ^ v169; // 0x8049d8b
  1115.     uint32_t v174 = v173 + v1->e0 - 0x5cfebcec + v163; // 0x8049d90
  1116.     int32_t v175 = (0x8000 * v174 | v174 / 0x20000) + v172; // 0x8049d9c
  1117.     int32_t v176 = (v175 | -1 - v169) ^ v172; // 0x8049da7
  1118.     uint32_t v177 = v176 + v1->e0 + 0x4e0811a1 + v166; // 0x8049dac
  1119.     int32_t v178 = (0x200000 * v177 | v177 / 2048) + v175; // 0x8049db8
  1120.     int32_t v179 = (v178 | -1 - v172) ^ v175; // 0x8049dc3
  1121.     uint32_t v180 = v179 + v1->e0 - 0x8ac817e + v169; // 0x8049dc8
  1122.     int32_t v181 = (64 * v180 | v180 / 0x4000000) + v178; // 0x8049dd4
  1123.     int32_t v182 = (v181 | -1 - v175) ^ v178; // 0x8049ddf
  1124.     uint32_t v183 = v182 + v1->e0 - 0x42c50dcb + v172; // 0x8049de4
  1125.     int32_t v184 = (1024 * v183 | v183 / 0x400000) + v181; // 0x8049df0
  1126.     int32_t v185 = (v184 | -1 - v178) ^ v181; // 0x8049dfb
  1127.     uint32_t v186 = v185 + v1->e0 + 0x2ad7d2bb + v175; // 0x8049e00
  1128.     int32_t v187 = (0x8000 * v186 | v186 / 0x20000) + v184; // 0x8049e0c
  1129.     int32_t v188 = (v187 | -1 - v181) ^ v184; // 0x8049e17
  1130.     uint32_t v189 = v1->e0 - 0x14792c6f + v178 + v188; // 0x8049e1d
  1131.     v3 += 64;
  1132.     int32_t v190 = v181 + a1->e0; // 0x8049e2a
  1133.     g10 = v190;
  1134.     int32_t v191 = (0x200000 * v189 | v189 / 2048) + v187 + a1->e1;
  1135.     g11 = v187 + a1->e2;
  1136.     g12 = v184 + a1->e3;
  1137.     a1->e0 = v190;
  1138.     a1->e1 = v191;
  1139.     a1->e2 = g11;
  1140.     a1->e3 = g12;
  1141.     // branch -> 0x80497d4
  1142.     while (result >= v3) {
  1143.         // 0x80497d4
  1144.         // 0x80497d4
  1145.         v4 = v191;
  1146.         v5 = g12;
  1147.         a2 = v1;
  1148.         v6 = g11;
  1149.         v7 = g10 - 0x28955b88 + a2->e0 + ((v6 ^ v5) & v4 ^ v5);
  1150.         v8 = a2->e0;
  1151.         v9 = (128 * v7 | v7 / 0x2000000) + v4;
  1152.         v10 = v5 - 0x173848aa + v8 + (v9 & (v6 ^ v4) ^ v6);
  1153.         v11 = a2->e0;
  1154.         v12 = (0x1000 * v10 | v10 / 0x100000) + v9;
  1155.         v13 = v6 + 0x242070db + v11 + (v12 & (v9 ^ v4) ^ v4);
  1156.         v14 = a2->e0;
  1157.         v15 = (0x20000 * v13 | v13 / 0x8000) + v12;
  1158.         v16 = v4 - 0x3e423112 + v14 + (v15 & (v12 ^ v9) ^ v9);
  1159.         v17 = a2->e0;
  1160.         v18 = (0x400000 * v16 | v16 / 1024) + v15;
  1161.         v19 = v9 - 0xa83f051 + v17 + (v18 & (v15 ^ v12) ^ v12);
  1162.         v20 = a2->e0;
  1163.         v21 = (128 * v19 | v19 / 0x2000000) + v18;
  1164.         v22 = v20 + 0x4787c62a + v12 + (v21 & (v18 ^ v15) ^ v15);
  1165.         v23 = a2->e0;
  1166.         v24 = (0x1000 * v22 | v22 / 0x100000) + v21;
  1167.         v25 = v23 - 0x57cfb9ed + v15 + (v24 & (v21 ^ v18) ^ v18);
  1168.         v26 = a2->e0;
  1169.         v27 = (0x20000 * v25 | v25 / 0x8000) + v24;
  1170.         v28 = v26 - 0x2b96aff + v18 + (v27 & (v24 ^ v21) ^ v21);
  1171.         v29 = a2->e0;
  1172.         v30 = (0x400000 * v28 | v28 / 1024) + v27;
  1173.         v31 = v29 + 0x698098d8 + v21 + (v30 & (v27 ^ v24) ^ v24);
  1174.         v32 = a2->e0;
  1175.         v33 = (128 * v31 | v31 / 0x2000000) + v30;
  1176.         v34 = v32 - 0x74bb0851 + v24 + (v33 & (v30 ^ v27) ^ v27);
  1177.         v35 = a2->e0;
  1178.         v36 = (0x1000 * v34 | v34 / 0x100000) + v33;
  1179.         v37 = v35 - 0xa44f + v27 + (v36 & (v33 ^ v30) ^ v30);
  1180.         v38 = a2->e0;
  1181.         v39 = (0x20000 * v37 | v37 / 0x8000) + v36;
  1182.         v40 = v38 - 0x76a32842 + v30 + (v39 & (v36 ^ v33) ^ v33);
  1183.         v41 = v1->e0;
  1184.         v42 = (0x400000 * v40 | v40 / 1024) + v39;
  1185.         v43 = v41 + 0x6b901122 + v33 + (v42 & (v39 ^ v36) ^ v36);
  1186.         v44 = v1->e0;
  1187.         v45 = (128 * v43 | v43 / 0x2000000) + v42;
  1188.         v46 = v44 - 0x2678e6d + v36 + (v45 & (v42 ^ v39) ^ v39);
  1189.         v47 = v1->e0;
  1190.         v48 = (0x1000 * v46 | v46 / 0x100000) + v45;
  1191.         v49 = v47 - 0x5986bc72 + v39 + (v48 & (v45 ^ v42) ^ v42);
  1192.         v50 = v1->e0;
  1193.         v51 = (0x20000 * v49 | v49 / 0x8000) + v48;
  1194.         v52 = v50 + 0x49b40821 + v42 + (v51 & (v48 ^ v45) ^ v45);
  1195.         v53 = (0x400000 * v52 | v52 / 1024) + v51;
  1196.         v54 = (v53 ^ v51) & v48;
  1197.         v55 = (v54 ^ v51) + v1->e0 - 0x9e1da9e + v45;
  1198.         v56 = (32 * v55 | v55 / 0x8000000) + v53;
  1199.         v57 = (v56 ^ v53) & v51;
  1200.         v58 = (v57 ^ v53) + v1->e0 - 0x3fbf4cc0 + v48;
  1201.         v59 = (512 * v58 | v58 / 0x800000) + v56;
  1202.         v60 = (v59 ^ v56) & v53;
  1203.         v61 = (v60 ^ v56) + v1->e0 + 0x265e5a51 + v51;
  1204.         v62 = (0x4000 * v61 | v61 / 0x40000) + v59;
  1205.         v63 = (v62 ^ v59) & v56;
  1206.         v64 = (v63 ^ v59) + v1->e0 - 0x16493856 + v53;
  1207.         v65 = (0x100000 * v64 | v64 / 0x1000) + v62;
  1208.         v66 = (v65 ^ v62) & v59;
  1209.         v67 = (v66 ^ v62) + v1->e0 - 0x29d0efa3 + v56;
  1210.         v68 = (32 * v67 | v67 / 0x8000000) + v65;
  1211.         v69 = (v68 ^ v65) & v62;
  1212.         v70 = (v69 ^ v65) + v1->e0 + 0x2441453 + v59;
  1213.         v71 = (512 * v70 | v70 / 0x800000) + v68;
  1214.         v72 = (v71 ^ v68) & v65;
  1215.         v73 = (v72 ^ v68) + v1->e0 - 0x275e197f + v62;
  1216.         v74 = (0x4000 * v73 | v73 / 0x40000) + v71;
  1217.         v75 = (v74 ^ v71) & v68;
  1218.         v76 = (v75 ^ v71) + v1->e0 - 0x182c0438 + v65;
  1219.         v77 = (0x100000 * v76 | v76 / 0x1000) + v74;
  1220.         v78 = (v77 ^ v74) & v71;
  1221.         v79 = (v78 ^ v74) + v1->e0 + 0x21e1cde6 + v68;
  1222.         v80 = (32 * v79 | v79 / 0x8000000) + v77;
  1223.         v81 = (v80 ^ v77) & v74;
  1224.         v82 = (v81 ^ v77) + v1->e0 - 0x3cc8f82a + v71;
  1225.         v83 = (512 * v82 | v82 / 0x800000) + v80;
  1226.         v84 = (v83 ^ v80) & v77;
  1227.         v85 = (v84 ^ v80) + v1->e0 - 0xb2af279 + v74;
  1228.         v86 = (0x4000 * v85 | v85 / 0x40000) + v83;
  1229.         v87 = (v86 ^ v83) & v80;
  1230.         v88 = (v87 ^ v83) + v1->e0 + 0x455a14ed + v77;
  1231.         v89 = (0x100000 * v88 | v88 / 0x1000) + v86;
  1232.         v90 = (v89 ^ v86) & v83;
  1233.         v91 = (v90 ^ v86) + v1->e0 - 0x561c16fb + v80;
  1234.         v92 = (32 * v91 | v91 / 0x8000000) + v89;
  1235.         v93 = (v92 ^ v89) & v86;
  1236.         v94 = (v93 ^ v89) + v1->e0 - 0x3105c08 + v83;
  1237.         v95 = (512 * v94 | v94 / 0x800000) + v92;
  1238.         v96 = (v95 ^ v92) & v89;
  1239.         v97 = (v96 ^ v92) + v1->e0 + 0x676f02d9 + v86;
  1240.         v98 = (0x4000 * v97 | v97 / 0x40000) + v95;
  1241.         v99 = v1->e0 - 0x72d5b376 + v89;
  1242.         v100 = v98 ^ v95;
  1243.         v101 = (v100 & v92 ^ v95) + v99;
  1244.         v102 = (0x100000 * v101 | v101 / 0x1000) + v98;
  1245.         v103 = v1->e0 - 0x5c6be + v92 + (v102 ^ v100);
  1246.         v104 = (16 * v103 | v103 / 0x10000000) + v102;
  1247.         v105 = v104 ^ v102;
  1248.         v106 = (v105 ^ v98) + v1->e0 - 0x788e097f + v95;
  1249.         v107 = (2048 * v106 | v106 / 0x200000) + v104;
  1250.         v108 = v1->e0 + 0x6d9d6122 + v98 + (v107 ^ v105);
  1251.         v109 = (0x10000 * v108 | v108 / 0x10000) + v107;
  1252.         v110 = v109 ^ v107;
  1253.         v111 = (v110 ^ v104) + v1->e0 - 0x21ac7f4 + v102;
  1254.         v112 = (0x800000 * v111 | v111 / 512) + v109;
  1255.         v113 = v1->e0 - 0x5b4115bc + v104 + (v112 ^ v110);
  1256.         v114 = (16 * v113 | v113 / 0x10000000) + v112;
  1257.         v115 = v114 ^ v112;
  1258.         v116 = (v115 ^ v109) + v1->e0 + 0x4bdecfa9 + v107;
  1259.         v117 = (2048 * v116 | v116 / 0x200000) + v114;
  1260.         v118 = v1->e0 - 0x944b4a0 + v109 + (v117 ^ v115);
  1261.         v119 = (0x10000 * v118 | v118 / 0x10000) + v117;
  1262.         v120 = v119 ^ v117;
  1263.         v121 = (v120 ^ v114) + v1->e0 - 0x41404390 + v112;
  1264.         v122 = (0x800000 * v121 | v121 / 512) + v119;
  1265.         v123 = v1->e0 + 0x289b7ec6 + v114 + (v122 ^ v120);
  1266.         v124 = (16 * v123 | v123 / 0x10000000) + v122;
  1267.         v125 = v124 ^ v122;
  1268.         v126 = (v125 ^ v119) + v1->e0 - 0x155ed806 + v117;
  1269.         v127 = (2048 * v126 | v126 / 0x200000) + v124;
  1270.         v128 = v1->e0 - 0x2b10cf7b + v119 + (v127 ^ v125);
  1271.         v129 = (0x10000 * v128 | v128 / 0x10000) + v127;
  1272.         v130 = v129 ^ v127;
  1273.         v131 = (v130 ^ v124) + v1->e0 + 0x4881d05 + v122;
  1274.         v132 = (0x800000 * v131 | v131 / 512) + v129;
  1275.         v133 = v1->e0 - 0x262b2fc7 + v124 + (v132 ^ v130);
  1276.         v134 = (16 * v133 | v133 / 0x10000000) + v132;
  1277.         v135 = v134 ^ v132;
  1278.         v136 = (v135 ^ v129) + v1->e0 - 0x1924661b + v127;
  1279.         v137 = (2048 * v136 | v136 / 0x200000) + v134;
  1280.         v138 = v1->e0 + 0x1fa27cf8 + v129 + (v137 ^ v135);
  1281.         v139 = (0x10000 * v138 | v138 / 0x10000) + v137;
  1282.         v140 = v137 ^ v134 ^ v139;
  1283.         v141 = v140 + v1->e0 - 0x3b53a99b + v132;
  1284.         v142 = (0x800000 * v141 | v141 / 512) + v139;
  1285.         v143 = (v142 | -1 - v137) ^ v139;
  1286.         v144 = v143 + v1->e0 - 0xbd6ddbc + v134;
  1287.         v145 = (64 * v144 | v144 / 0x4000000) + v142;
  1288.         v146 = (v145 | -1 - v139) ^ v142;
  1289.         v147 = v146 + v1->e0 + 0x432aff97 + v137;
  1290.         v148 = (1024 * v147 | v147 / 0x400000) + v145;
  1291.         v149 = (v148 | -1 - v142) ^ v145;
  1292.         v150 = v149 + v1->e0 - 0x546bdc59 + v139;
  1293.         v151 = (0x8000 * v150 | v150 / 0x20000) + v148;
  1294.         v152 = (v151 | -1 - v145) ^ v148;
  1295.         v153 = v152 + v1->e0 - 0x36c5fc7 + v142;
  1296.         v154 = (0x200000 * v153 | v153 / 2048) + v151;
  1297.         v155 = (v154 | -1 - v148) ^ v151;
  1298.         v156 = v155 + v1->e0 + 0x655b59c3 + v145;
  1299.         v157 = (64 * v156 | v156 / 0x4000000) + v154;
  1300.         v158 = (v157 | -1 - v151) ^ v154;
  1301.         v159 = v158 + v1->e0 - 0x70f3336e + v148;
  1302.         v160 = (1024 * v159 | v159 / 0x400000) + v157;
  1303.         v161 = (v160 | -1 - v154) ^ v157;
  1304.         v162 = v161 + v1->e0 - 0x100b83 + v151;
  1305.         v163 = (0x8000 * v162 | v162 / 0x20000) + v160;
  1306.         v164 = (v163 | -1 - v157) ^ v160;
  1307.         v165 = v164 + v1->e0 - 0x7a7ba22f + v154;
  1308.         v166 = (0x200000 * v165 | v165 / 2048) + v163;
  1309.         v167 = (v166 | -1 - v160) ^ v163;
  1310.         v168 = v167 + v1->e0 + 0x6fa87e4f + v157;
  1311.         v169 = (64 * v168 | v168 / 0x4000000) + v166;
  1312.         v170 = (v169 | -1 - v163) ^ v166;
  1313.         v171 = v170 + v1->e0 - 0x1d31920 + v160;
  1314.         v172 = (1024 * v171 | v171 / 0x400000) + v169;
  1315.         v173 = (v172 | -1 - v166) ^ v169;
  1316.         v174 = v173 + v1->e0 - 0x5cfebcec + v163;
  1317.         v175 = (0x8000 * v174 | v174 / 0x20000) + v172;
  1318.         v176 = (v175 | -1 - v169) ^ v172;
  1319.         v177 = v176 + v1->e0 + 0x4e0811a1 + v166;
  1320.         v178 = (0x200000 * v177 | v177 / 2048) + v175;
  1321.         v179 = (v178 | -1 - v172) ^ v175;
  1322.         v180 = v179 + v1->e0 - 0x8ac817e + v169;
  1323.         v181 = (64 * v180 | v180 / 0x4000000) + v178;
  1324.         v182 = (v181 | -1 - v175) ^ v178;
  1325.         v183 = v182 + v1->e0 - 0x42c50dcb + v172;
  1326.         v184 = (1024 * v183 | v183 / 0x400000) + v181;
  1327.         v185 = (v184 | -1 - v178) ^ v181;
  1328.         v186 = v185 + v1->e0 + 0x2ad7d2bb + v175;
  1329.         v187 = (0x8000 * v186 | v186 / 0x20000) + v184;
  1330.         v188 = (v187 | -1 - v181) ^ v184;
  1331.         v189 = v1->e0 - 0x14792c6f + v178 + v188;
  1332.         v3 += 64;
  1333.         v190 = v181 + a1->e0;
  1334.         g10 = v190;
  1335.         v191 = (0x200000 * v189 | v189 / 2048) + v187 + a1->e1;
  1336.         g11 = v187 + a1->e2;
  1337.         g12 = v184 + a1->e3;
  1338.         a1->e0 = v190;
  1339.         a1->e1 = v191;
  1340.         a1->e2 = g11;
  1341.         a1->e3 = g12;
  1342.         // branch -> 0x80497d4
  1343.     }
  1344.     // 0x8049e52
  1345.     return result;
  1346. }
  1347.  
  1348. int32_t BIO_set(struct struct_4 * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6) {
  1349.     int32_t v1 = g15; // 0x8049e61
  1350.     int32_t v2 = g13; // 0x8049e62
  1351.     g17 = false;
  1352.     int32_t v3 = (int32_t)a1; // 0x8049e66
  1353.     g13 = v3;
  1354.     g15 = a2;
  1355.     g16 = v3 + 56;
  1356.     a1->e0 = a2;
  1357.     a1->e1 = 0;
  1358.     a1->e2 = 0;
  1359.     a1->e3 = 0;
  1360.     a1->e4 = 1;
  1361.     a1->e5 = 0;
  1362.     a1->e6 = 0;
  1363.     a1->e7 = 0;
  1364.     a1->e8 = 0;
  1365.     a1->e10 = 0;
  1366.     a1->e9 = 0;
  1367.     a1->e11 = 1;
  1368.     a1->e12 = 0;
  1369.     a1->e13 = 0;
  1370.     int32_t v4;
  1371.     CRYPTO_new_ex_data(0, g13, g16, v4, v2, v1);
  1372.     // UNREACHABLE
  1373. }
  1374.  
  1375. int32_t BIO_new(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7) {
  1376.     int32_t v1 = g13; // 0x8049f30
  1377.     int32_t v2 = 70; // bp-36
  1378.     int32_t v3 = (int32_t)"bio_lib.c";
  1379.     int32_t v4 = 64;
  1380.     int32_t v5 = CRYPTO_malloc(&v4, &v3, &v2); // 0x8049f4b
  1381.     g13 = v5;
  1382.     if (v5 == 0) {
  1383.         // 0x8049f6a
  1384.         ERR_put_error(32, 108, 65, (int32_t)"bio_lib.c", 73);
  1385.         g17 = false;
  1386.         int32_t result = g13; // 0x8049f6d
  1387.         g13 = v1;
  1388.         return result;
  1389.     }
  1390.     // 0x8049f56
  1391.     g10 = a1;
  1392.     v4 = v5;
  1393.     v3 = a1;
  1394.     int32_t v6;
  1395.     BIO_set((struct struct_4 *)&v4, a1, v2, v6, 0, 0);
  1396.     // UNREACHABLE
  1397. }
  1398.  
  1399. int32_t BIO_free(struct struct_5 * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7) {
  1400.     int32_t v1 = g13; // 0x8049fc0
  1401.     struct struct_5 * v2 = (struct struct_5 *)v1; // bp-4
  1402.     if (a1 == NULL) {
  1403.         // 0x804a002
  1404.         g17 = false;
  1405.         g13 = (int32_t)v2;
  1406.         return 0;
  1407.     }
  1408.     int32_t v3 = (int32_t)a1 + 44; // 0x8049fce
  1409.     int32_t v4 = (int32_t)"bio_lib.c"; // bp-32
  1410.     int32_t * v5;
  1411.     int32_t v6 = CRYPTO_add_lock(&((struct struct_5 *)v3)->e0, -1, 21, &v4, 117, 0, 0, 0, 0, (int32_t)v5, v1); // 0x8049ff4
  1412.     if (v6 >= 1) {
  1413.         // 0x804a002
  1414.         g17 = false;
  1415.         g13 = (int32_t)v2;
  1416.         return 1;
  1417.     }
  1418.     int32_t v7 = a1->e1; // 0x804a008
  1419.     g10 = v7;
  1420.     g17 = v7 == 0;
  1421.     int32_t v8; // 0x804a040
  1422.     int32_t v9; // 0x804a040
  1423.     if (v7 == 0) {
  1424.         // 0x804a040
  1425.         v8 = g13;
  1426.         v9 = v8 + 56;
  1427.         g10 = v9;
  1428.         CRYPTO_free_ex_data(0, v8, v9, a2);
  1429.         // UNREACHABLE
  1430.     }
  1431.     // 0x804a00f
  1432.     ((int32_t (*)())v7)();
  1433.     if (g10 < 1) {
  1434.         // 0x804a002
  1435.         g17 = false;
  1436.         g13 = (int32_t)(struct struct_5 *)0x804a03c;
  1437.         return 0;
  1438.     }
  1439.     // 0x804a040
  1440.     v8 = g13;
  1441.     v9 = v8 + 56;
  1442.     g10 = v9;
  1443.     CRYPTO_free_ex_data(0, v8, v9, 0);
  1444.     // UNREACHABLE
  1445. }
  1446.  
  1447. int32_t BIO_set_flags(int32_t result, int32_t a2) {
  1448.     // 0x804a0b0
  1449.     g12 = a2;
  1450.     int32_t * v1 = (int32_t *)(result + 20); // bp+343
  1451.     *v1 = *v1 | a2;
  1452.     return result;
  1453. }
  1454.  
  1455. int32_t BIO_read(struct struct_6 * a1, struct struct_6 * a2, int32_t a3) {
  1456.     int32_t * v1 = (int32_t *)g13; // bp+345
  1457.     g13 = (int32_t)a1;
  1458.     g16 = (int32_t)a2;
  1459.     g14 = a3;
  1460.     int32_t v2;
  1461.     int32_t v3;
  1462.     int32_t v4;
  1463.     if (a1 == NULL) {
  1464.         // 0x804a208
  1465.         ERR_put_error(32, 111, 121, (int32_t)"bio_lib.c", 197);
  1466.         // branch -> 0x804a1c3
  1467.         // 0x804a1c3
  1468.         g17 = false;
  1469.         g13 = v4;
  1470.         g15 = v3;
  1471.         g16 = v2;
  1472.         g14 = (int32_t)(int32_t *)0x804a234;
  1473.         return -2;
  1474.     }
  1475.     int32_t v5 = a1->e0; // 0x804a13b
  1476.     g10 = v5;
  1477.     if (v5 == 0) {
  1478.         // 0x804a208
  1479.         ERR_put_error(32, 111, 121, (int32_t)"bio_lib.c", 197);
  1480.         // branch -> 0x804a1c3
  1481.         // 0x804a1c3
  1482.         g17 = false;
  1483.         g13 = v4;
  1484.         g15 = v3;
  1485.         g16 = v2;
  1486.         g14 = (int32_t)(int32_t *)0x804a234;
  1487.         return -2;
  1488.     }
  1489.     int32_t v6 = a1->e3; // 0x804a145
  1490.     g12 = v6;
  1491.     if (v6 == 0) {
  1492.         // 0x804a208
  1493.         ERR_put_error(32, 111, 121, (int32_t)"bio_lib.c", 197);
  1494.         // branch -> 0x804a1c3
  1495.         // 0x804a1c3
  1496.         g17 = false;
  1497.         g13 = v4;
  1498.         g15 = v3;
  1499.         g16 = v2;
  1500.         g14 = (int32_t)(int32_t *)0x804a234;
  1501.         return -2;
  1502.     }
  1503.     int32_t v7 = a1->e1; // 0x804a150
  1504.     g15 = v7;
  1505.     g17 = v7 == 0;
  1506.     int32_t * v8;
  1507.     int32_t v9; // 0x804a187
  1508.     int32_t v10; // 0x804a19e
  1509.     uint32_t v11; // 0x804a187
  1510.     int32_t * v12; // bp+355
  1511.     int32_t v13; // 0x804a180
  1512.     if (v7 == 0) {
  1513.         // 0x804a180
  1514.         v13 = a1->e3;
  1515.         g10 = v13;
  1516.         if (v13 == 0) {
  1517.             // 0x804a1d0
  1518.             ERR_put_error(32, 111, 120, (int32_t)"bio_lib.c", 208);
  1519.             v8 = (int32_t *)0x804a1fc;
  1520.             // branch -> 0x804a1c3
  1521.         } else {
  1522.             // 0x804a187
  1523.             v9 = g13;
  1524.             v11 = *(int32_t *)v9;
  1525.             g10 = v11;
  1526.             if (v11 >= 1) {
  1527.                 // 0x804a19b
  1528.                 v12 = (int32_t *)(v9 + 48);
  1529.                 *v12 = *v12 + v11;
  1530.                 // branch -> 0x804a19e
  1531.             }
  1532.             // 0x804a19e
  1533.             v10 = g15;
  1534.             g17 = v10 == 0;
  1535.             if (v10 != 0) {
  1536.                 // 0x804a1a2
  1537.                 ((int32_t (*)())v10)();
  1538.                 v8 = v1;
  1539.                 // branch -> 0x804a1c3
  1540.             } else {
  1541.                 v8 = v1;
  1542.             }
  1543.         }
  1544.         // 0x804a1c3
  1545.         g17 = false;
  1546.         g13 = v4;
  1547.         g15 = v3;
  1548.         g16 = v2;
  1549.         g14 = (int32_t)v8;
  1550.         return -2;
  1551.     }
  1552.     // 0x804a157
  1553.     ((int32_t (*)())v7)();
  1554.     if (g10 >= 1) {
  1555.         // 0x804a157
  1556.         // branch -> 0x804a180
  1557.         // 0x804a180
  1558.         v13 = a1->e3;
  1559.         g10 = v13;
  1560.         if (v13 == 0) {
  1561.             // 0x804a1d0
  1562.             ERR_put_error(32, 111, 120, (int32_t)"bio_lib.c", 208);
  1563.             v8 = (int32_t *)0x804a1fc;
  1564.             // branch -> 0x804a1c3
  1565.         } else {
  1566.             // 0x804a187
  1567.             v9 = g13;
  1568.             v11 = *(int32_t *)v9;
  1569.             g10 = v11;
  1570.             if (v11 >= 1) {
  1571.                 // 0x804a19b
  1572.                 v12 = (int32_t *)(v9 + 48);
  1573.                 *v12 = *v12 + v11;
  1574.                 // branch -> 0x804a19e
  1575.             }
  1576.             // 0x804a19e
  1577.             v10 = g15;
  1578.             g17 = v10 == 0;
  1579.             if (v10 != 0) {
  1580.                 // 0x804a1a2
  1581.                 ((int32_t (*)())v10)();
  1582.                 v8 = v1;
  1583.                 // branch -> 0x804a1c3
  1584.             } else {
  1585.                 v8 = v1;
  1586.             }
  1587.         }
  1588.         // 0x804a1c3
  1589.         g17 = false;
  1590.         g13 = v4;
  1591.         g15 = v3;
  1592.         g16 = v2;
  1593.         g14 = (int32_t)v8;
  1594.         return -2;
  1595.     }
  1596.     // 0x804a1c3
  1597.     g17 = false;
  1598.     g13 = v4;
  1599.     g15 = v3;
  1600.     g16 = v2;
  1601.     g14 = (int32_t)v1;
  1602.     return -2;
  1603. }
  1604.  
  1605. int32_t BIO_ctrl(struct struct_7 * a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, struct struct_7 * a13, int32_t a14, int32_t a15, int32_t a16, int32_t a17, int32_t a18, int32_t a19, int32_t a20, int32_t a21) {
  1606.     int32_t v1 = g13; // 0x804a603
  1607.     g13 = (int32_t)a1;
  1608.     g16 = a2;
  1609.     g14 = a3;
  1610.     g12 = a4;
  1611.     int32_t * v2;
  1612.     int32_t v3;
  1613.     int32_t v4;
  1614.     int32_t v5;
  1615.     if (a1 == NULL) {
  1616.         // 0x804a6d0
  1617.         g17 = true;
  1618.         g13 = v3;
  1619.         g15 = v4;
  1620.         g16 = v5;
  1621.         g14 = (int32_t)v2;
  1622.         return 0;
  1623.     }
  1624.     int32_t v6 = a1->e0; // 0x804a61f
  1625.     g10 = v6;
  1626.     int32_t v7;
  1627.     int32_t v8;
  1628.     int32_t v9;
  1629.     if (v6 == 0) {
  1630.         // 0x804a6da
  1631.         ERR_put_error(32, 103, 121, (int32_t)"bio_lib.c", 360);
  1632.         // branch -> 0x804a6a1
  1633.         // 0x804a6a1
  1634.         g17 = false;
  1635.         g13 = v9;
  1636.         g15 = v8;
  1637.         g16 = v7;
  1638.         g14 = v1;
  1639.         return -2;
  1640.     }
  1641.     int32_t v10 = a1->e3; // 0x804a629
  1642.     g10 = v10;
  1643.     if (v10 == 0) {
  1644.         // 0x804a6da
  1645.         ERR_put_error(32, 103, 121, (int32_t)"bio_lib.c", 360);
  1646.         // branch -> 0x804a6a1
  1647.         // 0x804a6a1
  1648.         g17 = false;
  1649.         g13 = v9;
  1650.         g15 = v8;
  1651.         g16 = v7;
  1652.         g14 = v1;
  1653.         return -2;
  1654.     }
  1655.     int32_t v11 = a1->e1; // 0x804a634
  1656.     g15 = v11;
  1657.     g17 = v11 == 0;
  1658.     if (v11 == 0) {
  1659.         // 0x804a6b0
  1660.         g17 = false;
  1661.         g13 = a8;
  1662.         g15 = a9;
  1663.         g16 = a10;
  1664.         g14 = a11;
  1665.         ((int32_t (*)())v10)();
  1666.         // branch -> 0x804a6d0
  1667.         // 0x804a6d0
  1668.         g17 = true;
  1669.         g13 = v3;
  1670.         g15 = v4;
  1671.         g16 = v5;
  1672.         g14 = (int32_t)v2;
  1673.         return 0;
  1674.     }
  1675.     // 0x804a63b
  1676.     ((int32_t (*)())v11)();
  1677.     uint32_t v12 = g10; // 0x804a664
  1678.     g17 = v12 == 0;
  1679.     if (v12 >= 1) {
  1680.         // 0x804a668
  1681.         g10 = *(int32_t *)g13;
  1682.         g12 = (int32_t)(struct struct_7 *)1;
  1683.         ((int32_t (*)())g15)();
  1684.         // branch -> 0x804a6a1
  1685.     }
  1686.     // 0x804a6a1
  1687.     g17 = false;
  1688.     g13 = v9;
  1689.     g15 = v8;
  1690.     g16 = v7;
  1691.     g14 = v1;
  1692.     return -2;
  1693. }
  1694.  
  1695. int32_t BIO_push(int32_t a1, int32_t result, int32_t a3) {
  1696.     int32_t v1 = g13; // 0x804a8f0
  1697.     g13 = a1;
  1698.     if (a1 == 0) {
  1699.         // 0x804a939
  1700.         g17 = false;
  1701.         g13 = v1;
  1702.         return result;
  1703.     }
  1704.     int32_t v2 = a1; // 0x804a913
  1705.     g11 = v2;
  1706.     int32_t * v3 = (int32_t *)(v2 + 36); // bp+388
  1707.     int32_t v4 = *v3; // 0x804a90a
  1708.     while (v4 != 0) {
  1709.         // 0x804a90a
  1710.         v2 = v4;
  1711.         g11 = v2;
  1712.         v3 = (int32_t *)(v2 + 36);
  1713.         v4 = *v3;
  1714.         // continue -> 0x804a90a
  1715.     }
  1716.     // 0x804a911
  1717.     *v3 = result;
  1718.     if (result != 0) {
  1719.         // 0x804a918
  1720.         *(int32_t *)(result + 40) = g11;
  1721.         // branch -> 0x804a91b
  1722.     }
  1723.     int32_t v5 = g13; // bp-28
  1724.     int32_t v6;
  1725.     BIO_ctrl((struct struct_7 *)&v5, 6, 0, g11, 0, 0, v1, v6, a1, result, a3, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0);
  1726.     int32_t result2 = g13; // bp+321
  1727.     // branch -> 0x804a939
  1728.     // 0x804a939
  1729.     g17 = false;
  1730.     g13 = v1;
  1731.     return result2;
  1732. }
  1733.  
  1734. int32_t BIO_free_all(int32_t a1) {
  1735.     int32_t v1 = g15; // 0x804aa60
  1736.     int32_t v2 = g13; // 0x804aa61
  1737.     if (a1 == 0) {
  1738.         // 0x804aa89
  1739.         g17 = false;
  1740.         g13 = v2;
  1741.         g15 = v1;
  1742.         return 0;
  1743.     }
  1744.     int32_t v3 = 0; // bp-28
  1745.     // branch -> 0x804aa76
  1746.     int32_t result2; // 0x804aa7f
  1747.     while (true) {
  1748.         // 0x804aa76
  1749.         g15 = *(int32_t *)(a1 + 44);
  1750.         g13 = *(int32_t *)(a1 + 36);
  1751.         v3 = a1;
  1752.         result2 = BIO_free((struct struct_5 *)&v3, 0, 0, 0, 0, v2, v1);
  1753.         int32_t result = result2; // bp+341
  1754.         if (g15 < 2) {
  1755.             int32_t v4 = g13; // 0x804aa70
  1756.             if (v4 == 0) {
  1757.                 // break -> 0x804aa89
  1758.                 break;
  1759.             }
  1760.             a1 = v4;
  1761.             // continue -> 0x804aa76
  1762.             continue;
  1763.         }
  1764.         // 0x804aa89
  1765.         g17 = false;
  1766.         g13 = v2;
  1767.         g15 = v1;
  1768.         return result;
  1769.     }
  1770.     // 0x804aa89
  1771.     g17 = false;
  1772.     g13 = v2;
  1773.     g15 = v1;
  1774.     return result2;
  1775. }
  1776.  
  1777. int32_t BIO_new_fp(int32_t a1, int32_t a2) {
  1778.     int32_t v1 = g13; // 0x804b350
  1779.     int32_t v2 = (int32_t)"\x02\x04"; // bp-28
  1780.     int32_t v3;
  1781.     int32_t v4 = BIO_new((int32_t)"\x02\x04", v3, 0, 0, 0, 0, v1); // 0x804b35b
  1782.     g13 = v4;
  1783.     int32_t result; // 0x804b399
  1784.     if (v4 != 0) {
  1785.         // 0x804b366
  1786.         BIO_set_flags(v4, 0);
  1787.         v2 = g13;
  1788.         g10 = a2;
  1789.         int32_t v5;
  1790.         BIO_ctrl((struct struct_7 *)&v2, 106, a2, a1, 0, 0, v1, v5, a1, a2, 0, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0);
  1791.         result = g13;
  1792.         // branch -> 0x804b396
  1793.     } else {
  1794.         result = 0;
  1795.     }
  1796.     // 0x804b396
  1797.     g17 = false;
  1798.     g13 = v1;
  1799.     return result;
  1800. }
  1801.  
  1802. int32_t ERR_STATE_free(int32_t * a1) {
  1803.     int32_t v1 = g10; // 0x804b521
  1804.     int32_t v2 = g13; // 0x804b524
  1805.     if (v1 == 0) {
  1806.         // 0x804b580
  1807.         g17 = false;
  1808.         g13 = v2;
  1809.         return 0;
  1810.     }
  1811.     int32_t v3 = 0;
  1812.     int32_t v4 = v1; // 0x804b54d
  1813.     int32_t v5 = 0; // 0x804b5383
  1814.     // branch -> 0x804b54d
  1815.     while (true) {
  1816.         int32_t v6 = *(int32_t *)(v4 + 136); // 0x804b54d
  1817.         int32_t v7 = v4; // 0x804b53b
  1818.         int32_t v8 = v5; // 0x804b538
  1819.         int32_t v9;
  1820.         int32_t v10; // 0x804b548
  1821.         if (v6 != 0) {
  1822.             // 0x804b557
  1823.             if (*(int8_t *)(v4 + 200) != 1) {
  1824.                 // 0x804b560
  1825.                 v9 = v6;
  1826.                 CRYPTO_free(&v9, 0, 0);
  1827.                 *(int32_t *)(g13 + 136) = 0;
  1828.                 v7 = g13;
  1829.                 v8 = v3;
  1830.                 // branch -> 0x804b538
  1831.             } else {
  1832.                 v7 = v4;
  1833.                 v8 = v5;
  1834.             }
  1835.             // 0x804b538
  1836.             v3 = v8 + 1;
  1837.             g13 = v7 + 4;
  1838.             *(int32_t *)(v7 + 200) = 0;
  1839.             v10 = v3;
  1840.             if (v10 == 16) {
  1841.                 // 0x804b578
  1842.                 v9 = v1;
  1843.                 CRYPTO_free(&v9, 0, 0);
  1844.                 // branch -> 0x804b580
  1845.                 // 0x804b580
  1846.                 g17 = false;
  1847.                 g13 = v2;
  1848.                 return 0;
  1849.             }
  1850.           lab_0x4024e50:
  1851.             // 0x804b538
  1852.             v4 = g13;
  1853.             v5 = v10;
  1854.             // branch -> 0x804b54d
  1855.             continue;
  1856.         }
  1857.         // 0x804b538
  1858.         v3 = v8 + 1;
  1859.         g13 = v7 + 4;
  1860.         *(int32_t *)(v7 + 200) = 0;
  1861.         v10 = v3;
  1862.         if (v10 != 16) {
  1863.             goto lab_0x4024e50;
  1864.         }
  1865.         // 0x804b578
  1866.         v9 = v1;
  1867.         CRYPTO_free(&v9, 0, 0);
  1868.         // branch -> 0x804b580
  1869.         // 0x804b580
  1870.         g17 = false;
  1871.         g13 = v2;
  1872.         return 0;
  1873.     }
  1874. }
  1875.  
  1876. int32_t err_fns_check_part_2(int32_t a1) {
  1877.     int32_t v1 = (int32_t)"err.c";
  1878.     int32_t v2 = 9;
  1879.     int32_t v3;
  1880.     CRYPTO_lock(&v2, 1, &v1, 295, 0, NULL, 0, v3, a1, 0, 0, 0, 0, 0, 0, 0);
  1881.     bool v4 = g3;
  1882.     g10 = v4 ? 0x80daba0 : 0;
  1883.     if (!v4) {
  1884.         // 0x804b7e8
  1885.         g3 = true;
  1886.         // branch -> 0x804b7c0
  1887.     }
  1888.     // 0x804b7c0
  1889.     v1 = (int32_t)"err.c";
  1890.     v2 = 10;
  1891.     CRYPTO_lock(&v2, 1, &v1, 298, 0, NULL, 0, v3, a1, 0, 0, 0, 0, 0, 0, 0);
  1892.     g17 = false;
  1893.     return 0;
  1894. }
  1895.  
  1896. int32_t ERR_get_state(int32_t a1) {
  1897.     int32_t v1 = g16; // 0x804c3f0
  1898.     int32_t v2 = v1; // bp-4
  1899.     int32_t * v3 = (int32_t *)g13; // bp+410
  1900.     int32_t * v4 = (int32_t *)g15; // 0x4263
  1901.     if (!g3) {
  1902.         // 0x804c440
  1903.         err_fns_check_part_2(v1);
  1904.         v4 = (int32_t *)0x804c445;
  1905.         // branch -> 0x804c403
  1906.     }
  1907.     // 0x804c403
  1908.     int32_t v5;
  1909.     int32_t v6;
  1910.     CRYPTO_THREADID_current((struct struct_8 *)&v5, v6);
  1911.     int32_t v7;
  1912.     CRYPTO_THREADID_cpy((struct struct_8 *)&v7, (struct struct_8 *)&v5);
  1913.     g13 = g3 ? 0x80daba0 : 0;
  1914.     int32_t * v8;
  1915.     int32_t result; // 0x804c436
  1916.     if (g3) {
  1917.         // 0x804c430
  1918.         g17 = false;
  1919.         result = g13;
  1920.         g13 = (int32_t)v8;
  1921.         g15 = (int32_t)v3;
  1922.         g16 = (int32_t)v4;
  1923.         return result;
  1924.     }
  1925.     // 0x804c448
  1926.     a1 = 1019;
  1927.     g13 = 0x811c060;
  1928.     int32_t v9 = (int32_t)"err.c";
  1929.     v2 = 400;
  1930.     int32_t v10 = CRYPTO_malloc(&v2, &v9, &a1); // 0x804c464
  1931.     g16 = v10;
  1932.     if (v10 == 0) {
  1933.         // 0x804c430
  1934.         g17 = false;
  1935.         result = g13;
  1936.         g13 = (int32_t)v8;
  1937.         g15 = (int32_t)v3;
  1938.         g16 = (int32_t)(int32_t *)0x804c469;
  1939.         return result;
  1940.     }
  1941.     // 0x804c46f
  1942.     v2 = v10;
  1943.     CRYPTO_THREADID_cpy((struct struct_8 *)&v2, (struct struct_8 *)&v5);
  1944.     g12 = 0;
  1945.     *(int32_t *)(g16 + 392) = 0;
  1946.     *(int32_t *)(g16 + 396) = 0;
  1947.     *(int32_t *)(g16 + 136 + 4 * g12) = 0;
  1948.     *(int32_t *)(g16 + 200 + 4 * g12) = 0;
  1949.     int32_t v11 = g12 + 1; // 0x804c4ae
  1950.     g12 = v11;
  1951.     // branch -> 0x804c498
  1952.     while (v11 != 16) {
  1953.         // 0x804c498
  1954.         *(int32_t *)(g16 + 136 + 4 * v11) = 0;
  1955.         *(int32_t *)(g16 + 200 + 4 * g12) = 0;
  1956.         v11 = g12 + 1;
  1957.         g12 = v11;
  1958.         // continue -> 0x804c498
  1959.     }
  1960.     int32_t v12 = g3 ? 0x80daba0 : 0; // 0x804c4b6
  1961.     g10 = v12;
  1962.     v2 = g16;
  1963.     g12 = v12;
  1964.     g13 = v12;
  1965.     int32_t * v13;
  1966.     if (v12 == g16) {
  1967.         // 0x804c4e8
  1968.         if (g3) {
  1969.             // 0x804c4f0
  1970.             ERR_STATE_free((int32_t *)0x804c4cf);
  1971.             v13 = (int32_t *)0x804c4f7;
  1972.             // branch -> 0x804c430
  1973.         } else {
  1974.             v13 = v8;
  1975.         }
  1976.     } else {
  1977.         // 0x804c4d5
  1978.         g10 = g16;
  1979.         g13 = 0x811c060;
  1980.         ERR_STATE_free((int32_t *)0x804c4cf);
  1981.         v13 = (int32_t *)0x804c4e1;
  1982.         // branch -> 0x804c430
  1983.     }
  1984.     // 0x804c430
  1985.     g17 = false;
  1986.     result = g13;
  1987.     g13 = (int32_t)v13;
  1988.     g15 = (int32_t)(int32_t *)0x804c4cf;
  1989.     g16 = (int32_t)(int32_t *)g16;
  1990.     return result;
  1991. }
  1992.  
  1993. int32_t ERR_put_error(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5) {
  1994.     int32_t v1 = g15; // 0x804c500
  1995.     int32_t v2 = g13; // 0x804c501
  1996.     int32_t result = ERR_get_state(0); // 0x804c505
  1997.     int32_t * v3 = (int32_t *)(result + 392); // bp+432
  1998.     int32_t v4 = (*v3 + 1) % 16; // 0x804c520
  1999.     g12 = v4;
  2000.     int32_t * v5 = (int32_t *)(result + 396); // bp+433
  2001.     g13 = v4;
  2002.     *v3 = v4;
  2003.     if (v4 == *v5) {
  2004.         // 0x804c5c0
  2005.         *v5 = (g12 + 1) % 16;
  2006.         // branch -> 0x804c536
  2007.     }
  2008.     int32_t v6 = 4 * g12 + result; // 0x804c536
  2009.     g11 = v6;
  2010.     g12 = a2;
  2011.     g15 = a3;
  2012.     *(int32_t *)(v6 + 8) = 0;
  2013.     *(int32_t *)(g11 + 72) = 0x1000 * g12 & 0xfff000 | 0x1000000 * a1 | g15 % 0x1000;
  2014.     *(int32_t *)(g11 + 264) = a4;
  2015.     *(int32_t *)(g11 + 328) = a5;
  2016.     int32_t v7 = *(int32_t *)(g11 + 136); // 0x804c579
  2017.     g12 = v7;
  2018.     if (v7 == 0) {
  2019.         // 0x804c5ad
  2020.         *(int32_t *)(result + 200 + 4 * g13) = 0;
  2021.         g17 = false;
  2022.         g13 = v2;
  2023.         g15 = v1;
  2024.         return result;
  2025.     }
  2026.     // 0x804c583
  2027.     if (*(int8_t *)(g11 + 200) != 1) {
  2028.         int32_t v8;
  2029.         CRYPTO_free(&v7, 0, v8);
  2030.         int32_t v9 = *v3; // 0x804c59c
  2031.         g13 = v9;
  2032.         *(int32_t *)(result + 136 + 4 * v9) = 0;
  2033.         // branch -> 0x804c5ad
  2034.     }
  2035.     // 0x804c5ad
  2036.     *(int32_t *)(result + 200 + 4 * g13) = 0;
  2037.     g17 = false;
  2038.     g13 = v2;
  2039.     g15 = v1;
  2040.     return result;
  2041. }
  2042.  
  2043. int32_t BIO_f_base64(void) {
  2044.     // 0x804dbf0
  2045.     return 0x811b380;
  2046. }
  2047.  
  2048. int32_t * CRYPTO_THREADID_current(struct struct_8 * a1, int32_t a2) {
  2049.     // 0x804ddc0
  2050.     g13 = (int32_t)a1;
  2051.     g10 = 0;
  2052.     int32_t * result = __errno_location(); // 0x804ddf8
  2053.     int32_t v1 = (int32_t)result; // bp+451
  2054.     *(int32_t *)g13 = v1;
  2055.     a1->e1 = v1;
  2056.     g17 = false;
  2057.     g13 = 0x804ddfd;
  2058.     return result;
  2059. }
  2060.  
  2061. int32_t CRYPTO_THREADID_cpy(struct struct_8 * a1, struct struct_8 * a2) {
  2062.     int32_t v1 = a2->e0; // 0x804de48
  2063.     g11 = v1;
  2064.     a1->e0 = v1;
  2065.     int32_t v2 = a2->e1; // 0x804de4c
  2066.     g12 = v2;
  2067.     a1->e1 = v2;
  2068.     return (int32_t)a1;
  2069. }
  2070.  
  2071. int32_t OPENSSL_showfatal(int32_t a1) {
  2072.     // 0x804e000
  2073.     g10 = 0x811b440;
  2074.     int32_t v1 = (int32_t)"\x86\x20\xAD\xFB"; // bp-28
  2075.     return ___vfprintf_chk((struct struct_16 *)&v1, 1);
  2076. }
  2077.  
  2078. int32_t CRYPTO_lock(int32_t * a1, int32_t a2, int32_t * a3, int32_t a4, int32_t a5, int32_t * a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11, int32_t a12, int32_t a13, int32_t a14, int32_t a15, int32_t a16) {
  2079.     // 0x804e070
  2080.     g17 = false;
  2081.     g13 = a15;
  2082.     g15 = a16;
  2083.     int32_t v1;
  2084.     g16 = v1;
  2085.     int32_t * v2;
  2086.     g14 = (int32_t)v2;
  2087.     return 0;
  2088. }
  2089.  
  2090. int32_t CRYPTO_add_lock(int32_t * a1, int32_t a2, int32_t a3, int32_t * a4, int32_t a5, int32_t a6, int32_t a7, int32_t a8, int32_t a9, int32_t a10, int32_t a11) {
  2091.     // 0x804e590
  2092.     g12 = 0;
  2093.     int32_t v1;
  2094.     int32_t v2;
  2095.     int32_t v3;
  2096.     CRYPTO_lock((int32_t *)9, a3, a4, a5, a3, a4, a5, a2, a7, a8, a9, a10, a11, v1, v2, v3);
  2097.     int32_t * v4 = (int32_t *)g14; // bp+508
  2098.     int32_t v5 = *v4 + a2; // 0x804e5e0
  2099.     g10 = v5;
  2100.     *v4 = v5;
  2101.     CRYPTO_lock((int32_t *)10, g13, (int32_t *)g15, g16, a3, a4, a5, g10, a7, a8, a9, a10, a11, v1, v2, v3);
  2102.     g17 = false;
  2103.     g13 = a10;
  2104.     g15 = a11;
  2105.     g16 = v1;
  2106.     g14 = v2;
  2107.     return g10;
  2108. }
  2109.  
  2110. int32_t * default_malloc_ex(int32_t * a1, int32_t * a2) {
  2111.     // 0x804e660
  2112.     g10 = 0x8066420;
  2113.     return malloc((int32_t)a1);
  2114. }
  2115.  
  2116. int32_t CRYPTO_malloc(int32_t * a1, int32_t * a2, int32_t * a3) {
  2117.     int32_t v1 = g15; // 0x804eac2
  2118.     int32_t v2 = g13; // 0x804eac3
  2119.     int32_t result;
  2120.     if (a1 < (int32_t *)1) {
  2121.         // 0x804eb58
  2122.         result = 0;
  2123.         // branch -> 0x804eb4b
  2124.     } else {
  2125.         // 0x804eadb
  2126.         g12 = 0;
  2127.         result = (int32_t)default_malloc_ex(a1, a2);
  2128.         // branch -> 0x804eb4b
  2129.     }
  2130.     // 0x804eb4b
  2131.     g17 = false;
  2132.     int32_t v3;
  2133.     g13 = v3;
  2134.     int32_t v4;
  2135.     g15 = v4;
  2136.     g16 = v2;
  2137.     g14 = v1;
  2138.     return result;
  2139. }
  2140.  
  2141. int32_t CRYPTO_free(int32_t * a1, int32_t a2, int32_t a3) {
  2142.     // 0x804ed80
  2143.     g10 = 0;
  2144.     cfree(a1);
  2145.     g17 = false;
  2146.     int32_t v1;
  2147.     g13 = v1;
  2148.     return 0;
  2149. }
  2150.  
  2151. int32_t impl_check(int32_t a1) {
  2152.     int32_t v1 = (int32_t)"ex_data.c";
  2153.     int32_t v2 = 9;
  2154.     int32_t v3;
  2155.     CRYPTO_lock(&v2, 2, &v1, 203, 0, NULL, 0, v3, a1, 0, 0, 0, 0, 0, 0, 0);
  2156.     bool v4 = g4;
  2157.     g10 = v4 ? 0x811b3d4 : 0;
  2158.     if (!v4) {
  2159.         // 0x804fdb8
  2160.         g4 = true;
  2161.         // branch -> 0x804fd90
  2162.     }
  2163.     // 0x804fd90
  2164.     v1 = (int32_t)"ex_data.c";
  2165.     v2 = 10;
  2166.     CRYPTO_lock(&v2, 2, &v1, 206, 0, NULL, 0, v3, a1, 0, 0, 0, 0, 0, 0, 0);
  2167.     g17 = false;
  2168.     return 0;
  2169. }
  2170.  
  2171. int32_t CRYPTO_new_ex_data(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6) {
  2172.     bool v1 = g4;
  2173.     int32_t v2 = g16; // 0x8050395
  2174.     int32_t * v3 = (int32_t *)g15; // bp+544
  2175.     g17 = v1 ^ true;
  2176.     int32_t v4; // 0x80503b4
  2177.     if (v1) {
  2178.         v4 = v1 ? 0x811b3d4 : 0;
  2179.       lab_0x4a408c0:;
  2180.         int32_t v5 = *(int32_t *)(v4 + 12); // 0x80503b4
  2181.         g10 = v5;
  2182.         g15 = (int32_t)v3;
  2183.         g16 = v2;
  2184.         ((int32_t (*)())v5)();
  2185.         // branch -> 0x80503c0
  2186.     }
  2187.     // 0x80503c0
  2188.     impl_check(v2);
  2189.     v4 = g4 ? 0x811b3d4 : 0;
  2190.     v3 = (int32_t *)0x80503c5;
  2191.     // branch -> 0x80503a8
  2192.     goto lab_0x4a408c0;
  2193. }
  2194.  
  2195. int32_t CRYPTO_free_ex_data(int32_t a1, int32_t a2, int32_t a3, int32_t a4) {
  2196.     bool v1 = g4;
  2197.     int32_t v2 = g16; // 0x8050415
  2198.     int32_t * v3 = (int32_t *)g15; // bp+548
  2199.     g17 = v1 ^ true;
  2200.     int32_t v4; // 0x8050434
  2201.     if (v1) {
  2202.         v4 = v1 ? 0x811b3d4 : 0;
  2203.       lab_0x49b7770:;
  2204.         int32_t v5 = *(int32_t *)(v4 + 20); // 0x8050434
  2205.         g10 = v5;
  2206.         g15 = (int32_t)v3;
  2207.         g16 = v2;
  2208.         ((int32_t (*)())v5)();
  2209.         // branch -> 0x8050440
  2210.     }
  2211.     // 0x8050440
  2212.     impl_check(v2);
  2213.     v4 = g4 ? 0x811b3d4 : 0;
  2214.     v3 = (int32_t *)0x8050445;
  2215.     // branch -> 0x8050428
  2216.     goto lab_0x49b7770;
  2217. }
  2218.  
  2219. int32_t _IO_fclose(int32_t * a1) {
  2220.     // 0x805b870
  2221.     g13 = (int32_t)a1;
  2222.     int32_t result = *a1; // 0x805b87a
  2223.     g12 = result;
  2224.     g11 = result;
  2225.     return result;
  2226. }
  2227.  
  2228. int32_t __memset_chk(void) {
  2229.     // 0x807de70
  2230.     if (!g6) {
  2231.         // 0x807de79
  2232.         int32_t v1;
  2233.         __init_cpu_features(v1);
  2234.         // branch -> 0x807de7e
  2235.     }
  2236.     // 0x807de7e
  2237.     if (g8 == 0x4000000) {
  2238.         // 0x807dea8
  2239.         return 0x807def0;
  2240.     }
  2241.     // 0x807de90
  2242.     g17 = g9 % 2 == 0;
  2243.     return g9 == 1 ? 0x807deb0 : 0x807ded0;
  2244. }
  2245.  
  2246. int32_t ___vfprintf_chk(struct struct_16 * a1, int32_t a2) {
  2247.     int32_t v1 = (int32_t)a1; // 0x807df17
  2248.     g13 = v1;
  2249.     g15 = a2;
  2250.     int32_t v2 = a1->e0 & 0x8000; // 0x807df29
  2251.     int32_t v3 = *(int32_t *)(v1 + 72); // 0x807df30
  2252.     g12 = v3;
  2253.     g11 = 1;
  2254.     int32_t * v4 = (int32_t *)v3; // bp+561
  2255.     int32_t v5 = *v4; // 0x807df4f
  2256.     g17 = v2 == v5;
  2257.     int32_t result; // bp+91
  2258.     if (v2 == v5) {
  2259.         // if_807df4f_23a_true
  2260.         *v4 = 1;
  2261.         result = g15;
  2262.         // branch -> after_if_807df4f_23a
  2263.     } else {
  2264.         // if_807df4f_23a_false
  2265.         g10 = v5;
  2266.         result = a2;
  2267.         // branch -> after_if_807df4f_23a
  2268.     }
  2269.     // after_if_807df4f_23a
  2270.     return result;
  2271. }
  2272.  
  2273. int32_t __init_cpu_features(int32_t a1) {
  2274.     // 0x807f560
  2275.     int32_t v1; // 0x807f565
  2276.     if (g11 == 0x6c65746e) {
  2277.         // 0x807f584
  2278.         if (v1 == 0x756e6547) {
  2279.             // 0x807f58c
  2280.             if (g12 == 0x49656e69) {
  2281.                 // 0x807f5b1
  2282.                 g8 = 0x49656e69;
  2283.                 g9 |= 8;
  2284.                 g12 = 0;
  2285.                 g7 = 0x6c65746e;
  2286.                 // branch -> 0x807f5b9
  2287.                 // 0x807f5b9
  2288.                 // branch -> 0x807f5ca
  2289.                 // 0x807f5ca
  2290.                 g11 = 3;
  2291.                 g6 = true;
  2292.                 g17 = false;
  2293.                 return 0;
  2294.             }
  2295.         }
  2296.         // 0x807f598
  2297.         g17 = false;
  2298.         // branch -> 0x807f5b1
  2299.     } else {
  2300.         // 0x807f598
  2301.         if (g11 == 0x444d4163) {
  2302.             // 0x807f5f8
  2303.             if (v1 == 0x68747541) {
  2304.                 // 0x807f600
  2305.                 if (g12 == 0x69746e65) {
  2306.                     // 0x807f5b1
  2307.                     g10 = 1;
  2308.                     g7 = 0x444d4163;
  2309.                     g8 = 0x69746e65;
  2310.                     // branch -> 0x807f5ca
  2311.                     // 0x807f5ca
  2312.                     g11 = 3;
  2313.                     g6 = true;
  2314.                     g17 = false;
  2315.                     return -0x80000000;
  2316.                 }
  2317.             }
  2318.         }
  2319.     }
  2320.     // 0x807f5b1
  2321.     if ((g7 & 0x8000000) != 0) {
  2322.         // 0x807f5b9
  2323.         // branch -> 0x807f5ca
  2324.     }
  2325.     // 0x807f5ca
  2326.     g11 = 3;
  2327.     g6 = true;
  2328.     g17 = false;
  2329.     return 0;
  2330. }
  2331.  
  2332. int32_t strncasecmp_l(void) {
  2333.     // 0x80cafe0
  2334.     if (!g6) {
  2335.         // 0x80cafe9
  2336.         int32_t v1;
  2337.         __init_cpu_features(v1);
  2338.         // branch -> 0x80cafee
  2339.     }
  2340.     // 0x80cafee
  2341.     if (g7 == 512) {
  2342.         // 0x80cb018
  2343.         return 0x80cb110;
  2344.     }
  2345.     // 0x80cb000
  2346.     g17 = (g7 & 0x100000) == 0;
  2347.     return g7 == 0x100000 ? 0x80cb1a0 : 0x80cdcf0;
  2348. }
  2349.  
  2350. int32_t function_80482e0(void) {
  2351.     // 0x80482e0
  2352.     return (int32_t)memset(NULL, 0, 0);
  2353. }
  2354.  
  2355. int32_t function_80482f0(void) {
  2356.     // 0x80482f0
  2357.     return strcmp(NULL, NULL);
  2358. }
  2359.  
  2360. /* --------- External Functions --------- */
  2361.  
  2362. // void ___mingw_snprintf(void);
  2363. // int * __errno_location(void)
  2364. // void abort ()
  2365. // void cfree (void *)
  2366. // void exit (int)
  2367. // FILE * fmemopen (void *, size_t, const char *)
  2368. // char * index (const char *, int)
  2369. // void * malloc (size_t)
  2370. // void * memcpy (void *restrict, const void *restrict, size_t)
  2371. // void * memset (void *, int, size_t)
  2372. // int printf (const char *restrict, ...)
  2373. // int puts (const char *)
  2374. // int32_t scanf(int8_t * arg1, ...);
  2375. // int setvbuf (FILE *restrict, char *restrict, int, size_t)
  2376. // int strcmp (const char *, const char *)
  2377. // size_t strlen (const char *)
  2378. // int system (const char *)
  2379.  
  2380. /* ---------- Meta-Information ---------- */
  2381.  
  2382. // Detected compiler: gcc 4.8.1
  2383. // Detected functions: 42 (53 in front-end)
  2384. // Decompiler release: v1.7 (Jun 30 2014)
  2385. // Decompilation date: Jun 30 2014 09:30:47
Advertisement
Add Comment
Please, Sign In to add comment