Function at 0x15c92b0
Capabilities:
Get thread local storage value

Disassembly:
push rsi
push rdi
push r12
push r13
push r14
sub rsp, 0xd0
mov qword [rsp + 0xc8], 0xfffffffffffffffe
mov qword [rsp + 0x100], rbx
call fcn.0115c5b0
mov qword [rsp + 0xa8], rax
xor r14d, r14d
mov qword [rsp + 0xb0], r14
mov rax, qword [0x039f1180]
mov ecx, dword [rax + 8]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
test rax, rax
je 0x15c9307
lea rdi, [rax + 0x20]
jmp 0x15c930a
mov rdi, r14
mov qword [rsp + 0xb0], rdi
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VarBstrFromCy]
mov rsi, rax
mov qword [rsp + 0xb8], rax
mov qword [rsp + 0xa0], r14
mov qword [rsp + 0x28], r14
mov qword [rsp + 0x20], r14
xor r9d, r9d
xor r8d, r8d
xor edx, edx
lea rcx, [rsp + 0xa0]
call fcn.015c5ae0
test eax, eax
jns 0x15c9379
mov rcx, qword [rsp + 0xa0]
test rcx, rcx
je 0x15c9366
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov rax, qword [0x039f1188]
test rax, rax
je 0x15c9399
mov ecx, dword [rax + 8]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
test rax, rax
je 0x15c9399
add rax, 0x20
jmp 0x15c939c
mov rax, r14
mov rbx, qword [rsp + 0xa0]
mov qword [rbx + 0x18], rax
xor edx, edx
mov rcx, rbx
call fcn.02bd13a0
test eax, eax
jns 0x15c93d3
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
xor r8d, r8d
xor edx, edx
lea rcx, [rsp + 0x50]
call fcn.0118c100
nop
mov edx, dword [reloc.OLEAUT32.dll_VariantInit]
and edx, 7
lea rax, [rdx + rdx*2]
lea r8, [0x01173e98]
movzx ecx, byte [r8 + rax*2 + 5]
movzx eax, byte [r8 + rax*2 + 4]
add eax, ecx
cdqe
movabs r9, 0x7fffffffffffffff
mov rcx, r9
sub rcx, rax
shr rcx, 1
sub rcx, 1
cmp rcx, 0x400
jge 0x15c9480
lea r8, [0x015c9c50]
mov edx, 0xd74
lea rcx, [0x0156dfe0]
call fcn.017eea00
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
lea rax, [rdx + rdx*2]
movzx ecx, byte [r8 + rax*2 + 5]
movzx eax, byte [r8 + rax*2 + 4]
add ecx, eax
movsxd r12, ecx
add r12, 0x802
mov rcx, qword [rdi + 0x30]
cmp r12, r9
jae 0x15c9bcb
mov rax, qword [rcx]
mov rdx, r12
call qword [rax + SafeArrayCopy]
test rax, rax
je 0x15c9bcb
mov rcx, qword [rdi + 0x28]
mov qword [rsp + 0x70], rcx
mov qword [rsp + 0x78], rax
mov qword [rsp + 0x80], r14
mov qword [rsp + 0x88], r12
lea rcx, [rsp + 0x38]
call fcn.0116a950
nop
mov r9, qword [rdi + 0x40]
xor r8d, r8d
lea rdx, [rsp + 0x68]
lea rcx, [rsp + 0x38]
call fcn.0118a2d0
test eax, eax
jns 0x15c9549
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov qword [rsp + 0x118], r14
lea r8, [rsp + 0x38]
lea rdx, [rsp + 0x118]
mov rcx, rbx
call fcn.02bcd2a0
test eax, eax
jns 0x15c95c9
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c957e
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
cmp qword [rsp + 0x118], 0
jne 0x15c9633
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c95e8
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
xor r12b, r12b
mov byte [rsp + 0x30], r12b
cmp dword [0x039f3428], 0
je 0x15c9954
mov dword [rsp + 0x110], r14d
lea rcx, [rsp + 0x110]
call fcn.02b7eb70
test eax, eax
jns 0x15c96c0
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c9675
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
cmp dword [rsp + 0x110], 0
je 0x15c9b6f
mov qword [rsp + 0x40], r14
mov r13, qword [rsp + 0x118]
mov rcx, qword [0x039f11b0]
call fcn.011e95f0
cmp qword [rax], 0
je 0x15c9701
mov rdx, qword [rax]
movzx eax, byte [rdx - 5]
test al, 0x40
jne 0x15c96fc
test al, 0x20
je 0x15c9704
mov rdx, qword [rdx]
jmp 0x15c9704
mov rdx, r14
lea rax, [rsp + 0x40]
mov qword [rsp + 0x20], rax
mov r9b, 1
mov r8, r13
mov rcx, rbx
call fcn.02bcc310
test eax, eax
jns 0x15c9790
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x15c9731
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c9745
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov word [rsp + 0x90], 0
call fcn.0115c5b0
mov r13, rax
mov rcx, qword [rsp + 0x40]
mov r10, qword [rcx]
lea r9, [rsp + 0x90]
mov r8d, 3
lea rdx, [0x0156e088]
call qword [r10 + 0x30]
test eax, eax
je 0x15c97cf
mov rcx, r13
call fcn.0109c0c0
cmp word [rsp + 0x90], 3
jne 0x15c97f0
mov edx, dword [rsp + 0x110]
cmp edx, dword [rsp + 0x98]
je 0x15c992d
jmp 0x15c97f7
mov edx, dword [rsp + 0x110]
lea rcx, [rsp + 0x90]
call fcn.0127b6e0
test eax, eax
jns 0x15c9886
lea rcx, [rsp + 0x90]
call fcn.01187f10
nop
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x15c9827
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c983b
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov rcx, qword [rsp + 0x40]
mov rax, qword [rcx]
lea r9, [rsp + 0x90]
mov r8b, 1
lea rdx, [0x0156e088]
call qword [rax + 0x38]
test eax, eax
jns 0x15c9925
lea rcx, [rsp + 0x90]
call fcn.01187f10
nop
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x15c98c6
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c98da
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov r12b, 1
mov byte [rsp + 0x30], r12b
lea rcx, [rsp + 0x90]
call fcn.01187f10
nop
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x15c9ab8
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
jmp 0x15c9ab8
mov qword [rsp + 0x48], r14
mov r13, qword [rsp + 0x118]
mov rcx, qword [0x039f11b0]
call fcn.011e95f0
cmp qword [rax], 0
je 0x15c9987
mov rdx, qword [rax]
movzx eax, byte [rdx - 5]
test al, 0x40
jne 0x15c9982
test al, 0x20
je 0x15c998a
mov rdx, qword [rdx]
jmp 0x15c998a
mov rdx, r14
lea rax, [rsp + 0x48]
mov qword [rsp + 0x20], rax
xor r9d, r9d
mov r8, r13
mov rcx, rbx
call fcn.02bcc310
test eax, eax
jns 0x15c9a16
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x15c99b7
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c99cb
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x15c9aa8
mov rax, qword [rcx]
xor edx, edx
call qword [rax + 0x60]
test eax, eax
jns 0x15c9aa0
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x15c9a41
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c9a55
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov r12b, 1
mov byte [rsp + 0x30], r12b
mov rcx, qword [rsp + 0x48]
test rcx, rcx
je 0x15c9ab8
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
test r12b, r12b
je 0x15c9b6f
mov rax, qword [rsp + 0x118]
test rax, rax
je 0x15c9ad4
lea r8, [rax - 0x18]
jmp 0x15c9ad7
mov r8, r14
mov rax, qword [0x039f11b0]
mov rcx, qword [rax + 0xb90]
mov rdx, qword [rsp + 0x38]
test rdx, rdx
je 0x15c9b00
movzx eax, byte [rdx - 5]
test al, 0x40
jne 0x15c9afb
test al, 0x20
je 0x15c9b03
mov rdx, qword [rdx]
jmp 0x15c9b03
mov rdx, r14
mov rax, qword [rcx]
call qword [rax + 0x1c0]
test eax, eax
jns 0x15c9b6f
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c9b24
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov rcx, qword [rsp + 0x118]
test rcx, rcx
je 0x15c9b83
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0x38]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
jmp 0x15c9c2b
mov dword [rsp + 0x110], r14d
mov qword [rsp + 0x20], 0x1000000f
xor r9d, r9d
xor r8d, r8d
mov edx, r14d
mov ecx, 0xc1030001
call fcn.0124e580
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
mov rax, qword [rbx]
mov rcx, rbx
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rsi
call qword [rax + 0x78]
nop
mov rcx, qword [rsp + 0xa8]
mov rbx, qword [rsp + 0x100]
add rsp, 0xd0
pop r14
pop r13
pop r12
pop rdi
pop rsi
jmp fcn.0109c0c0