
/* void std::__facet_shims::__moneypunct_fill_cache<wchar_t, true>(std::integral_constant<bool,
   false>, std::locale::facet const*, std::__moneypunct_cache<wchar_t, true>*) */

void std::__facet_shims::__moneypunct_fill_cache<wchar_t,true>(long *param_1,long param_2)

{
  int *piVar1;
  int iVar2;
  ulong uVar3;
  undefined4 uVar4;
  char *pcVar5;
  wchar_t *pwVar6;
  bool bVar7;
  long local_40 [2];
  
  uVar4 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x24) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined4 *)(param_2 + 0x28) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x60) = uVar4;
  *(undefined8 *)(param_2 + 0x30) = 0;
  *(undefined8 *)(param_2 + 0x40) = 0;
  *(undefined8 *)(param_2 + 0x50) = 0;
  *(undefined1 *)(param_2 + 0x98) = 1;
  (**(code **)(*param_1 + 0x20))((string *)local_40,param_1);
  uVar3 = *(ulong *)(local_40[0] + -0x18);
                    /* try { // try from 002b2a8d to 002b2aa4 has its CatchHandler @ 002b2d5d */
  pcVar5 = (char *)operator_new__(uVar3 + 1);
  std::string::copy((string *)local_40,pcVar5,uVar3,0);
  pcVar5[uVar3] = '\0';
  *(char **)(param_2 + 0x10) = pcVar5;
  bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdc38;
  *(ulong *)(param_2 + 0x18) = uVar3;
  if (bVar7) {
    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));
    }
  }
  (**(code **)(*param_1 + 0x28))((string *)local_40,param_1);
  uVar3 = *(ulong *)(local_40[0] + -0x18);
  if (0x1ffffffffffffffe < uVar3 + 1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */
    __cxa_throw_bad_array_new_length();
  }
                    /* try { // try from 002b2b00 to 002b2b17 has its CatchHandler @ 002b2d67 */
  pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);
  std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);
  *(wchar_t **)(param_2 + 0x30) = pwVar6;
  pwVar6[uVar3] = L'\0';
  bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;
  *(ulong *)(param_2 + 0x38) = uVar3;
  if (bVar7) {
    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));
    }
  }
  (**(code **)(*param_1 + 0x30))((string *)local_40,param_1);
  uVar3 = *(ulong *)(local_40[0] + -0x18);
  if (uVar3 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */
    pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);
    std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);
    *(wchar_t **)(param_2 + 0x40) = pwVar6;
    pwVar6[uVar3] = L'\0';
    bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;
    *(ulong *)(param_2 + 0x48) = uVar3;
    if (bVar7) {
      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
        iVar2 = *(int *)(local_40[0] + -8);
        *(int *)(local_40[0] + -8) = iVar2 + -1;
      }
      else {
        LOCK();
        piVar1 = (int *)(local_40[0] + -8);
        iVar2 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
      }
      if (iVar2 < 1) {
        std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));
      }
    }
    (**(code **)(*param_1 + 0x38))((string *)local_40,param_1);
    uVar3 = *(ulong *)(local_40[0] + -0x18);
    if (uVar3 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */
      pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);
      std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);
      *(wchar_t **)(param_2 + 0x50) = pwVar6;
      pwVar6[uVar3] = L'\0';
      bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;
      *(ulong *)(param_2 + 0x58) = uVar3;
      if (bVar7) {
        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
          iVar2 = *(int *)(local_40[0] + -8);
          *(int *)(local_40[0] + -8) = iVar2 + -1;
        }
        else {
          LOCK();
          piVar1 = (int *)(local_40[0] + -8);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
        }
        if (iVar2 < 1) {
          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));
        }
      }
      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);
      *(undefined4 *)(param_2 + 100) = uVar4;
      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);
      *(undefined4 *)(param_2 + 0x68) = uVar4;
      return;
    }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */
    __cxa_throw_bad_array_new_length();
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d58 to 002b2d5c has its CatchHandler @ 002b2d8d */
  __cxa_throw_bad_array_new_length();
}



void FUN_002b2a10(long *param_1,long param_2)

