
Expr * exprDup(sqlite3 *db,Expr *p,int dupFlags,u8 **pzBuffer)

{
  u8 *pOwner;
  anon_union_4_2_443a03b8_for_u *paVar1;
  ExprList *pEVar2;
  Window *pWVar3;
  Select *pSVar4;
  int iVar5;
  Expr *pEVar6;
  anon_union_4_2_443a03b8_for_u *paVar7;
  anon_union_4_2_443a03b8_for_u *paVar8;
  anon_union_4_2_443a03b8_for_u *paVar9;
  uint uVar10;
  anon_union_4_2_a01b6dbf_for_x aVar11;
  char *z;
  sqlite3 *db_00;
  anon_union_4_2_443a03b8_for_u aVar12;
  anon_union_4_2_443a03b8_for_u aVar13;
  anon_union_4_2_443a03b8_for_u aVar14;
  uint uVar15;
  anon_union_4_2_443a03b8_for_u aVar16;
  uint uVar17;
  int in_t9;
  anon_union_4_2_443a03b8_for_u p_00;
  u8 *zAlloc;
  sqlite3 *psStack_2c;
  
  psStack_2c = (sqlite3 *)**(undefined4 **)(in_t9 + 0x1246dc);
  aVar12.iValue = dupFlags;
  if (pzBuffer == (u8 **)0x0) {
    iVar5 = dupedExprSize(p,dupFlags);
    p_00.iValue = iVar5 >> 0x1f;
    zAlloc = (u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db);
    uVar17 = 0;
  }
  else {
    zAlloc = *pzBuffer;
    uVar17 = 0x8000;
    p_00.iValue = dupFlags;
  }
  pOwner = zAlloc;
  if (zAlloc == (u8 *)0x0) goto LAB_0006bbac;
  if (dupFlags == 0) {
    uVar15 = p->flags;
    if ((uVar15 & 0x400) == 0) {
      z = (p->u).zToken;
      aVar16.iValue = 0x38;
      if (z != (char *)0x0) {
        uVar10 = 0;
        goto LAB_0006bcbc;
      }
    }
    aVar16.iValue = 0x38;
    uVar10 = 0;
    p_00.iValue = dupFlags;
LAB_0006bc08:
    if ((uVar15 & 0x4000) == 0) {
      if ((uVar15 & 0x2000) == 0) {
        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;
        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;
        do {
          paVar8 = paVar9;
          paVar7 = paVar1;
          aVar14 = paVar8[1];
          aVar13 = paVar8[2];
          aVar12 = paVar8[3];
          *paVar7 = *paVar8;
          paVar7[1] = aVar14;
          paVar7[2] = aVar13;
          paVar7[3] = aVar12;
          paVar9 = paVar8 + 4;
          paVar1 = paVar7 + 4;
        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);
        aVar12 = *paVar9;
        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);
        paVar7[4] = aVar12;
        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;
        goto LAB_0006ba6c;
      }
      iVar5 = 0x1c;
    }
    else {
      iVar5 = 0xc;
    }
    (**(code **)(in_t9 + 0x1246e4))(pOwner,p,iVar5);
    aVar14.zToken = (char *)(0x38 - iVar5);
    aVar12.zToken = (char *)0x0;
    (**(code **)(in_t9 + 0x124610))(zAlloc + iVar5);
    uVar15 = *(uint *)(pOwner + 4);
  }
  else {
    uVar10 = 0x38;
    if ((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))) {
      if (p->pLeft == (Expr *)0x0) {
        uVar10 = 0x400c;
        if ((p->x).pList != (ExprList *)0x0) {
          uVar10 = 0x201c;
        }
      }
      else {
        uVar10 = 0x201c;
      }
    }
    uVar15 = p->flags;
    aVar16.iValue = uVar10 & 0xfff;
    if ((uVar15 & 0x400) == 0) {
      z = (p->u).zToken;
      if (z == (char *)0x0) {
        p_00.zToken = (char *)0x0;
      }
      else {
LAB_0006bcbc:
        iVar5 = sqlite3Strlen30(z);
        p_00.zToken = (char *)(iVar5 + 1);
        if (dupFlags == 0) goto LAB_0006bc08;
      }
    }
    else {
      p_00.zToken = (char *)0x0;
    }
    aVar12 = (anon_union_4_2_443a03b8_for_u)p;
    aVar14 = aVar16;
    (**(code **)(in_t9 + 0x1246e4))(pOwner);
LAB_0006ba6c:
    uVar15 = *(uint *)(pOwner + 4);
  }
  *(uint *)(pOwner + 4) = uVar15 & 0xfffe1fff | uVar17 | uVar10 & 0x6000;
  if (p_00.zToken == (char *)0x0) {
    uVar17 = p->flags;
    p_00 = aVar14;
  }
  else {
    *(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken;
    aVar12 = p->u;
    (**(code **)(in_t9 + 0x1246e4))();
    uVar17 = p->flags;
  }
  if (((uVar17 | *(uint *)(pOwner + 4)) & 0x804000) == 0) {
    if ((uVar17 & 0x800) == 0) {
      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;
      p_00.iValue = dupFlags;
      pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);
      *(ExprList **)(pOwner + 0x14) = pEVar2;
    }
    else {
      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;
      p_00.iValue = dupFlags;
      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);
      *(Select **)(pOwner + 0x14) = pSVar4;
    }
  }
  uVar17 = *(uint *)(pOwner + 4);
  if ((uVar17 & 0x1006000) == 0) {
    if ((p->flags & 0x804000) == 0) {
      if (*pOwner == 0xa6) {
        *(Expr **)(pOwner + 0xc) = p->pLeft;
      }
      else {
        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);
        *(Expr **)(pOwner + 0xc) = pEVar6;
      }
      p_00.zToken = (char *)0x0;
      aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;
      pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);
      *(Expr **)(pOwner + 0x10) = pEVar6;
    }
  }
  else {
    iVar5 = dupedExprNodeSize(p,dupFlags);
    zAlloc = zAlloc + iVar5;
    if ((uVar17 & 0x804000) == 0) {
      pEVar6 = p->pLeft;
      if (pEVar6 != (Expr *)0x0) {
        p_00.iValue = 1;
        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);
      }
      *(Expr **)(pOwner + 0xc) = pEVar6;
      pEVar6 = p->pRight;
      if (pEVar6 != (Expr *)0x0) {
        p_00.iValue = 1;
        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);
      }
      *(Expr **)(pOwner + 0x10) = pEVar6;
    }
    aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner;
    if ((int)(p->flags << 7) < 0) {
      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;
      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);
      *(Window **)(pOwner + 0x30) = pWVar3;
    }
    if (pzBuffer != (u8 **)0x0) {
      *pzBuffer = zAlloc;
    }
  }
LAB_0006bbac:
  if (psStack_2c == (sqlite3 *)**(int **)(in_t9 + 0x1246dc)) {
    return (Expr *)pOwner;
  }
  db_00 = psStack_2c;
  (**(code **)(in_t9 + 0x1246b0))();
  if (aVar12.zToken == (char *)0x0) {
    return (Expr *)0x0;
  }
  pEVar6 = exprDup(db_00,(Expr *)aVar12.zToken,p_00.iValue,(u8 **)0x0);
  return pEVar6;
}



char * FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)

{
  char *pcVar1;
  char *pcVar2;
  undefined4 uVar3;
  char *pcVar4;
  char *pcVar5;
  uint uVar6;
  char *pcVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  char *local_30;
  int local_2c;
  
  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;
  pcVar7 = param_3;
  if (param_4 == (undefined4 *)0x0) {
    FUN_0005c058(param_2);
    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);
    uVar13 = 0;
  }
  else {
    local_30 = (char *)*param_4;
    uVar13 = 0x8000;
  }
  pcVar1 = local_30;
  if (local_30 == (char *)0x0) goto LAB_0006bbac;
  if (param_3 == (char *)0x0) {
    uVar11 = *(uint *)(param_2 + 4);
    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {
      uVar6 = 0;
LAB_0006bcbc:
      iVar14 = FUN_0005b438();
      iVar14 = iVar14 + 1;
      if (param_3 != (char *)0x0) goto LAB_0006ba50;
    }
    else {
      uVar12 = 0x38;
      uVar6 = 0;
      iVar14 = 0;
    }
    if ((uVar11 & 0x4000) == 0) {
      if ((uVar11 & 0x2000) == 0) {
        pcVar2 = pcVar1;
        pcVar7 = param_2;
        do {
          pcVar5 = pcVar7;
          pcVar4 = pcVar2;
          uVar9 = *(undefined4 *)(pcVar5 + 4);
          uVar8 = *(undefined4 *)(pcVar5 + 8);
          uVar3 = *(undefined4 *)(pcVar5 + 0xc);
          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;
          *(undefined4 *)(pcVar4 + 4) = uVar9;
          *(undefined4 *)(pcVar4 + 8) = uVar8;
          *(undefined4 *)(pcVar4 + 0xc) = uVar3;
          pcVar7 = pcVar5 + 0x10;
          pcVar2 = pcVar4 + 0x10;
        } while (pcVar7 != param_2 + 0x30);
        pcVar7 = *(char **)pcVar7;
        uVar3 = *(undefined4 *)(pcVar5 + 0x14);
        *(char **)(pcVar4 + 0x10) = pcVar7;
        *(undefined4 *)(pcVar4 + 0x14) = uVar3;
        goto LAB_0006ba6c;
      }
      iVar10 = 0x1c;
    }
    else {
      iVar10 = 0xc;
    }
    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);
    pcVar7 = (char *)0x0;
    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);
    uVar11 = *(uint *)(pcVar1 + 4);
  }
  else {
    uVar6 = 0x38;
    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {
      if (*(int *)(param_2 + 0xc) == 0) {
        uVar6 = 0x400c;
        if (*(int *)(param_2 + 0x14) != 0) {
          uVar6 = 0x201c;
        }
      }
      else {
        uVar6 = 0x201c;
      }
    }
    uVar11 = *(uint *)(param_2 + 4);
    uVar12 = uVar6 & 0xfff;
    if ((uVar11 & 0x400) == 0) {
      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;
      iVar14 = 0;
    }
    else {
      iVar14 = 0;
    }
LAB_0006ba50:
    pcVar7 = param_2;
    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);
LAB_0006ba6c:
    uVar11 = *(uint *)(pcVar1 + 4);
  }
  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;
  if (iVar14 == 0) {
    uVar13 = *(uint *)(param_2 + 4);
  }
  else {
    *(char **)(pcVar1 + 8) = local_30 + uVar12;
    pcVar7 = *(char **)(param_2 + 8);
    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);
    uVar13 = *(uint *)(param_2 + 4);
  }
  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {
    if ((uVar13 & 0x800) == 0) {
      pcVar7 = *(char **)(param_2 + 0x14);
      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);
      *(undefined4 *)(pcVar1 + 0x14) = uVar3;
    }
    else {
      pcVar7 = *(char **)(param_2 + 0x14);
      uVar3 = FUN_0006b40c(param_1);
      *(undefined4 *)(pcVar1 + 0x14) = uVar3;
    }
  }
  uVar13 = *(uint *)(pcVar1 + 4);
  if ((uVar13 & 0x1006000) == 0) {
    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {
      if (*pcVar1 == -0x5a) {
        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);
      }
      else {
        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);
        *(undefined4 *)(pcVar1 + 0xc) = uVar3;
      }
      pcVar7 = *(char **)(param_2 + 0x10);
      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);
      *(undefined4 *)(pcVar1 + 0x10) = uVar3;
    }
  }
  else {
    iVar14 = FUN_0005bf8c(param_2,param_3);
    local_30 = local_30 + iVar14;
    if ((uVar13 & 0x804000) == 0) {
      iVar14 = *(int *)(param_2 + 0xc);
      if (iVar14 != 0) {
        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);
      }
      *(int *)(pcVar1 + 0xc) = iVar14;
      iVar14 = *(int *)(param_2 + 0x10);
      if (iVar14 != 0) {
        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);
      }
      *(int *)(pcVar1 + 0x10) = iVar14;
    }
    pcVar7 = pcVar1;
    if (*(int *)(param_2 + 4) << 7 < 0) {
      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));
      *(undefined4 *)(pcVar1 + 0x30) = uVar3;
    }
    if (param_4 != (undefined4 *)0x0) {
      *param_4 = local_30;
    }
  }
LAB_0006bbac:
  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {
    return pcVar1;
  }
  (*(code *)PTR___stack_chk_fail_0018fea0)();
  if (pcVar7 == (char *)0x0) {
    return (char *)0x0;
  }
  pcVar7 = (char *)FUN_0006b7f0();
  return pcVar7;
}


