
/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::wistream& std::getline<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>
   >(std::wistream&, std::wstring&, wchar_t) */

wistream *
std::getline<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>
          (wistream *param_1,wstring *param_2,wchar_t param_3)

{
  int *piVar1;
  wstring *pwVar2;
  int iVar3;
  wistream *pwVar4;
  uint uVar5;
  undefined2 in_register_00000018;
  int iVar6;
  wchar_t *pwVar7;
  int *piVar8;
  uint uVar9;
  uint uVar10;
  wchar_t *pwVar11;
  char local_38 [8];
  int local_30;
  wstring *local_2c;
  
  iVar6 = CONCAT22(in_register_00000018,param_3);
  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);
  if (local_38[0] != '\0') {
    iVar3 = *(int *)param_1;
    *(undefined4 *)(param_2 + 4) = 0;
    iVar3 = *(int *)(iVar3 + -0xc);
    **(undefined4 **)param_2 = 0;
    pwVar4 = param_1 + iVar3;
    piVar8 = *(int **)(pwVar4 + 0x7c);
    pwVar11 = (wchar_t *)piVar8[2];
    pwVar7 = (wchar_t *)piVar8[3];
    if (pwVar11 < pwVar7) {
      iVar3 = *(int *)pwVar11;
      uVar9 = 6;
      if (iVar3 == -1) goto LAB_00332904;
    }
    else {
                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */
      iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);
      if (iVar3 == -1) {
        uVar9 = 6;
        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);
        goto LAB_00332904;
      }
      pwVar7 = (wchar_t *)piVar8[3];
      pwVar11 = (wchar_t *)piVar8[2];
    }
    uVar10 = 0;
    if (iVar6 == iVar3) {
      if (pwVar7 <= pwVar11) {
                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */
        (**(code **)(*piVar8 + 0x28))(piVar8);
        return param_1;
      }
LAB_00332c04:
      piVar8[2] = (int)(pwVar11 + 2);
      return param_1;
    }
    local_2c = param_2 + 8;
    do {
      uVar5 = (int)pwVar7 - (int)pwVar11 >> 2;
      uVar9 = 0x1fffffff - uVar10;
      if ((int)uVar5 <= (int)(0x1fffffff - uVar10)) {
        uVar9 = uVar5;
      }
      uVar5 = *(uint *)(param_2 + 4);
      if ((int)uVar9 < 2) {
        local_30 = uVar5 + 1;
        pwVar2 = *(wstring **)param_2;
        uVar9 = 3;
        if (pwVar2 != local_2c) {
          uVar9 = *(uint *)(param_2 + 8);
        }
        if (uVar9 < uVar5 + 1) {
          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);
          pwVar2 = *(wstring **)param_2;
          pwVar11 = (wchar_t *)piVar8[2];
          pwVar7 = (wchar_t *)piVar8[3];
        }
        uVar10 = uVar10 + 1;
        *(int *)(pwVar2 + uVar5 * 4) = iVar3;
        *(int *)(param_2 + 4) = local_30;
        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;
        if (pwVar11 < pwVar7) {
          iVar3 = *(int *)pwVar11;
          piVar8[2] = (int)(pwVar11 + 2);
        }
        else {
          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);
        }
        if (iVar3 != -1) {
          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;
          iVar3 = *(int *)piVar8[2];
          goto joined_r0x00332ad0;
        }
LAB_00332b8c:
        uVar9 = 2;
        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);
        goto LAB_00332904;
      }
      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9);
      if (iVar3 != 0) {
        uVar9 = iVar3 - (int)pwVar11 >> 2;
      }
      if (0x1fffffff - uVar5 < uVar9) {
                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */
        pwVar4 = (wistream *)
                 (*(code *)PTR___throw_length_error_004c1e74)
                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);
        return pwVar4;
      }
                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */
      wstring::_M_append(param_2,pwVar11,uVar9);
      uVar10 = uVar10 + uVar9;
      piVar1 = (int *)(piVar8[2] + uVar9 * 4);
      piVar8[2] = (int)piVar1;
      if (piVar1 < (int *)piVar8[3]) {
        iVar3 = *piVar1;
      }
      else {
LAB_00332b14:
        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);
      }
joined_r0x00332ad0:
      if (0x1ffffffe < uVar10) {
        if (iVar3 == -1) goto LAB_00332b8c;
        if (iVar6 != iVar3) goto LAB_003328f4;
        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;
        piVar8[2] = piVar8[2] + 4;
        goto joined_r0x00332b04;
      }
      if (iVar3 == -1) {
        uVar9 = 2;
        if (uVar10 == 0) {
          uVar9 = 6;
        }
        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);
        goto LAB_00332904;
      }
      pwVar11 = (wchar_t *)piVar8[2];
      pwVar7 = (wchar_t *)piVar8[3];
    } while (iVar6 != iVar3);
    if (pwVar11 < pwVar7) goto LAB_00332c04;
LAB_00332b6c:
    (**(code **)(*piVar8 + 0x28))(piVar8);
joined_r0x00332b04:
    if (uVar10 != 0xffffffff) {
      return param_1;
    }
  }
LAB_003328f4:
  uVar9 = 4;
  pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);
LAB_00332904:
  (*(code *)PTR_clear_004c5180)(pwVar4,uVar9 | *(uint *)(pwVar4 + 0x14));
  return param_1;
}



int * FUN_0033288c(int *param_1,wstring *param_2,int param_3)

{
  int *piVar1;
  wstring *pwVar2;
  int iVar3;
  uint uVar4;
  wchar_t *pwVar5;
  int *piVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  wchar_t *pwVar10;
  char local_38 [8];
  int local_30;
  wstring *local_2c;
  
  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);
  if (local_38[0] != '\0') {
    iVar3 = *param_1;
    *(undefined4 *)(param_2 + 4) = 0;
    iVar3 = *(int *)(iVar3 + -0xc);
    **(undefined4 **)param_2 = 0;
    iVar3 = (int)param_1 + iVar3;
    piVar6 = *(int **)(iVar3 + 0x7c);
    pwVar10 = (wchar_t *)piVar6[2];
    pwVar5 = (wchar_t *)piVar6[3];
    if (pwVar10 < pwVar5) {
      iVar9 = *(int *)pwVar10;
      uVar7 = 6;
      if (iVar9 == -1) goto LAB_00332904;
    }
    else {
                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */
      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);
      if (iVar9 == -1) {
        uVar7 = 6;
        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);
        goto LAB_00332904;
      }
      pwVar5 = (wchar_t *)piVar6[3];
      pwVar10 = (wchar_t *)piVar6[2];
    }
    uVar8 = 0;
    if (param_3 == iVar9) {
      if (pwVar5 <= pwVar10) {
                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */
        (**(code **)(*piVar6 + 0x28))(piVar6);
        return param_1;
      }
LAB_00332c04:
      piVar6[2] = (int)(pwVar10 + 2);
      return param_1;
    }
    local_2c = param_2 + 8;
    do {
      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;
      uVar7 = 0x1fffffff - uVar8;
      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {
        uVar7 = uVar4;
      }
      uVar4 = *(uint *)(param_2 + 4);
      if ((int)uVar7 < 2) {
        local_30 = uVar4 + 1;
        pwVar2 = *(wstring **)param_2;
        uVar7 = 3;
        if (pwVar2 != local_2c) {
          uVar7 = *(uint *)(param_2 + 8);
        }
        if (uVar7 < uVar4 + 1) {
          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);
          pwVar2 = *(wstring **)param_2;
          pwVar10 = (wchar_t *)piVar6[2];
          pwVar5 = (wchar_t *)piVar6[3];
        }
        uVar8 = uVar8 + 1;
        *(int *)(pwVar2 + uVar4 * 4) = iVar9;
        *(int *)(param_2 + 4) = local_30;
        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;
        if (pwVar10 < pwVar5) {
          iVar3 = *(int *)pwVar10;
          piVar6[2] = (int)(pwVar10 + 2);
        }
        else {
          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);
        }
        if (iVar3 != -1) {
          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;
          iVar9 = *(int *)piVar6[2];
          goto joined_r0x00332ad0;
        }
LAB_00332b8c:
        uVar7 = 2;
        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);
        goto LAB_00332904;
      }
      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);
      if (iVar3 != 0) {
        uVar7 = iVar3 - (int)pwVar10 >> 2;
      }
      if (0x1fffffff - uVar4 < uVar7) {
                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */
        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)
                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);
        return piVar6;
      }
                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */
      std::wstring::_M_append(param_2,pwVar10,uVar7);
      uVar8 = uVar8 + uVar7;
      piVar1 = (int *)(piVar6[2] + uVar7 * 4);
      piVar6[2] = (int)piVar1;
      if (piVar1 < (int *)piVar6[3]) {
        iVar9 = *piVar1;
      }
      else {
LAB_00332b14:
        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);
      }
joined_r0x00332ad0:
      if (0x1ffffffe < uVar8) {
        if (iVar9 == -1) goto LAB_00332b8c;
        if (param_3 != iVar9) goto LAB_003328f4;
        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;
        piVar6[2] = piVar6[2] + 4;
        goto joined_r0x00332b04;
      }
      if (iVar9 == -1) {
        uVar7 = 2;
        if (uVar8 == 0) {
          uVar7 = 6;
        }
        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);
        goto LAB_00332904;
      }
      pwVar10 = (wchar_t *)piVar6[2];
      pwVar5 = (wchar_t *)piVar6[3];
    } while (param_3 != iVar9);
    if (pwVar10 < pwVar5) goto LAB_00332c04;
LAB_00332b6c:
    (**(code **)(*piVar6 + 0x28))(piVar6);
joined_r0x00332b04:
    if (uVar8 != 0xffffffff) {
      return param_1;
    }
  }
LAB_003328f4:
  uVar7 = 4;
  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);
LAB_00332904:
  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));
  return param_1;
}


