Disassembly: 
  L1: 8b ff ?? mov edi, edi
   55 ?? push ebp
   8b ec ?? mov ebp, esp
   8b 45 0c ?? mov eax, dword ss:[ebp + 12]
   53 ?? push ebx
   56 ?? push esi
   57 ?? push edi
   99 ?? cdq
   6a 1f ?? push 0x1f<31>
   59 ?? pop ecx
   23 d1 ?? and edx, ecx
   03 c2 ?? add eax, edx
   8b 55 0c ?? mov edx, dword ss:[ebp + 12]
   c1 f8 05 ?? sar eax, 5
   81 e2 1f 00 00 80 ?? and edx, 0x8000001f
   79 05 ?? jns basic block L3
  
  L2: 4a ?? dec edx
   83 ca e0 ?? or edx, 0xe0<224,-32>
   42 ?? inc edx
  
  L3: 8b 7d 08 ?? mov edi, dword ss:[ebp + 8]
   2b ca ?? sub ecx, edx
   33 d2 ?? xor edx, edx
   42 ?? inc edx
   d3 e2 ?? shl edx, cl
   8b 0c 87 ?? mov ecx, dword ds:[edi + eax * 4]
   33 db ?? xor ebx, ebx
   8d 34 11 ?? lea esi, ds:[ecx + edx]
   3b f1 ?? cmp esi, ecx
   72 04 ?? jb basic block L5
  
  L4: 3b f2 ?? cmp esi, edx
   73 03 ?? jae basic block L6
  
  L5: 33 db ?? xor ebx, ebx
   43 ?? inc ebx
  
  L6: 89 34 87 ?? mov dword ds:[edi + eax * 4], esi
   eb 1b ?? jmp basic block L12
  
  L7: 85 db ?? test ebx, ebx
   74 1a ?? je basic block L13
  
  L8: 8b 0c 87 ?? mov ecx, dword ds:[edi + eax * 4]
   8d 51 01 ?? lea edx, ds:[ecx + 1]
   33 db ?? xor ebx, ebx
   3b d1 ?? cmp edx, ecx
   72 05 ?? jb basic block L10
  
  L9: 83 fa 01 ?? cmp edx, 1
   73 03 ?? jae basic block L11
  
  L10: 33 db ?? xor ebx, ebx
   43 ?? inc ebx
  
  L11: 89 14 87 ?? mov dword ds:[edi + eax * 4], edx
  
  L12: 48 ?? dec eax
   79 e2 ?? jns basic block L7
  
  L13: 5f ?? pop edi
   5e ?? pop esi
   8b c3 ?? mov eax, ebx
   5b ?? pop ebx
   5d ?? pop ebp
   c3 ?? ret
  
  