0040A19C /$ 55 PUSH EBP
0040A19D |. 8BEC MOV EBP,ESP
0040A19F |. 83EC 14 SUB ESP,14
0040A1A2 |. 53 PUSH EBX
0040A1A3 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; EAX = soul code
0040A1A6 |. 56 PUSH ESI
0040A1A7 |. 83C0 04 ADD EAX,4 ; sets EAX to the last 12 digits of the soul code
0040A1AA |. 57 PUSH EDI
0040A1AB |. BE E7D10000 MOV ESI,0D1E7 ; constant
0040A1B0 |. 6A 08 PUSH 8 ; /maxlen = 8
0040A1B2 |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14] ; |sets ECX to buffer
0040A1B5 |. 50 PUSH EAX ; |src
0040A1B6 |. 51 PUSH ECX ; |dest
0040A1B7 |. FF15 30B6D800 CALL DWORD PTR DS:[<&MSVCRT.strncpy>] ; \strncpy
0040A1BD |. 83C4 0C ADD ESP,0C
0040A1C0 |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14]
0040A1C3 |. C645 F4 00 MOV BYTE PTR SS:[EBP-C],0 ; this ensures that only the first 8 digits are on the buffer
0040A1C7 |. 6A 0A PUSH 0A ; /radix = A (10.)
0040A1C9 |. BB 48D44D00 MOV EBX,Souls.004DD448 ; |
0040A1CE |. 6A 00 PUSH 0 ; |endptr = NULL
0040A1D0 |. 51 PUSH ECX ; |s
0040A1D1 |. FF15 14B6D800 CALL DWORD PTR DS:[<&MSVCRT.strtoul>] ; \strtoul
0040A1D7 |. 83C4 0C ADD ESP,0C
0040A1DA |. 8BF8 MOV EDI,EAX
0040A1DC |. 81FF 08070000 CMP EDI,708 ; are the first 8 digits smaller than 00002055d ?
0040A1E2 |. 7C 05 JL SHORT Souls.0040A1E9
0040A1E4 |. BB 88D44D00 MOV EBX,Souls.004DD488
0040A1E9 |> 81FF E40C0000 CMP EDI,0CE4 ; are the first 8 digits smaller than 00058380d ?
0040A1EF |. 7C 05 JL SHORT Souls.0040A1F6
0040A1F1 |. BB C8D44D00 MOV EBX,Souls.004DD4C8
0040A1F6 |> 33C9 XOR ECX,ECX ; initializing counter
0040A1F8 |> 33C0 /XOR EAX,EAX ; crypto
0040A1FA |. 8B55 08 |MOV EDX,DWORD PTR SS:[EBP+8]
0040A1FD |. C745 F8 64000000 |MOV DWORD PTR SS:[EBP-8],64 ; another constant
0040A204 |. 8A040A |MOV AL,BYTE PTR DS:[EDX+ECX]
0040A207 |. 83E0 7F |AND EAX,7F
0040A20A |. 8BD0 |MOV EDX,EAX
0040A20C |. D3E0 |SHL EAX,CL
0040A20E |. 0FAFD6 |IMUL EDX,ESI
0040A211 |. 33F2 |XOR ESI,EDX
0040A213 |. 8B148B |MOV EDX,DWORD PTR DS:[EBX+ECX*4]
0040A216 |. 03F0 |ADD ESI,EAX
0040A218 |. 41 |INC ECX
0040A219 |. 8BC6 |MOV EAX,ESI
0040A21B |. 8955 FC |MOV DWORD PTR SS:[EBP-4],EDX
0040A21E |. 99 |CDQ
0040A21F |. F77D F8 |IDIV DWORD PTR SS:[EBP-8]
0040A222 |. 0155 FC |ADD DWORD PTR SS:[EBP-4],EDX
0040A225 |. 2B75 FC |SUB ESI,DWORD PTR SS:[EBP-4]
0040A228 |. 83F9 0C |CMP ECX,0C
0040A22B |.^ 7C CB \JL SHORT Souls.0040A1F8
0040A22D |. 81E6 FFFFFF7F AND ESI,7FFFFFFF
0040A233 |. 81FF E40C0000 CMP EDI,0CE4
0040A239 |. 7D 12 JGE SHORT Souls.0040A24D
0040A23B |. B9 2FFF0000 MOV ECX,0FF2F
0040A240 |. 8BC6 MOV EAX,ESI
0040A242 |. 99 CDQ
0040A243 |. F7F9 IDIV ECX
0040A245 |. 8BF2 MOV ESI,EDX
0040A247 |. 81E6 FFFF0000 AND ESI,0FFFF
0040A24D |> 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
0040A250 |. 85C0 TEST EAX,EAX
0040A252 |. 74 02 JE SHORT Souls.0040A256
0040A254 |. 8938 MOV DWORD PTR DS:[EAX],EDI
0040A256 |> 8BC6 MOV EAX,ESI
0040A258 |. 5F POP EDI
0040A259 |. 5E POP ESI
0040A25A |. 5B POP EBX
0040A25B |. 8BE5 MOV ESP,EBP
0040A25D |. 5D POP EBP
0040A25E \. C3 RETN