Function at 0x401820
Capabilities:
Link many functions at runtime

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x4044f6
mov eax, dword fs:[0]
push eax
sub esp, 0x294
mov eax, dword [0x408008]
xor eax, ebp
mov dword [ebp - 0x10], eax
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
push 0x20a
lea eax, [ebp - 0x21c]
push 0
push eax
call sub.VCRUNTIME140.dll_memset
add esp, 0xc
lea eax, [ebp - 0x21c]
push 0x104
push eax
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
test eax, eax
je 0x401df5
xorps xmm0, xmm0
mov dword [ebp - 0x254], 0
lea ecx, [ebp - 0x21c]
mov dword [ebp - 0x250], 0
movups xmmword [ebp - 0x264], xmm0
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x4018a6
sub ecx, edx
lea eax, [ebp - 0x21c]
sar ecx, 1
push ecx
push eax
lea ecx, [ebp - 0x264]
call fcn.00402f80
lea edx, [ebp - 0x264]
mov dword [ebp - 4], 0
lea ecx, [ebp - 0x2a0]
call fcn.00401700
mov esi, eax
mov byte [ebp - 4], 1
mov edx, esi
cmp dword [esi + 0x14], 0x10
mov ecx, dword [esi + 0x10]
jb 0x4018f3
mov edx, dword [esi]
test ecx, ecx
je 0x401948
lea eax, [ecx - 1]
cmp eax, ecx
cmovb ecx, eax
add ecx, edx
cmp byte [ecx], 0x5c
je 0x401910
cmp ecx, edx
je 0x401948
dec ecx
cmp byte [ecx], 0x5c
jne 0x401906
sub ecx, edx
cmp ecx, 0xffffffff
je 0x401948
xorps xmm0, xmm0
mov dword [ebp - 0x23c], 0
movups xmmword [ebp - 0x24c], xmm0
mov dword [ebp - 0x238], 0
cmp dword [esi + 0x10], ecx
cmovb ecx, dword [esi + 0x10]
cmp dword [esi + 0x14], 0x10
jb 0x401944
mov esi, dword [esi]
push ecx
push esi
jmp 0x40196d
xorps xmm0, xmm0
mov dword [ebp - 0x23c], 0
push 0
movups xmmword [ebp - 0x24c], xmm0
mov dword [ebp - 0x238], 0
push 0x4052a1
lea ecx, [ebp - 0x24c]
call fcn.00403080
mov byte [ebp - 4], 3
mov ecx, dword [ebp - 0x28c]
cmp ecx, 0x10
jb 0x4019b8
mov edx, dword [ebp - 0x2a0]
inc ecx
mov eax, edx
cmp ecx, 0x1000
jb 0x4019ae
mov edx, dword [eax - 4]
add ecx, 0x23
sub eax, edx
add eax, 0xfffffffc
cmp eax, 0x1f
jbe 0x4019ae
call dword [sym.imp.api_ms_win_crt_runtime_l1_1_0.dll__invalid_parameter_noinfo_noreturn]
push ecx
push edx
call fcn.004036b9
add esp, 8
mov ecx, dword [ebp - 0x23c]
mov eax, 0x7fffffff
sub eax, ecx
mov dword [ebp - 0x290], 0
mov dword [ebp - 0x28c], 0xf
mov byte [ebp - 0x2a0], 0
mov dword [ebp - 0x26c], ecx
cmp eax, 0xc
jb 0x401fba
cmp dword [ebp - 0x238], 0x10
lea eax, [ebp - 0x24c]
lea edx, [ecx + 0xc]
mov esi, 0xf
cmovae eax, dword [ebp - 0x24c]
lea edi, [ebp - 0x288]
mov dword [ebp - 0x268], eax
xorps xmm0, xmm0
mov dword [ebp - 0x270], edx
movups xmmword [ebp - 0x288], xmm0
cmp edx, esi
jbe 0x401abd
mov esi, edx
or esi, 0xf
cmp esi, 0x7fffffff
jbe 0x401a4b
mov ecx, 0x80000000
mov esi, 0x7fffffff
add ecx, 0x23
jmp 0x401a6a
mov eax, 0x16
cmp esi, eax
cmovb esi, eax
lea eax, [esi + 1]
cmp eax, 0x1000
jb 0x401a92
lea ecx, [eax + 0x23]
cmp ecx, eax
jbe 0x401fb5
push ecx
call fcn.00403689
add esp, 4
test eax, eax
je 0x401dc8
mov ecx, dword [ebp - 0x26c]
lea edi, [eax + 0x23]
mov edx, dword [ebp - 0x270]
and edi, 0xffffffe0
mov dword [edi - 4], eax
jmp 0x401ab1
test eax, eax
je 0x401aaf
push eax
call fcn.00403689
mov ecx, dword [ebp - 0x26c]
add esp, 4
mov edx, dword [ebp - 0x270]
mov edi, eax
jmp 0x401ab1
xor edi, edi
mov eax, dword [ebp - 0x268]
mov dword [ebp - 0x288], edi
push ecx
push eax
push edi
mov dword [ebp - 0x278], edx
mov dword [ebp - 0x274], esi
call sub.VCRUNTIME140.dll_memcpy
mov ecx, dword [ebp - 0x26c]
add esp, 0xc
movq xmm0, qword [str.ToolLib.dll]
movq qword [edi + ecx], xmm0
mov eax, dword [0x405304]
mov dword [edi + ecx + 8], eax
mov byte [edi + ecx + 0xc], 0
mov ecx, dword [ebp - 0x238]
cmp ecx, 0x10
jb 0x401b2f
mov edx, dword [ebp - 0x24c]
inc ecx
mov eax, edx
cmp ecx, 0x1000
jb 0x401b25
mov edx, dword [eax - 4]
add ecx, 0x23
sub eax, edx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x401dc8
push ecx
push edx
call fcn.004036b9
add esp, 8
movups xmm1, xmmword [ebp - 0x288]
lea edx, [ebp - 0x24c]
movq xmm0, qword [ebp - 0x278]
lea edi, [ebp - 0x24c]
movq qword [ebp - 0x23c], xmm0
xorps xmm0, xmm0
cmp dword [ebp - 0x238], 0x10
mov eax, dword [ebp - 0x23c]
movd ecx, xmm1
movups xmmword [ebp - 0x24c], xmm1
cmovae edx, ecx
add eax, edx
cmp dword [ebp - 0x238], 0x10
mov dword [ebp - 0x268], eax
cmovae edi, ecx
movups xmmword [ebp - 0x234], xmm0
cmp edi, eax
jne 0x401bb0
mov ecx, 7
mov dword [ebp - 0x224], 0
xor eax, eax
mov dword [ebp - 0x220], ecx
mov word [ebp - 0x234], ax
jmp 0x401cc6
sub eax, edi
xor edx, edx
mov dword [ebp - 0x224], edx
mov esi, 7
mov dword [ebp - 0x220], esi
cmp eax, 0x7ffffffe
ja 0x401fba
cmp eax, 8
jb 0x401c70
mov esi, eax
or esi, 7
cmp esi, 0x7ffffffe
jbe 0x401bed
mov esi, 0x7ffffffe
jmp 0x401bf7
mov eax, 0xa
cmp esi, eax
cmovb esi, eax
xor ecx, ecx
mov eax, esi
add eax, 1
setb cl
neg ecx
or ecx, eax
cmp ecx, 0x7fffffff
ja 0x401fb5
add ecx, ecx
cmp ecx, 0x1000
jb 0x401c4a
lea eax, [ecx + 0x23]
cmp eax, ecx
jbe 0x401fb5
push eax
call fcn.00403689
mov ecx, eax
add esp, 4
test ecx, ecx
je 0x401dc8
lea eax, [ecx + 0x23]
and eax, 0xffffffe0
mov dword [eax - 4], ecx
mov edx, dword [ebp - 0x224]
jmp 0x401c61
test ecx, ecx
je 0x401c5f
push ecx
call fcn.00403689
mov edx, dword [ebp - 0x224]
add esp, 4
jmp 0x401c61
xor eax, eax
mov dword [ebp - 0x234], eax
mov dword [ebp - 0x220], esi
nop dword [eax]
movsx ax, byte [edi]
lea ecx, [ebp - 0x234]
cmp esi, 8
cmovae ecx, dword [ebp - 0x234]
inc edi
mov word [ecx + edx*2], ax
mov edx, dword [ebp - 0x224]
inc edx
mov dword [ebp - 0x224], edx
cmp edi, dword [ebp - 0x268]
je 0x401ca6
mov esi, dword [ebp - 0x220]
jmp 0x401c70
cmp dword [ebp - 0x220], 8
lea eax, [ebp - 0x234]
cmovae eax, dword [ebp - 0x234]
xor ecx, ecx
mov word [eax + edx*2], cx
mov ecx, dword [ebp - 0x220]
cmp ecx, 8
lea eax, [ebp - 0x234]
cmovae eax, dword [ebp - 0x234]
push eax
call dword [sym.imp.KERNEL32.dll_LoadLibraryW]
mov dword [0x408590], eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov ecx, dword [ebp - 0x220]
cmp ecx, 8
jb 0x401d28
mov edx, dword [ebp - 0x234]
lea ecx, [ecx*2 + 2]
mov eax, edx
cmp ecx, 0x1000
jb 0x401d1e
mov edx, dword [eax - 4]
add ecx, 0x23
sub eax, edx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x401dc8
push ecx
push edx
call fcn.004036b9
add esp, 8
mov ecx, dword [ebp - 0x238]
xor eax, eax
mov dword [ebp - 0x224], 0
mov dword [ebp - 0x220], 7
mov word [ebp - 0x234], ax
cmp ecx, 0x10
jb 0x401d7b
mov edx, dword [ebp - 0x24c]
inc ecx
mov eax, edx
cmp ecx, 0x1000
jb 0x401d71
mov edx, dword [eax - 4]
add ecx, 0x23
sub eax, edx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x401dc8
push ecx
push edx
call fcn.004036b9
add esp, 8
mov ecx, dword [ebp - 0x250]
mov dword [ebp - 0x23c], 0
mov dword [ebp - 0x238], 0xf
mov byte [ebp - 0x24c], 0
cmp ecx, 8
jb 0x401dd8
mov edx, dword [ebp - 0x264]
lea ecx, [ecx*2 + 2]
mov eax, edx
cmp ecx, 0x1000
jb 0x401dce
mov edx, dword [eax - 4]
add ecx, 0x23
sub eax, edx
add eax, 0xfffffffc
cmp eax, 0x1f
jbe 0x401dce
call dword [sym.imp.api_ms_win_crt_runtime_l1_1_0.dll__invalid_parameter_noinfo_noreturn]
push ecx
push edx
call fcn.004036b9
add esp, 8
xor eax, eax
mov dword [ebp - 0x254], 0
mov dword [ebp - 0x250], 7
mov word [ebp - 0x264], ax
mov eax, dword [0x408590]
test eax, eax
je 0x401f88
mov esi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
push str.Initialize
push eax
call esi
mov dword [0x40859c], eax
test eax, eax
jne 0x401e26
push str.GetProcAddress_Failed___Initialize_n
call fcn.00401020
add esp, 4
push str.Uninitialize
push dword [0x408590]
call esi
mov dword [0x408594], eax
test eax, eax
jne 0x401e49
push str.GetProcAddress_Failed___Uninitialize_n
call fcn.00401020
add esp, 4
push str.CB_OnDebugEvent
push dword [0x408590]
call esi
mov dword [0x408584], eax
test eax, eax
jne 0x401e6c
push str.GetProcAddress_Failed___CB_OnDebugEvent_n
call fcn.00401020
add esp, 4
push str.CB_OnActionBegin
push dword [0x408590]
call esi
mov dword [0x4085a8], eax
test eax, eax
jne 0x401e8f
push str.GetProcAddress_Failed___CB_OnActionBegin_n
call fcn.00401020
add esp, 4
push str.CB_OnActionEnd
push dword [0x408590]
call esi
mov dword [0x4085a4], eax
test eax, eax
jne 0x401eb2
push str.GetProcAddress_Failed___CB_OnActionEnd_n
call fcn.00401020
add esp, 4
push str.CB_OnActionProgress
push dword [0x408590]
call esi
mov dword [0x408588], eax
test eax, eax
jne 0x401ed5
push str.GetProcAddress_Failed___CB_OnActionProgress_n
call fcn.00401020
add esp, 4
push str.CB_OnUpdatePath
push dword [0x408590]
call esi
mov dword [0x408598], eax
test eax, eax
jne 0x401ef8
push str.GetProcAddress_Failed___CB_OnUpdatePath_n
call fcn.00401020
add esp, 4
push str.CB_OnComplete
push dword [0x408590]
call esi
mov dword [0x40858c], eax
test eax, eax
jne 0x401f1b
push str.GetProcAddress_Failed___CB_OnComplete_n
call fcn.00401020
add esp, 4
push str.Scan
push dword [0x408590]
call esi
mov dword [0x4085ac], eax
test eax, eax
jne 0x401f3e
push str.GetProcAddress_Failed___Scan_n
call fcn.00401020
add esp, 4
push str.Cancel
push dword [0x408590]
call esi
mov dword [0x4085b0], eax
test eax, eax
jne 0x401f61
push str.GetProcAddress_Failed___Cancel_n
call fcn.00401020
add esp, 4
push str.ExcludeTools
push dword [0x408590]
call esi
mov dword [0x4085a0], eax
test eax, eax
jne 0x401f84
push str.GetProcAddress_Failed___ExcludeTools_n
call fcn.00401020
add esp, 4
xor eax, eax
jmp 0x401f9a
push str.LoadLibrary_failed_n
call fcn.00401020
add esp, 4
mov eax, 1
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.00403676
mov esp, ebp
pop ebp
ret
call fcn.00401110
call fcn.004011b0
int3