lui gp,0x13
addiu gp,gp,-0x3ed0
addu gp,gp,t9
addiu sp,sp,-0x50
sw ra,0x4c(sp)
sw s8,0x48(sp)
sw s7,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s1,0x2c(sp)
sw s0,0x28(sp)
sw gp,0x10(sp)
sw a0,0x1c(sp)
or s1,a1,zero
or s3,a2,zero
or s2,a3,zero
lw v0,-0x7a54(gp)
lw v0,0x0(v0)
sw v0,0x24(sp)
beq a3,zero,0x0006b8a0
_or a1,a2,zero
lw v0,0x0(a3)
sw v0,0x20(sp)
ori s7,zero,0x8000
lw s0,0x20(sp)
beq s0,zero,0x0006bbac
_or v0,s0,zero
beq s3,zero,0x0006bbec
_li v0,0xa6
lbu v1,0x0(s1)
beq v1,v0,0x0006ba38
_li a0,0x38
lw v0,0x4(s1)
ext v0,v0,0x18,0x1
bne v0,zero,0x0006ba3c
_or s4,a0,zero
lw v0,0xc(s1)
beq v0,zero,0x0006b8e4
_li v1,0x201c
b 0x0006ba38
_li a0,0x201c
or a0,s1,zero
lw t9,-0x7d50(gp)
addiu t9,t9,-0x3fa8
bal 0x0005c058
_nop
lw gp,0x10(sp)
sra a2,v0,0x1f
or a3,v0,zero
lw a0,0x1c(sp)
lw t9,-0x7dc8(gp)
addiu t9,t9,0x1414
jalr t9
_nop
lw gp,0x10(sp)
sw v0,0x20(sp)
b 0x0006b85c
_or s7,zero,zero
lw a0,0x14(s1)
li v0,0x400c
movn v0,v1,a0
b 0x0006ba38
_or a0,v0,zero
lw a0,0x20(sp)
addu a0,a0,s6
sw a0,0x8(s0)
or a2,s8,zero
lw a1,0x8(s1)
lw t9,-0x7a4c(gp)
jalr t9
_nop
lw gp,0x10(sp)
b 0x0006ba94
_lw a0,0x4(s1)
lw a1,0x14(s1)
lw a0,0x1c(sp)
lw t9,-0x7d1c(gp)
addiu t9,t9,-0x42c0
bal 0x0006bd40
_nop
lw gp,0x10(sp)
b 0x0006bad8
_sw v0,0x14(s0)
lw a2,0x30(s1)
lw a0,0x1c(sp)
lw t9,-0x7d1c(gp)
addiu t9,t9,-0x40dc
bal 0x0006bf24
_nop
lw gp,0x10(sp)
b 0x0006bb9c
_sw v0,0x30(s0)
lw v0,0x4(s1)
addiu v1,v1,0x4000
and v0,v0,v1
bne v0,zero,0x0006bbac
_or v0,s0,zero
lbu v1,0x0(s0)
li v0,0xa6
bne v1,v0,0x0006b9c0
_or a2,zero,zero
lw v0,0xc(s1)
sw v0,0xc(s0)
or a2,zero,zero
lw a1,0x10(s1)
lw a0,0x1c(sp)
lw t9,-0x7d1c(gp)
addiu t9,t9,-0x430c
bal 0x0006bcf4
_nop
lw gp,0x10(sp)
b 0x0006bba8
_sw v0,0x10(s0)
lw a1,0xc(s1)
lw a0,0x1c(sp)
lw t9,-0x7d1c(gp)
addiu t9,t9,-0x430c
bal 0x0006bcf4
_nop
lw gp,0x10(sp)
b 0x0006b998
_sw v0,0xc(s0)
li s5,0xc
or a2,s5,zero
or a1,s1,zero
or a0,s0,zero
lw t9,-0x7a4c(gp)
jalr t9
_nop
lw gp,0x10(sp)
li a2,0x38
subu a2,a2,s5
or a1,zero,zero
lw a0,0x20(sp)
addu a0,a0,s5
lw t9,-0x7b20(gp)
jalr t9
_nop
lw gp,0x10(sp)
b 0x0006ba70
_lw v0,0x4(s0)
b 0x0006b9e8
_li s5,0x1c
or s4,a0,zero
lw s5,0x4(s1)
andi v0,s5,0x400
beq v0,zero,0x0006bc94
_andi s6,a0,0xfff
or s8,zero,zero
or a2,s6,zero
or a1,s1,zero
or a0,s0,zero
lw t9,-0x7a4c(gp)
jalr t9
_nop
lw gp,0x10(sp)
lw v0,0x4(s0)
lui v1,0xfffe
addiu v1,v1,0x1fff
and v0,v0,v1
or s7,v0,s7
andi s4,s4,0x6000
or s4,s7,s4
bne s8,zero,0x0006b8f8
_sw s4,0x4(s0)
lw a0,0x4(s1)
lw v0,0x4(s0)
or v0,a0,v0
lui v1,0x80
addiu v1,v1,0x4000
and v0,v0,v1
bne v0,zero,0x0006bad8
_andi a0,a0,0x800
beq a0,zero,0x0006b924
_or a2,s3,zero
lw a1,0x14(s1)
lw a0,0x1c(sp)
lw t9,-0x7d1c(gp)
addiu t9,t9,-0x4bf4
bal 0x0006b40c
_nop
lw gp,0x10(sp)
sw v0,0x14(s0)
lw s4,0x4(s0)
lui v0,0x100
addiu v0,v0,0x6000
and v0,s4,v0
beq v0,zero,0x0006b96c
_lui v1,0x80
or a1,s3,zero
or a0,s1,zero
lw t9,-0x7d50(gp)
addiu t9,t9,-0x4074
bal 0x0005bf8c
_nop
lw gp,0x10(sp)
lw v1,0x20(sp)
addu v0,v1,v0
sw v0,0x20(sp)
lui v0,0x80
addiu v0,v0,0x4000
and s4,s4,v0
bne s4,zero,0x0006bb8c
_nop
lw v0,0xc(s1)
beq v0,zero,0x0006bb58
_addiu a3,sp,0x20
li a2,0x1
or a1,v0,zero
lw a0,0x1c(sp)
lw t9,-0x7d1c(gp)
addiu t9,t9,-0x4810
bal 0x0006b7f0
_nop
lw gp,0x10(sp)
sw v0,0xc(s0)
lw v0,0x10(s1)
beq v0,zero,0x0006bb88
_addiu a3,sp,0x20
li a2,0x1
or a1,v0,zero
lw a0,0x1c(sp)
lw t9,-0x7d1c(gp)
addiu t9,t9,-0x4810
bal 0x0006b7f0
_nop
lw gp,0x10(sp)
sw v0,0x10(s0)
lw v0,0x4(s1)
ext v0,v0,0x18,0x1
bne v0,zero,0x0006b948
_or a1,s0,zero
beq s2,zero,0x0006bba8
_lw v0,0x20(sp)
sw v0,0x0(s2)
or v0,s0,zero
lw a0,0x24(sp)
lw v1,-0x7a54(gp)
lw v1,0x0(v1)
bne a0,v1,0x0006bce8
_lw ra,0x4c(sp)
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
lw s5,0x4(s1)
andi v0,s5,0x400
beq v0,zero,0x0006bca8
_or s8,s3,zero
li s6,0x38
li s4,0x38
andi v0,s5,0x4000
bne v0,zero,0x0006b9e4
_nop
andi s5,s5,0x2000
bne s5,zero,0x0006ba30
_or v1,s1,zero
or v0,s0,zero
addiu t0,s1,0x30
lwl a3,0x0(v1)
lwr a3,0x3(v1)
lwl a2,0x4(v1)
lwr a2,0x7(v1)
lwl a1,0x8(v1)
lwr a1,0xb(v1)
lwl a0,0xc(v1)
lwr a0,0xf(v1)
swl a3,0x0(v0)
swr a3,0x3(v0)
swl a2,0x4(v0)
swr a2,0x7(v0)
swl a1,0x8(v0)
swr a1,0xb(v0)
swl a0,0xc(v0)
swr a0,0xf(v0)
addiu v1,v1,0x10
bne v1,t0,0x0006bc24
_addiu v0,v0,0x10
lwl a1,0x0(v1)
lwr a1,0x3(v1)
lwl a0,0x4(v1)
lwr a0,0x7(v1)
swl a1,0x0(v0)
swr a1,0x3(v0)
swl a0,0x4(v0)
b 0x0006ba6c
_swr a0,0x7(v0)
lw a0,0x8(s1)
bne a0,zero,0x0006bcbc
_lw t9,-0x7d50(gp)
b 0x0006ba50
_or s8,zero,zero
lw a0,0x8(s1)
beq a0,zero,0x0006bcdc
_li s6,0x38
li s4,0x38
lw t9,-0x7d50(gp)
addiu t9,t9,-0x4bc8
bal 0x0005b438
_nop
lw gp,0x10(sp)
bne s3,zero,0x0006ba50
_addiu s8,v0,0x1
b 0x0006bc08
_andi v0,s5,0x4000
or s8,s3,zero
b 0x0006bc04
_li s4,0x38
lw t9,-0x7a80(gp)
jalr t9
_nop
(translation_unit "char * FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  char *pcVar5;\n  uint uVar6;\n  char *pcVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  int iVar14;\n  char *local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;\n  pcVar7 = param_3;\n  if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }\n  pcVar1 = local_30;\n  if (local_30 == (char *)0x0) goto LAB_0006bbac;\n  if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;\n  if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }\n  uVar13 = *(uint *)(pcVar1 + 4);\n  if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }\nLAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  pcVar7 = (char *)FUN_0006b7f0();\n  return pcVar7;\n}\n\n" (function_definition "char * FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  char *pcVar5;\n  uint uVar6;\n  char *pcVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  int iVar14;\n  char *local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;\n  pcVar7 = param_3;\n  if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }\n  pcVar1 = local_30;\n  if (local_30 == (char *)0x0) goto LAB_0006bbac;\n  if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;\n  if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }\n  uVar13 = *(uint *)(pcVar1 + 4);\n  if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }\nLAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  pcVar7 = (char *)FUN_0006b7f0();\n  return pcVar7;\n}" primitive_type (pointer_declarator "* FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" * (function_declarator "FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" identifier (parameter_list "(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) )))) (compound_statement "{\n  char *pcVar1;\n  char *pcVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  char *pcVar5;\n  uint uVar6;\n  char *pcVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  int iVar14;\n  char *local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;\n  pcVar7 = param_3;\n  if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }\n  pcVar1 = local_30;\n  if (local_30 == (char *)0x0) goto LAB_0006bbac;\n  if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;\n  if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }\n  uVar13 = *(uint *)(pcVar1 + 4);\n  if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }\nLAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  pcVar7 = (char *)FUN_0006b7f0();\n  return pcVar7;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "char *local_30;" primitive_type (pointer_declarator "*local_30" * identifier) ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_0018fecc;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_0018fecc" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0018fecc" * (cast_expression "(int *)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "pcVar7 = param_3;" (assignment_expression "pcVar7 = param_3" identifier = identifier) ;) (if_statement "if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" if (parenthesized_expression "(param_4 == (undefined4 *)0x0)" ( (binary_expression "param_4 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }" { (expression_statement "FUN_0005c058(param_2);" (call_expression "FUN_0005c058(param_2)" identifier (argument_list "(param_2)" ( identifier ))) ;) (expression_statement "local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);" (assignment_expression "local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" identifier = (cast_expression "(char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" (parenthesized_expression "(*(code *)(PTR_LAB_0018fb58 + 0x1414))" ( (pointer_expression "*(code *)(PTR_LAB_0018fb58 + 0x1414)" * (cast_expression "(code *)(PTR_LAB_0018fb58 + 0x1414)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0018fb58 + 0x1414)" ( (binary_expression "PTR_LAB_0018fb58 + 0x1414" identifier + number_literal) )))) )) (argument_list "(param_1)" ( identifier ))))) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" else (compound_statement "{\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" { (expression_statement "local_30 = (char *)*param_4;" (assignment_expression "local_30 = (char *)*param_4" identifier = (cast_expression "(char *)*param_4" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_4" * identifier))) ;) (expression_statement "uVar13 = 0x8000;" (assignment_expression "uVar13 = 0x8000" identifier = number_literal) ;) }))) (expression_statement "pcVar1 = local_30;" (assignment_expression "pcVar1 = local_30" identifier = identifier) ;) (if_statement "if (local_30 == (char *)0x0) goto LAB_0006bbac;" if (parenthesized_expression "(local_30 == (char *)0x0)" ( (binary_expression "local_30 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0006bbac;" goto statement_identifier ;)) (if_statement "if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" if (parenthesized_expression "(param_3 == (char *)0x0)" ( (binary_expression "param_3 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" { (expression_statement "uVar11 = *(uint *)(param_2 + 4);" (assignment_expression "uVar11 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (if_statement "if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" if (parenthesized_expression "(((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0))" ( (binary_expression "((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)" (parenthesized_expression "((uVar11 & 0x400) == 0)" ( (binary_expression "(uVar11 & 0x400) == 0" (parenthesized_expression "(uVar11 & 0x400)" ( (binary_expression "uVar11 & 0x400" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(uVar12 = 0x38, *(int *)(param_2 + 8) != 0)" ( (comma_expression "uVar12 = 0x38, *(int *)(param_2 + 8) != 0" (assignment_expression "uVar12 = 0x38" identifier = number_literal) , (binary_expression "*(int *)(param_2 + 8) != 0" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) != number_literal)) ))) )) (compound_statement "{\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0006bcbc:\n      iVar14 = FUN_0005b438();" statement_identifier : (expression_statement "iVar14 = FUN_0005b438();" (assignment_expression "iVar14 = FUN_0005b438()" identifier = (call_expression "FUN_0005b438()" identifier (argument_list "()" ( )))) ;)) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" identifier = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (if_statement "if (param_3 != (char *)0x0) goto LAB_0006ba50;" if (parenthesized_expression "(param_3 != (char *)0x0)" ( (binary_expression "param_3 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0006ba50;" goto statement_identifier ;)) }) (else_clause "else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" else (compound_statement "{\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" { (expression_statement "uVar12 = 0x38;" (assignment_expression "uVar12 = 0x38" identifier = number_literal) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) }))) (if_statement "if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }" if (parenthesized_expression "((uVar11 & 0x4000) == 0)" ( (binary_expression "(uVar11 & 0x4000) == 0" (parenthesized_expression "(uVar11 & 0x4000)" ( (binary_expression "uVar11 & 0x4000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }" { (if_statement "if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }" if (parenthesized_expression "((uVar11 & 0x2000) == 0)" ( (binary_expression "(uVar11 & 0x2000) == 0" (parenthesized_expression "(uVar11 & 0x2000)" ( (binary_expression "uVar11 & 0x2000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }" { (expression_statement "pcVar2 = pcVar1;" (assignment_expression "pcVar2 = pcVar1" identifier = identifier) ;) (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" identifier = identifier) ;) (do_statement "do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);" do (compound_statement "{\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        }" { (expression_statement "pcVar5 = pcVar7;" (assignment_expression "pcVar5 = pcVar7" identifier = identifier) ;) (expression_statement "pcVar4 = pcVar2;" (assignment_expression "pcVar4 = pcVar2" identifier = identifier) ;) (expression_statement "uVar9 = *(undefined4 *)(pcVar5 + 4);" (assignment_expression "uVar9 = *(undefined4 *)(pcVar5 + 4)" identifier = (pointer_expression "*(undefined4 *)(pcVar5 + 4)" * (cast_expression "(undefined4 *)(pcVar5 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 4)" ( (binary_expression "pcVar5 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar8 = *(undefined4 *)(pcVar5 + 8);" (assignment_expression "uVar8 = *(undefined4 *)(pcVar5 + 8)" identifier = (pointer_expression "*(undefined4 *)(pcVar5 + 8)" * (cast_expression "(undefined4 *)(pcVar5 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 8)" ( (binary_expression "pcVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(undefined4 *)(pcVar5 + 0xc);" (assignment_expression "uVar3 = *(undefined4 *)(pcVar5 + 0xc)" identifier = (pointer_expression "*(undefined4 *)(pcVar5 + 0xc)" * (cast_expression "(undefined4 *)(pcVar5 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xc)" ( (binary_expression "pcVar5 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;" (assignment_expression "*(undefined4 *)pcVar4 = *(undefined4 *)pcVar5" (pointer_expression "*(undefined4 *)pcVar4" * (cast_expression "(undefined4 *)pcVar4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined4 *)pcVar5" * (cast_expression "(undefined4 *)pcVar5" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined4 *)(pcVar4 + 4) = uVar9;" (assignment_expression "*(undefined4 *)(pcVar4 + 4) = uVar9" (pointer_expression "*(undefined4 *)(pcVar4 + 4)" * (cast_expression "(undefined4 *)(pcVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 4)" ( (binary_expression "pcVar4 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(pcVar4 + 8) = uVar8;" (assignment_expression "*(undefined4 *)(pcVar4 + 8) = uVar8" (pointer_expression "*(undefined4 *)(pcVar4 + 8)" * (cast_expression "(undefined4 *)(pcVar4 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 8)" ( (binary_expression "pcVar4 + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(pcVar4 + 0xc) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar4 + 0xc) = uVar3" (pointer_expression "*(undefined4 *)(pcVar4 + 0xc)" * (cast_expression "(undefined4 *)(pcVar4 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 0xc)" ( (binary_expression "pcVar4 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "pcVar7 = pcVar5 + 0x10;" (assignment_expression "pcVar7 = pcVar5 + 0x10" identifier = (binary_expression "pcVar5 + 0x10" identifier + number_literal)) ;) (expression_statement "pcVar2 = pcVar4 + 0x10;" (assignment_expression "pcVar2 = pcVar4 + 0x10" identifier = (binary_expression "pcVar4 + 0x10" identifier + number_literal)) ;) }) while (parenthesized_expression "(pcVar7 != param_2 + 0x30)" ( (binary_expression "pcVar7 != param_2 + 0x30" identifier != (binary_expression "param_2 + 0x30" identifier + number_literal)) )) ;) (expression_statement "pcVar7 = *(char **)pcVar7;" (assignment_expression "pcVar7 = *(char **)pcVar7" identifier = (pointer_expression "*(char **)pcVar7" * (cast_expression "(char **)pcVar7" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "uVar3 = *(undefined4 *)(pcVar5 + 0x14);" (assignment_expression "uVar3 = *(undefined4 *)(pcVar5 + 0x14)" identifier = (pointer_expression "*(undefined4 *)(pcVar5 + 0x14)" * (cast_expression "(undefined4 *)(pcVar5 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x14)" ( (binary_expression "pcVar5 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(char **)(pcVar4 + 0x10) = pcVar7;" (assignment_expression "*(char **)(pcVar4 + 0x10) = pcVar7" (pointer_expression "*(char **)(pcVar4 + 0x10)" * (cast_expression "(char **)(pcVar4 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar4 + 0x10)" ( (binary_expression "pcVar4 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(pcVar4 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar4 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar4 + 0x14)" * (cast_expression "(undefined4 *)(pcVar4 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 0x14)" ( (binary_expression "pcVar4 + 0x14" identifier + number_literal) )))) = identifier) ;) (goto_statement "goto LAB_0006ba6c;" goto statement_identifier ;) })) (expression_statement "iVar10 = 0x1c;" (assignment_expression "iVar10 = 0x1c" identifier = number_literal) ;) }) (else_clause "else {\n      iVar10 = 0xc;\n    }" else (compound_statement "{\n      iVar10 = 0xc;\n    }" { (expression_statement "iVar10 = 0xc;" (assignment_expression "iVar10 = 0xc" identifier = number_literal) ;) }))) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" ( (pointer_expression "*(code *)PTR_memcpy_0018fed4" * (cast_expression "(code *)PTR_memcpy_0018fed4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pcVar1,param_2,iVar10)" ( identifier , identifier , identifier ))) ;) (expression_statement "pcVar7 = (char *)0x0;" (assignment_expression "pcVar7 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);" (call_expression "(*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10)" (parenthesized_expression "(*(code *)PTR_memset_0018fe00)" ( (pointer_expression "*(code *)PTR_memset_0018fe00" * (cast_expression "(code *)PTR_memset_0018fe00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_30 + iVar10,0,0x38 - iVar10)" ( (binary_expression "local_30 + iVar10" identifier + identifier) , number_literal , (binary_expression "0x38 - iVar10" number_literal - identifier) ))) ;) (expression_statement "uVar11 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar11 = *(uint *)(pcVar1 + 4)" identifier = (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" else (compound_statement "{\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" { (expression_statement "uVar6 = 0x38;" (assignment_expression "uVar6 = 0x38" identifier = number_literal) ;) (if_statement "if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }" if (parenthesized_expression "((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7))" ( (binary_expression "(*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)" (parenthesized_expression "(*param_2 != -0x5a)" ( (binary_expression "*param_2 != -0x5a" (pointer_expression "*param_2" * identifier) != number_literal) )) && (parenthesized_expression "(uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)" ( (comma_expression "uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7" (assignment_expression "uVar6 = 0" identifier = number_literal) , (binary_expression "-1 < *(int *)(param_2 + 4) << 7" number_literal < (binary_expression "*(int *)(param_2 + 4) << 7" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) << number_literal))) ))) )) (compound_statement "{\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }" { (if_statement "if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }" if (parenthesized_expression "(*(int *)(param_2 + 0xc) == 0)" ( (binary_expression "*(int *)(param_2 + 0xc) == 0" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }" { (expression_statement "uVar6 = 0x400c;" (assignment_expression "uVar6 = 0x400c" identifier = number_literal) ;) (if_statement "if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }" if (parenthesized_expression "(*(int *)(param_2 + 0x14) != 0)" ( (binary_expression "*(int *)(param_2 + 0x14) != 0" (pointer_expression "*(int *)(param_2 + 0x14)" * (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n          uVar6 = 0x201c;\n        }" { (expression_statement "uVar6 = 0x201c;" (assignment_expression "uVar6 = 0x201c" identifier = number_literal) ;) })) }) (else_clause "else {\n        uVar6 = 0x201c;\n      }" else (compound_statement "{\n        uVar6 = 0x201c;\n      }" { (expression_statement "uVar6 = 0x201c;" (assignment_expression "uVar6 = 0x201c" identifier = number_literal) ;) }))) })) (expression_statement "uVar11 = *(uint *)(param_2 + 4);" (assignment_expression "uVar11 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar12 = uVar6 & 0xfff;" (assignment_expression "uVar12 = uVar6 & 0xfff" identifier = (binary_expression "uVar6 & 0xfff" identifier & number_literal)) ;) (if_statement "if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }" if (parenthesized_expression "((uVar11 & 0x400) == 0)" ( (binary_expression "(uVar11 & 0x400) == 0" (parenthesized_expression "(uVar11 & 0x400)" ( (binary_expression "uVar11 & 0x400" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }" { (if_statement "if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;" if (parenthesized_expression "(*(int *)(param_2 + 8) != 0)" ( (binary_expression "*(int *)(param_2 + 8) != 0" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) != number_literal) )) (goto_statement "goto LAB_0006bcbc;" goto statement_identifier ;)) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar14 = 0;\n    }" else (compound_statement "{\n      iVar14 = 0;\n    }" { (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) }))) (labeled_statement "LAB_0006ba50:\n    pcVar7 = param_2;" statement_identifier : (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" identifier = identifier) ;)) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" ( (pointer_expression "*(code *)PTR_memcpy_0018fed4" * (cast_expression "(code *)PTR_memcpy_0018fed4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pcVar1,param_2,uVar12)" ( identifier , identifier , identifier ))) ;) (labeled_statement "LAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);" statement_identifier : (expression_statement "uVar11 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar11 = *(uint *)(pcVar1 + 4)" identifier = (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) ))))) ;)) }))) (expression_statement "*(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;" (assignment_expression "*(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000" (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) )))) = (binary_expression "uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000" (binary_expression "uVar11 & 0xfffe1fff | uVar13" (binary_expression "uVar11 & 0xfffe1fff" identifier & number_literal) | identifier) | (binary_expression "uVar6 & 0x6000" identifier & number_literal))) ;) (if_statement "if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" if (parenthesized_expression "(iVar14 == 0)" ( (binary_expression "iVar14 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar13 = *(uint *)(param_2 + 4);\n  }" { (expression_statement "uVar13 = *(uint *)(param_2 + 4);" (assignment_expression "uVar13 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" else (compound_statement "{\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" { (expression_statement "*(char **)(pcVar1 + 8) = local_30 + uVar12;" (assignment_expression "*(char **)(pcVar1 + 8) = local_30 + uVar12" (pointer_expression "*(char **)(pcVar1 + 8)" * (cast_expression "(char **)(pcVar1 + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar1 + 8)" ( (binary_expression "pcVar1 + 8" identifier + number_literal) )))) = (binary_expression "local_30 + uVar12" identifier + identifier)) ;) (expression_statement "pcVar7 = *(char **)(param_2 + 8);" (assignment_expression "pcVar7 = *(char **)(param_2 + 8)" identifier = (pointer_expression "*(char **)(param_2 + 8)" * (cast_expression "(char **)(param_2 + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" ( (pointer_expression "*(code *)PTR_memcpy_0018fed4" * (cast_expression "(code *)PTR_memcpy_0018fed4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_30 + uVar12,pcVar7,iVar14)" ( (binary_expression "local_30 + uVar12" identifier + identifier) , identifier , identifier ))) ;) (expression_statement "uVar13 = *(uint *)(param_2 + 4);" (assignment_expression "uVar13 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) }))) (if_statement "if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }" if (parenthesized_expression "(((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0)" ( (binary_expression "((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0" (parenthesized_expression "((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000)" ( (binary_expression "(uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000" (parenthesized_expression "(uVar13 | *(uint *)(pcVar1 + 4))" ( (binary_expression "uVar13 | *(uint *)(pcVar1 + 4)" identifier | (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) ))))) )) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }" { (if_statement "if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" if (parenthesized_expression "((uVar13 & 0x800) == 0)" ( (binary_expression "(uVar13 & 0x800) == 0" (parenthesized_expression "(uVar13 & 0x800)" ( (binary_expression "uVar13 & 0x800" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" { (expression_statement "pcVar7 = *(char **)(param_2 + 0x14);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x14)" identifier = (pointer_expression "*(char **)(param_2 + 0x14)" * (cast_expression "(char **)(param_2 + 0x14)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);" (assignment_expression "uVar3 = FUN_0006bd40(param_1,pcVar7,param_3)" identifier = (call_expression "FUN_0006bd40(param_1,pcVar7,param_3)" identifier (argument_list "(param_1,pcVar7,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x14)" * (cast_expression "(undefined4 *)(pcVar1 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x14)" ( (binary_expression "pcVar1 + 0x14" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" else (compound_statement "{\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" { (expression_statement "pcVar7 = *(char **)(param_2 + 0x14);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x14)" identifier = (pointer_expression "*(char **)(param_2 + 0x14)" * (cast_expression "(char **)(param_2 + 0x14)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = FUN_0006b40c(param_1);" (assignment_expression "uVar3 = FUN_0006b40c(param_1)" identifier = (call_expression "FUN_0006b40c(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x14)" * (cast_expression "(undefined4 *)(pcVar1 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x14)" ( (binary_expression "pcVar1 + 0x14" identifier + number_literal) )))) = identifier) ;) }))) })) (expression_statement "uVar13 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar13 = *(uint *)(pcVar1 + 4)" identifier = (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" if (parenthesized_expression "((uVar13 & 0x1006000) == 0)" ( (binary_expression "(uVar13 & 0x1006000) == 0" (parenthesized_expression "(uVar13 & 0x1006000)" ( (binary_expression "uVar13 & 0x1006000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }" { (if_statement "if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }" if (parenthesized_expression "((*(uint *)(param_2 + 4) & 0x804000) == 0)" ( (binary_expression "(*(uint *)(param_2 + 4) & 0x804000) == 0" (parenthesized_expression "(*(uint *)(param_2 + 4) & 0x804000)" ( (binary_expression "*(uint *)(param_2 + 4) & 0x804000" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }" { (if_statement "if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" if (parenthesized_expression "(*pcVar1 == -0x5a)" ( (binary_expression "*pcVar1 == -0x5a" (pointer_expression "*pcVar1" * identifier) == number_literal) )) (compound_statement "{\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }" { (expression_statement "*(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);" (assignment_expression "*(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc)" (pointer_expression "*(undefined4 *)(pcVar1 + 0xc)" * (cast_expression "(undefined4 *)(pcVar1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0xc)" ( (binary_expression "pcVar1 + 0xc" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) }) (else_clause "else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" else (compound_statement "{\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" { (expression_statement "uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);" (assignment_expression "uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0)" identifier = (call_expression "FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0)" identifier (argument_list "(param_1,*(undefined4 *)(param_2 + 0xc),0)" ( identifier , (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , number_literal )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0xc) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0xc) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0xc)" * (cast_expression "(undefined4 *)(pcVar1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0xc)" ( (binary_expression "pcVar1 + 0xc" identifier + number_literal) )))) = identifier) ;) }))) (expression_statement "pcVar7 = *(char **)(param_2 + 0x10);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x10)" identifier = (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) ))))) ;) (expression_statement "uVar3 = FUN_0006bcf4(param_1,pcVar7,0);" (assignment_expression "uVar3 = FUN_0006bcf4(param_1,pcVar7,0)" identifier = (call_expression "FUN_0006bcf4(param_1,pcVar7,0)" identifier (argument_list "(param_1,pcVar7,0)" ( identifier , identifier , number_literal )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0x10) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x10) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x10)" * (cast_expression "(undefined4 *)(pcVar1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x10)" ( (binary_expression "pcVar1 + 0x10" identifier + number_literal) )))) = identifier) ;) })) }) (else_clause "else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" else (compound_statement "{\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" { (expression_statement "iVar14 = FUN_0005bf8c(param_2,param_3);" (assignment_expression "iVar14 = FUN_0005bf8c(param_2,param_3)" identifier = (call_expression "FUN_0005bf8c(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (expression_statement "local_30 = local_30 + iVar14;" (assignment_expression "local_30 = local_30 + iVar14" identifier = (binary_expression "local_30 + iVar14" identifier + identifier)) ;) (if_statement "if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }" if (parenthesized_expression "((uVar13 & 0x804000) == 0)" ( (binary_expression "(uVar13 & 0x804000) == 0" (parenthesized_expression "(uVar13 & 0x804000)" ( (binary_expression "uVar13 & 0x804000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }" { (expression_statement "iVar14 = *(int *)(param_2 + 0xc);" (assignment_expression "iVar14 = *(int *)(param_2 + 0xc)" identifier = (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" { (expression_statement "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);" (assignment_expression "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30)" identifier = (call_expression "FUN_0006b7f0(param_1,iVar14,1,&local_30)" identifier (argument_list "(param_1,iVar14,1,&local_30)" ( identifier , identifier , number_literal , (pointer_expression "&local_30" & identifier) )))) ;) })) (expression_statement "*(int *)(pcVar1 + 0xc) = iVar14;" (assignment_expression "*(int *)(pcVar1 + 0xc) = iVar14" (pointer_expression "*(int *)(pcVar1 + 0xc)" * (cast_expression "(int *)(pcVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0xc)" ( (binary_expression "pcVar1 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_2 + 0x10);" (assignment_expression "iVar14 = *(int *)(param_2 + 0x10)" identifier = (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" { (expression_statement "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);" (assignment_expression "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30)" identifier = (call_expression "FUN_0006b7f0(param_1,iVar14,1,&local_30)" identifier (argument_list "(param_1,iVar14,1,&local_30)" ( identifier , identifier , number_literal , (pointer_expression "&local_30" & identifier) )))) ;) })) (expression_statement "*(int *)(pcVar1 + 0x10) = iVar14;" (assignment_expression "*(int *)(pcVar1 + 0x10) = iVar14" (pointer_expression "*(int *)(pcVar1 + 0x10)" * (cast_expression "(int *)(pcVar1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x10)" ( (binary_expression "pcVar1 + 0x10" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "pcVar7 = pcVar1;" (assignment_expression "pcVar7 = pcVar1" identifier = identifier) ;) (if_statement "if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 4) << 7 < 0)" ( (binary_expression "*(int *)(param_2 + 4) << 7 < 0" (binary_expression "*(int *)(param_2 + 4) << 7" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) << number_literal) < number_literal) )) (compound_statement "{\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }" { (expression_statement "uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));" (assignment_expression "uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" identifier = (call_expression "FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" identifier (argument_list "(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_2 + 0x30)" * (cast_expression "(undefined4 *)(param_2 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0x30) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x30) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x30)" * (cast_expression "(undefined4 *)(pcVar1 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x30)" ( (binary_expression "pcVar1 + 0x30" identifier + number_literal) )))) = identifier) ;) })) (if_statement "if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }" if (parenthesized_expression "(param_4 != (undefined4 *)0x0)" ( (binary_expression "param_4 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *param_4 = local_30;\n    }" { (expression_statement "*param_4 = local_30;" (assignment_expression "*param_4 = local_30" (pointer_expression "*param_4" * identifier) = identifier) ;) })) }))) (labeled_statement "LAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }" statement_identifier : (if_statement "if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }" if (parenthesized_expression "(local_2c == *(int *)PTR___stack_chk_guard_0018fecc)" ( (binary_expression "local_2c == *(int *)PTR___stack_chk_guard_0018fecc" identifier == (pointer_expression "*(int *)PTR___stack_chk_guard_0018fecc" * (cast_expression "(int *)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return pcVar1;\n  }" { (return_statement "return pcVar1;" return identifier ;) }))) (expression_statement "(*(code *)PTR___stack_chk_fail_0018fea0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0018fea0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0018fea0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0018fea0" * (cast_expression "(code *)PTR___stack_chk_fail_0018fea0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }" if (parenthesized_expression "(pcVar7 == (char *)0x0)" ( (binary_expression "pcVar7 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (char *)0x0;\n  }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "pcVar7 = (char *)FUN_0006b7f0();" (assignment_expression "pcVar7 = (char *)FUN_0006b7f0()" identifier = (cast_expression "(char *)FUN_0006b7f0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0006b7f0()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pcVar7;" return identifier ;) })))
(translation_unit "Expr * exprDup(sqlite3 *db,Expr *p,int dupFlags,u8 **pzBuffer)\n\n{\n  u8 *pOwner;\n  anon_union_4_2_443a03b8_for_u *paVar1;\n  ExprList *pEVar2;\n  Window *pWVar3;\n  Select *pSVar4;\n  int iVar5;\n  Expr *pEVar6;\n  anon_union_4_2_443a03b8_for_u *paVar7;\n  anon_union_4_2_443a03b8_for_u *paVar8;\n  anon_union_4_2_443a03b8_for_u *paVar9;\n  uint uVar10;\n  anon_union_4_2_a01b6dbf_for_x aVar11;\n  char *z;\n  sqlite3 *db_00;\n  anon_union_4_2_443a03b8_for_u aVar12;\n  anon_union_4_2_443a03b8_for_u aVar13;\n  anon_union_4_2_443a03b8_for_u aVar14;\n  uint uVar15;\n  anon_union_4_2_443a03b8_for_u aVar16;\n  uint uVar17;\n  int in_t9;\n  anon_union_4_2_443a03b8_for_u p_00;\n  u8 *zAlloc;\n  sqlite3 *psStack_2c;\n  \n  psStack_2c = (sqlite3 *)**(undefined4 **)(in_t9 + 0x1246dc);\n  aVar12.iValue = dupFlags;\n  if (pzBuffer == (u8 **)0x0) {\n    iVar5 = dupedExprSize(p,dupFlags);\n    p_00.iValue = iVar5 >> 0x1f;\n    zAlloc = (u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db);\n    uVar17 = 0;\n  }\n  else {\n    zAlloc = *pzBuffer;\n    uVar17 = 0x8000;\n    p_00.iValue = dupFlags;\n  }\n  pOwner = zAlloc;\n  if (zAlloc == (u8 *)0x0) goto LAB_0006bbac;\n  if (dupFlags == 0) {\n    uVar15 = p->flags;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      aVar16.iValue = 0x38;\n      if (z != (char *)0x0) {\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }\n    }\n    aVar16.iValue = 0x38;\n    uVar10 = 0;\n    p_00.iValue = dupFlags;\nLAB_0006bc08:\n    if ((uVar15 & 0x4000) == 0) {\n      if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }\n      iVar5 = 0x1c;\n    }\n    else {\n      iVar5 = 0xc;\n    }\n    (**(code **)(in_t9 + 0x1246e4))(pOwner,p,iVar5);\n    aVar14.zToken = (char *)(0x38 - iVar5);\n    aVar12.zToken = (char *)0x0;\n    (**(code **)(in_t9 + 0x124610))(zAlloc + iVar5);\n    uVar15 = *(uint *)(pOwner + 4);\n  }\n  else {\n    uVar10 = 0x38;\n    if ((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))) {\n      if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }\n    }\n    uVar15 = p->flags;\n    aVar16.iValue = uVar10 & 0xfff;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }\n    }\n    else {\n      p_00.zToken = (char *)0x0;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)p;\n    aVar14 = aVar16;\n    (**(code **)(in_t9 + 0x1246e4))(pOwner);\nLAB_0006ba6c:\n    uVar15 = *(uint *)(pOwner + 4);\n  }\n  *(uint *)(pOwner + 4) = uVar15 & 0xfffe1fff | uVar17 | uVar10 & 0x6000;\n  if (p_00.zToken == (char *)0x0) {\n    uVar17 = p->flags;\n    p_00 = aVar14;\n  }\n  else {\n    *(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken;\n    aVar12 = p->u;\n    (**(code **)(in_t9 + 0x1246e4))();\n    uVar17 = p->flags;\n  }\n  if (((uVar17 | *(uint *)(pOwner + 4)) & 0x804000) == 0) {\n    if ((uVar17 & 0x800) == 0) {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;\n      p_00.iValue = dupFlags;\n      pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);\n      *(ExprList **)(pOwner + 0x14) = pEVar2;\n    }\n    else {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;\n      p_00.iValue = dupFlags;\n      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);\n      *(Select **)(pOwner + 0x14) = pSVar4;\n    }\n  }\n  uVar17 = *(uint *)(pOwner + 4);\n  if ((uVar17 & 0x1006000) == 0) {\n    if ((p->flags & 0x804000) == 0) {\n      if (*pOwner == 0xa6) {\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }\n      else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }\n      p_00.zToken = (char *)0x0;\n      aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;\n      pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n  }\n  else {\n    iVar5 = dupedExprNodeSize(p,dupFlags);\n    zAlloc = zAlloc + iVar5;\n    if ((uVar17 & 0x804000) == 0) {\n      pEVar6 = p->pLeft;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0xc) = pEVar6;\n      pEVar6 = p->pRight;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner;\n    if ((int)(p->flags << 7) < 0) {\n      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;\n      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);\n      *(Window **)(pOwner + 0x30) = pWVar3;\n    }\n    if (pzBuffer != (u8 **)0x0) {\n      *pzBuffer = zAlloc;\n    }\n  }\nLAB_0006bbac:\n  if (psStack_2c == (sqlite3 *)**(int **)(in_t9 + 0x1246dc)) {\n    return (Expr *)pOwner;\n  }\n  db_00 = psStack_2c;\n  (**(code **)(in_t9 + 0x1246b0))();\n  if (aVar12.zToken == (char *)0x0) {\n    return (Expr *)0x0;\n  }\n  pEVar6 = exprDup(db_00,(Expr *)aVar12.zToken,p_00.iValue,(u8 **)0x0);\n  return pEVar6;\n}\n\n" (function_definition "Expr * exprDup(sqlite3 *db,Expr *p,int dupFlags,u8 **pzBuffer)\n\n{\n  u8 *pOwner;\n  anon_union_4_2_443a03b8_for_u *paVar1;\n  ExprList *pEVar2;\n  Window *pWVar3;\n  Select *pSVar4;\n  int iVar5;\n  Expr *pEVar6;\n  anon_union_4_2_443a03b8_for_u *paVar7;\n  anon_union_4_2_443a03b8_for_u *paVar8;\n  anon_union_4_2_443a03b8_for_u *paVar9;\n  uint uVar10;\n  anon_union_4_2_a01b6dbf_for_x aVar11;\n  char *z;\n  sqlite3 *db_00;\n  anon_union_4_2_443a03b8_for_u aVar12;\n  anon_union_4_2_443a03b8_for_u aVar13;\n  anon_union_4_2_443a03b8_for_u aVar14;\n  uint uVar15;\n  anon_union_4_2_443a03b8_for_u aVar16;\n  uint uVar17;\n  int in_t9;\n  anon_union_4_2_443a03b8_for_u p_00;\n  u8 *zAlloc;\n  sqlite3 *psStack_2c;\n  \n  psStack_2c = (sqlite3 *)**(undefined4 **)(in_t9 + 0x1246dc);\n  aVar12.iValue = dupFlags;\n  if (pzBuffer == (u8 **)0x0) {\n    iVar5 = dupedExprSize(p,dupFlags);\n    p_00.iValue = iVar5 >> 0x1f;\n    zAlloc = (u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db);\n    uVar17 = 0;\n  }\n  else {\n    zAlloc = *pzBuffer;\n    uVar17 = 0x8000;\n    p_00.iValue = dupFlags;\n  }\n  pOwner = zAlloc;\n  if (zAlloc == (u8 *)0x0) goto LAB_0006bbac;\n  if (dupFlags == 0) {\n    uVar15 = p->flags;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      aVar16.iValue = 0x38;\n      if (z != (char *)0x0) {\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }\n    }\n    aVar16.iValue = 0x38;\n    uVar10 = 0;\n    p_00.iValue = dupFlags;\nLAB_0006bc08:\n    if ((uVar15 & 0x4000) == 0) {\n      if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }\n      iVar5 = 0x1c;\n    }\n    else {\n      iVar5 = 0xc;\n    }\n    (**(code **)(in_t9 + 0x1246e4))(pOwner,p,iVar5);\n    aVar14.zToken = (char *)(0x38 - iVar5);\n    aVar12.zToken = (char *)0x0;\n    (**(code **)(in_t9 + 0x124610))(zAlloc + iVar5);\n    uVar15 = *(uint *)(pOwner + 4);\n  }\n  else {\n    uVar10 = 0x38;\n    if ((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))) {\n      if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }\n    }\n    uVar15 = p->flags;\n    aVar16.iValue = uVar10 & 0xfff;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }\n    }\n    else {\n      p_00.zToken = (char *)0x0;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)p;\n    aVar14 = aVar16;\n    (**(code **)(in_t9 + 0x1246e4))(pOwner);\nLAB_0006ba6c:\n    uVar15 = *(uint *)(pOwner + 4);\n  }\n  *(uint *)(pOwner + 4) = uVar15 & 0xfffe1fff | uVar17 | uVar10 & 0x6000;\n  if (p_00.zToken == (char *)0x0) {\n    uVar17 = p->flags;\n    p_00 = aVar14;\n  }\n  else {\n    *(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken;\n    aVar12 = p->u;\n    (**(code **)(in_t9 + 0x1246e4))();\n    uVar17 = p->flags;\n  }\n  if (((uVar17 | *(uint *)(pOwner + 4)) & 0x804000) == 0) {\n    if ((uVar17 & 0x800) == 0) {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;\n      p_00.iValue = dupFlags;\n      pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);\n      *(ExprList **)(pOwner + 0x14) = pEVar2;\n    }\n    else {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;\n      p_00.iValue = dupFlags;\n      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);\n      *(Select **)(pOwner + 0x14) = pSVar4;\n    }\n  }\n  uVar17 = *(uint *)(pOwner + 4);\n  if ((uVar17 & 0x1006000) == 0) {\n    if ((p->flags & 0x804000) == 0) {\n      if (*pOwner == 0xa6) {\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }\n      else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }\n      p_00.zToken = (char *)0x0;\n      aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;\n      pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n  }\n  else {\n    iVar5 = dupedExprNodeSize(p,dupFlags);\n    zAlloc = zAlloc + iVar5;\n    if ((uVar17 & 0x804000) == 0) {\n      pEVar6 = p->pLeft;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0xc) = pEVar6;\n      pEVar6 = p->pRight;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner;\n    if ((int)(p->flags << 7) < 0) {\n      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;\n      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);\n      *(Window **)(pOwner + 0x30) = pWVar3;\n    }\n    if (pzBuffer != (u8 **)0x0) {\n      *pzBuffer = zAlloc;\n    }\n  }\nLAB_0006bbac:\n  if (psStack_2c == (sqlite3 *)**(int **)(in_t9 + 0x1246dc)) {\n    return (Expr *)pOwner;\n  }\n  db_00 = psStack_2c;\n  (**(code **)(in_t9 + 0x1246b0))();\n  if (aVar12.zToken == (char *)0x0) {\n    return (Expr *)0x0;\n  }\n  pEVar6 = exprDup(db_00,(Expr *)aVar12.zToken,p_00.iValue,(u8 **)0x0);\n  return pEVar6;\n}" type_identifier (pointer_declarator "* exprDup(sqlite3 *db,Expr *p,int dupFlags,u8 **pzBuffer)" * (function_declarator "exprDup(sqlite3 *db,Expr *p,int dupFlags,u8 **pzBuffer)" identifier (parameter_list "(sqlite3 *db,Expr *p,int dupFlags,u8 **pzBuffer)" ( (parameter_declaration "sqlite3 *db" type_identifier (pointer_declarator "*db" * identifier)) , (parameter_declaration "Expr *p" type_identifier (pointer_declarator "*p" * identifier)) , (parameter_declaration "int dupFlags" primitive_type identifier) , (parameter_declaration "u8 **pzBuffer" type_identifier (pointer_declarator "**pzBuffer" * (pointer_declarator "*pzBuffer" * identifier))) )))) (compound_statement "{\n  u8 *pOwner;\n  anon_union_4_2_443a03b8_for_u *paVar1;\n  ExprList *pEVar2;\n  Window *pWVar3;\n  Select *pSVar4;\n  int iVar5;\n  Expr *pEVar6;\n  anon_union_4_2_443a03b8_for_u *paVar7;\n  anon_union_4_2_443a03b8_for_u *paVar8;\n  anon_union_4_2_443a03b8_for_u *paVar9;\n  uint uVar10;\n  anon_union_4_2_a01b6dbf_for_x aVar11;\n  char *z;\n  sqlite3 *db_00;\n  anon_union_4_2_443a03b8_for_u aVar12;\n  anon_union_4_2_443a03b8_for_u aVar13;\n  anon_union_4_2_443a03b8_for_u aVar14;\n  uint uVar15;\n  anon_union_4_2_443a03b8_for_u aVar16;\n  uint uVar17;\n  int in_t9;\n  anon_union_4_2_443a03b8_for_u p_00;\n  u8 *zAlloc;\n  sqlite3 *psStack_2c;\n  \n  psStack_2c = (sqlite3 *)**(undefined4 **)(in_t9 + 0x1246dc);\n  aVar12.iValue = dupFlags;\n  if (pzBuffer == (u8 **)0x0) {\n    iVar5 = dupedExprSize(p,dupFlags);\n    p_00.iValue = iVar5 >> 0x1f;\n    zAlloc = (u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db);\n    uVar17 = 0;\n  }\n  else {\n    zAlloc = *pzBuffer;\n    uVar17 = 0x8000;\n    p_00.iValue = dupFlags;\n  }\n  pOwner = zAlloc;\n  if (zAlloc == (u8 *)0x0) goto LAB_0006bbac;\n  if (dupFlags == 0) {\n    uVar15 = p->flags;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      aVar16.iValue = 0x38;\n      if (z != (char *)0x0) {\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }\n    }\n    aVar16.iValue = 0x38;\n    uVar10 = 0;\n    p_00.iValue = dupFlags;\nLAB_0006bc08:\n    if ((uVar15 & 0x4000) == 0) {\n      if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }\n      iVar5 = 0x1c;\n    }\n    else {\n      iVar5 = 0xc;\n    }\n    (**(code **)(in_t9 + 0x1246e4))(pOwner,p,iVar5);\n    aVar14.zToken = (char *)(0x38 - iVar5);\n    aVar12.zToken = (char *)0x0;\n    (**(code **)(in_t9 + 0x124610))(zAlloc + iVar5);\n    uVar15 = *(uint *)(pOwner + 4);\n  }\n  else {\n    uVar10 = 0x38;\n    if ((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))) {\n      if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }\n    }\n    uVar15 = p->flags;\n    aVar16.iValue = uVar10 & 0xfff;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }\n    }\n    else {\n      p_00.zToken = (char *)0x0;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)p;\n    aVar14 = aVar16;\n    (**(code **)(in_t9 + 0x1246e4))(pOwner);\nLAB_0006ba6c:\n    uVar15 = *(uint *)(pOwner + 4);\n  }\n  *(uint *)(pOwner + 4) = uVar15 & 0xfffe1fff | uVar17 | uVar10 & 0x6000;\n  if (p_00.zToken == (char *)0x0) {\n    uVar17 = p->flags;\n    p_00 = aVar14;\n  }\n  else {\n    *(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken;\n    aVar12 = p->u;\n    (**(code **)(in_t9 + 0x1246e4))();\n    uVar17 = p->flags;\n  }\n  if (((uVar17 | *(uint *)(pOwner + 4)) & 0x804000) == 0) {\n    if ((uVar17 & 0x800) == 0) {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;\n      p_00.iValue = dupFlags;\n      pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);\n      *(ExprList **)(pOwner + 0x14) = pEVar2;\n    }\n    else {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;\n      p_00.iValue = dupFlags;\n      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);\n      *(Select **)(pOwner + 0x14) = pSVar4;\n    }\n  }\n  uVar17 = *(uint *)(pOwner + 4);\n  if ((uVar17 & 0x1006000) == 0) {\n    if ((p->flags & 0x804000) == 0) {\n      if (*pOwner == 0xa6) {\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }\n      else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }\n      p_00.zToken = (char *)0x0;\n      aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;\n      pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n  }\n  else {\n    iVar5 = dupedExprNodeSize(p,dupFlags);\n    zAlloc = zAlloc + iVar5;\n    if ((uVar17 & 0x804000) == 0) {\n      pEVar6 = p->pLeft;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0xc) = pEVar6;\n      pEVar6 = p->pRight;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner;\n    if ((int)(p->flags << 7) < 0) {\n      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;\n      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);\n      *(Window **)(pOwner + 0x30) = pWVar3;\n    }\n    if (pzBuffer != (u8 **)0x0) {\n      *pzBuffer = zAlloc;\n    }\n  }\nLAB_0006bbac:\n  if (psStack_2c == (sqlite3 *)**(int **)(in_t9 + 0x1246dc)) {\n    return (Expr *)pOwner;\n  }\n  db_00 = psStack_2c;\n  (**(code **)(in_t9 + 0x1246b0))();\n  if (aVar12.zToken == (char *)0x0) {\n    return (Expr *)0x0;\n  }\n  pEVar6 = exprDup(db_00,(Expr *)aVar12.zToken,p_00.iValue,(u8 **)0x0);\n  return pEVar6;\n}" { (declaration "u8 *pOwner;" type_identifier (pointer_declarator "*pOwner" * identifier) ;) (declaration "anon_union_4_2_443a03b8_for_u *paVar1;" type_identifier (pointer_declarator "*paVar1" * identifier) ;) (declaration "ExprList *pEVar2;" type_identifier (pointer_declarator "*pEVar2" * identifier) ;) (declaration "Window *pWVar3;" type_identifier (pointer_declarator "*pWVar3" * identifier) ;) (declaration "Select *pSVar4;" type_identifier (pointer_declarator "*pSVar4" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "Expr *pEVar6;" type_identifier (pointer_declarator "*pEVar6" * identifier) ;) (declaration "anon_union_4_2_443a03b8_for_u *paVar7;" type_identifier (pointer_declarator "*paVar7" * identifier) ;) (declaration "anon_union_4_2_443a03b8_for_u *paVar8;" type_identifier (pointer_declarator "*paVar8" * identifier) ;) (declaration "anon_union_4_2_443a03b8_for_u *paVar9;" type_identifier (pointer_declarator "*paVar9" * identifier) ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "anon_union_4_2_a01b6dbf_for_x aVar11;" type_identifier identifier ;) (declaration "char *z;" primitive_type (pointer_declarator "*z" * identifier) ;) (declaration "sqlite3 *db_00;" type_identifier (pointer_declarator "*db_00" * identifier) ;) (declaration "anon_union_4_2_443a03b8_for_u aVar12;" type_identifier identifier ;) (declaration "anon_union_4_2_443a03b8_for_u aVar13;" type_identifier identifier ;) (declaration "anon_union_4_2_443a03b8_for_u aVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "anon_union_4_2_443a03b8_for_u aVar16;" type_identifier identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "int in_t9;" primitive_type identifier ;) (declaration "anon_union_4_2_443a03b8_for_u p_00;" type_identifier identifier ;) (declaration "u8 *zAlloc;" type_identifier (pointer_declarator "*zAlloc" * identifier) ;) (declaration "sqlite3 *psStack_2c;" type_identifier (pointer_declarator "*psStack_2c" * identifier) ;) (expression_statement "psStack_2c = (sqlite3 *)**(undefined4 **)(in_t9 + 0x1246dc);" (assignment_expression "psStack_2c = (sqlite3 *)**(undefined4 **)(in_t9 + 0x1246dc)" identifier = (cast_expression "(sqlite3 *)**(undefined4 **)(in_t9 + 0x1246dc)" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined4 **)(in_t9 + 0x1246dc)" * (pointer_expression "*(undefined4 **)(in_t9 + 0x1246dc)" * (cast_expression "(undefined4 **)(in_t9 + 0x1246dc)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x1246dc)" ( (binary_expression "in_t9 + 0x1246dc" identifier + number_literal) ))))))) ;) (expression_statement "aVar12.iValue = dupFlags;" (assignment_expression "aVar12.iValue = dupFlags" (field_expression "aVar12.iValue" identifier . field_identifier) = identifier) ;) (if_statement "if (pzBuffer == (u8 **)0x0) {\n    iVar5 = dupedExprSize(p,dupFlags);\n    p_00.iValue = iVar5 >> 0x1f;\n    zAlloc = (u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db);\n    uVar17 = 0;\n  }\n  else {\n    zAlloc = *pzBuffer;\n    uVar17 = 0x8000;\n    p_00.iValue = dupFlags;\n  }" if (parenthesized_expression "(pzBuffer == (u8 **)0x0)" ( (binary_expression "pzBuffer == (u8 **)0x0" identifier == (cast_expression "(u8 **)0x0" ( (type_descriptor "u8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n    iVar5 = dupedExprSize(p,dupFlags);\n    p_00.iValue = iVar5 >> 0x1f;\n    zAlloc = (u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db);\n    uVar17 = 0;\n  }" { (expression_statement "iVar5 = dupedExprSize(p,dupFlags);" (assignment_expression "iVar5 = dupedExprSize(p,dupFlags)" identifier = (call_expression "dupedExprSize(p,dupFlags)" identifier (argument_list "(p,dupFlags)" ( identifier , identifier )))) ;) (expression_statement "p_00.iValue = iVar5 >> 0x1f;" (assignment_expression "p_00.iValue = iVar5 >> 0x1f" (field_expression "p_00.iValue" identifier . field_identifier) = (binary_expression "iVar5 >> 0x1f" identifier >> number_literal)) ;) (expression_statement "zAlloc = (u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db);" (assignment_expression "zAlloc = (u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db)" identifier = (cast_expression "(u8 *)(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db)" ( (type_descriptor "u8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))(db)" (parenthesized_expression "(*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414))" ( (pointer_expression "*(code *)(*(int *)(in_t9 + 0x124368) + 0x1414)" * (cast_expression "(code *)(*(int *)(in_t9 + 0x124368) + 0x1414)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(in_t9 + 0x124368) + 0x1414)" ( (binary_expression "*(int *)(in_t9 + 0x124368) + 0x1414" (pointer_expression "*(int *)(in_t9 + 0x124368)" * (cast_expression "(int *)(in_t9 + 0x124368)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_t9 + 0x124368)" ( (binary_expression "in_t9 + 0x124368" identifier + number_literal) )))) + number_literal) )))) )) (argument_list "(db)" ( identifier ))))) ;) (expression_statement "uVar17 = 0;" (assignment_expression "uVar17 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    zAlloc = *pzBuffer;\n    uVar17 = 0x8000;\n    p_00.iValue = dupFlags;\n  }" else (compound_statement "{\n    zAlloc = *pzBuffer;\n    uVar17 = 0x8000;\n    p_00.iValue = dupFlags;\n  }" { (expression_statement "zAlloc = *pzBuffer;" (assignment_expression "zAlloc = *pzBuffer" identifier = (pointer_expression "*pzBuffer" * identifier)) ;) (expression_statement "uVar17 = 0x8000;" (assignment_expression "uVar17 = 0x8000" identifier = number_literal) ;) (expression_statement "p_00.iValue = dupFlags;" (assignment_expression "p_00.iValue = dupFlags" (field_expression "p_00.iValue" identifier . field_identifier) = identifier) ;) }))) (expression_statement "pOwner = zAlloc;" (assignment_expression "pOwner = zAlloc" identifier = identifier) ;) (if_statement "if (zAlloc == (u8 *)0x0) goto LAB_0006bbac;" if (parenthesized_expression "(zAlloc == (u8 *)0x0)" ( (binary_expression "zAlloc == (u8 *)0x0" identifier == (cast_expression "(u8 *)0x0" ( (type_descriptor "u8 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0006bbac;" goto statement_identifier ;)) (if_statement "if (dupFlags == 0) {\n    uVar15 = p->flags;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      aVar16.iValue = 0x38;\n      if (z != (char *)0x0) {\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }\n    }\n    aVar16.iValue = 0x38;\n    uVar10 = 0;\n    p_00.iValue = dupFlags;\nLAB_0006bc08:\n    if ((uVar15 & 0x4000) == 0) {\n      if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }\n      iVar5 = 0x1c;\n    }\n    else {\n      iVar5 = 0xc;\n    }\n    (**(code **)(in_t9 + 0x1246e4))(pOwner,p,iVar5);\n    aVar14.zToken = (char *)(0x38 - iVar5);\n    aVar12.zToken = (char *)0x0;\n    (**(code **)(in_t9 + 0x124610))(zAlloc + iVar5);\n    uVar15 = *(uint *)(pOwner + 4);\n  }\n  else {\n    uVar10 = 0x38;\n    if ((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))) {\n      if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }\n    }\n    uVar15 = p->flags;\n    aVar16.iValue = uVar10 & 0xfff;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }\n    }\n    else {\n      p_00.zToken = (char *)0x0;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)p;\n    aVar14 = aVar16;\n    (**(code **)(in_t9 + 0x1246e4))(pOwner);\nLAB_0006ba6c:\n    uVar15 = *(uint *)(pOwner + 4);\n  }" if (parenthesized_expression "(dupFlags == 0)" ( (binary_expression "dupFlags == 0" identifier == number_literal) )) (compound_statement "{\n    uVar15 = p->flags;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      aVar16.iValue = 0x38;\n      if (z != (char *)0x0) {\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }\n    }\n    aVar16.iValue = 0x38;\n    uVar10 = 0;\n    p_00.iValue = dupFlags;\nLAB_0006bc08:\n    if ((uVar15 & 0x4000) == 0) {\n      if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }\n      iVar5 = 0x1c;\n    }\n    else {\n      iVar5 = 0xc;\n    }\n    (**(code **)(in_t9 + 0x1246e4))(pOwner,p,iVar5);\n    aVar14.zToken = (char *)(0x38 - iVar5);\n    aVar12.zToken = (char *)0x0;\n    (**(code **)(in_t9 + 0x124610))(zAlloc + iVar5);\n    uVar15 = *(uint *)(pOwner + 4);\n  }" { (expression_statement "uVar15 = p->flags;" (assignment_expression "uVar15 = p->flags" identifier = (field_expression "p->flags" identifier -> field_identifier)) ;) (if_statement "if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      aVar16.iValue = 0x38;\n      if (z != (char *)0x0) {\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }\n    }" if (parenthesized_expression "((uVar15 & 0x400) == 0)" ( (binary_expression "(uVar15 & 0x400) == 0" (parenthesized_expression "(uVar15 & 0x400)" ( (binary_expression "uVar15 & 0x400" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      z = (p->u).zToken;\n      aVar16.iValue = 0x38;\n      if (z != (char *)0x0) {\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }\n    }" { (expression_statement "z = (p->u).zToken;" (assignment_expression "z = (p->u).zToken" identifier = (field_expression "(p->u).zToken" (parenthesized_expression "(p->u)" ( (field_expression "p->u" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "aVar16.iValue = 0x38;" (assignment_expression "aVar16.iValue = 0x38" (field_expression "aVar16.iValue" identifier . field_identifier) = number_literal) ;) (if_statement "if (z != (char *)0x0) {\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }" if (parenthesized_expression "(z != (char *)0x0)" ( (binary_expression "z != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar10 = 0;\n        goto LAB_0006bcbc;\n      }" { (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_0006bcbc;" goto statement_identifier ;) })) })) (expression_statement "aVar16.iValue = 0x38;" (assignment_expression "aVar16.iValue = 0x38" (field_expression "aVar16.iValue" identifier . field_identifier) = number_literal) ;) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (expression_statement "p_00.iValue = dupFlags;" (assignment_expression "p_00.iValue = dupFlags" (field_expression "p_00.iValue" identifier . field_identifier) = identifier) ;) (labeled_statement "LAB_0006bc08:\n    if ((uVar15 & 0x4000) == 0) {\n      if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }\n      iVar5 = 0x1c;\n    }\n    else {\n      iVar5 = 0xc;\n    }" statement_identifier : (if_statement "if ((uVar15 & 0x4000) == 0) {\n      if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }\n      iVar5 = 0x1c;\n    }\n    else {\n      iVar5 = 0xc;\n    }" if (parenthesized_expression "((uVar15 & 0x4000) == 0)" ( (binary_expression "(uVar15 & 0x4000) == 0" (parenthesized_expression "(uVar15 & 0x4000)" ( (binary_expression "uVar15 & 0x4000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }\n      iVar5 = 0x1c;\n    }" { (if_statement "if ((uVar15 & 0x2000) == 0) {\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }" if (parenthesized_expression "((uVar15 & 0x2000) == 0)" ( (binary_expression "(uVar15 & 0x2000) == 0" (parenthesized_expression "(uVar15 & 0x2000)" ( (binary_expression "uVar15 & 0x2000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;\n        paVar9 = (anon_union_4_2_443a03b8_for_u *)p;\n        do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);\n        aVar12 = *paVar9;\n        aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);\n        paVar7[4] = aVar12;\n        *(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;\n        goto LAB_0006ba6c;\n      }" { (expression_statement "paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner;" (assignment_expression "paVar1 = (anon_union_4_2_443a03b8_for_u *)pOwner" identifier = (cast_expression "(anon_union_4_2_443a03b8_for_u *)pOwner" ( (type_descriptor "anon_union_4_2_443a03b8_for_u *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "paVar9 = (anon_union_4_2_443a03b8_for_u *)p;" (assignment_expression "paVar9 = (anon_union_4_2_443a03b8_for_u *)p" identifier = (cast_expression "(anon_union_4_2_443a03b8_for_u *)p" ( (type_descriptor "anon_union_4_2_443a03b8_for_u *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (do_statement "do {\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        } while (paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y);" do (compound_statement "{\n          paVar8 = paVar9;\n          paVar7 = paVar1;\n          aVar14 = paVar8[1];\n          aVar13 = paVar8[2];\n          aVar12 = paVar8[3];\n          *paVar7 = *paVar8;\n          paVar7[1] = aVar14;\n          paVar7[2] = aVar13;\n          paVar7[3] = aVar12;\n          paVar9 = paVar8 + 4;\n          paVar1 = paVar7 + 4;\n        }" { (expression_statement "paVar8 = paVar9;" (assignment_expression "paVar8 = paVar9" identifier = identifier) ;) (expression_statement "paVar7 = paVar1;" (assignment_expression "paVar7 = paVar1" identifier = identifier) ;) (expression_statement "aVar14 = paVar8[1];" (assignment_expression "aVar14 = paVar8[1]" identifier = (subscript_expression "paVar8[1]" identifier [ number_literal ])) ;) (expression_statement "aVar13 = paVar8[2];" (assignment_expression "aVar13 = paVar8[2]" identifier = (subscript_expression "paVar8[2]" identifier [ number_literal ])) ;) (expression_statement "aVar12 = paVar8[3];" (assignment_expression "aVar12 = paVar8[3]" identifier = (subscript_expression "paVar8[3]" identifier [ number_literal ])) ;) (expression_statement "*paVar7 = *paVar8;" (assignment_expression "*paVar7 = *paVar8" (pointer_expression "*paVar7" * identifier) = (pointer_expression "*paVar8" * identifier)) ;) (expression_statement "paVar7[1] = aVar14;" (assignment_expression "paVar7[1] = aVar14" (subscript_expression "paVar7[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "paVar7[2] = aVar13;" (assignment_expression "paVar7[2] = aVar13" (subscript_expression "paVar7[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "paVar7[3] = aVar12;" (assignment_expression "paVar7[3] = aVar12" (subscript_expression "paVar7[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "paVar9 = paVar8 + 4;" (assignment_expression "paVar9 = paVar8 + 4" identifier = (binary_expression "paVar8 + 4" identifier + number_literal)) ;) (expression_statement "paVar1 = paVar7 + 4;" (assignment_expression "paVar1 = paVar7 + 4" identifier = (binary_expression "paVar7 + 4" identifier + number_literal)) ;) }) while (parenthesized_expression "(paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y)" ( (binary_expression "paVar9 != (anon_union_4_2_443a03b8_for_u *)&p->y" identifier != (cast_expression "(anon_union_4_2_443a03b8_for_u *)&p->y" ( (type_descriptor "anon_union_4_2_443a03b8_for_u *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&p->y" & (field_expression "p->y" identifier -> field_identifier)))) )) ;) (expression_statement "aVar12 = *paVar9;" (assignment_expression "aVar12 = *paVar9" identifier = (pointer_expression "*paVar9" * identifier)) ;) (expression_statement "aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5);" (assignment_expression "aVar11 = *(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5)" identifier = (pointer_expression "*(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5)" * (cast_expression "(anon_union_4_2_a01b6dbf_for_x *)(paVar8 + 5)" ( (type_descriptor "anon_union_4_2_a01b6dbf_for_x *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(paVar8 + 5)" ( (binary_expression "paVar8 + 5" identifier + number_literal) ))))) ;) (expression_statement "paVar7[4] = aVar12;" (assignment_expression "paVar7[4] = aVar12" (subscript_expression "paVar7[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11;" (assignment_expression "*(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5) = aVar11" (pointer_expression "*(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5)" * (cast_expression "(anon_union_4_2_a01b6dbf_for_x *)(paVar7 + 5)" ( (type_descriptor "anon_union_4_2_a01b6dbf_for_x *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(paVar7 + 5)" ( (binary_expression "paVar7 + 5" identifier + number_literal) )))) = identifier) ;) (goto_statement "goto LAB_0006ba6c;" goto statement_identifier ;) })) (expression_statement "iVar5 = 0x1c;" (assignment_expression "iVar5 = 0x1c" identifier = number_literal) ;) }) (else_clause "else {\n      iVar5 = 0xc;\n    }" else (compound_statement "{\n      iVar5 = 0xc;\n    }" { (expression_statement "iVar5 = 0xc;" (assignment_expression "iVar5 = 0xc" identifier = number_literal) ;) })))) (expression_statement "(**(code **)(in_t9 + 0x1246e4))(pOwner,p,iVar5);" (call_expression "(**(code **)(in_t9 + 0x1246e4))(pOwner,p,iVar5)" (parenthesized_expression "(**(code **)(in_t9 + 0x1246e4))" ( (pointer_expression "**(code **)(in_t9 + 0x1246e4)" * (pointer_expression "*(code **)(in_t9 + 0x1246e4)" * (cast_expression "(code **)(in_t9 + 0x1246e4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x1246e4)" ( (binary_expression "in_t9 + 0x1246e4" identifier + number_literal) ))))) )) (argument_list "(pOwner,p,iVar5)" ( identifier , identifier , identifier ))) ;) (expression_statement "aVar14.zToken = (char *)(0x38 - iVar5);" (assignment_expression "aVar14.zToken = (char *)(0x38 - iVar5)" (field_expression "aVar14.zToken" identifier . field_identifier) = (cast_expression "(char *)(0x38 - iVar5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(0x38 - iVar5)" ( (binary_expression "0x38 - iVar5" number_literal - identifier) )))) ;) (expression_statement "aVar12.zToken = (char *)0x0;" (assignment_expression "aVar12.zToken = (char *)0x0" (field_expression "aVar12.zToken" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(**(code **)(in_t9 + 0x124610))(zAlloc + iVar5);" (call_expression "(**(code **)(in_t9 + 0x124610))(zAlloc + iVar5)" (parenthesized_expression "(**(code **)(in_t9 + 0x124610))" ( (pointer_expression "**(code **)(in_t9 + 0x124610)" * (pointer_expression "*(code **)(in_t9 + 0x124610)" * (cast_expression "(code **)(in_t9 + 0x124610)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x124610)" ( (binary_expression "in_t9 + 0x124610" identifier + number_literal) ))))) )) (argument_list "(zAlloc + iVar5)" ( (binary_expression "zAlloc + iVar5" identifier + identifier) ))) ;) (expression_statement "uVar15 = *(uint *)(pOwner + 4);" (assignment_expression "uVar15 = *(uint *)(pOwner + 4)" identifier = (pointer_expression "*(uint *)(pOwner + 4)" * (cast_expression "(uint *)(pOwner + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pOwner + 4)" ( (binary_expression "pOwner + 4" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    uVar10 = 0x38;\n    if ((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))) {\n      if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }\n    }\n    uVar15 = p->flags;\n    aVar16.iValue = uVar10 & 0xfff;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }\n    }\n    else {\n      p_00.zToken = (char *)0x0;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)p;\n    aVar14 = aVar16;\n    (**(code **)(in_t9 + 0x1246e4))(pOwner);\nLAB_0006ba6c:\n    uVar15 = *(uint *)(pOwner + 4);\n  }" else (compound_statement "{\n    uVar10 = 0x38;\n    if ((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))) {\n      if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }\n    }\n    uVar15 = p->flags;\n    aVar16.iValue = uVar10 & 0xfff;\n    if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }\n    }\n    else {\n      p_00.zToken = (char *)0x0;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)p;\n    aVar14 = aVar16;\n    (**(code **)(in_t9 + 0x1246e4))(pOwner);\nLAB_0006ba6c:\n    uVar15 = *(uint *)(pOwner + 4);\n  }" { (expression_statement "uVar10 = 0x38;" (assignment_expression "uVar10 = 0x38" identifier = number_literal) ;) (if_statement "if ((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))) {\n      if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }\n    }" if (parenthesized_expression "((p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7)))" ( (binary_expression "(p->op != 0xa6) && (uVar10 = 0, -1 < (int)(p->flags << 7))" (parenthesized_expression "(p->op != 0xa6)" ( (binary_expression "p->op != 0xa6" (field_expression "p->op" identifier -> field_identifier) != number_literal) )) && (parenthesized_expression "(uVar10 = 0, -1 < (int)(p->flags << 7))" ( (comma_expression "uVar10 = 0, -1 < (int)(p->flags << 7)" (assignment_expression "uVar10 = 0" identifier = number_literal) , (binary_expression "-1 < (int)(p->flags << 7)" number_literal < (cast_expression "(int)(p->flags << 7)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(p->flags << 7)" ( (binary_expression "p->flags << 7" (field_expression "p->flags" identifier -> field_identifier) << number_literal) ))))) ))) )) (compound_statement "{\n      if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }\n    }" { (if_statement "if (p->pLeft == (Expr *)0x0) {\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }\n      else {\n        uVar10 = 0x201c;\n      }" if (parenthesized_expression "(p->pLeft == (Expr *)0x0)" ( (binary_expression "p->pLeft == (Expr *)0x0" (field_expression "p->pLeft" identifier -> field_identifier) == (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        uVar10 = 0x400c;\n        if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }\n      }" { (expression_statement "uVar10 = 0x400c;" (assignment_expression "uVar10 = 0x400c" identifier = number_literal) ;) (if_statement "if ((p->x).pList != (ExprList *)0x0) {\n          uVar10 = 0x201c;\n        }" if (parenthesized_expression "((p->x).pList != (ExprList *)0x0)" ( (binary_expression "(p->x).pList != (ExprList *)0x0" (field_expression "(p->x).pList" (parenthesized_expression "(p->x)" ( (field_expression "p->x" identifier -> field_identifier) )) . field_identifier) != (cast_expression "(ExprList *)0x0" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          uVar10 = 0x201c;\n        }" { (expression_statement "uVar10 = 0x201c;" (assignment_expression "uVar10 = 0x201c" identifier = number_literal) ;) })) }) (else_clause "else {\n        uVar10 = 0x201c;\n      }" else (compound_statement "{\n        uVar10 = 0x201c;\n      }" { (expression_statement "uVar10 = 0x201c;" (assignment_expression "uVar10 = 0x201c" identifier = number_literal) ;) }))) })) (expression_statement "uVar15 = p->flags;" (assignment_expression "uVar15 = p->flags" identifier = (field_expression "p->flags" identifier -> field_identifier)) ;) (expression_statement "aVar16.iValue = uVar10 & 0xfff;" (assignment_expression "aVar16.iValue = uVar10 & 0xfff" (field_expression "aVar16.iValue" identifier . field_identifier) = (binary_expression "uVar10 & 0xfff" identifier & number_literal)) ;) (if_statement "if ((uVar15 & 0x400) == 0) {\n      z = (p->u).zToken;\n      if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }\n    }\n    else {\n      p_00.zToken = (char *)0x0;\n    }" if (parenthesized_expression "((uVar15 & 0x400) == 0)" ( (binary_expression "(uVar15 & 0x400) == 0" (parenthesized_expression "(uVar15 & 0x400)" ( (binary_expression "uVar15 & 0x400" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      z = (p->u).zToken;\n      if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }\n    }" { (expression_statement "z = (p->u).zToken;" (assignment_expression "z = (p->u).zToken" identifier = (field_expression "(p->u).zToken" (parenthesized_expression "(p->u)" ( (field_expression "p->u" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (z == (char *)0x0) {\n        p_00.zToken = (char *)0x0;\n      }\n      else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }" if (parenthesized_expression "(z == (char *)0x0)" ( (binary_expression "z == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        p_00.zToken = (char *)0x0;\n      }" { (expression_statement "p_00.zToken = (char *)0x0;" (assignment_expression "p_00.zToken = (char *)0x0" (field_expression "p_00.zToken" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }) (else_clause "else {\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }" else (compound_statement "{\nLAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);\n        p_00.zToken = (char *)(iVar5 + 1);\n        if (dupFlags == 0) goto LAB_0006bc08;\n      }" { (labeled_statement "LAB_0006bcbc:\n        iVar5 = sqlite3Strlen30(z);" statement_identifier : (expression_statement "iVar5 = sqlite3Strlen30(z);" (assignment_expression "iVar5 = sqlite3Strlen30(z)" identifier = (call_expression "sqlite3Strlen30(z)" identifier (argument_list "(z)" ( identifier )))) ;)) (expression_statement "p_00.zToken = (char *)(iVar5 + 1);" (assignment_expression "p_00.zToken = (char *)(iVar5 + 1)" (field_expression "p_00.zToken" identifier . field_identifier) = (cast_expression "(char *)(iVar5 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar5 + 1)" ( (binary_expression "iVar5 + 1" identifier + number_literal) )))) ;) (if_statement "if (dupFlags == 0) goto LAB_0006bc08;" if (parenthesized_expression "(dupFlags == 0)" ( (binary_expression "dupFlags == 0" identifier == number_literal) )) (goto_statement "goto LAB_0006bc08;" goto statement_identifier ;)) }))) }) (else_clause "else {\n      p_00.zToken = (char *)0x0;\n    }" else (compound_statement "{\n      p_00.zToken = (char *)0x0;\n    }" { (expression_statement "p_00.zToken = (char *)0x0;" (assignment_expression "p_00.zToken = (char *)0x0" (field_expression "p_00.zToken" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) (expression_statement "aVar12 = (anon_union_4_2_443a03b8_for_u)p;" (assignment_expression "aVar12 = (anon_union_4_2_443a03b8_for_u)p" identifier = (cast_expression "(anon_union_4_2_443a03b8_for_u)p" ( (type_descriptor "anon_union_4_2_443a03b8_for_u" type_identifier) ) identifier)) ;) (expression_statement "aVar14 = aVar16;" (assignment_expression "aVar14 = aVar16" identifier = identifier) ;) (expression_statement "(**(code **)(in_t9 + 0x1246e4))(pOwner);" (call_expression "(**(code **)(in_t9 + 0x1246e4))(pOwner)" (parenthesized_expression "(**(code **)(in_t9 + 0x1246e4))" ( (pointer_expression "**(code **)(in_t9 + 0x1246e4)" * (pointer_expression "*(code **)(in_t9 + 0x1246e4)" * (cast_expression "(code **)(in_t9 + 0x1246e4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x1246e4)" ( (binary_expression "in_t9 + 0x1246e4" identifier + number_literal) ))))) )) (argument_list "(pOwner)" ( identifier ))) ;) (labeled_statement "LAB_0006ba6c:\n    uVar15 = *(uint *)(pOwner + 4);" statement_identifier : (expression_statement "uVar15 = *(uint *)(pOwner + 4);" (assignment_expression "uVar15 = *(uint *)(pOwner + 4)" identifier = (pointer_expression "*(uint *)(pOwner + 4)" * (cast_expression "(uint *)(pOwner + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pOwner + 4)" ( (binary_expression "pOwner + 4" identifier + number_literal) ))))) ;)) }))) (expression_statement "*(uint *)(pOwner + 4) = uVar15 & 0xfffe1fff | uVar17 | uVar10 & 0x6000;" (assignment_expression "*(uint *)(pOwner + 4) = uVar15 & 0xfffe1fff | uVar17 | uVar10 & 0x6000" (pointer_expression "*(uint *)(pOwner + 4)" * (cast_expression "(uint *)(pOwner + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pOwner + 4)" ( (binary_expression "pOwner + 4" identifier + number_literal) )))) = (binary_expression "uVar15 & 0xfffe1fff | uVar17 | uVar10 & 0x6000" (binary_expression "uVar15 & 0xfffe1fff | uVar17" (binary_expression "uVar15 & 0xfffe1fff" identifier & number_literal) | identifier) | (binary_expression "uVar10 & 0x6000" identifier & number_literal))) ;) (if_statement "if (p_00.zToken == (char *)0x0) {\n    uVar17 = p->flags;\n    p_00 = aVar14;\n  }\n  else {\n    *(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken;\n    aVar12 = p->u;\n    (**(code **)(in_t9 + 0x1246e4))();\n    uVar17 = p->flags;\n  }" if (parenthesized_expression "(p_00.zToken == (char *)0x0)" ( (binary_expression "p_00.zToken == (char *)0x0" (field_expression "p_00.zToken" identifier . field_identifier) == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar17 = p->flags;\n    p_00 = aVar14;\n  }" { (expression_statement "uVar17 = p->flags;" (assignment_expression "uVar17 = p->flags" identifier = (field_expression "p->flags" identifier -> field_identifier)) ;) (expression_statement "p_00 = aVar14;" (assignment_expression "p_00 = aVar14" identifier = identifier) ;) }) (else_clause "else {\n    *(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken;\n    aVar12 = p->u;\n    (**(code **)(in_t9 + 0x1246e4))();\n    uVar17 = p->flags;\n  }" else (compound_statement "{\n    *(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken;\n    aVar12 = p->u;\n    (**(code **)(in_t9 + 0x1246e4))();\n    uVar17 = p->flags;\n  }" { (expression_statement "*(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken;" (assignment_expression "*(u8 **)(pOwner + 8) = zAlloc + (int)aVar16.zToken" (pointer_expression "*(u8 **)(pOwner + 8)" * (cast_expression "(u8 **)(pOwner + 8)" ( (type_descriptor "u8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 8)" ( (binary_expression "pOwner + 8" identifier + number_literal) )))) = (binary_expression "zAlloc + (int)aVar16.zToken" identifier + (cast_expression "(int)aVar16.zToken" ( (type_descriptor "int" primitive_type) ) (field_expression "aVar16.zToken" identifier . field_identifier)))) ;) (expression_statement "aVar12 = p->u;" (assignment_expression "aVar12 = p->u" identifier = (field_expression "p->u" identifier -> field_identifier)) ;) (expression_statement "(**(code **)(in_t9 + 0x1246e4))();" (call_expression "(**(code **)(in_t9 + 0x1246e4))()" (parenthesized_expression "(**(code **)(in_t9 + 0x1246e4))" ( (pointer_expression "**(code **)(in_t9 + 0x1246e4)" * (pointer_expression "*(code **)(in_t9 + 0x1246e4)" * (cast_expression "(code **)(in_t9 + 0x1246e4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x1246e4)" ( (binary_expression "in_t9 + 0x1246e4" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (expression_statement "uVar17 = p->flags;" (assignment_expression "uVar17 = p->flags" identifier = (field_expression "p->flags" identifier -> field_identifier)) ;) }))) (if_statement "if (((uVar17 | *(uint *)(pOwner + 4)) & 0x804000) == 0) {\n    if ((uVar17 & 0x800) == 0) {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;\n      p_00.iValue = dupFlags;\n      pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);\n      *(ExprList **)(pOwner + 0x14) = pEVar2;\n    }\n    else {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;\n      p_00.iValue = dupFlags;\n      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);\n      *(Select **)(pOwner + 0x14) = pSVar4;\n    }\n  }" if (parenthesized_expression "(((uVar17 | *(uint *)(pOwner + 4)) & 0x804000) == 0)" ( (binary_expression "((uVar17 | *(uint *)(pOwner + 4)) & 0x804000) == 0" (parenthesized_expression "((uVar17 | *(uint *)(pOwner + 4)) & 0x804000)" ( (binary_expression "(uVar17 | *(uint *)(pOwner + 4)) & 0x804000" (parenthesized_expression "(uVar17 | *(uint *)(pOwner + 4))" ( (binary_expression "uVar17 | *(uint *)(pOwner + 4)" identifier | (pointer_expression "*(uint *)(pOwner + 4)" * (cast_expression "(uint *)(pOwner + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pOwner + 4)" ( (binary_expression "pOwner + 4" identifier + number_literal) ))))) )) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((uVar17 & 0x800) == 0) {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;\n      p_00.iValue = dupFlags;\n      pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);\n      *(ExprList **)(pOwner + 0x14) = pEVar2;\n    }\n    else {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;\n      p_00.iValue = dupFlags;\n      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);\n      *(Select **)(pOwner + 0x14) = pSVar4;\n    }\n  }" { (if_statement "if ((uVar17 & 0x800) == 0) {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;\n      p_00.iValue = dupFlags;\n      pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);\n      *(ExprList **)(pOwner + 0x14) = pEVar2;\n    }\n    else {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;\n      p_00.iValue = dupFlags;\n      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);\n      *(Select **)(pOwner + 0x14) = pSVar4;\n    }" if (parenthesized_expression "((uVar17 & 0x800) == 0)" ( (binary_expression "(uVar17 & 0x800) == 0" (parenthesized_expression "(uVar17 & 0x800)" ( (binary_expression "uVar17 & 0x800" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;\n      p_00.iValue = dupFlags;\n      pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);\n      *(ExprList **)(pOwner + 0x14) = pEVar2;\n    }" { (expression_statement "aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList;" (assignment_expression "aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pList" identifier = (field_expression "(anon_union_4_2_443a03b8_for_u)(p->x).pList" (call_expression "(anon_union_4_2_443a03b8_for_u)(p->x)" (parenthesized_expression "(anon_union_4_2_443a03b8_for_u)" ( identifier )) (argument_list "(p->x)" ( (field_expression "p->x" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "p_00.iValue = dupFlags;" (assignment_expression "p_00.iValue = dupFlags" (field_expression "p_00.iValue" identifier . field_identifier) = identifier) ;) (expression_statement "pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags);" (assignment_expression "pEVar2 = sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags)" identifier = (call_expression "sqlite3ExprListDup(db,(ExprList *)aVar12.zToken,dupFlags)" identifier (argument_list "(db,(ExprList *)aVar12.zToken,dupFlags)" ( identifier , (cast_expression "(ExprList *)aVar12.zToken" ( (type_descriptor "ExprList *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "aVar12.zToken" identifier . field_identifier)) , identifier )))) ;) (expression_statement "*(ExprList **)(pOwner + 0x14) = pEVar2;" (assignment_expression "*(ExprList **)(pOwner + 0x14) = pEVar2" (pointer_expression "*(ExprList **)(pOwner + 0x14)" * (cast_expression "(ExprList **)(pOwner + 0x14)" ( (type_descriptor "ExprList **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 0x14)" ( (binary_expression "pOwner + 0x14" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;\n      p_00.iValue = dupFlags;\n      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);\n      *(Select **)(pOwner + 0x14) = pSVar4;\n    }" else (compound_statement "{\n      aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;\n      p_00.iValue = dupFlags;\n      pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);\n      *(Select **)(pOwner + 0x14) = pSVar4;\n    }" { (expression_statement "aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect;" (assignment_expression "aVar12 = (anon_union_4_2_443a03b8_for_u)(p->x).pSelect" identifier = (field_expression "(anon_union_4_2_443a03b8_for_u)(p->x).pSelect" (call_expression "(anon_union_4_2_443a03b8_for_u)(p->x)" (parenthesized_expression "(anon_union_4_2_443a03b8_for_u)" ( identifier )) (argument_list "(p->x)" ( (field_expression "p->x" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "p_00.iValue = dupFlags;" (assignment_expression "p_00.iValue = dupFlags" (field_expression "p_00.iValue" identifier . field_identifier) = identifier) ;) (expression_statement "pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags);" (assignment_expression "pSVar4 = sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags)" identifier = (call_expression "sqlite3SelectDup(db,(Select *)aVar12.zToken,dupFlags)" identifier (argument_list "(db,(Select *)aVar12.zToken,dupFlags)" ( identifier , (cast_expression "(Select *)aVar12.zToken" ( (type_descriptor "Select *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "aVar12.zToken" identifier . field_identifier)) , identifier )))) ;) (expression_statement "*(Select **)(pOwner + 0x14) = pSVar4;" (assignment_expression "*(Select **)(pOwner + 0x14) = pSVar4" (pointer_expression "*(Select **)(pOwner + 0x14)" * (cast_expression "(Select **)(pOwner + 0x14)" ( (type_descriptor "Select **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 0x14)" ( (binary_expression "pOwner + 0x14" identifier + number_literal) )))) = identifier) ;) }))) })) (expression_statement "uVar17 = *(uint *)(pOwner + 4);" (assignment_expression "uVar17 = *(uint *)(pOwner + 4)" identifier = (pointer_expression "*(uint *)(pOwner + 4)" * (cast_expression "(uint *)(pOwner + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pOwner + 4)" ( (binary_expression "pOwner + 4" identifier + number_literal) ))))) ;) (if_statement "if ((uVar17 & 0x1006000) == 0) {\n    if ((p->flags & 0x804000) == 0) {\n      if (*pOwner == 0xa6) {\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }\n      else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }\n      p_00.zToken = (char *)0x0;\n      aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;\n      pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n  }\n  else {\n    iVar5 = dupedExprNodeSize(p,dupFlags);\n    zAlloc = zAlloc + iVar5;\n    if ((uVar17 & 0x804000) == 0) {\n      pEVar6 = p->pLeft;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0xc) = pEVar6;\n      pEVar6 = p->pRight;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner;\n    if ((int)(p->flags << 7) < 0) {\n      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;\n      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);\n      *(Window **)(pOwner + 0x30) = pWVar3;\n    }\n    if (pzBuffer != (u8 **)0x0) {\n      *pzBuffer = zAlloc;\n    }\n  }" if (parenthesized_expression "((uVar17 & 0x1006000) == 0)" ( (binary_expression "(uVar17 & 0x1006000) == 0" (parenthesized_expression "(uVar17 & 0x1006000)" ( (binary_expression "uVar17 & 0x1006000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((p->flags & 0x804000) == 0) {\n      if (*pOwner == 0xa6) {\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }\n      else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }\n      p_00.zToken = (char *)0x0;\n      aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;\n      pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n  }" { (if_statement "if ((p->flags & 0x804000) == 0) {\n      if (*pOwner == 0xa6) {\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }\n      else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }\n      p_00.zToken = (char *)0x0;\n      aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;\n      pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }" if (parenthesized_expression "((p->flags & 0x804000) == 0)" ( (binary_expression "(p->flags & 0x804000) == 0" (parenthesized_expression "(p->flags & 0x804000)" ( (binary_expression "p->flags & 0x804000" (field_expression "p->flags" identifier -> field_identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (*pOwner == 0xa6) {\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }\n      else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }\n      p_00.zToken = (char *)0x0;\n      aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;\n      pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }" { (if_statement "if (*pOwner == 0xa6) {\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }\n      else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }" if (parenthesized_expression "(*pOwner == 0xa6)" ( (binary_expression "*pOwner == 0xa6" (pointer_expression "*pOwner" * identifier) == number_literal) )) (compound_statement "{\n        *(Expr **)(pOwner + 0xc) = p->pLeft;\n      }" { (expression_statement "*(Expr **)(pOwner + 0xc) = p->pLeft;" (assignment_expression "*(Expr **)(pOwner + 0xc) = p->pLeft" (pointer_expression "*(Expr **)(pOwner + 0xc)" * (cast_expression "(Expr **)(pOwner + 0xc)" ( (type_descriptor "Expr **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 0xc)" ( (binary_expression "pOwner + 0xc" identifier + number_literal) )))) = (field_expression "p->pLeft" identifier -> field_identifier)) ;) }) (else_clause "else {\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }" else (compound_statement "{\n        pEVar6 = sqlite3ExprDup(db,p->pLeft,0);\n        *(Expr **)(pOwner + 0xc) = pEVar6;\n      }" { (expression_statement "pEVar6 = sqlite3ExprDup(db,p->pLeft,0);" (assignment_expression "pEVar6 = sqlite3ExprDup(db,p->pLeft,0)" identifier = (call_expression "sqlite3ExprDup(db,p->pLeft,0)" identifier (argument_list "(db,p->pLeft,0)" ( identifier , (field_expression "p->pLeft" identifier -> field_identifier) , number_literal )))) ;) (expression_statement "*(Expr **)(pOwner + 0xc) = pEVar6;" (assignment_expression "*(Expr **)(pOwner + 0xc) = pEVar6" (pointer_expression "*(Expr **)(pOwner + 0xc)" * (cast_expression "(Expr **)(pOwner + 0xc)" ( (type_descriptor "Expr **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 0xc)" ( (binary_expression "pOwner + 0xc" identifier + number_literal) )))) = identifier) ;) }))) (expression_statement "p_00.zToken = (char *)0x0;" (assignment_expression "p_00.zToken = (char *)0x0" (field_expression "p_00.zToken" identifier . field_identifier) = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight;" (assignment_expression "aVar12 = (anon_union_4_2_443a03b8_for_u)p->pRight" identifier = (cast_expression "(anon_union_4_2_443a03b8_for_u)p->pRight" ( (type_descriptor "anon_union_4_2_443a03b8_for_u" type_identifier) ) (field_expression "p->pRight" identifier -> field_identifier))) ;) (expression_statement "pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0);" (assignment_expression "pEVar6 = sqlite3ExprDup(db,(Expr *)aVar12.zToken,0)" identifier = (call_expression "sqlite3ExprDup(db,(Expr *)aVar12.zToken,0)" identifier (argument_list "(db,(Expr *)aVar12.zToken,0)" ( identifier , (cast_expression "(Expr *)aVar12.zToken" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "aVar12.zToken" identifier . field_identifier)) , number_literal )))) ;) (expression_statement "*(Expr **)(pOwner + 0x10) = pEVar6;" (assignment_expression "*(Expr **)(pOwner + 0x10) = pEVar6" (pointer_expression "*(Expr **)(pOwner + 0x10)" * (cast_expression "(Expr **)(pOwner + 0x10)" ( (type_descriptor "Expr **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 0x10)" ( (binary_expression "pOwner + 0x10" identifier + number_literal) )))) = identifier) ;) })) }) (else_clause "else {\n    iVar5 = dupedExprNodeSize(p,dupFlags);\n    zAlloc = zAlloc + iVar5;\n    if ((uVar17 & 0x804000) == 0) {\n      pEVar6 = p->pLeft;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0xc) = pEVar6;\n      pEVar6 = p->pRight;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner;\n    if ((int)(p->flags << 7) < 0) {\n      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;\n      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);\n      *(Window **)(pOwner + 0x30) = pWVar3;\n    }\n    if (pzBuffer != (u8 **)0x0) {\n      *pzBuffer = zAlloc;\n    }\n  }" else (compound_statement "{\n    iVar5 = dupedExprNodeSize(p,dupFlags);\n    zAlloc = zAlloc + iVar5;\n    if ((uVar17 & 0x804000) == 0) {\n      pEVar6 = p->pLeft;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0xc) = pEVar6;\n      pEVar6 = p->pRight;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }\n    aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner;\n    if ((int)(p->flags << 7) < 0) {\n      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;\n      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);\n      *(Window **)(pOwner + 0x30) = pWVar3;\n    }\n    if (pzBuffer != (u8 **)0x0) {\n      *pzBuffer = zAlloc;\n    }\n  }" { (expression_statement "iVar5 = dupedExprNodeSize(p,dupFlags);" (assignment_expression "iVar5 = dupedExprNodeSize(p,dupFlags)" identifier = (call_expression "dupedExprNodeSize(p,dupFlags)" identifier (argument_list "(p,dupFlags)" ( identifier , identifier )))) ;) (expression_statement "zAlloc = zAlloc + iVar5;" (assignment_expression "zAlloc = zAlloc + iVar5" identifier = (binary_expression "zAlloc + iVar5" identifier + identifier)) ;) (if_statement "if ((uVar17 & 0x804000) == 0) {\n      pEVar6 = p->pLeft;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0xc) = pEVar6;\n      pEVar6 = p->pRight;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }" if (parenthesized_expression "((uVar17 & 0x804000) == 0)" ( (binary_expression "(uVar17 & 0x804000) == 0" (parenthesized_expression "(uVar17 & 0x804000)" ( (binary_expression "uVar17 & 0x804000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      pEVar6 = p->pLeft;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0xc) = pEVar6;\n      pEVar6 = p->pRight;\n      if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }\n      *(Expr **)(pOwner + 0x10) = pEVar6;\n    }" { (expression_statement "pEVar6 = p->pLeft;" (assignment_expression "pEVar6 = p->pLeft" identifier = (field_expression "p->pLeft" identifier -> field_identifier)) ;) (if_statement "if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }" if (parenthesized_expression "(pEVar6 != (Expr *)0x0)" ( (binary_expression "pEVar6 != (Expr *)0x0" identifier != (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }" { (expression_statement "p_00.iValue = 1;" (assignment_expression "p_00.iValue = 1" (field_expression "p_00.iValue" identifier . field_identifier) = number_literal) ;) (expression_statement "pEVar6 = exprDup(db,pEVar6,1,&zAlloc);" (assignment_expression "pEVar6 = exprDup(db,pEVar6,1,&zAlloc)" identifier = (call_expression "exprDup(db,pEVar6,1,&zAlloc)" identifier (argument_list "(db,pEVar6,1,&zAlloc)" ( identifier , identifier , number_literal , (pointer_expression "&zAlloc" & identifier) )))) ;) })) (expression_statement "*(Expr **)(pOwner + 0xc) = pEVar6;" (assignment_expression "*(Expr **)(pOwner + 0xc) = pEVar6" (pointer_expression "*(Expr **)(pOwner + 0xc)" * (cast_expression "(Expr **)(pOwner + 0xc)" ( (type_descriptor "Expr **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 0xc)" ( (binary_expression "pOwner + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "pEVar6 = p->pRight;" (assignment_expression "pEVar6 = p->pRight" identifier = (field_expression "p->pRight" identifier -> field_identifier)) ;) (if_statement "if (pEVar6 != (Expr *)0x0) {\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }" if (parenthesized_expression "(pEVar6 != (Expr *)0x0)" ( (binary_expression "pEVar6 != (Expr *)0x0" identifier != (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        p_00.iValue = 1;\n        pEVar6 = exprDup(db,pEVar6,1,&zAlloc);\n      }" { (expression_statement "p_00.iValue = 1;" (assignment_expression "p_00.iValue = 1" (field_expression "p_00.iValue" identifier . field_identifier) = number_literal) ;) (expression_statement "pEVar6 = exprDup(db,pEVar6,1,&zAlloc);" (assignment_expression "pEVar6 = exprDup(db,pEVar6,1,&zAlloc)" identifier = (call_expression "exprDup(db,pEVar6,1,&zAlloc)" identifier (argument_list "(db,pEVar6,1,&zAlloc)" ( identifier , identifier , number_literal , (pointer_expression "&zAlloc" & identifier) )))) ;) })) (expression_statement "*(Expr **)(pOwner + 0x10) = pEVar6;" (assignment_expression "*(Expr **)(pOwner + 0x10) = pEVar6" (pointer_expression "*(Expr **)(pOwner + 0x10)" * (cast_expression "(Expr **)(pOwner + 0x10)" ( (type_descriptor "Expr **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 0x10)" ( (binary_expression "pOwner + 0x10" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner;" (assignment_expression "aVar12 = (anon_union_4_2_443a03b8_for_u)pOwner" identifier = (cast_expression "(anon_union_4_2_443a03b8_for_u)pOwner" ( (type_descriptor "anon_union_4_2_443a03b8_for_u" type_identifier) ) identifier)) ;) (if_statement "if ((int)(p->flags << 7) < 0) {\n      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;\n      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);\n      *(Window **)(pOwner + 0x30) = pWVar3;\n    }" if (parenthesized_expression "((int)(p->flags << 7) < 0)" ( (binary_expression "(int)(p->flags << 7) < 0" (cast_expression "(int)(p->flags << 7)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(p->flags << 7)" ( (binary_expression "p->flags << 7" (field_expression "p->flags" identifier -> field_identifier) << number_literal) ))) < number_literal) )) (compound_statement "{\n      p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;\n      pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);\n      *(Window **)(pOwner + 0x30) = pWVar3;\n    }" { (expression_statement "p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin;" (assignment_expression "p_00 = (anon_union_4_2_443a03b8_for_u)(p->y).pWin" identifier = (field_expression "(anon_union_4_2_443a03b8_for_u)(p->y).pWin" (call_expression "(anon_union_4_2_443a03b8_for_u)(p->y)" (parenthesized_expression "(anon_union_4_2_443a03b8_for_u)" ( identifier )) (argument_list "(p->y)" ( (field_expression "p->y" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken);" (assignment_expression "pWVar3 = sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken)" identifier = (call_expression "sqlite3WindowDup(db,(Expr *)pOwner,(Window *)p_00.zToken)" identifier (argument_list "(db,(Expr *)pOwner,(Window *)p_00.zToken)" ( identifier , (cast_expression "(Expr *)pOwner" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(Window *)p_00.zToken" ( (type_descriptor "Window *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "p_00.zToken" identifier . field_identifier)) )))) ;) (expression_statement "*(Window **)(pOwner + 0x30) = pWVar3;" (assignment_expression "*(Window **)(pOwner + 0x30) = pWVar3" (pointer_expression "*(Window **)(pOwner + 0x30)" * (cast_expression "(Window **)(pOwner + 0x30)" ( (type_descriptor "Window **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pOwner + 0x30)" ( (binary_expression "pOwner + 0x30" identifier + number_literal) )))) = identifier) ;) })) (if_statement "if (pzBuffer != (u8 **)0x0) {\n      *pzBuffer = zAlloc;\n    }" if (parenthesized_expression "(pzBuffer != (u8 **)0x0)" ( (binary_expression "pzBuffer != (u8 **)0x0" identifier != (cast_expression "(u8 **)0x0" ( (type_descriptor "u8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      *pzBuffer = zAlloc;\n    }" { (expression_statement "*pzBuffer = zAlloc;" (assignment_expression "*pzBuffer = zAlloc" (pointer_expression "*pzBuffer" * identifier) = identifier) ;) })) }))) (labeled_statement "LAB_0006bbac:\n  if (psStack_2c == (sqlite3 *)**(int **)(in_t9 + 0x1246dc)) {\n    return (Expr *)pOwner;\n  }" statement_identifier : (if_statement "if (psStack_2c == (sqlite3 *)**(int **)(in_t9 + 0x1246dc)) {\n    return (Expr *)pOwner;\n  }" if (parenthesized_expression "(psStack_2c == (sqlite3 *)**(int **)(in_t9 + 0x1246dc))" ( (binary_expression "psStack_2c == (sqlite3 *)**(int **)(in_t9 + 0x1246dc)" identifier == (cast_expression "(sqlite3 *)**(int **)(in_t9 + 0x1246dc)" ( (type_descriptor "sqlite3 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(int **)(in_t9 + 0x1246dc)" * (pointer_expression "*(int **)(in_t9 + 0x1246dc)" * (cast_expression "(int **)(in_t9 + 0x1246dc)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x1246dc)" ( (binary_expression "in_t9 + 0x1246dc" identifier + number_literal) ))))))) )) (compound_statement "{\n    return (Expr *)pOwner;\n  }" { (return_statement "return (Expr *)pOwner;" return (cast_expression "(Expr *)pOwner" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ;) }))) (expression_statement "db_00 = psStack_2c;" (assignment_expression "db_00 = psStack_2c" identifier = identifier) ;) (expression_statement "(**(code **)(in_t9 + 0x1246b0))();" (call_expression "(**(code **)(in_t9 + 0x1246b0))()" (parenthesized_expression "(**(code **)(in_t9 + 0x1246b0))" ( (pointer_expression "**(code **)(in_t9 + 0x1246b0)" * (pointer_expression "*(code **)(in_t9 + 0x1246b0)" * (cast_expression "(code **)(in_t9 + 0x1246b0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_t9 + 0x1246b0)" ( (binary_expression "in_t9 + 0x1246b0" identifier + number_literal) ))))) )) (argument_list "()" ( ))) ;) (if_statement "if (aVar12.zToken == (char *)0x0) {\n    return (Expr *)0x0;\n  }" if (parenthesized_expression "(aVar12.zToken == (char *)0x0)" ( (binary_expression "aVar12.zToken == (char *)0x0" (field_expression "aVar12.zToken" identifier . field_identifier) == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (Expr *)0x0;\n  }" { (return_statement "return (Expr *)0x0;" return (cast_expression "(Expr *)0x0" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "pEVar6 = exprDup(db_00,(Expr *)aVar12.zToken,p_00.iValue,(u8 **)0x0);" (assignment_expression "pEVar6 = exprDup(db_00,(Expr *)aVar12.zToken,p_00.iValue,(u8 **)0x0)" identifier = (call_expression "exprDup(db_00,(Expr *)aVar12.zToken,p_00.iValue,(u8 **)0x0)" identifier (argument_list "(db_00,(Expr *)aVar12.zToken,p_00.iValue,(u8 **)0x0)" ( identifier , (cast_expression "(Expr *)aVar12.zToken" ( (type_descriptor "Expr *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "aVar12.zToken" identifier . field_identifier)) , (field_expression "p_00.iValue" identifier . field_identifier) , (cast_expression "(u8 **)0x0" ( (type_descriptor "u8 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal) )))) ;) (return_statement "return pEVar6;" return identifier ;) })))
(translation_unit "char * FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  char *pcVar5;\n  uint uVar6;\n  char *pcVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  int iVar14;\n  char *local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;\n  pcVar7 = param_3;\n  if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }\n  pcVar1 = local_30;\n  if (local_30 == (char *)0x0) goto LAB_0006bbac;\n  if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;\n  if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }\n  uVar13 = *(uint *)(pcVar1 + 4);\n  if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }\nLAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  pcVar7 = (char *)FUN_0006b7f0();\n  return pcVar7;\n}\n\n" (function_definition "char * FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  char *pcVar5;\n  uint uVar6;\n  char *pcVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  int iVar14;\n  char *local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;\n  pcVar7 = param_3;\n  if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }\n  pcVar1 = local_30;\n  if (local_30 == (char *)0x0) goto LAB_0006bbac;\n  if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;\n  if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }\n  uVar13 = *(uint *)(pcVar1 + 4);\n  if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }\nLAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  pcVar7 = (char *)FUN_0006b7f0();\n  return pcVar7;\n}" primitive_type (pointer_declarator "* FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" * (function_declarator "FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" identifier (parameter_list "(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "char *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "undefined4 *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) )))) (compound_statement "{\n  char *pcVar1;\n  char *pcVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  char *pcVar5;\n  uint uVar6;\n  char *pcVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  int iVar14;\n  char *local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;\n  pcVar7 = param_3;\n  if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }\n  pcVar1 = local_30;\n  if (local_30 == (char *)0x0) goto LAB_0006bbac;\n  if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;\n  if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }\n  uVar13 = *(uint *)(pcVar1 + 4);\n  if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }\nLAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  pcVar7 = (char *)FUN_0006b7f0();\n  return pcVar7;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "char *pcVar4;" primitive_type (pointer_declarator "*pcVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "int iVar14;" primitive_type identifier ;) (declaration "char *local_30;" primitive_type (pointer_declarator "*local_30" * identifier) ;) (declaration "int local_2c;" primitive_type identifier ;) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_0018fecc;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_0018fecc" identifier = (pointer_expression "*(int *)PTR___stack_chk_guard_0018fecc" * (cast_expression "(int *)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "pcVar7 = param_3;" (assignment_expression "pcVar7 = param_3" identifier = identifier) ;) (if_statement "if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" if (parenthesized_expression "(param_4 == (undefined4 *)0x0)" ( (binary_expression "param_4 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }" { (expression_statement "FUN_0005c058(param_2);" (call_expression "FUN_0005c058(param_2)" identifier (argument_list "(param_2)" ( identifier ))) ;) (expression_statement "local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);" (assignment_expression "local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" identifier = (cast_expression "(char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" (parenthesized_expression "(*(code *)(PTR_LAB_0018fb58 + 0x1414))" ( (pointer_expression "*(code *)(PTR_LAB_0018fb58 + 0x1414)" * (cast_expression "(code *)(PTR_LAB_0018fb58 + 0x1414)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_0018fb58 + 0x1414)" ( (binary_expression "PTR_LAB_0018fb58 + 0x1414" identifier + number_literal) )))) )) (argument_list "(param_1)" ( identifier ))))) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) }) (else_clause "else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" else (compound_statement "{\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" { (expression_statement "local_30 = (char *)*param_4;" (assignment_expression "local_30 = (char *)*param_4" identifier = (cast_expression "(char *)*param_4" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_4" * identifier))) ;) (expression_statement "uVar13 = 0x8000;" (assignment_expression "uVar13 = 0x8000" identifier = number_literal) ;) }))) (expression_statement "pcVar1 = local_30;" (assignment_expression "pcVar1 = local_30" identifier = identifier) ;) (if_statement "if (local_30 == (char *)0x0) goto LAB_0006bbac;" if (parenthesized_expression "(local_30 == (char *)0x0)" ( (binary_expression "local_30 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0006bbac;" goto statement_identifier ;)) (if_statement "if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" if (parenthesized_expression "(param_3 == (char *)0x0)" ( (binary_expression "param_3 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" { (expression_statement "uVar11 = *(uint *)(param_2 + 4);" (assignment_expression "uVar11 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (if_statement "if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" if (parenthesized_expression "(((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0))" ( (binary_expression "((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)" (parenthesized_expression "((uVar11 & 0x400) == 0)" ( (binary_expression "(uVar11 & 0x400) == 0" (parenthesized_expression "(uVar11 & 0x400)" ( (binary_expression "uVar11 & 0x400" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(uVar12 = 0x38, *(int *)(param_2 + 8) != 0)" ( (comma_expression "uVar12 = 0x38, *(int *)(param_2 + 8) != 0" (assignment_expression "uVar12 = 0x38" identifier = number_literal) , (binary_expression "*(int *)(param_2 + 8) != 0" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) != number_literal)) ))) )) (compound_statement "{\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }" { (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0006bcbc:\n      iVar14 = FUN_0005b438();" statement_identifier : (expression_statement "iVar14 = FUN_0005b438();" (assignment_expression "iVar14 = FUN_0005b438()" identifier = (call_expression "FUN_0005b438()" identifier (argument_list "()" ( )))) ;)) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" identifier = (binary_expression "iVar14 + 1" identifier + number_literal)) ;) (if_statement "if (param_3 != (char *)0x0) goto LAB_0006ba50;" if (parenthesized_expression "(param_3 != (char *)0x0)" ( (binary_expression "param_3 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0006ba50;" goto statement_identifier ;)) }) (else_clause "else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" else (compound_statement "{\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" { (expression_statement "uVar12 = 0x38;" (assignment_expression "uVar12 = 0x38" identifier = number_literal) ;) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" identifier = number_literal) ;) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) }))) (if_statement "if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }" if (parenthesized_expression "((uVar11 & 0x4000) == 0)" ( (binary_expression "(uVar11 & 0x4000) == 0" (parenthesized_expression "(uVar11 & 0x4000)" ( (binary_expression "uVar11 & 0x4000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }" { (if_statement "if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }" if (parenthesized_expression "((uVar11 & 0x2000) == 0)" ( (binary_expression "(uVar11 & 0x2000) == 0" (parenthesized_expression "(uVar11 & 0x2000)" ( (binary_expression "uVar11 & 0x2000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }" { (expression_statement "pcVar2 = pcVar1;" (assignment_expression "pcVar2 = pcVar1" identifier = identifier) ;) (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" identifier = identifier) ;) (do_statement "do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);" do (compound_statement "{\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        }" { (expression_statement "pcVar5 = pcVar7;" (assignment_expression "pcVar5 = pcVar7" identifier = identifier) ;) (expression_statement "pcVar4 = pcVar2;" (assignment_expression "pcVar4 = pcVar2" identifier = identifier) ;) (expression_statement "uVar9 = *(undefined4 *)(pcVar5 + 4);" (assignment_expression "uVar9 = *(undefined4 *)(pcVar5 + 4)" identifier = (pointer_expression "*(undefined4 *)(pcVar5 + 4)" * (cast_expression "(undefined4 *)(pcVar5 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 4)" ( (binary_expression "pcVar5 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar8 = *(undefined4 *)(pcVar5 + 8);" (assignment_expression "uVar8 = *(undefined4 *)(pcVar5 + 8)" identifier = (pointer_expression "*(undefined4 *)(pcVar5 + 8)" * (cast_expression "(undefined4 *)(pcVar5 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 8)" ( (binary_expression "pcVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = *(undefined4 *)(pcVar5 + 0xc);" (assignment_expression "uVar3 = *(undefined4 *)(pcVar5 + 0xc)" identifier = (pointer_expression "*(undefined4 *)(pcVar5 + 0xc)" * (cast_expression "(undefined4 *)(pcVar5 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xc)" ( (binary_expression "pcVar5 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;" (assignment_expression "*(undefined4 *)pcVar4 = *(undefined4 *)pcVar5" (pointer_expression "*(undefined4 *)pcVar4" * (cast_expression "(undefined4 *)pcVar4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = (pointer_expression "*(undefined4 *)pcVar5" * (cast_expression "(undefined4 *)pcVar5" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined4 *)(pcVar4 + 4) = uVar9;" (assignment_expression "*(undefined4 *)(pcVar4 + 4) = uVar9" (pointer_expression "*(undefined4 *)(pcVar4 + 4)" * (cast_expression "(undefined4 *)(pcVar4 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 4)" ( (binary_expression "pcVar4 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(pcVar4 + 8) = uVar8;" (assignment_expression "*(undefined4 *)(pcVar4 + 8) = uVar8" (pointer_expression "*(undefined4 *)(pcVar4 + 8)" * (cast_expression "(undefined4 *)(pcVar4 + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 8)" ( (binary_expression "pcVar4 + 8" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(pcVar4 + 0xc) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar4 + 0xc) = uVar3" (pointer_expression "*(undefined4 *)(pcVar4 + 0xc)" * (cast_expression "(undefined4 *)(pcVar4 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 0xc)" ( (binary_expression "pcVar4 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "pcVar7 = pcVar5 + 0x10;" (assignment_expression "pcVar7 = pcVar5 + 0x10" identifier = (binary_expression "pcVar5 + 0x10" identifier + number_literal)) ;) (expression_statement "pcVar2 = pcVar4 + 0x10;" (assignment_expression "pcVar2 = pcVar4 + 0x10" identifier = (binary_expression "pcVar4 + 0x10" identifier + number_literal)) ;) }) while (parenthesized_expression "(pcVar7 != param_2 + 0x30)" ( (binary_expression "pcVar7 != param_2 + 0x30" identifier != (binary_expression "param_2 + 0x30" identifier + number_literal)) )) ;) (expression_statement "pcVar7 = *(char **)pcVar7;" (assignment_expression "pcVar7 = *(char **)pcVar7" identifier = (pointer_expression "*(char **)pcVar7" * (cast_expression "(char **)pcVar7" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "uVar3 = *(undefined4 *)(pcVar5 + 0x14);" (assignment_expression "uVar3 = *(undefined4 *)(pcVar5 + 0x14)" identifier = (pointer_expression "*(undefined4 *)(pcVar5 + 0x14)" * (cast_expression "(undefined4 *)(pcVar5 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x14)" ( (binary_expression "pcVar5 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "*(char **)(pcVar4 + 0x10) = pcVar7;" (assignment_expression "*(char **)(pcVar4 + 0x10) = pcVar7" (pointer_expression "*(char **)(pcVar4 + 0x10)" * (cast_expression "(char **)(pcVar4 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar4 + 0x10)" ( (binary_expression "pcVar4 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)(pcVar4 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar4 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar4 + 0x14)" * (cast_expression "(undefined4 *)(pcVar4 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 0x14)" ( (binary_expression "pcVar4 + 0x14" identifier + number_literal) )))) = identifier) ;) (goto_statement "goto LAB_0006ba6c;" goto statement_identifier ;) })) (expression_statement "iVar10 = 0x1c;" (assignment_expression "iVar10 = 0x1c" identifier = number_literal) ;) }) (else_clause "else {\n      iVar10 = 0xc;\n    }" else (compound_statement "{\n      iVar10 = 0xc;\n    }" { (expression_statement "iVar10 = 0xc;" (assignment_expression "iVar10 = 0xc" identifier = number_literal) ;) }))) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" ( (pointer_expression "*(code *)PTR_memcpy_0018fed4" * (cast_expression "(code *)PTR_memcpy_0018fed4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pcVar1,param_2,iVar10)" ( identifier , identifier , identifier ))) ;) (expression_statement "pcVar7 = (char *)0x0;" (assignment_expression "pcVar7 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "(*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);" (call_expression "(*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10)" (parenthesized_expression "(*(code *)PTR_memset_0018fe00)" ( (pointer_expression "*(code *)PTR_memset_0018fe00" * (cast_expression "(code *)PTR_memset_0018fe00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_30 + iVar10,0,0x38 - iVar10)" ( (binary_expression "local_30 + iVar10" identifier + identifier) , number_literal , (binary_expression "0x38 - iVar10" number_literal - identifier) ))) ;) (expression_statement "uVar11 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar11 = *(uint *)(pcVar1 + 4)" identifier = (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" else (compound_statement "{\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" { (expression_statement "uVar6 = 0x38;" (assignment_expression "uVar6 = 0x38" identifier = number_literal) ;) (if_statement "if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }" if (parenthesized_expression "((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7))" ( (binary_expression "(*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)" (parenthesized_expression "(*param_2 != -0x5a)" ( (binary_expression "*param_2 != -0x5a" (pointer_expression "*param_2" * identifier) != number_literal) )) && (parenthesized_expression "(uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)" ( (comma_expression "uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7" (assignment_expression "uVar6 = 0" identifier = number_literal) , (binary_expression "-1 < *(int *)(param_2 + 4) << 7" number_literal < (binary_expression "*(int *)(param_2 + 4) << 7" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) << number_literal))) ))) )) (compound_statement "{\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }" { (if_statement "if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }" if (parenthesized_expression "(*(int *)(param_2 + 0xc) == 0)" ( (binary_expression "*(int *)(param_2 + 0xc) == 0" (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }" { (expression_statement "uVar6 = 0x400c;" (assignment_expression "uVar6 = 0x400c" identifier = number_literal) ;) (if_statement "if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }" if (parenthesized_expression "(*(int *)(param_2 + 0x14) != 0)" ( (binary_expression "*(int *)(param_2 + 0x14) != 0" (pointer_expression "*(int *)(param_2 + 0x14)" * (cast_expression "(int *)(param_2 + 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n          uVar6 = 0x201c;\n        }" { (expression_statement "uVar6 = 0x201c;" (assignment_expression "uVar6 = 0x201c" identifier = number_literal) ;) })) }) (else_clause "else {\n        uVar6 = 0x201c;\n      }" else (compound_statement "{\n        uVar6 = 0x201c;\n      }" { (expression_statement "uVar6 = 0x201c;" (assignment_expression "uVar6 = 0x201c" identifier = number_literal) ;) }))) })) (expression_statement "uVar11 = *(uint *)(param_2 + 4);" (assignment_expression "uVar11 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) (expression_statement "uVar12 = uVar6 & 0xfff;" (assignment_expression "uVar12 = uVar6 & 0xfff" identifier = (binary_expression "uVar6 & 0xfff" identifier & number_literal)) ;) (if_statement "if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }" if (parenthesized_expression "((uVar11 & 0x400) == 0)" ( (binary_expression "(uVar11 & 0x400) == 0" (parenthesized_expression "(uVar11 & 0x400)" ( (binary_expression "uVar11 & 0x400" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }" { (if_statement "if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;" if (parenthesized_expression "(*(int *)(param_2 + 8) != 0)" ( (binary_expression "*(int *)(param_2 + 8) != 0" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) != number_literal) )) (goto_statement "goto LAB_0006bcbc;" goto statement_identifier ;)) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) }) (else_clause "else {\n      iVar14 = 0;\n    }" else (compound_statement "{\n      iVar14 = 0;\n    }" { (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" identifier = number_literal) ;) }))) (labeled_statement "LAB_0006ba50:\n    pcVar7 = param_2;" statement_identifier : (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" identifier = identifier) ;)) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" ( (pointer_expression "*(code *)PTR_memcpy_0018fed4" * (cast_expression "(code *)PTR_memcpy_0018fed4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pcVar1,param_2,uVar12)" ( identifier , identifier , identifier ))) ;) (labeled_statement "LAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);" statement_identifier : (expression_statement "uVar11 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar11 = *(uint *)(pcVar1 + 4)" identifier = (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) ))))) ;)) }))) (expression_statement "*(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;" (assignment_expression "*(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000" (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) )))) = (binary_expression "uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000" (binary_expression "uVar11 & 0xfffe1fff | uVar13" (binary_expression "uVar11 & 0xfffe1fff" identifier & number_literal) | identifier) | (binary_expression "uVar6 & 0x6000" identifier & number_literal))) ;) (if_statement "if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" if (parenthesized_expression "(iVar14 == 0)" ( (binary_expression "iVar14 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar13 = *(uint *)(param_2 + 4);\n  }" { (expression_statement "uVar13 = *(uint *)(param_2 + 4);" (assignment_expression "uVar13 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) }) (else_clause "else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" else (compound_statement "{\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" { (expression_statement "*(char **)(pcVar1 + 8) = local_30 + uVar12;" (assignment_expression "*(char **)(pcVar1 + 8) = local_30 + uVar12" (pointer_expression "*(char **)(pcVar1 + 8)" * (cast_expression "(char **)(pcVar1 + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pcVar1 + 8)" ( (binary_expression "pcVar1 + 8" identifier + number_literal) )))) = (binary_expression "local_30 + uVar12" identifier + identifier)) ;) (expression_statement "pcVar7 = *(char **)(param_2 + 8);" (assignment_expression "pcVar7 = *(char **)(param_2 + 8)" identifier = (pointer_expression "*(char **)(param_2 + 8)" * (cast_expression "(char **)(param_2 + 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" ( (pointer_expression "*(code *)PTR_memcpy_0018fed4" * (cast_expression "(code *)PTR_memcpy_0018fed4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_30 + uVar12,pcVar7,iVar14)" ( (binary_expression "local_30 + uVar12" identifier + identifier) , identifier , identifier ))) ;) (expression_statement "uVar13 = *(uint *)(param_2 + 4);" (assignment_expression "uVar13 = *(uint *)(param_2 + 4)" identifier = (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;) }))) (if_statement "if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }" if (parenthesized_expression "(((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0)" ( (binary_expression "((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0" (parenthesized_expression "((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000)" ( (binary_expression "(uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000" (parenthesized_expression "(uVar13 | *(uint *)(pcVar1 + 4))" ( (binary_expression "uVar13 | *(uint *)(pcVar1 + 4)" identifier | (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) ))))) )) & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }" { (if_statement "if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" if (parenthesized_expression "((uVar13 & 0x800) == 0)" ( (binary_expression "(uVar13 & 0x800) == 0" (parenthesized_expression "(uVar13 & 0x800)" ( (binary_expression "uVar13 & 0x800" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" { (expression_statement "pcVar7 = *(char **)(param_2 + 0x14);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x14)" identifier = (pointer_expression "*(char **)(param_2 + 0x14)" * (cast_expression "(char **)(param_2 + 0x14)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);" (assignment_expression "uVar3 = FUN_0006bd40(param_1,pcVar7,param_3)" identifier = (call_expression "FUN_0006bd40(param_1,pcVar7,param_3)" identifier (argument_list "(param_1,pcVar7,param_3)" ( identifier , identifier , identifier )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x14)" * (cast_expression "(undefined4 *)(pcVar1 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x14)" ( (binary_expression "pcVar1 + 0x14" identifier + number_literal) )))) = identifier) ;) }) (else_clause "else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" else (compound_statement "{\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" { (expression_statement "pcVar7 = *(char **)(param_2 + 0x14);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x14)" identifier = (pointer_expression "*(char **)(param_2 + 0x14)" * (cast_expression "(char **)(param_2 + 0x14)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0x14)" ( (binary_expression "param_2 + 0x14" identifier + number_literal) ))))) ;) (expression_statement "uVar3 = FUN_0006b40c(param_1);" (assignment_expression "uVar3 = FUN_0006b40c(param_1)" identifier = (call_expression "FUN_0006b40c(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x14)" * (cast_expression "(undefined4 *)(pcVar1 + 0x14)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x14)" ( (binary_expression "pcVar1 + 0x14" identifier + number_literal) )))) = identifier) ;) }))) })) (expression_statement "uVar13 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar13 = *(uint *)(pcVar1 + 4)" identifier = (pointer_expression "*(uint *)(pcVar1 + 4)" * (cast_expression "(uint *)(pcVar1 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 4)" ( (binary_expression "pcVar1 + 4" identifier + number_literal) ))))) ;) (if_statement "if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" if (parenthesized_expression "((uVar13 & 0x1006000) == 0)" ( (binary_expression "(uVar13 & 0x1006000) == 0" (parenthesized_expression "(uVar13 & 0x1006000)" ( (binary_expression "uVar13 & 0x1006000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }" { (if_statement "if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }" if (parenthesized_expression "((*(uint *)(param_2 + 4) & 0x804000) == 0)" ( (binary_expression "(*(uint *)(param_2 + 4) & 0x804000) == 0" (parenthesized_expression "(*(uint *)(param_2 + 4) & 0x804000)" ( (binary_expression "*(uint *)(param_2 + 4) & 0x804000" (pointer_expression "*(uint *)(param_2 + 4)" * (cast_expression "(uint *)(param_2 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }" { (if_statement "if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" if (parenthesized_expression "(*pcVar1 == -0x5a)" ( (binary_expression "*pcVar1 == -0x5a" (pointer_expression "*pcVar1" * identifier) == number_literal) )) (compound_statement "{\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }" { (expression_statement "*(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);" (assignment_expression "*(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc)" (pointer_expression "*(undefined4 *)(pcVar1 + 0xc)" * (cast_expression "(undefined4 *)(pcVar1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0xc)" ( (binary_expression "pcVar1 + 0xc" identifier + number_literal) )))) = (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) }) (else_clause "else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" else (compound_statement "{\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" { (expression_statement "uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);" (assignment_expression "uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0)" identifier = (call_expression "FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0)" identifier (argument_list "(param_1,*(undefined4 *)(param_2 + 0xc),0)" ( identifier , (pointer_expression "*(undefined4 *)(param_2 + 0xc)" * (cast_expression "(undefined4 *)(param_2 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) )))) , number_literal )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0xc) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0xc) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0xc)" * (cast_expression "(undefined4 *)(pcVar1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0xc)" ( (binary_expression "pcVar1 + 0xc" identifier + number_literal) )))) = identifier) ;) }))) (expression_statement "pcVar7 = *(char **)(param_2 + 0x10);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x10)" identifier = (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) ))))) ;) (expression_statement "uVar3 = FUN_0006bcf4(param_1,pcVar7,0);" (assignment_expression "uVar3 = FUN_0006bcf4(param_1,pcVar7,0)" identifier = (call_expression "FUN_0006bcf4(param_1,pcVar7,0)" identifier (argument_list "(param_1,pcVar7,0)" ( identifier , identifier , number_literal )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0x10) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x10) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x10)" * (cast_expression "(undefined4 *)(pcVar1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x10)" ( (binary_expression "pcVar1 + 0x10" identifier + number_literal) )))) = identifier) ;) })) }) (else_clause "else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" else (compound_statement "{\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" { (expression_statement "iVar14 = FUN_0005bf8c(param_2,param_3);" (assignment_expression "iVar14 = FUN_0005bf8c(param_2,param_3)" identifier = (call_expression "FUN_0005bf8c(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier )))) ;) (expression_statement "local_30 = local_30 + iVar14;" (assignment_expression "local_30 = local_30 + iVar14" identifier = (binary_expression "local_30 + iVar14" identifier + identifier)) ;) (if_statement "if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }" if (parenthesized_expression "((uVar13 & 0x804000) == 0)" ( (binary_expression "(uVar13 & 0x804000) == 0" (parenthesized_expression "(uVar13 & 0x804000)" ( (binary_expression "uVar13 & 0x804000" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }" { (expression_statement "iVar14 = *(int *)(param_2 + 0xc);" (assignment_expression "iVar14 = *(int *)(param_2 + 0xc)" identifier = (pointer_expression "*(int *)(param_2 + 0xc)" * (cast_expression "(int *)(param_2 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xc)" ( (binary_expression "param_2 + 0xc" identifier + number_literal) ))))) ;) (if_statement "if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" { (expression_statement "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);" (assignment_expression "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30)" identifier = (call_expression "FUN_0006b7f0(param_1,iVar14,1,&local_30)" identifier (argument_list "(param_1,iVar14,1,&local_30)" ( identifier , identifier , number_literal , (pointer_expression "&local_30" & identifier) )))) ;) })) (expression_statement "*(int *)(pcVar1 + 0xc) = iVar14;" (assignment_expression "*(int *)(pcVar1 + 0xc) = iVar14" (pointer_expression "*(int *)(pcVar1 + 0xc)" * (cast_expression "(int *)(pcVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0xc)" ( (binary_expression "pcVar1 + 0xc" identifier + number_literal) )))) = identifier) ;) (expression_statement "iVar14 = *(int *)(param_2 + 0x10);" (assignment_expression "iVar14 = *(int *)(param_2 + 0x10)" identifier = (pointer_expression "*(int *)(param_2 + 0x10)" * (cast_expression "(int *)(param_2 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x10)" ( (binary_expression "param_2 + 0x10" identifier + number_literal) ))))) ;) (if_statement "if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" if (parenthesized_expression "(iVar14 != 0)" ( (binary_expression "iVar14 != 0" identifier != number_literal) )) (compound_statement "{\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" { (expression_statement "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);" (assignment_expression "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30)" identifier = (call_expression "FUN_0006b7f0(param_1,iVar14,1,&local_30)" identifier (argument_list "(param_1,iVar14,1,&local_30)" ( identifier , identifier , number_literal , (pointer_expression "&local_30" & identifier) )))) ;) })) (expression_statement "*(int *)(pcVar1 + 0x10) = iVar14;" (assignment_expression "*(int *)(pcVar1 + 0x10) = iVar14" (pointer_expression "*(int *)(pcVar1 + 0x10)" * (cast_expression "(int *)(pcVar1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x10)" ( (binary_expression "pcVar1 + 0x10" identifier + number_literal) )))) = identifier) ;) })) (expression_statement "pcVar7 = pcVar1;" (assignment_expression "pcVar7 = pcVar1" identifier = identifier) ;) (if_statement "if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }" if (parenthesized_expression "(*(int *)(param_2 + 4) << 7 < 0)" ( (binary_expression "*(int *)(param_2 + 4) << 7 < 0" (binary_expression "*(int *)(param_2 + 4) << 7" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) << number_literal) < number_literal) )) (compound_statement "{\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }" { (expression_statement "uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));" (assignment_expression "uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" identifier = (call_expression "FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" identifier (argument_list "(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" ( identifier , identifier , (pointer_expression "*(undefined4 *)(param_2 + 0x30)" * (cast_expression "(undefined4 *)(param_2 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x30)" ( (binary_expression "param_2 + 0x30" identifier + number_literal) )))) )))) ;) (expression_statement "*(undefined4 *)(pcVar1 + 0x30) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x30) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x30)" * (cast_expression "(undefined4 *)(pcVar1 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar1 + 0x30)" ( (binary_expression "pcVar1 + 0x30" identifier + number_literal) )))) = identifier) ;) })) (if_statement "if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }" if (parenthesized_expression "(param_4 != (undefined4 *)0x0)" ( (binary_expression "param_4 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      *param_4 = local_30;\n    }" { (expression_statement "*param_4 = local_30;" (assignment_expression "*param_4 = local_30" (pointer_expression "*param_4" * identifier) = identifier) ;) })) }))) (labeled_statement "LAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }" statement_identifier : (if_statement "if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }" if (parenthesized_expression "(local_2c == *(int *)PTR___stack_chk_guard_0018fecc)" ( (binary_expression "local_2c == *(int *)PTR___stack_chk_guard_0018fecc" identifier == (pointer_expression "*(int *)PTR___stack_chk_guard_0018fecc" * (cast_expression "(int *)PTR___stack_chk_guard_0018fecc" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n    return pcVar1;\n  }" { (return_statement "return pcVar1;" return identifier ;) }))) (expression_statement "(*(code *)PTR___stack_chk_fail_0018fea0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0018fea0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0018fea0)" ( (pointer_expression "*(code *)PTR___stack_chk_fail_0018fea0" * (cast_expression "(code *)PTR___stack_chk_fail_0018fea0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (if_statement "if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }" if (parenthesized_expression "(pcVar7 == (char *)0x0)" ( (binary_expression "pcVar7 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (char *)0x0;\n  }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "pcVar7 = (char *)FUN_0006b7f0();" (assignment_expression "pcVar7 = (char *)FUN_0006b7f0()" identifier = (cast_expression "(char *)FUN_0006b7f0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0006b7f0()" identifier (argument_list "()" ( ))))) ;) (return_statement "return pcVar7;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )) (argument_list ( IDENT ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (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 IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) 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 (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) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) )) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (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) )))) = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + IDENT) , LIT , (binary_expression LIT - IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression LIT < (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , IDENT ))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (binary_expression IDENT & LIT) | IDENT) | (binary_expression IDENT & LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + IDENT) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (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 = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (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 IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT , (pointer_expression & 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 = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT , (pointer_expression & 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 = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) << LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) )) (compound_statement { (return_statement return IDENT ;) }))) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (return_statement return IDENT ;) })))
(function_definition "char * FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)\n\n{\n  char *pcVar1;\n  char *pcVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  char *pcVar5;\n  uint uVar6;\n  char *pcVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  int iVar14;\n  char *local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;\n  pcVar7 = param_3;\n  if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }\n  pcVar1 = local_30;\n  if (local_30 == (char *)0x0) goto LAB_0006bbac;\n  if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;\n  if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }\n  uVar13 = *(uint *)(pcVar1 + 4);\n  if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }\nLAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  pcVar7 = (char *)FUN_0006b7f0();\n  return pcVar7;\n}" (primitive_type "char") (pointer_declarator "* FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" (* "*") (function_declarator "FUN_0006b7f0(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" (identifier "FUN_0006b7f0") (parameter_list "(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "char *param_3" (primitive_type "char") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "undefined4 *param_4" (type_identifier "undefined4") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")")))) (compound_statement "{\n  char *pcVar1;\n  char *pcVar2;\n  undefined4 uVar3;\n  char *pcVar4;\n  char *pcVar5;\n  uint uVar6;\n  char *pcVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  int iVar14;\n  char *local_30;\n  int local_2c;\n  \n  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;\n  pcVar7 = param_3;\n  if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }\n  pcVar1 = local_30;\n  if (local_30 == (char *)0x0) goto LAB_0006bbac;\n  if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;\n  if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }\n  uVar13 = *(uint *)(pcVar1 + 4);\n  if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }\nLAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }\n  (*(code *)PTR___stack_chk_fail_0018fea0)();\n  if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }\n  pcVar7 = (char *)FUN_0006b7f0();\n  return pcVar7;\n}" ({ "{") (declaration "char *pcVar1;" (primitive_type "char") (pointer_declarator "*pcVar1" (* "*") (identifier "pcVar1")) (; ";")) (declaration "char *pcVar2;" (primitive_type "char") (pointer_declarator "*pcVar2" (* "*") (identifier "pcVar2")) (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "char *pcVar4;" (primitive_type "char") (pointer_declarator "*pcVar4" (* "*") (identifier "pcVar4")) (; ";")) (declaration "char *pcVar5;" (primitive_type "char") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "char *pcVar7;" (primitive_type "char") (pointer_declarator "*pcVar7" (* "*") (identifier "pcVar7")) (; ";")) (declaration "undefined4 uVar8;" (type_identifier "undefined4") (identifier "uVar8") (; ";")) (declaration "undefined4 uVar9;" (type_identifier "undefined4") (identifier "uVar9") (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "int iVar14;" (primitive_type "int") (identifier "iVar14") (; ";")) (declaration "char *local_30;" (primitive_type "char") (pointer_declarator "*local_30" (* "*") (identifier "local_30")) (; ";")) (declaration "int local_2c;" (primitive_type "int") (identifier "local_2c") (; ";")) (expression_statement "local_2c = *(int *)PTR___stack_chk_guard_0018fecc;" (assignment_expression "local_2c = *(int *)PTR___stack_chk_guard_0018fecc" (identifier "local_2c") (= "=") (pointer_expression "*(int *)PTR___stack_chk_guard_0018fecc" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_0018fecc" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_0018fecc")))) (; ";")) (expression_statement "pcVar7 = param_3;" (assignment_expression "pcVar7 = param_3" (identifier "pcVar7") (= "=") (identifier "param_3")) (; ";")) (if_statement "if (param_4 == (undefined4 *)0x0) {\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }\n  else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" (if "if") (parenthesized_expression "(param_4 == (undefined4 *)0x0)" (( "(") (binary_expression "param_4 == (undefined4 *)0x0" (identifier "param_4") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    FUN_0005c058(param_2);\n    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);\n    uVar13 = 0;\n  }" ({ "{") (expression_statement "FUN_0005c058(param_2);" (call_expression "FUN_0005c058(param_2)" (identifier "FUN_0005c058") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")"))) (; ";")) (expression_statement "local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);" (assignment_expression "local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" (identifier "local_30") (= "=") (cast_expression "(char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1)" (parenthesized_expression "(*(code *)(PTR_LAB_0018fb58 + 0x1414))" (( "(") (pointer_expression "*(code *)(PTR_LAB_0018fb58 + 0x1414)" (* "*") (cast_expression "(code *)(PTR_LAB_0018fb58 + 0x1414)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_0018fb58 + 0x1414)" (( "(") (binary_expression "PTR_LAB_0018fb58 + 0x1414" (identifier "PTR_LAB_0018fb58") (+ "+") (number_literal "0x1414")) () ")")))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))))) (; ";")) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" (identifier "uVar13") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" (else "else") (compound_statement "{\n    local_30 = (char *)*param_4;\n    uVar13 = 0x8000;\n  }" ({ "{") (expression_statement "local_30 = (char *)*param_4;" (assignment_expression "local_30 = (char *)*param_4" (identifier "local_30") (= "=") (cast_expression "(char *)*param_4" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_4" (* "*") (identifier "param_4")))) (; ";")) (expression_statement "uVar13 = 0x8000;" (assignment_expression "uVar13 = 0x8000" (identifier "uVar13") (= "=") (number_literal "0x8000")) (; ";")) (} "}")))) (expression_statement "pcVar1 = local_30;" (assignment_expression "pcVar1 = local_30" (identifier "pcVar1") (= "=") (identifier "local_30")) (; ";")) (if_statement "if (local_30 == (char *)0x0) goto LAB_0006bbac;" (if "if") (parenthesized_expression "(local_30 == (char *)0x0)" (( "(") (binary_expression "local_30 == (char *)0x0" (identifier "local_30") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0006bbac;" (goto "goto") (statement_identifier "LAB_0006bbac") (; ";"))) (if_statement "if (param_3 == (char *)0x0) {\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }\n  else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" (if "if") (parenthesized_expression "(param_3 == (char *)0x0)" (( "(") (binary_expression "param_3 == (char *)0x0" (identifier "param_3") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    uVar11 = *(uint *)(param_2 + 4);\n    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }\n    if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);\n    pcVar7 = (char *)0x0;\n    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" ({ "{") (expression_statement "uVar11 = *(uint *)(param_2 + 4);" (assignment_expression "uVar11 = *(uint *)(param_2 + 4)" (identifier "uVar11") (= "=") (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }\n    else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" (if "if") (parenthesized_expression "(((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0))" (( "(") (binary_expression "((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)" (parenthesized_expression "((uVar11 & 0x400) == 0)" (( "(") (binary_expression "(uVar11 & 0x400) == 0" (parenthesized_expression "(uVar11 & 0x400)" (( "(") (binary_expression "uVar11 & 0x400" (identifier "uVar11") (& "&") (number_literal "0x400")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(uVar12 = 0x38, *(int *)(param_2 + 8) != 0)" (( "(") (comma_expression "uVar12 = 0x38, *(int *)(param_2 + 8) != 0" (assignment_expression "uVar12 = 0x38" (identifier "uVar12") (= "=") (number_literal "0x38")) (, ",") (binary_expression "*(int *)(param_2 + 8) != 0" (pointer_expression "*(int *)(param_2 + 8)" (* "*") (cast_expression "(int *)(param_2 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n      uVar6 = 0;\nLAB_0006bcbc:\n      iVar14 = FUN_0005b438();\n      iVar14 = iVar14 + 1;\n      if (param_3 != (char *)0x0) goto LAB_0006ba50;\n    }" ({ "{") (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0006bcbc:\n      iVar14 = FUN_0005b438();" (statement_identifier "LAB_0006bcbc") (: ":") (expression_statement "iVar14 = FUN_0005b438();" (assignment_expression "iVar14 = FUN_0005b438()" (identifier "iVar14") (= "=") (call_expression "FUN_0005b438()" (identifier "FUN_0005b438") (argument_list "()" (( "(") () ")")))) (; ";"))) (expression_statement "iVar14 = iVar14 + 1;" (assignment_expression "iVar14 = iVar14 + 1" (identifier "iVar14") (= "=") (binary_expression "iVar14 + 1" (identifier "iVar14") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_3 != (char *)0x0) goto LAB_0006ba50;" (if "if") (parenthesized_expression "(param_3 != (char *)0x0)" (( "(") (binary_expression "param_3 != (char *)0x0" (identifier "param_3") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0006ba50;" (goto "goto") (statement_identifier "LAB_0006ba50") (; ";"))) (} "}")) (else_clause "else {\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" (else "else") (compound_statement "{\n      uVar12 = 0x38;\n      uVar6 = 0;\n      iVar14 = 0;\n    }" ({ "{") (expression_statement "uVar12 = 0x38;" (assignment_expression "uVar12 = 0x38" (identifier "uVar12") (= "=") (number_literal "0x38")) (; ";")) (expression_statement "uVar6 = 0;" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" (identifier "iVar14") (= "=") (number_literal "0")) (; ";")) (} "}")))) (if_statement "if ((uVar11 & 0x4000) == 0) {\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }\n    else {\n      iVar10 = 0xc;\n    }" (if "if") (parenthesized_expression "((uVar11 & 0x4000) == 0)" (( "(") (binary_expression "(uVar11 & 0x4000) == 0" (parenthesized_expression "(uVar11 & 0x4000)" (( "(") (binary_expression "uVar11 & 0x4000" (identifier "uVar11") (& "&") (number_literal "0x4000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }\n      iVar10 = 0x1c;\n    }" ({ "{") (if_statement "if ((uVar11 & 0x2000) == 0) {\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }" (if "if") (parenthesized_expression "((uVar11 & 0x2000) == 0)" (( "(") (binary_expression "(uVar11 & 0x2000) == 0" (parenthesized_expression "(uVar11 & 0x2000)" (( "(") (binary_expression "uVar11 & 0x2000" (identifier "uVar11") (& "&") (number_literal "0x2000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        pcVar2 = pcVar1;\n        pcVar7 = param_2;\n        do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);\n        pcVar7 = *(char **)pcVar7;\n        uVar3 = *(undefined4 *)(pcVar5 + 0x14);\n        *(char **)(pcVar4 + 0x10) = pcVar7;\n        *(undefined4 *)(pcVar4 + 0x14) = uVar3;\n        goto LAB_0006ba6c;\n      }" ({ "{") (expression_statement "pcVar2 = pcVar1;" (assignment_expression "pcVar2 = pcVar1" (identifier "pcVar2") (= "=") (identifier "pcVar1")) (; ";")) (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" (identifier "pcVar7") (= "=") (identifier "param_2")) (; ";")) (do_statement "do {\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        } while (pcVar7 != param_2 + 0x30);" (do "do") (compound_statement "{\n          pcVar5 = pcVar7;\n          pcVar4 = pcVar2;\n          uVar9 = *(undefined4 *)(pcVar5 + 4);\n          uVar8 = *(undefined4 *)(pcVar5 + 8);\n          uVar3 = *(undefined4 *)(pcVar5 + 0xc);\n          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;\n          *(undefined4 *)(pcVar4 + 4) = uVar9;\n          *(undefined4 *)(pcVar4 + 8) = uVar8;\n          *(undefined4 *)(pcVar4 + 0xc) = uVar3;\n          pcVar7 = pcVar5 + 0x10;\n          pcVar2 = pcVar4 + 0x10;\n        }" ({ "{") (expression_statement "pcVar5 = pcVar7;" (assignment_expression "pcVar5 = pcVar7" (identifier "pcVar5") (= "=") (identifier "pcVar7")) (; ";")) (expression_statement "pcVar4 = pcVar2;" (assignment_expression "pcVar4 = pcVar2" (identifier "pcVar4") (= "=") (identifier "pcVar2")) (; ";")) (expression_statement "uVar9 = *(undefined4 *)(pcVar5 + 4);" (assignment_expression "uVar9 = *(undefined4 *)(pcVar5 + 4)" (identifier "uVar9") (= "=") (pointer_expression "*(undefined4 *)(pcVar5 + 4)" (* "*") (cast_expression "(undefined4 *)(pcVar5 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar5 + 4)" (( "(") (binary_expression "pcVar5 + 4" (identifier "pcVar5") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "uVar8 = *(undefined4 *)(pcVar5 + 8);" (assignment_expression "uVar8 = *(undefined4 *)(pcVar5 + 8)" (identifier "uVar8") (= "=") (pointer_expression "*(undefined4 *)(pcVar5 + 8)" (* "*") (cast_expression "(undefined4 *)(pcVar5 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar5 + 8)" (( "(") (binary_expression "pcVar5 + 8" (identifier "pcVar5") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "uVar3 = *(undefined4 *)(pcVar5 + 0xc);" (assignment_expression "uVar3 = *(undefined4 *)(pcVar5 + 0xc)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(pcVar5 + 0xc)" (* "*") (cast_expression "(undefined4 *)(pcVar5 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar5 + 0xc)" (( "(") (binary_expression "pcVar5 + 0xc" (identifier "pcVar5") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;" (assignment_expression "*(undefined4 *)pcVar4 = *(undefined4 *)pcVar5" (pointer_expression "*(undefined4 *)pcVar4" (* "*") (cast_expression "(undefined4 *)pcVar4" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pcVar4"))) (= "=") (pointer_expression "*(undefined4 *)pcVar5" (* "*") (cast_expression "(undefined4 *)pcVar5" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pcVar5")))) (; ";")) (expression_statement "*(undefined4 *)(pcVar4 + 4) = uVar9;" (assignment_expression "*(undefined4 *)(pcVar4 + 4) = uVar9" (pointer_expression "*(undefined4 *)(pcVar4 + 4)" (* "*") (cast_expression "(undefined4 *)(pcVar4 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar4 + 4)" (( "(") (binary_expression "pcVar4 + 4" (identifier "pcVar4") (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "uVar9")) (; ";")) (expression_statement "*(undefined4 *)(pcVar4 + 8) = uVar8;" (assignment_expression "*(undefined4 *)(pcVar4 + 8) = uVar8" (pointer_expression "*(undefined4 *)(pcVar4 + 8)" (* "*") (cast_expression "(undefined4 *)(pcVar4 + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar4 + 8)" (( "(") (binary_expression "pcVar4 + 8" (identifier "pcVar4") (+ "+") (number_literal "8")) () ")")))) (= "=") (identifier "uVar8")) (; ";")) (expression_statement "*(undefined4 *)(pcVar4 + 0xc) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar4 + 0xc) = uVar3" (pointer_expression "*(undefined4 *)(pcVar4 + 0xc)" (* "*") (cast_expression "(undefined4 *)(pcVar4 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar4 + 0xc)" (( "(") (binary_expression "pcVar4 + 0xc" (identifier "pcVar4") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "pcVar7 = pcVar5 + 0x10;" (assignment_expression "pcVar7 = pcVar5 + 0x10" (identifier "pcVar7") (= "=") (binary_expression "pcVar5 + 0x10" (identifier "pcVar5") (+ "+") (number_literal "0x10"))) (; ";")) (expression_statement "pcVar2 = pcVar4 + 0x10;" (assignment_expression "pcVar2 = pcVar4 + 0x10" (identifier "pcVar2") (= "=") (binary_expression "pcVar4 + 0x10" (identifier "pcVar4") (+ "+") (number_literal "0x10"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pcVar7 != param_2 + 0x30)" (( "(") (binary_expression "pcVar7 != param_2 + 0x30" (identifier "pcVar7") (!= "!=") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30"))) () ")")) (; ";")) (expression_statement "pcVar7 = *(char **)pcVar7;" (assignment_expression "pcVar7 = *(char **)pcVar7" (identifier "pcVar7") (= "=") (pointer_expression "*(char **)pcVar7" (* "*") (cast_expression "(char **)pcVar7" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "pcVar7")))) (; ";")) (expression_statement "uVar3 = *(undefined4 *)(pcVar5 + 0x14);" (assignment_expression "uVar3 = *(undefined4 *)(pcVar5 + 0x14)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(pcVar5 + 0x14)" (* "*") (cast_expression "(undefined4 *)(pcVar5 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar5 + 0x14)" (( "(") (binary_expression "pcVar5 + 0x14" (identifier "pcVar5") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "*(char **)(pcVar4 + 0x10) = pcVar7;" (assignment_expression "*(char **)(pcVar4 + 0x10) = pcVar7" (pointer_expression "*(char **)(pcVar4 + 0x10)" (* "*") (cast_expression "(char **)(pcVar4 + 0x10)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(pcVar4 + 0x10)" (( "(") (binary_expression "pcVar4 + 0x10" (identifier "pcVar4") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "pcVar7")) (; ";")) (expression_statement "*(undefined4 *)(pcVar4 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar4 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar4 + 0x14)" (* "*") (cast_expression "(undefined4 *)(pcVar4 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar4 + 0x14)" (( "(") (binary_expression "pcVar4 + 0x14" (identifier "pcVar4") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (goto_statement "goto LAB_0006ba6c;" (goto "goto") (statement_identifier "LAB_0006ba6c") (; ";")) (} "}"))) (expression_statement "iVar10 = 0x1c;" (assignment_expression "iVar10 = 0x1c" (identifier "iVar10") (= "=") (number_literal "0x1c")) (; ";")) (} "}")) (else_clause "else {\n      iVar10 = 0xc;\n    }" (else "else") (compound_statement "{\n      iVar10 = 0xc;\n    }" ({ "{") (expression_statement "iVar10 = 0xc;" (assignment_expression "iVar10 = 0xc" (identifier "iVar10") (= "=") (number_literal "0xc")) (; ";")) (} "}")))) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" (( "(") (pointer_expression "*(code *)PTR_memcpy_0018fed4" (* "*") (cast_expression "(code *)PTR_memcpy_0018fed4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memcpy_0018fed4"))) () ")")) (argument_list "(pcVar1,param_2,iVar10)" (( "(") (identifier "pcVar1") (, ",") (identifier "param_2") (, ",") (identifier "iVar10") () ")"))) (; ";")) (expression_statement "pcVar7 = (char *)0x0;" (assignment_expression "pcVar7 = (char *)0x0" (identifier "pcVar7") (= "=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "(*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);" (call_expression "(*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10)" (parenthesized_expression "(*(code *)PTR_memset_0018fe00)" (( "(") (pointer_expression "*(code *)PTR_memset_0018fe00" (* "*") (cast_expression "(code *)PTR_memset_0018fe00" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memset_0018fe00"))) () ")")) (argument_list "(local_30 + iVar10,0,0x38 - iVar10)" (( "(") (binary_expression "local_30 + iVar10" (identifier "local_30") (+ "+") (identifier "iVar10")) (, ",") (number_literal "0") (, ",") (binary_expression "0x38 - iVar10" (number_literal "0x38") (- "-") (identifier "iVar10")) () ")"))) (; ";")) (expression_statement "uVar11 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar11 = *(uint *)(pcVar1 + 4)" (identifier "uVar11") (= "=") (pointer_expression "*(uint *)(pcVar1 + 4)" (* "*") (cast_expression "(uint *)(pcVar1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 4)" (( "(") (binary_expression "pcVar1 + 4" (identifier "pcVar1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" (else "else") (compound_statement "{\n    uVar6 = 0x38;\n    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }\n    uVar11 = *(uint *)(param_2 + 4);\n    uVar12 = uVar6 & 0xfff;\n    if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }\nLAB_0006ba50:\n    pcVar7 = param_2;\n    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);\nLAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);\n  }" ({ "{") (expression_statement "uVar6 = 0x38;" (assignment_expression "uVar6 = 0x38" (identifier "uVar6") (= "=") (number_literal "0x38")) (; ";")) (if_statement "if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }" (if "if") (parenthesized_expression "((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7))" (( "(") (binary_expression "(*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)" (parenthesized_expression "(*param_2 != -0x5a)" (( "(") (binary_expression "*param_2 != -0x5a" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (!= "!=") (number_literal "-0x5a")) () ")")) (&& "&&") (parenthesized_expression "(uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)" (( "(") (comma_expression "uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7" (assignment_expression "uVar6 = 0" (identifier "uVar6") (= "=") (number_literal "0")) (, ",") (binary_expression "-1 < *(int *)(param_2 + 4) << 7" (number_literal "-1") (< "<") (binary_expression "*(int *)(param_2 + 4) << 7" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (<< "<<") (number_literal "7")))) () ")"))) () ")")) (compound_statement "{\n      if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }\n    }" ({ "{") (if_statement "if (*(int *)(param_2 + 0xc) == 0) {\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }\n      else {\n        uVar6 = 0x201c;\n      }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0xc) == 0)" (( "(") (binary_expression "*(int *)(param_2 + 0xc) == 0" (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar6 = 0x400c;\n        if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }\n      }" ({ "{") (expression_statement "uVar6 = 0x400c;" (assignment_expression "uVar6 = 0x400c" (identifier "uVar6") (= "=") (number_literal "0x400c")) (; ";")) (if_statement "if (*(int *)(param_2 + 0x14) != 0) {\n          uVar6 = 0x201c;\n        }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 0x14) != 0)" (( "(") (binary_expression "*(int *)(param_2 + 0x14) != 0" (pointer_expression "*(int *)(param_2 + 0x14)" (* "*") (cast_expression "(int *)(param_2 + 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          uVar6 = 0x201c;\n        }" ({ "{") (expression_statement "uVar6 = 0x201c;" (assignment_expression "uVar6 = 0x201c" (identifier "uVar6") (= "=") (number_literal "0x201c")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        uVar6 = 0x201c;\n      }" (else "else") (compound_statement "{\n        uVar6 = 0x201c;\n      }" ({ "{") (expression_statement "uVar6 = 0x201c;" (assignment_expression "uVar6 = 0x201c" (identifier "uVar6") (= "=") (number_literal "0x201c")) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar11 = *(uint *)(param_2 + 4);" (assignment_expression "uVar11 = *(uint *)(param_2 + 4)" (identifier "uVar11") (= "=") (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "uVar12 = uVar6 & 0xfff;" (assignment_expression "uVar12 = uVar6 & 0xfff" (identifier "uVar12") (= "=") (binary_expression "uVar6 & 0xfff" (identifier "uVar6") (& "&") (number_literal "0xfff"))) (; ";")) (if_statement "if ((uVar11 & 0x400) == 0) {\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }\n    else {\n      iVar14 = 0;\n    }" (if "if") (parenthesized_expression "((uVar11 & 0x400) == 0)" (( "(") (binary_expression "(uVar11 & 0x400) == 0" (parenthesized_expression "(uVar11 & 0x400)" (( "(") (binary_expression "uVar11 & 0x400" (identifier "uVar11") (& "&") (number_literal "0x400")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;\n      iVar14 = 0;\n    }" ({ "{") (if_statement "if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;" (if "if") (parenthesized_expression "(*(int *)(param_2 + 8) != 0)" (( "(") (binary_expression "*(int *)(param_2 + 8) != 0" (pointer_expression "*(int *)(param_2 + 8)" (* "*") (cast_expression "(int *)(param_2 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_0006bcbc;" (goto "goto") (statement_identifier "LAB_0006bcbc") (; ";"))) (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" (identifier "iVar14") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n      iVar14 = 0;\n    }" (else "else") (compound_statement "{\n      iVar14 = 0;\n    }" ({ "{") (expression_statement "iVar14 = 0;" (assignment_expression "iVar14 = 0" (identifier "iVar14") (= "=") (number_literal "0")) (; ";")) (} "}")))) (labeled_statement "LAB_0006ba50:\n    pcVar7 = param_2;" (statement_identifier "LAB_0006ba50") (: ":") (expression_statement "pcVar7 = param_2;" (assignment_expression "pcVar7 = param_2" (identifier "pcVar7") (= "=") (identifier "param_2")) (; ";"))) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" (( "(") (pointer_expression "*(code *)PTR_memcpy_0018fed4" (* "*") (cast_expression "(code *)PTR_memcpy_0018fed4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memcpy_0018fed4"))) () ")")) (argument_list "(pcVar1,param_2,uVar12)" (( "(") (identifier "pcVar1") (, ",") (identifier "param_2") (, ",") (identifier "uVar12") () ")"))) (; ";")) (labeled_statement "LAB_0006ba6c:\n    uVar11 = *(uint *)(pcVar1 + 4);" (statement_identifier "LAB_0006ba6c") (: ":") (expression_statement "uVar11 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar11 = *(uint *)(pcVar1 + 4)" (identifier "uVar11") (= "=") (pointer_expression "*(uint *)(pcVar1 + 4)" (* "*") (cast_expression "(uint *)(pcVar1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 4)" (( "(") (binary_expression "pcVar1 + 4" (identifier "pcVar1") (+ "+") (number_literal "4")) () ")"))))) (; ";"))) (} "}")))) (expression_statement "*(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;" (assignment_expression "*(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000" (pointer_expression "*(uint *)(pcVar1 + 4)" (* "*") (cast_expression "(uint *)(pcVar1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 4)" (( "(") (binary_expression "pcVar1 + 4" (identifier "pcVar1") (+ "+") (number_literal "4")) () ")")))) (= "=") (binary_expression "uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000" (binary_expression "uVar11 & 0xfffe1fff | uVar13" (binary_expression "uVar11 & 0xfffe1fff" (identifier "uVar11") (& "&") (number_literal "0xfffe1fff")) (| "|") (identifier "uVar13")) (| "|") (binary_expression "uVar6 & 0x6000" (identifier "uVar6") (& "&") (number_literal "0x6000")))) (; ";")) (if_statement "if (iVar14 == 0) {\n    uVar13 = *(uint *)(param_2 + 4);\n  }\n  else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" (if "if") (parenthesized_expression "(iVar14 == 0)" (( "(") (binary_expression "iVar14 == 0" (identifier "iVar14") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar13 = *(uint *)(param_2 + 4);\n  }" ({ "{") (expression_statement "uVar13 = *(uint *)(param_2 + 4);" (assignment_expression "uVar13 = *(uint *)(param_2 + 4)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" (else "else") (compound_statement "{\n    *(char **)(pcVar1 + 8) = local_30 + uVar12;\n    pcVar7 = *(char **)(param_2 + 8);\n    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);\n    uVar13 = *(uint *)(param_2 + 4);\n  }" ({ "{") (expression_statement "*(char **)(pcVar1 + 8) = local_30 + uVar12;" (assignment_expression "*(char **)(pcVar1 + 8) = local_30 + uVar12" (pointer_expression "*(char **)(pcVar1 + 8)" (* "*") (cast_expression "(char **)(pcVar1 + 8)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(pcVar1 + 8)" (( "(") (binary_expression "pcVar1 + 8" (identifier "pcVar1") (+ "+") (number_literal "8")) () ")")))) (= "=") (binary_expression "local_30 + uVar12" (identifier "local_30") (+ "+") (identifier "uVar12"))) (; ";")) (expression_statement "pcVar7 = *(char **)(param_2 + 8);" (assignment_expression "pcVar7 = *(char **)(param_2 + 8)" (identifier "pcVar7") (= "=") (pointer_expression "*(char **)(param_2 + 8)" (* "*") (cast_expression "(char **)(param_2 + 8)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "(*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);" (call_expression "(*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14)" (parenthesized_expression "(*(code *)PTR_memcpy_0018fed4)" (( "(") (pointer_expression "*(code *)PTR_memcpy_0018fed4" (* "*") (cast_expression "(code *)PTR_memcpy_0018fed4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_memcpy_0018fed4"))) () ")")) (argument_list "(local_30 + uVar12,pcVar7,iVar14)" (( "(") (binary_expression "local_30 + uVar12" (identifier "local_30") (+ "+") (identifier "uVar12")) (, ",") (identifier "pcVar7") (, ",") (identifier "iVar14") () ")"))) (; ";")) (expression_statement "uVar13 = *(uint *)(param_2 + 4);" (assignment_expression "uVar13 = *(uint *)(param_2 + 4)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (} "}")))) (if_statement "if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }" (if "if") (parenthesized_expression "(((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0)" (( "(") (binary_expression "((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0" (parenthesized_expression "((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000)" (( "(") (binary_expression "(uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000" (parenthesized_expression "(uVar13 | *(uint *)(pcVar1 + 4))" (( "(") (binary_expression "uVar13 | *(uint *)(pcVar1 + 4)" (identifier "uVar13") (| "|") (pointer_expression "*(uint *)(pcVar1 + 4)" (* "*") (cast_expression "(uint *)(pcVar1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 4)" (( "(") (binary_expression "pcVar1 + 4" (identifier "pcVar1") (+ "+") (number_literal "4")) () ")"))))) () ")")) (& "&") (number_literal "0x804000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n  }" ({ "{") (if_statement "if ((uVar13 & 0x800) == 0) {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }\n    else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" (if "if") (parenthesized_expression "((uVar13 & 0x800) == 0)" (( "(") (binary_expression "(uVar13 & 0x800) == 0" (parenthesized_expression "(uVar13 & 0x800)" (( "(") (binary_expression "uVar13 & 0x800" (identifier "uVar13") (& "&") (number_literal "0x800")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" ({ "{") (expression_statement "pcVar7 = *(char **)(param_2 + 0x14);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x14)" (identifier "pcVar7") (= "=") (pointer_expression "*(char **)(param_2 + 0x14)" (* "*") (cast_expression "(char **)(param_2 + 0x14)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);" (assignment_expression "uVar3 = FUN_0006bd40(param_1,pcVar7,param_3)" (identifier "uVar3") (= "=") (call_expression "FUN_0006bd40(param_1,pcVar7,param_3)" (identifier "FUN_0006bd40") (argument_list "(param_1,pcVar7,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar7") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(pcVar1 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x14)" (* "*") (cast_expression "(undefined4 *)(pcVar1 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 0x14)" (( "(") (binary_expression "pcVar1 + 0x14" (identifier "pcVar1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (} "}")) (else_clause "else {\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" (else "else") (compound_statement "{\n      pcVar7 = *(char **)(param_2 + 0x14);\n      uVar3 = FUN_0006b40c(param_1);\n      *(undefined4 *)(pcVar1 + 0x14) = uVar3;\n    }" ({ "{") (expression_statement "pcVar7 = *(char **)(param_2 + 0x14);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x14)" (identifier "pcVar7") (= "=") (pointer_expression "*(char **)(param_2 + 0x14)" (* "*") (cast_expression "(char **)(param_2 + 0x14)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x14)" (( "(") (binary_expression "param_2 + 0x14" (identifier "param_2") (+ "+") (number_literal "0x14")) () ")"))))) (; ";")) (expression_statement "uVar3 = FUN_0006b40c(param_1);" (assignment_expression "uVar3 = FUN_0006b40c(param_1)" (identifier "uVar3") (= "=") (call_expression "FUN_0006b40c(param_1)" (identifier "FUN_0006b40c") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(pcVar1 + 0x14) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x14) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x14)" (* "*") (cast_expression "(undefined4 *)(pcVar1 + 0x14)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 0x14)" (( "(") (binary_expression "pcVar1 + 0x14" (identifier "pcVar1") (+ "+") (number_literal "0x14")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar13 = *(uint *)(pcVar1 + 4);" (assignment_expression "uVar13 = *(uint *)(pcVar1 + 4)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)(pcVar1 + 4)" (* "*") (cast_expression "(uint *)(pcVar1 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 4)" (( "(") (binary_expression "pcVar1 + 4" (identifier "pcVar1") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if ((uVar13 & 0x1006000) == 0) {\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }\n  else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" (if "if") (parenthesized_expression "((uVar13 & 0x1006000) == 0)" (( "(") (binary_expression "(uVar13 & 0x1006000) == 0" (parenthesized_expression "(uVar13 & 0x1006000)" (( "(") (binary_expression "uVar13 & 0x1006000" (identifier "uVar13") (& "&") (number_literal "0x1006000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }\n  }" ({ "{") (if_statement "if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }" (if "if") (parenthesized_expression "((*(uint *)(param_2 + 4) & 0x804000) == 0)" (( "(") (binary_expression "(*(uint *)(param_2 + 4) & 0x804000) == 0" (parenthesized_expression "(*(uint *)(param_2 + 4) & 0x804000)" (( "(") (binary_expression "*(uint *)(param_2 + 4) & 0x804000" (pointer_expression "*(uint *)(param_2 + 4)" (* "*") (cast_expression "(uint *)(param_2 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "0x804000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }\n      pcVar7 = *(char **)(param_2 + 0x10);\n      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);\n      *(undefined4 *)(pcVar1 + 0x10) = uVar3;\n    }" ({ "{") (if_statement "if (*pcVar1 == -0x5a) {\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }\n      else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" (if "if") (parenthesized_expression "(*pcVar1 == -0x5a)" (( "(") (binary_expression "*pcVar1 == -0x5a" (pointer_expression "*pcVar1" (* "*") (identifier "pcVar1")) (== "==") (number_literal "-0x5a")) () ")")) (compound_statement "{\n        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);\n      }" ({ "{") (expression_statement "*(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);" (assignment_expression "*(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc)" (pointer_expression "*(undefined4 *)(pcVar1 + 0xc)" (* "*") (cast_expression "(undefined4 *)(pcVar1 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 0xc)" (( "(") (binary_expression "pcVar1 + 0xc" (identifier "pcVar1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (pointer_expression "*(undefined4 *)(param_2 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" (else "else") (compound_statement "{\n        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);\n        *(undefined4 *)(pcVar1 + 0xc) = uVar3;\n      }" ({ "{") (expression_statement "uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);" (assignment_expression "uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0)" (identifier "uVar3") (= "=") (call_expression "FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0)" (identifier "FUN_0006bcf4") (argument_list "(param_1,*(undefined4 *)(param_2 + 0xc),0)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(param_2 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")")))) (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(pcVar1 + 0xc) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0xc) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0xc)" (* "*") (cast_expression "(undefined4 *)(pcVar1 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 0xc)" (( "(") (binary_expression "pcVar1 + 0xc" (identifier "pcVar1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (} "}")))) (expression_statement "pcVar7 = *(char **)(param_2 + 0x10);" (assignment_expression "pcVar7 = *(char **)(param_2 + 0x10)" (identifier "pcVar7") (= "=") (pointer_expression "*(char **)(param_2 + 0x10)" (* "*") (cast_expression "(char **)(param_2 + 0x10)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "uVar3 = FUN_0006bcf4(param_1,pcVar7,0);" (assignment_expression "uVar3 = FUN_0006bcf4(param_1,pcVar7,0)" (identifier "uVar3") (= "=") (call_expression "FUN_0006bcf4(param_1,pcVar7,0)" (identifier "FUN_0006bcf4") (argument_list "(param_1,pcVar7,0)" (( "(") (identifier "param_1") (, ",") (identifier "pcVar7") (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(pcVar1 + 0x10) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x10) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(pcVar1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 0x10)" (( "(") (binary_expression "pcVar1 + 0x10" (identifier "pcVar1") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" (else "else") (compound_statement "{\n    iVar14 = FUN_0005bf8c(param_2,param_3);\n    local_30 = local_30 + iVar14;\n    if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }\n    pcVar7 = pcVar1;\n    if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }\n    if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }\n  }" ({ "{") (expression_statement "iVar14 = FUN_0005bf8c(param_2,param_3);" (assignment_expression "iVar14 = FUN_0005bf8c(param_2,param_3)" (identifier "iVar14") (= "=") (call_expression "FUN_0005bf8c(param_2,param_3)" (identifier "FUN_0005bf8c") (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "local_30 = local_30 + iVar14;" (assignment_expression "local_30 = local_30 + iVar14" (identifier "local_30") (= "=") (binary_expression "local_30 + iVar14" (identifier "local_30") (+ "+") (identifier "iVar14"))) (; ";")) (if_statement "if ((uVar13 & 0x804000) == 0) {\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }" (if "if") (parenthesized_expression "((uVar13 & 0x804000) == 0)" (( "(") (binary_expression "(uVar13 & 0x804000) == 0" (parenthesized_expression "(uVar13 & 0x804000)" (( "(") (binary_expression "uVar13 & 0x804000" (identifier "uVar13") (& "&") (number_literal "0x804000")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      iVar14 = *(int *)(param_2 + 0xc);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0xc) = iVar14;\n      iVar14 = *(int *)(param_2 + 0x10);\n      if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }\n      *(int *)(pcVar1 + 0x10) = iVar14;\n    }" ({ "{") (expression_statement "iVar14 = *(int *)(param_2 + 0xc);" (assignment_expression "iVar14 = *(int *)(param_2 + 0xc)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_2 + 0xc)" (* "*") (cast_expression "(int *)(param_2 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xc)" (( "(") (binary_expression "param_2 + 0xc" (identifier "param_2") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (if_statement "if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" (if "if") (parenthesized_expression "(iVar14 != 0)" (( "(") (binary_expression "iVar14 != 0" (identifier "iVar14") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" ({ "{") (expression_statement "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);" (assignment_expression "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30)" (identifier "iVar14") (= "=") (call_expression "FUN_0006b7f0(param_1,iVar14,1,&local_30)" (identifier "FUN_0006b7f0") (argument_list "(param_1,iVar14,1,&local_30)" (( "(") (identifier "param_1") (, ",") (identifier "iVar14") (, ",") (number_literal "1") (, ",") (pointer_expression "&local_30" (& "&") (identifier "local_30")) () ")")))) (; ";")) (} "}"))) (expression_statement "*(int *)(pcVar1 + 0xc) = iVar14;" (assignment_expression "*(int *)(pcVar1 + 0xc) = iVar14" (pointer_expression "*(int *)(pcVar1 + 0xc)" (* "*") (cast_expression "(int *)(pcVar1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 0xc)" (( "(") (binary_expression "pcVar1 + 0xc" (identifier "pcVar1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (identifier "iVar14")) (; ";")) (expression_statement "iVar14 = *(int *)(param_2 + 0x10);" (assignment_expression "iVar14 = *(int *)(param_2 + 0x10)" (identifier "iVar14") (= "=") (pointer_expression "*(int *)(param_2 + 0x10)" (* "*") (cast_expression "(int *)(param_2 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x10)" (( "(") (binary_expression "param_2 + 0x10" (identifier "param_2") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if (iVar14 != 0) {\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" (if "if") (parenthesized_expression "(iVar14 != 0)" (( "(") (binary_expression "iVar14 != 0" (identifier "iVar14") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);\n      }" ({ "{") (expression_statement "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30);" (assignment_expression "iVar14 = FUN_0006b7f0(param_1,iVar14,1,&local_30)" (identifier "iVar14") (= "=") (call_expression "FUN_0006b7f0(param_1,iVar14,1,&local_30)" (identifier "FUN_0006b7f0") (argument_list "(param_1,iVar14,1,&local_30)" (( "(") (identifier "param_1") (, ",") (identifier "iVar14") (, ",") (number_literal "1") (, ",") (pointer_expression "&local_30" (& "&") (identifier "local_30")) () ")")))) (; ";")) (} "}"))) (expression_statement "*(int *)(pcVar1 + 0x10) = iVar14;" (assignment_expression "*(int *)(pcVar1 + 0x10) = iVar14" (pointer_expression "*(int *)(pcVar1 + 0x10)" (* "*") (cast_expression "(int *)(pcVar1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 0x10)" (( "(") (binary_expression "pcVar1 + 0x10" (identifier "pcVar1") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "iVar14")) (; ";")) (} "}"))) (expression_statement "pcVar7 = pcVar1;" (assignment_expression "pcVar7 = pcVar1" (identifier "pcVar7") (= "=") (identifier "pcVar1")) (; ";")) (if_statement "if (*(int *)(param_2 + 4) << 7 < 0) {\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 4) << 7 < 0)" (( "(") (binary_expression "*(int *)(param_2 + 4) << 7 < 0" (binary_expression "*(int *)(param_2 + 4) << 7" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (<< "<<") (number_literal "7")) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));\n      *(undefined4 *)(pcVar1 + 0x30) = uVar3;\n    }" ({ "{") (expression_statement "uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));" (assignment_expression "uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" (identifier "uVar3") (= "=") (call_expression "FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" (identifier "FUN_0006bf24") (argument_list "(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30))" (( "(") (identifier "param_1") (, ",") (identifier "pcVar1") (, ",") (pointer_expression "*(undefined4 *)(param_2 + 0x30)" (* "*") (cast_expression "(undefined4 *)(param_2 + 0x30)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x30)" (( "(") (binary_expression "param_2 + 0x30" (identifier "param_2") (+ "+") (number_literal "0x30")) () ")")))) () ")")))) (; ";")) (expression_statement "*(undefined4 *)(pcVar1 + 0x30) = uVar3;" (assignment_expression "*(undefined4 *)(pcVar1 + 0x30) = uVar3" (pointer_expression "*(undefined4 *)(pcVar1 + 0x30)" (* "*") (cast_expression "(undefined4 *)(pcVar1 + 0x30)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar1 + 0x30)" (( "(") (binary_expression "pcVar1 + 0x30" (identifier "pcVar1") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (} "}"))) (if_statement "if (param_4 != (undefined4 *)0x0) {\n      *param_4 = local_30;\n    }" (if "if") (parenthesized_expression "(param_4 != (undefined4 *)0x0)" (( "(") (binary_expression "param_4 != (undefined4 *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      *param_4 = local_30;\n    }" ({ "{") (expression_statement "*param_4 = local_30;" (assignment_expression "*param_4 = local_30" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "local_30")) (; ";")) (} "}"))) (} "}")))) (labeled_statement "LAB_0006bbac:\n  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }" (statement_identifier "LAB_0006bbac") (: ":") (if_statement "if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {\n    return pcVar1;\n  }" (if "if") (parenthesized_expression "(local_2c == *(int *)PTR___stack_chk_guard_0018fecc)" (( "(") (binary_expression "local_2c == *(int *)PTR___stack_chk_guard_0018fecc" (identifier "local_2c") (== "==") (pointer_expression "*(int *)PTR___stack_chk_guard_0018fecc" (* "*") (cast_expression "(int *)PTR___stack_chk_guard_0018fecc" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_guard_0018fecc")))) () ")")) (compound_statement "{\n    return pcVar1;\n  }" ({ "{") (return_statement "return pcVar1;" (return "return") (identifier "pcVar1") (; ";")) (} "}")))) (expression_statement "(*(code *)PTR___stack_chk_fail_0018fea0)();" (call_expression "(*(code *)PTR___stack_chk_fail_0018fea0)()" (parenthesized_expression "(*(code *)PTR___stack_chk_fail_0018fea0)" (( "(") (pointer_expression "*(code *)PTR___stack_chk_fail_0018fea0" (* "*") (cast_expression "(code *)PTR___stack_chk_fail_0018fea0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___stack_chk_fail_0018fea0"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (pcVar7 == (char *)0x0) {\n    return (char *)0x0;\n  }" (if "if") (parenthesized_expression "(pcVar7 == (char *)0x0)" (( "(") (binary_expression "pcVar7 == (char *)0x0" (identifier "pcVar7") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return (char *)0x0;\n  }" ({ "{") (return_statement "return (char *)0x0;" (return "return") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "pcVar7 = (char *)FUN_0006b7f0();" (assignment_expression "pcVar7 = (char *)FUN_0006b7f0()" (identifier "pcVar7") (= "=") (cast_expression "(char *)FUN_0006b7f0()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0006b7f0()" (identifier "FUN_0006b7f0") (argument_list "()" (( "(") () ")"))))) (; ";")) (return_statement "return pcVar7;" (return "return") (identifier "pcVar7") (; ";")) (} "}")))

type_1 * function_1(type_2 *db,type_1 *p,int var_6,type_3 **var_2)

{
  type_3 *var_12;
  type_4 *paVar1;
  type_5 *pEVar2;
  type_6 *pWVar3;
  type_7 *pSVar4;
  int var_4;
  type_1 *var_20;
  type_4 *var_10;
  type_4 *var_9;
  type_4 *var_11;
  type_8 var_13;
  type_9 aVar11;
  char *var_8;
  type_2 *db_00;
  type_4 aVar12;
  type_4 aVar13;
  type_4 aVar14;
  type_8 var_7;
  type_4 aVar16;
  type_8 var_15;
  int var_1;
  type_4 p_00;
  type_3 *var_5;
  type_2 *var_22;
  
  var_22 = (type_2 *)**(type_10 **)(var_1 + 0x1246dc);
  aVar12.iValue = var_6;
  if (var_2 == (type_3 **)0x0) {
    var_4 = var_3(p,var_6);
    p_00.iValue = var_4 >> 0x1f;
    var_5 = (type_3 *)(*(type_11 *)(*(int *)(var_1 + 0x124368) + 0x1414))(db);
    var_15 = 0;
  }
  else {
    var_5 = *var_2;
    var_15 = 0x8000;
    p_00.iValue = var_6;
  }
  var_12 = var_5;
  if (var_5 == (type_3 *)0x0) goto LAB_0006bbac;
  if (var_6 == 0) {
    var_7 = p->flags;
    if ((var_7 & 0x400) == 0) {
      var_8 = (p->u).zToken;
      aVar16.iValue = 0x38;
      if (var_8 != (char *)0x0) {
        var_13 = 0;
        goto LAB_0006bcbc;
      }
    }
    aVar16.iValue = 0x38;
    var_13 = 0;
    p_00.iValue = var_6;
LAB_0006bc08:
    if ((var_7 & 0x4000) == 0) {
      if ((var_7 & 0x2000) == 0) {
        paVar1 = (type_4 *)var_12;
        var_11 = (type_4 *)p;
        do {
          var_9 = var_11;
          var_10 = paVar1;
          aVar14 = var_9[1];
          aVar13 = var_9[2];
          aVar12 = var_9[3];
          *var_10 = *var_9;
          var_10[1] = aVar14;
          var_10[2] = aVar13;
          var_10[3] = aVar12;
          var_11 = var_9 + 4;
          paVar1 = var_10 + 4;
        } while (var_11 != (type_4 *)&p->y);
        aVar12 = *var_11;
        aVar11 = *(type_9 *)(var_9 + 5);
        var_10[4] = aVar12;
        *(type_9 *)(var_10 + 5) = aVar11;
        goto LAB_0006ba6c;
      }
      var_4 = 0x1c;
    }
    else {
      var_4 = 0xc;
    }
    (**(type_11 **)(var_1 + 0x1246e4))(var_12,p,var_4);
    aVar14.zToken = (char *)(0x38 - var_4);
    aVar12.zToken = (char *)0x0;
    (**(type_11 **)(var_1 + 0x124610))(var_5 + var_4);
    var_7 = *(type_8 *)(var_12 + 4);
  }
  else {
    var_13 = 0x38;
    if ((p->op != 0xa6) && (var_13 = 0, -1 < (int)(p->flags << 7))) {
      if (p->pLeft == (type_1 *)0x0) {
        var_13 = 0x400c;
        if ((p->x).pList != (type_5 *)0x0) {
          var_13 = 0x201c;
        }
      }
      else {
        var_13 = 0x201c;
      }
    }
    var_7 = p->flags;
    aVar16.iValue = var_13 & 0xfff;
    if ((var_7 & 0x400) == 0) {
      var_8 = (p->u).zToken;
      if (var_8 == (char *)0x0) {
        p_00.zToken = (char *)0x0;
      }
      else {
LAB_0006bcbc:
        var_4 = var_14(var_8);
        p_00.zToken = (char *)(var_4 + 1);
        if (var_6 == 0) goto LAB_0006bc08;
      }
    }
    else {
      p_00.zToken = (char *)0x0;
    }
    aVar12 = (type_4)p;
    aVar14 = aVar16;
    (**(type_11 **)(var_1 + 0x1246e4))(var_12);
LAB_0006ba6c:
    var_7 = *(type_8 *)(var_12 + 4);
  }
  *(type_8 *)(var_12 + 4) = var_7 & 0xfffe1fff | var_15 | var_13 & 0x6000;
  if (p_00.zToken == (char *)0x0) {
    var_15 = p->flags;
    p_00 = aVar14;
  }
  else {
    *(type_3 **)(var_12 + 8) = var_5 + (int)aVar16.zToken;
    aVar12 = p->u;
    (**(type_11 **)(var_1 + 0x1246e4))();
    var_15 = p->flags;
  }
  if (((var_15 | *(type_8 *)(var_12 + 4)) & 0x804000) == 0) {
    if ((var_15 & 0x800) == 0) {
      aVar12 = (type_4)(p->x).pList;
      p_00.iValue = var_6;
      pEVar2 = var_16(db,(type_5 *)aVar12.zToken,var_6);
      *(type_5 **)(var_12 + 0x14) = pEVar2;
    }
    else {
      aVar12 = (type_4)(p->x).pSelect;
      p_00.iValue = var_6;
      pSVar4 = var_17(db,(type_7 *)aVar12.zToken,var_6);
      *(type_7 **)(var_12 + 0x14) = pSVar4;
    }
  }
  var_15 = *(type_8 *)(var_12 + 4);
  if ((var_15 & 0x1006000) == 0) {
    if ((p->flags & 0x804000) == 0) {
      if (*var_12 == 0xa6) {
        *(type_1 **)(var_12 + 0xc) = p->pLeft;
      }
      else {
        var_20 = var_18(db,p->pLeft,0);
        *(type_1 **)(var_12 + 0xc) = var_20;
      }
      p_00.zToken = (char *)0x0;
      aVar12 = (type_4)p->pRight;
      var_20 = var_18(db,(type_1 *)aVar12.zToken,0);
      *(type_1 **)(var_12 + 0x10) = var_20;
    }
  }
  else {
    var_4 = var_19(p,var_6);
    var_5 = var_5 + var_4;
    if ((var_15 & 0x804000) == 0) {
      var_20 = p->pLeft;
      if (var_20 != (type_1 *)0x0) {
        p_00.iValue = 1;
        var_20 = function_1(db,var_20,1,&var_5);
      }
      *(type_1 **)(var_12 + 0xc) = var_20;
      var_20 = p->pRight;
      if (var_20 != (type_1 *)0x0) {
        p_00.iValue = 1;
        var_20 = function_1(db,var_20,1,&var_5);
      }
      *(type_1 **)(var_12 + 0x10) = var_20;
    }
    aVar12 = (type_4)var_12;
    if ((int)(p->flags << 7) < 0) {
      p_00 = (type_4)(p->y).pWin;
      pWVar3 = var_21(db,(type_1 *)var_12,(type_6 *)p_00.zToken);
      *(type_6 **)(var_12 + 0x30) = pWVar3;
    }
    if (var_2 != (type_3 **)0x0) {
      *var_2 = var_5;
    }
  }
LAB_0006bbac:
  if (var_22 == (type_2 *)**(int **)(var_1 + 0x1246dc)) {
    return (type_1 *)var_12;
  }
  db_00 = var_22;
  (**(type_11 **)(var_1 + 0x1246b0))();
  if (aVar12.zToken == (char *)0x0) {
    return (type_1 *)0x0;
  }
  var_20 = function_1(db_00,(type_1 *)aVar12.zToken,p_00.iValue,(type_3 **)0x0);
  return var_20;
}


(translation_unit (function_definition type: (primitive_type) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (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 (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (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)))))) arguments: (argument_list (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) 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: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (goto_statement label: (statement_identifier)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (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: (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: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator 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: (identifier))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (number_literal) (binary_expression left: (number_literal) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (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)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (number_literal) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (identifier) (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (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))))))))))) (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: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (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)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (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)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (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))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (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 declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (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)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) 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: (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))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_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))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (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: (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)))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (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))))) (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: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (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: (number_literal))))) right: (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (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: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal) (pointer_expression argument: (identifier)))))))) (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: (identifier) right: (number_literal))))) right: (identifier))) (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: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal) (pointer_expression argument: (identifier)))))))) (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: (identifier) right: (number_literal))))) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (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))))))))) (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))))) (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: (pointer_expression argument: (identifier)) right: (identifier)))))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) consequence: (compound_statement (return_statement (identifier))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list))))) (return_statement (identifier)))))

char * MASKED(undefined4 param_1,char *param_2,char *param_3,undefined4 *param_4)

{
  char *pcVar1;
  char *pcVar2;
  undefined4 uVar3;
  char *pcVar4;
  char *pcVar5;
  uint uVar6;
  char *pcVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  int iVar14;
  char *local_30;
  int local_2c;
  
  local_2c = *(int *)PTR___stack_chk_guard_0018fecc;
  pcVar7 = param_3;
  if (param_4 == (undefined4 *)0x0) {
    FUN_0005c058(param_2);
    local_30 = (char *)(*(code *)(PTR_LAB_0018fb58 + 0x1414))(param_1);
    uVar13 = 0;
  }
  else {
    local_30 = (char *)*param_4;
    uVar13 = 0x8000;
  }
  pcVar1 = local_30;
  if (local_30 == (char *)0x0) goto LAB_0006bbac;
  if (param_3 == (char *)0x0) {
    uVar11 = *(uint *)(param_2 + 4);
    if (((uVar11 & 0x400) == 0) && (uVar12 = 0x38, *(int *)(param_2 + 8) != 0)) {
      uVar6 = 0;
LAB_0006bcbc:
      iVar14 = FUN_0005b438();
      iVar14 = iVar14 + 1;
      if (param_3 != (char *)0x0) goto LAB_0006ba50;
    }
    else {
      uVar12 = 0x38;
      uVar6 = 0;
      iVar14 = 0;
    }
    if ((uVar11 & 0x4000) == 0) {
      if ((uVar11 & 0x2000) == 0) {
        pcVar2 = pcVar1;
        pcVar7 = param_2;
        do {
          pcVar5 = pcVar7;
          pcVar4 = pcVar2;
          uVar9 = *(undefined4 *)(pcVar5 + 4);
          uVar8 = *(undefined4 *)(pcVar5 + 8);
          uVar3 = *(undefined4 *)(pcVar5 + 0xc);
          *(undefined4 *)pcVar4 = *(undefined4 *)pcVar5;
          *(undefined4 *)(pcVar4 + 4) = uVar9;
          *(undefined4 *)(pcVar4 + 8) = uVar8;
          *(undefined4 *)(pcVar4 + 0xc) = uVar3;
          pcVar7 = pcVar5 + 0x10;
          pcVar2 = pcVar4 + 0x10;
        } while (pcVar7 != param_2 + 0x30);
        pcVar7 = *(char **)pcVar7;
        uVar3 = *(undefined4 *)(pcVar5 + 0x14);
        *(char **)(pcVar4 + 0x10) = pcVar7;
        *(undefined4 *)(pcVar4 + 0x14) = uVar3;
        goto LAB_0006ba6c;
      }
      iVar10 = 0x1c;
    }
    else {
      iVar10 = 0xc;
    }
    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,iVar10);
    pcVar7 = (char *)0x0;
    (*(code *)PTR_memset_0018fe00)(local_30 + iVar10,0,0x38 - iVar10);
    uVar11 = *(uint *)(pcVar1 + 4);
  }
  else {
    uVar6 = 0x38;
    if ((*param_2 != -0x5a) && (uVar6 = 0, -1 < *(int *)(param_2 + 4) << 7)) {
      if (*(int *)(param_2 + 0xc) == 0) {
        uVar6 = 0x400c;
        if (*(int *)(param_2 + 0x14) != 0) {
          uVar6 = 0x201c;
        }
      }
      else {
        uVar6 = 0x201c;
      }
    }
    uVar11 = *(uint *)(param_2 + 4);
    uVar12 = uVar6 & 0xfff;
    if ((uVar11 & 0x400) == 0) {
      if (*(int *)(param_2 + 8) != 0) goto LAB_0006bcbc;
      iVar14 = 0;
    }
    else {
      iVar14 = 0;
    }
LAB_0006ba50:
    pcVar7 = param_2;
    (*(code *)PTR_memcpy_0018fed4)(pcVar1,param_2,uVar12);
LAB_0006ba6c:
    uVar11 = *(uint *)(pcVar1 + 4);
  }
  *(uint *)(pcVar1 + 4) = uVar11 & 0xfffe1fff | uVar13 | uVar6 & 0x6000;
  if (iVar14 == 0) {
    uVar13 = *(uint *)(param_2 + 4);
  }
  else {
    *(char **)(pcVar1 + 8) = local_30 + uVar12;
    pcVar7 = *(char **)(param_2 + 8);
    (*(code *)PTR_memcpy_0018fed4)(local_30 + uVar12,pcVar7,iVar14);
    uVar13 = *(uint *)(param_2 + 4);
  }
  if (((uVar13 | *(uint *)(pcVar1 + 4)) & 0x804000) == 0) {
    if ((uVar13 & 0x800) == 0) {
      pcVar7 = *(char **)(param_2 + 0x14);
      uVar3 = FUN_0006bd40(param_1,pcVar7,param_3);
      *(undefined4 *)(pcVar1 + 0x14) = uVar3;
    }
    else {
      pcVar7 = *(char **)(param_2 + 0x14);
      uVar3 = FUN_0006b40c(param_1);
      *(undefined4 *)(pcVar1 + 0x14) = uVar3;
    }
  }
  uVar13 = *(uint *)(pcVar1 + 4);
  if ((uVar13 & 0x1006000) == 0) {
    if ((*(uint *)(param_2 + 4) & 0x804000) == 0) {
      if (*pcVar1 == -0x5a) {
        *(undefined4 *)(pcVar1 + 0xc) = *(undefined4 *)(param_2 + 0xc);
      }
      else {
        uVar3 = FUN_0006bcf4(param_1,*(undefined4 *)(param_2 + 0xc),0);
        *(undefined4 *)(pcVar1 + 0xc) = uVar3;
      }
      pcVar7 = *(char **)(param_2 + 0x10);
      uVar3 = FUN_0006bcf4(param_1,pcVar7,0);
      *(undefined4 *)(pcVar1 + 0x10) = uVar3;
    }
  }
  else {
    iVar14 = FUN_0005bf8c(param_2,param_3);
    local_30 = local_30 + iVar14;
    if ((uVar13 & 0x804000) == 0) {
      iVar14 = *(int *)(param_2 + 0xc);
      if (iVar14 != 0) {
        iVar14 = MASKED(param_1,iVar14,1,&local_30);
      }
      *(int *)(pcVar1 + 0xc) = iVar14;
      iVar14 = *(int *)(param_2 + 0x10);
      if (iVar14 != 0) {
        iVar14 = MASKED(param_1,iVar14,1,&local_30);
      }
      *(int *)(pcVar1 + 0x10) = iVar14;
    }
    pcVar7 = pcVar1;
    if (*(int *)(param_2 + 4) << 7 < 0) {
      uVar3 = FUN_0006bf24(param_1,pcVar1,*(undefined4 *)(param_2 + 0x30));
      *(undefined4 *)(pcVar1 + 0x30) = uVar3;
    }
    if (param_4 != (undefined4 *)0x0) {
      *param_4 = local_30;
    }
  }
LAB_0006bbac:
  if (local_2c == *(int *)PTR___stack_chk_guard_0018fecc) {
    return pcVar1;
  }
  (*(code *)PTR___stack_chk_fail_0018fea0)();
  if (pcVar7 == (char *)0x0) {
    return (char *)0x0;
  }
  pcVar7 = (char *)MASKED();
  return pcVar7;
}