{
  int *piVar1;
  int iVar2;
  long lVar3;
  undefined4 uVar4;
  long lVar5;
  long lVar6;
  bool bVar7;
  undefined1 local_41;
  long local_40 [2];
  
  uVar4 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x24) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined4 *)(param_2 + 0x28) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x60) = uVar4;
  *(undefined8 *)(param_2 + 0x30) = 0;
  *(undefined8 *)(param_2 + 0x40) = 0;
  *(undefined8 *)(param_2 + 0x50) = 0;
  *(undefined1 *)(param_2 + 0x98) = 1;
  (**(code **)(*param_1 + 0x20))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 002b2a8d to 002b2aa4 has its CatchHandler @ 002b2d5d */
  lVar5 = thunk_FUN_00275550(lVar3 + 1);
  FUN_002a8e60(local_40,lVar5,lVar3,0);
  *(undefined1 *)(lVar5 + lVar3) = 0;
  *(long *)(param_2 + 0x10) = lVar5;
  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;
  *(long *)(param_2 + 0x18) = lVar3;
  if (bVar7) {
    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x28))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
  if (0x1ffffffffffffffe < lVar3 + 1U) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */
    FUN_00276790();
  }
  lVar5 = (lVar3 + 1U) * 4;
                    /* try { // try from 002b2b00 to 002b2b17 has its CatchHandler @ 002b2d67 */
  lVar6 = thunk_FUN_00275550(lVar5);
  FUN_002f0ff0(local_40,lVar6,lVar3,0);
  *(long *)(param_2 + 0x30) = lVar6;
  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;
  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;
  *(long *)(param_2 + 0x38) = lVar3;
  if (bVar7) {
    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x30))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
  if (lVar3 + 1U < 0x1fffffffffffffff) {
    lVar6 = (lVar3 + 1U) * 4;
                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */
    lVar5 = thunk_FUN_00275550(lVar6);
    FUN_002f0ff0(local_40,lVar5,lVar3,0);
    *(long *)(param_2 + 0x40) = lVar5;
    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;
    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;
    *(long *)(param_2 + 0x48) = lVar3;
    if (bVar7) {
      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
        iVar2 = *(int *)(local_40[0] + -8);
        *(int *)(local_40[0] + -8) = iVar2 + -1;
      }
      else {
        LOCK();
        piVar1 = (int *)(local_40[0] + -8);
        iVar2 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
      }
      if (iVar2 < 1) {
        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);
      }
    }
    (**(code **)(*param_1 + 0x38))(local_40,param_1);
    lVar3 = *(long *)(local_40[0] + -0x18);
    if (lVar3 + 1U < 0x1fffffffffffffff) {
      lVar6 = (lVar3 + 1U) * 4;
                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */
      lVar5 = thunk_FUN_00275550(lVar6);
      FUN_002f0ff0(local_40,lVar5,lVar3,0);
      *(long *)(param_2 + 0x50) = lVar5;
      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;
      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;
      *(long *)(param_2 + 0x58) = lVar3;
      if (bVar7) {
        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
          iVar2 = *(int *)(local_40[0] + -8);
          *(int *)(local_40[0] + -8) = iVar2 + -1;
        }
        else {
          LOCK();
          piVar1 = (int *)(local_40[0] + -8);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
        }
        if (iVar2 < 1) {
          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);
        }
      }
      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);
      *(undefined4 *)(param_2 + 100) = uVar4;
      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);
      *(undefined4 *)(param_2 + 0x68) = uVar4;
      return;
    }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */
    FUN_00276790();
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d58 to 002b2d5c has its CatchHandler @ 002b2d8d */
  FUN_00276790();
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
MOV RBP,RDI
PUSH RBX
MOV RBX,RSI
SUB RSP,0x18
MOV RAX,qword ptr [RDI]
LEA R12,[RSP + 0x8]
CALL qword ptr [RAX + 0x10]
MOV RDI,RBP
MOV dword ptr [RBX + 0x24],EAX
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x18]
MOV RDI,RBP
MOV dword ptr [RBX + 0x28],EAX
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x40]
MOV qword ptr [RBX + 0x10],0x0
MOV RDI,R12
MOV RSI,RBP
MOV dword ptr [RBX + 0x60],EAX
MOV qword ptr [RBX + 0x30],0x0
MOV qword ptr [RBX + 0x40],0x0
MOV qword ptr [RBX + 0x50],0x0
MOV byte ptr [RBX + 0x98],0x1
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x20]
MOV RAX,qword ptr [RSP + 0x8]
MOV R13,qword ptr [RAX + -0x18]
LEA RDI,[R13 + 0x1]
CALL 0x002754f0
XOR ECX,ECX
MOV RDX,R13
MOV RSI,RAX
MOV RDI,R12
MOV R14,RAX
CALL 0x002a8e60
MOV RAX,qword ptr [RSP + 0x8]
MOV byte ptr [R14 + R13*0x1],0x0
MOV qword ptr [RBX + 0x10],R14
LEA RDI,[RAX + -0x18]
CMP RDI,qword ptr [0x003bdc38]
MOV qword ptr [RBX + 0x18],R13
JNZ 0x002b2c50
MOV RAX,qword ptr [RBP]
MOV RDI,R12
MOV RSI,RBP
CALL qword ptr [RAX + 0x28]
MOV RAX,qword ptr [RSP + 0x8]
MOV R14,qword ptr [RAX + -0x18]
MOV RAX,0x1ffffffffffffffe
LEA RDI,[R14 + 0x1]
CMP RDI,RAX
JA 0x002b2d62
LEA R13,[RDI*0x4]
MOV RDI,R13
CALL 0x002754f0
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x002f0ff0
MOV RAX,qword ptr [RSP + 0x8]
MOV qword ptr [RBX + 0x30],R15
MOV dword ptr [R15 + R13*0x1 + -0x4],0x0
LEA RDI,[RAX + -0x18]
CMP RDI,qword ptr [0x003bdcd8]
MOV qword ptr [RBX + 0x38],R14
JNZ 0x002b2c80
MOV RAX,qword ptr [RBP]
MOV RSI,RBP
MOV RDI,R12
CALL qword ptr [RAX + 0x30]
MOV RAX,qword ptr [RSP + 0x8]
MOV R14,qword ptr [RAX + -0x18]
MOV RAX,0x1ffffffffffffffe
LEA R13,[R14 + 0x1]
CMP R13,RAX
JA 0x002b2d58
SHL R13,0x2
MOV RDI,R13
CALL 0x002754f0
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x002f0ff0
MOV RAX,qword ptr [RSP + 0x8]
MOV qword ptr [RBX + 0x40],R15
MOV dword ptr [R15 + R13*0x1 + -0x4],0x0
LEA RDI,[RAX + -0x18]
CMP RDI,qword ptr [0x003bdcd8]
MOV qword ptr [RBX + 0x48],R14
JNZ 0x002b2ce0
MOV RAX,qword ptr [RBP]
MOV RSI,RBP
MOV RDI,R12
CALL qword ptr [RAX + 0x38]
MOV RAX,qword ptr [RSP + 0x8]
MOV R14,qword ptr [RAX + -0x18]
MOV RAX,0x1ffffffffffffffe
LEA R13,[R14 + 0x1]
CMP R13,RAX
JA 0x002b2d53
SHL R13,0x2
MOV RDI,R13
CALL 0x002754f0
XOR ECX,ECX
MOV RDX,R14
MOV RSI,RAX
MOV RDI,R12
MOV R15,RAX
CALL 0x002f0ff0
MOV RAX,qword ptr [RSP + 0x8]
MOV qword ptr [RBX + 0x50],R15
MOV dword ptr [R15 + R13*0x1 + -0x4],0x0
LEA RDI,[RAX + -0x18]
CMP RDI,qword ptr [0x003bdcd8]
MOV qword ptr [RBX + 0x58],R14
JNZ 0x002b2cb0
MOV RAX,qword ptr [RBP]
MOV RDI,RBP
CALL qword ptr [RAX + 0x48]
MOV RDI,RBP
MOV dword ptr [RBX + 0x64],EAX
MOV RAX,qword ptr [RBP]
CALL qword ptr [RAX + 0x50]
MOV dword ptr [RBX + 0x68],EAX
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP qword ptr [0x003bdee8],0x0
JZ 0x002b2d40
MOV EDX,0xffffffff
XADD.LOCK dword ptr [RAX + -0x8],EDX
TEST EDX,EDX
JG 0x002b2ac8
LEA RSI,[RSP + 0x7]
CALL 0x002a9af0
JMP 0x002b2ac8
CMP qword ptr [0x003bdee8],0x0
JZ 0x002b2d10
MOV EDX,0xffffffff
XADD.LOCK dword ptr [RAX + -0x8],EDX
TEST EDX,EDX
JG 0x002b2b3f
LEA RSI,[RSP + 0x7]
CALL 0x002f1cd0
JMP 0x002b2b3f
CMP qword ptr [0x003bdee8],0x0
JZ 0x002b2d30
MOV EDX,0xffffffff
XADD.LOCK dword ptr [RAX + -0x8],EDX
TEST EDX,EDX
JG 0x002b2c25
LEA RSI,[RSP + 0x7]
CALL 0x002f1cd0
JMP 0x002b2c25
CMP qword ptr [0x003bdee8],0x0
JZ 0x002b2d20
MOV EDX,0xffffffff
XADD.LOCK dword ptr [RAX + -0x8],EDX
TEST EDX,EDX
JG 0x002b2bb2
LEA RSI,[RSP + 0x7]
CALL 0x002f1cd0
JMP 0x002b2bb2
MOV EDX,dword ptr [RAX + -0x8]
LEA ECX,[RDX + -0x1]
MOV dword ptr [RAX + -0x8],ECX
JMP 0x002b2c98
MOV EDX,dword ptr [RAX + -0x8]
LEA ECX,[RDX + -0x1]
MOV dword ptr [RAX + -0x8],ECX
JMP 0x002b2cf4
MOV EDX,dword ptr [RAX + -0x8]
LEA ECX,[RDX + -0x1]
MOV dword ptr [RAX + -0x8],ECX
JMP 0x002b2cc4
MOV EDX,dword ptr [RAX + -0x8]
LEA ECX,[RDX + -0x1]
MOV dword ptr [RAX + -0x8],ECX
JMP 0x002b2c68
CALL 0x00276790
CALL 0x00276790
CALL 0x00276790
(translation_unit "void FUN_002b2a10(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined4 uVar4;\n  long lVar5;\n  long lVar6;\n  bool bVar7;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 002b2a8d to 002b2aa4 has its CatchHandler @ 002b2d5d */\n  lVar5 = thunk_FUN_00275550(lVar3 + 1);\n  FUN_002a8e60(local_40,lVar5,lVar3,0);\n  *(undefined1 *)(lVar5 + lVar3) = 0;\n  *(long *)(param_2 + 0x10) = lVar5;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;\n  *(long *)(param_2 + 0x18) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */\n    FUN_00276790();\n  }\n  lVar5 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2b00 to 002b2b17 has its CatchHandler @ 002b2d67 */\n  lVar6 = thunk_FUN_00275550(lVar5);\n  FUN_002f0ff0(local_40,lVar6,lVar3,0);\n  *(long *)(param_2 + 0x30) = lVar6;\n  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n  *(long *)(param_2 + 0x38) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */\n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */\n    FUN_00276790();\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d58 to 002b2d5c has its CatchHandler @ 002b2d8d */\n  FUN_00276790();\n}\n\n" (function_definition "void FUN_002b2a10(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined4 uVar4;\n  long lVar5;\n  long lVar6;\n  bool bVar7;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 002b2a8d to 002b2aa4 has its CatchHandler @ 002b2d5d */\n  lVar5 = thunk_FUN_00275550(lVar3 + 1);\n  FUN_002a8e60(local_40,lVar5,lVar3,0);\n  *(undefined1 *)(lVar5 + lVar3) = 0;\n  *(long *)(param_2 + 0x10) = lVar5;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;\n  *(long *)(param_2 + 0x18) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */\n    FUN_00276790();\n  }\n  lVar5 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2b00 to 002b2b17 has its CatchHandler @ 002b2d67 */\n  lVar6 = thunk_FUN_00275550(lVar5);\n  FUN_002f0ff0(local_40,lVar6,lVar3,0);\n  *(long *)(param_2 + 0x30) = lVar6;\n  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n  *(long *)(param_2 + 0x38) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */\n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */\n    FUN_00276790();\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d58 to 002b2d5c has its CatchHandler @ 002b2d8d */\n  FUN_00276790();\n}" primitive_type (function_declarator "FUN_002b2a10(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined4 uVar4;\n  long lVar5;\n  long lVar6;\n  bool bVar7;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    /* try { // try from 002b2a8d to 002b2aa4 has its CatchHandler @ 002b2d5d */\n  lVar5 = thunk_FUN_00275550(lVar3 + 1);\n  FUN_002a8e60(local_40,lVar5,lVar3,0);\n  *(undefined1 *)(lVar5 + lVar3) = 0;\n  *(long *)(param_2 + 0x10) = lVar5;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;\n  *(long *)(param_2 + 0x18) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */\n    FUN_00276790();\n  }\n  lVar5 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2b00 to 002b2b17 has its CatchHandler @ 002b2d67 */\n  lVar6 = thunk_FUN_00275550(lVar5);\n  FUN_002f0ff0(local_40,lVar6,lVar3,0);\n  *(long *)(param_2 + 0x30) = lVar6;\n  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n  *(long *)(param_2 + 0x38) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */\n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */\n    FUN_00276790();\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d58 to 002b2d5c has its CatchHandler @ 002b2d8d */\n  FUN_00276790();\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "undefined1 local_41;" type_identifier identifier ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x24) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x24) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x28) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x28) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x28)" * (cast_expression "(undefined4 *)(param_2 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x30)" * (cast_expression "(undefined8 *)(param_2 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x40) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x40)" * (cast_expression "(undefined8 *)(param_2 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x50) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x50) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x50)" * (cast_expression "(undefined8 *)(param_2 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x98)" * (cast_expression "(undefined1 *)(param_2 + 0x98)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "lVar5 = thunk_FUN_00275550(lVar3 + 1);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar3 + 1)" identifier = (call_expression "thunk_FUN_00275550(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_002a8e60(local_40,lVar5,lVar3,0);" (call_expression "FUN_002a8e60(local_40,lVar5,lVar3,0)" identifier (argument_list "(local_40,lVar5,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar5 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar5 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar5 + lVar3)" * (cast_expression "(undefined1 *)(lVar5 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + lVar3)" ( (binary_expression "lVar5 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x10) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar5" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38" identifier = (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38" (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != identifier)) ;) (expression_statement "*(long *)(param_2 + 0x18) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar3" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x28))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */\n    FUN_00276790();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < lVar3 + 1U)" ( (binary_expression "0x1ffffffffffffffe < lVar3 + 1U" number_literal < (binary_expression "lVar3 + 1U" identifier + number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */\n    FUN_00276790();\n  }" { comment comment (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "lVar5 = (lVar3 + 1U) * 4;" (assignment_expression "lVar5 = (lVar3 + 1U) * 4" identifier = (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" ( (binary_expression "lVar3 + 1U" identifier + number_literal) )) * number_literal)) ;) comment (expression_statement "lVar6 = thunk_FUN_00275550(lVar5);" (assignment_expression "lVar6 = thunk_FUN_00275550(lVar5)" identifier = (call_expression "thunk_FUN_00275550(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) (expression_statement "FUN_002f0ff0(local_40,lVar6,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x30) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar6" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar6 + -4 + lVar5) = 0;" (assignment_expression "*(undefined4 *)(lVar6 + -4 + lVar5) = 0" (pointer_expression "*(undefined4 *)(lVar6 + -4 + lVar5)" * (cast_expression "(undefined4 *)(lVar6 + -4 + lVar5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -4 + lVar5)" ( (binary_expression "lVar6 + -4 + lVar5" (binary_expression "lVar6 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" identifier = (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != identifier)) ;) (expression_statement "*(long *)(param_2 + 0x38) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar3" (pointer_expression "*(long *)(param_2 + 0x38)" * (cast_expression "(long *)(param_2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x30))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */\n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */\n    FUN_00276790();\n  }" if (parenthesized_expression "(lVar3 + 1U < 0x1fffffffffffffff)" ( (binary_expression "lVar3 + 1U < 0x1fffffffffffffff" (binary_expression "lVar3 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n    lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */\n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */\n    FUN_00276790();\n  }" { (expression_statement "lVar6 = (lVar3 + 1U) * 4;" (assignment_expression "lVar6 = (lVar3 + 1U) * 4" identifier = (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" ( (binary_expression "lVar3 + 1U" identifier + number_literal) )) * number_literal)) ;) comment (expression_statement "lVar5 = thunk_FUN_00275550(lVar6);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar6)" identifier = (call_expression "thunk_FUN_00275550(lVar6)" identifier (argument_list "(lVar6)" ( identifier )))) ;) (expression_statement "FUN_002f0ff0(local_40,lVar5,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar5,lVar3,0)" identifier (argument_list "(local_40,lVar5,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x40) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar5" (pointer_expression "*(long *)(param_2 + 0x40)" * (cast_expression "(long *)(param_2 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar5 + -4 + lVar6) = 0;" (assignment_expression "*(undefined4 *)(lVar5 + -4 + lVar6) = 0" (pointer_expression "*(undefined4 *)(lVar5 + -4 + lVar6)" * (cast_expression "(undefined4 *)(lVar5 + -4 + lVar6)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + -4 + lVar6)" ( (binary_expression "lVar5 + -4 + lVar6" (binary_expression "lVar5 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" identifier = (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != identifier)) ;) (expression_statement "*(long *)(param_2 + 0x48) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar3" (pointer_expression "*(long *)(param_2 + 0x48)" * (cast_expression "(long *)(param_2 + 0x48)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" else (compound_statement "{\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }" { (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x38))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }" if (parenthesized_expression "(lVar3 + 1U < 0x1fffffffffffffff)" ( (binary_expression "lVar3 + 1U < 0x1fffffffffffffff" (binary_expression "lVar3 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n      lVar6 = (lVar3 + 1U) * 4;\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }" { (expression_statement "lVar6 = (lVar3 + 1U) * 4;" (assignment_expression "lVar6 = (lVar3 + 1U) * 4" identifier = (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" ( (binary_expression "lVar3 + 1U" identifier + number_literal) )) * number_literal)) ;) comment (expression_statement "lVar5 = thunk_FUN_00275550(lVar6);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar6)" identifier = (call_expression "thunk_FUN_00275550(lVar6)" identifier (argument_list "(lVar6)" ( identifier )))) ;) (expression_statement "FUN_002f0ff0(local_40,lVar5,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar5,lVar3,0)" identifier (argument_list "(local_40,lVar5,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x50) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar5" (pointer_expression "*(long *)(param_2 + 0x50)" * (cast_expression "(long *)(param_2 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar5 + -4 + lVar6) = 0;" (assignment_expression "*(undefined4 *)(lVar5 + -4 + lVar6) = 0" (pointer_expression "*(undefined4 *)(lVar5 + -4 + lVar6)" * (cast_expression "(undefined4 *)(lVar5 + -4 + lVar6)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + -4 + lVar6)" ( (binary_expression "lVar5 + -4 + lVar6" (binary_expression "lVar5 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" identifier = (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != identifier)) ;) (expression_statement "*(long *)(param_2 + 0x58) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x58) = lVar3" (pointer_expression "*(long *)(param_2 + 0x58)" * (cast_expression "(long *)(param_2 + 0x58)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" else (compound_statement "{\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }" { (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 100) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 100) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 100)" * (cast_expression "(undefined4 *)(param_2 + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 100)" ( (binary_expression "param_2 + 100" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x68) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x68) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x68)" * (cast_expression "(undefined4 *)(param_2 + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })) comment comment (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" identifier (argument_list "()" ( ))) ;) })) comment comment (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "/* void std::__facet_shims::__moneypunct_fill_cache<wchar_t, true>(std::integral_constant<bool,\n   false>, std::locale::facet const*, std::__moneypunct_cache<wchar_t, true>*) */\n\nvoid std::__facet_shims::__moneypunct_fill_cache<wchar_t,true>(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  ulong uVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  wchar_t *pwVar6;\n  bool bVar7;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))((string *)local_40,param_1);\n  uVar3 = *(ulong *)(local_40[0] + -0x18);\n                    /* try { // try from 002b2a8d to 002b2aa4 has its CatchHandler @ 002b2d5d */\n  pcVar5 = (char *)operator_new__(uVar3 + 1);\n  std::string::copy((string *)local_40,pcVar5,uVar3,0);\n  pcVar5[uVar3] = '\0';\n  *(char **)(param_2 + 0x10) = pcVar5;\n  bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdc38;\n  *(ulong *)(param_2 + 0x18) = uVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }\n  (**(code **)(*param_1 + 0x28))((string *)local_40,param_1);\n  uVar3 = *(ulong *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < uVar3 + 1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */\n    __cxa_throw_bad_array_new_length();\n  }\n                    /* try { // try from 002b2b00 to 002b2b17 has its CatchHandler @ 002b2d67 */\n  pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n  std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n  *(wchar_t **)(param_2 + 0x30) = pwVar6;\n  pwVar6[uVar3] = L'\0';\n  bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n  *(ulong *)(param_2 + 0x38) = uVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }\n  (**(code **)(*param_1 + 0x30))((string *)local_40,param_1);\n  uVar3 = *(ulong *)(local_40[0] + -0x18);\n  if (uVar3 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */\n    pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n    std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n    *(wchar_t **)(param_2 + 0x40) = pwVar6;\n    pwVar6[uVar3] = L'\0';\n    bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n    *(ulong *)(param_2 + 0x48) = uVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n      }\n    }\n    (**(code **)(*param_1 + 0x38))((string *)local_40,param_1);\n    uVar3 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar3 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n      std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar6;\n      pwVar6[uVar3] = L'\0';\n      bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n      *(ulong *)(param_2 + 0x58) = uVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */\n    __cxa_throw_bad_array_new_length();\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d58 to 002b2d5c has its CatchHandler @ 002b2d8d */\n  __cxa_throw_bad_array_new_length();\n}\n\n" comment (declaration "void std::__facet_shims::__moneypunct_fill_cache<wchar_t,true>(long *param_1,long param_2)\n\n{\n  int *piVar1;" primitive_type (ERROR "std::__facet_shims::__moneypunct_fill_cache<" identifier : : identifier : : identifier <) identifier , (ERROR "true>(long" identifier > ( long) (pointer_declarator "*param_1" * identifier) , (ERROR "long param_2)\n\n{\n  int" identifier identifier ) { primitive_type) (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "wchar_t *pwVar6;" type_identifier (pointer_declarator "*pwVar6" * identifier) ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x24) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x24) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x28) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x28) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x28)" * (cast_expression "(undefined4 *)(param_2 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x30)" * (cast_expression "(undefined8 *)(param_2 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x40) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x40)" * (cast_expression "(undefined8 *)(param_2 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x50) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x50) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x50)" * (cast_expression "(undefined8 *)(param_2 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x98)" * (cast_expression "(undefined1 *)(param_2 + 0x98)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))((string *)local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))((string *)local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "((string *)local_40,param_1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "uVar3 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar3 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) comment (expression_statement "pcVar5 = (char *)operator_new__(uVar3 + 1);" (assignment_expression "pcVar5 = (char *)operator_new__(uVar3 + 1)" identifier = (cast_expression "(char *)operator_new__(uVar3 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar3 + 1)" identifier (argument_list "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) ))))) ;) (labeled_statement "std::string::copy((string *)local_40,pcVar5,uVar3,0);" statement_identifier : (ERROR ":" :) (labeled_statement "string::copy((string *)local_40,pcVar5,uVar3,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((string *)local_40,pcVar5,uVar3,0);" (call_expression "copy((string *)local_40,pcVar5,uVar3,0)" identifier (argument_list "((string *)local_40,pcVar5,uVar3,0)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , number_literal ))) ;))) (expression_statement "pcVar5[uVar3] = '\0';" (assignment_expression "pcVar5[uVar3] = '\0'" (subscript_expression "pcVar5[uVar3]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "*(char **)(param_2 + 0x10) = pcVar5;" (assignment_expression "*(char **)(param_2 + 0x10) = pcVar5" (pointer_expression "*(char **)(param_2 + 0x10)" * (cast_expression "(char **)(param_2 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdc38;" (assignment_expression "bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdc38" identifier = (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdc38" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)PTR__S_empty_rep_storage_003bdc38" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(ulong *)(param_2 + 0x18) = uVar3;" (assignment_expression "*(ulong *)(param_2 + 0x18) = uVar3" (pointer_expression "*(ulong *)(param_2 + 0x18)" * (cast_expression "(ulong *)(param_2 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" { (labeled_statement "std::string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "string::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_destroy((allocator *)(local_40[0] + -0x18));" (call_expression "_M_destroy((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) })) (expression_statement "(**(code **)(*param_1 + 0x28))((string *)local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))((string *)local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "((string *)local_40,param_1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "uVar3 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar3 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (0x1ffffffffffffffe < uVar3 + 1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */\n    __cxa_throw_bad_array_new_length();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < uVar3 + 1)" ( (binary_expression "0x1ffffffffffffffe < uVar3 + 1" number_literal < (binary_expression "uVar3 + 1" identifier + number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */\n    __cxa_throw_bad_array_new_length();\n  }" { comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);" (assignment_expression "pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4)" identifier = (cast_expression "(wchar_t *)operator_new__((uVar3 + 1) * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((uVar3 + 1) * 4)" identifier (argument_list "((uVar3 + 1) * 4)" ( (binary_expression "(uVar3 + 1) * 4" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal) ))))) ;) (labeled_statement "std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)local_40,pwVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)local_40,pwVar6,uVar3,0);" (call_expression "copy((wstring *)local_40,pwVar6,uVar3,0)" identifier (argument_list "((wstring *)local_40,pwVar6,uVar3,0)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , number_literal ))) ;))) (expression_statement "*(wchar_t **)(param_2 + 0x30) = pwVar6;" (assignment_expression "*(wchar_t **)(param_2 + 0x30) = pwVar6" (pointer_expression "*(wchar_t **)(param_2 + 0x30)" * (cast_expression "(wchar_t **)(param_2 + 0x30)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "pwVar6[uVar3] = L'\0';" (assignment_expression "pwVar6[uVar3] = L'\0'" (subscript_expression "pwVar6[uVar3]" identifier [ identifier ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;" (assignment_expression "bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8" identifier = (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)PTR__S_empty_rep_storage_003bdcd8" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(ulong *)(param_2 + 0x38) = uVar3;" (assignment_expression "*(ulong *)(param_2 + 0x38) = uVar3" (pointer_expression "*(ulong *)(param_2 + 0x38)" * (cast_expression "(ulong *)(param_2 + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n    }" { (labeled_statement "std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_destroy((allocator *)(local_40[0] + -0x18));" (call_expression "_M_destroy((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) })) (expression_statement "(**(code **)(*param_1 + 0x30))((string *)local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))((string *)local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "((string *)local_40,param_1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "uVar3 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar3 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (uVar3 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */\n    pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n    std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n    *(wchar_t **)(param_2 + 0x40) = pwVar6;\n    pwVar6[uVar3] = L'\0';\n    bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n    *(ulong *)(param_2 + 0x48) = uVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n      }\n    }\n    (**(code **)(*param_1 + 0x38))((string *)local_40,param_1);\n    uVar3 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar3 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n      std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar6;\n      pwVar6[uVar3] = L'\0';\n      bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n      *(ulong *)(param_2 + 0x58) = uVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */\n    __cxa_throw_bad_array_new_length();\n  }" if (parenthesized_expression "(uVar3 + 1 < 0x1fffffffffffffff)" ( (binary_expression "uVar3 + 1 < 0x1fffffffffffffff" (binary_expression "uVar3 + 1" identifier + number_literal) < number_literal) )) (compound_statement "{\n                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */\n    pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n    std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n    *(wchar_t **)(param_2 + 0x40) = pwVar6;\n    pwVar6[uVar3] = L'\0';\n    bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n    *(ulong *)(param_2 + 0x48) = uVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n      }\n    }\n    (**(code **)(*param_1 + 0x38))((string *)local_40,param_1);\n    uVar3 = *(ulong *)(local_40[0] + -0x18);\n    if (uVar3 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n      std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar6;\n      pwVar6[uVar3] = L'\0';\n      bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n      *(ulong *)(param_2 + 0x58) = uVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */\n    __cxa_throw_bad_array_new_length();\n  }" { comment (expression_statement "pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);" (assignment_expression "pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4)" identifier = (cast_expression "(wchar_t *)operator_new__((uVar3 + 1) * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((uVar3 + 1) * 4)" identifier (argument_list "((uVar3 + 1) * 4)" ( (binary_expression "(uVar3 + 1) * 4" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal) ))))) ;) (labeled_statement "std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)local_40,pwVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)local_40,pwVar6,uVar3,0);" (call_expression "copy((wstring *)local_40,pwVar6,uVar3,0)" identifier (argument_list "((wstring *)local_40,pwVar6,uVar3,0)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , number_literal ))) ;))) (expression_statement "*(wchar_t **)(param_2 + 0x40) = pwVar6;" (assignment_expression "*(wchar_t **)(param_2 + 0x40) = pwVar6" (pointer_expression "*(wchar_t **)(param_2 + 0x40)" * (cast_expression "(wchar_t **)(param_2 + 0x40)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "pwVar6[uVar3] = L'\0';" (assignment_expression "pwVar6[uVar3] = L'\0'" (subscript_expression "pwVar6[uVar3]" identifier [ identifier ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;" (assignment_expression "bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8" identifier = (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)PTR__S_empty_rep_storage_003bdcd8" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(ulong *)(param_2 + 0x48) = uVar3;" (assignment_expression "*(ulong *)(param_2 + 0x48) = uVar3" (pointer_expression "*(ulong *)(param_2 + 0x48)" * (cast_expression "(ulong *)(param_2 + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n      }\n    }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" else (compound_statement "{\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n        std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n      }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n        std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n      }" { (labeled_statement "std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_destroy((allocator *)(local_40[0] + -0x18));" (call_expression "_M_destroy((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) })) (expression_statement "(**(code **)(*param_1 + 0x38))((string *)local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))((string *)local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "((string *)local_40,param_1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;) (expression_statement "uVar3 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar3 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (uVar3 + 1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n      std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar6;\n      pwVar6[uVar3] = L'\0';\n      bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n      *(ulong *)(param_2 + 0x58) = uVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }" if (parenthesized_expression "(uVar3 + 1 < 0x1fffffffffffffff)" ( (binary_expression "uVar3 + 1 < 0x1fffffffffffffff" (binary_expression "uVar3 + 1" identifier + number_literal) < number_literal) )) (compound_statement "{\n                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */\n      pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);\n      std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);\n      *(wchar_t **)(param_2 + 0x50) = pwVar6;\n      pwVar6[uVar3] = L'\0';\n      bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;\n      *(ulong *)(param_2 + 0x58) = uVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }" { comment (expression_statement "pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4);" (assignment_expression "pwVar6 = (wchar_t *)operator_new__((uVar3 + 1) * 4)" identifier = (cast_expression "(wchar_t *)operator_new__((uVar3 + 1) * 4)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__((uVar3 + 1) * 4)" identifier (argument_list "((uVar3 + 1) * 4)" ( (binary_expression "(uVar3 + 1) * 4" (parenthesized_expression "(uVar3 + 1)" ( (binary_expression "uVar3 + 1" identifier + number_literal) )) * number_literal) ))))) ;) (labeled_statement "std::wstring::copy((wstring *)local_40,pwVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)local_40,pwVar6,uVar3,0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)local_40,pwVar6,uVar3,0);" (call_expression "copy((wstring *)local_40,pwVar6,uVar3,0)" identifier (argument_list "((wstring *)local_40,pwVar6,uVar3,0)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier , number_literal ))) ;))) (expression_statement "*(wchar_t **)(param_2 + 0x50) = pwVar6;" (assignment_expression "*(wchar_t **)(param_2 + 0x50) = pwVar6" (pointer_expression "*(wchar_t **)(param_2 + 0x50)" * (cast_expression "(wchar_t **)(param_2 + 0x50)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "pwVar6[uVar3] = L'\0';" (assignment_expression "pwVar6[uVar3] = L'\0'" (subscript_expression "pwVar6[uVar3]" identifier [ identifier ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8;" (assignment_expression "bVar7 = (allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8" identifier = (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_003bdcd8" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)PTR__S_empty_rep_storage_003bdcd8" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(ulong *)(param_2 + 0x58) = uVar3;" (assignment_expression "*(ulong *)(param_2 + 0x58) = uVar3" (pointer_expression "*(ulong *)(param_2 + 0x58)" * (cast_expression "(ulong *)(param_2 + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }\n      }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }\n      }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" else (compound_statement "{\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n          std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));\n        }" { (labeled_statement "std::wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_destroy((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_destroy((allocator *)(local_40[0] + -0x18));" (call_expression "_M_destroy((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) })) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 100) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 100) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 100)" * (cast_expression "(undefined4 *)(param_2 + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 100)" ( (binary_expression "param_2 + 100" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x68) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x68) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x68)" * (cast_expression "(undefined4 *)(param_2 + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })) comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) })) comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) (ERROR "}" }))
(translation_unit "void FUN_002b2a10(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined4 uVar4;\n  long lVar5;\n  long lVar6;\n  bool bVar7;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar5 = thunk_FUN_00275550(lVar3 + 1);\n  FUN_002a8e60(local_40,lVar5,lVar3,0);\n  *(undefined1 *)(lVar5 + lVar3) = 0;\n  *(long *)(param_2 + 0x10) = lVar5;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;\n  *(long *)(param_2 + 0x18) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    \n                    \n    FUN_00276790();\n  }\n  lVar5 = (lVar3 + 1U) * 4;\n                    \n  lVar6 = thunk_FUN_00275550(lVar5);\n  FUN_002f0ff0(local_40,lVar6,lVar3,0);\n  *(long *)(param_2 + 0x30) = lVar6;\n  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n  *(long *)(param_2 + 0x38) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }\n                    \n                    \n  FUN_00276790();\n}\n\n" (function_definition "void FUN_002b2a10(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined4 uVar4;\n  long lVar5;\n  long lVar6;\n  bool bVar7;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar5 = thunk_FUN_00275550(lVar3 + 1);\n  FUN_002a8e60(local_40,lVar5,lVar3,0);\n  *(undefined1 *)(lVar5 + lVar3) = 0;\n  *(long *)(param_2 + 0x10) = lVar5;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;\n  *(long *)(param_2 + 0x18) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    \n                    \n    FUN_00276790();\n  }\n  lVar5 = (lVar3 + 1U) * 4;\n                    \n  lVar6 = thunk_FUN_00275550(lVar5);\n  FUN_002f0ff0(local_40,lVar6,lVar3,0);\n  *(long *)(param_2 + 0x30) = lVar6;\n  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n  *(long *)(param_2 + 0x38) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }\n                    \n                    \n  FUN_00276790();\n}" primitive_type (function_declarator "FUN_002b2a10(long *param_1,long param_2)" identifier (parameter_list "(long *param_1,long param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined4 uVar4;\n  long lVar5;\n  long lVar6;\n  bool bVar7;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar5 = thunk_FUN_00275550(lVar3 + 1);\n  FUN_002a8e60(local_40,lVar5,lVar3,0);\n  *(undefined1 *)(lVar5 + lVar3) = 0;\n  *(long *)(param_2 + 0x10) = lVar5;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;\n  *(long *)(param_2 + 0x18) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    \n                    \n    FUN_00276790();\n  }\n  lVar5 = (lVar3 + 1U) * 4;\n                    \n  lVar6 = thunk_FUN_00275550(lVar5);\n  FUN_002f0ff0(local_40,lVar6,lVar3,0);\n  *(long *)(param_2 + 0x30) = lVar6;\n  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n  *(long *)(param_2 + 0x38) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }\n                    \n                    \n  FUN_00276790();\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "undefined1 local_41;" type_identifier identifier ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x10))()" identifier = (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" ( (pointer_expression "**(code **)(*param_1 + 0x10)" * (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x24) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x24) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x24)" * (cast_expression "(undefined4 *)(param_2 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x24)" ( (binary_expression "param_2 + 0x24" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x18))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" ( (pointer_expression "**(code **)(*param_1 + 0x18)" * (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x28) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x28) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x28)" * (cast_expression "(undefined4 *)(param_2 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x28)" ( (binary_expression "param_2 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x40))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" ( (pointer_expression "**(code **)(*param_1 + 0x40)" * (pointer_expression "*(code **)(*param_1 + 0x40)" * (cast_expression "(code **)(*param_1 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x40)" ( (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" * (cast_expression "(undefined8 *)(param_2 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" * (cast_expression "(undefined4 *)(param_2 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x60)" ( (binary_expression "param_2 + 0x60" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x30)" * (cast_expression "(undefined8 *)(param_2 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x40) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x40)" * (cast_expression "(undefined8 *)(param_2 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(param_2 + 0x50) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x50) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x50)" * (cast_expression "(undefined8 *)(param_2 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)(param_2 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x98)" * (cast_expression "(undefined1 *)(param_2 + 0x98)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x98)" ( (binary_expression "param_2 + 0x98" identifier + number_literal) )))) = number_literal) ;) (expression_statement "(**(code **)(*param_1 + 0x20))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" ( (pointer_expression "**(code **)(*param_1 + 0x20)" * (pointer_expression "*(code **)(*param_1 + 0x20)" * (cast_expression "(code **)(*param_1 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x20)" ( (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "lVar5 = thunk_FUN_00275550(lVar3 + 1);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar3 + 1)" identifier = (call_expression "thunk_FUN_00275550(lVar3 + 1)" identifier (argument_list "(lVar3 + 1)" ( (binary_expression "lVar3 + 1" identifier + number_literal) )))) ;) (expression_statement "FUN_002a8e60(local_40,lVar5,lVar3,0);" (call_expression "FUN_002a8e60(local_40,lVar5,lVar3,0)" identifier (argument_list "(local_40,lVar5,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(undefined1 *)(lVar5 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar5 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar5 + lVar3)" * (cast_expression "(undefined1 *)(lVar5 + lVar3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + lVar3)" ( (binary_expression "lVar5 + lVar3" identifier + identifier) )))) = number_literal) ;) (expression_statement "*(long *)(param_2 + 0x10) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar5" (pointer_expression "*(long *)(param_2 + 0x10)" * (cast_expression "(long *)(param_2 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38" identifier = (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38" (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != identifier)) ;) (expression_statement "*(long *)(param_2 + 0x18) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar3" (pointer_expression "*(long *)(param_2 + 0x18)" * (cast_expression "(long *)(param_2 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x18)" ( (binary_expression "param_2 + 0x18" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x28))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" ( (pointer_expression "**(code **)(*param_1 + 0x28)" * (pointer_expression "*(code **)(*param_1 + 0x28)" * (cast_expression "(code **)(*param_1 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x28)" ( (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    \n                    \n    FUN_00276790();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < lVar3 + 1U)" ( (binary_expression "0x1ffffffffffffffe < lVar3 + 1U" number_literal < (binary_expression "lVar3 + 1U" identifier + number_literal)) )) (compound_statement "{\n                    \n                    \n    FUN_00276790();\n  }" { (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "lVar5 = (lVar3 + 1U) * 4;" (assignment_expression "lVar5 = (lVar3 + 1U) * 4" identifier = (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" ( (binary_expression "lVar3 + 1U" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar6 = thunk_FUN_00275550(lVar5);" (assignment_expression "lVar6 = thunk_FUN_00275550(lVar5)" identifier = (call_expression "thunk_FUN_00275550(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) (expression_statement "FUN_002f0ff0(local_40,lVar6,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar6,lVar3,0)" identifier (argument_list "(local_40,lVar6,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x30) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar6" (pointer_expression "*(long *)(param_2 + 0x30)" * (cast_expression "(long *)(param_2 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar6 + -4 + lVar5) = 0;" (assignment_expression "*(undefined4 *)(lVar6 + -4 + lVar5) = 0" (pointer_expression "*(undefined4 *)(lVar6 + -4 + lVar5)" * (cast_expression "(undefined4 *)(lVar6 + -4 + lVar5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + -4 + lVar5)" ( (binary_expression "lVar6 + -4 + lVar5" (binary_expression "lVar6 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" identifier = (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != identifier)) ;) (expression_statement "*(long *)(param_2 + 0x38) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar3" (pointer_expression "*(long *)(param_2 + 0x38)" * (cast_expression "(long *)(param_2 + 0x38)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x38)" ( (binary_expression "param_2 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" else (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" { (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x30))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" ( (pointer_expression "**(code **)(*param_1 + 0x30)" * (pointer_expression "*(code **)(*param_1 + 0x30)" * (cast_expression "(code **)(*param_1 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x30)" ( (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }" if (parenthesized_expression "(lVar3 + 1U < 0x1fffffffffffffff)" ( (binary_expression "lVar3 + 1U < 0x1fffffffffffffff" (binary_expression "lVar3 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }" { (expression_statement "lVar6 = (lVar3 + 1U) * 4;" (assignment_expression "lVar6 = (lVar3 + 1U) * 4" identifier = (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" ( (binary_expression "lVar3 + 1U" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar5 = thunk_FUN_00275550(lVar6);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar6)" identifier = (call_expression "thunk_FUN_00275550(lVar6)" identifier (argument_list "(lVar6)" ( identifier )))) ;) (expression_statement "FUN_002f0ff0(local_40,lVar5,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar5,lVar3,0)" identifier (argument_list "(local_40,lVar5,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x40) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar5" (pointer_expression "*(long *)(param_2 + 0x40)" * (cast_expression "(long *)(param_2 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x40)" ( (binary_expression "param_2 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar5 + -4 + lVar6) = 0;" (assignment_expression "*(undefined4 *)(lVar5 + -4 + lVar6) = 0" (pointer_expression "*(undefined4 *)(lVar5 + -4 + lVar6)" * (cast_expression "(undefined4 *)(lVar5 + -4 + lVar6)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + -4 + lVar6)" ( (binary_expression "lVar5 + -4 + lVar6" (binary_expression "lVar5 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" identifier = (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != identifier)) ;) (expression_statement "*(long *)(param_2 + 0x48) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar3" (pointer_expression "*(long *)(param_2 + 0x48)" * (cast_expression "(long *)(param_2 + 0x48)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x48)" ( (binary_expression "param_2 + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" else (compound_statement "{\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }" { (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "(**(code **)(*param_1 + 0x38))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" ( (pointer_expression "**(code **)(*param_1 + 0x38)" * (pointer_expression "*(code **)(*param_1 + 0x38)" * (cast_expression "(code **)(*param_1 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x38)" ( (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(local_40,param_1)" ( identifier , identifier ))) ;) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(long *)(local_40[0] + -0x18)" * (cast_expression "(long *)(local_40[0] + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (if_statement "if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }" if (parenthesized_expression "(lVar3 + 1U < 0x1fffffffffffffff)" ( (binary_expression "lVar3 + 1U < 0x1fffffffffffffff" (binary_expression "lVar3 + 1U" identifier + number_literal) < number_literal) )) (compound_statement "{\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }" { (expression_statement "lVar6 = (lVar3 + 1U) * 4;" (assignment_expression "lVar6 = (lVar3 + 1U) * 4" identifier = (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" ( (binary_expression "lVar3 + 1U" identifier + number_literal) )) * number_literal)) ;) (expression_statement "lVar5 = thunk_FUN_00275550(lVar6);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar6)" identifier = (call_expression "thunk_FUN_00275550(lVar6)" identifier (argument_list "(lVar6)" ( identifier )))) ;) (expression_statement "FUN_002f0ff0(local_40,lVar5,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar5,lVar3,0)" identifier (argument_list "(local_40,lVar5,lVar3,0)" ( identifier , identifier , identifier , number_literal ))) ;) (expression_statement "*(long *)(param_2 + 0x50) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar5" (pointer_expression "*(long *)(param_2 + 0x50)" * (cast_expression "(long *)(param_2 + 0x50)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x50)" ( (binary_expression "param_2 + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(lVar5 + -4 + lVar6) = 0;" (assignment_expression "*(undefined4 *)(lVar5 + -4 + lVar6) = 0" (pointer_expression "*(undefined4 *)(lVar5 + -4 + lVar6)" * (cast_expression "(undefined4 *)(lVar5 + -4 + lVar6)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + -4 + lVar6)" ( (binary_expression "lVar5 + -4 + lVar6" (binary_expression "lVar5 + -4" identifier + number_literal) + identifier) )))) = number_literal) ;) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" identifier = (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != identifier)) ;) (expression_statement "*(long *)(param_2 + 0x58) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x58) = lVar3" (pointer_expression "*(long *)(param_2 + 0x58)" * (cast_expression "(long *)(param_2 + 0x58)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x58)" ( (binary_expression "param_2 + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }" if (parenthesized_expression "(bVar7)" ( identifier )) (compound_statement "{\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }" { (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" if (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" ( (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" identifier == (cast_expression "(undefined *)0x0" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }" { (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" identifier = (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" * (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) = (binary_expression "iVar2 + -1" identifier + number_literal)) ;) }) (else_clause "else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" else (compound_statement "{\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" { (expression_statement "LOCK();" (call_expression "LOCK()" identifier (argument_list "()" ( ))) ;) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" identifier = (cast_expression "(int *)(local_40[0] + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -8)" ( (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) )))) ;) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" * identifier) = (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" * identifier) + number_literal)) ;) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" identifier (argument_list "()" ( ))) ;) }))) (if_statement "if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }" if (parenthesized_expression "(iVar2 < 1)" ( (binary_expression "iVar2 < 1" identifier < number_literal) )) (compound_statement "{\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }" { (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" identifier (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" ( (cast_expression "(undefined *)(local_40[0] + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_41" & identifier) ))) ;) })) })) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x48))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" ( (pointer_expression "**(code **)(*param_1 + 0x48)" * (pointer_expression "*(code **)(*param_1 + 0x48)" * (cast_expression "(code **)(*param_1 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x48)" ( (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 100) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 100) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 100)" * (cast_expression "(undefined4 *)(param_2 + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 100)" ( (binary_expression "param_2 + 100" identifier + number_literal) )))) = identifier) ;) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x50))(param_1)" identifier = (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" ( (pointer_expression "**(code **)(*param_1 + 0x50)" * (pointer_expression "*(code **)(*param_1 + 0x50)" * (cast_expression "(code **)(*param_1 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x50)" ( (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" * identifier) + number_literal) ))))) )) (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(param_2 + 0x68) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x68) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x68)" * (cast_expression "(undefined4 *)(param_2 + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x68)" ( (binary_expression "param_2 + 0x68" identifier + number_literal) )))) = identifier) ;) (return_statement "return;" return ;) })) (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void FUN_002b2a10(long *param_1,long param_2)\n\n{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined4 uVar4;\n  long lVar5;\n  long lVar6;\n  bool bVar7;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar5 = thunk_FUN_00275550(lVar3 + 1);\n  FUN_002a8e60(local_40,lVar5,lVar3,0);\n  *(undefined1 *)(lVar5 + lVar3) = 0;\n  *(long *)(param_2 + 0x10) = lVar5;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;\n  *(long *)(param_2 + 0x18) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    \n                    \n    FUN_00276790();\n  }\n  lVar5 = (lVar3 + 1U) * 4;\n                    \n  lVar6 = thunk_FUN_00275550(lVar5);\n  FUN_002f0ff0(local_40,lVar6,lVar3,0);\n  *(long *)(param_2 + 0x30) = lVar6;\n  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n  *(long *)(param_2 + 0x38) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }\n                    \n                    \n  FUN_00276790();\n}" (primitive_type "void") (function_declarator "FUN_002b2a10(long *param_1,long param_2)" (identifier "FUN_002b2a10") (parameter_list "(long *param_1,long param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) () ")"))) (compound_statement "{\n  int *piVar1;\n  int iVar2;\n  long lVar3;\n  undefined4 uVar4;\n  long lVar5;\n  long lVar6;\n  bool bVar7;\n  undefined1 local_41;\n  long local_40 [2];\n  \n  uVar4 = (**(code **)(*param_1 + 0x10))();\n  *(undefined4 *)(param_2 + 0x24) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);\n  *(undefined4 *)(param_2 + 0x28) = uVar4;\n  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);\n  *(undefined8 *)(param_2 + 0x10) = 0;\n  *(undefined4 *)(param_2 + 0x60) = uVar4;\n  *(undefined8 *)(param_2 + 0x30) = 0;\n  *(undefined8 *)(param_2 + 0x40) = 0;\n  *(undefined8 *)(param_2 + 0x50) = 0;\n  *(undefined1 *)(param_2 + 0x98) = 1;\n  (**(code **)(*param_1 + 0x20))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n                    \n  lVar5 = thunk_FUN_00275550(lVar3 + 1);\n  FUN_002a8e60(local_40,lVar5,lVar3,0);\n  *(undefined1 *)(lVar5 + lVar3) = 0;\n  *(long *)(param_2 + 0x10) = lVar5;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;\n  *(long *)(param_2 + 0x18) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x28))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    \n                    \n    FUN_00276790();\n  }\n  lVar5 = (lVar3 + 1U) * 4;\n                    \n  lVar6 = thunk_FUN_00275550(lVar5);\n  FUN_002f0ff0(local_40,lVar6,lVar3,0);\n  *(long *)(param_2 + 0x30) = lVar6;\n  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;\n  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n  *(long *)(param_2 + 0x38) = lVar3;\n  if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }\n  (**(code **)(*param_1 + 0x30))(local_40,param_1);\n  lVar3 = *(long *)(local_40[0] + -0x18);\n  if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }\n                    \n                    \n  FUN_00276790();\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "bool bVar7;" (primitive_type "bool") (identifier "bVar7") (; ";")) (declaration "undefined1 local_41;" (type_identifier "undefined1") (identifier "local_41") (; ";")) (declaration "long local_40 [2];" (sized_type_specifier "long" (long "long")) (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x10))();" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x10))()" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_1 + 0x10))()" (parenthesized_expression "(**(code **)(*param_1 + 0x10))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x10)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x10)" (* "*") (cast_expression "(code **)(*param_1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x24) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x24) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x24)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x24)" (( "(") (binary_expression "param_2 + 0x24" (identifier "param_2") (+ "+") (number_literal "0x24")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x18))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x18))(param_1)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_1 + 0x18))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x18))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x18)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x18)" (* "*") (cast_expression "(code **)(*param_1 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x18)" (( "(") (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x28) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x28) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x28)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x28)" (( "(") (binary_expression "param_2 + 0x28" (identifier "param_2") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x40))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x40))(param_1)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_1 + 0x40))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x40))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x40)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x40)" (* "*") (cast_expression "(code **)(*param_1 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x40)" (( "(") (binary_expression "*param_1 + 0x40" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x60) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x60) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x60)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x60)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x60)" (( "(") (binary_expression "param_2 + 0x60" (identifier "param_2") (+ "+") (number_literal "0x60")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x30) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x30) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x30)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x40) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x40) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x40)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x40)" (( "(") (binary_expression "param_2 + 0x40" (identifier "param_2") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined8 *)(param_2 + 0x50) = 0;" (assignment_expression "*(undefined8 *)(param_2 + 0x50) = 0" (pointer_expression "*(undefined8 *)(param_2 + 0x50)" (* "*") (cast_expression "(undefined8 *)(param_2 + 0x50)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x50)" (( "(") (binary_expression "param_2 + 0x50" (identifier "param_2") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)(param_2 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_2 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_2 + 0x98)" (* "*") (cast_expression "(undefined1 *)(param_2 + 0x98)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x98)" (( "(") (binary_expression "param_2 + 0x98" (identifier "param_2") (+ "+") (number_literal "0x98")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "(**(code **)(*param_1 + 0x20))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x20))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x20))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x20)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x20)" (* "*") (cast_expression "(code **)(*param_1 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x20)" (( "(") (binary_expression "*param_1 + 0x20" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(local_40,param_1)" (( "(") (identifier "local_40") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(local_40[0] + -0x18)" (* "*") (cast_expression "(long *)(local_40[0] + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "lVar5 = thunk_FUN_00275550(lVar3 + 1);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar3 + 1)" (identifier "lVar5") (= "=") (call_expression "thunk_FUN_00275550(lVar3 + 1)" (identifier "thunk_FUN_00275550") (argument_list "(lVar3 + 1)" (( "(") (binary_expression "lVar3 + 1" (identifier "lVar3") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "FUN_002a8e60(local_40,lVar5,lVar3,0);" (call_expression "FUN_002a8e60(local_40,lVar5,lVar3,0)" (identifier "FUN_002a8e60") (argument_list "(local_40,lVar5,lVar3,0)" (( "(") (identifier "local_40") (, ",") (identifier "lVar5") (, ",") (identifier "lVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(undefined1 *)(lVar5 + lVar3) = 0;" (assignment_expression "*(undefined1 *)(lVar5 + lVar3) = 0" (pointer_expression "*(undefined1 *)(lVar5 + lVar3)" (* "*") (cast_expression "(undefined1 *)(lVar5 + lVar3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + lVar3)" (( "(") (binary_expression "lVar5 + lVar3" (identifier "lVar5") (+ "+") (identifier "lVar3")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(long *)(param_2 + 0x10) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x10) = lVar5" (pointer_expression "*(long *)(param_2 + 0x10)" (* "*") (cast_expression "(long *)(param_2 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38" (identifier "bVar7") (= "=") (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38" (cast_expression "(undefined *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (identifier "PTR_DAT_003bdc38"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x18) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x18) = lVar3" (pointer_expression "*(long *)(param_2 + 0x18)" (* "*") (cast_expression "(long *)(param_2 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x18)" (( "(") (binary_expression "param_2 + 0x18" (identifier "param_2") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" (if "if") (parenthesized_expression "(bVar7)" (( "(") (identifier "bVar7") () ")")) (compound_statement "{\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" ({ "{") (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_003bdee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" ({ "{") (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (else "else") (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" (identifier "iVar2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" ({ "{") (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" (identifier "thunk_FUN_00276d20") (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" (( "(") (cast_expression "(undefined *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_41" (& "&") (identifier "local_41")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x28))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x28))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x28))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x28)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x28)" (* "*") (cast_expression "(code **)(*param_1 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x28)" (( "(") (binary_expression "*param_1 + 0x28" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(local_40,param_1)" (( "(") (identifier "local_40") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(local_40[0] + -0x18)" (* "*") (cast_expression "(long *)(local_40[0] + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (if_statement "if (0x1ffffffffffffffe < lVar3 + 1U) {\n                    \n                    \n    FUN_00276790();\n  }" (if "if") (parenthesized_expression "(0x1ffffffffffffffe < lVar3 + 1U)" (( "(") (binary_expression "0x1ffffffffffffffe < lVar3 + 1U" (number_literal "0x1ffffffffffffffe") (< "<") (binary_expression "lVar3 + 1U" (identifier "lVar3") (+ "+") (number_literal "1U"))) () ")")) (compound_statement "{\n                    \n                    \n    FUN_00276790();\n  }" ({ "{") (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" (identifier "FUN_00276790") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "lVar5 = (lVar3 + 1U) * 4;" (assignment_expression "lVar5 = (lVar3 + 1U) * 4" (identifier "lVar5") (= "=") (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" (( "(") (binary_expression "lVar3 + 1U" (identifier "lVar3") (+ "+") (number_literal "1U")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar6 = thunk_FUN_00275550(lVar5);" (assignment_expression "lVar6 = thunk_FUN_00275550(lVar5)" (identifier "lVar6") (= "=") (call_expression "thunk_FUN_00275550(lVar5)" (identifier "thunk_FUN_00275550") (argument_list "(lVar5)" (( "(") (identifier "lVar5") () ")")))) (; ";")) (expression_statement "FUN_002f0ff0(local_40,lVar6,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar6,lVar3,0)" (identifier "FUN_002f0ff0") (argument_list "(local_40,lVar6,lVar3,0)" (( "(") (identifier "local_40") (, ",") (identifier "lVar6") (, ",") (identifier "lVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x30) = lVar6;" (assignment_expression "*(long *)(param_2 + 0x30) = lVar6" (pointer_expression "*(long *)(param_2 + 0x30)" (* "*") (cast_expression "(long *)(param_2 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "lVar6")) (; ";")) (expression_statement "*(undefined4 *)(lVar6 + -4 + lVar5) = 0;" (assignment_expression "*(undefined4 *)(lVar6 + -4 + lVar5) = 0" (pointer_expression "*(undefined4 *)(lVar6 + -4 + lVar5)" (* "*") (cast_expression "(undefined4 *)(lVar6 + -4 + lVar5)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + -4 + lVar5)" (( "(") (binary_expression "lVar6 + -4 + lVar5" (binary_expression "lVar6 + -4" (identifier "lVar6") (+ "+") (number_literal "-4")) (+ "+") (identifier "lVar5")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (identifier "bVar7") (= "=") (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (identifier "PTR_DAT_003bdcd8"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x38) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x38) = lVar3" (pointer_expression "*(long *)(param_2 + 0x38)" (* "*") (cast_expression "(long *)(param_2 + 0x38)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x38)" (( "(") (binary_expression "param_2 + 0x38" (identifier "param_2") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if (bVar7) {\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" (if "if") (parenthesized_expression "(bVar7)" (( "(") (identifier "bVar7") () ")")) (compound_statement "{\n    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }\n    if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }\n  }" ({ "{") (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }\n    else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_003bdee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      iVar2 = *(int *)(local_40[0] + -8);\n      *(int *)(local_40[0] + -8) = iVar2 + -1;\n    }" ({ "{") (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" (else "else") (compound_statement "{\n      LOCK();\n      piVar1 = (int *)(local_40[0] + -8);\n      iVar2 = *piVar1;\n      *piVar1 = *piVar1 + -1;\n      UNLOCK();\n    }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" (identifier "iVar2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n    }" ({ "{") (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" (identifier "thunk_FUN_00276d20") (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" (( "(") (cast_expression "(undefined *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_41" (& "&") (identifier "local_41")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x30))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x30))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x30))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x30)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x30)" (* "*") (cast_expression "(code **)(*param_1 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x30)" (( "(") (binary_expression "*param_1 + 0x30" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x30")) () ")"))))) () ")")) (argument_list "(local_40,param_1)" (( "(") (identifier "local_40") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(local_40[0] + -0x18)" (* "*") (cast_expression "(long *)(local_40[0] + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (if_statement "if (lVar3 + 1U < 0x1fffffffffffffff) {\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }" (if "if") (parenthesized_expression "(lVar3 + 1U < 0x1fffffffffffffff)" (( "(") (binary_expression "lVar3 + 1U < 0x1fffffffffffffff" (binary_expression "lVar3 + 1U" (identifier "lVar3") (+ "+") (number_literal "1U")) (< "<") (number_literal "0x1fffffffffffffff")) () ")")) (compound_statement "{\n    lVar6 = (lVar3 + 1U) * 4;\n                    \n    lVar5 = thunk_FUN_00275550(lVar6);\n    FUN_002f0ff0(local_40,lVar5,lVar3,0);\n    *(long *)(param_2 + 0x40) = lVar5;\n    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n    *(long *)(param_2 + 0x48) = lVar3;\n    if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }\n    (**(code **)(*param_1 + 0x38))(local_40,param_1);\n    lVar3 = *(long *)(local_40[0] + -0x18);\n    if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }\n                    \n                    \n    FUN_00276790();\n  }" ({ "{") (expression_statement "lVar6 = (lVar3 + 1U) * 4;" (assignment_expression "lVar6 = (lVar3 + 1U) * 4" (identifier "lVar6") (= "=") (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" (( "(") (binary_expression "lVar3 + 1U" (identifier "lVar3") (+ "+") (number_literal "1U")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar5 = thunk_FUN_00275550(lVar6);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar6)" (identifier "lVar5") (= "=") (call_expression "thunk_FUN_00275550(lVar6)" (identifier "thunk_FUN_00275550") (argument_list "(lVar6)" (( "(") (identifier "lVar6") () ")")))) (; ";")) (expression_statement "FUN_002f0ff0(local_40,lVar5,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar5,lVar3,0)" (identifier "FUN_002f0ff0") (argument_list "(local_40,lVar5,lVar3,0)" (( "(") (identifier "local_40") (, ",") (identifier "lVar5") (, ",") (identifier "lVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x40) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x40) = lVar5" (pointer_expression "*(long *)(param_2 + 0x40)" (* "*") (cast_expression "(long *)(param_2 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x40)" (( "(") (binary_expression "param_2 + 0x40" (identifier "param_2") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "*(undefined4 *)(lVar5 + -4 + lVar6) = 0;" (assignment_expression "*(undefined4 *)(lVar5 + -4 + lVar6) = 0" (pointer_expression "*(undefined4 *)(lVar5 + -4 + lVar6)" (* "*") (cast_expression "(undefined4 *)(lVar5 + -4 + lVar6)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + -4 + lVar6)" (( "(") (binary_expression "lVar5 + -4 + lVar6" (binary_expression "lVar5 + -4" (identifier "lVar5") (+ "+") (number_literal "-4")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (identifier "bVar7") (= "=") (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (identifier "PTR_DAT_003bdcd8"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x48) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x48) = lVar3" (pointer_expression "*(long *)(param_2 + 0x48)" (* "*") (cast_expression "(long *)(param_2 + 0x48)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x48)" (( "(") (binary_expression "param_2 + 0x48" (identifier "param_2") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if (bVar7) {\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }" (if "if") (parenthesized_expression "(bVar7)" (( "(") (identifier "bVar7") () ")")) (compound_statement "{\n      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }\n      if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }\n    }" ({ "{") (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }\n      else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_003bdee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        iVar2 = *(int *)(local_40[0] + -8);\n        *(int *)(local_40[0] + -8) = iVar2 + -1;\n      }" ({ "{") (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" (else "else") (compound_statement "{\n        LOCK();\n        piVar1 = (int *)(local_40[0] + -8);\n        iVar2 = *piVar1;\n        *piVar1 = *piVar1 + -1;\n        UNLOCK();\n      }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" (identifier "iVar2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n      }" ({ "{") (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" (identifier "thunk_FUN_00276d20") (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" (( "(") (cast_expression "(undefined *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_41" (& "&") (identifier "local_41")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(**(code **)(*param_1 + 0x38))(local_40,param_1);" (call_expression "(**(code **)(*param_1 + 0x38))(local_40,param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x38))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x38)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x38)" (* "*") (cast_expression "(code **)(*param_1 + 0x38)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x38)" (( "(") (binary_expression "*param_1 + 0x38" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x38")) () ")"))))) () ")")) (argument_list "(local_40,param_1)" (( "(") (identifier "local_40") (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "lVar3 = *(long *)(local_40[0] + -0x18);" (assignment_expression "lVar3 = *(long *)(local_40[0] + -0x18)" (identifier "lVar3") (= "=") (pointer_expression "*(long *)(local_40[0] + -0x18)" (* "*") (cast_expression "(long *)(local_40[0] + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (if_statement "if (lVar3 + 1U < 0x1fffffffffffffff) {\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }" (if "if") (parenthesized_expression "(lVar3 + 1U < 0x1fffffffffffffff)" (( "(") (binary_expression "lVar3 + 1U < 0x1fffffffffffffff" (binary_expression "lVar3 + 1U" (identifier "lVar3") (+ "+") (number_literal "1U")) (< "<") (number_literal "0x1fffffffffffffff")) () ")")) (compound_statement "{\n      lVar6 = (lVar3 + 1U) * 4;\n                    \n      lVar5 = thunk_FUN_00275550(lVar6);\n      FUN_002f0ff0(local_40,lVar5,lVar3,0);\n      *(long *)(param_2 + 0x50) = lVar5;\n      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;\n      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;\n      *(long *)(param_2 + 0x58) = lVar3;\n      if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }\n      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);\n      *(undefined4 *)(param_2 + 100) = uVar4;\n      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);\n      *(undefined4 *)(param_2 + 0x68) = uVar4;\n      return;\n    }" ({ "{") (expression_statement "lVar6 = (lVar3 + 1U) * 4;" (assignment_expression "lVar6 = (lVar3 + 1U) * 4" (identifier "lVar6") (= "=") (binary_expression "(lVar3 + 1U) * 4" (parenthesized_expression "(lVar3 + 1U)" (( "(") (binary_expression "lVar3 + 1U" (identifier "lVar3") (+ "+") (number_literal "1U")) () ")")) (* "*") (number_literal "4"))) (; ";")) (expression_statement "lVar5 = thunk_FUN_00275550(lVar6);" (assignment_expression "lVar5 = thunk_FUN_00275550(lVar6)" (identifier "lVar5") (= "=") (call_expression "thunk_FUN_00275550(lVar6)" (identifier "thunk_FUN_00275550") (argument_list "(lVar6)" (( "(") (identifier "lVar6") () ")")))) (; ";")) (expression_statement "FUN_002f0ff0(local_40,lVar5,lVar3,0);" (call_expression "FUN_002f0ff0(local_40,lVar5,lVar3,0)" (identifier "FUN_002f0ff0") (argument_list "(local_40,lVar5,lVar3,0)" (( "(") (identifier "local_40") (, ",") (identifier "lVar5") (, ",") (identifier "lVar3") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x50) = lVar5;" (assignment_expression "*(long *)(param_2 + 0x50) = lVar5" (pointer_expression "*(long *)(param_2 + 0x50)" (* "*") (cast_expression "(long *)(param_2 + 0x50)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x50)" (( "(") (binary_expression "param_2 + 0x50" (identifier "param_2") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "*(undefined4 *)(lVar5 + -4 + lVar6) = 0;" (assignment_expression "*(undefined4 *)(lVar5 + -4 + lVar6) = 0" (pointer_expression "*(undefined4 *)(lVar5 + -4 + lVar6)" (* "*") (cast_expression "(undefined4 *)(lVar5 + -4 + lVar6)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + -4 + lVar6)" (( "(") (binary_expression "lVar5 + -4 + lVar6" (binary_expression "lVar5 + -4" (identifier "lVar5") (+ "+") (number_literal "-4")) (+ "+") (identifier "lVar6")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;" (assignment_expression "bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (identifier "bVar7") (= "=") (binary_expression "(undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8" (cast_expression "(undefined *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (identifier "PTR_DAT_003bdcd8"))) (; ";")) (expression_statement "*(long *)(param_2 + 0x58) = lVar3;" (assignment_expression "*(long *)(param_2 + 0x58) = lVar3" (pointer_expression "*(long *)(param_2 + 0x58)" (* "*") (cast_expression "(long *)(param_2 + 0x58)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x58)" (( "(") (binary_expression "param_2 + 0x58" (identifier "param_2") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (identifier "lVar3")) (; ";")) (if_statement "if (bVar7) {\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }" (if "if") (parenthesized_expression "(bVar7)" (( "(") (identifier "bVar7") () ")")) (compound_statement "{\n        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }\n        if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }\n      }" ({ "{") (if_statement "if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }\n        else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" (if "if") (parenthesized_expression "(PTR___pthread_key_create_003bdee8 == (undefined *)0x0)" (( "(") (binary_expression "PTR___pthread_key_create_003bdee8 == (undefined *)0x0" (identifier "PTR___pthread_key_create_003bdee8") (== "==") (cast_expression "(undefined *)0x0" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          iVar2 = *(int *)(local_40[0] + -8);\n          *(int *)(local_40[0] + -8) = iVar2 + -1;\n        }" ({ "{") (expression_statement "iVar2 = *(int *)(local_40[0] + -8);" (assignment_expression "iVar2 = *(int *)(local_40[0] + -8)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "*(int *)(local_40[0] + -8) = iVar2 + -1;" (assignment_expression "*(int *)(local_40[0] + -8) = iVar2 + -1" (pointer_expression "*(int *)(local_40[0] + -8)" (* "*") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (= "=") (binary_expression "iVar2 + -1" (identifier "iVar2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (else_clause "else {\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" (else "else") (compound_statement "{\n          LOCK();\n          piVar1 = (int *)(local_40[0] + -8);\n          iVar2 = *piVar1;\n          *piVar1 = *piVar1 + -1;\n          UNLOCK();\n        }" ({ "{") (expression_statement "LOCK();" (call_expression "LOCK()" (identifier "LOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "piVar1 = (int *)(local_40[0] + -8);" (assignment_expression "piVar1 = (int *)(local_40[0] + -8)" (identifier "piVar1") (= "=") (cast_expression "(int *)(local_40[0] + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -8)" (( "(") (binary_expression "local_40[0] + -8" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-8")) () ")")))) (; ";")) (expression_statement "iVar2 = *piVar1;" (assignment_expression "iVar2 = *piVar1" (identifier "iVar2") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "*piVar1 = *piVar1 + -1;" (assignment_expression "*piVar1 = *piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (= "=") (binary_expression "*piVar1 + -1" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "UNLOCK();" (call_expression "UNLOCK()" (identifier "UNLOCK") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))) (if_statement "if (iVar2 < 1) {\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }" (if "if") (parenthesized_expression "(iVar2 < 1)" (( "(") (binary_expression "iVar2 < 1" (identifier "iVar2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);\n        }" ({ "{") (expression_statement "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);" (call_expression "thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41)" (identifier "thunk_FUN_00276d20") (argument_list "((undefined *)(local_40[0] + -0x18),&local_41)" (( "(") (cast_expression "(undefined *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_41" (& "&") (identifier "local_41")) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x48))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x48))(param_1)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_1 + 0x48))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x48))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x48)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x48)" (* "*") (cast_expression "(code **)(*param_1 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x48)" (( "(") (binary_expression "*param_1 + 0x48" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 100) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 100) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 100)" (* "*") (cast_expression "(undefined4 *)(param_2 + 100)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 100)" (( "(") (binary_expression "param_2 + 100" (identifier "param_2") (+ "+") (number_literal "100")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "uVar4 = (**(code **)(*param_1 + 0x50))(param_1);" (assignment_expression "uVar4 = (**(code **)(*param_1 + 0x50))(param_1)" (identifier "uVar4") (= "=") (call_expression "(**(code **)(*param_1 + 0x50))(param_1)" (parenthesized_expression "(**(code **)(*param_1 + 0x50))" (( "(") (pointer_expression "**(code **)(*param_1 + 0x50)" (* "*") (pointer_expression "*(code **)(*param_1 + 0x50)" (* "*") (cast_expression "(code **)(*param_1 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x50)" (( "(") (binary_expression "*param_1 + 0x50" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 0x68) = uVar4;" (assignment_expression "*(undefined4 *)(param_2 + 0x68) = uVar4" (pointer_expression "*(undefined4 *)(param_2 + 0x68)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x68)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x68)" (( "(") (binary_expression "param_2 + 0x68" (identifier "param_2") (+ "+") (number_literal "0x68")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" (identifier "FUN_00276790") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00276790();" (call_expression "FUN_00276790()" (identifier "FUN_00276790") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

/* void std::__facet_shims::__moneypunct_fill_cache<wchar_t, true>(std::integral_constant<bool,
   false>, std::locale::facet const*, std::__moneypunct_cache<wchar_t, true>*) */

void std::__facet_shims::__moneypunct_fill_cache<type_3,true>(long *param_1,long var_1)

{
  int *piVar1;
  int var_6;
  type_1 var_3;
  type_2 uVar4;
  char *pcVar5;
  type_3 *pwVar6;
  bool bVar7;
  long local_40 [2];
  
  uVar4 = (**(type_4 **)(*param_1 + 0x10))();
  *(type_2 *)(var_1 + 0x24) = uVar4;
  uVar4 = (**(type_4 **)(*param_1 + 0x18))(param_1);
  *(type_2 *)(var_1 + 0x28) = uVar4;
  uVar4 = (**(type_4 **)(*param_1 + 0x40))(param_1);
  *(type_5 *)(var_1 + 0x10) = 0;
  *(type_2 *)(var_1 + 0x60) = uVar4;
  *(type_5 *)(var_1 + 0x30) = 0;
  *(type_5 *)(var_1 + 0x40) = 0;
  *(type_5 *)(var_1 + 0x50) = 0;
  *(type_6 *)(var_1 + 0x98) = 1;
  (**(type_4 **)(*param_1 + 0x20))((type_7 *)local_40,param_1);
  var_3 = *(type_1 *)(local_40[0] + -0x18);
                    /* try { // try from 002b2a8d to 002b2aa4 has its CatchHandler @ 002b2d5d */
  pcVar5 = (char *)var_2(var_3 + 1);
  std::string::var_4((type_7 *)local_40,pcVar5,var_3,0);
  pcVar5[var_3] = '\0';
  *(char **)(var_1 + 0x10) = pcVar5;
  bVar7 = (type_8 *)(local_40[0] + -0x18) != (type_8 *)PTR__S_empty_rep_storage_003bdc38;
  *(type_1 *)(var_1 + 0x18) = var_3;
  if (bVar7) {
    if (var_5 == (type_9 *)0x0) {
      var_6 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = var_6 + -1;
    }
    else {
      var_7();
      piVar1 = (int *)(local_40[0] + -8);
      var_6 = *piVar1;
      *piVar1 = *piVar1 + -1;
      var_8();
    }
    if (var_6 < 1) {
      std::string::_Rep::var_9((type_8 *)(local_40[0] + -0x18));
    }
  }
  (**(type_4 **)(*param_1 + 0x28))((type_7 *)local_40,param_1);
  var_3 = *(type_1 *)(local_40[0] + -0x18);
  if (0x1ffffffffffffffe < var_3 + 1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */
    var_10();
  }
                    /* try { // try from 002b2b00 to 002b2b17 has its CatchHandler @ 002b2d67 */
  pwVar6 = (type_3 *)var_2((var_3 + 1) * 4);
  std::wstring::var_4((type_10 *)local_40,pwVar6,var_3,0);
  *(type_3 **)(var_1 + 0x30) = pwVar6;
  pwVar6[var_3] = L'\0';
  bVar7 = (type_8 *)(local_40[0] + -0x18) != (type_8 *)PTR__S_empty_rep_storage_003bdcd8;
  *(type_1 *)(var_1 + 0x38) = var_3;
  if (bVar7) {
    if (var_5 == (type_9 *)0x0) {
      var_6 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = var_6 + -1;
    }
    else {
      var_7();
      piVar1 = (int *)(local_40[0] + -8);
      var_6 = *piVar1;
      *piVar1 = *piVar1 + -1;
      var_8();
    }
    if (var_6 < 1) {
      std::wstring::_Rep::var_9((type_8 *)(local_40[0] + -0x18));
    }
  }
  (**(type_4 **)(*param_1 + 0x30))((type_7 *)local_40,param_1);
  var_3 = *(type_1 *)(local_40[0] + -0x18);
  if (var_3 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */
    pwVar6 = (type_3 *)var_2((var_3 + 1) * 4);
    std::wstring::var_4((type_10 *)local_40,pwVar6,var_3,0);
    *(type_3 **)(var_1 + 0x40) = pwVar6;
    pwVar6[var_3] = L'\0';
    bVar7 = (type_8 *)(local_40[0] + -0x18) != (type_8 *)PTR__S_empty_rep_storage_003bdcd8;
    *(type_1 *)(var_1 + 0x48) = var_3;
    if (bVar7) {
      if (var_5 == (type_9 *)0x0) {
        var_6 = *(int *)(local_40[0] + -8);
        *(int *)(local_40[0] + -8) = var_6 + -1;
      }
      else {
        var_7();
        piVar1 = (int *)(local_40[0] + -8);
        var_6 = *piVar1;
        *piVar1 = *piVar1 + -1;
        var_8();
      }
      if (var_6 < 1) {
        std::wstring::_Rep::var_9((type_8 *)(local_40[0] + -0x18));
      }
    }
    (**(type_4 **)(*param_1 + 0x38))((type_7 *)local_40,param_1);
    var_3 = *(type_1 *)(local_40[0] + -0x18);
    if (var_3 + 1 < 0x1fffffffffffffff) {
                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */
      pwVar6 = (type_3 *)var_2((var_3 + 1) * 4);
      std::wstring::var_4((type_10 *)local_40,pwVar6,var_3,0);
      *(type_3 **)(var_1 + 0x50) = pwVar6;
      pwVar6[var_3] = L'\0';
      bVar7 = (type_8 *)(local_40[0] + -0x18) != (type_8 *)PTR__S_empty_rep_storage_003bdcd8;
      *(type_1 *)(var_1 + 0x58) = var_3;
      if (bVar7) {
        if (var_5 == (type_9 *)0x0) {
          var_6 = *(int *)(local_40[0] + -8);
          *(int *)(local_40[0] + -8) = var_6 + -1;
        }
        else {
          var_7();
          piVar1 = (int *)(local_40[0] + -8);
          var_6 = *piVar1;
          *piVar1 = *piVar1 + -1;
          var_8();
        }
        if (var_6 < 1) {
          std::wstring::_Rep::var_9((type_8 *)(local_40[0] + -0x18));
        }
      }
      uVar4 = (**(type_4 **)(*param_1 + 0x48))(param_1);
      *(type_2 *)(var_1 + 100) = uVar4;
      uVar4 = (**(type_4 **)(*param_1 + 0x50))(param_1);
      *(type_2 *)(var_1 + 0x68) = uVar4;
      return;
    }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */
    var_10();
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d58 to 002b2d5c has its CatchHandler @ 002b2d8d */
  var_10();
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (pointer_expression argument: (identifier))))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (pointer_expression argument: (identifier))))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (pointer_expression argument: (identifier))))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) right: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (pointer_expression argument: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))))

void MASKED(long *param_1,long param_2)

{
  int *piVar1;
  int iVar2;
  long lVar3;
  undefined4 uVar4;
  long lVar5;
  long lVar6;
  bool bVar7;
  undefined1 local_41;
  long local_40 [2];
  
  uVar4 = (**(code **)(*param_1 + 0x10))();
  *(undefined4 *)(param_2 + 0x24) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x18))(param_1);
  *(undefined4 *)(param_2 + 0x28) = uVar4;
  uVar4 = (**(code **)(*param_1 + 0x40))(param_1);
  *(undefined8 *)(param_2 + 0x10) = 0;
  *(undefined4 *)(param_2 + 0x60) = uVar4;
  *(undefined8 *)(param_2 + 0x30) = 0;
  *(undefined8 *)(param_2 + 0x40) = 0;
  *(undefined8 *)(param_2 + 0x50) = 0;
  *(undefined1 *)(param_2 + 0x98) = 1;
  (**(code **)(*param_1 + 0x20))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
                    /* try { // try from 002b2a8d to 002b2aa4 has its CatchHandler @ 002b2d5d */
  lVar5 = thunk_FUN_00275550(lVar3 + 1);
  FUN_002a8e60(local_40,lVar5,lVar3,0);
  *(undefined1 *)(lVar5 + lVar3) = 0;
  *(long *)(param_2 + 0x10) = lVar5;
  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdc38;
  *(long *)(param_2 + 0x18) = lVar3;
  if (bVar7) {
    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x28))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
  if (0x1ffffffffffffffe < lVar3 + 1U) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d62 to 002b2d66 has its CatchHandler @ 002b2d67 */
    FUN_00276790();
  }
  lVar5 = (lVar3 + 1U) * 4;
                    /* try { // try from 002b2b00 to 002b2b17 has its CatchHandler @ 002b2d67 */
  lVar6 = thunk_FUN_00275550(lVar5);
  FUN_002f0ff0(local_40,lVar6,lVar3,0);
  *(long *)(param_2 + 0x30) = lVar6;
  *(undefined4 *)(lVar6 + -4 + lVar5) = 0;
  bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;
  *(long *)(param_2 + 0x38) = lVar3;
  if (bVar7) {
    if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
      iVar2 = *(int *)(local_40[0] + -8);
      *(int *)(local_40[0] + -8) = iVar2 + -1;
    }
    else {
      LOCK();
      piVar1 = (int *)(local_40[0] + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
    }
    if (iVar2 < 1) {
      thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);
    }
  }
  (**(code **)(*param_1 + 0x30))(local_40,param_1);
  lVar3 = *(long *)(local_40[0] + -0x18);
  if (lVar3 + 1U < 0x1fffffffffffffff) {
    lVar6 = (lVar3 + 1U) * 4;
                    /* try { // try from 002b2b73 to 002b2b8a has its CatchHandler @ 002b2d8d */
    lVar5 = thunk_FUN_00275550(lVar6);
    FUN_002f0ff0(local_40,lVar5,lVar3,0);
    *(long *)(param_2 + 0x40) = lVar5;
    *(undefined4 *)(lVar5 + -4 + lVar6) = 0;
    bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;
    *(long *)(param_2 + 0x48) = lVar3;
    if (bVar7) {
      if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
        iVar2 = *(int *)(local_40[0] + -8);
        *(int *)(local_40[0] + -8) = iVar2 + -1;
      }
      else {
        LOCK();
        piVar1 = (int *)(local_40[0] + -8);
        iVar2 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
      }
      if (iVar2 < 1) {
        thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);
      }
    }
    (**(code **)(*param_1 + 0x38))(local_40,param_1);
    lVar3 = *(long *)(local_40[0] + -0x18);
    if (lVar3 + 1U < 0x1fffffffffffffff) {
      lVar6 = (lVar3 + 1U) * 4;
                    /* try { // try from 002b2be6 to 002b2bfd has its CatchHandler @ 002b2d4e */
      lVar5 = thunk_FUN_00275550(lVar6);
      FUN_002f0ff0(local_40,lVar5,lVar3,0);
      *(long *)(param_2 + 0x50) = lVar5;
      *(undefined4 *)(lVar5 + -4 + lVar6) = 0;
      bVar7 = (undefined *)(local_40[0] + -0x18) != PTR_DAT_003bdcd8;
      *(long *)(param_2 + 0x58) = lVar3;
      if (bVar7) {
        if (PTR___pthread_key_create_003bdee8 == (undefined *)0x0) {
          iVar2 = *(int *)(local_40[0] + -8);
          *(int *)(local_40[0] + -8) = iVar2 + -1;
        }
        else {
          LOCK();
          piVar1 = (int *)(local_40[0] + -8);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
        }
        if (iVar2 < 1) {
          thunk_FUN_00276d20((undefined *)(local_40[0] + -0x18),&local_41);
        }
      }
      uVar4 = (**(code **)(*param_1 + 0x48))(param_1);
      *(undefined4 *)(param_2 + 100) = uVar4;
      uVar4 = (**(code **)(*param_1 + 0x50))(param_1);
      *(undefined4 *)(param_2 + 0x68) = uVar4;
      return;
    }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d53 to 002b2d57 has its CatchHandler @ 002b2d4e */
    FUN_00276790();
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002b2d58 to 002b2d5c has its CatchHandler @ 002b2d8d */
  FUN_00276790();
}

