
regoff_t re_search_stub(re_pattern_buffer *bufp,char *string,Idx length,Idx start,regoff_t range,
                       Idx stop,re_registers *regs,_Bool ret_len)

{
  char *pcVar1;
  int iVar2;
  int iVar3;
  byte bVar4;
  byte bVar5;
  re_dfa_t **dfa;
  regex_t *bufp_00;
  size_t __size;
  regmatch_t *pmatch;
  reg_errcode_t rVar6;
  void *pvVar7;
  void *pvVar8;
  char *length_00;
  uint uVar9;
  uint uVar10;
  char *last_start;
  int unaff_EDI;
  re_pattern_buffer *prVar11;
  undefined8 uVar12;
  char local_38;
  char local_34;
  uint local_24;
  uint local_20;
  
  uVar12 = __x86_get_pc_thunk_di();
  bufp_00 = (regex_t *)uVar12;
  pcVar1 = string + (int)&bufp->buffer;
  if (((int)bufp < 0) || ((int)length_00 < (int)bufp)) {
    return -1;
  }
  last_start = length_00;
  if ((((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp)))) ||
     ((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp))))))
  {
    bVar4 = bufp_00->field_0x1c;
    local_24 = bVar4 >> 5 & 3;
    if (((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))))
    {
      rpl_re_compile_fastmap(bufp_00);
      bVar4 = bufp_00->field_0x1c;
    }
  }
  else {
    bVar4 = bufp_00->field_0x1c;
    last_start = (char *)0x0;
    local_24 = bVar4 >> 5 & 3;
  }
  if (((bVar4 & 0x10) == 0) && (start != 0)) {
    if (((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)) {
      if ((int)local_20 < 1) goto LAB_00027970;
    }
    else {
      local_20 = bufp_00->re_nsub + 1;
    }
    __size = local_20 << 3;
  }
  else {
LAB_00027970:
    __size = 8;
    local_20 = 1;
    start = 0;
  }
  pmatch = (regmatch_t *)malloc(__size);
  if (pmatch == (regmatch_t *)0x0) {
    return -2;
  }
  rVar6 = re_search_internal(bufp_00,(char *)((ulonglong)uVar12 >> 0x20),(Idx)length_00,(Idx)bufp,
                             (Idx)last_start,length,local_20,pmatch,local_24);
  if (rVar6 == _REG_NOERROR) {
    if (start != 0) {
      bVar4 = (byte)bufp_00->field_0x1c >> 1;
      uVar9 = local_20 + 1;
      bVar5 = bVar4 & 3;
      if ((bVar4 & 3) == 0) {
        pvVar7 = malloc(uVar9 * 4);
        *(void **)(start + 4) = pvVar7;
        if (pvVar7 != (void *)0x0) {
          pvVar8 = malloc(uVar9 * 4);
          *(void **)(start + 8) = pvVar8;
          if (pvVar8 != (void *)0x0) {
            local_38 = '\x01';
            *(uint *)start = uVar9;
            goto LAB_000278a1;
          }
          free(pvVar7);
        }
LAB_00027b3a:
        local_38 = '\0';
      }
      else {
        if (bVar5 == 1) {
          local_38 = '\x01';
          if (*(uint *)start < uVar9) {
            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);
            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;
            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);
            if (pvVar8 == (void *)0x0) {
              free(pvVar7);
              local_38 = '\0';
              goto LAB_0002790b;
            }
            *(void **)(start + 4) = pvVar7;
            *(uint *)start = uVar9;
            *(void **)(start + 8) = pvVar8;
          }
        }
        else {
          if (bVar5 != 2) {
                    /* WARNING: Subroutine does not return */
            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,
                          (char *)(unaff_EDI + 0x3af9));
          }
          if (*(uint *)start < local_20) {
                    /* WARNING: Subroutine does not return */
            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,
                          (char *)(unaff_EDI + 0x3af9));
          }
          local_38 = '\x02';
        }
LAB_000278a1:
        if ((int)local_20 < 1) {
          uVar9 = 0;
        }
        else {
          iVar2 = *(int *)(start + 4);
          iVar3 = *(int *)(start + 8);
          uVar9 = 0;
          do {
            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;
            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;
            uVar9 = uVar9 + 1;
          } while (local_20 != uVar9);
        }
        if (uVar9 < *(uint *)start) {
          iVar2 = *(int *)(start + 8);
          iVar3 = *(int *)(start + 4);
          do {
            uVar10 = uVar9 + 1;
            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;
            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;
            uVar9 = uVar10;
          } while (uVar10 < *(uint *)start);
        }
      }
LAB_0002790b:
      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';
      if (local_38 == '\0') goto LAB_00027836;
    }
    local_34 = (char)range;
    prVar11 = (re_pattern_buffer *)pmatch->rm_so;
    if (local_34 != '\0') {
      if (bufp != prVar11) {
                    /* WARNING: Subroutine does not return */
        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,
                      (char *)(unaff_EDI + 0x3b09));
      }
      prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);
    }
  }
  else {
    prVar11 = (re_pattern_buffer *)0xffffffff;
    if (rVar6 == _REG_NOMATCH) goto LAB_0002783b;
LAB_00027836:
    prVar11 = (re_pattern_buffer *)0xfffffffe;
  }
LAB_0002783b:
  free(pmatch);
  return (regoff_t)prVar11;
}



int FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)

{
  uint uVar1;
  uint uVar2;
  byte bVar3;
  byte bVar4;
  size_t __size;
  int *__ptr;
  int iVar5;
  void *pvVar6;
  void *pvVar7;
  int extraout_ECX;
  uint uVar8;
  uint uVar9;
  int iVar10;
  int unaff_EDI;
  int iVar11;
  undefined8 uVar12;
  char local_38;
  uint local_20;
  
  uVar12 = FUN_000280ee();
  iVar11 = (int)uVar12;
  iVar5 = param_1 + param_2;
  if ((param_1 < 0) || (extraout_ECX < param_1)) {
    return -1;
  }
  iVar10 = extraout_ECX;
  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||
     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {
    bVar3 = *(byte *)(iVar11 + 0x1c);
    bVar4 = bVar3 >> 5 & 3;
    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {
      FUN_00027660(iVar11);
      bVar3 = *(byte *)(iVar11 + 0x1c);
    }
  }
  else {
    bVar3 = *(byte *)(iVar11 + 0x1c);
    iVar10 = 0;
    bVar4 = bVar3 >> 5 & 3;
  }
  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {
    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {
      if ((int)local_20 < 1) goto LAB_00027970;
    }
    else {
      local_20 = *(uint *)(iVar11 + 0x18) + 1;
    }
    __size = local_20 << 3;
  }
  else {
LAB_00027970:
    __size = 8;
    local_20 = 1;
    param_4 = (uint *)0x0;
  }
  __ptr = (int *)malloc(__size);
  if (__ptr == (int *)0x0) {
    return -2;
  }
  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);
  if (iVar5 == 0) {
    if (param_4 != (uint *)0x0) {
      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;
      uVar8 = local_20 + 1;
      bVar4 = bVar3 & 3;
      if ((bVar3 & 3) == 0) {
        pvVar6 = malloc(uVar8 * 4);
        param_4[1] = (uint)pvVar6;
        if (pvVar6 != (void *)0x0) {
          pvVar7 = malloc(uVar8 * 4);
          param_4[2] = (uint)pvVar7;
          if (pvVar7 != (void *)0x0) {
            local_38 = '\x01';
            *param_4 = uVar8;
            goto LAB_000278a1;
          }
          free(pvVar6);
        }
LAB_00027b3a:
        local_38 = '\0';
      }
      else {
        if (bVar4 == 1) {
          local_38 = '\x01';
          if (*param_4 < uVar8) {
            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);
            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;
            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);
            if (pvVar7 == (void *)0x0) {
              free(pvVar6);
              local_38 = '\0';
              goto LAB_0002790b;
            }
            param_4[1] = (uint)pvVar6;
            *param_4 = uVar8;
            param_4[2] = (uint)pvVar7;
          }
        }
        else {
          if (bVar4 != 2) {
                    /* WARNING: Subroutine does not return */
            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,
                          (char *)(unaff_EDI + 0x3af9));
          }
          if (*param_4 < local_20) {
                    /* WARNING: Subroutine does not return */
            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,
                          (char *)(unaff_EDI + 0x3af9));
          }
          local_38 = '\x02';
        }
LAB_000278a1:
        if ((int)local_20 < 1) {
          uVar8 = 0;
        }
        else {
          uVar1 = param_4[1];
          uVar2 = param_4[2];
          uVar8 = 0;
          do {
            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];
            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];
            uVar8 = uVar8 + 1;
          } while (local_20 != uVar8);
        }
        if (uVar8 < *param_4) {
          uVar1 = param_4[2];
          uVar2 = param_4[1];
          do {
            uVar9 = uVar8 + 1;
            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;
            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;
            uVar8 = uVar9;
          } while (uVar9 < *param_4);
        }
      }
LAB_0002790b:
      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';
      if (local_38 == '\0') goto LAB_00027836;
    }
    iVar11 = *__ptr;
    if (param_5 != '\0') {
      if (param_1 != iVar11) {
                    /* WARNING: Subroutine does not return */
        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,
                      (char *)(unaff_EDI + 0x3b09));
      }
      iVar11 = __ptr[1] - iVar11;
    }
  }
  else {
    iVar11 = -1;
    if (iVar5 == 1) goto LAB_0002783b;
LAB_00027836:
    iVar11 = -2;
  }
LAB_0002783b:
  free(__ptr);
  return iVar11;
}


