
dwarf_vma read_leb128(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)

{
  bool bVar1;
  uint uVar2;
  byte bVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  byte local_1d;
  uint local_1c;
  uint local_18;
  
  if (data < end) {
    uVar4 = 0;
    local_1d = *data;
    uVar5 = (uint)local_1d;
    uVar2 = uVar5 & 0x7f;
    if (-1 < (char)local_1d) {
      bVar1 = true;
      local_1c = 7;
      local_18 = 1;
      goto LAB_0004fab2;
    }
    local_18 = 1;
    local_1c = 7;
    do {
      if (local_18 == (int)end - (int)data) {
        bVar1 = true;
        uVar5 = (uint)local_1d;
        goto LAB_0004fab2;
      }
      local_1d = data[local_18];
      local_18 = local_18 + 1;
      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);
      uVar7 = uVar6;
      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);
      if ((local_1c & 0x20) != 0) {
        uVar7 = 0;
        uVar5 = uVar6;
      }
      local_1c = local_1c + 7;
      uVar4 = uVar4 | uVar5;
      uVar2 = uVar2 | uVar7;
      if (-1 < (char)local_1d) {
        uVar5 = (uint)local_1d;
        bVar1 = local_1c < 0x40;
        goto LAB_0004fab2;
      }
    } while (local_18 != 10);
    uVar5 = (uint)local_1d;
    if (length_return == (uint *)0x0) goto LAB_0004fa97;
    bVar1 = local_1c < 0x40;
LAB_0004fa57:
    bVar3 = (byte)local_1c;
    *length_return = local_18;
  }
  else {
    bVar1 = true;
    uVar5 = 0;
    local_1c = 0;
    uVar2 = 0;
    local_18 = 0;
    uVar4 = 0;
LAB_0004fab2:
    bVar3 = (byte)local_1c;
    if (length_return != (uint *)0x0) goto LAB_0004fa57;
  }
  if (((sign != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {
    uVar6 = -1 << (bVar3 & 0x1f);
    uVar7 = uVar6;
    uVar5 = 0xffffffff;
    if ((bVar3 & 0x20) != 0) {
      uVar7 = 0;
      uVar5 = uVar6;
    }
    uVar4 = uVar4 | uVar5;
    uVar2 = uVar2 | uVar7;
  }
LAB_0004fa97:
  return CONCAT44(uVar4,uVar2);
}



undefined8 FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)

{
  bool bVar1;
  uint uVar2;
  byte bVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  byte local_1d;
  uint local_1c;
  int local_18;
  
  if (param_1 < param_4) {
    uVar4 = 0;
    local_1d = *param_1;
    uVar5 = (uint)local_1d;
    uVar2 = uVar5 & 0x7f;
    if (-1 < (char)local_1d) {
      bVar1 = true;
      local_1c = 7;
      local_18 = 1;
      goto LAB_0004fab2;
    }
    local_18 = 1;
    local_1c = 7;
    do {
      if (local_18 == (int)param_4 - (int)param_1) {
        bVar1 = true;
        uVar5 = (uint)local_1d;
        goto LAB_0004fab2;
      }
      local_1d = param_1[local_18];
      local_18 = local_18 + 1;
      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);
      uVar7 = uVar6;
      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);
      if ((local_1c & 0x20) != 0) {
        uVar7 = 0;
        uVar5 = uVar6;
      }
      local_1c = local_1c + 7;
      uVar4 = uVar4 | uVar5;
      uVar2 = uVar2 | uVar7;
      if (-1 < (char)local_1d) {
        uVar5 = (uint)local_1d;
        bVar1 = local_1c < 0x40;
        goto LAB_0004fab2;
      }
    } while (local_18 != 10);
    uVar5 = (uint)local_1d;
    if (param_2 == (int *)0x0) goto LAB_0004fa97;
    bVar1 = local_1c < 0x40;
LAB_0004fa57:
    bVar3 = (byte)local_1c;
    *param_2 = local_18;
  }
  else {
    bVar1 = true;
    uVar5 = 0;
    local_1c = 0;
    uVar2 = 0;
    local_18 = 0;
    uVar4 = 0;
LAB_0004fab2:
    bVar3 = (byte)local_1c;
    if (param_2 != (int *)0x0) goto LAB_0004fa57;
  }
  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {
    uVar6 = -1 << (bVar3 & 0x1f);
    uVar7 = uVar6;
    uVar5 = 0xffffffff;
    if ((bVar3 & 0x20) != 0) {
      uVar7 = 0;
      uVar5 = uVar6;
    }
    uVar4 = uVar4 | uVar5;
    uVar2 = uVar2 | uVar7;
  }
