Guest User

Untitled

a guest
Mar 3rd, 2023
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 103.52 KB | Cybersecurity | 0 0
  1. /* This file was generated by the Hex-Rays decompiler version 7.7.0.220118.
  2.    Copyright (c) 2007-2021 Hex-Rays <[email protected]>
  3.  
  4.    Detected compiler: GNU C++
  5. */
  6.  
  7. #include <defs.h>
  8.  
  9.  
  10. //-------------------------------------------------------------------------
  11. // Function declarations
  12.  
  13. void (*init_proc())(void);
  14. __int64 __fastcall sub_4009E8(); // weak
  15. // int printf(const char *format, ...);
  16. // void *memset(void *s, int c, size_t n);
  17. // int close(int fd);
  18. // int puts(const char *s);
  19. // void __noreturn exit(int status);
  20. // int putchar(int c);
  21. // ssize_t read(int fd, void *buf, size_t nbytes);
  22. // void *malloc(size_t size);
  23. // int __fastcall __libc_start_main(int (__fastcall *main)(int, char **, char **), int argc, char **ubp_av, void (*init)(void), void (*fini)(void), void (*rtld_fini)(void), void *stack_end);
  24. // void free(void *ptr);
  25. // int sprintf(char *s, const char *format, ...);
  26. // __off_t lseek(int fd, __off_t offset, int whence);
  27. // int atoi(const char *nptr);
  28. // void *memcpy(void *dest, const void *src, size_t n);
  29. // int __fxstat(int ver, int fildes, struct stat *stat_buf);
  30. // int *__errno_location(void);
  31. // void *calloc(size_t nmemb, size_t size);
  32. // void *dlopen(const char *file, int mode);
  33. // void *dlsym(void *handle, const char *name);
  34. // int ftruncate(int fd, __off_t length);
  35. // int fprintf(FILE *stream, const char *format, ...);
  36. // ssize_t write(int fd, const void *buf, size_t n);
  37. // int open(const char *file, int oflag, ...);
  38. void __fastcall __noreturn start(__int64 a1, __int64 a2, void (*a3)(void));
  39. __int64 (**call_gmon_start())(void);
  40. __int64 *_do_global_dtors_aux();
  41. void frame_dummy();
  42. __int64 __fastcall init_libssl(_QWORD, _QWORD, _QWORD); // weak
  43. int __fastcall print_error(const char *a1, int a2);
  44. unsigned __int64 __fastcall print_error_ex(const char *a1, int a2);
  45. __int64 __fastcall open_read(const char *a1);
  46. __int64 __fastcall open_write(const char *a1);
  47. __int64 __fastcall open_read_write(const char *a1);
  48. __int64 __fastcall get_file_curr_size(int a1, __off_t *a2);
  49. __int64 __fastcall get_pk_data(const char *a1, void **a2);
  50. __int64 __fastcall create_rsa_obj(__int64 a1, _QWORD *a2);
  51. __int64 __fastcall rsa_decrypt(__int64 a1, __int64 a2, unsigned int a3, void **a4, _DWORD *a5);
  52. __int64 __fastcall extr_data(const char *a1, void **a2, _DWORD *a3);
  53. __int64 __fastcall dump_data(const char *a1, const void *a2, int a3);
  54. __int64 __fastcall extract_encr_key(int a1, void **a2, int a3);
  55. __int64 __fastcall truncate_encr_file(int a1, int a2);
  56. __int64 __fastcall encrypt_simple(int a1, __int64 a2, __int64 a3, const void *a4, int a5, unsigned __int64 a6);
  57. __int64 __fastcall decrypt_file(const char *a1, __int64 a2, __int64 a3, __int64 a4, unsigned __int64 a5);
  58. int __cdecl main(int argc, const char **argv, const char **envp);
  59. unsigned __int64 __fastcall sosemanuk_schedule(int *a1, const void *a2, size_t a3);
  60. __int64 __fastcall decode32le(unsigned __int16 *a1);
  61. unsigned __int64 __fastcall sosemanuk_init(int *a1, _DWORD *a2, const void *a3, size_t a4);
  62. __int64 __fastcall sosemanuk_internal(unsigned int *a1);
  63. __int64 __fastcall encode32le(__int64 a1, unsigned int a2);
  64. void *__fastcall sosemanuk_prng(unsigned int *a1, char *a2, unsigned __int64 a3);
  65. _BYTE *__fastcall sosemanuk_encrypt(__int64 a1, _BYTE *a2, _BYTE *a3, unsigned __int64 a4);
  66. _BYTE *__fastcall xorbuf(_BYTE *a1, _BYTE *a2, _BYTE *a3, __int64 a4);
  67. void _libc_csu_fini(void); // idb
  68. void _libc_csu_init(void); // idb
  69. int __fastcall fstat(int fildes, struct stat *stat_buf);
  70. void (*_do_global_ctors_aux())(void);
  71. __int64 *term_proc();
  72. // __int64 _gmon_start__(void); weak
  73.  
  74. //-------------------------------------------------------------------------
  75. // Data declarations
  76.  
  77. __int64 _CTOR_LIST__ = -1LL; // weak
  78. __int64 (*qword_6091F0)(void) = NULL; // weak
  79. __int64 *p_6181 = &_DTOR_END__; // weak
  80. int mul_a[256] =
  81. {
  82.   0,
  83.   -509620461,
  84.   1805072166,
  85.   -1979123659,
  86.   -695767476,
  87.   924361055,
  88.   -1123002006,
  89.   1552914041,
  90.   94887064,
  91.   -466087029,
  92.   1848699838,
  93.   -1884347219,
  94.   -752831788,
  95.   851410375,
  96.   -1195932174,
  97.   1495812833,
  98.   182915481,
  99.   -344400246,
  100.   1634739903,
  101.   -2131760724,
  102.   -597655595,
  103.   1040167110,
  104.   -1208530701,
  105.   1449691104,
  106.   255905025,
  107.   -287374830,
  108.   1691875879,
  109.   -2058865356,
  110.   -641227955,
  111.   945319006,
  112.   -1303341973,
  113.   1406098296,
  114.   342303387,
  115.   -168235640,
  116.   2146440637,
  117.   -1636836690,
  118.   -1025487657,
  119.   595559364,
  120.   -1451787279,
  121.   1223210210,
  122.   297860611,
  123.   -262196976,
  124.   2052573477,
  125.   -1681390026,
  126.   -951611313,
  127.   651714396,
  128.   -1395611799,
  129.   1297049722,
  130.   511718146,
  131.   -14681071,
  132.   1964442660,
  133.   -1802974409,
  134.   -939041458,
  135.   697864797,
  136.   -1550816664,
  137.   1108321659,
  138.   455602074,
  139.   -88596343,
  140.   1890638012,
  141.   -1859184721,
  142.   -845119018,
  143.   742346437,
  144.   -1506298128,
  145.   1202223587,
  146.   684606623,
  147.   -917402740,
  148.   1129935801,
  149.   -1564033878,
  150.   -28759341,
  151.   534177216,
  152.   -1780605451,
  153.   1950470886,
  154.   761894919,
  155.   -856271084,
  156.   1191096097,
  157.   -1486790606,
  158.   -68225461,
  159.   443627864,
  160.   -1871068819,
  161.   1910902398,
  162.   573134086,
  163.   -1011443179,
  164.   1237213728,
  165.   -1474187981,
  166.   -189908150,
  167.   355595353,
  168.   -1623651220,
  169.   2124858239,
  170.   663652766,
  171.   -971946355,
  172.   1276755640,
  173.   -1383698005,
  174.   -251009070,
  175.   278276289,
  176.   -1700867852,
  177.   2063671271,
  178.   1017734660,
  179.   -583620329,
  180.   1463701794,
  181.   -1230922191,
  182.   -366081976,
  183.   196200283,
  184.   -2118566034,
  185.   1613164669,
  186.   957266588,
  187.   -661555825,
  188.   1385795002,
  189.   -1291435351,
  190.   -276179760,
  191.   236329923,
  192.   -2078350346,
  193.   1702964453,
  194.   911112093,
  195.   -674121586,
  196.   1574518971,
  197.   -1136226392,
  198.   -523691567,
  199.   22468290,
  200.   -1956761865,
  201.   1791091172,
  202.   870951685,
  203.   -763993066,
  204.   1484692515,
  205.   -1176415440,
  206.   -445725367,
  207.   82905690,
  208.   -1896222097,
  209.   1868971388,
  210.   1345685655,
  211.   -1314240636,
  212.   1000521649,
  213.   -633507678,
  214.   -2035095845,
  215.   1731013064,
  216.   -316288515,
  217.   213524206,
  218.   1435653135,
  219.   -1274176740,
  220.   1040540457,
  221.   -543511494,
  222.   -2095760829,
  223.   1653273936,
  224.   -394130075,
  225.   152945270,
  226.   1523751182,
  227.   -1152559587,
  228.   826650152,
  229.   -790994629,
  230.   -1940523198,
  231.   1841969233,
  232.   -406667164,
  233.   106762103,
  234.   1601521046,
  235.   -1091925371,
  236.   887255728,
  237.   -713179741,
  238.   -1980617766,
  239.   1752032457,
  240.   -496689924,
  241.   66769903,
  242.   1146268172,
  243.   -1513265889,
  244.   801479978,
  245.   -832941511,
  246.   -1831484352,
  247.   1934232403,
  248.   -113052826,
  249.   417152117,
  250.   1106605716,
  251.   -1603618425,
  252.   711082418,
  253.   -872575327,
  254.   -1754130216,
  255.   1995298763,
  256.   -52088834,
  257.   494592237,
  258.   1320532885,
  259.   -1356172154,
  260.   623021235,
  261.   -994229344,
  262.   -1741498919,
  263.   2041387722,
  264.   -207232257,
  265.   305802732,
  266.   1259497229,
  267.   -1433556962,
  268.   545607723,
  269.   -1055219912,
  270.   -1651177151,
  271.   2081080914,
  272.   -167625113,
  273.   396226932,
  274.   2029767688,
  275.   -1721498853,
  276.   325909294,
  277.   -218942403,
  278.   -1367563708,
  279.   1340304727,
  280.   -974416542,
  281.   611605105,
  282.   2103185552,
  283.   -1664884861,
  284.   382412726,
  285.   -145430363,
  286.   -1411678500,
  287.   1246015951,
  288.   -1068742150,
  289.   567510761,
  290.   1914494353,
  291.   -1820126590,
  292.   428599991,
  293.   -132897372,
  294.   -1533299747,
  295.   1157921998,
  296.   -821263109,
  297.   781405160,
  298.   2008744201,
  299.   -1775972838,
  300.   472659503,
  301.   -38536900,
  302.   -1589874875,
  303.   1084465238,
  304.   -894740381,
  305.   724866928,
  306.   1822224019,
  307.   -1929174656,
  308.   118217141,
  309.   -426502490,
  310.   -1172602657,
  311.   1535397836,
  312.   -779307015,
  313.   806582506,
  314.   1765487115,
  315.   -2002453224,
  316.   44827949,
  317.   -483145154,
  318.   -1078174649,
  319.   1579389780,
  320.   -735351967,
  321.   901031026,
  322.   1719402250,
  323.   -2015088615,
  324.   233621548,
  325.   -328005825,
  326.   -1325625018,
  327.   1365466709,
  328.   -613702048,
  329.   989096307,
  330.   1675371410,
  331.   -2109477759,
  332.   139138228,
  333.   -371926105,
  334.   -1252307490,
  335.   1422164685,
  336.   -557024520,
  337.   1062450667
  338. }; // weak
  339. int mul_ia[256] =
  340. {
  341.   0,
  342.   403652813,
  343.   807305267,
  344.   672252158,
  345.   1614588262,
  346.   2016668075,
  347.   1344416085,
  348.   1210935704,
  349.   -1065813044,
  350.   -663241983,
  351.   -261719041,
  352.   -395756750,
  353.   -1606135126,
  354.   -1203039641,
  355.   -1873096039,
  356.   -2007657900,
  357.   703618865,
  358.   838803452,
  359.   435085058,
  360.   31563727,
  361.   1238169175,
  362.   1371780762,
  363.   2043836004,
  364.   1641887401,
  365.   -376920835,
  366.   -242752464,
  367.   -644471602,
  368.   -1046911997,
  369.   -1984688741,
  370.   -1849995946,
  371.   -1180004952,
  372.   -1582969499,
  373.   1380564578,
  374.   1246166703,
  375.   1649884753,
  376.   2052619932,
  377.   846534404,
  378.   712660937,
  379.   40605495,
  380.   442816506,
  381.   -1842264658,
  382.   -1975646877,
  383.   -1573927523,
  384.   -1172273840,
  385.   -233968440,
  386.   -368923643,
  387.   -1038914309,
  388.   -635687882,
  389.   2075779411,
  390.   1672913310,
  391.   1269260640,
  392.   1403527597,
  393.   461719605,
  394.   59377912,
  395.   731629574,
  396.   865372363,
  397.   -1144972641,
  398.   -1546757550,
  399.   -1948280148,
  400.   -1815029151,
  401.   -604130311,
  402.   -1007488204,
  403.   -337431606,
  404.   -202607865,
  405.   -1533880892,
  406.   -1130523383,
  407.   -1802742281,
  408.   -1937566406,
  409.   -995197790,
  410.   -593413009,
  411.   -189727599,
  412.   -322978724,
  413.   1693068808,
  414.   2095410885,
  415.   1425321531,
  416.   1291579126,
  417.   81168238,
  418.   484034467,
  419.   885524317,
  420.   751257488,
  421.   -1922921739,
  422.   -1787966920,
  423.   -1115944250,
  424.   -1519171061,
  425.   -312597613,
  426.   -179215522,
  427.   -582966368,
  428.   -984620179,
  429.   1293578553,
  430.   1427452404,
  431.   2097475850,
  432.   1695265223,
  433.   757520479,
  434.   891918482,
  435.   490231916,
  436.   87496865,
  437.   -153392218,
  438.   -288085141,
  439.   -960107627,
  440.   -557143208,
  441.   -1763196224,
  442.   -1897364979,
  443.   -1493613837,
  444.   -1091173826,
  445.   916689002,
  446.   783077543,
  447.   113053785,
  448.   515002516,
  449.   1453275404,
  450.   1318091201,
  451.   1719777599,
  452.   2123299314,
  453.   -550816617,
  454.   -953912230,
  455.   -281693020,
  456.   -147131287,
  457.   -1088971279,
  458.   -1491542724,
  459.   -1895227966,
  460.   -1761190641,
  461.   525586267,
  462.   123506582,
  463.   793595752,
  464.   927076261,
  465.   2138007101,
  466.   1734354672,
  467.   1332864526,
  468.   1467918019,
  469.   -510852319,
  470.   -108903444,
  471.   -778861806,
  472.   -912473121,
  473.   -2119062969,
  474.   -1715541366,
  475.   -1313920396,
  476.   -1449104711,
  477.   569768173,
  478.   972732448,
  479.   300644574,
  480.   165951507,
  481.   1103712651,
  482.   1506152774,
  483.   1909969336,
  484.   1775800693,
  485.   -931308528,
  486.   -797827875,
  487.   -127673309,
  488.   -529752850,
  489.   -1472072330,
  490.   -1337018949,
  491.   -1738574523,
  492.   -2142227064,
  493.   134588380,
  494.   269149969,
  495.   941303791,
  496.   538208034,
  497.   1748569786,
  498.   1882607223,
  499.   1478987401,
  500.   1076416068,
  501.   -1278952125,
  502.   -1412694642,
  503.   -2082849424,
  504.   -1680507459,
  505.   -738716635,
  506.   -872983320,
  507.   -471428074,
  508.   -68561701,
  509.   1941718671,
  510.   1806894658,
  511.   1134741180,
  512.   1538098801,
  513.   327217129,
  514.   193965860,
  515.   597585882,
  516.   999370519,
  517.   -1707810190,
  518.   -2110020929,
  519.   -1440062911,
  520.   -1306189172,
  521.   -100119788,
  522.   -502854695,
  523.   -904475865,
  524.   -770077718,
  525.   1514936766,
  526.   1111710067,
  527.   1783798157,
  528.   1918753088,
  529.   980463832,
  530.   578809877,
  531.   174993643,
  532.   308375590,
  533.   1159714533,
  534.   1561368104,
  535.   1963022038,
  536.   1829639707,
  537.   623083395,
  538.   1026309966,
  539.   356384688,
  540.   221429629,
  541.   -2056835799,
  542.   -1654100508,
  543.   -1250317030,
  544.   -1384714793,
  545.   -446987185,
  546.   -44776318,
  547.   -716897156,
  548.   -850770767,
  549.   1827637716,
  550.   1960888601,
  551.   1559300583,
  552.   1157515562,
  553.   215163058,
  554.   349986943,
  555.   1020108929,
  556.   616751180,
  557.   -1399361000,
  558.   -1265093931,
  559.   -1668681173,
  560.   -2071547162,
  561.   -861152386,
  562.   -727409741,
  563.   -55223475,
  564.   -457565312,
  565.   391538823,
  566.   257501258,
  567.   659089588,
  568.   1061660793,
  569.   2003485153,
  570.   1868923180,
  571.   1198801362,
  572.   1601896735,
  573.   -684813493,
  574.   -819866746,
  575.   -416279688,
  576.   -12627019,
  577.   -1223542227,
  578.   -1357022496,
  579.   -2029209058,
  580.   -1627129133,
  581.   1051080630,
  582.   648640379,
  583.   246986629,
  584.   381155144,
  585.   1587191504,
  586.   1184226845,
  587.   1854152419,
  588.   1988845102,
  589.   -18953094,
  590.   -422474569,
  591.   -826258359,
  592.   -691073916,
  593.   -1629330148,
  594.   -2031278639,
  595.   -1359157969,
  596.   -1225546270
  597. }; // weak
  598. FILE *stderr; // idb
  599. char completed_6183; // weak
  600. void *plibssl; // idb
  601. __int64 lRAND_pseudo_bytes; // weak
  602. __int64 (__fastcall *lRSA_size)(_QWORD); // weak
  603. __int64 (__fastcall *lPEM_read_bio_RSAPrivateKey)(_QWORD, _QWORD, _QWORD, _QWORD); // weak
  604. __int64 lRSA_public_encrypt; // weak
  605. __int64 (__fastcall *lERR_error_string)(_QWORD, _QWORD); // weak
  606. __int64 (__fastcall *lRSA_private_decrypt)(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD); // weak
  607. __int64 (*lERR_get_error)(void); // weak
  608. __int64 lPEM_read_bio_RSA_PUBKEY; // weak
  609. __int64 (__fastcall *lBIO_new_mem_buf)(_QWORD, _QWORD); // weak
  610.  
  611.  
  612. //----- (00000000004009D0) ----------------------------------------------------
  613. void (*init_proc())(void)
  614. {
  615.   call_gmon_start();
  616.   frame_dummy();
  617.   return _do_global_ctors_aux();
  618. }
  619.  
  620. //----- (00000000004009E8) ----------------------------------------------------
  621. __int64 sub_4009E8()
  622. {
  623.   return qword_6091F0();
  624. }
  625. // 4009E8: using guessed type __int64 __fastcall sub_4009E8();
  626. // 6091F0: using guessed type __int64 (*qword_6091F0)(void);
  627.  
  628. //----- (0000000000400B80) ----------------------------------------------------
  629. // positive sp value has been detected, the output may be wrong!
  630. void __fastcall __noreturn start(__int64 a1, __int64 a2, void (*a3)(void))
  631. {
  632.   __int64 v3; // rax
  633.   int v4; // esi
  634.   __int64 v5; // [rsp-8h] [rbp-8h] BYREF
  635.   char *retaddr; // [rsp+0h] [rbp+0h] BYREF
  636.  
  637.   v4 = v5;
  638.   v5 = v3;
  639.   __libc_start_main(
  640.     (int (__fastcall *)(int, char **, char **))main,
  641.     v4,
  642.     &retaddr,
  643.     _libc_csu_init,
  644.     _libc_csu_fini,
  645.     a3,
  646.     &v5);
  647.   __halt();
  648. }
  649. // 400B86: positive sp value 8 has been found
  650. // 400B8D: variable 'v3' is possibly undefined
  651.  
  652. //----- (0000000000400BAC) ----------------------------------------------------
  653. __int64 (**call_gmon_start())(void)
  654. {
  655.   __int64 (**result)(void); // rax
  656.  
  657.   result = &_gmon_start__;
  658.   if ( &_gmon_start__ )
  659.     return (__int64 (**)(void))_gmon_start__();
  660.   return result;
  661. }
  662. // 609C08: using guessed type __int64 _gmon_start__(void);
  663.  
  664. //----- (0000000000400BD0) ----------------------------------------------------
  665. __int64 *_do_global_dtors_aux()
  666. {
  667.   __int64 *result; // rax
  668.   void (*v1)(void); // rdx
  669.  
  670.   if ( !completed_6183 )
  671.   {
  672.     while ( 1 )
  673.     {
  674.       result = p_6181;
  675.       v1 = (void (*)(void))*p_6181;
  676.       if ( !*p_6181 )
  677.         break;
  678.       ++p_6181;
  679.       v1();
  680.     }
  681.     completed_6183 = 1;
  682.   }
  683.   return result;
  684. }
  685. // 6092D0: using guessed type __int64 *p_6181;
  686. // 609AE8: using guessed type char completed_6183;
  687.  
  688. //----- (0000000000400C10) ----------------------------------------------------
  689. void frame_dummy()
  690. {
  691.   ;
  692. }
  693.  
  694. //----- (0000000000400C38) ----------------------------------------------------
  695. __int64 init_libssl()
  696. {
  697.   int i; // [rsp+1Ch] [rbp-34h]
  698.   char s[40]; // [rsp+20h] [rbp-30h] BYREF
  699.   unsigned __int64 v4; // [rsp+48h] [rbp-8h]
  700.  
  701.   v4 = __readfsqword(0x28u);
  702.   plibssl = dlopen("libssl.so", 2);
  703.   if ( plibssl )
  704.     goto LABEL_8;
  705.   for ( i = 0; i <= 15; ++i )
  706.   {
  707.     sprintf(s, "libssl.so.%d", (unsigned int)i);
  708.     plibssl = dlopen(s, 2);
  709.     if ( plibssl )
  710.       break;
  711.   }
  712.   if ( plibssl )
  713.   {
  714. LABEL_8:
  715.     lBIO_new_mem_buf = (__int64)dlsym(plibssl, "BIO_new_mem_buf");
  716.     if ( lBIO_new_mem_buf )
  717.     {
  718.       lERR_get_error = (__int64)dlsym(plibssl, "ERR_get_error");
  719.       if ( lERR_get_error )
  720.       {
  721.         lERR_error_string = (__int64)dlsym(plibssl, "ERR_error_string");
  722.         if ( lERR_error_string )
  723.         {
  724.           lPEM_read_bio_RSA_PUBKEY = (__int64)dlsym(plibssl, "PEM_read_bio_RSA_PUBKEY");
  725.           if ( lPEM_read_bio_RSA_PUBKEY )
  726.           {
  727.             lPEM_read_bio_RSAPrivateKey = (__int64)dlsym(plibssl, "PEM_read_bio_RSAPrivateKey");
  728.             if ( lPEM_read_bio_RSAPrivateKey )
  729.             {
  730.               lRAND_pseudo_bytes = (__int64)dlsym(plibssl, "RAND_pseudo_bytes");
  731.               if ( lRAND_pseudo_bytes )
  732.               {
  733.                 lRSA_public_encrypt = (__int64)dlsym(plibssl, "RSA_public_encrypt");
  734.                 if ( lRSA_public_encrypt )
  735.                 {
  736.                   lRSA_private_decrypt = (__int64)dlsym(plibssl, "RSA_private_decrypt");
  737.                   if ( lRSA_private_decrypt )
  738.                   {
  739.                     lRSA_size = (__int64)dlsym(plibssl, "RSA_size");
  740.                     if ( lRSA_size )
  741.                       return 0;
  742.                     else
  743.                       return 10;
  744.                   }
  745.                   else
  746.                   {
  747.                     return 9;
  748.                   }
  749.                 }
  750.                 else
  751.                 {
  752.                   return 8;
  753.                 }
  754.               }
  755.               else
  756.               {
  757.                 return 7;
  758.               }
  759.             }
  760.             else
  761.             {
  762.               return 6;
  763.             }
  764.           }
  765.           else
  766.           {
  767.             return 5;
  768.           }
  769.         }
  770.         else
  771.         {
  772.           return 4;
  773.         }
  774.       }
  775.       else
  776.       {
  777.         return 3;
  778.       }
  779.     }
  780.     else
  781.     {
  782.       return 2;
  783.     }
  784.   }
  785.   else
  786.   {
  787.     return 1;
  788.   }
  789. }
  790. // 400C38: using guessed type __int64 __fastcall init_libssl();
  791. // 609AF8: using guessed type __int64 lRAND_pseudo_bytes;
  792. // 609B00: using guessed type __int64 lRSA_size;
  793. // 609B08: using guessed type __int64 lPEM_read_bio_RSAPrivateKey;
  794. // 609B10: using guessed type __int64 lRSA_public_encrypt;
  795. // 609B18: using guessed type __int64 lERR_error_string;
  796. // 609B20: using guessed type __int64 lRSA_private_decrypt;
  797. // 609B28: using guessed type __int64 lERR_get_error;
  798. // 609B30: using guessed type __int64 lPEM_read_bio_RSA_PUBKEY;
  799. // 609B38: using guessed type __int64 lBIO_new_mem_buf;
  800.  
  801. //----- (0000000000400E9A) ----------------------------------------------------
  802. int __fastcall print_error(const char *a1, int a2)
  803. {
  804.   int *v2; // rax
  805.  
  806.   if ( !a2 )
  807.     return printf("[ %s ] - FAIL\n", a1);
  808.   v2 = __errno_location();
  809.   return printf("[ %s ] - FAIL { Errno: %d }\n", a1, (unsigned int)*v2);
  810. }
  811.  
  812. //----- (0000000000400EE0) ----------------------------------------------------
  813. unsigned __int64 __fastcall print_error_ex(const char *a1, int a2)
  814. {
  815.   __int64 error; // [rsp+18h] [rbp-98h]
  816.   char v4[136]; // [rsp+20h] [rbp-90h] BYREF
  817.   unsigned __int64 v5; // [rsp+A8h] [rbp-8h]
  818.  
  819.   v5 = __readfsqword(0x28u);
  820.   if ( a2 )
  821.   {
  822.     error = lERR_get_error();
  823.     lERR_error_string(error, v4);
  824.     printf("[ %s ] - FAIL { %s }\n", a1, v4);
  825.   }
  826.   else
  827.   {
  828.     printf("[ %s ] - FAIL\n", a1);
  829.   }
  830.   return __readfsqword(0x28u) ^ v5;
  831. }
  832. // 609B28: invalid function type has been ignored
  833. // 609B18: invalid function type has been ignored
  834. // 609B18: using guessed type __int64 (__fastcall *lERR_error_string)(_QWORD, _QWORD);
  835. // 609B28: using guessed type __int64 (*lERR_get_error)(void);
  836.  
  837. //----- (0000000000400F82) ----------------------------------------------------
  838. __int64 __fastcall open_read(const char *a1)
  839. {
  840.   unsigned int v2; // [rsp+1Ch] [rbp-4h]
  841.  
  842.   v2 = open(a1, 0);
  843.   if ( v2 == -1 )
  844.     print_error("open", 1);
  845.   return v2;
  846. }
  847.  
  848. //----- (0000000000400FBE) ----------------------------------------------------
  849. __int64 __fastcall open_write(const char *a1)
  850. {
  851.   unsigned int v2; // [rsp+1Ch] [rbp-4h]
  852.  
  853.   v2 = open(a1, 578, 384LL);
  854.   if ( v2 == -1 )
  855.     print_error("open", 1);
  856.   return v2;
  857. }
  858.  
  859. //----- (0000000000400FFF) ----------------------------------------------------
  860. __int64 __fastcall open_read_write(const char *a1)
  861. {
  862.   unsigned int v2; // [rsp+1Ch] [rbp-4h]
  863.  
  864.   v2 = open(a1, 2, 384LL);
  865.   if ( v2 == -1 )
  866.     print_error("open", 1);
  867.   return v2;
  868. }
  869.  
  870. //----- (0000000000401040) ----------------------------------------------------
  871. __int64 __fastcall get_file_curr_size(int a1, __off_t *a2)
  872. {
  873.   __off_t v4; // [rsp+28h] [rbp-8h]
  874.  
  875.   v4 = lseek(a1, 0LL, 2);
  876.   if ( v4 == -1 )
  877.   {
  878.     print_error("lseek [end]", 1);
  879.     return 1;
  880.   }
  881.   else
  882.   {
  883.     *a2 = v4;
  884.     return 0;
  885.   }
  886. }
  887.  
  888. //----- (000000000040109B) ----------------------------------------------------
  889. __int64 __fastcall get_pk_data(const char *a1, void **a2)
  890. {
  891.   __off_t nbytes; // [rsp+30h] [rbp-10h]
  892.   int fd; // [rsp+3Ch] [rbp-4h]
  893.  
  894.   fd = open_read(a1);
  895.   if ( fd == -1 )
  896.   {
  897.     print_error("open_pk_file", 0);
  898.     return 1;
  899.   }
  900.   else
  901.   {
  902.     nbytes = lseek(fd, 0LL, 2);
  903.     if ( nbytes == -1 )
  904.     {
  905.       print_error("lseek [end]", 1);
  906.       return 2;
  907.     }
  908.     else if ( nbytes )
  909.     {
  910.       *a2 = calloc(nbytes + 1, 1uLL);
  911.       if ( lseek(fd, 0LL, 0) == -1 )
  912.       {
  913.         print_error("lseek [start]", 1);
  914.         return 4;
  915.       }
  916.       else if ( read(fd, *a2, nbytes) == -1 )
  917.       {
  918.         print_error("read", 1);
  919.         return 5;
  920.       }
  921.       else
  922.       {
  923.         close(fd);
  924.         return 0;
  925.       }
  926.     }
  927.     else
  928.     {
  929.       puts("get_pk_data: key file is empty!");
  930.       return 3;
  931.     }
  932.   }
  933. }
  934.  
  935. //----- (00000000004011C8) ----------------------------------------------------
  936. __int64 __fastcall create_rsa_obj(__int64 a1, _QWORD *a2)
  937. {
  938.   __int64 v4; // [rsp+28h] [rbp-8h]
  939.  
  940.   v4 = lBIO_new_mem_buf(a1, 0xFFFFFFFFLL);
  941.   if ( v4 )
  942.   {
  943.     *a2 = 0LL;
  944.     if ( lPEM_read_bio_RSAPrivateKey(v4, a2, 0LL, 0LL) )
  945.     {
  946.       return 0;
  947.     }
  948.     else
  949.     {
  950.       print_error_ex("PEM_read_bio_RSAPrivateKey", 1);
  951.       return 2;
  952.     }
  953.   }
  954.   else
  955.   {
  956.     print_error_ex("BIO_new_mem_buf", 1);
  957.     return 1;
  958.   }
  959. }
  960. // 609B38: invalid function type has been ignored
  961. // 609B08: invalid function type has been ignored
  962. // 609B08: using guessed type __int64 (__fastcall *lPEM_read_bio_RSAPrivateKey)(_QWORD, _QWORD, _QWORD, _QWORD);
  963. // 609B38: using guessed type __int64 (__fastcall *lBIO_new_mem_buf)(_QWORD, _QWORD);
  964.  
  965. //----- (0000000000401262) ----------------------------------------------------
  966. __int64 __fastcall rsa_decrypt(__int64 a1, __int64 a2, unsigned int a3, void **a4, _DWORD *a5)
  967. {
  968.   int v5; // eax
  969.   int v11; // [rsp+3Ch] [rbp-4h]
  970.  
  971.   v5 = lRSA_size(a1);
  972.   *a4 = calloc(v5, 1uLL);
  973.   v11 = lRSA_private_decrypt(a3, a2, *a4, a1, 1LL);
  974.   if ( v11 == -1 )
  975.   {
  976.     print_error_ex("RSA_public_decrypt", 1);
  977.     return 1;
  978.   }
  979.   else
  980.   {
  981.     *a5 = v11;
  982.     return 0;
  983.   }
  984. }
  985. // 609B00: invalid function type has been ignored
  986. // 609B20: invalid function type has been ignored
  987. // 609B00: using guessed type __int64 (__fastcall *lRSA_size)(_QWORD);
  988. // 609B20: using guessed type __int64 (__fastcall *lRSA_private_decrypt)(_QWORD, _QWORD, _QWORD, _QWORD, _QWORD);
  989.  
  990. //----- (00000000004012F9) ----------------------------------------------------
  991. __int64 __fastcall extr_data(const char *a1, void **a2, _DWORD *a3)
  992. {
  993.   __off_t size; // [rsp+30h] [rbp-10h]
  994.   int fd; // [rsp+3Ch] [rbp-4h]
  995.  
  996.   fd = open_read(a1);
  997.   if ( fd == -1 )
  998.   {
  999.     print_error("open_read", 0);
  1000.     return 1;
  1001.   }
  1002.   else
  1003.   {
  1004.     size = lseek(fd, 0LL, 2);
  1005.     if ( size == -1 )
  1006.     {
  1007.       print_error("lseek [end]", 1);
  1008.       return 2;
  1009.     }
  1010.     else if ( size )
  1011.     {
  1012.       *a2 = malloc(size);
  1013.       if ( lseek(fd, 0LL, 0) == -1 )
  1014.       {
  1015.         print_error("lseek [start]", 1);
  1016.         return 4;
  1017.       }
  1018.       else if ( read(fd, *a2, size) == -1 )
  1019.       {
  1020.         print_error("read", 1);
  1021.         return 5;
  1022.       }
  1023.       else
  1024.       {
  1025.         *a3 = size;
  1026.         close(fd);
  1027.         return 0;
  1028.       }
  1029.     }
  1030.     else
  1031.     {
  1032.       puts("get_pk_data: private key file is empty!");
  1033.       return 3;
  1034.     }
  1035.   }
  1036. }
  1037.  
  1038. //----- (0000000000401428) ----------------------------------------------------
  1039. __int64 __fastcall dump_data(const char *a1, const void *a2, int a3)
  1040. {
  1041.   int fd; // [rsp+2Ch] [rbp-4h]
  1042.  
  1043.   fd = open_write(a1);
  1044.   if ( fd == -1 )
  1045.   {
  1046.     print_error("open_write", 0);
  1047.     return 1;
  1048.   }
  1049.   else if ( write(fd, a2, a3) == -1 )
  1050.   {
  1051.     print_error("write", 1);
  1052.     return 2;
  1053.   }
  1054.   else
  1055.   {
  1056.     close(fd);
  1057.     return 0;
  1058.   }
  1059. }
  1060.  
  1061. //----- (00000000004014A9) ----------------------------------------------------
  1062. __int64 __fastcall extract_encr_key(int a1, void **a2, int a3)
  1063. {
  1064.   unsigned __int64 v6; // [rsp+28h] [rbp-8h] BYREF
  1065.  
  1066.   if ( (unsigned int)get_file_curr_size(a1, (__off_t *)&v6) )
  1067.   {
  1068.     print_error("fstat", 1);
  1069.     return 1;
  1070.   }
  1071.   else if ( a3 <= v6 )
  1072.   {
  1073.     if ( lseek(a1, -a3, 2) == -1 )
  1074.     {
  1075.       print_error("lseek", 1);
  1076.       return 3;
  1077.     }
  1078.     else
  1079.     {
  1080.       *a2 = malloc(a3);
  1081.       if ( read(a1, *a2, a3) == -1 )
  1082.       {
  1083.         print_error("read", 1);
  1084.         return 4;
  1085.       }
  1086.       else
  1087.       {
  1088.         return 0;
  1089.       }
  1090.     }
  1091.   }
  1092.   else
  1093.   {
  1094.     puts("extract_encr_key: file size is less than the key size!");
  1095.     return 2;
  1096.   }
  1097. }
  1098.  
  1099. //----- (0000000000401592) ----------------------------------------------------
  1100. __int64 __fastcall truncate_encr_file(int a1, int a2)
  1101. {
  1102.   struct stat stat_buf; // [rsp+10h] [rbp-90h] BYREF
  1103.  
  1104.   if ( fstat(a1, &stat_buf) == -1 )
  1105.   {
  1106.     print_error("fstat", 1);
  1107.     return 1;
  1108.   }
  1109.   else if ( lseek(a1, 0LL, 0) == -1 )
  1110.   {
  1111.     print_error("lseek", 1);
  1112.     return 2;
  1113.   }
  1114.   else if ( ftruncate(a1, stat_buf.st_size - a2) == -1 )
  1115.   {
  1116.     print_error("lseek", 1);
  1117.     return 3;
  1118.   }
  1119.   else
  1120.   {
  1121.     return 0;
  1122.   }
  1123. }
  1124.  
  1125. //----- (0000000000401660) ----------------------------------------------------
  1126. __int64 __fastcall encrypt_simple(int a1, __int64 a2, __int64 a3, const void *a4, int a5, unsigned __int64 a6)
  1127. {
  1128.   double v8; // [rsp+28h] [rbp-2B8h]
  1129.   double v9; // [rsp+38h] [rbp-2A8h]
  1130.   unsigned __int64 v12; // [rsp+58h] [rbp-288h]
  1131.   __off_t offset; // [rsp+60h] [rbp-280h]
  1132.   int v14[100]; // [rsp+70h] [rbp-270h] BYREF
  1133.   size_t n; // [rsp+200h] [rbp-E0h]
  1134.   double v16; // [rsp+208h] [rbp-D8h]
  1135.   unsigned __int64 v17; // [rsp+210h] [rbp-D0h]
  1136.   __off_t v18; // [rsp+218h] [rbp-C8h]
  1137.   unsigned __int64 v19; // [rsp+220h] [rbp-C0h] BYREF
  1138.   unsigned __int64 v20; // [rsp+228h] [rbp-B8h]
  1139.   void *buf; // [rsp+230h] [rbp-B0h]
  1140.   int v22; // [rsp+23Ch] [rbp-A4h]
  1141.   int v23[34]; // [rsp+240h] [rbp-A0h] BYREF
  1142.   unsigned __int64 v24; // [rsp+2C8h] [rbp-18h]
  1143.  
  1144.   v24 = __readfsqword(0x28u);
  1145.   sosemanuk_schedule(v14, a4, a5);
  1146.   sosemanuk_init(v23, v14, 0LL, 0LL);
  1147.   if ( (unsigned int)get_file_curr_size(a1, (__off_t *)&v19) )
  1148.   {
  1149.     print_error("fstat", 1);
  1150.     return 1;
  1151.   }
  1152.   else
  1153.   {
  1154.     if ( a6 < v19 )
  1155.       v19 = a6;
  1156.     if ( v19 )
  1157.     {
  1158.       buf = malloc(0x100000uLL);
  1159.       if ( buf )
  1160.       {
  1161.         v18 = lseek(a1, 0LL, 0);
  1162.         if ( v18 == -1 )
  1163.         {
  1164.           print_error("lseek [start]", 1);
  1165.           return 10;
  1166.         }
  1167.         else
  1168.         {
  1169.           v12 = a3 << 20;
  1170.           offset = a2 << 20;
  1171.           v20 = 0LL;
  1172.           do
  1173.           {
  1174.             v17 = 0LL;
  1175.             do
  1176.             {
  1177.               if ( v17 >= v12 )
  1178.                 break;
  1179.               n = read(a1, buf, 0x100000uLL);
  1180.               if ( n == -1LL )
  1181.               {
  1182.                 print_error("fstat", 1);
  1183.                 return 3;
  1184.               }
  1185.               sosemanuk_encrypt((__int64)v23, buf, buf, n);
  1186.               if ( lseek(a1, -(__int64)n, 1) == -1 )
  1187.               {
  1188.                 print_error("lseek", 1);
  1189.                 return 4;
  1190.               }
  1191.               if ( write(a1, buf, n) == -1 )
  1192.               {
  1193.                 print_error("write", 1);
  1194.                 return 5;
  1195.               }
  1196.               v17 += n;
  1197.             }
  1198.             while ( n > 0xFFFFF );
  1199.             v20 += v17;
  1200.             if ( v20 + offset >= v19 )
  1201.               break;
  1202.             if ( lseek(a1, offset, 1) == -1 )
  1203.             {
  1204.               print_error("lseek", 1);
  1205.               return 6;
  1206.             }
  1207.             v20 += offset;
  1208.             if ( !(v22 % 10) )
  1209.             {
  1210.               if ( (v20 & 0x8000000000000000LL) != 0LL )
  1211.                 v8 = (double)(int)(v20 & 1 | (v20 >> 1)) + (double)(int)(v20 & 1 | (v20 >> 1));
  1212.               else
  1213.                 v8 = (double)(int)v20;
  1214.               v16 = 100.0 * v8;
  1215.               if ( (v19 & 0x8000000000000000LL) != 0LL )
  1216.                 v9 = (double)(int)(v19 & 1 | (v19 >> 1)) + (double)(int)(v19 & 1 | (v19 >> 1));
  1217.               else
  1218.                 v9 = (double)(int)v19;
  1219.               v16 = v16 / v9;
  1220.               if ( v16 > 100.0 )
  1221.                 v16 = 100.0;
  1222.               if ( v22 )
  1223.                 putchar(13);
  1224.               printf("Progress: %f", v16);
  1225.             }
  1226.             ++v22;
  1227.           }
  1228.           while ( v20 < v19 );
  1229.           putchar(10);
  1230.           free(buf);
  1231.           return 0;
  1232.         }
  1233.       }
  1234.       else
  1235.       {
  1236.         print_error("malloc", 1);
  1237.         return 2;
  1238.       }
  1239.     }
  1240.     else
  1241.     {
  1242.       return 0;
  1243.     }
  1244.   }
  1245. }
  1246. // 401660: using guessed type int var_270[100];
  1247. // 401660: using guessed type int var_A0[34];
  1248.  
  1249. //----- (0000000000401B5C) ----------------------------------------------------
  1250. __int64 __fastcall decrypt_file(const char *a1, __int64 a2, __int64 a3, __int64 a4, unsigned __int64 a5)
  1251. {
  1252.   void *v10; // [rsp+30h] [rbp-20h] BYREF
  1253.   __int64 v11; // [rsp+38h] [rbp-18h] BYREF
  1254.   int v12; // [rsp+44h] [rbp-Ch] BYREF
  1255.   unsigned int v13; // [rsp+48h] [rbp-8h]
  1256.   int fd; // [rsp+4Ch] [rbp-4h]
  1257.  
  1258.   fd = open_read_write(a1);
  1259.   if ( fd == -1 )
  1260.   {
  1261.     print_error("open_read", 0);
  1262.     return 1;
  1263.   }
  1264.   else
  1265.   {
  1266.     v13 = lRSA_size(a2);
  1267.     if ( (unsigned int)extract_encr_key(fd, (void **)&v11, v13) )
  1268.     {
  1269.       print_error("extract_encr_key", 0);
  1270.       return 2;
  1271.     }
  1272.     else if ( (unsigned int)rsa_decrypt(a2, v11, v13, &v10, &v12) )
  1273.     {
  1274.       print_error("rsa_decrypt", 0);
  1275.       puts("decrypt_file: Is this really the right key?");
  1276.       return 3;
  1277.     }
  1278.     else if ( (unsigned int)truncate_encr_file(fd, v13) )
  1279.     {
  1280.       print_error("truncate_encr_file", 0);
  1281.       return 4;
  1282.     }
  1283.     else if ( (unsigned int)encrypt_simple(fd, a3, a4, v10, v12, a5) )
  1284.     {
  1285.       print_error("encrypt_simple", 0);
  1286.       return 5;
  1287.     }
  1288.     else
  1289.     {
  1290.       close(fd);
  1291.       return 0;
  1292.     }
  1293.   }
  1294. }
  1295. // 609B00: using guessed type __int64 (__fastcall *lRSA_size)(_QWORD);
  1296.  
  1297. //----- (0000000000401CA6) ----------------------------------------------------
  1298. // local variable allocation has failed, the output may be wrong!
  1299. int __cdecl main(int argc, const char **argv, const char **envp)
  1300. {
  1301.   int v5; // [rsp+1Ch] [rbp-34h]
  1302.   unsigned __int64 v6; // [rsp+20h] [rbp-30h]
  1303.   __int64 v7; // [rsp+28h] [rbp-28h]
  1304.   __int64 v8; // [rsp+30h] [rbp-20h]
  1305.   __int64 v9; // [rsp+38h] [rbp-18h] BYREF
  1306.   __int64 v10; // [rsp+40h] [rbp-10h] BYREF
  1307.   unsigned int inited; // [rsp+4Ch] [rbp-4h]
  1308.  
  1309.   v5 = argc;
  1310.   if ( argc > 2 )
  1311.   {
  1312.     v8 = 0LL;
  1313.     v7 = 1LL;
  1314.     v6 = 0LL;
  1315.     if ( argc > 3 )
  1316.     {
  1317.       *(_QWORD *)&argc = argv[3];
  1318.       v8 = atoi(*(const char **)&argc);
  1319.     }
  1320.     if ( v5 > 4 )
  1321.     {
  1322.       *(_QWORD *)&argc = argv[4];
  1323.       v7 = atoi(*(const char **)&argc);
  1324.     }
  1325.     if ( v5 > 5 )
  1326.     {
  1327.       *(_QWORD *)&argc = argv[5];
  1328.       v6 = atoi(*(const char **)&argc);
  1329.     }
  1330.     inited = init_libssl(*(_QWORD *)&argc, argv, envp);
  1331.     if ( inited )
  1332.     {
  1333.       printf("init_libssl returned %d\n", inited);
  1334.       return 2;
  1335.     }
  1336.     else if ( (unsigned int)get_pk_data(argv[1], (void **)&v10) )
  1337.     {
  1338.       print_error("get_pk_data", 0);
  1339.       return 3;
  1340.     }
  1341.     else if ( (unsigned int)create_rsa_obj(v10, &v9) )
  1342.     {
  1343.       print_error("create_rsa_obj", 0);
  1344.       return 4;
  1345.     }
  1346.     else if ( (unsigned int)decrypt_file(argv[2], v9, v8, v7, v6) )
  1347.     {
  1348.       print_error("decrypt_file", 0);
  1349.       return 5;
  1350.     }
  1351.     else
  1352.     {
  1353.       return 0;
  1354.     }
  1355.   }
  1356.   else
  1357.   {
  1358.     puts("usage: encrypt <private_key> <file_to_decrypt> [<dec_step>] [<dec_size>] [<file_size>]");
  1359.     puts("       dec_step   -   number of MB to skip while encryption");
  1360.     puts("       dec_size   -   number of MB in encryption block");
  1361.     puts("       file_size  -   file size in bytes (for sparse files)\n");
  1362.     return 1;
  1363.   }
  1364. }
  1365. // 401CA6: variables would overlap: edi.4 and rdi.8
  1366. // 400C38: using guessed type __int64 __fastcall init_libssl(_QWORD, _QWORD, _QWORD);
  1367.  
  1368. //----- (0000000000401E2C) ----------------------------------------------------
  1369. unsigned __int64 __fastcall sosemanuk_schedule(int *a1, const void *a2, size_t a3)
  1370. {
  1371.   int v3; // eax
  1372.   int v5; // [rsp+8h] [rbp-3F8h]
  1373.   int v6; // [rsp+8h] [rbp-3F8h]
  1374.   int v7; // [rsp+8h] [rbp-3F8h]
  1375.   int v8; // [rsp+8h] [rbp-3F8h]
  1376.   int v9; // [rsp+8h] [rbp-3F8h]
  1377.   int v10; // [rsp+8h] [rbp-3F8h]
  1378.   int v11; // [rsp+8h] [rbp-3F8h]
  1379.   int v12; // [rsp+8h] [rbp-3F8h]
  1380.   int v13; // [rsp+8h] [rbp-3F8h]
  1381.   int v14; // [rsp+8h] [rbp-3F8h]
  1382.   int v15; // [rsp+8h] [rbp-3F8h]
  1383.   int v16; // [rsp+8h] [rbp-3F8h]
  1384.   int v17; // [rsp+8h] [rbp-3F8h]
  1385.   int v18; // [rsp+8h] [rbp-3F8h]
  1386.   int v19; // [rsp+Ch] [rbp-3F4h]
  1387.   int v20; // [rsp+Ch] [rbp-3F4h]
  1388.   int v21; // [rsp+Ch] [rbp-3F4h]
  1389.   int v22; // [rsp+Ch] [rbp-3F4h]
  1390.   int v23; // [rsp+Ch] [rbp-3F4h]
  1391.   int v24; // [rsp+Ch] [rbp-3F4h]
  1392.   int v25; // [rsp+Ch] [rbp-3F4h]
  1393.   int v26; // [rsp+Ch] [rbp-3F4h]
  1394.   int v27; // [rsp+Ch] [rbp-3F4h]
  1395.   int v28; // [rsp+Ch] [rbp-3F4h]
  1396.   int v29; // [rsp+Ch] [rbp-3F4h]
  1397.   int v30; // [rsp+Ch] [rbp-3F4h]
  1398.   int v31; // [rsp+Ch] [rbp-3F4h]
  1399.   int v32; // [rsp+Ch] [rbp-3F4h]
  1400.   int v33; // [rsp+10h] [rbp-3F0h]
  1401.   int v34; // [rsp+10h] [rbp-3F0h]
  1402.   int v35; // [rsp+10h] [rbp-3F0h]
  1403.   int v36; // [rsp+10h] [rbp-3F0h]
  1404.   int v37; // [rsp+10h] [rbp-3F0h]
  1405.   int v38; // [rsp+10h] [rbp-3F0h]
  1406.   int v39; // [rsp+10h] [rbp-3F0h]
  1407.   int v40; // [rsp+10h] [rbp-3F0h]
  1408.   int v41; // [rsp+10h] [rbp-3F0h]
  1409.   int v42; // [rsp+10h] [rbp-3F0h]
  1410.   int v43; // [rsp+10h] [rbp-3F0h]
  1411.   int v44; // [rsp+10h] [rbp-3F0h]
  1412.   int v45; // [rsp+10h] [rbp-3F0h]
  1413.   int v46; // [rsp+10h] [rbp-3F0h]
  1414.   int v47; // [rsp+14h] [rbp-3ECh]
  1415.   int v48; // [rsp+14h] [rbp-3ECh]
  1416.   int v49; // [rsp+14h] [rbp-3ECh]
  1417.   int v50; // [rsp+14h] [rbp-3ECh]
  1418.   int v51; // [rsp+14h] [rbp-3ECh]
  1419.   int v52; // [rsp+14h] [rbp-3ECh]
  1420.   int v53; // [rsp+14h] [rbp-3ECh]
  1421.   int v54; // [rsp+14h] [rbp-3ECh]
  1422.   int v55; // [rsp+14h] [rbp-3ECh]
  1423.   int v56; // [rsp+14h] [rbp-3ECh]
  1424.   int v57; // [rsp+14h] [rbp-3ECh]
  1425.   int v58; // [rsp+14h] [rbp-3ECh]
  1426.   int v59; // [rsp+14h] [rbp-3ECh]
  1427.   int v60; // [rsp+14h] [rbp-3ECh]
  1428.   int v61; // [rsp+18h] [rbp-3E8h]
  1429.   int v62; // [rsp+18h] [rbp-3E8h]
  1430.   int v63; // [rsp+18h] [rbp-3E8h]
  1431.   int v64; // [rsp+18h] [rbp-3E8h]
  1432.   int v65; // [rsp+18h] [rbp-3E8h]
  1433.   int v66; // [rsp+18h] [rbp-3E8h]
  1434.   int v67; // [rsp+18h] [rbp-3E8h]
  1435.   int v68; // [rsp+18h] [rbp-3E8h]
  1436.   int v69; // [rsp+18h] [rbp-3E8h]
  1437.   int v70; // [rsp+18h] [rbp-3E8h]
  1438.   int v71; // [rsp+18h] [rbp-3E8h]
  1439.   int v72; // [rsp+18h] [rbp-3E8h]
  1440.   int v73; // [rsp+18h] [rbp-3E8h]
  1441.   int v74; // [rsp+1Ch] [rbp-3E4h]
  1442.   int v75; // [rsp+1Ch] [rbp-3E4h]
  1443.   int v76; // [rsp+1Ch] [rbp-3E4h]
  1444.   int v77; // [rsp+1Ch] [rbp-3E4h]
  1445.   int v78; // [rsp+1Ch] [rbp-3E4h]
  1446.   int v79; // [rsp+1Ch] [rbp-3E4h]
  1447.   int v80; // [rsp+1Ch] [rbp-3E4h]
  1448.   int v81; // [rsp+1Ch] [rbp-3E4h]
  1449.   int v82; // [rsp+1Ch] [rbp-3E4h]
  1450.   int v83; // [rsp+1Ch] [rbp-3E4h]
  1451.   int v84; // [rsp+1Ch] [rbp-3E4h]
  1452.   int v85; // [rsp+1Ch] [rbp-3E4h]
  1453.   int v86; // [rsp+1Ch] [rbp-3E4h]
  1454.   int v87; // [rsp+20h] [rbp-3E0h]
  1455.   int v88; // [rsp+20h] [rbp-3E0h]
  1456.   int v89; // [rsp+20h] [rbp-3E0h]
  1457.   int v90; // [rsp+20h] [rbp-3E0h]
  1458.   int v91; // [rsp+20h] [rbp-3E0h]
  1459.   int v92; // [rsp+20h] [rbp-3E0h]
  1460.   int v93; // [rsp+20h] [rbp-3E0h]
  1461.   int v94; // [rsp+20h] [rbp-3E0h]
  1462.   int v95; // [rsp+20h] [rbp-3E0h]
  1463.   int v96; // [rsp+20h] [rbp-3E0h]
  1464.   int v97; // [rsp+20h] [rbp-3E0h]
  1465.   int v98; // [rsp+20h] [rbp-3E0h]
  1466.   int v99; // [rsp+20h] [rbp-3E0h]
  1467.   int v100; // [rsp+24h] [rbp-3DCh]
  1468.   int v101; // [rsp+24h] [rbp-3DCh]
  1469.   int v102; // [rsp+24h] [rbp-3DCh]
  1470.   int v103; // [rsp+24h] [rbp-3DCh]
  1471.   int v104; // [rsp+24h] [rbp-3DCh]
  1472.   int v105; // [rsp+24h] [rbp-3DCh]
  1473.   int v106; // [rsp+24h] [rbp-3DCh]
  1474.   int v107; // [rsp+24h] [rbp-3DCh]
  1475.   int v108; // [rsp+24h] [rbp-3DCh]
  1476.   int v109; // [rsp+24h] [rbp-3DCh]
  1477.   int v110; // [rsp+24h] [rbp-3DCh]
  1478.   int v111; // [rsp+24h] [rbp-3DCh]
  1479.   int v113; // [rsp+4Ch] [rbp-3B4h]
  1480.   int v114; // [rsp+50h] [rbp-3B0h]
  1481.   int v115; // [rsp+70h] [rbp-390h]
  1482.   int v116; // [rsp+74h] [rbp-38Ch]
  1483.   int v117; // [rsp+78h] [rbp-388h]
  1484.   int v118; // [rsp+7Ch] [rbp-384h]
  1485.   int v119; // [rsp+90h] [rbp-370h]
  1486.   int v120; // [rsp+94h] [rbp-36Ch]
  1487.   int v121; // [rsp+98h] [rbp-368h]
  1488.   int v122; // [rsp+9Ch] [rbp-364h]
  1489.   int v123; // [rsp+B4h] [rbp-34Ch]
  1490.   int v124; // [rsp+BCh] [rbp-344h]
  1491.   int v125; // [rsp+C4h] [rbp-33Ch]
  1492.   int v126; // [rsp+E4h] [rbp-31Ch]
  1493.   int v127; // [rsp+E8h] [rbp-318h]
  1494.   int v128; // [rsp+FCh] [rbp-304h]
  1495.   int v129; // [rsp+100h] [rbp-300h]
  1496.   int v130; // [rsp+108h] [rbp-2F8h]
  1497.   int v131; // [rsp+10Ch] [rbp-2F4h]
  1498.   int v132; // [rsp+120h] [rbp-2E0h]
  1499.   int v133; // [rsp+128h] [rbp-2D8h]
  1500.   int v134; // [rsp+12Ch] [rbp-2D4h]
  1501.   int v135; // [rsp+12Ch] [rbp-2D4h]
  1502.   int v136; // [rsp+130h] [rbp-2D0h]
  1503.   int v137; // [rsp+130h] [rbp-2D0h]
  1504.   int v138; // [rsp+130h] [rbp-2D0h]
  1505.   int v139; // [rsp+144h] [rbp-2BCh]
  1506.   int v140; // [rsp+148h] [rbp-2B8h]
  1507.   int v141; // [rsp+16Ch] [rbp-294h]
  1508.   int v142; // [rsp+170h] [rbp-290h]
  1509.   int v143; // [rsp+190h] [rbp-270h]
  1510.   int v144; // [rsp+194h] [rbp-26Ch]
  1511.   int v145; // [rsp+198h] [rbp-268h]
  1512.   int v146; // [rsp+19Ch] [rbp-264h]
  1513.   int v147; // [rsp+1B0h] [rbp-250h]
  1514.   int v148; // [rsp+1B4h] [rbp-24Ch]
  1515.   int v149; // [rsp+1B8h] [rbp-248h]
  1516.   int v150; // [rsp+1BCh] [rbp-244h]
  1517.   int v151; // [rsp+1D4h] [rbp-22Ch]
  1518.   int v152; // [rsp+1DCh] [rbp-224h]
  1519.   int v153; // [rsp+1E4h] [rbp-21Ch]
  1520.   int v154; // [rsp+204h] [rbp-1FCh]
  1521.   int v155; // [rsp+208h] [rbp-1F8h]
  1522.   int v156; // [rsp+21Ch] [rbp-1E4h]
  1523.   int v157; // [rsp+220h] [rbp-1E0h]
  1524.   int v158; // [rsp+228h] [rbp-1D8h]
  1525.   int v159; // [rsp+22Ch] [rbp-1D4h]
  1526.   int v160; // [rsp+240h] [rbp-1C0h]
  1527.   int v161; // [rsp+248h] [rbp-1B8h]
  1528.   int v162; // [rsp+24Ch] [rbp-1B4h]
  1529.   int v163; // [rsp+24Ch] [rbp-1B4h]
  1530.   int v164; // [rsp+250h] [rbp-1B0h]
  1531.   int v165; // [rsp+250h] [rbp-1B0h]
  1532.   int v166; // [rsp+250h] [rbp-1B0h]
  1533.   int v167; // [rsp+264h] [rbp-19Ch]
  1534.   int v168; // [rsp+268h] [rbp-198h]
  1535.   int v169; // [rsp+28Ch] [rbp-174h]
  1536.   int v170; // [rsp+290h] [rbp-170h]
  1537.   int v171; // [rsp+2B0h] [rbp-150h]
  1538.   int v172; // [rsp+2B4h] [rbp-14Ch]
  1539.   int v173; // [rsp+2B8h] [rbp-148h]
  1540.   int v174; // [rsp+2BCh] [rbp-144h]
  1541.   int v175; // [rsp+2D0h] [rbp-130h]
  1542.   int v176; // [rsp+2D4h] [rbp-12Ch]
  1543.   int v177; // [rsp+2D8h] [rbp-128h]
  1544.   int v178; // [rsp+2DCh] [rbp-124h]
  1545.   int v179; // [rsp+2F4h] [rbp-10Ch]
  1546.   int v180; // [rsp+2FCh] [rbp-104h]
  1547.   int v181; // [rsp+304h] [rbp-FCh]
  1548.   int v182; // [rsp+324h] [rbp-DCh]
  1549.   int v183; // [rsp+328h] [rbp-D8h]
  1550.   int v184; // [rsp+33Ch] [rbp-C4h]
  1551.   int v185; // [rsp+340h] [rbp-C0h]
  1552.   int v186; // [rsp+348h] [rbp-B8h]
  1553.   int v187; // [rsp+34Ch] [rbp-B4h]
  1554.   int v188; // [rsp+360h] [rbp-A0h]
  1555.   int v189; // [rsp+368h] [rbp-98h]
  1556.   int v190; // [rsp+36Ch] [rbp-94h]
  1557.   int v191; // [rsp+36Ch] [rbp-94h]
  1558.   int v192; // [rsp+370h] [rbp-90h]
  1559.   int v193; // [rsp+370h] [rbp-90h]
  1560.   int v194; // [rsp+370h] [rbp-90h]
  1561.   int v195; // [rsp+384h] [rbp-7Ch]
  1562.   int v196; // [rsp+388h] [rbp-78h]
  1563.   int v197; // [rsp+3ACh] [rbp-54h]
  1564.   int v198; // [rsp+3B0h] [rbp-50h]
  1565.   unsigned __int16 dest[2]; // [rsp+3D0h] [rbp-30h] BYREF
  1566.   unsigned __int16 v200; // [rsp+3D4h] [rbp-2Ch] BYREF
  1567.   unsigned __int16 v201[2]; // [rsp+3D8h] [rbp-28h] BYREF
  1568.   unsigned __int16 v202; // [rsp+3DCh] [rbp-24h] BYREF
  1569.   unsigned __int16 v203[2]; // [rsp+3E0h] [rbp-20h] BYREF
  1570.   unsigned __int16 v204; // [rsp+3E4h] [rbp-1Ch] BYREF
  1571.   unsigned __int16 v205[2]; // [rsp+3E8h] [rbp-18h] BYREF
  1572.   unsigned __int16 v206[6]; // [rsp+3ECh] [rbp-14h] BYREF
  1573.   unsigned __int64 v207; // [rsp+3F8h] [rbp-8h]
  1574.  
  1575.   v207 = __readfsqword(0x28u);
  1576.   if ( !a3 || a3 > 0x20 )
  1577.   {
  1578.     fprintf(stderr, "invalid key size: %lu\n", a3);
  1579.     exit(1);
  1580.   }
  1581.   memcpy(dest, a2, a3);
  1582.   if ( a3 <= 0x1F )
  1583.   {
  1584.     *((_BYTE *)dest + a3) = 1;
  1585.     if ( a3 <= 0x1E )
  1586.       memset((char *)dest + a3 + 1, 0, 31 - a3);
  1587.   }
  1588.   v5 = decode32le(dest);
  1589.   v19 = decode32le(&v200);
  1590.   v33 = decode32le(v201);
  1591.   v47 = decode32le(&v202);
  1592.   v61 = decode32le(v203);
  1593.   v74 = decode32le(&v204);
  1594.   v87 = decode32le(v205);
  1595.   v3 = decode32le(v206);
  1596.   v6 = __ROR4__(v3 ^ v74 ^ v47 ^ v5 ^ 0x9E3779B9, 21);
  1597.   v20 = __ROR4__(v6 ^ v87 ^ v61 ^ v19 ^ 0x9E3779B8, 21);
  1598.   v34 = __ROR4__(v20 ^ v3 ^ v74 ^ v33 ^ 0x9E3779BB, 21);
  1599.   v48 = __ROR4__(v34 ^ v6 ^ v87 ^ v47 ^ 0x9E3779BA, 21);
  1600.   v197 = (v6 & v20 | v34 ^ v6) ^ (v48 | v6) & (v20 ^ v48);
  1601.   v198 = v20 ^ v48 ^ v34 ^ (v6 & v20 ^ (v48 | v6) | v197 ^ v6 & v20);
  1602.   *a1 = v197 ^ v6 & v20 ^ (v48 | v6) ^ (v197 | v198);
  1603.   a1[1] = v198;
  1604.   a1[2] = v197;
  1605.   a1[3] = v20 ^ v48 ^ v34 ^ (v6 & v20 ^ (v48 | v6)) & (v6 & v20 | v34 ^ v6);
  1606.   v62 = __ROR4__(v48 ^ v20 ^ v3 ^ v61 ^ 0x9E3779BD, 21);
  1607.   v75 = __ROR4__(v62 ^ v34 ^ v6 ^ v74 ^ 0x9E3779BC, 21);
  1608.   v88 = __ROR4__(v75 ^ v48 ^ v20 ^ v87 ^ 0x9E3779BF, 21);
  1609.   v100 = __ROR4__(v88 ^ v62 ^ v34 ^ v3 ^ 0x9E3779BE, 21);
  1610.   v196 = v100 ^ v88 & v62 ^ (v100 ^ v88 & v62 ^ v75 ^ v88 ^ v62 | v75 ^ (v62 | v100));
  1611.   v195 = (v75 ^ (v62 | v100)) & (v100 ^ v88 & v62) ^ v100 ^ v88 & v62 ^ v75 ^ v88 ^ v62;
  1612.   a1[4] = v100 ^ v88 & v62 ^ v75 ^ v88;
  1613.   a1[5] = v196;
  1614.   a1[6] = v195 ^ v196 ^ v75 ^ (v62 | v100);
  1615.   a1[7] = ~v195;
  1616.   v7 = __ROR4__(v100 ^ v75 ^ v48 ^ v6 ^ 0x9E3779B1, 21);
  1617.   v21 = __ROR4__(v7 ^ v88 ^ v62 ^ v20 ^ 0x9E3779B0, 21);
  1618.   v35 = __ROR4__(v21 ^ v100 ^ v75 ^ v34 ^ 0x9E3779B3, 21);
  1619.   v49 = __ROR4__(v35 ^ v7 ^ v88 ^ v48 ^ 0x9E3779B2, 21);
  1620.   v192 = v49 | v21 & ~v7;
  1621.   v190 = v192 ^ v21;
  1622.   v193 = ~v7 ^ v192;
  1623.   v188 = v190 | ~v7;
  1624.   v191 = v21 & ~v7 ^ ~v35 ^ v49 ^ v190;
  1625.   v189 = v188 & (v193 | v21 & ~v7 ^ ~v35);
  1626.   v194 = v191 ^ v193;
  1627.   a1[8] = v189;
  1628.   a1[9] = v188 ^ v189 & v194;
  1629.   a1[10] = v21 & ~v7 ^ ~v35 ^ v49;
  1630.   a1[11] = v194 ^ v189 & v191;
  1631.   v63 = __ROR4__(v49 ^ v21 ^ v100 ^ v62 ^ 0x9E3779B5, 21);
  1632.   v76 = __ROR4__(v63 ^ v35 ^ v7 ^ v75 ^ 0x9E3779B4, 21);
  1633.   v89 = __ROR4__(v76 ^ v49 ^ v21 ^ v88 ^ 0x9E3779B7, 21);
  1634.   v101 = __ROR4__(v89 ^ v63 ^ v35 ^ v100 ^ 0x9E3779B6, 21);
  1635.   v186 = v63 ^ (v63 ^ v101) & v76;
  1636.   v187 = v89 ^ v76 ^ (v63 ^ v101 | v63);
  1637.   v184 = v186 | ~(v63 ^ v101 ^ v89 ^ v76);
  1638.   v185 = v187 | v89 ^ v63 ^ v101;
  1639.   a1[12] = v185 ^ v184 ^ v89 ^ v63 ^ v101 ^ v186;
  1640.   a1[13] = v185 ^ v184;
  1641.   a1[14] = v63 ^ v101 ^ v89 ^ v76 ^ (v186 | v89);
  1642.   a1[15] = v187;
  1643.   v8 = __ROR4__(v101 ^ v76 ^ v49 ^ v7 ^ 0x9E3779A9, 21);
  1644.   v22 = __ROR4__(v8 ^ v89 ^ v63 ^ v21 ^ 0x9E3779A8, 21);
  1645.   v36 = __ROR4__(v22 ^ v101 ^ v76 ^ v35 ^ 0x9E3779AB, 21);
  1646.   v50 = __ROR4__(v36 ^ v8 ^ v89 ^ v49 ^ 0x9E3779AA, 21);
  1647.   v183 = v50 ^ (v36 | v22) ^ v36 ^ (v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22 | v8);
  1648.   v182 = v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22 ^ v8 ^ (v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22 | v50 ^ (v36 | v22));
  1649.   a1[16] = (v183 | ~(v182 ^ v50 ^ (v36 | v22) ^ v36)) ^ v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22;
  1650.   a1[17] = v50 ^ (v36 | v22) ^ v8 & (v36 ^ v22 | v50);
  1651.   a1[18] = v50 ^ (v36 | v22) ^ v36 ^ v36 ^ v22 ^ v183 & v182;
  1652.   a1[19] = v183;
  1653.   v64 = __ROR4__(v50 ^ v22 ^ v101 ^ v63 ^ 0x9E3779AD, 21);
  1654.   v77 = __ROR4__(v64 ^ v36 ^ v8 ^ v76 ^ 0x9E3779AC, 21);
  1655.   v90 = __ROR4__(v77 ^ v50 ^ v22 ^ v89 ^ 0x9E3779AF, 21);
  1656.   v102 = __ROR4__(v90 ^ v64 ^ v36 ^ v101 ^ 0x9E3779AE, 21);
  1657.   v180 = ~v90 ^ v64 & v102 ^ v77 ^ v102 ^ v64 ^ (v102 | ~v90);
  1658.   v181 = v180 ^ (~v90 ^ v64 & v102 | ~v90 ^ v64 & v102 ^ v77 | v102 ^ v64);
  1659.   v179 = v181 ^ ~v90 ^ v64 & v102 ^ (~v90 ^ v64 & v102 ^ v77 | v102 ^ v64) ^ v102;
  1660.   a1[20] = v181;
  1661.   a1[21] = ~v90 ^ v64 & v102 ^ v77;
  1662.   a1[22] = v179;
  1663.   a1[23] = ~(~v90 ^ v64 & v102) ^ v179 & v180;
  1664.   v9 = __ROR4__(v102 ^ v77 ^ v50 ^ v8 ^ 0x9E3779A1, 21);
  1665.   v23 = __ROR4__(v9 ^ v90 ^ v64 ^ v22 ^ 0x9E3779A0, 21);
  1666.   v37 = __ROR4__(v23 ^ v102 ^ v77 ^ v36 ^ 0x9E3779A3, 21);
  1667.   v51 = __ROR4__(v37 ^ v9 ^ v90 ^ v50 ^ 0x9E3779A2, 21);
  1668.   v178 = ~v51 ^ v37 ^ (v23 ^ v9) & (v51 ^ v23);
  1669.   v177 = v51 ^ v23 | ~v51 ^ v37;
  1670.   v176 = v23 ^ v9 ^ v178 & ~v51;
  1671.   v175 = v177 ^ v178 ^ ~v51 ^ v51 ^ v23;
  1672.   a1[24] = v178;
  1673.   a1[25] = v176;
  1674.   a1[26] = v175 ^ v176 & (v23 ^ v9);
  1675.   a1[27] = (v176 | v175) ^ ~(v23 ^ v9 ^ v177);
  1676.   v65 = __ROR4__(v51 ^ v23 ^ v102 ^ v64 ^ 0x9E3779A5, 21);
  1677.   v78 = __ROR4__(v65 ^ v37 ^ v9 ^ v77 ^ 0x9E3779A4, 21);
  1678.   v91 = __ROR4__(v78 ^ v51 ^ v23 ^ v90 ^ 0x9E3779A7, 21);
  1679.   v103 = __ROR4__(v91 ^ v65 ^ v37 ^ v102 ^ 0x9E3779A6, 21);
  1680.   v173 = ~v103 ^ v91 ^ (v65 ^ ~v103) & (v103 ^ v78);
  1681.   v172 = v65 ^ ~v103 ^ v103 ^ v78 ^ v65 ^ (v65 ^ ~v103 ^ v103 ^ v78) & (~v103 ^ v91);
  1682.   v174 = v173 & (v65 ^ ~v103 ^ v103 ^ v78 ^ v65);
  1683.   v171 = v174 ^ v65 ^ ~v103;
  1684.   a1[28] = v173;
  1685.   a1[29] = v171 & v172 ^ v174 ^ (v173 | v65 ^ ~v103 ^ v103 ^ v78);
  1686.   a1[30] = ~(v172 ^ (v171 | v174));
  1687.   a1[31] = v171;
  1688.   v10 = __ROR4__(v103 ^ v78 ^ v51 ^ v9 ^ 0x9E377999, 21);
  1689.   v24 = __ROR4__(v10 ^ v91 ^ v65 ^ v23 ^ 0x9E377998, 21);
  1690.   v38 = __ROR4__(v24 ^ v103 ^ v78 ^ v37 ^ 0x9E37799B, 21);
  1691.   v52 = __ROR4__(v38 ^ v10 ^ v91 ^ v51 ^ 0x9E37799A, 21);
  1692.   v169 = (v10 & v24 | v38 ^ v10) ^ (v52 | v10) & (v24 ^ v52);
  1693.   v170 = v24 ^ v52 ^ v38 ^ (v10 & v24 ^ (v52 | v10) | v169 ^ v10 & v24);
  1694.   a1[32] = v169 ^ v10 & v24 ^ (v52 | v10) ^ (v169 | v170);
  1695.   a1[33] = v170;
  1696.   a1[34] = v169;
  1697.   a1[35] = v24 ^ v52 ^ v38 ^ (v10 & v24 ^ (v52 | v10)) & (v10 & v24 | v38 ^ v10);
  1698.   v66 = __ROR4__(v52 ^ v24 ^ v103 ^ v65 ^ 0x9E37799D, 21);
  1699.   v79 = __ROR4__(v66 ^ v38 ^ v10 ^ v78 ^ 0x9E37799C, 21);
  1700.   v92 = __ROR4__(v79 ^ v52 ^ v24 ^ v91 ^ 0x9E37799F, 21);
  1701.   v104 = __ROR4__(v92 ^ v66 ^ v38 ^ v103 ^ 0x9E37799E, 21);
  1702.   v168 = v104 ^ v92 & v66 ^ (v104 ^ v92 & v66 ^ v79 ^ v92 ^ v66 | v79 ^ (v66 | v104));
  1703.   v167 = (v79 ^ (v66 | v104)) & (v104 ^ v92 & v66) ^ v104 ^ v92 & v66 ^ v79 ^ v92 ^ v66;
  1704.   a1[36] = v104 ^ v92 & v66 ^ v79 ^ v92;
  1705.   a1[37] = v168;
  1706.   a1[38] = v167 ^ v168 ^ v79 ^ (v66 | v104);
  1707.   a1[39] = ~v167;
  1708.   v11 = __ROR4__(v104 ^ v79 ^ v52 ^ v10 ^ 0x9E377991, 21);
  1709.   v25 = __ROR4__(v11 ^ v92 ^ v66 ^ v24 ^ 0x9E377990, 21);
  1710.   v39 = __ROR4__(v25 ^ v104 ^ v79 ^ v38 ^ 0x9E377993, 21);
  1711.   v53 = __ROR4__(v39 ^ v11 ^ v92 ^ v52 ^ 0x9E377992, 21);
  1712.   v164 = v53 | v25 & ~v11;
  1713.   v162 = v164 ^ v25;
  1714.   v165 = ~v11 ^ v164;
  1715.   v160 = v162 | ~v11;
  1716.   v163 = v25 & ~v11 ^ ~v39 ^ v53 ^ v162;
  1717.   v161 = v160 & (v165 | v25 & ~v11 ^ ~v39);
  1718.   v166 = v163 ^ v165;
  1719.   a1[40] = v161;
  1720.   a1[41] = v160 ^ v161 & v166;
  1721.   a1[42] = v25 & ~v11 ^ ~v39 ^ v53;
  1722.   a1[43] = v166 ^ v161 & v163;
  1723.   v67 = __ROR4__(v53 ^ v25 ^ v104 ^ v66 ^ 0x9E377995, 21);
  1724.   v80 = __ROR4__(v67 ^ v39 ^ v11 ^ v79 ^ 0x9E377994, 21);
  1725.   v93 = __ROR4__(v80 ^ v53 ^ v25 ^ v92 ^ 0x9E377997, 21);
  1726.   v105 = __ROR4__(v93 ^ v67 ^ v39 ^ v104 ^ 0x9E377996, 21);
  1727.   v158 = v67 ^ (v67 ^ v105) & v80;
  1728.   v159 = v93 ^ v80 ^ (v67 ^ v105 | v67);
  1729.   v156 = v158 | ~(v67 ^ v105 ^ v93 ^ v80);
  1730.   v157 = v159 | v93 ^ v67 ^ v105;
  1731.   a1[44] = v157 ^ v156 ^ v93 ^ v67 ^ v105 ^ v158;
  1732.   a1[45] = v157 ^ v156;
  1733.   a1[46] = v67 ^ v105 ^ v93 ^ v80 ^ (v158 | v93);
  1734.   a1[47] = v159;
  1735.   v12 = __ROR4__(v105 ^ v80 ^ v53 ^ v11 ^ 0x9E377989, 21);
  1736.   v26 = __ROR4__(v12 ^ v93 ^ v67 ^ v25 ^ 0x9E377988, 21);
  1737.   v40 = __ROR4__(v26 ^ v105 ^ v80 ^ v39 ^ 0x9E37798B, 21);
  1738.   v54 = __ROR4__(v40 ^ v12 ^ v93 ^ v53 ^ 0x9E37798A, 21);
  1739.   v155 = v54 ^ (v40 | v26) ^ v40 ^ (v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26 | v12);
  1740.   v154 = v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26 ^ v12 ^ (v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26 | v54 ^ (v40 | v26));
  1741.   a1[48] = (v155 | ~(v154 ^ v54 ^ (v40 | v26) ^ v40)) ^ v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26;
  1742.   a1[49] = v54 ^ (v40 | v26) ^ v12 & (v40 ^ v26 | v54);
  1743.   a1[50] = v54 ^ (v40 | v26) ^ v40 ^ v40 ^ v26 ^ v155 & v154;
  1744.   a1[51] = v155;
  1745.   v68 = __ROR4__(v54 ^ v26 ^ v105 ^ v67 ^ 0x9E37798D, 21);
  1746.   v81 = __ROR4__(v68 ^ v40 ^ v12 ^ v80 ^ 0x9E37798C, 21);
  1747.   v94 = __ROR4__(v81 ^ v54 ^ v26 ^ v93 ^ 0x9E37798F, 21);
  1748.   v106 = __ROR4__(v94 ^ v68 ^ v40 ^ v105 ^ 0x9E37798E, 21);
  1749.   v152 = ~v94 ^ v68 & v106 ^ v81 ^ v106 ^ v68 ^ (v106 | ~v94);
  1750.   v153 = v152 ^ (~v94 ^ v68 & v106 | ~v94 ^ v68 & v106 ^ v81 | v106 ^ v68);
  1751.   v151 = v153 ^ ~v94 ^ v68 & v106 ^ (~v94 ^ v68 & v106 ^ v81 | v106 ^ v68) ^ v106;
  1752.   a1[52] = v153;
  1753.   a1[53] = ~v94 ^ v68 & v106 ^ v81;
  1754.   a1[54] = v151;
  1755.   a1[55] = ~(~v94 ^ v68 & v106) ^ v151 & v152;
  1756.   v13 = __ROR4__(v106 ^ v81 ^ v54 ^ v12 ^ 0x9E377981, 21);
  1757.   v27 = __ROR4__(v13 ^ v94 ^ v68 ^ v26 ^ 0x9E377980, 21);
  1758.   v41 = __ROR4__(v27 ^ v106 ^ v81 ^ v40 ^ 0x9E377983, 21);
  1759.   v55 = __ROR4__(v41 ^ v13 ^ v94 ^ v54 ^ 0x9E377982, 21);
  1760.   v150 = ~v55 ^ v41 ^ (v27 ^ v13) & (v55 ^ v27);
  1761.   v149 = v55 ^ v27 | ~v55 ^ v41;
  1762.   v148 = v27 ^ v13 ^ v150 & ~v55;
  1763.   v147 = v149 ^ v150 ^ ~v55 ^ v55 ^ v27;
  1764.   a1[56] = v150;
  1765.   a1[57] = v148;
  1766.   a1[58] = v147 ^ v148 & (v27 ^ v13);
  1767.   a1[59] = (v148 | v147) ^ ~(v27 ^ v13 ^ v149);
  1768.   v69 = __ROR4__(v55 ^ v27 ^ v106 ^ v68 ^ 0x9E377985, 21);
  1769.   v82 = __ROR4__(v69 ^ v41 ^ v13 ^ v81 ^ 0x9E377984, 21);
  1770.   v95 = __ROR4__(v82 ^ v55 ^ v27 ^ v94 ^ 0x9E377987, 21);
  1771.   v107 = __ROR4__(v95 ^ v69 ^ v41 ^ v106 ^ 0x9E377986, 21);
  1772.   v145 = ~v107 ^ v95 ^ (v69 ^ ~v107) & (v107 ^ v82);
  1773.   v144 = v69 ^ ~v107 ^ v107 ^ v82 ^ v69 ^ (v69 ^ ~v107 ^ v107 ^ v82) & (~v107 ^ v95);
  1774.   v146 = v145 & (v69 ^ ~v107 ^ v107 ^ v82 ^ v69);
  1775.   v143 = v146 ^ v69 ^ ~v107;
  1776.   a1[60] = v145;
  1777.   a1[61] = v143 & v144 ^ v146 ^ (v145 | v69 ^ ~v107 ^ v107 ^ v82);
  1778.   a1[62] = ~(v144 ^ (v143 | v146));
  1779.   a1[63] = v143;
  1780.   v14 = __ROR4__(v107 ^ v82 ^ v55 ^ v13 ^ 0x9E3779F9, 21);
  1781.   v28 = __ROR4__(v14 ^ v95 ^ v69 ^ v27 ^ 0x9E3779F8, 21);
  1782.   v42 = __ROR4__(v28 ^ v107 ^ v82 ^ v41 ^ 0x9E3779FB, 21);
  1783.   v56 = __ROR4__(v42 ^ v14 ^ v95 ^ v55 ^ 0x9E3779FA, 21);
  1784.   v141 = (v14 & v28 | v42 ^ v14) ^ (v56 | v14) & (v28 ^ v56);
  1785.   v142 = v28 ^ v56 ^ v42 ^ (v14 & v28 ^ (v56 | v14) | v141 ^ v14 & v28);
  1786.   a1[64] = v141 ^ v14 & v28 ^ (v56 | v14) ^ (v141 | v142);
  1787.   a1[65] = v142;
  1788.   a1[66] = v141;
  1789.   a1[67] = v28 ^ v56 ^ v42 ^ (v14 & v28 ^ (v56 | v14)) & (v14 & v28 | v42 ^ v14);
  1790.   v70 = __ROR4__(v56 ^ v28 ^ v107 ^ v69 ^ 0x9E3779FD, 21);
  1791.   v83 = __ROR4__(v70 ^ v42 ^ v14 ^ v82 ^ 0x9E3779FC, 21);
  1792.   v96 = __ROR4__(v83 ^ v56 ^ v28 ^ v95 ^ 0x9E3779FF, 21);
  1793.   v108 = __ROR4__(v96 ^ v70 ^ v42 ^ v107 ^ 0x9E3779FE, 21);
  1794.   v140 = v108 ^ v96 & v70 ^ (v108 ^ v96 & v70 ^ v83 ^ v96 ^ v70 | v83 ^ (v70 | v108));
  1795.   v139 = (v83 ^ (v70 | v108)) & (v108 ^ v96 & v70) ^ v108 ^ v96 & v70 ^ v83 ^ v96 ^ v70;
  1796.   a1[68] = v108 ^ v96 & v70 ^ v83 ^ v96;
  1797.   a1[69] = v140;
  1798.   a1[70] = v139 ^ v140 ^ v83 ^ (v70 | v108);
  1799.   a1[71] = ~v139;
  1800.   v15 = __ROR4__(v108 ^ v83 ^ v56 ^ v14 ^ 0x9E3779F1, 21);
  1801.   v29 = __ROR4__(v15 ^ v96 ^ v70 ^ v28 ^ 0x9E3779F0, 21);
  1802.   v43 = __ROR4__(v29 ^ v108 ^ v83 ^ v42 ^ 0x9E3779F3, 21);
  1803.   v57 = __ROR4__(v43 ^ v15 ^ v96 ^ v56 ^ 0x9E3779F2, 21);
  1804.   v136 = v57 | v29 & ~v15;
  1805.   v134 = v136 ^ v29;
  1806.   v137 = ~v15 ^ v136;
  1807.   v132 = v134 | ~v15;
  1808.   v135 = v29 & ~v15 ^ ~v43 ^ v57 ^ v134;
  1809.   v133 = v132 & (v137 | v29 & ~v15 ^ ~v43);
  1810.   v138 = v135 ^ v137;
  1811.   a1[72] = v133;
  1812.   a1[73] = v132 ^ v133 & v138;
  1813.   a1[74] = v29 & ~v15 ^ ~v43 ^ v57;
  1814.   a1[75] = v138 ^ v133 & v135;
  1815.   v71 = __ROR4__(v57 ^ v29 ^ v108 ^ v70 ^ 0x9E3779F5, 21);
  1816.   v84 = __ROR4__(v71 ^ v43 ^ v15 ^ v83 ^ 0x9E3779F4, 21);
  1817.   v97 = __ROR4__(v84 ^ v57 ^ v29 ^ v96 ^ 0x9E3779F7, 21);
  1818.   v109 = __ROR4__(v97 ^ v71 ^ v43 ^ v108 ^ 0x9E3779F6, 21);
  1819.   v130 = v71 ^ (v71 ^ v109) & v84;
  1820.   v131 = v97 ^ v84 ^ (v71 ^ v109 | v71);
  1821.   v128 = v130 | ~(v71 ^ v109 ^ v97 ^ v84);
  1822.   v129 = v131 | v97 ^ v71 ^ v109;
  1823.   a1[76] = v129 ^ v128 ^ v97 ^ v71 ^ v109 ^ v130;
  1824.   a1[77] = v129 ^ v128;
  1825.   a1[78] = v71 ^ v109 ^ v97 ^ v84 ^ (v130 | v97);
  1826.   a1[79] = v131;
  1827.   v16 = __ROR4__(v109 ^ v84 ^ v57 ^ v15 ^ 0x9E3779E9, 21);
  1828.   v30 = __ROR4__(v16 ^ v97 ^ v71 ^ v29 ^ 0x9E3779E8, 21);
  1829.   v44 = __ROR4__(v30 ^ v109 ^ v84 ^ v43 ^ 0x9E3779EB, 21);
  1830.   v58 = __ROR4__(v44 ^ v16 ^ v97 ^ v57 ^ 0x9E3779EA, 21);
  1831.   v127 = v58 ^ (v44 | v30) ^ v44 ^ (v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30 | v16);
  1832.   v126 = v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30 ^ v16 ^ (v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30 | v58 ^ (v44 | v30));
  1833.   a1[80] = (v127 | ~(v126 ^ v58 ^ (v44 | v30) ^ v44)) ^ v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30;
  1834.   a1[81] = v58 ^ (v44 | v30) ^ v16 & (v44 ^ v30 | v58);
  1835.   a1[82] = v58 ^ (v44 | v30) ^ v44 ^ v44 ^ v30 ^ v127 & v126;
  1836.   a1[83] = v127;
  1837.   v72 = __ROR4__(v58 ^ v30 ^ v109 ^ v71 ^ 0x9E3779ED, 21);
  1838.   v85 = __ROR4__(v72 ^ v44 ^ v16 ^ v84 ^ 0x9E3779EC, 21);
  1839.   v98 = __ROR4__(v85 ^ v58 ^ v30 ^ v97 ^ 0x9E3779EF, 21);
  1840.   v110 = __ROR4__(v98 ^ v72 ^ v44 ^ v109 ^ 0x9E3779EE, 21);
  1841.   v124 = ~v98 ^ v72 & v110 ^ v85 ^ v110 ^ v72 ^ (v110 | ~v98);
  1842.   v125 = v124 ^ (~v98 ^ v72 & v110 | ~v98 ^ v72 & v110 ^ v85 | v110 ^ v72);
  1843.   v123 = v125 ^ ~v98 ^ v72 & v110 ^ (~v98 ^ v72 & v110 ^ v85 | v110 ^ v72) ^ v110;
  1844.   a1[84] = v125;
  1845.   a1[85] = ~v98 ^ v72 & v110 ^ v85;
  1846.   a1[86] = v123;
  1847.   a1[87] = ~(~v98 ^ v72 & v110) ^ v123 & v124;
  1848.   v17 = __ROR4__(v110 ^ v85 ^ v58 ^ v16 ^ 0x9E3779E1, 21);
  1849.   v31 = __ROR4__(v17 ^ v98 ^ v72 ^ v30 ^ 0x9E3779E0, 21);
  1850.   v45 = __ROR4__(v31 ^ v110 ^ v85 ^ v44 ^ 0x9E3779E3, 21);
  1851.   v59 = __ROR4__(v45 ^ v17 ^ v98 ^ v58 ^ 0x9E3779E2, 21);
  1852.   v122 = ~v59 ^ v45 ^ (v31 ^ v17) & (v59 ^ v31);
  1853.   v121 = v59 ^ v31 | ~v59 ^ v45;
  1854.   v120 = v31 ^ v17 ^ v122 & ~v59;
  1855.   v119 = v121 ^ v122 ^ ~v59 ^ v59 ^ v31;
  1856.   a1[88] = v122;
  1857.   a1[89] = v120;
  1858.   a1[90] = v119 ^ v120 & (v31 ^ v17);
  1859.   a1[91] = (v120 | v119) ^ ~(v31 ^ v17 ^ v121);
  1860.   v73 = __ROR4__(v59 ^ v31 ^ v110 ^ v72 ^ 0x9E3779E5, 21);
  1861.   v86 = __ROR4__(v73 ^ v45 ^ v17 ^ v85 ^ 0x9E3779E4, 21);
  1862.   v99 = __ROR4__(v86 ^ v59 ^ v31 ^ v98 ^ 0x9E3779E7, 21);
  1863.   v111 = __ROR4__(v99 ^ v73 ^ v45 ^ v110 ^ 0x9E3779E6, 21);
  1864.   v117 = ~v111 ^ v99 ^ (v73 ^ ~v111) & (v111 ^ v86);
  1865.   v116 = v73 ^ ~v111 ^ v111 ^ v86 ^ v73 ^ (v73 ^ ~v111 ^ v111 ^ v86) & (~v111 ^ v99);
  1866.   v118 = v117 & (v73 ^ ~v111 ^ v111 ^ v86 ^ v73);
  1867.   v115 = v118 ^ v73 ^ ~v111;
  1868.   a1[92] = v117;
  1869.   a1[93] = v115 & v116 ^ v118 ^ (v117 | v73 ^ ~v111 ^ v111 ^ v86);
  1870.   a1[94] = ~(v116 ^ (v115 | v118));
  1871.   a1[95] = v115;
  1872.   v18 = __ROR4__(v111 ^ v86 ^ v59 ^ v17 ^ 0x9E3779D9, 21);
  1873.   v32 = __ROR4__(v18 ^ v99 ^ v73 ^ v31 ^ 0x9E3779D8, 21);
  1874.   v46 = __ROR4__(v32 ^ v111 ^ v86 ^ v45 ^ 0x9E3779DB, 21);
  1875.   v60 = __ROR4__(v46 ^ v18 ^ v99 ^ v59 ^ 0x9E3779DA, 21);
  1876.   v113 = (v18 & v32 | v46 ^ v18) ^ (v60 | v18) & (v32 ^ v60);
  1877.   v114 = v32 ^ v60 ^ v46 ^ (v18 & v32 ^ (v60 | v18) | v113 ^ v18 & v32);
  1878.   a1[96] = v113 ^ v18 & v32 ^ (v60 | v18) ^ (v113 | v114);
  1879.   a1[97] = v114;
  1880.   a1[98] = v113;
  1881.   a1[99] = v32 ^ v60 ^ v46 ^ (v18 & v32 ^ (v60 | v18)) & (v18 & v32 | v46 ^ v18);
  1882.   return __readfsqword(0x28u) ^ v207;
  1883. }
  1884. // 401E2C: using guessed type unsigned __int16 anonymous_1[2];
  1885. // 401E2C: using guessed type unsigned __int16 anonymous_3[2];
  1886. // 401E2C: using guessed type unsigned __int16 anonymous_5[2];
  1887. // 401E2C: using guessed type unsigned __int16 anonymous_6[6];
  1888.  
  1889. //----- (000000000040568D) ----------------------------------------------------
  1890. __int64 __fastcall decode32le(unsigned __int16 *a1)
  1891. {
  1892.   return (*((unsigned __int8 *)a1 + 2) << 16) | *a1 | (*((unsigned __int8 *)a1 + 3) << 24);
  1893. }
  1894.  
  1895. //----- (00000000004056DA) ----------------------------------------------------
  1896. unsigned __int64 __fastcall sosemanuk_init(int *a1, _DWORD *a2, const void *a3, size_t a4)
  1897. {
  1898.   int v4; // eax
  1899.   int v5; // et0
  1900.   int v6; // et0
  1901.   int v7; // et0
  1902.   int v8; // et0
  1903.   int v9; // et0
  1904.   int v10; // et0
  1905.   int v11; // et0
  1906.   int v12; // et0
  1907.   int v13; // et0
  1908.   int v14; // et0
  1909.   int v15; // et0
  1910.   int v16; // et0
  1911.   int v17; // et0
  1912.   int v18; // et0
  1913.   int v20; // [rsp+Ch] [rbp-54h]
  1914.   int v21; // [rsp+Ch] [rbp-54h]
  1915.   int v22; // [rsp+Ch] [rbp-54h]
  1916.   int v23; // [rsp+Ch] [rbp-54h]
  1917.   int v24; // [rsp+Ch] [rbp-54h]
  1918.   int v25; // [rsp+Ch] [rbp-54h]
  1919.   int v26; // [rsp+Ch] [rbp-54h]
  1920.   int v27; // [rsp+Ch] [rbp-54h]
  1921.   int v28; // [rsp+Ch] [rbp-54h]
  1922.   int v29; // [rsp+Ch] [rbp-54h]
  1923.   int v30; // [rsp+Ch] [rbp-54h]
  1924.   int v31; // [rsp+Ch] [rbp-54h]
  1925.   int v32; // [rsp+Ch] [rbp-54h]
  1926.   int v33; // [rsp+Ch] [rbp-54h]
  1927.   int v34; // [rsp+Ch] [rbp-54h]
  1928.   int v35; // [rsp+Ch] [rbp-54h]
  1929.   int v36; // [rsp+Ch] [rbp-54h]
  1930.   int v37; // [rsp+Ch] [rbp-54h]
  1931.   int v38; // [rsp+Ch] [rbp-54h]
  1932.   int v39; // [rsp+Ch] [rbp-54h]
  1933.   int v40; // [rsp+Ch] [rbp-54h]
  1934.   int v41; // [rsp+Ch] [rbp-54h]
  1935.   int v42; // [rsp+Ch] [rbp-54h]
  1936.   int v43; // [rsp+Ch] [rbp-54h]
  1937.   int v44; // [rsp+Ch] [rbp-54h]
  1938.   int v45; // [rsp+Ch] [rbp-54h]
  1939.   int v46; // [rsp+Ch] [rbp-54h]
  1940.   int v47; // [rsp+Ch] [rbp-54h]
  1941.   int v48; // [rsp+Ch] [rbp-54h]
  1942.   int v49; // [rsp+Ch] [rbp-54h]
  1943.   int v50; // [rsp+Ch] [rbp-54h]
  1944.   int v51; // [rsp+Ch] [rbp-54h]
  1945.   int v52; // [rsp+Ch] [rbp-54h]
  1946.   int v53; // [rsp+Ch] [rbp-54h]
  1947.   int v54; // [rsp+Ch] [rbp-54h]
  1948.   int v55; // [rsp+Ch] [rbp-54h]
  1949.   int v56; // [rsp+Ch] [rbp-54h]
  1950.   int v57; // [rsp+Ch] [rbp-54h]
  1951.   int v58; // [rsp+Ch] [rbp-54h]
  1952.   int v59; // [rsp+Ch] [rbp-54h]
  1953.   int v60; // [rsp+Ch] [rbp-54h]
  1954.   int v61; // [rsp+Ch] [rbp-54h]
  1955.   int v62; // [rsp+Ch] [rbp-54h]
  1956.   int v63; // [rsp+Ch] [rbp-54h]
  1957.   int v64; // [rsp+Ch] [rbp-54h]
  1958.   int v65; // [rsp+Ch] [rbp-54h]
  1959.   int v66; // [rsp+Ch] [rbp-54h]
  1960.   int v67; // [rsp+Ch] [rbp-54h]
  1961.   int v68; // [rsp+Ch] [rbp-54h]
  1962.   int v69; // [rsp+Ch] [rbp-54h]
  1963.   int v70; // [rsp+Ch] [rbp-54h]
  1964.   int v71; // [rsp+Ch] [rbp-54h]
  1965.   int v72; // [rsp+Ch] [rbp-54h]
  1966.   int v73; // [rsp+Ch] [rbp-54h]
  1967.   int v74; // [rsp+Ch] [rbp-54h]
  1968.   int v75; // [rsp+Ch] [rbp-54h]
  1969.   int v76; // [rsp+Ch] [rbp-54h]
  1970.   int v77; // [rsp+Ch] [rbp-54h]
  1971.   int v78; // [rsp+Ch] [rbp-54h]
  1972.   int v79; // [rsp+Ch] [rbp-54h]
  1973.   int v80; // [rsp+Ch] [rbp-54h]
  1974.   int v81; // [rsp+Ch] [rbp-54h]
  1975.   int v82; // [rsp+Ch] [rbp-54h]
  1976.   int v83; // [rsp+Ch] [rbp-54h]
  1977.   int v84; // [rsp+Ch] [rbp-54h]
  1978.   int v85; // [rsp+Ch] [rbp-54h]
  1979.   int v86; // [rsp+Ch] [rbp-54h]
  1980.   int v87; // [rsp+Ch] [rbp-54h]
  1981.   int v88; // [rsp+Ch] [rbp-54h]
  1982.   int v89; // [rsp+Ch] [rbp-54h]
  1983.   int v90; // [rsp+Ch] [rbp-54h]
  1984.   int v91; // [rsp+Ch] [rbp-54h]
  1985.   int v92; // [rsp+Ch] [rbp-54h]
  1986.   int v93; // [rsp+Ch] [rbp-54h]
  1987.   int v94; // [rsp+Ch] [rbp-54h]
  1988.   int v95; // [rsp+Ch] [rbp-54h]
  1989.   int v96; // [rsp+Ch] [rbp-54h]
  1990.   int v97; // [rsp+Ch] [rbp-54h]
  1991.   int v98; // [rsp+Ch] [rbp-54h]
  1992.   int v99; // [rsp+Ch] [rbp-54h]
  1993.   int v100; // [rsp+Ch] [rbp-54h]
  1994.   int v101; // [rsp+Ch] [rbp-54h]
  1995.   int v102; // [rsp+Ch] [rbp-54h]
  1996.   int v103; // [rsp+Ch] [rbp-54h]
  1997.   int v104; // [rsp+Ch] [rbp-54h]
  1998.   int v105; // [rsp+Ch] [rbp-54h]
  1999.   int v106; // [rsp+Ch] [rbp-54h]
  2000.   int v107; // [rsp+10h] [rbp-50h]
  2001.   int v108; // [rsp+10h] [rbp-50h]
  2002.   int v109; // [rsp+10h] [rbp-50h]
  2003.   int v110; // [rsp+10h] [rbp-50h]
  2004.   int v111; // [rsp+10h] [rbp-50h]
  2005.   int v112; // [rsp+10h] [rbp-50h]
  2006.   int v113; // [rsp+10h] [rbp-50h]
  2007.   int v114; // [rsp+10h] [rbp-50h]
  2008.   int v115; // [rsp+10h] [rbp-50h]
  2009.   int v116; // [rsp+10h] [rbp-50h]
  2010.   int v117; // [rsp+10h] [rbp-50h]
  2011.   int v118; // [rsp+10h] [rbp-50h]
  2012.   int v119; // [rsp+10h] [rbp-50h]
  2013.   int v120; // [rsp+10h] [rbp-50h]
  2014.   int v121; // [rsp+10h] [rbp-50h]
  2015.   int v122; // [rsp+10h] [rbp-50h]
  2016.   int v123; // [rsp+10h] [rbp-50h]
  2017.   int v124; // [rsp+10h] [rbp-50h]
  2018.   int v125; // [rsp+10h] [rbp-50h]
  2019.   int v126; // [rsp+10h] [rbp-50h]
  2020.   int v127; // [rsp+10h] [rbp-50h]
  2021.   int v128; // [rsp+10h] [rbp-50h]
  2022.   int v129; // [rsp+10h] [rbp-50h]
  2023.   int v130; // [rsp+10h] [rbp-50h]
  2024.   int v131; // [rsp+10h] [rbp-50h]
  2025.   int v132; // [rsp+10h] [rbp-50h]
  2026.   int v133; // [rsp+10h] [rbp-50h]
  2027.   int v134; // [rsp+10h] [rbp-50h]
  2028.   int v135; // [rsp+10h] [rbp-50h]
  2029.   int v136; // [rsp+10h] [rbp-50h]
  2030.   int v137; // [rsp+10h] [rbp-50h]
  2031.   int v138; // [rsp+10h] [rbp-50h]
  2032.   int v139; // [rsp+10h] [rbp-50h]
  2033.   int v140; // [rsp+10h] [rbp-50h]
  2034.   int v141; // [rsp+10h] [rbp-50h]
  2035.   int v142; // [rsp+10h] [rbp-50h]
  2036.   int v143; // [rsp+10h] [rbp-50h]
  2037.   int v144; // [rsp+10h] [rbp-50h]
  2038.   int v145; // [rsp+10h] [rbp-50h]
  2039.   int v146; // [rsp+10h] [rbp-50h]
  2040.   int v147; // [rsp+10h] [rbp-50h]
  2041.   int v148; // [rsp+10h] [rbp-50h]
  2042.   int v149; // [rsp+10h] [rbp-50h]
  2043.   int v150; // [rsp+10h] [rbp-50h]
  2044.   int v151; // [rsp+10h] [rbp-50h]
  2045.   int v152; // [rsp+10h] [rbp-50h]
  2046.   int v153; // [rsp+10h] [rbp-50h]
  2047.   int v154; // [rsp+10h] [rbp-50h]
  2048.   int v155; // [rsp+10h] [rbp-50h]
  2049.   int v156; // [rsp+10h] [rbp-50h]
  2050.   int v157; // [rsp+10h] [rbp-50h]
  2051.   int v158; // [rsp+10h] [rbp-50h]
  2052.   int v159; // [rsp+10h] [rbp-50h]
  2053.   int v160; // [rsp+10h] [rbp-50h]
  2054.   int v161; // [rsp+10h] [rbp-50h]
  2055.   int v162; // [rsp+10h] [rbp-50h]
  2056.   int v163; // [rsp+10h] [rbp-50h]
  2057.   int v164; // [rsp+10h] [rbp-50h]
  2058.   int v165; // [rsp+10h] [rbp-50h]
  2059.   int v166; // [rsp+10h] [rbp-50h]
  2060.   int v167; // [rsp+10h] [rbp-50h]
  2061.   int v168; // [rsp+10h] [rbp-50h]
  2062.   int v169; // [rsp+10h] [rbp-50h]
  2063.   int v170; // [rsp+10h] [rbp-50h]
  2064.   int v171; // [rsp+10h] [rbp-50h]
  2065.   int v172; // [rsp+10h] [rbp-50h]
  2066.   int v173; // [rsp+10h] [rbp-50h]
  2067.   int v174; // [rsp+10h] [rbp-50h]
  2068.   int v175; // [rsp+10h] [rbp-50h]
  2069.   int v176; // [rsp+10h] [rbp-50h]
  2070.   int v177; // [rsp+10h] [rbp-50h]
  2071.   int v178; // [rsp+10h] [rbp-50h]
  2072.   int v179; // [rsp+10h] [rbp-50h]
  2073.   int v180; // [rsp+10h] [rbp-50h]
  2074.   int v181; // [rsp+10h] [rbp-50h]
  2075.   int v182; // [rsp+10h] [rbp-50h]
  2076.   int v183; // [rsp+10h] [rbp-50h]
  2077.   int v184; // [rsp+10h] [rbp-50h]
  2078.   int v185; // [rsp+10h] [rbp-50h]
  2079.   int v186; // [rsp+10h] [rbp-50h]
  2080.   int v187; // [rsp+10h] [rbp-50h]
  2081.   int v188; // [rsp+10h] [rbp-50h]
  2082.   int v189; // [rsp+10h] [rbp-50h]
  2083.   int v190; // [rsp+10h] [rbp-50h]
  2084.   int v191; // [rsp+10h] [rbp-50h]
  2085.   int v192; // [rsp+10h] [rbp-50h]
  2086.   int v193; // [rsp+10h] [rbp-50h]
  2087.   int v194; // [rsp+10h] [rbp-50h]
  2088.   int v195; // [rsp+10h] [rbp-50h]
  2089.   int v196; // [rsp+10h] [rbp-50h]
  2090.   int v197; // [rsp+10h] [rbp-50h]
  2091.   int v198; // [rsp+10h] [rbp-50h]
  2092.   int v199; // [rsp+10h] [rbp-50h]
  2093.   int v200; // [rsp+10h] [rbp-50h]
  2094.   int v201; // [rsp+10h] [rbp-50h]
  2095.   int v202; // [rsp+10h] [rbp-50h]
  2096.   int v203; // [rsp+10h] [rbp-50h]
  2097.   int v204; // [rsp+10h] [rbp-50h]
  2098.   int v205; // [rsp+10h] [rbp-50h]
  2099.   int v206; // [rsp+10h] [rbp-50h]
  2100.   int v207; // [rsp+10h] [rbp-50h]
  2101.   int v208; // [rsp+14h] [rbp-4Ch]
  2102.   int v209; // [rsp+14h] [rbp-4Ch]
  2103.   int v210; // [rsp+14h] [rbp-4Ch]
  2104.   int v211; // [rsp+14h] [rbp-4Ch]
  2105.   int v212; // [rsp+14h] [rbp-4Ch]
  2106.   int v213; // [rsp+14h] [rbp-4Ch]
  2107.   int v214; // [rsp+14h] [rbp-4Ch]
  2108.   int v215; // [rsp+14h] [rbp-4Ch]
  2109.   int v216; // [rsp+14h] [rbp-4Ch]
  2110.   int v217; // [rsp+14h] [rbp-4Ch]
  2111.   int v218; // [rsp+14h] [rbp-4Ch]
  2112.   int v219; // [rsp+14h] [rbp-4Ch]
  2113.   int v220; // [rsp+14h] [rbp-4Ch]
  2114.   int v221; // [rsp+14h] [rbp-4Ch]
  2115.   int v222; // [rsp+14h] [rbp-4Ch]
  2116.   int v223; // [rsp+14h] [rbp-4Ch]
  2117.   int v224; // [rsp+14h] [rbp-4Ch]
  2118.   int v225; // [rsp+14h] [rbp-4Ch]
  2119.   int v226; // [rsp+14h] [rbp-4Ch]
  2120.   int v227; // [rsp+14h] [rbp-4Ch]
  2121.   int v228; // [rsp+14h] [rbp-4Ch]
  2122.   int v229; // [rsp+14h] [rbp-4Ch]
  2123.   int v230; // [rsp+14h] [rbp-4Ch]
  2124.   int v231; // [rsp+14h] [rbp-4Ch]
  2125.   int v232; // [rsp+14h] [rbp-4Ch]
  2126.   int v233; // [rsp+14h] [rbp-4Ch]
  2127.   int v234; // [rsp+14h] [rbp-4Ch]
  2128.   int v235; // [rsp+14h] [rbp-4Ch]
  2129.   int v236; // [rsp+14h] [rbp-4Ch]
  2130.   int v237; // [rsp+14h] [rbp-4Ch]
  2131.   int v238; // [rsp+14h] [rbp-4Ch]
  2132.   int v239; // [rsp+14h] [rbp-4Ch]
  2133.   int v240; // [rsp+14h] [rbp-4Ch]
  2134.   int v241; // [rsp+14h] [rbp-4Ch]
  2135.   int v242; // [rsp+14h] [rbp-4Ch]
  2136.   int v243; // [rsp+14h] [rbp-4Ch]
  2137.   int v244; // [rsp+14h] [rbp-4Ch]
  2138.   int v245; // [rsp+14h] [rbp-4Ch]
  2139.   int v246; // [rsp+14h] [rbp-4Ch]
  2140.   int v247; // [rsp+14h] [rbp-4Ch]
  2141.   int v248; // [rsp+14h] [rbp-4Ch]
  2142.   int v249; // [rsp+14h] [rbp-4Ch]
  2143.   int v250; // [rsp+14h] [rbp-4Ch]
  2144.   int v251; // [rsp+14h] [rbp-4Ch]
  2145.   int v252; // [rsp+14h] [rbp-4Ch]
  2146.   int v253; // [rsp+14h] [rbp-4Ch]
  2147.   int v254; // [rsp+14h] [rbp-4Ch]
  2148.   int v255; // [rsp+14h] [rbp-4Ch]
  2149.   int v256; // [rsp+14h] [rbp-4Ch]
  2150.   int v257; // [rsp+14h] [rbp-4Ch]
  2151.   int v258; // [rsp+14h] [rbp-4Ch]
  2152.   int v259; // [rsp+14h] [rbp-4Ch]
  2153.   int v260; // [rsp+14h] [rbp-4Ch]
  2154.   int v261; // [rsp+14h] [rbp-4Ch]
  2155.   int v262; // [rsp+14h] [rbp-4Ch]
  2156.   int v263; // [rsp+14h] [rbp-4Ch]
  2157.   int v264; // [rsp+14h] [rbp-4Ch]
  2158.   int v265; // [rsp+14h] [rbp-4Ch]
  2159.   int v266; // [rsp+14h] [rbp-4Ch]
  2160.   int v267; // [rsp+14h] [rbp-4Ch]
  2161.   int v268; // [rsp+14h] [rbp-4Ch]
  2162.   int v269; // [rsp+14h] [rbp-4Ch]
  2163.   int v270; // [rsp+14h] [rbp-4Ch]
  2164.   int v271; // [rsp+14h] [rbp-4Ch]
  2165.   int v272; // [rsp+14h] [rbp-4Ch]
  2166.   int v273; // [rsp+14h] [rbp-4Ch]
  2167.   int v274; // [rsp+14h] [rbp-4Ch]
  2168.   int v275; // [rsp+14h] [rbp-4Ch]
  2169.   int v276; // [rsp+14h] [rbp-4Ch]
  2170.   int v277; // [rsp+14h] [rbp-4Ch]
  2171.   int v278; // [rsp+14h] [rbp-4Ch]
  2172.   int v279; // [rsp+14h] [rbp-4Ch]
  2173.   int v280; // [rsp+14h] [rbp-4Ch]
  2174.   int v281; // [rsp+14h] [rbp-4Ch]
  2175.   int v282; // [rsp+14h] [rbp-4Ch]
  2176.   int v283; // [rsp+14h] [rbp-4Ch]
  2177.   int v284; // [rsp+14h] [rbp-4Ch]
  2178.   int v285; // [rsp+14h] [rbp-4Ch]
  2179.   int v286; // [rsp+14h] [rbp-4Ch]
  2180.   int v287; // [rsp+14h] [rbp-4Ch]
  2181.   int v288; // [rsp+14h] [rbp-4Ch]
  2182.   int v289; // [rsp+14h] [rbp-4Ch]
  2183.   int v290; // [rsp+14h] [rbp-4Ch]
  2184.   int v291; // [rsp+14h] [rbp-4Ch]
  2185.   int v292; // [rsp+14h] [rbp-4Ch]
  2186.   int v293; // [rsp+14h] [rbp-4Ch]
  2187.   int v294; // [rsp+14h] [rbp-4Ch]
  2188.   int v295; // [rsp+14h] [rbp-4Ch]
  2189.   int v296; // [rsp+14h] [rbp-4Ch]
  2190.   int v297; // [rsp+18h] [rbp-48h]
  2191.   int v298; // [rsp+18h] [rbp-48h]
  2192.   int v299; // [rsp+18h] [rbp-48h]
  2193.   int v300; // [rsp+18h] [rbp-48h]
  2194.   int v301; // [rsp+18h] [rbp-48h]
  2195.   int v302; // [rsp+18h] [rbp-48h]
  2196.   int v303; // [rsp+18h] [rbp-48h]
  2197.   int v304; // [rsp+18h] [rbp-48h]
  2198.   int v305; // [rsp+18h] [rbp-48h]
  2199.   int v306; // [rsp+18h] [rbp-48h]
  2200.   int v307; // [rsp+18h] [rbp-48h]
  2201.   int v308; // [rsp+18h] [rbp-48h]
  2202.   int v309; // [rsp+18h] [rbp-48h]
  2203.   int v310; // [rsp+18h] [rbp-48h]
  2204.   int v311; // [rsp+18h] [rbp-48h]
  2205.   int v312; // [rsp+18h] [rbp-48h]
  2206.   int v313; // [rsp+18h] [rbp-48h]
  2207.   int v314; // [rsp+18h] [rbp-48h]
  2208.   int v315; // [rsp+18h] [rbp-48h]
  2209.   int v316; // [rsp+18h] [rbp-48h]
  2210.   int v317; // [rsp+18h] [rbp-48h]
  2211.   int v318; // [rsp+18h] [rbp-48h]
  2212.   int v319; // [rsp+18h] [rbp-48h]
  2213.   int v320; // [rsp+18h] [rbp-48h]
  2214.   int v321; // [rsp+18h] [rbp-48h]
  2215.   int v322; // [rsp+18h] [rbp-48h]
  2216.   int v323; // [rsp+18h] [rbp-48h]
  2217.   int v324; // [rsp+18h] [rbp-48h]
  2218.   int v325; // [rsp+18h] [rbp-48h]
  2219.   int v326; // [rsp+18h] [rbp-48h]
  2220.   int v327; // [rsp+18h] [rbp-48h]
  2221.   int v328; // [rsp+18h] [rbp-48h]
  2222.   int v329; // [rsp+18h] [rbp-48h]
  2223.   int v330; // [rsp+18h] [rbp-48h]
  2224.   int v331; // [rsp+18h] [rbp-48h]
  2225.   int v332; // [rsp+18h] [rbp-48h]
  2226.   int v333; // [rsp+18h] [rbp-48h]
  2227.   int v334; // [rsp+18h] [rbp-48h]
  2228.   int v335; // [rsp+18h] [rbp-48h]
  2229.   int v336; // [rsp+18h] [rbp-48h]
  2230.   int v337; // [rsp+18h] [rbp-48h]
  2231.   int v338; // [rsp+18h] [rbp-48h]
  2232.   int v339; // [rsp+18h] [rbp-48h]
  2233.   int v340; // [rsp+18h] [rbp-48h]
  2234.   int v341; // [rsp+18h] [rbp-48h]
  2235.   int v342; // [rsp+18h] [rbp-48h]
  2236.   int v343; // [rsp+18h] [rbp-48h]
  2237.   int v344; // [rsp+18h] [rbp-48h]
  2238.   int v345; // [rsp+18h] [rbp-48h]
  2239.   int v346; // [rsp+18h] [rbp-48h]
  2240.   int v347; // [rsp+18h] [rbp-48h]
  2241.   int v348; // [rsp+18h] [rbp-48h]
  2242.   int v349; // [rsp+18h] [rbp-48h]
  2243.   int v350; // [rsp+18h] [rbp-48h]
  2244.   int v351; // [rsp+18h] [rbp-48h]
  2245.   int v352; // [rsp+18h] [rbp-48h]
  2246.   int v353; // [rsp+18h] [rbp-48h]
  2247.   int v354; // [rsp+18h] [rbp-48h]
  2248.   int v355; // [rsp+18h] [rbp-48h]
  2249.   int v356; // [rsp+18h] [rbp-48h]
  2250.   int v357; // [rsp+18h] [rbp-48h]
  2251.   int v358; // [rsp+18h] [rbp-48h]
  2252.   int v359; // [rsp+18h] [rbp-48h]
  2253.   int v360; // [rsp+18h] [rbp-48h]
  2254.   int v361; // [rsp+18h] [rbp-48h]
  2255.   int v362; // [rsp+18h] [rbp-48h]
  2256.   int v363; // [rsp+18h] [rbp-48h]
  2257.   int v364; // [rsp+18h] [rbp-48h]
  2258.   int v365; // [rsp+18h] [rbp-48h]
  2259.   int v366; // [rsp+18h] [rbp-48h]
  2260.   int v367; // [rsp+18h] [rbp-48h]
  2261.   int v368; // [rsp+18h] [rbp-48h]
  2262.   int v369; // [rsp+18h] [rbp-48h]
  2263.   int v370; // [rsp+18h] [rbp-48h]
  2264.   int v371; // [rsp+18h] [rbp-48h]
  2265.   int v372; // [rsp+18h] [rbp-48h]
  2266.   int v373; // [rsp+18h] [rbp-48h]
  2267.   int v374; // [rsp+18h] [rbp-48h]
  2268.   int v375; // [rsp+18h] [rbp-48h]
  2269.   int v376; // [rsp+18h] [rbp-48h]
  2270.   int v377; // [rsp+18h] [rbp-48h]
  2271.   int v378; // [rsp+18h] [rbp-48h]
  2272.   int v379; // [rsp+18h] [rbp-48h]
  2273.   int v380; // [rsp+18h] [rbp-48h]
  2274.   int v381; // [rsp+18h] [rbp-48h]
  2275.   int v382; // [rsp+18h] [rbp-48h]
  2276.   int v383; // [rsp+18h] [rbp-48h]
  2277.   int v384; // [rsp+1Ch] [rbp-44h]
  2278.   int v385; // [rsp+1Ch] [rbp-44h]
  2279.   int v386; // [rsp+1Ch] [rbp-44h]
  2280.   int v387; // [rsp+1Ch] [rbp-44h]
  2281.   int v388; // [rsp+1Ch] [rbp-44h]
  2282.   int v389; // [rsp+1Ch] [rbp-44h]
  2283.   int v390; // [rsp+1Ch] [rbp-44h]
  2284.   int v391; // [rsp+1Ch] [rbp-44h]
  2285.   int v392; // [rsp+1Ch] [rbp-44h]
  2286.   int v393; // [rsp+1Ch] [rbp-44h]
  2287.   int v394; // [rsp+1Ch] [rbp-44h]
  2288.   int v395; // [rsp+1Ch] [rbp-44h]
  2289.   int v396; // [rsp+1Ch] [rbp-44h]
  2290.   int v397; // [rsp+1Ch] [rbp-44h]
  2291.   int v398; // [rsp+1Ch] [rbp-44h]
  2292.   int v399; // [rsp+1Ch] [rbp-44h]
  2293.   int v400; // [rsp+1Ch] [rbp-44h]
  2294.   int v401; // [rsp+1Ch] [rbp-44h]
  2295.   int v402; // [rsp+1Ch] [rbp-44h]
  2296.   int v403; // [rsp+1Ch] [rbp-44h]
  2297.   int v404; // [rsp+1Ch] [rbp-44h]
  2298.   int v405; // [rsp+1Ch] [rbp-44h]
  2299.   int v406; // [rsp+1Ch] [rbp-44h]
  2300.   int v407; // [rsp+1Ch] [rbp-44h]
  2301.   int v408; // [rsp+1Ch] [rbp-44h]
  2302.   int v409; // [rsp+1Ch] [rbp-44h]
  2303.   int v410; // [rsp+1Ch] [rbp-44h]
  2304.   int v411; // [rsp+1Ch] [rbp-44h]
  2305.   int v412; // [rsp+1Ch] [rbp-44h]
  2306.   int v413; // [rsp+1Ch] [rbp-44h]
  2307.   int v414; // [rsp+1Ch] [rbp-44h]
  2308.   int v415; // [rsp+1Ch] [rbp-44h]
  2309.   int v416; // [rsp+1Ch] [rbp-44h]
  2310.   int v417; // [rsp+1Ch] [rbp-44h]
  2311.   int v418; // [rsp+1Ch] [rbp-44h]
  2312.   int v419; // [rsp+1Ch] [rbp-44h]
  2313.   int v420; // [rsp+1Ch] [rbp-44h]
  2314.   int v421; // [rsp+1Ch] [rbp-44h]
  2315.   int v422; // [rsp+1Ch] [rbp-44h]
  2316.   int v423; // [rsp+1Ch] [rbp-44h]
  2317.   int v424; // [rsp+1Ch] [rbp-44h]
  2318.   int v425; // [rsp+1Ch] [rbp-44h]
  2319.   int v426; // [rsp+1Ch] [rbp-44h]
  2320.   int v427; // [rsp+1Ch] [rbp-44h]
  2321.   int v428; // [rsp+1Ch] [rbp-44h]
  2322.   int v429; // [rsp+1Ch] [rbp-44h]
  2323.   int v430; // [rsp+1Ch] [rbp-44h]
  2324.   int v431; // [rsp+1Ch] [rbp-44h]
  2325.   int v432; // [rsp+1Ch] [rbp-44h]
  2326.   int v433; // [rsp+1Ch] [rbp-44h]
  2327.   int v434; // [rsp+1Ch] [rbp-44h]
  2328.   int v435; // [rsp+1Ch] [rbp-44h]
  2329.   int v436; // [rsp+1Ch] [rbp-44h]
  2330.   int v437; // [rsp+1Ch] [rbp-44h]
  2331.   int v438; // [rsp+1Ch] [rbp-44h]
  2332.   int v439; // [rsp+1Ch] [rbp-44h]
  2333.   int v440; // [rsp+1Ch] [rbp-44h]
  2334.   int v441; // [rsp+1Ch] [rbp-44h]
  2335.   int v442; // [rsp+1Ch] [rbp-44h]
  2336.   int v443; // [rsp+1Ch] [rbp-44h]
  2337.   int v444; // [rsp+1Ch] [rbp-44h]
  2338.   int v445; // [rsp+1Ch] [rbp-44h]
  2339.   int v446; // [rsp+1Ch] [rbp-44h]
  2340.   int v447; // [rsp+1Ch] [rbp-44h]
  2341.   int v448; // [rsp+1Ch] [rbp-44h]
  2342.   int v449; // [rsp+1Ch] [rbp-44h]
  2343.   int v450; // [rsp+1Ch] [rbp-44h]
  2344.   int v451; // [rsp+1Ch] [rbp-44h]
  2345.   int v452; // [rsp+1Ch] [rbp-44h]
  2346.   int v453; // [rsp+1Ch] [rbp-44h]
  2347.   int v454; // [rsp+1Ch] [rbp-44h]
  2348.   int v455; // [rsp+1Ch] [rbp-44h]
  2349.   int v456; // [rsp+1Ch] [rbp-44h]
  2350.   int v457; // [rsp+1Ch] [rbp-44h]
  2351.   int v458; // [rsp+1Ch] [rbp-44h]
  2352.   int v459; // [rsp+1Ch] [rbp-44h]
  2353.   int v460; // [rsp+1Ch] [rbp-44h]
  2354.   int v461; // [rsp+1Ch] [rbp-44h]
  2355.   int v462; // [rsp+1Ch] [rbp-44h]
  2356.   int v463; // [rsp+1Ch] [rbp-44h]
  2357.   int v464; // [rsp+1Ch] [rbp-44h]
  2358.   int v465; // [rsp+1Ch] [rbp-44h]
  2359.   int v466; // [rsp+1Ch] [rbp-44h]
  2360.   int v467; // [rsp+1Ch] [rbp-44h]
  2361.   unsigned __int16 dest[2]; // [rsp+40h] [rbp-20h] BYREF
  2362.   unsigned __int16 v470; // [rsp+44h] [rbp-1Ch] BYREF
  2363.   unsigned __int16 v471[2]; // [rsp+48h] [rbp-18h] BYREF
  2364.   unsigned __int16 v472[6]; // [rsp+4Ch] [rbp-14h] BYREF
  2365.   unsigned __int64 v473; // [rsp+58h] [rbp-8h]
  2366.  
  2367.   v473 = __readfsqword(0x28u);
  2368.   if ( a4 <= 0xF )
  2369.   {
  2370.     if ( a4 )
  2371.       memcpy(dest, a3, a4);
  2372.     memset((char *)dest + a4, 0, 16 - a4);
  2373.   }
  2374.   else
  2375.   {
  2376.     memcpy(dest, a3, 0x10uLL);
  2377.   }
  2378.   v20 = decode32le(dest);
  2379.   v107 = decode32le(&v470);
  2380.   v208 = decode32le(v471);
  2381.   v4 = decode32le(v472);
  2382.   v21 = *a2 ^ v20;
  2383.   v209 = a2[2] ^ v208;
  2384.   v297 = v21 ^ a2[3] ^ v4;
  2385.   v384 = a2[1] ^ v107;
  2386.   v108 = v297 & v384;
  2387.   v385 = v209 ^ v384;
  2388.   v109 = v21 ^ v108;
  2389.   v22 = v385 ^ (v297 | v21);
  2390.   v386 = v297 ^ v385;
  2391.   v298 = v209 ^ v297;
  2392.   v210 = v386 ^ (v109 | v209);
  2393.   v387 = v109 | ~v386;
  2394.   v110 = v387 ^ v298 ^ v109;
  2395.   v299 = v22 | v298;
  2396.   v111 = __ROR4__(v299 ^ v110, 19);
  2397.   v211 = __ROR4__(v210, 29);
  2398.   v388 = __ROR4__(v111 ^ v299 ^ v387 ^ v211, 31);
  2399.   v23 = __ROR4__((8 * v111) ^ v211 ^ v22, 25);
  2400.   v5 = __ROR4__((v388 << 7) ^ v23 ^ v211, 10);
  2401.   v112 = a2[4] ^ __ROR4__(v388 ^ v111 ^ v23, 27);
  2402.   v389 = a2[5] ^ v388;
  2403.   v24 = a2[7] ^ v23;
  2404.   v300 = ~v112;
  2405.   v113 = v389 & ~v112;
  2406.   v212 = v113 ^ ~(a2[6] ^ v5);
  2407.   v114 = v24 | v113;
  2408.   v25 = v212 ^ v24;
  2409.   v390 = v114 ^ v389;
  2410.   v115 = v300 ^ v114;
  2411.   v301 = v390 | v300;
  2412.   v391 = v25 ^ v390;
  2413.   v213 = v301 & (v115 | v212);
  2414.   v116 = v391 ^ v115;
  2415.   v392 = v116 ^ v213 & v391;
  2416.   v117 = v301 ^ v213 & v116;
  2417.   v214 = __ROR4__(v213, 19);
  2418.   v26 = __ROR4__(v25, 29);
  2419.   v118 = __ROR4__(v214 ^ v117 ^ v26, 31);
  2420.   v393 = __ROR4__((8 * v214) ^ v26 ^ v392, 25);
  2421.   v6 = __ROR4__((v118 << 7) ^ v393 ^ v26, 10);
  2422.   v215 = a2[8] ^ __ROR4__(v118 ^ v214 ^ v393, 27);
  2423.   v119 = a2[9] ^ v118;
  2424.   v27 = a2[10] ^ v6;
  2425.   v394 = a2[11] ^ v393;
  2426.   v302 = v215;
  2427.   v216 = v394 ^ v27 & v215;
  2428.   v28 = v216 ^ v119 ^ v27;
  2429.   v395 = v119 ^ (v302 | v394);
  2430.   v303 = v28 ^ v302;
  2431.   v120 = v395;
  2432.   v396 = v216 ^ (v303 | v395);
  2433.   v304 = v120 & v216 ^ v303;
  2434.   v29 = __ROR4__(v28, 19);
  2435.   v121 = __ROR4__(v304 ^ v396 ^ v120, 29);
  2436.   v397 = __ROR4__(v29 ^ v396 ^ v121, 31);
  2437.   v305 = __ROR4__((8 * v29) ^ v121 ^ ~v304, 25);
  2438.   v7 = __ROR4__((v397 << 7) ^ v305 ^ v121, 10);
  2439.   v30 = a2[12] ^ __ROR4__(v397 ^ v29 ^ v305, 27);
  2440.   v398 = a2[13] ^ v397;
  2441.   v122 = a2[14] ^ v7;
  2442.   v306 = a2[15] ^ v305;
  2443.   v217 = v30;
  2444.   v31 = v306 | v30;
  2445.   v307 = v398 ^ v306;
  2446.   v399 = v217 & v398;
  2447.   v218 = v122 ^ v217;
  2448.   v123 = v307 ^ v122;
  2449.   v219 = v399 | v218;
  2450.   v308 = v219 ^ v31 & v307;
  2451.   v32 = v399 ^ v31;
  2452.   v220 = v123 ^ v32 & v219;
  2453.   v124 = v123 ^ (v32 | v308 ^ v399);
  2454.   v400 = __ROR4__(v308 ^ v32 ^ (v308 | v124), 19);
  2455.   v309 = __ROR4__(v308, 29);
  2456.   v125 = __ROR4__(v400 ^ v124 ^ v309, 31);
  2457.   v221 = __ROR4__((8 * v400) ^ v309 ^ v220, 25);
  2458.   v8 = __ROR4__((v125 << 7) ^ v221 ^ v309, 10);
  2459.   v401 = a2[16] ^ __ROR4__(v125 ^ v400 ^ v221, 27);
  2460.   v222 = a2[19] ^ v221;
  2461.   v126 = v222 ^ a2[17] ^ v125;
  2462.   v223 = ~v222;
  2463.   v310 = v223 ^ a2[18] ^ v8;
  2464.   v224 = v401 ^ v223;
  2465.   v33 = v126;
  2466.   v127 = v310 ^ v224 & v126;
  2467.   v34 = v224 ^ v33;
  2468.   v402 = v34 ^ v401;
  2469.   v311 = v402 ^ v34 & v310;
  2470.   v403 = v127 & v402;
  2471.   v225 = v403 ^ v224;
  2472.   v35 = v403 ^ (v127 | v34);
  2473.   v128 = __ROR4__(v127, 19);
  2474.   v404 = __ROR4__(~(v311 ^ (v225 | v403)), 29);
  2475.   v36 = __ROR4__(v128 ^ v225 & v311 ^ v35 ^ v404, 31);
  2476.   v226 = __ROR4__((8 * v128) ^ v404 ^ v225, 25);
  2477.   v9 = __ROR4__((v36 << 7) ^ v226 ^ v404, 10);
  2478.   v129 = a2[20] ^ __ROR4__(v36 ^ v128 ^ v226, 27);
  2479.   v37 = a2[21] ^ v36;
  2480.   v227 = a2[23] ^ v226;
  2481.   v130 = v37 ^ v129;
  2482.   v38 = v227 ^ v37;
  2483.   v228 = ~v227;
  2484.   v312 = v38;
  2485.   v405 = v228 ^ a2[22] ^ v9;
  2486.   v39 = v405 ^ v130 & v38;
  2487.   v406 = v312 | v405;
  2488.   v313 = v228 ^ v312;
  2489.   v229 = v130 ^ v39 & v228;
  2490.   v314 = v406 ^ v39 ^ v313;
  2491.   v407 = (v229 | v314) ^ ~(v130 ^ v406);
  2492.   v40 = __ROR4__(v39, 19);
  2493.   v131 = __ROR4__(v314 ^ v229 & v130, 29);
  2494.   v230 = __ROR4__(v40 ^ v229 ^ v131, 31);
  2495.   v408 = __ROR4__((8 * v40) ^ v131 ^ v407, 25);
  2496.   v41 = a2[24] ^ __ROR4__(v230 ^ v40 ^ v408, 27);
  2497.   v132 = ~(a2[26] ^ __ROR4__((v230 << 7) ^ v408 ^ v131, 10));
  2498.   v315 = a2[27] ^ v408;
  2499.   v409 = v41 & v315;
  2500.   v42 = v315 ^ v41;
  2501.   v410 = v132 ^ v409;
  2502.   v231 = v410 ^ a2[25] ^ v230;
  2503.   v133 = v42 ^ (v315 | v132);
  2504.   v43 = v231 | v42;
  2505.   v134 = v231 ^ v133;
  2506.   v316 = v43 ^ v315;
  2507.   v44 = v134 ^ (v410 | v43);
  2508.   v317 = v44 ^ v410 ^ v316;
  2509.   v135 = ~v410 ^ v317 & v134;
  2510.   v45 = __ROR4__(v44, 19);
  2511.   v318 = __ROR4__(v317, 29);
  2512.   v232 = __ROR4__(v45 ^ v231 ^ v318, 31);
  2513.   v136 = __ROR4__((8 * v45) ^ v318 ^ v135, 25);
  2514.   v46 = a2[28] ^ __ROR4__(v232 ^ v45 ^ v136, 27);
  2515.   v319 = a2[30] ^ __ROR4__((v232 << 7) ^ v136 ^ v318, 10);
  2516.   v137 = a2[31] ^ v136;
  2517.   v411 = a2[29] ^ v232;
  2518.   v233 = v137 ^ (v319 | v411);
  2519.   v412 = v319 ^ v411;
  2520.   v320 = v233 ^ v319;
  2521.   v138 = v46 & (v412 | v137);
  2522.   v413 = v320 ^ v412;
  2523.   v139 = v233 ^ v138;
  2524.   v234 = v46 ^ (v413 | v233);
  2525.   v47 = v320 ^ (v413 | v46);
  2526.   v235 = v413 ^ v234;
  2527.   v321 = v235 ^ v320;
  2528.   v236 = v413 ^ v47 & v235;
  2529.   v414 = __ROR4__((v47 | ~v321) ^ v413, 19);
  2530.   v237 = __ROR4__(v236, 29);
  2531.   v140 = __ROR4__(v414 ^ v139 ^ v237, 31);
  2532.   v48 = __ROR4__((8 * v414) ^ v237 ^ v47, 25);
  2533.   v415 = a2[32] ^ __ROR4__(v140 ^ v414 ^ v48, 27);
  2534.   v238 = a2[34] ^ __ROR4__((v140 << 7) ^ v48 ^ v237, 10);
  2535.   v49 = v415 ^ a2[35] ^ v48;
  2536.   v322 = a2[33] ^ v140;
  2537.   v141 = v49 & v322;
  2538.   v323 = v238 ^ v322;
  2539.   v142 = v415 ^ v141;
  2540.   v416 = v323 ^ (v49 | v415);
  2541.   v324 = v49 ^ v323;
  2542.   v50 = v238 ^ v49;
  2543.   v239 = v324 ^ (v142 | v238);
  2544.   v325 = v142 | ~v324;
  2545.   v143 = v325 ^ v50 ^ v142;
  2546.   v51 = v416 | v50;
  2547.   v144 = __ROR4__(v51 ^ v143, 19);
  2548.   v240 = __ROR4__(v239, 29);
  2549.   v326 = __ROR4__(v144 ^ v51 ^ v325 ^ v240, 31);
  2550.   v417 = __ROR4__((8 * v144) ^ v240 ^ v416, 25);
  2551.   v10 = __ROR4__((v326 << 7) ^ v417 ^ v240, 10);
  2552.   v145 = a2[36] ^ __ROR4__(v326 ^ v144 ^ v417, 27);
  2553.   v327 = a2[37] ^ v326;
  2554.   v418 = a2[39] ^ v417;
  2555.   v52 = ~v145;
  2556.   v146 = v327 & ~v145;
  2557.   v241 = v146 ^ ~(a2[38] ^ v10);
  2558.   v147 = v418 | v146;
  2559.   v419 = v241 ^ v418;
  2560.   v328 = v147 ^ v327;
  2561.   v148 = v52 ^ v147;
  2562.   v53 = v328 | v52;
  2563.   v329 = v419 ^ v328;
  2564.   v242 = v53 & (v148 | v241);
  2565.   v149 = v329 ^ v148;
  2566.   v330 = v149 ^ v242 & v329;
  2567.   v150 = v53 ^ v242 & v149;
  2568.   v243 = __ROR4__(v242, 19);
  2569.   v420 = __ROR4__(v419, 29);
  2570.   v151 = __ROR4__(v243 ^ v150 ^ v420, 31);
  2571.   v331 = __ROR4__((8 * v243) ^ v420 ^ v330, 25);
  2572.   v11 = __ROR4__((v151 << 7) ^ v331 ^ v420, 10);
  2573.   v244 = a2[40] ^ __ROR4__(v151 ^ v243 ^ v331, 27);
  2574.   v152 = a2[41] ^ v151;
  2575.   v421 = a2[42] ^ v11;
  2576.   v332 = a2[43] ^ v331;
  2577.   v54 = v244;
  2578.   v245 = v332 ^ v421 & v244;
  2579.   v422 = v245 ^ v152 ^ v421;
  2580.   v333 = v152 ^ (v54 | v332);
  2581.   v55 = v422 ^ v54;
  2582.   v153 = v333;
  2583.   v334 = v245 ^ (v55 | v333);
  2584.   v56 = v153 & v245 ^ v55;
  2585.   v423 = __ROR4__(v422, 19);
  2586.   v154 = __ROR4__(v56 ^ v334 ^ v153, 29);
  2587.   v335 = __ROR4__(v423 ^ v334 ^ v154, 31);
  2588.   v57 = __ROR4__((8 * v423) ^ v154 ^ ~v56, 25);
  2589.   v12 = __ROR4__((v335 << 7) ^ v57 ^ v154, 10);
  2590.   v424 = a2[44] ^ __ROR4__(v335 ^ v423 ^ v57, 27);
  2591.   v336 = a2[45] ^ v335;
  2592.   v155 = a2[46] ^ v12;
  2593.   v58 = a2[47] ^ v57;
  2594.   v246 = v424;
  2595.   v425 = v58 | v424;
  2596.   v59 = v336 ^ v58;
  2597.   v337 = v246 & v336;
  2598.   v247 = v155 ^ v246;
  2599.   v156 = v59 ^ v155;
  2600.   v248 = v337 | v247;
  2601.   v60 = v248 ^ v425 & v59;
  2602.   v426 = v337 ^ v425;
  2603.   v249 = v156 ^ v426 & v248;
  2604.   v157 = v156 ^ (v426 | v60 ^ v337);
  2605.   v338 = __ROR4__(v60 ^ v426 ^ (v60 | v157), 19);
  2606.   v61 = __ROR4__(v60, 29);
  2607.   v158 = __ROR4__(v338 ^ v157 ^ v61, 31);
  2608.   v250 = __ROR4__((8 * v338) ^ v61 ^ v249, 25);
  2609.   v339 = __ROR4__(v158 ^ v338 ^ v250, 27);
  2610.   v62 = __ROR4__((v158 << 7) ^ v250 ^ v61, 10);
  2611.   a1[9] = v339;
  2612.   a1[8] = v158;
  2613.   a1[7] = v62;
  2614.   a1[6] = v250;
  2615.   v340 = a2[48] ^ v339;
  2616.   v251 = a2[51] ^ v250;
  2617.   v159 = v251 ^ a2[49] ^ v158;
  2618.   v252 = ~v251;
  2619.   v63 = v252 ^ a2[50] ^ v62;
  2620.   v253 = v340 ^ v252;
  2621.   v427 = v159;
  2622.   v160 = v63 ^ v253 & v159;
  2623.   v428 = v253 ^ v427;
  2624.   v341 = v428 ^ v340;
  2625.   v64 = v341 ^ v428 & v63;
  2626.   v342 = v160 & v341;
  2627.   v254 = v342 ^ v253;
  2628.   v429 = v342 ^ (v160 | v428);
  2629.   v161 = __ROR4__(v160, 19);
  2630.   v343 = __ROR4__(~(v64 ^ (v254 | v342)), 29);
  2631.   v430 = __ROR4__(v161 ^ v254 & v64 ^ v429 ^ v343, 31);
  2632.   v255 = __ROR4__((8 * v161) ^ v343 ^ v254, 25);
  2633.   v13 = __ROR4__((v430 << 7) ^ v255 ^ v343, 10);
  2634.   v162 = a2[52] ^ __ROR4__(v430 ^ v161 ^ v255, 27);
  2635.   v431 = a2[53] ^ v430;
  2636.   v256 = a2[55] ^ v255;
  2637.   v163 = v431 ^ v162;
  2638.   v432 = v256 ^ v431;
  2639.   v257 = ~v256;
  2640.   v65 = v432;
  2641.   v344 = v257 ^ a2[54] ^ v13;
  2642.   v433 = v344 ^ v163 & v432;
  2643.   v345 = v65 | v344;
  2644.   v66 = v257 ^ v65;
  2645.   v258 = v163 ^ v433 & v257;
  2646.   v67 = v345 ^ v433 ^ v66;
  2647.   v346 = (v258 | v67) ^ ~(v163 ^ v345);
  2648.   v434 = __ROR4__(v433, 19);
  2649.   v164 = __ROR4__(v67 ^ v258 & v163, 29);
  2650.   v259 = __ROR4__(v434 ^ v258 ^ v164, 31);
  2651.   v347 = __ROR4__((8 * v434) ^ v164 ^ v346, 25);
  2652.   v435 = a2[56] ^ __ROR4__(v259 ^ v434 ^ v347, 27);
  2653.   v165 = ~(a2[58] ^ __ROR4__((v259 << 7) ^ v347 ^ v164, 10));
  2654.   v68 = a2[59] ^ v347;
  2655.   v348 = v435 & v68;
  2656.   v436 = v68 ^ v435;
  2657.   v349 = v165 ^ v348;
  2658.   v260 = v349 ^ a2[57] ^ v259;
  2659.   v166 = v436 ^ (v68 | v165);
  2660.   v437 = v260 | v436;
  2661.   v167 = v260 ^ v166;
  2662.   v69 = v437 ^ v68;
  2663.   v438 = v167 ^ (v349 | v437);
  2664.   v70 = v438 ^ v349 ^ v69;
  2665.   v168 = ~v349 ^ v70 & v167;
  2666.   v439 = __ROR4__(v438, 19);
  2667.   v71 = __ROR4__(v70, 29);
  2668.   v261 = __ROR4__(v439 ^ v260 ^ v71, 31);
  2669.   v169 = __ROR4__((8 * v439) ^ v71 ^ v168, 25);
  2670.   v440 = a2[60] ^ __ROR4__(v261 ^ v439 ^ v169, 27);
  2671.   v72 = a2[62] ^ __ROR4__((v261 << 7) ^ v169 ^ v71, 10);
  2672.   v170 = a2[63] ^ v169;
  2673.   v350 = a2[61] ^ v261;
  2674.   v262 = v170 ^ (v72 | v350);
  2675.   v351 = v72 ^ v350;
  2676.   v73 = v262 ^ v72;
  2677.   v171 = v440 & (v351 | v170);
  2678.   v352 = v73 ^ v351;
  2679.   v172 = v262 ^ v171;
  2680.   v263 = v440 ^ (v352 | v262);
  2681.   v441 = v73 ^ (v352 | v440);
  2682.   v264 = v352 ^ v263;
  2683.   v74 = v264 ^ v73;
  2684.   v265 = v352 ^ v441 & v264;
  2685.   v353 = __ROR4__((v441 | ~v74) ^ v352, 19);
  2686.   v266 = __ROR4__(v265, 29);
  2687.   v173 = __ROR4__(v353 ^ v172 ^ v266, 31);
  2688.   v442 = __ROR4__((8 * v353) ^ v266 ^ v441, 25);
  2689.   v354 = a2[64] ^ __ROR4__(v173 ^ v353 ^ v442, 27);
  2690.   v267 = a2[66] ^ __ROR4__((v173 << 7) ^ v442 ^ v266, 10);
  2691.   v443 = v354 ^ a2[67] ^ v442;
  2692.   v75 = a2[65] ^ v173;
  2693.   v174 = v443 & v75;
  2694.   v76 = v267 ^ v75;
  2695.   v175 = v354 ^ v174;
  2696.   v355 = v76 ^ (v443 | v354);
  2697.   v77 = v443 ^ v76;
  2698.   v444 = v267 ^ v443;
  2699.   v268 = v77 ^ (v175 | v267);
  2700.   v78 = v175 | ~v77;
  2701.   v176 = v78 ^ v444 ^ v175;
  2702.   v445 = v355 | v444;
  2703.   v177 = __ROR4__(v445 ^ v176, 19);
  2704.   v269 = __ROR4__(v268, 29);
  2705.   v79 = __ROR4__(v177 ^ v445 ^ v78 ^ v269, 31);
  2706.   v356 = __ROR4__((8 * v177) ^ v269 ^ v355, 25);
  2707.   v14 = __ROR4__((v79 << 7) ^ v356 ^ v269, 10);
  2708.   v178 = a2[68] ^ __ROR4__(v79 ^ v177 ^ v356, 27);
  2709.   v80 = a2[69] ^ v79;
  2710.   v357 = a2[71] ^ v356;
  2711.   v446 = ~v178;
  2712.   v179 = v80 & ~v178;
  2713.   v270 = v179 ^ ~(a2[70] ^ v14);
  2714.   v180 = v357 | v179;
  2715.   v358 = v270 ^ v357;
  2716.   v81 = v180 ^ v80;
  2717.   v181 = v446 ^ v180;
  2718.   v447 = v81 | v446;
  2719.   v82 = v358 ^ v81;
  2720.   v271 = v447 & (v181 | v270);
  2721.   v182 = v82 ^ v181;
  2722.   v83 = v182 ^ v271 & v82;
  2723.   v183 = v447 ^ v271 & v182;
  2724.   v272 = __ROR4__(v271, 19);
  2725.   v359 = __ROR4__(v358, 29);
  2726.   v184 = __ROR4__(v272 ^ v183 ^ v359, 31);
  2727.   v84 = __ROR4__((8 * v272) ^ v359 ^ v83, 25);
  2728.   v273 = __ROR4__(v184 ^ v272 ^ v84, 27);
  2729.   v360 = __ROR4__((v184 << 7) ^ v84 ^ v359, 10);
  2730.   a1[10] = v273;
  2731.   a1[4] = v184;
  2732.   a1[11] = v360;
  2733.   a1[5] = v84;
  2734.   v185 = a2[73] ^ v184;
  2735.   v361 = a2[74] ^ v360;
  2736.   v85 = a2[75] ^ v84;
  2737.   v448 = a2[72] ^ v273;
  2738.   v274 = v85 ^ v361 & v448;
  2739.   v362 = v274 ^ v185 ^ v361;
  2740.   v86 = v185 ^ (v448 | v85);
  2741.   v449 = v362 ^ v448;
  2742.   v186 = v86;
  2743.   v87 = v274 ^ (v449 | v86);
  2744.   v450 = v186 & v274 ^ v449;
  2745.   v363 = __ROR4__(v362, 19);
  2746.   v187 = __ROR4__(v450 ^ v87 ^ v186, 29);
  2747.   v88 = __ROR4__(v363 ^ v87 ^ v187, 31);
  2748.   v451 = __ROR4__((8 * v363) ^ v187 ^ ~v450, 25);
  2749.   v15 = __ROR4__((v88 << 7) ^ v451 ^ v187, 10);
  2750.   v364 = a2[76] ^ __ROR4__(v88 ^ v363 ^ v451, 27);
  2751.   v89 = a2[77] ^ v88;
  2752.   v188 = a2[78] ^ v15;
  2753.   v452 = a2[79] ^ v451;
  2754.   v275 = v364;
  2755.   v365 = v452 | v364;
  2756.   v453 = v89 ^ v452;
  2757.   v90 = v275 & v89;
  2758.   v276 = v188 ^ v275;
  2759.   v189 = v453 ^ v188;
  2760.   v277 = v90 | v276;
  2761.   v454 = v277 ^ v365 & v453;
  2762.   v366 = v90 ^ v365;
  2763.   v278 = v189 ^ v366 & v277;
  2764.   v190 = v189 ^ (v366 | v454 ^ v90);
  2765.   v91 = __ROR4__(v454 ^ v366 ^ (v454 | v190), 19);
  2766.   v455 = __ROR4__(v454, 29);
  2767.   v191 = __ROR4__(v91 ^ v190 ^ v455, 31);
  2768.   v279 = __ROR4__((8 * v91) ^ v455 ^ v278, 25);
  2769.   v16 = __ROR4__((v191 << 7) ^ v279 ^ v455, 10);
  2770.   v92 = a2[80] ^ __ROR4__(v191 ^ v91 ^ v279, 27);
  2771.   v280 = a2[83] ^ v279;
  2772.   v192 = v280 ^ a2[81] ^ v191;
  2773.   v281 = ~v280;
  2774.   v456 = v281 ^ a2[82] ^ v16;
  2775.   v282 = v92 ^ v281;
  2776.   v367 = v192;
  2777.   v193 = v456 ^ v282 & v192;
  2778.   v368 = v282 ^ v367;
  2779.   v93 = v368 ^ v92;
  2780.   v457 = v93 ^ v368 & v456;
  2781.   v94 = v193 & v93;
  2782.   v283 = v94 ^ v282;
  2783.   v369 = v94 ^ (v193 | v368);
  2784.   v194 = __ROR4__(v193, 19);
  2785.   v95 = __ROR4__(~(v457 ^ (v283 | v94)), 29);
  2786.   v370 = __ROR4__(v194 ^ v283 & v457 ^ v369 ^ v95, 31);
  2787.   v284 = __ROR4__((8 * v194) ^ v95 ^ v283, 25);
  2788.   v17 = __ROR4__((v370 << 7) ^ v284 ^ v95, 10);
  2789.   v195 = a2[84] ^ __ROR4__(v370 ^ v194 ^ v284, 27);
  2790.   v371 = a2[85] ^ v370;
  2791.   v285 = a2[87] ^ v284;
  2792.   v196 = v371 ^ v195;
  2793.   v372 = v285 ^ v371;
  2794.   v286 = ~v285;
  2795.   v458 = v372;
  2796.   v96 = v286 ^ a2[86] ^ v17;
  2797.   v373 = v96 ^ v196 & v372;
  2798.   v97 = v458 | v96;
  2799.   v459 = v286 ^ v458;
  2800.   v287 = v196 ^ v373 & v286;
  2801.   v460 = v97 ^ v373 ^ v459;
  2802.   v98 = (v287 | v460) ^ ~(v196 ^ v97);
  2803.   v374 = __ROR4__(v373, 19);
  2804.   v197 = __ROR4__(v460 ^ v287 & v196, 29);
  2805.   v288 = __ROR4__(v374 ^ v287 ^ v197, 31);
  2806.   v99 = __ROR4__((8 * v374) ^ v197 ^ v98, 25);
  2807.   v375 = a2[88] ^ __ROR4__(v288 ^ v374 ^ v99, 27);
  2808.   v198 = ~(a2[90] ^ __ROR4__((v288 << 7) ^ v99 ^ v197, 10));
  2809.   v461 = a2[91] ^ v99;
  2810.   v100 = v375 & v461;
  2811.   v376 = v461 ^ v375;
  2812.   v101 = v198 ^ v100;
  2813.   v289 = v101 ^ a2[89] ^ v288;
  2814.   v199 = v376 ^ (v461 | v198);
  2815.   v377 = v289 | v376;
  2816.   v200 = v289 ^ v199;
  2817.   v462 = v377 ^ v461;
  2818.   v378 = v200 ^ (v101 | v377);
  2819.   v463 = v378 ^ v101 ^ v462;
  2820.   v201 = ~v101 ^ v463 & v200;
  2821.   v379 = __ROR4__(v378, 19);
  2822.   v464 = __ROR4__(v463, 29);
  2823.   v290 = __ROR4__(v379 ^ v289 ^ v464, 31);
  2824.   v202 = __ROR4__((8 * v379) ^ v464 ^ v201, 25);
  2825.   v380 = a2[92] ^ __ROR4__(v290 ^ v379 ^ v202, 27);
  2826.   v465 = a2[94] ^ __ROR4__((v290 << 7) ^ v202 ^ v464, 10);
  2827.   v203 = a2[95] ^ v202;
  2828.   v102 = a2[93] ^ v290;
  2829.   v291 = v203 ^ (v465 | v102);
  2830.   v103 = v465 ^ v102;
  2831.   v466 = v291 ^ v465;
  2832.   v204 = v380 & (v103 | v203);
  2833.   v104 = v466 ^ v103;
  2834.   v205 = v291 ^ v204;
  2835.   v292 = v380 ^ (v104 | v291);
  2836.   v381 = v466 ^ (v104 | v380);
  2837.   v293 = v104 ^ v292;
  2838.   v467 = v293 ^ v466;
  2839.   v294 = v104 ^ v381 & v293;
  2840.   v105 = __ROR4__((v381 | ~v467) ^ v104, 19);
  2841.   v295 = __ROR4__(v294, 29);
  2842.   v206 = __ROR4__(v105 ^ v205 ^ v295, 31);
  2843.   v382 = __ROR4__((8 * v105) ^ v295 ^ v381, 25);
  2844.   v18 = __ROR4__((v206 << 7) ^ v382 ^ v295, 10);
  2845.   v106 = a2[96] ^ __ROR4__(v206 ^ v105 ^ v382, 27);
  2846.   v207 = a2[97] ^ v206;
  2847.   v296 = a2[98] ^ v18;
  2848.   v383 = a2[99] ^ v382;
  2849.   a1[3] = v106;
  2850.   a1[2] = v207;
  2851.   a1[1] = v296;
  2852.   *a1 = v383;
  2853.   a1[32] = 80;
  2854.   return __readfsqword(0x28u) ^ v473;
  2855. }
  2856. // 4056DA: using guessed type unsigned __int16 dest[2];
  2857. // 4056DA: using guessed type unsigned __int16 anonymous_1[2];
  2858. // 4056DA: using guessed type unsigned __int16 anonymous_2[6];
  2859.  
  2860. //----- (0000000000406F54) ----------------------------------------------------
  2861. __int64 __fastcall sosemanuk_internal(unsigned int *a1)
  2862. {
  2863.   __int64 result; // rax
  2864.   int v2; // [rsp+8h] [rbp-158h]
  2865.   int v3; // [rsp+Ch] [rbp-154h]
  2866.   int v4; // [rsp+10h] [rbp-150h]
  2867.   int v5; // [rsp+14h] [rbp-14Ch]
  2868.   int v6; // [rsp+18h] [rbp-148h]
  2869.   int v7; // [rsp+1Ch] [rbp-144h]
  2870.   int v8; // [rsp+20h] [rbp-140h]
  2871.   int v9; // [rsp+24h] [rbp-13Ch]
  2872.   int v10; // [rsp+28h] [rbp-138h]
  2873.   int v11; // [rsp+2Ch] [rbp-134h]
  2874.   int v12; // [rsp+30h] [rbp-130h]
  2875.   int v13; // [rsp+34h] [rbp-12Ch]
  2876.   int v14; // [rsp+38h] [rbp-128h]
  2877.   int v15; // [rsp+3Ch] [rbp-124h]
  2878.   int v16; // [rsp+40h] [rbp-120h]
  2879.   int v17; // [rsp+44h] [rbp-11Ch]
  2880.   int v18; // [rsp+48h] [rbp-118h]
  2881.   int v19; // [rsp+4Ch] [rbp-114h]
  2882.   int v20; // [rsp+50h] [rbp-110h]
  2883.   int v21; // [rsp+54h] [rbp-10Ch]
  2884.   int v22; // [rsp+6Ch] [rbp-F4h]
  2885.   int v23; // [rsp+74h] [rbp-ECh]
  2886.   int v24; // [rsp+7Ch] [rbp-E4h]
  2887.   int v25; // [rsp+84h] [rbp-DCh]
  2888.   int v26; // [rsp+8Ch] [rbp-D4h]
  2889.   int v27; // [rsp+94h] [rbp-CCh]
  2890.   int v28; // [rsp+9Ch] [rbp-C4h]
  2891.   int v29; // [rsp+A4h] [rbp-BCh]
  2892.   int v30; // [rsp+ACh] [rbp-B4h]
  2893.   int v31; // [rsp+B4h] [rbp-ACh]
  2894.   int v32; // [rsp+BCh] [rbp-A4h]
  2895.   int v33; // [rsp+C4h] [rbp-9Ch]
  2896.   int v34; // [rsp+CCh] [rbp-94h]
  2897.   int v35; // [rsp+D4h] [rbp-8Ch]
  2898.   int v36; // [rsp+DCh] [rbp-84h]
  2899.   int v37; // [rsp+E4h] [rbp-7Ch]
  2900.   int v38; // [rsp+ECh] [rbp-74h]
  2901.   int v39; // [rsp+F4h] [rbp-6Ch]
  2902.   unsigned int v40; // [rsp+10Ch] [rbp-54h]
  2903.   unsigned int v41; // [rsp+10Ch] [rbp-54h]
  2904.   unsigned int v42; // [rsp+10Ch] [rbp-54h]
  2905.   unsigned int v43; // [rsp+10Ch] [rbp-54h]
  2906.   unsigned int v44; // [rsp+10Ch] [rbp-54h]
  2907.   unsigned int v45; // [rsp+110h] [rbp-50h]
  2908.   unsigned int v46; // [rsp+110h] [rbp-50h]
  2909.   unsigned int v47; // [rsp+110h] [rbp-50h]
  2910.   unsigned int v48; // [rsp+110h] [rbp-50h]
  2911.   unsigned int v49; // [rsp+110h] [rbp-50h]
  2912.   unsigned int v50; // [rsp+114h] [rbp-4Ch]
  2913.   unsigned int v51; // [rsp+114h] [rbp-4Ch]
  2914.   unsigned int v52; // [rsp+114h] [rbp-4Ch]
  2915.   unsigned int v53; // [rsp+114h] [rbp-4Ch]
  2916.   unsigned int v54; // [rsp+114h] [rbp-4Ch]
  2917.   unsigned int v55; // [rsp+118h] [rbp-48h]
  2918.   unsigned int v56; // [rsp+118h] [rbp-48h]
  2919.   unsigned int v57; // [rsp+118h] [rbp-48h]
  2920.   unsigned int v58; // [rsp+118h] [rbp-48h]
  2921.   int v59; // [rsp+11Ch] [rbp-44h]
  2922.   int v60; // [rsp+11Ch] [rbp-44h]
  2923.   int v61; // [rsp+11Ch] [rbp-44h]
  2924.   int v62; // [rsp+11Ch] [rbp-44h]
  2925.   int v63; // [rsp+11Ch] [rbp-44h]
  2926.   int v64; // [rsp+11Ch] [rbp-44h]
  2927.   int v65; // [rsp+11Ch] [rbp-44h]
  2928.   int v66; // [rsp+11Ch] [rbp-44h]
  2929.   int v67; // [rsp+11Ch] [rbp-44h]
  2930.   int v68; // [rsp+11Ch] [rbp-44h]
  2931.   int v69; // [rsp+11Ch] [rbp-44h]
  2932.   int v70; // [rsp+11Ch] [rbp-44h]
  2933.   int v71; // [rsp+11Ch] [rbp-44h]
  2934.   int v72; // [rsp+11Ch] [rbp-44h]
  2935.   int v73; // [rsp+11Ch] [rbp-44h]
  2936.   int v74; // [rsp+120h] [rbp-40h]
  2937.   int v75; // [rsp+120h] [rbp-40h]
  2938.   int v76; // [rsp+120h] [rbp-40h]
  2939.   int v77; // [rsp+120h] [rbp-40h]
  2940.   int v78; // [rsp+120h] [rbp-40h]
  2941.   int v79; // [rsp+120h] [rbp-40h]
  2942.   int v80; // [rsp+120h] [rbp-40h]
  2943.   int v81; // [rsp+120h] [rbp-40h]
  2944.   int v82; // [rsp+120h] [rbp-40h]
  2945.   int v83; // [rsp+120h] [rbp-40h]
  2946.   int v84; // [rsp+124h] [rbp-3Ch]
  2947.   int v85; // [rsp+124h] [rbp-3Ch]
  2948.   int v86; // [rsp+124h] [rbp-3Ch]
  2949.   int v87; // [rsp+124h] [rbp-3Ch]
  2950.   int v88; // [rsp+124h] [rbp-3Ch]
  2951.   int v89; // [rsp+124h] [rbp-3Ch]
  2952.   int v90; // [rsp+124h] [rbp-3Ch]
  2953.   int v91; // [rsp+124h] [rbp-3Ch]
  2954.   int v92; // [rsp+124h] [rbp-3Ch]
  2955.   int v93; // [rsp+124h] [rbp-3Ch]
  2956.   int v94; // [rsp+128h] [rbp-38h]
  2957.   int v95; // [rsp+128h] [rbp-38h]
  2958.   int v96; // [rsp+128h] [rbp-38h]
  2959.   int v97; // [rsp+128h] [rbp-38h]
  2960.   int v98; // [rsp+128h] [rbp-38h]
  2961.   int v99; // [rsp+128h] [rbp-38h]
  2962.   int v100; // [rsp+128h] [rbp-38h]
  2963.   int v101; // [rsp+128h] [rbp-38h]
  2964.   int v102; // [rsp+128h] [rbp-38h]
  2965.   int v103; // [rsp+128h] [rbp-38h]
  2966.   int v104; // [rsp+12Ch] [rbp-34h]
  2967.   int v105; // [rsp+12Ch] [rbp-34h]
  2968.   int v106; // [rsp+12Ch] [rbp-34h]
  2969.   int v107; // [rsp+12Ch] [rbp-34h]
  2970.   int v108; // [rsp+12Ch] [rbp-34h]
  2971.   int v109; // [rsp+12Ch] [rbp-34h]
  2972.   int v110; // [rsp+12Ch] [rbp-34h]
  2973.   int v111; // [rsp+12Ch] [rbp-34h]
  2974.   int v112; // [rsp+12Ch] [rbp-34h]
  2975.   int v113; // [rsp+12Ch] [rbp-34h]
  2976.   int v114; // [rsp+130h] [rbp-30h]
  2977.   int v115; // [rsp+130h] [rbp-30h]
  2978.   int v116; // [rsp+130h] [rbp-30h]
  2979.   int v117; // [rsp+130h] [rbp-30h]
  2980.   int v118; // [rsp+130h] [rbp-30h]
  2981.   int v119; // [rsp+130h] [rbp-30h]
  2982.   int v120; // [rsp+130h] [rbp-30h]
  2983.   int v121; // [rsp+130h] [rbp-30h]
  2984.   int v122; // [rsp+130h] [rbp-30h]
  2985.   int v123; // [rsp+130h] [rbp-30h]
  2986.   int v124; // [rsp+130h] [rbp-30h]
  2987.   int v125; // [rsp+130h] [rbp-30h]
  2988.   int v126; // [rsp+130h] [rbp-30h]
  2989.   int v127; // [rsp+130h] [rbp-30h]
  2990.   int v128; // [rsp+130h] [rbp-30h]
  2991.   int v129; // [rsp+130h] [rbp-30h]
  2992.   int v130; // [rsp+130h] [rbp-30h]
  2993.   int v131; // [rsp+130h] [rbp-30h]
  2994.   int v132; // [rsp+130h] [rbp-30h]
  2995.   unsigned int v133; // [rsp+130h] [rbp-30h]
  2996.   int v134; // [rsp+134h] [rbp-2Ch]
  2997.   int v135; // [rsp+134h] [rbp-2Ch]
  2998.   int v136; // [rsp+134h] [rbp-2Ch]
  2999.   int v137; // [rsp+134h] [rbp-2Ch]
  3000.   int v138; // [rsp+134h] [rbp-2Ch]
  3001.   int v139; // [rsp+134h] [rbp-2Ch]
  3002.   int v140; // [rsp+134h] [rbp-2Ch]
  3003.   int v141; // [rsp+134h] [rbp-2Ch]
  3004.   int v142; // [rsp+134h] [rbp-2Ch]
  3005.   int v143; // [rsp+134h] [rbp-2Ch]
  3006.   int v144; // [rsp+134h] [rbp-2Ch]
  3007.   int v145; // [rsp+134h] [rbp-2Ch]
  3008.   int v146; // [rsp+134h] [rbp-2Ch]
  3009.   int v147; // [rsp+134h] [rbp-2Ch]
  3010.   int v148; // [rsp+134h] [rbp-2Ch]
  3011.   int v149; // [rsp+134h] [rbp-2Ch]
  3012.   int v150; // [rsp+134h] [rbp-2Ch]
  3013.   int v151; // [rsp+134h] [rbp-2Ch]
  3014.   int v152; // [rsp+134h] [rbp-2Ch]
  3015.   unsigned int v153; // [rsp+134h] [rbp-2Ch]
  3016.   unsigned int v154; // [rsp+138h] [rbp-28h]
  3017.   unsigned int v155; // [rsp+138h] [rbp-28h]
  3018.   int v156; // [rsp+138h] [rbp-28h]
  3019.   unsigned int v157; // [rsp+13Ch] [rbp-24h]
  3020.   unsigned int v158; // [rsp+13Ch] [rbp-24h]
  3021.   int v159; // [rsp+13Ch] [rbp-24h]
  3022.   unsigned int v160; // [rsp+140h] [rbp-20h]
  3023.   unsigned int v161; // [rsp+140h] [rbp-20h]
  3024.   int v162; // [rsp+140h] [rbp-20h]
  3025.   unsigned int v163; // [rsp+144h] [rbp-1Ch]
  3026.   unsigned int v164; // [rsp+144h] [rbp-1Ch]
  3027.   int v165; // [rsp+144h] [rbp-1Ch]
  3028.   unsigned int v166; // [rsp+148h] [rbp-18h]
  3029.   unsigned int v167; // [rsp+148h] [rbp-18h]
  3030.   int v168; // [rsp+148h] [rbp-18h]
  3031.   unsigned int v169; // [rsp+14Ch] [rbp-14h]
  3032.   unsigned int v170; // [rsp+14Ch] [rbp-14h]
  3033.   int v171; // [rsp+14Ch] [rbp-14h]
  3034.   unsigned int v172; // [rsp+150h] [rbp-10h]
  3035.   unsigned int v173; // [rsp+150h] [rbp-10h]
  3036.   int v174; // [rsp+150h] [rbp-10h]
  3037.   unsigned int v175; // [rsp+154h] [rbp-Ch]
  3038.   unsigned int v176; // [rsp+154h] [rbp-Ch]
  3039.   unsigned int v177; // [rsp+154h] [rbp-Ch]
  3040.   unsigned int v178; // [rsp+158h] [rbp-8h]
  3041.   unsigned int v179; // [rsp+158h] [rbp-8h]
  3042.   unsigned int v180; // [rsp+158h] [rbp-8h]
  3043.   unsigned int v181; // [rsp+15Ch] [rbp-4h]
  3044.   unsigned int v182; // [rsp+15Ch] [rbp-4h]
  3045.  
  3046.   v178 = a1[1];
  3047.   v175 = a1[2];
  3048.   v172 = a1[3];
  3049.   v169 = a1[4];
  3050.   v166 = a1[5];
  3051.   v163 = a1[6];
  3052.   v160 = a1[7];
  3053.   v157 = a1[8];
  3054.   v154 = a1[9];
  3055.   if ( (a1[10] & 1) != 0 )
  3056.     v2 = v157 ^ v178;
  3057.   else
  3058.     v2 = a1[1];
  3059.   v134 = a1[11] + v2;
  3060.   v114 = __ROR4__(1415926535 * a1[10], 25);
  3061.   v181 = v154 ^ mul_a[HIBYTE(*a1)] ^ (*a1 << 8) ^ (v172 >> 8) ^ mul_ia[(unsigned __int8)v172];
  3062.   v104 = v114 ^ (v154 + v134);
  3063.   if ( (v134 & 1) != 0 )
  3064.     v3 = v154 ^ v175;
  3065.   else
  3066.     v3 = a1[2];
  3067.   v135 = v114 + v3;
  3068.   v115 = __ROR4__(1415926535 * (a1[11] + v2), 25);
  3069.   v50 = a1[1];
  3070.   v179 = v181 ^ mul_a[HIBYTE(v178)] ^ (v178 << 8) ^ (v169 >> 8) ^ mul_ia[(unsigned __int8)v169];
  3071.   v94 = v115 ^ (v181 + v135);
  3072.   if ( (v135 & 1) != 0 )
  3073.     v4 = v181 ^ v172;
  3074.   else
  3075.     v4 = a1[3];
  3076.   v39 = v135;
  3077.   v136 = v115 + v4;
  3078.   v116 = __ROR4__(1415926535 * v39, 25);
  3079.   v45 = a1[2];
  3080.   v176 = v179 ^ mul_a[HIBYTE(v175)] ^ (v175 << 8) ^ (v166 >> 8) ^ mul_ia[(unsigned __int8)v166];
  3081.   v84 = v116 ^ (v179 + v136);
  3082.   if ( (v136 & 1) != 0 )
  3083.     v5 = v179 ^ v169;
  3084.   else
  3085.     v5 = a1[4];
  3086.   v38 = v136;
  3087.   v137 = v116 + v5;
  3088.   v117 = __ROR4__(1415926535 * v38, 25);
  3089.   v40 = a1[3];
  3090.   v173 = v176 ^ mul_a[HIBYTE(v172)] ^ (v172 << 8) ^ (v163 >> 8) ^ mul_ia[(unsigned __int8)v163];
  3091.   v59 = v104;
  3092.   v105 = v117 ^ (v176 + v137) ^ v84 & v104;
  3093.   v85 = v105 ^ v94 ^ v84;
  3094.   v74 = v94 ^ (v59 | v117 ^ (v176 + v137));
  3095.   v60 = v85 ^ v59;
  3096.   v95 = v74;
  3097.   v75 = v105 ^ (v60 | v74);
  3098.   v61 = v95 & v105 ^ v60;
  3099.   encode32le((__int64)(a1 + 12), *a1 ^ v85);
  3100.   encode32le((__int64)(a1 + 13), v50 ^ v75);
  3101.   encode32le((__int64)(a1 + 14), v45 ^ v61 ^ v75 ^ v95);
  3102.   encode32le((__int64)(a1 + 15), v40 ^ ~v61);
  3103.   if ( (v137 & 1) != 0 )
  3104.     v6 = v176 ^ v166;
  3105.   else
  3106.     v6 = v166;
  3107.   v37 = v137;
  3108.   v138 = v117 + v6;
  3109.   v118 = __ROR4__(1415926535 * v37, 25);
  3110.   v55 = v169;
  3111.   v170 = v173 ^ mul_a[HIBYTE(v169)] ^ (v169 << 8) ^ (v160 >> 8) ^ mul_ia[(unsigned __int8)v160];
  3112.   v106 = v118 ^ (v173 + v138);
  3113.   if ( (v138 & 1) != 0 )
  3114.     v7 = v173 ^ v163;
  3115.   else
  3116.     v7 = v163;
  3117.   v36 = v138;
  3118.   v139 = v118 + v7;
  3119.   v119 = __ROR4__(1415926535 * v36, 25);
  3120.   v51 = v166;
  3121.   v167 = v170 ^ mul_a[HIBYTE(v166)] ^ (v166 << 8) ^ (v157 >> 8) ^ mul_ia[(unsigned __int8)v157];
  3122.   v96 = v119 ^ (v170 + v139);
  3123.   if ( (v139 & 1) != 0 )
  3124.     v8 = v170 ^ v160;
  3125.   else
  3126.     v8 = v160;
  3127.   v35 = v139;
  3128.   v140 = v119 + v8;
  3129.   v120 = __ROR4__(1415926535 * v35, 25);
  3130.   v46 = v163;
  3131.   v164 = v167 ^ mul_a[HIBYTE(v163)] ^ (v163 << 8) ^ (v154 >> 8) ^ mul_ia[(unsigned __int8)v154];
  3132.   v86 = v120 ^ (v167 + v140);
  3133.   if ( (v140 & 1) != 0 )
  3134.     v9 = v167 ^ v157;
  3135.   else
  3136.     v9 = v157;
  3137.   v34 = v140;
  3138.   v141 = v120 + v9;
  3139.   v121 = __ROR4__(1415926535 * v34, 25);
  3140.   v41 = v160;
  3141.   v161 = v164 ^ mul_a[HIBYTE(v160)] ^ (v160 << 8) ^ (v181 >> 8) ^ mul_ia[(unsigned __int8)v181];
  3142.   v62 = v106;
  3143.   v107 = v121 ^ (v164 + v141) ^ v86 & v106;
  3144.   v87 = v107 ^ v96 ^ v86;
  3145.   v76 = v96 ^ (v62 | v121 ^ (v164 + v141));
  3146.   v63 = v87 ^ v62;
  3147.   v97 = v76;
  3148.   v77 = v107 ^ (v63 | v76);
  3149.   v64 = v97 & v107 ^ v63;
  3150.   encode32le((__int64)(a1 + 16), v55 ^ v87);
  3151.   encode32le((__int64)(a1 + 17), v51 ^ v77);
  3152.   encode32le((__int64)(a1 + 18), v46 ^ v64 ^ v77 ^ v97);
  3153.   encode32le((__int64)(a1 + 19), v41 ^ ~v64);
  3154.   if ( (v141 & 1) != 0 )
  3155.     v10 = v164 ^ v154;
  3156.   else
  3157.     v10 = v154;
  3158.   v33 = v141;
  3159.   v142 = v121 + v10;
  3160.   v122 = __ROR4__(1415926535 * v33, 25);
  3161.   v56 = v157;
  3162.   v158 = v161 ^ mul_a[HIBYTE(v157)] ^ (v157 << 8) ^ (v179 >> 8) ^ mul_ia[(unsigned __int8)v179];
  3163.   v108 = v122 ^ (v161 + v142);
  3164.   if ( (v142 & 1) != 0 )
  3165.     v11 = v161 ^ v181;
  3166.   else
  3167.     v11 = v181;
  3168.   v32 = v142;
  3169.   v143 = v122 + v11;
  3170.   v123 = __ROR4__(1415926535 * v32, 25);
  3171.   v52 = v154;
  3172.   v155 = v158 ^ mul_a[HIBYTE(v154)] ^ (v154 << 8) ^ (v176 >> 8) ^ mul_ia[(unsigned __int8)v176];
  3173.   v98 = v123 ^ (v158 + v143);
  3174.   if ( (v143 & 1) != 0 )
  3175.     v12 = v158 ^ v179;
  3176.   else
  3177.     v12 = v179;
  3178.   v31 = v143;
  3179.   v144 = v123 + v12;
  3180.   v124 = __ROR4__(1415926535 * v31, 25);
  3181.   v47 = v181;
  3182.   v182 = v155 ^ mul_a[HIBYTE(v181)] ^ (v181 << 8) ^ (v173 >> 8) ^ mul_ia[(unsigned __int8)v173];
  3183.   v88 = v124 ^ (v155 + v144);
  3184.   if ( (v144 & 1) != 0 )
  3185.     v13 = v155 ^ v176;
  3186.   else
  3187.     v13 = v176;
  3188.   v30 = v144;
  3189.   v145 = v124 + v13;
  3190.   v125 = __ROR4__(1415926535 * v30, 25);
  3191.   v42 = v179;
  3192.   v180 = v182 ^ mul_a[HIBYTE(v179)] ^ (v179 << 8) ^ (v170 >> 8) ^ mul_ia[(unsigned __int8)v170];
  3193.   v65 = v108;
  3194.   v109 = v125 ^ (v182 + v145) ^ v88 & v108;
  3195.   v89 = v109 ^ v98 ^ v88;
  3196.   v78 = v98 ^ (v65 | v125 ^ (v182 + v145));
  3197.   v66 = v89 ^ v65;
  3198.   v99 = v78;
  3199.   v79 = v109 ^ (v66 | v78);
  3200.   v67 = v99 & v109 ^ v66;
  3201.   encode32le((__int64)(a1 + 20), v56 ^ v89);
  3202.   encode32le((__int64)(a1 + 21), v52 ^ v79);
  3203.   encode32le((__int64)(a1 + 22), v47 ^ v67 ^ v79 ^ v99);
  3204.   encode32le((__int64)(a1 + 23), v42 ^ ~v67);
  3205.   if ( (v145 & 1) != 0 )
  3206.     v14 = v182 ^ v173;
  3207.   else
  3208.     v14 = v173;
  3209.   v29 = v145;
  3210.   v146 = v125 + v14;
  3211.   v126 = __ROR4__(1415926535 * v29, 25);
  3212.   v57 = v176;
  3213.   v177 = v180 ^ mul_a[HIBYTE(v176)] ^ (v176 << 8) ^ (v167 >> 8) ^ mul_ia[(unsigned __int8)v167];
  3214.   v110 = v126 ^ (v180 + v146);
  3215.   if ( (v146 & 1) != 0 )
  3216.     v15 = v180 ^ v170;
  3217.   else
  3218.     v15 = v170;
  3219.   v28 = v146;
  3220.   v147 = v126 + v15;
  3221.   v127 = __ROR4__(1415926535 * v28, 25);
  3222.   v53 = v173;
  3223.   v174 = v177 ^ mul_a[HIBYTE(v173)] ^ (v173 << 8) ^ (v164 >> 8) ^ mul_ia[(unsigned __int8)v164];
  3224.   v100 = v127 ^ (v177 + v147);
  3225.   if ( (v147 & 1) != 0 )
  3226.     v16 = v177 ^ v167;
  3227.   else
  3228.     v16 = v167;
  3229.   v27 = v147;
  3230.   v148 = v127 + v16;
  3231.   v128 = __ROR4__(1415926535 * v27, 25);
  3232.   v48 = v170;
  3233.   v171 = v174 ^ mul_a[HIBYTE(v170)] ^ (v170 << 8) ^ (v161 >> 8) ^ mul_ia[(unsigned __int8)v161];
  3234.   v90 = v128 ^ (v174 + v148);
  3235.   if ( (v148 & 1) != 0 )
  3236.     v17 = v174 ^ v164;
  3237.   else
  3238.     v17 = v164;
  3239.   v26 = v148;
  3240.   v149 = v128 + v17;
  3241.   v129 = __ROR4__(1415926535 * v26, 25);
  3242.   v43 = v167;
  3243.   v168 = v171 ^ mul_a[HIBYTE(v167)] ^ (v167 << 8) ^ (v158 >> 8) ^ mul_ia[(unsigned __int8)v158];
  3244.   v68 = v110;
  3245.   v111 = v129 ^ (v171 + v149) ^ v90 & v110;
  3246.   v91 = v111 ^ v100 ^ v90;
  3247.   v80 = v100 ^ (v68 | v129 ^ (v171 + v149));
  3248.   v69 = v91 ^ v68;
  3249.   v101 = v80;
  3250.   v81 = v111 ^ (v69 | v80);
  3251.   v70 = v101 & v111 ^ v69;
  3252.   encode32le((__int64)(a1 + 24), v57 ^ v91);
  3253.   encode32le((__int64)(a1 + 25), v53 ^ v81);
  3254.   encode32le((__int64)(a1 + 26), v48 ^ v70 ^ v81 ^ v101);
  3255.   encode32le((__int64)(a1 + 27), v43 ^ ~v70);
  3256.   if ( (v149 & 1) != 0 )
  3257.     v18 = v171 ^ v161;
  3258.   else
  3259.     v18 = v161;
  3260.   v25 = v149;
  3261.   v150 = v129 + v18;
  3262.   v130 = __ROR4__(1415926535 * v25, 25);
  3263.   v58 = v164;
  3264.   v165 = v168 ^ mul_a[HIBYTE(v164)] ^ (v164 << 8) ^ (v155 >> 8) ^ mul_ia[(unsigned __int8)v155];
  3265.   v112 = v130 ^ (v168 + v150);
  3266.   if ( (v150 & 1) != 0 )
  3267.     v19 = v168 ^ v158;
  3268.   else
  3269.     v19 = v158;
  3270.   v24 = v150;
  3271.   v151 = v130 + v19;
  3272.   v131 = __ROR4__(1415926535 * v24, 25);
  3273.   v54 = v161;
  3274.   v162 = v165 ^ mul_a[HIBYTE(v161)] ^ (v161 << 8) ^ (v182 >> 8) ^ mul_ia[(unsigned __int8)v182];
  3275.   v102 = v131 ^ (v165 + v151);
  3276.   if ( (v151 & 1) != 0 )
  3277.     v20 = v165 ^ v155;
  3278.   else
  3279.     v20 = v155;
  3280.   v23 = v151;
  3281.   v152 = v131 + v20;
  3282.   v132 = __ROR4__(1415926535 * v23, 25);
  3283.   v49 = v158;
  3284.   v159 = v162 ^ mul_a[HIBYTE(v158)] ^ (v158 << 8) ^ (v180 >> 8) ^ mul_ia[(unsigned __int8)v180];
  3285.   v92 = v132 ^ (v162 + v152);
  3286.   if ( (v152 & 1) != 0 )
  3287.     v21 = v162 ^ v182;
  3288.   else
  3289.     v21 = v182;
  3290.   v22 = v152;
  3291.   v153 = v132 + v21;
  3292.   v133 = __ROR4__(1415926535 * v22, 25);
  3293.   v44 = v155;
  3294.   v156 = v159 ^ mul_a[HIBYTE(v155)] ^ (v155 << 8) ^ (v177 >> 8) ^ mul_ia[(unsigned __int8)v177];
  3295.   v71 = v112;
  3296.   v113 = v133 ^ (v159 + v153) ^ v92 & v112;
  3297.   v93 = v113 ^ v102 ^ v92;
  3298.   v82 = v102 ^ (v71 | v133 ^ (v159 + v153));
  3299.   v72 = v93 ^ v71;
  3300.   v103 = v82;
  3301.   v83 = v113 ^ (v72 | v82);
  3302.   v73 = v103 & v113 ^ v72;
  3303.   encode32le((__int64)(a1 + 28), v58 ^ v93);
  3304.   encode32le((__int64)(a1 + 29), v54 ^ v83);
  3305.   encode32le((__int64)(a1 + 30), v49 ^ v73 ^ v83 ^ v103);
  3306.   encode32le((__int64)(a1 + 31), v44 ^ ~v73);
  3307.   *a1 = v182;
  3308.   a1[1] = v180;
  3309.   a1[2] = v177;
  3310.   a1[3] = v174;
  3311.   a1[4] = v171;
  3312.   a1[5] = v168;
  3313.   a1[6] = v165;
  3314.   a1[7] = v162;
  3315.   a1[8] = v159;
  3316.   a1[9] = v156;
  3317.   a1[10] = v153;
  3318.   result = v133;
  3319.   a1[11] = v133;
  3320.   return result;
  3321. }
  3322. // 6092E0: using guessed type int mul_a[256];
  3323. // 6096E0: using guessed type int mul_ia[256];
  3324.  
  3325. //----- (00000000004081CD) ----------------------------------------------------
  3326. __int64 __fastcall encode32le(__int64 a1, unsigned int a2)
  3327. {
  3328.   __int64 result; // rax
  3329.  
  3330.   *(_BYTE *)a1 = a2;
  3331.   *(_WORD *)(a1 + 1) = a2 >> 8;
  3332.   result = HIBYTE(a2);
  3333.   *(_BYTE *)(a1 + 3) = HIBYTE(a2);
  3334.   return result;
  3335. }
  3336.  
  3337. //----- (0000000000408215) ----------------------------------------------------
  3338. void *__fastcall sosemanuk_prng(unsigned int *a1, char *a2, unsigned __int64 a3)
  3339. {
  3340.   void *result; // rax
  3341.   size_t v4; // [rsp+8h] [rbp-28h]
  3342.   char *dest; // [rsp+10h] [rbp-20h]
  3343.   unsigned __int64 n; // [rsp+28h] [rbp-8h]
  3344.  
  3345.   dest = a2;
  3346.   v4 = a3;
  3347.   result = (void *)a1[32];
  3348.   if ( (unsigned int)result <= 0x4F )
  3349.   {
  3350.     n = 80LL - a1[32];
  3351.     if ( n > a3 )
  3352.       n = a3;
  3353.     memcpy(a2, (char *)a1 + a1[32] + 48, n);
  3354.     dest = &a2[n];
  3355.     v4 -= n;
  3356.     result = a1;
  3357.     a1[32] += n;
  3358.   }
  3359.   while ( v4 )
  3360.   {
  3361.     sosemanuk_internal(a1);
  3362.     if ( v4 <= 0x4F )
  3363.     {
  3364.       memcpy(dest, a1 + 12, v4);
  3365.       result = a1;
  3366.       a1[32] = v4;
  3367.       v4 = 0LL;
  3368.     }
  3369.     else
  3370.     {
  3371.       result = memcpy(dest, a1 + 12, 0x50uLL);
  3372.       dest += 80;
  3373.       v4 -= 80LL;
  3374.     }
  3375.   }
  3376.   return result;
  3377. }
  3378.  
  3379. //----- (000000000040831F) ----------------------------------------------------
  3380. _BYTE *__fastcall sosemanuk_encrypt(__int64 a1, _BYTE *a2, _BYTE *a3, unsigned __int64 a4)
  3381. {
  3382.   _BYTE *result; // rax
  3383.   unsigned __int64 v5; // [rsp+0h] [rbp-30h]
  3384.   _BYTE *v6; // [rsp+8h] [rbp-28h]
  3385.   _BYTE *v7; // [rsp+10h] [rbp-20h]
  3386.   unsigned __int64 v8; // [rsp+28h] [rbp-8h]
  3387.  
  3388.   v7 = a2;
  3389.   v6 = a3;
  3390.   v5 = a4;
  3391.   result = (_BYTE *)*(unsigned int *)(a1 + 128);
  3392.   if ( (unsigned int)result <= 0x4F )
  3393.   {
  3394.     v8 = 80LL - *(unsigned int *)(a1 + 128);
  3395.     if ( v8 > a4 )
  3396.       v8 = a4;
  3397.     xorbuf((_BYTE *)(a1 + 48 + *(unsigned int *)(a1 + 128)), a2, a3, v8);
  3398.     v7 = &a2[v8];
  3399.     v6 += v8;
  3400.     v5 -= v8;
  3401.     result = (_BYTE *)a1;
  3402.     *(_DWORD *)(a1 + 128) += v8;
  3403.   }
  3404.   while ( v5 )
  3405.   {
  3406.     sosemanuk_internal((unsigned int *)a1);
  3407.     if ( v5 <= 0x4F )
  3408.     {
  3409.       xorbuf((_BYTE *)(a1 + 48), v7, v6, v5);
  3410.       result = (_BYTE *)a1;
  3411.       *(_DWORD *)(a1 + 128) = v5;
  3412.       v5 = 0LL;
  3413.     }
  3414.     else
  3415.     {
  3416.       result = xorbuf((_BYTE *)(a1 + 48), v7, v6, 80LL);
  3417.       v7 += 80;
  3418.       v6 += 80;
  3419.       v5 -= 80LL;
  3420.     }
  3421.   }
  3422.   return result;
  3423. }
  3424.  
  3425. //----- (0000000000408446) ----------------------------------------------------
  3426. _BYTE *__fastcall xorbuf(_BYTE *a1, _BYTE *a2, _BYTE *a3, __int64 a4)
  3427. {
  3428.   _BYTE *result; // rax
  3429.  
  3430.   while ( --a4 != -1 )
  3431.   {
  3432.     result = a3;
  3433.     *a3++ = *a2++ ^ *a1++;
  3434.   }
  3435.   return result;
  3436. }
  3437.  
  3438. //----- (00000000004084A0) ----------------------------------------------------
  3439. void _libc_csu_init(void)
  3440. {
  3441.   init_proc();
  3442. }
  3443.  
  3444. //----- (0000000000408530) ----------------------------------------------------
  3445. int __fastcall fstat(int fildes, struct stat *stat_buf)
  3446. {
  3447.   return __fxstat(1, fildes, stat_buf);
  3448. }
  3449.  
  3450. //----- (0000000000408540) ----------------------------------------------------
  3451. void (*_do_global_ctors_aux())(void)
  3452. {
  3453.   void (*result)(void); // rax
  3454.   __int64 v1; // rbx
  3455.  
  3456.   result = (void (*)(void))_CTOR_LIST__;
  3457.   if ( _CTOR_LIST__ != -1 )
  3458.   {
  3459.     v1 = 0LL;
  3460.     do
  3461.     {
  3462.       result();
  3463.       result = *(void (**)(void))(v1 + 6328312);
  3464.       v1 -= 8LL;
  3465.     }
  3466.     while ( result != (void (*)(void))-1LL );
  3467.   }
  3468.   return result;
  3469. }
  3470. // 609000: using guessed type __int64 _CTOR_LIST__;
  3471.  
  3472. //----- (0000000000408574) ----------------------------------------------------
  3473. __int64 *term_proc()
  3474. {
  3475.   return _do_global_dtors_aux();
  3476. }
  3477.  
  3478. // nfuncs=85 queued=35 decompiled=35 lumina nreq=0 worse=0 better=0
  3479. // ALL OK, 35 function(s) have been successfully decompiled
  3480.  
Advertisement
Add Comment
Please, Sign In to add comment