Function at 0x49f680
Capabilities:
Allocate thread local storage
Set thread local storage value

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0xb8
lea rbx, [0x009cc708]
movabs rax, 0x7f0725e3c15730e2
mov rsi, rbx
mov rdi, rbx
mov rbp, rbx
mov r12, rbx
sar rsi, 0x2c
and esi, 0xf
add esi, 0x41
mov qword [rsp + 0x40], rax
mov eax, ebx
mov r13, rcx
shr al, 4
mov byte [rsp + 0x48], 0
add eax, 0x41
mov byte [rsp + 0x58], 0
mov byte [rsp + 0x28], al
mov rax, rbx
mov qword [rsp + 0x50], 0
sar rax, 8
and eax, 0xf
add eax, 0x41
mov byte [rsp + 0x37], al
mov rax, rbx
sar rax, 0xc
and eax, 0xf
add eax, 0x41
mov byte [rsp + 0x38], al
mov rax, rbx
sar rax, 0x10
and eax, 0xf
add eax, 0x41
mov byte [rsp + 0x39], al
mov rax, rbx
sar rax, 0x14
and eax, 0xf
add eax, 0x41
mov byte [rsp + 0x3a], al
mov rax, rbx
sar rax, 0x18
and eax, 0xf
add eax, 0x41
mov byte [rsp + 0x3b], al
mov rax, rbx
sar rax, 0x1c
and eax, 0xf
add eax, 0x41
mov byte [rsp + 0x3c], al
mov rax, rbx
sar rax, 0x20
and eax, 0xf
add eax, 0x41
mov byte [rsp + 0x3d], al
mov rax, rbx
sar rax, 0x24
and eax, 0xf
add eax, 0x41
mov byte [rsp + 0x3e], al
mov rax, rbx
sar rax, 0x28
and eax, 0xf
add eax, 0x41
sar rdi, 0x30
mov byte [rsp + 0x3f], al
mov rax, rbx
sar rbp, 0x34
and edi, 0xf
sar r12, 0x38
shr rax, 0x3c
and ebp, 0xf
add edi, 0x41
and r12d, 0xf
mov r15, rax
add ebp, 0x41
add r12d, 0x41
add r15d, 0x41
jmp 0x49f7e9
lock add dword [0x009cc70c], 1
mov byte [rsp + 0x48], 1
mov eax, dword [0x009cc708]
cmp eax, dword [rsp + 0x40]
je 0x49f86c
mov rcx, qword [rsp + 0x50]
test rcx, rcx
je 0x49f8c0
xor r8d, r8d
mov edx, 0xffffffff
call qword [sym.imp.KERNEL32.dll_WaitForSingleObjectEx]
mov eax, dword [0x009cc708]
cmp eax, dword [rsp + 0x40]
je 0x49f86c
mov edx, dword [rsp + 0x44]
xor eax, eax
lock cmpxchg dword [0x009cc708], edx
test eax, eax
je 0x49f818
cmp byte [rsp + 0x48], 0
je 0x49f7b0
mov rcx, qword [rsp + 0x50]
jmp 0x49f7db
mov r14, qword [rsp + 0x50]
test r14, r14
je 0x49f900
mov rcx, r14
call qword [sym.imp.KERNEL32.dll_ResetEvent]
call method.boost.tss_cleanup_implemented__
call qword [sym.imp.KERNEL32.dll_TlsAlloc]
cmp byte [rsp + 0x48], 0
mov dword [0x00865180], eax
je 0x49fca8
mov eax, dword [rsp + 0x40]
xchg dword [0x009cc708], eax
mov r12, qword [rsp + 0x50]
test r12, r12
je 0x49fcc0
mov rcx, r12
call qword [sym.imp.KERNEL32.dll_SetEvent]
mov rcx, qword [rsp + 0x50]
lea rax, [rcx - 1]
cmp rax, 0xfffffffffffffffd
jbe 0x49f940
mov ecx, dword [0x00865180]
cmp ecx, 0xffffffff
je 0x49f893
mov rdx, r13
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
mov rax, qword [r13]
mov rcx, r13
call qword [rax + 0x10]
call method.boost._anonymous_namespace_::run_thread_exit_callbacks__
xor eax, eax
add rsp, 0xb8
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
cmp byte [rsp + 0x58], 0
je 0x49fb10
lea r9, [rsp + 0x58]
xor r8d, r8d
mov edx, 1
xor ecx, ecx
call qword [sym.imp.KERNEL32.dll_CreateEventA]
mov rcx, qword [rsp + 0x50]
mov r14, rax
lea rax, [rcx - 1]
cmp rax, 0xfffffffffffffffd
jbe 0x49fb00
mov qword [rsp + 0x50], r14
jmp 0x49f7e9
cmp byte [rsp + 0x58], 0
je 0x49f970
mov ecx, 0x100002
lea r8, [rsp + 0x58]
xor edx, edx
call qword [sym.imp.KERNEL32.dll_OpenEventA]
mov rcx, qword [rsp + 0x50]
mov r14, rax
lea rax, [rcx - 1]
cmp rax, 0xfffffffffffffffd
jbe 0x49f950
mov qword [rsp + 0x50], r14
test r14, r14
je 0x49f82f
jmp 0x49f826
call qword [sym.imp.KERNEL32.dll_CloseHandle]
jmp 0x49f87f
call qword [sym.imp.KERNEL32.dll_CloseHandle]
mov qword [rsp + 0x50], r14
test r14, r14
je 0x49f82f
jmp 0x49f826
mov eax, dword [0x009531d0]
movdqu xmm3, xmmword [str.LocalC15730E2_145C_4c5e_B005_3BC753F42475_once_flag]
and ebx, 0xf
mov byte [rsp + 0x99], sil
movdqu xmm4, xmmword [0x009531b0]
movdqu xmm5, xmmword [0x009531c0]
add ebx, 0x41
mov dword [rsp + 0x88], eax
movzx eax, word [0x009531d4]
movups xmmword [rsp + 0x58], xmm3
mov word [rsp + 0x8c], ax
movzx eax, byte [rsp + 0x28]
movups xmmword [rsp + 0x68], xmm4
mov byte [rsp + 0x8f], al
movzx eax, byte [rsp + 0x37]
movups xmmword [rsp + 0x78], xmm5
mov byte [rsp + 0x90], al
movzx eax, byte [rsp + 0x38]
mov byte [rsp + 0x8e], bl
mov byte [rsp + 0x91], al
movzx eax, byte [rsp + 0x39]
mov byte [rsp + 0x92], al
movzx eax, byte [rsp + 0x3a]
mov byte [rsp + 0x93], al
movzx eax, byte [rsp + 0x3b]
mov byte [rsp + 0x94], al
movzx eax, byte [rsp + 0x3c]
mov byte [rsp + 0x95], al
movzx eax, byte [rsp + 0x3d]
mov byte [rsp + 0x96], al
movzx eax, byte [rsp + 0x3e]
mov byte [rsp + 0x97], al
movzx eax, byte [rsp + 0x3f]
mov byte [rsp + 0x98], al
mov byte [rsp + 0x9a], dil
mov byte [rsp + 0x9b], bpl
mov byte [rsp + 0x9c], r12b
mov byte [rsp + 0x9d], r15b
mov byte [rsp + 0x9e], 0
call qword [sym.imp.KERNEL32.dll_GetCurrentProcessId]
mov byte [rsp + 0xa6], 0
mov edx, eax
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0x9e], dl
mov edx, eax
shr dl, 4
add edx, 0x41
mov byte [rsp + 0x9f], dl
mov edx, eax
shr edx, 8
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0xa0], dl
mov edx, eax
shr edx, 0xc
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0xa1], dl
mov edx, eax
shr edx, 0x10
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0xa2], dl
mov edx, eax
shr edx, 0x14
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0xa3], dl
mov edx, eax
shr eax, 0x1c
shr edx, 0x18
add eax, 0x41
and edx, 0xf
mov byte [rsp + 0xa5], al
add edx, 0x41
mov byte [rsp + 0xa4], dl
jmp 0x49f907
call qword [sym.imp.KERNEL32.dll_CloseHandle]
jmp 0x49f8f6
mov eax, dword [0x009531d0]
movdqu xmm0, xmmword [str.LocalC15730E2_145C_4c5e_B005_3BC753F42475_once_flag]
mov byte [rsp + 0x99], sil
movdqu xmm1, xmmword [0x009531b0]
movdqu xmm2, xmmword [0x009531c0]
mov dword [rsp + 0x88], eax
movzx eax, word [0x009531d4]
movups xmmword [rsp + 0x58], xmm0
mov word [rsp + 0x8c], ax
mov eax, ebx
and eax, 0xf
movups xmmword [rsp + 0x68], xmm1
add eax, 0x41
movups xmmword [rsp + 0x78], xmm2
mov byte [rsp + 0x8e], al
movzx eax, byte [rsp + 0x28]
mov byte [rsp + 0x8f], al
movzx eax, byte [rsp + 0x37]
mov byte [rsp + 0x90], al
movzx eax, byte [rsp + 0x38]
mov byte [rsp + 0x91], al
movzx eax, byte [rsp + 0x39]
mov byte [rsp + 0x92], al
movzx eax, byte [rsp + 0x3a]
mov byte [rsp + 0x93], al
movzx eax, byte [rsp + 0x3b]
mov byte [rsp + 0x94], al
movzx eax, byte [rsp + 0x3c]
mov byte [rsp + 0x95], al
movzx eax, byte [rsp + 0x3d]
mov byte [rsp + 0x96], al
movzx eax, byte [rsp + 0x3e]
mov byte [rsp + 0x97], al
movzx eax, byte [rsp + 0x3f]
mov byte [rsp + 0x98], al
mov byte [rsp + 0x9a], dil
mov byte [rsp + 0x9b], bpl
mov byte [rsp + 0x9c], r12b
mov byte [rsp + 0x9d], r15b
mov byte [rsp + 0x9e], 0
call qword [sym.imp.KERNEL32.dll_GetCurrentProcessId]
mov edx, eax
mov byte [rsp + 0xa6], 0
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0x9e], dl
mov edx, eax
shr dl, 4
add edx, 0x41
mov byte [rsp + 0x9f], dl
mov edx, eax
shr edx, 8
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0xa0], dl
mov edx, eax
shr edx, 0xc
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0xa1], dl
mov edx, eax
shr edx, 0x10
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0xa2], dl
mov edx, eax
shr edx, 0x14
and edx, 0xf
add edx, 0x41
mov byte [rsp + 0xa3], dl
mov edx, eax
shr eax, 0x1c
shr edx, 0x18
add eax, 0x41
and edx, 0xf
mov byte [rsp + 0xa5], al
add edx, 0x41
mov byte [rsp + 0xa4], dl
jmp 0x49f8cb
lock add dword [0x009cc70c], 1
mov byte [rsp + 0x48], 1
jmp 0x49f84b
mov eax, dword [0x009cc70c]
cmp eax, 1
jg 0x49fce0
mov r12, qword [rsp + 0x50]
test r12, r12
je 0x49f87f
jmp 0x49f863
cmp byte [rsp + 0x58], 0
lea r9, [rsp + 0x58]
je 0x49fd15
xor ecx, ecx
xor r8d, r8d
mov edx, 1
call qword [sym.imp.KERNEL32.dll_CreateEventA]
mov rcx, qword [rsp + 0x50]
mov r12, rax
lea rax, [rcx - 1]
cmp rax, 0xfffffffffffffffd
jbe 0x49fd30
mov qword [rsp + 0x50], r12
jmp 0x49fcd0
mov rcx, r9
lea rdx, [0x009cc708]
mov qword [rsp + 0x28], r9
call method.boost::detail.name_once_mutex_char__void_
mov r9, qword [rsp + 0x28]
jmp 0x49fcec
call qword [sym.imp.KERNEL32.dll_CloseHandle]
jmp 0x49fd0e