Not too hard.All you need is understanding the code "genHash"
============= genhash =============```__int64 __fastcall genhash(char *a1){  unsigned int v1; // eax  char *v2; // rax  __int64 result; // rax  char *v4; // [rsp+8h] [rbp-18h]  unsigned int v5; // [rsp+14h] [rbp-Ch]  signed __int64 v6; // [rsp+18h] [rbp-8h]
  v4 = a1;  v6 = 13LL;  v5 = 0;  while ( 1 )  {    v2 = v4++;    result = (unsigned int)*v2;    if ( !(_DWORD)result )      break;    v6 = 3 * v6 + (signed int)result;    v1 = v5++;    printf("hash-%d : %ld\n", v1, v6);  }  return result;}```
==================================
variable result will be each letter of a1firstly, the v6 is going to be a result of "3 * 13(v6) + (int)a1[0]"After this, the v6 is will be encrypted result of before letter.Now, What you need is just make hashes origin using the encrypted letters.
```# Hashish Decryptor by sqrtrev
flag = ''f = [138,512,1645,5034,15218,45756,137391,412292,1236927,3710845,11132642,33398021,100194167,300582553,901747774,2705243426,8115730373,24347191171,73041573621,219124720917,657374162799,1972122488522,5916367465576]v6 = 13
for i in range(0,len(f)):    if i != 0:        v6 = f[i-1]    tmp = f[i]    tmp -= 3 * v6    flag += chr(tmp)print flag```