Disassembly: 
  L1: 55 ?? push ebp
   8b ec ?? mov ebp, esp
   51 ?? push ecx
   53 ?? push ebx
   8b 5d 0c ?? mov ebx, dword ss:[ebp + 12]
   56 ?? push esi
   8b f1 ?? mov esi, ecx
   57 ?? push edi
   8b 4e 14 ?? mov ecx, dword ds:[esi + 0x14<20>]
   89 4d fc ?? mov dword ss:[ebp + 0xfc<252,-4>], ecx
   3b d9 ?? cmp ebx, ecx
   77 2a ?? ja 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: 53 ?? push ebx
   68 08 42 40 00 ?? push 0x00404208<"bar">
   57 ?? push edi
   89 5e 10 ?? mov dword ds:[esi + 0x10<16>], ebx
   e8 57 1c 00 00 ?? call function 0x00403525
  
  L5: 83 c4 0c ?? add esp, 12
   c6 04 1f 00 ?? mov byte ds:[edi + ebx], 0
   8b c6 ?? mov eax, esi
   5f ?? pop edi
   5e ?? pop esi
   5b ?? pop ebx
   8b e5 ?? mov esp, ebp
   5d ?? pop ebp
   c2 08 00 ?? ret 8
  
  L6: 81 fb ff ff ff 7f ?? cmp ebx, 0x7fffffff
   0f 87 d1 00 00 00 ?? ja basic block L29
  
  L7: 8b fb ?? mov edi, ebx
   83 cf 0f ?? or edi, 15
   81 ff ff ff ff 7f ?? cmp edi, 0x7fffffff
   76 13 ?? jbe basic block L10
  
  L8: b8 00 00 00 80 ?? mov eax, 0x80000000
   bf ff ff ff 7f ?? mov edi, 0x7fffffff
   8b c8 ?? mov ecx, eax
   e8 16 08 00 00 ?? call function 0x00402120
  
  L9: eb 4e ?? jmp basic block L20
  
  L10: 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 13 ?? jbe basic block L13
  
  L11: b8 00 00 00 80 ?? mov eax, 0x80000000
   bf ff ff ff 7f ?? mov edi, 0x7fffffff
   8b c8 ?? mov ecx, eax
   e8 f4 07 00 00 ?? call function 0x00402120
  
  L12: eb 2c ?? jmp basic block L20
  
  L13: 8d 04 0a ?? lea eax, ds:[edx + ecx]
   3b f8 ?? cmp edi, eax
   0f 42 f8 ?? cmovb edi, eax
   8d 47 01 ?? lea eax, ds:[edi + 1]
   3d 00 10 00 00 ?? cmp eax, 0x00001000<4096>
   72 09 ?? jb basic block L16
  
  L14: 8b c8 ?? mov ecx, eax
   e8 d9 07 00 00 ?? call function 0x00402120
  
  L15: eb 11 ?? jmp basic block L20
  
  L16: 85 c0 ?? test eax, eax
   74 0b ?? je basic block L19
  
  L17: 50 ?? push eax
   e8 77 08 00 00 ?? call function 0x004021ca
  
  L18: 83 c4 04 ?? add esp, 4
   eb 02 ?? jmp basic block L20
  
  L19: 33 c0 ?? xor eax, eax
  
  L20: 53 ?? push ebx
   68 08 42 40 00 ?? push 0x00404208<"bar">
   50 ?? push eax
   89 45 0c ?? mov dword ss:[ebp + 12], eax
   89 5e 10 ?? mov dword ds:[esi + 0x10<16>], ebx
   89 7e 14 ?? mov dword ds:[esi + 0x14<20>], edi
   e8 b0 1b 00 00 ?? call function 0x0040351f
  
  L21: 8b 7d 0c ?? mov edi, dword ss:[ebp + 12]
   83 c4 0c ?? add esp, 12
   8b 45 fc ?? mov eax, dword ss:[ebp + 0xfc<252,-4>]
   c6 04 1f 00 ?? mov byte ds:[edi + ebx], 0
   83 f8 10 ?? cmp eax, 0x10<16>
   72 29 ?? jb basic block L27
  
  L22: 8d 48 01 ?? lea ecx, ds:[eax + 1]
   8b 06 ?? mov eax, dword ds:[esi]
   81 f9 00 10 00 00 ?? cmp ecx, 0x00001000<4096>
   72 12 ?? jb basic block L25
  
  L23: 8b 50 fc ?? mov edx, dword ds:[eax + 0xfc<252,-4>]
   83 c1 23 ?? add ecx, 0x23<35>
   2b c2 ?? sub eax, edx
   83 c0 fc ?? add eax, 0xfc<252,-4>
   83 f8 1f ?? cmp eax, 0x1f<31>
   77 19 ?? ja basic block L28
  
  L24: 8b c2 ?? mov eax, edx
  
  L25: 51 ?? push ecx
   50 ?? push eax
   e8 53 08 00 00 ?? call function 0x004021fa
  
  L26: 83 c4 08 ?? add esp, 8
  
  L27: 89 3e ?? mov dword ds:[esi], edi
   8b c6 ?? mov eax, esi
   5f ?? pop edi
   5e ?? pop esi
   5b ?? pop ebx
   8b e5 ?? mov esp, ebp
   5d ?? pop ebp
   c2 08 00 ?? ret 8
  
  L28: ff 15 fc 40 40 00 ?? call dword ds:[0x004040fc]
  
  L29: e8 1e f9 ff ff ?? call function 0x004012e0
  
  L30: cc ?? int3
  
  L31: cc ?? int3
  
  L32: cc ?? int3
  
  L33: cc ?? int3
  
  L34: cc ?? int3
  
  L35: cc ?? int3
  
  L36: cc ?? int3
  
  L37: cc ?? int3
  
  L38: cc ?? int3
  
  L39: cc ?? int3
  
  L40: cc ?? int3
  
  L41: cc ?? int3
  
  L42: cc ?? int3
  
  L43: cc ?? int3
  
  