PUSH EBP
PUSH EDI
CALL 0x000280ee
ADD EDI,0xb8d9
PUSH ESI
PUSH EBX
SUB ESP,0x2c
MOV EBP,dword ptr [ESP + 0x40]
MOV ESI,dword ptr [ESP + 0x44]
MOV EBX,dword ptr [ESP + 0x50]
MOV dword ptr [ESP],EDI
MOV EDI,EDX
LEA EDX,[EBP + ESI*0x1]
MOV dword ptr [ESP + 0x8],EBX
TEST EBP,EBP
JS 0x00027a70
CMP EBP,ECX
JG 0x00027a70
MOV dword ptr [ESP + 0xc],EDI
MOV EDI,EAX
CMP EDX,ECX
JG 0x000279c8
TEST ESI,ESI
JS 0x00027775
CMP EBP,EDX
JG 0x000279c8
TEST EDX,EDX
JS 0x00027a50
TEST ESI,ESI
JNS 0x00027789
CMP EBP,EDX
JLE 0x00027a50
MOVZX EAX,byte ptr [EDI + 0x1c]
MOV EBX,EAX
SHR BL,0x5
AND EBX,0x3
MOV dword ptr [ESP + 0x18],EBX
CMP EDX,EBP
JLE 0x000277ac
MOV ESI,dword ptr [EDI + 0x10]
TEST ESI,ESI
JZ 0x000277ac
TEST AL,0x8
JZ 0x00027998
TEST AL,0x10
JNZ 0x00027970
MOV EBX,dword ptr [ESP + 0x4c]
TEST EBX,EBX
JZ 0x00027970
AND EAX,0x6
MOV EBX,dword ptr [EDI + 0x18]
CMP AL,0x4
JZ 0x00027950
LEA EAX,[EBX + 0x1]
MOV dword ptr [ESP + 0x4],EAX
MOV dword ptr [ESP + 0x1c],EAX
SHL EAX,0x3
MOV dword ptr [ESP + 0x14],ECX
SUB ESP,0xc
MOV dword ptr [ESP + 0x1c],EDX
PUSH EAX
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x000122b0
ADD ESP,0x10
MOV ESI,EAX
TEST EAX,EAX
JZ 0x00027a80
SUB ESP,0xc
PUSH dword ptr [ESP + 0x24]
PUSH EAX
PUSH dword ptr [ESP + 0x18]
PUSH dword ptr [ESP + 0x60]
MOV EDX,dword ptr [ESP + 0x2c]
PUSH EDX
PUSH EBP
MOV ECX,dword ptr [ESP + 0x38]
PUSH ECX
PUSH dword ptr [ESP + 0x34]
PUSH EDI
CALL 0x00022830
ADD ESP,0x30
MOV EDX,EAX
TEST EAX,EAX
JZ 0x00027858
MOV EDI,0xffffffff
CMP EAX,0x1
JZ 0x0002783b
MOV EDI,0xfffffffe
SUB ESP,0xc
PUSH ESI
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x00012100
ADD ESP,0x10
ADD ESP,0x2c
MOV EAX,EDI
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ESP + 0x4c]
TEST EAX,EAX
JZ 0x00027926
MOVZX EAX,byte ptr [EDI + 0x1c]
MOV ECX,dword ptr [ESP + 0x1c]
SHR AL,0x1
ADD ECX,0x1
AND EAX,0x3
JZ 0x000279d0
CMP EAX,0x1
JZ 0x00027a90
CMP EAX,0x2
JNZ 0x00027ba5
MOV EAX,dword ptr [ESP + 0x4c]
MOV ECX,dword ptr [ESP + 0x4]
CMP ECX,dword ptr [EAX]
JA 0x00027b83
MOV byte ptr [ESP + 0x4],0x2
MOV EBX,dword ptr [ESP + 0x1c]
TEST EBX,EBX
JLE 0x00027b20
MOV EAX,dword ptr [ESP + 0x4c]
MOV dword ptr [ESP + 0xc],EDI
MOV ECX,dword ptr [EAX + 0x4]
MOV EAX,dword ptr [EAX + 0x8]
LEA ESI,[ESI]
NOP
MOV EDI,dword ptr [ESI + EDX*0x8]
MOV dword ptr [ECX + EDX*0x4],EDI
MOV EDI,dword ptr [ESI + EDX*0x8 + 0x4]
MOV dword ptr [EAX + EDX*0x4],EDI
ADD EDX,0x1
CMP EBX,EDX
JNZ 0x000278c0
MOV EDI,dword ptr [ESP + 0xc]
MOV EAX,EDX
MOV ECX,dword ptr [ESP + 0x4c]
CMP dword ptr [ECX],EAX
JBE 0x0002790b
MOV EBX,dword ptr [ECX + 0x8]
MOV ECX,dword ptr [ECX + 0x4]
MOV dword ptr [ESP + 0xc],ESI
MOV ESI,dword ptr [ESP + 0x4c]
ADD EDX,0x1
MOV dword ptr [EBX + EAX*0x4],0xffffffff
MOV dword ptr [ECX + EAX*0x4],0xffffffff
MOV EAX,EDX
CMP dword ptr [ESI],EDX
JA 0x000278f0
MOV ESI,dword ptr [ESP + 0xc]
MOVZX EAX,byte ptr [EDI + 0x1c]
MOVZX EDX,byte ptr [ESP + 0x4]
AND EAX,0xfffffff9
ADD EDX,EDX
OR EAX,EDX
MOV byte ptr [EDI + 0x1c],AL
TEST AL,0x6
JZ 0x00027836
CMP byte ptr [ESP + 0x8],0x0
MOV EDI,dword ptr [ESI]
JZ 0x0002783b
CMP EBP,EDI
JNZ 0x00027b61
MOV EAX,dword ptr [ESI + 0x4]
SUB EAX,EDI
MOV EDI,EAX
JMP 0x0002783b
MOV EAX,dword ptr [ESP + 0x4c]
MOV EAX,dword ptr [EAX]
MOV dword ptr [ESP + 0x4],EAX
CMP EAX,EBX
JA 0x000277ce
MOV dword ptr [ESP + 0x1c],EAX
TEST EAX,EAX
JG 0x000277d9
NOP
MOV EAX,0x8
MOV dword ptr [ESP + 0x4],0x1
MOV dword ptr [ESP + 0x1c],0x1
MOV dword ptr [ESP + 0x4c],0x0
JMP 0x000277dc
MOV dword ptr [ESP + 0x10],ECX
SUB ESP,0xc
MOV dword ptr [ESP + 0x10],EDX
PUSH EDI
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x00027660
ADD ESP,0x10
MOVZX EAX,byte ptr [EDI + 0x1c]
MOV ECX,dword ptr [ESP + 0x10]
MOV EDX,dword ptr [ESP + 0x4]
JMP 0x000277ac
MOV EDX,ECX
JMP 0x00027789
LEA EAX,[ECX*0x4 + 0x0]
MOV dword ptr [ESP + 0xc],EDX
SUB ESP,0xc
MOV dword ptr [ESP + 0x10],ECX
MOV dword ptr [ESP + 0x1c],EAX
PUSH EAX
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x000122b0
MOV ECX,dword ptr [ESP + 0x5c]
MOV dword ptr [ESP + 0x24],EAX
ADD ESP,0x10
TEST EAX,EAX
MOV EDX,dword ptr [ESP + 0xc]
MOV dword ptr [ECX + 0x4],EAX
MOV ECX,dword ptr [ESP + 0x4]
JZ 0x00027b3a
MOV dword ptr [ESP + 0xc],ECX
SUB ESP,0xc
MOV dword ptr [ESP + 0x10],EDX
PUSH dword ptr [ESP + 0x1c]
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x000122b0
MOV ECX,dword ptr [ESP + 0x5c]
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x4]
TEST EAX,EAX
MOV dword ptr [ECX + 0x8],EAX
MOV ECX,dword ptr [ESP + 0xc]
JZ 0x00027b27
MOV EAX,dword ptr [ESP + 0x4c]
MOV byte ptr [ESP + 0x4],0x1
MOV dword ptr [EAX],ECX
JMP 0x000278a1
MOVZX EAX,byte ptr [EDI + 0x1c]
MOV EDX,EAX
SHR DL,0x5
MOV ESI,EDX
XOR EDX,EDX
AND ESI,0x3
MOV dword ptr [ESP + 0x18],ESI
JMP 0x000277ac
ADD ESP,0x2c
MOV EDI,0xffffffff
POP EBX
MOV EAX,EDI
POP ESI
POP EDI
POP EBP
RET
MOV EDI,0xfffffffe
JMP 0x0002784b
MOV EAX,dword ptr [ESP + 0x4c]
MOV byte ptr [ESP + 0x4],0x1
CMP dword ptr [EAX],ECX
JNC 0x000278a1
MOV dword ptr [ESP + 0x18],EDX
LEA EAX,[ECX*0x4 + 0x0]
SUB ESP,0x8
MOV dword ptr [ESP + 0x1c],ECX
MOV dword ptr [ESP + 0x14],EAX
PUSH EAX
MOV ECX,dword ptr [ESP + 0x58]
PUSH dword ptr [ECX + 0x4]
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x000122a0
MOV dword ptr [ESP + 0x20],EAX
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00027b3a
SUB ESP,0x8
PUSH dword ptr [ESP + 0x14]
MOV EAX,dword ptr [ESP + 0x58]
PUSH dword ptr [EAX + 0x8]
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x000122a0
MOV dword ptr [ESP + 0x1c],EAX
ADD ESP,0x10
TEST EAX,EAX
MOV ECX,dword ptr [ESP + 0x14]
MOV EDX,dword ptr [ESP + 0x18]
JZ 0x00027b44
MOV EBX,dword ptr [ESP + 0x4c]
MOV EAX,dword ptr [ESP + 0x10]
MOV dword ptr [EBX + 0x4],EAX
MOV EAX,EBX
MOV EBX,dword ptr [ESP + 0xc]
MOV dword ptr [EAX],ECX
MOV dword ptr [EAX + 0x8],EBX
JMP 0x000278a1
XOR EAX,EAX
JMP 0x000278da
SUB ESP,0xc
PUSH dword ptr [ESP + 0x20]
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x00012100
ADD ESP,0x10
MOV byte ptr [ESP + 0x4],0x0
JMP 0x0002790b
SUB ESP,0xc
PUSH dword ptr [ESP + 0x1c]
MOV EBX,dword ptr [ESP + 0x10]
CALL 0x00012100
ADD ESP,0x10
MOV byte ptr [ESP + 0x4],0x0
JMP 0x0002790b
MOV EBX,dword ptr [ESP]
LEA EAX,[EBX + 0xffff8230]
PUSH EAX
LEA EAX,[EBX + 0xffff7cd2]
PUSH 0x1bd
PUSH EAX
LEA EAX,[EBX + 0xffff7d75]
PUSH EAX
CALL 0x000124d0
MOV EBX,dword ptr [ESP]
LEA EAX,[EBX + 0xffff8220]
PUSH EAX
LEA EAX,[EBX + 0xffff7cd2]
PUSH 0x1fa
PUSH EAX
LEA EAX,[EBX + 0xffff7d5d]
PUSH EAX
CALL 0x000124d0
MOV EBX,dword ptr [ESP]
LEA EAX,[EBX + 0xffff8220]
PUSH EAX
LEA EAX,[EBX + 0xffff7cd2]
PUSH 0x1f8
PUSH EAX
LEA EAX,[EBX + 0xffff7d40]
PUSH EAX
CALL 0x000124d0
(translation_unit "int FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  byte bVar4;\n  size_t __size;\n  int *__ptr;\n  int iVar5;\n  void *pvVar6;\n  void *pvVar7;\n  int extraout_ECX;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int unaff_EDI;\n  int iVar11;\n  undefined8 uVar12;\n  char local_38;\n  uint local_20;\n  \n  uVar12 = FUN_000280ee();\n  iVar11 = (int)uVar12;\n  iVar5 = param_1 + param_2;\n  if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }\n  iVar10 = extraout_ECX;\n  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }\n  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }\n  __ptr = (int *)malloc(__size);\n  if (__ptr == (int *)0x0) {\n    return -2;\n  }\n  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);\n  if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }\nLAB_0002783b:\n  free(__ptr);\n  return iVar11;\n}\n\n" (function_definition "int FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  byte bVar4;\n  size_t __size;\n  int *__ptr;\n  int iVar5;\n  void *pvVar6;\n  void *pvVar7;\n  int extraout_ECX;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int unaff_EDI;\n  int iVar11;\n  undefined8 uVar12;\n  char local_38;\n  uint local_20;\n  \n  uVar12 = FUN_000280ee();\n  iVar11 = (int)uVar12;\n  iVar5 = param_1 + param_2;\n  if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }\n  iVar10 = extraout_ECX;\n  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }\n  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }\n  __ptr = (int *)malloc(__size);\n  if (__ptr == (int *)0x0) {\n    return -2;\n  }\n  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);\n  if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }\nLAB_0002783b:\n  free(__ptr);\n  return iVar11;\n}" primitive_type (function_declarator "FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)" identifier (parameter_list "(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "char param_5" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  byte bVar4;\n  size_t __size;\n  int *__ptr;\n  int iVar5;\n  void *pvVar6;\n  void *pvVar7;\n  int extraout_ECX;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int unaff_EDI;\n  int iVar11;\n  undefined8 uVar12;\n  char local_38;\n  uint local_20;\n  \n  uVar12 = FUN_000280ee();\n  iVar11 = (int)uVar12;\n  iVar5 = param_1 + param_2;\n  if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }\n  iVar10 = extraout_ECX;\n  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }\n  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }\n  __ptr = (int *)malloc(__size);\n  if (__ptr == (int *)0x0) {\n    return -2;\n  }\n  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);\n  if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }\nLAB_0002783b:\n  free(__ptr);\n  return iVar11;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "size_t __size;" primitive_type identifier ;) (declaration "int *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "void *pvVar6;" primitive_type (pointer_declarator "*pvVar6" * identifier) ;) (declaration "void *pvVar7;" primitive_type (pointer_declarator "*pvVar7" * identifier) ;) (declaration "int extraout_ECX;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "undefined8 uVar12;" type_identifier identifier ;) (declaration "char local_38;" primitive_type identifier ;) (declaration "uint local_20;" type_identifier identifier ;) (expression_statement "uVar12 = FUN_000280ee();" (assignment_expression "uVar12 = FUN_000280ee()" identifier = (call_expression "FUN_000280ee()" identifier (argument_list "()" ( )))) ;) (expression_statement "iVar11 = (int)uVar12;" (assignment_expression "iVar11 = (int)uVar12" identifier = (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar5 = param_1 + param_2;" (assignment_expression "iVar5 = param_1 + param_2" identifier = (binary_expression "param_1 + param_2" identifier + identifier)) ;) (if_statement "if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }" if (parenthesized_expression "((param_1 < 0) || (extraout_ECX < param_1))" ( (binary_expression "(param_1 < 0) || (extraout_ECX < param_1)" (parenthesized_expression "(param_1 < 0)" ( (binary_expression "param_1 < 0" identifier < number_literal) )) || (parenthesized_expression "(extraout_ECX < param_1)" ( (binary_expression "extraout_ECX < param_1" identifier < identifier) ))) )) (compound_statement "{\n    return -1;\n  }" { (return_statement "return -1;" return number_literal ;) })) (expression_statement "iVar10 = extraout_ECX;" (assignment_expression "iVar10 = extraout_ECX" identifier = identifier) ;) (if_statement "if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" if (parenthesized_expression "(((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))))))" ( (binary_expression "((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))" (parenthesized_expression "((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1))))" ( (binary_expression "(extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))" (parenthesized_expression "(extraout_ECX < iVar5)" ( (binary_expression "extraout_ECX < iVar5" identifier < identifier) )) || (parenthesized_expression "((-1 < param_2 && (iVar5 < param_1)))" ( (parenthesized_expression "(-1 < param_2 && (iVar5 < param_1))" ( (binary_expression "-1 < param_2 && (iVar5 < param_1)" (binary_expression "-1 < param_2" number_literal < identifier) && (parenthesized_expression "(iVar5 < param_1)" ( (binary_expression "iVar5 < param_1" identifier < identifier) ))) )) ))) )) || (parenthesized_expression "((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))" ( (parenthesized_expression "(-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))))" ( (binary_expression "-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))" (binary_expression "-1 < iVar5" number_literal < identifier) && (parenthesized_expression "((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))" ( (parenthesized_expression "(iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))" ( (comma_expression "iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)" (assignment_expression "iVar10 = iVar5" identifier = identifier) , (binary_expression "-1 < param_2 || (iVar5 < param_1)" (binary_expression "-1 < param_2" number_literal < identifier) || (parenthesized_expression "(iVar5 < param_1)" ( (binary_expression "iVar5 < param_1" identifier < identifier) )))) )) ))) )) ))) )) (compound_statement "{\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }" { (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" identifier = (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "bVar4 = bVar3 >> 5 & 3;" (assignment_expression "bVar4 = bVar3 >> 5 & 3" identifier = (binary_expression "bVar3 >> 5 & 3" (binary_expression "bVar3 >> 5" identifier >> number_literal) & number_literal)) ;) (if_statement "if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }" if (parenthesized_expression "((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0))))" ( (binary_expression "(param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))" (parenthesized_expression "(param_1 < iVar10)" ( (binary_expression "param_1 < iVar10" identifier < identifier) )) && (parenthesized_expression "((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))" ( (parenthesized_expression "(*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0))" ( (binary_expression "*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)" (binary_expression "*(int *)(iVar11 + 0x10) != 0" (pointer_expression "*(int *)(iVar11 + 0x10)" * (cast_expression "(int *)(iVar11 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x10)" ( (binary_expression "iVar11 + 0x10" identifier + number_literal) )))) != number_literal) && (parenthesized_expression "((bVar3 & 8) == 0)" ( (binary_expression "(bVar3 & 8) == 0" (parenthesized_expression "(bVar3 & 8)" ( (binary_expression "bVar3 & 8" identifier & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }" { (expression_statement "FUN_00027660(iVar11);" (call_expression "FUN_00027660(iVar11)" identifier (argument_list "(iVar11)" ( identifier ))) ;) (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" identifier = (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) ))))) ;) })) }) (else_clause "else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" else (compound_statement "{\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" { (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" identifier = (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "iVar10 = 0;" (assignment_expression "iVar10 = 0" identifier = number_literal) ;) (expression_statement "bVar4 = bVar3 >> 5 & 3;" (assignment_expression "bVar4 = bVar3 >> 5 & 3" identifier = (binary_expression "bVar3 >> 5 & 3" (binary_expression "bVar3 >> 5" identifier >> number_literal) & number_literal)) ;) }))) (if_statement "if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" if (parenthesized_expression "(((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0))" ( (binary_expression "((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)" (parenthesized_expression "((bVar3 & 0x10) == 0)" ( (binary_expression "(bVar3 & 0x10) == 0" (parenthesized_expression "(bVar3 & 0x10)" ( (binary_expression "bVar3 & 0x10" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(param_4 != (uint *)0x0)" ( (binary_expression "param_4 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }" { (if_statement "if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" if (parenthesized_expression "(((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18)))" ( (binary_expression "((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))" (parenthesized_expression "((bVar3 & 6) == 4)" ( (binary_expression "(bVar3 & 6) == 4" (parenthesized_expression "(bVar3 & 6)" ( (binary_expression "bVar3 & 6" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))" ( (comma_expression "local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18)" (assignment_expression "local_20 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) , (binary_expression "local_20 <= *(uint *)(iVar11 + 0x18)" identifier <= (pointer_expression "*(uint *)(iVar11 + 0x18)" * (cast_expression "(uint *)(iVar11 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x18)" ( (binary_expression "iVar11 + 0x18" identifier + number_literal) )))))) ))) )) (compound_statement "{\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }" { (if_statement "if ((int)local_20 < 1) goto LAB_00027970;" if (parenthesized_expression "((int)local_20 < 1)" ( (binary_expression "(int)local_20 < 1" (cast_expression "(int)local_20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_00027970;" goto statement_identifier ;)) }) (else_clause "else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" else (compound_statement "{\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" { (expression_statement "local_20 = *(uint *)(iVar11 + 0x18) + 1;" (assignment_expression "local_20 = *(uint *)(iVar11 + 0x18) + 1" identifier = (binary_expression "*(uint *)(iVar11 + 0x18) + 1" (pointer_expression "*(uint *)(iVar11 + 0x18)" * (cast_expression "(uint *)(iVar11 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x18)" ( (binary_expression "iVar11 + 0x18" identifier + number_literal) )))) + number_literal)) ;) }))) (expression_statement "__size = local_20 << 3;" (assignment_expression "__size = local_20 << 3" identifier = (binary_expression "local_20 << 3" identifier << number_literal)) ;) }) (else_clause "else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" else (compound_statement "{\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" { (labeled_statement "LAB_00027970:\n    __size = 8;" statement_identifier : (expression_statement "__size = 8;" (assignment_expression "__size = 8" identifier = number_literal) ;)) (expression_statement "local_20 = 1;" (assignment_expression "local_20 = 1" identifier = number_literal) ;) (expression_statement "param_4 = (uint *)0x0;" (assignment_expression "param_4 = (uint *)0x0" identifier = (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) (expression_statement "__ptr = (int *)malloc(__size);" (assignment_expression "__ptr = (int *)malloc(__size)" identifier = (cast_expression "(int *)malloc(__size)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier ))))) ;) (if_statement "if (__ptr == (int *)0x0) {\n    return -2;\n  }" if (parenthesized_expression "(__ptr == (int *)0x0)" ( (binary_expression "__ptr == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return -2;\n  }" { (return_statement "return -2;" return number_literal ;) })) (expression_statement "iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);" (assignment_expression "iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" identifier = (call_expression "FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" identifier (argument_list "(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }" { (if_statement "if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }" if (parenthesized_expression "(param_4 != (uint *)0x0)" ( (binary_expression "param_4 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }" { (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c) >> 1" identifier = (binary_expression "*(byte *)(iVar11 + 0x1c) >> 1" (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) )))) >> number_literal)) ;) (expression_statement "uVar8 = local_20 + 1;" (assignment_expression "uVar8 = local_20 + 1" identifier = (binary_expression "local_20 + 1" identifier + number_literal)) ;) (expression_statement "bVar4 = bVar3 & 3;" (assignment_expression "bVar4 = bVar3 & 3" identifier = (binary_expression "bVar3 & 3" identifier & number_literal)) ;) (if_statement "if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" if (parenthesized_expression "((bVar3 & 3) == 0)" ( (binary_expression "(bVar3 & 3) == 0" (parenthesized_expression "(bVar3 & 3)" ( (binary_expression "bVar3 & 3" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }" { (expression_statement "pvVar6 = malloc(uVar8 * 4);" (assignment_expression "pvVar6 = malloc(uVar8 * 4)" identifier = (call_expression "malloc(uVar8 * 4)" identifier (argument_list "(uVar8 * 4)" ( (binary_expression "uVar8 * 4" identifier * number_literal) )))) ;) (expression_statement "param_4[1] = (uint)pvVar6;" (assignment_expression "param_4[1] = (uint)pvVar6" (subscript_expression "param_4[1]" identifier [ number_literal ]) = (cast_expression "(uint)pvVar6" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }" if (parenthesized_expression "(pvVar6 != (void *)0x0)" ( (binary_expression "pvVar6 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }" { (expression_statement "pvVar7 = malloc(uVar8 * 4);" (assignment_expression "pvVar7 = malloc(uVar8 * 4)" identifier = (call_expression "malloc(uVar8 * 4)" identifier (argument_list "(uVar8 * 4)" ( (binary_expression "uVar8 * 4" identifier * number_literal) )))) ;) (expression_statement "param_4[2] = (uint)pvVar7;" (assignment_expression "param_4[2] = (uint)pvVar7" (subscript_expression "param_4[2]" identifier [ number_literal ]) = (cast_expression "(uint)pvVar7" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }" if (parenthesized_expression "(pvVar7 != (void *)0x0)" ( (binary_expression "pvVar7 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }" { (expression_statement "local_38 = '\x01';" (assignment_expression "local_38 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "*param_4 = uVar8;" (assignment_expression "*param_4 = uVar8" (pointer_expression "*param_4" * identifier) = identifier) ;) (goto_statement "goto LAB_000278a1;" goto statement_identifier ;) })) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) })) (labeled_statement "LAB_00027b3a:\n        local_38 = '\0';" statement_identifier : (expression_statement "local_38 = '\0';" (assignment_expression "local_38 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;)) }) (else_clause "else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" else (compound_statement "{\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" { (if_statement "if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" if (parenthesized_expression "(bVar4 == 1)" ( (binary_expression "bVar4 == 1" identifier == number_literal) )) (compound_statement "{\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }" { (expression_statement "local_38 = '\x01';" (assignment_expression "local_38 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (if_statement "if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }" if (parenthesized_expression "(*param_4 < uVar8)" ( (binary_expression "*param_4 < uVar8" (pointer_expression "*param_4" * identifier) < identifier) )) (compound_statement "{\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }" { (expression_statement "pvVar6 = realloc((void *)param_4[1],uVar8 * 4);" (assignment_expression "pvVar6 = realloc((void *)param_4[1],uVar8 * 4)" identifier = (call_expression "realloc((void *)param_4[1],uVar8 * 4)" identifier (argument_list "((void *)param_4[1],uVar8 * 4)" ( (cast_expression "(void *)param_4[1]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[1]" identifier [ number_literal ])) , (binary_expression "uVar8 * 4" identifier * number_literal) )))) ;) (if_statement "if (pvVar6 == (void *)0x0) goto LAB_00027b3a;" if (parenthesized_expression "(pvVar6 == (void *)0x0)" ( (binary_expression "pvVar6 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00027b3a;" goto statement_identifier ;)) (expression_statement "pvVar7 = realloc((void *)param_4[2],uVar8 * 4);" (assignment_expression "pvVar7 = realloc((void *)param_4[2],uVar8 * 4)" identifier = (call_expression "realloc((void *)param_4[2],uVar8 * 4)" identifier (argument_list "((void *)param_4[2],uVar8 * 4)" ( (cast_expression "(void *)param_4[2]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[2]" identifier [ number_literal ])) , (binary_expression "uVar8 * 4" identifier * number_literal) )))) ;) (if_statement "if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }" if (parenthesized_expression "(pvVar7 == (void *)0x0)" ( (binary_expression "pvVar7 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }" { (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) (expression_statement "local_38 = '\0';" (assignment_expression "local_38 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (goto_statement "goto LAB_0002790b;" goto statement_identifier ;) })) (expression_statement "param_4[1] = (uint)pvVar6;" (assignment_expression "param_4[1] = (uint)pvVar6" (subscript_expression "param_4[1]" identifier [ number_literal ]) = (cast_expression "(uint)pvVar6" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*param_4 = uVar8;" (assignment_expression "*param_4 = uVar8" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "param_4[2] = (uint)pvVar7;" (assignment_expression "param_4[2] = (uint)pvVar7" (subscript_expression "param_4[2]" identifier [ number_literal ]) = (cast_expression "(uint)pvVar7" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) })) }) (else_clause "else {\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" else (compound_statement "{\n          if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" { (if_statement "if (bVar4 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" if (parenthesized_expression "(bVar4 != 2)" ( (binary_expression "bVar4 != 2" identifier != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" { comment (expression_statement "__assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9))" identifier (argument_list "((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9))" ( (cast_expression "(char *)(unaff_EDI + 0x3619)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3619)" ( (binary_expression "unaff_EDI + 0x3619" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3af9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3af9)" ( (binary_expression "unaff_EDI + 0x3af9" identifier + number_literal) ))) ))) ;) })) (if_statement "if (*param_4 < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" if (parenthesized_expression "(*param_4 < local_20)" ( (binary_expression "*param_4 < local_20" (pointer_expression "*param_4" * identifier) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" { comment (expression_statement "__assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9))" identifier (argument_list "((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9))" ( (cast_expression "(char *)(unaff_EDI + 0x3636)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3636)" ( (binary_expression "unaff_EDI + 0x3636" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3af9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3af9)" ( (binary_expression "unaff_EDI + 0x3af9" identifier + number_literal) ))) ))) ;) })) (expression_statement "local_38 = '\x02';" (assignment_expression "local_38 = '\x02'" identifier = (char_literal "'\x02'" ' escape_sequence ')) ;) }))) (labeled_statement "LAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" statement_identifier : (if_statement "if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" if (parenthesized_expression "((int)local_20 < 1)" ( (binary_expression "(int)local_20 < 1" (cast_expression "(int)local_20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          uVar8 = 0;\n        }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) }) (else_clause "else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" else (compound_statement "{\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" { (expression_statement "uVar1 = param_4[1];" (assignment_expression "uVar1 = param_4[1]" identifier = (subscript_expression "param_4[1]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_4[2];" (assignment_expression "uVar2 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);" do (compound_statement "{\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          }" { (expression_statement "*(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];" (assignment_expression "*(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2]" (pointer_expression "*(int *)(uVar1 + uVar8 * 4)" * (cast_expression "(int *)(uVar1 + uVar8 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + uVar8 * 4)" ( (binary_expression "uVar1 + uVar8 * 4" identifier + (binary_expression "uVar8 * 4" identifier * number_literal)) )))) = (subscript_expression "__ptr[uVar8 * 2]" identifier [ (binary_expression "uVar8 * 2" identifier * number_literal) ])) ;) (expression_statement "*(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];" (assignment_expression "*(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1]" (pointer_expression "*(int *)(uVar2 + uVar8 * 4)" * (cast_expression "(int *)(uVar2 + uVar8 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 + uVar8 * 4)" ( (binary_expression "uVar2 + uVar8 * 4" identifier + (binary_expression "uVar8 * 4" identifier * number_literal)) )))) = (subscript_expression "__ptr[uVar8 * 2 + 1]" identifier [ (binary_expression "uVar8 * 2 + 1" (binary_expression "uVar8 * 2" identifier * number_literal) + number_literal) ])) ;) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_20 != uVar8)" ( (binary_expression "local_20 != uVar8" identifier != identifier) )) ;) })))) (if_statement "if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }" if (parenthesized_expression "(uVar8 < *param_4)" ( (binary_expression "uVar8 < *param_4" identifier < (pointer_expression "*param_4" * identifier)) )) (compound_statement "{\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }" { (expression_statement "uVar1 = param_4[2];" (assignment_expression "uVar1 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_4[1];" (assignment_expression "uVar2 = param_4[1]" identifier = (subscript_expression "param_4[1]" identifier [ number_literal ])) ;) (do_statement "do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);" do (compound_statement "{\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          }" { (expression_statement "uVar9 = uVar8 + 1;" (assignment_expression "uVar9 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;" (assignment_expression "*(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff" (pointer_expression "*(undefined4 *)(uVar1 + uVar8 * 4)" * (cast_expression "(undefined4 *)(uVar1 + uVar8 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + uVar8 * 4)" ( (binary_expression "uVar1 + uVar8 * 4" identifier + (binary_expression "uVar8 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;" (assignment_expression "*(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff" (pointer_expression "*(undefined4 *)(uVar2 + uVar8 * 4)" * (cast_expression "(undefined4 *)(uVar2 + uVar8 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 + uVar8 * 4)" ( (binary_expression "uVar2 + uVar8 * 4" identifier + (binary_expression "uVar8 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) }) while (parenthesized_expression "(uVar9 < *param_4)" ( (binary_expression "uVar9 < *param_4" identifier < (pointer_expression "*param_4" * identifier)) )) ;) })) }))) (labeled_statement "LAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';" statement_identifier : (expression_statement "*(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';" (assignment_expression "*(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02'" (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) )))) = (binary_expression "*(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02'" (binary_expression "*(byte *)(iVar11 + 0x1c) & 0xf9" (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) )))) & number_literal) | (binary_expression "local_38 * '\x02'" identifier * (char_literal "'\x02'" ' escape_sequence ')))) ;)) (if_statement "if (local_38 == '\0') goto LAB_00027836;" if (parenthesized_expression "(local_38 == '\0')" ( (binary_expression "local_38 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00027836;" goto statement_identifier ;)) })) (expression_statement "iVar11 = *__ptr;" (assignment_expression "iVar11 = *__ptr" identifier = (pointer_expression "*__ptr" * identifier)) ;) (if_statement "if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }" if (parenthesized_expression "(param_5 != '\0')" ( (binary_expression "param_5 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      if (param_1 != iVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }" { (if_statement "if (param_1 != iVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }" if (parenthesized_expression "(param_1 != iVar11)" ( (binary_expression "param_1 != iVar11" identifier != identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }" { comment (expression_statement "__assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09))" identifier (argument_list "((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09))" ( (cast_expression "(char *)(unaff_EDI + 0x364e)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x364e)" ( (binary_expression "unaff_EDI + 0x364e" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3b09)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3b09)" ( (binary_expression "unaff_EDI + 0x3b09" identifier + number_literal) ))) ))) ;) })) (expression_statement "iVar11 = __ptr[1] - iVar11;" (assignment_expression "iVar11 = __ptr[1] - iVar11" identifier = (binary_expression "__ptr[1] - iVar11" (subscript_expression "__ptr[1]" identifier [ number_literal ]) - identifier)) ;) })) }) (else_clause "else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" else (compound_statement "{\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" { (expression_statement "iVar11 = -1;" (assignment_expression "iVar11 = -1" identifier = number_literal) ;) (if_statement "if (iVar5 == 1) goto LAB_0002783b;" if (parenthesized_expression "(iVar5 == 1)" ( (binary_expression "iVar5 == 1" identifier == number_literal) )) (goto_statement "goto LAB_0002783b;" goto statement_identifier ;)) (labeled_statement "LAB_00027836:\n    iVar11 = -2;" statement_identifier : (expression_statement "iVar11 = -2;" (assignment_expression "iVar11 = -2" identifier = number_literal) ;)) }))) (labeled_statement "LAB_0002783b:\n  free(__ptr);" statement_identifier : (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;)) (return_statement "return iVar11;" return identifier ;) })))
(translation_unit "regoff_t re_search_stub(re_pattern_buffer *bufp,char *string,Idx length,Idx start,regoff_t range,\n                       Idx stop,re_registers *regs,_Bool ret_len)\n\n{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  re_dfa_t **dfa;\n  regex_t *bufp_00;\n  size_t __size;\n  regmatch_t *pmatch;\n  reg_errcode_t rVar6;\n  void *pvVar7;\n  void *pvVar8;\n  char *length_00;\n  uint uVar9;\n  uint uVar10;\n  char *last_start;\n  int unaff_EDI;\n  re_pattern_buffer *prVar11;\n  undefined8 uVar12;\n  char local_38;\n  char local_34;\n  uint local_24;\n  uint local_20;\n  \n  uVar12 = __x86_get_pc_thunk_di();\n  bufp_00 = (regex_t *)uVar12;\n  pcVar1 = string + (int)&bufp->buffer;\n  if (((int)bufp < 0) || ((int)length_00 < (int)bufp)) {\n    return -1;\n  }\n  last_start = length_00;\n  if ((((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp)))) ||\n     ((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp))))))\n  {\n    bVar4 = bufp_00->field_0x1c;\n    local_24 = bVar4 >> 5 & 3;\n    if (((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))))\n    {\n      rpl_re_compile_fastmap(bufp_00);\n      bVar4 = bufp_00->field_0x1c;\n    }\n  }\n  else {\n    bVar4 = bufp_00->field_0x1c;\n    last_start = (char *)0x0;\n    local_24 = bVar4 >> 5 & 3;\n  }\n  if (((bVar4 & 0x10) == 0) && (start != 0)) {\n    if (((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = bufp_00->re_nsub + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    start = 0;\n  }\n  pmatch = (regmatch_t *)malloc(__size);\n  if (pmatch == (regmatch_t *)0x0) {\n    return -2;\n  }\n  rVar6 = re_search_internal(bufp_00,(char *)((ulonglong)uVar12 >> 0x20),(Idx)length_00,(Idx)bufp,\n                             (Idx)last_start,length,local_20,pmatch,local_24);\n  if (rVar6 == _REG_NOERROR) {\n    if (start != 0) {\n      bVar4 = (byte)bufp_00->field_0x1c >> 1;\n      uVar9 = local_20 + 1;\n      bVar5 = bVar4 & 3;\n      if ((bVar4 & 3) == 0) {\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }\nLAB_0002790b:\n      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    local_34 = (char)range;\n    prVar11 = (re_pattern_buffer *)pmatch->rm_so;\n    if (local_34 != '\0') {\n      if (bufp != prVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);\n    }\n  }\n  else {\n    prVar11 = (re_pattern_buffer *)0xffffffff;\n    if (rVar6 == _REG_NOMATCH) goto LAB_0002783b;\nLAB_00027836:\n    prVar11 = (re_pattern_buffer *)0xfffffffe;\n  }\nLAB_0002783b:\n  free(pmatch);\n  return (regoff_t)prVar11;\n}\n\n" (function_definition "regoff_t re_search_stub(re_pattern_buffer *bufp,char *string,Idx length,Idx start,regoff_t range,\n                       Idx stop,re_registers *regs,_Bool ret_len)\n\n{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  re_dfa_t **dfa;\n  regex_t *bufp_00;\n  size_t __size;\n  regmatch_t *pmatch;\n  reg_errcode_t rVar6;\n  void *pvVar7;\n  void *pvVar8;\n  char *length_00;\n  uint uVar9;\n  uint uVar10;\n  char *last_start;\n  int unaff_EDI;\n  re_pattern_buffer *prVar11;\n  undefined8 uVar12;\n  char local_38;\n  char local_34;\n  uint local_24;\n  uint local_20;\n  \n  uVar12 = __x86_get_pc_thunk_di();\n  bufp_00 = (regex_t *)uVar12;\n  pcVar1 = string + (int)&bufp->buffer;\n  if (((int)bufp < 0) || ((int)length_00 < (int)bufp)) {\n    return -1;\n  }\n  last_start = length_00;\n  if ((((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp)))) ||\n     ((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp))))))\n  {\n    bVar4 = bufp_00->field_0x1c;\n    local_24 = bVar4 >> 5 & 3;\n    if (((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))))\n    {\n      rpl_re_compile_fastmap(bufp_00);\n      bVar4 = bufp_00->field_0x1c;\n    }\n  }\n  else {\n    bVar4 = bufp_00->field_0x1c;\n    last_start = (char *)0x0;\n    local_24 = bVar4 >> 5 & 3;\n  }\n  if (((bVar4 & 0x10) == 0) && (start != 0)) {\n    if (((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = bufp_00->re_nsub + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    start = 0;\n  }\n  pmatch = (regmatch_t *)malloc(__size);\n  if (pmatch == (regmatch_t *)0x0) {\n    return -2;\n  }\n  rVar6 = re_search_internal(bufp_00,(char *)((ulonglong)uVar12 >> 0x20),(Idx)length_00,(Idx)bufp,\n                             (Idx)last_start,length,local_20,pmatch,local_24);\n  if (rVar6 == _REG_NOERROR) {\n    if (start != 0) {\n      bVar4 = (byte)bufp_00->field_0x1c >> 1;\n      uVar9 = local_20 + 1;\n      bVar5 = bVar4 & 3;\n      if ((bVar4 & 3) == 0) {\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }\nLAB_0002790b:\n      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    local_34 = (char)range;\n    prVar11 = (re_pattern_buffer *)pmatch->rm_so;\n    if (local_34 != '\0') {\n      if (bufp != prVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);\n    }\n  }\n  else {\n    prVar11 = (re_pattern_buffer *)0xffffffff;\n    if (rVar6 == _REG_NOMATCH) goto LAB_0002783b;\nLAB_00027836:\n    prVar11 = (re_pattern_buffer *)0xfffffffe;\n  }\nLAB_0002783b:\n  free(pmatch);\n  return (regoff_t)prVar11;\n}" type_identifier (function_declarator "re_search_stub(re_pattern_buffer *bufp,char *string,Idx length,Idx start,regoff_t range,\n                       Idx stop,re_registers *regs,_Bool ret_len)" identifier (parameter_list "(re_pattern_buffer *bufp,char *string,Idx length,Idx start,regoff_t range,\n                       Idx stop,re_registers *regs,_Bool ret_len)" ( (parameter_declaration "re_pattern_buffer *bufp" type_identifier (pointer_declarator "*bufp" * identifier)) , (parameter_declaration "char *string" primitive_type (pointer_declarator "*string" * identifier)) , (parameter_declaration "Idx length" type_identifier identifier) , (parameter_declaration "Idx start" type_identifier identifier) , (parameter_declaration "regoff_t range" type_identifier identifier) , (parameter_declaration "Idx stop" type_identifier identifier) , (parameter_declaration "re_registers *regs" type_identifier (pointer_declarator "*regs" * identifier)) , (parameter_declaration "_Bool ret_len" type_identifier identifier) ))) (compound_statement "{\n  char *pcVar1;\n  int iVar2;\n  int iVar3;\n  byte bVar4;\n  byte bVar5;\n  re_dfa_t **dfa;\n  regex_t *bufp_00;\n  size_t __size;\n  regmatch_t *pmatch;\n  reg_errcode_t rVar6;\n  void *pvVar7;\n  void *pvVar8;\n  char *length_00;\n  uint uVar9;\n  uint uVar10;\n  char *last_start;\n  int unaff_EDI;\n  re_pattern_buffer *prVar11;\n  undefined8 uVar12;\n  char local_38;\n  char local_34;\n  uint local_24;\n  uint local_20;\n  \n  uVar12 = __x86_get_pc_thunk_di();\n  bufp_00 = (regex_t *)uVar12;\n  pcVar1 = string + (int)&bufp->buffer;\n  if (((int)bufp < 0) || ((int)length_00 < (int)bufp)) {\n    return -1;\n  }\n  last_start = length_00;\n  if ((((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp)))) ||\n     ((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp))))))\n  {\n    bVar4 = bufp_00->field_0x1c;\n    local_24 = bVar4 >> 5 & 3;\n    if (((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))))\n    {\n      rpl_re_compile_fastmap(bufp_00);\n      bVar4 = bufp_00->field_0x1c;\n    }\n  }\n  else {\n    bVar4 = bufp_00->field_0x1c;\n    last_start = (char *)0x0;\n    local_24 = bVar4 >> 5 & 3;\n  }\n  if (((bVar4 & 0x10) == 0) && (start != 0)) {\n    if (((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = bufp_00->re_nsub + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    start = 0;\n  }\n  pmatch = (regmatch_t *)malloc(__size);\n  if (pmatch == (regmatch_t *)0x0) {\n    return -2;\n  }\n  rVar6 = re_search_internal(bufp_00,(char *)((ulonglong)uVar12 >> 0x20),(Idx)length_00,(Idx)bufp,\n                             (Idx)last_start,length,local_20,pmatch,local_24);\n  if (rVar6 == _REG_NOERROR) {\n    if (start != 0) {\n      bVar4 = (byte)bufp_00->field_0x1c >> 1;\n      uVar9 = local_20 + 1;\n      bVar5 = bVar4 & 3;\n      if ((bVar4 & 3) == 0) {\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }\nLAB_0002790b:\n      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    local_34 = (char)range;\n    prVar11 = (re_pattern_buffer *)pmatch->rm_so;\n    if (local_34 != '\0') {\n      if (bufp != prVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);\n    }\n  }\n  else {\n    prVar11 = (re_pattern_buffer *)0xffffffff;\n    if (rVar6 == _REG_NOMATCH) goto LAB_0002783b;\nLAB_00027836:\n    prVar11 = (re_pattern_buffer *)0xfffffffe;\n  }\nLAB_0002783b:\n  free(pmatch);\n  return (regoff_t)prVar11;\n}" { (declaration "char *pcVar1;" primitive_type (pointer_declarator "*pcVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (declaration "re_dfa_t **dfa;" type_identifier (pointer_declarator "**dfa" * (pointer_declarator "*dfa" * identifier)) ;) (declaration "regex_t *bufp_00;" type_identifier (pointer_declarator "*bufp_00" * identifier) ;) (declaration "size_t __size;" primitive_type identifier ;) (declaration "regmatch_t *pmatch;" type_identifier (pointer_declarator "*pmatch" * identifier) ;) (declaration "reg_errcode_t rVar6;" type_identifier identifier ;) (declaration "void *pvVar7;" primitive_type (pointer_declarator "*pvVar7" * identifier) ;) (declaration "void *pvVar8;" primitive_type (pointer_declarator "*pvVar8" * identifier) ;) (declaration "char *length_00;" primitive_type (pointer_declarator "*length_00" * identifier) ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "char *last_start;" primitive_type (pointer_declarator "*last_start" * identifier) ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "re_pattern_buffer *prVar11;" type_identifier (pointer_declarator "*prVar11" * identifier) ;) (declaration "undefined8 uVar12;" type_identifier identifier ;) (declaration "char local_38;" primitive_type identifier ;) (declaration "char local_34;" primitive_type identifier ;) (declaration "uint local_24;" type_identifier identifier ;) (declaration "uint local_20;" type_identifier identifier ;) (expression_statement "uVar12 = __x86_get_pc_thunk_di();" (assignment_expression "uVar12 = __x86_get_pc_thunk_di()" identifier = (call_expression "__x86_get_pc_thunk_di()" identifier (argument_list "()" ( )))) ;) (expression_statement "bufp_00 = (regex_t *)uVar12;" (assignment_expression "bufp_00 = (regex_t *)uVar12" identifier = (cast_expression "(regex_t *)uVar12" ( (type_descriptor "regex_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "pcVar1 = string + (int)&bufp->buffer;" (assignment_expression "pcVar1 = string + (int)&bufp->buffer" identifier = (binary_expression "string + (int)&bufp->buffer" identifier + (cast_expression "(int)&bufp->buffer" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&bufp->buffer" & (field_expression "bufp->buffer" identifier -> field_identifier))))) ;) (if_statement "if (((int)bufp < 0) || ((int)length_00 < (int)bufp)) {\n    return -1;\n  }" if (parenthesized_expression "(((int)bufp < 0) || ((int)length_00 < (int)bufp))" ( (binary_expression "((int)bufp < 0) || ((int)length_00 < (int)bufp)" (parenthesized_expression "((int)bufp < 0)" ( (binary_expression "(int)bufp < 0" (cast_expression "(int)bufp" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) || (parenthesized_expression "((int)length_00 < (int)bufp)" ( (binary_expression "(int)length_00 < (int)bufp" (cast_expression "(int)length_00" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)bufp" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) (compound_statement "{\n    return -1;\n  }" { (return_statement "return -1;" return number_literal ;) })) (expression_statement "last_start = length_00;" (assignment_expression "last_start = length_00" identifier = identifier) ;) (if_statement "if ((((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp)))) ||\n     ((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp))))))\n  {\n    bVar4 = bufp_00->field_0x1c;\n    local_24 = bVar4 >> 5 & 3;\n    if (((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))))\n    {\n      rpl_re_compile_fastmap(bufp_00);\n      bVar4 = bufp_00->field_0x1c;\n    }\n  }\n  else {\n    bVar4 = bufp_00->field_0x1c;\n    last_start = (char *)0x0;\n    local_24 = bVar4 >> 5 & 3;\n  }" if (parenthesized_expression "((((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp)))) ||\n     ((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp))))))" ( (binary_expression "(((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp)))) ||\n     ((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp)))))" (parenthesized_expression "(((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp))))" ( (binary_expression "((int)length_00 < (int)pcVar1) || ((-1 < (int)string && ((int)pcVar1 < (int)bufp)))" (parenthesized_expression "((int)length_00 < (int)pcVar1)" ( (binary_expression "(int)length_00 < (int)pcVar1" (cast_expression "(int)length_00" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier)) )) || (parenthesized_expression "((-1 < (int)string && ((int)pcVar1 < (int)bufp)))" ( (parenthesized_expression "(-1 < (int)string && ((int)pcVar1 < (int)bufp))" ( (binary_expression "-1 < (int)string && ((int)pcVar1 < (int)bufp)" (binary_expression "-1 < (int)string" number_literal < (cast_expression "(int)string" ( (type_descriptor "int" primitive_type) ) identifier)) && (parenthesized_expression "((int)pcVar1 < (int)bufp)" ( (binary_expression "(int)pcVar1 < (int)bufp" (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)bufp" ( (type_descriptor "int" primitive_type) ) identifier)) ))) )) ))) )) || (parenthesized_expression "((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp)))))" ( (parenthesized_expression "(-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp))))" ( (binary_expression "-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp)))" (binary_expression "-1 < (int)pcVar1" number_literal < (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier)) && (parenthesized_expression "((last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp)))" ( (parenthesized_expression "(last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp))" ( (comma_expression "last_start = pcVar1, -1 < (int)string || ((int)pcVar1 < (int)bufp)" (assignment_expression "last_start = pcVar1" identifier = identifier) , (binary_expression "-1 < (int)string || ((int)pcVar1 < (int)bufp)" (binary_expression "-1 < (int)string" number_literal < (cast_expression "(int)string" ( (type_descriptor "int" primitive_type) ) identifier)) || (parenthesized_expression "((int)pcVar1 < (int)bufp)" ( (binary_expression "(int)pcVar1 < (int)bufp" (cast_expression "(int)pcVar1" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)bufp" ( (type_descriptor "int" primitive_type) ) identifier)) )))) )) ))) )) ))) )) (compound_statement "{\n    bVar4 = bufp_00->field_0x1c;\n    local_24 = bVar4 >> 5 & 3;\n    if (((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))))\n    {\n      rpl_re_compile_fastmap(bufp_00);\n      bVar4 = bufp_00->field_0x1c;\n    }\n  }" { (expression_statement "bVar4 = bufp_00->field_0x1c;" (assignment_expression "bVar4 = bufp_00->field_0x1c" identifier = (field_expression "bufp_00->field_0x1c" identifier -> field_identifier)) ;) (expression_statement "local_24 = bVar4 >> 5 & 3;" (assignment_expression "local_24 = bVar4 >> 5 & 3" identifier = (binary_expression "bVar4 >> 5 & 3" (binary_expression "bVar4 >> 5" identifier >> number_literal) & number_literal)) ;) (if_statement "if (((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))))\n    {\n      rpl_re_compile_fastmap(bufp_00);\n      bVar4 = bufp_00->field_0x1c;\n    }" if (parenthesized_expression "(((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))))" ( (binary_expression "((int)bufp < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0)))" (parenthesized_expression "((int)bufp < (int)last_start)" ( (binary_expression "(int)bufp < (int)last_start" (cast_expression "(int)bufp" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)last_start" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "((bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0)))" ( (parenthesized_expression "(bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0))" ( (binary_expression "bufp_00->fastmap != (char *)0x0 && ((bVar4 & 8) == 0)" (binary_expression "bufp_00->fastmap != (char *)0x0" (field_expression "bufp_00->fastmap" identifier -> field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) && (parenthesized_expression "((bVar4 & 8) == 0)" ( (binary_expression "(bVar4 & 8) == 0" (parenthesized_expression "(bVar4 & 8)" ( (binary_expression "bVar4 & 8" identifier & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\n      rpl_re_compile_fastmap(bufp_00);\n      bVar4 = bufp_00->field_0x1c;\n    }" { (expression_statement "rpl_re_compile_fastmap(bufp_00);" (call_expression "rpl_re_compile_fastmap(bufp_00)" identifier (argument_list "(bufp_00)" ( identifier ))) ;) (expression_statement "bVar4 = bufp_00->field_0x1c;" (assignment_expression "bVar4 = bufp_00->field_0x1c" identifier = (field_expression "bufp_00->field_0x1c" identifier -> field_identifier)) ;) })) }) (else_clause "else {\n    bVar4 = bufp_00->field_0x1c;\n    last_start = (char *)0x0;\n    local_24 = bVar4 >> 5 & 3;\n  }" else (compound_statement "{\n    bVar4 = bufp_00->field_0x1c;\n    last_start = (char *)0x0;\n    local_24 = bVar4 >> 5 & 3;\n  }" { (expression_statement "bVar4 = bufp_00->field_0x1c;" (assignment_expression "bVar4 = bufp_00->field_0x1c" identifier = (field_expression "bufp_00->field_0x1c" identifier -> field_identifier)) ;) (expression_statement "last_start = (char *)0x0;" (assignment_expression "last_start = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "local_24 = bVar4 >> 5 & 3;" (assignment_expression "local_24 = bVar4 >> 5 & 3" identifier = (binary_expression "bVar4 >> 5 & 3" (binary_expression "bVar4 >> 5" identifier >> number_literal) & number_literal)) ;) }))) (if_statement "if (((bVar4 & 0x10) == 0) && (start != 0)) {\n    if (((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = bufp_00->re_nsub + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    start = 0;\n  }" if (parenthesized_expression "(((bVar4 & 0x10) == 0) && (start != 0))" ( (binary_expression "((bVar4 & 0x10) == 0) && (start != 0)" (parenthesized_expression "((bVar4 & 0x10) == 0)" ( (binary_expression "(bVar4 & 0x10) == 0" (parenthesized_expression "(bVar4 & 0x10)" ( (binary_expression "bVar4 & 0x10" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(start != 0)" ( (binary_expression "start != 0" identifier != number_literal) ))) )) (compound_statement "{\n    if (((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = bufp_00->re_nsub + 1;\n    }\n    __size = local_20 << 3;\n  }" { (if_statement "if (((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = bufp_00->re_nsub + 1;\n    }" if (parenthesized_expression "(((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub))" ( (binary_expression "((bVar4 & 6) == 4) && (local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)" (parenthesized_expression "((bVar4 & 6) == 4)" ( (binary_expression "(bVar4 & 6) == 4" (parenthesized_expression "(bVar4 & 6)" ( (binary_expression "bVar4 & 6" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub)" ( (comma_expression "local_20 = *(uint *)start, local_20 <= bufp_00->re_nsub" (assignment_expression "local_20 = *(uint *)start" identifier = (pointer_expression "*(uint *)start" * (cast_expression "(uint *)start" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) , (binary_expression "local_20 <= bufp_00->re_nsub" identifier <= (field_expression "bufp_00->re_nsub" identifier -> field_identifier))) ))) )) (compound_statement "{\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }" { (if_statement "if ((int)local_20 < 1) goto LAB_00027970;" if (parenthesized_expression "((int)local_20 < 1)" ( (binary_expression "(int)local_20 < 1" (cast_expression "(int)local_20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_00027970;" goto statement_identifier ;)) }) (else_clause "else {\n      local_20 = bufp_00->re_nsub + 1;\n    }" else (compound_statement "{\n      local_20 = bufp_00->re_nsub + 1;\n    }" { (expression_statement "local_20 = bufp_00->re_nsub + 1;" (assignment_expression "local_20 = bufp_00->re_nsub + 1" identifier = (binary_expression "bufp_00->re_nsub + 1" (field_expression "bufp_00->re_nsub" identifier -> field_identifier) + number_literal)) ;) }))) (expression_statement "__size = local_20 << 3;" (assignment_expression "__size = local_20 << 3" identifier = (binary_expression "local_20 << 3" identifier << number_literal)) ;) }) (else_clause "else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    start = 0;\n  }" else (compound_statement "{\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    start = 0;\n  }" { (labeled_statement "LAB_00027970:\n    __size = 8;" statement_identifier : (expression_statement "__size = 8;" (assignment_expression "__size = 8" identifier = number_literal) ;)) (expression_statement "local_20 = 1;" (assignment_expression "local_20 = 1" identifier = number_literal) ;) (expression_statement "start = 0;" (assignment_expression "start = 0" identifier = number_literal) ;) }))) (expression_statement "pmatch = (regmatch_t *)malloc(__size);" (assignment_expression "pmatch = (regmatch_t *)malloc(__size)" identifier = (cast_expression "(regmatch_t *)malloc(__size)" ( (type_descriptor "regmatch_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier ))))) ;) (if_statement "if (pmatch == (regmatch_t *)0x0) {\n    return -2;\n  }" if (parenthesized_expression "(pmatch == (regmatch_t *)0x0)" ( (binary_expression "pmatch == (regmatch_t *)0x0" identifier == (cast_expression "(regmatch_t *)0x0" ( (type_descriptor "regmatch_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return -2;\n  }" { (return_statement "return -2;" return number_literal ;) })) (expression_statement "rVar6 = re_search_internal(bufp_00,(char *)((ulonglong)uVar12 >> 0x20),(Idx)length_00,(Idx)bufp,\n                             (Idx)last_start,length,local_20,pmatch,local_24);" (assignment_expression "rVar6 = re_search_internal(bufp_00,(char *)((ulonglong)uVar12 >> 0x20),(Idx)length_00,(Idx)bufp,\n                             (Idx)last_start,length,local_20,pmatch,local_24)" identifier = (call_expression "re_search_internal(bufp_00,(char *)((ulonglong)uVar12 >> 0x20),(Idx)length_00,(Idx)bufp,\n                             (Idx)last_start,length,local_20,pmatch,local_24)" identifier (argument_list "(bufp_00,(char *)((ulonglong)uVar12 >> 0x20),(Idx)length_00,(Idx)bufp,\n                             (Idx)last_start,length,local_20,pmatch,local_24)" ( identifier , (cast_expression "(char *)((ulonglong)uVar12 >> 0x20)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulonglong)uVar12 >> 0x20)" ( (binary_expression "(ulonglong)uVar12 >> 0x20" (cast_expression "(ulonglong)uVar12" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) , (cast_expression "(Idx)length_00" ( (type_descriptor "Idx" type_identifier) ) identifier) , (cast_expression "(Idx)bufp" ( (type_descriptor "Idx" type_identifier) ) identifier) , (cast_expression "(Idx)last_start" ( (type_descriptor "Idx" type_identifier) ) identifier) , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (rVar6 == _REG_NOERROR) {\n    if (start != 0) {\n      bVar4 = (byte)bufp_00->field_0x1c >> 1;\n      uVar9 = local_20 + 1;\n      bVar5 = bVar4 & 3;\n      if ((bVar4 & 3) == 0) {\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }\nLAB_0002790b:\n      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    local_34 = (char)range;\n    prVar11 = (re_pattern_buffer *)pmatch->rm_so;\n    if (local_34 != '\0') {\n      if (bufp != prVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);\n    }\n  }\n  else {\n    prVar11 = (re_pattern_buffer *)0xffffffff;\n    if (rVar6 == _REG_NOMATCH) goto LAB_0002783b;\nLAB_00027836:\n    prVar11 = (re_pattern_buffer *)0xfffffffe;\n  }" if (parenthesized_expression "(rVar6 == _REG_NOERROR)" ( (binary_expression "rVar6 == _REG_NOERROR" identifier == identifier) )) (compound_statement "{\n    if (start != 0) {\n      bVar4 = (byte)bufp_00->field_0x1c >> 1;\n      uVar9 = local_20 + 1;\n      bVar5 = bVar4 & 3;\n      if ((bVar4 & 3) == 0) {\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }\nLAB_0002790b:\n      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    local_34 = (char)range;\n    prVar11 = (re_pattern_buffer *)pmatch->rm_so;\n    if (local_34 != '\0') {\n      if (bufp != prVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);\n    }\n  }" { (if_statement "if (start != 0) {\n      bVar4 = (byte)bufp_00->field_0x1c >> 1;\n      uVar9 = local_20 + 1;\n      bVar5 = bVar4 & 3;\n      if ((bVar4 & 3) == 0) {\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }\nLAB_0002790b:\n      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }" if (parenthesized_expression "(start != 0)" ( (binary_expression "start != 0" identifier != number_literal) )) (compound_statement "{\n      bVar4 = (byte)bufp_00->field_0x1c >> 1;\n      uVar9 = local_20 + 1;\n      bVar5 = bVar4 & 3;\n      if ((bVar4 & 3) == 0) {\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }\nLAB_0002790b:\n      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }" { (expression_statement "bVar4 = (byte)bufp_00->field_0x1c >> 1;" (assignment_expression "bVar4 = (byte)bufp_00->field_0x1c >> 1" identifier = (binary_expression "(byte)bufp_00->field_0x1c >> 1" (cast_expression "(byte)bufp_00->field_0x1c" ( (type_descriptor "byte" type_identifier) ) (field_expression "bufp_00->field_0x1c" identifier -> field_identifier)) >> number_literal)) ;) (expression_statement "uVar9 = local_20 + 1;" (assignment_expression "uVar9 = local_20 + 1" identifier = (binary_expression "local_20 + 1" identifier + number_literal)) ;) (expression_statement "bVar5 = bVar4 & 3;" (assignment_expression "bVar5 = bVar4 & 3" identifier = (binary_expression "bVar4 & 3" identifier & number_literal)) ;) (if_statement "if ((bVar4 & 3) == 0) {\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }" if (parenthesized_expression "((bVar4 & 3) == 0)" ( (binary_expression "(bVar4 & 3) == 0" (parenthesized_expression "(bVar4 & 3)" ( (binary_expression "bVar4 & 3" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        pvVar7 = malloc(uVar9 * 4);\n        *(void **)(start + 4) = pvVar7;\n        if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }" { (expression_statement "pvVar7 = malloc(uVar9 * 4);" (assignment_expression "pvVar7 = malloc(uVar9 * 4)" identifier = (call_expression "malloc(uVar9 * 4)" identifier (argument_list "(uVar9 * 4)" ( (binary_expression "uVar9 * 4" identifier * number_literal) )))) ;) (expression_statement "*(void **)(start + 4) = pvVar7;" (assignment_expression "*(void **)(start + 4) = pvVar7" (pointer_expression "*(void **)(start + 4)" * (cast_expression "(void **)(start + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(start + 4)" ( (binary_expression "start + 4" identifier + number_literal) )))) = identifier) ;) (if_statement "if (pvVar7 != (void *)0x0) {\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }" if (parenthesized_expression "(pvVar7 != (void *)0x0)" ( (binary_expression "pvVar7 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pvVar8 = malloc(uVar9 * 4);\n          *(void **)(start + 8) = pvVar8;\n          if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }\n          free(pvVar7);\n        }" { (expression_statement "pvVar8 = malloc(uVar9 * 4);" (assignment_expression "pvVar8 = malloc(uVar9 * 4)" identifier = (call_expression "malloc(uVar9 * 4)" identifier (argument_list "(uVar9 * 4)" ( (binary_expression "uVar9 * 4" identifier * number_literal) )))) ;) (expression_statement "*(void **)(start + 8) = pvVar8;" (assignment_expression "*(void **)(start + 8) = pvVar8" (pointer_expression "*(void **)(start + 8)" * (cast_expression "(void **)(start + 8)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(start + 8)" ( (binary_expression "start + 8" identifier + number_literal) )))) = identifier) ;) (if_statement "if (pvVar8 != (void *)0x0) {\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }" if (parenthesized_expression "(pvVar8 != (void *)0x0)" ( (binary_expression "pvVar8 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            local_38 = '\x01';\n            *(uint *)start = uVar9;\n            goto LAB_000278a1;\n          }" { (expression_statement "local_38 = '\x01';" (assignment_expression "local_38 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "*(uint *)start = uVar9;" (assignment_expression "*(uint *)start = uVar9" (pointer_expression "*(uint *)start" * (cast_expression "(uint *)start" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (goto_statement "goto LAB_000278a1;" goto statement_identifier ;) })) (expression_statement "free(pvVar7);" (call_expression "free(pvVar7)" identifier (argument_list "(pvVar7)" ( identifier ))) ;) })) (labeled_statement "LAB_00027b3a:\n        local_38 = '\0';" statement_identifier : (expression_statement "local_38 = '\0';" (assignment_expression "local_38 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;)) }) (else_clause "else {\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }" else (compound_statement "{\n        if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }\n        if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }\n      }" { (if_statement "if (bVar5 == 1) {\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }\n        else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" if (parenthesized_expression "(bVar5 == 1)" ( (binary_expression "bVar5 == 1" identifier == number_literal) )) (compound_statement "{\n          local_38 = '\x01';\n          if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }\n        }" { (expression_statement "local_38 = '\x01';" (assignment_expression "local_38 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (if_statement "if (*(uint *)start < uVar9) {\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }" if (parenthesized_expression "(*(uint *)start < uVar9)" ( (binary_expression "*(uint *)start < uVar9" (pointer_expression "*(uint *)start" * (cast_expression "(uint *)start" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) < identifier) )) (compound_statement "{\n            pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);\n            if (pvVar7 == (void *)0x0) goto LAB_00027b3a;\n            pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);\n            if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            *(void **)(start + 4) = pvVar7;\n            *(uint *)start = uVar9;\n            *(void **)(start + 8) = pvVar8;\n          }" { (expression_statement "pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4);" (assignment_expression "pvVar7 = realloc(*(void **)(start + 4),uVar9 * 4)" identifier = (call_expression "realloc(*(void **)(start + 4),uVar9 * 4)" identifier (argument_list "(*(void **)(start + 4),uVar9 * 4)" ( (pointer_expression "*(void **)(start + 4)" * (cast_expression "(void **)(start + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(start + 4)" ( (binary_expression "start + 4" identifier + number_literal) )))) , (binary_expression "uVar9 * 4" identifier * number_literal) )))) ;) (if_statement "if (pvVar7 == (void *)0x0) goto LAB_00027b3a;" if (parenthesized_expression "(pvVar7 == (void *)0x0)" ( (binary_expression "pvVar7 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00027b3a;" goto statement_identifier ;)) (expression_statement "pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4);" (assignment_expression "pvVar8 = realloc(*(void **)(start + 8),uVar9 * 4)" identifier = (call_expression "realloc(*(void **)(start + 8),uVar9 * 4)" identifier (argument_list "(*(void **)(start + 8),uVar9 * 4)" ( (pointer_expression "*(void **)(start + 8)" * (cast_expression "(void **)(start + 8)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(start + 8)" ( (binary_expression "start + 8" identifier + number_literal) )))) , (binary_expression "uVar9 * 4" identifier * number_literal) )))) ;) (if_statement "if (pvVar8 == (void *)0x0) {\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }" if (parenthesized_expression "(pvVar8 == (void *)0x0)" ( (binary_expression "pvVar8 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              free(pvVar7);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }" { (expression_statement "free(pvVar7);" (call_expression "free(pvVar7)" identifier (argument_list "(pvVar7)" ( identifier ))) ;) (expression_statement "local_38 = '\0';" (assignment_expression "local_38 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (goto_statement "goto LAB_0002790b;" goto statement_identifier ;) })) (expression_statement "*(void **)(start + 4) = pvVar7;" (assignment_expression "*(void **)(start + 4) = pvVar7" (pointer_expression "*(void **)(start + 4)" * (cast_expression "(void **)(start + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(start + 4)" ( (binary_expression "start + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(uint *)start = uVar9;" (assignment_expression "*(uint *)start = uVar9" (pointer_expression "*(uint *)start" * (cast_expression "(uint *)start" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(void **)(start + 8) = pvVar8;" (assignment_expression "*(void **)(start + 8) = pvVar8" (pointer_expression "*(void **)(start + 8)" * (cast_expression "(void **)(start + 8)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(start + 8)" ( (binary_expression "start + 8" identifier + number_literal) )))) = identifier) ;) })) }) (else_clause "else {\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" else (compound_statement "{\n          if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" { (if_statement "if (bVar5 != 2) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" if (parenthesized_expression "(bVar5 != 2)" ( (binary_expression "bVar5 != 2" identifier != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" { comment (expression_statement "__assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9))" identifier (argument_list "((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9))" ( (cast_expression "(char *)(unaff_EDI + 0x3619)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3619)" ( (binary_expression "unaff_EDI + 0x3619" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3af9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3af9)" ( (binary_expression "unaff_EDI + 0x3af9" identifier + number_literal) ))) ))) ;) })) (if_statement "if (*(uint *)start < local_20) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" if (parenthesized_expression "(*(uint *)start < local_20)" ( (binary_expression "*(uint *)start < local_20" (pointer_expression "*(uint *)start" * (cast_expression "(uint *)start" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" { comment (expression_statement "__assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9))" identifier (argument_list "((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9))" ( (cast_expression "(char *)(unaff_EDI + 0x3636)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3636)" ( (binary_expression "unaff_EDI + 0x3636" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3af9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3af9)" ( (binary_expression "unaff_EDI + 0x3af9" identifier + number_literal) ))) ))) ;) })) (expression_statement "local_38 = '\x02';" (assignment_expression "local_38 = '\x02'" identifier = (char_literal "'\x02'" ' escape_sequence ')) ;) }))) (labeled_statement "LAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }" statement_identifier : (if_statement "if ((int)local_20 < 1) {\n          uVar9 = 0;\n        }\n        else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }" if (parenthesized_expression "((int)local_20 < 1)" ( (binary_expression "(int)local_20 < 1" (cast_expression "(int)local_20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          uVar9 = 0;\n        }" { (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) }) (else_clause "else {\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }" else (compound_statement "{\n          iVar2 = *(int *)(start + 4);\n          iVar3 = *(int *)(start + 8);\n          uVar9 = 0;\n          do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);\n        }" { (expression_statement "iVar2 = *(int *)(start + 4);" (assignment_expression "iVar2 = *(int *)(start + 4)" identifier = (pointer_expression "*(int *)(start + 4)" * (cast_expression "(int *)(start + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(start + 4)" ( (binary_expression "start + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = *(int *)(start + 8);" (assignment_expression "iVar3 = *(int *)(start + 8)" identifier = (pointer_expression "*(int *)(start + 8)" * (cast_expression "(int *)(start + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(start + 8)" ( (binary_expression "start + 8" identifier + number_literal) ))))) ;) (expression_statement "uVar9 = 0;" (assignment_expression "uVar9 = 0" identifier = number_literal) ;) (do_statement "do {\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          } while (local_20 != uVar9);" do (compound_statement "{\n            *(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;\n            *(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;\n            uVar9 = uVar9 + 1;\n          }" { (expression_statement "*(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so;" (assignment_expression "*(regoff_t *)(iVar2 + uVar9 * 4) = pmatch[uVar9].rm_so" (pointer_expression "*(regoff_t *)(iVar2 + uVar9 * 4)" * (cast_expression "(regoff_t *)(iVar2 + uVar9 * 4)" ( (type_descriptor "regoff_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + uVar9 * 4)" ( (binary_expression "iVar2 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) = (field_expression "pmatch[uVar9].rm_so" (subscript_expression "pmatch[uVar9]" identifier [ identifier ]) . field_identifier)) ;) (expression_statement "*(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo;" (assignment_expression "*(regoff_t *)(iVar3 + uVar9 * 4) = pmatch[uVar9].rm_eo" (pointer_expression "*(regoff_t *)(iVar3 + uVar9 * 4)" * (cast_expression "(regoff_t *)(iVar3 + uVar9 * 4)" ( (type_descriptor "regoff_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + uVar9 * 4)" ( (binary_expression "iVar3 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) = (field_expression "pmatch[uVar9].rm_eo" (subscript_expression "pmatch[uVar9]" identifier [ identifier ]) . field_identifier)) ;) (expression_statement "uVar9 = uVar9 + 1;" (assignment_expression "uVar9 = uVar9 + 1" identifier = (binary_expression "uVar9 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_20 != uVar9)" ( (binary_expression "local_20 != uVar9" identifier != identifier) )) ;) })))) (if_statement "if (uVar9 < *(uint *)start) {\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }" if (parenthesized_expression "(uVar9 < *(uint *)start)" ( (binary_expression "uVar9 < *(uint *)start" identifier < (pointer_expression "*(uint *)start" * (cast_expression "(uint *)start" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) (compound_statement "{\n          iVar2 = *(int *)(start + 8);\n          iVar3 = *(int *)(start + 4);\n          do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);\n        }" { (expression_statement "iVar2 = *(int *)(start + 8);" (assignment_expression "iVar2 = *(int *)(start + 8)" identifier = (pointer_expression "*(int *)(start + 8)" * (cast_expression "(int *)(start + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(start + 8)" ( (binary_expression "start + 8" identifier + number_literal) ))))) ;) (expression_statement "iVar3 = *(int *)(start + 4);" (assignment_expression "iVar3 = *(int *)(start + 4)" identifier = (pointer_expression "*(int *)(start + 4)" * (cast_expression "(int *)(start + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(start + 4)" ( (binary_expression "start + 4" identifier + number_literal) ))))) ;) (do_statement "do {\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          } while (uVar10 < *(uint *)start);" do (compound_statement "{\n            uVar10 = uVar9 + 1;\n            *(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;\n            *(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;\n            uVar9 = uVar10;\n          }" { (expression_statement "uVar10 = uVar9 + 1;" (assignment_expression "uVar10 = uVar9 + 1" identifier = (binary_expression "uVar9 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff;" (assignment_expression "*(undefined4 *)(iVar2 + uVar9 * 4) = 0xffffffff" (pointer_expression "*(undefined4 *)(iVar2 + uVar9 * 4)" * (cast_expression "(undefined4 *)(iVar2 + uVar9 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + uVar9 * 4)" ( (binary_expression "iVar2 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff;" (assignment_expression "*(undefined4 *)(iVar3 + uVar9 * 4) = 0xffffffff" (pointer_expression "*(undefined4 *)(iVar3 + uVar9 * 4)" * (cast_expression "(undefined4 *)(iVar3 + uVar9 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + uVar9 * 4)" ( (binary_expression "iVar3 + uVar9 * 4" identifier + (binary_expression "uVar9 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "uVar9 = uVar10;" (assignment_expression "uVar9 = uVar10" identifier = identifier) ;) }) while (parenthesized_expression "(uVar10 < *(uint *)start)" ( (binary_expression "uVar10 < *(uint *)start" identifier < (pointer_expression "*(uint *)start" * (cast_expression "(uint *)start" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) )) ;) })) }))) (labeled_statement "LAB_0002790b:\n      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';" statement_identifier : (expression_statement "bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02';" (assignment_expression "bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | local_38 * '\x02'" (field_expression "bufp_00->field_0x1c" identifier -> field_identifier) = (binary_expression "bufp_00->field_0x1c & 0xf9 | local_38 * '\x02'" (binary_expression "bufp_00->field_0x1c & 0xf9" (field_expression "bufp_00->field_0x1c" identifier -> field_identifier) & number_literal) | (binary_expression "local_38 * '\x02'" identifier * (char_literal "'\x02'" ' escape_sequence ')))) ;)) (if_statement "if (local_38 == '\0') goto LAB_00027836;" if (parenthesized_expression "(local_38 == '\0')" ( (binary_expression "local_38 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00027836;" goto statement_identifier ;)) })) (expression_statement "local_34 = (char)range;" (assignment_expression "local_34 = (char)range" identifier = (cast_expression "(char)range" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "prVar11 = (re_pattern_buffer *)pmatch->rm_so;" (assignment_expression "prVar11 = (re_pattern_buffer *)pmatch->rm_so" identifier = (cast_expression "(re_pattern_buffer *)pmatch->rm_so" ( (type_descriptor "re_pattern_buffer *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pmatch->rm_so" identifier -> field_identifier))) ;) (if_statement "if (local_34 != '\0') {\n      if (bufp != prVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);\n    }" if (parenthesized_expression "(local_34 != '\0')" ( (binary_expression "local_34 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      if (bufp != prVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);\n    }" { (if_statement "if (bufp != prVar11) {\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }" if (parenthesized_expression "(bufp != prVar11)" ( (binary_expression "bufp != prVar11" identifier != identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }" { comment (expression_statement "__assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09))" identifier (argument_list "((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09))" ( (cast_expression "(char *)(unaff_EDI + 0x364e)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x364e)" ( (binary_expression "unaff_EDI + 0x364e" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3b09)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3b09)" ( (binary_expression "unaff_EDI + 0x3b09" identifier + number_literal) ))) ))) ;) })) (expression_statement "prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11);" (assignment_expression "prVar11 = (re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11)" identifier = (cast_expression "(re_pattern_buffer *)(pmatch->rm_eo - (int)prVar11)" ( (type_descriptor "re_pattern_buffer *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmatch->rm_eo - (int)prVar11)" ( (binary_expression "pmatch->rm_eo - (int)prVar11" (field_expression "pmatch->rm_eo" identifier -> field_identifier) - (cast_expression "(int)prVar11" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) })) }) (else_clause "else {\n    prVar11 = (re_pattern_buffer *)0xffffffff;\n    if (rVar6 == _REG_NOMATCH) goto LAB_0002783b;\nLAB_00027836:\n    prVar11 = (re_pattern_buffer *)0xfffffffe;\n  }" else (compound_statement "{\n    prVar11 = (re_pattern_buffer *)0xffffffff;\n    if (rVar6 == _REG_NOMATCH) goto LAB_0002783b;\nLAB_00027836:\n    prVar11 = (re_pattern_buffer *)0xfffffffe;\n  }" { (expression_statement "prVar11 = (re_pattern_buffer *)0xffffffff;" (assignment_expression "prVar11 = (re_pattern_buffer *)0xffffffff" identifier = (cast_expression "(re_pattern_buffer *)0xffffffff" ( (type_descriptor "re_pattern_buffer *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (rVar6 == _REG_NOMATCH) goto LAB_0002783b;" if (parenthesized_expression "(rVar6 == _REG_NOMATCH)" ( (binary_expression "rVar6 == _REG_NOMATCH" identifier == identifier) )) (goto_statement "goto LAB_0002783b;" goto statement_identifier ;)) (labeled_statement "LAB_00027836:\n    prVar11 = (re_pattern_buffer *)0xfffffffe;" statement_identifier : (expression_statement "prVar11 = (re_pattern_buffer *)0xfffffffe;" (assignment_expression "prVar11 = (re_pattern_buffer *)0xfffffffe" identifier = (cast_expression "(re_pattern_buffer *)0xfffffffe" ( (type_descriptor "re_pattern_buffer *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;)) }))) (labeled_statement "LAB_0002783b:\n  free(pmatch);" statement_identifier : (expression_statement "free(pmatch);" (call_expression "free(pmatch)" identifier (argument_list "(pmatch)" ( identifier ))) ;)) (return_statement "return (regoff_t)prVar11;" return (cast_expression "(regoff_t)prVar11" ( (type_descriptor "regoff_t" type_identifier) ) identifier) ;) })))
(translation_unit "int FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  byte bVar4;\n  size_t __size;\n  int *__ptr;\n  int iVar5;\n  void *pvVar6;\n  void *pvVar7;\n  int extraout_ECX;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int unaff_EDI;\n  int iVar11;\n  undefined8 uVar12;\n  char local_38;\n  uint local_20;\n  \n  uVar12 = FUN_000280ee();\n  iVar11 = (int)uVar12;\n  iVar5 = param_1 + param_2;\n  if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }\n  iVar10 = extraout_ECX;\n  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }\n  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }\n  __ptr = (int *)malloc(__size);\n  if (__ptr == (int *)0x0) {\n    return -2;\n  }\n  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);\n  if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }\nLAB_0002783b:\n  free(__ptr);\n  return iVar11;\n}\n\n" (function_definition "int FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  byte bVar4;\n  size_t __size;\n  int *__ptr;\n  int iVar5;\n  void *pvVar6;\n  void *pvVar7;\n  int extraout_ECX;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int unaff_EDI;\n  int iVar11;\n  undefined8 uVar12;\n  char local_38;\n  uint local_20;\n  \n  uVar12 = FUN_000280ee();\n  iVar11 = (int)uVar12;\n  iVar5 = param_1 + param_2;\n  if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }\n  iVar10 = extraout_ECX;\n  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }\n  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }\n  __ptr = (int *)malloc(__size);\n  if (__ptr == (int *)0x0) {\n    return -2;\n  }\n  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);\n  if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }\nLAB_0002783b:\n  free(__ptr);\n  return iVar11;\n}" primitive_type (function_declarator "FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)" identifier (parameter_list "(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "uint *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) , (parameter_declaration "char param_5" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  byte bVar4;\n  size_t __size;\n  int *__ptr;\n  int iVar5;\n  void *pvVar6;\n  void *pvVar7;\n  int extraout_ECX;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int unaff_EDI;\n  int iVar11;\n  undefined8 uVar12;\n  char local_38;\n  uint local_20;\n  \n  uVar12 = FUN_000280ee();\n  iVar11 = (int)uVar12;\n  iVar5 = param_1 + param_2;\n  if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }\n  iVar10 = extraout_ECX;\n  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }\n  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }\n  __ptr = (int *)malloc(__size);\n  if (__ptr == (int *)0x0) {\n    return -2;\n  }\n  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);\n  if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }\nLAB_0002783b:\n  free(__ptr);\n  return iVar11;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "size_t __size;" primitive_type identifier ;) (declaration "int *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "void *pvVar6;" primitive_type (pointer_declarator "*pvVar6" * identifier) ;) (declaration "void *pvVar7;" primitive_type (pointer_declarator "*pvVar7" * identifier) ;) (declaration "int extraout_ECX;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int unaff_EDI;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "undefined8 uVar12;" type_identifier identifier ;) (declaration "char local_38;" primitive_type identifier ;) (declaration "uint local_20;" type_identifier identifier ;) (expression_statement "uVar12 = FUN_000280ee();" (assignment_expression "uVar12 = FUN_000280ee()" identifier = (call_expression "FUN_000280ee()" identifier (argument_list "()" ( )))) ;) (expression_statement "iVar11 = (int)uVar12;" (assignment_expression "iVar11 = (int)uVar12" identifier = (cast_expression "(int)uVar12" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar5 = param_1 + param_2;" (assignment_expression "iVar5 = param_1 + param_2" identifier = (binary_expression "param_1 + param_2" identifier + identifier)) ;) (if_statement "if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }" if (parenthesized_expression "((param_1 < 0) || (extraout_ECX < param_1))" ( (binary_expression "(param_1 < 0) || (extraout_ECX < param_1)" (parenthesized_expression "(param_1 < 0)" ( (binary_expression "param_1 < 0" identifier < number_literal) )) || (parenthesized_expression "(extraout_ECX < param_1)" ( (binary_expression "extraout_ECX < param_1" identifier < identifier) ))) )) (compound_statement "{\n    return -1;\n  }" { (return_statement "return -1;" return number_literal ;) })) (expression_statement "iVar10 = extraout_ECX;" (assignment_expression "iVar10 = extraout_ECX" identifier = identifier) ;) (if_statement "if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" if (parenthesized_expression "(((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))))))" ( (binary_expression "((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))" (parenthesized_expression "((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1))))" ( (binary_expression "(extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))" (parenthesized_expression "(extraout_ECX < iVar5)" ( (binary_expression "extraout_ECX < iVar5" identifier < identifier) )) || (parenthesized_expression "((-1 < param_2 && (iVar5 < param_1)))" ( (parenthesized_expression "(-1 < param_2 && (iVar5 < param_1))" ( (binary_expression "-1 < param_2 && (iVar5 < param_1)" (binary_expression "-1 < param_2" number_literal < identifier) && (parenthesized_expression "(iVar5 < param_1)" ( (binary_expression "iVar5 < param_1" identifier < identifier) ))) )) ))) )) || (parenthesized_expression "((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))" ( (parenthesized_expression "(-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))))" ( (binary_expression "-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))" (binary_expression "-1 < iVar5" number_literal < identifier) && (parenthesized_expression "((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))" ( (parenthesized_expression "(iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))" ( (comma_expression "iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)" (assignment_expression "iVar10 = iVar5" identifier = identifier) , (binary_expression "-1 < param_2 || (iVar5 < param_1)" (binary_expression "-1 < param_2" number_literal < identifier) || (parenthesized_expression "(iVar5 < param_1)" ( (binary_expression "iVar5 < param_1" identifier < identifier) )))) )) ))) )) ))) )) (compound_statement "{\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }" { (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" identifier = (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "bVar4 = bVar3 >> 5 & 3;" (assignment_expression "bVar4 = bVar3 >> 5 & 3" identifier = (binary_expression "bVar3 >> 5 & 3" (binary_expression "bVar3 >> 5" identifier >> number_literal) & number_literal)) ;) (if_statement "if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }" if (parenthesized_expression "((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0))))" ( (binary_expression "(param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))" (parenthesized_expression "(param_1 < iVar10)" ( (binary_expression "param_1 < iVar10" identifier < identifier) )) && (parenthesized_expression "((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))" ( (parenthesized_expression "(*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0))" ( (binary_expression "*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)" (binary_expression "*(int *)(iVar11 + 0x10) != 0" (pointer_expression "*(int *)(iVar11 + 0x10)" * (cast_expression "(int *)(iVar11 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x10)" ( (binary_expression "iVar11 + 0x10" identifier + number_literal) )))) != number_literal) && (parenthesized_expression "((bVar3 & 8) == 0)" ( (binary_expression "(bVar3 & 8) == 0" (parenthesized_expression "(bVar3 & 8)" ( (binary_expression "bVar3 & 8" identifier & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }" { (expression_statement "FUN_00027660(iVar11);" (call_expression "FUN_00027660(iVar11)" identifier (argument_list "(iVar11)" ( identifier ))) ;) (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" identifier = (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) ))))) ;) })) }) (else_clause "else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" else (compound_statement "{\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" { (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" identifier = (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) ))))) ;) (expression_statement "iVar10 = 0;" (assignment_expression "iVar10 = 0" identifier = number_literal) ;) (expression_statement "bVar4 = bVar3 >> 5 & 3;" (assignment_expression "bVar4 = bVar3 >> 5 & 3" identifier = (binary_expression "bVar3 >> 5 & 3" (binary_expression "bVar3 >> 5" identifier >> number_literal) & number_literal)) ;) }))) (if_statement "if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" if (parenthesized_expression "(((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0))" ( (binary_expression "((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)" (parenthesized_expression "((bVar3 & 0x10) == 0)" ( (binary_expression "(bVar3 & 0x10) == 0" (parenthesized_expression "(bVar3 & 0x10)" ( (binary_expression "bVar3 & 0x10" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(param_4 != (uint *)0x0)" ( (binary_expression "param_4 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }" { (if_statement "if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" if (parenthesized_expression "(((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18)))" ( (binary_expression "((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))" (parenthesized_expression "((bVar3 & 6) == 4)" ( (binary_expression "(bVar3 & 6) == 4" (parenthesized_expression "(bVar3 & 6)" ( (binary_expression "bVar3 & 6" identifier & number_literal) )) == number_literal) )) && (parenthesized_expression "(local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))" ( (comma_expression "local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18)" (assignment_expression "local_20 = *param_4" identifier = (pointer_expression "*param_4" * identifier)) , (binary_expression "local_20 <= *(uint *)(iVar11 + 0x18)" identifier <= (pointer_expression "*(uint *)(iVar11 + 0x18)" * (cast_expression "(uint *)(iVar11 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x18)" ( (binary_expression "iVar11 + 0x18" identifier + number_literal) )))))) ))) )) (compound_statement "{\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }" { (if_statement "if ((int)local_20 < 1) goto LAB_00027970;" if (parenthesized_expression "((int)local_20 < 1)" ( (binary_expression "(int)local_20 < 1" (cast_expression "(int)local_20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_00027970;" goto statement_identifier ;)) }) (else_clause "else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" else (compound_statement "{\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" { (expression_statement "local_20 = *(uint *)(iVar11 + 0x18) + 1;" (assignment_expression "local_20 = *(uint *)(iVar11 + 0x18) + 1" identifier = (binary_expression "*(uint *)(iVar11 + 0x18) + 1" (pointer_expression "*(uint *)(iVar11 + 0x18)" * (cast_expression "(uint *)(iVar11 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x18)" ( (binary_expression "iVar11 + 0x18" identifier + number_literal) )))) + number_literal)) ;) }))) (expression_statement "__size = local_20 << 3;" (assignment_expression "__size = local_20 << 3" identifier = (binary_expression "local_20 << 3" identifier << number_literal)) ;) }) (else_clause "else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" else (compound_statement "{\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" { (labeled_statement "LAB_00027970:\n    __size = 8;" statement_identifier : (expression_statement "__size = 8;" (assignment_expression "__size = 8" identifier = number_literal) ;)) (expression_statement "local_20 = 1;" (assignment_expression "local_20 = 1" identifier = number_literal) ;) (expression_statement "param_4 = (uint *)0x0;" (assignment_expression "param_4 = (uint *)0x0" identifier = (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) (expression_statement "__ptr = (int *)malloc(__size);" (assignment_expression "__ptr = (int *)malloc(__size)" identifier = (cast_expression "(int *)malloc(__size)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "malloc(__size)" identifier (argument_list "(__size)" ( identifier ))))) ;) (if_statement "if (__ptr == (int *)0x0) {\n    return -2;\n  }" if (parenthesized_expression "(__ptr == (int *)0x0)" ( (binary_expression "__ptr == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return -2;\n  }" { (return_statement "return -2;" return number_literal ;) })) (expression_statement "iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);" (assignment_expression "iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" identifier = (call_expression "FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" identifier (argument_list "(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" ( identifier , identifier , identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }" { (if_statement "if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }" if (parenthesized_expression "(param_4 != (uint *)0x0)" ( (binary_expression "param_4 != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }" { (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c) >> 1" identifier = (binary_expression "*(byte *)(iVar11 + 0x1c) >> 1" (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) )))) >> number_literal)) ;) (expression_statement "uVar8 = local_20 + 1;" (assignment_expression "uVar8 = local_20 + 1" identifier = (binary_expression "local_20 + 1" identifier + number_literal)) ;) (expression_statement "bVar4 = bVar3 & 3;" (assignment_expression "bVar4 = bVar3 & 3" identifier = (binary_expression "bVar3 & 3" identifier & number_literal)) ;) (if_statement "if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" if (parenthesized_expression "((bVar3 & 3) == 0)" ( (binary_expression "(bVar3 & 3) == 0" (parenthesized_expression "(bVar3 & 3)" ( (binary_expression "bVar3 & 3" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }" { (expression_statement "pvVar6 = malloc(uVar8 * 4);" (assignment_expression "pvVar6 = malloc(uVar8 * 4)" identifier = (call_expression "malloc(uVar8 * 4)" identifier (argument_list "(uVar8 * 4)" ( (binary_expression "uVar8 * 4" identifier * number_literal) )))) ;) (expression_statement "param_4[1] = (uint)pvVar6;" (assignment_expression "param_4[1] = (uint)pvVar6" (subscript_expression "param_4[1]" identifier [ number_literal ]) = (cast_expression "(uint)pvVar6" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }" if (parenthesized_expression "(pvVar6 != (void *)0x0)" ( (binary_expression "pvVar6 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }" { (expression_statement "pvVar7 = malloc(uVar8 * 4);" (assignment_expression "pvVar7 = malloc(uVar8 * 4)" identifier = (call_expression "malloc(uVar8 * 4)" identifier (argument_list "(uVar8 * 4)" ( (binary_expression "uVar8 * 4" identifier * number_literal) )))) ;) (expression_statement "param_4[2] = (uint)pvVar7;" (assignment_expression "param_4[2] = (uint)pvVar7" (subscript_expression "param_4[2]" identifier [ number_literal ]) = (cast_expression "(uint)pvVar7" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }" if (parenthesized_expression "(pvVar7 != (void *)0x0)" ( (binary_expression "pvVar7 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }" { (expression_statement "local_38 = '\x01';" (assignment_expression "local_38 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "*param_4 = uVar8;" (assignment_expression "*param_4 = uVar8" (pointer_expression "*param_4" * identifier) = identifier) ;) (goto_statement "goto LAB_000278a1;" goto statement_identifier ;) })) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) })) (labeled_statement "LAB_00027b3a:\n        local_38 = '\0';" statement_identifier : (expression_statement "local_38 = '\0';" (assignment_expression "local_38 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;)) }) (else_clause "else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" else (compound_statement "{\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" { (if_statement "if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" if (parenthesized_expression "(bVar4 == 1)" ( (binary_expression "bVar4 == 1" identifier == number_literal) )) (compound_statement "{\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }" { (expression_statement "local_38 = '\x01';" (assignment_expression "local_38 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (if_statement "if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }" if (parenthesized_expression "(*param_4 < uVar8)" ( (binary_expression "*param_4 < uVar8" (pointer_expression "*param_4" * identifier) < identifier) )) (compound_statement "{\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }" { (expression_statement "pvVar6 = realloc((void *)param_4[1],uVar8 * 4);" (assignment_expression "pvVar6 = realloc((void *)param_4[1],uVar8 * 4)" identifier = (call_expression "realloc((void *)param_4[1],uVar8 * 4)" identifier (argument_list "((void *)param_4[1],uVar8 * 4)" ( (cast_expression "(void *)param_4[1]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[1]" identifier [ number_literal ])) , (binary_expression "uVar8 * 4" identifier * number_literal) )))) ;) (if_statement "if (pvVar6 == (void *)0x0) goto LAB_00027b3a;" if (parenthesized_expression "(pvVar6 == (void *)0x0)" ( (binary_expression "pvVar6 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00027b3a;" goto statement_identifier ;)) (expression_statement "pvVar7 = realloc((void *)param_4[2],uVar8 * 4);" (assignment_expression "pvVar7 = realloc((void *)param_4[2],uVar8 * 4)" identifier = (call_expression "realloc((void *)param_4[2],uVar8 * 4)" identifier (argument_list "((void *)param_4[2],uVar8 * 4)" ( (cast_expression "(void *)param_4[2]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_4[2]" identifier [ number_literal ])) , (binary_expression "uVar8 * 4" identifier * number_literal) )))) ;) (if_statement "if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }" if (parenthesized_expression "(pvVar7 == (void *)0x0)" ( (binary_expression "pvVar7 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }" { (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" identifier (argument_list "(pvVar6)" ( identifier ))) ;) (expression_statement "local_38 = '\0';" (assignment_expression "local_38 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) (goto_statement "goto LAB_0002790b;" goto statement_identifier ;) })) (expression_statement "param_4[1] = (uint)pvVar6;" (assignment_expression "param_4[1] = (uint)pvVar6" (subscript_expression "param_4[1]" identifier [ number_literal ]) = (cast_expression "(uint)pvVar6" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*param_4 = uVar8;" (assignment_expression "*param_4 = uVar8" (pointer_expression "*param_4" * identifier) = identifier) ;) (expression_statement "param_4[2] = (uint)pvVar7;" (assignment_expression "param_4[2] = (uint)pvVar7" (subscript_expression "param_4[2]" identifier [ number_literal ]) = (cast_expression "(uint)pvVar7" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) })) }) (else_clause "else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" else (compound_statement "{\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" { (if_statement "if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" if (parenthesized_expression "(bVar4 != 2)" ( (binary_expression "bVar4 != 2" identifier != number_literal) )) (compound_statement "{\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" { (expression_statement "__assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9))" identifier (argument_list "((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9))" ( (cast_expression "(char *)(unaff_EDI + 0x3619)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3619)" ( (binary_expression "unaff_EDI + 0x3619" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3af9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3af9)" ( (binary_expression "unaff_EDI + 0x3af9" identifier + number_literal) ))) ))) ;) })) (if_statement "if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" if (parenthesized_expression "(*param_4 < local_20)" ( (binary_expression "*param_4 < local_20" (pointer_expression "*param_4" * identifier) < identifier) )) (compound_statement "{\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" { (expression_statement "__assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9))" identifier (argument_list "((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9))" ( (cast_expression "(char *)(unaff_EDI + 0x3636)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3636)" ( (binary_expression "unaff_EDI + 0x3636" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3af9)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3af9)" ( (binary_expression "unaff_EDI + 0x3af9" identifier + number_literal) ))) ))) ;) })) (expression_statement "local_38 = '\x02';" (assignment_expression "local_38 = '\x02'" identifier = (char_literal "'\x02'" ' escape_sequence ')) ;) }))) (labeled_statement "LAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" statement_identifier : (if_statement "if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" if (parenthesized_expression "((int)local_20 < 1)" ( (binary_expression "(int)local_20 < 1" (cast_expression "(int)local_20" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n          uVar8 = 0;\n        }" { (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) }) (else_clause "else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" else (compound_statement "{\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" { (expression_statement "uVar1 = param_4[1];" (assignment_expression "uVar1 = param_4[1]" identifier = (subscript_expression "param_4[1]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_4[2];" (assignment_expression "uVar2 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (do_statement "do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);" do (compound_statement "{\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          }" { (expression_statement "*(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];" (assignment_expression "*(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2]" (pointer_expression "*(int *)(uVar1 + uVar8 * 4)" * (cast_expression "(int *)(uVar1 + uVar8 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + uVar8 * 4)" ( (binary_expression "uVar1 + uVar8 * 4" identifier + (binary_expression "uVar8 * 4" identifier * number_literal)) )))) = (subscript_expression "__ptr[uVar8 * 2]" identifier [ (binary_expression "uVar8 * 2" identifier * number_literal) ])) ;) (expression_statement "*(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];" (assignment_expression "*(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1]" (pointer_expression "*(int *)(uVar2 + uVar8 * 4)" * (cast_expression "(int *)(uVar2 + uVar8 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 + uVar8 * 4)" ( (binary_expression "uVar2 + uVar8 * 4" identifier + (binary_expression "uVar8 * 4" identifier * number_literal)) )))) = (subscript_expression "__ptr[uVar8 * 2 + 1]" identifier [ (binary_expression "uVar8 * 2 + 1" (binary_expression "uVar8 * 2" identifier * number_literal) + number_literal) ])) ;) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_20 != uVar8)" ( (binary_expression "local_20 != uVar8" identifier != identifier) )) ;) })))) (if_statement "if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }" if (parenthesized_expression "(uVar8 < *param_4)" ( (binary_expression "uVar8 < *param_4" identifier < (pointer_expression "*param_4" * identifier)) )) (compound_statement "{\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }" { (expression_statement "uVar1 = param_4[2];" (assignment_expression "uVar1 = param_4[2]" identifier = (subscript_expression "param_4[2]" identifier [ number_literal ])) ;) (expression_statement "uVar2 = param_4[1];" (assignment_expression "uVar2 = param_4[1]" identifier = (subscript_expression "param_4[1]" identifier [ number_literal ])) ;) (do_statement "do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);" do (compound_statement "{\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          }" { (expression_statement "uVar9 = uVar8 + 1;" (assignment_expression "uVar9 = uVar8 + 1" identifier = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;" (assignment_expression "*(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff" (pointer_expression "*(undefined4 *)(uVar1 + uVar8 * 4)" * (cast_expression "(undefined4 *)(uVar1 + uVar8 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar1 + uVar8 * 4)" ( (binary_expression "uVar1 + uVar8 * 4" identifier + (binary_expression "uVar8 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;" (assignment_expression "*(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff" (pointer_expression "*(undefined4 *)(uVar2 + uVar8 * 4)" * (cast_expression "(undefined4 *)(uVar2 + uVar8 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar2 + uVar8 * 4)" ( (binary_expression "uVar2 + uVar8 * 4" identifier + (binary_expression "uVar8 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" identifier = identifier) ;) }) while (parenthesized_expression "(uVar9 < *param_4)" ( (binary_expression "uVar9 < *param_4" identifier < (pointer_expression "*param_4" * identifier)) )) ;) })) }))) (labeled_statement "LAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';" statement_identifier : (expression_statement "*(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';" (assignment_expression "*(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02'" (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) )))) = (binary_expression "*(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02'" (binary_expression "*(byte *)(iVar11 + 0x1c) & 0xf9" (pointer_expression "*(byte *)(iVar11 + 0x1c)" * (cast_expression "(byte *)(iVar11 + 0x1c)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + 0x1c)" ( (binary_expression "iVar11 + 0x1c" identifier + number_literal) )))) & number_literal) | (binary_expression "local_38 * '\x02'" identifier * (char_literal "'\x02'" ' escape_sequence ')))) ;)) (if_statement "if (local_38 == '\0') goto LAB_00027836;" if (parenthesized_expression "(local_38 == '\0')" ( (binary_expression "local_38 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (goto_statement "goto LAB_00027836;" goto statement_identifier ;)) })) (expression_statement "iVar11 = *__ptr;" (assignment_expression "iVar11 = *__ptr" identifier = (pointer_expression "*__ptr" * identifier)) ;) (if_statement "if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }" if (parenthesized_expression "(param_5 != '\0')" ( (binary_expression "param_5 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }" { (if_statement "if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }" if (parenthesized_expression "(param_1 != iVar11)" ( (binary_expression "param_1 != iVar11" identifier != identifier) )) (compound_statement "{\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }" { (expression_statement "__assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09))" identifier (argument_list "((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09))" ( (cast_expression "(char *)(unaff_EDI + 0x364e)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x364e)" ( (binary_expression "unaff_EDI + 0x364e" identifier + number_literal) ))) , (cast_expression "(char *)(unaff_EDI + 0x35ab)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x35ab)" ( (binary_expression "unaff_EDI + 0x35ab" identifier + number_literal) ))) , number_literal , (cast_expression "(char *)(unaff_EDI + 0x3b09)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EDI + 0x3b09)" ( (binary_expression "unaff_EDI + 0x3b09" identifier + number_literal) ))) ))) ;) })) (expression_statement "iVar11 = __ptr[1] - iVar11;" (assignment_expression "iVar11 = __ptr[1] - iVar11" identifier = (binary_expression "__ptr[1] - iVar11" (subscript_expression "__ptr[1]" identifier [ number_literal ]) - identifier)) ;) })) }) (else_clause "else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" else (compound_statement "{\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" { (expression_statement "iVar11 = -1;" (assignment_expression "iVar11 = -1" identifier = number_literal) ;) (if_statement "if (iVar5 == 1) goto LAB_0002783b;" if (parenthesized_expression "(iVar5 == 1)" ( (binary_expression "iVar5 == 1" identifier == number_literal) )) (goto_statement "goto LAB_0002783b;" goto statement_identifier ;)) (labeled_statement "LAB_00027836:\n    iVar11 = -2;" statement_identifier : (expression_statement "iVar11 = -2;" (assignment_expression "iVar11 = -2" identifier = number_literal) ;)) }))) (labeled_statement "LAB_0002783b:\n  free(__ptr);" statement_identifier : (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;)) (return_statement "return iVar11;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * 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 IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < LIT) )) || (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression LIT < IDENT) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) ))) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression LIT < IDENT) && (parenthesized_expression ( (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (binary_expression LIT < IDENT) || (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) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) )) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) & LIT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) && (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * IDENT)) , (binary_expression IDENT <= (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << LIT)) ;) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (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 *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (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 *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;)) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , (binary_expression IDENT * LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , (binary_expression IDENT * LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , LIT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , LIT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) ))) ;) })) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) }))) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = (subscript_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)) )))) = (subscript_expression IDENT [ (binary_expression (binary_expression IDENT * LIT) + LIT) ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (do_statement do (compound_statement { (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)) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (pointer_expression * IDENT)) )) ;) })) }))) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) | (binary_expression IDENT * (char_literal ' escape_sequence ')))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , LIT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT)) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) }))) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;)) (return_statement return IDENT ;) })))
(function_definition "int FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)\n\n{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  byte bVar4;\n  size_t __size;\n  int *__ptr;\n  int iVar5;\n  void *pvVar6;\n  void *pvVar7;\n  int extraout_ECX;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int unaff_EDI;\n  int iVar11;\n  undefined8 uVar12;\n  char local_38;\n  uint local_20;\n  \n  uVar12 = FUN_000280ee();\n  iVar11 = (int)uVar12;\n  iVar5 = param_1 + param_2;\n  if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }\n  iVar10 = extraout_ECX;\n  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }\n  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }\n  __ptr = (int *)malloc(__size);\n  if (__ptr == (int *)0x0) {\n    return -2;\n  }\n  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);\n  if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }\nLAB_0002783b:\n  free(__ptr);\n  return iVar11;\n}" (primitive_type "int") (function_declarator "FUN_00027720(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)" (identifier "FUN_00027720") (parameter_list "(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "uint *param_4" (type_identifier "uint") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) (, ",") (parameter_declaration "char param_5" (primitive_type "char") (identifier "param_5")) () ")"))) (compound_statement "{\n  uint uVar1;\n  uint uVar2;\n  byte bVar3;\n  byte bVar4;\n  size_t __size;\n  int *__ptr;\n  int iVar5;\n  void *pvVar6;\n  void *pvVar7;\n  int extraout_ECX;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int unaff_EDI;\n  int iVar11;\n  undefined8 uVar12;\n  char local_38;\n  uint local_20;\n  \n  uVar12 = FUN_000280ee();\n  iVar11 = (int)uVar12;\n  iVar5 = param_1 + param_2;\n  if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }\n  iVar10 = extraout_ECX;\n  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }\n  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }\n  __ptr = (int *)malloc(__size);\n  if (__ptr == (int *)0x0) {\n    return -2;\n  }\n  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);\n  if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }\nLAB_0002783b:\n  free(__ptr);\n  return iVar11;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (declaration "size_t __size;" (primitive_type "size_t") (identifier "__size") (; ";")) (declaration "int *__ptr;" (primitive_type "int") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "void *pvVar6;" (primitive_type "void") (pointer_declarator "*pvVar6" (* "*") (identifier "pvVar6")) (; ";")) (declaration "void *pvVar7;" (primitive_type "void") (pointer_declarator "*pvVar7" (* "*") (identifier "pvVar7")) (; ";")) (declaration "int extraout_ECX;" (primitive_type "int") (identifier "extraout_ECX") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "int unaff_EDI;" (primitive_type "int") (identifier "unaff_EDI") (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "undefined8 uVar12;" (type_identifier "undefined8") (identifier "uVar12") (; ";")) (declaration "char local_38;" (primitive_type "char") (identifier "local_38") (; ";")) (declaration "uint local_20;" (type_identifier "uint") (identifier "local_20") (; ";")) (expression_statement "uVar12 = FUN_000280ee();" (assignment_expression "uVar12 = FUN_000280ee()" (identifier "uVar12") (= "=") (call_expression "FUN_000280ee()" (identifier "FUN_000280ee") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "iVar11 = (int)uVar12;" (assignment_expression "iVar11 = (int)uVar12" (identifier "iVar11") (= "=") (cast_expression "(int)uVar12" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar12"))) (; ";")) (expression_statement "iVar5 = param_1 + param_2;" (assignment_expression "iVar5 = param_1 + param_2" (identifier "iVar5") (= "=") (binary_expression "param_1 + param_2" (identifier "param_1") (+ "+") (identifier "param_2"))) (; ";")) (if_statement "if ((param_1 < 0) || (extraout_ECX < param_1)) {\n    return -1;\n  }" (if "if") (parenthesized_expression "((param_1 < 0) || (extraout_ECX < param_1))" (( "(") (binary_expression "(param_1 < 0) || (extraout_ECX < param_1)" (parenthesized_expression "(param_1 < 0)" (( "(") (binary_expression "param_1 < 0" (identifier "param_1") (< "<") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(extraout_ECX < param_1)" (( "(") (binary_expression "extraout_ECX < param_1" (identifier "extraout_ECX") (< "<") (identifier "param_1")) () ")"))) () ")")) (compound_statement "{\n    return -1;\n  }" ({ "{") (return_statement "return -1;" (return "return") (number_literal "-1") (; ";")) (} "}"))) (expression_statement "iVar10 = extraout_ECX;" (assignment_expression "iVar10 = extraout_ECX" (identifier "iVar10") (= "=") (identifier "extraout_ECX")) (; ";")) (if_statement "if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }\n  else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" (if "if") (parenthesized_expression "(((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))))))" (( "(") (binary_expression "((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||\n     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))" (parenthesized_expression "((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1))))" (( "(") (binary_expression "(extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))" (parenthesized_expression "(extraout_ECX < iVar5)" (( "(") (binary_expression "extraout_ECX < iVar5" (identifier "extraout_ECX") (< "<") (identifier "iVar5")) () ")")) (|| "||") (parenthesized_expression "((-1 < param_2 && (iVar5 < param_1)))" (( "(") (parenthesized_expression "(-1 < param_2 && (iVar5 < param_1))" (( "(") (binary_expression "-1 < param_2 && (iVar5 < param_1)" (binary_expression "-1 < param_2" (number_literal "-1") (< "<") (identifier "param_2")) (&& "&&") (parenthesized_expression "(iVar5 < param_1)" (( "(") (binary_expression "iVar5 < param_1" (identifier "iVar5") (< "<") (identifier "param_1")) () ")"))) () ")")) () ")"))) () ")")) (|| "||") (parenthesized_expression "((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))" (( "(") (parenthesized_expression "(-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))))" (( "(") (binary_expression "-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))" (binary_expression "-1 < iVar5" (number_literal "-1") (< "<") (identifier "iVar5")) (&& "&&") (parenthesized_expression "((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))" (( "(") (parenthesized_expression "(iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1))" (( "(") (comma_expression "iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)" (assignment_expression "iVar10 = iVar5" (identifier "iVar10") (= "=") (identifier "iVar5")) (, ",") (binary_expression "-1 < param_2 || (iVar5 < param_1)" (binary_expression "-1 < param_2" (number_literal "-1") (< "<") (identifier "param_2")) (|| "||") (parenthesized_expression "(iVar5 < param_1)" (( "(") (binary_expression "iVar5 < param_1" (identifier "iVar5") (< "<") (identifier "param_1")) () ")")))) () ")")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    bVar4 = bVar3 >> 5 & 3;\n    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }\n  }" ({ "{") (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" (identifier "bVar3") (= "=") (pointer_expression "*(byte *)(iVar11 + 0x1c)" (* "*") (cast_expression "(byte *)(iVar11 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x1c)" (( "(") (binary_expression "iVar11 + 0x1c" (identifier "iVar11") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "bVar4 = bVar3 >> 5 & 3;" (assignment_expression "bVar4 = bVar3 >> 5 & 3" (identifier "bVar4") (= "=") (binary_expression "bVar3 >> 5 & 3" (binary_expression "bVar3 >> 5" (identifier "bVar3") (>> ">>") (number_literal "5")) (& "&") (number_literal "3"))) (; ";")) (if_statement "if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }" (if "if") (parenthesized_expression "((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0))))" (( "(") (binary_expression "(param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))" (parenthesized_expression "(param_1 < iVar10)" (( "(") (binary_expression "param_1 < iVar10" (identifier "param_1") (< "<") (identifier "iVar10")) () ")")) (&& "&&") (parenthesized_expression "((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))" (( "(") (parenthesized_expression "(*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0))" (( "(") (binary_expression "*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)" (binary_expression "*(int *)(iVar11 + 0x10) != 0" (pointer_expression "*(int *)(iVar11 + 0x10)" (* "*") (cast_expression "(int *)(iVar11 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x10)" (( "(") (binary_expression "iVar11 + 0x10" (identifier "iVar11") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) (&& "&&") (parenthesized_expression "((bVar3 & 8) == 0)" (( "(") (binary_expression "(bVar3 & 8) == 0" (parenthesized_expression "(bVar3 & 8)" (( "(") (binary_expression "bVar3 & 8" (identifier "bVar3") (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n      FUN_00027660(iVar11);\n      bVar3 = *(byte *)(iVar11 + 0x1c);\n    }" ({ "{") (expression_statement "FUN_00027660(iVar11);" (call_expression "FUN_00027660(iVar11)" (identifier "FUN_00027660") (argument_list "(iVar11)" (( "(") (identifier "iVar11") () ")"))) (; ";")) (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" (identifier "bVar3") (= "=") (pointer_expression "*(byte *)(iVar11 + 0x1c)" (* "*") (cast_expression "(byte *)(iVar11 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x1c)" (( "(") (binary_expression "iVar11 + 0x1c" (identifier "iVar11") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" (else "else") (compound_statement "{\n    bVar3 = *(byte *)(iVar11 + 0x1c);\n    iVar10 = 0;\n    bVar4 = bVar3 >> 5 & 3;\n  }" ({ "{") (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c);" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c)" (identifier "bVar3") (= "=") (pointer_expression "*(byte *)(iVar11 + 0x1c)" (* "*") (cast_expression "(byte *)(iVar11 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x1c)" (( "(") (binary_expression "iVar11 + 0x1c" (identifier "iVar11") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (expression_statement "iVar10 = 0;" (assignment_expression "iVar10 = 0" (identifier "iVar10") (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar4 = bVar3 >> 5 & 3;" (assignment_expression "bVar4 = bVar3 >> 5 & 3" (identifier "bVar4") (= "=") (binary_expression "bVar3 >> 5 & 3" (binary_expression "bVar3 >> 5" (identifier "bVar3") (>> ">>") (number_literal "5")) (& "&") (number_literal "3"))) (; ";")) (} "}")))) (if_statement "if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }\n  else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" (if "if") (parenthesized_expression "(((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0))" (( "(") (binary_expression "((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)" (parenthesized_expression "((bVar3 & 0x10) == 0)" (( "(") (binary_expression "(bVar3 & 0x10) == 0" (parenthesized_expression "(bVar3 & 0x10)" (( "(") (binary_expression "bVar3 & 0x10" (identifier "bVar3") (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(param_4 != (uint *)0x0)" (( "(") (binary_expression "param_4 != (uint *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }\n    __size = local_20 << 3;\n  }" ({ "{") (if_statement "if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }\n    else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" (if "if") (parenthesized_expression "(((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18)))" (( "(") (binary_expression "((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))" (parenthesized_expression "((bVar3 & 6) == 4)" (( "(") (binary_expression "(bVar3 & 6) == 4" (parenthesized_expression "(bVar3 & 6)" (( "(") (binary_expression "bVar3 & 6" (identifier "bVar3") (& "&") (number_literal "6")) () ")")) (== "==") (number_literal "4")) () ")")) (&& "&&") (parenthesized_expression "(local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))" (( "(") (comma_expression "local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18)" (assignment_expression "local_20 = *param_4" (identifier "local_20") (= "=") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) (, ",") (binary_expression "local_20 <= *(uint *)(iVar11 + 0x18)" (identifier "local_20") (<= "<=") (pointer_expression "*(uint *)(iVar11 + 0x18)" (* "*") (cast_expression "(uint *)(iVar11 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x18)" (( "(") (binary_expression "iVar11 + 0x18" (identifier "iVar11") (+ "+") (number_literal "0x18")) () ")")))))) () ")"))) () ")")) (compound_statement "{\n      if ((int)local_20 < 1) goto LAB_00027970;\n    }" ({ "{") (if_statement "if ((int)local_20 < 1) goto LAB_00027970;" (if "if") (parenthesized_expression "((int)local_20 < 1)" (( "(") (binary_expression "(int)local_20 < 1" (cast_expression "(int)local_20" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_20")) (< "<") (number_literal "1")) () ")")) (goto_statement "goto LAB_00027970;" (goto "goto") (statement_identifier "LAB_00027970") (; ";"))) (} "}")) (else_clause "else {\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" (else "else") (compound_statement "{\n      local_20 = *(uint *)(iVar11 + 0x18) + 1;\n    }" ({ "{") (expression_statement "local_20 = *(uint *)(iVar11 + 0x18) + 1;" (assignment_expression "local_20 = *(uint *)(iVar11 + 0x18) + 1" (identifier "local_20") (= "=") (binary_expression "*(uint *)(iVar11 + 0x18) + 1" (pointer_expression "*(uint *)(iVar11 + 0x18)" (* "*") (cast_expression "(uint *)(iVar11 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x18)" (( "(") (binary_expression "iVar11 + 0x18" (identifier "iVar11") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (} "}")))) (expression_statement "__size = local_20 << 3;" (assignment_expression "__size = local_20 << 3" (identifier "__size") (= "=") (binary_expression "local_20 << 3" (identifier "local_20") (<< "<<") (number_literal "3"))) (; ";")) (} "}")) (else_clause "else {\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" (else "else") (compound_statement "{\nLAB_00027970:\n    __size = 8;\n    local_20 = 1;\n    param_4 = (uint *)0x0;\n  }" ({ "{") (labeled_statement "LAB_00027970:\n    __size = 8;" (statement_identifier "LAB_00027970") (: ":") (expression_statement "__size = 8;" (assignment_expression "__size = 8" (identifier "__size") (= "=") (number_literal "8")) (; ";"))) (expression_statement "local_20 = 1;" (assignment_expression "local_20 = 1" (identifier "local_20") (= "=") (number_literal "1")) (; ";")) (expression_statement "param_4 = (uint *)0x0;" (assignment_expression "param_4 = (uint *)0x0" (identifier "param_4") (= "=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (} "}")))) (expression_statement "__ptr = (int *)malloc(__size);" (assignment_expression "__ptr = (int *)malloc(__size)" (identifier "__ptr") (= "=") (cast_expression "(int *)malloc(__size)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "malloc(__size)" (identifier "malloc") (argument_list "(__size)" (( "(") (identifier "__size") () ")"))))) (; ";")) (if_statement "if (__ptr == (int *)0x0) {\n    return -2;\n  }" (if "if") (parenthesized_expression "(__ptr == (int *)0x0)" (( "(") (binary_expression "__ptr == (int *)0x0" (identifier "__ptr") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return -2;\n  }" ({ "{") (return_statement "return -2;" (return "return") (number_literal "-2") (; ";")) (} "}"))) (expression_statement "iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);" (assignment_expression "iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" (identifier "iVar5") (= "=") (call_expression "FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" (identifier "FUN_00022830") (argument_list "(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4)" (( "(") (identifier "uVar12") (, ",") (identifier "extraout_ECX") (, ",") (identifier "param_1") (, ",") (identifier "iVar10") (, ",") (identifier "param_3") (, ",") (identifier "local_20") (, ",") (identifier "__ptr") (, ",") (identifier "bVar4") () ")")))) (; ";")) (if_statement "if (iVar5 == 0) {\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }\n  else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }\n    iVar11 = *__ptr;\n    if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }\n  }" ({ "{") (if_statement "if (param_4 != (uint *)0x0) {\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }" (if "if") (parenthesized_expression "(param_4 != (uint *)0x0)" (( "(") (binary_expression "param_4 != (uint *)0x0" (identifier "param_4") (!= "!=") (cast_expression "(uint *)0x0" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;\n      uVar8 = local_20 + 1;\n      bVar4 = bVar3 & 3;\n      if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }\nLAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';\n      if (local_38 == '\0') goto LAB_00027836;\n    }" ({ "{") (expression_statement "bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;" (assignment_expression "bVar3 = *(byte *)(iVar11 + 0x1c) >> 1" (identifier "bVar3") (= "=") (binary_expression "*(byte *)(iVar11 + 0x1c) >> 1" (pointer_expression "*(byte *)(iVar11 + 0x1c)" (* "*") (cast_expression "(byte *)(iVar11 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x1c)" (( "(") (binary_expression "iVar11 + 0x1c" (identifier "iVar11") (+ "+") (number_literal "0x1c")) () ")")))) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "uVar8 = local_20 + 1;" (assignment_expression "uVar8 = local_20 + 1" (identifier "uVar8") (= "=") (binary_expression "local_20 + 1" (identifier "local_20") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "bVar4 = bVar3 & 3;" (assignment_expression "bVar4 = bVar3 & 3" (identifier "bVar4") (= "=") (binary_expression "bVar3 & 3" (identifier "bVar3") (& "&") (number_literal "3"))) (; ";")) (if_statement "if ((bVar3 & 3) == 0) {\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }\n      else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" (if "if") (parenthesized_expression "((bVar3 & 3) == 0)" (( "(") (binary_expression "(bVar3 & 3) == 0" (parenthesized_expression "(bVar3 & 3)" (( "(") (binary_expression "bVar3 & 3" (identifier "bVar3") (& "&") (number_literal "3")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        pvVar6 = malloc(uVar8 * 4);\n        param_4[1] = (uint)pvVar6;\n        if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }\nLAB_00027b3a:\n        local_38 = '\0';\n      }" ({ "{") (expression_statement "pvVar6 = malloc(uVar8 * 4);" (assignment_expression "pvVar6 = malloc(uVar8 * 4)" (identifier "pvVar6") (= "=") (call_expression "malloc(uVar8 * 4)" (identifier "malloc") (argument_list "(uVar8 * 4)" (( "(") (binary_expression "uVar8 * 4" (identifier "uVar8") (* "*") (number_literal "4")) () ")")))) (; ";")) (expression_statement "param_4[1] = (uint)pvVar6;" (assignment_expression "param_4[1] = (uint)pvVar6" (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(uint)pvVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "pvVar6"))) (; ";")) (if_statement "if (pvVar6 != (void *)0x0) {\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }" (if "if") (parenthesized_expression "(pvVar6 != (void *)0x0)" (( "(") (binary_expression "pvVar6 != (void *)0x0" (identifier "pvVar6") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          pvVar7 = malloc(uVar8 * 4);\n          param_4[2] = (uint)pvVar7;\n          if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }\n          free(pvVar6);\n        }" ({ "{") (expression_statement "pvVar7 = malloc(uVar8 * 4);" (assignment_expression "pvVar7 = malloc(uVar8 * 4)" (identifier "pvVar7") (= "=") (call_expression "malloc(uVar8 * 4)" (identifier "malloc") (argument_list "(uVar8 * 4)" (( "(") (binary_expression "uVar8 * 4" (identifier "uVar8") (* "*") (number_literal "4")) () ")")))) (; ";")) (expression_statement "param_4[2] = (uint)pvVar7;" (assignment_expression "param_4[2] = (uint)pvVar7" (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(uint)pvVar7" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "pvVar7"))) (; ";")) (if_statement "if (pvVar7 != (void *)0x0) {\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }" (if "if") (parenthesized_expression "(pvVar7 != (void *)0x0)" (( "(") (binary_expression "pvVar7 != (void *)0x0" (identifier "pvVar7") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            local_38 = '\x01';\n            *param_4 = uVar8;\n            goto LAB_000278a1;\n          }" ({ "{") (expression_statement "local_38 = '\x01';" (assignment_expression "local_38 = '\x01'" (identifier "local_38") (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (expression_statement "*param_4 = uVar8;" (assignment_expression "*param_4 = uVar8" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "uVar8")) (; ";")) (goto_statement "goto LAB_000278a1;" (goto "goto") (statement_identifier "LAB_000278a1") (; ";")) (} "}"))) (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" (identifier "free") (argument_list "(pvVar6)" (( "(") (identifier "pvVar6") () ")"))) (; ";")) (} "}"))) (labeled_statement "LAB_00027b3a:\n        local_38 = '\0';" (statement_identifier "LAB_00027b3a") (: ":") (expression_statement "local_38 = '\0';" (assignment_expression "local_38 = '\0'" (identifier "local_38") (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";"))) (} "}")) (else_clause "else {\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" (else "else") (compound_statement "{\n        if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }\nLAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }\n        if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }\n      }" ({ "{") (if_statement "if (bVar4 == 1) {\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }\n        else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" (if "if") (parenthesized_expression "(bVar4 == 1)" (( "(") (binary_expression "bVar4 == 1" (identifier "bVar4") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n          local_38 = '\x01';\n          if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }\n        }" ({ "{") (expression_statement "local_38 = '\x01';" (assignment_expression "local_38 = '\x01'" (identifier "local_38") (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (if_statement "if (*param_4 < uVar8) {\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }" (if "if") (parenthesized_expression "(*param_4 < uVar8)" (( "(") (binary_expression "*param_4 < uVar8" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (< "<") (identifier "uVar8")) () ")")) (compound_statement "{\n            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);\n            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;\n            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);\n            if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }\n            param_4[1] = (uint)pvVar6;\n            *param_4 = uVar8;\n            param_4[2] = (uint)pvVar7;\n          }" ({ "{") (expression_statement "pvVar6 = realloc((void *)param_4[1],uVar8 * 4);" (assignment_expression "pvVar6 = realloc((void *)param_4[1],uVar8 * 4)" (identifier "pvVar6") (= "=") (call_expression "realloc((void *)param_4[1],uVar8 * 4)" (identifier "realloc") (argument_list "((void *)param_4[1],uVar8 * 4)" (( "(") (cast_expression "(void *)param_4[1]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]"))) (, ",") (binary_expression "uVar8 * 4" (identifier "uVar8") (* "*") (number_literal "4")) () ")")))) (; ";")) (if_statement "if (pvVar6 == (void *)0x0) goto LAB_00027b3a;" (if "if") (parenthesized_expression "(pvVar6 == (void *)0x0)" (( "(") (binary_expression "pvVar6 == (void *)0x0" (identifier "pvVar6") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00027b3a;" (goto "goto") (statement_identifier "LAB_00027b3a") (; ";"))) (expression_statement "pvVar7 = realloc((void *)param_4[2],uVar8 * 4);" (assignment_expression "pvVar7 = realloc((void *)param_4[2],uVar8 * 4)" (identifier "pvVar7") (= "=") (call_expression "realloc((void *)param_4[2],uVar8 * 4)" (identifier "realloc") (argument_list "((void *)param_4[2],uVar8 * 4)" (( "(") (cast_expression "(void *)param_4[2]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]"))) (, ",") (binary_expression "uVar8 * 4" (identifier "uVar8") (* "*") (number_literal "4")) () ")")))) (; ";")) (if_statement "if (pvVar7 == (void *)0x0) {\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }" (if "if") (parenthesized_expression "(pvVar7 == (void *)0x0)" (( "(") (binary_expression "pvVar7 == (void *)0x0" (identifier "pvVar7") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n              free(pvVar6);\n              local_38 = '\0';\n              goto LAB_0002790b;\n            }" ({ "{") (expression_statement "free(pvVar6);" (call_expression "free(pvVar6)" (identifier "free") (argument_list "(pvVar6)" (( "(") (identifier "pvVar6") () ")"))) (; ";")) (expression_statement "local_38 = '\0';" (assignment_expression "local_38 = '\0'" (identifier "local_38") (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (goto_statement "goto LAB_0002790b;" (goto "goto") (statement_identifier "LAB_0002790b") (; ";")) (} "}"))) (expression_statement "param_4[1] = (uint)pvVar6;" (assignment_expression "param_4[1] = (uint)pvVar6" (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(uint)pvVar6" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "pvVar6"))) (; ";")) (expression_statement "*param_4 = uVar8;" (assignment_expression "*param_4 = uVar8" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (= "=") (identifier "uVar8")) (; ";")) (expression_statement "param_4[2] = (uint)pvVar7;" (assignment_expression "param_4[2] = (uint)pvVar7" (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(uint)pvVar7" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "pvVar7"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" (else "else") (compound_statement "{\n          if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }\n          local_38 = '\x02';\n        }" ({ "{") (if_statement "if (bVar4 != 2) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" (if "if") (parenthesized_expression "(bVar4 != 2)" (( "(") (binary_expression "bVar4 != 2" (identifier "bVar4") (!= "!=") (number_literal "2")) () ")")) (compound_statement "{\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" ({ "{") (expression_statement "__assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9))" (identifier "__assert_fail") (argument_list "((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,\n                          (char *)(unaff_EDI + 0x3af9))" (( "(") (cast_expression "(char *)(unaff_EDI + 0x3619)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x3619)" (( "(") (binary_expression "unaff_EDI + 0x3619" (identifier "unaff_EDI") (+ "+") (number_literal "0x3619")) () ")"))) (, ",") (cast_expression "(char *)(unaff_EDI + 0x35ab)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x35ab)" (( "(") (binary_expression "unaff_EDI + 0x35ab" (identifier "unaff_EDI") (+ "+") (number_literal "0x35ab")) () ")"))) (, ",") (number_literal "0x1f8") (, ",") (cast_expression "(char *)(unaff_EDI + 0x3af9)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x3af9)" (( "(") (binary_expression "unaff_EDI + 0x3af9" (identifier "unaff_EDI") (+ "+") (number_literal "0x3af9")) () ")"))) () ")"))) (; ";")) (} "}"))) (if_statement "if (*param_4 < local_20) {\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" (if "if") (parenthesized_expression "(*param_4 < local_20)" (( "(") (binary_expression "*param_4 < local_20" (pointer_expression "*param_4" (* "*") (identifier "param_4")) (< "<") (identifier "local_20")) () ")")) (compound_statement "{\n                    \n            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));\n          }" ({ "{") (expression_statement "__assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9))" (identifier "__assert_fail") (argument_list "((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,\n                          (char *)(unaff_EDI + 0x3af9))" (( "(") (cast_expression "(char *)(unaff_EDI + 0x3636)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x3636)" (( "(") (binary_expression "unaff_EDI + 0x3636" (identifier "unaff_EDI") (+ "+") (number_literal "0x3636")) () ")"))) (, ",") (cast_expression "(char *)(unaff_EDI + 0x35ab)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x35ab)" (( "(") (binary_expression "unaff_EDI + 0x35ab" (identifier "unaff_EDI") (+ "+") (number_literal "0x35ab")) () ")"))) (, ",") (number_literal "0x1fa") (, ",") (cast_expression "(char *)(unaff_EDI + 0x3af9)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x3af9)" (( "(") (binary_expression "unaff_EDI + 0x3af9" (identifier "unaff_EDI") (+ "+") (number_literal "0x3af9")) () ")"))) () ")"))) (; ";")) (} "}"))) (expression_statement "local_38 = '\x02';" (assignment_expression "local_38 = '\x02'" (identifier "local_38") (= "=") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'"))) (; ";")) (} "}")))) (labeled_statement "LAB_000278a1:\n        if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" (statement_identifier "LAB_000278a1") (: ":") (if_statement "if ((int)local_20 < 1) {\n          uVar8 = 0;\n        }\n        else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" (if "if") (parenthesized_expression "((int)local_20 < 1)" (( "(") (binary_expression "(int)local_20 < 1" (cast_expression "(int)local_20" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_20")) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n          uVar8 = 0;\n        }" ({ "{") (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" (else "else") (compound_statement "{\n          uVar1 = param_4[1];\n          uVar2 = param_4[2];\n          uVar8 = 0;\n          do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);\n        }" ({ "{") (expression_statement "uVar1 = param_4[1];" (assignment_expression "uVar1 = param_4[1]" (identifier "uVar1") (= "=") (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar2 = param_4[2];" (assignment_expression "uVar2 = param_4[2]" (identifier "uVar2") (= "=") (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          } while (local_20 != uVar8);" (do "do") (compound_statement "{\n            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];\n            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];\n            uVar8 = uVar8 + 1;\n          }" ({ "{") (expression_statement "*(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];" (assignment_expression "*(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2]" (pointer_expression "*(int *)(uVar1 + uVar8 * 4)" (* "*") (cast_expression "(int *)(uVar1 + uVar8 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar1 + uVar8 * 4)" (( "(") (binary_expression "uVar1 + uVar8 * 4" (identifier "uVar1") (+ "+") (binary_expression "uVar8 * 4" (identifier "uVar8") (* "*") (number_literal "4"))) () ")")))) (= "=") (subscript_expression "__ptr[uVar8 * 2]" (identifier "__ptr") ([ "[") (binary_expression "uVar8 * 2" (identifier "uVar8") (* "*") (number_literal "2")) (] "]"))) (; ";")) (expression_statement "*(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];" (assignment_expression "*(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1]" (pointer_expression "*(int *)(uVar2 + uVar8 * 4)" (* "*") (cast_expression "(int *)(uVar2 + uVar8 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar2 + uVar8 * 4)" (( "(") (binary_expression "uVar2 + uVar8 * 4" (identifier "uVar2") (+ "+") (binary_expression "uVar8 * 4" (identifier "uVar8") (* "*") (number_literal "4"))) () ")")))) (= "=") (subscript_expression "__ptr[uVar8 * 2 + 1]" (identifier "__ptr") ([ "[") (binary_expression "uVar8 * 2 + 1" (binary_expression "uVar8 * 2" (identifier "uVar8") (* "*") (number_literal "2")) (+ "+") (number_literal "1")) (] "]"))) (; ";")) (expression_statement "uVar8 = uVar8 + 1;" (assignment_expression "uVar8 = uVar8 + 1" (identifier "uVar8") (= "=") (binary_expression "uVar8 + 1" (identifier "uVar8") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_20 != uVar8)" (( "(") (binary_expression "local_20 != uVar8" (identifier "local_20") (!= "!=") (identifier "uVar8")) () ")")) (; ";")) (} "}"))))) (if_statement "if (uVar8 < *param_4) {\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }" (if "if") (parenthesized_expression "(uVar8 < *param_4)" (( "(") (binary_expression "uVar8 < *param_4" (identifier "uVar8") (< "<") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) () ")")) (compound_statement "{\n          uVar1 = param_4[2];\n          uVar2 = param_4[1];\n          do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);\n        }" ({ "{") (expression_statement "uVar1 = param_4[2];" (assignment_expression "uVar1 = param_4[2]" (identifier "uVar1") (= "=") (subscript_expression "param_4[2]" (identifier "param_4") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "uVar2 = param_4[1];" (assignment_expression "uVar2 = param_4[1]" (identifier "uVar2") (= "=") (subscript_expression "param_4[1]" (identifier "param_4") ([ "[") (number_literal "1") (] "]"))) (; ";")) (do_statement "do {\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          } while (uVar9 < *param_4);" (do "do") (compound_statement "{\n            uVar9 = uVar8 + 1;\n            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;\n            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;\n            uVar8 = uVar9;\n          }" ({ "{") (expression_statement "uVar9 = uVar8 + 1;" (assignment_expression "uVar9 = uVar8 + 1" (identifier "uVar9") (= "=") (binary_expression "uVar8 + 1" (identifier "uVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;" (assignment_expression "*(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff" (pointer_expression "*(undefined4 *)(uVar1 + uVar8 * 4)" (* "*") (cast_expression "(undefined4 *)(uVar1 + uVar8 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar1 + uVar8 * 4)" (( "(") (binary_expression "uVar1 + uVar8 * 4" (identifier "uVar1") (+ "+") (binary_expression "uVar8 * 4" (identifier "uVar8") (* "*") (number_literal "4"))) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "*(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;" (assignment_expression "*(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff" (pointer_expression "*(undefined4 *)(uVar2 + uVar8 * 4)" (* "*") (cast_expression "(undefined4 *)(uVar2 + uVar8 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar2 + uVar8 * 4)" (( "(") (binary_expression "uVar2 + uVar8 * 4" (identifier "uVar2") (+ "+") (binary_expression "uVar8 * 4" (identifier "uVar8") (* "*") (number_literal "4"))) () ")")))) (= "=") (number_literal "0xffffffff")) (; ";")) (expression_statement "uVar8 = uVar9;" (assignment_expression "uVar8 = uVar9" (identifier "uVar8") (= "=") (identifier "uVar9")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar9 < *param_4)" (( "(") (binary_expression "uVar9 < *param_4" (identifier "uVar9") (< "<") (pointer_expression "*param_4" (* "*") (identifier "param_4"))) () ")")) (; ";")) (} "}"))) (} "}")))) (labeled_statement "LAB_0002790b:\n      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';" (statement_identifier "LAB_0002790b") (: ":") (expression_statement "*(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';" (assignment_expression "*(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02'" (pointer_expression "*(byte *)(iVar11 + 0x1c)" (* "*") (cast_expression "(byte *)(iVar11 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x1c)" (( "(") (binary_expression "iVar11 + 0x1c" (identifier "iVar11") (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (binary_expression "*(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02'" (binary_expression "*(byte *)(iVar11 + 0x1c) & 0xf9" (pointer_expression "*(byte *)(iVar11 + 0x1c)" (* "*") (cast_expression "(byte *)(iVar11 + 0x1c)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + 0x1c)" (( "(") (binary_expression "iVar11 + 0x1c" (identifier "iVar11") (+ "+") (number_literal "0x1c")) () ")")))) (& "&") (number_literal "0xf9")) (| "|") (binary_expression "local_38 * '\x02'" (identifier "local_38") (* "*") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'"))))) (; ";"))) (if_statement "if (local_38 == '\0') goto LAB_00027836;" (if "if") (parenthesized_expression "(local_38 == '\0')" (( "(") (binary_expression "local_38 == '\0'" (identifier "local_38") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (goto_statement "goto LAB_00027836;" (goto "goto") (statement_identifier "LAB_00027836") (; ";"))) (} "}"))) (expression_statement "iVar11 = *__ptr;" (assignment_expression "iVar11 = *__ptr" (identifier "iVar11") (= "=") (pointer_expression "*__ptr" (* "*") (identifier "__ptr"))) (; ";")) (if_statement "if (param_5 != '\0') {\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }" (if "if") (parenthesized_expression "(param_5 != '\0')" (( "(") (binary_expression "param_5 != '\0'" (identifier "param_5") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }\n      iVar11 = __ptr[1] - iVar11;\n    }" ({ "{") (if_statement "if (param_1 != iVar11) {\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }" (if "if") (parenthesized_expression "(param_1 != iVar11)" (( "(") (binary_expression "param_1 != iVar11" (identifier "param_1") (!= "!=") (identifier "iVar11")) () ")")) (compound_statement "{\n                    \n        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));\n      }" ({ "{") (expression_statement "__assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09));" (call_expression "__assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09))" (identifier "__assert_fail") (argument_list "((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,\n                      (char *)(unaff_EDI + 0x3b09))" (( "(") (cast_expression "(char *)(unaff_EDI + 0x364e)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x364e)" (( "(") (binary_expression "unaff_EDI + 0x364e" (identifier "unaff_EDI") (+ "+") (number_literal "0x364e")) () ")"))) (, ",") (cast_expression "(char *)(unaff_EDI + 0x35ab)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x35ab)" (( "(") (binary_expression "unaff_EDI + 0x35ab" (identifier "unaff_EDI") (+ "+") (number_literal "0x35ab")) () ")"))) (, ",") (number_literal "0x1bd") (, ",") (cast_expression "(char *)(unaff_EDI + 0x3b09)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EDI + 0x3b09)" (( "(") (binary_expression "unaff_EDI + 0x3b09" (identifier "unaff_EDI") (+ "+") (number_literal "0x3b09")) () ")"))) () ")"))) (; ";")) (} "}"))) (expression_statement "iVar11 = __ptr[1] - iVar11;" (assignment_expression "iVar11 = __ptr[1] - iVar11" (identifier "iVar11") (= "=") (binary_expression "__ptr[1] - iVar11" (subscript_expression "__ptr[1]" (identifier "__ptr") ([ "[") (number_literal "1") (] "]")) (- "-") (identifier "iVar11"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" (else "else") (compound_statement "{\n    iVar11 = -1;\n    if (iVar5 == 1) goto LAB_0002783b;\nLAB_00027836:\n    iVar11 = -2;\n  }" ({ "{") (expression_statement "iVar11 = -1;" (assignment_expression "iVar11 = -1" (identifier "iVar11") (= "=") (number_literal "-1")) (; ";")) (if_statement "if (iVar5 == 1) goto LAB_0002783b;" (if "if") (parenthesized_expression "(iVar5 == 1)" (( "(") (binary_expression "iVar5 == 1" (identifier "iVar5") (== "==") (number_literal "1")) () ")")) (goto_statement "goto LAB_0002783b;" (goto "goto") (statement_identifier "LAB_0002783b") (; ";"))) (labeled_statement "LAB_00027836:\n    iVar11 = -2;" (statement_identifier "LAB_00027836") (: ":") (expression_statement "iVar11 = -2;" (assignment_expression "iVar11 = -2" (identifier "iVar11") (= "=") (number_literal "-2")) (; ";"))) (} "}")))) (labeled_statement "LAB_0002783b:\n  free(__ptr);" (statement_identifier "LAB_0002783b") (: ":") (expression_statement "free(__ptr);" (call_expression "free(__ptr)" (identifier "free") (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";"))) (return_statement "return iVar11;" (return "return") (identifier "iVar11") (; ";")) (} "}")))

type_1 function_1(type_2 *var_25,char *var_2,type_3 length,type_3 var_5,type_1 range,
                       type_3 stop,type_4 *regs,type_5 ret_len)

{
  char *pcVar1;
  int var_20;
  int var_21;
  type_6 var_3;
  type_6 var_16;
  type_7 **dfa;
  type_8 *bufp_00;
  size_t __size;
  type_9 *var_8;
  type_10 var_10;
  void *var_13;
  void *var_14;
  char *length_00;
  type_11 var_12;
  type_11 var_22;
  char *last_start;
  int var_19;
  type_2 *var_26;
  type_12 uVar12;
  char var_23;
  char var_24;
  type_11 local_24;
  type_11 var_6;
  
  uVar12 = var_1();
  bufp_00 = (type_8 *)uVar12;
  pcVar1 = var_2 + (int)&var_25->buffer;
  if (((int)var_25 < 0) || ((int)length_00 < (int)var_25)) {
    return -1;
  }
  last_start = length_00;
  if ((((int)length_00 < (int)pcVar1) || ((-1 < (int)var_2 && ((int)pcVar1 < (int)var_25)))) ||
     ((-1 < (int)pcVar1 && ((last_start = pcVar1, -1 < (int)var_2 || ((int)pcVar1 < (int)var_25))))))
  {
    var_3 = bufp_00->field_0x1c;
    local_24 = var_3 >> 5 & 3;
    if (((int)var_25 < (int)last_start) && ((bufp_00->fastmap != (char *)0x0 && ((var_3 & 8) == 0))))
    {
      var_4(bufp_00);
      var_3 = bufp_00->field_0x1c;
    }
  }
  else {
    var_3 = bufp_00->field_0x1c;
    last_start = (char *)0x0;
    local_24 = var_3 >> 5 & 3;
  }
  if (((var_3 & 0x10) == 0) && (var_5 != 0)) {
    if (((var_3 & 6) == 4) && (var_6 = *(type_11 *)var_5, var_6 <= bufp_00->re_nsub)) {
      if ((int)var_6 < 1) goto LAB_00027970;
    }
    else {
      var_6 = bufp_00->re_nsub + 1;
    }
    __size = var_6 << 3;
  }
  else {
LAB_00027970:
    __size = 8;
    var_6 = 1;
    var_5 = 0;
  }
  var_8 = (type_9 *)var_7(__size);
  if (var_8 == (type_9 *)0x0) {
    return -2;
  }
  var_10 = var_9(bufp_00,(char *)((type_13)uVar12 >> 0x20),(type_3)length_00,(type_3)var_25,
                             (type_3)last_start,length,var_6,var_8,local_24);
  if (var_10 == var_11) {
    if (var_5 != 0) {
      var_3 = (type_6)bufp_00->field_0x1c >> 1;
      var_12 = var_6 + 1;
      var_16 = var_3 & 3;
      if ((var_3 & 3) == 0) {
        var_13 = var_7(var_12 * 4);
        *(void **)(var_5 + 4) = var_13;
        if (var_13 != (void *)0x0) {
          var_14 = var_7(var_12 * 4);
          *(void **)(var_5 + 8) = var_14;
          if (var_14 != (void *)0x0) {
            var_23 = '\x01';
            *(type_11 *)var_5 = var_12;
            goto LAB_000278a1;
          }
          var_15(var_13);
        }
LAB_00027b3a:
        var_23 = '\0';
      }
      else {
        if (var_16 == 1) {
          var_23 = '\x01';
          if (*(type_11 *)var_5 < var_12) {
            var_13 = var_17(*(void **)(var_5 + 4),var_12 * 4);
            if (var_13 == (void *)0x0) goto LAB_00027b3a;
            var_14 = var_17(*(void **)(var_5 + 8),var_12 * 4);
            if (var_14 == (void *)0x0) {
              var_15(var_13);
              var_23 = '\0';
              goto LAB_0002790b;
            }
            *(void **)(var_5 + 4) = var_13;
            *(type_11 *)var_5 = var_12;
            *(void **)(var_5 + 8) = var_14;
          }
        }
        else {
          if (var_16 != 2) {
                    /* WARNING: Subroutine does not return */
            var_18((char *)(var_19 + 0x3619),(char *)(var_19 + 0x35ab),0x1f8,
                          (char *)(var_19 + 0x3af9));
          }
          if (*(type_11 *)var_5 < var_6) {
                    /* WARNING: Subroutine does not return */
            var_18((char *)(var_19 + 0x3636),(char *)(var_19 + 0x35ab),0x1fa,
                          (char *)(var_19 + 0x3af9));
          }
          var_23 = '\x02';
        }
LAB_000278a1:
        if ((int)var_6 < 1) {
          var_12 = 0;
        }
        else {
          var_20 = *(int *)(var_5 + 4);
          var_21 = *(int *)(var_5 + 8);
          var_12 = 0;
          do {
            *(type_1 *)(var_20 + var_12 * 4) = var_8[var_12].rm_so;
            *(type_1 *)(var_21 + var_12 * 4) = var_8[var_12].rm_eo;
            var_12 = var_12 + 1;
          } while (var_6 != var_12);
        }
        if (var_12 < *(type_11 *)var_5) {
          var_20 = *(int *)(var_5 + 8);
          var_21 = *(int *)(var_5 + 4);
          do {
            var_22 = var_12 + 1;
            *(type_14 *)(var_20 + var_12 * 4) = 0xffffffff;
            *(type_14 *)(var_21 + var_12 * 4) = 0xffffffff;
            var_12 = var_22;
          } while (var_22 < *(type_11 *)var_5);
        }
      }
LAB_0002790b:
      bufp_00->field_0x1c = bufp_00->field_0x1c & 0xf9 | var_23 * '\x02';
      if (var_23 == '\0') goto LAB_00027836;
    }
    var_24 = (char)range;
    var_26 = (type_2 *)var_8->rm_so;
    if (var_24 != '\0') {
      if (var_25 != var_26) {
                    /* WARNING: Subroutine does not return */
        var_18((char *)(var_19 + 0x364e),(char *)(var_19 + 0x35ab),0x1bd,
                      (char *)(var_19 + 0x3b09));
      }
      var_26 = (type_2 *)(var_8->rm_eo - (int)var_26);
    }
  }
  else {
    var_26 = (type_2 *)0xffffffff;
    if (var_10 == var_27) goto LAB_0002783b;
LAB_00027836:
    var_26 = (type_2 *)0xfffffffe;
  }
LAB_0002783b:
  var_15(var_8);
  return (type_1)var_26;
}


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

int MASKED(int param_1,int param_2,undefined4 param_3,uint *param_4,char param_5)

{
  uint uVar1;
  uint uVar2;
  byte bVar3;
  byte bVar4;
  size_t __size;
  int *__ptr;
  int iVar5;
  void *pvVar6;
  void *pvVar7;
  int extraout_ECX;
  uint uVar8;
  uint uVar9;
  int iVar10;
  int unaff_EDI;
  int iVar11;
  undefined8 uVar12;
  char local_38;
  uint local_20;
  
  uVar12 = FUN_000280ee();
  iVar11 = (int)uVar12;
  iVar5 = param_1 + param_2;
  if ((param_1 < 0) || (extraout_ECX < param_1)) {
    return -1;
  }
  iVar10 = extraout_ECX;
  if (((extraout_ECX < iVar5) || ((-1 < param_2 && (iVar5 < param_1)))) ||
     ((-1 < iVar5 && ((iVar10 = iVar5, -1 < param_2 || (iVar5 < param_1)))))) {
    bVar3 = *(byte *)(iVar11 + 0x1c);
    bVar4 = bVar3 >> 5 & 3;
    if ((param_1 < iVar10) && ((*(int *)(iVar11 + 0x10) != 0 && ((bVar3 & 8) == 0)))) {
      FUN_00027660(iVar11);
      bVar3 = *(byte *)(iVar11 + 0x1c);
    }
  }
  else {
    bVar3 = *(byte *)(iVar11 + 0x1c);
    iVar10 = 0;
    bVar4 = bVar3 >> 5 & 3;
  }
  if (((bVar3 & 0x10) == 0) && (param_4 != (uint *)0x0)) {
    if (((bVar3 & 6) == 4) && (local_20 = *param_4, local_20 <= *(uint *)(iVar11 + 0x18))) {
      if ((int)local_20 < 1) goto LAB_00027970;
    }
    else {
      local_20 = *(uint *)(iVar11 + 0x18) + 1;
    }
    __size = local_20 << 3;
  }
  else {
LAB_00027970:
    __size = 8;
    local_20 = 1;
    param_4 = (uint *)0x0;
  }
  __ptr = (int *)malloc(__size);
  if (__ptr == (int *)0x0) {
    return -2;
  }
  iVar5 = FUN_00022830(uVar12,extraout_ECX,param_1,iVar10,param_3,local_20,__ptr,bVar4);
  if (iVar5 == 0) {
    if (param_4 != (uint *)0x0) {
      bVar3 = *(byte *)(iVar11 + 0x1c) >> 1;
      uVar8 = local_20 + 1;
      bVar4 = bVar3 & 3;
      if ((bVar3 & 3) == 0) {
        pvVar6 = malloc(uVar8 * 4);
        param_4[1] = (uint)pvVar6;
        if (pvVar6 != (void *)0x0) {
          pvVar7 = malloc(uVar8 * 4);
          param_4[2] = (uint)pvVar7;
          if (pvVar7 != (void *)0x0) {
            local_38 = '\x01';
            *param_4 = uVar8;
            goto LAB_000278a1;
          }
          free(pvVar6);
        }
LAB_00027b3a:
        local_38 = '\0';
      }
      else {
        if (bVar4 == 1) {
          local_38 = '\x01';
          if (*param_4 < uVar8) {
            pvVar6 = realloc((void *)param_4[1],uVar8 * 4);
            if (pvVar6 == (void *)0x0) goto LAB_00027b3a;
            pvVar7 = realloc((void *)param_4[2],uVar8 * 4);
            if (pvVar7 == (void *)0x0) {
              free(pvVar6);
              local_38 = '\0';
              goto LAB_0002790b;
            }
            param_4[1] = (uint)pvVar6;
            *param_4 = uVar8;
            param_4[2] = (uint)pvVar7;
          }
        }
        else {
          if (bVar4 != 2) {
                    /* WARNING: Subroutine does not return */
            __assert_fail((char *)(unaff_EDI + 0x3619),(char *)(unaff_EDI + 0x35ab),0x1f8,
                          (char *)(unaff_EDI + 0x3af9));
          }
          if (*param_4 < local_20) {
                    /* WARNING: Subroutine does not return */
            __assert_fail((char *)(unaff_EDI + 0x3636),(char *)(unaff_EDI + 0x35ab),0x1fa,
                          (char *)(unaff_EDI + 0x3af9));
          }
          local_38 = '\x02';
        }
LAB_000278a1:
        if ((int)local_20 < 1) {
          uVar8 = 0;
        }
        else {
          uVar1 = param_4[1];
          uVar2 = param_4[2];
          uVar8 = 0;
          do {
            *(int *)(uVar1 + uVar8 * 4) = __ptr[uVar8 * 2];
            *(int *)(uVar2 + uVar8 * 4) = __ptr[uVar8 * 2 + 1];
            uVar8 = uVar8 + 1;
          } while (local_20 != uVar8);
        }
        if (uVar8 < *param_4) {
          uVar1 = param_4[2];
          uVar2 = param_4[1];
          do {
            uVar9 = uVar8 + 1;
            *(undefined4 *)(uVar1 + uVar8 * 4) = 0xffffffff;
            *(undefined4 *)(uVar2 + uVar8 * 4) = 0xffffffff;
            uVar8 = uVar9;
          } while (uVar9 < *param_4);
        }
      }
LAB_0002790b:
      *(byte *)(iVar11 + 0x1c) = *(byte *)(iVar11 + 0x1c) & 0xf9 | local_38 * '\x02';
      if (local_38 == '\0') goto LAB_00027836;
    }
    iVar11 = *__ptr;
    if (param_5 != '\0') {
      if (param_1 != iVar11) {
                    /* WARNING: Subroutine does not return */
        __assert_fail((char *)(unaff_EDI + 0x364e),(char *)(unaff_EDI + 0x35ab),0x1bd,
                      (char *)(unaff_EDI + 0x3b09));
      }
      iVar11 = __ptr[1] - iVar11;
    }
  }
  else {
    iVar11 = -1;
    if (iVar5 == 1) goto LAB_0002783b;
LAB_00027836:
    iVar11 = -2;
  }
LAB_0002783b:
  free(__ptr);
  return iVar11;
}

