Function at 0x420021
Capabilities:
Get thread local storage value
Set thread local storage value

Disassembly:
sub esp, 0xc
push esi
push edi
mov esi, eax
call fcn.0041a785
test byte [eax + 0x8c], 0x80
mov dword [esp + 8], eax
jne 0x42009c
cmp dword [0x4a7e00], 0
je 0x42005a
mov eax, dword [0x4a9bfc]
mov ecx, dword fs:[0x2c]
mov eax, dword [ecx + eax*4]
mov eax, dword [eax + 0xc]
jmp 0x420066
push dword [0x4aa03c]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
cmp dword [0x4a7e00], 0
mov dword [esp + 0xc], eax
je 0x42008e
mov eax, dword fs:[0x2c]
mov ecx, dword [0x4a9bfc]
mov eax, dword [eax + ecx*4]
mov dword [eax + 0xc], 1
jmp 0x42009c
push 1
push dword [0x4aa03c]
call dword [sym.imp.KERNEL32.dll_TlsSetValue]
push ebx
mov ebx, dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
lea eax, [esi + 0x3c]
push eax
mov dword [esp + 0x18], eax
call ebx
mov eax, dword [esi]
dec eax
je 0x420213
dec eax
je 0x420213
dec eax
je 0x4201e8
dec eax
je 0x4201df
dec eax
dec eax
je 0x4201df
dec eax
je 0x4200e0
call sym.AdobeCollabSync.exe_PR_Abort
jmp 0x420213
lea eax, [esi + 0x8c]
and dword [eax], 0xffffffbf
test byte [eax], 0x80
mov dword [esi], 1
jne 0x420213
mov eax, dword [esi + 0x98]
mov eax, dword [eax + 0x24]
push ebp
add eax, 0x30
push eax
call ebx
mov eax, dword [esi + 0x68]
and dword [esi + 0x54], 0
lea edi, [esi + 0x64]
mov ecx, dword [edi]
mov dword [eax], ecx
mov eax, dword [edi]
mov ecx, dword [esi + 0x68]
mov dword [eax + 4], ecx
mov eax, dword [esi + 0x98]
mov eax, dword [eax + 0x24]
add eax, 0x30
push eax
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
mov eax, dword [esi + 0x98]
push dword [eax + 0x24]
mov ebp, dword [esi + 4]
call ebx
mov eax, dword [esi + 0x98]
mov ecx, dword [eax + 0x24]
lea ecx, [ecx + ebp*8 + 0x48]
mov dword [edi], ecx
mov ecx, dword [eax + 0x24]
mov ecx, dword [ecx + ebp*8 + 0x4c]
mov dword [esi + 0x68], ecx
mov eax, dword [eax + 0x24]
mov eax, dword [eax + ebp*8 + 0x4c]
mov dword [eax], edi
mov eax, dword [esi + 0x98]
mov eax, dword [eax + 0x24]
mov dword [eax + ebp*8 + 0x4c], edi
mov eax, dword [esi + 0x98]
mov eax, dword [eax + 0x24]
xor edx, edx
inc edx
mov edi, edx
mov ecx, ebp
shl edi, cl
or dword [eax + 0x68], edi
mov eax, dword [esi + 0x98]
mov dword [esi + 0x54], edx
push dword [eax + 0x24]
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
call fcn.0041a785
cmp ebp, dword [eax + 4]
pop ebp
jle 0x420213
mov eax, dword [esp + 0xc]
test byte [eax + 0x8c], 0x80
jne 0x420213
cmp dword [0x4a7e00], 0
je 0x4201cd
mov eax, dword fs:[0x2c]
mov ecx, dword [0x4a9bfc]
mov eax, dword [eax + ecx*4]
mov eax, dword [eax + 0x10]
jmp 0x4201d9
push dword [0x4aa04c]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
mov byte [eax + 0xf], 1
jmp 0x420213
and dword [esi + 0x8c], 0xffffffbf
jmp 0x420213
and dword [esi + 0x8c], 0xffffffbf
lea edi, [esi + 0x80]
mov eax, dword [edi]
lea esi, [eax + 0x1c]
push esi
call ebx
mov edi, dword [edi]
cmp dword [edi + 8], 0
jne 0x42020c
push edi
call fcn.004190d0
pop ecx
push esi
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
push dword [esp + 0x14]
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
mov eax, dword [esp + 0xc]
test byte [eax + 0x8c], 0x80
pop ebx
jne 0x4202c7
mov esi, dword [esp + 0xc]
xor edi, edi
cmp esi, edi
jne 0x42029b
cmp dword [0x4a7e00], edi
je 0x420258
mov eax, dword [0x4a9bfc]
mov ecx, dword fs:[0x2c]
mov eax, dword [ecx + eax*4]
mov eax, dword [eax + 0x10]
jmp 0x420264
push dword [0x4aa04c]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
cmp dword [eax + 0xc], edi
je 0x42029b
cmp dword [0x4a7e00], edi
je 0x420288
mov eax, dword fs:[0x2c]
mov ecx, dword [0x4a9bfc]
mov eax, dword [eax + ecx*4]
mov eax, dword [eax + 0x10]
jmp 0x420294
push dword [0x4aa04c]
call dword [sym.imp.KERNEL32.dll_TlsGetValue]
push eax
call fcn.00418fe9
pop ecx
cmp dword [0x4a7e00], edi
je 0x4202ba
mov eax, dword fs:[0x2c]
mov ecx, dword [0x4a9bfc]
mov eax, dword [eax + ecx*4]
mov dword [eax + 0xc], esi
jmp 0x4202c7
push esi
push dword [0x4aa03c]
call dword [sym.imp.KERNEL32.dll_TlsSetValue]
pop edi
pop esi
add esp, 0xc
ret