lui gp,0x19
addiu gp,gp,0x69b4
addu gp,gp,t9
addiu sp,sp,-0x58
lw t9,-0x40c4(gp)
sw s7,0x4c(sp)
or s7,a0,zero
sw s6,0x48(sp)
addiu a0,sp,0x20
or s6,a2,zero
sw gp,0x18(sp)
li a2,0x1
sw s4,0x40(sp)
sw ra,0x54(sp)
or s4,a1,zero
sw s8,0x50(sp)
or a1,s7,zero
sw s5,0x44(sp)
sw s3,0x3c(sp)
sw s2,0x38(sp)
sw s1,0x34(sp)
jalr t9
_sw s0,0x30(sp)
lbu v0,0x20(sp)
bne v0,zero,0x00332948
_lw gp,0x18(sp)
lw v0,0x0(s7)
li s2,0x4
lw a0,-0xc(v0)
addu a0,s7,a0
lw a1,0x14(a0)
lw t9,-0x40c0(gp)
jalr t9
_or a1,s2,a1
lw ra,0x54(sp)
or v0,s7,zero
lw s8,0x50(sp)
lw s7,0x4c(sp)
lw s6,0x48(sp)
lw s5,0x44(sp)
lw s4,0x40(sp)
lw s3,0x3c(sp)
lw s2,0x38(sp)
lw s1,0x34(sp)
lw s0,0x30(sp)
jr ra
_addiu sp,sp,0x58
lw v1,0x0(s7)
sw zero,0x4(s4)
lw v0,0x0(s4)
lw a0,-0xc(v1)
sw zero,0x0(v0)
addu a0,s7,a0
lw s1,0x7c(a0)
lw s8,0x8(s1)
lw a2,0xc(s1)
sltu v0,s8,a2
beq v0,zero,0x00332bd4
_li v0,-0x1
lw s3,0x0(s8)
beq s3,v0,0x00332904
_li s2,0x6
beq s6,s3,0x00332c0c
_or s2,zero,zero
addiu v0,s4,0x8
lui s5,0x1fff
sw v0,0x2c(sp)
b 0x00332a34
_ori s5,s5,0xffff
lw t9,-0x3530(gp)
or a2,v0,zero
or a1,s6,zero
or a0,s8,zero
jalr t9
_or s3,v0,zero
beq v0,zero,0x003329c8
_lw gp,0x18(sp)
subu v0,v0,s8
sra s3,v0,0x2
subu s0,s5,s0
sltu s0,s0,s3
bne s0,zero,0x00332c30
_lw t9,-0x6148(gp)
or a2,s3,zero
or a1,s8,zero
bal 0x00338614
_or a0,s4,zero
lw v0,0x8(s1)
sll a0,s3,0x2
lw v1,0xc(s1)
addu s2,s2,s3
lw gp,0x18(sp)
addu v0,v0,a0
sltu v1,v0,v1
beq v1,zero,0x00332b14
_sw v0,0x8(s1)
lw s3,0x0(v0)
sltu v0,s2,s5
beq v0,zero,0x00332adc
_li v0,-0x1
li v0,-0x1
beq s3,v0,0x00332bb8
_li v1,0x6
lw s8,0x8(s1)
beq s6,s3,0x00332b60
_lw a2,0xc(s1)
subu a0,a2,s8
subu v0,s5,s2
sra a0,a0,0x2
slt a1,v0,a0
movz v0,a0,a1
slti a0,v0,0x2
beq a0,zero,0x003329a0
_lw s0,0x4(s4)
addiu v1,s0,0x1
lw v0,0x0(s4)
sw v1,0x28(sp)
lw v1,0x2c(sp)
beq v0,v1,0x00332a70
_li a0,0x3
lw a0,0x8(s4)
addiu v1,s0,0x1
sltu a0,a0,v1
bne a0,zero,0x00332b30
_lw t9,-0x6144(gp)
sll s0,s0,0x2
sltu a2,s8,a2
addu s0,v0,s0
lw v0,0x28(sp)
addiu s2,s2,0x1
sw s3,0x0(s0)
sw v0,0x4(s4)
beq a2,zero,0x00332ba0
_sw zero,0x4(s0)
addiu a0,s8,0x4
lw v0,0x0(s8)
sw a0,0x8(s1)
li v1,-0x1
beq v0,v1,0x00332b8c
_nop
lw v1,0x8(s1)
lw v0,0xc(s1)
sltu v0,v1,v0
beq v0,zero,0x00332b14
_sltu v0,s2,s5
bne v0,zero,0x00332a1c
_lw s3,0x0(v1)
li v0,-0x1
beq s3,v0,0x00332b8c
_nop
bne s6,s3,0x003328f4
_nop
lw v0,0x8(s1)
lw v1,0xc(s1)
sltu v1,v0,v1
beq v1,zero,0x00332b6c
_addiu s2,s2,0x1
addiu v0,v0,0x4
beq s2,zero,0x003328f4
_sw v0,0x8(s1)
b 0x00332918
_lw ra,0x54(sp)
lw v0,0x0(s1)
lw t9,0x24(v0)
jalr t9
_or a0,s1,zero
lw gp,0x18(sp)
b 0x00332a10
_or s3,v0,zero
li v0,0x1
or a3,zero,zero
or a2,zero,zero
sw v0,0x10(sp)
or a1,s0,zero
bal 0x00336494
_or a0,s4,zero
lw gp,0x18(sp)
lw v0,0x0(s4)
lw s8,0x8(s1)
b 0x00332a80
_lw a2,0xc(s1)
sltu a2,s8,a2
bne a2,zero,0x00332c00
_addiu s2,s2,0x1
lw v0,0x0(s1)
lw t9,0x28(v0)
jalr t9
_or a0,s1,zero
beq s2,zero,0x003328f4
_lw gp,0x18(sp)
b 0x00332918
_lw ra,0x54(sp)
lw v0,0x0(s7)
li s2,0x2
lw a0,-0xc(v0)
b 0x00332904
_addu a0,s7,a0
lw v0,0x0(s1)
lw t9,0x28(v0)
jalr t9
_or a0,s1,zero
b 0x00332ab0
_lw gp,0x18(sp)
lw v0,0x0(s7)
li a1,0x2
movz a1,v1,s2
lw a0,-0xc(v0)
or s2,a1,zero
b 0x00332904
_addu a0,s7,a0
lw v0,0x0(s1)
lw t9,0x24(v0)
jalr t9
_or a0,s1,zero
li v1,-0x1
lw gp,0x18(sp)
beq v0,v1,0x00332c40
_or s3,v0,zero
lw a2,0xc(s1)
b 0x00332984
_lw s8,0x8(s1)
addiu v1,s8,0x4
b 0x00332914
_sw v1,0x8(s1)
sltu a2,s8,a2
bne a2,zero,0x00332c04
_addiu v1,s8,0x4
lw v0,0x0(s1)
lw t9,0x28(v0)
jalr t9
_or a0,s1,zero
b 0x00332914
_nop
lw a0,-0x7fc4(gp)
lw t9,-0x73cc(gp)
jalr t9
_addiu a0,a0,0x446c
lw v0,0x0(s7)
li s2,0x6
lw a0,-0xc(v0)
b 0x00332904
_addu a0,s7,a0
(translation_unit "int * FUN_0033288c(int *param_1,wstring *param_2,int param_3)\n\n{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  uint uVar4;\n  wchar_t *pwVar5;\n  int *piVar6;\n  uint uVar7;\n  uint uVar8;\n  int iVar9;\n  wchar_t *pwVar10;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar7 = 4;\n  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));\n  return param_1;\n}\n\n" (function_definition "int * FUN_0033288c(int *param_1,wstring *param_2,int param_3)\n\n{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  uint uVar4;\n  wchar_t *pwVar5;\n  int *piVar6;\n  uint uVar7;\n  uint uVar8;\n  int iVar9;\n  wchar_t *pwVar10;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar7 = 4;\n  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));\n  return param_1;\n}" primitive_type (pointer_declarator "* FUN_0033288c(int *param_1,wstring *param_2,int param_3)" * (function_declarator "FUN_0033288c(int *param_1,wstring *param_2,int param_3)" identifier (parameter_list "(int *param_1,wstring *param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "wstring *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  uint uVar4;\n  wchar_t *pwVar5;\n  int *piVar6;\n  uint uVar7;\n  uint uVar8;\n  int iVar9;\n  wchar_t *pwVar10;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar7 = 4;\n  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));\n  return param_1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "wstring *pwVar2;" type_identifier (pointer_declarator "*pwVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "wchar_t *pwVar10;" type_identifier (pointer_declarator "*pwVar10" * identifier) ;) (declaration "char local_38 [8];" primitive_type (array_declarator "local_38 [8]" identifier [ number_literal ]) ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "wstring *local_2c;" type_identifier (pointer_declarator "*local_2c" * identifier) ;) (expression_statement "(*(code *)PTR_sentry_004c517c)(local_38,param_1,1);" (call_expression "(*(code *)PTR_sentry_004c517c)(local_38,param_1,1)" (parenthesized_expression "(*(code *)PTR_sentry_004c517c)" ( (pointer_expression "*(code *)PTR_sentry_004c517c" * (cast_expression "(code *)PTR_sentry_004c517c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_38,param_1,1)" ( identifier , identifier , number_literal ))) ;) (if_statement "if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }" if (parenthesized_expression "(local_38[0] != '\0')" ( (binary_expression "local_38[0] != '\0'" (subscript_expression "local_38[0]" identifier [ number_literal ]) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }" { (expression_statement "iVar3 = *param_1;" (assignment_expression "iVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*(undefined4 *)(param_2 + 4) = 0;" (assignment_expression "*(undefined4 *)(param_2 + 4) = 0" (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar3 = *(int *)(iVar3 + -0xc);" (assignment_expression "iVar3 = *(int *)(iVar3 + -0xc)" identifier = (pointer_expression "*(int *)(iVar3 + -0xc)" * (cast_expression "(int *)(iVar3 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + -0xc)" ( (binary_expression "iVar3 + -0xc" identifier + number_literal) ))))) ;) (expression_statement "**(undefined4 **)param_2 = 0;" (assignment_expression "**(undefined4 **)param_2 = 0" (pointer_expression "**(undefined4 **)param_2" * (pointer_expression "*(undefined4 **)param_2" * (cast_expression "(undefined4 **)param_2" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) = number_literal) ;) (expression_statement "iVar3 = (int)param_1 + iVar3;" (assignment_expression "iVar3 = (int)param_1 + iVar3" identifier = (binary_expression "(int)param_1 + iVar3" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + identifier)) ;) (expression_statement "piVar6 = *(int **)(iVar3 + 0x7c);" (assignment_expression "piVar6 = *(int **)(iVar3 + 0x7c)" identifier = (pointer_expression "*(int **)(iVar3 + 0x7c)" * (cast_expression "(int **)(iVar3 + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0x7c)" ( (binary_expression "iVar3 + 0x7c" identifier + number_literal) ))))) ;) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" identifier = (cast_expression "(wchar_t *)piVar6[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" identifier = (cast_expression "(wchar_t *)piVar6[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) ;) (if_statement "if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" if (parenthesized_expression "(pwVar10 < pwVar5)" ( (binary_expression "pwVar10 < pwVar5" identifier < identifier) )) (compound_statement "{\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }" { (expression_statement "iVar9 = *(int *)pwVar10;" (assignment_expression "iVar9 = *(int *)pwVar10" identifier = (pointer_expression "*(int *)pwVar10" * (cast_expression "(int *)pwVar10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" identifier = number_literal) ;) (if_statement "if (iVar9 == -1) goto LAB_00332904;" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00332904;" goto statement_identifier ;)) }) (else_clause "else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" else (compound_statement "{\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" { comment (expression_statement "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" (assignment_expression "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6)" identifier = (call_expression "(**(code **)(*piVar6 + 0x24))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x24))" ( (pointer_expression "**(code **)(*piVar6 + 0x24)" * (pointer_expression "*(code **)(*piVar6 + 0x24)" * (cast_expression "(code **)(*piVar6 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x24)" ( (binary_expression "*piVar6 + 0x24" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier )))) ;) (if_statement "if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (compound_statement "{\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" identifier = number_literal) ;) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" identifier = (cast_expression "(wchar_t *)piVar6[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" identifier = (cast_expression "(wchar_t *)piVar6[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) ;) }))) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (if_statement "if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }" if (parenthesized_expression "(param_3 == iVar9)" ( (binary_expression "param_3 == iVar9" identifier == identifier) )) (compound_statement "{\n      if (pwVar5 <= pwVar10) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }" { (if_statement "if (pwVar5 <= pwVar10) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }" if (parenthesized_expression "(pwVar5 <= pwVar10)" ( (binary_expression "pwVar5 <= pwVar10" identifier <= identifier) )) (compound_statement "{\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }" { comment (expression_statement "(**(code **)(*piVar6 + 0x28))(piVar6);" (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" ( (pointer_expression "**(code **)(*piVar6 + 0x28)" * (pointer_expression "*(code **)(*piVar6 + 0x28)" * (cast_expression "(code **)(*piVar6 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x28)" ( (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier ))) ;) (return_statement "return param_1;" return identifier ;) })) (labeled_statement "LAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);" statement_identifier : (expression_statement "piVar6[2] = (int)(pwVar10 + 2);" (assignment_expression "piVar6[2] = (int)(pwVar10 + 2)" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar10 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar10 + 2)" ( (binary_expression "pwVar10 + 2" identifier + number_literal) )))) ;)) (return_statement "return param_1;" return identifier ;) })) (expression_statement "local_2c = param_2 + 8;" (assignment_expression "local_2c = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) (do_statement "do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);" do (compound_statement "{\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    }" { (expression_statement "uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;" (assignment_expression "uVar4 = (int)pwVar5 - (int)pwVar10 >> 2" identifier = (binary_expression "(int)pwVar5 - (int)pwVar10 >> 2" (binary_expression "(int)pwVar5 - (int)pwVar10" (cast_expression "(int)pwVar5" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pwVar10" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "uVar7 = 0x1fffffff - uVar8;" (assignment_expression "uVar7 = 0x1fffffff - uVar8" identifier = (binary_expression "0x1fffffff - uVar8" number_literal - identifier)) ;) (if_statement "if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }" if (parenthesized_expression "((int)uVar4 <= (int)(0x1fffffff - uVar8))" ( (binary_expression "(int)uVar4 <= (int)(0x1fffffff - uVar8)" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)(0x1fffffff - uVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x1fffffff - uVar8)" ( (binary_expression "0x1fffffff - uVar8" number_literal - identifier) )))) )) (compound_statement "{\n        uVar7 = uVar4;\n      }" { (expression_statement "uVar7 = uVar4;" (assignment_expression "uVar7 = uVar4" identifier = identifier) ;) })) (expression_statement "uVar4 = *(uint *)(param_2 + 4);" (assignment_expression "uVar4 = *(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 ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "((int)uVar7 < 2)" ( (binary_expression "(int)uVar7 < 2" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "local_30 = uVar4 + 1;" (assignment_expression "local_30 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "pwVar2 = *(wstring **)param_2;" (assignment_expression "pwVar2 = *(wstring **)param_2" identifier = (pointer_expression "*(wstring **)param_2" * (cast_expression "(wstring **)param_2" ( (type_descriptor "wstring **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "uVar7 = 3;" (assignment_expression "uVar7 = 3" identifier = number_literal) ;) (if_statement "if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }" if (parenthesized_expression "(pwVar2 != local_2c)" ( (binary_expression "pwVar2 != local_2c" identifier != identifier) )) (compound_statement "{\n          uVar7 = *(uint *)(param_2 + 8);\n        }" { (expression_statement "uVar7 = *(uint *)(param_2 + 8);" (assignment_expression "uVar7 = *(uint *)(param_2 + 8)" identifier = (pointer_expression "*(uint *)(param_2 + 8)" * (cast_expression "(uint *)(param_2 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) })) (if_statement "if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }" if (parenthesized_expression "(uVar7 < uVar4 + 1)" ( (binary_expression "uVar7 < uVar4 + 1" identifier < (binary_expression "uVar4 + 1" identifier + number_literal)) )) (compound_statement "{\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }" { (labeled_statement "std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" statement_identifier : (ERROR ":" :) (expression_statement "_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" (call_expression "_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1)" identifier (argument_list "(param_2,uVar4,0,(wchar_t *)0x0,1)" ( identifier , identifier , number_literal , (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , number_literal ))) ;))) (expression_statement "pwVar2 = *(wstring **)param_2;" (assignment_expression "pwVar2 = *(wstring **)param_2" identifier = (pointer_expression "*(wstring **)param_2" * (cast_expression "(wstring **)param_2" ( (type_descriptor "wstring **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" identifier = (cast_expression "(wchar_t *)piVar6[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" identifier = (cast_expression "(wchar_t *)piVar6[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) ;) })) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(pwVar2 + uVar4 * 4) = iVar9;" (assignment_expression "*(int *)(pwVar2 + uVar4 * 4) = iVar9" (pointer_expression "*(int *)(pwVar2 + uVar4 * 4)" * (cast_expression "(int *)(pwVar2 + uVar4 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar2 + uVar4 * 4)" ( (binary_expression "pwVar2 + uVar4 * 4" identifier + (binary_expression "uVar4 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "*(int *)(param_2 + 4) = local_30;" (assignment_expression "*(int *)(param_2 + 4) = local_30" (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) )))) = identifier) ;) (expression_statement "*(int *)(pwVar2 + uVar4 * 4 + 4) = 0;" (assignment_expression "*(int *)(pwVar2 + uVar4 * 4 + 4) = 0" (pointer_expression "*(int *)(pwVar2 + uVar4 * 4 + 4)" * (cast_expression "(int *)(pwVar2 + uVar4 * 4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar2 + uVar4 * 4 + 4)" ( (binary_expression "pwVar2 + uVar4 * 4 + 4" (binary_expression "pwVar2 + uVar4 * 4" identifier + (binary_expression "uVar4 * 4" identifier * number_literal)) + number_literal) )))) = number_literal) ;) (if_statement "if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" if (parenthesized_expression "(pwVar10 < pwVar5)" ( (binary_expression "pwVar10 < pwVar5" identifier < identifier) )) (compound_statement "{\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }" { (expression_statement "iVar3 = *(int *)pwVar10;" (assignment_expression "iVar3 = *(int *)pwVar10" identifier = (pointer_expression "*(int *)pwVar10" * (cast_expression "(int *)pwVar10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar6[2] = (int)(pwVar10 + 2);" (assignment_expression "piVar6[2] = (int)(pwVar10 + 2)" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar10 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar10 + 2)" ( (binary_expression "pwVar10 + 2" identifier + number_literal) )))) ;) }) (else_clause "else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" else (compound_statement "{\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" { (expression_statement "iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);" (assignment_expression "iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6)" identifier = (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" ( (pointer_expression "**(code **)(*piVar6 + 0x28)" * (pointer_expression "*(code **)(*piVar6 + 0x28)" * (cast_expression "(code **)(*piVar6 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x28)" ( (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier )))) ;) }))) (if_statement "if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }" if (parenthesized_expression "(iVar3 != -1)" ( (binary_expression "iVar3 != -1" identifier != number_literal) )) (compound_statement "{\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }" { (if_statement "if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;" if (parenthesized_expression "((int *)piVar6[3] <= (int *)piVar6[2])" ( (binary_expression "(int *)piVar6[3] <= (int *)piVar6[2]" (cast_expression "(int *)piVar6[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ])) <= (cast_expression "(int *)piVar6[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00332b14;" goto statement_identifier ;)) (expression_statement "iVar9 = *(int *)piVar6[2];" (assignment_expression "iVar9 = *(int *)piVar6[2]" identifier = (pointer_expression "*(int *)piVar6[2]" * (cast_expression "(int *)piVar6[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ])))) ;) (goto_statement "goto joined_r0x00332ad0;" goto statement_identifier ;) })) (labeled_statement "LAB_00332b8c:\n        uVar7 = 2;" statement_identifier : (expression_statement "uVar7 = 2;" (assignment_expression "uVar7 = 2" identifier = number_literal) ;)) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);" (assignment_expression "iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7)" identifier = (call_expression "(*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7)" (parenthesized_expression "(*(code *)PTR_wmemchr_004c5d10)" ( (pointer_expression "*(code *)PTR_wmemchr_004c5d10" * (cast_expression "(code *)PTR_wmemchr_004c5d10" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pwVar10,param_3,uVar7)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }" { (expression_statement "uVar7 = iVar3 - (int)pwVar10 >> 2;" (assignment_expression "uVar7 = iVar3 - (int)pwVar10 >> 2" identifier = (binary_expression "iVar3 - (int)pwVar10 >> 2" (binary_expression "iVar3 - (int)pwVar10" identifier - (cast_expression "(int)pwVar10" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) })) (if_statement "if (0x1fffffff - uVar4 < uVar7) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }" if (parenthesized_expression "(0x1fffffff - uVar4 < uVar7)" ( (binary_expression "0x1fffffff - uVar4 < uVar7" (binary_expression "0x1fffffff - uVar4" number_literal - identifier) < identifier) )) (compound_statement "{\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }" { comment (expression_statement "piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);" (assignment_expression "piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" identifier = (cast_expression "(int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" (parenthesized_expression "(*(code *)PTR___throw_length_error_004c1e74)" ( (pointer_expression "*(code *)PTR___throw_length_error_004c1e74" * (cast_expression "(code *)PTR___throw_length_error_004c1e74" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c" identifier + number_literal) ))))) ;) (return_statement "return piVar6;" return identifier ;) })) comment (labeled_statement "std::wstring::_M_append(param_2,pwVar10,uVar7);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_append(param_2,pwVar10,uVar7);" statement_identifier : (ERROR ":" :) (expression_statement "_M_append(param_2,pwVar10,uVar7);" (call_expression "_M_append(param_2,pwVar10,uVar7)" identifier (argument_list "(param_2,pwVar10,uVar7)" ( identifier , identifier , identifier ))) ;))) (expression_statement "uVar8 = uVar8 + uVar7;" (assignment_expression "uVar8 = uVar8 + uVar7" identifier = (binary_expression "uVar8 + uVar7" identifier + identifier)) ;) (expression_statement "piVar1 = (int *)(piVar6[2] + uVar7 * 4);" (assignment_expression "piVar1 = (int *)(piVar6[2] + uVar7 * 4)" identifier = (cast_expression "(int *)(piVar6[2] + uVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar6[2] + uVar7 * 4)" ( (binary_expression "piVar6[2] + uVar7 * 4" (subscript_expression "piVar6[2]" identifier [ number_literal ]) + (binary_expression "uVar7 * 4" identifier * number_literal)) )))) ;) (expression_statement "piVar6[2] = (int)piVar1;" (assignment_expression "piVar6[2] = (int)piVar1" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = (cast_expression "(int)piVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" if (parenthesized_expression "(piVar1 < (int *)piVar6[3])" ( (binary_expression "piVar1 < (int *)piVar6[3]" identifier < (cast_expression "(int *)piVar6[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) )) (compound_statement "{\n        iVar9 = *piVar1;\n      }" { (expression_statement "iVar9 = *piVar1;" (assignment_expression "iVar9 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) }) (else_clause "else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" else (compound_statement "{\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" { (labeled_statement "LAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" statement_identifier : (expression_statement "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" (assignment_expression "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6)" identifier = (call_expression "(**(code **)(*piVar6 + 0x24))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x24))" ( (pointer_expression "**(code **)(*piVar6 + 0x24)" * (pointer_expression "*(code **)(*piVar6 + 0x24)" * (cast_expression "(code **)(*piVar6 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x24)" ( (binary_expression "*piVar6 + 0x24" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier )))) ;)) }))) (labeled_statement "joined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" statement_identifier : (if_statement "if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" if (parenthesized_expression "(0x1ffffffe < uVar8)" ( (binary_expression "0x1ffffffe < uVar8" number_literal < identifier) )) (compound_statement "{\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" { (if_statement "if (iVar9 == -1) goto LAB_00332b8c;" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00332b8c;" goto statement_identifier ;)) (if_statement "if (param_3 != iVar9) goto LAB_003328f4;" if (parenthesized_expression "(param_3 != iVar9)" ( (binary_expression "param_3 != iVar9" identifier != identifier) )) (goto_statement "goto LAB_003328f4;" goto statement_identifier ;)) (if_statement "if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;" if (parenthesized_expression "((uint)piVar6[3] <= (uint)piVar6[2])" ( (binary_expression "(uint)piVar6[3] <= (uint)piVar6[2]" (cast_expression "(uint)piVar6[3]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar6[3]" identifier [ number_literal ])) <= (cast_expression "(uint)piVar6[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00332b6c;" goto statement_identifier ;)) (expression_statement "piVar6[2] = piVar6[2] + 4;" (assignment_expression "piVar6[2] = piVar6[2] + 4" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = (binary_expression "piVar6[2] + 4" (subscript_expression "piVar6[2]" identifier [ number_literal ]) + number_literal)) ;) (goto_statement "goto joined_r0x00332b04;" goto statement_identifier ;) }))) (if_statement "if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (compound_statement "{\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "uVar7 = 2;" (assignment_expression "uVar7 = 2" identifier = number_literal) ;) (if_statement "if (uVar8 == 0) {\n          uVar7 = 6;\n        }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar7 = 6;\n        }" { (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" identifier = number_literal) ;) })) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" identifier = (cast_expression "(wchar_t *)piVar6[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" identifier = (cast_expression "(wchar_t *)piVar6[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(param_3 != iVar9)" ( (binary_expression "param_3 != iVar9" identifier != identifier) )) ;) (if_statement "if (pwVar10 < pwVar5) goto LAB_00332c04;" if (parenthesized_expression "(pwVar10 < pwVar5)" ( (binary_expression "pwVar10 < pwVar5" identifier < identifier) )) (goto_statement "goto LAB_00332c04;" goto statement_identifier ;)) (labeled_statement "LAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);" statement_identifier : (expression_statement "(**(code **)(*piVar6 + 0x28))(piVar6);" (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" ( (pointer_expression "**(code **)(*piVar6 + 0x28)" * (pointer_expression "*(code **)(*piVar6 + 0x28)" * (cast_expression "(code **)(*piVar6 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x28)" ( (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier ))) ;)) (labeled_statement "joined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }" statement_identifier : (if_statement "if (uVar8 != 0xffffffff) {\n      return param_1;\n    }" if (parenthesized_expression "(uVar8 != 0xffffffff)" ( (binary_expression "uVar8 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) }))) })) (labeled_statement "LAB_003328f4:\n  uVar7 = 4;" statement_identifier : (expression_statement "uVar7 = 4;" (assignment_expression "uVar7 = 4" identifier = number_literal) ;)) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (labeled_statement "LAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));" statement_identifier : (expression_statement "(*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));" (call_expression "(*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14))" (parenthesized_expression "(*(code *)PTR_clear_004c5180)" ( (pointer_expression "*(code *)PTR_clear_004c5180" * (cast_expression "(code *)PTR_clear_004c5180" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar3,uVar7 | *(uint *)(iVar3 + 0x14))" ( identifier , (binary_expression "uVar7 | *(uint *)(iVar3 + 0x14)" identifier | (pointer_expression "*(uint *)(iVar3 + 0x14)" * (cast_expression "(uint *)(iVar3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) ))))) ))) ;)) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* WARNING: Unknown calling convention -- yet parameter storage is locked */\n/* std::wistream& std::getline<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>\n   >(std::wistream&, std::wstring&, wchar_t) */\n\nwistream *\nstd::getline<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)\n\n{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  wistream *pwVar4;\n  uint uVar5;\n  undefined2 in_register_00000018;\n  int iVar6;\n  wchar_t *pwVar7;\n  int *piVar8;\n  uint uVar9;\n  uint uVar10;\n  wchar_t *pwVar11;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  iVar6 = CONCAT22(in_register_00000018,param_3);\n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *(int *)param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    pwVar4 = param_1 + iVar3;\n    piVar8 = *(int **)(pwVar4 + 0x7c);\n    pwVar11 = (wchar_t *)piVar8[2];\n    pwVar7 = (wchar_t *)piVar8[3];\n    if (pwVar11 < pwVar7) {\n      iVar3 = *(int *)pwVar11;\n      uVar9 = 6;\n      if (iVar3 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      if (iVar3 == -1) {\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar7 = (wchar_t *)piVar8[3];\n      pwVar11 = (wchar_t *)piVar8[2];\n    }\n    uVar10 = 0;\n    if (iVar6 == iVar3) {\n      if (pwVar7 <= pwVar11) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar8 + 0x28))(piVar8);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar8[2] = (int)(pwVar11 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar5 = (int)pwVar7 - (int)pwVar11 >> 2;\n      uVar9 = 0x1fffffff - uVar10;\n      if ((int)uVar5 <= (int)(0x1fffffff - uVar10)) {\n        uVar9 = uVar5;\n      }\n      uVar5 = *(uint *)(param_2 + 4);\n      if ((int)uVar9 < 2) {\n        local_30 = uVar5 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar9 = 3;\n        if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }\n        if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }\n        uVar10 = uVar10 + 1;\n        *(int *)(pwVar2 + uVar5 * 4) = iVar3;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;\n        if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar9 = 2;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9);\n      if (iVar3 != 0) {\n        uVar9 = iVar3 - (int)pwVar11 >> 2;\n      }\n      if (0x1fffffff - uVar5 < uVar9) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return pwVar4;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      wstring::_M_append(param_2,pwVar11,uVar9);\n      uVar10 = uVar10 + uVar9;\n      piVar1 = (int *)(piVar8[2] + uVar9 * 4);\n      piVar8[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar8[3]) {\n        iVar3 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar10) {\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar3 == -1) {\n        uVar9 = 2;\n        if (uVar10 == 0) {\n          uVar9 = 6;\n        }\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar11 = (wchar_t *)piVar8[2];\n      pwVar7 = (wchar_t *)piVar8[3];\n    } while (iVar6 != iVar3);\n    if (pwVar11 < pwVar7) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar8 + 0x28))(piVar8);\njoined_r0x00332b04:\n    if (uVar10 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar9 = 4;\n  pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(pwVar4,uVar9 | *(uint *)(pwVar4 + 0x14));\n  return param_1;\n}\n\n" comment comment (ERROR "wistream *\nstd::getline<wchar_t," (binary_expression "wistream *\nstd::getline<wchar_t" (binary_expression "wistream *\nstd" identifier * identifier) (ERROR "::getline" : : identifier) < identifier) ,) (labeled_statement "std::char_traits<wchar_t>,std::allocator<wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)" statement_identifier (ERROR "::char_traits<wchar_t>,std:" : : (binary_expression "char_traits<wchar_t>,std" (binary_expression "char_traits<wchar_t" identifier < identifier) > (ERROR "," ,) identifier) :) : (expression_statement "allocator<wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)" (binary_expression "allocator<wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)" identifier < (binary_expression "wchar_t>>\n          (wistream *param_1,wstring *param_2,wchar_t param_3)" identifier >> (parenthesized_expression "(wistream *param_1,wstring *param_2,wchar_t param_3)" ( (comma_expression "wistream *param_1,wstring *param_2,wchar_t" (binary_expression "wistream *param_1" identifier * identifier) , (comma_expression "wstring *param_2,wchar_t" (binary_expression "wstring *param_2" identifier * identifier) , identifier)) (ERROR "param_3" identifier) )))) ;)) (compound_statement "{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  wistream *pwVar4;\n  uint uVar5;\n  undefined2 in_register_00000018;\n  int iVar6;\n  wchar_t *pwVar7;\n  int *piVar8;\n  uint uVar9;\n  uint uVar10;\n  wchar_t *pwVar11;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  iVar6 = CONCAT22(in_register_00000018,param_3);\n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *(int *)param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    pwVar4 = param_1 + iVar3;\n    piVar8 = *(int **)(pwVar4 + 0x7c);\n    pwVar11 = (wchar_t *)piVar8[2];\n    pwVar7 = (wchar_t *)piVar8[3];\n    if (pwVar11 < pwVar7) {\n      iVar3 = *(int *)pwVar11;\n      uVar9 = 6;\n      if (iVar3 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      if (iVar3 == -1) {\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar7 = (wchar_t *)piVar8[3];\n      pwVar11 = (wchar_t *)piVar8[2];\n    }\n    uVar10 = 0;\n    if (iVar6 == iVar3) {\n      if (pwVar7 <= pwVar11) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar8 + 0x28))(piVar8);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar8[2] = (int)(pwVar11 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar5 = (int)pwVar7 - (int)pwVar11 >> 2;\n      uVar9 = 0x1fffffff - uVar10;\n      if ((int)uVar5 <= (int)(0x1fffffff - uVar10)) {\n        uVar9 = uVar5;\n      }\n      uVar5 = *(uint *)(param_2 + 4);\n      if ((int)uVar9 < 2) {\n        local_30 = uVar5 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar9 = 3;\n        if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }\n        if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }\n        uVar10 = uVar10 + 1;\n        *(int *)(pwVar2 + uVar5 * 4) = iVar3;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;\n        if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar9 = 2;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9);\n      if (iVar3 != 0) {\n        uVar9 = iVar3 - (int)pwVar11 >> 2;\n      }\n      if (0x1fffffff - uVar5 < uVar9) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return pwVar4;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      wstring::_M_append(param_2,pwVar11,uVar9);\n      uVar10 = uVar10 + uVar9;\n      piVar1 = (int *)(piVar8[2] + uVar9 * 4);\n      piVar8[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar8[3]) {\n        iVar3 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar10) {\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar3 == -1) {\n        uVar9 = 2;\n        if (uVar10 == 0) {\n          uVar9 = 6;\n        }\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar11 = (wchar_t *)piVar8[2];\n      pwVar7 = (wchar_t *)piVar8[3];\n    } while (iVar6 != iVar3);\n    if (pwVar11 < pwVar7) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar8 + 0x28))(piVar8);\njoined_r0x00332b04:\n    if (uVar10 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar9 = 4;\n  pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(pwVar4,uVar9 | *(uint *)(pwVar4 + 0x14));\n  return param_1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "wstring *pwVar2;" type_identifier (pointer_declarator "*pwVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "wistream *pwVar4;" type_identifier (pointer_declarator "*pwVar4" * identifier) ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "undefined2 in_register_00000018;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "wchar_t *pwVar7;" type_identifier (pointer_declarator "*pwVar7" * identifier) ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "wchar_t *pwVar11;" type_identifier (pointer_declarator "*pwVar11" * identifier) ;) (declaration "char local_38 [8];" primitive_type (array_declarator "local_38 [8]" identifier [ number_literal ]) ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "wstring *local_2c;" type_identifier (pointer_declarator "*local_2c" * identifier) ;) (expression_statement "iVar6 = CONCAT22(in_register_00000018,param_3);" (assignment_expression "iVar6 = CONCAT22(in_register_00000018,param_3)" identifier = (call_expression "CONCAT22(in_register_00000018,param_3)" identifier (argument_list "(in_register_00000018,param_3)" ( identifier , identifier )))) ;) (expression_statement "(*(code *)PTR_sentry_004c517c)(local_38,param_1,1);" (call_expression "(*(code *)PTR_sentry_004c517c)(local_38,param_1,1)" (parenthesized_expression "(*(code *)PTR_sentry_004c517c)" ( (pointer_expression "*(code *)PTR_sentry_004c517c" * (cast_expression "(code *)PTR_sentry_004c517c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_38,param_1,1)" ( identifier , identifier , number_literal ))) ;) (if_statement "if (local_38[0] != '\0') {\n    iVar3 = *(int *)param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    pwVar4 = param_1 + iVar3;\n    piVar8 = *(int **)(pwVar4 + 0x7c);\n    pwVar11 = (wchar_t *)piVar8[2];\n    pwVar7 = (wchar_t *)piVar8[3];\n    if (pwVar11 < pwVar7) {\n      iVar3 = *(int *)pwVar11;\n      uVar9 = 6;\n      if (iVar3 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      if (iVar3 == -1) {\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar7 = (wchar_t *)piVar8[3];\n      pwVar11 = (wchar_t *)piVar8[2];\n    }\n    uVar10 = 0;\n    if (iVar6 == iVar3) {\n      if (pwVar7 <= pwVar11) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar8 + 0x28))(piVar8);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar8[2] = (int)(pwVar11 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar5 = (int)pwVar7 - (int)pwVar11 >> 2;\n      uVar9 = 0x1fffffff - uVar10;\n      if ((int)uVar5 <= (int)(0x1fffffff - uVar10)) {\n        uVar9 = uVar5;\n      }\n      uVar5 = *(uint *)(param_2 + 4);\n      if ((int)uVar9 < 2) {\n        local_30 = uVar5 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar9 = 3;\n        if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }\n        if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }\n        uVar10 = uVar10 + 1;\n        *(int *)(pwVar2 + uVar5 * 4) = iVar3;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;\n        if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar9 = 2;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9);\n      if (iVar3 != 0) {\n        uVar9 = iVar3 - (int)pwVar11 >> 2;\n      }\n      if (0x1fffffff - uVar5 < uVar9) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return pwVar4;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      wstring::_M_append(param_2,pwVar11,uVar9);\n      uVar10 = uVar10 + uVar9;\n      piVar1 = (int *)(piVar8[2] + uVar9 * 4);\n      piVar8[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar8[3]) {\n        iVar3 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar10) {\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar3 == -1) {\n        uVar9 = 2;\n        if (uVar10 == 0) {\n          uVar9 = 6;\n        }\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar11 = (wchar_t *)piVar8[2];\n      pwVar7 = (wchar_t *)piVar8[3];\n    } while (iVar6 != iVar3);\n    if (pwVar11 < pwVar7) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar8 + 0x28))(piVar8);\njoined_r0x00332b04:\n    if (uVar10 != 0xffffffff) {\n      return param_1;\n    }\n  }" if (parenthesized_expression "(local_38[0] != '\0')" ( (binary_expression "local_38[0] != '\0'" (subscript_expression "local_38[0]" identifier [ number_literal ]) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    iVar3 = *(int *)param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    pwVar4 = param_1 + iVar3;\n    piVar8 = *(int **)(pwVar4 + 0x7c);\n    pwVar11 = (wchar_t *)piVar8[2];\n    pwVar7 = (wchar_t *)piVar8[3];\n    if (pwVar11 < pwVar7) {\n      iVar3 = *(int *)pwVar11;\n      uVar9 = 6;\n      if (iVar3 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      if (iVar3 == -1) {\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar7 = (wchar_t *)piVar8[3];\n      pwVar11 = (wchar_t *)piVar8[2];\n    }\n    uVar10 = 0;\n    if (iVar6 == iVar3) {\n      if (pwVar7 <= pwVar11) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar8 + 0x28))(piVar8);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar8[2] = (int)(pwVar11 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar5 = (int)pwVar7 - (int)pwVar11 >> 2;\n      uVar9 = 0x1fffffff - uVar10;\n      if ((int)uVar5 <= (int)(0x1fffffff - uVar10)) {\n        uVar9 = uVar5;\n      }\n      uVar5 = *(uint *)(param_2 + 4);\n      if ((int)uVar9 < 2) {\n        local_30 = uVar5 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar9 = 3;\n        if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }\n        if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }\n        uVar10 = uVar10 + 1;\n        *(int *)(pwVar2 + uVar5 * 4) = iVar3;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;\n        if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar9 = 2;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9);\n      if (iVar3 != 0) {\n        uVar9 = iVar3 - (int)pwVar11 >> 2;\n      }\n      if (0x1fffffff - uVar5 < uVar9) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return pwVar4;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      wstring::_M_append(param_2,pwVar11,uVar9);\n      uVar10 = uVar10 + uVar9;\n      piVar1 = (int *)(piVar8[2] + uVar9 * 4);\n      piVar8[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar8[3]) {\n        iVar3 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar10) {\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar3 == -1) {\n        uVar9 = 2;\n        if (uVar10 == 0) {\n          uVar9 = 6;\n        }\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar11 = (wchar_t *)piVar8[2];\n      pwVar7 = (wchar_t *)piVar8[3];\n    } while (iVar6 != iVar3);\n    if (pwVar11 < pwVar7) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar8 + 0x28))(piVar8);\njoined_r0x00332b04:\n    if (uVar10 != 0xffffffff) {\n      return param_1;\n    }\n  }" { (expression_statement "iVar3 = *(int *)param_1;" (assignment_expression "iVar3 = *(int *)param_1" identifier = (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined4 *)(param_2 + 4) = 0;" (assignment_expression "*(undefined4 *)(param_2 + 4) = 0" (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar3 = *(int *)(iVar3 + -0xc);" (assignment_expression "iVar3 = *(int *)(iVar3 + -0xc)" identifier = (pointer_expression "*(int *)(iVar3 + -0xc)" * (cast_expression "(int *)(iVar3 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + -0xc)" ( (binary_expression "iVar3 + -0xc" identifier + number_literal) ))))) ;) (expression_statement "**(undefined4 **)param_2 = 0;" (assignment_expression "**(undefined4 **)param_2 = 0" (pointer_expression "**(undefined4 **)param_2" * (pointer_expression "*(undefined4 **)param_2" * (cast_expression "(undefined4 **)param_2" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) = number_literal) ;) (expression_statement "pwVar4 = param_1 + iVar3;" (assignment_expression "pwVar4 = param_1 + iVar3" identifier = (binary_expression "param_1 + iVar3" identifier + identifier)) ;) (expression_statement "piVar8 = *(int **)(pwVar4 + 0x7c);" (assignment_expression "piVar8 = *(int **)(pwVar4 + 0x7c)" identifier = (pointer_expression "*(int **)(pwVar4 + 0x7c)" * (cast_expression "(int **)(pwVar4 + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(pwVar4 + 0x7c)" ( (binary_expression "pwVar4 + 0x7c" identifier + number_literal) ))))) ;) (expression_statement "pwVar11 = (wchar_t *)piVar8[2];" (assignment_expression "pwVar11 = (wchar_t *)piVar8[2]" identifier = (cast_expression "(wchar_t *)piVar8[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar7 = (wchar_t *)piVar8[3];" (assignment_expression "pwVar7 = (wchar_t *)piVar8[3]" identifier = (cast_expression "(wchar_t *)piVar8[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) ;) (if_statement "if (pwVar11 < pwVar7) {\n      iVar3 = *(int *)pwVar11;\n      uVar9 = 6;\n      if (iVar3 == -1) goto LAB_00332904;\n    }\n    else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      if (iVar3 == -1) {\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar7 = (wchar_t *)piVar8[3];\n      pwVar11 = (wchar_t *)piVar8[2];\n    }" if (parenthesized_expression "(pwVar11 < pwVar7)" ( (binary_expression "pwVar11 < pwVar7" identifier < identifier) )) (compound_statement "{\n      iVar3 = *(int *)pwVar11;\n      uVar9 = 6;\n      if (iVar3 == -1) goto LAB_00332904;\n    }" { (expression_statement "iVar3 = *(int *)pwVar11;" (assignment_expression "iVar3 = *(int *)pwVar11" identifier = (pointer_expression "*(int *)pwVar11" * (cast_expression "(int *)pwVar11" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar9 = 6;" (assignment_expression "uVar9 = 6" identifier = number_literal) ;) (if_statement "if (iVar3 == -1) goto LAB_00332904;" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00332904;" goto statement_identifier ;)) }) (else_clause "else {\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      if (iVar3 == -1) {\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar7 = (wchar_t *)piVar8[3];\n      pwVar11 = (wchar_t *)piVar8[2];\n    }" else (compound_statement "{\n                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */\n      iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      if (iVar3 == -1) {\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar7 = (wchar_t *)piVar8[3];\n      pwVar11 = (wchar_t *)piVar8[2];\n    }" { comment (expression_statement "iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);" (assignment_expression "iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8)" identifier = (call_expression "(**(code **)(*piVar8 + 0x24))(piVar8)" (parenthesized_expression "(**(code **)(*piVar8 + 0x24))" ( (pointer_expression "**(code **)(*piVar8 + 0x24)" * (pointer_expression "*(code **)(*piVar8 + 0x24)" * (cast_expression "(code **)(*piVar8 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar8 + 0x24)" ( (binary_expression "*piVar8 + 0x24" (pointer_expression "*piVar8" * identifier) + number_literal) ))))) )) (argument_list "(piVar8)" ( identifier )))) ;) (if_statement "if (iVar3 == -1) {\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\n        uVar9 = 6;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "uVar9 = 6;" (assignment_expression "uVar9 = 6" identifier = number_literal) ;) (expression_statement "pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "pwVar7 = (wchar_t *)piVar8[3];" (assignment_expression "pwVar7 = (wchar_t *)piVar8[3]" identifier = (cast_expression "(wchar_t *)piVar8[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar11 = (wchar_t *)piVar8[2];" (assignment_expression "pwVar11 = (wchar_t *)piVar8[2]" identifier = (cast_expression "(wchar_t *)piVar8[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[2]" identifier [ number_literal ]))) ;) }))) (expression_statement "uVar10 = 0;" (assignment_expression "uVar10 = 0" identifier = number_literal) ;) (if_statement "if (iVar6 == iVar3) {\n      if (pwVar7 <= pwVar11) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar8 + 0x28))(piVar8);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar8[2] = (int)(pwVar11 + 2);\n      return param_1;\n    }" if (parenthesized_expression "(iVar6 == iVar3)" ( (binary_expression "iVar6 == iVar3" identifier == identifier) )) (compound_statement "{\n      if (pwVar7 <= pwVar11) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar8 + 0x28))(piVar8);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar8[2] = (int)(pwVar11 + 2);\n      return param_1;\n    }" { (if_statement "if (pwVar7 <= pwVar11) {\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar8 + 0x28))(piVar8);\n        return param_1;\n      }" if (parenthesized_expression "(pwVar7 <= pwVar11)" ( (binary_expression "pwVar7 <= pwVar11" identifier <= identifier) )) (compound_statement "{\n                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */\n        (**(code **)(*piVar8 + 0x28))(piVar8);\n        return param_1;\n      }" { comment (expression_statement "(**(code **)(*piVar8 + 0x28))(piVar8);" (call_expression "(**(code **)(*piVar8 + 0x28))(piVar8)" (parenthesized_expression "(**(code **)(*piVar8 + 0x28))" ( (pointer_expression "**(code **)(*piVar8 + 0x28)" * (pointer_expression "*(code **)(*piVar8 + 0x28)" * (cast_expression "(code **)(*piVar8 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar8 + 0x28)" ( (binary_expression "*piVar8 + 0x28" (pointer_expression "*piVar8" * identifier) + number_literal) ))))) )) (argument_list "(piVar8)" ( identifier ))) ;) (return_statement "return param_1;" return identifier ;) })) (labeled_statement "LAB_00332c04:\n      piVar8[2] = (int)(pwVar11 + 2);" statement_identifier : (expression_statement "piVar8[2] = (int)(pwVar11 + 2);" (assignment_expression "piVar8[2] = (int)(pwVar11 + 2)" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar11 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar11 + 2)" ( (binary_expression "pwVar11 + 2" identifier + number_literal) )))) ;)) (return_statement "return param_1;" return identifier ;) })) (expression_statement "local_2c = param_2 + 8;" (assignment_expression "local_2c = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) (do_statement "do {\n      uVar5 = (int)pwVar7 - (int)pwVar11 >> 2;\n      uVar9 = 0x1fffffff - uVar10;\n      if ((int)uVar5 <= (int)(0x1fffffff - uVar10)) {\n        uVar9 = uVar5;\n      }\n      uVar5 = *(uint *)(param_2 + 4);\n      if ((int)uVar9 < 2) {\n        local_30 = uVar5 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar9 = 3;\n        if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }\n        if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }\n        uVar10 = uVar10 + 1;\n        *(int *)(pwVar2 + uVar5 * 4) = iVar3;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;\n        if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar9 = 2;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9);\n      if (iVar3 != 0) {\n        uVar9 = iVar3 - (int)pwVar11 >> 2;\n      }\n      if (0x1fffffff - uVar5 < uVar9) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return pwVar4;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      wstring::_M_append(param_2,pwVar11,uVar9);\n      uVar10 = uVar10 + uVar9;\n      piVar1 = (int *)(piVar8[2] + uVar9 * 4);\n      piVar8[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar8[3]) {\n        iVar3 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar10) {\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar3 == -1) {\n        uVar9 = 2;\n        if (uVar10 == 0) {\n          uVar9 = 6;\n        }\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar11 = (wchar_t *)piVar8[2];\n      pwVar7 = (wchar_t *)piVar8[3];\n    } while (iVar6 != iVar3);" do (compound_statement "{\n      uVar5 = (int)pwVar7 - (int)pwVar11 >> 2;\n      uVar9 = 0x1fffffff - uVar10;\n      if ((int)uVar5 <= (int)(0x1fffffff - uVar10)) {\n        uVar9 = uVar5;\n      }\n      uVar5 = *(uint *)(param_2 + 4);\n      if ((int)uVar9 < 2) {\n        local_30 = uVar5 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar9 = 3;\n        if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }\n        if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }\n        uVar10 = uVar10 + 1;\n        *(int *)(pwVar2 + uVar5 * 4) = iVar3;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;\n        if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar9 = 2;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9);\n      if (iVar3 != 0) {\n        uVar9 = iVar3 - (int)pwVar11 >> 2;\n      }\n      if (0x1fffffff - uVar5 < uVar9) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return pwVar4;\n      }\n                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */\n      wstring::_M_append(param_2,pwVar11,uVar9);\n      uVar10 = uVar10 + uVar9;\n      piVar1 = (int *)(piVar8[2] + uVar9 * 4);\n      piVar8[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar8[3]) {\n        iVar3 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar10) {\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar3 == -1) {\n        uVar9 = 2;\n        if (uVar10 == 0) {\n          uVar9 = 6;\n        }\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar11 = (wchar_t *)piVar8[2];\n      pwVar7 = (wchar_t *)piVar8[3];\n    }" { (expression_statement "uVar5 = (int)pwVar7 - (int)pwVar11 >> 2;" (assignment_expression "uVar5 = (int)pwVar7 - (int)pwVar11 >> 2" identifier = (binary_expression "(int)pwVar7 - (int)pwVar11 >> 2" (binary_expression "(int)pwVar7 - (int)pwVar11" (cast_expression "(int)pwVar7" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pwVar11" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "uVar9 = 0x1fffffff - uVar10;" (assignment_expression "uVar9 = 0x1fffffff - uVar10" identifier = (binary_expression "0x1fffffff - uVar10" number_literal - identifier)) ;) (if_statement "if ((int)uVar5 <= (int)(0x1fffffff - uVar10)) {\n        uVar9 = uVar5;\n      }" if (parenthesized_expression "((int)uVar5 <= (int)(0x1fffffff - uVar10))" ( (binary_expression "(int)uVar5 <= (int)(0x1fffffff - uVar10)" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)(0x1fffffff - uVar10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x1fffffff - uVar10)" ( (binary_expression "0x1fffffff - uVar10" number_literal - identifier) )))) )) (compound_statement "{\n        uVar9 = uVar5;\n      }" { (expression_statement "uVar9 = uVar5;" (assignment_expression "uVar9 = uVar5" identifier = identifier) ;) })) (expression_statement "uVar5 = *(uint *)(param_2 + 4);" (assignment_expression "uVar5 = *(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 ((int)uVar9 < 2) {\n        local_30 = uVar5 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar9 = 3;\n        if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }\n        if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }\n        uVar10 = uVar10 + 1;\n        *(int *)(pwVar2 + uVar5 * 4) = iVar3;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;\n        if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar9 = 2;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "((int)uVar9 < 2)" ( (binary_expression "(int)uVar9 < 2" (cast_expression "(int)uVar9" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        local_30 = uVar5 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar9 = 3;\n        if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }\n        if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }\n        uVar10 = uVar10 + 1;\n        *(int *)(pwVar2 + uVar5 * 4) = iVar3;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar5 * 4 + 4) = 0;\n        if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar9 = 2;\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "local_30 = uVar5 + 1;" (assignment_expression "local_30 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) (expression_statement "pwVar2 = *(wstring **)param_2;" (assignment_expression "pwVar2 = *(wstring **)param_2" identifier = (pointer_expression "*(wstring **)param_2" * (cast_expression "(wstring **)param_2" ( (type_descriptor "wstring **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "uVar9 = 3;" (assignment_expression "uVar9 = 3" identifier = number_literal) ;) (if_statement "if (pwVar2 != local_2c) {\n          uVar9 = *(uint *)(param_2 + 8);\n        }" if (parenthesized_expression "(pwVar2 != local_2c)" ( (binary_expression "pwVar2 != local_2c" identifier != identifier) )) (compound_statement "{\n          uVar9 = *(uint *)(param_2 + 8);\n        }" { (expression_statement "uVar9 = *(uint *)(param_2 + 8);" (assignment_expression "uVar9 = *(uint *)(param_2 + 8)" identifier = (pointer_expression "*(uint *)(param_2 + 8)" * (cast_expression "(uint *)(param_2 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) })) (if_statement "if (uVar9 < uVar5 + 1) {\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }" if (parenthesized_expression "(uVar9 < uVar5 + 1)" ( (binary_expression "uVar9 < uVar5 + 1" identifier < (binary_expression "uVar5 + 1" identifier + number_literal)) )) (compound_statement "{\n          wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar11 = (wchar_t *)piVar8[2];\n          pwVar7 = (wchar_t *)piVar8[3];\n        }" { (labeled_statement "wstring::_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);" statement_identifier : (ERROR ":" :) (expression_statement "_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1);" (call_expression "_M_mutate(param_2,uVar5,0,(wchar_t *)0x0,1)" identifier (argument_list "(param_2,uVar5,0,(wchar_t *)0x0,1)" ( identifier , identifier , number_literal , (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , number_literal ))) ;)) (expression_statement "pwVar2 = *(wstring **)param_2;" (assignment_expression "pwVar2 = *(wstring **)param_2" identifier = (pointer_expression "*(wstring **)param_2" * (cast_expression "(wstring **)param_2" ( (type_descriptor "wstring **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "pwVar11 = (wchar_t *)piVar8[2];" (assignment_expression "pwVar11 = (wchar_t *)piVar8[2]" identifier = (cast_expression "(wchar_t *)piVar8[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar7 = (wchar_t *)piVar8[3];" (assignment_expression "pwVar7 = (wchar_t *)piVar8[3]" identifier = (cast_expression "(wchar_t *)piVar8[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) ;) })) (expression_statement "uVar10 = uVar10 + 1;" (assignment_expression "uVar10 = uVar10 + 1" identifier = (binary_expression "uVar10 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(pwVar2 + uVar5 * 4) = iVar3;" (assignment_expression "*(int *)(pwVar2 + uVar5 * 4) = iVar3" (pointer_expression "*(int *)(pwVar2 + uVar5 * 4)" * (cast_expression "(int *)(pwVar2 + uVar5 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar2 + uVar5 * 4)" ( (binary_expression "pwVar2 + uVar5 * 4" identifier + (binary_expression "uVar5 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "*(int *)(param_2 + 4) = local_30;" (assignment_expression "*(int *)(param_2 + 4) = local_30" (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) )))) = identifier) ;) (expression_statement "*(int *)(pwVar2 + uVar5 * 4 + 4) = 0;" (assignment_expression "*(int *)(pwVar2 + uVar5 * 4 + 4) = 0" (pointer_expression "*(int *)(pwVar2 + uVar5 * 4 + 4)" * (cast_expression "(int *)(pwVar2 + uVar5 * 4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar2 + uVar5 * 4 + 4)" ( (binary_expression "pwVar2 + uVar5 * 4 + 4" (binary_expression "pwVar2 + uVar5 * 4" identifier + (binary_expression "uVar5 * 4" identifier * number_literal)) + number_literal) )))) = number_literal) ;) (if_statement "if (pwVar11 < pwVar7) {\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }" if (parenthesized_expression "(pwVar11 < pwVar7)" ( (binary_expression "pwVar11 < pwVar7" identifier < identifier) )) (compound_statement "{\n          iVar3 = *(int *)pwVar11;\n          piVar8[2] = (int)(pwVar11 + 2);\n        }" { (expression_statement "iVar3 = *(int *)pwVar11;" (assignment_expression "iVar3 = *(int *)pwVar11" identifier = (pointer_expression "*(int *)pwVar11" * (cast_expression "(int *)pwVar11" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar8[2] = (int)(pwVar11 + 2);" (assignment_expression "piVar8[2] = (int)(pwVar11 + 2)" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar11 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar11 + 2)" ( (binary_expression "pwVar11 + 2" identifier + number_literal) )))) ;) }) (else_clause "else {\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }" else (compound_statement "{\n          iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);\n        }" { (expression_statement "iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8);" (assignment_expression "iVar3 = (**(code **)(*piVar8 + 0x28))(piVar8)" identifier = (call_expression "(**(code **)(*piVar8 + 0x28))(piVar8)" (parenthesized_expression "(**(code **)(*piVar8 + 0x28))" ( (pointer_expression "**(code **)(*piVar8 + 0x28)" * (pointer_expression "*(code **)(*piVar8 + 0x28)" * (cast_expression "(code **)(*piVar8 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar8 + 0x28)" ( (binary_expression "*piVar8 + 0x28" (pointer_expression "*piVar8" * identifier) + number_literal) ))))) )) (argument_list "(piVar8)" ( identifier )))) ;) }))) (if_statement "if (iVar3 != -1) {\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }" if (parenthesized_expression "(iVar3 != -1)" ( (binary_expression "iVar3 != -1" identifier != number_literal) )) (compound_statement "{\n          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;\n          iVar3 = *(int *)piVar8[2];\n          goto joined_r0x00332ad0;\n        }" { (if_statement "if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;" if (parenthesized_expression "((int *)piVar8[3] <= (int *)piVar8[2])" ( (binary_expression "(int *)piVar8[3] <= (int *)piVar8[2]" (cast_expression "(int *)piVar8[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ])) <= (cast_expression "(int *)piVar8[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00332b14;" goto statement_identifier ;)) (expression_statement "iVar3 = *(int *)piVar8[2];" (assignment_expression "iVar3 = *(int *)piVar8[2]" identifier = (pointer_expression "*(int *)piVar8[2]" * (cast_expression "(int *)piVar8[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[2]" identifier [ number_literal ])))) ;) (goto_statement "goto joined_r0x00332ad0;" goto statement_identifier ;) })) (labeled_statement "LAB_00332b8c:\n        uVar9 = 2;" statement_identifier : (expression_statement "uVar9 = 2;" (assignment_expression "uVar9 = 2" identifier = number_literal) ;)) (expression_statement "pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9);" (assignment_expression "iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9)" identifier = (call_expression "(*(code *)PTR_wmemchr_004c5d10)(pwVar11,iVar6,uVar9)" (parenthesized_expression "(*(code *)PTR_wmemchr_004c5d10)" ( (pointer_expression "*(code *)PTR_wmemchr_004c5d10" * (cast_expression "(code *)PTR_wmemchr_004c5d10" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pwVar11,iVar6,uVar9)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\n        uVar9 = iVar3 - (int)pwVar11 >> 2;\n      }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar9 = iVar3 - (int)pwVar11 >> 2;\n      }" { (expression_statement "uVar9 = iVar3 - (int)pwVar11 >> 2;" (assignment_expression "uVar9 = iVar3 - (int)pwVar11 >> 2" identifier = (binary_expression "iVar3 - (int)pwVar11 >> 2" (binary_expression "iVar3 - (int)pwVar11" identifier - (cast_expression "(int)pwVar11" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) })) (if_statement "if (0x1fffffff - uVar5 < uVar9) {\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return pwVar4;\n      }" if (parenthesized_expression "(0x1fffffff - uVar5 < uVar9)" ( (binary_expression "0x1fffffff - uVar5 < uVar9" (binary_expression "0x1fffffff - uVar5" number_literal - identifier) < identifier) )) (compound_statement "{\n                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */\n        pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return pwVar4;\n      }" { comment (expression_statement "pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);" (assignment_expression "pwVar4 = (wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" identifier = (cast_expression "(wistream *)\n                 (*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" ( (type_descriptor "wistream *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___throw_length_error_004c1e74)\n                           (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" (parenthesized_expression "(*(code *)PTR___throw_length_error_004c1e74)" ( (pointer_expression "*(code *)PTR___throw_length_error_004c1e74" * (cast_expression "(code *)PTR___throw_length_error_004c1e74" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c" identifier + number_literal) ))))) ;) (return_statement "return pwVar4;" return identifier ;) })) comment (labeled_statement "wstring::_M_append(param_2,pwVar11,uVar9);" statement_identifier : (ERROR ":" :) (expression_statement "_M_append(param_2,pwVar11,uVar9);" (call_expression "_M_append(param_2,pwVar11,uVar9)" identifier (argument_list "(param_2,pwVar11,uVar9)" ( identifier , identifier , identifier ))) ;)) (expression_statement "uVar10 = uVar10 + uVar9;" (assignment_expression "uVar10 = uVar10 + uVar9" identifier = (binary_expression "uVar10 + uVar9" identifier + identifier)) ;) (expression_statement "piVar1 = (int *)(piVar8[2] + uVar9 * 4);" (assignment_expression "piVar1 = (int *)(piVar8[2] + uVar9 * 4)" identifier = (cast_expression "(int *)(piVar8[2] + uVar9 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar8[2] + uVar9 * 4)" ( (binary_expression "piVar8[2] + uVar9 * 4" (subscript_expression "piVar8[2]" identifier [ number_literal ]) + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) ;) (expression_statement "piVar8[2] = (int)piVar1;" (assignment_expression "piVar8[2] = (int)piVar1" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = (cast_expression "(int)piVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (piVar1 < (int *)piVar8[3]) {\n        iVar3 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }" if (parenthesized_expression "(piVar1 < (int *)piVar8[3])" ( (binary_expression "piVar1 < (int *)piVar8[3]" identifier < (cast_expression "(int *)piVar8[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) )) (compound_statement "{\n        iVar3 = *piVar1;\n      }" { (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) }) (else_clause "else {\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }" else (compound_statement "{\nLAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);\n      }" { (labeled_statement "LAB_00332b14:\n        iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);" statement_identifier : (expression_statement "iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8);" (assignment_expression "iVar3 = (**(code **)(*piVar8 + 0x24))(piVar8)" identifier = (call_expression "(**(code **)(*piVar8 + 0x24))(piVar8)" (parenthesized_expression "(**(code **)(*piVar8 + 0x24))" ( (pointer_expression "**(code **)(*piVar8 + 0x24)" * (pointer_expression "*(code **)(*piVar8 + 0x24)" * (cast_expression "(code **)(*piVar8 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar8 + 0x24)" ( (binary_expression "*piVar8 + 0x24" (pointer_expression "*piVar8" * identifier) + number_literal) ))))) )) (argument_list "(piVar8)" ( identifier )))) ;)) }))) (labeled_statement "joined_r0x00332ad0:\n      if (0x1ffffffe < uVar10) {\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }" statement_identifier : (if_statement "if (0x1ffffffe < uVar10) {\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }" if (parenthesized_expression "(0x1ffffffe < uVar10)" ( (binary_expression "0x1ffffffe < uVar10" number_literal < identifier) )) (compound_statement "{\n        if (iVar3 == -1) goto LAB_00332b8c;\n        if (iVar6 != iVar3) goto LAB_003328f4;\n        if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;\n        piVar8[2] = piVar8[2] + 4;\n        goto joined_r0x00332b04;\n      }" { (if_statement "if (iVar3 == -1) goto LAB_00332b8c;" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00332b8c;" goto statement_identifier ;)) (if_statement "if (iVar6 != iVar3) goto LAB_003328f4;" if (parenthesized_expression "(iVar6 != iVar3)" ( (binary_expression "iVar6 != iVar3" identifier != identifier) )) (goto_statement "goto LAB_003328f4;" goto statement_identifier ;)) (if_statement "if ((uint)piVar8[3] <= (uint)piVar8[2]) goto LAB_00332b6c;" if (parenthesized_expression "((uint)piVar8[3] <= (uint)piVar8[2])" ( (binary_expression "(uint)piVar8[3] <= (uint)piVar8[2]" (cast_expression "(uint)piVar8[3]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar8[3]" identifier [ number_literal ])) <= (cast_expression "(uint)piVar8[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar8[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00332b6c;" goto statement_identifier ;)) (expression_statement "piVar8[2] = piVar8[2] + 4;" (assignment_expression "piVar8[2] = piVar8[2] + 4" (subscript_expression "piVar8[2]" identifier [ number_literal ]) = (binary_expression "piVar8[2] + 4" (subscript_expression "piVar8[2]" identifier [ number_literal ]) + number_literal)) ;) (goto_statement "goto joined_r0x00332b04;" goto statement_identifier ;) }))) (if_statement "if (iVar3 == -1) {\n        uVar9 = 2;\n        if (uVar10 == 0) {\n          uVar9 = 6;\n        }\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\n        uVar9 = 2;\n        if (uVar10 == 0) {\n          uVar9 = 6;\n        }\n        pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "uVar9 = 2;" (assignment_expression "uVar9 = 2" identifier = number_literal) ;) (if_statement "if (uVar10 == 0) {\n          uVar9 = 6;\n        }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar9 = 6;\n        }" { (expression_statement "uVar9 = 6;" (assignment_expression "uVar9 = 6" identifier = number_literal) ;) })) (expression_statement "pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "pwVar11 = (wchar_t *)piVar8[2];" (assignment_expression "pwVar11 = (wchar_t *)piVar8[2]" identifier = (cast_expression "(wchar_t *)piVar8[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar7 = (wchar_t *)piVar8[3];" (assignment_expression "pwVar7 = (wchar_t *)piVar8[3]" identifier = (cast_expression "(wchar_t *)piVar8[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar8[3]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(iVar6 != iVar3)" ( (binary_expression "iVar6 != iVar3" identifier != identifier) )) ;) (if_statement "if (pwVar11 < pwVar7) goto LAB_00332c04;" if (parenthesized_expression "(pwVar11 < pwVar7)" ( (binary_expression "pwVar11 < pwVar7" identifier < identifier) )) (goto_statement "goto LAB_00332c04;" goto statement_identifier ;)) (labeled_statement "LAB_00332b6c:\n    (**(code **)(*piVar8 + 0x28))(piVar8);" statement_identifier : (expression_statement "(**(code **)(*piVar8 + 0x28))(piVar8);" (call_expression "(**(code **)(*piVar8 + 0x28))(piVar8)" (parenthesized_expression "(**(code **)(*piVar8 + 0x28))" ( (pointer_expression "**(code **)(*piVar8 + 0x28)" * (pointer_expression "*(code **)(*piVar8 + 0x28)" * (cast_expression "(code **)(*piVar8 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar8 + 0x28)" ( (binary_expression "*piVar8 + 0x28" (pointer_expression "*piVar8" * identifier) + number_literal) ))))) )) (argument_list "(piVar8)" ( identifier ))) ;)) (labeled_statement "joined_r0x00332b04:\n    if (uVar10 != 0xffffffff) {\n      return param_1;\n    }" statement_identifier : (if_statement "if (uVar10 != 0xffffffff) {\n      return param_1;\n    }" if (parenthesized_expression "(uVar10 != 0xffffffff)" ( (binary_expression "uVar10 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) }))) })) (labeled_statement "LAB_003328f4:\n  uVar9 = 4;" statement_identifier : (expression_statement "uVar9 = 4;" (assignment_expression "uVar9 = 4" identifier = number_literal) ;)) (expression_statement "pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc);" (assignment_expression "pwVar4 = param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier = (binary_expression "param_1 + *(int *)(*(int *)param_1 + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)param_1 + -0xc)" * (cast_expression "(int *)(*(int *)param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)param_1 + -0xc)" ( (binary_expression "*(int *)param_1 + -0xc" (pointer_expression "*(int *)param_1" * (cast_expression "(int *)param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))))) ;) (labeled_statement "LAB_00332904:\n  (*(code *)PTR_clear_004c5180)(pwVar4,uVar9 | *(uint *)(pwVar4 + 0x14));" statement_identifier : (expression_statement "(*(code *)PTR_clear_004c5180)(pwVar4,uVar9 | *(uint *)(pwVar4 + 0x14));" (call_expression "(*(code *)PTR_clear_004c5180)(pwVar4,uVar9 | *(uint *)(pwVar4 + 0x14))" (parenthesized_expression "(*(code *)PTR_clear_004c5180)" ( (pointer_expression "*(code *)PTR_clear_004c5180" * (cast_expression "(code *)PTR_clear_004c5180" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pwVar4,uVar9 | *(uint *)(pwVar4 + 0x14))" ( identifier , (binary_expression "uVar9 | *(uint *)(pwVar4 + 0x14)" identifier | (pointer_expression "*(uint *)(pwVar4 + 0x14)" * (cast_expression "(uint *)(pwVar4 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar4 + 0x14)" ( (binary_expression "pwVar4 + 0x14" identifier + number_literal) ))))) ))) ;)) (return_statement "return param_1;" return identifier ;) }))
(translation_unit "int * FUN_0033288c(int *param_1,wstring *param_2,int param_3)\n\n{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  uint uVar4;\n  wchar_t *pwVar5;\n  int *piVar6;\n  uint uVar7;\n  uint uVar8;\n  int iVar9;\n  wchar_t *pwVar10;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar7 = 4;\n  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));\n  return param_1;\n}\n\n" (function_definition "int * FUN_0033288c(int *param_1,wstring *param_2,int param_3)\n\n{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  uint uVar4;\n  wchar_t *pwVar5;\n  int *piVar6;\n  uint uVar7;\n  uint uVar8;\n  int iVar9;\n  wchar_t *pwVar10;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar7 = 4;\n  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));\n  return param_1;\n}" primitive_type (pointer_declarator "* FUN_0033288c(int *param_1,wstring *param_2,int param_3)" * (function_declarator "FUN_0033288c(int *param_1,wstring *param_2,int param_3)" identifier (parameter_list "(int *param_1,wstring *param_2,int param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "wstring *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) )))) (compound_statement "{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  uint uVar4;\n  wchar_t *pwVar5;\n  int *piVar6;\n  uint uVar7;\n  uint uVar8;\n  int iVar9;\n  wchar_t *pwVar10;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar7 = 4;\n  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));\n  return param_1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "wstring *pwVar2;" type_identifier (pointer_declarator "*pwVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "wchar_t *pwVar5;" type_identifier (pointer_declarator "*pwVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "wchar_t *pwVar10;" type_identifier (pointer_declarator "*pwVar10" * identifier) ;) (declaration "char local_38 [8];" primitive_type (array_declarator "local_38 [8]" identifier [ number_literal ]) ;) (declaration "int local_30;" primitive_type identifier ;) (declaration "wstring *local_2c;" type_identifier (pointer_declarator "*local_2c" * identifier) ;) (expression_statement "(*(code *)PTR_sentry_004c517c)(local_38,param_1,1);" (call_expression "(*(code *)PTR_sentry_004c517c)(local_38,param_1,1)" (parenthesized_expression "(*(code *)PTR_sentry_004c517c)" ( (pointer_expression "*(code *)PTR_sentry_004c517c" * (cast_expression "(code *)PTR_sentry_004c517c" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(local_38,param_1,1)" ( identifier , identifier , number_literal ))) ;) (if_statement "if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }" if (parenthesized_expression "(local_38[0] != '\0')" ( (binary_expression "local_38[0] != '\0'" (subscript_expression "local_38[0]" identifier [ number_literal ]) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }" { (expression_statement "iVar3 = *param_1;" (assignment_expression "iVar3 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "*(undefined4 *)(param_2 + 4) = 0;" (assignment_expression "*(undefined4 *)(param_2 + 4) = 0" (pointer_expression "*(undefined4 *)(param_2 + 4)" * (cast_expression "(undefined4 *)(param_2 + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "iVar3 = *(int *)(iVar3 + -0xc);" (assignment_expression "iVar3 = *(int *)(iVar3 + -0xc)" identifier = (pointer_expression "*(int *)(iVar3 + -0xc)" * (cast_expression "(int *)(iVar3 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + -0xc)" ( (binary_expression "iVar3 + -0xc" identifier + number_literal) ))))) ;) (expression_statement "**(undefined4 **)param_2 = 0;" (assignment_expression "**(undefined4 **)param_2 = 0" (pointer_expression "**(undefined4 **)param_2" * (pointer_expression "*(undefined4 **)param_2" * (cast_expression "(undefined4 **)param_2" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) = number_literal) ;) (expression_statement "iVar3 = (int)param_1 + iVar3;" (assignment_expression "iVar3 = (int)param_1 + iVar3" identifier = (binary_expression "(int)param_1 + iVar3" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + identifier)) ;) (expression_statement "piVar6 = *(int **)(iVar3 + 0x7c);" (assignment_expression "piVar6 = *(int **)(iVar3 + 0x7c)" identifier = (pointer_expression "*(int **)(iVar3 + 0x7c)" * (cast_expression "(int **)(iVar3 + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar3 + 0x7c)" ( (binary_expression "iVar3 + 0x7c" identifier + number_literal) ))))) ;) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" identifier = (cast_expression "(wchar_t *)piVar6[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" identifier = (cast_expression "(wchar_t *)piVar6[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) ;) (if_statement "if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" if (parenthesized_expression "(pwVar10 < pwVar5)" ( (binary_expression "pwVar10 < pwVar5" identifier < identifier) )) (compound_statement "{\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }" { (expression_statement "iVar9 = *(int *)pwVar10;" (assignment_expression "iVar9 = *(int *)pwVar10" identifier = (pointer_expression "*(int *)pwVar10" * (cast_expression "(int *)pwVar10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" identifier = number_literal) ;) (if_statement "if (iVar9 == -1) goto LAB_00332904;" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00332904;" goto statement_identifier ;)) }) (else_clause "else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" else (compound_statement "{\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" { (expression_statement "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" (assignment_expression "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6)" identifier = (call_expression "(**(code **)(*piVar6 + 0x24))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x24))" ( (pointer_expression "**(code **)(*piVar6 + 0x24)" * (pointer_expression "*(code **)(*piVar6 + 0x24)" * (cast_expression "(code **)(*piVar6 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x24)" ( (binary_expression "*piVar6 + 0x24" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier )))) ;) (if_statement "if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (compound_statement "{\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" identifier = number_literal) ;) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" identifier = (cast_expression "(wchar_t *)piVar6[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) ;) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" identifier = (cast_expression "(wchar_t *)piVar6[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) ;) }))) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (if_statement "if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }" if (parenthesized_expression "(param_3 == iVar9)" ( (binary_expression "param_3 == iVar9" identifier == identifier) )) (compound_statement "{\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }" { (if_statement "if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }" if (parenthesized_expression "(pwVar5 <= pwVar10)" ( (binary_expression "pwVar5 <= pwVar10" identifier <= identifier) )) (compound_statement "{\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }" { (expression_statement "(**(code **)(*piVar6 + 0x28))(piVar6);" (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" ( (pointer_expression "**(code **)(*piVar6 + 0x28)" * (pointer_expression "*(code **)(*piVar6 + 0x28)" * (cast_expression "(code **)(*piVar6 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x28)" ( (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier ))) ;) (return_statement "return param_1;" return identifier ;) })) (labeled_statement "LAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);" statement_identifier : (expression_statement "piVar6[2] = (int)(pwVar10 + 2);" (assignment_expression "piVar6[2] = (int)(pwVar10 + 2)" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar10 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar10 + 2)" ( (binary_expression "pwVar10 + 2" identifier + number_literal) )))) ;)) (return_statement "return param_1;" return identifier ;) })) (expression_statement "local_2c = param_2 + 8;" (assignment_expression "local_2c = param_2 + 8" identifier = (binary_expression "param_2 + 8" identifier + number_literal)) ;) (do_statement "do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);" do (compound_statement "{\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    }" { (expression_statement "uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;" (assignment_expression "uVar4 = (int)pwVar5 - (int)pwVar10 >> 2" identifier = (binary_expression "(int)pwVar5 - (int)pwVar10 >> 2" (binary_expression "(int)pwVar5 - (int)pwVar10" (cast_expression "(int)pwVar5" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)pwVar10" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) (expression_statement "uVar7 = 0x1fffffff - uVar8;" (assignment_expression "uVar7 = 0x1fffffff - uVar8" identifier = (binary_expression "0x1fffffff - uVar8" number_literal - identifier)) ;) (if_statement "if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }" if (parenthesized_expression "((int)uVar4 <= (int)(0x1fffffff - uVar8))" ( (binary_expression "(int)uVar4 <= (int)(0x1fffffff - uVar8)" (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)(0x1fffffff - uVar8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x1fffffff - uVar8)" ( (binary_expression "0x1fffffff - uVar8" number_literal - identifier) )))) )) (compound_statement "{\n        uVar7 = uVar4;\n      }" { (expression_statement "uVar7 = uVar4;" (assignment_expression "uVar7 = uVar4" identifier = identifier) ;) })) (expression_statement "uVar4 = *(uint *)(param_2 + 4);" (assignment_expression "uVar4 = *(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 ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "((int)uVar7 < 2)" ( (binary_expression "(int)uVar7 < 2" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "local_30 = uVar4 + 1;" (assignment_expression "local_30 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "pwVar2 = *(wstring **)param_2;" (assignment_expression "pwVar2 = *(wstring **)param_2" identifier = (pointer_expression "*(wstring **)param_2" * (cast_expression "(wstring **)param_2" ( (type_descriptor "wstring **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "uVar7 = 3;" (assignment_expression "uVar7 = 3" identifier = number_literal) ;) (if_statement "if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }" if (parenthesized_expression "(pwVar2 != local_2c)" ( (binary_expression "pwVar2 != local_2c" identifier != identifier) )) (compound_statement "{\n          uVar7 = *(uint *)(param_2 + 8);\n        }" { (expression_statement "uVar7 = *(uint *)(param_2 + 8);" (assignment_expression "uVar7 = *(uint *)(param_2 + 8)" identifier = (pointer_expression "*(uint *)(param_2 + 8)" * (cast_expression "(uint *)(param_2 + 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) ))))) ;) })) (if_statement "if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }" if (parenthesized_expression "(uVar7 < uVar4 + 1)" ( (binary_expression "uVar7 < uVar4 + 1" identifier < (binary_expression "uVar4 + 1" identifier + number_literal)) )) (compound_statement "{\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }" { (labeled_statement "std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" statement_identifier : (ERROR ":" :) (expression_statement "_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" (call_expression "_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1)" identifier (argument_list "(param_2,uVar4,0,(wchar_t *)0x0,1)" ( identifier , identifier , number_literal , (cast_expression "(wchar_t *)0x0" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , number_literal ))) ;))) (expression_statement "pwVar2 = *(wstring **)param_2;" (assignment_expression "pwVar2 = *(wstring **)param_2" identifier = (pointer_expression "*(wstring **)param_2" * (cast_expression "(wstring **)param_2" ( (type_descriptor "wstring **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier))) ;) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" identifier = (cast_expression "(wchar_t *)piVar6[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" identifier = (cast_expression "(wchar_t *)piVar6[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) ;) })) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) (expression_statement "*(int *)(pwVar2 + uVar4 * 4) = iVar9;" (assignment_expression "*(int *)(pwVar2 + uVar4 * 4) = iVar9" (pointer_expression "*(int *)(pwVar2 + uVar4 * 4)" * (cast_expression "(int *)(pwVar2 + uVar4 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar2 + uVar4 * 4)" ( (binary_expression "pwVar2 + uVar4 * 4" identifier + (binary_expression "uVar4 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "*(int *)(param_2 + 4) = local_30;" (assignment_expression "*(int *)(param_2 + 4) = local_30" (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) )))) = identifier) ;) (expression_statement "*(int *)(pwVar2 + uVar4 * 4 + 4) = 0;" (assignment_expression "*(int *)(pwVar2 + uVar4 * 4 + 4) = 0" (pointer_expression "*(int *)(pwVar2 + uVar4 * 4 + 4)" * (cast_expression "(int *)(pwVar2 + uVar4 * 4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pwVar2 + uVar4 * 4 + 4)" ( (binary_expression "pwVar2 + uVar4 * 4 + 4" (binary_expression "pwVar2 + uVar4 * 4" identifier + (binary_expression "uVar4 * 4" identifier * number_literal)) + number_literal) )))) = number_literal) ;) (if_statement "if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" if (parenthesized_expression "(pwVar10 < pwVar5)" ( (binary_expression "pwVar10 < pwVar5" identifier < identifier) )) (compound_statement "{\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }" { (expression_statement "iVar3 = *(int *)pwVar10;" (assignment_expression "iVar3 = *(int *)pwVar10" identifier = (pointer_expression "*(int *)pwVar10" * (cast_expression "(int *)pwVar10" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "piVar6[2] = (int)(pwVar10 + 2);" (assignment_expression "piVar6[2] = (int)(pwVar10 + 2)" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = (cast_expression "(int)(pwVar10 + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(pwVar10 + 2)" ( (binary_expression "pwVar10 + 2" identifier + number_literal) )))) ;) }) (else_clause "else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" else (compound_statement "{\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" { (expression_statement "iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);" (assignment_expression "iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6)" identifier = (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" ( (pointer_expression "**(code **)(*piVar6 + 0x28)" * (pointer_expression "*(code **)(*piVar6 + 0x28)" * (cast_expression "(code **)(*piVar6 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x28)" ( (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier )))) ;) }))) (if_statement "if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }" if (parenthesized_expression "(iVar3 != -1)" ( (binary_expression "iVar3 != -1" identifier != number_literal) )) (compound_statement "{\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }" { (if_statement "if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;" if (parenthesized_expression "((int *)piVar6[3] <= (int *)piVar6[2])" ( (binary_expression "(int *)piVar6[3] <= (int *)piVar6[2]" (cast_expression "(int *)piVar6[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ])) <= (cast_expression "(int *)piVar6[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00332b14;" goto statement_identifier ;)) (expression_statement "iVar9 = *(int *)piVar6[2];" (assignment_expression "iVar9 = *(int *)piVar6[2]" identifier = (pointer_expression "*(int *)piVar6[2]" * (cast_expression "(int *)piVar6[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ])))) ;) (goto_statement "goto joined_r0x00332ad0;" goto statement_identifier ;) })) (labeled_statement "LAB_00332b8c:\n        uVar7 = 2;" statement_identifier : (expression_statement "uVar7 = 2;" (assignment_expression "uVar7 = 2" identifier = number_literal) ;)) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);" (assignment_expression "iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7)" identifier = (call_expression "(*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7)" (parenthesized_expression "(*(code *)PTR_wmemchr_004c5d10)" ( (pointer_expression "*(code *)PTR_wmemchr_004c5d10" * (cast_expression "(code *)PTR_wmemchr_004c5d10" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pwVar10,param_3,uVar7)" ( identifier , identifier , identifier )))) ;) (if_statement "if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }" { (expression_statement "uVar7 = iVar3 - (int)pwVar10 >> 2;" (assignment_expression "uVar7 = iVar3 - (int)pwVar10 >> 2" identifier = (binary_expression "iVar3 - (int)pwVar10 >> 2" (binary_expression "iVar3 - (int)pwVar10" identifier - (cast_expression "(int)pwVar10" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal)) ;) })) (if_statement "if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }" if (parenthesized_expression "(0x1fffffff - uVar4 < uVar7)" ( (binary_expression "0x1fffffff - uVar4 < uVar7" (binary_expression "0x1fffffff - uVar4" number_literal - identifier) < identifier) )) (compound_statement "{\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }" { (expression_statement "piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);" (assignment_expression "piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" identifier = (cast_expression "(int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" (parenthesized_expression "(*(code *)PTR___throw_length_error_004c1e74)" ( (pointer_expression "*(code *)PTR___throw_length_error_004c1e74" * (cast_expression "(code *)PTR___throw_length_error_004c1e74" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" ( (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c" identifier + number_literal) ))))) ;) (return_statement "return piVar6;" return identifier ;) })) (labeled_statement "std::wstring::_M_append(param_2,pwVar10,uVar7);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_M_append(param_2,pwVar10,uVar7);" statement_identifier : (ERROR ":" :) (expression_statement "_M_append(param_2,pwVar10,uVar7);" (call_expression "_M_append(param_2,pwVar10,uVar7)" identifier (argument_list "(param_2,pwVar10,uVar7)" ( identifier , identifier , identifier ))) ;))) (expression_statement "uVar8 = uVar8 + uVar7;" (assignment_expression "uVar8 = uVar8 + uVar7" identifier = (binary_expression "uVar8 + uVar7" identifier + identifier)) ;) (expression_statement "piVar1 = (int *)(piVar6[2] + uVar7 * 4);" (assignment_expression "piVar1 = (int *)(piVar6[2] + uVar7 * 4)" identifier = (cast_expression "(int *)(piVar6[2] + uVar7 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar6[2] + uVar7 * 4)" ( (binary_expression "piVar6[2] + uVar7 * 4" (subscript_expression "piVar6[2]" identifier [ number_literal ]) + (binary_expression "uVar7 * 4" identifier * number_literal)) )))) ;) (expression_statement "piVar6[2] = (int)piVar1;" (assignment_expression "piVar6[2] = (int)piVar1" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = (cast_expression "(int)piVar1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" if (parenthesized_expression "(piVar1 < (int *)piVar6[3])" ( (binary_expression "piVar1 < (int *)piVar6[3]" identifier < (cast_expression "(int *)piVar6[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) )) (compound_statement "{\n        iVar9 = *piVar1;\n      }" { (expression_statement "iVar9 = *piVar1;" (assignment_expression "iVar9 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) }) (else_clause "else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" else (compound_statement "{\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" { (labeled_statement "LAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" statement_identifier : (expression_statement "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" (assignment_expression "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6)" identifier = (call_expression "(**(code **)(*piVar6 + 0x24))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x24))" ( (pointer_expression "**(code **)(*piVar6 + 0x24)" * (pointer_expression "*(code **)(*piVar6 + 0x24)" * (cast_expression "(code **)(*piVar6 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x24)" ( (binary_expression "*piVar6 + 0x24" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier )))) ;)) }))) (labeled_statement "joined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" statement_identifier : (if_statement "if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" if (parenthesized_expression "(0x1ffffffe < uVar8)" ( (binary_expression "0x1ffffffe < uVar8" number_literal < identifier) )) (compound_statement "{\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" { (if_statement "if (iVar9 == -1) goto LAB_00332b8c;" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (goto_statement "goto LAB_00332b8c;" goto statement_identifier ;)) (if_statement "if (param_3 != iVar9) goto LAB_003328f4;" if (parenthesized_expression "(param_3 != iVar9)" ( (binary_expression "param_3 != iVar9" identifier != identifier) )) (goto_statement "goto LAB_003328f4;" goto statement_identifier ;)) (if_statement "if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;" if (parenthesized_expression "((uint)piVar6[3] <= (uint)piVar6[2])" ( (binary_expression "(uint)piVar6[3] <= (uint)piVar6[2]" (cast_expression "(uint)piVar6[3]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar6[3]" identifier [ number_literal ])) <= (cast_expression "(uint)piVar6[2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_00332b6c;" goto statement_identifier ;)) (expression_statement "piVar6[2] = piVar6[2] + 4;" (assignment_expression "piVar6[2] = piVar6[2] + 4" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = (binary_expression "piVar6[2] + 4" (subscript_expression "piVar6[2]" identifier [ number_literal ]) + number_literal)) ;) (goto_statement "goto joined_r0x00332b04;" goto statement_identifier ;) }))) (if_statement "if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" if (parenthesized_expression "(iVar9 == -1)" ( (binary_expression "iVar9 == -1" identifier == number_literal) )) (compound_statement "{\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" { (expression_statement "uVar7 = 2;" (assignment_expression "uVar7 = 2" identifier = number_literal) ;) (if_statement "if (uVar8 == 0) {\n          uVar7 = 6;\n        }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n          uVar7 = 6;\n        }" { (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" identifier = number_literal) ;) })) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (goto_statement "goto LAB_00332904;" goto statement_identifier ;) })) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" identifier = (cast_expression "(wchar_t *)piVar6[2]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[2]" identifier [ number_literal ]))) ;) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" identifier = (cast_expression "(wchar_t *)piVar6[3]" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar6[3]" identifier [ number_literal ]))) ;) }) while (parenthesized_expression "(param_3 != iVar9)" ( (binary_expression "param_3 != iVar9" identifier != identifier) )) ;) (if_statement "if (pwVar10 < pwVar5) goto LAB_00332c04;" if (parenthesized_expression "(pwVar10 < pwVar5)" ( (binary_expression "pwVar10 < pwVar5" identifier < identifier) )) (goto_statement "goto LAB_00332c04;" goto statement_identifier ;)) (labeled_statement "LAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);" statement_identifier : (expression_statement "(**(code **)(*piVar6 + 0x28))(piVar6);" (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" ( (pointer_expression "**(code **)(*piVar6 + 0x28)" * (pointer_expression "*(code **)(*piVar6 + 0x28)" * (cast_expression "(code **)(*piVar6 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar6 + 0x28)" ( (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" * identifier) + number_literal) ))))) )) (argument_list "(piVar6)" ( identifier ))) ;)) (labeled_statement "joined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }" statement_identifier : (if_statement "if (uVar8 != 0xffffffff) {\n      return param_1;\n    }" if (parenthesized_expression "(uVar8 != 0xffffffff)" ( (binary_expression "uVar8 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n      return param_1;\n    }" { (return_statement "return param_1;" return identifier ;) }))) })) (labeled_statement "LAB_003328f4:\n  uVar7 = 4;" statement_identifier : (expression_statement "uVar7 = 4;" (assignment_expression "uVar7 = 4" identifier = number_literal) ;)) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" identifier = (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier) + (pointer_expression "*(int *)(*param_1 + -0xc)" * (cast_expression "(int *)(*param_1 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + -0xc)" ( (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" * identifier) + number_literal) )))))) ;) (labeled_statement "LAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));" statement_identifier : (expression_statement "(*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));" (call_expression "(*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14))" (parenthesized_expression "(*(code *)PTR_clear_004c5180)" ( (pointer_expression "*(code *)PTR_clear_004c5180" * (cast_expression "(code *)PTR_clear_004c5180" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar3,uVar7 | *(uint *)(iVar3 + 0x14))" ( identifier , (binary_expression "uVar7 | *(uint *)(iVar3 + 0x14)" identifier | (pointer_expression "*(uint *)(iVar3 + 0x14)" * (cast_expression "(uint *)(iVar3 + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0x14)" ( (binary_expression "iVar3 + 0x14" identifier + number_literal) ))))) ))) ;)) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) 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 (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;)) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) <= (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT - IDENT) )))) )) (compound_statement { (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) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_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 = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (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 < (binary_expression IDENT + LIT)) )) (compound_statement { (labeled_statement statement_identifier : (ERROR :) (labeled_statement statement_identifier : (ERROR :) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) , 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 = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (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 (binary_expression IDENT + (binary_expression IDENT * LIT)) + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) <= (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) ;) (goto_statement goto statement_identifier ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) >> LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) < IDENT) )) (compound_statement { (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 *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) ))))) ;) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (ERROR :) (labeled_statement statement_identifier : (ERROR :) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;)) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (goto_statement goto statement_identifier ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT ))) ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) }))) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))))) ;) (labeled_statement statement_identifier : (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ;)) (return_statement return IDENT ;) })))
(function_definition "int * FUN_0033288c(int *param_1,wstring *param_2,int param_3)\n\n{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  uint uVar4;\n  wchar_t *pwVar5;\n  int *piVar6;\n  uint uVar7;\n  uint uVar8;\n  int iVar9;\n  wchar_t *pwVar10;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar7 = 4;\n  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));\n  return param_1;\n}" (primitive_type "int") (pointer_declarator "* FUN_0033288c(int *param_1,wstring *param_2,int param_3)" (* "*") (function_declarator "FUN_0033288c(int *param_1,wstring *param_2,int param_3)" (identifier "FUN_0033288c") (parameter_list "(int *param_1,wstring *param_2,int param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "wstring *param_2" (type_identifier "wstring") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) () ")")))) (compound_statement "{\n  int *piVar1;\n  wstring *pwVar2;\n  int iVar3;\n  uint uVar4;\n  wchar_t *pwVar5;\n  int *piVar6;\n  uint uVar7;\n  uint uVar8;\n  int iVar9;\n  wchar_t *pwVar10;\n  char local_38 [8];\n  int local_30;\n  wstring *local_2c;\n  \n  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);\n  if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }\nLAB_003328f4:\n  uVar7 = 4;\n  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\nLAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));\n  return param_1;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "wstring *pwVar2;" (type_identifier "wstring") (pointer_declarator "*pwVar2" (* "*") (identifier "pwVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "wchar_t *pwVar5;" (type_identifier "wchar_t") (pointer_declarator "*pwVar5" (* "*") (identifier "pwVar5")) (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "wchar_t *pwVar10;" (type_identifier "wchar_t") (pointer_declarator "*pwVar10" (* "*") (identifier "pwVar10")) (; ";")) (declaration "char local_38 [8];" (primitive_type "char") (array_declarator "local_38 [8]" (identifier "local_38") ([ "[") (number_literal "8") (] "]")) (; ";")) (declaration "int local_30;" (primitive_type "int") (identifier "local_30") (; ";")) (declaration "wstring *local_2c;" (type_identifier "wstring") (pointer_declarator "*local_2c" (* "*") (identifier "local_2c")) (; ";")) (expression_statement "(*(code *)PTR_sentry_004c517c)(local_38,param_1,1);" (call_expression "(*(code *)PTR_sentry_004c517c)(local_38,param_1,1)" (parenthesized_expression "(*(code *)PTR_sentry_004c517c)" (( "(") (pointer_expression "*(code *)PTR_sentry_004c517c" (* "*") (cast_expression "(code *)PTR_sentry_004c517c" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_sentry_004c517c"))) () ")")) (argument_list "(local_38,param_1,1)" (( "(") (identifier "local_38") (, ",") (identifier "param_1") (, ",") (number_literal "1") () ")"))) (; ";")) (if_statement "if (local_38[0] != '\0') {\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }" (if "if") (parenthesized_expression "(local_38[0] != '\0')" (( "(") (binary_expression "local_38[0] != '\0'" (subscript_expression "local_38[0]" (identifier "local_38") ([ "[") (number_literal "0") (] "]")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    iVar3 = *param_1;\n    *(undefined4 *)(param_2 + 4) = 0;\n    iVar3 = *(int *)(iVar3 + -0xc);\n    **(undefined4 **)param_2 = 0;\n    iVar3 = (int)param_1 + iVar3;\n    piVar6 = *(int **)(iVar3 + 0x7c);\n    pwVar10 = (wchar_t *)piVar6[2];\n    pwVar5 = (wchar_t *)piVar6[3];\n    if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }\n    uVar8 = 0;\n    if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }\n    local_2c = param_2 + 8;\n    do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);\n    if (pwVar10 < pwVar5) goto LAB_00332c04;\nLAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);\njoined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }\n  }" ({ "{") (expression_statement "iVar3 = *param_1;" (assignment_expression "iVar3 = *param_1" (identifier "iVar3") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "*(undefined4 *)(param_2 + 4) = 0;" (assignment_expression "*(undefined4 *)(param_2 + 4) = 0" (pointer_expression "*(undefined4 *)(param_2 + 4)" (* "*") (cast_expression "(undefined4 *)(param_2 + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar3 = *(int *)(iVar3 + -0xc);" (assignment_expression "iVar3 = *(int *)(iVar3 + -0xc)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(iVar3 + -0xc)" (* "*") (cast_expression "(int *)(iVar3 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + -0xc)" (( "(") (binary_expression "iVar3 + -0xc" (identifier "iVar3") (+ "+") (number_literal "-0xc")) () ")"))))) (; ";")) (expression_statement "**(undefined4 **)param_2 = 0;" (assignment_expression "**(undefined4 **)param_2 = 0" (pointer_expression "**(undefined4 **)param_2" (* "*") (pointer_expression "*(undefined4 **)param_2" (* "*") (cast_expression "(undefined4 **)param_2" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "param_2")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar3 = (int)param_1 + iVar3;" (assignment_expression "iVar3 = (int)param_1 + iVar3" (identifier "iVar3") (= "=") (binary_expression "(int)param_1 + iVar3" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (identifier "iVar3"))) (; ";")) (expression_statement "piVar6 = *(int **)(iVar3 + 0x7c);" (assignment_expression "piVar6 = *(int **)(iVar3 + 0x7c)" (identifier "piVar6") (= "=") (pointer_expression "*(int **)(iVar3 + 0x7c)" (* "*") (cast_expression "(int **)(iVar3 + 0x7c)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar3 + 0x7c)" (( "(") (binary_expression "iVar3 + 0x7c" (identifier "iVar3") (+ "+") (number_literal "0x7c")) () ")"))))) (; ";")) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" (identifier "pwVar10") (= "=") (cast_expression "(wchar_t *)piVar6[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" (identifier "pwVar5") (= "=") (cast_expression "(wchar_t *)piVar6[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[3]" (identifier "piVar6") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if (pwVar10 < pwVar5) {\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }\n    else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" (if "if") (parenthesized_expression "(pwVar10 < pwVar5)" (( "(") (binary_expression "pwVar10 < pwVar5" (identifier "pwVar10") (< "<") (identifier "pwVar5")) () ")")) (compound_statement "{\n      iVar9 = *(int *)pwVar10;\n      uVar7 = 6;\n      if (iVar9 == -1) goto LAB_00332904;\n    }" ({ "{") (expression_statement "iVar9 = *(int *)pwVar10;" (assignment_expression "iVar9 = *(int *)pwVar10" (identifier "iVar9") (= "=") (pointer_expression "*(int *)pwVar10" (* "*") (cast_expression "(int *)pwVar10" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pwVar10")))) (; ";")) (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" (identifier "uVar7") (= "=") (number_literal "6")) (; ";")) (if_statement "if (iVar9 == -1) goto LAB_00332904;" (if "if") (parenthesized_expression "(iVar9 == -1)" (( "(") (binary_expression "iVar9 == -1" (identifier "iVar9") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_00332904;" (goto "goto") (statement_identifier "LAB_00332904") (; ";"))) (} "}")) (else_clause "else {\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" (else "else") (compound_statement "{\n                    \n      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar5 = (wchar_t *)piVar6[3];\n      pwVar10 = (wchar_t *)piVar6[2];\n    }" ({ "{") (expression_statement "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" (assignment_expression "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6)" (identifier "iVar9") (= "=") (call_expression "(**(code **)(*piVar6 + 0x24))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x24))" (( "(") (pointer_expression "**(code **)(*piVar6 + 0x24)" (* "*") (pointer_expression "*(code **)(*piVar6 + 0x24)" (* "*") (cast_expression "(code **)(*piVar6 + 0x24)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar6 + 0x24)" (( "(") (binary_expression "*piVar6 + 0x24" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (+ "+") (number_literal "0x24")) () ")"))))) () ")")) (argument_list "(piVar6)" (( "(") (identifier "piVar6") () ")")))) (; ";")) (if_statement "if (iVar9 == -1) {\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" (if "if") (parenthesized_expression "(iVar9 == -1)" (( "(") (binary_expression "iVar9 == -1" (identifier "iVar9") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        uVar7 = 6;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" ({ "{") (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" (identifier "uVar7") (= "=") (number_literal "6")) (; ";")) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar3") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";")) (goto_statement "goto LAB_00332904;" (goto "goto") (statement_identifier "LAB_00332904") (; ";")) (} "}"))) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" (identifier "pwVar5") (= "=") (cast_expression "(wchar_t *)piVar6[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[3]" (identifier "piVar6") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" (identifier "pwVar10") (= "=") (cast_expression "(wchar_t *)piVar6[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")))) (; ";")) (} "}")))) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_3 == iVar9) {\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }" (if "if") (parenthesized_expression "(param_3 == iVar9)" (( "(") (binary_expression "param_3 == iVar9" (identifier "param_3") (== "==") (identifier "iVar9")) () ")")) (compound_statement "{\n      if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }\nLAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);\n      return param_1;\n    }" ({ "{") (if_statement "if (pwVar5 <= pwVar10) {\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }" (if "if") (parenthesized_expression "(pwVar5 <= pwVar10)" (( "(") (binary_expression "pwVar5 <= pwVar10" (identifier "pwVar5") (<= "<=") (identifier "pwVar10")) () ")")) (compound_statement "{\n                    \n        (**(code **)(*piVar6 + 0x28))(piVar6);\n        return param_1;\n      }" ({ "{") (expression_statement "(**(code **)(*piVar6 + 0x28))(piVar6);" (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" (( "(") (pointer_expression "**(code **)(*piVar6 + 0x28)" (* "*") (pointer_expression "*(code **)(*piVar6 + 0x28)" (* "*") (cast_expression "(code **)(*piVar6 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar6 + 0x28)" (( "(") (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(piVar6)" (( "(") (identifier "piVar6") () ")"))) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (labeled_statement "LAB_00332c04:\n      piVar6[2] = (int)(pwVar10 + 2);" (statement_identifier "LAB_00332c04") (: ":") (expression_statement "piVar6[2] = (int)(pwVar10 + 2);" (assignment_expression "piVar6[2] = (int)(pwVar10 + 2)" (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)(pwVar10 + 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(pwVar10 + 2)" (( "(") (binary_expression "pwVar10 + 2" (identifier "pwVar10") (+ "+") (number_literal "2")) () ")")))) (; ";"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}"))) (expression_statement "local_2c = param_2 + 8;" (assignment_expression "local_2c = param_2 + 8" (identifier "local_2c") (= "=") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8"))) (; ";")) (do_statement "do {\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    } while (param_3 != iVar9);" (do "do") (compound_statement "{\n      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;\n      uVar7 = 0x1fffffff - uVar8;\n      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }\n      uVar4 = *(uint *)(param_2 + 4);\n      if ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);\n      if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }\n      if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }\n                    \n      std::wstring::_M_append(param_2,pwVar10,uVar7);\n      uVar8 = uVar8 + uVar7;\n      piVar1 = (int *)(piVar6[2] + uVar7 * 4);\n      piVar6[2] = (int)piVar1;\n      if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }\njoined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }\n      if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }\n      pwVar10 = (wchar_t *)piVar6[2];\n      pwVar5 = (wchar_t *)piVar6[3];\n    }" ({ "{") (expression_statement "uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;" (assignment_expression "uVar4 = (int)pwVar5 - (int)pwVar10 >> 2" (identifier "uVar4") (= "=") (binary_expression "(int)pwVar5 - (int)pwVar10 >> 2" (binary_expression "(int)pwVar5 - (int)pwVar10" (cast_expression "(int)pwVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar5")) (- "-") (cast_expression "(int)pwVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar10"))) (>> ">>") (number_literal "2"))) (; ";")) (expression_statement "uVar7 = 0x1fffffff - uVar8;" (assignment_expression "uVar7 = 0x1fffffff - uVar8" (identifier "uVar7") (= "=") (binary_expression "0x1fffffff - uVar8" (number_literal "0x1fffffff") (- "-") (identifier "uVar8"))) (; ";")) (if_statement "if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {\n        uVar7 = uVar4;\n      }" (if "if") (parenthesized_expression "((int)uVar4 <= (int)(0x1fffffff - uVar8))" (( "(") (binary_expression "(int)uVar4 <= (int)(0x1fffffff - uVar8)" (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4")) (<= "<=") (cast_expression "(int)(0x1fffffff - uVar8)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x1fffffff - uVar8)" (( "(") (binary_expression "0x1fffffff - uVar8" (number_literal "0x1fffffff") (- "-") (identifier "uVar8")) () ")")))) () ")")) (compound_statement "{\n        uVar7 = uVar4;\n      }" ({ "{") (expression_statement "uVar7 = uVar4;" (assignment_expression "uVar7 = uVar4" (identifier "uVar7") (= "=") (identifier "uVar4")) (; ";")) (} "}"))) (expression_statement "uVar4 = *(uint *)(param_2 + 4);" (assignment_expression "uVar4 = *(uint *)(param_2 + 4)" (identifier "uVar4") (= "=") (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 ((int)uVar7 < 2) {\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" (if "if") (parenthesized_expression "((int)uVar7 < 2)" (( "(") (binary_expression "(int)uVar7 < 2" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (< "<") (number_literal "2")) () ")")) (compound_statement "{\n        local_30 = uVar4 + 1;\n        pwVar2 = *(wstring **)param_2;\n        uVar7 = 3;\n        if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }\n        if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }\n        uVar8 = uVar8 + 1;\n        *(int *)(pwVar2 + uVar4 * 4) = iVar9;\n        *(int *)(param_2 + 4) = local_30;\n        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;\n        if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }\n        if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }\nLAB_00332b8c:\n        uVar7 = 2;\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" ({ "{") (expression_statement "local_30 = uVar4 + 1;" (assignment_expression "local_30 = uVar4 + 1" (identifier "local_30") (= "=") (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pwVar2 = *(wstring **)param_2;" (assignment_expression "pwVar2 = *(wstring **)param_2" (identifier "pwVar2") (= "=") (pointer_expression "*(wstring **)param_2" (* "*") (cast_expression "(wstring **)param_2" (( "(") (type_descriptor "wstring **" (type_identifier "wstring") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "param_2")))) (; ";")) (expression_statement "uVar7 = 3;" (assignment_expression "uVar7 = 3" (identifier "uVar7") (= "=") (number_literal "3")) (; ";")) (if_statement "if (pwVar2 != local_2c) {\n          uVar7 = *(uint *)(param_2 + 8);\n        }" (if "if") (parenthesized_expression "(pwVar2 != local_2c)" (( "(") (binary_expression "pwVar2 != local_2c" (identifier "pwVar2") (!= "!=") (identifier "local_2c")) () ")")) (compound_statement "{\n          uVar7 = *(uint *)(param_2 + 8);\n        }" ({ "{") (expression_statement "uVar7 = *(uint *)(param_2 + 8);" (assignment_expression "uVar7 = *(uint *)(param_2 + 8)" (identifier "uVar7") (= "=") (pointer_expression "*(uint *)(param_2 + 8)" (* "*") (cast_expression "(uint *)(param_2 + 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (uVar7 < uVar4 + 1) {\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }" (if "if") (parenthesized_expression "(uVar7 < uVar4 + 1)" (( "(") (binary_expression "uVar7 < uVar4 + 1" (identifier "uVar7") (< "<") (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1"))) () ")")) (compound_statement "{\n          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);\n          pwVar2 = *(wstring **)param_2;\n          pwVar10 = (wchar_t *)piVar6[2];\n          pwVar5 = (wchar_t *)piVar6[3];\n        }" ({ "{") (labeled_statement "std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" (statement_identifier "std") (: ":") (ERROR ":" (: ":")) (labeled_statement "wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" (statement_identifier "wstring") (: ":") (ERROR ":" (: ":")) (expression_statement "_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);" (call_expression "_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1)" (identifier "_M_mutate") (argument_list "(param_2,uVar4,0,(wchar_t *)0x0,1)" (( "(") (identifier "param_2") (, ",") (identifier "uVar4") (, ",") (number_literal "0") (, ",") (cast_expression "(wchar_t *)0x0" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (, ",") (number_literal "1") () ")"))) (; ";")))) (expression_statement "pwVar2 = *(wstring **)param_2;" (assignment_expression "pwVar2 = *(wstring **)param_2" (identifier "pwVar2") (= "=") (pointer_expression "*(wstring **)param_2" (* "*") (cast_expression "(wstring **)param_2" (( "(") (type_descriptor "wstring **" (type_identifier "wstring") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "param_2")))) (; ";")) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" (identifier "pwVar10") (= "=") (cast_expression "(wchar_t *)piVar6[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" (identifier "pwVar5") (= "=") (cast_expression "(wchar_t *)piVar6[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[3]" (identifier "piVar6") ([ "[") (number_literal "3") (] "]")))) (; ";")) (} "}"))) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" (identifier "uVar8") (= "=") (binary_expression "uVar8 + 1" (identifier "uVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(int *)(pwVar2 + uVar4 * 4) = iVar9;" (assignment_expression "*(int *)(pwVar2 + uVar4 * 4) = iVar9" (pointer_expression "*(int *)(pwVar2 + uVar4 * 4)" (* "*") (cast_expression "(int *)(pwVar2 + uVar4 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pwVar2 + uVar4 * 4)" (( "(") (binary_expression "pwVar2 + uVar4 * 4" (identifier "pwVar2") (+ "+") (binary_expression "uVar4 * 4" (identifier "uVar4") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "iVar9")) (; ";")) (expression_statement "*(int *)(param_2 + 4) = local_30;" (assignment_expression "*(int *)(param_2 + 4) = local_30" (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")) () ")")))) (= "=") (identifier "local_30")) (; ";")) (expression_statement "*(int *)(pwVar2 + uVar4 * 4 + 4) = 0;" (assignment_expression "*(int *)(pwVar2 + uVar4 * 4 + 4) = 0" (pointer_expression "*(int *)(pwVar2 + uVar4 * 4 + 4)" (* "*") (cast_expression "(int *)(pwVar2 + uVar4 * 4 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pwVar2 + uVar4 * 4 + 4)" (( "(") (binary_expression "pwVar2 + uVar4 * 4 + 4" (binary_expression "pwVar2 + uVar4 * 4" (identifier "pwVar2") (+ "+") (binary_expression "uVar4 * 4" (identifier "uVar4") (* "*") (number_literal "4"))) (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (if_statement "if (pwVar10 < pwVar5) {\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }\n        else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" (if "if") (parenthesized_expression "(pwVar10 < pwVar5)" (( "(") (binary_expression "pwVar10 < pwVar5" (identifier "pwVar10") (< "<") (identifier "pwVar5")) () ")")) (compound_statement "{\n          iVar3 = *(int *)pwVar10;\n          piVar6[2] = (int)(pwVar10 + 2);\n        }" ({ "{") (expression_statement "iVar3 = *(int *)pwVar10;" (assignment_expression "iVar3 = *(int *)pwVar10" (identifier "iVar3") (= "=") (pointer_expression "*(int *)pwVar10" (* "*") (cast_expression "(int *)pwVar10" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pwVar10")))) (; ";")) (expression_statement "piVar6[2] = (int)(pwVar10 + 2);" (assignment_expression "piVar6[2] = (int)(pwVar10 + 2)" (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)(pwVar10 + 2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(pwVar10 + 2)" (( "(") (binary_expression "pwVar10 + 2" (identifier "pwVar10") (+ "+") (number_literal "2")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" (else "else") (compound_statement "{\n          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);\n        }" ({ "{") (expression_statement "iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);" (assignment_expression "iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" (( "(") (pointer_expression "**(code **)(*piVar6 + 0x28)" (* "*") (pointer_expression "*(code **)(*piVar6 + 0x28)" (* "*") (cast_expression "(code **)(*piVar6 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar6 + 0x28)" (( "(") (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(piVar6)" (( "(") (identifier "piVar6") () ")")))) (; ";")) (} "}")))) (if_statement "if (iVar3 != -1) {\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }" (if "if") (parenthesized_expression "(iVar3 != -1)" (( "(") (binary_expression "iVar3 != -1" (identifier "iVar3") (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;\n          iVar9 = *(int *)piVar6[2];\n          goto joined_r0x00332ad0;\n        }" ({ "{") (if_statement "if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;" (if "if") (parenthesized_expression "((int *)piVar6[3] <= (int *)piVar6[2])" (( "(") (binary_expression "(int *)piVar6[3] <= (int *)piVar6[2]" (cast_expression "(int *)piVar6[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[3]" (identifier "piVar6") ([ "[") (number_literal "3") (] "]"))) (<= "<=") (cast_expression "(int *)piVar6[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")))) () ")")) (goto_statement "goto LAB_00332b14;" (goto "goto") (statement_identifier "LAB_00332b14") (; ";"))) (expression_statement "iVar9 = *(int *)piVar6[2];" (assignment_expression "iVar9 = *(int *)piVar6[2]" (identifier "iVar9") (= "=") (pointer_expression "*(int *)piVar6[2]" (* "*") (cast_expression "(int *)piVar6[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]"))))) (; ";")) (goto_statement "goto joined_r0x00332ad0;" (goto "goto") (statement_identifier "joined_r0x00332ad0") (; ";")) (} "}"))) (labeled_statement "LAB_00332b8c:\n        uVar7 = 2;" (statement_identifier "LAB_00332b8c") (: ":") (expression_statement "uVar7 = 2;" (assignment_expression "uVar7 = 2" (identifier "uVar7") (= "=") (number_literal "2")) (; ";"))) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar3") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";")) (goto_statement "goto LAB_00332904;" (goto "goto") (statement_identifier "LAB_00332904") (; ";")) (} "}"))) (expression_statement "iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);" (assignment_expression "iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7)" (identifier "iVar3") (= "=") (call_expression "(*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7)" (parenthesized_expression "(*(code *)PTR_wmemchr_004c5d10)" (( "(") (pointer_expression "*(code *)PTR_wmemchr_004c5d10" (* "*") (cast_expression "(code *)PTR_wmemchr_004c5d10" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_wmemchr_004c5d10"))) () ")")) (argument_list "(pwVar10,param_3,uVar7)" (( "(") (identifier "pwVar10") (, ",") (identifier "param_3") (, ",") (identifier "uVar7") () ")")))) (; ";")) (if_statement "if (iVar3 != 0) {\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar7 = iVar3 - (int)pwVar10 >> 2;\n      }" ({ "{") (expression_statement "uVar7 = iVar3 - (int)pwVar10 >> 2;" (assignment_expression "uVar7 = iVar3 - (int)pwVar10 >> 2" (identifier "uVar7") (= "=") (binary_expression "iVar3 - (int)pwVar10 >> 2" (binary_expression "iVar3 - (int)pwVar10" (identifier "iVar3") (- "-") (cast_expression "(int)pwVar10" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pwVar10"))) (>> ">>") (number_literal "2"))) (; ";")) (} "}"))) (if_statement "if (0x1fffffff - uVar4 < uVar7) {\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }" (if "if") (parenthesized_expression "(0x1fffffff - uVar4 < uVar7)" (( "(") (binary_expression "0x1fffffff - uVar4 < uVar7" (binary_expression "0x1fffffff - uVar4" (number_literal "0x1fffffff") (- "-") (identifier "uVar4")) (< "<") (identifier "uVar7")) () ")")) (compound_statement "{\n                    \n        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);\n        return piVar6;\n      }" ({ "{") (expression_statement "piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);" (assignment_expression "piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" (identifier "piVar6") (= "=") (cast_expression "(int *)(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR___throw_length_error_004c1e74)\n                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" (parenthesized_expression "(*(code *)PTR___throw_length_error_004c1e74)" (( "(") (pointer_expression "*(code *)PTR___throw_length_error_004c1e74" (* "*") (cast_expression "(code *)PTR___throw_length_error_004c1e74" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___throw_length_error_004c1e74"))) () ")")) (argument_list "(PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c)" (( "(") (binary_expression "PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c" (identifier "PTR_s_ral_options14Struct_no_crefE_004c127c") (+ "+") (number_literal "0x446c")) () ")"))))) (; ";")) (return_statement "return piVar6;" (return "return") (identifier "piVar6") (; ";")) (} "}"))) (labeled_statement "std::wstring::_M_append(param_2,pwVar10,uVar7);" (statement_identifier "std") (: ":") (ERROR ":" (: ":")) (labeled_statement "wstring::_M_append(param_2,pwVar10,uVar7);" (statement_identifier "wstring") (: ":") (ERROR ":" (: ":")) (expression_statement "_M_append(param_2,pwVar10,uVar7);" (call_expression "_M_append(param_2,pwVar10,uVar7)" (identifier "_M_append") (argument_list "(param_2,pwVar10,uVar7)" (( "(") (identifier "param_2") (, ",") (identifier "pwVar10") (, ",") (identifier "uVar7") () ")"))) (; ";")))) (expression_statement "uVar8 = uVar8 + uVar7;" (assignment_expression "uVar8 = uVar8 + uVar7" (identifier "uVar8") (= "=") (binary_expression "uVar8 + uVar7" (identifier "uVar8") (+ "+") (identifier "uVar7"))) (; ";")) (expression_statement "piVar1 = (int *)(piVar6[2] + uVar7 * 4);" (assignment_expression "piVar1 = (int *)(piVar6[2] + uVar7 * 4)" (identifier "piVar1") (= "=") (cast_expression "(int *)(piVar6[2] + uVar7 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar6[2] + uVar7 * 4)" (( "(") (binary_expression "piVar6[2] + uVar7 * 4" (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")) (+ "+") (binary_expression "uVar7 * 4" (identifier "uVar7") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "piVar6[2] = (int)piVar1;" (assignment_expression "piVar6[2] = (int)piVar1" (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)piVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "piVar1"))) (; ";")) (if_statement "if (piVar1 < (int *)piVar6[3]) {\n        iVar9 = *piVar1;\n      }\n      else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" (if "if") (parenthesized_expression "(piVar1 < (int *)piVar6[3])" (( "(") (binary_expression "piVar1 < (int *)piVar6[3]" (identifier "piVar1") (< "<") (cast_expression "(int *)piVar6[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[3]" (identifier "piVar6") ([ "[") (number_literal "3") (] "]")))) () ")")) (compound_statement "{\n        iVar9 = *piVar1;\n      }" ({ "{") (expression_statement "iVar9 = *piVar1;" (assignment_expression "iVar9 = *piVar1" (identifier "iVar9") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (} "}")) (else_clause "else {\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" (else "else") (compound_statement "{\nLAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);\n      }" ({ "{") (labeled_statement "LAB_00332b14:\n        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" (statement_identifier "LAB_00332b14") (: ":") (expression_statement "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);" (assignment_expression "iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6)" (identifier "iVar9") (= "=") (call_expression "(**(code **)(*piVar6 + 0x24))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x24))" (( "(") (pointer_expression "**(code **)(*piVar6 + 0x24)" (* "*") (pointer_expression "*(code **)(*piVar6 + 0x24)" (* "*") (cast_expression "(code **)(*piVar6 + 0x24)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar6 + 0x24)" (( "(") (binary_expression "*piVar6 + 0x24" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (+ "+") (number_literal "0x24")) () ")"))))) () ")")) (argument_list "(piVar6)" (( "(") (identifier "piVar6") () ")")))) (; ";"))) (} "}")))) (labeled_statement "joined_r0x00332ad0:\n      if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" (statement_identifier "joined_r0x00332ad0") (: ":") (if_statement "if (0x1ffffffe < uVar8) {\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" (if "if") (parenthesized_expression "(0x1ffffffe < uVar8)" (( "(") (binary_expression "0x1ffffffe < uVar8" (number_literal "0x1ffffffe") (< "<") (identifier "uVar8")) () ")")) (compound_statement "{\n        if (iVar9 == -1) goto LAB_00332b8c;\n        if (param_3 != iVar9) goto LAB_003328f4;\n        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;\n        piVar6[2] = piVar6[2] + 4;\n        goto joined_r0x00332b04;\n      }" ({ "{") (if_statement "if (iVar9 == -1) goto LAB_00332b8c;" (if "if") (parenthesized_expression "(iVar9 == -1)" (( "(") (binary_expression "iVar9 == -1" (identifier "iVar9") (== "==") (number_literal "-1")) () ")")) (goto_statement "goto LAB_00332b8c;" (goto "goto") (statement_identifier "LAB_00332b8c") (; ";"))) (if_statement "if (param_3 != iVar9) goto LAB_003328f4;" (if "if") (parenthesized_expression "(param_3 != iVar9)" (( "(") (binary_expression "param_3 != iVar9" (identifier "param_3") (!= "!=") (identifier "iVar9")) () ")")) (goto_statement "goto LAB_003328f4;" (goto "goto") (statement_identifier "LAB_003328f4") (; ";"))) (if_statement "if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;" (if "if") (parenthesized_expression "((uint)piVar6[3] <= (uint)piVar6[2])" (( "(") (binary_expression "(uint)piVar6[3] <= (uint)piVar6[2]" (cast_expression "(uint)piVar6[3]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar6[3]" (identifier "piVar6") ([ "[") (number_literal "3") (] "]"))) (<= "<=") (cast_expression "(uint)piVar6[2]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")))) () ")")) (goto_statement "goto LAB_00332b6c;" (goto "goto") (statement_identifier "LAB_00332b6c") (; ";"))) (expression_statement "piVar6[2] = piVar6[2] + 4;" (assignment_expression "piVar6[2] = piVar6[2] + 4" (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "piVar6[2] + 4" (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "4"))) (; ";")) (goto_statement "goto joined_r0x00332b04;" (goto "goto") (statement_identifier "joined_r0x00332b04") (; ";")) (} "}")))) (if_statement "if (iVar9 == -1) {\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" (if "if") (parenthesized_expression "(iVar9 == -1)" (( "(") (binary_expression "iVar9 == -1" (identifier "iVar9") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        uVar7 = 2;\n        if (uVar8 == 0) {\n          uVar7 = 6;\n        }\n        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);\n        goto LAB_00332904;\n      }" ({ "{") (expression_statement "uVar7 = 2;" (assignment_expression "uVar7 = 2" (identifier "uVar7") (= "=") (number_literal "2")) (; ";")) (if_statement "if (uVar8 == 0) {\n          uVar7 = 6;\n        }" (if "if") (parenthesized_expression "(uVar8 == 0)" (( "(") (binary_expression "uVar8 == 0" (identifier "uVar8") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          uVar7 = 6;\n        }" ({ "{") (expression_statement "uVar7 = 6;" (assignment_expression "uVar7 = 6" (identifier "uVar7") (= "=") (number_literal "6")) (; ";")) (} "}"))) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar3") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";")) (goto_statement "goto LAB_00332904;" (goto "goto") (statement_identifier "LAB_00332904") (; ";")) (} "}"))) (expression_statement "pwVar10 = (wchar_t *)piVar6[2];" (assignment_expression "pwVar10 = (wchar_t *)piVar6[2]" (identifier "pwVar10") (= "=") (cast_expression "(wchar_t *)piVar6[2]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "pwVar5 = (wchar_t *)piVar6[3];" (assignment_expression "pwVar5 = (wchar_t *)piVar6[3]" (identifier "pwVar5") (= "=") (cast_expression "(wchar_t *)piVar6[3]" (( "(") (type_descriptor "wchar_t *" (type_identifier "wchar_t") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar6[3]" (identifier "piVar6") ([ "[") (number_literal "3") (] "]")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_3 != iVar9)" (( "(") (binary_expression "param_3 != iVar9" (identifier "param_3") (!= "!=") (identifier "iVar9")) () ")")) (; ";")) (if_statement "if (pwVar10 < pwVar5) goto LAB_00332c04;" (if "if") (parenthesized_expression "(pwVar10 < pwVar5)" (( "(") (binary_expression "pwVar10 < pwVar5" (identifier "pwVar10") (< "<") (identifier "pwVar5")) () ")")) (goto_statement "goto LAB_00332c04;" (goto "goto") (statement_identifier "LAB_00332c04") (; ";"))) (labeled_statement "LAB_00332b6c:\n    (**(code **)(*piVar6 + 0x28))(piVar6);" (statement_identifier "LAB_00332b6c") (: ":") (expression_statement "(**(code **)(*piVar6 + 0x28))(piVar6);" (call_expression "(**(code **)(*piVar6 + 0x28))(piVar6)" (parenthesized_expression "(**(code **)(*piVar6 + 0x28))" (( "(") (pointer_expression "**(code **)(*piVar6 + 0x28)" (* "*") (pointer_expression "*(code **)(*piVar6 + 0x28)" (* "*") (cast_expression "(code **)(*piVar6 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar6 + 0x28)" (( "(") (binary_expression "*piVar6 + 0x28" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(piVar6)" (( "(") (identifier "piVar6") () ")"))) (; ";"))) (labeled_statement "joined_r0x00332b04:\n    if (uVar8 != 0xffffffff) {\n      return param_1;\n    }" (statement_identifier "joined_r0x00332b04") (: ":") (if_statement "if (uVar8 != 0xffffffff) {\n      return param_1;\n    }" (if "if") (parenthesized_expression "(uVar8 != 0xffffffff)" (( "(") (binary_expression "uVar8 != 0xffffffff" (identifier "uVar8") (!= "!=") (number_literal "0xffffffff")) () ")")) (compound_statement "{\n      return param_1;\n    }" ({ "{") (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))) (} "}"))) (labeled_statement "LAB_003328f4:\n  uVar7 = 4;" (statement_identifier "LAB_003328f4") (: ":") (expression_statement "uVar7 = 4;" (assignment_expression "uVar7 = 4" (identifier "uVar7") (= "=") (number_literal "4")) (; ";"))) (expression_statement "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);" (assignment_expression "iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc)" (identifier "iVar3") (= "=") (binary_expression "(int)param_1 + *(int *)(*param_1 + -0xc)" (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")) (+ "+") (pointer_expression "*(int *)(*param_1 + -0xc)" (* "*") (cast_expression "(int *)(*param_1 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + -0xc)" (( "(") (binary_expression "*param_1 + -0xc" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "-0xc")) () ")")))))) (; ";")) (labeled_statement "LAB_00332904:\n  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));" (statement_identifier "LAB_00332904") (: ":") (expression_statement "(*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));" (call_expression "(*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14))" (parenthesized_expression "(*(code *)PTR_clear_004c5180)" (( "(") (pointer_expression "*(code *)PTR_clear_004c5180" (* "*") (cast_expression "(code *)PTR_clear_004c5180" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_clear_004c5180"))) () ")")) (argument_list "(iVar3,uVar7 | *(uint *)(iVar3 + 0x14))" (( "(") (identifier "iVar3") (, ",") (binary_expression "uVar7 | *(uint *)(iVar3 + 0x14)" (identifier "uVar7") (| "|") (pointer_expression "*(uint *)(iVar3 + 0x14)" (* "*") (cast_expression "(uint *)(iVar3 + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0x14)" (( "(") (binary_expression "iVar3 + 0x14" (identifier "iVar3") (+ "+") (number_literal "0x14")) () ")"))))) () ")"))) (; ";"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* WARNING: Unknown calling convention -- yet parameter storage is locked */
/* std::wistream& std::getline<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t>
   >(std::wistream&, std::wstring&, wchar_t) */

var_3 *
std::getline<var_2,std::char_traits<var_2>,std::var_1<var_2>>
          (var_3 *var_4,var_5 *var_6,var_2 param_3)

{
  int *var_21;
  var_5 *var_15;
  int var_8;
  var_3 *var_9;
  type_1 var_14;
  type_2 in_register_00000018;
  int var_12;
  var_2 *var_11;
  int *piVar8;
  type_1 var_17;
  type_1 var_13;
  var_2 *var_10;
  char local_38 [8];
  int local_30;
  var_5 *var_16;
  
  var_12 = var_7(in_register_00000018,param_3);
  (*(type_3 *)PTR_sentry_004c517c)(local_38,var_4,1);
  if (local_38[0] != '\0') {
    var_8 = *(int *)var_4;
    *(type_4 *)(var_6 + 4) = 0;
    var_8 = *(int *)(var_8 + -0xc);
    **(type_4 **)var_6 = 0;
    var_9 = var_4 + var_8;
    piVar8 = *(int **)(var_9 + 0x7c);
    var_10 = (var_2 *)piVar8[2];
    var_11 = (var_2 *)piVar8[3];
    if (var_10 < var_11) {
      var_8 = *(int *)var_10;
      var_17 = 6;
      if (var_8 == -1) goto LAB_00332904;
    }
    else {
                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */
      var_8 = (**(type_3 **)(*piVar8 + 0x24))(piVar8);
      if (var_8 == -1) {
        var_17 = 6;
        var_9 = var_4 + *(int *)(*(int *)var_4 + -0xc);
        goto LAB_00332904;
      }
      var_11 = (var_2 *)piVar8[3];
      var_10 = (var_2 *)piVar8[2];
    }
    var_13 = 0;
    if (var_12 == var_8) {
      if (var_11 <= var_10) {
                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */
        (**(type_3 **)(*piVar8 + 0x28))(piVar8);
        return var_4;
      }
LAB_00332c04:
      piVar8[2] = (int)(var_10 + 2);
      return var_4;
    }
    var_16 = var_6 + 8;
    do {
      var_14 = (int)var_11 - (int)var_10 >> 2;
      var_17 = 0x1fffffff - var_13;
      if ((int)var_14 <= (int)(0x1fffffff - var_13)) {
        var_17 = var_14;
      }
      var_14 = *(type_1 *)(var_6 + 4);
      if ((int)var_17 < 2) {
        local_30 = var_14 + 1;
        var_15 = *(var_5 **)var_6;
        var_17 = 3;
        if (var_15 != var_16) {
          var_17 = *(type_1 *)(var_6 + 8);
        }
        if (var_17 < var_14 + 1) {
          wstring::var_18(var_6,var_14,0,(var_2 *)0x0,1);
          var_15 = *(var_5 **)var_6;
          var_10 = (var_2 *)piVar8[2];
          var_11 = (var_2 *)piVar8[3];
        }
        var_13 = var_13 + 1;
        *(int *)(var_15 + var_14 * 4) = var_8;
        *(int *)(var_6 + 4) = local_30;
        *(int *)(var_15 + var_14 * 4 + 4) = 0;
        if (var_10 < var_11) {
          var_8 = *(int *)var_10;
          piVar8[2] = (int)(var_10 + 2);
        }
        else {
          var_8 = (**(type_3 **)(*piVar8 + 0x28))(piVar8);
        }
        if (var_8 != -1) {
          if ((int *)piVar8[3] <= (int *)piVar8[2]) goto LAB_00332b14;
          var_8 = *(int *)piVar8[2];
          goto joined_r0x00332ad0;
        }
LAB_00332b8c:
        var_17 = 2;
        var_9 = var_4 + *(int *)(*(int *)var_4 + -0xc);
        goto LAB_00332904;
      }
      var_8 = (*(type_3 *)PTR_wmemchr_004c5d10)(var_10,var_12,var_17);
      if (var_8 != 0) {
        var_17 = var_8 - (int)var_10 >> 2;
      }
      if (0x1fffffff - var_14 < var_17) {
                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */
        var_9 = (var_3 *)
                 (*(type_3 *)PTR___throw_length_error_004c1e74)
                           (var_19 + 0x446c);
        return var_9;
      }
                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */
      wstring::var_20(var_6,var_10,var_17);
      var_13 = var_13 + var_17;
      var_21 = (int *)(piVar8[2] + var_17 * 4);
      piVar8[2] = (int)var_21;
      if (var_21 < (int *)piVar8[3]) {
        var_8 = *var_21;
      }
      else {
LAB_00332b14:
        var_8 = (**(type_3 **)(*piVar8 + 0x24))(piVar8);
      }
joined_r0x00332ad0:
      if (0x1ffffffe < var_13) {
        if (var_8 == -1) goto LAB_00332b8c;
        if (var_12 != var_8) goto LAB_003328f4;
        if ((type_1)piVar8[3] <= (type_1)piVar8[2]) goto LAB_00332b6c;
        piVar8[2] = piVar8[2] + 4;
        goto joined_r0x00332b04;
      }
      if (var_8 == -1) {
        var_17 = 2;
        if (var_13 == 0) {
          var_17 = 6;
        }
        var_9 = var_4 + *(int *)(*(int *)var_4 + -0xc);
        goto LAB_00332904;
      }
      var_10 = (var_2 *)piVar8[2];
      var_11 = (var_2 *)piVar8[3];
    } while (var_12 != var_8);
    if (var_10 < var_11) goto LAB_00332c04;
LAB_00332b6c:
    (**(type_3 **)(*piVar8 + 0x28))(piVar8);
joined_r0x00332b04:
    if (var_13 != 0xffffffff) {
      return var_4;
    }
  }
LAB_003328f4:
  var_17 = 4;
  var_9 = var_4 + *(int *)(*(int *)var_4 + -0xc);
LAB_00332904:
  (*(type_3 *)PTR_clear_004c5180)(var_9,var_17 | *(type_1 *)(var_9 + 0x14));
  return var_4;
}


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

int * MASKED(int *param_1,wstring *param_2,int param_3)

{
  int *piVar1;
  wstring *pwVar2;
  int iVar3;
  uint uVar4;
  wchar_t *pwVar5;
  int *piVar6;
  uint uVar7;
  uint uVar8;
  int iVar9;
  wchar_t *pwVar10;
  char local_38 [8];
  int local_30;
  wstring *local_2c;
  
  (*(code *)PTR_sentry_004c517c)(local_38,param_1,1);
  if (local_38[0] != '\0') {
    iVar3 = *param_1;
    *(undefined4 *)(param_2 + 4) = 0;
    iVar3 = *(int *)(iVar3 + -0xc);
    **(undefined4 **)param_2 = 0;
    iVar3 = (int)param_1 + iVar3;
    piVar6 = *(int **)(iVar3 + 0x7c);
    pwVar10 = (wchar_t *)piVar6[2];
    pwVar5 = (wchar_t *)piVar6[3];
    if (pwVar10 < pwVar5) {
      iVar9 = *(int *)pwVar10;
      uVar7 = 6;
      if (iVar9 == -1) goto LAB_00332904;
    }
    else {
                    /* try { // try from 00332bdc to 00332be3 has its CatchHandler @ 00332cac */
      iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);
      if (iVar9 == -1) {
        uVar7 = 6;
        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);
        goto LAB_00332904;
      }
      pwVar5 = (wchar_t *)piVar6[3];
      pwVar10 = (wchar_t *)piVar6[2];
    }
    uVar8 = 0;
    if (param_3 == iVar9) {
      if (pwVar5 <= pwVar10) {
                    /* try { // try from 00332c20 to 00332c27 has its CatchHandler @ 00332ca0 */
        (**(code **)(*piVar6 + 0x28))(piVar6);
        return param_1;
      }
LAB_00332c04:
      piVar6[2] = (int)(pwVar10 + 2);
      return param_1;
    }
    local_2c = param_2 + 8;
    do {
      uVar4 = (int)pwVar5 - (int)pwVar10 >> 2;
      uVar7 = 0x1fffffff - uVar8;
      if ((int)uVar4 <= (int)(0x1fffffff - uVar8)) {
        uVar7 = uVar4;
      }
      uVar4 = *(uint *)(param_2 + 4);
      if ((int)uVar7 < 2) {
        local_30 = uVar4 + 1;
        pwVar2 = *(wstring **)param_2;
        uVar7 = 3;
        if (pwVar2 != local_2c) {
          uVar7 = *(uint *)(param_2 + 8);
        }
        if (uVar7 < uVar4 + 1) {
          std::wstring::_M_mutate(param_2,uVar4,0,(wchar_t *)0x0,1);
          pwVar2 = *(wstring **)param_2;
          pwVar10 = (wchar_t *)piVar6[2];
          pwVar5 = (wchar_t *)piVar6[3];
        }
        uVar8 = uVar8 + 1;
        *(int *)(pwVar2 + uVar4 * 4) = iVar9;
        *(int *)(param_2 + 4) = local_30;
        *(int *)(pwVar2 + uVar4 * 4 + 4) = 0;
        if (pwVar10 < pwVar5) {
          iVar3 = *(int *)pwVar10;
          piVar6[2] = (int)(pwVar10 + 2);
        }
        else {
          iVar3 = (**(code **)(*piVar6 + 0x28))(piVar6);
        }
        if (iVar3 != -1) {
          if ((int *)piVar6[3] <= (int *)piVar6[2]) goto LAB_00332b14;
          iVar9 = *(int *)piVar6[2];
          goto joined_r0x00332ad0;
        }
LAB_00332b8c:
        uVar7 = 2;
        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);
        goto LAB_00332904;
      }
      iVar3 = (*(code *)PTR_wmemchr_004c5d10)(pwVar10,param_3,uVar7);
      if (iVar3 != 0) {
        uVar7 = iVar3 - (int)pwVar10 >> 2;
      }
      if (0x1fffffff - uVar4 < uVar7) {
                    /* try { // try from 00332c38 to 00332c3f has its CatchHandler @ 00332c54 */
        piVar6 = (int *)(*(code *)PTR___throw_length_error_004c1e74)
                                  (PTR_s_ral_options14Struct_no_crefE_004c127c + 0x446c);
        return piVar6;
      }
                    /* try { // try from 003329e0 to 00332baf has its CatchHandler @ 00332c54 */
      std::wstring::_M_append(param_2,pwVar10,uVar7);
      uVar8 = uVar8 + uVar7;
      piVar1 = (int *)(piVar6[2] + uVar7 * 4);
      piVar6[2] = (int)piVar1;
      if (piVar1 < (int *)piVar6[3]) {
        iVar9 = *piVar1;
      }
      else {
LAB_00332b14:
        iVar9 = (**(code **)(*piVar6 + 0x24))(piVar6);
      }
joined_r0x00332ad0:
      if (0x1ffffffe < uVar8) {
        if (iVar9 == -1) goto LAB_00332b8c;
        if (param_3 != iVar9) goto LAB_003328f4;
        if ((uint)piVar6[3] <= (uint)piVar6[2]) goto LAB_00332b6c;
        piVar6[2] = piVar6[2] + 4;
        goto joined_r0x00332b04;
      }
      if (iVar9 == -1) {
        uVar7 = 2;
        if (uVar8 == 0) {
          uVar7 = 6;
        }
        iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);
        goto LAB_00332904;
      }
      pwVar10 = (wchar_t *)piVar6[2];
      pwVar5 = (wchar_t *)piVar6[3];
    } while (param_3 != iVar9);
    if (pwVar10 < pwVar5) goto LAB_00332c04;
LAB_00332b6c:
    (**(code **)(*piVar6 + 0x28))(piVar6);
joined_r0x00332b04:
    if (uVar8 != 0xffffffff) {
      return param_1;
    }
  }
LAB_003328f4:
  uVar7 = 4;
  iVar3 = (int)param_1 + *(int *)(*param_1 + -0xc);
LAB_00332904:
  (*(code *)PTR_clear_004c5180)(iVar3,uVar7 | *(uint *)(iVar3 + 0x14));
  return param_1;
}