LAB_0004fa97:
  return CONCAT44(uVar4,uVar2);
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x14
MOV ECX,dword ptr [ESP + 0x34]
CMP dword ptr [ESP + 0x28],ECX
JNC 0x0004fad7
MOV EAX,dword ptr [ESP + 0x28]
XOR EDX,EDX
MOVZX EBP,byte ptr [EAX]
MOV EAX,EBP
MOV EBX,EBP
AND EAX,0x7f
TEST BL,BL
JNS 0x0004faee
SUB ECX,dword ptr [ESP + 0x28]
MOV byte ptr [ESP + 0x7],BL
MOV ESI,0x1
MOV dword ptr [ESP + 0xc],ECX
MOV ECX,0x7
MOV EBP,ESI
MOV dword ptr [ESP + 0x8],ECX
LEA ESI,[ESI]
CMP EBP,dword ptr [ESP + 0xc]
JZ 0x0004faa0
MOV EDI,dword ptr [ESP + 0x28]
MOVZX EBX,byte ptr [EDI + EBP*0x1]
XOR EDI,EDI
ADD EBP,0x1
MOV ECX,EBX
MOV byte ptr [ESP + 0x7],BL
XOR EBX,EBX
AND ECX,0x7f
MOV ESI,ECX
MOVZX ECX,byte ptr [ESP + 0x8]
SHLD EDI,ESI,CL
SHL ESI,CL
TEST CL,0x20
MOV ECX,EAX
CMOVNZ EDI,ESI
MOV EAX,EDX
CMOVNZ ESI,EBX
ADD dword ptr [ESP + 0x8],0x7
OR EAX,EDI
OR ECX,ESI
CMP byte ptr [ESP + 0x7],0x0
MOV EBX,EAX
MOV EAX,ECX
MOV EDX,EBX
JNS 0x0004fac0
CMP EBP,0xa
JNZ 0x0004f9e0
MOV EBX,dword ptr [ESP + 0x2c]
MOV ECX,dword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0xc],EBP
MOVZX EBP,byte ptr [ESP + 0x7]
TEST EBX,EBX
JZ 0x0004fa97
CMP ECX,0x3f
SETBE BL
MOV ESI,EBX
MOV EDI,dword ptr [ESP + 0x2c]
MOV EBX,dword ptr [ESP + 0xc]
MOV dword ptr [EDI],EBX
MOV EBX,dword ptr [ESP + 0x30]
TEST EBX,EBX
JZ 0x0004fa97
MOV EBX,ESI
TEST BL,BL
JZ 0x0004fa97
AND EBP,0x40
JZ 0x0004fa97
MOV ESI,0xffffffff
XOR EBP,EBP
MOV EDI,0xffffffff
MOV EBX,EAX
SHL ESI,CL
TEST CL,0x20
MOV ECX,EDX
CMOVNZ EDI,ESI
CMOVNZ ESI,EBP
OR ECX,EDI
OR EBX,ESI
MOV EAX,EBX
MOV EDX,ECX
ADD ESP,0x14
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV dword ptr [ESP + 0xc],EBP
MOV ECX,dword ptr [ESP + 0x8]
MOV ESI,0x1
MOVZX EBP,byte ptr [ESP + 0x7]
MOV EDI,dword ptr [ESP + 0x2c]
TEST EDI,EDI
JNZ 0x0004fa57
JMP 0x0004fa61
MOV ECX,dword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0xc],EBP
MOVZX EBP,byte ptr [ESP + 0x7]
CMP ECX,0x3f
SETBE BL
MOV ESI,EBX
JMP 0x0004fab2
MOV ESI,0x1
XOR EBP,EBP
XOR ECX,ECX
XOR EAX,EAX
MOV dword ptr [ESP + 0xc],0x0
XOR EDX,EDX
JMP 0x0004fab2
MOV ESI,0x1
MOV ECX,0x7
MOV dword ptr [ESP + 0xc],0x1
JMP 0x0004fab2
(translation_unit "undefined8 FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  int local_18;\n  \n  if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }\n  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}\n\n" (function_definition "undefined8 FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  int local_18;\n  \n  if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }\n  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}" type_identifier (function_declarator "FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)" identifier (parameter_list "(byte *param_1,int *param_2,int param_3,byte *param_4)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "byte *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  int local_18;\n  \n  if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }\n  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "byte local_1d;" type_identifier identifier ;) (declaration "uint local_1c;" type_identifier identifier ;) (declaration "int local_18;" primitive_type identifier ;) (if_statement "if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "local_1d = *param_1;" (assignment_expression "local_1d = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar2 = uVar5 & 0x7f;" (assignment_expression "uVar2 = uVar5 & 0x7f" identifier = (binary_expression "uVar5 & 0x7f" identifier & number_literal)) ;) (if_statement "if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }" if (parenthesized_expression "(-1 < (char)local_1d)" ( (binary_expression "-1 < (char)local_1d" number_literal < (cast_expression "(char)local_1d" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "local_1c = 7;" (assignment_expression "local_1c = 7" identifier = number_literal) ;) (expression_statement "local_18 = 1;" (assignment_expression "local_18 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) (expression_statement "local_18 = 1;" (assignment_expression "local_18 = 1" identifier = number_literal) ;) (expression_statement "local_1c = 7;" (assignment_expression "local_1c = 7" identifier = number_literal) ;) (do_statement "do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);" do (compound_statement "{\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    }" { (if_statement "if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }" if (parenthesized_expression "(local_18 == (int)param_4 - (int)param_1)" ( (binary_expression "local_18 == (int)param_4 - (int)param_1" identifier == (binary_expression "(int)param_4 - (int)param_1" (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier))) )) (compound_statement "{\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) (expression_statement "local_1d = param_1[local_18];" (assignment_expression "local_1d = param_1[local_18]" identifier = (subscript_expression "param_1[local_18]" identifier [ identifier ])) ;) (expression_statement "local_18 = local_18 + 1;" (assignment_expression "local_18 = local_18 + 1" identifier = (binary_expression "local_18 + 1" identifier + number_literal)) ;) (expression_statement "uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);" (assignment_expression "uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f)" identifier = (binary_expression "(local_1d & 0x7f) << ((byte)local_1c & 0x1f)" (parenthesized_expression "(local_1d & 0x7f)" ( (binary_expression "local_1d & 0x7f" identifier & number_literal) )) << (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (expression_statement "uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);" (assignment_expression "uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" identifier = (binary_expression "0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (binary_expression "0 << ((byte)local_1c & 0x1f)" number_literal << (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) | (binary_expression "(local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (parenthesized_expression "(local_1d & 0x7f)" ( (binary_expression "local_1d & 0x7f" identifier & number_literal) )) >> (binary_expression "0x20 - ((byte)local_1c & 0x1f)" number_literal - (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))))) ;) (if_statement "if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" if (parenthesized_expression "((local_1c & 0x20) != 0)" ( (binary_expression "(local_1c & 0x20) != 0" (parenthesized_expression "(local_1c & 0x20)" ( (binary_expression "local_1c & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" identifier = identifier) ;) })) (expression_statement "local_1c = local_1c + 7;" (assignment_expression "local_1c = local_1c + 7" identifier = (binary_expression "local_1c + 7" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar4 | uVar5;" (assignment_expression "uVar4 = uVar4 | uVar5" identifier = (binary_expression "uVar4 | uVar5" identifier | identifier)) ;) (expression_statement "uVar2 = uVar2 | uVar7;" (assignment_expression "uVar2 = uVar2 | uVar7" identifier = (binary_expression "uVar2 | uVar7" identifier | identifier)) ;) (if_statement "if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }" if (parenthesized_expression "(-1 < (char)local_1d)" ( (binary_expression "-1 < (char)local_1d" number_literal < (cast_expression "(char)local_1d" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }" { (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "bVar1 = local_1c < 0x40;" (assignment_expression "bVar1 = local_1c < 0x40" identifier = (binary_expression "local_1c < 0x40" identifier < number_literal)) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) }) while (parenthesized_expression "(local_18 != 10)" ( (binary_expression "local_18 != 10" identifier != number_literal) )) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (param_2 == (int *)0x0) goto LAB_0004fa97;" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004fa97;" goto statement_identifier ;)) (expression_statement "bVar1 = local_1c < 0x40;" (assignment_expression "bVar1 = local_1c < 0x40" identifier = (binary_expression "local_1c < 0x40" identifier < number_literal)) ;) (labeled_statement "LAB_0004fa57:\n    bVar3 = (byte)local_1c;" statement_identifier : (expression_statement "bVar3 = (byte)local_1c;" (assignment_expression "bVar3 = (byte)local_1c" identifier = (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (expression_statement "*param_2 = local_18;" (assignment_expression "*param_2 = local_18" (pointer_expression "*param_2" * identifier) = identifier) ;) }) (else_clause "else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" else (compound_statement "{\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "local_1c = 0;" (assignment_expression "local_1c = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "local_18 = 0;" (assignment_expression "local_18 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0004fab2:\n    bVar3 = (byte)local_1c;" statement_identifier : (expression_statement "bVar3 = (byte)local_1c;" (assignment_expression "bVar3 = (byte)local_1c" identifier = (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (if_statement "if (param_2 != (int *)0x0) goto LAB_0004fa57;" if (parenthesized_expression "(param_2 != (int *)0x0)" ( (binary_expression "param_2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004fa57;" goto statement_identifier ;)) }))) (if_statement "if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }" if (parenthesized_expression "(((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0))" ( (binary_expression "((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)" (parenthesized_expression "((param_3 != 0) && (bVar1))" ( (binary_expression "(param_3 != 0) && (bVar1)" (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) && (parenthesized_expression "(bVar1)" ( identifier ))) )) && (parenthesized_expression "((uVar5 & 0x40) != 0)" ( (binary_expression "(uVar5 & 0x40) != 0" (parenthesized_expression "(uVar5 & 0x40)" ( (binary_expression "uVar5 & 0x40" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }" { (expression_statement "uVar6 = -1 << (bVar3 & 0x1f);" (assignment_expression "uVar6 = -1 << (bVar3 & 0x1f)" identifier = (binary_expression "-1 << (bVar3 & 0x1f)" number_literal << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (expression_statement "uVar5 = 0xffffffff;" (assignment_expression "uVar5 = 0xffffffff" identifier = number_literal) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" identifier = identifier) ;) })) (expression_statement "uVar4 = uVar4 | uVar5;" (assignment_expression "uVar4 = uVar4 | uVar5" identifier = (binary_expression "uVar4 | uVar5" identifier | identifier)) ;) (expression_statement "uVar2 = uVar2 | uVar7;" (assignment_expression "uVar2 = uVar2 | uVar7" identifier = (binary_expression "uVar2 | uVar7" identifier | identifier)) ;) })) (labeled_statement "LAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);" statement_identifier : (return_statement "return CONCAT44(uVar4,uVar2);" return (call_expression "CONCAT44(uVar4,uVar2)" identifier (argument_list "(uVar4,uVar2)" ( identifier , identifier ))) ;)) })))
(translation_unit "dwarf_vma read_leb128(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)\n\n{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  uint local_18;\n  \n  if (data < end) {\n    uVar4 = 0;\n    local_1d = *data;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)end - (int)data) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = data[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (length_return == (uint *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *length_return = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (length_return != (uint *)0x0) goto LAB_0004fa57;\n  }\n  if (((sign != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}\n\n" (function_definition "dwarf_vma read_leb128(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)\n\n{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  uint local_18;\n  \n  if (data < end) {\n    uVar4 = 0;\n    local_1d = *data;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)end - (int)data) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = data[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (length_return == (uint *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *length_return = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (length_return != (uint *)0x0) goto LAB_0004fa57;\n  }\n  if (((sign != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}" type_identifier (function_declarator "read_leb128(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)" identifier (parameter_list "(uchar *data,uint *length_return,bfd_boolean sign,uchar *end)" ( (parameter_declaration "uchar *data" type_identifier (pointer_declarator "*data" * identifier)) , (parameter_declaration "uint *length_return" type_identifier (pointer_declarator "*length_return" * identifier)) , (parameter_declaration "bfd_boolean sign" type_identifier identifier) , (parameter_declaration "uchar *end" type_identifier (pointer_declarator "*end" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  uint local_18;\n  \n  if (data < end) {\n    uVar4 = 0;\n    local_1d = *data;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)end - (int)data) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = data[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (length_return == (uint *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *length_return = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (length_return != (uint *)0x0) goto LAB_0004fa57;\n  }\n  if (((sign != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "byte local_1d;" type_identifier identifier ;) (declaration "uint local_1c;" type_identifier identifier ;) (declaration "uint local_18;" type_identifier identifier ;) (if_statement "if (data < end) {\n    uVar4 = 0;\n    local_1d = *data;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)end - (int)data) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = data[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (length_return == (uint *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *length_return = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (length_return != (uint *)0x0) goto LAB_0004fa57;\n  }" if (parenthesized_expression "(data < end)" ( (binary_expression "data < end" identifier < identifier) )) (compound_statement "{\n    uVar4 = 0;\n    local_1d = *data;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)end - (int)data) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = data[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (length_return == (uint *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *length_return = local_18;\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "local_1d = *data;" (assignment_expression "local_1d = *data" identifier = (pointer_expression "*data" * identifier)) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar2 = uVar5 & 0x7f;" (assignment_expression "uVar2 = uVar5 & 0x7f" identifier = (binary_expression "uVar5 & 0x7f" identifier & number_literal)) ;) (if_statement "if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }" if (parenthesized_expression "(-1 < (char)local_1d)" ( (binary_expression "-1 < (char)local_1d" number_literal < (cast_expression "(char)local_1d" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "local_1c = 7;" (assignment_expression "local_1c = 7" identifier = number_literal) ;) (expression_statement "local_18 = 1;" (assignment_expression "local_18 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) (expression_statement "local_18 = 1;" (assignment_expression "local_18 = 1" identifier = number_literal) ;) (expression_statement "local_1c = 7;" (assignment_expression "local_1c = 7" identifier = number_literal) ;) (do_statement "do {\n      if (local_18 == (int)end - (int)data) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = data[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);" do (compound_statement "{\n      if (local_18 == (int)end - (int)data) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = data[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    }" { (if_statement "if (local_18 == (int)end - (int)data) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }" if (parenthesized_expression "(local_18 == (int)end - (int)data)" ( (binary_expression "local_18 == (int)end - (int)data" identifier == (binary_expression "(int)end - (int)data" (cast_expression "(int)end" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)data" ( (type_descriptor "int" primitive_type) ) identifier))) )) (compound_statement "{\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) (expression_statement "local_1d = data[local_18];" (assignment_expression "local_1d = data[local_18]" identifier = (subscript_expression "data[local_18]" identifier [ identifier ])) ;) (expression_statement "local_18 = local_18 + 1;" (assignment_expression "local_18 = local_18 + 1" identifier = (binary_expression "local_18 + 1" identifier + number_literal)) ;) (expression_statement "uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);" (assignment_expression "uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f)" identifier = (binary_expression "(local_1d & 0x7f) << ((byte)local_1c & 0x1f)" (parenthesized_expression "(local_1d & 0x7f)" ( (binary_expression "local_1d & 0x7f" identifier & number_literal) )) << (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (expression_statement "uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);" (assignment_expression "uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" identifier = (binary_expression "0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (binary_expression "0 << ((byte)local_1c & 0x1f)" number_literal << (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) | (binary_expression "(local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (parenthesized_expression "(local_1d & 0x7f)" ( (binary_expression "local_1d & 0x7f" identifier & number_literal) )) >> (binary_expression "0x20 - ((byte)local_1c & 0x1f)" number_literal - (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))))) ;) (if_statement "if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" if (parenthesized_expression "((local_1c & 0x20) != 0)" ( (binary_expression "(local_1c & 0x20) != 0" (parenthesized_expression "(local_1c & 0x20)" ( (binary_expression "local_1c & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" identifier = identifier) ;) })) (expression_statement "local_1c = local_1c + 7;" (assignment_expression "local_1c = local_1c + 7" identifier = (binary_expression "local_1c + 7" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar4 | uVar5;" (assignment_expression "uVar4 = uVar4 | uVar5" identifier = (binary_expression "uVar4 | uVar5" identifier | identifier)) ;) (expression_statement "uVar2 = uVar2 | uVar7;" (assignment_expression "uVar2 = uVar2 | uVar7" identifier = (binary_expression "uVar2 | uVar7" identifier | identifier)) ;) (if_statement "if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }" if (parenthesized_expression "(-1 < (char)local_1d)" ( (binary_expression "-1 < (char)local_1d" number_literal < (cast_expression "(char)local_1d" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }" { (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "bVar1 = local_1c < 0x40;" (assignment_expression "bVar1 = local_1c < 0x40" identifier = (binary_expression "local_1c < 0x40" identifier < number_literal)) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) }) while (parenthesized_expression "(local_18 != 10)" ( (binary_expression "local_18 != 10" identifier != number_literal) )) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (length_return == (uint *)0x0) goto LAB_0004fa97;" if (parenthesized_expression "(length_return == (uint *)0x0)" ( (binary_expression "length_return == (uint *)0x0" identifier == (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004fa97;" goto statement_identifier ;)) (expression_statement "bVar1 = local_1c < 0x40;" (assignment_expression "bVar1 = local_1c < 0x40" identifier = (binary_expression "local_1c < 0x40" identifier < number_literal)) ;) (labeled_statement "LAB_0004fa57:\n    bVar3 = (byte)local_1c;" statement_identifier : (expression_statement "bVar3 = (byte)local_1c;" (assignment_expression "bVar3 = (byte)local_1c" identifier = (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (expression_statement "*length_return = local_18;" (assignment_expression "*length_return = local_18" (pointer_expression "*length_return" * identifier) = identifier) ;) }) (else_clause "else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (length_return != (uint *)0x0) goto LAB_0004fa57;\n  }" else (compound_statement "{\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (length_return != (uint *)0x0) goto LAB_0004fa57;\n  }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "local_1c = 0;" (assignment_expression "local_1c = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "local_18 = 0;" (assignment_expression "local_18 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0004fab2:\n    bVar3 = (byte)local_1c;" statement_identifier : (expression_statement "bVar3 = (byte)local_1c;" (assignment_expression "bVar3 = (byte)local_1c" identifier = (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (if_statement "if (length_return != (uint *)0x0) goto LAB_0004fa57;" if (parenthesized_expression "(length_return != (uint *)0x0)" ( (binary_expression "length_return != (uint *)0x0" identifier != (cast_expression "(uint *)0x0" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004fa57;" goto statement_identifier ;)) }))) (if_statement "if (((sign != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }" if (parenthesized_expression "(((sign != 0) && (bVar1)) && ((uVar5 & 0x40) != 0))" ( (binary_expression "((sign != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)" (parenthesized_expression "((sign != 0) && (bVar1))" ( (binary_expression "(sign != 0) && (bVar1)" (parenthesized_expression "(sign != 0)" ( (binary_expression "sign != 0" identifier != number_literal) )) && (parenthesized_expression "(bVar1)" ( identifier ))) )) && (parenthesized_expression "((uVar5 & 0x40) != 0)" ( (binary_expression "(uVar5 & 0x40) != 0" (parenthesized_expression "(uVar5 & 0x40)" ( (binary_expression "uVar5 & 0x40" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }" { (expression_statement "uVar6 = -1 << (bVar3 & 0x1f);" (assignment_expression "uVar6 = -1 << (bVar3 & 0x1f)" identifier = (binary_expression "-1 << (bVar3 & 0x1f)" number_literal << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (expression_statement "uVar5 = 0xffffffff;" (assignment_expression "uVar5 = 0xffffffff" identifier = number_literal) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" identifier = identifier) ;) })) (expression_statement "uVar4 = uVar4 | uVar5;" (assignment_expression "uVar4 = uVar4 | uVar5" identifier = (binary_expression "uVar4 | uVar5" identifier | identifier)) ;) (expression_statement "uVar2 = uVar2 | uVar7;" (assignment_expression "uVar2 = uVar2 | uVar7" identifier = (binary_expression "uVar2 | uVar7" identifier | identifier)) ;) })) (labeled_statement "LAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);" statement_identifier : (return_statement "return CONCAT44(uVar4,uVar2);" return (call_expression "CONCAT44(uVar4,uVar2)" identifier (argument_list "(uVar4,uVar2)" ( identifier , identifier ))) ;)) })))
(translation_unit "undefined8 FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  int local_18;\n  \n  if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }\n  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}\n\n" (function_definition "undefined8 FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  int local_18;\n  \n  if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }\n  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}" type_identifier (function_declarator "FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)" identifier (parameter_list "(byte *param_1,int *param_2,int param_3,byte *param_4)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "byte *param_4" type_identifier (pointer_declarator "*param_4" * identifier)) ))) (compound_statement "{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  int local_18;\n  \n  if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }\n  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}" { (declaration "bool bVar1;" primitive_type identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "byte local_1d;" type_identifier identifier ;) (declaration "uint local_1c;" type_identifier identifier ;) (declaration "int local_18;" primitive_type identifier ;) (if_statement "if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "local_1d = *param_1;" (assignment_expression "local_1d = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "uVar2 = uVar5 & 0x7f;" (assignment_expression "uVar2 = uVar5 & 0x7f" identifier = (binary_expression "uVar5 & 0x7f" identifier & number_literal)) ;) (if_statement "if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }" if (parenthesized_expression "(-1 < (char)local_1d)" ( (binary_expression "-1 < (char)local_1d" number_literal < (cast_expression "(char)local_1d" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "local_1c = 7;" (assignment_expression "local_1c = 7" identifier = number_literal) ;) (expression_statement "local_18 = 1;" (assignment_expression "local_18 = 1" identifier = number_literal) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) (expression_statement "local_18 = 1;" (assignment_expression "local_18 = 1" identifier = number_literal) ;) (expression_statement "local_1c = 7;" (assignment_expression "local_1c = 7" identifier = number_literal) ;) (do_statement "do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);" do (compound_statement "{\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    }" { (if_statement "if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }" if (parenthesized_expression "(local_18 == (int)param_4 - (int)param_1)" ( (binary_expression "local_18 == (int)param_4 - (int)param_1" identifier == (binary_expression "(int)param_4 - (int)param_1" (cast_expression "(int)param_4" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier))) )) (compound_statement "{\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) (expression_statement "local_1d = param_1[local_18];" (assignment_expression "local_1d = param_1[local_18]" identifier = (subscript_expression "param_1[local_18]" identifier [ identifier ])) ;) (expression_statement "local_18 = local_18 + 1;" (assignment_expression "local_18 = local_18 + 1" identifier = (binary_expression "local_18 + 1" identifier + number_literal)) ;) (expression_statement "uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);" (assignment_expression "uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f)" identifier = (binary_expression "(local_1d & 0x7f) << ((byte)local_1c & 0x1f)" (parenthesized_expression "(local_1d & 0x7f)" ( (binary_expression "local_1d & 0x7f" identifier & number_literal) )) << (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (expression_statement "uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);" (assignment_expression "uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" identifier = (binary_expression "0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (binary_expression "0 << ((byte)local_1c & 0x1f)" number_literal << (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) | (binary_expression "(local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (parenthesized_expression "(local_1d & 0x7f)" ( (binary_expression "local_1d & 0x7f" identifier & number_literal) )) >> (binary_expression "0x20 - ((byte)local_1c & 0x1f)" number_literal - (parenthesized_expression "((byte)local_1c & 0x1f)" ( (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))))) ;) (if_statement "if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" if (parenthesized_expression "((local_1c & 0x20) != 0)" ( (binary_expression "(local_1c & 0x20) != 0" (parenthesized_expression "(local_1c & 0x20)" ( (binary_expression "local_1c & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" identifier = identifier) ;) })) (expression_statement "local_1c = local_1c + 7;" (assignment_expression "local_1c = local_1c + 7" identifier = (binary_expression "local_1c + 7" identifier + number_literal)) ;) (expression_statement "uVar4 = uVar4 | uVar5;" (assignment_expression "uVar4 = uVar4 | uVar5" identifier = (binary_expression "uVar4 | uVar5" identifier | identifier)) ;) (expression_statement "uVar2 = uVar2 | uVar7;" (assignment_expression "uVar2 = uVar2 | uVar7" identifier = (binary_expression "uVar2 | uVar7" identifier | identifier)) ;) (if_statement "if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }" if (parenthesized_expression "(-1 < (char)local_1d)" ( (binary_expression "-1 < (char)local_1d" number_literal < (cast_expression "(char)local_1d" ( (type_descriptor "char" primitive_type) ) identifier)) )) (compound_statement "{\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }" { (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "bVar1 = local_1c < 0x40;" (assignment_expression "bVar1 = local_1c < 0x40" identifier = (binary_expression "local_1c < 0x40" identifier < number_literal)) ;) (goto_statement "goto LAB_0004fab2;" goto statement_identifier ;) })) }) while (parenthesized_expression "(local_18 != 10)" ( (binary_expression "local_18 != 10" identifier != number_literal) )) ;) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" identifier = (cast_expression "(uint)local_1d" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (if_statement "if (param_2 == (int *)0x0) goto LAB_0004fa97;" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004fa97;" goto statement_identifier ;)) (expression_statement "bVar1 = local_1c < 0x40;" (assignment_expression "bVar1 = local_1c < 0x40" identifier = (binary_expression "local_1c < 0x40" identifier < number_literal)) ;) (labeled_statement "LAB_0004fa57:\n    bVar3 = (byte)local_1c;" statement_identifier : (expression_statement "bVar3 = (byte)local_1c;" (assignment_expression "bVar3 = (byte)local_1c" identifier = (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (expression_statement "*param_2 = local_18;" (assignment_expression "*param_2 = local_18" (pointer_expression "*param_2" * identifier) = identifier) ;) }) (else_clause "else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" else (compound_statement "{\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" { (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" identifier = true) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "local_1c = 0;" (assignment_expression "local_1c = 0" identifier = number_literal) ;) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" identifier = number_literal) ;) (expression_statement "local_18 = 0;" (assignment_expression "local_18 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (labeled_statement "LAB_0004fab2:\n    bVar3 = (byte)local_1c;" statement_identifier : (expression_statement "bVar3 = (byte)local_1c;" (assignment_expression "bVar3 = (byte)local_1c" identifier = (cast_expression "(byte)local_1c" ( (type_descriptor "byte" type_identifier) ) identifier)) ;)) (if_statement "if (param_2 != (int *)0x0) goto LAB_0004fa57;" if (parenthesized_expression "(param_2 != (int *)0x0)" ( (binary_expression "param_2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0004fa57;" goto statement_identifier ;)) }))) (if_statement "if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }" if (parenthesized_expression "(((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0))" ( (binary_expression "((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)" (parenthesized_expression "((param_3 != 0) && (bVar1))" ( (binary_expression "(param_3 != 0) && (bVar1)" (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) && (parenthesized_expression "(bVar1)" ( identifier ))) )) && (parenthesized_expression "((uVar5 & 0x40) != 0)" ( (binary_expression "(uVar5 & 0x40) != 0" (parenthesized_expression "(uVar5 & 0x40)" ( (binary_expression "uVar5 & 0x40" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }" { (expression_statement "uVar6 = -1 << (bVar3 & 0x1f);" (assignment_expression "uVar6 = -1 << (bVar3 & 0x1f)" identifier = (binary_expression "-1 << (bVar3 & 0x1f)" number_literal << (parenthesized_expression "(bVar3 & 0x1f)" ( (binary_expression "bVar3 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" identifier = identifier) ;) (expression_statement "uVar5 = 0xffffffff;" (assignment_expression "uVar5 = 0xffffffff" identifier = number_literal) ;) (if_statement "if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }" if (parenthesized_expression "((bVar3 & 0x20) != 0)" ( (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" ( (binary_expression "bVar3 & 0x20" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }" { (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" identifier = identifier) ;) })) (expression_statement "uVar4 = uVar4 | uVar5;" (assignment_expression "uVar4 = uVar4 | uVar5" identifier = (binary_expression "uVar4 | uVar5" identifier | identifier)) ;) (expression_statement "uVar2 = uVar2 | uVar7;" (assignment_expression "uVar2 = uVar2 | uVar7" identifier = (binary_expression "uVar2 | uVar7" identifier | identifier)) ;) })) (labeled_statement "LAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);" statement_identifier : (return_statement "return CONCAT44(uVar4,uVar2);" return (call_expression "CONCAT44(uVar4,uVar2)" identifier (argument_list "(uVar4,uVar2)" ( identifier , identifier ))) ;)) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (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 ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> (binary_expression LIT - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < LIT)) ;) (goto_statement goto statement_identifier ;) })) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (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 = (binary_expression IDENT < LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;)) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( IDENT ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression LIT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | IDENT)) ;) })) (labeled_statement statement_identifier : (return_statement return (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;)) })))
(function_definition "undefined8 FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)\n\n{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  int local_18;\n  \n  if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }\n  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}" (type_identifier "undefined8") (function_declarator "FUN_0004f990(byte *param_1,int *param_2,int param_3,byte *param_4)" (identifier "FUN_0004f990") (parameter_list "(byte *param_1,int *param_2,int param_3,byte *param_4)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "byte *param_4" (type_identifier "byte") (pointer_declarator "*param_4" (* "*") (identifier "param_4"))) () ")"))) (compound_statement "{\n  bool bVar1;\n  uint uVar2;\n  byte bVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  byte local_1d;\n  uint local_1c;\n  int local_18;\n  \n  if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }\n  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }\nLAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);\n}" ({ "{") (declaration "bool bVar1;" (primitive_type "bool") (identifier "bVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "byte local_1d;" (type_identifier "byte") (identifier "local_1d") (; ";")) (declaration "uint local_1c;" (type_identifier "uint") (identifier "local_1c") (; ";")) (declaration "int local_18;" (primitive_type "int") (identifier "local_18") (; ";")) (if_statement "if (param_1 < param_4) {\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }\n  else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" (if "if") (parenthesized_expression "(param_1 < param_4)" (( "(") (binary_expression "param_1 < param_4" (identifier "param_1") (< "<") (identifier "param_4")) () ")")) (compound_statement "{\n    uVar4 = 0;\n    local_1d = *param_1;\n    uVar5 = (uint)local_1d;\n    uVar2 = uVar5 & 0x7f;\n    if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }\n    local_18 = 1;\n    local_1c = 7;\n    do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);\n    uVar5 = (uint)local_1d;\n    if (param_2 == (int *)0x0) goto LAB_0004fa97;\n    bVar1 = local_1c < 0x40;\nLAB_0004fa57:\n    bVar3 = (byte)local_1c;\n    *param_2 = local_18;\n  }" ({ "{") (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_1d = *param_1;" (assignment_expression "local_1d = *param_1" (identifier "local_1d") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" (identifier "uVar5") (= "=") (cast_expression "(uint)local_1d" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "local_1d"))) (; ";")) (expression_statement "uVar2 = uVar5 & 0x7f;" (assignment_expression "uVar2 = uVar5 & 0x7f" (identifier "uVar2") (= "=") (binary_expression "uVar5 & 0x7f" (identifier "uVar5") (& "&") (number_literal "0x7f"))) (; ";")) (if_statement "if (-1 < (char)local_1d) {\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }" (if "if") (parenthesized_expression "(-1 < (char)local_1d)" (( "(") (binary_expression "-1 < (char)local_1d" (number_literal "-1") (< "<") (cast_expression "(char)local_1d" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "local_1d"))) () ")")) (compound_statement "{\n      bVar1 = true;\n      local_1c = 7;\n      local_18 = 1;\n      goto LAB_0004fab2;\n    }" ({ "{") (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" (identifier "bVar1") (= "=") (true "true")) (; ";")) (expression_statement "local_1c = 7;" (assignment_expression "local_1c = 7" (identifier "local_1c") (= "=") (number_literal "7")) (; ";")) (expression_statement "local_18 = 1;" (assignment_expression "local_18 = 1" (identifier "local_18") (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_0004fab2;" (goto "goto") (statement_identifier "LAB_0004fab2") (; ";")) (} "}"))) (expression_statement "local_18 = 1;" (assignment_expression "local_18 = 1" (identifier "local_18") (= "=") (number_literal "1")) (; ";")) (expression_statement "local_1c = 7;" (assignment_expression "local_1c = 7" (identifier "local_1c") (= "=") (number_literal "7")) (; ";")) (do_statement "do {\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    } while (local_18 != 10);" (do "do") (compound_statement "{\n      if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }\n      local_1d = param_1[local_18];\n      local_18 = local_18 + 1;\n      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);\n      uVar7 = uVar6;\n      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);\n      if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }\n      local_1c = local_1c + 7;\n      uVar4 = uVar4 | uVar5;\n      uVar2 = uVar2 | uVar7;\n      if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }\n    }" ({ "{") (if_statement "if (local_18 == (int)param_4 - (int)param_1) {\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }" (if "if") (parenthesized_expression "(local_18 == (int)param_4 - (int)param_1)" (( "(") (binary_expression "local_18 == (int)param_4 - (int)param_1" (identifier "local_18") (== "==") (binary_expression "(int)param_4 - (int)param_1" (cast_expression "(int)param_4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_4")) (- "-") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1")))) () ")")) (compound_statement "{\n        bVar1 = true;\n        uVar5 = (uint)local_1d;\n        goto LAB_0004fab2;\n      }" ({ "{") (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" (identifier "bVar1") (= "=") (true "true")) (; ";")) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" (identifier "uVar5") (= "=") (cast_expression "(uint)local_1d" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "local_1d"))) (; ";")) (goto_statement "goto LAB_0004fab2;" (goto "goto") (statement_identifier "LAB_0004fab2") (; ";")) (} "}"))) (expression_statement "local_1d = param_1[local_18];" (assignment_expression "local_1d = param_1[local_18]" (identifier "local_1d") (= "=") (subscript_expression "param_1[local_18]" (identifier "param_1") ([ "[") (identifier "local_18") (] "]"))) (; ";")) (expression_statement "local_18 = local_18 + 1;" (assignment_expression "local_18 = local_18 + 1" (identifier "local_18") (= "=") (binary_expression "local_18 + 1" (identifier "local_18") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);" (assignment_expression "uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f)" (identifier "uVar6") (= "=") (binary_expression "(local_1d & 0x7f) << ((byte)local_1c & 0x1f)" (parenthesized_expression "(local_1d & 0x7f)" (( "(") (binary_expression "local_1d & 0x7f" (identifier "local_1d") (& "&") (number_literal "0x7f")) () ")")) (<< "<<") (parenthesized_expression "((byte)local_1c & 0x1f)" (( "(") (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1c")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" (identifier "uVar7") (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);" (assignment_expression "uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (identifier "uVar5") (= "=") (binary_expression "0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (binary_expression "0 << ((byte)local_1c & 0x1f)" (number_literal "0") (<< "<<") (parenthesized_expression "((byte)local_1c & 0x1f)" (( "(") (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1c")) (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "(local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f)" (parenthesized_expression "(local_1d & 0x7f)" (( "(") (binary_expression "local_1d & 0x7f" (identifier "local_1d") (& "&") (number_literal "0x7f")) () ")")) (>> ">>") (binary_expression "0x20 - ((byte)local_1c & 0x1f)" (number_literal "0x20") (- "-") (parenthesized_expression "((byte)local_1c & 0x1f)" (( "(") (binary_expression "(byte)local_1c & 0x1f" (cast_expression "(byte)local_1c" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1c")) (& "&") (number_literal "0x1f")) () ")")))))) (; ";")) (if_statement "if ((local_1c & 0x20) != 0) {\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" (if "if") (parenthesized_expression "((local_1c & 0x20) != 0)" (( "(") (binary_expression "(local_1c & 0x20) != 0" (parenthesized_expression "(local_1c & 0x20)" (( "(") (binary_expression "local_1c & 0x20" (identifier "local_1c") (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar7 = 0;\n        uVar5 = uVar6;\n      }" ({ "{") (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" (identifier "uVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" (identifier "uVar5") (= "=") (identifier "uVar6")) (; ";")) (} "}"))) (expression_statement "local_1c = local_1c + 7;" (assignment_expression "local_1c = local_1c + 7" (identifier "local_1c") (= "=") (binary_expression "local_1c + 7" (identifier "local_1c") (+ "+") (number_literal "7"))) (; ";")) (expression_statement "uVar4 = uVar4 | uVar5;" (assignment_expression "uVar4 = uVar4 | uVar5" (identifier "uVar4") (= "=") (binary_expression "uVar4 | uVar5" (identifier "uVar4") (| "|") (identifier "uVar5"))) (; ";")) (expression_statement "uVar2 = uVar2 | uVar7;" (assignment_expression "uVar2 = uVar2 | uVar7" (identifier "uVar2") (= "=") (binary_expression "uVar2 | uVar7" (identifier "uVar2") (| "|") (identifier "uVar7"))) (; ";")) (if_statement "if (-1 < (char)local_1d) {\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }" (if "if") (parenthesized_expression "(-1 < (char)local_1d)" (( "(") (binary_expression "-1 < (char)local_1d" (number_literal "-1") (< "<") (cast_expression "(char)local_1d" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "local_1d"))) () ")")) (compound_statement "{\n        uVar5 = (uint)local_1d;\n        bVar1 = local_1c < 0x40;\n        goto LAB_0004fab2;\n      }" ({ "{") (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" (identifier "uVar5") (= "=") (cast_expression "(uint)local_1d" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "local_1d"))) (; ";")) (expression_statement "bVar1 = local_1c < 0x40;" (assignment_expression "bVar1 = local_1c < 0x40" (identifier "bVar1") (= "=") (binary_expression "local_1c < 0x40" (identifier "local_1c") (< "<") (number_literal "0x40"))) (; ";")) (goto_statement "goto LAB_0004fab2;" (goto "goto") (statement_identifier "LAB_0004fab2") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(local_18 != 10)" (( "(") (binary_expression "local_18 != 10" (identifier "local_18") (!= "!=") (number_literal "10")) () ")")) (; ";")) (expression_statement "uVar5 = (uint)local_1d;" (assignment_expression "uVar5 = (uint)local_1d" (identifier "uVar5") (= "=") (cast_expression "(uint)local_1d" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "local_1d"))) (; ";")) (if_statement "if (param_2 == (int *)0x0) goto LAB_0004fa97;" (if "if") (parenthesized_expression "(param_2 == (int *)0x0)" (( "(") (binary_expression "param_2 == (int *)0x0" (identifier "param_2") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0004fa97;" (goto "goto") (statement_identifier "LAB_0004fa97") (; ";"))) (expression_statement "bVar1 = local_1c < 0x40;" (assignment_expression "bVar1 = local_1c < 0x40" (identifier "bVar1") (= "=") (binary_expression "local_1c < 0x40" (identifier "local_1c") (< "<") (number_literal "0x40"))) (; ";")) (labeled_statement "LAB_0004fa57:\n    bVar3 = (byte)local_1c;" (statement_identifier "LAB_0004fa57") (: ":") (expression_statement "bVar3 = (byte)local_1c;" (assignment_expression "bVar3 = (byte)local_1c" (identifier "bVar3") (= "=") (cast_expression "(byte)local_1c" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1c"))) (; ";"))) (expression_statement "*param_2 = local_18;" (assignment_expression "*param_2 = local_18" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "local_18")) (; ";")) (} "}")) (else_clause "else {\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" (else "else") (compound_statement "{\n    bVar1 = true;\n    uVar5 = 0;\n    local_1c = 0;\n    uVar2 = 0;\n    local_18 = 0;\n    uVar4 = 0;\nLAB_0004fab2:\n    bVar3 = (byte)local_1c;\n    if (param_2 != (int *)0x0) goto LAB_0004fa57;\n  }" ({ "{") (expression_statement "bVar1 = true;" (assignment_expression "bVar1 = true" (identifier "bVar1") (= "=") (true "true")) (; ";")) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_1c = 0;" (assignment_expression "local_1c = 0" (identifier "local_1c") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar2 = 0;" (assignment_expression "uVar2 = 0" (identifier "uVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_18 = 0;" (assignment_expression "local_18 = 0" (identifier "local_18") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_0004fab2:\n    bVar3 = (byte)local_1c;" (statement_identifier "LAB_0004fab2") (: ":") (expression_statement "bVar3 = (byte)local_1c;" (assignment_expression "bVar3 = (byte)local_1c" (identifier "bVar3") (= "=") (cast_expression "(byte)local_1c" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_1c"))) (; ";"))) (if_statement "if (param_2 != (int *)0x0) goto LAB_0004fa57;" (if "if") (parenthesized_expression "(param_2 != (int *)0x0)" (( "(") (binary_expression "param_2 != (int *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0004fa57;" (goto "goto") (statement_identifier "LAB_0004fa57") (; ";"))) (} "}")))) (if_statement "if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }" (if "if") (parenthesized_expression "(((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0))" (( "(") (binary_expression "((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)" (parenthesized_expression "((param_3 != 0) && (bVar1))" (( "(") (binary_expression "(param_3 != 0) && (bVar1)" (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(bVar1)" (( "(") (identifier "bVar1") () ")"))) () ")")) (&& "&&") (parenthesized_expression "((uVar5 & 0x40) != 0)" (( "(") (binary_expression "(uVar5 & 0x40) != 0" (parenthesized_expression "(uVar5 & 0x40)" (( "(") (binary_expression "uVar5 & 0x40" (identifier "uVar5") (& "&") (number_literal "0x40")) () ")")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    uVar6 = -1 << (bVar3 & 0x1f);\n    uVar7 = uVar6;\n    uVar5 = 0xffffffff;\n    if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }\n    uVar4 = uVar4 | uVar5;\n    uVar2 = uVar2 | uVar7;\n  }" ({ "{") (expression_statement "uVar6 = -1 << (bVar3 & 0x1f);" (assignment_expression "uVar6 = -1 << (bVar3 & 0x1f)" (identifier "uVar6") (= "=") (binary_expression "-1 << (bVar3 & 0x1f)" (number_literal "-1") (<< "<<") (parenthesized_expression "(bVar3 & 0x1f)" (( "(") (binary_expression "bVar3 & 0x1f" (identifier "bVar3") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar7 = uVar6;" (assignment_expression "uVar7 = uVar6" (identifier "uVar7") (= "=") (identifier "uVar6")) (; ";")) (expression_statement "uVar5 = 0xffffffff;" (assignment_expression "uVar5 = 0xffffffff" (identifier "uVar5") (= "=") (number_literal "0xffffffff")) (; ";")) (if_statement "if ((bVar3 & 0x20) != 0) {\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }" (if "if") (parenthesized_expression "((bVar3 & 0x20) != 0)" (( "(") (binary_expression "(bVar3 & 0x20) != 0" (parenthesized_expression "(bVar3 & 0x20)" (( "(") (binary_expression "bVar3 & 0x20" (identifier "bVar3") (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar7 = 0;\n      uVar5 = uVar6;\n    }" ({ "{") (expression_statement "uVar7 = 0;" (assignment_expression "uVar7 = 0" (identifier "uVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = uVar6;" (assignment_expression "uVar5 = uVar6" (identifier "uVar5") (= "=") (identifier "uVar6")) (; ";")) (} "}"))) (expression_statement "uVar4 = uVar4 | uVar5;" (assignment_expression "uVar4 = uVar4 | uVar5" (identifier "uVar4") (= "=") (binary_expression "uVar4 | uVar5" (identifier "uVar4") (| "|") (identifier "uVar5"))) (; ";")) (expression_statement "uVar2 = uVar2 | uVar7;" (assignment_expression "uVar2 = uVar2 | uVar7" (identifier "uVar2") (= "=") (binary_expression "uVar2 | uVar7" (identifier "uVar2") (| "|") (identifier "uVar7"))) (; ";")) (} "}"))) (labeled_statement "LAB_0004fa97:\n  return CONCAT44(uVar4,uVar2);" (statement_identifier "LAB_0004fa97") (: ":") (return_statement "return CONCAT44(uVar4,uVar2);" (return "return") (call_expression "CONCAT44(uVar4,uVar2)" (identifier "CONCAT44") (argument_list "(uVar4,uVar2)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar2") () ")"))) (; ";"))) (} "}")))

type_1 function_1(type_2 *var_1,type_3 *var_10,type_4 var_11,type_2 *var_2)

{
  bool bVar1;
  type_3 var_8;
  type_5 var_12;
  type_3 var_7;
  type_3 var_3;
  type_3 uVar6;
  type_3 var_9;
  type_5 var_5;
  type_3 var_6;
  type_3 var_4;
  
  if (var_1 < var_2) {
    var_7 = 0;
    var_5 = *var_1;
    var_3 = (type_3)var_5;
    var_8 = var_3 & 0x7f;
    if (-1 < (char)var_5) {
      bVar1 = true;
      var_6 = 7;
      var_4 = 1;
      goto LAB_0004fab2;
    }
    var_4 = 1;
    var_6 = 7;
    do {
      if (var_4 == (int)var_2 - (int)var_1) {
        bVar1 = true;
        var_3 = (type_3)var_5;
        goto LAB_0004fab2;
      }
      var_5 = var_1[var_4];
      var_4 = var_4 + 1;
      uVar6 = (var_5 & 0x7f) << ((type_5)var_6 & 0x1f);
      var_9 = uVar6;
      var_3 = 0 << ((type_5)var_6 & 0x1f) | (var_5 & 0x7f) >> 0x20 - ((type_5)var_6 & 0x1f);
      if ((var_6 & 0x20) != 0) {
        var_9 = 0;
        var_3 = uVar6;
      }
      var_6 = var_6 + 7;
      var_7 = var_7 | var_3;
      var_8 = var_8 | var_9;
      if (-1 < (char)var_5) {
        var_3 = (type_3)var_5;
        bVar1 = var_6 < 0x40;
        goto LAB_0004fab2;
      }
    } while (var_4 != 10);
    var_3 = (type_3)var_5;
    if (var_10 == (type_3 *)0x0) goto LAB_0004fa97;
    bVar1 = var_6 < 0x40;
LAB_0004fa57:
    var_12 = (type_5)var_6;
    *var_10 = var_4;
  }
  else {
    bVar1 = true;
    var_3 = 0;
    var_6 = 0;
    var_8 = 0;
    var_4 = 0;
    var_7 = 0;
LAB_0004fab2:
    var_12 = (type_5)var_6;
    if (var_10 != (type_3 *)0x0) goto LAB_0004fa57;
  }
  if (((var_11 != 0) && (bVar1)) && ((var_3 & 0x40) != 0)) {
    uVar6 = -1 << (var_12 & 0x1f);
    var_9 = uVar6;
    var_3 = 0xffffffff;
    if ((var_12 & 0x20) != 0) {
      var_9 = 0;
      var_3 = uVar6;
    }
    var_7 = var_7 | var_3;
    var_8 = var_8 | var_9;
  }
LAB_0004fa97:
  return var_13(var_7,var_8);
}


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

undefined8 MASKED(byte *param_1,int *param_2,int param_3,byte *param_4)

{
  bool bVar1;
  uint uVar2;
  byte bVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  byte local_1d;
  uint local_1c;
  int local_18;
  
  if (param_1 < param_4) {
    uVar4 = 0;
    local_1d = *param_1;
    uVar5 = (uint)local_1d;
    uVar2 = uVar5 & 0x7f;
    if (-1 < (char)local_1d) {
      bVar1 = true;
      local_1c = 7;
      local_18 = 1;
      goto LAB_0004fab2;
    }
    local_18 = 1;
    local_1c = 7;
    do {
      if (local_18 == (int)param_4 - (int)param_1) {
        bVar1 = true;
        uVar5 = (uint)local_1d;
        goto LAB_0004fab2;
      }
      local_1d = param_1[local_18];
      local_18 = local_18 + 1;
      uVar6 = (local_1d & 0x7f) << ((byte)local_1c & 0x1f);
      uVar7 = uVar6;
      uVar5 = 0 << ((byte)local_1c & 0x1f) | (local_1d & 0x7f) >> 0x20 - ((byte)local_1c & 0x1f);
      if ((local_1c & 0x20) != 0) {
        uVar7 = 0;
        uVar5 = uVar6;
      }
      local_1c = local_1c + 7;
      uVar4 = uVar4 | uVar5;
      uVar2 = uVar2 | uVar7;
      if (-1 < (char)local_1d) {
        uVar5 = (uint)local_1d;
        bVar1 = local_1c < 0x40;
        goto LAB_0004fab2;
      }
    } while (local_18 != 10);
    uVar5 = (uint)local_1d;
    if (param_2 == (int *)0x0) goto LAB_0004fa97;
    bVar1 = local_1c < 0x40;
LAB_0004fa57:
    bVar3 = (byte)local_1c;
    *param_2 = local_18;
  }
  else {
    bVar1 = true;
    uVar5 = 0;
    local_1c = 0;
    uVar2 = 0;
    local_18 = 0;
    uVar4 = 0;
LAB_0004fab2:
    bVar3 = (byte)local_1c;
    if (param_2 != (int *)0x0) goto LAB_0004fa57;
  }
  if (((param_3 != 0) && (bVar1)) && ((uVar5 & 0x40) != 0)) {
    uVar6 = -1 << (bVar3 & 0x1f);
    uVar7 = uVar6;
    uVar5 = 0xffffffff;
    if ((bVar3 & 0x20) != 0) {
      uVar7 = 0;
      uVar5 = uVar6;
    }
    uVar4 = uVar4 | uVar5;
    uVar2 = uVar2 | uVar7;
  }
LAB_0004fa97:
  return CONCAT44(uVar4,uVar2);
}

