#include <intrin.h>
DWORD fn(char* pbuf, int len)
{
DWORD result = 0;
if(len >= 8)
{
for(int i = 0; i < len; i++)
{
result = _lrotl(((((~(_lrotl(result, 3) + pbuf[i])) ^ 0x20141001) + 0x20141007) * 0xCEBEA6DA), 7);
}
result = ~result;
result = ~_lrotl(result, 5);
result ^= 0x15;
result ^= 0x41;
result += 0x83;
result = ~result;
result += 0x31;
result = ~_lrotl(result, 5);
result ^= 0x30;
result ^= 0x42;
result += 0x97;
result = ~result;
result += 0x32;
result = ~_lrotl(result, 5);
result ^= 0x26;
result ^= 0x43;
result += 0xA9;
result = ~result;
result += 0x33;
result = ~_lrotl(result, 5);
result ^= 0x25;
result ^= 0x44;
result += 0x99;
result = ~result;
result += 0x34;
result = ~_lrotl(result, 5);
result ^= 0x21;
result ^= 0x45;
result += 0xA7;
result = ~result;
result += 0x35;
result = ~_lrotl(result, 5);
result ^= 0x15;
result ^= 0x46;
result += 0xA9;
result = ~result;
result += 0x36;
result = ~_lrotl(result, 5);
result ^= 0x33;
result ^= 0x47;
result += 0x9C;
result = ~result;
result += 0x37;
result = ~_lrotl(result, 5);
result ^= 0x27;
result ^= 0x48;
result += 0x85;
result = ~result;
result += 0x38;
result = ~_lrotl(result, 5);
result ^= 0x27;
result ^= 0x49;
result += 0x9e;
result = ~result;
result += 0x39;
result = ~_lrotl(result, 5);
result ^= 0x2f;
result ^= 0x4a;
result += 0x5b;
result = ~result;
result += 0x3a;
result ^= 0x19810304;
}
return result;
}