
fill_type * exp_get_fill(etree_type *tree,fill_type *def,char *name)

{
  byte bVar1;
  size_t sVar2;
  fill_type *pfVar3;
  char *fmt;
  uint uVar4;
  int iVar5;
  ulong uVar6;
  byte *pbVar7;
  uchar *puVar8;
  
  if (tree != (etree_type *)0x0) {
    expld.rel_from_abs = 0;
    expld.section = (asection *)(_bfd_std_section + 0x230);
    expld.dot = 0;
    expld.dotp = (bfd_vma *)0x0;
    exp_fold_tree_1(tree);
    if (expld.result.valid_p != 0) {
      if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {
        uVar6 = sVar2 + 1 >> 1;
        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);
        pbVar7 = (byte *)expld.result.str;
        iVar5 = 0;
        pfVar3->size = uVar6;
        puVar8 = pfVar3->data;
        do {
          bVar1 = *pbVar7;
          while( true ) {
            uVar4 = bVar1 - 0x30;
            pbVar7 = pbVar7 + 1;
            if (9 < uVar4) {
              uVar4 = bVar1 - 0x37 & 0xf;
            }
            sVar2 = sVar2 - 1;
            iVar5 = iVar5 * 0x10 + uVar4;
            if ((sVar2 & 1) != 0) break;
            *puVar8 = (uchar)iVar5;
            if (sVar2 == 0) {
              return pfVar3;
            }
            bVar1 = *pbVar7;
            puVar8 = puVar8 + 1;
            iVar5 = 0;
          }
        } while( true );
      }
      pfVar3 = (fill_type *)xmalloc(0x13);
      uVar4 = (uint)expld.result.value;
      pfVar3->size = 4;
      *(uint *)pfVar3->data =
           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;
      return pfVar3;
    }
    if ((name != (char *)0x0) && (expld.phase != lang_mark_phase_enum)) {
      fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);
      einfo(fmt,tree,name);
    }
  }
  return def;
}



ulong * FUN_001238c0(long param_1,ulong *param_2,long param_3)

{
  byte bVar1;
  size_t sVar2;
  ulong *puVar3;
  undefined8 uVar4;
  ulong *puVar5;
  uint uVar6;
  int iVar7;
  ulong uVar8;
  byte *pbVar9;
  
  if (param_1 != 0) {
    DAT_0017fd08 = 0;
    DAT_0017fd50 = 0x17ed50;
    DAT_0017fd40 = 0;
    DAT_0017fd48 = 0;
    FUN_00121580();
    if (DAT_0017fd38 != 0) {
      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {
        uVar8 = sVar2 + 1 >> 1;
        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);
        pbVar9 = DAT_0017fd28;
        iVar7 = 0;
        *puVar5 = uVar8;
        puVar3 = puVar5 + 1;
        do {
          bVar1 = *pbVar9;
          while( true ) {
            uVar6 = bVar1 - 0x30;
            pbVar9 = pbVar9 + 1;
            if (9 < uVar6) {
              uVar6 = bVar1 - 0x37 & 0xf;
            }
            sVar2 = sVar2 - 1;
            iVar7 = iVar7 * 0x10 + uVar6;
            if ((sVar2 & 1) != 0) break;
            *(char *)puVar3 = (char)iVar7;
            if (sVar2 == 0) {
              return puVar5;
            }
            bVar1 = *pbVar9;
            puVar3 = (ulong *)((long)puVar3 + 1);
            iVar7 = 0;
          }
        } while( true );
      }
      puVar3 = (ulong *)xmalloc(0x13);
      uVar6 = (uint)DAT_0017fd20;
      *puVar3 = 4;
      *(uint *)(puVar3 + 1) =
           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;
      return puVar3;
    }
    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {
      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);
      FUN_001251f0(uVar4,param_1,param_3);
    }
  }
  return param_2;
}


PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RSI
TEST RDI,RDI
JZ 0x00123988
LEA RAX,[0x17ed50]
MOV RBP,RDI
MOV R12,RDX
MOV dword ptr [0x0017fd08],0x0
MOV qword ptr [0x0017fd50],RAX
MOV qword ptr [0x0017fd40],0x0
MOV qword ptr [0x0017fd48],0x0
CALL 0x00121580
MOV EAX,dword ptr [0x0017fd38]
TEST EAX,EAX
JZ 0x00123950
MOV RDI,qword ptr [0x0017fd28]
TEST RDI,RDI
JZ 0x0012392c
CALL 0x00109310
MOV RBX,RAX
TEST RAX,RAX
JNZ 0x00123990
MOV EDI,0x13
CALL 0x00109c50
MOV EDX,dword ptr [0x0017fd20]
MOV qword ptr [RAX],0x4
BSWAP EDX
MOV dword ptr [RAX + 0x8],EDX
POP RBX
POP RBP
POP R12
RET
TEST R12,R12
JZ 0x00123988
CMP dword ptr [0x0017fd00],0x1
JZ 0x00123988
MOV EDX,0x5
LEA RSI,[0x1414a0]
XOR EDI,EDI
CALL 0x001092e0
MOV RDX,R12
MOV RSI,RBP
MOV RDI,RAX
XOR EAX,EAX
CALL 0x001251f0
NOP dword ptr [RAX]
MOV RAX,RBX
POP RBX
POP RBP
POP R12
RET
LEA RBP,[RAX + 0x1]
SHR RBP,0x1
LEA RDI,[RBP + 0xf]
CALL 0x00109c50
MOV RSI,qword ptr [0x0017fd28]
XOR EDX,EDX
MOV qword ptr [RAX],RBP
LEA R8,[RAX + 0x8]
ADD RSI,0x1
MOVZX EDI,byte ptr [RSI + -0x1]
LEA ECX,[RDI + -0x30]
CMP ECX,0x9
JBE 0x001239c6
LEA ECX,[RDI + -0x37]
AND ECX,0xf
SHL EDX,0x4
SUB RBX,0x1
ADD EDX,ECX
TEST BL,0x1
JNZ 0x001239b0
MOV byte ptr [R8],DL
TEST RBX,RBX
JZ 0x0012398b
ADD RSI,0x1
MOVZX EDI,byte ptr [RSI + -0x1]
ADD R8,0x1
XOR EDX,EDX
LEA ECX,[RDI + -0x30]
CMP ECX,0x9
JBE 0x001239c6
JMP 0x001239c0
(translation_unit "ulong * FUN_001238c0(long param_1,ulong *param_2,long param_3)\n\n{\n  byte bVar1;\n  size_t sVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  uint uVar6;\n  int iVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  \n  if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }\n  return param_2;\n}\n\n" (function_definition "ulong * FUN_001238c0(long param_1,ulong *param_2,long param_3)\n\n{\n  byte bVar1;\n  size_t sVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  uint uVar6;\n  int iVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  \n  if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }\n  return param_2;\n}" type_identifier (pointer_declarator "* FUN_001238c0(long param_1,ulong *param_2,long param_3)" * (function_declarator "FUN_001238c0(long param_1,ulong *param_2,long param_3)" identifier (parameter_list "(long param_1,ulong *param_2,long param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) )))) (compound_statement "{\n  byte bVar1;\n  size_t sVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  uint uVar6;\n  int iVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  \n  if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }\n  return param_2;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "ulong *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "ulong *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (if_statement "if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }" if (parenthesized_expression "(param_1 != 0)" ( (binary_expression "param_1 != 0" identifier != number_literal) )) (compound_statement "{\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }" { (expression_statement "DAT_0017fd08 = 0;" (assignment_expression "DAT_0017fd08 = 0" identifier = number_literal) ;) (expression_statement "DAT_0017fd50 = 0x17ed50;" (assignment_expression "DAT_0017fd50 = 0x17ed50" identifier = number_literal) ;) (expression_statement "DAT_0017fd40 = 0;" (assignment_expression "DAT_0017fd40 = 0" identifier = number_literal) ;) (expression_statement "DAT_0017fd48 = 0;" (assignment_expression "DAT_0017fd48 = 0" identifier = number_literal) ;) (expression_statement "FUN_00121580();" (call_expression "FUN_00121580()" identifier (argument_list "()" ( ))) ;) (if_statement "if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }" if (parenthesized_expression "(DAT_0017fd38 != 0)" ( (binary_expression "DAT_0017fd38 != 0" identifier != number_literal) )) (compound_statement "{\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }" { (if_statement "if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }" if (parenthesized_expression "((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0))" ( (binary_expression "(DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)" (parenthesized_expression "(DAT_0017fd28 != (byte *)0x0)" ( (binary_expression "DAT_0017fd28 != (byte *)0x0" identifier != (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)" ( (comma_expression "sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0" (assignment_expression "sVar2 = strlen((char *)DAT_0017fd28)" identifier = (call_expression "strlen((char *)DAT_0017fd28)" identifier (argument_list "((char *)DAT_0017fd28)" ( (cast_expression "(char *)DAT_0017fd28" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) , (binary_expression "sVar2 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }" { (expression_statement "uVar8 = sVar2 + 1 >> 1;" (assignment_expression "uVar8 = sVar2 + 1 >> 1" identifier = (binary_expression "sVar2 + 1 >> 1" (binary_expression "sVar2 + 1" identifier + number_literal) >> number_literal)) ;) (expression_statement "puVar5 = (ulong *)xmalloc(uVar8 + 0xf);" (assignment_expression "puVar5 = (ulong *)xmalloc(uVar8 + 0xf)" identifier = (cast_expression "(ulong *)xmalloc(uVar8 + 0xf)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(uVar8 + 0xf)" identifier (argument_list "(uVar8 + 0xf)" ( (binary_expression "uVar8 + 0xf" identifier + number_literal) ))))) ;) (expression_statement "pbVar9 = DAT_0017fd28;" (assignment_expression "pbVar9 = DAT_0017fd28" identifier = identifier) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "*puVar5 = uVar8;" (assignment_expression "*puVar5 = uVar8" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "puVar3 = puVar5 + 1;" (assignment_expression "puVar3 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (do_statement "do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );" do (compound_statement "{\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        }" { (expression_statement "bVar1 = *pbVar9;" (assignment_expression "bVar1 = *pbVar9" identifier = (pointer_expression "*pbVar9" * identifier)) ;) (while_statement "while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }" { (expression_statement "uVar6 = bVar1 - 0x30;" (assignment_expression "uVar6 = bVar1 - 0x30" identifier = (binary_expression "bVar1 - 0x30" identifier - number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + 1;" (assignment_expression "pbVar9 = pbVar9 + 1" identifier = (binary_expression "pbVar9 + 1" identifier + number_literal)) ;) (if_statement "if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }" if (parenthesized_expression "(9 < uVar6)" ( (binary_expression "9 < uVar6" number_literal < identifier) )) (compound_statement "{\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }" { (expression_statement "uVar6 = bVar1 - 0x37 & 0xf;" (assignment_expression "uVar6 = bVar1 - 0x37 & 0xf" identifier = (binary_expression "bVar1 - 0x37 & 0xf" (binary_expression "bVar1 - 0x37" identifier - number_literal) & number_literal)) ;) })) (expression_statement "sVar2 = sVar2 - 1;" (assignment_expression "sVar2 = sVar2 - 1" identifier = (binary_expression "sVar2 - 1" identifier - number_literal)) ;) (expression_statement "iVar7 = iVar7 * 0x10 + uVar6;" (assignment_expression "iVar7 = iVar7 * 0x10 + uVar6" identifier = (binary_expression "iVar7 * 0x10 + uVar6" (binary_expression "iVar7 * 0x10" identifier * number_literal) + identifier)) ;) (if_statement "if ((sVar2 & 1) != 0) break;" if (parenthesized_expression "((sVar2 & 1) != 0)" ( (binary_expression "(sVar2 & 1) != 0" (parenthesized_expression "(sVar2 & 1)" ( (binary_expression "sVar2 & 1" identifier & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "*(char *)puVar3 = (char)iVar7;" (assignment_expression "*(char *)puVar3 = (char)iVar7" (pointer_expression "*(char *)puVar3" * (cast_expression "(char *)puVar3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(char)iVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (if_statement "if (sVar2 == 0) {\n              return puVar5;\n            }" if (parenthesized_expression "(sVar2 == 0)" ( (binary_expression "sVar2 == 0" identifier == number_literal) )) (compound_statement "{\n              return puVar5;\n            }" { (return_statement "return puVar5;" return identifier ;) })) (expression_statement "bVar1 = *pbVar9;" (assignment_expression "bVar1 = *pbVar9" identifier = (pointer_expression "*pbVar9" * identifier)) ;) (expression_statement "puVar3 = (ulong *)((long)puVar3 + 1);" (assignment_expression "puVar3 = (ulong *)((long)puVar3 + 1)" identifier = (cast_expression "(ulong *)((long)puVar3 + 1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar3 + 1)" ( (binary_expression "(long)puVar3 + 1" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })) (expression_statement "puVar3 = (ulong *)xmalloc(0x13);" (assignment_expression "puVar3 = (ulong *)xmalloc(0x13)" identifier = (cast_expression "(ulong *)xmalloc(0x13)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x13)" identifier (argument_list "(0x13)" ( number_literal ))))) ;) (expression_statement "uVar6 = (uint)DAT_0017fd20;" (assignment_expression "uVar6 = (uint)DAT_0017fd20" identifier = (cast_expression "(uint)DAT_0017fd20" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*puVar3 = 4;" (assignment_expression "*puVar3 = 4" (pointer_expression "*puVar3" * identifier) = number_literal) ;) (expression_statement "*(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;" (assignment_expression "*(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (pointer_expression "*(uint *)(puVar3 + 1)" * (cast_expression "(uint *)(puVar3 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 1)" ( (binary_expression "puVar3 + 1" identifier + number_literal) )))) = (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8" (binary_expression "uVar6 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar6 & 0xff0000) >> 8" (parenthesized_expression "(uVar6 & 0xff0000)" ( (binary_expression "uVar6 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar6 & 0xff00) << 8" (parenthesized_expression "(uVar6 & 0xff00)" ( (binary_expression "uVar6 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar6 << 0x18" identifier << number_literal))) ;) (return_statement "return puVar3;" return identifier ;) })) (if_statement "if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }" if (parenthesized_expression "((param_3 != 0) && (DAT_0017fd00 != 1))" ( (binary_expression "(param_3 != 0) && (DAT_0017fd00 != 1)" (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) && (parenthesized_expression "(DAT_0017fd00 != 1)" ( (binary_expression "DAT_0017fd00 != 1" identifier != number_literal) ))) )) (compound_statement "{\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }" { (expression_statement "uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);" (assignment_expression "uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" identifier = (call_expression "dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" identifier (argument_list "(0,"%F%P:%pS: nonconstant expression for %s\n",5)" ( number_literal , (string_literal ""%F%P:%pS: nonconstant expression for %s\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "FUN_001251f0(uVar4,param_1,param_3);" (call_expression "FUN_001251f0(uVar4,param_1,param_3)" identifier (argument_list "(uVar4,param_1,param_3)" ( identifier , identifier , identifier ))) ;) })) })) (return_statement "return param_2;" return identifier ;) })))
(translation_unit "fill_type * exp_get_fill(etree_type *tree,fill_type *def,char *name)\n\n{\n  byte bVar1;\n  size_t sVar2;\n  fill_type *pfVar3;\n  char *fmt;\n  uint uVar4;\n  int iVar5;\n  ulong uVar6;\n  byte *pbVar7;\n  uchar *puVar8;\n  \n  if (tree != (etree_type *)0x0) {\n    expld.rel_from_abs = 0;\n    expld.section = (asection *)(_bfd_std_section + 0x230);\n    expld.dot = 0;\n    expld.dotp = (bfd_vma *)0x0;\n    exp_fold_tree_1(tree);\n    if (expld.result.valid_p != 0) {\n      if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }\n      pfVar3 = (fill_type *)xmalloc(0x13);\n      uVar4 = (uint)expld.result.value;\n      pfVar3->size = 4;\n      *(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n      return pfVar3;\n    }\n    if ((name != (char *)0x0) && (expld.phase != lang_mark_phase_enum)) {\n      fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      einfo(fmt,tree,name);\n    }\n  }\n  return def;\n}\n\n" (function_definition "fill_type * exp_get_fill(etree_type *tree,fill_type *def,char *name)\n\n{\n  byte bVar1;\n  size_t sVar2;\n  fill_type *pfVar3;\n  char *fmt;\n  uint uVar4;\n  int iVar5;\n  ulong uVar6;\n  byte *pbVar7;\n  uchar *puVar8;\n  \n  if (tree != (etree_type *)0x0) {\n    expld.rel_from_abs = 0;\n    expld.section = (asection *)(_bfd_std_section + 0x230);\n    expld.dot = 0;\n    expld.dotp = (bfd_vma *)0x0;\n    exp_fold_tree_1(tree);\n    if (expld.result.valid_p != 0) {\n      if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }\n      pfVar3 = (fill_type *)xmalloc(0x13);\n      uVar4 = (uint)expld.result.value;\n      pfVar3->size = 4;\n      *(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n      return pfVar3;\n    }\n    if ((name != (char *)0x0) && (expld.phase != lang_mark_phase_enum)) {\n      fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      einfo(fmt,tree,name);\n    }\n  }\n  return def;\n}" type_identifier (pointer_declarator "* exp_get_fill(etree_type *tree,fill_type *def,char *name)" * (function_declarator "exp_get_fill(etree_type *tree,fill_type *def,char *name)" identifier (parameter_list "(etree_type *tree,fill_type *def,char *name)" ( (parameter_declaration "etree_type *tree" type_identifier (pointer_declarator "*tree" * identifier)) , (parameter_declaration "fill_type *def" type_identifier (pointer_declarator "*def" * identifier)) , (parameter_declaration "char *name" primitive_type (pointer_declarator "*name" * identifier)) )))) (compound_statement "{\n  byte bVar1;\n  size_t sVar2;\n  fill_type *pfVar3;\n  char *fmt;\n  uint uVar4;\n  int iVar5;\n  ulong uVar6;\n  byte *pbVar7;\n  uchar *puVar8;\n  \n  if (tree != (etree_type *)0x0) {\n    expld.rel_from_abs = 0;\n    expld.section = (asection *)(_bfd_std_section + 0x230);\n    expld.dot = 0;\n    expld.dotp = (bfd_vma *)0x0;\n    exp_fold_tree_1(tree);\n    if (expld.result.valid_p != 0) {\n      if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }\n      pfVar3 = (fill_type *)xmalloc(0x13);\n      uVar4 = (uint)expld.result.value;\n      pfVar3->size = 4;\n      *(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n      return pfVar3;\n    }\n    if ((name != (char *)0x0) && (expld.phase != lang_mark_phase_enum)) {\n      fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      einfo(fmt,tree,name);\n    }\n  }\n  return def;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "fill_type *pfVar3;" type_identifier (pointer_declarator "*pfVar3" * identifier) ;) (declaration "char *fmt;" primitive_type (pointer_declarator "*fmt" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "byte *pbVar7;" type_identifier (pointer_declarator "*pbVar7" * identifier) ;) (declaration "uchar *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (if_statement "if (tree != (etree_type *)0x0) {\n    expld.rel_from_abs = 0;\n    expld.section = (asection *)(_bfd_std_section + 0x230);\n    expld.dot = 0;\n    expld.dotp = (bfd_vma *)0x0;\n    exp_fold_tree_1(tree);\n    if (expld.result.valid_p != 0) {\n      if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }\n      pfVar3 = (fill_type *)xmalloc(0x13);\n      uVar4 = (uint)expld.result.value;\n      pfVar3->size = 4;\n      *(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n      return pfVar3;\n    }\n    if ((name != (char *)0x0) && (expld.phase != lang_mark_phase_enum)) {\n      fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      einfo(fmt,tree,name);\n    }\n  }" if (parenthesized_expression "(tree != (etree_type *)0x0)" ( (binary_expression "tree != (etree_type *)0x0" identifier != (cast_expression "(etree_type *)0x0" ( (type_descriptor "etree_type *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    expld.rel_from_abs = 0;\n    expld.section = (asection *)(_bfd_std_section + 0x230);\n    expld.dot = 0;\n    expld.dotp = (bfd_vma *)0x0;\n    exp_fold_tree_1(tree);\n    if (expld.result.valid_p != 0) {\n      if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }\n      pfVar3 = (fill_type *)xmalloc(0x13);\n      uVar4 = (uint)expld.result.value;\n      pfVar3->size = 4;\n      *(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n      return pfVar3;\n    }\n    if ((name != (char *)0x0) && (expld.phase != lang_mark_phase_enum)) {\n      fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      einfo(fmt,tree,name);\n    }\n  }" { (expression_statement "expld.rel_from_abs = 0;" (assignment_expression "expld.rel_from_abs = 0" (field_expression "expld.rel_from_abs" identifier . field_identifier) = number_literal) ;) (expression_statement "expld.section = (asection *)(_bfd_std_section + 0x230);" (assignment_expression "expld.section = (asection *)(_bfd_std_section + 0x230)" (field_expression "expld.section" identifier . field_identifier) = (cast_expression "(asection *)(_bfd_std_section + 0x230)" ( (type_descriptor "asection *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(_bfd_std_section + 0x230)" ( (binary_expression "_bfd_std_section + 0x230" identifier + number_literal) )))) ;) (expression_statement "expld.dot = 0;" (assignment_expression "expld.dot = 0" (field_expression "expld.dot" identifier . field_identifier) = number_literal) ;) (expression_statement "expld.dotp = (bfd_vma *)0x0;" (assignment_expression "expld.dotp = (bfd_vma *)0x0" (field_expression "expld.dotp" identifier . field_identifier) = (cast_expression "(bfd_vma *)0x0" ( (type_descriptor "bfd_vma *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "exp_fold_tree_1(tree);" (call_expression "exp_fold_tree_1(tree)" identifier (argument_list "(tree)" ( identifier ))) ;) (if_statement "if (expld.result.valid_p != 0) {\n      if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }\n      pfVar3 = (fill_type *)xmalloc(0x13);\n      uVar4 = (uint)expld.result.value;\n      pfVar3->size = 4;\n      *(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n      return pfVar3;\n    }" if (parenthesized_expression "(expld.result.valid_p != 0)" ( (binary_expression "expld.result.valid_p != 0" (field_expression "expld.result.valid_p" (field_expression "expld.result" identifier . field_identifier) . field_identifier) != number_literal) )) (compound_statement "{\n      if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }\n      pfVar3 = (fill_type *)xmalloc(0x13);\n      uVar4 = (uint)expld.result.value;\n      pfVar3->size = 4;\n      *(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;\n      return pfVar3;\n    }" { (if_statement "if ((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)) {\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }" if (parenthesized_expression "((expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0))" ( (binary_expression "(expld.result.str != (char *)0x0) && (sVar2 = strlen(expld.result.str), sVar2 != 0)" (parenthesized_expression "(expld.result.str != (char *)0x0)" ( (binary_expression "expld.result.str != (char *)0x0" (field_expression "expld.result.str" (field_expression "expld.result" identifier . field_identifier) . field_identifier) != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(sVar2 = strlen(expld.result.str), sVar2 != 0)" ( (comma_expression "sVar2 = strlen(expld.result.str), sVar2 != 0" (assignment_expression "sVar2 = strlen(expld.result.str)" identifier = (call_expression "strlen(expld.result.str)" identifier (argument_list "(expld.result.str)" ( (field_expression "expld.result.str" (field_expression "expld.result" identifier . field_identifier) . field_identifier) )))) , (binary_expression "sVar2 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n        uVar6 = sVar2 + 1 >> 1;\n        pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);\n        pbVar7 = (byte *)expld.result.str;\n        iVar5 = 0;\n        pfVar3->size = uVar6;\n        puVar8 = pfVar3->data;\n        do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );\n      }" { (expression_statement "uVar6 = sVar2 + 1 >> 1;" (assignment_expression "uVar6 = sVar2 + 1 >> 1" identifier = (binary_expression "sVar2 + 1 >> 1" (binary_expression "sVar2 + 1" identifier + number_literal) >> number_literal)) ;) (expression_statement "pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf);" (assignment_expression "pfVar3 = (fill_type *)xmalloc(uVar6 + 0xf)" identifier = (cast_expression "(fill_type *)xmalloc(uVar6 + 0xf)" ( (type_descriptor "fill_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(uVar6 + 0xf)" identifier (argument_list "(uVar6 + 0xf)" ( (binary_expression "uVar6 + 0xf" identifier + number_literal) ))))) ;) (expression_statement "pbVar7 = (byte *)expld.result.str;" (assignment_expression "pbVar7 = (byte *)expld.result.str" identifier = (cast_expression "(byte *)expld.result.str" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "expld.result.str" (field_expression "expld.result" identifier . field_identifier) . field_identifier))) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (expression_statement "pfVar3->size = uVar6;" (assignment_expression "pfVar3->size = uVar6" (field_expression "pfVar3->size" identifier -> field_identifier) = identifier) ;) (expression_statement "puVar8 = pfVar3->data;" (assignment_expression "puVar8 = pfVar3->data" identifier = (field_expression "pfVar3->data" identifier -> field_identifier)) ;) (do_statement "do {\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        } while( true );" do (compound_statement "{\n          bVar1 = *pbVar7;\n          while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }\n        }" { (expression_statement "bVar1 = *pbVar7;" (assignment_expression "bVar1 = *pbVar7" identifier = (pointer_expression "*pbVar7" * identifier)) ;) (while_statement "while( true ) {\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            uVar4 = bVar1 - 0x30;\n            pbVar7 = pbVar7 + 1;\n            if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar5 = iVar5 * 0x10 + uVar4;\n            if ((sVar2 & 1) != 0) break;\n            *puVar8 = (uchar)iVar5;\n            if (sVar2 == 0) {\n              return pfVar3;\n            }\n            bVar1 = *pbVar7;\n            puVar8 = puVar8 + 1;\n            iVar5 = 0;\n          }" { (expression_statement "uVar4 = bVar1 - 0x30;" (assignment_expression "uVar4 = bVar1 - 0x30" identifier = (binary_expression "bVar1 - 0x30" identifier - number_literal)) ;) (expression_statement "pbVar7 = pbVar7 + 1;" (assignment_expression "pbVar7 = pbVar7 + 1" identifier = (binary_expression "pbVar7 + 1" identifier + number_literal)) ;) (if_statement "if (9 < uVar4) {\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }" if (parenthesized_expression "(9 < uVar4)" ( (binary_expression "9 < uVar4" number_literal < identifier) )) (compound_statement "{\n              uVar4 = bVar1 - 0x37 & 0xf;\n            }" { (expression_statement "uVar4 = bVar1 - 0x37 & 0xf;" (assignment_expression "uVar4 = bVar1 - 0x37 & 0xf" identifier = (binary_expression "bVar1 - 0x37 & 0xf" (binary_expression "bVar1 - 0x37" identifier - number_literal) & number_literal)) ;) })) (expression_statement "sVar2 = sVar2 - 1;" (assignment_expression "sVar2 = sVar2 - 1" identifier = (binary_expression "sVar2 - 1" identifier - number_literal)) ;) (expression_statement "iVar5 = iVar5 * 0x10 + uVar4;" (assignment_expression "iVar5 = iVar5 * 0x10 + uVar4" identifier = (binary_expression "iVar5 * 0x10 + uVar4" (binary_expression "iVar5 * 0x10" identifier * number_literal) + identifier)) ;) (if_statement "if ((sVar2 & 1) != 0) break;" if (parenthesized_expression "((sVar2 & 1) != 0)" ( (binary_expression "(sVar2 & 1) != 0" (parenthesized_expression "(sVar2 & 1)" ( (binary_expression "sVar2 & 1" identifier & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "*puVar8 = (uchar)iVar5;" (assignment_expression "*puVar8 = (uchar)iVar5" (pointer_expression "*puVar8" * identifier) = (cast_expression "(uchar)iVar5" ( (type_descriptor "uchar" type_identifier) ) identifier)) ;) (if_statement "if (sVar2 == 0) {\n              return pfVar3;\n            }" if (parenthesized_expression "(sVar2 == 0)" ( (binary_expression "sVar2 == 0" identifier == number_literal) )) (compound_statement "{\n              return pfVar3;\n            }" { (return_statement "return pfVar3;" return identifier ;) })) (expression_statement "bVar1 = *pbVar7;" (assignment_expression "bVar1 = *pbVar7" identifier = (pointer_expression "*pbVar7" * identifier)) ;) (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })) (expression_statement "pfVar3 = (fill_type *)xmalloc(0x13);" (assignment_expression "pfVar3 = (fill_type *)xmalloc(0x13)" identifier = (cast_expression "(fill_type *)xmalloc(0x13)" ( (type_descriptor "fill_type *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x13)" identifier (argument_list "(0x13)" ( number_literal ))))) ;) (expression_statement "uVar4 = (uint)expld.result.value;" (assignment_expression "uVar4 = (uint)expld.result.value" identifier = (cast_expression "(uint)expld.result.value" ( (type_descriptor "uint" type_identifier) ) (field_expression "expld.result.value" (field_expression "expld.result" identifier . field_identifier) . field_identifier))) ;) (expression_statement "pfVar3->size = 4;" (assignment_expression "pfVar3->size = 4" (field_expression "pfVar3->size" identifier -> field_identifier) = number_literal) ;) (expression_statement "*(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18;" (assignment_expression "*(uint *)pfVar3->data =\n           uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (pointer_expression "*(uint *)pfVar3->data" * (cast_expression "(uint *)pfVar3->data" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pfVar3->data" identifier -> field_identifier))) = (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8 | uVar4 << 0x18" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8 | (uVar4 & 0xff00) << 8" (binary_expression "uVar4 >> 0x18 | (uVar4 & 0xff0000) >> 8" (binary_expression "uVar4 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar4 & 0xff0000) >> 8" (parenthesized_expression "(uVar4 & 0xff0000)" ( (binary_expression "uVar4 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar4 & 0xff00) << 8" (parenthesized_expression "(uVar4 & 0xff00)" ( (binary_expression "uVar4 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar4 << 0x18" identifier << number_literal))) ;) (return_statement "return pfVar3;" return identifier ;) })) (if_statement "if ((name != (char *)0x0) && (expld.phase != lang_mark_phase_enum)) {\n      fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      einfo(fmt,tree,name);\n    }" if (parenthesized_expression "((name != (char *)0x0) && (expld.phase != lang_mark_phase_enum))" ( (binary_expression "(name != (char *)0x0) && (expld.phase != lang_mark_phase_enum)" (parenthesized_expression "(name != (char *)0x0)" ( (binary_expression "name != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(expld.phase != lang_mark_phase_enum)" ( (binary_expression "expld.phase != lang_mark_phase_enum" (field_expression "expld.phase" identifier . field_identifier) != identifier) ))) )) (compound_statement "{\n      fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      einfo(fmt,tree,name);\n    }" { (expression_statement "fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);" (assignment_expression "fmt = (char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" identifier = (cast_expression "(char *)dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" identifier (argument_list "(0,"%F%P:%pS: nonconstant expression for %s\n",5)" ( number_literal , (string_literal ""%F%P:%pS: nonconstant expression for %s\n"" " string_content escape_sequence ") , number_literal ))))) ;) (expression_statement "einfo(fmt,tree,name);" (call_expression "einfo(fmt,tree,name)" identifier (argument_list "(fmt,tree,name)" ( identifier , identifier , identifier ))) ;) })) })) (return_statement "return def;" return identifier ;) })))
(translation_unit "ulong * FUN_001238c0(long param_1,ulong *param_2,long param_3)\n\n{\n  byte bVar1;\n  size_t sVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  uint uVar6;\n  int iVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  \n  if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }\n  return param_2;\n}\n\n" (function_definition "ulong * FUN_001238c0(long param_1,ulong *param_2,long param_3)\n\n{\n  byte bVar1;\n  size_t sVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  uint uVar6;\n  int iVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  \n  if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }\n  return param_2;\n}" type_identifier (pointer_declarator "* FUN_001238c0(long param_1,ulong *param_2,long param_3)" * (function_declarator "FUN_001238c0(long param_1,ulong *param_2,long param_3)" identifier (parameter_list "(long param_1,ulong *param_2,long param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) )))) (compound_statement "{\n  byte bVar1;\n  size_t sVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  uint uVar6;\n  int iVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  \n  if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }\n  return param_2;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "ulong *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "ulong *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "byte *pbVar9;" type_identifier (pointer_declarator "*pbVar9" * identifier) ;) (if_statement "if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }" if (parenthesized_expression "(param_1 != 0)" ( (binary_expression "param_1 != 0" identifier != number_literal) )) (compound_statement "{\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }" { (expression_statement "DAT_0017fd08 = 0;" (assignment_expression "DAT_0017fd08 = 0" identifier = number_literal) ;) (expression_statement "DAT_0017fd50 = 0x17ed50;" (assignment_expression "DAT_0017fd50 = 0x17ed50" identifier = number_literal) ;) (expression_statement "DAT_0017fd40 = 0;" (assignment_expression "DAT_0017fd40 = 0" identifier = number_literal) ;) (expression_statement "DAT_0017fd48 = 0;" (assignment_expression "DAT_0017fd48 = 0" identifier = number_literal) ;) (expression_statement "FUN_00121580();" (call_expression "FUN_00121580()" identifier (argument_list "()" ( ))) ;) (if_statement "if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }" if (parenthesized_expression "(DAT_0017fd38 != 0)" ( (binary_expression "DAT_0017fd38 != 0" identifier != number_literal) )) (compound_statement "{\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }" { (if_statement "if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }" if (parenthesized_expression "((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0))" ( (binary_expression "(DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)" (parenthesized_expression "(DAT_0017fd28 != (byte *)0x0)" ( (binary_expression "DAT_0017fd28 != (byte *)0x0" identifier != (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)" ( (comma_expression "sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0" (assignment_expression "sVar2 = strlen((char *)DAT_0017fd28)" identifier = (call_expression "strlen((char *)DAT_0017fd28)" identifier (argument_list "((char *)DAT_0017fd28)" ( (cast_expression "(char *)DAT_0017fd28" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) )))) , (binary_expression "sVar2 != 0" identifier != number_literal)) ))) )) (compound_statement "{\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }" { (expression_statement "uVar8 = sVar2 + 1 >> 1;" (assignment_expression "uVar8 = sVar2 + 1 >> 1" identifier = (binary_expression "sVar2 + 1 >> 1" (binary_expression "sVar2 + 1" identifier + number_literal) >> number_literal)) ;) (expression_statement "puVar5 = (ulong *)xmalloc(uVar8 + 0xf);" (assignment_expression "puVar5 = (ulong *)xmalloc(uVar8 + 0xf)" identifier = (cast_expression "(ulong *)xmalloc(uVar8 + 0xf)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(uVar8 + 0xf)" identifier (argument_list "(uVar8 + 0xf)" ( (binary_expression "uVar8 + 0xf" identifier + number_literal) ))))) ;) (expression_statement "pbVar9 = DAT_0017fd28;" (assignment_expression "pbVar9 = DAT_0017fd28" identifier = identifier) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "*puVar5 = uVar8;" (assignment_expression "*puVar5 = uVar8" (pointer_expression "*puVar5" * identifier) = identifier) ;) (expression_statement "puVar3 = puVar5 + 1;" (assignment_expression "puVar3 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) (do_statement "do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );" do (compound_statement "{\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        }" { (expression_statement "bVar1 = *pbVar9;" (assignment_expression "bVar1 = *pbVar9" identifier = (pointer_expression "*pbVar9" * identifier)) ;) (while_statement "while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }" { (expression_statement "uVar6 = bVar1 - 0x30;" (assignment_expression "uVar6 = bVar1 - 0x30" identifier = (binary_expression "bVar1 - 0x30" identifier - number_literal)) ;) (expression_statement "pbVar9 = pbVar9 + 1;" (assignment_expression "pbVar9 = pbVar9 + 1" identifier = (binary_expression "pbVar9 + 1" identifier + number_literal)) ;) (if_statement "if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }" if (parenthesized_expression "(9 < uVar6)" ( (binary_expression "9 < uVar6" number_literal < identifier) )) (compound_statement "{\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }" { (expression_statement "uVar6 = bVar1 - 0x37 & 0xf;" (assignment_expression "uVar6 = bVar1 - 0x37 & 0xf" identifier = (binary_expression "bVar1 - 0x37 & 0xf" (binary_expression "bVar1 - 0x37" identifier - number_literal) & number_literal)) ;) })) (expression_statement "sVar2 = sVar2 - 1;" (assignment_expression "sVar2 = sVar2 - 1" identifier = (binary_expression "sVar2 - 1" identifier - number_literal)) ;) (expression_statement "iVar7 = iVar7 * 0x10 + uVar6;" (assignment_expression "iVar7 = iVar7 * 0x10 + uVar6" identifier = (binary_expression "iVar7 * 0x10 + uVar6" (binary_expression "iVar7 * 0x10" identifier * number_literal) + identifier)) ;) (if_statement "if ((sVar2 & 1) != 0) break;" if (parenthesized_expression "((sVar2 & 1) != 0)" ( (binary_expression "(sVar2 & 1) != 0" (parenthesized_expression "(sVar2 & 1)" ( (binary_expression "sVar2 & 1" identifier & number_literal) )) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "*(char *)puVar3 = (char)iVar7;" (assignment_expression "*(char *)puVar3 = (char)iVar7" (pointer_expression "*(char *)puVar3" * (cast_expression "(char *)puVar3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = (cast_expression "(char)iVar7" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (if_statement "if (sVar2 == 0) {\n              return puVar5;\n            }" if (parenthesized_expression "(sVar2 == 0)" ( (binary_expression "sVar2 == 0" identifier == number_literal) )) (compound_statement "{\n              return puVar5;\n            }" { (return_statement "return puVar5;" return identifier ;) })) (expression_statement "bVar1 = *pbVar9;" (assignment_expression "bVar1 = *pbVar9" identifier = (pointer_expression "*pbVar9" * identifier)) ;) (expression_statement "puVar3 = (ulong *)((long)puVar3 + 1);" (assignment_expression "puVar3 = (ulong *)((long)puVar3 + 1)" identifier = (cast_expression "(ulong *)((long)puVar3 + 1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar3 + 1)" ( (binary_expression "(long)puVar3 + 1" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })) (expression_statement "puVar3 = (ulong *)xmalloc(0x13);" (assignment_expression "puVar3 = (ulong *)xmalloc(0x13)" identifier = (cast_expression "(ulong *)xmalloc(0x13)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x13)" identifier (argument_list "(0x13)" ( number_literal ))))) ;) (expression_statement "uVar6 = (uint)DAT_0017fd20;" (assignment_expression "uVar6 = (uint)DAT_0017fd20" identifier = (cast_expression "(uint)DAT_0017fd20" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "*puVar3 = 4;" (assignment_expression "*puVar3 = 4" (pointer_expression "*puVar3" * identifier) = number_literal) ;) (expression_statement "*(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;" (assignment_expression "*(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (pointer_expression "*(uint *)(puVar3 + 1)" * (cast_expression "(uint *)(puVar3 + 1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar3 + 1)" ( (binary_expression "puVar3 + 1" identifier + number_literal) )))) = (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8" (binary_expression "uVar6 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar6 & 0xff0000) >> 8" (parenthesized_expression "(uVar6 & 0xff0000)" ( (binary_expression "uVar6 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar6 & 0xff00) << 8" (parenthesized_expression "(uVar6 & 0xff00)" ( (binary_expression "uVar6 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar6 << 0x18" identifier << number_literal))) ;) (return_statement "return puVar3;" return identifier ;) })) (if_statement "if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }" if (parenthesized_expression "((param_3 != 0) && (DAT_0017fd00 != 1))" ( (binary_expression "(param_3 != 0) && (DAT_0017fd00 != 1)" (parenthesized_expression "(param_3 != 0)" ( (binary_expression "param_3 != 0" identifier != number_literal) )) && (parenthesized_expression "(DAT_0017fd00 != 1)" ( (binary_expression "DAT_0017fd00 != 1" identifier != number_literal) ))) )) (compound_statement "{\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }" { (expression_statement "uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);" (assignment_expression "uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" identifier = (call_expression "dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" identifier (argument_list "(0,"%F%P:%pS: nonconstant expression for %s\n",5)" ( number_literal , (string_literal ""%F%P:%pS: nonconstant expression for %s\n"" " string_content escape_sequence ") , number_literal )))) ;) (expression_statement "FUN_001251f0(uVar4,param_1,param_3);" (call_expression "FUN_001251f0(uVar4,param_1,param_3)" identifier (argument_list "(uVar4,param_1,param_3)" ( identifier , identifier , identifier ))) ;) })) })) (return_statement "return param_2;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (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 (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) )))) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - LIT) & LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (break_statement break ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) })) }) while (parenthesized_expression ( BOOL )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , (string_literal " string_content escape_sequence ") , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) })) })) (return_statement return IDENT ;) })))
(function_definition "ulong * FUN_001238c0(long param_1,ulong *param_2,long param_3)\n\n{\n  byte bVar1;\n  size_t sVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  uint uVar6;\n  int iVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  \n  if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }\n  return param_2;\n}" (type_identifier "ulong") (pointer_declarator "* FUN_001238c0(long param_1,ulong *param_2,long param_3)" (* "*") (function_declarator "FUN_001238c0(long param_1,ulong *param_2,long param_3)" (identifier "FUN_001238c0") (parameter_list "(long param_1,ulong *param_2,long param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "ulong *param_2" (type_identifier "ulong") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")")))) (compound_statement "{\n  byte bVar1;\n  size_t sVar2;\n  ulong *puVar3;\n  undefined8 uVar4;\n  ulong *puVar5;\n  uint uVar6;\n  int iVar7;\n  ulong uVar8;\n  byte *pbVar9;\n  \n  if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }\n  return param_2;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "size_t sVar2;" (primitive_type "size_t") (identifier "sVar2") (; ";")) (declaration "ulong *puVar3;" (type_identifier "ulong") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "ulong *puVar5;" (type_identifier "ulong") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "ulong uVar8;" (type_identifier "ulong") (identifier "uVar8") (; ";")) (declaration "byte *pbVar9;" (type_identifier "byte") (pointer_declarator "*pbVar9" (* "*") (identifier "pbVar9")) (; ";")) (if_statement "if (param_1 != 0) {\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }" (if "if") (parenthesized_expression "(param_1 != 0)" (( "(") (binary_expression "param_1 != 0" (identifier "param_1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    DAT_0017fd08 = 0;\n    DAT_0017fd50 = 0x17ed50;\n    DAT_0017fd40 = 0;\n    DAT_0017fd48 = 0;\n    FUN_00121580();\n    if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }\n    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }\n  }" ({ "{") (expression_statement "DAT_0017fd08 = 0;" (assignment_expression "DAT_0017fd08 = 0" (identifier "DAT_0017fd08") (= "=") (number_literal "0")) (; ";")) (expression_statement "DAT_0017fd50 = 0x17ed50;" (assignment_expression "DAT_0017fd50 = 0x17ed50" (identifier "DAT_0017fd50") (= "=") (number_literal "0x17ed50")) (; ";")) (expression_statement "DAT_0017fd40 = 0;" (assignment_expression "DAT_0017fd40 = 0" (identifier "DAT_0017fd40") (= "=") (number_literal "0")) (; ";")) (expression_statement "DAT_0017fd48 = 0;" (assignment_expression "DAT_0017fd48 = 0" (identifier "DAT_0017fd48") (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_00121580();" (call_expression "FUN_00121580()" (identifier "FUN_00121580") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (DAT_0017fd38 != 0) {\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }" (if "if") (parenthesized_expression "(DAT_0017fd38 != 0)" (( "(") (binary_expression "DAT_0017fd38 != 0" (identifier "DAT_0017fd38") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }\n      puVar3 = (ulong *)xmalloc(0x13);\n      uVar6 = (uint)DAT_0017fd20;\n      *puVar3 = 4;\n      *(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;\n      return puVar3;\n    }" ({ "{") (if_statement "if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }" (if "if") (parenthesized_expression "((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0))" (( "(") (binary_expression "(DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)" (parenthesized_expression "(DAT_0017fd28 != (byte *)0x0)" (( "(") (binary_expression "DAT_0017fd28 != (byte *)0x0" (identifier "DAT_0017fd28") (!= "!=") (cast_expression "(byte *)0x0" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)" (( "(") (comma_expression "sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0" (assignment_expression "sVar2 = strlen((char *)DAT_0017fd28)" (identifier "sVar2") (= "=") (call_expression "strlen((char *)DAT_0017fd28)" (identifier "strlen") (argument_list "((char *)DAT_0017fd28)" (( "(") (cast_expression "(char *)DAT_0017fd28" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "DAT_0017fd28")) () ")")))) (, ",") (binary_expression "sVar2 != 0" (identifier "sVar2") (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n        uVar8 = sVar2 + 1 >> 1;\n        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);\n        pbVar9 = DAT_0017fd28;\n        iVar7 = 0;\n        *puVar5 = uVar8;\n        puVar3 = puVar5 + 1;\n        do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );\n      }" ({ "{") (expression_statement "uVar8 = sVar2 + 1 >> 1;" (assignment_expression "uVar8 = sVar2 + 1 >> 1" (identifier "uVar8") (= "=") (binary_expression "sVar2 + 1 >> 1" (binary_expression "sVar2 + 1" (identifier "sVar2") (+ "+") (number_literal "1")) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "puVar5 = (ulong *)xmalloc(uVar8 + 0xf);" (assignment_expression "puVar5 = (ulong *)xmalloc(uVar8 + 0xf)" (identifier "puVar5") (= "=") (cast_expression "(ulong *)xmalloc(uVar8 + 0xf)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "xmalloc(uVar8 + 0xf)" (identifier "xmalloc") (argument_list "(uVar8 + 0xf)" (( "(") (binary_expression "uVar8 + 0xf" (identifier "uVar8") (+ "+") (number_literal "0xf")) () ")"))))) (; ";")) (expression_statement "pbVar9 = DAT_0017fd28;" (assignment_expression "pbVar9 = DAT_0017fd28" (identifier "pbVar9") (= "=") (identifier "DAT_0017fd28")) (; ";")) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "*puVar5 = uVar8;" (assignment_expression "*puVar5 = uVar8" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (identifier "uVar8")) (; ";")) (expression_statement "puVar3 = puVar5 + 1;" (assignment_expression "puVar3 = puVar5 + 1" (identifier "puVar3") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (do_statement "do {\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        } while( true );" (do "do") (compound_statement "{\n          bVar1 = *pbVar9;\n          while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }\n        }" ({ "{") (expression_statement "bVar1 = *pbVar9;" (assignment_expression "bVar1 = *pbVar9" (identifier "bVar1") (= "=") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9"))) (; ";")) (while_statement "while( true ) {\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n            uVar6 = bVar1 - 0x30;\n            pbVar9 = pbVar9 + 1;\n            if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }\n            sVar2 = sVar2 - 1;\n            iVar7 = iVar7 * 0x10 + uVar6;\n            if ((sVar2 & 1) != 0) break;\n            *(char *)puVar3 = (char)iVar7;\n            if (sVar2 == 0) {\n              return puVar5;\n            }\n            bVar1 = *pbVar9;\n            puVar3 = (ulong *)((long)puVar3 + 1);\n            iVar7 = 0;\n          }" ({ "{") (expression_statement "uVar6 = bVar1 - 0x30;" (assignment_expression "uVar6 = bVar1 - 0x30" (identifier "uVar6") (= "=") (binary_expression "bVar1 - 0x30" (identifier "bVar1") (- "-") (number_literal "0x30"))) (; ";")) (expression_statement "pbVar9 = pbVar9 + 1;" (assignment_expression "pbVar9 = pbVar9 + 1" (identifier "pbVar9") (= "=") (binary_expression "pbVar9 + 1" (identifier "pbVar9") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (9 < uVar6) {\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }" (if "if") (parenthesized_expression "(9 < uVar6)" (( "(") (binary_expression "9 < uVar6" (number_literal "9") (< "<") (identifier "uVar6")) () ")")) (compound_statement "{\n              uVar6 = bVar1 - 0x37 & 0xf;\n            }" ({ "{") (expression_statement "uVar6 = bVar1 - 0x37 & 0xf;" (assignment_expression "uVar6 = bVar1 - 0x37 & 0xf" (identifier "uVar6") (= "=") (binary_expression "bVar1 - 0x37 & 0xf" (binary_expression "bVar1 - 0x37" (identifier "bVar1") (- "-") (number_literal "0x37")) (& "&") (number_literal "0xf"))) (; ";")) (} "}"))) (expression_statement "sVar2 = sVar2 - 1;" (assignment_expression "sVar2 = sVar2 - 1" (identifier "sVar2") (= "=") (binary_expression "sVar2 - 1" (identifier "sVar2") (- "-") (number_literal "1"))) (; ";")) (expression_statement "iVar7 = iVar7 * 0x10 + uVar6;" (assignment_expression "iVar7 = iVar7 * 0x10 + uVar6" (identifier "iVar7") (= "=") (binary_expression "iVar7 * 0x10 + uVar6" (binary_expression "iVar7 * 0x10" (identifier "iVar7") (* "*") (number_literal "0x10")) (+ "+") (identifier "uVar6"))) (; ";")) (if_statement "if ((sVar2 & 1) != 0) break;" (if "if") (parenthesized_expression "((sVar2 & 1) != 0)" (( "(") (binary_expression "(sVar2 & 1) != 0" (parenthesized_expression "(sVar2 & 1)" (( "(") (binary_expression "sVar2 & 1" (identifier "sVar2") (& "&") (number_literal "1")) () ")")) (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "*(char *)puVar3 = (char)iVar7;" (assignment_expression "*(char *)puVar3 = (char)iVar7" (pointer_expression "*(char *)puVar3" (* "*") (cast_expression "(char *)puVar3" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar3"))) (= "=") (cast_expression "(char)iVar7" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "iVar7"))) (; ";")) (if_statement "if (sVar2 == 0) {\n              return puVar5;\n            }" (if "if") (parenthesized_expression "(sVar2 == 0)" (( "(") (binary_expression "sVar2 == 0" (identifier "sVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              return puVar5;\n            }" ({ "{") (return_statement "return puVar5;" (return "return") (identifier "puVar5") (; ";")) (} "}"))) (expression_statement "bVar1 = *pbVar9;" (assignment_expression "bVar1 = *pbVar9" (identifier "bVar1") (= "=") (pointer_expression "*pbVar9" (* "*") (identifier "pbVar9"))) (; ";")) (expression_statement "puVar3 = (ulong *)((long)puVar3 + 1);" (assignment_expression "puVar3 = (ulong *)((long)puVar3 + 1)" (identifier "puVar3") (= "=") (cast_expression "(ulong *)((long)puVar3 + 1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar3 + 1)" (( "(") (binary_expression "(long)puVar3 + 1" (cast_expression "(long)puVar3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar3")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (expression_statement "puVar3 = (ulong *)xmalloc(0x13);" (assignment_expression "puVar3 = (ulong *)xmalloc(0x13)" (identifier "puVar3") (= "=") (cast_expression "(ulong *)xmalloc(0x13)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "xmalloc(0x13)" (identifier "xmalloc") (argument_list "(0x13)" (( "(") (number_literal "0x13") () ")"))))) (; ";")) (expression_statement "uVar6 = (uint)DAT_0017fd20;" (assignment_expression "uVar6 = (uint)DAT_0017fd20" (identifier "uVar6") (= "=") (cast_expression "(uint)DAT_0017fd20" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "DAT_0017fd20"))) (; ";")) (expression_statement "*puVar3 = 4;" (assignment_expression "*puVar3 = 4" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (number_literal "4")) (; ";")) (expression_statement "*(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;" (assignment_expression "*(uint *)(puVar3 + 1) =\n           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (pointer_expression "*(uint *)(puVar3 + 1)" (* "*") (cast_expression "(uint *)(puVar3 + 1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar3 + 1)" (( "(") (binary_expression "puVar3 + 1" (identifier "puVar3") (+ "+") (number_literal "1")) () ")")))) (= "=") (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8" (binary_expression "uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8" (binary_expression "uVar6 >> 0x18" (identifier "uVar6") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar6 & 0xff0000) >> 8" (parenthesized_expression "(uVar6 & 0xff0000)" (( "(") (binary_expression "uVar6 & 0xff0000" (identifier "uVar6") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar6 & 0xff00) << 8" (parenthesized_expression "(uVar6 & 0xff00)" (( "(") (binary_expression "uVar6 & 0xff00" (identifier "uVar6") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar6 << 0x18" (identifier "uVar6") (<< "<<") (number_literal "0x18")))) (; ";")) (return_statement "return puVar3;" (return "return") (identifier "puVar3") (; ";")) (} "}"))) (if_statement "if ((param_3 != 0) && (DAT_0017fd00 != 1)) {\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }" (if "if") (parenthesized_expression "((param_3 != 0) && (DAT_0017fd00 != 1))" (( "(") (binary_expression "(param_3 != 0) && (DAT_0017fd00 != 1)" (parenthesized_expression "(param_3 != 0)" (( "(") (binary_expression "param_3 != 0" (identifier "param_3") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(DAT_0017fd00 != 1)" (( "(") (binary_expression "DAT_0017fd00 != 1" (identifier "DAT_0017fd00") (!= "!=") (number_literal "1")) () ")"))) () ")")) (compound_statement "{\n      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);\n      FUN_001251f0(uVar4,param_1,param_3);\n    }" ({ "{") (expression_statement "uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);" (assignment_expression "uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" (identifier "uVar4") (= "=") (call_expression "dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5)" (identifier "dcgettext") (argument_list "(0,"%F%P:%pS: nonconstant expression for %s\n",5)" (( "(") (number_literal "0") (, ",") (string_literal ""%F%P:%pS: nonconstant expression for %s\n"" (" """) (string_content "%F%P:%pS: nonconstant expression for %s") (escape_sequence "\n") (" """)) (, ",") (number_literal "5") () ")")))) (; ";")) (expression_statement "FUN_001251f0(uVar4,param_1,param_3);" (call_expression "FUN_001251f0(uVar4,param_1,param_3)" (identifier "FUN_001251f0") (argument_list "(uVar4,param_1,param_3)" (( "(") (identifier "uVar4") (, ",") (identifier "param_1") (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}")))

type_1 * function_1(type_2 *var_1,type_1 *def,char *var_13)

{
  type_3 var_8;
  size_t var_5;
  type_1 *pfVar3;
  char *fmt;
  type_4 var_10;
  int var_11;
  type_5 var_7;
  type_3 *var_9;
  type_6 *var_12;
  
  if (var_1 != (type_2 *)0x0) {
    expld.rel_from_abs = 0;
    expld.section = (type_7 *)(var_2 + 0x230);
    expld.dot = 0;
    expld.dotp = (type_8 *)0x0;
    var_3(var_1);
    if (expld.result.valid_p != 0) {
      if ((expld.result.str != (char *)0x0) && (var_5 = var_4(expld.result.str), var_5 != 0)) {
        var_7 = var_5 + 1 >> 1;
        pfVar3 = (type_1 *)var_6(var_7 + 0xf);
        var_9 = (type_3 *)expld.result.str;
        var_11 = 0;
        pfVar3->size = var_7;
        var_12 = pfVar3->data;
        do {
          var_8 = *var_9;
          while( true ) {
            var_10 = var_8 - 0x30;
            var_9 = var_9 + 1;
            if (9 < var_10) {
              var_10 = var_8 - 0x37 & 0xf;
            }
            var_5 = var_5 - 1;
            var_11 = var_11 * 0x10 + var_10;
            if ((var_5 & 1) != 0) break;
            *var_12 = (type_6)var_11;
            if (var_5 == 0) {
              return pfVar3;
            }
            var_8 = *var_9;
            var_12 = var_12 + 1;
            var_11 = 0;
          }
        } while( true );
      }
      pfVar3 = (type_1 *)var_6(0x13);
      var_10 = (type_4)expld.result.value;
      pfVar3->size = 4;
      *(type_4 *)pfVar3->data =
           var_10 >> 0x18 | (var_10 & 0xff0000) >> 8 | (var_10 & 0xff00) << 8 | var_10 << 0x18;
      return pfVar3;
    }
    if ((var_13 != (char *)0x0) && (expld.phase != var_14)) {
      fmt = (char *)var_15(0,"%F%P:%pS: nonconstant expression for %s\n",5);
      var_16(fmt,var_1,var_13);
    }
  }
  return def;
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (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) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) condition: (parenthesized_expression (true))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (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: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal) (string_literal (string_content) (escape_sequence)) (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))))))) (return_statement (identifier)))))

ulong * MASKED(long param_1,ulong *param_2,long param_3)

{
  byte bVar1;
  size_t sVar2;
  ulong *puVar3;
  undefined8 uVar4;
  ulong *puVar5;
  uint uVar6;
  int iVar7;
  ulong uVar8;
  byte *pbVar9;
  
  if (param_1 != 0) {
    DAT_0017fd08 = 0;
    DAT_0017fd50 = 0x17ed50;
    DAT_0017fd40 = 0;
    DAT_0017fd48 = 0;
    FUN_00121580();
    if (DAT_0017fd38 != 0) {
      if ((DAT_0017fd28 != (byte *)0x0) && (sVar2 = strlen((char *)DAT_0017fd28), sVar2 != 0)) {
        uVar8 = sVar2 + 1 >> 1;
        puVar5 = (ulong *)xmalloc(uVar8 + 0xf);
        pbVar9 = DAT_0017fd28;
        iVar7 = 0;
        *puVar5 = uVar8;
        puVar3 = puVar5 + 1;
        do {
          bVar1 = *pbVar9;
          while( true ) {
            uVar6 = bVar1 - 0x30;
            pbVar9 = pbVar9 + 1;
            if (9 < uVar6) {
              uVar6 = bVar1 - 0x37 & 0xf;
            }
            sVar2 = sVar2 - 1;
            iVar7 = iVar7 * 0x10 + uVar6;
            if ((sVar2 & 1) != 0) break;
            *(char *)puVar3 = (char)iVar7;
            if (sVar2 == 0) {
              return puVar5;
            }
            bVar1 = *pbVar9;
            puVar3 = (ulong *)((long)puVar3 + 1);
            iVar7 = 0;
          }
        } while( true );
      }
      puVar3 = (ulong *)xmalloc(0x13);
      uVar6 = (uint)DAT_0017fd20;
      *puVar3 = 4;
      *(uint *)(puVar3 + 1) =
           uVar6 >> 0x18 | (uVar6 & 0xff0000) >> 8 | (uVar6 & 0xff00) << 8 | uVar6 << 0x18;
      return puVar3;
    }
    if ((param_3 != 0) && (DAT_0017fd00 != 1)) {
      uVar4 = dcgettext(0,"%F%P:%pS: nonconstant expression for %s\n",5);
      FUN_001251f0(uVar4,param_1,param_3);
    }
  }
  return param_2;
}

