Disassembly: 
  L1: 56 ?? push esi
   8b f1 ?? mov esi, ecx
   57 ?? push edi
   8b 4e 14 ?? mov ecx, dword ds:[esi + 0x14<20>]
   83 f9 03 ?? cmp ecx, 3
   72 2b ?? jb basic block L6
  
  L2: 8b fe ?? mov edi, esi
   83 f9 10 ?? cmp ecx, 0x10<16>
   72 02 ?? jb basic block L4
  
  L3: 8b 3e ?? mov edi, dword ds:[esi]
  
  L4: 6a 03 ?? push 3
   68 08 42 40 00 ?? push 0x00404208<"bar">
   57 ?? push edi
   c7 46 10 03 00 00 00 ?? mov dword ds:[esi + 0x10<16>], 3
   e8 5c 1d 00 00 ?? call function 0x00403525
  
  L5: 83 c4 0c ?? add esp, 12
   c6 47 03 00 ?? mov byte ds:[edi + 3], 0
   8b c6 ?? mov eax, esi
   5f ?? pop edi
   5e ?? pop esi
   c2 04 00 ?? ret 4
  
  L6: 8b d1 ?? mov edx, ecx
   b8 ff ff ff 7f ?? mov eax, 0x7fffffff
   d1 ea ?? shr edx, 1
   2b c2 ?? sub eax, edx
   3b c8 ?? cmp ecx, eax
   76 0a ?? jbe basic block L8
  
  L7: bf ff ff ff 7f ?? mov edi, 0x7fffffff
   8d 47 01 ?? lea eax, ds:[edi + 1]
   eb 17 ?? jmp basic block L9
  
  L8: 8d 04 0a ?? lea eax, ds:[edx + ecx]
   bf 0f 00 00 00 ?? mov edi, 15
   3b c7 ?? cmp eax, edi
   0f 47 f8 ?? cmova edi, eax
   8d 47 01 ?? lea eax, ds:[edi + 1]
   3d 00 10 00 00 ?? cmp eax, 0x00001000<4096>
   72 33 ?? jb basic block L11
  
  L9: 8b c8 ?? mov ecx, eax
   e8 12 09 00 00 ?? call function 0x00402120
  
  L10: 89 7e 14 ?? mov dword ds:[esi + 0x14<20>], edi
   8b d0 ?? mov edx, eax
   c7 46 10 03 00 00 00 ?? mov dword ds:[esi + 0x10<16>], 3
   8b c6 ?? mov eax, esi
   66 8b 0d 08 42 40 00 ?? mov cx, word ds:[0x00404208<"bar">]
   5f ?? pop edi
   66 89 0a ?? mov word ds:[edx], cx
   8a 0d 0a 42 40 00 ?? mov cl, byte ds:[0x0040420a<"r">]
   88 4a 02 ?? mov byte ds:[edx + 2], cl
   c6 42 03 00 ?? mov byte ds:[edx + 3], 0
   89 16 ?? mov dword ds:[esi], edx
   5e ?? pop esi
   c2 04 00 ?? ret 4
  
  L11: 85 c0 ?? test eax, eax
   74 33 ?? je basic block L14
  
  L12: 50 ?? push eax
   e8 86 09 00 00 ?? call function 0x004021ca
  
  L13: 8b d0 ?? mov edx, eax
   89 7e 14 ?? mov dword ds:[esi + 0x14<20>], edi
   c7 46 10 03 00 00 00 ?? mov dword ds:[esi + 0x10<16>], 3
   83 c4 04 ?? add esp, 4
   66 a1 08 42 40 00 ?? mov ax, word ds:[0x00404208<"bar">]
   66 89 02 ?? mov word ds:[edx], ax
   a0 0a 42 40 00 ?? mov al, byte ds:[0x0040420a<"r">]
   88 42 02 ?? mov byte ds:[edx + 2], al
   8b c6 ?? mov eax, esi
   c6 42 03 00 ?? mov byte ds:[edx + 3], 0
   5f ?? pop edi
   89 16 ?? mov dword ds:[esi], edx
   5e ?? pop esi
   c2 04 00 ?? ret 4
  
  L14: 89 7e 14 ?? mov dword ds:[esi + 0x14<20>], edi
   33 c9 ?? xor ecx, ecx
   c7 46 10 03 00 00 00 ?? mov dword ds:[esi + 0x10<16>], 3
   33 d2 ?? xor edx, edx
   66 a1 08 42 40 00 ?? mov ax, word ds:[0x00404208<"bar">]
   5f ?? pop edi
   66 89 01 ?? mov word ds:[ecx], ax
   a0 0a 42 40 00 ?? mov al, byte ds:[0x0040420a<"r">]
   88 41 02 ?? mov byte ds:[ecx + 2], al
   8b c6 ?? mov eax, esi
   88 0d 03 00 00 00 ?? mov byte ds:[3], cl
   89 16 ?? mov dword ds:[esi], edx
   5e ?? pop esi
   c2 04 00 ?? ret 4
  
  